Name: series-workflowjftkl Phase: Succeeded StartedAt: 2026-09-04 13:56:49 +0000 UTC FinishedAt: 2026-09-04 18:10:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[0] Phase: Succeeded StartedAt: 2026-09-04 13:56:49 +0000 UTC FinishedAt: 2026-09-04 14:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 13:56:49 +0000 UTC FinishedAt: 2026-09-04 14:28:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_IGMP_SNOOPING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_IGMP_SNOOPING" ], "series_id": "fec8cfcf-e4d8-4bca-8c06-5998755fcf56" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_multicast_new_port_group", "br_multicast_del_port_group" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cCYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCBgaGxpc3RfYWRkX2hlYWRfcmN1YCwgYFJDVV9JTklUX1BPSU5URVJgLCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYW5kIGBrZnJlZV9yY3VgIGFyZSB1c2VkIGNvcnJlY3RseSBmb3IgYHBvcnQtXHUwMDNlbWdsaXN0YCBhbmQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgLCBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgcmVhZGVycyAoc3VjaCBhcyBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgKSBmcm9tIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3Igb2JzZXJ2aW5nIHBhcnRpYWxseSBwdWJsaXNoZWQgZW50cmllcy5cblxuVGhlIGFsbG9jYXRlZCBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAgc3RydWN0dXJlIGlzIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG92ZXJmbG93cywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBDb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgUkNVIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZ3JvdXAgbGlzdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1Utc2FmZSBwcmltaXRpdmVzIChobGlzdF9hZGRfaGVhZF9yY3UsIGhsaXN0X2RlbF9pbml0X3JjdSwgUkNVX0lOSVRfUE9JTlRFUiwgYW5kIGtmcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGluIHRoZSBicmlkZ2UgSUdNUCBzbm9vcGluZyBzdWJzeXN0ZW0sIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsvTURCIGludGVyZmFjZXMgYW5kIG11bHRpY2FzdCB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDNjM2RjM2NkMzVjYmE3MmE1NDVmZTAzNzMwNDFiMmU1NGRkNThjYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6Mjc6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbmluZGV4IDNlOWIxMGY4YWJmMWQuLjJmOWJiMzBlMWExZjYgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5AQCAtMTQ0MSwxNiAmIzQzOzE0NDEsMTcgQEAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKFxuIFx0XHRnb3RvIGZyZWVfb3V0O1xuIFx0fVxuIFxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKHAtXHUwMDNlbmV4dCwgbmV4dCk7XG4gXHR0aW1lcl9zZXR1cChcdTAwMjZwLVx1MDAzZXRpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9leHBpcmVkLCAwKTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNnAtXHUwMDNlcmV4bWl0X3RpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9yZXhtaXQsIDApO1xuLVx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2cC1cdTAwM2VtZ2xpc3QsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0KTtcbiBcbiBcdGlmIChzcmMpXG4gXHRcdG1lbWNweShwLVx1MDAzZWV0aF9hZGRyLCBzcmMsIEVUSF9BTEVOKTtcbiBcdGVsc2VcbiBcdFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKHAtXHUwMDNlZXRoX2FkZHIpO1xuIFxuJiM0MztcdFJDVV9JTklUX1BPSU5URVIocC1cdTAwM2VuZXh0LCBuZXh0KTtcbiYjNDM7XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2cC1cdTAwM2VtZ2xpc3QsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0KTtcbiYjNDM7XG4gXHRyZXR1cm4gcDtcbiBcbiBmcmVlX291dDpcbkBAIC0xNDY1LDExICYjNDM7MTQ2NiwxMSBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxuIFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtXHUwMDNla2V5LnBvcnQ7XG4gXHRfX3UxNiB2aWQgPSBwLVx1MDAzZWtleS5hZGRyLnZpZDtcbiBcbi1cdGhsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlbWdsaXN0KTtcbiYjNDM7XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2cC1cdTAwM2VtZ2xpc3QpO1xuIFx0aWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFx1MDAyNnAtXHUwMDNla2V5LmFkZHIpKVxuIFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnBvcnQtXHUwMDNlYnItXHUwMDNlc2dfcG9ydF90YmwsIFx1MDAyNnAtXHUwMDNlcmhub2RlLFxuIFx0XHRcdFx0ICAgICAgIGJyX3NnX3BvcnRfcmh0X3BhcmFtcyk7XG4tXHRrZnJlZShwKTtcbiYjNDM7XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjKHBvcnQsIHZpZCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cCYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZ3JvdXAgbGlzdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1Utc2FmZSBwcmltaXRpdmVzIChobGlzdF9hZGRfaGVhZF9yY3UsIGhsaXN0X2RlbF9pbml0X3JjdSwgUkNVX0lOSVRfUE9JTlRFUiwgYW5kIGtmcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGluIHRoZSBicmlkZ2UgSUdNUCBzbm9vcGluZyBzdWJzeXN0ZW0sIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsvTURCIGludGVyZmFjZXMgYW5kIG11bHRpY2FzdCB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDNjM2RjM2NkMzVjYmE3MmE1NDVmZTAzNzMwNDFiMmU1NGRkNThjYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTQ6Mjc6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwppbmRleCAzZTliMTBmOGFiZjFkLi4yZjliYjMwZTFhMWY2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTE0NDEsMTYgJiM0MzsxNDQxLDE3IEBAIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cCgKIAkJZ290byBmcmVlX291dDsKIAl9CiAKLQlyY3VfYXNzaWduX3BvaW50ZXIocC0mZ3Q7bmV4dCwgbmV4dCk7CiAJdGltZXJfc2V0dXAoJmFtcDtwLSZndDt0aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZCwgMCk7CiAJdGltZXJfc2V0dXAoJmFtcDtwLSZndDtyZXhtaXRfdGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3JleG1pdCwgMCk7Ci0JaGxpc3RfYWRkX2hlYWQoJmFtcDtwLSZndDttZ2xpc3QsICZhbXA7cG9ydC0mZ3Q7bWdsaXN0KTsKIAogCWlmIChzcmMpCiAJCW1lbWNweShwLSZndDtldGhfYWRkciwgc3JjLCBFVEhfQUxFTik7CiAJZWxzZQogCQlldGhfYnJvYWRjYXN0X2FkZHIocC0mZ3Q7ZXRoX2FkZHIpOwogCiYjNDM7CVJDVV9JTklUX1BPSU5URVIocC0mZ3Q7bmV4dCwgbmV4dCk7CiYjNDM7CWhsaXN0X2FkZF9oZWFkX3JjdSgmYW1wO3AtJmd0O21nbGlzdCwgJmFtcDtwb3J0LSZndDttZ2xpc3QpOwomIzQzOwogCXJldHVybiBwOwogCiBmcmVlX291dDoKQEAgLTE0NjUsMTEgJiM0MzsxNDY2LDExIEBAIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApCiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtJmd0O2tleS5wb3J0OwogCV9fdTE2IHZpZCA9IHAtJmd0O2tleS5hZGRyLnZpZDsKIAotCWhsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7bWdsaXN0KTsKJiM0MzsJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7cC0mZ3Q7bWdsaXN0KTsKIAlpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coJmFtcDtwLSZndDtrZXkuYWRkcikpCiAJCXJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoJmFtcDtwb3J0LSZndDtici0mZ3Q7c2dfcG9ydF90YmwsICZhbXA7cC0mZ3Q7cmhub2RlLAogCQkJCSAgICAgICBicl9zZ19wb3J0X3JodF9wYXJhbXMpOwotCWtmcmVlKHApOwomIzQzOwlrZnJlZV9yY3UocCwgcmN1KTsKIAlicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCB2aWQpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGJlZW4gdHdlYWtlZC4gTG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgYWxsIGNvbmZpbmVkIHRvIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5IGFyZSBtYWtpbmcgYWRqdXN0bWVudHMgdG8gdGhlIG11bHRpY2FzdCBncm91cCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgYnJpZGdpbmcgY29kZS4KCkluIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgLCB0aGV5JiMzOTt2ZSByZW9yZGVyZWQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgcC0mZ3Q7bmV4dGAgcG9pbnRlciBhbmQgdGhlIGFkZGl0aW9uIG9mIHRoZSBuZXcgcG9ydCBncm91cCB0byB0aGUgaGFzaCBsaXN0LiBUaGUgb3JpZ2luYWwgYGhsaXN0X2FkZF9oZWFkYCBpcyBub3cgYGhsaXN0X2FkZF9oZWFkX3JjdWAgYW5kIGBSQ1VfSU5JVF9QT0lOVEVSYCBpcyBhZGRlZCB0byBpbml0aWFsaXplIGBwLSZndDtuZXh0YC4gVGhpcyBpcyBhIGNsYXNzaWMgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBvcHRpbWl6YXRpb24uIFRoaXMgcG9pbnRzIHRvd2FyZCBhbiBlZmZvcnQgdG8gaW1wcm92ZSBjb25jdXJyZW50IGFjY2VzcyBhbmQgcmVkdWNlIHRoZSBuZWVkIGZvciBleHBlbnNpdmUgbG9ja2luZywgd2hpY2ggYWxpZ25zIHdpdGggdGhlIHBlcmZvcm1hbmNlIGdvYWxzLgoKVGhlbiwgd2hlbiBkZWxldGluZyB0aGUgcG9ydCBncm91cCBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCwgdGhleSYjMzk7dmUgc3dhcHBlZCBgaGxpc3RfZGVsX2luaXRgIHdpdGggYGhsaXN0X2RlbF9pbml0X3JjdWAgYW5kIGBrZnJlZShwKWAgd2l0aCBga2ZyZWVfcmN1KHAsIHJjdSlgLiBUaGF0IHJlaW5mb3JjZXMgdGhlIG1vdmUgdG8gUkNVLCBlbnN1cmluZyBzYWZlIGRlbGV0aW9uIGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudCB3aGVyZSByZWFkZXJzIG1heSBzdGlsbCBiZSB0cmF2ZXJzaW5nIHRoZSBkYXRhIHN0cnVjdHVyZS4gVGhlIGFkZGl0aW9uIG9mIGBrZnJlZV9yY3VgIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGUgbWVtb3J5IGlzIGFjdHVhbGx5IGZyZWVkIGFmdGVyIGFsbCByZWFkZXJzIGhhdmUgbGVmdCB0aGUgY3JpdGljYWwgc2VjdGlvbi4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byByZXZpZXcgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlc2UgZnVuY3Rpb25zIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gQWxzbywgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBvcHRpb25zIHJlbGF0ZWQgdG8gYnJpZGdlIG11bHRpY2FzdCB0byBlbnN1cmUgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zLiBUaGUgY2hhbmdlcyBzdWdnZXN0IGEgZm9jdXMgb24gaW1wcm92aW5nIG11bHRpY2FzdCBwZXJmb3JtYW5jZSBvciByZXNvbHZpbmcgc29tZSBjb25jdXJyZW5jeSBpc3N1ZTsgYSBkZWVwZXIgY29kZSByZXZpZXcgd2lsbCByZXZlYWwgdGhlIHNwZWNpZmljIG1vdGl2YXRpb24gYW5kIGlmIGl0JiMzOTtzIGJlZW4gc3VjY2Vzc2Z1bCBpbiBhY2hpZXZpbmcgdGhlc2UgZ29hbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDMwOlx0XHRwLVx1MDAzZWZpbHRlcl9tb2RlID0gZmlsdGVyX21vZGU7XG4xNDMxOlx0XHRwLVx1MDAzZXJ0X3Byb3RvY29sID0gcnRfcHJvdG9jb2w7XG4xNDMyOlx0XHRwLVx1MDAzZWVodF9ob3N0X3RyZWUgPSBSQl9ST09UO1xuMTQzMzpcdFx0cC1cdTAwM2VlaHRfc2V0X3RyZWUgPSBSQl9ST09UO1xuMTQzNDpcdFx0cC1cdTAwM2VtY2FzdF9nYy5kZXN0cm95ID0gYnJfbXVsdGljYXN0X2Rlc3Ryb3lfcG9ydF9ncm91cDtcbjE0MzU6XHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZwLVx1MDAzZXNyY19saXN0KTtcbjE0MzY6XHRcbjE0Mzc6XHRcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhncm91cCkgXHUwMDI2XHUwMDI2XG4xNDM4Olx0XHQgICAgcmhhc2h0YWJsZV9sb29rdXBfaW5zZXJ0X2Zhc3QoXHUwMDI2cG9ydC1cdTAwM2Vici1cdTAwM2VzZ19wb3J0X3RibCwgXHUwMDI2cC1cdTAwM2VyaG5vZGUsXG4xNDM5Olx0XHRcdFx0XHRcdCAgYnJfc2dfcG9ydF9yaHRfcGFyYW1zKSkge1xuMTQ0MDpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDb3VsZG4mIzM5O3QgaW5zZXJ0IG5ldyBwb3J0IGdyb3VwXCYjMzQ7KTtcbjE0NDE6XHRcdFx0Z290byBmcmVlX291dDtcbjE0NDI6XHRcdH1cbjE0NDM6XHRcbjE0NDQ6XHRcdHRpbWVyX3NldHVwKFx1MDAyNnAtXHUwMDNldGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQsIDApO1xuMTQ0NTpcdFx0dGltZXJfc2V0dXAoXHUwMDI2cC1cdTAwM2VyZXhtaXRfdGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3JleG1pdCwgMCk7XG4xNDQ2Olx0XG4xNDQ3Olx0XHRpZiAoc3JjKVxuMTQ0ODpcdFx0XHRtZW1jcHkocC1cdTAwM2VldGhfYWRkciwgc3JjLCBFVEhfQUxFTik7XG4xNDQ5Olx0XHRlbHNlXG4xNDUwOlx0XHRcdGV0aF9icm9hZGNhc3RfYWRkcihwLVx1MDAzZWV0aF9hZGRyKTtcbjE0NTE6XHRcbjE0NTI6XHRcdFJDVV9JTklUX1BPSU5URVIocC1cdTAwM2VuZXh0LCBuZXh0KTtcbjE0NTM6XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZwLVx1MDAzZW1nbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2VtZ2xpc3QpO1xuMTQ1NDpcdFxuMTQ1NTpcdFx0cmV0dXJuIHA7XG4xNDU2Olx0XG4xNDU3Olx0ZnJlZV9vdXQ6XG4xNDU4Olx0XHRrZnJlZShwKTtcbjE0NTk6XHRkZWNfb3V0OlxuMTQ2MDpcdFx0YnJfbXVsdGljYXN0X3BvcnRfbmdyb3Vwc19kZWMocG9ydCwgZ3JvdXAtXHUwMDNldmlkKTtcbjE0NjE6XHRcdHJldHVybiBOVUxMO1xuMTQ2MjpcdH1cbjE0NjM6XHRcbjE0NjQ6XHR2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxuMTQ2NTpcdHtcbjE0NjY6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBwLVx1MDAzZWtleS5wb3J0O1xuMTQ2NzpcdFx0X191MTYgdmlkID0gcC1cdTAwM2VrZXkuYWRkci52aWQ7XG4xNDY4Olx0XG4xNDY5Olx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2cC1cdTAwM2VtZ2xpc3QpO1xuMTQ3MDpcdFx0aWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFx1MDAyNnAtXHUwMDNla2V5LmFkZHIpKVxuMTQ3MTpcdFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnBvcnQtXHUwMDNlYnItXHUwMDNlc2dfcG9ydF90YmwsIFx1MDAyNnAtXHUwMDNlcmhub2RlLFxuMTQ3MjpcdFx0XHRcdFx0ICAgICAgIGJyX3NnX3BvcnRfcmh0X3BhcmFtcyk7XG4xNDczOlx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbjE0NzQ6XHRcdGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjKHBvcnQsIHZpZCk7XG4xNDc1Olx0fVxuMTQ3NjpcdFxuMTQ3NzpcdHZvaWQgYnJfbXVsdGljYXN0X2hvc3Rfam9pbihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuMTQ3ODpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wLCBib29sIG5vdGlmeSlcbjE0Nzk6XHR7XG4xNDgwOlx0XHRpZiAoIW1wLVx1MDAzZWhvc3Rfam9pbmVkKSB7XG4xNDgxOlx0XHRcdG1wLVx1MDAzZWhvc3Rfam9pbmVkID0gdHJ1ZTtcbjE0ODI6XHRcdFx0aWYgKGJyX211bHRpY2FzdF9pc19zdGFyX2coXHUwMDI2bXAtXHUwMDNlYWRkcikpXG4xNDgzOlx0XHRcdFx0YnJfbXVsdGljYXN0X3N0YXJfZ19ob3N0X3N0YXRlKG1wKTtcbjE0ODQ6XHRcdFx0aWYgKG5vdGlmeSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODIxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQnJpZGdlIE11bHRpY2FzdCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gZGVidWdnaW5nIHRoaXMgYGJyX211bHRpY2FzdC5jYCBpc3N1ZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gc3RlcC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYEtjb25maWdgIGFuZCBgTWFrZWZpbGVgIHdpdGhpbiB0aGUgYnJpZGdlIGRpcmVjdG9yeSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGBuZXQvYnJpZGdlL0tjb25maWdgIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgbXVsdGljYXN0IHN1cHBvcnQgZm9yIGJyaWRnaW5nLiBJ4oCZbSBsb29raW5nIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9yIHByZWNvbmRpdGlvbnMgdGhhdCBtaWdodCBiZSBnYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBleHBlY3RpbmcuIFRoZW4sIG92ZXIgaW4gYG5ldC9icmlkZ2UvTWFrZWZpbGVgLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgaG93IHRoZSBgYnJfbXVsdGljYXN0LmNgIG9iamVjdCBmaWxlIGlzIGhhbmRsZWQsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncy4gQXJlIHdlIGV2ZW4gYnVpbGRpbmcgaXQsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24/IElmIHRoZXJlIGlzIGFuIGlzc3VlLCBpdCBtYXkgYmUgYSBzaW1wbGUgb3ZlcnNpZ2h0IHdpdGhpbiB0aG9zZSBmaWxlcy4gVGhhdCYjMzk7bGwgYmUgdGhlIGZpcnN0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI4NzIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICYjNDM7PSBicl9uZXRmaWx0ZXIub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMC1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjE6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSAmIzQzOz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIyLVxuLS1cbm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzAzLVx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XG5uZXQvYnJpZGdlL2JyLmM6MzA0Olx0XHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xubmV0L2JyaWRnZS9ici5jLTMwNS1cdFx0YnJlYWs7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMD1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtOTctXHRcdH1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6OTg6XHRcdGlmIChicl9tdWx0aWNhc3RfcmN2KFx1MDAyNmJybWN0eCwgXHUwMDI2cG1jdHhfbnVsbCwgdmxhbiwgc2tiLCB2aWQpKSB7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTk5LVx0XHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTA0LVx0XHRpZiAoKG1kc3QgfHwgQlJfSU5QVVRfU0tCX0NCX01ST1VURVJTX09OTFkoc2tiKSkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjEwNTpcdFx0ICAgIGJyX211bHRpY2FzdF9xdWVyaWVyX2V4aXN0cyhicm1jdHgsIGV0aF9oZHIoc2tiKSwgbWRzdCkpXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjEwNjpcdFx0XHRicl9tdWx0aWNhc3RfZmxvb2QobWRzdCwgc2tiLCBicm1jdHgsIGZhbHNlLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTA3LVx0XHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xMTk9c3RhdGljIGludCBicl9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTQwLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoxNDE6XHRlcnIgPSBicl9tdWx0aWNhc3RfaW5pdF9zdGF0cyhicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE0Mi1cdGlmIChlcnIpIHtcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTE1Mz1zdGF0aWMgdm9pZCBicl9kZXZfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNTYtXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE1NzpcdGJyX211bHRpY2FzdF9kZXZfZGVsKGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTU4Olx0YnJfbXVsdGljYXN0X3VuaW5pdF9zdGF0cyhicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE1OS1cdGJyX3ZsYW5fZmx1c2goYnIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTY0PXN0YXRpYyBpbnQgYnJfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE3MC1cdGJyX3N0cF9lbmFibGVfYnJpZGdlKGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTcxOlx0YnJfbXVsdGljYXN0X29wZW4oYnIpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzItXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE3My1cdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3NDpcdFx0YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoYnIpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzUtXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xODk9c3RhdGljIGludCBicl9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTkzLVx0YnJfc3RwX2Rpc2FibGVfYnJpZGdlKGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTk0Olx0YnJfbXVsdGljYXN0X3N0b3AoYnIpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xOTUtXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5Ni1cdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE5NzpcdFx0YnJfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzKGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTk4LVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9NDgwPXZvaWQgYnJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy01MzMtXHRicl9zdHBfdGltZXJfaW5pdChicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjUzNDpcdGJyX211bHRpY2FzdF9pbml0KGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNTM1LVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YnItXHUwMDNlZ2Nfd29yaywgYnJfZmRiX2NsZWFudXApO1xuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTE3Nj1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqbWF5YmVfZGVsaXZlcihcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xNzkte1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTgwOlx0dTggaWdtcF90eXBlID0gYnJfbXVsdGljYXN0X2lnbXBfdHlwZShza2IpO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTgxLVx0aW50IGVycjtcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xOTQtb3V0OlxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTk1Olx0YnJfbXVsdGljYXN0X2NvdW50KHAtXHUwMDNlYnIsIHAsIHNrYiwgaWdtcF90eXBlLCBCUl9NQ0FTVF9ESVJfVFgpO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTk2LVxuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTI2OD1zdGF0aWMgdm9pZCBtYXliZV9kZWxpdmVyX2FkZHIoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yOTgtLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6Mjk5OnZvaWQgYnJfbXVsdGljYXN0X2Zsb29kKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbWRzdCxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMwMC1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMwOS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMxMDpcdHJwID0gYnJfbXVsdGljYXN0X2dldF9maXJzdF9ycG9ydF9ub2RlKGJybWN0eCwgc2tiKTtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMxMS1cbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMTMtXHRcdHAgPSByY3VfZGVyZWZlcmVuY2UobWRzdC1cdTAwM2Vwb3J0cyk7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzozMTQ6XHRcdGlmIChicl9tdWx0aWNhc3Rfc2hvdWxkX2hhbmRsZV9tb2RlKGJybWN0eCwgbWRzdC1cdTAwM2VhZGRyLnByb3RvKSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMxNTpcdFx0ICAgIGJyX211bHRpY2FzdF9pc19zdGFyX2coXHUwMDI2bWRzdC1cdTAwM2VhZGRyKSlcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMxNi1cdFx0XHRhbGxvd19tb2RlX2luY2x1ZGUgPSBmYWxzZTtcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMjUtXHRcdGxwb3J0ID0gcCA/IHAtXHUwMDNla2V5LnBvcnQgOiBOVUxMO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MzI2Olx0XHRycG9ydCA9IGJyX211bHRpY2FzdF9ycG9ydF9mcm9tX25vZGVfc2tiKHJwLCBza2IpO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzI3LVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz0zMzQ9c3RhdGljIHZvaWQgZGVsX25icChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy0zNjktXG5uZXQvYnJpZGdlL2JyX2lmLmM6MzcwOlx0YnJfbXVsdGljYXN0X2RlbF9wb3J0KHApO1xubmV0L2JyaWRnZS9icl9pZi5jLTM3MS1cbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9NDI2PXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpuZXdfbmJwKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtNDUxLVx0YnJfc3RwX3BvcnRfdGltZXJfaW5pdChwKTtcbm5ldC9icmlkZ2UvYnJfaWYuYzo0NTI6XHRlcnIgPSBicl9tdWx0aWNhc3RfYWRkX3BvcnQocCk7XG5uZXQvYnJpZGdlL2JyX2lmLmMtNDUzLVx0aWYgKGVycikge1xuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz01NjA9aW50IGJyX2FkZF9pZihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2JyaWRnZS9icl9pZi5jLTU5OS1cdGlmIChlcnIpIHtcbm5ldC9icmlkZ2UvYnJfaWYuYzo2MDA6XHRcdGJyX211bHRpY2FzdF9kZWxfcG9ydChwKTtcbm5ldC9icmlkZ2UvYnJfaWYuYy02MDEtXHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZwLVx1MDAzZWRldl90cmFja2VyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtNzA5LWVycjI6XG5uZXQvYnJpZGdlL2JyX2lmLmM6NzEwOlx0YnJfbXVsdGljYXN0X2RlbF9wb3J0KHApO1xubmV0L2JyaWRnZS9icl9pZi5jLTcxMS1cdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZwLVx1MDAzZWRldl90cmFja2VyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzM9c3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcHJvbWlzYylcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNjQtXHQvKiB1cGRhdGUgdGhlIG11bHRpY2FzdCBzdGF0cyBpZiB0aGUgcGFja2V0IGlzIElHTVAvTUxEICovXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NjU6XHRicl9tdWx0aWNhc3RfY291bnQoYnIsIE5VTEwsIHNrYiwgYnJfbXVsdGljYXN0X2lnbXBfdHlwZShza2IpLFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTY2LVx0XHRcdCAgIEJSX01DQVNUX0RJUl9UWCk7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xNTUtXHRcdFx0cGt0X3R5cGUgPSBCUl9QS1RfTVVMVElDQVNUO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjE1NjpcdFx0XHRpZiAoYnJfbXVsdGljYXN0X3JjdihcdTAwMjZicm1jdHgsIFx1MDAyNnBtY3R4LCB2bGFuLCBza2IsIHZpZCkpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTU3LVx0XHRcdFx0Z290byBkcm9wO1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xODktXHRcdGlmICgobWRzdCB8fCBCUl9JTlBVVF9TS0JfQ0JfTVJPVVRFUlNfT05MWShza2IpKSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxOTA6XHRcdCAgICBicl9tdWx0aWNhc3RfcXVlcmllcl9leGlzdHMoYnJtY3R4LCBldGhfaGRyKHNrYiksIG1kc3QpKSB7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTkxLVx0XHRcdGlmICgobWRzdCBcdTAwMjZcdTAwMjYgbWRzdC1cdTAwM2Vob3N0X2pvaW5lZCkgfHxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxOTI6XHRcdFx0ICAgIGJyX211bHRpY2FzdF9pc19yb3V0ZXIoYnJtY3R4LCBza2IpIHx8XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTkzLVx0XHRcdCAgICBici1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yMzAtXHRcdGVsc2Vcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyMzE6XHRcdFx0YnJfbXVsdGljYXN0X2Zsb29kKG1kc3QsIHNrYiwgYnJtY3R4LCBsb2NhbF9yY3YsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yMzItXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz02MTc9dm9pZCBicl9ydHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtNjI2LVx0aWZpbmRleCA9IHBtY3R4ID8gcG1jdHgtXHUwMDNlcG9ydC1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCA6IDA7XG5uZXQvYnJpZGdlL2JyX21kYi5jOjYyNzpcdHZpZCA9IHBtY3R4IFx1MDAyNlx1MDAyNiBicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgPyBwbWN0eC1cdTAwM2V2bGFuLVx1MDAzZXZpZCA6XG5uZXQvYnJpZGdlL2JyX21kYi5jLTYyOC1cdFx0XHRcdFx0XHRcdCAgICAgIDA7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz03MDg9X19icl9tZGJfY2hvb3NlX2NvbnRleHQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzI5LVx0fVxubmV0L2JyaWRnZS9icl9tZGIuYzo3MzA6XHRpZiAoYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChcdTAwMjZ2LVx1MDAzZWJyX21jYXN0X2N0eCkpIHtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzMxLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtWbGFuJiMzOTtzIG11bHRpY2FzdCBwcm9jZXNzaW5nIGlzIGRpc2FibGVkXCYjMzQ7KTtcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jPTc2MD1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc2coY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTc4NC1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6Nzg1Olx0cCA9IGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChjZmctXHUwMDNlcCwgXHUwMDI2Y2ZnLVx1MDAzZWdyb3VwLCAqcHAsIGZsYWdzLCBOVUxMLFxubmV0L2JyaWRnZS9icl9tZGIuYy03ODYtXHRcdFx0XHRcdE1DQVNUX0lOQ0xVREUsIGNmZy1cdTAwM2VydF9wcm90b2NvbCwgZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTc5OC1cdCAqL1xubmV0L2JyaWRnZS9icl9tZGIuYzo3OTk6XHRpZiAoYnJfbXVsdGljYXN0X3Nob3VsZF9oYW5kbGVfbW9kZShicm1jdHgsIGNmZy1cdTAwM2Vncm91cC5wcm90bykpIHtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODAwLVx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKnN0YXJfbXA7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy04MDYtXHRcdGlmIChzdGFyX21wKVxubmV0L2JyaWRnZS9icl9tZGIuYzo4MDc6XHRcdFx0YnJfbXVsdGljYXN0X3NnX2FkZF9leGNsdWRlX3BvcnRzKHN0YXJfbXAsIHApO1xubmV0L2JyaWRnZS9icl9tZGIuYy04MDgtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz04MTM9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3NyY19md2QoY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTgyNC1cdHNnX2lwLnNyYyA9IHNyY19pcC1cdTAwM2VzcmM7XG5uZXQvYnJpZGdlL2JyX21kYi5jOjgyNTpcdHNnbXAgPSBicl9tdWx0aWNhc3RfbmV3X2dyb3VwKGNmZy1cdTAwM2ViciwgXHUwMDI2c2dfaXApO1xubmV0L2JyaWRnZS9icl9tZGIuYy04MjYtXHRpZiAoSVNfRVJSKHNnbXApKSB7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz04NDg9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3NyYyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtODU3LVxubmV0L2JyaWRnZS9icl9tZGIuYzo4NTg6XHRlbnQgPSBicl9tdWx0aWNhc3RfZmluZF9ncm91cF9zcmMocGcsIFx1MDAyNnNyYy1cdTAwM2VhZGRyKTtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODU5LVx0aWYgKCFlbnQpIHtcbm5ldC9icmlkZ2UvYnJfbWRiLmM6ODYwOlx0XHRlbnQgPSBicl9tdWx0aWNhc3RfbmV3X2dyb3VwX3NyYyhwZywgXHUwMDI2c3JjLVx1MDAzZWFkZHIpO1xubmV0L2JyaWRnZS9icl9tZGIuYy04NjEtXHRcdGlmICghZW50KSB7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy04NzEtXHQgICAgY2ZnLVx1MDAzZWVudHJ5LVx1MDAzZXN0YXRlID09IE1EQl9URU1QT1JBUlkpXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg3MjpcdFx0bW9kX3RpbWVyKFx1MDAyNmVudC1cdTAwM2V0aW1lciwgbm93ICYjNDM7IGJyX211bHRpY2FzdF9nbWkoYnJtY3R4KSk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTg3My1cdGVsc2Vcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTg4NS1lcnJfZGVsX3NnOlxubmV0L2JyaWRnZS9icl9tZGIuYzo4ODY6XHRfX2JyX211bHRpY2FzdF9kZWxfZ3JvdXBfc3JjKGVudCk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTg4Ny1cdHJldHVybiBlcnI7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz04OTA9c3RhdGljIHZvaWQgYnJfbWRiX2RlbF9ncm91cF9zcmMoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy04OTQtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg5NTpcdGVudCA9IGJyX211bHRpY2FzdF9maW5kX2dyb3VwX3NyYyhwZywgXHUwMDI2c3JjLVx1MDAzZWFkZHIpO1xubmV0L2JyaWRnZS9icl9tZGIuYy04OTYtXHRpZiAoV0FSTl9PTl9PTkNFKCFlbnQpKVxubmV0L2JyaWRnZS9icl9tZGIuYy04OTctXHRcdHJldHVybjtcbm5ldC9icmlkZ2UvYnJfbWRiLmM6ODk4Olx0YnJfbXVsdGljYXN0X2RlbF9ncm91cF9zcmMoZW50LCBmYWxzZSk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTg5OS19XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz05MjM9c3RhdGljIGludCBicl9tZGJfcmVwbGFjZV9ncm91cF9zcmNzKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy05NDAtXHRcdGlmIChlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJSX1NHUlBfRl9ERUxFVEUpXG5uZXQvYnJpZGdlL2JyX21kYi5jOjk0MTpcdFx0XHRicl9tdWx0aWNhc3RfZGVsX2dyb3VwX3NyYyhlbnQsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtOTQyLVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9OTUyPXN0YXRpYyBpbnQgYnJfbWRiX3JlcGxhY2VfZ3JvdXBfc3Rhcl9nKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy05NzctXG5uZXQvYnJpZGdlL2JyX21kYi5jOjk3ODpcdGlmIChicl9tdWx0aWNhc3Rfc2hvdWxkX2hhbmRsZV9tb2RlKGJybWN0eCwgY2ZnLVx1MDAzZWdyb3VwLnByb3RvKSlcbm5ldC9icmlkZ2UvYnJfbWRiLmM6OTc5Olx0XHRicl9tdWx0aWNhc3Rfc3Rhcl9nX2hhbmRsZV9tb2RlKHBnLCBjZmctXHUwMDNlZmlsdGVyX21vZGUpO1xubmV0L2JyaWRnZS9icl9tZGIuYy05ODAtXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz05ODQ9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAwOS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTAxMDpcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoY2ZnLVx1MDAzZXAsIFx1MDAyNmNmZy1cdTAwM2Vncm91cCwgKnBwLCBmbGFncywgTlVMTCxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAxMS1cdFx0XHRcdFx0Y2ZnLVx1MDAzZWZpbHRlcl9tb2RlLCBjZmctXHUwMDNlcnRfcHJvdG9jb2wsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDI4LVx0ICovXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMjk6XHRpZiAoYnJfbXVsdGljYXN0X3Nob3VsZF9oYW5kbGVfbW9kZShicm1jdHgsIGNmZy1cdTAwM2Vncm91cC5wcm90bykgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMzAtXHQgICAgY2ZnLVx1MDAzZWZpbHRlcl9tb2RlID09IE1DQVNUX0VYQ0xVREUpXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMzE6XHRcdGJyX211bHRpY2FzdF9zdGFyX2dfaGFuZGxlX21vZGUocCwgTUNBU1RfRVhDTFVERSk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMzItXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDM1LWVycl9kZWxfcG9ydF9ncm91cDpcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTAzNjpcdGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChwKTtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNy1cdHJldHVybiBlcnI7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xMDQwPXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cChjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTA1NC1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTA1NTpcdG1wID0gYnJfbXVsdGljYXN0X25ld19ncm91cChiciwgXHUwMDI2Z3JvdXApO1xubmV0L2JyaWRnZS9icl9tZGIuYy0xMDU2LVx0aWYgKElTX0VSUihtcCkpXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDY1LVxubmV0L2JyaWRnZS9icl9tZGIuYzoxMDY2Olx0XHRicl9tdWx0aWNhc3RfaG9zdF9qb2luKGJybWN0eCwgbXAsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTA2Ny1cdFx0YnJfbWRiX25vdGlmeShici1cdTAwM2VkZXYsIG1wLCBOVUxMLCBSVE1fTkVXTURCKTtcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwNzQtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwNzU6XHRpZiAoYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZncm91cCkpXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwNzYtXHRcdHJldHVybiBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZyhjZmcsIG1wLCBicm1jdHgsIGZsYWdzLCBleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9MTE2Mz1zdGF0aWMgaW50IGJyX21kYl9jb25maWdfYXR0cnNfaW5pdChzdHJ1Y3QgbmxhdHRyICpzZXRfYXR0cnMsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMTg2LVx0XHR9XG5uZXQvYnJpZGdlL2JyX21kYi5jOjExODc6XHRcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZjZmctXHUwMDNlZ3JvdXApKSB7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTExODgtXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7RmlsdGVyIG1vZGUgY2FuIG9ubHkgYmUgc2V0IGZvciAoKiwgRykgZW50cmllc1wmIzM0Oyk7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMjAwLVx0XHR9XG5uZXQvYnJpZGdlL2JyX21kYi5jOjEyMDE6XHRcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZjZmctXHUwMDNlZ3JvdXApKSB7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEyMDItXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7U291cmNlIGxpc3QgY2FuIG9ubHkgYmUgc2V0IGZvciAoKiwgRykgZW50cmllc1wmIzM0Oyk7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xMjk3PWludCBicl9tZGJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sIHUxNiBubG1zZ19mbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzMTYtXHRcdH1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTMxNzpcdFx0aWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFx1MDAyNmNmZy5ncm91cCkpIHtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTMxOC1cdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtHcm91cHMgd2l0aCBzb3VyY2VzIGNhbm5vdCBiZSBtYW51YWxseSBob3N0IGpvaW5lZFwmIzM0Oyk7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xMzU4PXN0YXRpYyBpbnQgX19icl9tZGJfZGVsKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcpXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMzc0LVx0aWYgKGVudHJ5LVx1MDAzZWlmaW5kZXggPT0gbXAtXHUwMDNlYnItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXggXHUwMDI2XHUwMDI2IG1wLVx1MDAzZWhvc3Rfam9pbmVkKSB7XG5uZXQvYnJpZGdlL2JyX21kYi5jOjEzNzU6XHRcdGJyX211bHRpY2FzdF9ob3N0X2xlYXZlKG1wLCBmYWxzZSk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzNzYtXHRcdGVyciA9IDA7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMzg4LVxubmV0L2JyaWRnZS9icl9tZGIuYzoxMzg5Olx0XHRicl9tdWx0aWNhc3RfZGVsX3BnKG1wLCBwLCBwcCk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzOTAtXHRcdGVyciA9IDA7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xNDc2PXN0YXRpYyB2b2lkIGJyX21kYl9mbHVzaF9ob3N0KHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTE0OTEtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjE0OTI6XHRicl9tdWx0aWNhc3RfaG9zdF9sZWF2ZShtcCwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTE0OTMtXHRpZiAoIW1wLVx1MDAzZXBvcnRzIFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKGJyLVx1MDAzZWRldikpXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xNDk3PXN0YXRpYyB2b2lkIGJyX21kYl9mbHVzaF9wZ3Moc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTUyNC1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTUyNTpcdFx0YnJfbXVsdGljYXN0X2RlbF9wZyhtcCwgcCwgcHApO1xubmV0L2JyaWRnZS9icl9tZGIuYy0xNTI2LVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBicl9zZ19wb3J0X3JodF9wYXJhbXMgPSB7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01Mi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTM6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3N0YXJ0X3F1ZXJpZXIoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTQtXHRcdFx0XHQgICAgICAgc3RydWN0IGJyaWRnZV9tY2FzdF9vd25fcXVlcnkgKnF1ZXJ5KTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTU3PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTYxLVx0XHRcdFx0XHQgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NjI6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0KHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjMtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTY0PXN0YXRpYyB2b2lkXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY1OmJyX211bHRpY2FzdF9ycG9ydF9kZWxfbm90aWZ5KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4LCBib29sIGRlbGV0ZWQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02Ni1zdGF0aWMgdm9pZCBicl9pcDZfbXVsdGljYXN0X2FkZF9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTc0PXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NzU6X19icl9tdWx0aWNhc3RfYWRkX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTc2LVx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxLVx0XHRcdCBib29sIGJsb2NrZWQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4MjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04My1cdFx0XHRcdCAgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDpzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9zdG9wKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04NS1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE0OT1icl9tZGJfZW50cnlfc2tiX2dldChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU1LVx0aWYgKCFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkgfHxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU2Olx0ICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoYnJtY3R4KSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU3LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwOT1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxMDpicl9tdWx0aWNhc3RfcGdfdG9fcG9ydF9jdHgoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMS17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjktXHR2bGFuID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwX3JjdShwZy1cdTAwM2VrZXkucG9ydCksIHBnLVx1MDAzZWtleS5hZGRyLnZpZCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIzMDpcdGlmICh2bGFuIFx1MDAyNlx1MDAyNiAhYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vwb3J0X21jYXN0X2N0eCkpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMS1cdFx0cG1jdHggPSBcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4O1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjM5PXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjQwOmJyX211bHRpY2FzdF9wb3J0X3ZpZF90b19wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNDEte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjY0PXN0YXRpYyBib29sXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjI2NTpicl9tdWx0aWNhc3RfY3R4X3Nob3VsZF91c2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjY2LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTI3MS1cdGlmIChwbWN0eClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjcyOlx0XHRyZXR1cm4gIWJyX211bHRpY2FzdF9wb3J0X2N0eF9zdGF0ZV9kaXNhYmxlZChwbWN0eCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTI3My1cdGVsc2Vcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mjc0Olx0XHRyZXR1cm4gIWJyX211bHRpY2FzdF9jdHhfdmxhbl9kaXNhYmxlZChicm1jdHgpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNzUtfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjkwPXN0YXRpYyB2b2lkIF9fZndkX2FkZF9zdGFyX2V4Y2woc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yOTgtXHRtZW1zZXQoXHUwMDI2c2dfa2V5LCAwLCBzaXplb2Yoc2dfa2V5KSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjI5OTpcdGJybWN0eCA9IGJyX211bHRpY2FzdF9wb3J0X2N0eF9nZXRfZ2xvYmFsKHBtY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzAwLVx0c2dfa2V5LnBvcnQgPSBwZy1cdTAwM2VrZXkucG9ydDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMwNC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzA1Olx0c3JjX3BnID0gX19icl9tdWx0aWNhc3RfYWRkX2dyb3VwKGJybWN0eCwgcG1jdHgsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMwNi1cdFx0XHRcdFx0ICBzZ19pcCwgcGctXHUwMDNlZXRoX2FkZHIsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zMTU9c3RhdGljIHZvaWQgX19md2RfZGVsX3N0YXJfZXhjbChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZyxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMyOS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzMwOlx0YnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnKGJyLCBzcmNfcGcpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMzEtfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzQwLSAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNDE6dm9pZCBicl9tdWx0aWNhc3Rfc3Rhcl9nX2hhbmRsZV9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNDItXHRcdFx0XHQgICAgIHU4IGZpbHRlcl9tb2RlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzQ5LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNTA6XHRpZiAoV0FSTl9PTighYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZwZy1cdTAwM2VrZXkuYWRkcikpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNTEtXHRcdHJldHVybjtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM1NS1cdFx0cmV0dXJuO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNTY6XHRwbWN0eCA9IGJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChwZyk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM1Ny1cdGlmICghcG1jdHgpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODYtLyogY2FsbGVkIHdoZW4gYWRkaW5nIGEgbmV3IFMsRyB3aXRoIGhvc3Rfam9pbmVkID09IGZhbHNlIGJ5IGRlZmF1bHQgKi9cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzg3OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zZ19ob3N0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqc3Rhcl9tcCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzg4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnNnKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzkxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozOTI6XHRpZiAoV0FSTl9PTighYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZzdGFyX21wLVx1MDAzZWFkZHIpKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzkzLVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MDMtLyogc2V0IHRoZSBob3N0X2pvaW5lZCBzdGF0ZSBvZiBhbGwgb2YgKixHJiMzOTtzIFMsRyBlbnRyaWVzICovXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQwNDpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3Rfc3Rhcl9nX2hvc3Rfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpzdGFyX21wKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MDUte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDEwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTE6XHRpZiAoV0FSTl9PTighYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZzdGFyX21wLVx1MDAzZWFkZHIpKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDEyLVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzItXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzMzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3Rfc2dfZGVsX2V4Y2x1ZGVfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpzZ21wKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM4LVx0LyogKixHIGV4Y2x1ZGUgcG9ydHMgYXJlIG9ubHkgYWRkZWQgdG8gUyxHIGVudHJpZXMgKi9cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM5Olx0aWYgKFdBUk5fT04oYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZzZ21wLVx1MDAzZWFkZHIpKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwLVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjAtXHRcdGlmICghKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjE6XHRcdFx0YnJfbXVsdGljYXN0X2RlbF9wZyhzZ21wLCBwLCBwcCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2Mi1cdFx0ZWxzZVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY2LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Njc6dm9pZCBicl9tdWx0aWNhc3Rfc2dfYWRkX2V4Y2x1ZGVfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpzdGFyX21wLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjgtXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqc2cpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3NjpcdGlmIChXQVJOX09OKGJyX211bHRpY2FzdF9pc19zdGFyX2coXHUwMDI2c2ctXHUwMDNla2V5LmFkZHIpKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc3LVx0XHRyZXR1cm47XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3ODpcdGlmIChXQVJOX09OKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFx1MDAyNnN0YXJfbXAtXHUwMDNlYWRkcikpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzktXHRcdHJldHVybjtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDgwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0ODE6XHRicl9tdWx0aWNhc3Rfc2dfaG9zdF9zdGF0ZShzdGFyX21wLCBzZyk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ4Mi1cdG1lbXNldChcdTAwMjZzZ19rZXksIDAsIHNpemVvZihzZ19rZXkpKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5Ni1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDk3Olx0XHRwbWN0eCA9IGJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChwZyk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5OC1cdFx0aWYgKCFwbWN0eClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk5LVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1MDA6XHRcdGJybWN0eCA9IGJyX211bHRpY2FzdF9wb3J0X2N0eF9nZXRfZ2xvYmFsKHBtY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTAxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1MDI6XHRcdHNyY19wZyA9IF9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChicm1jdHgsIHBtY3R4LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01MDMtXHRcdFx0XHRcdFx0ICBcdTAwMjZzZy1cdTAwM2VrZXkuYWRkcixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUxMi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTEzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9md2Rfc3JjX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9ncm91cF9zcmMgKnNyYylcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTE0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyNC1cdG1lbXNldChcdTAwMjZzZ19pcCwgMCwgc2l6ZW9mKHNnX2lwKSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjUyNTpcdHBtY3R4ID0gYnJfbXVsdGljYXN0X3BnX3RvX3BvcnRfY3R4KHNyYy1cdTAwM2VwZyk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyNi1cdGlmICghcG1jdHgpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyNy1cdFx0cmV0dXJuO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1Mjg6XHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChwbWN0eCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyOS1cdHNnX2lwID0gc3JjLVx1MDAzZXBnLVx1MDAzZWtleS5hZGRyO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTMxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1MzI6XHRzZyA9IF9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChicm1jdHgsIHBtY3R4LCBcdTAwMjZzZ19pcCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTMzLVx0XHRcdFx0ICAgICAgc3JjLVx1MDAzZXBnLVx1MDAzZWV0aF9hZGRyLCBNQ0FTVF9JTkNMVURFLCBmYWxzZSxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU1MC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTUxOlx0YnJfbXVsdGljYXN0X3NnX2FkZF9leGNsdWRlX3BvcnRzKHN0YXJfbXAsIHNnKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTUyLX1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTUzLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1NTQ6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Z3ZF9zcmNfcmVtb3ZlKHN0cnVjdCBuZXRfYnJpZGdlX2dyb3VwX3NyYyAqc3JjLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01NTUtXHRcdFx0XHRcdGJvb2wgZmFzdGxlYXZlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTgyLVx0XHRcdHAtXHUwMDNlZmxhZ3MgfD0gTURCX1BHX0ZMQUdTX0ZBU1RfTEVBVkU7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjU4MzpcdFx0YnJfbXVsdGljYXN0X2RlbF9wZyhtcCwgcCwgcHApO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01ODQtXHRcdGJyZWFrO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTg5LS8qIGluc3RhbGwgUyxHIGFuZCBiYXNlZCBvbiBzcmMmIzM5O3MgdGltZXIgZW5hYmxlIG9yIGRpc2FibGUgZm9yd2FyZGluZyAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1OTA6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Z3ZF9zcmNfaGFuZGxlKHN0cnVjdCBuZXRfYnJpZGdlX2dyb3VwX3NyYyAqc3JjKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01OTEte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTk1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1OTY6XHRicl9tdWx0aWNhc3RfZndkX3NyY19hZGQoc3JjKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTk3LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjIyLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2MjM6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfbWRiX2VudHJ5KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X2djICpnYylcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjI0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTYzNC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NjM1OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kZWxfbWRiX2VudHJ5KHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXApXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTYzNi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NDUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY0NjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZ3JvdXBfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjQ3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY1NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NjU2Olx0YnJfbXVsdGljYXN0X2hvc3RfbGVhdmUobXAsIHRydWUpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NTctXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NTktXHRcdGdvdG8gb3V0O1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2NjA6XHRicl9tdWx0aWNhc3RfZGVsX21kYl9lbnRyeShtcCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY2MS1vdXQ6XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NjQtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY2NTpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGVzdHJveV9ncm91cF9zcmMoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfZ2MgKmdjKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NjYte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjc1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2NzY6dm9pZCBfX2JyX211bHRpY2FzdF9kZWxfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX2dyb3VwX3NyYyAqc3JjKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02Nzcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjg1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2ODY6dm9pZCBicl9tdWx0aWNhc3RfZGVsX2dyb3VwX3NyYyhzdHJ1Y3QgbmV0X2JyaWRnZV9ncm91cF9zcmMgKnNyYyxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjg3LVx0XHRcdFx0Ym9vbCBmYXN0bGVhdmUpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY4OC17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY4OTpcdGJyX211bHRpY2FzdF9md2Rfc3JjX3JlbW92ZShzcmMsIGZhc3RsZWF2ZSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY5MDpcdF9fYnJfbXVsdGljYXN0X2RlbF9ncm91cF9zcmMoc3JjKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjkxLX1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTY5Mz1zdGF0aWMgaW50XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY5NDpicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2luY19vbmUoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY5NS1cdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzAzLVx0ICovXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjcwNDpcdGlmICghYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWQocG1jdHgpIFx1MDAyNlx1MDAyNiBtYXggXHUwMDI2XHUwMDI2IG4gXHUwMDNlPSBtYXgpIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzA1LVx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCYjMzQ7JXMgaXMgYWxyZWFkeSBpbiAldSBncm91cHMsIGFuZCBtY2FzdF9tYXhfZ3JvdXBzPSV1XCYjMzQ7LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzEzLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3MTQ6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfbmdyb3Vwc19kZWNfb25lKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03MTUte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzIxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3MjI6c3RhdGljIGludCBicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2luYyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03MjMtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnJfaXAgKmdyb3VwLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzMxLVx0LyogQWx3YXlzIGNvdW50IG9uIHRoZSBwb3J0IGNvbnRleHQuICovXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjczMjpcdGVyciA9IGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfaW5jX29uZShcdTAwMjZwb3J0LVx1MDAzZW11bHRpY2FzdF9jdHgsIGV4dGFjayxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzMzLVx0XHRcdFx0XHRcdFwmIzM0O1BvcnRcJiMzNDspO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzQyLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3NDM6XHRwbWN0eCA9IGJyX211bHRpY2FzdF9wb3J0X3ZpZF90b19wb3J0X2N0eChwb3J0LCBncm91cC1cdTAwM2V2aWQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03NDQtXHRpZiAoIXBtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzQ2LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3NDc6XHRlcnIgPSBicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2luY19vbmUocG1jdHgsIGV4dGFjaywgXCYjMzQ7UG9ydC1WTEFOXCYjMzQ7KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzQ4LVx0aWYgKGVycikge1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzU1LWRlY19vbmVfb3V0OlxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGJyaWRnZSBjb25maWd1cmF0aW9uIHBvc3NpYmlsaXRpZXMuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvYnJpZGdlYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBvcHRpb25zIHNob3VsZCBiZSBkZWZpbmVkLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGZpbmQgYWxsIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucyBpbiBgbmV0L2JyaWRnZS9LY29uZmlnYC4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBzcGVjaWZpYyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyByZWxhdGVkIHRvIGJyaWRnaW5nLiBJdCB3aWxsIGJlIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIHRvIHVuZGVyc3RhbmRpbmcgYWxsIHRoZSBhdmFpbGFibGUgcGFyYW1ldGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIDgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgQlJJREdFXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDs4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBMTENcbiAgIDk6XHRcdHNlbGVjdCBTVFBcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhblxuICAxMjpcdFx0ICBFdGhlcm5ldCBicmlkZ2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRpZmZlcmVudCBFdGhlcm5ldCBzZWdtZW50cyBpdFxuICAxMzpcdFx0ICBpcyBjb25uZWN0ZWQgdG8gd2lsbCBhcHBlYXIgYXMgb25lIEV0aGVybmV0IHRvIHRoZSBwYXJ0aWNpcGFudHMuXG4gIDE0Olx0XHQgIFNldmVyYWwgc3VjaCBicmlkZ2VzIGNhbiB3b3JrIHRvZ2V0aGVyIHRvIGNyZWF0ZSBldmVuIGxhcmdlclxuICAxNTpcdFx0ICBuZXR3b3JrcyBvZiBFdGhlcm5ldHMgdXNpbmcgdGhlIElFRUUgODAyLjEgc3Bhbm5pbmcgdHJlZSBhbGdvcml0aG0uXG4gIDE2Olx0XHQgIEFzIHRoaXMgaXMgYSBzdGFuZGFyZCwgTGludXggYnJpZGdlcyB3aWxsIGNvb3BlcmF0ZSBwcm9wZXJseSB3aXRoXG4gIDE3Olx0XHQgIG90aGVyIHRoaXJkIHBhcnR5IGJyaWRnZSBwcm9kdWN0cy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2UsIHlvdSYjMzk7bGwgbmVlZCB0aGUgYnJpZGdlXG4gIDIwOlx0XHQgIGNvbmZpZ3VyYXRpb24gdG9vbHM7IHNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XHUwMDNlXG4gIDIxOlx0XHQgIGZvciBsb2NhdGlvbi4gUGxlYXNlIHJlYWQgdGhlIEJyaWRnZSBtaW5pLUhPV1RPIGZvciBtb3JlXG4gIDIyOlx0XHQgIGluZm9ybWF0aW9uLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB5b3UgZW5hYmxlIGlwdGFibGVzIHN1cHBvcnQgYWxvbmcgd2l0aCB0aGUgYnJpZGdlIHN1cHBvcnQgdGhlbiB5b3VcbiAgMjU6XHRcdCAgdHVybiB5b3VyIGJyaWRnZSBpbnRvIGEgYnJpZGdpbmcgSVAgZmlyZXdhbGwuXG4gIDI2Olx0XHQgIGlwdGFibGVzIHdpbGwgdGhlbiBzZWUgdGhlIElQIHBhY2tldHMgYmVpbmcgYnJpZGdlZCwgc28geW91IG5lZWQgdG9cbiAgMjc6XHRcdCAgdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuIHNldHRpbmcgdXAgeW91ciBmaXJld2FsbCBydWxlcy5cbiAgMjg6XHRcdCAgRW5hYmxpbmcgYXJwdGFibGVzIHN1cHBvcnQgd2hlbiBicmlkZ2luZyB3aWxsIGxldCBhcnB0YWJsZXMgc2VlXG4gIDI5Olx0XHQgIGJyaWRnZWQgQVJQIHRyYWZmaWMgaW4gdGhlIGFycHRhYmxlcyBGT1JXQVJEIGNoYWluLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzMjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBicmlkZ2UuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG4gIDM3Olx0XHRib29sIFwmIzM0O0lHTVAvTUxEIHNub29waW5nXCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICAzOTpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQwOlx0XHRkZWZhdWx0IHlcbiAgNDE6XHRcdGhlbHBcbiAgNDI6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcbiAgNDM6XHRcdCAgZm9yd2FyZCBtdWx0aWNhc3QgdHJhZmZpYyBiYXNlZCBvbiBJR01QL01MRCB0cmFmZmljIHJlY2VpdmVkIGZyb21cbiAgNDQ6XHRcdCAgZWFjaCBwb3J0LlxuICA0NTpcdFxuICA0NjpcdFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cbiAgNDc6XHRcbiAgNDg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgNDk6XHRcbiAgNTA6XHRjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXG4gIDUxOlx0XHRib29sIFwmIzM0O1ZMQU4gZmlsdGVyaW5nXCYjMzQ7XG4gIDUyOlx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICA1MzpcdFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXG4gIDU0Olx0XHRkZWZhdWx0IG5cbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcbiAgNTc6XHRcdCAgcmVjZWl2ZSBhbmQgZm9yd2FyZCB0cmFmZmljIGJhc2VkIG9uIFZMQU4gaW5mb3JtYXRpb24gaW4gdGhlIHBhY2tldFxuICA1ODpcdFx0ICBhbnkgVkxBTiBpbmZvcm1hdGlvbiBjb25maWd1cmVkIG9uIHRoZSBicmlkZ2UgcG9ydCBvciBicmlkZ2UgZGV2aWNlLlxuICA1OTpcdFxuICA2MDpcdFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cbiAgNjE6XHRcbiAgNjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgNjM6XHRcbiAgNjQ6XHRjb25maWcgQlJJREdFX01SUFxuICA2NTpcdFx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbiAgNjY6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDY3Olx0XHRkZWZhdWx0IG5cbiAgNjg6XHRcdGhlbHBcbiAgNjk6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIE1SUFxuICA3MDpcdFx0ICBwcm90b2NvbCB0byBkZXRlY3QgbG9vcHNcbiAgNzE6XHRcbiAgNzI6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDczOlx0XG4gIDc0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIEJSSURHRV9DRk1cbiAgNzc6XHRcdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4gIDc4Olx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICA3OTpcdFx0aGVscFxuICA4MDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gQ0ZNXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCcmlkZ2UgTXVsdGljYXN0IEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBDT05GSUdfQlJJREdFYCBhbmQgaXRzIElHTVAgc25vb3BpbmcgY291bnRlcnBhcnQsIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgLCB3aGljaCwgYXMgZXhwZWN0ZWQsIHJlbGllcyBvbiB0aGUgYElORVRgIGFuZCBgQlJJREdFYCBkZXBlbmRlbmNpZXMuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgbXVsdGljYXN0IGZpbHRlcmluZyB3b3JrcyB3aXRoaW4gdGhlIGJyaWRnZS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYSBtdWx0aWNhc3QgZ3JvdXAuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBwb3J0IG1lbWJlcnNoaXAgd2l0aGluIG11bHRpY2FzdCBncm91cHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC4gTXkgcGxhbiBpcyB0byB0cmFjZSB0aGUgZmxvdyBvZiBjYWxscy4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGVtLCBJJiMzOTtsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgbXVsdGljYXN0IGdyb3VwcyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIGRlbGV0ZWQgd2l0aGluIHRoZSBicmlkZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF8obmV3fGRlbClfcG9ydF9ncm91cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbWRiLmM9NzYwPXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cF9zZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzg0LVxubmV0L2JyaWRnZS9icl9tZGIuYzo3ODU6XHRwID0gYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKGNmZy1cdTAwM2VwLCBcdTAwMjZjZmctXHUwMDNlZ3JvdXAsICpwcCwgZmxhZ3MsIE5VTEwsXG5uZXQvYnJpZGdlL2JyX21kYi5jLTc4Ni1cdFx0XHRcdFx0TUNBU1RfSU5DTFVERSwgY2ZnLVx1MDAzZXJ0X3Byb3RvY29sLCBleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9OTg0PXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cF9zdGFyX2coY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMDktXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMTA6XHRwID0gYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKGNmZy1cdTAwM2VwLCBcdTAwMjZjZmctXHUwMDNlZ3JvdXAsICpwcCwgZmxhZ3MsIE5VTEwsXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMTEtXHRcdFx0XHRcdGNmZy1cdTAwM2VmaWx0ZXJfbW9kZSwgY2ZnLVx1MDAzZXJ0X3Byb3RvY29sLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNS1lcnJfZGVsX3BvcnRfZ3JvdXA6XG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMzY6XHRicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAocCk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMzctXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM2Nj1icl9tdWx0aWNhc3RfbmV3X2dyb3VwX3NyYyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZywgc3RydWN0IGJyX2lwICpzcmNfaXApXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDAzLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDA0OnN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQwNS1cdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ2My1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTQ2NDp2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDY1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE1MDc9X19icl9tdWx0aWNhc3RfYWRkX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNTQxOlx0cCA9IGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChwbWN0eC1cdTAwM2Vwb3J0LCBncm91cCwgKnBwLCAwLCBzcmMsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE1NDItXHRcdFx0XHRcdGZpbHRlcl9tb2RlLCBSVFBST1RfS0VSTkVMLCBOVUxMKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDEwPXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTAxMTpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwMTItXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicl9pcCAqZ3JvdXAsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTAxNi1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwMTc6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDE4LWludCBicl9tZGJfaGFzaF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzAzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNdWx0aWNhc3QgTGlzdCBIYW5kbGluZyBpbiB0aGUgQnJpZGdlIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBgcG9ydC0mZ3Q7bWdsaXN0YCBhbmQgYHAtJmd0O25leHRgIHdpdGhpbiB0aGUgYGJyX211bHRpY2FzdC5jYCBtb2R1bGUuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBhIGxpbmsgYmV0d2VlbiBob3cgbXVsdGljYXN0IGdyb3VwIG1lbWJlcnNoaXAgaXMgdHJhY2tlZCBhbmQgaG93IHRoZSBwb3J0IHN0cnVjdHVyZXMgYXJlIGxpbmtlZCB3aXRoaW4gdGhlIGJyaWRnZS4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGlzLCBhIGdvb2QgZmlyc3Qgc3RlcCBpcyB0byBzZWUgaG93IGBtZ2xpc3RgIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgYG5ldC9icmlkZ2UvYCBkaXJlY3RvcnkuIEdyZXBwaW5nIGZvciBgbWdsaXN0YCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIGl0cyBwdXJwb3NlIGFuZCBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWdsaXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz03ODk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nYyAqZ2MpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03OTMtXHRwZyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCwgbWNhc3RfZ2MpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3OTQ6XHRXQVJOX09OKCFobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzk1LVx0V0FSTl9PTighaGxpc3RfZW1wdHkoXHUwMDI2cGctXHUwMDNlc3JjX2xpc3QpKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTgwMj12b2lkIGJyX211bHRpY2FzdF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxMS1cdC8qIEtlZXAgLVx1MDAzZW5leHQgKGhlbGQgdW5kZXIgbXVsdGljYXN0X2xvY2ssIGZyZWVkIGxhdGVyIGJ5IHRoZSBHQyB3b3JrKTpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODEyOlx0ICogYSBwb3J0LVx1MDAzZW1nbGlzdCB0ZWFyZG93biB3YWxrIG1heSBoYXZlIGxhdGNoZWQgdGhpcyBub2RlIGFzIGl0cyBuZXh0LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTMtXHQgKiBhbmQgZGVsZXRpbmcgb3RoZXIgZ3JvdXBzIG9mIHRoZSBzYW1lIHBvcnQgbXVzdCBub3QgdHJ1bmNhdGUgaXQuXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxNC1cdCAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4MTU6XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2cGctXHUwMDNlbWdsaXN0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODE2LVx0YnJfbXVsdGljYXN0X2VodF9jbGVhbl9zZXRzKHBnKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTgzNT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDI6XHQvKiBBIHRlYXJkb3duIHdhbGsgb3ZlciBwb3J0LVx1MDAzZW1nbGlzdCBjYW4gcmVhY2ggYSBncm91cCB0aGF0IGFuIGVhcmxpZXJcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQzLVx0ICogaXRlcmF0aW9uIGFscmVhZHkgZGVsZXRlZCBhcyBhIHNpZGUgZWZmZWN0LiBJdCBpcyBvZmYgbXAtXHUwMDNlcG9ydHMgYnlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0NS1cdCAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDY6XHRpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2cGctXHUwMDNlbWdsaXN0KSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQ3LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz04NjY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3NS1cdGlmICghbmV0aWZfcnVubmluZyhici1cdTAwM2VkZXYpIHx8IHRpbWVyX3BlbmRpbmcoXHUwMDI2cGctXHUwMDNldGltZXIpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg3NjpcdCAgICBobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpIHx8IHBnLVx1MDAzZWZsYWdzIFx1MDAyNiBNREJfUEdfRkxBR1NfUEVSTUFORU5UKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04NzctXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQwND1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDUyLVx0UkNVX0lOSVRfUE9JTlRFUihwLVx1MDAzZW5leHQsIG5leHQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDUzOlx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTQtXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNDY0PXZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDY4LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDY5Olx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ3MC1cdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZwLVx1MDAzZWtleS5hZGRyKSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE5OTk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjAwOS1cdHNwaW5fbG9jayhcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwMTA6XHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXHUwMDNlZGV2KSB8fCBobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwMTEtXHQgICAgIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwNTk9dm9pZCBicl9tdWx0aWNhc3RfcG9ydF9jdHhfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA4NS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBvcnQtXHUwMDNlYnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDg2Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShwZywgXHUwMDI2cG9ydC1cdTAwM2VtZ2xpc3QsIG1nbGlzdClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA4Ny1cdFx0XHRpZiAocGctXHUwMDNla2V5LmFkZHIudmlkID09IHZsYW4tXHUwMDNldmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEzNj12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE0My1cdHNwaW5fbG9ja19iaChcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNDQ6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTQ1LVx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTU9c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDE6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwbWN0eC1cdTAwM2Vwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLVx0XHRpZiAoIShwZy1cdTAwM2VmbGFncyBcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zNzI3PWJyX211bHRpY2FzdF9sZWF2ZV9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzc4NC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzc4NTpcdFx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNnAtXHUwMDNlbWdsaXN0KSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzc4Ni1cdFx0XHQgICAgKHRpbWVyX3BlbmRpbmcoXHUwMDI2cC1cdTAwM2V0aW1lcikgP1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzgxNi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzgxNzpcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZwLVx1MDAzZW1nbGlzdCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4MTgtXHRcdCAgICAodGltZXJfcGVuZGluZyhcdTAwMjZwLVx1MDAzZXRpbWVyKSA/XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00OTU5PWludCBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk4MS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDk4MjpcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdyb3VwLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KSB7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5ODMtXHRcdFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTM1Nj1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNjgtXHRzdHJ1Y3QgdGltZXJfbGlzdFx0XHRyZXhtaXRfdGltZXI7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDozNjk6XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0XHRtZ2xpc3Q7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNzAtXHRzdHJ1Y3QgcmJfcm9vdFx0XHRcdGVodF9zZXRfdHJlZTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDMxLVx0dTMyXHRcdFx0XHRtdWx0aWNhc3RfZWh0X2hvc3RzX2NudDtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQzMjpcdHN0cnVjdCBobGlzdF9oZWFkXHRcdG1nbGlzdDtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQzMy0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MTAKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogODQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIExpbnV4IEJyaWRnZSBNdWx0aWNhc3QgU3Vic3lzdGVtIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgcG9ydC0mZ3Q7bWdsaXN0YC4gVGhpcyBsaXN0IGlzIHByb3RlY3RlZCBieSBSQ1Ugb3IgYSBtdWx0aWNhc3QgbG9jaywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBjb25jdXJyZW5jeS4gVGhlIGtleSBoZXJlIGlzIHRoZSBzaGlmdCBpbiBob3cgdGhlIHBvcnQgZ3JvdXAgZW50cmllcyBhcmUgaGFuZGxlZCDigJMgdGhlIG1vdmUgZnJvbSBwbGFpbiBgaGxpc3RfYWRkX2hlYWRgIGFuZCBgaGxpc3RfZGVsX2luaXRgIHRvIFJDVS1zYWZlIHZhcmlhbnRzOiBgaGxpc3RfYWRkX2hlYWRfcmN1YCBhbmQgYGhsaXN0X2RlbF9pbml0X3JjdWAsIGFsb25nIHdpdGggYGtmcmVlX3JjdWAuIFRoaXMgaXMgaW4gdGhlIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCBtb2R1bGUsIHNvIGl0JiMzOTtzIGNvcmUgYnJpZGdlIGZ1bmN0aW9uYWxpdHkgd2l0aCBJR01QIHNub29waW5nLgoKRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIFRoZSBicmlkZ2UgbXVsdGljYXN0L0lHTVAgc25vb3BpbmcgaXMgZWFzaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXM6IG5ldGxpbmsgY29tbWFuZHMgKGxpa2UgbWRiKSwgcnRuZXRsaW5rLCBuZXRkZXZpY2UgY29uZmlnLCBhbmQgZXZlbiBzZW5kaW5nIG11bHRpY2FzdCBwYWNrZXRzIG92ZXIgdmV0aCwgdGFwLCBvciBvdGhlciBicmlkZ2VkIGludGVyZmFjZXMuIFRoaXMgbWVhbnMgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBsaWtlbHkgdG8gc2VlIGRpdmVyc2UgaW5wdXQuCgpUaGUgY2hhbmdlIGluIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgUkNVIHNlbWFudGljcyBmb3IgdGhlc2UgZnVuY3Rpb25zIGlzIHdoYXQgY2F0Y2hlcyBteSBleWUsIHRoaXMgYWxvbmUgbWFrZXMgaXQgV29ydGhGdXp6aW5nID0gdHJ1ZS4KCkZvciBmdXp6aW5nIGZvY3VzLCB0aGUgcHJpbWFyeSB0YXJnZXRzIHdpbGwgYmUgYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAsIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgLCBhbmQgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCwgYnV0IGBicl9tZGJfYWRkYCBvciBgYnJfbXVsdGljYXN0X2RlbF9wZ2AgbWlnaHQgYWxzbyB3YXJyYW50IGF0dGVudGlvbi4gVGhlIHByZWNpc2UgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZCB3ZXJlIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC4KCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBib3RoIGZ1bmN0aW9ucywgYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAgYW5kIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgLCBhcmUgbm9uLXN0YXRpYyBhbmQgZGVjbGFyZWQgaW4gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYC4KClRoZSBjb25maWd1cmF0aW9uIGZsYWdzIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBDT05GSUdfQlJJREdFYCBhbmQgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AuIFRoZSBsYXR0ZXIgZGVwZW5kcyBvbiB0aGUgZm9ybWVyIGFuZCBhbHNvIG9uIGBJTkVUYCwgc28gYEJSSURHRWAgYW5kIGBCUklER0VfSUdNUF9TTk9PUElOR2AgYXJlIG15IGVuYWJsZSBjb25maWdzLiBgQ09ORklHX0JSSURHRWAgYWxzbyBwdWxscyBpbiBMTEMgYW5kIFNUUC4KClNvLCB0byBzdW1tYXJpemU6CgoqICAgV29ydGhGdXp6aW5nOiBUcnVlCiogICBGb2N1c1N5bWJvbHM6IGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgLCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCwgYGJyX21kYl9hZGRgLCBgYnJfbXVsdGljYXN0X2RlbF9wZ2AKKiAgIEVuYWJsZUNvbmZpZ3M6IGBCUklER0VgLCBgQlJJREdFX0lHTVBfU05PT1BJTkdgCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB3ZSBoYXZlIGEgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgdXRpbGl6ZXMgUkNVIHNlbWFudGljcyBmb3IgaW5zZXJ0aW9uL2RlbGV0aW9uIGFuZCBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgaXMgYSBzb2xpZCB0YXJnZXQsIGFuZCB0aGUgYW5hbHlzaXMgaXMgY29tcGxldGUuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGxpc3QgbWFuYWdlbWVudCB0byB1c2UgUkNVLXNhZmUgcHJpbWl0aXZlcyAoaGxpc3RfYWRkX2hlYWRfcmN1LCBobGlzdF9kZWxfaW5pdF9yY3UsIFJDVV9JTklUX1BPSU5URVIsIGFuZCBrZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgYnJpZGdlIElHTVAgc25vb3Bpbmcgc3Vic3lzdGVtLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rL01EQiBpbnRlcmZhY2VzIGFuZCBtdWx0aWNhc3QgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBncm91cCBsaXN0IG1hbmFnZW1lbnQgdG8gdXNlIFJDVS1zYWZlIHByaW1pdGl2ZXMgKGhsaXN0X2FkZF9oZWFkX3JjdSwgaGxpc3RfZGVsX2luaXRfcmN1LCBSQ1VfSU5JVF9QT0lOVEVSLCBhbmQga2ZyZWVfcmN1KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaW4gdGhlIGJyaWRnZSBJR01QIHNub29waW5nIHN1YnN5c3RlbSwgd2hpY2ggY2FuIGJlIGV4ZXJjaXNlZCB2aWEgbmV0bGluay9NREIgaW50ZXJmYWNlcyBhbmQgbXVsdGljYXN0IHRyYWZmaWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCBgaGxpc3RfYWRkX2hlYWRfcmN1YCwgYFJDVV9JTklUX1BPSU5URVJgLCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYW5kIGBrZnJlZV9yY3VgIGFyZSB1c2VkIGNvcnJlY3RseSBmb3IgYHBvcnQtXHUwMDNlbWdsaXN0YCBhbmQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgLCBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgcmVhZGVycyAoc3VjaCBhcyBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgKSBmcm9tIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3Igb2JzZXJ2aW5nIHBhcnRpYWxseSBwdWJsaXNoZWQgZW50cmllcy5cblxuVGhlIGFsbG9jYXRlZCBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAgc3RydWN0dXJlIGlzIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG92ZXJmbG93cywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBDb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgUkNVIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzYzNkYzNjZDM1Y2JhNzJhNTQ1ZmUwMzczMDQxYjJlNTRkZDU4Y2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE0OjI3OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKaW5kZXggM2U5YjEwZjhhYmYxZC4uMmY5YmIzMGUxYTFmNiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCkBAIC0xNDQxLDE2ICYjNDM7MTQ0MSwxNyBAQCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoCiAJCWdvdG8gZnJlZV9vdXQ7CiAJfQogCi0JcmN1X2Fzc2lnbl9wb2ludGVyKHAtJmd0O25leHQsIG5leHQpOwogCXRpbWVyX3NldHVwKCZhbXA7cC0mZ3Q7dGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQsIDApOwogCXRpbWVyX3NldHVwKCZhbXA7cC0mZ3Q7cmV4bWl0X3RpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9yZXhtaXQsIDApOwotCWhsaXN0X2FkZF9oZWFkKCZhbXA7cC0mZ3Q7bWdsaXN0LCAmYW1wO3BvcnQtJmd0O21nbGlzdCk7CiAKIAlpZiAoc3JjKQogCQltZW1jcHkocC0mZ3Q7ZXRoX2FkZHIsIHNyYywgRVRIX0FMRU4pOwogCWVsc2UKIAkJZXRoX2Jyb2FkY2FzdF9hZGRyKHAtJmd0O2V0aF9hZGRyKTsKIAomIzQzOwlSQ1VfSU5JVF9QT0lOVEVSKHAtJmd0O25leHQsIG5leHQpOwomIzQzOwlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDtwLSZndDttZ2xpc3QsICZhbXA7cG9ydC0mZ3Q7bWdsaXN0KTsKJiM0MzsKIAlyZXR1cm4gcDsKIAogZnJlZV9vdXQ6CkBAIC0xNDY1LDExICYjNDM7MTQ2NiwxMSBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKQogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBwLSZndDtrZXkucG9ydDsKIAlfX3UxNiB2aWQgPSBwLSZndDtrZXkuYWRkci52aWQ7CiAKLQlobGlzdF9kZWxfaW5pdCgmYW1wO3AtJmd0O21nbGlzdCk7CiYjNDM7CWhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3AtJmd0O21nbGlzdCk7CiAJaWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKCZhbXA7cC0mZ3Q7a2V5LmFkZHIpKQogCQlyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KCZhbXA7cG9ydC0mZ3Q7YnItJmd0O3NnX3BvcnRfdGJsLCAmYW1wO3AtJmd0O3Jobm9kZSwKIAkJCQkgICAgICAgYnJfc2dfcG9ydF9yaHRfcGFyYW1zKTsKLQlrZnJlZShwKTsKJiM0MzsJa2ZyZWVfcmN1KHAsIHJjdSk7CiAJYnJfbXVsdGljYXN0X3BvcnRfbmdyb3Vwc19kZWMocG9ydCwgdmlkKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBCcmlkZ2UgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY2hhbmdlcyBtYWRlLCBlc3BlY2lhbGx5IHdpdGhpbiBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC4gTGV0JiMzOTtzIGJyZWFrIHRoZXNlIGRvd24gaW5kaXZpZHVhbGx5LgoKSW4gYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAsIHRoZSBrZXkgZGlmZmVyZW5jZSBpcyB0aGUgcmVvcmRlcmluZyBvZiB0aGUgcG9pbnRlciBhc3NpZ25tZW50cyBhbmQgbGlzdCBhZGRpdGlvbnMuIFByZXZpb3VzbHksIHdlIGhhZCBgcmN1X2Fzc2lnbl9wb2ludGVyKHAtJmd0O25leHQsIG5leHQpO2AgYW5kIGBobGlzdF9hZGRfaGVhZCgmYW1wO3AtJmd0O21nbGlzdCwgJmFtcDtwb3J0LSZndDttZ2xpc3QpO2AgYmVmb3JlIHRoZSBzZXR1cCBvZiB0aGUgYGV0aF9hZGRyYC4gTm93LCBpdCYjMzk7cyBiZWVuIGNoYW5nZWQgdG8gYFJDVV9JTklUX1BPSU5URVIocC0mZ3Q7bmV4dCwgbmV4dCk7YCBhbmQgYGhsaXN0X2FkZF9oZWFkX3JjdSgmYW1wO3AtJmd0O21nbGlzdCwgJmFtcDtwb3J0LSZndDttZ2xpc3QpO2AgYWZ0ZXIgdGhlIGBldGhfYWRkcmAgc2V0dXAuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjb25zaWRlciB3aHkgdGhpcyByZW9yZGVyaW5nIHdhcyBuZWNlc3NhcnkgYW5kIGhvdyBpdCBhZmZlY3RzIG1lbW9yeSBvcmRlcmluZyBhbmQgZGF0YSB2aXNpYmlsaXR5IHVuZGVyIFJDVS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHdpdGggcmVzcGVjdCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIsIHBhcnRpY3VsYXJseSB0byBlbnN1cmUgYXRvbWljaXR5IGFuZCBjb3JyZWN0bmVzcyB3aXRoIHJlc3BlY3QgdG8gY29uY3VycmVudCBhY2Nlc3MgYnkgcmVhZGVycy4KClRoZW4sIEkmIzM5O20gbG9va2luZyBhdCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC4gSGVyZSwgdGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYGhsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7bWdsaXN0KTtgIGhhcyBiZWNvbWUgYGhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3AtJmd0O21nbGlzdCk7YCwgYW5kIGBrZnJlZShwKTtgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGtmcmVlX3JjdShwLCByY3UpO2AuIENsZWFybHksIHRoZXNlIHJldmlzaW9ucyBhcmUgcmVsYXRlZCB0byBSQ1Ugc3luY2hyb25pemF0aW9uLiBUaGUgaW50ZW50aW9uIGlzIHRvIHJlbW92ZSB0aGUgZWxlbWVudCBzYWZlbHkgZnJvbSB0aGUgaGFzaCBsaXN0LCB0aGVuIGRlZmVyIHRoZSBtZW1vcnkgZGVhbGxvY2F0aW9uIHVzaW5nIFJDVSBncmFjZSBwZXJpb2RzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBpbiBSQ1UtcHJvdGVjdGVkIGRhdGEgc3RydWN0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIGltcGxlbWVudGVkIGNvcnJlY3RseSwgYW5kIHRoYXQgYWxsIG5lY2Vzc2FyeSBSQ1Ugc3luY2hyb25pemF0aW9uIGlzIGluIHBsYWNlIGFyb3VuZCB0aGVzZSBjaGFuZ2VzLCBlbnN1cmluZyB0aGF0IHJlYWRlcnMgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSBhcmUgcHJvcGVybHkgcHJvdGVjdGVkLgoKSSYjMzk7bGwgbm93IG5lZWQgdG8gZ28gZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBtdWx0aWNhc3QgcG9ydCBncm91cHMgYW5kIHRoZWlyIGxpZmVjeWNsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyB0aHJlYWQtc2FmZSBhbmQgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tZGIuYz03NjA9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3NnKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy03ODQtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjc4NTpcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoY2ZnLVx1MDAzZXAsIFx1MDAyNmNmZy1cdTAwM2Vncm91cCwgKnBwLCBmbGFncywgTlVMTCxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzg2LVx0XHRcdFx0XHRNQ0FTVF9JTkNMVURFLCBjZmctXHUwMDNlcnRfcHJvdG9jb2wsIGV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz05ODQ9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAwOS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTAxMDpcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoY2ZnLVx1MDAzZXAsIFx1MDAyNmNmZy1cdTAwM2Vncm91cCwgKnBwLCBmbGFncywgTlVMTCxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAxMS1cdFx0XHRcdFx0Y2ZnLVx1MDAzZWZpbHRlcl9tb2RlLCBjZmctXHUwMDNlcnRfcHJvdG9jb2wsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzY2PWJyX211bHRpY2FzdF9uZXdfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnLCBzdHJ1Y3QgYnJfaXAgKnNyY19pcClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0MDMtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0MDQ6c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDA1LVx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNTA3PV9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU0MC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU0MTpcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAocG1jdHgtXHUwMDNlcG9ydCwgZ3JvdXAsICpwcCwgMCwgc3JjLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQyLVx0XHRcdFx0XHRmaWx0ZXJfbW9kZSwgUlRQUk9UX0tFUk5FTCwgTlVMTCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTAxMD1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwMTE6YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnJfaXAgKmdyb3VwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBNdWx0aWNhc3QgUG9ydCBHcm91cCBMb2dpYyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIG11bHRpY2FzdCBwb3J0IGdyb3VwcyBhcmUgbWFuYWdlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBzZWUgaG93IGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgYnJvYWRlciBicmlkZ2Ugc3RydWN0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIGFyb3VuZCB0aG9zZSB0d28gZnVuY3Rpb25zLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSYjMzk7cmUgb3BlcmF0aW5nIG9uIOKAkyBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZ3JvdXBzIGFyZSBjcmVhdGVkLCBsaW5rZWQsIGFuZCBldmVudHVhbGx5IHJlbW92ZWQuIEFyZSB0aGV5IHVzaW5nIHJlZmVyZW5jZSBjb3VudHM/IElzIHRoZXJlIGEgY2VudHJhbCBkYXRhIHN0cnVjdHVyZSBtYW5hZ2luZyB0aGVtIGFsbCwgb3IgYXJlIHRoZXkgZGlzdHJpYnV0ZWQgc29tZWhvdz8gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gY29uY3VycmVuY3kgY29uY2VybnMgaGVyZS4gSSBleHBlY3QgdGhhdCBjcmVhdGluZyBhbmQgZGVsZXRpbmcgZ3JvdXBzIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQgY291bGQgZWFzaWx5IGludHJvZHVjZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBsaWtlIG11dGV4ZXMgb3Igc3BpbmxvY2tzLiBBcmUgdGhleSB1c2luZyBhbnkgYXRvbWljIG9wZXJhdGlvbnM/IEkmIzM5O2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIGVkZ2UgY2FzZXM6IHdoYXQgaGFwcGVucyBpZiBhIHBvcnQgZ3JvdXAgaXMgYWRkZWQgYW5kIHRoZW4gZGVsZXRlZCBpbiByYXBpZCBzdWNjZXNzaW9uPyBEb2VzIHRoZSBjb2RlIGhhbmRsZSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGNvcnJ1cHRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY2FyZWZ1bGx5IG1hbmFnZWQ/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1vZGVsIHRvIGVuc3VyZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVoYXZpbmcgY29ycmVjdGx5LCBlZmZpY2llbnRseSwgYW5kLCBhYm92ZSBhbGwsIHNhZmVseS4gVW5kZXJzdGFuZGluZyB0aGUgZXhhY3QgY29udGV4dCBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBhbmQgd2hhdCBjYWxscyB0aGVtLCBhcmUgYWxzbyBjcnVjaWFsIGFzcGVjdHMgZm9yIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MDA6XHRcbjE0MDE6XHRcdHJldHVybiBncnBfc3JjO1xuMTQwMjpcdH1cbjE0MDM6XHRcbjE0MDQ6XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXG4xNDA1Olx0XHRcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbjE0MDY6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnJfaXAgKmdyb3VwLFxuMTQwNzpcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgX19yY3UgKm5leHQsXG4xNDA4Olx0XHRcdFx0dW5zaWduZWQgY2hhciBmbGFncyxcbjE0MDk6XHRcdFx0XHRjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsXG4xNDEwOlx0XHRcdFx0dTggZmlsdGVyX21vZGUsXG4xNDExOlx0XHRcdFx0dTggcnRfcHJvdG9jb2wsXG4xNDEyOlx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTQxMzpcdHtcbjE0MTQ6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnA7XG4xNDE1Olx0XHRpbnQgZXJyO1xuMTQxNjpcdFxuMTQxNzpcdFx0ZXJyID0gYnJfbXVsdGljYXN0X3BvcnRfbmdyb3Vwc19pbmMocG9ydCwgZ3JvdXAsIGV4dGFjayk7XG4xNDE4Olx0XHRpZiAoZXJyKVxuMTQxOTpcdFx0XHRyZXR1cm4gTlVMTDtcbjE0MjA6XHRcbjE0MjE6XHRcdHAgPSBremFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG4xNDIyOlx0XHRpZiAodW5saWtlbHkoIXApKSB7XG4xNDIzOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0NvdWxkbiYjMzk7dCBhbGxvY2F0ZSBuZXcgcG9ydCBncm91cFwmIzM0Oyk7XG4xNDI0Olx0XHRcdGdvdG8gZGVjX291dDtcbjE0MjU6XHRcdH1cbjE0MjY6XHRcbjE0Mjc6XHRcdHAtXHUwMDNla2V5LmFkZHIgPSAqZ3JvdXA7XG4xNDI4Olx0XHRwLVx1MDAzZWtleS5wb3J0ID0gcG9ydDtcbjE0Mjk6XHRcdHAtXHUwMDNlZmxhZ3MgPSBmbGFncztcbjE0MzA6XHRcdHAtXHUwMDNlZmlsdGVyX21vZGUgPSBmaWx0ZXJfbW9kZTtcbjE0MzE6XHRcdHAtXHUwMDNlcnRfcHJvdG9jb2wgPSBydF9wcm90b2NvbDtcbjE0MzI6XHRcdHAtXHUwMDNlZWh0X2hvc3RfdHJlZSA9IFJCX1JPT1Q7XG4xNDMzOlx0XHRwLVx1MDAzZWVodF9zZXRfdHJlZSA9IFJCX1JPT1Q7XG4xNDM0Olx0XHRwLVx1MDAzZW1jYXN0X2djLmRlc3Ryb3kgPSBicl9tdWx0aWNhc3RfZGVzdHJveV9wb3J0X2dyb3VwO1xuMTQzNTpcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnAtXHUwMDNlc3JjX2xpc3QpO1xuMTQzNjpcdFxuMTQzNzpcdFx0aWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKGdyb3VwKSBcdTAwMjZcdTAwMjZcbjE0Mzg6XHRcdCAgICByaGFzaHRhYmxlX2xvb2t1cF9pbnNlcnRfZmFzdChcdTAwMjZwb3J0LVx1MDAzZWJyLVx1MDAzZXNnX3BvcnRfdGJsLCBcdTAwMjZwLVx1MDAzZXJobm9kZSxcbjE0Mzk6XHRcdFx0XHRcdFx0ICBicl9zZ19wb3J0X3JodF9wYXJhbXMpKSB7XG4xNDQwOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0NvdWxkbiYjMzk7dCBpbnNlcnQgbmV3IHBvcnQgZ3JvdXBcJiMzNDspO1xuMTQ0MTpcdFx0XHRnb3RvIGZyZWVfb3V0O1xuMTQ0MjpcdFx0fVxuMTQ0MzpcdFxuMTQ0NDpcdFx0dGltZXJfc2V0dXAoXHUwMDI2cC1cdTAwM2V0aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZCwgMCk7XG4xNDQ1Olx0XHR0aW1lcl9zZXR1cChcdTAwMjZwLVx1MDAzZXJleG1pdF90aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0LCAwKTtcbjE0NDY6XHRcbjE0NDc6XHRcdGlmIChzcmMpXG4xNDQ4Olx0XHRcdG1lbWNweShwLVx1MDAzZWV0aF9hZGRyLCBzcmMsIEVUSF9BTEVOKTtcbjE0NDk6XHRcdGVsc2VcbjE0NTA6XHRcdFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKHAtXHUwMDNlZXRoX2FkZHIpO1xuMTQ1MTpcdFxuMTQ1MjpcdFx0UkNVX0lOSVRfUE9JTlRFUihwLVx1MDAzZW5leHQsIG5leHQpO1xuMTQ1MzpcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCk7XG4xNDU0Olx0XG4xNDU1Olx0XHRyZXR1cm4gcDtcbjE0NTY6XHRcbjE0NTc6XHRmcmVlX291dDpcbjE0NTg6XHRcdGtmcmVlKHApO1xuMTQ1OTpcdGRlY19vdXQ6XG4xNDYwOlx0XHRicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCBncm91cC1cdTAwM2V2aWQpO1xuMTQ2MTpcdFx0cmV0dXJuIE5VTEw7XG4xNDYyOlx0fVxuMTQ2MzpcdFxuMTQ2NDpcdHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXG4xNDY1Olx0e1xuMTQ2NjpcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtXHUwMDNla2V5LnBvcnQ7XG4xNDY3Olx0XHRfX3UxNiB2aWQgPSBwLVx1MDAzZWtleS5hZGRyLnZpZDtcbjE0Njg6XHRcbjE0Njk6XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZwLVx1MDAzZW1nbGlzdCk7XG4xNDcwOlx0XHRpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coXHUwMDI2cC1cdTAwM2VrZXkuYWRkcikpXG4xNDcxOlx0XHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cG9ydC1cdTAwM2Vici1cdTAwM2VzZ19wb3J0X3RibCwgXHUwMDI2cC1cdTAwM2VyaG5vZGUsXG4xNDcyOlx0XHRcdFx0XHQgICAgICAgYnJfc2dfcG9ydF9yaHRfcGFyYW1zKTtcbjE0NzM6XHRcdGtmcmVlX3JjdShwLCByY3UpO1xuMTQ3NDpcdFx0YnJfbXVsdGljYXN0X3BvcnRfbmdyb3Vwc19kZWMocG9ydCwgdmlkKTtcbjE0NzU6XHR9XG4xNDc2Olx0XG4xNDc3Olx0dm9pZCBicl9tdWx0aWNhc3RfaG9zdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4xNDc4Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXAsIGJvb2wgbm90aWZ5KVxuMTQ3OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU3NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGFwcHJvYWNoIHRoaXMgY29kZSBwYXRjaDoKCioqRGVjb25zdHJ1Y3RpbmcgVGhpcyBQYXRjaDogQSBNZW50YWwgQ2hlY2tsaXN0KioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiAqV2hhdCogaXMgdGhpcyBwYXRjaCBldmVuICp0cnlpbmcqIHRvIGFjY29tcGxpc2g/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBjaGFuZ2UuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHVzdWFsbHkgcmV0cmFjaW5nIHRoZSBzdGVwcyB0aGF0IGxlZCB0byB0aGlzIHBvaW50LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgaW1tZWRpYXRlIGNvbnRleHQ6IGxvb2tpbmcgYXQgdGhlIGBnaXRgIGhpc3Rvcnkgb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvciByZWFzb25pbmcgcHJvdmlkZWQgYXJvdW5kIHRoYXQgc3BlY2lmaWMgaXRlcmF0aW9uIGludm9sdmluZyBgcG9ydC0mZ3Q7bWdsaXN0YC4KClRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBhZmZlY3RzIHRoZSByZXN0IG9mIHRoZSBwcm9ncmFtLCBzbyBJIHdpbGwgc2NhbiB0aGUgY29kZSBiYXNlIHRvIGZpbmQgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHBvcnQtJmd0O21nbGlzdGAgaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBTZWVpbmcgdGhlIHVzYWdlIHBvaW50cyBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcGFydCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWdsaXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz03ODk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nYyAqZ2MpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03OTMtXHRwZyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCwgbWNhc3RfZ2MpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3OTQ6XHRXQVJOX09OKCFobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzk1LVx0V0FSTl9PTighaGxpc3RfZW1wdHkoXHUwMDI2cGctXHUwMDNlc3JjX2xpc3QpKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTgwMj12b2lkIGJyX211bHRpY2FzdF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxMS1cdC8qIEtlZXAgLVx1MDAzZW5leHQgKGhlbGQgdW5kZXIgbXVsdGljYXN0X2xvY2ssIGZyZWVkIGxhdGVyIGJ5IHRoZSBHQyB3b3JrKTpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODEyOlx0ICogYSBwb3J0LVx1MDAzZW1nbGlzdCB0ZWFyZG93biB3YWxrIG1heSBoYXZlIGxhdGNoZWQgdGhpcyBub2RlIGFzIGl0cyBuZXh0LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTMtXHQgKiBhbmQgZGVsZXRpbmcgb3RoZXIgZ3JvdXBzIG9mIHRoZSBzYW1lIHBvcnQgbXVzdCBub3QgdHJ1bmNhdGUgaXQuXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxNC1cdCAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4MTU6XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2cGctXHUwMDNlbWdsaXN0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODE2LVx0YnJfbXVsdGljYXN0X2VodF9jbGVhbl9zZXRzKHBnKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTgzNT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDI6XHQvKiBBIHRlYXJkb3duIHdhbGsgb3ZlciBwb3J0LVx1MDAzZW1nbGlzdCBjYW4gcmVhY2ggYSBncm91cCB0aGF0IGFuIGVhcmxpZXJcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQzLVx0ICogaXRlcmF0aW9uIGFscmVhZHkgZGVsZXRlZCBhcyBhIHNpZGUgZWZmZWN0LiBJdCBpcyBvZmYgbXAtXHUwMDNlcG9ydHMgYnlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0NS1cdCAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDY6XHRpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2cGctXHUwMDNlbWdsaXN0KSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQ3LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz04NjY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3NS1cdGlmICghbmV0aWZfcnVubmluZyhici1cdTAwM2VkZXYpIHx8IHRpbWVyX3BlbmRpbmcoXHUwMDI2cGctXHUwMDNldGltZXIpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg3NjpcdCAgICBobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpIHx8IHBnLVx1MDAzZWZsYWdzIFx1MDAyNiBNREJfUEdfRkxBR1NfUEVSTUFORU5UKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04NzctXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQwND1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDUyLVx0UkNVX0lOSVRfUE9JTlRFUihwLVx1MDAzZW5leHQsIG5leHQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDUzOlx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTQtXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNDY0PXZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDY4LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDY5Olx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ3MC1cdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZwLVx1MDAzZWtleS5hZGRyKSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE5OTk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjAwOS1cdHNwaW5fbG9jayhcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwMTA6XHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXHUwMDNlZGV2KSB8fCBobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwMTEtXHQgICAgIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwNTk9dm9pZCBicl9tdWx0aWNhc3RfcG9ydF9jdHhfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA4NS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBvcnQtXHUwMDNlYnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDg2Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShwZywgXHUwMDI2cG9ydC1cdTAwM2VtZ2xpc3QsIG1nbGlzdClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA4Ny1cdFx0XHRpZiAocGctXHUwMDNla2V5LmFkZHIudmlkID09IHZsYW4tXHUwMDNldmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEzNj12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE0My1cdHNwaW5fbG9ja19iaChcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNDQ6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTQ1LVx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTU9c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDE6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwbWN0eC1cdTAwM2Vwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLVx0XHRpZiAoIShwZy1cdTAwM2VmbGFncyBcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zNzI3PWJyX211bHRpY2FzdF9sZWF2ZV9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzc4NC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzc4NTpcdFx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNnAtXHUwMDNlbWdsaXN0KSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzc4Ni1cdFx0XHQgICAgKHRpbWVyX3BlbmRpbmcoXHUwMDI2cC1cdTAwM2V0aW1lcikgP1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzgxNi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzgxNzpcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZwLVx1MDAzZW1nbGlzdCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4MTgtXHRcdCAgICAodGltZXJfcGVuZGluZyhcdTAwMjZwLVx1MDAzZXRpbWVyKSA/XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00OTU5PWludCBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk4MS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDk4MjpcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdyb3VwLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KSB7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5ODMtXHRcdFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTM1Nj1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNjgtXHRzdHJ1Y3QgdGltZXJfbGlzdFx0XHRyZXhtaXRfdGltZXI7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDozNjk6XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0XHRtZ2xpc3Q7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNzAtXHRzdHJ1Y3QgcmJfcm9vdFx0XHRcdGVodF9zZXRfdHJlZTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDMxLVx0dTMyXHRcdFx0XHRtdWx0aWNhc3RfZWh0X2hvc3RzX2NudDtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQzMjpcdHN0cnVjdCBobGlzdF9oZWFkXHRcdG1nbGlzdDtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQzMy0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCBhbmQgUkNVKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudGAg4oCTIHNwZWNpZmljYWxseSBsaW5lIDQ5NTkgaW4gYGJyX211bHRpY2FzdC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGxldmVyYWdpbmcgUmVhZC1Db3B5LVVwZGF0ZSAoUkNVKSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBgbWdsaXN0YCBkYXRhIHN0cnVjdHVyZSBoZXJlLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgY29udGV4dCwgdGhhdCBgbWdsaXN0YCBpcyBhIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwIGxpc3QuIFRoZSBjb3JlIGlzc3VlLCBJJiMzOTttIGd1ZXNzaW5nLCBpcyBjb25jdXJyZW50IGFjY2VzcyDigJMgbXVsdGlwbGUgcmVhZGVycywgcG90ZW50aWFsIHdyaXRlcnMuIFJDVSBpcyBhIG5hdHVyYWwgZml0IGZvciB0aGlzIGtpbmQgb2Ygc2NlbmFyaW8sIGVzcGVjaWFsbHkgd2hlcmUgcmVhZHMgYXJlIG11Y2ggbW9yZSBmcmVxdWVudCB0aGFuIHdyaXRlcywgYW5kIHRoZSB0b2xlcmFuY2UgZm9yIGEgc2xpZ2h0IGRlbGF5IGluIHVwZGF0ZXMgaXMgYWNjZXB0YWJsZS4gVGhpcyBoaW50cyB0aGF0IHVwZGF0ZXMgdG8gdGhlIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwIGFyZW4mIzM5O3QgY3JpdGljYWwgdG8gYmUgaW1tZWRpYXRlbHkgcmVmbGVjdGVkIGFjcm9zcyBhbGwgdGhyZWFkcy4gV2Ugc2hvdWxkIHNlZSB0aGUgcmVhZCBzaWRlIHV0aWxpemluZyBgcmN1X2RlcmVmZXJlbmNlYCBvciBzaW1pbGFyIHByaW1pdGl2ZXMgYW5kIHRoZSB3cml0ZSBzaWRlIHVzaW5nIGBzeW5jaHJvbml6ZV9yY3VgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiB0byB3YWl0IG91dCBhbnkgcmVhZGVycyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBsaXN0IHNhZmVseS4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgcG9pbnRlciBtYW5pcHVsYXRpb24gdG8gdmVyaWZ5IFJDVSYjMzk7cyBhcHByb3ByaWF0ZSB1c2UuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ5NzA6XHRcdFx0Z290byB1bmxvY2s7XG40OTcxOlx0XG40OTcyOlx0XHRwb3J0ID0gYnJfcG9ydF9nZXRfcmN1KGRldik7XG40OTczOlx0XHRpZiAoIXBvcnQgfHwgIXBvcnQtXHUwMDNlYnIpXG40OTc0Olx0XHRcdGdvdG8gdW5sb2NrO1xuNDk3NTpcdFxuNDk3NjpcdFx0YnIgPSBwb3J0LVx1MDAzZWJyO1xuNDk3NzpcdFxuNDk3ODpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2YnItXHUwMDNlcG9ydF9saXN0LCBsaXN0KSB7XG40OTc5Olx0XHRcdGlmICghcG9ydC1cdTAwM2VkZXYgfHwgcG9ydC1cdTAwM2VkZXYgPT0gZGV2KVxuNDk4MDpcdFx0XHRcdGNvbnRpbnVlO1xuNDk4MTpcdFxuNDk4MjpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZ3JvdXAsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcbjQ5ODM6XHRcdFx0XHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSwgR0ZQX0FUT01JQyk7XG40OTg0Olx0XHRcdFx0aWYgKCFlbnRyeSlcbjQ5ODU6XHRcdFx0XHRcdGdvdG8gdW5sb2NrO1xuNDk4NjpcdFxuNDk4NzpcdFx0XHRcdGVudHJ5LVx1MDAzZWFkZHIgPSBncm91cC1cdTAwM2VrZXkuYWRkcjtcbjQ5ODg6XHRcdFx0XHRsaXN0X2FkZChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LCBicl9pcF9saXN0KTtcbjQ5ODk6XHRcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG40OTkwOlx0XHRcdH1cbjQ5OTE6XHRcdH1cbjQ5OTI6XHRcbjQ5OTM6XHR1bmxvY2s6XG40OTk0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjQ5OTU6XHRcdHJldHVybiBjb3VudDtcbjQ5OTY6XHR9XG40OTk3Olx0RVhQT1JUX1NZTUJPTF9HUEwoYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnQpO1xuNDk5ODpcdFxuNDk5OTpcdC8qKlxuNTAwMDpcdCAqIGJyX211bHRpY2FzdF9oYXNfcXVlcmllcl9hbnl3aGVyZSAtIENoZWNrcyBmb3IgYSBxdWVyaWVyIG9uIGEgYnJpZGdlXG41MDAxOlx0ICogQGRldjogVGhlIGJyaWRnZSBwb3J0IHByb3ZpZGluZyB0aGUgYnJpZGdlIG9uIHdoaWNoIHRvIGNoZWNrIGZvciBhIHF1ZXJpZXJcbjUwMDI6XHQgKiBAcHJvdG86IFRoZSBwcm90b2NvbCBmYW1pbHkgdG8gY2hlY2sgZm9yOiBJR01QIC1cdTAwM2UgRVRIX1BfSVAsIE1MRCAtXHUwMDNlIEVUSF9QX0lQVjZcbjUwMDM6XHQgKlxuNTAwNDpcdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBpbnRlcmZhY2UgaGFzIGEgYnJpZGdlIG9uIHRvcCBhbmQgaWYgc28gcmV0dXJuc1xuNTAwNTpcdCAqIHRydWUgaWYgYSB2YWxpZCBxdWVyaWVyIGV4aXN0cyBhbnl3aGVyZSBvbiB0aGUgYnJpZGdlZCBsaW5rIGxheWVyLlxuNTAwNjpcdCAqIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuNTAwNzpcdCAqL1xuNTAwODpcdGJvb2wgYnJfbXVsdGljYXN0X2hhc19xdWVyaWVyX2FueXdoZXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcm90bylcbjUwMDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNdWx0aWNhc3QgR3JvdXAgTGlzdCBpbiB0aGUgQnJpZGdlIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgIGxvb3AsIGl0ZXJhdGluZyB0aHJvdWdoIGBwb3J0LSZndDttZ2xpc3RgLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvZGUgaW4gYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAganVzdCB1c2VkIGBobGlzdF9hZGRfaGVhZCgmYW1wO3AtJmd0O21nbGlzdCwgJmFtcDtwb3J0LSZndDttZ2xpc3QpYC4gQW5kIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgIHNpbXBseSBkZWxldGVkIGl0IHdpdGggYGhsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7bWdsaXN0KWAgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgYSBga2ZyZWUocClgLgoKVGhhdCYjMzk7cyBhIGNsYXNzaWMgUkNVIGNvbmN1cnJlbmN5IGlzc3VlIHJpZ2h0IHRoZXJlISBJdCBtZWFucyBjb25jdXJyZW50IFJDVSByZWFkZXJzIGluIGBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudGAgY291bGQgdmVyeSBlYXNpbHkgcnVuIGludG8gcHJvYmxlbXMuIFRoZXkgbWlnaHQgcmVhZCBgcG9ydC0mZ3Q7bWdsaXN0YCB3aXRob3V0IHRoZSBuZWNlc3NhcnkgbWVtb3J5IGJhcnJpZXJzLCBsZWFkaW5nIHRvIGluY29uc2lzdGVudCBkYXRhLiBXb3JzZSwgdGhleSBjb3VsZCBlbmNvdW50ZXIgYSBkYW5nbGluZyBwb2ludGVyIGJlY2F1c2UgYHBgIHdhcyBmcmVlZCBpbW1lZGlhdGVseSB3aXRoIGBrZnJlZShwKWAgcmF0aGVyIHRoYW4gYGtmcmVlX3JjdShwLCByY3UpYCwgd2hpY2ggaXMgYSB0ZXh0Ym9vayB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IQoKVGhpcyBwYXRjaCBpcyBvYnZpb3VzbHkgYWRkcmVzc2luZyB0aGlzIGJ5IHVzaW5nIGBobGlzdF9hZGRfaGVhZF9yY3VgIGluc3RlYWQuIEkgZXhwZWN0IHRoYXQgdGhpcyBlbnN1cmVzIHRoZSByZXF1aXJlZCBtZW1vcnkgYmFycmllcnMuIEl0IG1ha2VzIHN1cmUgdGhhdCBhbGwgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiBgcGAgYXJlIHZpc2libGUgKmJlZm9yZSogYHBgIGlzIGxpbmtlZCBpbnRvIGBwb3J0LSZndDttZ2xpc3RgLiBUaGlzIGlzIGNyaXRpY2FsLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgbWVtYmVycyBvZiBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAgaW4gYGJyX3ByaXZhdGUuaGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgaXNzdWVzIGhlcmUgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzU1Olx0XG4gMzU2Olx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCB7XG4gMzU3Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICpuZXh0O1xuIDM1ODpcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cF9zZ19rZXkga2V5O1xuIDM1OTpcdFx0dW5zaWduZWQgY2hhclx0XHRcdGV0aF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gMzYwOlx0XHR1bnNpZ25lZCBjaGFyXHRcdFx0ZmxhZ3M7XG4gMzYxOlx0XHR1bnNpZ25lZCBjaGFyXHRcdFx0ZmlsdGVyX21vZGU7XG4gMzYyOlx0XHR1bnNpZ25lZCBjaGFyXHRcdFx0Z3JwX3F1ZXJ5X3JleG1pdF9jbnQ7XG4gMzYzOlx0XHR1bnNpZ25lZCBjaGFyXHRcdFx0cnRfcHJvdG9jb2w7XG4gMzY0Olx0XG4gMzY1Olx0XHRzdHJ1Y3QgaGxpc3RfaGVhZFx0XHRzcmNfbGlzdDtcbiAzNjY6XHRcdHVuc2lnbmVkIGludFx0XHRcdHNyY19lbnRzO1xuIDM2NzpcdFx0c3RydWN0IHRpbWVyX2xpc3RcdFx0dGltZXI7XG4gMzY4Olx0XHRzdHJ1Y3QgdGltZXJfbGlzdFx0XHRyZXhtaXRfdGltZXI7XG4gMzY5Olx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0XHRtZ2xpc3Q7XG4gMzcwOlx0XHRzdHJ1Y3QgcmJfcm9vdFx0XHRcdGVodF9zZXRfdHJlZTtcbiAzNzE6XHRcdHN0cnVjdCByYl9yb290XHRcdFx0ZWh0X2hvc3RfdHJlZTtcbiAzNzI6XHRcbiAzNzM6XHRcdHN0cnVjdCByaGFzaF9oZWFkXHRcdHJobm9kZTtcbiAzNzQ6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X2djXHRtY2FzdF9nYztcbiAzNzU6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRcdHJjdTtcbiAzNzY6XHR9O1xuIDM3NzpcdFxuIDM3ODpcdHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSB7XG4gMzc5Olx0XHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0XHRyaG5vZGU7XG4gMzgwOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZVx0XHQqYnI7XG4gMzgxOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICpwb3J0cztcbiAzODI6XHRcdHN0cnVjdCBicl9pcFx0XHRcdGFkZHI7XG4gMzgzOlx0XHRib29sXHRcdFx0XHRob3N0X2pvaW5lZDtcbiAzODQ6XHRcbiAzODU6XHRcdHN0cnVjdCB0aW1lcl9saXN0XHRcdHRpbWVyO1xuIDM4NjpcdFx0c3RydWN0IGhsaXN0X25vZGVcdFx0bWRiX25vZGU7XG4gMzg3Olx0XG4gMzg4Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nY1x0bWNhc3RfZ2M7XG4gMzg5Olx0XHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRyY3U7XG4gMzkwOlx0fTtcbiAzOTE6XHRcbiAzOTI6XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0IHtcbiAzOTM6XHRcdHN0cnVjdCBuZXRfYnJpZGdlXHRcdCpicjtcbiAzOTQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlXHRcdCpkZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTI1CgkJCQkJCQlvdXRwdXQ6IDIyMQoJCQkJCQkJdGhvdWdodHM6IDUxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBCcmlkZ2luZyBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgc3BlY2lmaWNhbGx5IG9uIG11bHRpY2FzdCBncm91cCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgYnJpZGdlIGNvZGUuIE15IHByaW1hcnkgY29uY2VybiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlLCBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBtaXRpZ2F0ZXMgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgS01TQU4gd291bGQgYmUgcmVzcG9uc2libGUgZm9yIGNhdGNoaW5nLgoKRmlyc3QsIEkgYW5hbHl6ZWQgdGhlIGNvZGUgY2hhbmdlcy4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIG1vZGlmaWNhdGlvbnMgdG8gYGJyX211bHRpY2FzdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGludm9sdmVzIGBremFsbG9jX29iamAsIHRoZSB1c2Ugb2YgUkNVIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIChgUkNVX0lOSVRfUE9JTlRFUmAsIGBobGlzdF9kZWxfaW5pdF9yY3VgLCBga2ZyZWVfcmN1YCksIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBoYW5kbGluZyBvZiBgcC0mZ3Q7bmV4dGAgYW5kIGBwLSZndDttZ2xpc3RgLgoKQW5hbHl6aW5nIHRoZSBjaGFuZ2VzIEkgc2VlOgoKMS4gIGBremFsbG9jX29iamAgaXMgdXNlZCBmb3IgYWxsb2NhdGlvbi4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuCjIuICBUaGUgYFJDVV9JTklUX1BPSU5URVJgIG1hY3JvIHJlcGxhY2VzIHRoZSBzdGFuZGFyZCBwb2ludGVyIGFzc2lnbm1lbnQgYW5kIGlzIG5vdyBiZWxvdyB0aGUgYGV0aF9hZGRyYCBpbml0aWFsaXphdGlvbiBhbG9uZyB3aXRoIGBobGlzdF9hZGRfaGVhZF9yY3VgLiBUaGlzIGlzIGEgY2xlYXIgUkNVIHN5bmNocm9uaXphdGlvbiBjaGFuZ2UuCjMuICBUaGUgcmVtb3ZhbCBhbmQgZnJlZWluZyBvZiBtdWx0aWNhc3QgZ3JvdXBzIGhhdmUgYWxzbyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBSQ1UgY291bnRlcnBhcnRzLiBgaGxpc3RfZGVsX2luaXRfcmN1YCBpbnN0ZWFkIG9mIGBobGlzdF9kZWxfaW5pdGAgYW5kIGBrZnJlZV9yY3VgIGluc3RlYWQgb2YgYGtmcmVlYC4KCk5vdywgZXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIGNyaXRlcmlhLiBEb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm8uIElzIHRoZXJlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8uIElzIHRoZXJlIGFsbG9jYXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8gTm8sIGJlY2F1c2UgYGt6YWxsb2Nfb2JqYCB6ZXJvZXMgdGhlIG1lbW9yeS4gQW55IGlzc3VlcyB3aXRoIGJvdW5kcyBjaGVja2luZz8gTm8uCgpXaGF0IGlzIHRoZSBwb2ludCBvZiB0aGUgcGF0Y2g/IEl0IGxvb2tzIGxpa2UgdGhpcyBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIGNvbmRpdGlvbnMgaW4gdGhlIGBwb3J0LSZndDttZ2xpc3RgIGl0ZXJhdGlvbi4gVGhlIHJhY2UgY29uZGl0aW9ucyBhcmUgbGlrZWx5IGV4cG9zZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnZ2VycyBsaWtlIFBST1ZFXF9SQ1UgYW5kIEtBU0FOLiBJdCYjMzk7cyBhYm91dCBtZW1vcnkgb3JkZXJpbmcgYW5kIGVuc3VyaW5nIHByb3BlciBSQ1UgZ3JhY2UgcGVyaW9kcy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBhcmUgYmVpbmcgaW50cm9kdWNlZC4KCkkmIzM5O3ZlIGFsc28gZG91YmxlLWNoZWNrZWQgZm9yIGFueSBvdGhlciBtb2RpZmljYXRpb25zIHRvIHRoZSBhZmZlY3RlZCBjb2RlIGFuZCBmb3IgdGhlIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBJIHNlZSBub25lLiBObyBpbmZvcm1hdGlvbiBsZWFrIGZyb20gdGhlIGtlcm5lbCB0byB1c2VyIHNwYWNlIGVpdGhlci4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gOiBmYWxzZS4gVGhlIHBhdGNoIGlzIGFib3V0IGFkZHJlc3NpbmcgUkNVIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGhlc2UgYnVncyBhcmUgY29ycmVjdGx5IGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGluIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBncm91cCBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgYGhsaXN0X2FkZF9oZWFkX3JjdWAsIGBSQ1VfSU5JVF9QT0lOVEVSYCwgYGhsaXN0X2RlbF9pbml0X3JjdWAsIGFuZCBga2ZyZWVfcmN1YCBhcmUgdXNlZCBjb3JyZWN0bHkgZm9yIGBwb3J0LVx1MDAzZW1nbGlzdGAgYW5kIGBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwYCwgcHJldmVudGluZyBjb25jdXJyZW50IHJlYWRlcnMgKHN1Y2ggYXMgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCkgZnJvbSBhY2Nlc3NpbmcgZnJlZWQgbWVtb3J5IG9yIG9ic2VydmluZyBwYXJ0aWFsbHkgcHVibGlzaGVkIGVudHJpZXMuXG5cblRoZSBhbGxvY2F0ZWQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgIHN0cnVjdHVyZSBpcyB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jX29iamAsIGFuZCBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gQ29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIFJDVSBkZWJ1Z2dpbmcgdG9vbHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCBgaGxpc3RfYWRkX2hlYWRfcmN1YCwgYFJDVV9JTklUX1BPSU5URVJgLCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYW5kIGBrZnJlZV9yY3VgIGFyZSB1c2VkIGNvcnJlY3RseSBmb3IgYHBvcnQtXHUwMDNlbWdsaXN0YCBhbmQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgLCBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgcmVhZGVycyAoc3VjaCBhcyBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgKSBmcm9tIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3Igb2JzZXJ2aW5nIHBhcnRpYWxseSBwdWJsaXNoZWQgZW50cmllcy5cblxuVGhlIGFsbG9jYXRlZCBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAgc3RydWN0dXJlIGlzIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG92ZXJmbG93cywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBDb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgUkNVIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MTUuOTg4NDg1NTQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0NTg0OTg5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCBgaGxpc3RfYWRkX2hlYWRfcmN1YCwgYFJDVV9JTklUX1BPSU5URVJgLCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYW5kIGBrZnJlZV9yY3VgIGFyZSB1c2VkIGNvcnJlY3RseSBmb3IgYHBvcnQtXFx1MDAzZW1nbGlzdGAgYW5kIGBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwYCwgcHJldmVudGluZyBjb25jdXJyZW50IHJlYWRlcnMgKHN1Y2ggYXMgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCkgZnJvbSBhY2Nlc3NpbmcgZnJlZWQgbWVtb3J5IG9yIG9ic2VydmluZyBwYXJ0aWFsbHkgcHVibGlzaGVkIGVudHJpZXMuXFxuXFxuVGhlIGFsbG9jYXRlZCBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAgc3RydWN0dXJlIGlzIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG92ZXJmbG93cywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBDb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgUkNVIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBncm91cCBsaXN0IG1hbmFnZW1lbnQgdG8gdXNlIFJDVS1zYWZlIHByaW1pdGl2ZXMgKGhsaXN0X2FkZF9oZWFkX3JjdSwgaGxpc3RfZGVsX2luaXRfcmN1LCBSQ1VfSU5JVF9QT0lOVEVSLCBhbmQga2ZyZWVfcmN1KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaW4gdGhlIGJyaWRnZSBJR01QIHNub29waW5nIHN1YnN5c3RlbSwgd2hpY2ggY2FuIGJlIGV4ZXJjaXNlZCB2aWEgbmV0bGluay9NREIgaW50ZXJmYWNlcyBhbmQgbXVsdGljYXN0IHRyYWZmaWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjI3OjE1Ljk4ODQ5MTExNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIxOTcyNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDNjM2RjM2NkMzVjYmE3MmE1NDVmZTAzNzMwNDFiMmU1NGRkNThjYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDE0OjI3OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXFxuaW5kZXggM2U5YjEwZjhhYmYxZC4uMmY5YmIzMGUxYTFmNiAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xcbkBAIC0xNDQxLDE2ICsxNDQxLDE3IEBAIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcXG4gXFx0XFx0Z290byBmcmVlX291dDtcXG4gXFx0fVxcbiBcXG4tXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHAtXFx1MDAzZW5leHQsIG5leHQpO1xcbiBcXHR0aW1lcl9zZXR1cChcXHUwMDI2cC1cXHUwMDNldGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQsIDApO1xcbiBcXHR0aW1lcl9zZXR1cChcXHUwMDI2cC1cXHUwMDNlcmV4bWl0X3RpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9yZXhtaXQsIDApO1xcbi1cXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2cC1cXHUwMDNlbWdsaXN0LCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0KTtcXG4gXFxuIFxcdGlmIChzcmMpXFxuIFxcdFxcdG1lbWNweShwLVxcdTAwM2VldGhfYWRkciwgc3JjLCBFVEhfQUxFTik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKHAtXFx1MDAzZWV0aF9hZGRyKTtcXG4gXFxuK1xcdFJDVV9JTklUX1BPSU5URVIocC1cXHUwMDNlbmV4dCwgbmV4dCk7XFxuK1xcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2cC1cXHUwMDNlbWdsaXN0LCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0KTtcXG4rXFxuIFxcdHJldHVybiBwO1xcbiBcXG4gZnJlZV9vdXQ6XFxuQEAgLTE0NjUsMTEgKzE0NjYsMTEgQEAgdm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcClcXG4gXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtXFx1MDAzZWtleS5wb3J0O1xcbiBcXHRfX3UxNiB2aWQgPSBwLVxcdTAwM2VrZXkuYWRkci52aWQ7XFxuIFxcbi1cXHRobGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlbWdsaXN0KTtcXG4rXFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QpO1xcbiBcXHRpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coXFx1MDAyNnAtXFx1MDAzZWtleS5hZGRyKSlcXG4gXFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2cG9ydC1cXHUwMDNlYnItXFx1MDAzZXNnX3BvcnRfdGJsLCBcXHUwMDI2cC1cXHUwMDNlcmhub2RlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgYnJfc2dfcG9ydF9yaHRfcGFyYW1zKTtcXG4tXFx0a2ZyZWUocCk7XFxuK1xcdGtmcmVlX3JjdShwLCByY3UpO1xcbiBcXHRicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCB2aWQpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyNzoxNi42MTE1MzgzMjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyOTMxNTkwMzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBcIixcbiAgICBcImJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGxpc3QgbWFuYWdlbWVudCB0byB1c2UgUkNVLXNhZmUgcHJpbWl0aXZlcyAoaGxpc3RfYWRkX2hlYWRfcmN1LCBobGlzdF9kZWxfaW5pdF9yY3UsIFJDVV9JTklUX1BPSU5URVIsIGFuZCBrZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgYnJpZGdlIElHTVAgc25vb3Bpbmcgc3Vic3lzdGVtLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rL01EQiBpbnRlcmZhY2VzIGFuZCBtdWx0aWNhc3QgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkM2MzZGMzY2QzNWNiYTcyYTU0NWZlMDM3MzA0MWIyZTU0ZGQ1OGNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNDoyNzoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5pbmRleCAzZTliMTBmOGFiZjFkLi4yZjliYjMwZTFhMWY2IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuQEAgLTE0NDEsMTYgKzE0NDEsMTcgQEAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKFxuIFx0XHRnb3RvIGZyZWVfb3V0O1xuIFx0fVxuIFxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKHAtXHUwMDNlbmV4dCwgbmV4dCk7XG4gXHR0aW1lcl9zZXR1cChcdTAwMjZwLVx1MDAzZXRpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9leHBpcmVkLCAwKTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNnAtXHUwMDNlcmV4bWl0X3RpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9yZXhtaXQsIDApO1xuLVx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2cC1cdTAwM2VtZ2xpc3QsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0KTtcbiBcbiBcdGlmIChzcmMpXG4gXHRcdG1lbWNweShwLVx1MDAzZWV0aF9hZGRyLCBzcmMsIEVUSF9BTEVOKTtcbiBcdGVsc2VcbiBcdFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKHAtXHUwMDNlZXRoX2FkZHIpO1xuIFxuK1x0UkNVX0lOSVRfUE9JTlRFUihwLVx1MDAzZW5leHQsIG5leHQpO1xuK1x0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCk7XG4rXG4gXHRyZXR1cm4gcDtcbiBcbiBmcmVlX291dDpcbkBAIC0xNDY1LDExICsxNDY2LDExIEBAIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gcC1cdTAwM2VrZXkucG9ydDtcbiBcdF9fdTE2IHZpZCA9IHAtXHUwMDNla2V5LmFkZHIudmlkO1xuIFxuLVx0aGxpc3RfZGVsX2luaXQoXHUwMDI2cC1cdTAwM2VtZ2xpc3QpO1xuK1x0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0KTtcbiBcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZwLVx1MDAzZWtleS5hZGRyKSlcbiBcdFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZwb3J0LVx1MDAzZWJyLVx1MDAzZXNnX3BvcnRfdGJsLCBcdTAwMjZwLVx1MDAzZXJobm9kZSxcbiBcdFx0XHRcdCAgICAgICBicl9zZ19wb3J0X3JodF9wYXJhbXMpO1xuLVx0a2ZyZWUocCk7XG4rXHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjKHBvcnQsIHZpZCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MTYuNjExNTQwNjI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUwNDMyNjkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB3aGF0J3MgYmVlbiB0d2Vha2VkLiBMb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBhbGwgY29uZmluZWQgdG8gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBTcGVjaWZpY2FsbHksIHRoZXkgYXJlIG1ha2luZyBhZGp1c3RtZW50cyB0byB0aGUgbXVsdGljYXN0IGdyb3VwIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBicmlkZ2luZyBjb2RlLlxuXG5JbiBgYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwYCwgdGhleSd2ZSByZW9yZGVyZWQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgcC1cdTAwM2VuZXh0YCBwb2ludGVyIGFuZCB0aGUgYWRkaXRpb24gb2YgdGhlIG5ldyBwb3J0IGdyb3VwIHRvIHRoZSBoYXNoIGxpc3QuIFRoZSBvcmlnaW5hbCBgaGxpc3RfYWRkX2hlYWRgIGlzIG5vdyBgaGxpc3RfYWRkX2hlYWRfcmN1YCBhbmQgYFJDVV9JTklUX1BPSU5URVJgIGlzIGFkZGVkIHRvIGluaXRpYWxpemUgYHAtXHUwMDNlbmV4dGAuIFRoaXMgaXMgYSBjbGFzc2ljIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgb3B0aW1pemF0aW9uLiBUaGlzIHBvaW50cyB0b3dhcmQgYW4gZWZmb3J0IHRvIGltcHJvdmUgY29uY3VycmVudCBhY2Nlc3MgYW5kIHJlZHVjZSB0aGUgbmVlZCBmb3IgZXhwZW5zaXZlIGxvY2tpbmcsIHdoaWNoIGFsaWducyB3aXRoIHRoZSBwZXJmb3JtYW5jZSBnb2Fscy5cblxuVGhlbiwgd2hlbiBkZWxldGluZyB0aGUgcG9ydCBncm91cCBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCwgdGhleSd2ZSBzd2FwcGVkIGBobGlzdF9kZWxfaW5pdGAgd2l0aCBgaGxpc3RfZGVsX2luaXRfcmN1YCBhbmQgYGtmcmVlKHApYCB3aXRoIGBrZnJlZV9yY3UocCwgcmN1KWAuIFRoYXQgcmVpbmZvcmNlcyB0aGUgbW92ZSB0byBSQ1UsIGVuc3VyaW5nIHNhZmUgZGVsZXRpb24gaW4gYSBjb25jdXJyZW50IGVudmlyb25tZW50IHdoZXJlIHJlYWRlcnMgbWF5IHN0aWxsIGJlIHRyYXZlcnNpbmcgdGhlIGRhdGEgc3RydWN0dXJlLiBUaGUgYWRkaXRpb24gb2YgYGtmcmVlX3JjdWAgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgYWN0dWFsbHkgZnJlZWQgYWZ0ZXIgYWxsIHJlYWRlcnMgaGF2ZSBsZWZ0IHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuXG5UbyBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBpbiBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIEFsc28sIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBvcHRpb25zIHJlbGF0ZWQgdG8gYnJpZGdlIG11bHRpY2FzdCB0byBlbnN1cmUgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5leHBlY3RlZCBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIFRoZSBjaGFuZ2VzIHN1Z2dlc3QgYSBmb2N1cyBvbiBpbXByb3ZpbmcgbXVsdGljYXN0IHBlcmZvcm1hbmNlIG9yIHJlc29sdmluZyBzb21lIGNvbmN1cnJlbmN5IGlzc3VlOyBhIGRlZXBlciBjb2RlIHJldmlldyB3aWxsIHJldmVhbCB0aGUgc3BlY2lmaWMgbW90aXZhdGlvbiBhbmQgaWYgaXQncyBiZWVuIHN1Y2Nlc3NmdWwgaW4gYWNoaWV2aW5nIHRoZXNlIGdvYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MjQuMTE1ODcwMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDMwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDMwOlxcdFxcdHAtXFx1MDAzZWZpbHRlcl9tb2RlID0gZmlsdGVyX21vZGU7XFxuMTQzMTpcXHRcXHRwLVxcdTAwM2VydF9wcm90b2NvbCA9IHJ0X3Byb3RvY29sO1xcbjE0MzI6XFx0XFx0cC1cXHUwMDNlZWh0X2hvc3RfdHJlZSA9IFJCX1JPT1Q7XFxuMTQzMzpcXHRcXHRwLVxcdTAwM2VlaHRfc2V0X3RyZWUgPSBSQl9ST09UO1xcbjE0MzQ6XFx0XFx0cC1cXHUwMDNlbWNhc3RfZ2MuZGVzdHJveSA9IGJyX211bHRpY2FzdF9kZXN0cm95X3BvcnRfZ3JvdXA7XFxuMTQzNTpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnAtXFx1MDAzZXNyY19saXN0KTtcXG4xNDM2OlxcdFxcbjE0Mzc6XFx0XFx0aWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKGdyb3VwKSBcXHUwMDI2XFx1MDAyNlxcbjE0Mzg6XFx0XFx0ICAgIHJoYXNodGFibGVfbG9va3VwX2luc2VydF9mYXN0KFxcdTAwMjZwb3J0LVxcdTAwM2Vici1cXHUwMDNlc2dfcG9ydF90YmwsIFxcdTAwMjZwLVxcdTAwM2VyaG5vZGUsXFxuMTQzOTpcXHRcXHRcXHRcXHRcXHRcXHQgIGJyX3NnX3BvcnRfcmh0X3BhcmFtcykpIHtcXG4xNDQwOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDb3VsZG4ndCBpbnNlcnQgbmV3IHBvcnQgZ3JvdXBcXFwiKTtcXG4xNDQxOlxcdFxcdFxcdGdvdG8gZnJlZV9vdXQ7XFxuMTQ0MjpcXHRcXHR9XFxuMTQ0MzpcXHRcXG4xNDQ0OlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZwLVxcdTAwM2V0aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZCwgMCk7XFxuMTQ0NTpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2cC1cXHUwMDNlcmV4bWl0X3RpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9yZXhtaXQsIDApO1xcbjE0NDY6XFx0XFxuMTQ0NzpcXHRcXHRpZiAoc3JjKVxcbjE0NDg6XFx0XFx0XFx0bWVtY3B5KHAtXFx1MDAzZWV0aF9hZGRyLCBzcmMsIEVUSF9BTEVOKTtcXG4xNDQ5OlxcdFxcdGVsc2VcXG4xNDUwOlxcdFxcdFxcdGV0aF9icm9hZGNhc3RfYWRkcihwLVxcdTAwM2VldGhfYWRkcik7XFxuMTQ1MTpcXHRcXG4xNDUyOlxcdFxcdFJDVV9JTklUX1BPSU5URVIocC1cXHUwMDNlbmV4dCwgbmV4dCk7XFxuMTQ1MzpcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCwgXFx1MDAyNnBvcnQtXFx1MDAzZW1nbGlzdCk7XFxuMTQ1NDpcXHRcXG4xNDU1OlxcdFxcdHJldHVybiBwO1xcbjE0NTY6XFx0XFxuMTQ1NzpcXHRmcmVlX291dDpcXG4xNDU4OlxcdFxcdGtmcmVlKHApO1xcbjE0NTk6XFx0ZGVjX291dDpcXG4xNDYwOlxcdFxcdGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjKHBvcnQsIGdyb3VwLVxcdTAwM2V2aWQpO1xcbjE0NjE6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTQ2MjpcXHR9XFxuMTQ2MzpcXHRcXG4xNDY0OlxcdHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXFxuMTQ2NTpcXHR7XFxuMTQ2NjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gcC1cXHUwMDNla2V5LnBvcnQ7XFxuMTQ2NzpcXHRcXHRfX3UxNiB2aWQgPSBwLVxcdTAwM2VrZXkuYWRkci52aWQ7XFxuMTQ2ODpcXHRcXG4xNDY5OlxcdFxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2cC1cXHUwMDNlbWdsaXN0KTtcXG4xNDcwOlxcdFxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2cC1cXHUwMDNla2V5LmFkZHIpKVxcbjE0NzE6XFx0XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2cG9ydC1cXHUwMDNlYnItXFx1MDAzZXNnX3BvcnRfdGJsLCBcXHUwMDI2cC1cXHUwMDNlcmhub2RlLFxcbjE0NzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJyX3NnX3BvcnRfcmh0X3BhcmFtcyk7XFxuMTQ3MzpcXHRcXHRrZnJlZV9yY3UocCwgcmN1KTtcXG4xNDc0OlxcdFxcdGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjKHBvcnQsIHZpZCk7XFxuMTQ3NTpcXHR9XFxuMTQ3NjpcXHRcXG4xNDc3OlxcdHZvaWQgYnJfbXVsdGljYXN0X2hvc3Rfam9pbihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbjE0Nzg6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXAsIGJvb2wgbm90aWZ5KVxcbjE0Nzk6XFx0e1xcbjE0ODA6XFx0XFx0aWYgKCFtcC1cXHUwMDNlaG9zdF9qb2luZWQpIHtcXG4xNDgxOlxcdFxcdFxcdG1wLVxcdTAwM2Vob3N0X2pvaW5lZCA9IHRydWU7XFxuMTQ4MjpcXHRcXHRcXHRpZiAoYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2bXAtXFx1MDAzZWFkZHIpKVxcbjE0ODM6XFx0XFx0XFx0XFx0YnJfbXVsdGljYXN0X3N0YXJfZ19ob3N0X3N0YXRlKG1wKTtcXG4xNDg0OlxcdFxcdFxcdGlmIChub3RpZnkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjI3OjI0LjExNjEyMzEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM4NjA5NzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCcmlkZ2UgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGRlYnVnZ2luZyB0aGlzIGBicl9tdWx0aWNhc3QuY2AgaXNzdWUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gc3RlcC4gTGV0J3Mgc2VlLi4uIHRoZSBgS2NvbmZpZ2AgYW5kIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBicmlkZ2UgZGlyZWN0b3J5IGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gYG5ldC9icmlkZ2UvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSBtdWx0aWNhc3Qgc3VwcG9ydCBmb3IgYnJpZGdpbmcuIEnigJltIGxvb2tpbmcgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3IgcHJlY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGJlIGdhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gZXhwZWN0aW5nLiBUaGVuLCBvdmVyIGluIGBuZXQvYnJpZGdlL01ha2VmaWxlYCwgSSdsbCBkb3VibGUtY2hlY2sgaG93IHRoZSBgYnJfbXVsdGljYXN0LmNgIG9iamVjdCBmaWxlIGlzIGhhbmRsZWQsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncy4gQXJlIHdlIGV2ZW4gYnVpbGRpbmcgaXQsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24/IElmIHRoZXJlIGlzIGFuIGlzc3VlLCBpdCBtYXkgYmUgYSBzaW1wbGUgb3ZlcnNpZ2h0IHdpdGhpbiB0aG9zZSBmaWxlcy4gVGhhdCdsbCBiZSB0aGUgZmlyc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MjcuNTAyMjIzNTUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjE5ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI4NzIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICs9IGJyX25ldGZpbHRlci5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMC1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIxOmJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cXG4tLVxcbm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0zMDMtXFx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XFxubmV0L2JyaWRnZS9ici5jOjMwNDpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnIuYy0zMDUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTk3LVxcdFxcdH1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjk4OlxcdFxcdGlmIChicl9tdWx0aWNhc3RfcmN2KFxcdTAwMjZicm1jdHgsIFxcdTAwMjZwbWN0eF9udWxsLCB2bGFuLCBza2IsIHZpZCkpIHtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTk5LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xMDQtXFx0XFx0aWYgKChtZHN0IHx8IEJSX0lOUFVUX1NLQl9DQl9NUk9VVEVSU19PTkxZKHNrYikpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoxMDU6XFx0XFx0ICAgIGJyX211bHRpY2FzdF9xdWVyaWVyX2V4aXN0cyhicm1jdHgsIGV0aF9oZHIoc2tiKSwgbWRzdCkpXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoxMDY6XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Zsb29kKG1kc3QsIHNrYiwgYnJtY3R4LCBmYWxzZSwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xMDctXFx0XFx0ZWxzZVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xMTk9c3RhdGljIGludCBicl9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNDAtXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoxNDE6XFx0ZXJyID0gYnJfbXVsdGljYXN0X2luaXRfc3RhdHMoYnIpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTQyLVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTUzPXN0YXRpYyB2b2lkIGJyX2Rldl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTU2LVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTU3OlxcdGJyX211bHRpY2FzdF9kZXZfZGVsKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE1ODpcXHRicl9tdWx0aWNhc3RfdW5pbml0X3N0YXRzKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE1OS1cXHRicl92bGFuX2ZsdXNoKGJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTY0PXN0YXRpYyBpbnQgYnJfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTcwLVxcdGJyX3N0cF9lbmFibGVfYnJpZGdlKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3MTpcXHRicl9tdWx0aWNhc3Rfb3Blbihicik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzItXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzMtXFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3NDpcXHRcXHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTE4OT1zdGF0aWMgaW50IGJyX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5My1cXHRicl9zdHBfZGlzYWJsZV9icmlkZ2UoYnIpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTk0OlxcdGJyX211bHRpY2FzdF9zdG9wKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5NS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5Ni1cXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTk3OlxcdFxcdGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhicik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xOTgtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTQ4MD12b2lkIGJyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy01MzMtXFx0YnJfc3RwX3RpbWVyX2luaXQoYnIpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NTM0OlxcdGJyX211bHRpY2FzdF9pbml0KGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTUzNS1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2YnItXFx1MDAzZWdjX3dvcmssIGJyX2ZkYl9jbGVhbnVwKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTE3Nj1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqbWF5YmVfZGVsaXZlcihcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTE3OS17XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTgwOlxcdHU4IGlnbXBfdHlwZSA9IGJyX211bHRpY2FzdF9pZ21wX3R5cGUoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xODEtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTE5NC1vdXQ6XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTk1OlxcdGJyX211bHRpY2FzdF9jb3VudChwLVxcdTAwM2ViciwgcCwgc2tiLCBpZ21wX3R5cGUsIEJSX01DQVNUX0RJUl9UWCk7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTk2LVxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM9MjY4PXN0YXRpYyB2b2lkIG1heWJlX2RlbGl2ZXJfYWRkcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMjk4LS8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzoyOTk6dm9pZCBicl9tdWx0aWNhc3RfZmxvb2Qoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0LFxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMwMC1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzA5LVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMxMDpcXHRycCA9IGJyX211bHRpY2FzdF9nZXRfZmlyc3RfcnBvcnRfbm9kZShicm1jdHgsIHNrYik7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzExLVxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzEzLVxcdFxcdHAgPSByY3VfZGVyZWZlcmVuY2UobWRzdC1cXHUwMDNlcG9ydHMpO1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMxNDpcXHRcXHRpZiAoYnJfbXVsdGljYXN0X3Nob3VsZF9oYW5kbGVfbW9kZShicm1jdHgsIG1kc3QtXFx1MDAzZWFkZHIucHJvdG8pIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MzE1OlxcdFxcdCAgICBicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFxcdTAwMjZtZHN0LVxcdTAwM2VhZGRyKSlcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMTYtXFx0XFx0XFx0YWxsb3dfbW9kZV9pbmNsdWRlID0gZmFsc2U7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMjUtXFx0XFx0bHBvcnQgPSBwID8gcC1cXHUwMDNla2V5LnBvcnQgOiBOVUxMO1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMyNjpcXHRcXHRycG9ydCA9IGJyX211bHRpY2FzdF9ycG9ydF9mcm9tX25vZGVfc2tiKHJwLCBza2IpO1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMyNy1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYz0zMzQ9c3RhdGljIHZvaWQgZGVsX25icChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jLTM2OS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM6MzcwOlxcdGJyX211bHRpY2FzdF9kZWxfcG9ydChwKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzcxLVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jPTQyNj1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqbmV3X25icChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtNDUxLVxcdGJyX3N0cF9wb3J0X3RpbWVyX2luaXQocCk7XFxubmV0L2JyaWRnZS9icl9pZi5jOjQ1MjpcXHRlcnIgPSBicl9tdWx0aWNhc3RfYWRkX3BvcnQocCk7XFxubmV0L2JyaWRnZS9icl9pZi5jLTQ1My1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM9NTYwPWludCBicl9hZGRfaWYoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jLTU5OS1cXHRpZiAoZXJyKSB7XFxubmV0L2JyaWRnZS9icl9pZi5jOjYwMDpcXHRcXHRicl9tdWx0aWNhc3RfZGVsX3BvcnQocCk7XFxubmV0L2JyaWRnZS9icl9pZi5jLTYwMS1cXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnAtXFx1MDAzZWRldl90cmFja2VyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy03MDktZXJyMjpcXG5uZXQvYnJpZGdlL2JyX2lmLmM6NzEwOlxcdGJyX211bHRpY2FzdF9kZWxfcG9ydChwKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtNzExLVxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2cC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMzPXN0YXRpYyBpbnQgYnJfcGFzc19mcmFtZV91cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHByb21pc2MpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNjQtXFx0LyogdXBkYXRlIHRoZSBtdWx0aWNhc3Qgc3RhdHMgaWYgdGhlIHBhY2tldCBpcyBJR01QL01MRCAqL1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo2NTpcXHRicl9tdWx0aWNhc3RfY291bnQoYnIsIE5VTEwsIHNrYiwgYnJfbXVsdGljYXN0X2lnbXBfdHlwZShza2IpLFxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy02Ni1cXHRcXHRcXHQgICBCUl9NQ0FTVF9ESVJfVFgpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE1NS1cXHRcXHRcXHRwa3RfdHlwZSA9IEJSX1BLVF9NVUxUSUNBU1Q7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjE1NjpcXHRcXHRcXHRpZiAoYnJfbXVsdGljYXN0X3JjdihcXHUwMDI2YnJtY3R4LCBcXHUwMDI2cG1jdHgsIHZsYW4sIHNrYiwgdmlkKSlcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTU3LVxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xODktXFx0XFx0aWYgKChtZHN0IHx8IEJSX0lOUFVUX1NLQl9DQl9NUk9VVEVSU19PTkxZKHNrYikpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjE5MDpcXHRcXHQgICAgYnJfbXVsdGljYXN0X3F1ZXJpZXJfZXhpc3RzKGJybWN0eCwgZXRoX2hkcihza2IpLCBtZHN0KSkge1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xOTEtXFx0XFx0XFx0aWYgKChtZHN0IFxcdTAwMjZcXHUwMDI2IG1kc3QtXFx1MDAzZWhvc3Rfam9pbmVkKSB8fFxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxOTI6XFx0XFx0XFx0ICAgIGJyX211bHRpY2FzdF9pc19yb3V0ZXIoYnJtY3R4LCBza2IpIHx8XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE5My1cXHRcXHRcXHQgICAgYnItXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yMzAtXFx0XFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyMzE6XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Zsb29kKG1kc3QsIHNrYiwgYnJtY3R4LCBsb2NhbF9yY3YsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjMyLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9NjE3PXZvaWQgYnJfcnRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNjI2LVxcdGlmaW5kZXggPSBwbWN0eCA/IHBtY3R4LVxcdTAwM2Vwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXggOiAwO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmM6NjI3OlxcdHZpZCA9IHBtY3R4IFxcdTAwMjZcXHUwMDI2IGJyX211bHRpY2FzdF9wb3J0X2N0eF9pc192bGFuKHBtY3R4KSA/IHBtY3R4LVxcdTAwM2V2bGFuLVxcdTAwM2V2aWQgOlxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNjI4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIDA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTcwOD1fX2JyX21kYl9jaG9vc2VfY29udGV4dChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTcyOS1cXHR9XFxubmV0L2JyaWRnZS9icl9tZGIuYzo3MzA6XFx0aWYgKGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXFx1MDAyNnYtXFx1MDAzZWJyX21jYXN0X2N0eCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTczMS1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiVmxhbidzIG11bHRpY2FzdCBwcm9jZXNzaW5nIGlzIGRpc2FibGVkXFxcIik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTc2MD1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc2coY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzg0LVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6Nzg1OlxcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoY2ZnLVxcdTAwM2VwLCBcXHUwMDI2Y2ZnLVxcdTAwM2Vncm91cCwgKnBwLCBmbGFncywgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTc4Ni1cXHRcXHRcXHRcXHRcXHRNQ0FTVF9JTkNMVURFLCBjZmctXFx1MDAzZXJ0X3Byb3RvY29sLCBleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy03OTgtXFx0ICovXFxubmV0L2JyaWRnZS9icl9tZGIuYzo3OTk6XFx0aWYgKGJyX211bHRpY2FzdF9zaG91bGRfaGFuZGxlX21vZGUoYnJtY3R4LCBjZmctXFx1MDAzZWdyb3VwLnByb3RvKSkge1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODAwLVxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqc3Rhcl9tcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODA2LVxcdFxcdGlmIChzdGFyX21wKVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6ODA3OlxcdFxcdFxcdGJyX211bHRpY2FzdF9zZ19hZGRfZXhjbHVkZV9wb3J0cyhzdGFyX21wLCBwKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTgwOC1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTgxMz1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc3JjX2Z3ZChjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy04MjQtXFx0c2dfaXAuc3JjID0gc3JjX2lwLVxcdTAwM2VzcmM7XFxubmV0L2JyaWRnZS9icl9tZGIuYzo4MjU6XFx0c2dtcCA9IGJyX211bHRpY2FzdF9uZXdfZ3JvdXAoY2ZnLVxcdTAwM2ViciwgXFx1MDAyNnNnX2lwKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTgyNi1cXHRpZiAoSVNfRVJSKHNnbXApKSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTg0OD1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc3JjKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTg1Ny1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg1ODpcXHRlbnQgPSBicl9tdWx0aWNhc3RfZmluZF9ncm91cF9zcmMocGcsIFxcdTAwMjZzcmMtXFx1MDAzZWFkZHIpO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODU5LVxcdGlmICghZW50KSB7XFxubmV0L2JyaWRnZS9icl9tZGIuYzo4NjA6XFx0XFx0ZW50ID0gYnJfbXVsdGljYXN0X25ld19ncm91cF9zcmMocGcsIFxcdTAwMjZzcmMtXFx1MDAzZWFkZHIpO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODYxLVxcdFxcdGlmICghZW50KSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTg3MS1cXHQgICAgY2ZnLVxcdTAwM2VlbnRyeS1cXHUwMDNlc3RhdGUgPT0gTURCX1RFTVBPUkFSWSlcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg3MjpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmVudC1cXHUwMDNldGltZXIsIG5vdyArIGJyX211bHRpY2FzdF9nbWkoYnJtY3R4KSk7XFxubmV0L2JyaWRnZS9icl9tZGIuYy04NzMtXFx0ZWxzZVxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy04ODUtZXJyX2RlbF9zZzpcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg4NjpcXHRfX2JyX211bHRpY2FzdF9kZWxfZ3JvdXBfc3JjKGVudCk7XFxubmV0L2JyaWRnZS9icl9tZGIuYy04ODctXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9ODkwPXN0YXRpYyB2b2lkIGJyX21kYl9kZWxfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy04OTQtXFxubmV0L2JyaWRnZS9icl9tZGIuYzo4OTU6XFx0ZW50ID0gYnJfbXVsdGljYXN0X2ZpbmRfZ3JvdXBfc3JjKHBnLCBcXHUwMDI2c3JjLVxcdTAwM2VhZGRyKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTg5Ni1cXHRpZiAoV0FSTl9PTl9PTkNFKCFlbnQpKVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODk3LVxcdFxcdHJldHVybjtcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg5ODpcXHRicl9tdWx0aWNhc3RfZGVsX2dyb3VwX3NyYyhlbnQsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTg5OS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTkyMz1zdGF0aWMgaW50IGJyX21kYl9yZXBsYWNlX2dyb3VwX3NyY3MoY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtOTQwLVxcdFxcdGlmIChlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJfU0dSUF9GX0RFTEVURSlcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjk0MTpcXHRcXHRcXHRicl9tdWx0aWNhc3RfZGVsX2dyb3VwX3NyYyhlbnQsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTk0Mi1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTk1Mj1zdGF0aWMgaW50IGJyX21kYl9yZXBsYWNlX2dyb3VwX3N0YXJfZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy05NzctXFxubmV0L2JyaWRnZS9icl9tZGIuYzo5Nzg6XFx0aWYgKGJyX211bHRpY2FzdF9zaG91bGRfaGFuZGxlX21vZGUoYnJtY3R4LCBjZmctXFx1MDAzZWdyb3VwLnByb3RvKSlcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjk3OTpcXHRcXHRicl9tdWx0aWNhc3Rfc3Rhcl9nX2hhbmRsZV9tb2RlKHBnLCBjZmctXFx1MDAzZWZpbHRlcl9tb2RlKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTk4MC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9OTg0PXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cF9zdGFyX2coY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAwOS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMTA6XFx0cCA9IGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChjZmctXFx1MDAzZXAsIFxcdTAwMjZjZmctXFx1MDAzZWdyb3VwLCAqcHAsIGZsYWdzLCBOVUxMLFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAxMS1cXHRcXHRcXHRcXHRcXHRjZmctXFx1MDAzZWZpbHRlcl9tb2RlLCBjZmctXFx1MDAzZXJ0X3Byb3RvY29sLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDI4LVxcdCAqL1xcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTAyOTpcXHRpZiAoYnJfbXVsdGljYXN0X3Nob3VsZF9oYW5kbGVfbW9kZShicm1jdHgsIGNmZy1cXHUwMDNlZ3JvdXAucHJvdG8pIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDMwLVxcdCAgICBjZmctXFx1MDAzZWZpbHRlcl9tb2RlID09IE1DQVNUX0VYQ0xVREUpXFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMDMxOlxcdFxcdGJyX211bHRpY2FzdF9zdGFyX2dfaGFuZGxlX21vZGUocCwgTUNBU1RfRVhDTFVERSk7XFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDMyLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDM1LWVycl9kZWxfcG9ydF9ncm91cDpcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMzY6XFx0YnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHApO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNy1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYz0xMDQwPXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cChjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDU0LVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTA1NTpcXHRtcCA9IGJyX211bHRpY2FzdF9uZXdfZ3JvdXAoYnIsIFxcdTAwMjZncm91cCk7XFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDU2LVxcdGlmIChJU19FUlIobXApKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDY1LVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTA2NjpcXHRcXHRicl9tdWx0aWNhc3RfaG9zdF9qb2luKGJybWN0eCwgbXAsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwNjctXFx0XFx0YnJfbWRiX25vdGlmeShici1cXHUwMDNlZGV2LCBtcCwgTlVMTCwgUlRNX05FV01EQik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwNzQtXFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMDc1OlxcdGlmIChicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFxcdTAwMjZncm91cCkpXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDc2LVxcdFxcdHJldHVybiBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZyhjZmcsIG1wLCBicm1jdHgsIGZsYWdzLCBleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYz0xMTYzPXN0YXRpYyBpbnQgYnJfbWRiX2NvbmZpZ19hdHRyc19pbml0KHN0cnVjdCBubGF0dHIgKnNldF9hdHRycyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTE4Ni1cXHRcXHR9XFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMTg3OlxcdFxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2Y2ZnLVxcdTAwM2Vncm91cCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTExODgtXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkZpbHRlciBtb2RlIGNhbiBvbmx5IGJlIHNldCBmb3IgKCosIEcpIGVudHJpZXNcXFwiKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTIwMC1cXHRcXHR9XFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMjAxOlxcdFxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2Y2ZnLVxcdTAwM2Vncm91cCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEyMDItXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlNvdXJjZSBsaXN0IGNhbiBvbmx5IGJlIHNldCBmb3IgKCosIEcpIGVudHJpZXNcXFwiKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9MTI5Nz1pbnQgYnJfbWRiX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLCB1MTYgbmxtc2dfZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzMTYtXFx0XFx0fVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTMxNzpcXHRcXHRpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coXFx1MDAyNmNmZy5ncm91cCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzMTgtXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkdyb3VwcyB3aXRoIHNvdXJjZXMgY2Fubm90IGJlIG1hbnVhbGx5IGhvc3Qgam9pbmVkXFxcIik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTEzNTg9c3RhdGljIGludCBfX2JyX21kYl9kZWwoY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTM3NC1cXHRpZiAoZW50cnktXFx1MDAzZWlmaW5kZXggPT0gbXAtXFx1MDAzZWJyLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXggXFx1MDAyNlxcdTAwMjYgbXAtXFx1MDAzZWhvc3Rfam9pbmVkKSB7XFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMzc1OlxcdFxcdGJyX211bHRpY2FzdF9ob3N0X2xlYXZlKG1wLCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMzc2LVxcdFxcdGVyciA9IDA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzODgtXFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMzg5OlxcdFxcdGJyX211bHRpY2FzdF9kZWxfcGcobXAsIHAsIHBwKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzOTAtXFx0XFx0ZXJyID0gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9MTQ3Nj1zdGF0aWMgdm9pZCBicl9tZGJfZmx1c2hfaG9zdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTE0OTEtXFxubmV0L2JyaWRnZS9icl9tZGIuYzoxNDkyOlxcdGJyX211bHRpY2FzdF9ob3N0X2xlYXZlKG1wLCB0cnVlKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTE0OTMtXFx0aWYgKCFtcC1cXHUwMDNlcG9ydHMgXFx1MDAyNlxcdTAwMjYgbmV0aWZfcnVubmluZyhici1cXHUwMDNlZGV2KSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9MTQ5Nz1zdGF0aWMgdm9pZCBicl9tZGJfZmx1c2hfcGdzKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTUyNC1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjE1MjU6XFx0XFx0YnJfbXVsdGljYXN0X2RlbF9wZyhtcCwgcCwgcHApO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTUyNi1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYnJfc2dfcG9ydF9yaHRfcGFyYW1zID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01Mi1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjUzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zdGFydF9xdWVyaWVyKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJyaWRnZV9tY2FzdF9vd25fcXVlcnkgKnF1ZXJ5KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NTc9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02MS1cXHRcXHRcXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjYyOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3JleG1pdChzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTY0PXN0YXRpYyB2b2lkXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2NTpicl9tdWx0aWNhc3RfcnBvcnRfZGVsX25vdGlmeShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCwgYm9vbCBkZWxldGVkKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY2LXN0YXRpYyB2b2lkIGJyX2lwNl9tdWx0aWNhc3RfYWRkX3JvdXRlcihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz03ND1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3NTpfX2JyX211bHRpY2FzdF9hZGRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTc2LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODEtXFx0XFx0XFx0IGJvb2wgYmxvY2tlZCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4MjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZyk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDpzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9zdG9wKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE0OT1icl9tZGJfZW50cnlfc2tiX2dldChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTUtXFx0aWYgKCFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE1NjpcXHQgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChicm1jdHgpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU3LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDk9c3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKlxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjEwOmJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZylcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyOS1cXHR2bGFuID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwX3JjdShwZy1cXHUwMDNla2V5LnBvcnQpLCBwZy1cXHUwMDNla2V5LmFkZHIudmlkKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIzMDpcXHRpZiAodmxhbiBcXHUwMDI2XFx1MDAyNiAhYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWQoXFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4KSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMS1cXHRcXHRwbWN0eCA9IFxcdTAwMjZ2bGFuLVxcdTAwM2Vwb3J0X21jYXN0X2N0eDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjM5PXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjI0MDpicl9tdWx0aWNhc3RfcG9ydF92aWRfdG9fcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTI0MS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTI2ND1zdGF0aWMgYm9vbFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjY1OmJyX211bHRpY2FzdF9jdHhfc2hvdWxkX3VzZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjY2LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjcxLVxcdGlmIChwbWN0eClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjI3MjpcXHRcXHRyZXR1cm4gIWJyX211bHRpY2FzdF9wb3J0X2N0eF9zdGF0ZV9kaXNhYmxlZChwbWN0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNzMtXFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mjc0OlxcdFxcdHJldHVybiAhYnJfbXVsdGljYXN0X2N0eF92bGFuX2Rpc2FibGVkKGJybWN0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNzUtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yOTA9c3RhdGljIHZvaWQgX19md2RfYWRkX3N0YXJfZXhjbChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjk4LVxcdG1lbXNldChcXHUwMDI2c2dfa2V5LCAwLCBzaXplb2Yoc2dfa2V5KSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyOTk6XFx0YnJtY3R4ID0gYnJfbXVsdGljYXN0X3BvcnRfY3R4X2dldF9nbG9iYWwocG1jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzAwLVxcdHNnX2tleS5wb3J0ID0gcGctXFx1MDAzZWtleS5wb3J0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMDQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozMDU6XFx0c3JjX3BnID0gX19icl9tdWx0aWNhc3RfYWRkX2dyb3VwKGJybWN0eCwgcG1jdHgsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMDYtXFx0XFx0XFx0XFx0XFx0ICBzZ19pcCwgcGctXFx1MDAzZWV0aF9hZGRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zMTU9c3RhdGljIHZvaWQgX19md2RfZGVsX3N0YXJfZXhjbChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzI5LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzMwOlxcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhiciwgc3JjX3BnKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMzMS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM0MC0gKi9cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM0MTp2b2lkIGJyX211bHRpY2FzdF9zdGFyX2dfaGFuZGxlX21vZGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNDItXFx0XFx0XFx0XFx0ICAgICB1OCBmaWx0ZXJfbW9kZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzQ5LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzUwOlxcdGlmIChXQVJOX09OKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFxcdTAwMjZwZy1cXHUwMDNla2V5LmFkZHIpKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM1MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM1NS1cXHRcXHRyZXR1cm47XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNTY6XFx0cG1jdHggPSBicl9tdWx0aWNhc3RfcGdfdG9fcG9ydF9jdHgocGcpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzU3LVxcdGlmICghcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4Ni0vKiBjYWxsZWQgd2hlbiBhZGRpbmcgYSBuZXcgUyxHIHdpdGggaG9zdF9qb2luZWQgPT0gZmFsc2UgYnkgZGVmYXVsdCAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzg3OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zZ19ob3N0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqc3Rhcl9tcCxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4OC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqc2cpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM5MjpcXHRpZiAoV0FSTl9PTighYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2c3Rhcl9tcC1cXHUwMDNlYWRkcikpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzkzLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDAzLS8qIHNldCB0aGUgaG9zdF9qb2luZWQgc3RhdGUgb2YgYWxsIG9mICosRydzIFMsRyBlbnRyaWVzICovXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MDQ6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3N0YXJfZ19ob3N0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqc3Rhcl9tcClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwNS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxMC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxMTpcXHRpZiAoV0FSTl9PTighYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2c3Rhcl9tcC1cXHUwMDNlYWRkcikpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDEyLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zZ19kZWxfZXhjbHVkZV9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKnNnbXApXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzgtXFx0LyogKixHIGV4Y2x1ZGUgcG9ydHMgYXJlIG9ubHkgYWRkZWQgdG8gUyxHIGVudHJpZXMgKi9cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzOTpcXHRpZiAoV0FSTl9PTihicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFxcdTAwMjZzZ21wLVxcdTAwM2VhZGRyKSkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjAtXFx0XFx0aWYgKCEocC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNREJfUEdfRkxBR1NfUEVSTUFORU5UKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2MTpcXHRcXHRcXHRicl9tdWx0aWNhc3RfZGVsX3BnKHNnbXAsIHAsIHBwKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2Mi1cXHRcXHRlbHNlXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2Ni1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2Nzp2b2lkIGJyX211bHRpY2FzdF9zZ19hZGRfZXhjbHVkZV9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKnN0YXJfbXAsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjgtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnNnKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NzY6XFx0aWYgKFdBUk5fT04oYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2c2ctXFx1MDAzZWtleS5hZGRyKSkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzctXFx0XFx0cmV0dXJuO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc4OlxcdGlmIChXQVJOX09OKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFxcdTAwMjZzdGFyX21wLVxcdTAwM2VhZGRyKSkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzktXFx0XFx0cmV0dXJuO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDgwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDgxOlxcdGJyX211bHRpY2FzdF9zZ19ob3N0X3N0YXRlKHN0YXJfbXAsIHNnKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ4Mi1cXHRtZW1zZXQoXFx1MDAyNnNnX2tleSwgMCwgc2l6ZW9mKHNnX2tleSkpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00OTYtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0OTc6XFx0XFx0cG1jdHggPSBicl9tdWx0aWNhc3RfcGdfdG9fcG9ydF9jdHgocGcpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk4LVxcdFxcdGlmICghcG1jdHgpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00OTktXFx0XFx0XFx0Y29udGludWU7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1MDA6XFx0XFx0YnJtY3R4ID0gYnJfbXVsdGljYXN0X3BvcnRfY3R4X2dldF9nbG9iYWwocG1jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTAxLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTAyOlxcdFxcdHNyY19wZyA9IF9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChicm1jdHgsIHBtY3R4LFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTAzLVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnNnLVxcdTAwM2VrZXkuYWRkcixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTEyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTEzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9md2Rfc3JjX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9ncm91cF9zcmMgKnNyYylcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUxNC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyNC1cXHRtZW1zZXQoXFx1MDAyNnNnX2lwLCAwLCBzaXplb2Yoc2dfaXApKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjUyNTpcXHRwbWN0eCA9IGJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChzcmMtXFx1MDAzZXBnKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyNi1cXHRpZiAoIXBtY3R4KVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTI3LVxcdFxcdHJldHVybjtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjUyODpcXHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChwbWN0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01MjktXFx0c2dfaXAgPSBzcmMtXFx1MDAzZXBnLVxcdTAwM2VrZXkuYWRkcjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTMxLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTMyOlxcdHNnID0gX19icl9tdWx0aWNhc3RfYWRkX2dyb3VwKGJybWN0eCwgcG1jdHgsIFxcdTAwMjZzZ19pcCxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUzMy1cXHRcXHRcXHRcXHQgICAgICBzcmMtXFx1MDAzZXBnLVxcdTAwM2VldGhfYWRkciwgTUNBU1RfSU5DTFVERSwgZmFsc2UsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU1MC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjU1MTpcXHRicl9tdWx0aWNhc3Rfc2dfYWRkX2V4Y2x1ZGVfcG9ydHMoc3Rhcl9tcCwgc2cpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTUyLX1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU1My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjU1NDpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZndkX3NyY19yZW1vdmUoc3RydWN0IG5ldF9icmlkZ2VfZ3JvdXBfc3JjICpzcmMsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01NTUtXFx0XFx0XFx0XFx0XFx0Ym9vbCBmYXN0bGVhdmUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU4Mi1cXHRcXHRcXHRwLVxcdTAwM2VmbGFncyB8PSBNREJfUEdfRkxBR1NfRkFTVF9MRUFWRTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjU4MzpcXHRcXHRicl9tdWx0aWNhc3RfZGVsX3BnKG1wLCBwLCBwcCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01ODQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU4OS0vKiBpbnN0YWxsIFMsRyBhbmQgYmFzZWQgb24gc3JjJ3MgdGltZXIgZW5hYmxlIG9yIGRpc2FibGUgZm9yd2FyZGluZyAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTkwOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9md2Rfc3JjX2hhbmRsZShzdHJ1Y3QgbmV0X2JyaWRnZV9ncm91cF9zcmMgKnNyYylcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU5MS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU5NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjU5NjpcXHRicl9tdWx0aWNhc3RfZndkX3NyY19hZGQoc3JjKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU5Ny1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjIyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NjIzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kZXN0cm95X21kYl9lbnRyeShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nYyAqZ2MpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02MjQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02MzQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2MzU6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9tZGJfZW50cnkoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTYzNi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY0NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY0NjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZ3JvdXBfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY0Ny17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY1NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY1NjpcXHRicl9tdWx0aWNhc3RfaG9zdF9sZWF2ZShtcCwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NTctXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY1OS1cXHRcXHRnb3RvIG91dDtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY2MDpcXHRicl9tdWx0aWNhc3RfZGVsX21kYl9lbnRyeShtcCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NjEtb3V0Olxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NjQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2NjU6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X2djICpnYylcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY2Ni17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY3NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY3Njp2b2lkIF9fYnJfbXVsdGljYXN0X2RlbF9ncm91cF9zcmMoc3RydWN0IG5ldF9icmlkZ2VfZ3JvdXBfc3JjICpzcmMpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02Nzcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02ODUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2ODY6dm9pZCBicl9tdWx0aWNhc3RfZGVsX2dyb3VwX3NyYyhzdHJ1Y3QgbmV0X2JyaWRnZV9ncm91cF9zcmMgKnNyYyxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY4Ny1cXHRcXHRcXHRcXHRib29sIGZhc3RsZWF2ZSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY4OC17XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2ODk6XFx0YnJfbXVsdGljYXN0X2Z3ZF9zcmNfcmVtb3ZlKHNyYywgZmFzdGxlYXZlKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY5MDpcXHRfX2JyX211bHRpY2FzdF9kZWxfZ3JvdXBfc3JjKHNyYyk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02OTEtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz02OTM9c3RhdGljIGludFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Njk0OmJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfaW5jX29uZShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY5NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzAzLVxcdCAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NzA0OlxcdGlmICghYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWQocG1jdHgpIFxcdTAwMjZcXHUwMDI2IG1heCBcXHUwMDI2XFx1MDAyNiBuIFxcdTAwM2U9IG1heCkge1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzA1LVxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcXFwiJXMgaXMgYWxyZWFkeSBpbiAldSBncm91cHMsIGFuZCBtY2FzdF9tYXhfZ3JvdXBzPSV1XFxcIixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzEzLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NzE0OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjX29uZShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTcxNS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTcyMS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjcyMjpzdGF0aWMgaW50IGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfaW5jKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03MjMtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicl9pcCAqZ3JvdXAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTczMS1cXHQvKiBBbHdheXMgY291bnQgb24gdGhlIHBvcnQgY29udGV4dC4gKi9cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjczMjpcXHRlcnIgPSBicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2luY19vbmUoXFx1MDAyNnBvcnQtXFx1MDAzZW11bHRpY2FzdF9jdHgsIGV4dGFjayxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTczMy1cXHRcXHRcXHRcXHRcXHRcXHRcXFwiUG9ydFxcXCIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03NDItXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3NDM6XFx0cG1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF92aWRfdG9fcG9ydF9jdHgocG9ydCwgZ3JvdXAtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03NDQtXFx0aWYgKCFwbWN0eClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzQ2LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NzQ3OlxcdGVyciA9IGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfaW5jX29uZShwbWN0eCwgZXh0YWNrLCBcXFwiUG9ydC1WTEFOXFxcIik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03NDgtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03NTUtZGVjX29uZV9vdXQ6XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjI3OjI3LjU4Nzg0OTYwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDc2MzE4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBCYXNlZCBvbiB3aGF0IEknbSBsb29raW5nIGF0LCBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBicmlkZ2UgY29uZmlndXJhdGlvbiBwb3NzaWJpbGl0aWVzLiBUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvYnJpZGdlYCBkaXJlY3RvcnkuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGZ1bmRhbWVudGFsIG9wdGlvbnMgc2hvdWxkIGJlIGRlZmluZWQuIEknbSB0aGlua2luZyBJJ2xsIGZpbmQgYWxsIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucyBpbiBgbmV0L2JyaWRnZS9LY29uZmlnYC4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBzcGVjaWZpYyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyByZWxhdGVkIHRvIGJyaWRnaW5nLiBJdCB3aWxsIGJlIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIHRvIHVuZGVyc3RhbmRpbmcgYWxsIHRoZSBhdmFpbGFibGUgcGFyYW1ldGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyNzozMC4xOTU0ODQzOTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIDgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQlJJREdFXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IExMQ1xcbiAgIDk6XFx0XFx0c2VsZWN0IFNUUFxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFuXFxuICAxMjpcXHRcXHQgIEV0aGVybmV0IGJyaWRnZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZGlmZmVyZW50IEV0aGVybmV0IHNlZ21lbnRzIGl0XFxuICAxMzpcXHRcXHQgIGlzIGNvbm5lY3RlZCB0byB3aWxsIGFwcGVhciBhcyBvbmUgRXRoZXJuZXQgdG8gdGhlIHBhcnRpY2lwYW50cy5cXG4gIDE0OlxcdFxcdCAgU2V2ZXJhbCBzdWNoIGJyaWRnZXMgY2FuIHdvcmsgdG9nZXRoZXIgdG8gY3JlYXRlIGV2ZW4gbGFyZ2VyXFxuICAxNTpcXHRcXHQgIG5ldHdvcmtzIG9mIEV0aGVybmV0cyB1c2luZyB0aGUgSUVFRSA4MDIuMSBzcGFubmluZyB0cmVlIGFsZ29yaXRobS5cXG4gIDE2OlxcdFxcdCAgQXMgdGhpcyBpcyBhIHN0YW5kYXJkLCBMaW51eCBicmlkZ2VzIHdpbGwgY29vcGVyYXRlIHByb3Blcmx5IHdpdGhcXG4gIDE3OlxcdFxcdCAgb3RoZXIgdGhpcmQgcGFydHkgYnJpZGdlIHByb2R1Y3RzLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRcXHQgIEluIG9yZGVyIHRvIHVzZSB0aGUgRXRoZXJuZXQgYnJpZGdlLCB5b3UnbGwgbmVlZCB0aGUgYnJpZGdlXFxuICAyMDpcXHRcXHQgIGNvbmZpZ3VyYXRpb24gdG9vbHM7IHNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFxcdTAwM2VcXG4gIDIxOlxcdFxcdCAgZm9yIGxvY2F0aW9uLiBQbGVhc2UgcmVhZCB0aGUgQnJpZGdlIG1pbmktSE9XVE8gZm9yIG1vcmVcXG4gIDIyOlxcdFxcdCAgaW5mb3JtYXRpb24uXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgeW91IGVuYWJsZSBpcHRhYmxlcyBzdXBwb3J0IGFsb25nIHdpdGggdGhlIGJyaWRnZSBzdXBwb3J0IHRoZW4geW91XFxuICAyNTpcXHRcXHQgIHR1cm4geW91ciBicmlkZ2UgaW50byBhIGJyaWRnaW5nIElQIGZpcmV3YWxsLlxcbiAgMjY6XFx0XFx0ICBpcHRhYmxlcyB3aWxsIHRoZW4gc2VlIHRoZSBJUCBwYWNrZXRzIGJlaW5nIGJyaWRnZWQsIHNvIHlvdSBuZWVkIHRvXFxuICAyNzpcXHRcXHQgIHRha2UgdGhpcyBpbnRvIGFjY291bnQgd2hlbiBzZXR0aW5nIHVwIHlvdXIgZmlyZXdhbGwgcnVsZXMuXFxuICAyODpcXHRcXHQgIEVuYWJsaW5nIGFycHRhYmxlcyBzdXBwb3J0IHdoZW4gYnJpZGdpbmcgd2lsbCBsZXQgYXJwdGFibGVzIHNlZVxcbiAgMjk6XFx0XFx0ICBicmlkZ2VkIEFSUCB0cmFmZmljIGluIHRoZSBhcnB0YWJsZXMgRk9SV0FSRCBjaGFpbi5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzI6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBicmlkZ2UuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxuICAzNzpcXHRcXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxcbiAgNDM6XFx0XFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxcbiAgNDQ6XFx0XFx0ICBlYWNoIHBvcnQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xcbiAgNTE6XFx0XFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuICA1MjpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXFxuICA1NDpcXHRcXHRkZWZhdWx0IG5cXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcXG4gIDU3OlxcdFxcdCAgcmVjZWl2ZSBhbmQgZm9yd2FyZCB0cmFmZmljIGJhc2VkIG9uIFZMQU4gaW5mb3JtYXRpb24gaW4gdGhlIHBhY2tldFxcbiAgNTg6XFx0XFx0ICBhbnkgVkxBTiBpbmZvcm1hdGlvbiBjb25maWd1cmVkIG9uIHRoZSBicmlkZ2UgcG9ydCBvciBicmlkZ2UgZGV2aWNlLlxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA2MzpcXHRcXG4gIDY0OlxcdGNvbmZpZyBCUklER0VfTVJQXFxuICA2NTpcXHRcXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxuICA2NjpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNjc6XFx0XFx0ZGVmYXVsdCBuXFxuICA2ODpcXHRcXHRoZWxwXFxuICA2OTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBNUlBcXG4gIDcwOlxcdFxcdCAgcHJvdG9jb2wgdG8gZGV0ZWN0IGxvb3BzXFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIEJSSURHRV9DRk1cXG4gIDc3OlxcdFxcdGJvb2wgXFxcIkNGTSBwcm90b2NvbFxcXCJcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICA3OTpcXHRcXHRoZWxwXFxuICA4MDpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBDRk1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MzAuMTk1NjI0ODc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3Njc4MjU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBNdWx0aWNhc3QgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBDT05GSUdfQlJJREdFYCBhbmQgaXRzIElHTVAgc25vb3BpbmcgY291bnRlcnBhcnQsIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgLCB3aGljaCwgYXMgZXhwZWN0ZWQsIHJlbGllcyBvbiB0aGUgYElORVRgIGFuZCBgQlJJREdFYCBkZXBlbmRlbmNpZXMuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgbXVsdGljYXN0IGZpbHRlcmluZyB3b3JrcyB3aXRoaW4gdGhlIGJyaWRnZS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBhIG11bHRpY2FzdCBncm91cC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHBvcnQgbWVtYmVyc2hpcCB3aXRoaW4gbXVsdGljYXN0IGdyb3Vwcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAgYW5kIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgLiBNeSBwbGFuIGlzIHRvIHRyYWNlIHRoZSBmbG93IG9mIGNhbGxzLlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhlbSwgSSdsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgbXVsdGljYXN0IGdyb3VwcyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIGRlbGV0ZWQgd2l0aGluIHRoZSBicmlkZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MzIuNzcyNDEwODkyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcxNzkxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0XyhuZXd8ZGVsKV9wb3J0X2dyb3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbWRiLmM9NzYwPXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cF9zZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy03ODQtXFxubmV0L2JyaWRnZS9icl9tZGIuYzo3ODU6XFx0cCA9IGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChjZmctXFx1MDAzZXAsIFxcdTAwMjZjZmctXFx1MDAzZWdyb3VwLCAqcHAsIGZsYWdzLCBOVUxMLFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzg2LVxcdFxcdFxcdFxcdFxcdE1DQVNUX0lOQ0xVREUsIGNmZy1cXHUwMDNlcnRfcHJvdG9jb2wsIGV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTk4ND1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc3Rhcl9nKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMDktXFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMDEwOlxcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoY2ZnLVxcdTAwM2VwLCBcXHUwMDI2Y2ZnLVxcdTAwM2Vncm91cCwgKnBwLCBmbGFncywgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMTEtXFx0XFx0XFx0XFx0XFx0Y2ZnLVxcdTAwM2VmaWx0ZXJfbW9kZSwgY2ZnLVxcdTAwM2VydF9wcm90b2NvbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNS1lcnJfZGVsX3BvcnRfZ3JvdXA6XFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMDM2OlxcdGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChwKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMzctXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM2Nj1icl9tdWx0aWNhc3RfbmV3X2dyb3VwX3NyYyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZywgc3RydWN0IGJyX2lwICpzcmNfaXApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0MDMtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDA0OnN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0MDUtXFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ2My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NjQ6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NjUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNTA3PV9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU0MTpcXHRwID0gYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHBtY3R4LVxcdTAwM2Vwb3J0LCBncm91cCwgKnBwLCAwLCBzcmMsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQyLVxcdFxcdFxcdFxcdFxcdGZpbHRlcl9tb2RlLCBSVFBST1RfS0VSTkVMLCBOVUxMKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwMTA9c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTAxMTpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnJfaXAgKmdyb3VwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTAxNi1cXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDE3OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwMTgtaW50IGJyX21kYl9oYXNoX2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MzIuODc5NTk3MDQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNzk5NTE2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNdWx0aWNhc3QgTGlzdCBIYW5kbGluZyBpbiB0aGUgQnJpZGdlIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgYHBvcnQtXHUwMDNlbWdsaXN0YCBhbmQgYHAtXHUwMDNlbmV4dGAgd2l0aGluIHRoZSBgYnJfbXVsdGljYXN0LmNgIG1vZHVsZS4gSSBzdXNwZWN0IHRoZXJlJ3MgYSBsaW5rIGJldHdlZW4gaG93IG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwIGlzIHRyYWNrZWQgYW5kIGhvdyB0aGUgcG9ydCBzdHJ1Y3R1cmVzIGFyZSBsaW5rZWQgd2l0aGluIHRoZSBicmlkZ2UuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcywgYSBnb29kIGZpcnN0IHN0ZXAgaXMgdG8gc2VlIGhvdyBgbWdsaXN0YCBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGBuZXQvYnJpZGdlL2AgZGlyZWN0b3J5LiBHcmVwcGluZyBmb3IgYG1nbGlzdGAgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiBpdHMgcHVycG9zZSBhbmQgY29udGV4dC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMDMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyNzozNi4wNTk1NTE1NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDIwMzI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZ2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz03ODk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nYyAqZ2MpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTc5My1cXHRwZyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCwgbWNhc3RfZ2MpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Nzk0OlxcdFdBUk5fT04oIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZwZy1cXHUwMDNlbWdsaXN0KSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03OTUtXFx0V0FSTl9PTighaGxpc3RfZW1wdHkoXFx1MDAyNnBnLVxcdTAwM2VzcmNfbGlzdCkpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz04MDI9dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BnKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxMS1cXHQvKiBLZWVwIC1cXHUwMDNlbmV4dCAoaGVsZCB1bmRlciBtdWx0aWNhc3RfbG9jaywgZnJlZWQgbGF0ZXIgYnkgdGhlIEdDIHdvcmspOlxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODEyOlxcdCAqIGEgcG9ydC1cXHUwMDNlbWdsaXN0IHRlYXJkb3duIHdhbGsgbWF5IGhhdmUgbGF0Y2hlZCB0aGlzIG5vZGUgYXMgaXRzIG5leHQsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTMtXFx0ICogYW5kIGRlbGV0aW5nIG90aGVyIGdyb3VwcyBvZiB0aGUgc2FtZSBwb3J0IG11c3Qgbm90IHRydW5jYXRlIGl0Llxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODE0LVxcdCAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODE1OlxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTYtXFx0YnJfbXVsdGljYXN0X2VodF9jbGVhbl9zZXRzKHBnKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9ODM1PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg0MjpcXHQvKiBBIHRlYXJkb3duIHdhbGsgb3ZlciBwb3J0LVxcdTAwM2VtZ2xpc3QgY2FuIHJlYWNoIGEgZ3JvdXAgdGhhdCBhbiBlYXJsaWVyXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04NDMtXFx0ICogaXRlcmF0aW9uIGFscmVhZHkgZGVsZXRlZCBhcyBhIHNpZGUgZWZmZWN0LiBJdCBpcyBvZmYgbXAtXFx1MDAzZXBvcnRzIGJ5XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0NS1cXHQgKi9cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg0NjpcXHRpZiAoaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnBnLVxcdTAwM2VtZ2xpc3QpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQ3LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9ODY2PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3NS1cXHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXFx1MDAzZWRldikgfHwgdGltZXJfcGVuZGluZyhcXHUwMDI2cGctXFx1MDAzZXRpbWVyKSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODc2OlxcdCAgICBobGlzdF91bmhhc2hlZChcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCkgfHwgcGctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3Ny1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQwND1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTItXFx0UkNVX0lOSVRfUE9JTlRFUihwLVxcdTAwM2VuZXh0LCBuZXh0KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NTM6XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QsIFxcdTAwMjZwb3J0LVxcdTAwM2VtZ2xpc3QpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ1NC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQ2ND12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDY4LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTQ2OTpcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDcwLVxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2cC1cXHUwMDNla2V5LmFkZHIpKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xOTk5PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3JleG1pdChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjAwOS1cXHRzcGluX2xvY2soXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDEwOlxcdGlmICghbmV0aWZfcnVubmluZyhici1cXHUwMDNlZGV2KSB8fCBobGlzdF91bmhhc2hlZChcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCkgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwMTEtXFx0ICAgICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwNTk9dm9pZCBicl9tdWx0aWNhc3RfcG9ydF9jdHhfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDg1LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cG9ydC1cXHUwMDNlYnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwODY6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGcsIFxcdTAwMjZwb3J0LVxcdTAwM2VtZ2xpc3QsIG1nbGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwODctXFx0XFx0XFx0aWYgKHBnLVxcdTAwM2VrZXkuYWRkci52aWQgPT0gdmxhbi1cXHUwMDNldmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTM2PXZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNDMtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE0NDpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTQ1LVxcdFxcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhiciwgcGcpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTk1PXN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjAxOlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFxcdTAwMjZwbWN0eC1cXHUwMDNlcG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLVxcdFxcdGlmICghKHBnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTM3Mjc9YnJfbXVsdGljYXN0X2xlYXZlX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM3ODQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNzg1OlxcdFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM3ODYtXFx0XFx0XFx0ICAgICh0aW1lcl9wZW5kaW5nKFxcdTAwMjZwLVxcdTAwM2V0aW1lcikgP1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODE2LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzgxNzpcXHRcXHRpZiAoIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODE4LVxcdFxcdCAgICAodGltZXJfcGVuZGluZyhcXHUwMDI2cC1cXHUwMDNldGltZXIpID9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDk1OT1pbnQgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk4MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ5ODI6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdyb3VwLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5ODMtXFx0XFx0XFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MzU2PXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMzY4LVxcdHN0cnVjdCB0aW1lcl9saXN0XFx0XFx0cmV4bWl0X3RpbWVyO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjM2OTpcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdFxcdG1nbGlzdDtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNzAtXFx0c3RydWN0IHJiX3Jvb3RcXHRcXHRcXHRlaHRfc2V0X3RyZWU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MzEtXFx0dTMyXFx0XFx0XFx0XFx0bXVsdGljYXN0X2VodF9ob3N0c19jbnQ7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDMyOlxcdHN0cnVjdCBobGlzdF9oZWFkXFx0XFx0bWdsaXN0O1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQzMy0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MzYuMTY5NzYwMjU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMjMyMjM3MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIExpbnV4IEJyaWRnZSBNdWx0aWNhc3QgU3Vic3lzdGVtIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGUgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgcG9ydC1cdTAwM2VtZ2xpc3RgLiBUaGlzIGxpc3QgaXMgcHJvdGVjdGVkIGJ5IFJDVSBvciBhIG11bHRpY2FzdCBsb2NrLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGNvbmN1cnJlbmN5LiBUaGUga2V5IGhlcmUgaXMgdGhlIHNoaWZ0IGluIGhvdyB0aGUgcG9ydCBncm91cCBlbnRyaWVzIGFyZSBoYW5kbGVkIOKAkyB0aGUgbW92ZSBmcm9tIHBsYWluIGBobGlzdF9hZGRfaGVhZGAgYW5kIGBobGlzdF9kZWxfaW5pdGAgdG8gUkNVLXNhZmUgdmFyaWFudHM6IGBobGlzdF9hZGRfaGVhZF9yY3VgIGFuZCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYWxvbmcgd2l0aCBga2ZyZWVfcmN1YC4gVGhpcyBpcyBpbiB0aGUgYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIG1vZHVsZSwgc28gaXQncyBjb3JlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IHdpdGggSUdNUCBzbm9vcGluZy5cblxuRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIFRoZSBicmlkZ2UgbXVsdGljYXN0L0lHTVAgc25vb3BpbmcgaXMgZWFzaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXM6IG5ldGxpbmsgY29tbWFuZHMgKGxpa2UgbWRiKSwgcnRuZXRsaW5rLCBuZXRkZXZpY2UgY29uZmlnLCBhbmQgZXZlbiBzZW5kaW5nIG11bHRpY2FzdCBwYWNrZXRzIG92ZXIgdmV0aCwgdGFwLCBvciBvdGhlciBicmlkZ2VkIGludGVyZmFjZXMuIFRoaXMgbWVhbnMgaXQncyByZWFjaGFibGUgYW5kIGxpa2VseSB0byBzZWUgZGl2ZXJzZSBpbnB1dC5cblxuVGhlIGNoYW5nZSBpbiBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIFJDVSBzZW1hbnRpY3MgZm9yIHRoZXNlIGZ1bmN0aW9ucyBpcyB3aGF0IGNhdGNoZXMgbXkgZXllLCB0aGlzIGFsb25lIG1ha2VzIGl0IFdvcnRoRnV6emluZyA9IHRydWUuXG5cbkZvciBmdXp6aW5nIGZvY3VzLCB0aGUgcHJpbWFyeSB0YXJnZXRzIHdpbGwgYmUgYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAsIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgLCBhbmQgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCwgYnV0IGBicl9tZGJfYWRkYCBvciBgYnJfbXVsdGljYXN0X2RlbF9wZ2AgbWlnaHQgYWxzbyB3YXJyYW50IGF0dGVudGlvbi4gVGhlIHByZWNpc2UgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZCB3ZXJlIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGJvdGggZnVuY3Rpb25zLCBgYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwYCBhbmQgYGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cGAsIGFyZSBub24tc3RhdGljIGFuZCBkZWNsYXJlZCBpbiBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgLlxuXG5UaGUgY29uZmlndXJhdGlvbiBmbGFncyBhcmUgc3RyYWlnaHRmb3J3YXJkOiBgQ09ORklHX0JSSURHRWAgYW5kIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgLiBUaGUgbGF0dGVyIGRlcGVuZHMgb24gdGhlIGZvcm1lciBhbmQgYWxzbyBvbiBgSU5FVGAsIHNvIGBCUklER0VgIGFuZCBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGFyZSBteSBlbmFibGUgY29uZmlncy4gYENPTkZJR19CUklER0VgIGFsc28gcHVsbHMgaW4gTExDIGFuZCBTVFAuXG5cblNvLCB0byBzdW1tYXJpemU6XG5cbiogICBXb3J0aEZ1enppbmc6IFRydWVcbiogICBGb2N1c1N5bWJvbHM6IGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgLCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCwgYGJyX21kYl9hZGRgLCBgYnJfbXVsdGljYXN0X2RlbF9wZ2BcbiogICBFbmFibGVDb25maWdzOiBgQlJJREdFYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYFxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB3ZSBoYXZlIGEgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgdXRpbGl6ZXMgUkNVIHNlbWFudGljcyBmb3IgaW5zZXJ0aW9uL2RlbGV0aW9uIGFuZCBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgaXMgYSBzb2xpZCB0YXJnZXQsIGFuZCB0aGUgYW5hbHlzaXMgaXMgY29tcGxldGUuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MTAsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjI3OjQ5LjQwMjAwMTU1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTEyMjQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZ3JvdXAgbGlzdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1Utc2FmZSBwcmltaXRpdmVzIChobGlzdF9hZGRfaGVhZF9yY3UsIGhsaXN0X2RlbF9pbml0X3JjdSwgUkNVX0lOSVRfUE9JTlRFUiwgYW5kIGtmcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGluIHRoZSBicmlkZ2UgSUdNUCBzbm9vcGluZyBzdWJzeXN0ZW0sIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsvTURCIGludGVyZmFjZXMgYW5kIG11bHRpY2FzdCB0cmFmZmljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBcIixcbiAgICBcImJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGxpc3QgbWFuYWdlbWVudCB0byB1c2UgUkNVLXNhZmUgcHJpbWl0aXZlcyAoaGxpc3RfYWRkX2hlYWRfcmN1LCBobGlzdF9kZWxfaW5pdF9yY3UsIFJDVV9JTklUX1BPSU5URVIsIGFuZCBrZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgYnJpZGdlIElHTVAgc25vb3Bpbmcgc3Vic3lzdGVtLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rL01EQiBpbnRlcmZhY2VzIGFuZCBtdWx0aWNhc3QgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6NDkuNTQzMTM0MTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTAzODIzNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6NDkuNTQ0NDM5NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NzkwMjUwMDg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGluIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBncm91cCBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgYGhsaXN0X2FkZF9oZWFkX3JjdWAsIGBSQ1VfSU5JVF9QT0lOVEVSYCwgYGhsaXN0X2RlbF9pbml0X3JjdWAsIGFuZCBga2ZyZWVfcmN1YCBhcmUgdXNlZCBjb3JyZWN0bHkgZm9yIGBwb3J0LVxcdTAwM2VtZ2xpc3RgIGFuZCBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAsIHByZXZlbnRpbmcgY29uY3VycmVudCByZWFkZXJzIChzdWNoIGFzIGBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudGApIGZyb20gYWNjZXNzaW5nIGZyZWVkIG1lbW9yeSBvciBvYnNlcnZpbmcgcGFydGlhbGx5IHB1Ymxpc2hlZCBlbnRyaWVzLlxcblxcblRoZSBhbGxvY2F0ZWQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgIHN0cnVjdHVyZSBpcyB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jX29iamAsIGFuZCBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gQ29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIFJDVSBkZWJ1Z2dpbmcgdG9vbHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDNjM2RjM2NkMzVjYmE3MmE1NDVmZTAzNzMwNDFiMmU1NGRkNThjYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6Mjc6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuaW5kZXggM2U5YjEwZjhhYmYxZC4uMmY5YmIzMGUxYTFmNiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbkBAIC0xNDQxLDE2ICsxNDQxLDE3IEBAIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcbiBcdFx0Z290byBmcmVlX291dDtcbiBcdH1cbiBcbi1cdHJjdV9hc3NpZ25fcG9pbnRlcihwLVx1MDAzZW5leHQsIG5leHQpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2cC1cdTAwM2V0aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZCwgMCk7XG4gXHR0aW1lcl9zZXR1cChcdTAwMjZwLVx1MDAzZXJleG1pdF90aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0LCAwKTtcbi1cdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnAtXHUwMDNlbWdsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCk7XG4gXG4gXHRpZiAoc3JjKVxuIFx0XHRtZW1jcHkocC1cdTAwM2VldGhfYWRkciwgc3JjLCBFVEhfQUxFTik7XG4gXHRlbHNlXG4gXHRcdGV0aF9icm9hZGNhc3RfYWRkcihwLVx1MDAzZWV0aF9hZGRyKTtcbiBcbitcdFJDVV9JTklUX1BPSU5URVIocC1cdTAwM2VuZXh0LCBuZXh0KTtcbitcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZwLVx1MDAzZW1nbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2VtZ2xpc3QpO1xuK1xuIFx0cmV0dXJuIHA7XG4gXG4gZnJlZV9vdXQ6XG5AQCAtMTQ2NSwxMSArMTQ2NiwxMSBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxuIFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtXHUwMDNla2V5LnBvcnQ7XG4gXHRfX3UxNiB2aWQgPSBwLVx1MDAzZWtleS5hZGRyLnZpZDtcbiBcbi1cdGhsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlbWdsaXN0KTtcbitcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZwLVx1MDAzZW1nbGlzdCk7XG4gXHRpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coXHUwMDI2cC1cdTAwM2VrZXkuYWRkcikpXG4gXHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cG9ydC1cdTAwM2Vici1cdTAwM2VzZ19wb3J0X3RibCwgXHUwMDI2cC1cdTAwM2VyaG5vZGUsXG4gXHRcdFx0XHQgICAgICAgYnJfc2dfcG9ydF9yaHRfcGFyYW1zKTtcbi1cdGtmcmVlKHApO1xuK1x0a2ZyZWVfcmN1KHAsIHJjdSk7XG4gXHRicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCB2aWQpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjI3OjQ5LjU0NDQ1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzYyODA0NTI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBCcmlkZ2UgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNoYW5nZXMgbWFkZSwgZXNwZWNpYWxseSB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC4gTGV0J3MgYnJlYWsgdGhlc2UgZG93biBpbmRpdmlkdWFsbHkuXG5cbkluIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgLCB0aGUga2V5IGRpZmZlcmVuY2UgaXMgdGhlIHJlb3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIgYXNzaWdubWVudHMgYW5kIGxpc3QgYWRkaXRpb25zLiBQcmV2aW91c2x5LCB3ZSBoYWQgYHJjdV9hc3NpZ25fcG9pbnRlcihwLVx1MDAzZW5leHQsIG5leHQpO2AgYW5kIGBobGlzdF9hZGRfaGVhZChcdTAwMjZwLVx1MDAzZW1nbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2VtZ2xpc3QpO2AgYmVmb3JlIHRoZSBzZXR1cCBvZiB0aGUgYGV0aF9hZGRyYC4gTm93LCBpdCdzIGJlZW4gY2hhbmdlZCB0byBgUkNVX0lOSVRfUE9JTlRFUihwLVx1MDAzZW5leHQsIG5leHQpO2AgYW5kIGBobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2cC1cdTAwM2VtZ2xpc3QsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0KTtgIGFmdGVyIHRoZSBgZXRoX2FkZHJgIHNldHVwLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY29uc2lkZXIgd2h5IHRoaXMgcmVvcmRlcmluZyB3YXMgbmVjZXNzYXJ5IGFuZCBob3cgaXQgYWZmZWN0cyBtZW1vcnkgb3JkZXJpbmcgYW5kIGRhdGEgdmlzaWJpbGl0eSB1bmRlciBSQ1UuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHdpdGggcmVzcGVjdCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIsIHBhcnRpY3VsYXJseSB0byBlbnN1cmUgYXRvbWljaXR5IGFuZCBjb3JyZWN0bmVzcyB3aXRoIHJlc3BlY3QgdG8gY29uY3VycmVudCBhY2Nlc3MgYnkgcmVhZGVycy5cblxuVGhlbiwgSSdtIGxvb2tpbmcgYXQgYGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cGAuIEhlcmUsIHRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBobGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZW1nbGlzdCk7YCBoYXMgYmVjb21lIGBobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2cC1cdTAwM2VtZ2xpc3QpO2AsIGFuZCBga2ZyZWUocCk7YCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBrZnJlZV9yY3UocCwgcmN1KTtgLiBDbGVhcmx5LCB0aGVzZSByZXZpc2lvbnMgYXJlIHJlbGF0ZWQgdG8gUkNVIHN5bmNocm9uaXphdGlvbi4gVGhlIGludGVudGlvbiBpcyB0byByZW1vdmUgdGhlIGVsZW1lbnQgc2FmZWx5IGZyb20gdGhlIGhhc2ggbGlzdCwgdGhlbiBkZWZlciB0aGUgbWVtb3J5IGRlYWxsb2NhdGlvbiB1c2luZyBSQ1UgZ3JhY2UgcGVyaW9kcy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgaW4gUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIGltcGxlbWVudGVkIGNvcnJlY3RseSwgYW5kIHRoYXQgYWxsIG5lY2Vzc2FyeSBSQ1Ugc3luY2hyb25pemF0aW9uIGlzIGluIHBsYWNlIGFyb3VuZCB0aGVzZSBjaGFuZ2VzLCBlbnN1cmluZyB0aGF0IHJlYWRlcnMgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSBhcmUgcHJvcGVybHkgcHJvdGVjdGVkLlxuXG5JJ2xsIG5vdyBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgbXVsdGljYXN0IHBvcnQgZ3JvdXBzIGFuZCB0aGVpciBsaWZlY3ljbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgdGhyZWFkLXNhZmUgYW5kIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODowMy4xNzI1MDAyNDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzk5NDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tZGIuYz03NjA9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3NnKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTc4NC1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjc4NTpcXHRwID0gYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKGNmZy1cXHUwMDNlcCwgXFx1MDAyNmNmZy1cXHUwMDNlZ3JvdXAsICpwcCwgZmxhZ3MsIE5VTEwsXFxubmV0L2JyaWRnZS9icl9tZGIuYy03ODYtXFx0XFx0XFx0XFx0XFx0TUNBU1RfSU5DTFVERSwgY2ZnLVxcdTAwM2VydF9wcm90b2NvbCwgZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9OTg0PXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cF9zdGFyX2coY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAwOS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMTA6XFx0cCA9IGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChjZmctXFx1MDAzZXAsIFxcdTAwMjZjZmctXFx1MDAzZWdyb3VwLCAqcHAsIGZsYWdzLCBOVUxMLFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAxMS1cXHRcXHRcXHRcXHRcXHRjZmctXFx1MDAzZWZpbHRlcl9tb2RlLCBjZmctXFx1MDAzZXJ0X3Byb3RvY29sLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzY2PWJyX211bHRpY2FzdF9uZXdfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnLCBzdHJ1Y3QgYnJfaXAgKnNyY19pcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQwMy1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0MDQ6c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQwNS1cXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNTA3PV9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU0MTpcXHRwID0gYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHBtY3R4LVxcdTAwM2Vwb3J0LCBncm91cCwgKnBwLCAwLCBzcmMsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQyLVxcdFxcdFxcdFxcdFxcdGZpbHRlcl9tb2RlLCBSVFBST1RfS0VSTkVMLCBOVUxMKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwMTA9c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTAxMTpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnJfaXAgKmdyb3VwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODowMy40NzY1MDI0MDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA1NjkyMDA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNdWx0aWNhc3QgUG9ydCBHcm91cCBMb2dpYyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCByZWFsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2UgbXVsdGljYXN0IHBvcnQgZ3JvdXBzIGFyZSBtYW5hZ2VkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHNlZSBob3cgYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAgYW5kIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBicm9hZGVyIGJyaWRnZSBzdHJ1Y3R1cmUuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyBhcm91bmQgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSdyZSBvcGVyYXRpbmcgb24g4oCTIEkgd2FudCB0byBzZWUgaG93IHRoZSBncm91cHMgYXJlIGNyZWF0ZWQsIGxpbmtlZCwgYW5kIGV2ZW50dWFsbHkgcmVtb3ZlZC4gQXJlIHRoZXkgdXNpbmcgcmVmZXJlbmNlIGNvdW50cz8gSXMgdGhlcmUgYSBjZW50cmFsIGRhdGEgc3RydWN0dXJlIG1hbmFnaW5nIHRoZW0gYWxsLCBvciBhcmUgdGhleSBkaXN0cmlidXRlZCBzb21laG93PyBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGNvbmN1cnJlbmN5IGNvbmNlcm5zIGhlcmUuIEkgZXhwZWN0IHRoYXQgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGdyb3VwcyBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50IGNvdWxkIGVhc2lseSBpbnRyb2R1Y2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucywgc28gSSdsbCBiZSBsb29raW5nIGZvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBsaWtlIG11dGV4ZXMgb3Igc3BpbmxvY2tzLiBBcmUgdGhleSB1c2luZyBhbnkgYXRvbWljIG9wZXJhdGlvbnM/IEknbGwgYWxzbyBiZSBjb25zaWRlcmluZyB0aGUgZWRnZSBjYXNlczogd2hhdCBoYXBwZW5zIGlmIGEgcG9ydCBncm91cCBpcyBhZGRlZCBhbmQgdGhlbiBkZWxldGVkIGluIHJhcGlkIHN1Y2Nlc3Npb24/IERvZXMgdGhlIGNvZGUgaGFuZGxlIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgY29ycnVwdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb25zIHRoYXQgbmVlZCB0byBiZSBjYXJlZnVsbHkgbWFuYWdlZD8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBtZW50YWwgbW9kZWwgdG8gZW5zdXJlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWhhdmluZyBjb3JyZWN0bHksIGVmZmljaWVudGx5LCBhbmQsIGFib3ZlIGFsbCwgc2FmZWx5LiBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCBjb250ZXh0IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIGFuZCB3aGF0IGNhbGxzIHRoZW0sIGFyZSBhbHNvIGNydWNpYWwgYXNwZWN0cyBmb3IgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODowNi41MzM0MjY1ODdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwMDpcXHRcXG4xNDAxOlxcdFxcdHJldHVybiBncnBfc3JjO1xcbjE0MDI6XFx0fVxcbjE0MDM6XFx0XFxuMTQwNDpcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXFxuMTQwNTpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxcbjE0MDY6XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJyX2lwICpncm91cCxcXG4xNDA3OlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgX19yY3UgKm5leHQsXFxuMTQwODpcXHRcXHRcXHRcXHR1bnNpZ25lZCBjaGFyIGZsYWdzLFxcbjE0MDk6XFx0XFx0XFx0XFx0Y29uc3QgdW5zaWduZWQgY2hhciAqc3JjLFxcbjE0MTA6XFx0XFx0XFx0XFx0dTggZmlsdGVyX21vZGUsXFxuMTQxMTpcXHRcXHRcXHRcXHR1OCBydF9wcm90b2NvbCxcXG4xNDEyOlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xNDEzOlxcdHtcXG4xNDE0OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnA7XFxuMTQxNTpcXHRcXHRpbnQgZXJyO1xcbjE0MTY6XFx0XFxuMTQxNzpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2luYyhwb3J0LCBncm91cCwgZXh0YWNrKTtcXG4xNDE4OlxcdFxcdGlmIChlcnIpXFxuMTQxOTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDIwOlxcdFxcbjE0MjE6XFx0XFx0cCA9IGt6YWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG4xNDIyOlxcdFxcdGlmICh1bmxpa2VseSghcCkpIHtcXG4xNDIzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDb3VsZG4ndCBhbGxvY2F0ZSBuZXcgcG9ydCBncm91cFxcXCIpO1xcbjE0MjQ6XFx0XFx0XFx0Z290byBkZWNfb3V0O1xcbjE0MjU6XFx0XFx0fVxcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHRwLVxcdTAwM2VrZXkuYWRkciA9ICpncm91cDtcXG4xNDI4OlxcdFxcdHAtXFx1MDAzZWtleS5wb3J0ID0gcG9ydDtcXG4xNDI5OlxcdFxcdHAtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuMTQzMDpcXHRcXHRwLVxcdTAwM2VmaWx0ZXJfbW9kZSA9IGZpbHRlcl9tb2RlO1xcbjE0MzE6XFx0XFx0cC1cXHUwMDNlcnRfcHJvdG9jb2wgPSBydF9wcm90b2NvbDtcXG4xNDMyOlxcdFxcdHAtXFx1MDAzZWVodF9ob3N0X3RyZWUgPSBSQl9ST09UO1xcbjE0MzM6XFx0XFx0cC1cXHUwMDNlZWh0X3NldF90cmVlID0gUkJfUk9PVDtcXG4xNDM0OlxcdFxcdHAtXFx1MDAzZW1jYXN0X2djLmRlc3Ryb3kgPSBicl9tdWx0aWNhc3RfZGVzdHJveV9wb3J0X2dyb3VwO1xcbjE0MzU6XFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZwLVxcdTAwM2VzcmNfbGlzdCk7XFxuMTQzNjpcXHRcXG4xNDM3OlxcdFxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhncm91cCkgXFx1MDAyNlxcdTAwMjZcXG4xNDM4OlxcdFxcdCAgICByaGFzaHRhYmxlX2xvb2t1cF9pbnNlcnRfZmFzdChcXHUwMDI2cG9ydC1cXHUwMDNlYnItXFx1MDAzZXNnX3BvcnRfdGJsLCBcXHUwMDI2cC1cXHUwMDNlcmhub2RlLFxcbjE0Mzk6XFx0XFx0XFx0XFx0XFx0XFx0ICBicl9zZ19wb3J0X3JodF9wYXJhbXMpKSB7XFxuMTQ0MDpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ291bGRuJ3QgaW5zZXJ0IG5ldyBwb3J0IGdyb3VwXFxcIik7XFxuMTQ0MTpcXHRcXHRcXHRnb3RvIGZyZWVfb3V0O1xcbjE0NDI6XFx0XFx0fVxcbjE0NDM6XFx0XFxuMTQ0NDpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2cC1cXHUwMDNldGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQsIDApO1xcbjE0NDU6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNnAtXFx1MDAzZXJleG1pdF90aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0LCAwKTtcXG4xNDQ2OlxcdFxcbjE0NDc6XFx0XFx0aWYgKHNyYylcXG4xNDQ4OlxcdFxcdFxcdG1lbWNweShwLVxcdTAwM2VldGhfYWRkciwgc3JjLCBFVEhfQUxFTik7XFxuMTQ0OTpcXHRcXHRlbHNlXFxuMTQ1MDpcXHRcXHRcXHRldGhfYnJvYWRjYXN0X2FkZHIocC1cXHUwMDNlZXRoX2FkZHIpO1xcbjE0NTE6XFx0XFxuMTQ1MjpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKHAtXFx1MDAzZW5leHQsIG5leHQpO1xcbjE0NTM6XFx0XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QsIFxcdTAwMjZwb3J0LVxcdTAwM2VtZ2xpc3QpO1xcbjE0NTQ6XFx0XFxuMTQ1NTpcXHRcXHRyZXR1cm4gcDtcXG4xNDU2OlxcdFxcbjE0NTc6XFx0ZnJlZV9vdXQ6XFxuMTQ1ODpcXHRcXHRrZnJlZShwKTtcXG4xNDU5OlxcdGRlY19vdXQ6XFxuMTQ2MDpcXHRcXHRicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCBncm91cC1cXHUwMDNldmlkKTtcXG4xNDYxOlxcdFxcdHJldHVybiBOVUxMO1xcbjE0NjI6XFx0fVxcbjE0NjM6XFx0XFxuMTQ2NDpcXHR2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxcbjE0NjU6XFx0e1xcbjE0NjY6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtXFx1MDAzZWtleS5wb3J0O1xcbjE0Njc6XFx0XFx0X191MTYgdmlkID0gcC1cXHUwMDNla2V5LmFkZHIudmlkO1xcbjE0Njg6XFx0XFxuMTQ2OTpcXHRcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCk7XFxuMTQ3MDpcXHRcXHRpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coXFx1MDAyNnAtXFx1MDAzZWtleS5hZGRyKSlcXG4xNDcxOlxcdFxcdFxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnBvcnQtXFx1MDAzZWJyLVxcdTAwM2VzZ19wb3J0X3RibCwgXFx1MDAyNnAtXFx1MDAzZXJobm9kZSxcXG4xNDcyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBicl9zZ19wb3J0X3JodF9wYXJhbXMpO1xcbjE0NzM6XFx0XFx0a2ZyZWVfcmN1KHAsIHJjdSk7XFxuMTQ3NDpcXHRcXHRicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCB2aWQpO1xcbjE0NzU6XFx0fVxcbjE0NzY6XFx0XFxuMTQ3NzpcXHR2b2lkIGJyX211bHRpY2FzdF9ob3N0X2pvaW4oY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG4xNDc4OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wLCBib29sIG5vdGlmeSlcXG4xNDc5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjg6MDYuNTMzNzAyMjU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MTY1MDU1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCB0aGlzIGNvZGUgcGF0Y2g6XG5cbioqRGVjb25zdHJ1Y3RpbmcgVGhpcyBQYXRjaDogQSBNZW50YWwgQ2hlY2tsaXN0KipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBGaXJzdCB0aGluZ3MgZmlyc3Q6ICpXaGF0KiBpcyB0aGlzIHBhdGNoIGV2ZW4gKnRyeWluZyogdG8gYWNjb21wbGlzaD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGNoYW5nZS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdXN1YWxseSByZXRyYWNpbmcgdGhlIHN0ZXBzIHRoYXQgbGVkIHRvIHRoaXMgcG9pbnQuIExldCdzIHN0YXJ0IHdpdGggdGhlIGltbWVkaWF0ZSBjb250ZXh0OiBsb29raW5nIGF0IHRoZSBgZ2l0YCBoaXN0b3J5IG9yIHRoZSBjb21taXQgbWVzc2FnZSB0byBzZWUgaWYgdGhlcmUncyBhbnkgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvciByZWFzb25pbmcgcHJvdmlkZWQgYXJvdW5kIHRoYXQgc3BlY2lmaWMgaXRlcmF0aW9uIGludm9sdmluZyBgcG9ydC1cdTAwM2VtZ2xpc3RgLlxuXG5UaGVuLCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBhZmZlY3RzIHRoZSByZXN0IG9mIHRoZSBwcm9ncmFtLCBzbyBJIHdpbGwgc2NhbiB0aGUgY29kZSBiYXNlIHRvIGZpbmQgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHBvcnQtXHUwMDNlbWdsaXN0YCBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCouIFNlZWluZyB0aGUgdXNhZ2UgcG9pbnRzIGlzIHRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTc1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODowOS45NTAyMTM0MDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzMxMTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZ2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz03ODk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nYyAqZ2MpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTc5My1cXHRwZyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCwgbWNhc3RfZ2MpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Nzk0OlxcdFdBUk5fT04oIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZwZy1cXHUwMDNlbWdsaXN0KSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03OTUtXFx0V0FSTl9PTighaGxpc3RfZW1wdHkoXFx1MDAyNnBnLVxcdTAwM2VzcmNfbGlzdCkpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz04MDI9dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BnKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxMS1cXHQvKiBLZWVwIC1cXHUwMDNlbmV4dCAoaGVsZCB1bmRlciBtdWx0aWNhc3RfbG9jaywgZnJlZWQgbGF0ZXIgYnkgdGhlIEdDIHdvcmspOlxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODEyOlxcdCAqIGEgcG9ydC1cXHUwMDNlbWdsaXN0IHRlYXJkb3duIHdhbGsgbWF5IGhhdmUgbGF0Y2hlZCB0aGlzIG5vZGUgYXMgaXRzIG5leHQsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTMtXFx0ICogYW5kIGRlbGV0aW5nIG90aGVyIGdyb3VwcyBvZiB0aGUgc2FtZSBwb3J0IG11c3Qgbm90IHRydW5jYXRlIGl0Llxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODE0LVxcdCAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODE1OlxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTYtXFx0YnJfbXVsdGljYXN0X2VodF9jbGVhbl9zZXRzKHBnKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9ODM1PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg0MjpcXHQvKiBBIHRlYXJkb3duIHdhbGsgb3ZlciBwb3J0LVxcdTAwM2VtZ2xpc3QgY2FuIHJlYWNoIGEgZ3JvdXAgdGhhdCBhbiBlYXJsaWVyXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04NDMtXFx0ICogaXRlcmF0aW9uIGFscmVhZHkgZGVsZXRlZCBhcyBhIHNpZGUgZWZmZWN0LiBJdCBpcyBvZmYgbXAtXFx1MDAzZXBvcnRzIGJ5XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0NS1cXHQgKi9cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg0NjpcXHRpZiAoaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnBnLVxcdTAwM2VtZ2xpc3QpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQ3LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9ODY2PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3NS1cXHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXFx1MDAzZWRldikgfHwgdGltZXJfcGVuZGluZyhcXHUwMDI2cGctXFx1MDAzZXRpbWVyKSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODc2OlxcdCAgICBobGlzdF91bmhhc2hlZChcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCkgfHwgcGctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3Ny1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQwND1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTItXFx0UkNVX0lOSVRfUE9JTlRFUihwLVxcdTAwM2VuZXh0LCBuZXh0KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NTM6XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QsIFxcdTAwMjZwb3J0LVxcdTAwM2VtZ2xpc3QpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ1NC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQ2ND12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDY4LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTQ2OTpcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDcwLVxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2cC1cXHUwMDNla2V5LmFkZHIpKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xOTk5PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3JleG1pdChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjAwOS1cXHRzcGluX2xvY2soXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDEwOlxcdGlmICghbmV0aWZfcnVubmluZyhici1cXHUwMDNlZGV2KSB8fCBobGlzdF91bmhhc2hlZChcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCkgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwMTEtXFx0ICAgICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwNTk9dm9pZCBicl9tdWx0aWNhc3RfcG9ydF9jdHhfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDg1LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cG9ydC1cXHUwMDNlYnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwODY6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGcsIFxcdTAwMjZwb3J0LVxcdTAwM2VtZ2xpc3QsIG1nbGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwODctXFx0XFx0XFx0aWYgKHBnLVxcdTAwM2VrZXkuYWRkci52aWQgPT0gdmxhbi1cXHUwMDNldmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTM2PXZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNDMtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE0NDpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTQ1LVxcdFxcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhiciwgcGcpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTk1PXN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjAxOlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFxcdTAwMjZwbWN0eC1cXHUwMDNlcG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLVxcdFxcdGlmICghKHBnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTM3Mjc9YnJfbXVsdGljYXN0X2xlYXZlX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM3ODQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNzg1OlxcdFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM3ODYtXFx0XFx0XFx0ICAgICh0aW1lcl9wZW5kaW5nKFxcdTAwMjZwLVxcdTAwM2V0aW1lcikgP1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODE2LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzgxNzpcXHRcXHRpZiAoIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODE4LVxcdFxcdCAgICAodGltZXJfcGVuZGluZyhcXHUwMDI2cC1cXHUwMDNldGltZXIpID9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDk1OT1pbnQgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk4MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ5ODI6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdyb3VwLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5ODMtXFx0XFx0XFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MzU2PXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMzY4LVxcdHN0cnVjdCB0aW1lcl9saXN0XFx0XFx0cmV4bWl0X3RpbWVyO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjM2OTpcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdFxcdG1nbGlzdDtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNzAtXFx0c3RydWN0IHJiX3Jvb3RcXHRcXHRcXHRlaHRfc2V0X3RyZWU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MzEtXFx0dTMyXFx0XFx0XFx0XFx0bXVsdGljYXN0X2VodF9ob3N0c19jbnQ7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDMyOlxcdHN0cnVjdCBobGlzdF9oZWFkXFx0XFx0bWdsaXN0O1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQzMy0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjg6MTAuMDY3NTMwMDgzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTY0Mzc3ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudGAgYW5kIFJDVSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCDigJMgc3BlY2lmaWNhbGx5IGxpbmUgNDk1OSBpbiBgYnJfbXVsdGljYXN0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSdyZSBsZXZlcmFnaW5nIFJlYWQtQ29weS1VcGRhdGUgKFJDVSkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgYG1nbGlzdGAgZGF0YSBzdHJ1Y3R1cmUgaGVyZS4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgY29udGV4dCwgdGhhdCBgbWdsaXN0YCBpcyBhIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwIGxpc3QuIFRoZSBjb3JlIGlzc3VlLCBJJ20gZ3Vlc3NpbmcsIGlzIGNvbmN1cnJlbnQgYWNjZXNzIOKAkyBtdWx0aXBsZSByZWFkZXJzLCBwb3RlbnRpYWwgd3JpdGVycy4gUkNVIGlzIGEgbmF0dXJhbCBmaXQgZm9yIHRoaXMga2luZCBvZiBzY2VuYXJpbywgZXNwZWNpYWxseSB3aGVyZSByZWFkcyBhcmUgbXVjaCBtb3JlIGZyZXF1ZW50IHRoYW4gd3JpdGVzLCBhbmQgdGhlIHRvbGVyYW5jZSBmb3IgYSBzbGlnaHQgZGVsYXkgaW4gdXBkYXRlcyBpcyBhY2NlcHRhYmxlLiBUaGlzIGhpbnRzIHRoYXQgdXBkYXRlcyB0byB0aGUgbXVsdGljYXN0IGdyb3VwIG1lbWJlcnNoaXAgYXJlbid0IGNyaXRpY2FsIHRvIGJlIGltbWVkaWF0ZWx5IHJlZmxlY3RlZCBhY3Jvc3MgYWxsIHRocmVhZHMuIFdlIHNob3VsZCBzZWUgdGhlIHJlYWQgc2lkZSB1dGlsaXppbmcgYHJjdV9kZXJlZmVyZW5jZWAgb3Igc2ltaWxhciBwcmltaXRpdmVzIGFuZCB0aGUgd3JpdGUgc2lkZSB1c2luZyBgc3luY2hyb25pemVfcmN1YCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gdG8gd2FpdCBvdXQgYW55IHJlYWRlcnMgYmVmb3JlIG1vZGlmeWluZyB0aGUgbGlzdCBzYWZlbHkuIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIHBvaW50ZXIgbWFuaXB1bGF0aW9uIHRvIHZlcmlmeSBSQ1UncyBhcHByb3ByaWF0ZSB1c2UuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjg6MzUuMDMxOTExMTY3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ5NzA6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuNDk3MTpcXHRcXG40OTcyOlxcdFxcdHBvcnQgPSBicl9wb3J0X2dldF9yY3UoZGV2KTtcXG40OTczOlxcdFxcdGlmICghcG9ydCB8fCAhcG9ydC1cXHUwMDNlYnIpXFxuNDk3NDpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG40OTc1OlxcdFxcbjQ5NzY6XFx0XFx0YnIgPSBwb3J0LVxcdTAwM2VicjtcXG40OTc3OlxcdFxcbjQ5Nzg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNmJyLVxcdTAwM2Vwb3J0X2xpc3QsIGxpc3QpIHtcXG40OTc5OlxcdFxcdFxcdGlmICghcG9ydC1cXHUwMDNlZGV2IHx8IHBvcnQtXFx1MDAzZWRldiA9PSBkZXYpXFxuNDk4MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG40OTgxOlxcdFxcbjQ5ODI6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdyb3VwLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcXG40OTgzOlxcdFxcdFxcdFxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5LCBHRlBfQVRPTUlDKTtcXG40OTg0OlxcdFxcdFxcdFxcdGlmICghZW50cnkpXFxuNDk4NTpcXHRcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG40OTg2OlxcdFxcbjQ5ODc6XFx0XFx0XFx0XFx0ZW50cnktXFx1MDAzZWFkZHIgPSBncm91cC1cXHUwMDNla2V5LmFkZHI7XFxuNDk4ODpcXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2ZW50cnktXFx1MDAzZWxpc3QsIGJyX2lwX2xpc3QpO1xcbjQ5ODk6XFx0XFx0XFx0XFx0Y291bnQrKztcXG40OTkwOlxcdFxcdFxcdH1cXG40OTkxOlxcdFxcdH1cXG40OTkyOlxcdFxcbjQ5OTM6XFx0dW5sb2NrOlxcbjQ5OTQ6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDk5NTpcXHRcXHRyZXR1cm4gY291bnQ7XFxuNDk5NjpcXHR9XFxuNDk5NzpcXHRFWFBPUlRfU1lNQk9MX0dQTChicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudCk7XFxuNDk5ODpcXHRcXG40OTk5OlxcdC8qKlxcbjUwMDA6XFx0ICogYnJfbXVsdGljYXN0X2hhc19xdWVyaWVyX2FueXdoZXJlIC0gQ2hlY2tzIGZvciBhIHF1ZXJpZXIgb24gYSBicmlkZ2VcXG41MDAxOlxcdCAqIEBkZXY6IFRoZSBicmlkZ2UgcG9ydCBwcm92aWRpbmcgdGhlIGJyaWRnZSBvbiB3aGljaCB0byBjaGVjayBmb3IgYSBxdWVyaWVyXFxuNTAwMjpcXHQgKiBAcHJvdG86IFRoZSBwcm90b2NvbCBmYW1pbHkgdG8gY2hlY2sgZm9yOiBJR01QIC1cXHUwMDNlIEVUSF9QX0lQLCBNTEQgLVxcdTAwM2UgRVRIX1BfSVBWNlxcbjUwMDM6XFx0ICpcXG41MDA0OlxcdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBpbnRlcmZhY2UgaGFzIGEgYnJpZGdlIG9uIHRvcCBhbmQgaWYgc28gcmV0dXJuc1xcbjUwMDU6XFx0ICogdHJ1ZSBpZiBhIHZhbGlkIHF1ZXJpZXIgZXhpc3RzIGFueXdoZXJlIG9uIHRoZSBicmlkZ2VkIGxpbmsgbGF5ZXIuXFxuNTAwNjpcXHQgKiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cXG41MDA3OlxcdCAqL1xcbjUwMDg6XFx0Ym9vbCBicl9tdWx0aWNhc3RfaGFzX3F1ZXJpZXJfYW55d2hlcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByb3RvKVxcbjUwMDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODozNS4wMzIxODIwNTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ0MjM2MDE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBHcm91cCBMaXN0IGluIHRoZSBCcmlkZ2UgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gbG9va2luZyBhdCBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAgbG9vcCwgaXRlcmF0aW5nIHRocm91Z2ggYHBvcnQtXHUwMDNlbWdsaXN0YC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIGluIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGp1c3QgdXNlZCBgaGxpc3RfYWRkX2hlYWQoXHUwMDI2cC1cdTAwM2VtZ2xpc3QsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0KWAuIEFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCBzaW1wbHkgZGVsZXRlZCBpdCB3aXRoIGBobGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZW1nbGlzdClgIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IGEgYGtmcmVlKHApYC5cblxuVGhhdCdzIGEgY2xhc3NpYyBSQ1UgY29uY3VycmVuY3kgaXNzdWUgcmlnaHQgdGhlcmUhIEl0IG1lYW5zIGNvbmN1cnJlbnQgUkNVIHJlYWRlcnMgaW4gYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCBjb3VsZCB2ZXJ5IGVhc2lseSBydW4gaW50byBwcm9ibGVtcy4gVGhleSBtaWdodCByZWFkIGBwb3J0LVx1MDAzZW1nbGlzdGAgd2l0aG91dCB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBiYXJyaWVycywgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgZGF0YS4gV29yc2UsIHRoZXkgY291bGQgZW5jb3VudGVyIGEgZGFuZ2xpbmcgcG9pbnRlciBiZWNhdXNlIGBwYCB3YXMgZnJlZWQgaW1tZWRpYXRlbHkgd2l0aCBga2ZyZWUocClgIHJhdGhlciB0aGFuIGBrZnJlZV9yY3UocCwgcmN1KWAsIHdoaWNoIGlzIGEgdGV4dGJvb2sgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSFcblxuVGhpcyBwYXRjaCBpcyBvYnZpb3VzbHkgYWRkcmVzc2luZyB0aGlzIGJ5IHVzaW5nIGBobGlzdF9hZGRfaGVhZF9yY3VgIGluc3RlYWQuIEkgZXhwZWN0IHRoYXQgdGhpcyBlbnN1cmVzIHRoZSByZXF1aXJlZCBtZW1vcnkgYmFycmllcnMuIEl0IG1ha2VzIHN1cmUgdGhhdCBhbGwgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiBgcGAgYXJlIHZpc2libGUgKmJlZm9yZSogYHBgIGlzIGxpbmtlZCBpbnRvIGBwb3J0LVx1MDAzZW1nbGlzdGAuIFRoaXMgaXMgY3JpdGljYWwuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBtZW1iZXJzIG9mIGBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwYCBpbiBgYnJfcHJpdmF0ZS5oYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBpc3N1ZXMgaGVyZSB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjg6NDAuNDc0NTQ2NDU5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTU6XFx0XFxuIDM1NjpcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIHtcXG4gMzU3OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgX19yY3UgKm5leHQ7XFxuIDM1ODpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwX3NnX2tleSBrZXk7XFxuIDM1OTpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0XFx0ZXRoX2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG4gMzYwOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRcXHRmbGFncztcXG4gMzYxOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRcXHRmaWx0ZXJfbW9kZTtcXG4gMzYyOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRcXHRncnBfcXVlcnlfcmV4bWl0X2NudDtcXG4gMzYzOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRcXHRydF9wcm90b2NvbDtcXG4gMzY0OlxcdFxcbiAzNjU6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWRcXHRcXHRzcmNfbGlzdDtcXG4gMzY2OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdFxcdHNyY19lbnRzO1xcbiAzNjc6XFx0XFx0c3RydWN0IHRpbWVyX2xpc3RcXHRcXHR0aW1lcjtcXG4gMzY4OlxcdFxcdHN0cnVjdCB0aW1lcl9saXN0XFx0XFx0cmV4bWl0X3RpbWVyO1xcbiAzNjk6XFx0XFx0c3RydWN0IGhsaXN0X25vZGVcXHRcXHRtZ2xpc3Q7XFxuIDM3MDpcXHRcXHRzdHJ1Y3QgcmJfcm9vdFxcdFxcdFxcdGVodF9zZXRfdHJlZTtcXG4gMzcxOlxcdFxcdHN0cnVjdCByYl9yb290XFx0XFx0XFx0ZWh0X2hvc3RfdHJlZTtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0c3RydWN0IHJoYXNoX2hlYWRcXHRcXHRyaG5vZGU7XFxuIDM3NDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nY1xcdG1jYXN0X2djO1xcbiAzNzU6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0XFx0cmN1O1xcbiAzNzY6XFx0fTtcXG4gMzc3OlxcdFxcbiAzNzg6XFx0c3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5IHtcXG4gMzc5OlxcdFxcdHN0cnVjdCByaGFzaF9oZWFkXFx0XFx0cmhub2RlO1xcbiAzODA6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VcXHRcXHQqYnI7XFxuIDM4MTpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICpwb3J0cztcXG4gMzgyOlxcdFxcdHN0cnVjdCBicl9pcFxcdFxcdFxcdGFkZHI7XFxuIDM4MzpcXHRcXHRib29sXFx0XFx0XFx0XFx0aG9zdF9qb2luZWQ7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdHN0cnVjdCB0aW1lcl9saXN0XFx0XFx0dGltZXI7XFxuIDM4NjpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdFxcdG1kYl9ub2RlO1xcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nY1xcdG1jYXN0X2djO1xcbiAzODk6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0XFx0cmN1O1xcbiAzOTA6XFx0fTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XFxuIDM5MzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZVxcdFxcdCpicjtcXG4gMzk0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0XFx0KmRldjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjg6NDAuNDc0NzEwMDk5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5NzIxOTE1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQnJpZGdpbmcgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggZm9jdXNlcyBzcGVjaWZpY2FsbHkgb24gbXVsdGljYXN0IGdyb3VwIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBicmlkZ2UgY29kZS4gTXkgcHJpbWFyeSBjb25jZXJuLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1pdGlnYXRlcyBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHBhcnRpY3VsYXJseSB0aG9zZSBLTVNBTiB3b3VsZCBiZSByZXNwb25zaWJsZSBmb3IgY2F0Y2hpbmcuXG5cbkZpcnN0LCBJIGFuYWx5emVkIHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBtb2RpZmljYXRpb25zIHRvIGBicl9tdWx0aWNhc3QuY2AgYW5kIHNwZWNpZmljYWxseSBpbnZvbHZlcyBga3phbGxvY19vYmpgLCB0aGUgdXNlIG9mIFJDVSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyAoYFJDVV9JTklUX1BPSU5URVJgLCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYGtmcmVlX3JjdWApLCBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgaGFuZGxpbmcgb2YgYHAtXHUwMDNlbmV4dGAgYW5kIGBwLVx1MDAzZW1nbGlzdGAuXG5cbkFuYWx5emluZyB0aGUgY2hhbmdlcyBJIHNlZTpcblxuMS4gIGBremFsbG9jX29iamAgaXMgdXNlZCBmb3IgYWxsb2NhdGlvbi4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuXG4yLiAgVGhlIGBSQ1VfSU5JVF9QT0lOVEVSYCBtYWNybyByZXBsYWNlcyB0aGUgc3RhbmRhcmQgcG9pbnRlciBhc3NpZ25tZW50IGFuZCBpcyBub3cgYmVsb3cgdGhlIGBldGhfYWRkcmAgaW5pdGlhbGl6YXRpb24gYWxvbmcgd2l0aCBgaGxpc3RfYWRkX2hlYWRfcmN1YC4gVGhpcyBpcyBhIGNsZWFyIFJDVSBzeW5jaHJvbml6YXRpb24gY2hhbmdlLlxuMy4gIFRoZSByZW1vdmFsIGFuZCBmcmVlaW5nIG9mIG11bHRpY2FzdCBncm91cHMgaGF2ZSBhbHNvIGJlZW4gdXBkYXRlZCB0byB1c2UgdGhlIFJDVSBjb3VudGVycGFydHMuIGBobGlzdF9kZWxfaW5pdF9yY3VgIGluc3RlYWQgb2YgYGhsaXN0X2RlbF9pbml0YCBhbmQgYGtmcmVlX3JjdWAgaW5zdGVhZCBvZiBga2ZyZWVgLlxuXG5Ob3csIGV2YWx1YXRpbmcgYWdhaW5zdCBLTVNBTiBjcml0ZXJpYS4gRG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IE5vLiBJcyB0aGVyZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE/IE5vLiBJcyB0aGVyZSBhbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IE5vLCBiZWNhdXNlIGBremFsbG9jX29iamAgemVyb2VzIHRoZSBtZW1vcnkuIEFueSBpc3N1ZXMgd2l0aCBib3VuZHMgY2hlY2tpbmc/IE5vLlxuXG5XaGF0IGlzIHRoZSBwb2ludCBvZiB0aGUgcGF0Y2g/IEl0IGxvb2tzIGxpa2UgdGhpcyBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIGNvbmRpdGlvbnMgaW4gdGhlIGBwb3J0LVx1MDAzZW1nbGlzdGAgaXRlcmF0aW9uLiBUaGUgcmFjZSBjb25kaXRpb25zIGFyZSBsaWtlbHkgZXhwb3NlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgZGVidWdnZXJzIGxpa2UgUFJPVkVcXF9SQ1UgYW5kIEtBU0FOLiBJdCdzIGFib3V0IG1lbW9yeSBvcmRlcmluZyBhbmQgZW5zdXJpbmcgcHJvcGVyIFJDVSBncmFjZSBwZXJpb2RzLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLlxuXG5JJ3ZlIGFsc28gZG91YmxlLWNoZWNrZWQgZm9yIGFueSBvdGhlciBtb2RpZmljYXRpb25zIHRvIHRoZSBhZmZlY3RlZCBjb2RlIGFuZCBmb3IgdGhlIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBJIHNlZSBub25lLiBObyBpbmZvcm1hdGlvbiBsZWFrIGZyb20gdGhlIGtlcm5lbCB0byB1c2VyIHNwYWNlIGVpdGhlci5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmA6IGZhbHNlLiBUaGUgcGF0Y2ggaXMgYWJvdXQgYWRkcmVzc2luZyBSQ1Ugc3luY2hyb25pemF0aW9uIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBUaGVzZSBidWdzIGFyZSBjb3JyZWN0bHkgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEyNSwiT3V0cHV0VG9rZW5zIjoyMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODo0Ny40NDY5MDUwOTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZ3JvdXAgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyB0aGF0IGBobGlzdF9hZGRfaGVhZF9yY3VgLCBgUkNVX0lOSVRfUE9JTlRFUmAsIGBobGlzdF9kZWxfaW5pdF9yY3VgLCBhbmQgYGtmcmVlX3JjdWAgYXJlIHVzZWQgY29ycmVjdGx5IGZvciBgcG9ydC1cXHUwMDNlbWdsaXN0YCBhbmQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgLCBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgcmVhZGVycyAoc3VjaCBhcyBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgKSBmcm9tIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3Igb2JzZXJ2aW5nIHBhcnRpYWxseSBwdWJsaXNoZWQgZW50cmllcy5cXG5cXG5UaGUgYWxsb2NhdGVkIGBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwYCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBhc3NpZ25lZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgb3ZlcmZsb3dzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIENvbmN1cnJlbmN5IGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBSQ1UgZGVidWdnaW5nIHRvb2xzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZ3JvdXAgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyB0aGF0IGBobGlzdF9hZGRfaGVhZF9yY3VgLCBgUkNVX0lOSVRfUE9JTlRFUmAsIGBobGlzdF9kZWxfaW5pdF9yY3VgLCBhbmQgYGtmcmVlX3JjdWAgYXJlIHVzZWQgY29ycmVjdGx5IGZvciBgcG9ydC1cXHUwMDNlbWdsaXN0YCBhbmQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgLCBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgcmVhZGVycyAoc3VjaCBhcyBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgKSBmcm9tIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3Igb2JzZXJ2aW5nIHBhcnRpYWxseSBwdWJsaXNoZWQgZW50cmllcy5cXG5cXG5UaGUgYWxsb2NhdGVkIGBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwYCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBhc3NpZ25lZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgb3ZlcmZsb3dzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIENvbmN1cnJlbmN5IGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBSQ1UgZGVidWdnaW5nIHRvb2xzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjftkl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 13:56:49 +0000 UTC FinishedAt: 2026-09-04 14:28:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_IGMP_SNOOPING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRIDGE", "BRIDGE_IGMP_SNOOPING" ], "series_id": "fec8cfcf-e4d8-4bca-8c06-5998755fcf56" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_multicast_new_port_group", "br_multicast_del_port_group" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cCYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCBgaGxpc3RfYWRkX2hlYWRfcmN1YCwgYFJDVV9JTklUX1BPSU5URVJgLCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYW5kIGBrZnJlZV9yY3VgIGFyZSB1c2VkIGNvcnJlY3RseSBmb3IgYHBvcnQtXHUwMDNlbWdsaXN0YCBhbmQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgLCBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgcmVhZGVycyAoc3VjaCBhcyBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgKSBmcm9tIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3Igb2JzZXJ2aW5nIHBhcnRpYWxseSBwdWJsaXNoZWQgZW50cmllcy5cblxuVGhlIGFsbG9jYXRlZCBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAgc3RydWN0dXJlIGlzIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG92ZXJmbG93cywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBDb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgUkNVIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZ3JvdXAgbGlzdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1Utc2FmZSBwcmltaXRpdmVzIChobGlzdF9hZGRfaGVhZF9yY3UsIGhsaXN0X2RlbF9pbml0X3JjdSwgUkNVX0lOSVRfUE9JTlRFUiwgYW5kIGtmcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGluIHRoZSBicmlkZ2UgSUdNUCBzbm9vcGluZyBzdWJzeXN0ZW0sIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsvTURCIGludGVyZmFjZXMgYW5kIG11bHRpY2FzdCB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDNjM2RjM2NkMzVjYmE3MmE1NDVmZTAzNzMwNDFiMmU1NGRkNThjYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6Mjc6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbmluZGV4IDNlOWIxMGY4YWJmMWQuLjJmOWJiMzBlMWExZjYgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5AQCAtMTQ0MSwxNiAmIzQzOzE0NDEsMTcgQEAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKFxuIFx0XHRnb3RvIGZyZWVfb3V0O1xuIFx0fVxuIFxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKHAtXHUwMDNlbmV4dCwgbmV4dCk7XG4gXHR0aW1lcl9zZXR1cChcdTAwMjZwLVx1MDAzZXRpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9leHBpcmVkLCAwKTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNnAtXHUwMDNlcmV4bWl0X3RpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9yZXhtaXQsIDApO1xuLVx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2cC1cdTAwM2VtZ2xpc3QsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0KTtcbiBcbiBcdGlmIChzcmMpXG4gXHRcdG1lbWNweShwLVx1MDAzZWV0aF9hZGRyLCBzcmMsIEVUSF9BTEVOKTtcbiBcdGVsc2VcbiBcdFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKHAtXHUwMDNlZXRoX2FkZHIpO1xuIFxuJiM0MztcdFJDVV9JTklUX1BPSU5URVIocC1cdTAwM2VuZXh0LCBuZXh0KTtcbiYjNDM7XHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2cC1cdTAwM2VtZ2xpc3QsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0KTtcbiYjNDM7XG4gXHRyZXR1cm4gcDtcbiBcbiBmcmVlX291dDpcbkBAIC0xNDY1LDExICYjNDM7MTQ2NiwxMSBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxuIFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtXHUwMDNla2V5LnBvcnQ7XG4gXHRfX3UxNiB2aWQgPSBwLVx1MDAzZWtleS5hZGRyLnZpZDtcbiBcbi1cdGhsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlbWdsaXN0KTtcbiYjNDM7XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2cC1cdTAwM2VtZ2xpc3QpO1xuIFx0aWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFx1MDAyNnAtXHUwMDNla2V5LmFkZHIpKVxuIFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnBvcnQtXHUwMDNlYnItXHUwMDNlc2dfcG9ydF90YmwsIFx1MDAyNnAtXHUwMDNlcmhub2RlLFxuIFx0XHRcdFx0ICAgICAgIGJyX3NnX3BvcnRfcmh0X3BhcmFtcyk7XG4tXHRrZnJlZShwKTtcbiYjNDM7XHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjKHBvcnQsIHZpZCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSSURHRSYjMzQ7LAogICAgJiMzNDtCUklER0VfSUdNUF9TTk9PUElORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cCYjMzQ7LAogICAgJiMzNDticl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggdXBkYXRlcyBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZ3JvdXAgbGlzdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1Utc2FmZSBwcmltaXRpdmVzIChobGlzdF9hZGRfaGVhZF9yY3UsIGhsaXN0X2RlbF9pbml0X3JjdSwgUkNVX0lOSVRfUE9JTlRFUiwgYW5kIGtmcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGluIHRoZSBicmlkZ2UgSUdNUCBzbm9vcGluZyBzdWJzeXN0ZW0sIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsvTURCIGludGVyZmFjZXMgYW5kIG11bHRpY2FzdCB0cmFmZmljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDNjM2RjM2NkMzVjYmE3MmE1NDVmZTAzNzMwNDFiMmU1NGRkNThjYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMTQ6Mjc6MTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwppbmRleCAzZTliMTBmOGFiZjFkLi4yZjliYjMwZTFhMWY2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTE0NDEsMTYgJiM0MzsxNDQxLDE3IEBAIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cCgKIAkJZ290byBmcmVlX291dDsKIAl9CiAKLQlyY3VfYXNzaWduX3BvaW50ZXIocC0mZ3Q7bmV4dCwgbmV4dCk7CiAJdGltZXJfc2V0dXAoJmFtcDtwLSZndDt0aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZCwgMCk7CiAJdGltZXJfc2V0dXAoJmFtcDtwLSZndDtyZXhtaXRfdGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3JleG1pdCwgMCk7Ci0JaGxpc3RfYWRkX2hlYWQoJmFtcDtwLSZndDttZ2xpc3QsICZhbXA7cG9ydC0mZ3Q7bWdsaXN0KTsKIAogCWlmIChzcmMpCiAJCW1lbWNweShwLSZndDtldGhfYWRkciwgc3JjLCBFVEhfQUxFTik7CiAJZWxzZQogCQlldGhfYnJvYWRjYXN0X2FkZHIocC0mZ3Q7ZXRoX2FkZHIpOwogCiYjNDM7CVJDVV9JTklUX1BPSU5URVIocC0mZ3Q7bmV4dCwgbmV4dCk7CiYjNDM7CWhsaXN0X2FkZF9oZWFkX3JjdSgmYW1wO3AtJmd0O21nbGlzdCwgJmFtcDtwb3J0LSZndDttZ2xpc3QpOwomIzQzOwogCXJldHVybiBwOwogCiBmcmVlX291dDoKQEAgLTE0NjUsMTEgJiM0MzsxNDY2LDExIEBAIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApCiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtJmd0O2tleS5wb3J0OwogCV9fdTE2IHZpZCA9IHAtJmd0O2tleS5hZGRyLnZpZDsKIAotCWhsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7bWdsaXN0KTsKJiM0MzsJaGxpc3RfZGVsX2luaXRfcmN1KCZhbXA7cC0mZ3Q7bWdsaXN0KTsKIAlpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coJmFtcDtwLSZndDtrZXkuYWRkcikpCiAJCXJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoJmFtcDtwb3J0LSZndDtici0mZ3Q7c2dfcG9ydF90YmwsICZhbXA7cC0mZ3Q7cmhub2RlLAogCQkJCSAgICAgICBicl9zZ19wb3J0X3JodF9wYXJhbXMpOwotCWtmcmVlKHApOwomIzQzOwlrZnJlZV9yY3UocCwgcmN1KTsKIAlicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCB2aWQpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCcmlkZ2UgTXVsdGljYXN0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGJlZW4gdHdlYWtlZC4gTG9va3MgbGlrZSB0aGUgY2hhbmdlcyBhcmUgYWxsIGNvbmZpbmVkIHRvIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gU3BlY2lmaWNhbGx5LCB0aGV5IGFyZSBtYWtpbmcgYWRqdXN0bWVudHMgdG8gdGhlIG11bHRpY2FzdCBncm91cCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgYnJpZGdpbmcgY29kZS4KCkluIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgLCB0aGV5JiMzOTt2ZSByZW9yZGVyZWQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgcC0mZ3Q7bmV4dGAgcG9pbnRlciBhbmQgdGhlIGFkZGl0aW9uIG9mIHRoZSBuZXcgcG9ydCBncm91cCB0byB0aGUgaGFzaCBsaXN0LiBUaGUgb3JpZ2luYWwgYGhsaXN0X2FkZF9oZWFkYCBpcyBub3cgYGhsaXN0X2FkZF9oZWFkX3JjdWAgYW5kIGBSQ1VfSU5JVF9QT0lOVEVSYCBpcyBhZGRlZCB0byBpbml0aWFsaXplIGBwLSZndDtuZXh0YC4gVGhpcyBpcyBhIGNsYXNzaWMgUkNVIChSZWFkLUNvcHktVXBkYXRlKSBvcHRpbWl6YXRpb24uIFRoaXMgcG9pbnRzIHRvd2FyZCBhbiBlZmZvcnQgdG8gaW1wcm92ZSBjb25jdXJyZW50IGFjY2VzcyBhbmQgcmVkdWNlIHRoZSBuZWVkIGZvciBleHBlbnNpdmUgbG9ja2luZywgd2hpY2ggYWxpZ25zIHdpdGggdGhlIHBlcmZvcm1hbmNlIGdvYWxzLgoKVGhlbiwgd2hlbiBkZWxldGluZyB0aGUgcG9ydCBncm91cCBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCwgdGhleSYjMzk7dmUgc3dhcHBlZCBgaGxpc3RfZGVsX2luaXRgIHdpdGggYGhsaXN0X2RlbF9pbml0X3JjdWAgYW5kIGBrZnJlZShwKWAgd2l0aCBga2ZyZWVfcmN1KHAsIHJjdSlgLiBUaGF0IHJlaW5mb3JjZXMgdGhlIG1vdmUgdG8gUkNVLCBlbnN1cmluZyBzYWZlIGRlbGV0aW9uIGluIGEgY29uY3VycmVudCBlbnZpcm9ubWVudCB3aGVyZSByZWFkZXJzIG1heSBzdGlsbCBiZSB0cmF2ZXJzaW5nIHRoZSBkYXRhIHN0cnVjdHVyZS4gVGhlIGFkZGl0aW9uIG9mIGBrZnJlZV9yY3VgIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoIHRvIGVuc3VyZSB0aGUgbWVtb3J5IGlzIGFjdHVhbGx5IGZyZWVkIGFmdGVyIGFsbCByZWFkZXJzIGhhdmUgbGVmdCB0aGUgY3JpdGljYWwgc2VjdGlvbi4KClRvIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byByZXZpZXcgdGhlIGNvZGUgc3Vycm91bmRpbmcgdGhlc2UgZnVuY3Rpb25zIGluIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYC4gQWxzbywgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBvcHRpb25zIHJlbGF0ZWQgdG8gYnJpZGdlIG11bHRpY2FzdCB0byBlbnN1cmUgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZXhwZWN0ZWQgZGVwZW5kZW5jaWVzIG9yIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zLiBUaGUgY2hhbmdlcyBzdWdnZXN0IGEgZm9jdXMgb24gaW1wcm92aW5nIG11bHRpY2FzdCBwZXJmb3JtYW5jZSBvciByZXNvbHZpbmcgc29tZSBjb25jdXJyZW5jeSBpc3N1ZTsgYSBkZWVwZXIgY29kZSByZXZpZXcgd2lsbCByZXZlYWwgdGhlIHNwZWNpZmljIG1vdGl2YXRpb24gYW5kIGlmIGl0JiMzOTtzIGJlZW4gc3VjY2Vzc2Z1bCBpbiBhY2hpZXZpbmcgdGhlc2UgZ29hbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDMwOlx0XHRwLVx1MDAzZWZpbHRlcl9tb2RlID0gZmlsdGVyX21vZGU7XG4xNDMxOlx0XHRwLVx1MDAzZXJ0X3Byb3RvY29sID0gcnRfcHJvdG9jb2w7XG4xNDMyOlx0XHRwLVx1MDAzZWVodF9ob3N0X3RyZWUgPSBSQl9ST09UO1xuMTQzMzpcdFx0cC1cdTAwM2VlaHRfc2V0X3RyZWUgPSBSQl9ST09UO1xuMTQzNDpcdFx0cC1cdTAwM2VtY2FzdF9nYy5kZXN0cm95ID0gYnJfbXVsdGljYXN0X2Rlc3Ryb3lfcG9ydF9ncm91cDtcbjE0MzU6XHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZwLVx1MDAzZXNyY19saXN0KTtcbjE0MzY6XHRcbjE0Mzc6XHRcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhncm91cCkgXHUwMDI2XHUwMDI2XG4xNDM4Olx0XHQgICAgcmhhc2h0YWJsZV9sb29rdXBfaW5zZXJ0X2Zhc3QoXHUwMDI2cG9ydC1cdTAwM2Vici1cdTAwM2VzZ19wb3J0X3RibCwgXHUwMDI2cC1cdTAwM2VyaG5vZGUsXG4xNDM5Olx0XHRcdFx0XHRcdCAgYnJfc2dfcG9ydF9yaHRfcGFyYW1zKSkge1xuMTQ0MDpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtDb3VsZG4mIzM5O3QgaW5zZXJ0IG5ldyBwb3J0IGdyb3VwXCYjMzQ7KTtcbjE0NDE6XHRcdFx0Z290byBmcmVlX291dDtcbjE0NDI6XHRcdH1cbjE0NDM6XHRcbjE0NDQ6XHRcdHRpbWVyX3NldHVwKFx1MDAyNnAtXHUwMDNldGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQsIDApO1xuMTQ0NTpcdFx0dGltZXJfc2V0dXAoXHUwMDI2cC1cdTAwM2VyZXhtaXRfdGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3JleG1pdCwgMCk7XG4xNDQ2Olx0XG4xNDQ3Olx0XHRpZiAoc3JjKVxuMTQ0ODpcdFx0XHRtZW1jcHkocC1cdTAwM2VldGhfYWRkciwgc3JjLCBFVEhfQUxFTik7XG4xNDQ5Olx0XHRlbHNlXG4xNDUwOlx0XHRcdGV0aF9icm9hZGNhc3RfYWRkcihwLVx1MDAzZWV0aF9hZGRyKTtcbjE0NTE6XHRcbjE0NTI6XHRcdFJDVV9JTklUX1BPSU5URVIocC1cdTAwM2VuZXh0LCBuZXh0KTtcbjE0NTM6XHRcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZwLVx1MDAzZW1nbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2VtZ2xpc3QpO1xuMTQ1NDpcdFxuMTQ1NTpcdFx0cmV0dXJuIHA7XG4xNDU2Olx0XG4xNDU3Olx0ZnJlZV9vdXQ6XG4xNDU4Olx0XHRrZnJlZShwKTtcbjE0NTk6XHRkZWNfb3V0OlxuMTQ2MDpcdFx0YnJfbXVsdGljYXN0X3BvcnRfbmdyb3Vwc19kZWMocG9ydCwgZ3JvdXAtXHUwMDNldmlkKTtcbjE0NjE6XHRcdHJldHVybiBOVUxMO1xuMTQ2MjpcdH1cbjE0NjM6XHRcbjE0NjQ6XHR2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxuMTQ2NTpcdHtcbjE0NjY6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBwLVx1MDAzZWtleS5wb3J0O1xuMTQ2NzpcdFx0X191MTYgdmlkID0gcC1cdTAwM2VrZXkuYWRkci52aWQ7XG4xNDY4Olx0XG4xNDY5Olx0XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2cC1cdTAwM2VtZ2xpc3QpO1xuMTQ3MDpcdFx0aWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFx1MDAyNnAtXHUwMDNla2V5LmFkZHIpKVxuMTQ3MTpcdFx0XHRyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KFx1MDAyNnBvcnQtXHUwMDNlYnItXHUwMDNlc2dfcG9ydF90YmwsIFx1MDAyNnAtXHUwMDNlcmhub2RlLFxuMTQ3MjpcdFx0XHRcdFx0ICAgICAgIGJyX3NnX3BvcnRfcmh0X3BhcmFtcyk7XG4xNDczOlx0XHRrZnJlZV9yY3UocCwgcmN1KTtcbjE0NzQ6XHRcdGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjKHBvcnQsIHZpZCk7XG4xNDc1Olx0fVxuMTQ3NjpcdFxuMTQ3NzpcdHZvaWQgYnJfbXVsdGljYXN0X2hvc3Rfam9pbihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuMTQ3ODpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wLCBib29sIG5vdGlmeSlcbjE0Nzk6XHR7XG4xNDgwOlx0XHRpZiAoIW1wLVx1MDAzZWhvc3Rfam9pbmVkKSB7XG4xNDgxOlx0XHRcdG1wLVx1MDAzZWhvc3Rfam9pbmVkID0gdHJ1ZTtcbjE0ODI6XHRcdFx0aWYgKGJyX211bHRpY2FzdF9pc19zdGFyX2coXHUwMDI2bXAtXHUwMDNlYWRkcikpXG4xNDgzOlx0XHRcdFx0YnJfbXVsdGljYXN0X3N0YXJfZ19ob3N0X3N0YXRlKG1wKTtcbjE0ODQ6XHRcdFx0aWYgKG5vdGlmeSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODIxCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQnJpZGdlIE11bHRpY2FzdCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gZGVidWdnaW5nIHRoaXMgYGJyX211bHRpY2FzdC5jYCBpc3N1ZSwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gc3RlcC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYEtjb25maWdgIGFuZCBgTWFrZWZpbGVgIHdpdGhpbiB0aGUgYnJpZGdlIGRpcmVjdG9yeSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzLiBJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGBuZXQvYnJpZGdlL0tjb25maWdgIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlbmFibGUgbXVsdGljYXN0IHN1cHBvcnQgZm9yIGJyaWRnaW5nLiBJ4oCZbSBsb29raW5nIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9yIHByZWNvbmRpdGlvbnMgdGhhdCBtaWdodCBiZSBnYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBleHBlY3RpbmcuIFRoZW4sIG92ZXIgaW4gYG5ldC9icmlkZ2UvTWFrZWZpbGVgLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgaG93IHRoZSBgYnJfbXVsdGljYXN0LmNgIG9iamVjdCBmaWxlIGlzIGhhbmRsZWQsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncy4gQXJlIHdlIGV2ZW4gYnVpbGRpbmcgaXQsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24/IElmIHRoZXJlIGlzIGFuIGlzc3VlLCBpdCBtYXkgYmUgYSBzaW1wbGUgb3ZlcnNpZ2h0IHdpdGhpbiB0aG9zZSBmaWxlcy4gVGhhdCYjMzk7bGwgYmUgdGhlIGZpcnN0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI4NzIgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICYjNDM7PSBicl9uZXRmaWx0ZXIub1xubmV0L2JyaWRnZS9NYWtlZmlsZS0yMC1cbm5ldC9icmlkZ2UvTWFrZWZpbGU6MjE6YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSAmIzQzOz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIyLVxuLS1cbm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcbi0tXG5uZXQvYnJpZGdlL2JyLmMtMzAzLVx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XG5uZXQvYnJpZGdlL2JyLmM6MzA0Olx0XHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xubmV0L2JyaWRnZS9ici5jLTMwNS1cdFx0YnJlYWs7XG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0zMD1uZXRkZXZfdHhfdCBicl9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtOTctXHRcdH1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6OTg6XHRcdGlmIChicl9tdWx0aWNhc3RfcmN2KFx1MDAyNmJybWN0eCwgXHUwMDI2cG1jdHhfbnVsbCwgdmxhbiwgc2tiLCB2aWQpKSB7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTk5LVx0XHRcdGtmcmVlX3NrYihza2IpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTA0LVx0XHRpZiAoKG1kc3QgfHwgQlJfSU5QVVRfU0tCX0NCX01ST1VURVJTX09OTFkoc2tiKSkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjEwNTpcdFx0ICAgIGJyX211bHRpY2FzdF9xdWVyaWVyX2V4aXN0cyhicm1jdHgsIGV0aF9oZHIoc2tiKSwgbWRzdCkpXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjEwNjpcdFx0XHRicl9tdWx0aWNhc3RfZmxvb2QobWRzdCwgc2tiLCBicm1jdHgsIGZhbHNlLCB0cnVlKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTA3LVx0XHRlbHNlXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xMTk9c3RhdGljIGludCBicl9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTQwLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoxNDE6XHRlcnIgPSBicl9tdWx0aWNhc3RfaW5pdF9zdGF0cyhicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE0Mi1cdGlmIChlcnIpIHtcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTE1Mz1zdGF0aWMgdm9pZCBicl9kZXZfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNTYtXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE1NzpcdGJyX211bHRpY2FzdF9kZXZfZGVsKGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTU4Olx0YnJfbXVsdGljYXN0X3VuaW5pdF9zdGF0cyhicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE1OS1cdGJyX3ZsYW5fZmx1c2goYnIpO1xuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTY0PXN0YXRpYyBpbnQgYnJfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE3MC1cdGJyX3N0cF9lbmFibGVfYnJpZGdlKGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTcxOlx0YnJfbXVsdGljYXN0X29wZW4oYnIpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzItXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE3My1cdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3NDpcdFx0YnJfbXVsdGljYXN0X2pvaW5fc25vb3BlcnMoYnIpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzUtXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xODk9c3RhdGljIGludCBicl9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTkzLVx0YnJfc3RwX2Rpc2FibGVfYnJpZGdlKGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTk0Olx0YnJfbXVsdGljYXN0X3N0b3AoYnIpO1xubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xOTUtXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5Ni1cdGlmIChicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE5NzpcdFx0YnJfbXVsdGljYXN0X2xlYXZlX3Nub29wZXJzKGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTk4LVxuLS1cbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9NDgwPXZvaWQgYnJfZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy01MzMtXHRicl9zdHBfdGltZXJfaW5pdChicik7XG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjUzNDpcdGJyX211bHRpY2FzdF9pbml0KGJyKTtcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtNTM1LVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2YnItXHUwMDNlZ2Nfd29yaywgYnJfZmRiX2NsZWFudXApO1xuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTE3Nj1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqbWF5YmVfZGVsaXZlcihcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xNzkte1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTgwOlx0dTggaWdtcF90eXBlID0gYnJfbXVsdGljYXN0X2lnbXBfdHlwZShza2IpO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTgxLVx0aW50IGVycjtcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xOTQtb3V0OlxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTk1Olx0YnJfbXVsdGljYXN0X2NvdW50KHAtXHUwMDNlYnIsIHAsIHNrYiwgaWdtcF90eXBlLCBCUl9NQ0FTVF9ESVJfVFgpO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTk2LVxuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTI2OD1zdGF0aWMgdm9pZCBtYXliZV9kZWxpdmVyX2FkZHIoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0yOTgtLyogY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayAqL1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6Mjk5OnZvaWQgYnJfbXVsdGljYXN0X2Zsb29kKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbWRzdCxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMwMC1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMwOS1cbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMxMDpcdHJwID0gYnJfbXVsdGljYXN0X2dldF9maXJzdF9ycG9ydF9ub2RlKGJybWN0eCwgc2tiKTtcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMxMS1cbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMTMtXHRcdHAgPSByY3VfZGVyZWZlcmVuY2UobWRzdC1cdTAwM2Vwb3J0cyk7XG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzozMTQ6XHRcdGlmIChicl9tdWx0aWNhc3Rfc2hvdWxkX2hhbmRsZV9tb2RlKGJybWN0eCwgbWRzdC1cdTAwM2VhZGRyLnByb3RvKSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMxNTpcdFx0ICAgIGJyX211bHRpY2FzdF9pc19zdGFyX2coXHUwMDI2bWRzdC1cdTAwM2VhZGRyKSlcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMxNi1cdFx0XHRhbGxvd19tb2RlX2luY2x1ZGUgPSBmYWxzZTtcbi0tXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMjUtXHRcdGxwb3J0ID0gcCA/IHAtXHUwMDNla2V5LnBvcnQgOiBOVUxMO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MzI2Olx0XHRycG9ydCA9IGJyX211bHRpY2FzdF9ycG9ydF9mcm9tX25vZGVfc2tiKHJwLCBza2IpO1xubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzI3LVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz0zMzQ9c3RhdGljIHZvaWQgZGVsX25icChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYy0zNjktXG5uZXQvYnJpZGdlL2JyX2lmLmM6MzcwOlx0YnJfbXVsdGljYXN0X2RlbF9wb3J0KHApO1xubmV0L2JyaWRnZS9icl9pZi5jLTM3MS1cbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmM9NDI2PXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpuZXdfbmJwKHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtNDUxLVx0YnJfc3RwX3BvcnRfdGltZXJfaW5pdChwKTtcbm5ldC9icmlkZ2UvYnJfaWYuYzo0NTI6XHRlcnIgPSBicl9tdWx0aWNhc3RfYWRkX3BvcnQocCk7XG5uZXQvYnJpZGdlL2JyX2lmLmMtNDUzLVx0aWYgKGVycikge1xuLS1cbm5ldC9icmlkZ2UvYnJfaWYuYz01NjA9aW50IGJyX2FkZF9pZihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2JyaWRnZS9icl9pZi5jLTU5OS1cdGlmIChlcnIpIHtcbm5ldC9icmlkZ2UvYnJfaWYuYzo2MDA6XHRcdGJyX211bHRpY2FzdF9kZWxfcG9ydChwKTtcbm5ldC9icmlkZ2UvYnJfaWYuYy02MDEtXHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZwLVx1MDAzZWRldl90cmFja2VyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lmLmMtNzA5LWVycjI6XG5uZXQvYnJpZGdlL2JyX2lmLmM6NzEwOlx0YnJfbXVsdGljYXN0X2RlbF9wb3J0KHApO1xubmV0L2JyaWRnZS9icl9pZi5jLTcxMS1cdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZwLVx1MDAzZWRldl90cmFja2VyKTtcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM9MzM9c3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgcHJvbWlzYylcbi0tXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNjQtXHQvKiB1cGRhdGUgdGhlIG11bHRpY2FzdCBzdGF0cyBpZiB0aGUgcGFja2V0IGlzIElHTVAvTUxEICovXG5uZXQvYnJpZGdlL2JyX2lucHV0LmM6NjU6XHRicl9tdWx0aWNhc3RfY291bnQoYnIsIE5VTEwsIHNrYiwgYnJfbXVsdGljYXN0X2lnbXBfdHlwZShza2IpLFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTY2LVx0XHRcdCAgIEJSX01DQVNUX0RJUl9UWCk7XG4tLVxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xNTUtXHRcdFx0cGt0X3R5cGUgPSBCUl9QS1RfTVVMVElDQVNUO1xubmV0L2JyaWRnZS9icl9pbnB1dC5jOjE1NjpcdFx0XHRpZiAoYnJfbXVsdGljYXN0X3JjdihcdTAwMjZicm1jdHgsIFx1MDAyNnBtY3R4LCB2bGFuLCBza2IsIHZpZCkpXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTU3LVx0XHRcdFx0Z290byBkcm9wO1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xODktXHRcdGlmICgobWRzdCB8fCBCUl9JTlBVVF9TS0JfQ0JfTVJPVVRFUlNfT05MWShza2IpKSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxOTA6XHRcdCAgICBicl9tdWx0aWNhc3RfcXVlcmllcl9leGlzdHMoYnJtY3R4LCBldGhfaGRyKHNrYiksIG1kc3QpKSB7XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTkxLVx0XHRcdGlmICgobWRzdCBcdTAwMjZcdTAwMjYgbWRzdC1cdTAwM2Vob3N0X2pvaW5lZCkgfHxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxOTI6XHRcdFx0ICAgIGJyX211bHRpY2FzdF9pc19yb3V0ZXIoYnJtY3R4LCBza2IpIHx8XG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTkzLVx0XHRcdCAgICBici1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkge1xuLS1cbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yMzAtXHRcdGVsc2Vcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyMzE6XHRcdFx0YnJfbXVsdGljYXN0X2Zsb29kKG1kc3QsIHNrYiwgYnJtY3R4LCBsb2NhbF9yY3YsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yMzItXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz02MTc9dm9pZCBicl9ydHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtNjI2LVx0aWZpbmRleCA9IHBtY3R4ID8gcG1jdHgtXHUwMDNlcG9ydC1cdTAwM2VkZXYtXHUwMDNlaWZpbmRleCA6IDA7XG5uZXQvYnJpZGdlL2JyX21kYi5jOjYyNzpcdHZpZCA9IHBtY3R4IFx1MDAyNlx1MDAyNiBicl9tdWx0aWNhc3RfcG9ydF9jdHhfaXNfdmxhbihwbWN0eCkgPyBwbWN0eC1cdTAwM2V2bGFuLVx1MDAzZXZpZCA6XG5uZXQvYnJpZGdlL2JyX21kYi5jLTYyOC1cdFx0XHRcdFx0XHRcdCAgICAgIDA7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz03MDg9X19icl9tZGJfY2hvb3NlX2NvbnRleHQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzI5LVx0fVxubmV0L2JyaWRnZS9icl9tZGIuYzo3MzA6XHRpZiAoYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChcdTAwMjZ2LVx1MDAzZWJyX21jYXN0X2N0eCkpIHtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzMxLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtWbGFuJiMzOTtzIG11bHRpY2FzdCBwcm9jZXNzaW5nIGlzIGRpc2FibGVkXCYjMzQ7KTtcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jPTc2MD1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc2coY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTc4NC1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6Nzg1Olx0cCA9IGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChjZmctXHUwMDNlcCwgXHUwMDI2Y2ZnLVx1MDAzZWdyb3VwLCAqcHAsIGZsYWdzLCBOVUxMLFxubmV0L2JyaWRnZS9icl9tZGIuYy03ODYtXHRcdFx0XHRcdE1DQVNUX0lOQ0xVREUsIGNmZy1cdTAwM2VydF9wcm90b2NvbCwgZXh0YWNrKTtcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTc5OC1cdCAqL1xubmV0L2JyaWRnZS9icl9tZGIuYzo3OTk6XHRpZiAoYnJfbXVsdGljYXN0X3Nob3VsZF9oYW5kbGVfbW9kZShicm1jdHgsIGNmZy1cdTAwM2Vncm91cC5wcm90bykpIHtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODAwLVx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKnN0YXJfbXA7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy04MDYtXHRcdGlmIChzdGFyX21wKVxubmV0L2JyaWRnZS9icl9tZGIuYzo4MDc6XHRcdFx0YnJfbXVsdGljYXN0X3NnX2FkZF9leGNsdWRlX3BvcnRzKHN0YXJfbXAsIHApO1xubmV0L2JyaWRnZS9icl9tZGIuYy04MDgtXHR9XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz04MTM9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3NyY19md2QoY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTgyNC1cdHNnX2lwLnNyYyA9IHNyY19pcC1cdTAwM2VzcmM7XG5uZXQvYnJpZGdlL2JyX21kYi5jOjgyNTpcdHNnbXAgPSBicl9tdWx0aWNhc3RfbmV3X2dyb3VwKGNmZy1cdTAwM2ViciwgXHUwMDI2c2dfaXApO1xubmV0L2JyaWRnZS9icl9tZGIuYy04MjYtXHRpZiAoSVNfRVJSKHNnbXApKSB7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz04NDg9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3NyYyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtODU3LVxubmV0L2JyaWRnZS9icl9tZGIuYzo4NTg6XHRlbnQgPSBicl9tdWx0aWNhc3RfZmluZF9ncm91cF9zcmMocGcsIFx1MDAyNnNyYy1cdTAwM2VhZGRyKTtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODU5LVx0aWYgKCFlbnQpIHtcbm5ldC9icmlkZ2UvYnJfbWRiLmM6ODYwOlx0XHRlbnQgPSBicl9tdWx0aWNhc3RfbmV3X2dyb3VwX3NyYyhwZywgXHUwMDI2c3JjLVx1MDAzZWFkZHIpO1xubmV0L2JyaWRnZS9icl9tZGIuYy04NjEtXHRcdGlmICghZW50KSB7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy04NzEtXHQgICAgY2ZnLVx1MDAzZWVudHJ5LVx1MDAzZXN0YXRlID09IE1EQl9URU1QT1JBUlkpXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg3MjpcdFx0bW9kX3RpbWVyKFx1MDAyNmVudC1cdTAwM2V0aW1lciwgbm93ICYjNDM7IGJyX211bHRpY2FzdF9nbWkoYnJtY3R4KSk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTg3My1cdGVsc2Vcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTg4NS1lcnJfZGVsX3NnOlxubmV0L2JyaWRnZS9icl9tZGIuYzo4ODY6XHRfX2JyX211bHRpY2FzdF9kZWxfZ3JvdXBfc3JjKGVudCk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTg4Ny1cdHJldHVybiBlcnI7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz04OTA9c3RhdGljIHZvaWQgYnJfbWRiX2RlbF9ncm91cF9zcmMoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy04OTQtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg5NTpcdGVudCA9IGJyX211bHRpY2FzdF9maW5kX2dyb3VwX3NyYyhwZywgXHUwMDI2c3JjLVx1MDAzZWFkZHIpO1xubmV0L2JyaWRnZS9icl9tZGIuYy04OTYtXHRpZiAoV0FSTl9PTl9PTkNFKCFlbnQpKVxubmV0L2JyaWRnZS9icl9tZGIuYy04OTctXHRcdHJldHVybjtcbm5ldC9icmlkZ2UvYnJfbWRiLmM6ODk4Olx0YnJfbXVsdGljYXN0X2RlbF9ncm91cF9zcmMoZW50LCBmYWxzZSk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTg5OS19XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz05MjM9c3RhdGljIGludCBicl9tZGJfcmVwbGFjZV9ncm91cF9zcmNzKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy05NDAtXHRcdGlmIChlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJSX1NHUlBfRl9ERUxFVEUpXG5uZXQvYnJpZGdlL2JyX21kYi5jOjk0MTpcdFx0XHRicl9tdWx0aWNhc3RfZGVsX2dyb3VwX3NyYyhlbnQsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtOTQyLVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9OTUyPXN0YXRpYyBpbnQgYnJfbWRiX3JlcGxhY2VfZ3JvdXBfc3Rhcl9nKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy05NzctXG5uZXQvYnJpZGdlL2JyX21kYi5jOjk3ODpcdGlmIChicl9tdWx0aWNhc3Rfc2hvdWxkX2hhbmRsZV9tb2RlKGJybWN0eCwgY2ZnLVx1MDAzZWdyb3VwLnByb3RvKSlcbm5ldC9icmlkZ2UvYnJfbWRiLmM6OTc5Olx0XHRicl9tdWx0aWNhc3Rfc3Rhcl9nX2hhbmRsZV9tb2RlKHBnLCBjZmctXHUwMDNlZmlsdGVyX21vZGUpO1xubmV0L2JyaWRnZS9icl9tZGIuYy05ODAtXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz05ODQ9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAwOS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTAxMDpcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoY2ZnLVx1MDAzZXAsIFx1MDAyNmNmZy1cdTAwM2Vncm91cCwgKnBwLCBmbGFncywgTlVMTCxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAxMS1cdFx0XHRcdFx0Y2ZnLVx1MDAzZWZpbHRlcl9tb2RlLCBjZmctXHUwMDNlcnRfcHJvdG9jb2wsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDI4LVx0ICovXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMjk6XHRpZiAoYnJfbXVsdGljYXN0X3Nob3VsZF9oYW5kbGVfbW9kZShicm1jdHgsIGNmZy1cdTAwM2Vncm91cC5wcm90bykgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMzAtXHQgICAgY2ZnLVx1MDAzZWZpbHRlcl9tb2RlID09IE1DQVNUX0VYQ0xVREUpXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMzE6XHRcdGJyX211bHRpY2FzdF9zdGFyX2dfaGFuZGxlX21vZGUocCwgTUNBU1RfRVhDTFVERSk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMzItXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDM1LWVycl9kZWxfcG9ydF9ncm91cDpcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTAzNjpcdGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChwKTtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNy1cdHJldHVybiBlcnI7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xMDQwPXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cChjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTA1NC1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTA1NTpcdG1wID0gYnJfbXVsdGljYXN0X25ld19ncm91cChiciwgXHUwMDI2Z3JvdXApO1xubmV0L2JyaWRnZS9icl9tZGIuYy0xMDU2LVx0aWYgKElTX0VSUihtcCkpXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDY1LVxubmV0L2JyaWRnZS9icl9tZGIuYzoxMDY2Olx0XHRicl9tdWx0aWNhc3RfaG9zdF9qb2luKGJybWN0eCwgbXAsIGZhbHNlKTtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTA2Ny1cdFx0YnJfbWRiX25vdGlmeShici1cdTAwM2VkZXYsIG1wLCBOVUxMLCBSVE1fTkVXTURCKTtcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwNzQtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwNzU6XHRpZiAoYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZncm91cCkpXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwNzYtXHRcdHJldHVybiBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZyhjZmcsIG1wLCBicm1jdHgsIGZsYWdzLCBleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9MTE2Mz1zdGF0aWMgaW50IGJyX21kYl9jb25maWdfYXR0cnNfaW5pdChzdHJ1Y3QgbmxhdHRyICpzZXRfYXR0cnMsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMTg2LVx0XHR9XG5uZXQvYnJpZGdlL2JyX21kYi5jOjExODc6XHRcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZjZmctXHUwMDNlZ3JvdXApKSB7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTExODgtXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7RmlsdGVyIG1vZGUgY2FuIG9ubHkgYmUgc2V0IGZvciAoKiwgRykgZW50cmllc1wmIzM0Oyk7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMjAwLVx0XHR9XG5uZXQvYnJpZGdlL2JyX21kYi5jOjEyMDE6XHRcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZjZmctXHUwMDNlZ3JvdXApKSB7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEyMDItXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7U291cmNlIGxpc3QgY2FuIG9ubHkgYmUgc2V0IGZvciAoKiwgRykgZW50cmllc1wmIzM0Oyk7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xMjk3PWludCBicl9tZGJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sIHUxNiBubG1zZ19mbGFncyxcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzMTYtXHRcdH1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTMxNzpcdFx0aWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFx1MDAyNmNmZy5ncm91cCkpIHtcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTMxOC1cdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtHcm91cHMgd2l0aCBzb3VyY2VzIGNhbm5vdCBiZSBtYW51YWxseSBob3N0IGpvaW5lZFwmIzM0Oyk7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xMzU4PXN0YXRpYyBpbnQgX19icl9tZGJfZGVsKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcpXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMzc0LVx0aWYgKGVudHJ5LVx1MDAzZWlmaW5kZXggPT0gbXAtXHUwMDNlYnItXHUwMDNlZGV2LVx1MDAzZWlmaW5kZXggXHUwMDI2XHUwMDI2IG1wLVx1MDAzZWhvc3Rfam9pbmVkKSB7XG5uZXQvYnJpZGdlL2JyX21kYi5jOjEzNzU6XHRcdGJyX211bHRpY2FzdF9ob3N0X2xlYXZlKG1wLCBmYWxzZSk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzNzYtXHRcdGVyciA9IDA7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy0xMzg4LVxubmV0L2JyaWRnZS9icl9tZGIuYzoxMzg5Olx0XHRicl9tdWx0aWNhc3RfZGVsX3BnKG1wLCBwLCBwcCk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzOTAtXHRcdGVyciA9IDA7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xNDc2PXN0YXRpYyB2b2lkIGJyX21kYl9mbHVzaF9ob3N0KHN0cnVjdCBuZXRfYnJpZGdlICpicixcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTE0OTEtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjE0OTI6XHRicl9tdWx0aWNhc3RfaG9zdF9sZWF2ZShtcCwgdHJ1ZSk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTE0OTMtXHRpZiAoIW1wLVx1MDAzZXBvcnRzIFx1MDAyNlx1MDAyNiBuZXRpZl9ydW5uaW5nKGJyLVx1MDAzZWRldikpXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz0xNDk3PXN0YXRpYyB2b2lkIGJyX21kYl9mbHVzaF9wZ3Moc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTUyNC1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTUyNTpcdFx0YnJfbXVsdGljYXN0X2RlbF9wZyhtcCwgcCwgcHApO1xubmV0L2JyaWRnZS9icl9tZGIuYy0xNTI2LVx0fVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDY9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBicl9zZ19wb3J0X3JodF9wYXJhbXMgPSB7XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01Mi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTM6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3N0YXJ0X3F1ZXJpZXIoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTQtXHRcdFx0XHQgICAgICAgc3RydWN0IGJyaWRnZV9tY2FzdF9vd25fcXVlcnkgKnF1ZXJ5KTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTU3PXN0YXRpYyB2b2lkIGJyX2lwNF9tdWx0aWNhc3RfbGVhdmVfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTYxLVx0XHRcdFx0XHQgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NjI6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0KHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjMtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTY0PXN0YXRpYyB2b2lkXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY1OmJyX211bHRpY2FzdF9ycG9ydF9kZWxfbm90aWZ5KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4LCBib29sIGRlbGV0ZWQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02Ni1zdGF0aWMgdm9pZCBicl9pcDZfbXVsdGljYXN0X2FkZF9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTc0PXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NzU6X19icl9tdWx0aWNhc3RfYWRkX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTc2LVx0XHRcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxLVx0XHRcdCBib29sIGJsb2NrZWQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4MjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04My1cdFx0XHRcdCAgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDpzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9zdG9wKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04NS1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE0OT1icl9tZGJfZW50cnlfc2tiX2dldChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU1LVx0aWYgKCFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkgfHxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU2Olx0ICAgIGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoYnJtY3R4KSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU3LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwOT1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxMDpicl9tdWx0aWNhc3RfcGdfdG9fcG9ydF9jdHgoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMS17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjktXHR2bGFuID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwX3JjdShwZy1cdTAwM2VrZXkucG9ydCksIHBnLVx1MDAzZWtleS5hZGRyLnZpZCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIzMDpcdGlmICh2bGFuIFx1MDAyNlx1MDAyNiAhYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWQoXHUwMDI2dmxhbi1cdTAwM2Vwb3J0X21jYXN0X2N0eCkpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMS1cdFx0cG1jdHggPSBcdTAwMjZ2bGFuLVx1MDAzZXBvcnRfbWNhc3RfY3R4O1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjM5PXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjQwOmJyX211bHRpY2FzdF9wb3J0X3ZpZF90b19wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCB1MTYgdmlkKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNDEte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjY0PXN0YXRpYyBib29sXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjI2NTpicl9tdWx0aWNhc3RfY3R4X3Nob3VsZF91c2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjY2LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTI3MS1cdGlmIChwbWN0eClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjcyOlx0XHRyZXR1cm4gIWJyX211bHRpY2FzdF9wb3J0X2N0eF9zdGF0ZV9kaXNhYmxlZChwbWN0eCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTI3My1cdGVsc2Vcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mjc0Olx0XHRyZXR1cm4gIWJyX211bHRpY2FzdF9jdHhfdmxhbl9kaXNhYmxlZChicm1jdHgpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNzUtfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjkwPXN0YXRpYyB2b2lkIF9fZndkX2FkZF9zdGFyX2V4Y2woc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yOTgtXHRtZW1zZXQoXHUwMDI2c2dfa2V5LCAwLCBzaXplb2Yoc2dfa2V5KSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjI5OTpcdGJybWN0eCA9IGJyX211bHRpY2FzdF9wb3J0X2N0eF9nZXRfZ2xvYmFsKHBtY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzAwLVx0c2dfa2V5LnBvcnQgPSBwZy1cdTAwM2VrZXkucG9ydDtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMwNC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzA1Olx0c3JjX3BnID0gX19icl9tdWx0aWNhc3RfYWRkX2dyb3VwKGJybWN0eCwgcG1jdHgsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMwNi1cdFx0XHRcdFx0ICBzZ19pcCwgcGctXHUwMDNlZXRoX2FkZHIsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zMTU9c3RhdGljIHZvaWQgX19md2RfZGVsX3N0YXJfZXhjbChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZyxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMyOS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzMwOlx0YnJfbXVsdGljYXN0X2ZpbmRfZGVsX3BnKGJyLCBzcmNfcGcpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMzEtfVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzQwLSAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNDE6dm9pZCBicl9tdWx0aWNhc3Rfc3Rhcl9nX2hhbmRsZV9tb2RlKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNDItXHRcdFx0XHQgICAgIHU4IGZpbHRlcl9tb2RlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzQ5LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNTA6XHRpZiAoV0FSTl9PTighYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZwZy1cdTAwM2VrZXkuYWRkcikpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNTEtXHRcdHJldHVybjtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM1NS1cdFx0cmV0dXJuO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNTY6XHRwbWN0eCA9IGJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChwZyk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM1Ny1cdGlmICghcG1jdHgpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODYtLyogY2FsbGVkIHdoZW4gYWRkaW5nIGEgbmV3IFMsRyB3aXRoIGhvc3Rfam9pbmVkID09IGZhbHNlIGJ5IGRlZmF1bHQgKi9cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzg3OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zZ19ob3N0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqc3Rhcl9tcCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzg4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnNnKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzkxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozOTI6XHRpZiAoV0FSTl9PTighYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZzdGFyX21wLVx1MDAzZWFkZHIpKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzkzLVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MDMtLyogc2V0IHRoZSBob3N0X2pvaW5lZCBzdGF0ZSBvZiBhbGwgb2YgKixHJiMzOTtzIFMsRyBlbnRyaWVzICovXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQwNDpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3Rfc3Rhcl9nX2hvc3Rfc3RhdGUoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpzdGFyX21wKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MDUte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDEwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MTE6XHRpZiAoV0FSTl9PTighYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZzdGFyX21wLVx1MDAzZWFkZHIpKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDEyLVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzItXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzMzpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3Rfc2dfZGVsX2V4Y2x1ZGVfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpzZ21wKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDM4LVx0LyogKixHIGV4Y2x1ZGUgcG9ydHMgYXJlIG9ubHkgYWRkZWQgdG8gUyxHIGVudHJpZXMgKi9cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDM5Olx0aWYgKFdBUk5fT04oYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZzZ21wLVx1MDAzZWFkZHIpKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDQwLVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjAtXHRcdGlmICghKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NjE6XHRcdFx0YnJfbXVsdGljYXN0X2RlbF9wZyhzZ21wLCBwLCBwcCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2Mi1cdFx0ZWxzZVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDY2LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0Njc6dm9pZCBicl9tdWx0aWNhc3Rfc2dfYWRkX2V4Y2x1ZGVfcG9ydHMoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpzdGFyX21wLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjgtXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqc2cpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3NjpcdGlmIChXQVJOX09OKGJyX211bHRpY2FzdF9pc19zdGFyX2coXHUwMDI2c2ctXHUwMDNla2V5LmFkZHIpKSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDc3LVx0XHRyZXR1cm47XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ3ODpcdGlmIChXQVJOX09OKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFx1MDAyNnN0YXJfbXAtXHUwMDNlYWRkcikpKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzktXHRcdHJldHVybjtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDgwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0ODE6XHRicl9tdWx0aWNhc3Rfc2dfaG9zdF9zdGF0ZShzdGFyX21wLCBzZyk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ4Mi1cdG1lbXNldChcdTAwMjZzZ19rZXksIDAsIHNpemVvZihzZ19rZXkpKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5Ni1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDk3Olx0XHRwbWN0eCA9IGJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChwZyk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5OC1cdFx0aWYgKCFwbWN0eClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk5LVx0XHRcdGNvbnRpbnVlO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1MDA6XHRcdGJybWN0eCA9IGJyX211bHRpY2FzdF9wb3J0X2N0eF9nZXRfZ2xvYmFsKHBtY3R4KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTAxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1MDI6XHRcdHNyY19wZyA9IF9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChicm1jdHgsIHBtY3R4LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01MDMtXHRcdFx0XHRcdFx0ICBcdTAwMjZzZy1cdTAwM2VrZXkuYWRkcixcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUxMi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTEzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9md2Rfc3JjX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9ncm91cF9zcmMgKnNyYylcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTE0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyNC1cdG1lbXNldChcdTAwMjZzZ19pcCwgMCwgc2l6ZW9mKHNnX2lwKSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjUyNTpcdHBtY3R4ID0gYnJfbXVsdGljYXN0X3BnX3RvX3BvcnRfY3R4KHNyYy1cdTAwM2VwZyk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyNi1cdGlmICghcG1jdHgpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyNy1cdFx0cmV0dXJuO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1Mjg6XHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChwbWN0eCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyOS1cdHNnX2lwID0gc3JjLVx1MDAzZXBnLVx1MDAzZWtleS5hZGRyO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTMxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1MzI6XHRzZyA9IF9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChicm1jdHgsIHBtY3R4LCBcdTAwMjZzZ19pcCxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTMzLVx0XHRcdFx0ICAgICAgc3JjLVx1MDAzZXBnLVx1MDAzZWV0aF9hZGRyLCBNQ0FTVF9JTkNMVURFLCBmYWxzZSxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU1MC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTUxOlx0YnJfbXVsdGljYXN0X3NnX2FkZF9leGNsdWRlX3BvcnRzKHN0YXJfbXAsIHNnKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTUyLX1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTUzLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1NTQ6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Z3ZF9zcmNfcmVtb3ZlKHN0cnVjdCBuZXRfYnJpZGdlX2dyb3VwX3NyYyAqc3JjLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01NTUtXHRcdFx0XHRcdGJvb2wgZmFzdGxlYXZlKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTgyLVx0XHRcdHAtXHUwMDNlZmxhZ3MgfD0gTURCX1BHX0ZMQUdTX0ZBU1RfTEVBVkU7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjU4MzpcdFx0YnJfbXVsdGljYXN0X2RlbF9wZyhtcCwgcCwgcHApO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01ODQtXHRcdGJyZWFrO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTg5LS8qIGluc3RhbGwgUyxHIGFuZCBiYXNlZCBvbiBzcmMmIzM5O3MgdGltZXIgZW5hYmxlIG9yIGRpc2FibGUgZm9yd2FyZGluZyAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1OTA6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Z3ZF9zcmNfaGFuZGxlKHN0cnVjdCBuZXRfYnJpZGdlX2dyb3VwX3NyYyAqc3JjKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01OTEte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTk1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1OTY6XHRicl9tdWx0aWNhc3RfZndkX3NyY19hZGQoc3JjKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTk3LVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjIyLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2MjM6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfbWRiX2VudHJ5KHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X2djICpnYylcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjI0LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTYzNC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NjM1OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kZWxfbWRiX2VudHJ5KHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXApXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTYzNi17XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NDUtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY0NjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZ3JvdXBfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjQ3LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY1NS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NjU2Olx0YnJfbXVsdGljYXN0X2hvc3RfbGVhdmUobXAsIHRydWUpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NTctXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NTktXHRcdGdvdG8gb3V0O1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2NjA6XHRicl9tdWx0aWNhc3RfZGVsX21kYl9lbnRyeShtcCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY2MS1vdXQ6XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NjQtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY2NTpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGVzdHJveV9ncm91cF9zcmMoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfZ2MgKmdjKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NjYte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjc1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2NzY6dm9pZCBfX2JyX211bHRpY2FzdF9kZWxfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX2dyb3VwX3NyYyAqc3JjKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02Nzcte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjg1LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2ODY6dm9pZCBicl9tdWx0aWNhc3RfZGVsX2dyb3VwX3NyYyhzdHJ1Y3QgbmV0X2JyaWRnZV9ncm91cF9zcmMgKnNyYyxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjg3LVx0XHRcdFx0Ym9vbCBmYXN0bGVhdmUpXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY4OC17XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY4OTpcdGJyX211bHRpY2FzdF9md2Rfc3JjX3JlbW92ZShzcmMsIGZhc3RsZWF2ZSk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY5MDpcdF9fYnJfbXVsdGljYXN0X2RlbF9ncm91cF9zcmMoc3JjKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjkxLX1cbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTY5Mz1zdGF0aWMgaW50XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY5NDpicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2luY19vbmUoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY5NS1cdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzAzLVx0ICovXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjcwNDpcdGlmICghYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWQocG1jdHgpIFx1MDAyNlx1MDAyNiBtYXggXHUwMDI2XHUwMDI2IG4gXHUwMDNlPSBtYXgpIHtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzA1LVx0XHROTF9TRVRfRVJSX01TR19GTVRfTU9EKGV4dGFjaywgXCYjMzQ7JXMgaXMgYWxyZWFkeSBpbiAldSBncm91cHMsIGFuZCBtY2FzdF9tYXhfZ3JvdXBzPSV1XCYjMzQ7LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzEzLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3MTQ6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfbmdyb3Vwc19kZWNfb25lKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKnBtY3R4KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03MTUte1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzIxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3MjI6c3RhdGljIGludCBicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2luYyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03MjMtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYnJfaXAgKmdyb3VwLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzMxLVx0LyogQWx3YXlzIGNvdW50IG9uIHRoZSBwb3J0IGNvbnRleHQuICovXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjczMjpcdGVyciA9IGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfaW5jX29uZShcdTAwMjZwb3J0LVx1MDAzZW11bHRpY2FzdF9jdHgsIGV4dGFjayxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzMzLVx0XHRcdFx0XHRcdFwmIzM0O1BvcnRcJiMzNDspO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzQyLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3NDM6XHRwbWN0eCA9IGJyX211bHRpY2FzdF9wb3J0X3ZpZF90b19wb3J0X2N0eChwb3J0LCBncm91cC1cdTAwM2V2aWQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03NDQtXHRpZiAoIXBtY3R4KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzQ2LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3NDc6XHRlcnIgPSBicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2luY19vbmUocG1jdHgsIGV4dGFjaywgXCYjMzQ7UG9ydC1WTEFOXCYjMzQ7KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzQ4LVx0aWYgKGVycikge1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzU1LWRlY19vbmVfb3V0OlxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4MTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkOgoKKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGNvcmUgb2YgdGhpcy4gQmFzZWQgb24gd2hhdCBJJiMzOTttIGxvb2tpbmcgYXQsIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIGJyaWRnZSBjb25maWd1cmF0aW9uIHBvc3NpYmlsaXRpZXMuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvYnJpZGdlYCBkaXJlY3RvcnkuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBmdW5kYW1lbnRhbCBvcHRpb25zIHNob3VsZCBiZSBkZWZpbmVkLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIGZpbmQgYWxsIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucyBpbiBgbmV0L2JyaWRnZS9LY29uZmlnYC4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBzcGVjaWZpYyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyByZWxhdGVkIHRvIGJyaWRnaW5nLiBJdCB3aWxsIGJlIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIHRvIHVuZGVyc3RhbmRpbmcgYWxsIHRoZSBhdmFpbGFibGUgcGFyYW1ldGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIDgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgQlJJREdFXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDs4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcJiMzNDtcbiAgIDg6XHRcdHNlbGVjdCBMTENcbiAgIDk6XHRcdHNlbGVjdCBTVFBcbiAgMTA6XHRcdGhlbHBcbiAgMTE6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4geW91ciBMaW51eCBib3ggd2lsbCBiZSBhYmxlIHRvIGFjdCBhcyBhblxuICAxMjpcdFx0ICBFdGhlcm5ldCBicmlkZ2UsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGRpZmZlcmVudCBFdGhlcm5ldCBzZWdtZW50cyBpdFxuICAxMzpcdFx0ICBpcyBjb25uZWN0ZWQgdG8gd2lsbCBhcHBlYXIgYXMgb25lIEV0aGVybmV0IHRvIHRoZSBwYXJ0aWNpcGFudHMuXG4gIDE0Olx0XHQgIFNldmVyYWwgc3VjaCBicmlkZ2VzIGNhbiB3b3JrIHRvZ2V0aGVyIHRvIGNyZWF0ZSBldmVuIGxhcmdlclxuICAxNTpcdFx0ICBuZXR3b3JrcyBvZiBFdGhlcm5ldHMgdXNpbmcgdGhlIElFRUUgODAyLjEgc3Bhbm5pbmcgdHJlZSBhbGdvcml0aG0uXG4gIDE2Olx0XHQgIEFzIHRoaXMgaXMgYSBzdGFuZGFyZCwgTGludXggYnJpZGdlcyB3aWxsIGNvb3BlcmF0ZSBwcm9wZXJseSB3aXRoXG4gIDE3Olx0XHQgIG90aGVyIHRoaXJkIHBhcnR5IGJyaWRnZSBwcm9kdWN0cy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2UsIHlvdSYjMzk7bGwgbmVlZCB0aGUgYnJpZGdlXG4gIDIwOlx0XHQgIGNvbmZpZ3VyYXRpb24gdG9vbHM7IHNlZSBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UucnN0XHUwMDNlXG4gIDIxOlx0XHQgIGZvciBsb2NhdGlvbi4gUGxlYXNlIHJlYWQgdGhlIEJyaWRnZSBtaW5pLUhPV1RPIGZvciBtb3JlXG4gIDIyOlx0XHQgIGluZm9ybWF0aW9uLlxuICAyMzpcdFxuICAyNDpcdFx0ICBJZiB5b3UgZW5hYmxlIGlwdGFibGVzIHN1cHBvcnQgYWxvbmcgd2l0aCB0aGUgYnJpZGdlIHN1cHBvcnQgdGhlbiB5b3VcbiAgMjU6XHRcdCAgdHVybiB5b3VyIGJyaWRnZSBpbnRvIGEgYnJpZGdpbmcgSVAgZmlyZXdhbGwuXG4gIDI2Olx0XHQgIGlwdGFibGVzIHdpbGwgdGhlbiBzZWUgdGhlIElQIHBhY2tldHMgYmVpbmcgYnJpZGdlZCwgc28geW91IG5lZWQgdG9cbiAgMjc6XHRcdCAgdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aGVuIHNldHRpbmcgdXAgeW91ciBmaXJld2FsbCBydWxlcy5cbiAgMjg6XHRcdCAgRW5hYmxpbmcgYXJwdGFibGVzIHN1cHBvcnQgd2hlbiBicmlkZ2luZyB3aWxsIGxldCBhcnB0YWJsZXMgc2VlXG4gIDI5Olx0XHQgIGJyaWRnZWQgQVJQIHRyYWZmaWMgaW4gdGhlIGFycHRhYmxlcyBGT1JXQVJEIGNoYWluLlxuICAzMDpcdFxuICAzMTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzMjpcdFx0ICB3aWxsIGJlIGNhbGxlZCBicmlkZ2UuXG4gIDMzOlx0XG4gIDM0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDM1Olx0XG4gIDM2Olx0Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG4gIDM3Olx0XHRib29sIFwmIzM0O0lHTVAvTUxEIHNub29waW5nXCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICAzOTpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQwOlx0XHRkZWZhdWx0IHlcbiAgNDE6XHRcdGhlbHBcbiAgNDI6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcbiAgNDM6XHRcdCAgZm9yd2FyZCBtdWx0aWNhc3QgdHJhZmZpYyBiYXNlZCBvbiBJR01QL01MRCB0cmFmZmljIHJlY2VpdmVkIGZyb21cbiAgNDQ6XHRcdCAgZWFjaCBwb3J0LlxuICA0NTpcdFxuICA0NjpcdFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cbiAgNDc6XHRcbiAgNDg6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgNDk6XHRcbiAgNTA6XHRjb25maWcgQlJJREdFX1ZMQU5fRklMVEVSSU5HXG4gIDUxOlx0XHRib29sIFwmIzM0O1ZMQU4gZmlsdGVyaW5nXCYjMzQ7XG4gIDUyOlx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICA1MzpcdFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXG4gIDU0Olx0XHRkZWZhdWx0IG5cbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcbiAgNTc6XHRcdCAgcmVjZWl2ZSBhbmQgZm9yd2FyZCB0cmFmZmljIGJhc2VkIG9uIFZMQU4gaW5mb3JtYXRpb24gaW4gdGhlIHBhY2tldFxuICA1ODpcdFx0ICBhbnkgVkxBTiBpbmZvcm1hdGlvbiBjb25maWd1cmVkIG9uIHRoZSBicmlkZ2UgcG9ydCBvciBicmlkZ2UgZGV2aWNlLlxuICA1OTpcdFxuICA2MDpcdFx0ICBTYXkgTiB0byBleGNsdWRlIHRoaXMgc3VwcG9ydCBhbmQgcmVkdWNlIHRoZSBiaW5hcnkgc2l6ZS5cbiAgNjE6XHRcbiAgNjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWS5cbiAgNjM6XHRcbiAgNjQ6XHRjb25maWcgQlJJREdFX01SUFxuICA2NTpcdFx0Ym9vbCBcJiMzNDtNUlAgcHJvdG9jb2xcJiMzNDtcbiAgNjY6XHRcdGRlcGVuZHMgb24gQlJJREdFXG4gIDY3Olx0XHRkZWZhdWx0IG5cbiAgNjg6XHRcdGhlbHBcbiAgNjk6XHRcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgdG8gcnVuIE1SUFxuICA3MDpcdFx0ICBwcm90b2NvbCB0byBkZXRlY3QgbG9vcHNcbiAgNzE6XHRcbiAgNzI6XHRcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXG4gIDczOlx0XG4gIDc0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIEJSSURHRV9DRk1cbiAgNzc6XHRcdGJvb2wgXCYjMzQ7Q0ZNIHByb3RvY29sXCYjMzQ7XG4gIDc4Olx0XHRkZXBlbmRzIG9uIEJSSURHRVxuICA3OTpcdFx0aGVscFxuICA4MDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSB0byBydW4gQ0ZNXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNzMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBCcmlkZ2UgTXVsdGljYXN0IEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBDT05GSUdfQlJJREdFYCBhbmQgaXRzIElHTVAgc25vb3BpbmcgY291bnRlcnBhcnQsIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgLCB3aGljaCwgYXMgZXhwZWN0ZWQsIHJlbGllcyBvbiB0aGUgYElORVRgIGFuZCBgQlJJREdFYCBkZXBlbmRlbmNpZXMuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgbXVsdGljYXN0IGZpbHRlcmluZyB3b3JrcyB3aXRoaW4gdGhlIGJyaWRnZS4KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYSBtdWx0aWNhc3QgZ3JvdXAuIE15IGZpcnN0IHN0ZXAgaXMgdG8gZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB0aGF0IG1hbmFnZSBwb3J0IG1lbWJlcnNoaXAgd2l0aGluIG11bHRpY2FzdCBncm91cHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC4gTXkgcGxhbiBpcyB0byB0cmFjZSB0aGUgZmxvdyBvZiBjYWxscy4KClRvIGdldCBhIGhhbmRsZSBvbiB0aGVtLCBJJiMzOTtsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgbXVsdGljYXN0IGdyb3VwcyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIGRlbGV0ZWQgd2l0aGluIHRoZSBicmlkZ2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyX211bHRpY2FzdF8obmV3fGRlbClfcG9ydF9ncm91cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbWRiLmM9NzYwPXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cF9zZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzg0LVxubmV0L2JyaWRnZS9icl9tZGIuYzo3ODU6XHRwID0gYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKGNmZy1cdTAwM2VwLCBcdTAwMjZjZmctXHUwMDNlZ3JvdXAsICpwcCwgZmxhZ3MsIE5VTEwsXG5uZXQvYnJpZGdlL2JyX21kYi5jLTc4Ni1cdFx0XHRcdFx0TUNBU1RfSU5DTFVERSwgY2ZnLVx1MDAzZXJ0X3Byb3RvY29sLCBleHRhY2spO1xuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM9OTg0PXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cF9zdGFyX2coY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcbi0tXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMDktXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMTA6XHRwID0gYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKGNmZy1cdTAwM2VwLCBcdTAwMjZjZmctXHUwMDNlZ3JvdXAsICpwcCwgZmxhZ3MsIE5VTEwsXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMTEtXHRcdFx0XHRcdGNmZy1cdTAwM2VmaWx0ZXJfbW9kZSwgY2ZnLVx1MDAzZXJ0X3Byb3RvY29sLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNS1lcnJfZGVsX3BvcnRfZ3JvdXA6XG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMzY6XHRicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAocCk7XG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMzctXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM2Nj1icl9tdWx0aWNhc3RfbmV3X2dyb3VwX3NyYyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZywgc3RydWN0IGJyX2lwICpzcmNfaXApXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDAzLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDA0OnN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQwNS1cdFx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ2My1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTQ2NDp2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDY1LXtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE1MDc9X19icl9tdWx0aWNhc3RfYWRkX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQwLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNTQxOlx0cCA9IGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChwbWN0eC1cdTAwM2Vwb3J0LCBncm91cCwgKnBwLCAwLCBzcmMsXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE1NDItXHRcdFx0XHRcdGZpbHRlcl9tb2RlLCBSVFBST1RfS0VSTkVMLCBOVUxMKTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0xMDEwPXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKlxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTAxMTpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwMTItXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicl9pcCAqZ3JvdXAsXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTAxNi1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwMTc6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDE4LWludCBicl9tZGJfaGFzaF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzAzCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBNdWx0aWNhc3QgTGlzdCBIYW5kbGluZyBpbiB0aGUgQnJpZGdlIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBgcG9ydC0mZ3Q7bWdsaXN0YCBhbmQgYHAtJmd0O25leHRgIHdpdGhpbiB0aGUgYGJyX211bHRpY2FzdC5jYCBtb2R1bGUuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBhIGxpbmsgYmV0d2VlbiBob3cgbXVsdGljYXN0IGdyb3VwIG1lbWJlcnNoaXAgaXMgdHJhY2tlZCBhbmQgaG93IHRoZSBwb3J0IHN0cnVjdHVyZXMgYXJlIGxpbmtlZCB3aXRoaW4gdGhlIGJyaWRnZS4gVG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGlzLCBhIGdvb2QgZmlyc3Qgc3RlcCBpcyB0byBzZWUgaG93IGBtZ2xpc3RgIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUgYG5ldC9icmlkZ2UvYCBkaXJlY3RvcnkuIEdyZXBwaW5nIGZvciBgbWdsaXN0YCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIG92ZXJ2aWV3IG9mIGl0cyBwdXJwb3NlIGFuZCBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWdsaXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz03ODk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nYyAqZ2MpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03OTMtXHRwZyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCwgbWNhc3RfZ2MpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3OTQ6XHRXQVJOX09OKCFobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzk1LVx0V0FSTl9PTighaGxpc3RfZW1wdHkoXHUwMDI2cGctXHUwMDNlc3JjX2xpc3QpKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTgwMj12b2lkIGJyX211bHRpY2FzdF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxMS1cdC8qIEtlZXAgLVx1MDAzZW5leHQgKGhlbGQgdW5kZXIgbXVsdGljYXN0X2xvY2ssIGZyZWVkIGxhdGVyIGJ5IHRoZSBHQyB3b3JrKTpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODEyOlx0ICogYSBwb3J0LVx1MDAzZW1nbGlzdCB0ZWFyZG93biB3YWxrIG1heSBoYXZlIGxhdGNoZWQgdGhpcyBub2RlIGFzIGl0cyBuZXh0LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTMtXHQgKiBhbmQgZGVsZXRpbmcgb3RoZXIgZ3JvdXBzIG9mIHRoZSBzYW1lIHBvcnQgbXVzdCBub3QgdHJ1bmNhdGUgaXQuXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxNC1cdCAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4MTU6XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2cGctXHUwMDNlbWdsaXN0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODE2LVx0YnJfbXVsdGljYXN0X2VodF9jbGVhbl9zZXRzKHBnKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTgzNT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDI6XHQvKiBBIHRlYXJkb3duIHdhbGsgb3ZlciBwb3J0LVx1MDAzZW1nbGlzdCBjYW4gcmVhY2ggYSBncm91cCB0aGF0IGFuIGVhcmxpZXJcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQzLVx0ICogaXRlcmF0aW9uIGFscmVhZHkgZGVsZXRlZCBhcyBhIHNpZGUgZWZmZWN0LiBJdCBpcyBvZmYgbXAtXHUwMDNlcG9ydHMgYnlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0NS1cdCAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDY6XHRpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2cGctXHUwMDNlbWdsaXN0KSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQ3LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz04NjY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3NS1cdGlmICghbmV0aWZfcnVubmluZyhici1cdTAwM2VkZXYpIHx8IHRpbWVyX3BlbmRpbmcoXHUwMDI2cGctXHUwMDNldGltZXIpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg3NjpcdCAgICBobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpIHx8IHBnLVx1MDAzZWZsYWdzIFx1MDAyNiBNREJfUEdfRkxBR1NfUEVSTUFORU5UKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04NzctXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQwND1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDUyLVx0UkNVX0lOSVRfUE9JTlRFUihwLVx1MDAzZW5leHQsIG5leHQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDUzOlx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTQtXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNDY0PXZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDY4LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDY5Olx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ3MC1cdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZwLVx1MDAzZWtleS5hZGRyKSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE5OTk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjAwOS1cdHNwaW5fbG9jayhcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwMTA6XHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXHUwMDNlZGV2KSB8fCBobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwMTEtXHQgICAgIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwNTk9dm9pZCBicl9tdWx0aWNhc3RfcG9ydF9jdHhfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA4NS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBvcnQtXHUwMDNlYnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDg2Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShwZywgXHUwMDI2cG9ydC1cdTAwM2VtZ2xpc3QsIG1nbGlzdClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA4Ny1cdFx0XHRpZiAocGctXHUwMDNla2V5LmFkZHIudmlkID09IHZsYW4tXHUwMDNldmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEzNj12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE0My1cdHNwaW5fbG9ja19iaChcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNDQ6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTQ1LVx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTU9c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDE6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwbWN0eC1cdTAwM2Vwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLVx0XHRpZiAoIShwZy1cdTAwM2VmbGFncyBcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zNzI3PWJyX211bHRpY2FzdF9sZWF2ZV9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzc4NC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzc4NTpcdFx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNnAtXHUwMDNlbWdsaXN0KSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzc4Ni1cdFx0XHQgICAgKHRpbWVyX3BlbmRpbmcoXHUwMDI2cC1cdTAwM2V0aW1lcikgP1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzgxNi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzgxNzpcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZwLVx1MDAzZW1nbGlzdCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4MTgtXHRcdCAgICAodGltZXJfcGVuZGluZyhcdTAwMjZwLVx1MDAzZXRpbWVyKSA/XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00OTU5PWludCBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk4MS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDk4MjpcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdyb3VwLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KSB7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5ODMtXHRcdFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTM1Nj1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNjgtXHRzdHJ1Y3QgdGltZXJfbGlzdFx0XHRyZXhtaXRfdGltZXI7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDozNjk6XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0XHRtZ2xpc3Q7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNzAtXHRzdHJ1Y3QgcmJfcm9vdFx0XHRcdGVodF9zZXRfdHJlZTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDMxLVx0dTMyXHRcdFx0XHRtdWx0aWNhc3RfZWh0X2hvc3RzX2NudDtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQzMjpcdHN0cnVjdCBobGlzdF9oZWFkXHRcdG1nbGlzdDtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQzMy0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2MTAKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogODQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIExpbnV4IEJyaWRnZSBNdWx0aWNhc3QgU3Vic3lzdGVtIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgcG9ydC0mZ3Q7bWdsaXN0YC4gVGhpcyBsaXN0IGlzIHByb3RlY3RlZCBieSBSQ1Ugb3IgYSBtdWx0aWNhc3QgbG9jaywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBjb25jdXJyZW5jeS4gVGhlIGtleSBoZXJlIGlzIHRoZSBzaGlmdCBpbiBob3cgdGhlIHBvcnQgZ3JvdXAgZW50cmllcyBhcmUgaGFuZGxlZCDigJMgdGhlIG1vdmUgZnJvbSBwbGFpbiBgaGxpc3RfYWRkX2hlYWRgIGFuZCBgaGxpc3RfZGVsX2luaXRgIHRvIFJDVS1zYWZlIHZhcmlhbnRzOiBgaGxpc3RfYWRkX2hlYWRfcmN1YCBhbmQgYGhsaXN0X2RlbF9pbml0X3JjdWAsIGFsb25nIHdpdGggYGtmcmVlX3JjdWAuIFRoaXMgaXMgaW4gdGhlIGBuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jYCBtb2R1bGUsIHNvIGl0JiMzOTtzIGNvcmUgYnJpZGdlIGZ1bmN0aW9uYWxpdHkgd2l0aCBJR01QIHNub29waW5nLgoKRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIFRoZSBicmlkZ2UgbXVsdGljYXN0L0lHTVAgc25vb3BpbmcgaXMgZWFzaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXM6IG5ldGxpbmsgY29tbWFuZHMgKGxpa2UgbWRiKSwgcnRuZXRsaW5rLCBuZXRkZXZpY2UgY29uZmlnLCBhbmQgZXZlbiBzZW5kaW5nIG11bHRpY2FzdCBwYWNrZXRzIG92ZXIgdmV0aCwgdGFwLCBvciBvdGhlciBicmlkZ2VkIGludGVyZmFjZXMuIFRoaXMgbWVhbnMgaXQmIzM5O3MgcmVhY2hhYmxlIGFuZCBsaWtlbHkgdG8gc2VlIGRpdmVyc2UgaW5wdXQuCgpUaGUgY2hhbmdlIGluIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgUkNVIHNlbWFudGljcyBmb3IgdGhlc2UgZnVuY3Rpb25zIGlzIHdoYXQgY2F0Y2hlcyBteSBleWUsIHRoaXMgYWxvbmUgbWFrZXMgaXQgV29ydGhGdXp6aW5nID0gdHJ1ZS4KCkZvciBmdXp6aW5nIGZvY3VzLCB0aGUgcHJpbWFyeSB0YXJnZXRzIHdpbGwgYmUgYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAsIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgLCBhbmQgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCwgYnV0IGBicl9tZGJfYWRkYCBvciBgYnJfbXVsdGljYXN0X2RlbF9wZ2AgbWlnaHQgYWxzbyB3YXJyYW50IGF0dGVudGlvbi4gVGhlIHByZWNpc2UgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZCB3ZXJlIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC4KCkEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhhdCBib3RoIGZ1bmN0aW9ucywgYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAgYW5kIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgLCBhcmUgbm9uLXN0YXRpYyBhbmQgZGVjbGFyZWQgaW4gYG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oYC4KClRoZSBjb25maWd1cmF0aW9uIGZsYWdzIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBDT05GSUdfQlJJREdFYCBhbmQgYENPTkZJR19CUklER0VfSUdNUF9TTk9PUElOR2AuIFRoZSBsYXR0ZXIgZGVwZW5kcyBvbiB0aGUgZm9ybWVyIGFuZCBhbHNvIG9uIGBJTkVUYCwgc28gYEJSSURHRWAgYW5kIGBCUklER0VfSUdNUF9TTk9PUElOR2AgYXJlIG15IGVuYWJsZSBjb25maWdzLiBgQ09ORklHX0JSSURHRWAgYWxzbyBwdWxscyBpbiBMTEMgYW5kIFNUUC4KClNvLCB0byBzdW1tYXJpemU6CgoqICAgV29ydGhGdXp6aW5nOiBUcnVlCiogICBGb2N1c1N5bWJvbHM6IGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgLCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCwgYGJyX21kYl9hZGRgLCBgYnJfbXVsdGljYXN0X2RlbF9wZ2AKKiAgIEVuYWJsZUNvbmZpZ3M6IGBCUklER0VgLCBgQlJJREdFX0lHTVBfU05PT1BJTkdgCgpUaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB3ZSBoYXZlIGEgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgdXRpbGl6ZXMgUkNVIHNlbWFudGljcyBmb3IgaW5zZXJ0aW9uL2RlbGV0aW9uIGFuZCBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgaXMgYSBzb2xpZCB0YXJnZXQsIGFuZCB0aGUgYW5hbHlzaXMgaXMgY29tcGxldGUuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX0lHTVBfU05PT1BJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAmIzM0OywKICAgICYjMzQ7YnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHVwZGF0ZXMgYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGxpc3QgbWFuYWdlbWVudCB0byB1c2UgUkNVLXNhZmUgcHJpbWl0aXZlcyAoaGxpc3RfYWRkX2hlYWRfcmN1LCBobGlzdF9kZWxfaW5pdF9yY3UsIFJDVV9JTklUX1BPSU5URVIsIGFuZCBrZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgYnJpZGdlIElHTVAgc25vb3Bpbmcgc3Vic3lzdGVtLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rL01EQiBpbnRlcmZhY2VzIGFuZCBtdWx0aWNhc3QgdHJhZmZpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9JR01QX1NOT09QSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwJiMzNDssCiAgICAmIzM0O2JyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCB1cGRhdGVzIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBncm91cCBsaXN0IG1hbmFnZW1lbnQgdG8gdXNlIFJDVS1zYWZlIHByaW1pdGl2ZXMgKGhsaXN0X2FkZF9oZWFkX3JjdSwgaGxpc3RfZGVsX2luaXRfcmN1LCBSQ1VfSU5JVF9QT0lOVEVSLCBhbmQga2ZyZWVfcmN1KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaW4gdGhlIGJyaWRnZSBJR01QIHNub29waW5nIHN1YnN5c3RlbSwgd2hpY2ggY2FuIGJlIGV4ZXJjaXNlZCB2aWEgbmV0bGluay9NREIgaW50ZXJmYWNlcyBhbmQgbXVsdGljYXN0IHRyYWZmaWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCBgaGxpc3RfYWRkX2hlYWRfcmN1YCwgYFJDVV9JTklUX1BPSU5URVJgLCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYW5kIGBrZnJlZV9yY3VgIGFyZSB1c2VkIGNvcnJlY3RseSBmb3IgYHBvcnQtXHUwMDNlbWdsaXN0YCBhbmQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgLCBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgcmVhZGVycyAoc3VjaCBhcyBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgKSBmcm9tIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3Igb2JzZXJ2aW5nIHBhcnRpYWxseSBwdWJsaXNoZWQgZW50cmllcy5cblxuVGhlIGFsbG9jYXRlZCBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAgc3RydWN0dXJlIGlzIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG92ZXJmbG93cywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBDb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgUkNVIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQzYzNkYzNjZDM1Y2JhNzJhNTQ1ZmUwMzczMDQxYjJlNTRkZDU4Y2IKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDE0OjI3OjE0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKaW5kZXggM2U5YjEwZjhhYmYxZC4uMmY5YmIzMGUxYTFmNiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCkBAIC0xNDQxLDE2ICYjNDM7MTQ0MSwxNyBAQCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoCiAJCWdvdG8gZnJlZV9vdXQ7CiAJfQogCi0JcmN1X2Fzc2lnbl9wb2ludGVyKHAtJmd0O25leHQsIG5leHQpOwogCXRpbWVyX3NldHVwKCZhbXA7cC0mZ3Q7dGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQsIDApOwogCXRpbWVyX3NldHVwKCZhbXA7cC0mZ3Q7cmV4bWl0X3RpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9yZXhtaXQsIDApOwotCWhsaXN0X2FkZF9oZWFkKCZhbXA7cC0mZ3Q7bWdsaXN0LCAmYW1wO3BvcnQtJmd0O21nbGlzdCk7CiAKIAlpZiAoc3JjKQogCQltZW1jcHkocC0mZ3Q7ZXRoX2FkZHIsIHNyYywgRVRIX0FMRU4pOwogCWVsc2UKIAkJZXRoX2Jyb2FkY2FzdF9hZGRyKHAtJmd0O2V0aF9hZGRyKTsKIAomIzQzOwlSQ1VfSU5JVF9QT0lOVEVSKHAtJmd0O25leHQsIG5leHQpOwomIzQzOwlobGlzdF9hZGRfaGVhZF9yY3UoJmFtcDtwLSZndDttZ2xpc3QsICZhbXA7cG9ydC0mZ3Q7bWdsaXN0KTsKJiM0MzsKIAlyZXR1cm4gcDsKIAogZnJlZV9vdXQ6CkBAIC0xNDY1LDExICYjNDM7MTQ2NiwxMSBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKQogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBwLSZndDtrZXkucG9ydDsKIAlfX3UxNiB2aWQgPSBwLSZndDtrZXkuYWRkci52aWQ7CiAKLQlobGlzdF9kZWxfaW5pdCgmYW1wO3AtJmd0O21nbGlzdCk7CiYjNDM7CWhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3AtJmd0O21nbGlzdCk7CiAJaWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKCZhbXA7cC0mZ3Q7a2V5LmFkZHIpKQogCQlyaGFzaHRhYmxlX3JlbW92ZV9mYXN0KCZhbXA7cG9ydC0mZ3Q7YnItJmd0O3NnX3BvcnRfdGJsLCAmYW1wO3AtJmd0O3Jobm9kZSwKIAkJCQkgICAgICAgYnJfc2dfcG9ydF9yaHRfcGFyYW1zKTsKLQlrZnJlZShwKTsKJiM0MzsJa2ZyZWVfcmN1KHAsIHJjdSk7CiAJYnJfbXVsdGljYXN0X3BvcnRfbmdyb3Vwc19kZWMocG9ydCwgdmlkKTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBCcmlkZ2UgQ29kZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgY2hhbmdlcyBtYWRlLCBlc3BlY2lhbGx5IHdpdGhpbiBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy4KCkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC4gTGV0JiMzOTtzIGJyZWFrIHRoZXNlIGRvd24gaW5kaXZpZHVhbGx5LgoKSW4gYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAsIHRoZSBrZXkgZGlmZmVyZW5jZSBpcyB0aGUgcmVvcmRlcmluZyBvZiB0aGUgcG9pbnRlciBhc3NpZ25tZW50cyBhbmQgbGlzdCBhZGRpdGlvbnMuIFByZXZpb3VzbHksIHdlIGhhZCBgcmN1X2Fzc2lnbl9wb2ludGVyKHAtJmd0O25leHQsIG5leHQpO2AgYW5kIGBobGlzdF9hZGRfaGVhZCgmYW1wO3AtJmd0O21nbGlzdCwgJmFtcDtwb3J0LSZndDttZ2xpc3QpO2AgYmVmb3JlIHRoZSBzZXR1cCBvZiB0aGUgYGV0aF9hZGRyYC4gTm93LCBpdCYjMzk7cyBiZWVuIGNoYW5nZWQgdG8gYFJDVV9JTklUX1BPSU5URVIocC0mZ3Q7bmV4dCwgbmV4dCk7YCBhbmQgYGhsaXN0X2FkZF9oZWFkX3JjdSgmYW1wO3AtJmd0O21nbGlzdCwgJmFtcDtwb3J0LSZndDttZ2xpc3QpO2AgYWZ0ZXIgdGhlIGBldGhfYWRkcmAgc2V0dXAuIFRoaXMgaXMgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byBjb25zaWRlciB3aHkgdGhpcyByZW9yZGVyaW5nIHdhcyBuZWNlc3NhcnkgYW5kIGhvdyBpdCBhZmZlY3RzIG1lbW9yeSBvcmRlcmluZyBhbmQgZGF0YSB2aXNpYmlsaXR5IHVuZGVyIFJDVS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHdpdGggcmVzcGVjdCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIsIHBhcnRpY3VsYXJseSB0byBlbnN1cmUgYXRvbWljaXR5IGFuZCBjb3JyZWN0bmVzcyB3aXRoIHJlc3BlY3QgdG8gY29uY3VycmVudCBhY2Nlc3MgYnkgcmVhZGVycy4KClRoZW4sIEkmIzM5O20gbG9va2luZyBhdCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC4gSGVyZSwgdGhlIGNoYW5nZXMgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYGhsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7bWdsaXN0KTtgIGhhcyBiZWNvbWUgYGhsaXN0X2RlbF9pbml0X3JjdSgmYW1wO3AtJmd0O21nbGlzdCk7YCwgYW5kIGBrZnJlZShwKTtgIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYGtmcmVlX3JjdShwLCByY3UpO2AuIENsZWFybHksIHRoZXNlIHJldmlzaW9ucyBhcmUgcmVsYXRlZCB0byBSQ1Ugc3luY2hyb25pemF0aW9uLiBUaGUgaW50ZW50aW9uIGlzIHRvIHJlbW92ZSB0aGUgZWxlbWVudCBzYWZlbHkgZnJvbSB0aGUgaGFzaCBsaXN0LCB0aGVuIGRlZmVyIHRoZSBtZW1vcnkgZGVhbGxvY2F0aW9uIHVzaW5nIFJDVSBncmFjZSBwZXJpb2RzLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIHByZXZlbnRpbmcgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyBpbiBSQ1UtcHJvdGVjdGVkIGRhdGEgc3RydWN0dXJlcy4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIGltcGxlbWVudGVkIGNvcnJlY3RseSwgYW5kIHRoYXQgYWxsIG5lY2Vzc2FyeSBSQ1Ugc3luY2hyb25pemF0aW9uIGlzIGluIHBsYWNlIGFyb3VuZCB0aGVzZSBjaGFuZ2VzLCBlbnN1cmluZyB0aGF0IHJlYWRlcnMgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSBhcmUgcHJvcGVybHkgcHJvdGVjdGVkLgoKSSYjMzk7bGwgbm93IG5lZWQgdG8gZ28gZGVlcGVyIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRoZSBtdWx0aWNhc3QgcG9ydCBncm91cHMgYW5kIHRoZWlyIGxpZmVjeWNsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyB0aHJlYWQtc2FmZSBhbmQgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tZGIuYz03NjA9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3NnKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYy03ODQtXG5uZXQvYnJpZGdlL2JyX21kYi5jOjc4NTpcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoY2ZnLVx1MDAzZXAsIFx1MDAyNmNmZy1cdTAwM2Vncm91cCwgKnBwLCBmbGFncywgTlVMTCxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzg2LVx0XHRcdFx0XHRNQ0FTVF9JTkNMVURFLCBjZmctXHUwMDNlcnRfcHJvdG9jb2wsIGV4dGFjayk7XG4tLVxubmV0L2JyaWRnZS9icl9tZGIuYz05ODQ9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAwOS1cbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTAxMDpcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoY2ZnLVx1MDAzZXAsIFx1MDAyNmNmZy1cdTAwM2Vncm91cCwgKnBwLCBmbGFncywgTlVMTCxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAxMS1cdFx0XHRcdFx0Y2ZnLVx1MDAzZWZpbHRlcl9tb2RlLCBjZmctXHUwMDNlcnRfcHJvdG9jb2wsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzY2PWJyX211bHRpY2FzdF9uZXdfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnLCBzdHJ1Y3QgYnJfaXAgKnNyY19pcClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0MDMtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0MDQ6c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDA1LVx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNTA3PV9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU0MC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU0MTpcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAocG1jdHgtXHUwMDNlcG9ydCwgZ3JvdXAsICpwcCwgMCwgc3JjLFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQyLVx0XHRcdFx0XHRmaWx0ZXJfbW9kZSwgUlRQUk9UX0tFUk5FTCwgTlVMTCk7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTAxMD1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjEwMTE6YnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnJfaXAgKmdyb3VwLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTA2CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBNdWx0aWNhc3QgUG9ydCBHcm91cCBMb2dpYyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgaG93IHRoZXNlIG11bHRpY2FzdCBwb3J0IGdyb3VwcyBhcmUgbWFuYWdlZC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBzZWUgaG93IGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgYnJvYWRlciBicmlkZ2Ugc3RydWN0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgdGhlIGNhbGxzIGFyb3VuZCB0aG9zZSB0d28gZnVuY3Rpb25zLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSYjMzk7cmUgb3BlcmF0aW5nIG9uIOKAkyBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgZ3JvdXBzIGFyZSBjcmVhdGVkLCBsaW5rZWQsIGFuZCBldmVudHVhbGx5IHJlbW92ZWQuIEFyZSB0aGV5IHVzaW5nIHJlZmVyZW5jZSBjb3VudHM/IElzIHRoZXJlIGEgY2VudHJhbCBkYXRhIHN0cnVjdHVyZSBtYW5hZ2luZyB0aGVtIGFsbCwgb3IgYXJlIHRoZXkgZGlzdHJpYnV0ZWQgc29tZWhvdz8gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gY29uY3VycmVuY3kgY29uY2VybnMgaGVyZS4gSSBleHBlY3QgdGhhdCBjcmVhdGluZyBhbmQgZGVsZXRpbmcgZ3JvdXBzIGluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQgY291bGQgZWFzaWx5IGludHJvZHVjZSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLCBzbyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBsaWtlIG11dGV4ZXMgb3Igc3BpbmxvY2tzLiBBcmUgdGhleSB1c2luZyBhbnkgYXRvbWljIG9wZXJhdGlvbnM/IEkmIzM5O2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIGVkZ2UgY2FzZXM6IHdoYXQgaGFwcGVucyBpZiBhIHBvcnQgZ3JvdXAgaXMgYWRkZWQgYW5kIHRoZW4gZGVsZXRlZCBpbiByYXBpZCBzdWNjZXNzaW9uPyBEb2VzIHRoZSBjb2RlIGhhbmRsZSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIGNvcnJ1cHRpb24/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY2FyZWZ1bGx5IG1hbmFnZWQ/IEkgbmVlZCB0byBidWlsZCBhIGNvbXByZWhlbnNpdmUgbWVudGFsIG1vZGVsIHRvIGVuc3VyZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVoYXZpbmcgY29ycmVjdGx5LCBlZmZpY2llbnRseSwgYW5kLCBhYm92ZSBhbGwsIHNhZmVseS4gVW5kZXJzdGFuZGluZyB0aGUgZXhhY3QgY29udGV4dCBvZiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBhbmQgd2hhdCBjYWxscyB0aGVtLCBhcmUgYWxzbyBjcnVjaWFsIGFzcGVjdHMgZm9yIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MDA6XHRcbjE0MDE6XHRcdHJldHVybiBncnBfc3JjO1xuMTQwMjpcdH1cbjE0MDM6XHRcbjE0MDQ6XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXG4xNDA1Olx0XHRcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcbjE0MDY6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnJfaXAgKmdyb3VwLFxuMTQwNzpcdFx0XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgX19yY3UgKm5leHQsXG4xNDA4Olx0XHRcdFx0dW5zaWduZWQgY2hhciBmbGFncyxcbjE0MDk6XHRcdFx0XHRjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsXG4xNDEwOlx0XHRcdFx0dTggZmlsdGVyX21vZGUsXG4xNDExOlx0XHRcdFx0dTggcnRfcHJvdG9jb2wsXG4xNDEyOlx0XHRcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTQxMzpcdHtcbjE0MTQ6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnA7XG4xNDE1Olx0XHRpbnQgZXJyO1xuMTQxNjpcdFxuMTQxNzpcdFx0ZXJyID0gYnJfbXVsdGljYXN0X3BvcnRfbmdyb3Vwc19pbmMocG9ydCwgZ3JvdXAsIGV4dGFjayk7XG4xNDE4Olx0XHRpZiAoZXJyKVxuMTQxOTpcdFx0XHRyZXR1cm4gTlVMTDtcbjE0MjA6XHRcbjE0MjE6XHRcdHAgPSBremFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG4xNDIyOlx0XHRpZiAodW5saWtlbHkoIXApKSB7XG4xNDIzOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0NvdWxkbiYjMzk7dCBhbGxvY2F0ZSBuZXcgcG9ydCBncm91cFwmIzM0Oyk7XG4xNDI0Olx0XHRcdGdvdG8gZGVjX291dDtcbjE0MjU6XHRcdH1cbjE0MjY6XHRcbjE0Mjc6XHRcdHAtXHUwMDNla2V5LmFkZHIgPSAqZ3JvdXA7XG4xNDI4Olx0XHRwLVx1MDAzZWtleS5wb3J0ID0gcG9ydDtcbjE0Mjk6XHRcdHAtXHUwMDNlZmxhZ3MgPSBmbGFncztcbjE0MzA6XHRcdHAtXHUwMDNlZmlsdGVyX21vZGUgPSBmaWx0ZXJfbW9kZTtcbjE0MzE6XHRcdHAtXHUwMDNlcnRfcHJvdG9jb2wgPSBydF9wcm90b2NvbDtcbjE0MzI6XHRcdHAtXHUwMDNlZWh0X2hvc3RfdHJlZSA9IFJCX1JPT1Q7XG4xNDMzOlx0XHRwLVx1MDAzZWVodF9zZXRfdHJlZSA9IFJCX1JPT1Q7XG4xNDM0Olx0XHRwLVx1MDAzZW1jYXN0X2djLmRlc3Ryb3kgPSBicl9tdWx0aWNhc3RfZGVzdHJveV9wb3J0X2dyb3VwO1xuMTQzNTpcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnAtXHUwMDNlc3JjX2xpc3QpO1xuMTQzNjpcdFxuMTQzNzpcdFx0aWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKGdyb3VwKSBcdTAwMjZcdTAwMjZcbjE0Mzg6XHRcdCAgICByaGFzaHRhYmxlX2xvb2t1cF9pbnNlcnRfZmFzdChcdTAwMjZwb3J0LVx1MDAzZWJyLVx1MDAzZXNnX3BvcnRfdGJsLCBcdTAwMjZwLVx1MDAzZXJobm9kZSxcbjE0Mzk6XHRcdFx0XHRcdFx0ICBicl9zZ19wb3J0X3JodF9wYXJhbXMpKSB7XG4xNDQwOlx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwmIzM0O0NvdWxkbiYjMzk7dCBpbnNlcnQgbmV3IHBvcnQgZ3JvdXBcJiMzNDspO1xuMTQ0MTpcdFx0XHRnb3RvIGZyZWVfb3V0O1xuMTQ0MjpcdFx0fVxuMTQ0MzpcdFxuMTQ0NDpcdFx0dGltZXJfc2V0dXAoXHUwMDI2cC1cdTAwM2V0aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZCwgMCk7XG4xNDQ1Olx0XHR0aW1lcl9zZXR1cChcdTAwMjZwLVx1MDAzZXJleG1pdF90aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0LCAwKTtcbjE0NDY6XHRcbjE0NDc6XHRcdGlmIChzcmMpXG4xNDQ4Olx0XHRcdG1lbWNweShwLVx1MDAzZWV0aF9hZGRyLCBzcmMsIEVUSF9BTEVOKTtcbjE0NDk6XHRcdGVsc2VcbjE0NTA6XHRcdFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKHAtXHUwMDNlZXRoX2FkZHIpO1xuMTQ1MTpcdFxuMTQ1MjpcdFx0UkNVX0lOSVRfUE9JTlRFUihwLVx1MDAzZW5leHQsIG5leHQpO1xuMTQ1MzpcdFx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCk7XG4xNDU0Olx0XG4xNDU1Olx0XHRyZXR1cm4gcDtcbjE0NTY6XHRcbjE0NTc6XHRmcmVlX291dDpcbjE0NTg6XHRcdGtmcmVlKHApO1xuMTQ1OTpcdGRlY19vdXQ6XG4xNDYwOlx0XHRicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCBncm91cC1cdTAwM2V2aWQpO1xuMTQ2MTpcdFx0cmV0dXJuIE5VTEw7XG4xNDYyOlx0fVxuMTQ2MzpcdFxuMTQ2NDpcdHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXG4xNDY1Olx0e1xuMTQ2NjpcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtXHUwMDNla2V5LnBvcnQ7XG4xNDY3Olx0XHRfX3UxNiB2aWQgPSBwLVx1MDAzZWtleS5hZGRyLnZpZDtcbjE0Njg6XHRcbjE0Njk6XHRcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZwLVx1MDAzZW1nbGlzdCk7XG4xNDcwOlx0XHRpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coXHUwMDI2cC1cdTAwM2VrZXkuYWRkcikpXG4xNDcxOlx0XHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cG9ydC1cdTAwM2Vici1cdTAwM2VzZ19wb3J0X3RibCwgXHUwMDI2cC1cdTAwM2VyaG5vZGUsXG4xNDcyOlx0XHRcdFx0XHQgICAgICAgYnJfc2dfcG9ydF9yaHRfcGFyYW1zKTtcbjE0NzM6XHRcdGtmcmVlX3JjdShwLCByY3UpO1xuMTQ3NDpcdFx0YnJfbXVsdGljYXN0X3BvcnRfbmdyb3Vwc19kZWMocG9ydCwgdmlkKTtcbjE0NzU6XHR9XG4xNDc2Olx0XG4xNDc3Olx0dm9pZCBicl9tdWx0aWNhc3RfaG9zdF9qb2luKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXG4xNDc4Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXAsIGJvb2wgbm90aWZ5KVxuMTQ3OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU3NQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBhcyBJIGFwcHJvYWNoIHRoaXMgY29kZSBwYXRjaDoKCioqRGVjb25zdHJ1Y3RpbmcgVGhpcyBQYXRjaDogQSBNZW50YWwgQ2hlY2tsaXN0KioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiAqV2hhdCogaXMgdGhpcyBwYXRjaCBldmVuICp0cnlpbmcqIHRvIGFjY29tcGxpc2g/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5kYW1lbnRhbCBjaGFuZ2UuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHVzdWFsbHkgcmV0cmFjaW5nIHRoZSBzdGVwcyB0aGF0IGxlZCB0byB0aGlzIHBvaW50LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgaW1tZWRpYXRlIGNvbnRleHQ6IGxvb2tpbmcgYXQgdGhlIGBnaXRgIGhpc3Rvcnkgb3IgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvciByZWFzb25pbmcgcHJvdmlkZWQgYXJvdW5kIHRoYXQgc3BlY2lmaWMgaXRlcmF0aW9uIGludm9sdmluZyBgcG9ydC0mZ3Q7bWdsaXN0YC4KClRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBhZmZlY3RzIHRoZSByZXN0IG9mIHRoZSBwcm9ncmFtLCBzbyBJIHdpbGwgc2NhbiB0aGUgY29kZSBiYXNlIHRvIGZpbmQgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHBvcnQtJmd0O21nbGlzdGAgaXMgYWN0dWFsbHkgYmVpbmcgKnVzZWQqLiBTZWVpbmcgdGhlIHVzYWdlIHBvaW50cyBpcyB0aGUgbW9zdCBpbXBvcnRhbnQgcGFydCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWdsaXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz03ODk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nYyAqZ2MpXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03OTMtXHRwZyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCwgbWNhc3RfZ2MpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3OTQ6XHRXQVJOX09OKCFobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpKTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzk1LVx0V0FSTl9PTighaGxpc3RfZW1wdHkoXHUwMDI2cGctXHUwMDNlc3JjX2xpc3QpKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTgwMj12b2lkIGJyX211bHRpY2FzdF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcCxcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxMS1cdC8qIEtlZXAgLVx1MDAzZW5leHQgKGhlbGQgdW5kZXIgbXVsdGljYXN0X2xvY2ssIGZyZWVkIGxhdGVyIGJ5IHRoZSBHQyB3b3JrKTpcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODEyOlx0ICogYSBwb3J0LVx1MDAzZW1nbGlzdCB0ZWFyZG93biB3YWxrIG1heSBoYXZlIGxhdGNoZWQgdGhpcyBub2RlIGFzIGl0cyBuZXh0LFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTMtXHQgKiBhbmQgZGVsZXRpbmcgb3RoZXIgZ3JvdXBzIG9mIHRoZSBzYW1lIHBvcnQgbXVzdCBub3QgdHJ1bmNhdGUgaXQuXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxNC1cdCAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4MTU6XHRobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2cGctXHUwMDNlbWdsaXN0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODE2LVx0YnJfbXVsdGljYXN0X2VodF9jbGVhbl9zZXRzKHBnKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTgzNT1zdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQxLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDI6XHQvKiBBIHRlYXJkb3duIHdhbGsgb3ZlciBwb3J0LVx1MDAzZW1nbGlzdCBjYW4gcmVhY2ggYSBncm91cCB0aGF0IGFuIGVhcmxpZXJcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQzLVx0ICogaXRlcmF0aW9uIGFscmVhZHkgZGVsZXRlZCBhcyBhIHNpZGUgZWZmZWN0LiBJdCBpcyBvZmYgbXAtXHUwMDNlcG9ydHMgYnlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0NS1cdCAqL1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDY6XHRpZiAoaGxpc3RfdW5oYXNoZWQoXHUwMDI2cGctXHUwMDNlbWdsaXN0KSlcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQ3LVx0XHRyZXR1cm47XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz04NjY9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3NS1cdGlmICghbmV0aWZfcnVubmluZyhici1cdTAwM2VkZXYpIHx8IHRpbWVyX3BlbmRpbmcoXHUwMDI2cGctXHUwMDNldGltZXIpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg3NjpcdCAgICBobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpIHx8IHBnLVx1MDAzZWZsYWdzIFx1MDAyNiBNREJfUEdfRkxBR1NfUEVSTUFORU5UKVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04NzctXHRcdGdvdG8gb3V0O1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQwND1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDUyLVx0UkNVX0lOSVRfUE9JTlRFUihwLVx1MDAzZW5leHQsIG5leHQpO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDUzOlx0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTQtXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNDY0PXZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDY4LVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDY5Olx0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0KTtcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ3MC1cdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZwLVx1MDAzZWtleS5hZGRyKSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE5OTk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0KHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjAwOS1cdHNwaW5fbG9jayhcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwMTA6XHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXHUwMDNlZGV2KSB8fCBobGlzdF91bmhhc2hlZChcdTAwMjZwZy1cdTAwM2VtZ2xpc3QpIHx8XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwMTEtXHQgICAgIWJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwNTk9dm9pZCBicl9tdWx0aWNhc3RfcG9ydF9jdHhfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA4NS1cdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnBvcnQtXHUwMDNlYnItXHUwMDNlbXVsdGljYXN0X2xvY2spO1xubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDg2Olx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeShwZywgXHUwMDI2cG9ydC1cdTAwM2VtZ2xpc3QsIG1nbGlzdClcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjA4Ny1cdFx0XHRpZiAocGctXHUwMDNla2V5LmFkZHIudmlkID09IHZsYW4tXHUwMDNldmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjEzNj12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KVxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjE0My1cdHNwaW5fbG9ja19iaChcdTAwMjZici1cdTAwM2VtdWx0aWNhc3RfbG9jayk7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIxNDQ6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTQ1LVx0XHRicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoYnIsIHBnKTtcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIxOTU9c3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0X2N0eChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcbi0tXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAtXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIyMDE6XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcdTAwMjZwbWN0eC1cdTAwM2Vwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLVx0XHRpZiAoIShwZy1cdTAwM2VmbGFncyBcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVCkgXHUwMDI2XHUwMDI2XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zNzI3PWJyX211bHRpY2FzdF9sZWF2ZV9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzc4NC1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzc4NTpcdFx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNnAtXHUwMDNlbWdsaXN0KSBcdTAwMjZcdTAwMjZcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzc4Ni1cdFx0XHQgICAgKHRpbWVyX3BlbmRpbmcoXHUwMDI2cC1cdTAwM2V0aW1lcikgP1xuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzgxNi1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzgxNzpcdFx0aWYgKCFobGlzdF91bmhhc2hlZChcdTAwMjZwLVx1MDAzZW1nbGlzdCkgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4MTgtXHRcdCAgICAodGltZXJfcGVuZGluZyhcdTAwMjZwLVx1MDAzZXRpbWVyKSA/XG4tLVxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz00OTU5PWludCBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk4MS1cbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDk4MjpcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdyb3VwLCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCwgbWdsaXN0KSB7XG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5ODMtXHRcdFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTM1Nj1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIHtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNjgtXHRzdHJ1Y3QgdGltZXJfbGlzdFx0XHRyZXhtaXRfdGltZXI7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDozNjk6XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0XHRtZ2xpc3Q7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNzAtXHRzdHJ1Y3QgcmJfcm9vdFx0XHRcdGVodF9zZXRfdHJlZTtcbi0tXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtNDMxLVx0dTMyXHRcdFx0XHRtdWx0aWNhc3RfZWh0X2hvc3RzX2NudDtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjQzMjpcdHN0cnVjdCBobGlzdF9oZWFkXHRcdG1nbGlzdDtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQzMy0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBhcyBpZiBpdCB3ZXJlIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCBhbmQgUkNVKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudGAg4oCTIHNwZWNpZmljYWxseSBsaW5lIDQ5NTkgaW4gYGJyX211bHRpY2FzdC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkmIzM5O3JlIGxldmVyYWdpbmcgUmVhZC1Db3B5LVVwZGF0ZSAoUkNVKSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBgbWdsaXN0YCBkYXRhIHN0cnVjdHVyZSBoZXJlLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgY29udGV4dCwgdGhhdCBgbWdsaXN0YCBpcyBhIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwIGxpc3QuIFRoZSBjb3JlIGlzc3VlLCBJJiMzOTttIGd1ZXNzaW5nLCBpcyBjb25jdXJyZW50IGFjY2VzcyDigJMgbXVsdGlwbGUgcmVhZGVycywgcG90ZW50aWFsIHdyaXRlcnMuIFJDVSBpcyBhIG5hdHVyYWwgZml0IGZvciB0aGlzIGtpbmQgb2Ygc2NlbmFyaW8sIGVzcGVjaWFsbHkgd2hlcmUgcmVhZHMgYXJlIG11Y2ggbW9yZSBmcmVxdWVudCB0aGFuIHdyaXRlcywgYW5kIHRoZSB0b2xlcmFuY2UgZm9yIGEgc2xpZ2h0IGRlbGF5IGluIHVwZGF0ZXMgaXMgYWNjZXB0YWJsZS4gVGhpcyBoaW50cyB0aGF0IHVwZGF0ZXMgdG8gdGhlIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwIGFyZW4mIzM5O3QgY3JpdGljYWwgdG8gYmUgaW1tZWRpYXRlbHkgcmVmbGVjdGVkIGFjcm9zcyBhbGwgdGhyZWFkcy4gV2Ugc2hvdWxkIHNlZSB0aGUgcmVhZCBzaWRlIHV0aWxpemluZyBgcmN1X2RlcmVmZXJlbmNlYCBvciBzaW1pbGFyIHByaW1pdGl2ZXMgYW5kIHRoZSB3cml0ZSBzaWRlIHVzaW5nIGBzeW5jaHJvbml6ZV9yY3VgIG9yIGEgc2ltaWxhciBmdW5jdGlvbiB0byB3YWl0IG91dCBhbnkgcmVhZGVycyBiZWZvcmUgbW9kaWZ5aW5nIHRoZSBsaXN0IHNhZmVseS4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgcG9pbnRlciBtYW5pcHVsYXRpb24gdG8gdmVyaWZ5IFJDVSYjMzk7cyBhcHByb3ByaWF0ZSB1c2UuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzQ5NzA6XHRcdFx0Z290byB1bmxvY2s7XG40OTcxOlx0XG40OTcyOlx0XHRwb3J0ID0gYnJfcG9ydF9nZXRfcmN1KGRldik7XG40OTczOlx0XHRpZiAoIXBvcnQgfHwgIXBvcnQtXHUwMDNlYnIpXG40OTc0Olx0XHRcdGdvdG8gdW5sb2NrO1xuNDk3NTpcdFxuNDk3NjpcdFx0YnIgPSBwb3J0LVx1MDAzZWJyO1xuNDk3NzpcdFxuNDk3ODpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXHUwMDI2YnItXHUwMDNlcG9ydF9saXN0LCBsaXN0KSB7XG40OTc5Olx0XHRcdGlmICghcG9ydC1cdTAwM2VkZXYgfHwgcG9ydC1cdTAwM2VkZXYgPT0gZGV2KVxuNDk4MDpcdFx0XHRcdGNvbnRpbnVlO1xuNDk4MTpcdFxuNDk4MjpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZ3JvdXAsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcbjQ5ODM6XHRcdFx0XHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSwgR0ZQX0FUT01JQyk7XG40OTg0Olx0XHRcdFx0aWYgKCFlbnRyeSlcbjQ5ODU6XHRcdFx0XHRcdGdvdG8gdW5sb2NrO1xuNDk4NjpcdFxuNDk4NzpcdFx0XHRcdGVudHJ5LVx1MDAzZWFkZHIgPSBncm91cC1cdTAwM2VrZXkuYWRkcjtcbjQ5ODg6XHRcdFx0XHRsaXN0X2FkZChcdTAwMjZlbnRyeS1cdTAwM2VsaXN0LCBicl9pcF9saXN0KTtcbjQ5ODk6XHRcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG40OTkwOlx0XHRcdH1cbjQ5OTE6XHRcdH1cbjQ5OTI6XHRcbjQ5OTM6XHR1bmxvY2s6XG40OTk0Olx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjQ5OTU6XHRcdHJldHVybiBjb3VudDtcbjQ5OTY6XHR9XG40OTk3Olx0RVhQT1JUX1NZTUJPTF9HUEwoYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnQpO1xuNDk5ODpcdFxuNDk5OTpcdC8qKlxuNTAwMDpcdCAqIGJyX211bHRpY2FzdF9oYXNfcXVlcmllcl9hbnl3aGVyZSAtIENoZWNrcyBmb3IgYSBxdWVyaWVyIG9uIGEgYnJpZGdlXG41MDAxOlx0ICogQGRldjogVGhlIGJyaWRnZSBwb3J0IHByb3ZpZGluZyB0aGUgYnJpZGdlIG9uIHdoaWNoIHRvIGNoZWNrIGZvciBhIHF1ZXJpZXJcbjUwMDI6XHQgKiBAcHJvdG86IFRoZSBwcm90b2NvbCBmYW1pbHkgdG8gY2hlY2sgZm9yOiBJR01QIC1cdTAwM2UgRVRIX1BfSVAsIE1MRCAtXHUwMDNlIEVUSF9QX0lQVjZcbjUwMDM6XHQgKlxuNTAwNDpcdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBpbnRlcmZhY2UgaGFzIGEgYnJpZGdlIG9uIHRvcCBhbmQgaWYgc28gcmV0dXJuc1xuNTAwNTpcdCAqIHRydWUgaWYgYSB2YWxpZCBxdWVyaWVyIGV4aXN0cyBhbnl3aGVyZSBvbiB0aGUgYnJpZGdlZCBsaW5rIGxheWVyLlxuNTAwNjpcdCAqIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuNTAwNzpcdCAqL1xuNTAwODpcdGJvb2wgYnJfbXVsdGljYXN0X2hhc19xdWVyaWVyX2FueXdoZXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwcm90bylcbjUwMDk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NzAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNdWx0aWNhc3QgR3JvdXAgTGlzdCBpbiB0aGUgQnJpZGdlIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCBhbmQgc3BlY2lmaWNhbGx5LCB0aGF0IGBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3VgIGxvb3AsIGl0ZXJhdGluZyB0aHJvdWdoIGBwb3J0LSZndDttZ2xpc3RgLiBCZWZvcmUgdGhpcyBwYXRjaCwgdGhlIGNvZGUgaW4gYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAganVzdCB1c2VkIGBobGlzdF9hZGRfaGVhZCgmYW1wO3AtJmd0O21nbGlzdCwgJmFtcDtwb3J0LSZndDttZ2xpc3QpYC4gQW5kIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgIHNpbXBseSBkZWxldGVkIGl0IHdpdGggYGhsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7bWdsaXN0KWAgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgYSBga2ZyZWUocClgLgoKVGhhdCYjMzk7cyBhIGNsYXNzaWMgUkNVIGNvbmN1cnJlbmN5IGlzc3VlIHJpZ2h0IHRoZXJlISBJdCBtZWFucyBjb25jdXJyZW50IFJDVSByZWFkZXJzIGluIGBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudGAgY291bGQgdmVyeSBlYXNpbHkgcnVuIGludG8gcHJvYmxlbXMuIFRoZXkgbWlnaHQgcmVhZCBgcG9ydC0mZ3Q7bWdsaXN0YCB3aXRob3V0IHRoZSBuZWNlc3NhcnkgbWVtb3J5IGJhcnJpZXJzLCBsZWFkaW5nIHRvIGluY29uc2lzdGVudCBkYXRhLiBXb3JzZSwgdGhleSBjb3VsZCBlbmNvdW50ZXIgYSBkYW5nbGluZyBwb2ludGVyIGJlY2F1c2UgYHBgIHdhcyBmcmVlZCBpbW1lZGlhdGVseSB3aXRoIGBrZnJlZShwKWAgcmF0aGVyIHRoYW4gYGtmcmVlX3JjdShwLCByY3UpYCwgd2hpY2ggaXMgYSB0ZXh0Ym9vayB1c2UtYWZ0ZXItZnJlZSB2dWxuZXJhYmlsaXR5IQoKVGhpcyBwYXRjaCBpcyBvYnZpb3VzbHkgYWRkcmVzc2luZyB0aGlzIGJ5IHVzaW5nIGBobGlzdF9hZGRfaGVhZF9yY3VgIGluc3RlYWQuIEkgZXhwZWN0IHRoYXQgdGhpcyBlbnN1cmVzIHRoZSByZXF1aXJlZCBtZW1vcnkgYmFycmllcnMuIEl0IG1ha2VzIHN1cmUgdGhhdCBhbGwgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiBgcGAgYXJlIHZpc2libGUgKmJlZm9yZSogYHBgIGlzIGxpbmtlZCBpbnRvIGBwb3J0LSZndDttZ2xpc3RgLiBUaGlzIGlzIGNyaXRpY2FsLiBOb3csIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgbWVtYmVycyBvZiBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAgaW4gYGJyX3ByaXZhdGUuaGAgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBzdWJ0bGUgaXNzdWVzIGhlcmUgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzU1Olx0XG4gMzU2Olx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCB7XG4gMzU3Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICpuZXh0O1xuIDM1ODpcdFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cF9zZ19rZXkga2V5O1xuIDM1OTpcdFx0dW5zaWduZWQgY2hhclx0XHRcdGV0aF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gMzYwOlx0XHR1bnNpZ25lZCBjaGFyXHRcdFx0ZmxhZ3M7XG4gMzYxOlx0XHR1bnNpZ25lZCBjaGFyXHRcdFx0ZmlsdGVyX21vZGU7XG4gMzYyOlx0XHR1bnNpZ25lZCBjaGFyXHRcdFx0Z3JwX3F1ZXJ5X3JleG1pdF9jbnQ7XG4gMzYzOlx0XHR1bnNpZ25lZCBjaGFyXHRcdFx0cnRfcHJvdG9jb2w7XG4gMzY0Olx0XG4gMzY1Olx0XHRzdHJ1Y3QgaGxpc3RfaGVhZFx0XHRzcmNfbGlzdDtcbiAzNjY6XHRcdHVuc2lnbmVkIGludFx0XHRcdHNyY19lbnRzO1xuIDM2NzpcdFx0c3RydWN0IHRpbWVyX2xpc3RcdFx0dGltZXI7XG4gMzY4Olx0XHRzdHJ1Y3QgdGltZXJfbGlzdFx0XHRyZXhtaXRfdGltZXI7XG4gMzY5Olx0XHRzdHJ1Y3QgaGxpc3Rfbm9kZVx0XHRtZ2xpc3Q7XG4gMzcwOlx0XHRzdHJ1Y3QgcmJfcm9vdFx0XHRcdGVodF9zZXRfdHJlZTtcbiAzNzE6XHRcdHN0cnVjdCByYl9yb290XHRcdFx0ZWh0X2hvc3RfdHJlZTtcbiAzNzI6XHRcbiAzNzM6XHRcdHN0cnVjdCByaGFzaF9oZWFkXHRcdHJobm9kZTtcbiAzNzQ6XHRcdHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X2djXHRtY2FzdF9nYztcbiAzNzU6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRcdHJjdTtcbiAzNzY6XHR9O1xuIDM3NzpcdFxuIDM3ODpcdHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSB7XG4gMzc5Olx0XHRzdHJ1Y3Qgcmhhc2hfaGVhZFx0XHRyaG5vZGU7XG4gMzgwOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZVx0XHQqYnI7XG4gMzgxOlx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICpwb3J0cztcbiAzODI6XHRcdHN0cnVjdCBicl9pcFx0XHRcdGFkZHI7XG4gMzgzOlx0XHRib29sXHRcdFx0XHRob3N0X2pvaW5lZDtcbiAzODQ6XHRcbiAzODU6XHRcdHN0cnVjdCB0aW1lcl9saXN0XHRcdHRpbWVyO1xuIDM4NjpcdFx0c3RydWN0IGhsaXN0X25vZGVcdFx0bWRiX25vZGU7XG4gMzg3Olx0XG4gMzg4Olx0XHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nY1x0bWNhc3RfZ2M7XG4gMzg5Olx0XHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRyY3U7XG4gMzkwOlx0fTtcbiAzOTE6XHRcbiAzOTI6XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0IHtcbiAzOTM6XHRcdHN0cnVjdCBuZXRfYnJpZGdlXHRcdCpicjtcbiAzOTQ6XHRcdHN0cnVjdCBuZXRfZGV2aWNlXHRcdCpkZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTI1CgkJCQkJCQlvdXRwdXQ6IDIyMQoJCQkJCQkJdGhvdWdodHM6IDUxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBCcmlkZ2luZyBNdWx0aWNhc3QgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHBhdGNoIGZvY3VzZXMgc3BlY2lmaWNhbGx5IG9uIG11bHRpY2FzdCBncm91cCBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgYnJpZGdlIGNvZGUuIE15IHByaW1hcnkgY29uY2VybiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlLCBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBvciBtaXRpZ2F0ZXMgYW55IG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgS01TQU4gd291bGQgYmUgcmVzcG9uc2libGUgZm9yIGNhdGNoaW5nLgoKRmlyc3QsIEkgYW5hbHl6ZWQgdGhlIGNvZGUgY2hhbmdlcy4gVGhlIGNvcmUgb2YgaXQgcmV2b2x2ZXMgYXJvdW5kIG1vZGlmaWNhdGlvbnMgdG8gYGJyX211bHRpY2FzdC5jYCBhbmQgc3BlY2lmaWNhbGx5IGludm9sdmVzIGBremFsbG9jX29iamAsIHRoZSB1c2Ugb2YgUkNVIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIChgUkNVX0lOSVRfUE9JTlRFUmAsIGBobGlzdF9kZWxfaW5pdF9yY3VgLCBga2ZyZWVfcmN1YCksIGFuZCBtb2RpZmljYXRpb25zIHRvIHRoZSBoYW5kbGluZyBvZiBgcC0mZ3Q7bmV4dGAgYW5kIGBwLSZndDttZ2xpc3RgLgoKQW5hbHl6aW5nIHRoZSBjaGFuZ2VzIEkgc2VlOgoKMS4gIGBremFsbG9jX29iamAgaXMgdXNlZCBmb3IgYWxsb2NhdGlvbi4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuCjIuICBUaGUgYFJDVV9JTklUX1BPSU5URVJgIG1hY3JvIHJlcGxhY2VzIHRoZSBzdGFuZGFyZCBwb2ludGVyIGFzc2lnbm1lbnQgYW5kIGlzIG5vdyBiZWxvdyB0aGUgYGV0aF9hZGRyYCBpbml0aWFsaXphdGlvbiBhbG9uZyB3aXRoIGBobGlzdF9hZGRfaGVhZF9yY3VgLiBUaGlzIGlzIGEgY2xlYXIgUkNVIHN5bmNocm9uaXphdGlvbiBjaGFuZ2UuCjMuICBUaGUgcmVtb3ZhbCBhbmQgZnJlZWluZyBvZiBtdWx0aWNhc3QgZ3JvdXBzIGhhdmUgYWxzbyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBSQ1UgY291bnRlcnBhcnRzLiBgaGxpc3RfZGVsX2luaXRfcmN1YCBpbnN0ZWFkIG9mIGBobGlzdF9kZWxfaW5pdGAgYW5kIGBrZnJlZV9yY3VgIGluc3RlYWQgb2YgYGtmcmVlYC4KCk5vdywgZXZhbHVhdGluZyBhZ2FpbnN0IEtNU0FOIGNyaXRlcmlhLiBEb2VzIGl0IGxlYWsgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZT8gTm8uIElzIHRoZXJlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8uIElzIHRoZXJlIGFsbG9jYXRpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8gTm8sIGJlY2F1c2UgYGt6YWxsb2Nfb2JqYCB6ZXJvZXMgdGhlIG1lbW9yeS4gQW55IGlzc3VlcyB3aXRoIGJvdW5kcyBjaGVja2luZz8gTm8uCgpXaGF0IGlzIHRoZSBwb2ludCBvZiB0aGUgcGF0Y2g/IEl0IGxvb2tzIGxpa2UgdGhpcyBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIGNvbmRpdGlvbnMgaW4gdGhlIGBwb3J0LSZndDttZ2xpc3RgIGl0ZXJhdGlvbi4gVGhlIHJhY2UgY29uZGl0aW9ucyBhcmUgbGlrZWx5IGV4cG9zZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGRlYnVnZ2VycyBsaWtlIFBST1ZFXF9SQ1UgYW5kIEtBU0FOLiBJdCYjMzk7cyBhYm91dCBtZW1vcnkgb3JkZXJpbmcgYW5kIGVuc3VyaW5nIHByb3BlciBSQ1UgZ3JhY2UgcGVyaW9kcy4gTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcyBhcmUgYmVpbmcgaW50cm9kdWNlZC4KCkkmIzM5O3ZlIGFsc28gZG91YmxlLWNoZWNrZWQgZm9yIGFueSBvdGhlciBtb2RpZmljYXRpb25zIHRvIHRoZSBhZmZlY3RlZCBjb2RlIGFuZCBmb3IgdGhlIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBJIHNlZSBub25lLiBObyBpbmZvcm1hdGlvbiBsZWFrIGZyb20gdGhlIGtlcm5lbCB0byB1c2VyIHNwYWNlIGVpdGhlci4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gOiBmYWxzZS4gVGhlIHBhdGNoIGlzIGFib3V0IGFkZHJlc3NpbmcgUkNVIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudC4gVGhlc2UgYnVncyBhcmUgY29ycmVjdGx5IGhhbmRsZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dlcnMuIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGluIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBncm91cCBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgYGhsaXN0X2FkZF9oZWFkX3JjdWAsIGBSQ1VfSU5JVF9QT0lOVEVSYCwgYGhsaXN0X2RlbF9pbml0X3JjdWAsIGFuZCBga2ZyZWVfcmN1YCBhcmUgdXNlZCBjb3JyZWN0bHkgZm9yIGBwb3J0LVx1MDAzZW1nbGlzdGAgYW5kIGBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwYCwgcHJldmVudGluZyBjb25jdXJyZW50IHJlYWRlcnMgKHN1Y2ggYXMgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCkgZnJvbSBhY2Nlc3NpbmcgZnJlZWQgbWVtb3J5IG9yIG9ic2VydmluZyBwYXJ0aWFsbHkgcHVibGlzaGVkIGVudHJpZXMuXG5cblRoZSBhbGxvY2F0ZWQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgIHN0cnVjdHVyZSBpcyB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jX29iamAsIGFuZCBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gQ29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIFJDVSBkZWJ1Z2dpbmcgdG9vbHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCBgaGxpc3RfYWRkX2hlYWRfcmN1YCwgYFJDVV9JTklUX1BPSU5URVJgLCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYW5kIGBrZnJlZV9yY3VgIGFyZSB1c2VkIGNvcnJlY3RseSBmb3IgYHBvcnQtXHUwMDNlbWdsaXN0YCBhbmQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgLCBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgcmVhZGVycyAoc3VjaCBhcyBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgKSBmcm9tIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3Igb2JzZXJ2aW5nIHBhcnRpYWxseSBwdWJsaXNoZWQgZW50cmllcy5cblxuVGhlIGFsbG9jYXRlZCBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAgc3RydWN0dXJlIGlzIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG92ZXJmbG93cywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBDb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgUkNVIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MTUuOTg4NDg1NTQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE0NTg0OTg5MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgaW4gYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGhhbmRsaW5nLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgdGhhdCBgaGxpc3RfYWRkX2hlYWRfcmN1YCwgYFJDVV9JTklUX1BPSU5URVJgLCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYW5kIGBrZnJlZV9yY3VgIGFyZSB1c2VkIGNvcnJlY3RseSBmb3IgYHBvcnQtXFx1MDAzZW1nbGlzdGAgYW5kIGBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwYCwgcHJldmVudGluZyBjb25jdXJyZW50IHJlYWRlcnMgKHN1Y2ggYXMgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCkgZnJvbSBhY2Nlc3NpbmcgZnJlZWQgbWVtb3J5IG9yIG9ic2VydmluZyBwYXJ0aWFsbHkgcHVibGlzaGVkIGVudHJpZXMuXFxuXFxuVGhlIGFsbG9jYXRlZCBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAgc3RydWN0dXJlIGlzIHplcm8taW5pdGlhbGl6ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqYCwgYW5kIGFsbCBmaWVsZHMgYXJlIGV4cGxpY2l0bHkgYXNzaWduZWQuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgYnVmZmVyIG92ZXJmbG93cywgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLiBDb25jdXJyZW5jeSBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgUkNVIGRlYnVnZ2luZyB0b29scywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCB1cGRhdGVzIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBncm91cCBsaXN0IG1hbmFnZW1lbnQgdG8gdXNlIFJDVS1zYWZlIHByaW1pdGl2ZXMgKGhsaXN0X2FkZF9oZWFkX3JjdSwgaGxpc3RfZGVsX2luaXRfcmN1LCBSQ1VfSU5JVF9QT0lOVEVSLCBhbmQga2ZyZWVfcmN1KS4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgaW4gdGhlIGJyaWRnZSBJR01QIHNub29waW5nIHN1YnN5c3RlbSwgd2hpY2ggY2FuIGJlIGV4ZXJjaXNlZCB2aWEgbmV0bGluay9NREIgaW50ZXJmYWNlcyBhbmQgbXVsdGljYXN0IHRyYWZmaWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjI3OjE1Ljk4ODQ5MTExNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIxOTcyNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDNjM2RjM2NkMzVjYmE3MmE1NDVmZTAzNzMwNDFiMmU1NGRkNThjYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDE0OjI3OjE0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXFxuaW5kZXggM2U5YjEwZjhhYmYxZC4uMmY5YmIzMGUxYTFmNiAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xcbkBAIC0xNDQxLDE2ICsxNDQxLDE3IEBAIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcXG4gXFx0XFx0Z290byBmcmVlX291dDtcXG4gXFx0fVxcbiBcXG4tXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHAtXFx1MDAzZW5leHQsIG5leHQpO1xcbiBcXHR0aW1lcl9zZXR1cChcXHUwMDI2cC1cXHUwMDNldGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQsIDApO1xcbiBcXHR0aW1lcl9zZXR1cChcXHUwMDI2cC1cXHUwMDNlcmV4bWl0X3RpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9yZXhtaXQsIDApO1xcbi1cXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2cC1cXHUwMDNlbWdsaXN0LCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0KTtcXG4gXFxuIFxcdGlmIChzcmMpXFxuIFxcdFxcdG1lbWNweShwLVxcdTAwM2VldGhfYWRkciwgc3JjLCBFVEhfQUxFTik7XFxuIFxcdGVsc2VcXG4gXFx0XFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKHAtXFx1MDAzZWV0aF9hZGRyKTtcXG4gXFxuK1xcdFJDVV9JTklUX1BPSU5URVIocC1cXHUwMDNlbmV4dCwgbmV4dCk7XFxuK1xcdGhsaXN0X2FkZF9oZWFkX3JjdShcXHUwMDI2cC1cXHUwMDNlbWdsaXN0LCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0KTtcXG4rXFxuIFxcdHJldHVybiBwO1xcbiBcXG4gZnJlZV9vdXQ6XFxuQEAgLTE0NjUsMTEgKzE0NjYsMTEgQEAgdm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcClcXG4gXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtXFx1MDAzZWtleS5wb3J0O1xcbiBcXHRfX3UxNiB2aWQgPSBwLVxcdTAwM2VrZXkuYWRkci52aWQ7XFxuIFxcbi1cXHRobGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlbWdsaXN0KTtcXG4rXFx0aGxpc3RfZGVsX2luaXRfcmN1KFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QpO1xcbiBcXHRpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coXFx1MDAyNnAtXFx1MDAzZWtleS5hZGRyKSlcXG4gXFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2cG9ydC1cXHUwMDNlYnItXFx1MDAzZXNnX3BvcnRfdGJsLCBcXHUwMDI2cC1cXHUwMDNlcmhub2RlLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgYnJfc2dfcG9ydF9yaHRfcGFyYW1zKTtcXG4tXFx0a2ZyZWUocCk7XFxuK1xcdGtmcmVlX3JjdShwLCByY3UpO1xcbiBcXHRicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCB2aWQpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyNzoxNi42MTE1MzgzMjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyOTMxNTkwMzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBcIixcbiAgICBcImJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGxpc3QgbWFuYWdlbWVudCB0byB1c2UgUkNVLXNhZmUgcHJpbWl0aXZlcyAoaGxpc3RfYWRkX2hlYWRfcmN1LCBobGlzdF9kZWxfaW5pdF9yY3UsIFJDVV9JTklUX1BPSU5URVIsIGFuZCBrZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgYnJpZGdlIElHTVAgc25vb3Bpbmcgc3Vic3lzdGVtLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rL01EQiBpbnRlcmZhY2VzIGFuZCBtdWx0aWNhc3QgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkM2MzZGMzY2QzNWNiYTcyYTU0NWZlMDM3MzA0MWIyZTU0ZGQ1OGNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAxNDoyNzoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMgYi9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXG5pbmRleCAzZTliMTBmOGFiZjFkLi4yZjliYjMwZTFhMWY2IDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuQEAgLTE0NDEsMTYgKzE0NDEsMTcgQEAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKFxuIFx0XHRnb3RvIGZyZWVfb3V0O1xuIFx0fVxuIFxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKHAtXHUwMDNlbmV4dCwgbmV4dCk7XG4gXHR0aW1lcl9zZXR1cChcdTAwMjZwLVx1MDAzZXRpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9leHBpcmVkLCAwKTtcbiBcdHRpbWVyX3NldHVwKFx1MDAyNnAtXHUwMDNlcmV4bWl0X3RpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9yZXhtaXQsIDApO1xuLVx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2cC1cdTAwM2VtZ2xpc3QsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0KTtcbiBcbiBcdGlmIChzcmMpXG4gXHRcdG1lbWNweShwLVx1MDAzZWV0aF9hZGRyLCBzcmMsIEVUSF9BTEVOKTtcbiBcdGVsc2VcbiBcdFx0ZXRoX2Jyb2FkY2FzdF9hZGRyKHAtXHUwMDNlZXRoX2FkZHIpO1xuIFxuK1x0UkNVX0lOSVRfUE9JTlRFUihwLVx1MDAzZW5leHQsIG5leHQpO1xuK1x0aGxpc3RfYWRkX2hlYWRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCk7XG4rXG4gXHRyZXR1cm4gcDtcbiBcbiBmcmVlX291dDpcbkBAIC0xNDY1LDExICsxNDY2LDExIEBAIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXG4gXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gcC1cdTAwM2VrZXkucG9ydDtcbiBcdF9fdTE2IHZpZCA9IHAtXHUwMDNla2V5LmFkZHIudmlkO1xuIFxuLVx0aGxpc3RfZGVsX2luaXQoXHUwMDI2cC1cdTAwM2VtZ2xpc3QpO1xuK1x0aGxpc3RfZGVsX2luaXRfcmN1KFx1MDAyNnAtXHUwMDNlbWdsaXN0KTtcbiBcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcdTAwMjZwLVx1MDAzZWtleS5hZGRyKSlcbiBcdFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcdTAwMjZwb3J0LVx1MDAzZWJyLVx1MDAzZXNnX3BvcnRfdGJsLCBcdTAwMjZwLVx1MDAzZXJobm9kZSxcbiBcdFx0XHRcdCAgICAgICBicl9zZ19wb3J0X3JodF9wYXJhbXMpO1xuLVx0a2ZyZWUocCk7XG4rXHRrZnJlZV9yY3UocCwgcmN1KTtcbiBcdGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjKHBvcnQsIHZpZCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MTYuNjExNTQwNjI3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzUwNDMyNjkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJyaWRnZSBNdWx0aWNhc3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCB3aGF0J3MgYmVlbiB0d2Vha2VkLiBMb29rcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBhbGwgY29uZmluZWQgdG8gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBTcGVjaWZpY2FsbHksIHRoZXkgYXJlIG1ha2luZyBhZGp1c3RtZW50cyB0byB0aGUgbXVsdGljYXN0IGdyb3VwIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBicmlkZ2luZyBjb2RlLlxuXG5JbiBgYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwYCwgdGhleSd2ZSByZW9yZGVyZWQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgcC1cdTAwM2VuZXh0YCBwb2ludGVyIGFuZCB0aGUgYWRkaXRpb24gb2YgdGhlIG5ldyBwb3J0IGdyb3VwIHRvIHRoZSBoYXNoIGxpc3QuIFRoZSBvcmlnaW5hbCBgaGxpc3RfYWRkX2hlYWRgIGlzIG5vdyBgaGxpc3RfYWRkX2hlYWRfcmN1YCBhbmQgYFJDVV9JTklUX1BPSU5URVJgIGlzIGFkZGVkIHRvIGluaXRpYWxpemUgYHAtXHUwMDNlbmV4dGAuIFRoaXMgaXMgYSBjbGFzc2ljIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgb3B0aW1pemF0aW9uLiBUaGlzIHBvaW50cyB0b3dhcmQgYW4gZWZmb3J0IHRvIGltcHJvdmUgY29uY3VycmVudCBhY2Nlc3MgYW5kIHJlZHVjZSB0aGUgbmVlZCBmb3IgZXhwZW5zaXZlIGxvY2tpbmcsIHdoaWNoIGFsaWducyB3aXRoIHRoZSBwZXJmb3JtYW5jZSBnb2Fscy5cblxuVGhlbiwgd2hlbiBkZWxldGluZyB0aGUgcG9ydCBncm91cCBpbiBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCwgdGhleSd2ZSBzd2FwcGVkIGBobGlzdF9kZWxfaW5pdGAgd2l0aCBgaGxpc3RfZGVsX2luaXRfcmN1YCBhbmQgYGtmcmVlKHApYCB3aXRoIGBrZnJlZV9yY3UocCwgcmN1KWAuIFRoYXQgcmVpbmZvcmNlcyB0aGUgbW92ZSB0byBSQ1UsIGVuc3VyaW5nIHNhZmUgZGVsZXRpb24gaW4gYSBjb25jdXJyZW50IGVudmlyb25tZW50IHdoZXJlIHJlYWRlcnMgbWF5IHN0aWxsIGJlIHRyYXZlcnNpbmcgdGhlIGRhdGEgc3RydWN0dXJlLiBUaGUgYWRkaXRpb24gb2YgYGtmcmVlX3JjdWAgaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBtZW1vcnkgaXMgYWN0dWFsbHkgZnJlZWQgYWZ0ZXIgYWxsIHJlYWRlcnMgaGF2ZSBsZWZ0IHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuXG5UbyBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zLCBJIG5lZWQgdG8gcmV2aWV3IHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBpbiBgbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY2AuIEFsc28sIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBvcHRpb25zIHJlbGF0ZWQgdG8gYnJpZGdlIG11bHRpY2FzdCB0byBlbnN1cmUgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5leHBlY3RlZCBkZXBlbmRlbmNpZXMgb3IgY29uZmxpY3RzIHdpdGggZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIFRoZSBjaGFuZ2VzIHN1Z2dlc3QgYSBmb2N1cyBvbiBpbXByb3ZpbmcgbXVsdGljYXN0IHBlcmZvcm1hbmNlIG9yIHJlc29sdmluZyBzb21lIGNvbmN1cnJlbmN5IGlzc3VlOyBhIGRlZXBlciBjb2RlIHJldmlldyB3aWxsIHJldmVhbCB0aGUgc3BlY2lmaWMgbW90aXZhdGlvbiBhbmQgaWYgaXQncyBiZWVuIHN1Y2Nlc3NmdWwgaW4gYWNoaWV2aW5nIHRoZXNlIGdvYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MjQuMTE1ODcwMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDgxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDMwLFxuICBcIkxpbmVDb3VudFwiOiA1NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDMwOlxcdFxcdHAtXFx1MDAzZWZpbHRlcl9tb2RlID0gZmlsdGVyX21vZGU7XFxuMTQzMTpcXHRcXHRwLVxcdTAwM2VydF9wcm90b2NvbCA9IHJ0X3Byb3RvY29sO1xcbjE0MzI6XFx0XFx0cC1cXHUwMDNlZWh0X2hvc3RfdHJlZSA9IFJCX1JPT1Q7XFxuMTQzMzpcXHRcXHRwLVxcdTAwM2VlaHRfc2V0X3RyZWUgPSBSQl9ST09UO1xcbjE0MzQ6XFx0XFx0cC1cXHUwMDNlbWNhc3RfZ2MuZGVzdHJveSA9IGJyX211bHRpY2FzdF9kZXN0cm95X3BvcnRfZ3JvdXA7XFxuMTQzNTpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnAtXFx1MDAzZXNyY19saXN0KTtcXG4xNDM2OlxcdFxcbjE0Mzc6XFx0XFx0aWYgKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKGdyb3VwKSBcXHUwMDI2XFx1MDAyNlxcbjE0Mzg6XFx0XFx0ICAgIHJoYXNodGFibGVfbG9va3VwX2luc2VydF9mYXN0KFxcdTAwMjZwb3J0LVxcdTAwM2Vici1cXHUwMDNlc2dfcG9ydF90YmwsIFxcdTAwMjZwLVxcdTAwM2VyaG5vZGUsXFxuMTQzOTpcXHRcXHRcXHRcXHRcXHRcXHQgIGJyX3NnX3BvcnRfcmh0X3BhcmFtcykpIHtcXG4xNDQwOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDb3VsZG4ndCBpbnNlcnQgbmV3IHBvcnQgZ3JvdXBcXFwiKTtcXG4xNDQxOlxcdFxcdFxcdGdvdG8gZnJlZV9vdXQ7XFxuMTQ0MjpcXHRcXHR9XFxuMTQ0MzpcXHRcXG4xNDQ0OlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZwLVxcdTAwM2V0aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZCwgMCk7XFxuMTQ0NTpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2cC1cXHUwMDNlcmV4bWl0X3RpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9yZXhtaXQsIDApO1xcbjE0NDY6XFx0XFxuMTQ0NzpcXHRcXHRpZiAoc3JjKVxcbjE0NDg6XFx0XFx0XFx0bWVtY3B5KHAtXFx1MDAzZWV0aF9hZGRyLCBzcmMsIEVUSF9BTEVOKTtcXG4xNDQ5OlxcdFxcdGVsc2VcXG4xNDUwOlxcdFxcdFxcdGV0aF9icm9hZGNhc3RfYWRkcihwLVxcdTAwM2VldGhfYWRkcik7XFxuMTQ1MTpcXHRcXG4xNDUyOlxcdFxcdFJDVV9JTklUX1BPSU5URVIocC1cXHUwMDNlbmV4dCwgbmV4dCk7XFxuMTQ1MzpcXHRcXHRobGlzdF9hZGRfaGVhZF9yY3UoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCwgXFx1MDAyNnBvcnQtXFx1MDAzZW1nbGlzdCk7XFxuMTQ1NDpcXHRcXG4xNDU1OlxcdFxcdHJldHVybiBwO1xcbjE0NTY6XFx0XFxuMTQ1NzpcXHRmcmVlX291dDpcXG4xNDU4OlxcdFxcdGtmcmVlKHApO1xcbjE0NTk6XFx0ZGVjX291dDpcXG4xNDYwOlxcdFxcdGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjKHBvcnQsIGdyb3VwLVxcdTAwM2V2aWQpO1xcbjE0NjE6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTQ2MjpcXHR9XFxuMTQ2MzpcXHRcXG4xNDY0OlxcdHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApXFxuMTQ2NTpcXHR7XFxuMTQ2NjpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gcC1cXHUwMDNla2V5LnBvcnQ7XFxuMTQ2NzpcXHRcXHRfX3UxNiB2aWQgPSBwLVxcdTAwM2VrZXkuYWRkci52aWQ7XFxuMTQ2ODpcXHRcXG4xNDY5OlxcdFxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2cC1cXHUwMDNlbWdsaXN0KTtcXG4xNDcwOlxcdFxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2cC1cXHUwMDNla2V5LmFkZHIpKVxcbjE0NzE6XFx0XFx0XFx0cmhhc2h0YWJsZV9yZW1vdmVfZmFzdChcXHUwMDI2cG9ydC1cXHUwMDNlYnItXFx1MDAzZXNnX3BvcnRfdGJsLCBcXHUwMDI2cC1cXHUwMDNlcmhub2RlLFxcbjE0NzI6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGJyX3NnX3BvcnRfcmh0X3BhcmFtcyk7XFxuMTQ3MzpcXHRcXHRrZnJlZV9yY3UocCwgcmN1KTtcXG4xNDc0OlxcdFxcdGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjKHBvcnQsIHZpZCk7XFxuMTQ3NTpcXHR9XFxuMTQ3NjpcXHRcXG4xNDc3OlxcdHZvaWQgYnJfbXVsdGljYXN0X2hvc3Rfam9pbihjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbjE0Nzg6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXAsIGJvb2wgbm90aWZ5KVxcbjE0Nzk6XFx0e1xcbjE0ODA6XFx0XFx0aWYgKCFtcC1cXHUwMDNlaG9zdF9qb2luZWQpIHtcXG4xNDgxOlxcdFxcdFxcdG1wLVxcdTAwM2Vob3N0X2pvaW5lZCA9IHRydWU7XFxuMTQ4MjpcXHRcXHRcXHRpZiAoYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2bXAtXFx1MDAzZWFkZHIpKVxcbjE0ODM6XFx0XFx0XFx0XFx0YnJfbXVsdGljYXN0X3N0YXJfZ19ob3N0X3N0YXRlKG1wKTtcXG4xNDg0OlxcdFxcdFxcdGlmIChub3RpZnkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjI3OjI0LjExNjEyMzEyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM4NjA5NzgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCcmlkZ2UgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIGRlYnVnZ2luZyB0aGlzIGBicl9tdWx0aWNhc3QuY2AgaXNzdWUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24gc3RlcC4gTGV0J3Mgc2VlLi4uIHRoZSBgS2NvbmZpZ2AgYW5kIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBicmlkZ2UgZGlyZWN0b3J5IGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIEkgbmVlZCB0byBxdWlja2x5IHNjYW4gYG5ldC9icmlkZ2UvS2NvbmZpZ2AgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGVuYWJsZSBtdWx0aWNhc3Qgc3VwcG9ydCBmb3IgYnJpZGdpbmcuIEnigJltIGxvb2tpbmcgZm9yIGFueSBkZXBlbmRlbmNpZXMgb3IgcHJlY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGJlIGdhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gZXhwZWN0aW5nLiBUaGVuLCBvdmVyIGluIGBuZXQvYnJpZGdlL01ha2VmaWxlYCwgSSdsbCBkb3VibGUtY2hlY2sgaG93IHRoZSBgYnJfbXVsdGljYXN0LmNgIG9iamVjdCBmaWxlIGlzIGhhbmRsZWQsIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncy4gQXJlIHdlIGV2ZW4gYnVpbGRpbmcgaXQsIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24/IElmIHRoZXJlIGlzIGFuIGlzc3VlLCBpdCBtYXkgYmUgYSBzaW1wbGUgb3ZlcnNpZ2h0IHdpdGhpbiB0aG9zZSBmaWxlcy4gVGhhdCdsbCBiZSB0aGUgZmlyc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyMSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MjcuNTAyMjIzNTUyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1NjE5ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX211bHRpY2FzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYnJpZGdlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDI4NzIgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9icmlkZ2UvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICs9IGJyX25ldGZpbHRlci5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMC1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIxOmJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cXG4tLVxcbm5ldC9icmlkZ2UvYnIuYz0yOTQ9aW50IGJyX2Jvb2xvcHRfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgZW51bSBicl9ib29sb3B0X2lkIG9wdCwgYm9vbCBvbixcXG4tLVxcbm5ldC9icmlkZ2UvYnIuYy0zMDMtXFx0Y2FzZSBCUl9CT09MT1BUX01DQVNUX1ZMQU5fU05PT1BJTkc6XFxubmV0L2JyaWRnZS9ici5jOjMwNDpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfdG9nZ2xlX3ZsYW5fc25vb3BpbmcoYnIsIG9uLCBleHRhY2spO1xcbm5ldC9icmlkZ2UvYnIuYy0zMDUtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTMwPW5ldGRldl90eF90IGJyX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTk3LVxcdFxcdH1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjk4OlxcdFxcdGlmIChicl9tdWx0aWNhc3RfcmN2KFxcdTAwMjZicm1jdHgsIFxcdTAwMjZwbWN0eF9udWxsLCB2bGFuLCBza2IsIHZpZCkpIHtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTk5LVxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xMDQtXFx0XFx0aWYgKChtZHN0IHx8IEJSX0lOUFVUX1NLQl9DQl9NUk9VVEVSU19PTkxZKHNrYikpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoxMDU6XFx0XFx0ICAgIGJyX211bHRpY2FzdF9xdWVyaWVyX2V4aXN0cyhicm1jdHgsIGV0aF9oZHIoc2tiKSwgbWRzdCkpXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoxMDY6XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Zsb29kKG1kc3QsIHNrYiwgYnJtY3R4LCBmYWxzZSwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xMDctXFx0XFx0ZWxzZVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYz0xMTk9c3RhdGljIGludCBicl9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNDAtXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYzoxNDE6XFx0ZXJyID0gYnJfbXVsdGljYXN0X2luaXRfc3RhdHMoYnIpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTQyLVxcdGlmIChlcnIpIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTUzPXN0YXRpYyB2b2lkIGJyX2Rldl91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTU2LVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTU3OlxcdGJyX211bHRpY2FzdF9kZXZfZGVsKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE1ODpcXHRicl9tdWx0aWNhc3RfdW5pbml0X3N0YXRzKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE1OS1cXHRicl92bGFuX2ZsdXNoKGJyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM9MTY0PXN0YXRpYyBpbnQgYnJfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmMtMTcwLVxcdGJyX3N0cF9lbmFibGVfYnJpZGdlKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3MTpcXHRicl9tdWx0aWNhc3Rfb3Blbihicik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzItXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzMtXFx0aWYgKGJyX29wdF9nZXQoYnIsIEJST1BUX01VTFRJQ0FTVF9FTkFCTEVEKSlcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jOjE3NDpcXHRcXHRicl9tdWx0aWNhc3Rfam9pbl9zbm9vcGVycyhicik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xNzUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTE4OT1zdGF0aWMgaW50IGJyX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5My1cXHRicl9zdHBfZGlzYWJsZV9icmlkZ2UoYnIpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTk0OlxcdGJyX211bHRpY2FzdF9zdG9wKGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5NS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTE5Ni1cXHRpZiAoYnJfb3B0X2dldChiciwgQlJPUFRfTVVMVElDQVNUX0VOQUJMRUQpKVxcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6MTk3OlxcdFxcdGJyX211bHRpY2FzdF9sZWF2ZV9zbm9vcGVycyhicik7XFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy0xOTgtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jPTQ4MD12b2lkIGJyX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2JyaWRnZS9icl9kZXZpY2UuYy01MzMtXFx0YnJfc3RwX3RpbWVyX2luaXQoYnIpO1xcbm5ldC9icmlkZ2UvYnJfZGV2aWNlLmM6NTM0OlxcdGJyX211bHRpY2FzdF9pbml0KGJyKTtcXG5uZXQvYnJpZGdlL2JyX2RldmljZS5jLTUzNS1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2YnItXFx1MDAzZWdjX3dvcmssIGJyX2ZkYl9jbGVhbnVwKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jPTE3Nj1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqbWF5YmVfZGVsaXZlcihcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTE3OS17XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTgwOlxcdHU4IGlnbXBfdHlwZSA9IGJyX211bHRpY2FzdF9pZ21wX3R5cGUoc2tiKTtcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0xODEtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTE5NC1vdXQ6XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MTk1OlxcdGJyX211bHRpY2FzdF9jb3VudChwLVxcdTAwM2ViciwgcCwgc2tiLCBpZ21wX3R5cGUsIEJSX01DQVNUX0RJUl9UWCk7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMTk2LVxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM9MjY4PXN0YXRpYyB2b2lkIG1heWJlX2RlbGl2ZXJfYWRkcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMjk4LS8qIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi9cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYzoyOTk6dm9pZCBicl9tdWx0aWNhc3RfZmxvb2Qoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0LFxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMwMC1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzA5LVxcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMxMDpcXHRycCA9IGJyX211bHRpY2FzdF9nZXRfZmlyc3RfcnBvcnRfbm9kZShicm1jdHgsIHNrYik7XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzExLVxcbi0tXFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmMtMzEzLVxcdFxcdHAgPSByY3VfZGVyZWZlcmVuY2UobWRzdC1cXHUwMDNlcG9ydHMpO1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMxNDpcXHRcXHRpZiAoYnJfbXVsdGljYXN0X3Nob3VsZF9oYW5kbGVfbW9kZShicm1jdHgsIG1kc3QtXFx1MDAzZWFkZHIucHJvdG8pIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9mb3J3YXJkLmM6MzE1OlxcdFxcdCAgICBicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFxcdTAwMjZtZHN0LVxcdTAwM2VhZGRyKSlcXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMTYtXFx0XFx0XFx0YWxsb3dfbW9kZV9pbmNsdWRlID0gZmFsc2U7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYy0zMjUtXFx0XFx0bHBvcnQgPSBwID8gcC1cXHUwMDNla2V5LnBvcnQgOiBOVUxMO1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jOjMyNjpcXHRcXHRycG9ydCA9IGJyX211bHRpY2FzdF9ycG9ydF9mcm9tX25vZGVfc2tiKHJwLCBza2IpO1xcbm5ldC9icmlkZ2UvYnJfZm9yd2FyZC5jLTMyNy1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYz0zMzQ9c3RhdGljIHZvaWQgZGVsX25icChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jLTM2OS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM6MzcwOlxcdGJyX211bHRpY2FzdF9kZWxfcG9ydChwKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtMzcxLVxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jPTQyNj1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqbmV3X25icChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmMtNDUxLVxcdGJyX3N0cF9wb3J0X3RpbWVyX2luaXQocCk7XFxubmV0L2JyaWRnZS9icl9pZi5jOjQ1MjpcXHRlcnIgPSBicl9tdWx0aWNhc3RfYWRkX3BvcnQocCk7XFxubmV0L2JyaWRnZS9icl9pZi5jLTQ1My1cXHRpZiAoZXJyKSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lmLmM9NTYwPWludCBicl9hZGRfaWYoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2JyaWRnZS9icl9pZi5jLTU5OS1cXHRpZiAoZXJyKSB7XFxubmV0L2JyaWRnZS9icl9pZi5jOjYwMDpcXHRcXHRicl9tdWx0aWNhc3RfZGVsX3BvcnQocCk7XFxubmV0L2JyaWRnZS9icl9pZi5jLTYwMS1cXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNnAtXFx1MDAzZWRldl90cmFja2VyKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaWYuYy03MDktZXJyMjpcXG5uZXQvYnJpZGdlL2JyX2lmLmM6NzEwOlxcdGJyX211bHRpY2FzdF9kZWxfcG9ydChwKTtcXG5uZXQvYnJpZGdlL2JyX2lmLmMtNzExLVxcdG5ldGRldl9wdXQoZGV2LCBcXHUwMDI2cC1cXHUwMDNlZGV2X3RyYWNrZXIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTMzPXN0YXRpYyBpbnQgYnJfcGFzc19mcmFtZV91cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIHByb21pc2MpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtNjQtXFx0LyogdXBkYXRlIHRoZSBtdWx0aWNhc3Qgc3RhdHMgaWYgdGhlIHBhY2tldCBpcyBJR01QL01MRCAqL1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzo2NTpcXHRicl9tdWx0aWNhc3RfY291bnQoYnIsIE5VTEwsIHNrYiwgYnJfbXVsdGljYXN0X2lnbXBfdHlwZShza2IpLFxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy02Ni1cXHRcXHRcXHQgICBCUl9NQ0FTVF9ESVJfVFgpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jPTc2PWludCBicl9oYW5kbGVfZnJhbWVfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE1NS1cXHRcXHRcXHRwa3RfdHlwZSA9IEJSX1BLVF9NVUxUSUNBU1Q7XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjE1NjpcXHRcXHRcXHRpZiAoYnJfbXVsdGljYXN0X3JjdihcXHUwMDI2YnJtY3R4LCBcXHUwMDI2cG1jdHgsIHZsYW4sIHNrYiwgdmlkKSlcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMTU3LVxcdFxcdFxcdFxcdGdvdG8gZHJvcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xODktXFx0XFx0aWYgKChtZHN0IHx8IEJSX0lOUFVUX1NLQl9DQl9NUk9VVEVSU19PTkxZKHNrYikpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jOjE5MDpcXHRcXHQgICAgYnJfbXVsdGljYXN0X3F1ZXJpZXJfZXhpc3RzKGJybWN0eCwgZXRoX2hkcihza2IpLCBtZHN0KSkge1xcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0xOTEtXFx0XFx0XFx0aWYgKChtZHN0IFxcdTAwMjZcXHUwMDI2IG1kc3QtXFx1MDAzZWhvc3Rfam9pbmVkKSB8fFxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoxOTI6XFx0XFx0XFx0ICAgIGJyX211bHRpY2FzdF9pc19yb3V0ZXIoYnJtY3R4LCBza2IpIHx8XFxubmV0L2JyaWRnZS9icl9pbnB1dC5jLTE5My1cXHRcXHRcXHQgICAgYnItXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIHtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYy0yMzAtXFx0XFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfaW5wdXQuYzoyMzE6XFx0XFx0XFx0YnJfbXVsdGljYXN0X2Zsb29kKG1kc3QsIHNrYiwgYnJtY3R4LCBsb2NhbF9yY3YsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX2lucHV0LmMtMjMyLVxcdH1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9NjE3PXZvaWQgYnJfcnRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNjI2LVxcdGlmaW5kZXggPSBwbWN0eCA/IHBtY3R4LVxcdTAwM2Vwb3J0LVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXggOiAwO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmM6NjI3OlxcdHZpZCA9IHBtY3R4IFxcdTAwMjZcXHUwMDI2IGJyX211bHRpY2FzdF9wb3J0X2N0eF9pc192bGFuKHBtY3R4KSA/IHBtY3R4LVxcdTAwM2V2bGFuLVxcdTAwM2V2aWQgOlxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNjI4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIDA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTcwOD1fX2JyX21kYl9jaG9vc2VfY29udGV4dChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTcyOS1cXHR9XFxubmV0L2JyaWRnZS9icl9tZGIuYzo3MzA6XFx0aWYgKGJyX211bHRpY2FzdF9jdHhfdmxhbl9nbG9iYWxfZGlzYWJsZWQoXFx1MDAyNnYtXFx1MDAzZWJyX21jYXN0X2N0eCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTczMS1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiVmxhbidzIG11bHRpY2FzdCBwcm9jZXNzaW5nIGlzIGRpc2FibGVkXFxcIik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTc2MD1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc2coY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzg0LVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6Nzg1OlxcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoY2ZnLVxcdTAwM2VwLCBcXHUwMDI2Y2ZnLVxcdTAwM2Vncm91cCwgKnBwLCBmbGFncywgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTc4Ni1cXHRcXHRcXHRcXHRcXHRNQ0FTVF9JTkNMVURFLCBjZmctXFx1MDAzZXJ0X3Byb3RvY29sLCBleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy03OTgtXFx0ICovXFxubmV0L2JyaWRnZS9icl9tZGIuYzo3OTk6XFx0aWYgKGJyX211bHRpY2FzdF9zaG91bGRfaGFuZGxlX21vZGUoYnJtY3R4LCBjZmctXFx1MDAzZWdyb3VwLnByb3RvKSkge1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODAwLVxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqc3Rhcl9tcDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODA2LVxcdFxcdGlmIChzdGFyX21wKVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6ODA3OlxcdFxcdFxcdGJyX211bHRpY2FzdF9zZ19hZGRfZXhjbHVkZV9wb3J0cyhzdGFyX21wLCBwKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTgwOC1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTgxMz1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc3JjX2Z3ZChjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy04MjQtXFx0c2dfaXAuc3JjID0gc3JjX2lwLVxcdTAwM2VzcmM7XFxubmV0L2JyaWRnZS9icl9tZGIuYzo4MjU6XFx0c2dtcCA9IGJyX211bHRpY2FzdF9uZXdfZ3JvdXAoY2ZnLVxcdTAwM2ViciwgXFx1MDAyNnNnX2lwKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTgyNi1cXHRpZiAoSVNfRVJSKHNnbXApKSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTg0OD1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc3JjKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTg1Ny1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg1ODpcXHRlbnQgPSBicl9tdWx0aWNhc3RfZmluZF9ncm91cF9zcmMocGcsIFxcdTAwMjZzcmMtXFx1MDAzZWFkZHIpO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODU5LVxcdGlmICghZW50KSB7XFxubmV0L2JyaWRnZS9icl9tZGIuYzo4NjA6XFx0XFx0ZW50ID0gYnJfbXVsdGljYXN0X25ld19ncm91cF9zcmMocGcsIFxcdTAwMjZzcmMtXFx1MDAzZWFkZHIpO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODYxLVxcdFxcdGlmICghZW50KSB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTg3MS1cXHQgICAgY2ZnLVxcdTAwM2VlbnRyeS1cXHUwMDNlc3RhdGUgPT0gTURCX1RFTVBPUkFSWSlcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg3MjpcXHRcXHRtb2RfdGltZXIoXFx1MDAyNmVudC1cXHUwMDNldGltZXIsIG5vdyArIGJyX211bHRpY2FzdF9nbWkoYnJtY3R4KSk7XFxubmV0L2JyaWRnZS9icl9tZGIuYy04NzMtXFx0ZWxzZVxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy04ODUtZXJyX2RlbF9zZzpcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg4NjpcXHRfX2JyX211bHRpY2FzdF9kZWxfZ3JvdXBfc3JjKGVudCk7XFxubmV0L2JyaWRnZS9icl9tZGIuYy04ODctXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9ODkwPXN0YXRpYyB2b2lkIGJyX21kYl9kZWxfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy04OTQtXFxubmV0L2JyaWRnZS9icl9tZGIuYzo4OTU6XFx0ZW50ID0gYnJfbXVsdGljYXN0X2ZpbmRfZ3JvdXBfc3JjKHBnLCBcXHUwMDI2c3JjLVxcdTAwM2VhZGRyKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTg5Ni1cXHRpZiAoV0FSTl9PTl9PTkNFKCFlbnQpKVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtODk3LVxcdFxcdHJldHVybjtcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjg5ODpcXHRicl9tdWx0aWNhc3RfZGVsX2dyb3VwX3NyYyhlbnQsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTg5OS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTkyMz1zdGF0aWMgaW50IGJyX21kYl9yZXBsYWNlX2dyb3VwX3NyY3MoY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtOTQwLVxcdFxcdGlmIChlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJfU0dSUF9GX0RFTEVURSlcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjk0MTpcXHRcXHRcXHRicl9tdWx0aWNhc3RfZGVsX2dyb3VwX3NyYyhlbnQsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTk0Mi1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTk1Mj1zdGF0aWMgaW50IGJyX21kYl9yZXBsYWNlX2dyb3VwX3N0YXJfZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy05NzctXFxubmV0L2JyaWRnZS9icl9tZGIuYzo5Nzg6XFx0aWYgKGJyX211bHRpY2FzdF9zaG91bGRfaGFuZGxlX21vZGUoYnJtY3R4LCBjZmctXFx1MDAzZWdyb3VwLnByb3RvKSlcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjk3OTpcXHRcXHRicl9tdWx0aWNhc3Rfc3Rhcl9nX2hhbmRsZV9tb2RlKHBnLCBjZmctXFx1MDAzZWZpbHRlcl9tb2RlKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTk4MC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9OTg0PXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cF9zdGFyX2coY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAwOS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMTA6XFx0cCA9IGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChjZmctXFx1MDAzZXAsIFxcdTAwMjZjZmctXFx1MDAzZWdyb3VwLCAqcHAsIGZsYWdzLCBOVUxMLFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAxMS1cXHRcXHRcXHRcXHRcXHRjZmctXFx1MDAzZWZpbHRlcl9tb2RlLCBjZmctXFx1MDAzZXJ0X3Byb3RvY29sLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDI4LVxcdCAqL1xcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTAyOTpcXHRpZiAoYnJfbXVsdGljYXN0X3Nob3VsZF9oYW5kbGVfbW9kZShicm1jdHgsIGNmZy1cXHUwMDNlZ3JvdXAucHJvdG8pIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDMwLVxcdCAgICBjZmctXFx1MDAzZWZpbHRlcl9tb2RlID09IE1DQVNUX0VYQ0xVREUpXFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMDMxOlxcdFxcdGJyX211bHRpY2FzdF9zdGFyX2dfaGFuZGxlX21vZGUocCwgTUNBU1RfRVhDTFVERSk7XFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDMyLVxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDM1LWVycl9kZWxfcG9ydF9ncm91cDpcXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMzY6XFx0YnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHApO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNy1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYz0xMDQwPXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cChjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDU0LVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTA1NTpcXHRtcCA9IGJyX211bHRpY2FzdF9uZXdfZ3JvdXAoYnIsIFxcdTAwMjZncm91cCk7XFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDU2LVxcdGlmIChJU19FUlIobXApKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDY1LVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTA2NjpcXHRcXHRicl9tdWx0aWNhc3RfaG9zdF9qb2luKGJybWN0eCwgbXAsIGZhbHNlKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwNjctXFx0XFx0YnJfbWRiX25vdGlmeShici1cXHUwMDNlZGV2LCBtcCwgTlVMTCwgUlRNX05FV01EQik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwNzQtXFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMDc1OlxcdGlmIChicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFxcdTAwMjZncm91cCkpXFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMDc2LVxcdFxcdHJldHVybiBicl9tZGJfYWRkX2dyb3VwX3N0YXJfZyhjZmcsIG1wLCBicm1jdHgsIGZsYWdzLCBleHRhY2spO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYz0xMTYzPXN0YXRpYyBpbnQgYnJfbWRiX2NvbmZpZ19hdHRyc19pbml0KHN0cnVjdCBubGF0dHIgKnNldF9hdHRycyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTE4Ni1cXHRcXHR9XFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMTg3OlxcdFxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2Y2ZnLVxcdTAwM2Vncm91cCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTExODgtXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkZpbHRlciBtb2RlIGNhbiBvbmx5IGJlIHNldCBmb3IgKCosIEcpIGVudHJpZXNcXFwiKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTIwMC1cXHRcXHR9XFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMjAxOlxcdFxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2Y2ZnLVxcdTAwM2Vncm91cCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEyMDItXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIlNvdXJjZSBsaXN0IGNhbiBvbmx5IGJlIHNldCBmb3IgKCosIEcpIGVudHJpZXNcXFwiKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9MTI5Nz1pbnQgYnJfbWRiX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLCB1MTYgbmxtc2dfZmxhZ3MsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzMTYtXFx0XFx0fVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM6MTMxNzpcXHRcXHRpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coXFx1MDAyNmNmZy5ncm91cCkpIHtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzMTgtXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkdyb3VwcyB3aXRoIHNvdXJjZXMgY2Fubm90IGJlIG1hbnVhbGx5IGhvc3Qgam9pbmVkXFxcIik7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTEzNTg9c3RhdGljIGludCBfX2JyX21kYl9kZWwoY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZylcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTM3NC1cXHRpZiAoZW50cnktXFx1MDAzZWlmaW5kZXggPT0gbXAtXFx1MDAzZWJyLVxcdTAwM2VkZXYtXFx1MDAzZWlmaW5kZXggXFx1MDAyNlxcdTAwMjYgbXAtXFx1MDAzZWhvc3Rfam9pbmVkKSB7XFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMzc1OlxcdFxcdGJyX211bHRpY2FzdF9ob3N0X2xlYXZlKG1wLCBmYWxzZSk7XFxubmV0L2JyaWRnZS9icl9tZGIuYy0xMzc2LVxcdFxcdGVyciA9IDA7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzODgtXFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMzg5OlxcdFxcdGJyX211bHRpY2FzdF9kZWxfcGcobXAsIHAsIHBwKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEzOTAtXFx0XFx0ZXJyID0gMDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9MTQ3Nj1zdGF0aWMgdm9pZCBicl9tZGJfZmx1c2hfaG9zdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTE0OTEtXFxubmV0L2JyaWRnZS9icl9tZGIuYzoxNDkyOlxcdGJyX211bHRpY2FzdF9ob3N0X2xlYXZlKG1wLCB0cnVlKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTE0OTMtXFx0aWYgKCFtcC1cXHUwMDNlcG9ydHMgXFx1MDAyNlxcdTAwMjYgbmV0aWZfcnVubmluZyhici1cXHUwMDNlZGV2KSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9MTQ5Nz1zdGF0aWMgdm9pZCBicl9tZGJfZmx1c2hfcGdzKHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTUyNC1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjE1MjU6XFx0XFx0YnJfbXVsdGljYXN0X2RlbF9wZyhtcCwgcCwgcHApO1xcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTUyNi1cXHR9XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYnJfc2dfcG9ydF9yaHRfcGFyYW1zID0ge1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01Mi1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjUzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zdGFydF9xdWVyaWVyKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01NC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJyaWRnZV9tY2FzdF9vd25fcXVlcnkgKnF1ZXJ5KTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NTc9c3RhdGljIHZvaWQgYnJfaXA0X211bHRpY2FzdF9sZWF2ZV9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02MS1cXHRcXHRcXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjYyOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3JleG1pdChzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTY0PXN0YXRpYyB2b2lkXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2NTpicl9tdWx0aWNhc3RfcnBvcnRfZGVsX25vdGlmeShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCwgYm9vbCBkZWxldGVkKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY2LXN0YXRpYyB2b2lkIGJyX2lwNl9tdWx0aWNhc3RfYWRkX3JvdXRlcihzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz03ND1zdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3NTpfX2JyX211bHRpY2FzdF9hZGRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTc2LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODEtXFx0XFx0XFx0IGJvb2wgYmxvY2tlZCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4MjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZmluZF9kZWxfcGcoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODMtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZyk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo4NDpzdGF0aWMgdm9pZCBfX2JyX211bHRpY2FzdF9zdG9wKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODUtXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTE0OT1icl9tZGJfZW50cnlfc2tiX2dldChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTUtXFx0aWYgKCFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE1NjpcXHQgICAgYnJfbXVsdGljYXN0X2N0eF92bGFuX2dsb2JhbF9kaXNhYmxlZChicm1jdHgpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTU3LVxcdFxcdHJldHVybiBOVUxMO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMDk9c3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X3BvcnQgKlxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjEwOmJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZylcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxMS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyOS1cXHR2bGFuID0gYnJfdmxhbl9maW5kKG5icF92bGFuX2dyb3VwX3JjdShwZy1cXHUwMDNla2V5LnBvcnQpLCBwZy1cXHUwMDNla2V5LmFkZHIudmlkKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIzMDpcXHRpZiAodmxhbiBcXHUwMDI2XFx1MDAyNiAhYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWQoXFx1MDAyNnZsYW4tXFx1MDAzZXBvcnRfbWNhc3RfY3R4KSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIzMS1cXHRcXHRwbWN0eCA9IFxcdTAwMjZ2bGFuLVxcdTAwM2Vwb3J0X21jYXN0X2N0eDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MjM5PXN0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjI0MDpicl9tdWx0aWNhc3RfcG9ydF92aWRfdG9fcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgdTE2IHZpZClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTI0MS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTI2ND1zdGF0aWMgYm9vbFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjY1OmJyX211bHRpY2FzdF9jdHhfc2hvdWxkX3VzZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjY2LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjcxLVxcdGlmIChwbWN0eClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjI3MjpcXHRcXHRyZXR1cm4gIWJyX211bHRpY2FzdF9wb3J0X2N0eF9zdGF0ZV9kaXNhYmxlZChwbWN0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNzMtXFx0ZWxzZVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mjc0OlxcdFxcdHJldHVybiAhYnJfbXVsdGljYXN0X2N0eF92bGFuX2Rpc2FibGVkKGJybWN0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yNzUtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yOTA9c3RhdGljIHZvaWQgX19md2RfYWRkX3N0YXJfZXhjbChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjk4LVxcdG1lbXNldChcXHUwMDI2c2dfa2V5LCAwLCBzaXplb2Yoc2dfa2V5KSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyOTk6XFx0YnJtY3R4ID0gYnJfbXVsdGljYXN0X3BvcnRfY3R4X2dldF9nbG9iYWwocG1jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzAwLVxcdHNnX2tleS5wb3J0ID0gcGctXFx1MDAzZWtleS5wb3J0O1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMDQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozMDU6XFx0c3JjX3BnID0gX19icl9tdWx0aWNhc3RfYWRkX2dyb3VwKGJybWN0eCwgcG1jdHgsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zMDYtXFx0XFx0XFx0XFx0XFx0ICBzZ19pcCwgcGctXFx1MDAzZWV0aF9hZGRyLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0zMTU9c3RhdGljIHZvaWQgX19md2RfZGVsX3N0YXJfZXhjbChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzI5LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzMwOlxcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhiciwgc3JjX3BnKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTMzMS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM0MC0gKi9cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM0MTp2b2lkIGJyX211bHRpY2FzdF9zdGFyX2dfaGFuZGxlX21vZGUoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zNDItXFx0XFx0XFx0XFx0ICAgICB1OCBmaWx0ZXJfbW9kZSlcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzQ5LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzUwOlxcdGlmIChXQVJOX09OKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFxcdTAwMjZwZy1cXHUwMDNla2V5LmFkZHIpKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM1MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM1NS1cXHRcXHRyZXR1cm47XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNTY6XFx0cG1jdHggPSBicl9tdWx0aWNhc3RfcGdfdG9fcG9ydF9jdHgocGcpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzU3LVxcdGlmICghcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4Ni0vKiBjYWxsZWQgd2hlbiBhZGRpbmcgYSBuZXcgUyxHIHdpdGggaG9zdF9qb2luZWQgPT0gZmFsc2UgYnkgZGVmYXVsdCAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Mzg3OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zZ19ob3N0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqc3Rhcl9tcCxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM4OC1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqc2cpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM5MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjM5MjpcXHRpZiAoV0FSTl9PTighYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2c3Rhcl9tcC1cXHUwMDNlYWRkcikpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMzkzLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDAzLS8qIHNldCB0aGUgaG9zdF9qb2luZWQgc3RhdGUgb2YgYWxsIG9mICosRydzIFMsRyBlbnRyaWVzICovXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0MDQ6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3N0YXJfZ19ob3N0X3N0YXRlKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqc3Rhcl9tcClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQwNS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQxMC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQxMTpcXHRpZiAoV0FSTl9PTighYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2c3Rhcl9tcC1cXHUwMDNlYWRkcikpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDEyLVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDMyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDMzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zZ19kZWxfZXhjbHVkZV9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKnNnbXApXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00MzgtXFx0LyogKixHIGV4Y2x1ZGUgcG9ydHMgYXJlIG9ubHkgYWRkZWQgdG8gUyxHIGVudHJpZXMgKi9cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQzOTpcXHRpZiAoV0FSTl9PTihicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFxcdTAwMjZzZ21wLVxcdTAwM2VhZGRyKSkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NDAtXFx0XFx0cmV0dXJuO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjAtXFx0XFx0aWYgKCEocC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNREJfUEdfRkxBR1NfUEVSTUFORU5UKSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2MTpcXHRcXHRcXHRicl9tdWx0aWNhc3RfZGVsX3BnKHNnbXAsIHAsIHBwKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2Mi1cXHRcXHRlbHNlXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ2Ni1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ2Nzp2b2lkIGJyX211bHRpY2FzdF9zZ19hZGRfZXhjbHVkZV9wb3J0cyhzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKnN0YXJfbXAsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NjgtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnNnKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0NzY6XFx0aWYgKFdBUk5fT04oYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2c2ctXFx1MDAzZWtleS5hZGRyKSkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzctXFx0XFx0cmV0dXJuO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDc4OlxcdGlmIChXQVJOX09OKCFicl9tdWx0aWNhc3RfaXNfc3Rhcl9nKFxcdTAwMjZzdGFyX21wLVxcdTAwM2VhZGRyKSkpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00NzktXFx0XFx0cmV0dXJuO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDgwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NDgxOlxcdGJyX211bHRpY2FzdF9zZ19ob3N0X3N0YXRlKHN0YXJfbXAsIHNnKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ4Mi1cXHRtZW1zZXQoXFx1MDAyNnNnX2tleSwgMCwgc2l6ZW9mKHNnX2tleSkpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00OTYtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo0OTc6XFx0XFx0cG1jdHggPSBicl9tdWx0aWNhc3RfcGdfdG9fcG9ydF9jdHgocGcpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk4LVxcdFxcdGlmICghcG1jdHgpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy00OTktXFx0XFx0XFx0Y29udGludWU7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo1MDA6XFx0XFx0YnJtY3R4ID0gYnJfbXVsdGljYXN0X3BvcnRfY3R4X2dldF9nbG9iYWwocG1jdHgpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTAxLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTAyOlxcdFxcdHNyY19wZyA9IF9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChicm1jdHgsIHBtY3R4LFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTAzLVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNnNnLVxcdTAwM2VrZXkuYWRkcixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTEyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTEzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9md2Rfc3JjX2FkZChzdHJ1Y3QgbmV0X2JyaWRnZV9ncm91cF9zcmMgKnNyYylcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUxNC17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyNC1cXHRtZW1zZXQoXFx1MDAyNnNnX2lwLCAwLCBzaXplb2Yoc2dfaXApKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjUyNTpcXHRwbWN0eCA9IGJyX211bHRpY2FzdF9wZ190b19wb3J0X2N0eChzcmMtXFx1MDAzZXBnKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUyNi1cXHRpZiAoIXBtY3R4KVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTI3LVxcdFxcdHJldHVybjtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjUyODpcXHRicm1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF9jdHhfZ2V0X2dsb2JhbChwbWN0eCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01MjktXFx0c2dfaXAgPSBzcmMtXFx1MDAzZXBnLVxcdTAwM2VrZXkuYWRkcjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTMxLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTMyOlxcdHNnID0gX19icl9tdWx0aWNhc3RfYWRkX2dyb3VwKGJybWN0eCwgcG1jdHgsIFxcdTAwMjZzZ19pcCxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTUzMy1cXHRcXHRcXHRcXHQgICAgICBzcmMtXFx1MDAzZXBnLVxcdTAwM2VldGhfYWRkciwgTUNBU1RfSU5DTFVERSwgZmFsc2UsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU1MC1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjU1MTpcXHRicl9tdWx0aWNhc3Rfc2dfYWRkX2V4Y2x1ZGVfcG9ydHMoc3Rhcl9tcCwgc2cpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNTUyLX1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU1My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjU1NDpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZndkX3NyY19yZW1vdmUoc3RydWN0IG5ldF9icmlkZ2VfZ3JvdXBfc3JjICpzcmMsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01NTUtXFx0XFx0XFx0XFx0XFx0Ym9vbCBmYXN0bGVhdmUpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU4Mi1cXHRcXHRcXHRwLVxcdTAwM2VmbGFncyB8PSBNREJfUEdfRkxBR1NfRkFTVF9MRUFWRTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjU4MzpcXHRcXHRicl9tdWx0aWNhc3RfZGVsX3BnKG1wLCBwLCBwcCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy01ODQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU4OS0vKiBpbnN0YWxsIFMsRyBhbmQgYmFzZWQgb24gc3JjJ3MgdGltZXIgZW5hYmxlIG9yIGRpc2FibGUgZm9yd2FyZGluZyAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NTkwOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9md2Rfc3JjX2hhbmRsZShzdHJ1Y3QgbmV0X2JyaWRnZV9ncm91cF9zcmMgKnNyYylcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU5MS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU5NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjU5NjpcXHRicl9tdWx0aWNhc3RfZndkX3NyY19hZGQoc3JjKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTU5Ny1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNjIyLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NjIzOnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9kZXN0cm95X21kYl9lbnRyeShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nYyAqZ2MpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02MjQte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02MzQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2MzU6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9tZGJfZW50cnkoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTYzNi17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY0NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY0NjpzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZ3JvdXBfZXhwaXJlZChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY0Ny17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY1NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY1NjpcXHRicl9tdWx0aWNhc3RfaG9zdF9sZWF2ZShtcCwgdHJ1ZSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NTctXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY1OS1cXHRcXHRnb3RvIG91dDtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY2MDpcXHRicl9tdWx0aWNhc3RfZGVsX21kYl9lbnRyeShtcCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NjEtb3V0Olxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02NjQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2NjU6c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0X2djICpnYylcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY2Ni17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY3NS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY3Njp2b2lkIF9fYnJfbXVsdGljYXN0X2RlbF9ncm91cF9zcmMoc3RydWN0IG5ldF9icmlkZ2VfZ3JvdXBfc3JjICpzcmMpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02Nzcte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02ODUtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2ODY6dm9pZCBicl9tdWx0aWNhc3RfZGVsX2dyb3VwX3NyYyhzdHJ1Y3QgbmV0X2JyaWRnZV9ncm91cF9zcmMgKnNyYyxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY4Ny1cXHRcXHRcXHRcXHRib29sIGZhc3RsZWF2ZSlcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY4OC17XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo2ODk6XFx0YnJfbXVsdGljYXN0X2Z3ZF9zcmNfcmVtb3ZlKHNyYywgZmFzdGxlYXZlKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjY5MDpcXHRfX2JyX211bHRpY2FzdF9kZWxfZ3JvdXBfc3JjKHNyYyk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy02OTEtfVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz02OTM9c3RhdGljIGludFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Njk0OmJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfaW5jX29uZShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eCxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTY5NS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzAzLVxcdCAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NzA0OlxcdGlmICghYnJfbXVsdGljYXN0X3BvcnRfY3R4X3ZsYW5fZGlzYWJsZWQocG1jdHgpIFxcdTAwMjZcXHUwMDI2IG1heCBcXHUwMDI2XFx1MDAyNiBuIFxcdTAwM2U9IG1heCkge1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzA1LVxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVF9NT0QoZXh0YWNrLCBcXFwiJXMgaXMgYWxyZWFkeSBpbiAldSBncm91cHMsIGFuZCBtY2FzdF9tYXhfZ3JvdXBzPSV1XFxcIixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzEzLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NzE0OnN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfZGVjX29uZShzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9wb3J0ICpwbWN0eClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTcxNS17XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTcyMS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjcyMjpzdGF0aWMgaW50IGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfaW5jKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03MjMtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBicl9pcCAqZ3JvdXAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTczMS1cXHQvKiBBbHdheXMgY291bnQgb24gdGhlIHBvcnQgY29udGV4dC4gKi9cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjczMjpcXHRlcnIgPSBicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2luY19vbmUoXFx1MDAyNnBvcnQtXFx1MDAzZW11bHRpY2FzdF9jdHgsIGV4dGFjayxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTczMy1cXHRcXHRcXHRcXHRcXHRcXHRcXFwiUG9ydFxcXCIpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03NDItXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzo3NDM6XFx0cG1jdHggPSBicl9tdWx0aWNhc3RfcG9ydF92aWRfdG9fcG9ydF9jdHgocG9ydCwgZ3JvdXAtXFx1MDAzZXZpZCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03NDQtXFx0aWYgKCFwbWN0eClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNzQ2LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6NzQ3OlxcdGVyciA9IGJyX211bHRpY2FzdF9wb3J0X25ncm91cHNfaW5jX29uZShwbWN0eCwgZXh0YWNrLCBcXFwiUG9ydC1WTEFOXFxcIik7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03NDgtXFx0aWYgKGVycikge1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03NTUtZGVjX29uZV9vdXQ6XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjI3OjI3LjU4Nzg0OTYwOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2MDc2MzE4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgY29yZSBvZiB0aGlzLiBCYXNlZCBvbiB3aGF0IEknbSBsb29raW5nIGF0LCBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBicmlkZ2UgY29uZmlndXJhdGlvbiBwb3NzaWJpbGl0aWVzLiBUaGUgb2J2aW91cyBmaXJzdCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvYnJpZGdlYCBkaXJlY3RvcnkuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGZ1bmRhbWVudGFsIG9wdGlvbnMgc2hvdWxkIGJlIGRlZmluZWQuIEknbSB0aGlua2luZyBJJ2xsIGZpbmQgYWxsIHRoZSByZWxldmFudCBgQ09ORklHX2Agb3B0aW9ucyBpbiBgbmV0L2JyaWRnZS9LY29uZmlnYC4gVGhpcyBzaG91bGQgcmV2ZWFsIHRoZSBzcGVjaWZpYyBmZWF0dXJlcywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyByZWxhdGVkIHRvIGJyaWRnaW5nLiBJdCB3aWxsIGJlIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIHRvIHVuZGVyc3RhbmRpbmcgYWxsIHRoZSBhdmFpbGFibGUgcGFyYW1ldGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4MTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyNzozMC4xOTU0ODQzOTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgwOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JyaWRnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIDgwMi4xZCBFdGhlcm5ldCBCcmlkZ2luZ1xcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQlJJREdFXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IExMQ1xcbiAgIDk6XFx0XFx0c2VsZWN0IFNUUFxcbiAgMTA6XFx0XFx0aGVscFxcbiAgMTE6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB5b3VyIExpbnV4IGJveCB3aWxsIGJlIGFibGUgdG8gYWN0IGFzIGFuXFxuICAxMjpcXHRcXHQgIEV0aGVybmV0IGJyaWRnZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgZGlmZmVyZW50IEV0aGVybmV0IHNlZ21lbnRzIGl0XFxuICAxMzpcXHRcXHQgIGlzIGNvbm5lY3RlZCB0byB3aWxsIGFwcGVhciBhcyBvbmUgRXRoZXJuZXQgdG8gdGhlIHBhcnRpY2lwYW50cy5cXG4gIDE0OlxcdFxcdCAgU2V2ZXJhbCBzdWNoIGJyaWRnZXMgY2FuIHdvcmsgdG9nZXRoZXIgdG8gY3JlYXRlIGV2ZW4gbGFyZ2VyXFxuICAxNTpcXHRcXHQgIG5ldHdvcmtzIG9mIEV0aGVybmV0cyB1c2luZyB0aGUgSUVFRSA4MDIuMSBzcGFubmluZyB0cmVlIGFsZ29yaXRobS5cXG4gIDE2OlxcdFxcdCAgQXMgdGhpcyBpcyBhIHN0YW5kYXJkLCBMaW51eCBicmlkZ2VzIHdpbGwgY29vcGVyYXRlIHByb3Blcmx5IHdpdGhcXG4gIDE3OlxcdFxcdCAgb3RoZXIgdGhpcmQgcGFydHkgYnJpZGdlIHByb2R1Y3RzLlxcbiAgMTg6XFx0XFxuICAxOTpcXHRcXHQgIEluIG9yZGVyIHRvIHVzZSB0aGUgRXRoZXJuZXQgYnJpZGdlLCB5b3UnbGwgbmVlZCB0aGUgYnJpZGdlXFxuICAyMDpcXHRcXHQgIGNvbmZpZ3VyYXRpb24gdG9vbHM7IHNlZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYnJpZGdlLnJzdFxcdTAwM2VcXG4gIDIxOlxcdFxcdCAgZm9yIGxvY2F0aW9uLiBQbGVhc2UgcmVhZCB0aGUgQnJpZGdlIG1pbmktSE9XVE8gZm9yIG1vcmVcXG4gIDIyOlxcdFxcdCAgaW5mb3JtYXRpb24uXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCAgSWYgeW91IGVuYWJsZSBpcHRhYmxlcyBzdXBwb3J0IGFsb25nIHdpdGggdGhlIGJyaWRnZSBzdXBwb3J0IHRoZW4geW91XFxuICAyNTpcXHRcXHQgIHR1cm4geW91ciBicmlkZ2UgaW50byBhIGJyaWRnaW5nIElQIGZpcmV3YWxsLlxcbiAgMjY6XFx0XFx0ICBpcHRhYmxlcyB3aWxsIHRoZW4gc2VlIHRoZSBJUCBwYWNrZXRzIGJlaW5nIGJyaWRnZWQsIHNvIHlvdSBuZWVkIHRvXFxuICAyNzpcXHRcXHQgIHRha2UgdGhpcyBpbnRvIGFjY291bnQgd2hlbiBzZXR0aW5nIHVwIHlvdXIgZmlyZXdhbGwgcnVsZXMuXFxuICAyODpcXHRcXHQgIEVuYWJsaW5nIGFycHRhYmxlcyBzdXBwb3J0IHdoZW4gYnJpZGdpbmcgd2lsbCBsZXQgYXJwdGFibGVzIHNlZVxcbiAgMjk6XFx0XFx0ICBicmlkZ2VkIEFSUCB0cmFmZmljIGluIHRoZSBhcnB0YWJsZXMgRk9SV0FSRCBjaGFpbi5cXG4gIDMwOlxcdFxcbiAgMzE6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgMzI6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBicmlkZ2UuXFxuICAzMzpcXHRcXG4gIDM0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM1OlxcdFxcbiAgMzY6XFx0Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXFxuICAzNzpcXHRcXHRib29sIFxcXCJJR01QL01MRCBzbm9vcGluZ1xcXCJcXG4gIDM4OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICAzOTpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0aGVscFxcbiAgNDI6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlbiB0aGUgRXRoZXJuZXQgYnJpZGdlIHdpbGwgYmUgYWJsZSBzZWxlY3RpdmVseVxcbiAgNDM6XFx0XFx0ICBmb3J3YXJkIG11bHRpY2FzdCB0cmFmZmljIGJhc2VkIG9uIElHTVAvTUxEIHRyYWZmaWMgcmVjZWl2ZWQgZnJvbVxcbiAgNDQ6XFx0XFx0ICBlYWNoIHBvcnQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0Y29uZmlnIEJSSURHRV9WTEFOX0ZJTFRFUklOR1xcbiAgNTE6XFx0XFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuICA1MjpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNTM6XFx0XFx0ZGVwZW5kcyBvbiBWTEFOXzgwMjFRXFxuICA1NDpcXHRcXHRkZWZhdWx0IG5cXG4gIDU1OlxcdFxcdGhlbHBcXG4gIDU2OlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHlcXG4gIDU3OlxcdFxcdCAgcmVjZWl2ZSBhbmQgZm9yd2FyZCB0cmFmZmljIGJhc2VkIG9uIFZMQU4gaW5mb3JtYXRpb24gaW4gdGhlIHBhY2tldFxcbiAgNTg6XFx0XFx0ICBhbnkgVkxBTiBpbmZvcm1hdGlvbiBjb25maWd1cmVkIG9uIHRoZSBicmlkZ2UgcG9ydCBvciBicmlkZ2UgZGV2aWNlLlxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIFNheSBOIHRvIGV4Y2x1ZGUgdGhpcyBzdXBwb3J0IGFuZCByZWR1Y2UgdGhlIGJpbmFyeSBzaXplLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuICA2MzpcXHRcXG4gIDY0OlxcdGNvbmZpZyBCUklER0VfTVJQXFxuICA2NTpcXHRcXHRib29sIFxcXCJNUlAgcHJvdG9jb2xcXFwiXFxuICA2NjpcXHRcXHRkZXBlbmRzIG9uIEJSSURHRVxcbiAgNjc6XFx0XFx0ZGVmYXVsdCBuXFxuICA2ODpcXHRcXHRoZWxwXFxuICA2OTpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBNUlBcXG4gIDcwOlxcdFxcdCAgcHJvdG9jb2wgdG8gZGV0ZWN0IGxvb3BzXFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdCAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuXFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDc1OlxcdFxcbiAgNzY6XFx0Y29uZmlnIEJSSURHRV9DRk1cXG4gIDc3OlxcdFxcdGJvb2wgXFxcIkNGTSBwcm90b2NvbFxcXCJcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gQlJJREdFXFxuICA3OTpcXHRcXHRoZWxwXFxuICA4MDpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGVuIHRoZSBFdGhlcm5ldCBicmlkZ2Ugd2lsbCBiZSBhYmxlIHRvIHJ1biBDRk1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MzAuMTk1NjI0ODc1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3Njc4MjU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIEJyaWRnZSBNdWx0aWNhc3QgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYnJpZGdlIGNvbmZpZ3VyYXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBDT05GSUdfQlJJREdFYCBhbmQgaXRzIElHTVAgc25vb3BpbmcgY291bnRlcnBhcnQsIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgLCB3aGljaCwgYXMgZXhwZWN0ZWQsIHJlbGllcyBvbiB0aGUgYElORVRgIGFuZCBgQlJJREdFYCBkZXBlbmRlbmNpZXMuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgbXVsdGljYXN0IGZpbHRlcmluZyB3b3JrcyB3aXRoaW4gdGhlIGJyaWRnZS5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBhIG11bHRpY2FzdCBncm91cC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgbWFuYWdlIHBvcnQgbWVtYmVyc2hpcCB3aXRoaW4gbXVsdGljYXN0IGdyb3Vwcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAgYW5kIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgLiBNeSBwbGFuIGlzIHRvIHRyYWNlIHRoZSBmbG93IG9mIGNhbGxzLlxuXG5UbyBnZXQgYSBoYW5kbGUgb24gdGhlbSwgSSdsbCB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgbXVsdGljYXN0IGdyb3VwcyBhcmUgY3JlYXRlZCwgbWFuYWdlZCwgYW5kIGRlbGV0ZWQgd2l0aGluIHRoZSBicmlkZ2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDczLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MzIuNzcyNDEwODkyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcxNzkxNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJfbXVsdGljYXN0XyhuZXd8ZGVsKV9wb3J0X2dyb3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9icmlkZ2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9icmlkZ2UvYnJfbWRiLmM9NzYwPXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cF9zZyhjb25zdCBzdHJ1Y3QgYnJfbWRiX2NvbmZpZyAqY2ZnLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tZGIuYy03ODQtXFxubmV0L2JyaWRnZS9icl9tZGIuYzo3ODU6XFx0cCA9IGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChjZmctXFx1MDAzZXAsIFxcdTAwMjZjZmctXFx1MDAzZWdyb3VwLCAqcHAsIGZsYWdzLCBOVUxMLFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtNzg2LVxcdFxcdFxcdFxcdFxcdE1DQVNUX0lOQ0xVREUsIGNmZy1cXHUwMDNlcnRfcHJvdG9jb2wsIGV4dGFjayk7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jPTk4ND1zdGF0aWMgaW50IGJyX21kYl9hZGRfZ3JvdXBfc3Rhcl9nKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMDktXFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMDEwOlxcdHAgPSBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoY2ZnLVxcdTAwM2VwLCBcXHUwMDI2Y2ZnLVxcdTAwM2Vncm91cCwgKnBwLCBmbGFncywgTlVMTCxcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMTEtXFx0XFx0XFx0XFx0XFx0Y2ZnLVxcdTAwM2VmaWx0ZXJfbW9kZSwgY2ZnLVxcdTAwM2VydF9wcm90b2NvbCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAzNS1lcnJfZGVsX3BvcnRfZ3JvdXA6XFxubmV0L2JyaWRnZS9icl9tZGIuYzoxMDM2OlxcdGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChwKTtcXG5uZXQvYnJpZGdlL2JyX21kYi5jLTEwMzctXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTM2Nj1icl9tdWx0aWNhc3RfbmV3X2dyb3VwX3NyYyhzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZywgc3RydWN0IGJyX2lwICpzcmNfaXApXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0MDMtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoxNDA0OnN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0MDUtXFx0XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ2My1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NjQ6dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NjUte1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNTA3PV9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU0MTpcXHRwID0gYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHBtY3R4LVxcdTAwM2Vwb3J0LCBncm91cCwgKnBwLCAwLCBzcmMsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQyLVxcdFxcdFxcdFxcdFxcdGZpbHRlcl9tb2RlLCBSVFBST1RfS0VSTkVMLCBOVUxMKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwMTA9c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTAxMTpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnJfaXAgKmdyb3VwLFxcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTAxNi1cXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxMDE3OnZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnApO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTEwMTgtaW50IGJyX21kYl9oYXNoX2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MzIuODc5NTk3MDQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNzk5NTE2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBNdWx0aWNhc3QgTGlzdCBIYW5kbGluZyBpbiB0aGUgQnJpZGdlIENvZGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gb2YgYHBvcnQtXHUwMDNlbWdsaXN0YCBhbmQgYHAtXHUwMDNlbmV4dGAgd2l0aGluIHRoZSBgYnJfbXVsdGljYXN0LmNgIG1vZHVsZS4gSSBzdXNwZWN0IHRoZXJlJ3MgYSBsaW5rIGJldHdlZW4gaG93IG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwIGlzIHRyYWNrZWQgYW5kIGhvdyB0aGUgcG9ydCBzdHJ1Y3R1cmVzIGFyZSBsaW5rZWQgd2l0aGluIHRoZSBicmlkZ2UuIFRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcywgYSBnb29kIGZpcnN0IHN0ZXAgaXMgdG8gc2VlIGhvdyBgbWdsaXN0YCBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGBuZXQvYnJpZGdlL2AgZGlyZWN0b3J5LiBHcmVwcGluZyBmb3IgYG1nbGlzdGAgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBvdmVydmlldyBvZiBpdHMgcHVycG9zZSBhbmQgY29udGV4dC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMDMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyNzozNi4wNTk1NTE1NzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDIwMzI1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZ2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz03ODk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nYyAqZ2MpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTc5My1cXHRwZyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCwgbWNhc3RfZ2MpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Nzk0OlxcdFdBUk5fT04oIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZwZy1cXHUwMDNlbWdsaXN0KSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03OTUtXFx0V0FSTl9PTighaGxpc3RfZW1wdHkoXFx1MDAyNnBnLVxcdTAwM2VzcmNfbGlzdCkpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz04MDI9dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BnKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxMS1cXHQvKiBLZWVwIC1cXHUwMDNlbmV4dCAoaGVsZCB1bmRlciBtdWx0aWNhc3RfbG9jaywgZnJlZWQgbGF0ZXIgYnkgdGhlIEdDIHdvcmspOlxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODEyOlxcdCAqIGEgcG9ydC1cXHUwMDNlbWdsaXN0IHRlYXJkb3duIHdhbGsgbWF5IGhhdmUgbGF0Y2hlZCB0aGlzIG5vZGUgYXMgaXRzIG5leHQsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTMtXFx0ICogYW5kIGRlbGV0aW5nIG90aGVyIGdyb3VwcyBvZiB0aGUgc2FtZSBwb3J0IG11c3Qgbm90IHRydW5jYXRlIGl0Llxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODE0LVxcdCAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODE1OlxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTYtXFx0YnJfbXVsdGljYXN0X2VodF9jbGVhbl9zZXRzKHBnKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9ODM1PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg0MjpcXHQvKiBBIHRlYXJkb3duIHdhbGsgb3ZlciBwb3J0LVxcdTAwM2VtZ2xpc3QgY2FuIHJlYWNoIGEgZ3JvdXAgdGhhdCBhbiBlYXJsaWVyXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04NDMtXFx0ICogaXRlcmF0aW9uIGFscmVhZHkgZGVsZXRlZCBhcyBhIHNpZGUgZWZmZWN0LiBJdCBpcyBvZmYgbXAtXFx1MDAzZXBvcnRzIGJ5XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0NS1cXHQgKi9cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg0NjpcXHRpZiAoaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnBnLVxcdTAwM2VtZ2xpc3QpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQ3LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9ODY2PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3NS1cXHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXFx1MDAzZWRldikgfHwgdGltZXJfcGVuZGluZyhcXHUwMDI2cGctXFx1MDAzZXRpbWVyKSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODc2OlxcdCAgICBobGlzdF91bmhhc2hlZChcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCkgfHwgcGctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3Ny1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQwND1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTItXFx0UkNVX0lOSVRfUE9JTlRFUihwLVxcdTAwM2VuZXh0LCBuZXh0KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NTM6XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QsIFxcdTAwMjZwb3J0LVxcdTAwM2VtZ2xpc3QpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ1NC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQ2ND12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDY4LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTQ2OTpcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDcwLVxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2cC1cXHUwMDNla2V5LmFkZHIpKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xOTk5PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3JleG1pdChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjAwOS1cXHRzcGluX2xvY2soXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDEwOlxcdGlmICghbmV0aWZfcnVubmluZyhici1cXHUwMDNlZGV2KSB8fCBobGlzdF91bmhhc2hlZChcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCkgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwMTEtXFx0ICAgICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwNTk9dm9pZCBicl9tdWx0aWNhc3RfcG9ydF9jdHhfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDg1LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cG9ydC1cXHUwMDNlYnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwODY6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGcsIFxcdTAwMjZwb3J0LVxcdTAwM2VtZ2xpc3QsIG1nbGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwODctXFx0XFx0XFx0aWYgKHBnLVxcdTAwM2VrZXkuYWRkci52aWQgPT0gdmxhbi1cXHUwMDNldmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTM2PXZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNDMtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE0NDpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTQ1LVxcdFxcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhiciwgcGcpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTk1PXN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjAxOlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFxcdTAwMjZwbWN0eC1cXHUwMDNlcG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLVxcdFxcdGlmICghKHBnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTM3Mjc9YnJfbXVsdGljYXN0X2xlYXZlX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM3ODQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNzg1OlxcdFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM3ODYtXFx0XFx0XFx0ICAgICh0aW1lcl9wZW5kaW5nKFxcdTAwMjZwLVxcdTAwM2V0aW1lcikgP1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODE2LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzgxNzpcXHRcXHRpZiAoIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODE4LVxcdFxcdCAgICAodGltZXJfcGVuZGluZyhcXHUwMDI2cC1cXHUwMDNldGltZXIpID9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDk1OT1pbnQgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk4MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ5ODI6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdyb3VwLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5ODMtXFx0XFx0XFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MzU2PXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMzY4LVxcdHN0cnVjdCB0aW1lcl9saXN0XFx0XFx0cmV4bWl0X3RpbWVyO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjM2OTpcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdFxcdG1nbGlzdDtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNzAtXFx0c3RydWN0IHJiX3Jvb3RcXHRcXHRcXHRlaHRfc2V0X3RyZWU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MzEtXFx0dTMyXFx0XFx0XFx0XFx0bXVsdGljYXN0X2VodF9ob3N0c19jbnQ7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDMyOlxcdHN0cnVjdCBobGlzdF9oZWFkXFx0XFx0bWdsaXN0O1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQzMy0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6MzYuMTY5NzYwMjU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzMjMyMjM3MzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIExpbnV4IEJyaWRnZSBNdWx0aWNhc3QgU3Vic3lzdGVtIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJJ20gbG9va2luZyBhdCB0aGUgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBgcG9ydC1cdTAwM2VtZ2xpc3RgLiBUaGlzIGxpc3QgaXMgcHJvdGVjdGVkIGJ5IFJDVSBvciBhIG11bHRpY2FzdCBsb2NrLCB3aGljaCBpcyBpbXBvcnRhbnQgZm9yIGNvbmN1cnJlbmN5LiBUaGUga2V5IGhlcmUgaXMgdGhlIHNoaWZ0IGluIGhvdyB0aGUgcG9ydCBncm91cCBlbnRyaWVzIGFyZSBoYW5kbGVkIOKAkyB0aGUgbW92ZSBmcm9tIHBsYWluIGBobGlzdF9hZGRfaGVhZGAgYW5kIGBobGlzdF9kZWxfaW5pdGAgdG8gUkNVLXNhZmUgdmFyaWFudHM6IGBobGlzdF9hZGRfaGVhZF9yY3VgIGFuZCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYWxvbmcgd2l0aCBga2ZyZWVfcmN1YC4gVGhpcyBpcyBpbiB0aGUgYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgIG1vZHVsZSwgc28gaXQncyBjb3JlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IHdpdGggSUdNUCBzbm9vcGluZy5cblxuRnJvbSBteSBwZXJzcGVjdGl2ZSwgdGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsIGFyZWEgZm9yIGZ1enppbmcuIFRoZSBicmlkZ2UgbXVsdGljYXN0L0lHTVAgc25vb3BpbmcgaXMgZWFzaWx5IGFjY2Vzc2libGUgdGhyb3VnaCBzdGFuZGFyZCBuZXR3b3JrIGludGVyZmFjZXM6IG5ldGxpbmsgY29tbWFuZHMgKGxpa2UgbWRiKSwgcnRuZXRsaW5rLCBuZXRkZXZpY2UgY29uZmlnLCBhbmQgZXZlbiBzZW5kaW5nIG11bHRpY2FzdCBwYWNrZXRzIG92ZXIgdmV0aCwgdGFwLCBvciBvdGhlciBicmlkZ2VkIGludGVyZmFjZXMuIFRoaXMgbWVhbnMgaXQncyByZWFjaGFibGUgYW5kIGxpa2VseSB0byBzZWUgZGl2ZXJzZSBpbnB1dC5cblxuVGhlIGNoYW5nZSBpbiBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIFJDVSBzZW1hbnRpY3MgZm9yIHRoZXNlIGZ1bmN0aW9ucyBpcyB3aGF0IGNhdGNoZXMgbXkgZXllLCB0aGlzIGFsb25lIG1ha2VzIGl0IFdvcnRoRnV6emluZyA9IHRydWUuXG5cbkZvciBmdXp6aW5nIGZvY3VzLCB0aGUgcHJpbWFyeSB0YXJnZXRzIHdpbGwgYmUgYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAsIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgLCBhbmQgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCwgYnV0IGBicl9tZGJfYWRkYCBvciBgYnJfbXVsdGljYXN0X2RlbF9wZ2AgbWlnaHQgYWxzbyB3YXJyYW50IGF0dGVudGlvbi4gVGhlIHByZWNpc2UgZnVuY3Rpb25zIHRoYXQgd2VyZSBtb2RpZmllZCB3ZXJlIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC5cblxuQSBxdWljayBjaGVjayBjb25maXJtcyB0aGF0IGJvdGggZnVuY3Rpb25zLCBgYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwYCBhbmQgYGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cGAsIGFyZSBub24tc3RhdGljIGFuZCBkZWNsYXJlZCBpbiBgbmV0L2JyaWRnZS9icl9wcml2YXRlLmhgLlxuXG5UaGUgY29uZmlndXJhdGlvbiBmbGFncyBhcmUgc3RyYWlnaHRmb3J3YXJkOiBgQ09ORklHX0JSSURHRWAgYW5kIGBDT05GSUdfQlJJREdFX0lHTVBfU05PT1BJTkdgLiBUaGUgbGF0dGVyIGRlcGVuZHMgb24gdGhlIGZvcm1lciBhbmQgYWxzbyBvbiBgSU5FVGAsIHNvIGBCUklER0VgIGFuZCBgQlJJREdFX0lHTVBfU05PT1BJTkdgIGFyZSBteSBlbmFibGUgY29uZmlncy4gYENPTkZJR19CUklER0VgIGFsc28gcHVsbHMgaW4gTExDIGFuZCBTVFAuXG5cblNvLCB0byBzdW1tYXJpemU6XG5cbiogICBXb3J0aEZ1enppbmc6IFRydWVcbiogICBGb2N1c1N5bWJvbHM6IGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgLCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCwgYGJyX21kYl9hZGRgLCBgYnJfbXVsdGljYXN0X2RlbF9wZ2BcbiogICBFbmFibGVDb25maWdzOiBgQlJJREdFYCwgYEJSSURHRV9JR01QX1NOT09QSU5HYFxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhhdCB3ZSBoYXZlIGEgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSB0aGF0IGlzIHJlYWNoYWJsZSB0aHJvdWdoIHN0YW5kYXJkIG5ldHdvcmsgaW50ZXJmYWNlcyBhbmQgdXRpbGl6ZXMgUkNVIHNlbWFudGljcyBmb3IgaW5zZXJ0aW9uL2RlbGV0aW9uIGFuZCBtZW1vcnkgcmVjbGFtYXRpb24uIFRoaXMgaXMgYSBzb2xpZCB0YXJnZXQsIGFuZCB0aGUgYW5hbHlzaXMgaXMgY29tcGxldGUuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MTAsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjI3OjQ5LjQwMjAwMTU1NloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTEyMjQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfSUdNUF9TTk9PUElOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cFwiLFxuICAgIFwiYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggdXBkYXRlcyBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZ3JvdXAgbGlzdCBtYW5hZ2VtZW50IHRvIHVzZSBSQ1Utc2FmZSBwcmltaXRpdmVzIChobGlzdF9hZGRfaGVhZF9yY3UsIGhsaXN0X2RlbF9pbml0X3JjdSwgUkNVX0lOSVRfUE9JTlRFUiwgYW5kIGtmcmVlX3JjdSkuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGluIHRoZSBicmlkZ2UgSUdNUCBzbm9vcGluZyBzdWJzeXN0ZW0sIHdoaWNoIGNhbiBiZSBleGVyY2lzZWQgdmlhIG5ldGxpbmsvTURCIGludGVyZmFjZXMgYW5kIG11bHRpY2FzdCB0cmFmZmljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX0lHTVBfU05PT1BJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBcIixcbiAgICBcImJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHVwZGF0ZXMgYnJpZGdlIG11bHRpY2FzdCBwb3J0IGdyb3VwIGxpc3QgbWFuYWdlbWVudCB0byB1c2UgUkNVLXNhZmUgcHJpbWl0aXZlcyAoaGxpc3RfYWRkX2hlYWRfcmN1LCBobGlzdF9kZWxfaW5pdF9yY3UsIFJDVV9JTklUX1BPSU5URVIsIGFuZCBrZnJlZV9yY3UpLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiB0aGUgYnJpZGdlIElHTVAgc25vb3Bpbmcgc3Vic3lzdGVtLCB3aGljaCBjYW4gYmUgZXhlcmNpc2VkIHZpYSBuZXRsaW5rL01EQiBpbnRlcmZhY2VzIGFuZCBtdWx0aWNhc3QgdHJhZmZpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6NDkuNTQzMTM0MTZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTAzODIzNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjc6NDkuNTQ0NDM5NzFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NzkwMjUwMDg3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgUkNVIHN5bmNocm9uaXphdGlvbiBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGluIGJyaWRnZSBtdWx0aWNhc3QgcG9ydCBncm91cCBoYW5kbGluZy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIHRoYXQgYGhsaXN0X2FkZF9oZWFkX3JjdWAsIGBSQ1VfSU5JVF9QT0lOVEVSYCwgYGhsaXN0X2RlbF9pbml0X3JjdWAsIGFuZCBga2ZyZWVfcmN1YCBhcmUgdXNlZCBjb3JyZWN0bHkgZm9yIGBwb3J0LVxcdTAwM2VtZ2xpc3RgIGFuZCBgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cGAsIHByZXZlbnRpbmcgY29uY3VycmVudCByZWFkZXJzIChzdWNoIGFzIGBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudGApIGZyb20gYWNjZXNzaW5nIGZyZWVkIG1lbW9yeSBvciBvYnNlcnZpbmcgcGFydGlhbGx5IHB1Ymxpc2hlZCBlbnRyaWVzLlxcblxcblRoZSBhbGxvY2F0ZWQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgIHN0cnVjdHVyZSBpcyB6ZXJvLWluaXRpYWxpemVkIHVzaW5nIGBremFsbG9jX29iamAsIGFuZCBhbGwgZmllbGRzIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1ZmZlciBvdmVyZmxvd3MsIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZS4gQ29uY3VycmVuY3kgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIFJDVSBkZWJ1Z2dpbmcgdG9vbHMsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDNjM2RjM2NkMzVjYmE3MmE1NDVmZTAzNzMwNDFiMmU1NGRkNThjYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6Mjc6MTQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuY1xuaW5kZXggM2U5YjEwZjhhYmYxZC4uMmY5YmIzMGUxYTFmNiAxMDA2NDRcbi0tLSBhL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcbkBAIC0xNDQxLDE2ICsxNDQxLDE3IEBAIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKmJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChcbiBcdFx0Z290byBmcmVlX291dDtcbiBcdH1cbiBcbi1cdHJjdV9hc3NpZ25fcG9pbnRlcihwLVx1MDAzZW5leHQsIG5leHQpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2cC1cdTAwM2V0aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfZXhwaXJlZCwgMCk7XG4gXHR0aW1lcl9zZXR1cChcdTAwMjZwLVx1MDAzZXJleG1pdF90aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0LCAwKTtcbi1cdGhsaXN0X2FkZF9oZWFkKFx1MDAyNnAtXHUwMDNlbWdsaXN0LCBcdTAwMjZwb3J0LVx1MDAzZW1nbGlzdCk7XG4gXG4gXHRpZiAoc3JjKVxuIFx0XHRtZW1jcHkocC1cdTAwM2VldGhfYWRkciwgc3JjLCBFVEhfQUxFTik7XG4gXHRlbHNlXG4gXHRcdGV0aF9icm9hZGNhc3RfYWRkcihwLVx1MDAzZWV0aF9hZGRyKTtcbiBcbitcdFJDVV9JTklUX1BPSU5URVIocC1cdTAwM2VuZXh0LCBuZXh0KTtcbitcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZwLVx1MDAzZW1nbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2VtZ2xpc3QpO1xuK1xuIFx0cmV0dXJuIHA7XG4gXG4gZnJlZV9vdXQ6XG5AQCAtMTQ2NSwxMSArMTQ2NiwxMSBAQCB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxuIFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtXHUwMDNla2V5LnBvcnQ7XG4gXHRfX3UxNiB2aWQgPSBwLVx1MDAzZWtleS5hZGRyLnZpZDtcbiBcbi1cdGhsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlbWdsaXN0KTtcbitcdGhsaXN0X2RlbF9pbml0X3JjdShcdTAwMjZwLVx1MDAzZW1nbGlzdCk7XG4gXHRpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coXHUwMDI2cC1cdTAwM2VrZXkuYWRkcikpXG4gXHRcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXHUwMDI2cG9ydC1cdTAwM2Vici1cdTAwM2VzZ19wb3J0X3RibCwgXHUwMDI2cC1cdTAwM2VyaG5vZGUsXG4gXHRcdFx0XHQgICAgICAgYnJfc2dfcG9ydF9yaHRfcGFyYW1zKTtcbi1cdGtmcmVlKHApO1xuK1x0a2ZyZWVfcmN1KHAsIHJjdSk7XG4gXHRicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCB2aWQpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjI3OjQ5LjU0NDQ1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzYyODA0NTI3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBCcmlkZ2UgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGNoYW5nZXMgbWFkZSwgZXNwZWNpYWxseSB3aXRoaW4gYG5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY29yZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYC4gTGV0J3MgYnJlYWsgdGhlc2UgZG93biBpbmRpdmlkdWFsbHkuXG5cbkluIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgLCB0aGUga2V5IGRpZmZlcmVuY2UgaXMgdGhlIHJlb3JkZXJpbmcgb2YgdGhlIHBvaW50ZXIgYXNzaWdubWVudHMgYW5kIGxpc3QgYWRkaXRpb25zLiBQcmV2aW91c2x5LCB3ZSBoYWQgYHJjdV9hc3NpZ25fcG9pbnRlcihwLVx1MDAzZW5leHQsIG5leHQpO2AgYW5kIGBobGlzdF9hZGRfaGVhZChcdTAwMjZwLVx1MDAzZW1nbGlzdCwgXHUwMDI2cG9ydC1cdTAwM2VtZ2xpc3QpO2AgYmVmb3JlIHRoZSBzZXR1cCBvZiB0aGUgYGV0aF9hZGRyYC4gTm93LCBpdCdzIGJlZW4gY2hhbmdlZCB0byBgUkNVX0lOSVRfUE9JTlRFUihwLVx1MDAzZW5leHQsIG5leHQpO2AgYW5kIGBobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2cC1cdTAwM2VtZ2xpc3QsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0KTtgIGFmdGVyIHRoZSBgZXRoX2FkZHJgIHNldHVwLiBUaGlzIGlzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY29uc2lkZXIgd2h5IHRoaXMgcmVvcmRlcmluZyB3YXMgbmVjZXNzYXJ5IGFuZCBob3cgaXQgYWZmZWN0cyBtZW1vcnkgb3JkZXJpbmcgYW5kIGRhdGEgdmlzaWJpbGl0eSB1bmRlciBSQ1UuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHdpdGggcmVzcGVjdCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb3JkZXIsIHBhcnRpY3VsYXJseSB0byBlbnN1cmUgYXRvbWljaXR5IGFuZCBjb3JyZWN0bmVzcyB3aXRoIHJlc3BlY3QgdG8gY29uY3VycmVudCBhY2Nlc3MgYnkgcmVhZGVycy5cblxuVGhlbiwgSSdtIGxvb2tpbmcgYXQgYGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cGAuIEhlcmUsIHRoZSBjaGFuZ2VzIGFyZSBzdHJhaWdodGZvcndhcmQ6IGBobGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZW1nbGlzdCk7YCBoYXMgYmVjb21lIGBobGlzdF9kZWxfaW5pdF9yY3UoXHUwMDI2cC1cdTAwM2VtZ2xpc3QpO2AsIGFuZCBga2ZyZWUocCk7YCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBrZnJlZV9yY3UocCwgcmN1KTtgLiBDbGVhcmx5LCB0aGVzZSByZXZpc2lvbnMgYXJlIHJlbGF0ZWQgdG8gUkNVIHN5bmNocm9uaXphdGlvbi4gVGhlIGludGVudGlvbiBpcyB0byByZW1vdmUgdGhlIGVsZW1lbnQgc2FmZWx5IGZyb20gdGhlIGhhc2ggbGlzdCwgdGhlbiBkZWZlciB0aGUgbWVtb3J5IGRlYWxsb2NhdGlvbiB1c2luZyBSQ1UgZ3JhY2UgcGVyaW9kcy4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBwcmV2ZW50aW5nIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMgaW4gUkNVLXByb3RlY3RlZCBkYXRhIHN0cnVjdHVyZXMuIEknbGwgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzIGltcGxlbWVudGVkIGNvcnJlY3RseSwgYW5kIHRoYXQgYWxsIG5lY2Vzc2FyeSBSQ1Ugc3luY2hyb25pemF0aW9uIGlzIGluIHBsYWNlIGFyb3VuZCB0aGVzZSBjaGFuZ2VzLCBlbnN1cmluZyB0aGF0IHJlYWRlcnMgb2YgdGhpcyBkYXRhIHN0cnVjdHVyZSBhcmUgcHJvcGVybHkgcHJvdGVjdGVkLlxuXG5JJ2xsIG5vdyBuZWVkIHRvIGdvIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGUgbXVsdGljYXN0IHBvcnQgZ3JvdXBzIGFuZCB0aGVpciBsaWZlY3ljbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgdGhyZWFkLXNhZmUgYW5kIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MzAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODowMy4xNzI1MDAyNDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzk5NDk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tZGIuYz03NjA9c3RhdGljIGludCBicl9tZGJfYWRkX2dyb3VwX3NnKGNvbnN0IHN0cnVjdCBicl9tZGJfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jLTc4NC1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjc4NTpcXHRwID0gYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKGNmZy1cXHUwMDNlcCwgXFx1MDAyNmNmZy1cXHUwMDNlZ3JvdXAsICpwcCwgZmxhZ3MsIE5VTEwsXFxubmV0L2JyaWRnZS9icl9tZGIuYy03ODYtXFx0XFx0XFx0XFx0XFx0TUNBU1RfSU5DTFVERSwgY2ZnLVxcdTAwM2VydF9wcm90b2NvbCwgZXh0YWNrKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmM9OTg0PXN0YXRpYyBpbnQgYnJfbWRiX2FkZF9ncm91cF9zdGFyX2coY29uc3Qgc3RydWN0IGJyX21kYl9jb25maWcgKmNmZyxcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAwOS1cXG5uZXQvYnJpZGdlL2JyX21kYi5jOjEwMTA6XFx0cCA9IGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cChjZmctXFx1MDAzZXAsIFxcdTAwMjZjZmctXFx1MDAzZWdyb3VwLCAqcHAsIGZsYWdzLCBOVUxMLFxcbm5ldC9icmlkZ2UvYnJfbWRiLmMtMTAxMS1cXHRcXHRcXHRcXHRcXHRjZmctXFx1MDAzZWZpbHRlcl9tb2RlLCBjZmctXFx1MDAzZXJ0X3Byb3RvY29sLFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xMzY2PWJyX211bHRpY2FzdF9uZXdfZ3JvdXBfc3JjKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnLCBzdHJ1Y3QgYnJfaXAgKnNyY19pcClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQwMy1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0MDQ6c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQwNS1cXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xNTA3PV9fYnJfbXVsdGljYXN0X2FkZF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdCAqYnJtY3R4LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQwLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTU0MTpcXHRwID0gYnJfbXVsdGljYXN0X25ld19wb3J0X2dyb3VwKHBtY3R4LVxcdTAwM2Vwb3J0LCBncm91cCwgKnBwLCAwLCBzcmMsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNTQyLVxcdFxcdFxcdFxcdFxcdGZpbHRlcl9tb2RlLCBSVFBST1RfS0VSTkVMLCBOVUxMKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTEwMTA9c3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTAxMTpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCxcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xMDEyLVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgYnJfaXAgKmdyb3VwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODowMy40NzY1MDI0MDFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA1NjkyMDA0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBNdWx0aWNhc3QgUG9ydCBHcm91cCBMb2dpYyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCByZWFsbHkgdW5kZXJzdGFuZCBob3cgdGhlc2UgbXVsdGljYXN0IHBvcnQgZ3JvdXBzIGFyZSBtYW5hZ2VkLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHNlZSBob3cgYGJyX211bHRpY2FzdF9uZXdfcG9ydF9ncm91cGAgYW5kIGBicl9tdWx0aWNhc3RfZGVsX3BvcnRfZ3JvdXBgIGFyZSBpbnRlcmFjdGluZyB3aXRoIHRoZSBicm9hZGVyIGJyaWRnZSBzdHJ1Y3R1cmUuIEknbSBnb2luZyB0byBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyBhcm91bmQgdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSdyZSBvcGVyYXRpbmcgb24g4oCTIEkgd2FudCB0byBzZWUgaG93IHRoZSBncm91cHMgYXJlIGNyZWF0ZWQsIGxpbmtlZCwgYW5kIGV2ZW50dWFsbHkgcmVtb3ZlZC4gQXJlIHRoZXkgdXNpbmcgcmVmZXJlbmNlIGNvdW50cz8gSXMgdGhlcmUgYSBjZW50cmFsIGRhdGEgc3RydWN0dXJlIG1hbmFnaW5nIHRoZW0gYWxsLCBvciBhcmUgdGhleSBkaXN0cmlidXRlZCBzb21laG93PyBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGNvbmN1cnJlbmN5IGNvbmNlcm5zIGhlcmUuIEkgZXhwZWN0IHRoYXQgY3JlYXRpbmcgYW5kIGRlbGV0aW5nIGdyb3VwcyBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50IGNvdWxkIGVhc2lseSBpbnRyb2R1Y2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucywgc28gSSdsbCBiZSBsb29raW5nIGZvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBsaWtlIG11dGV4ZXMgb3Igc3BpbmxvY2tzLiBBcmUgdGhleSB1c2luZyBhbnkgYXRvbWljIG9wZXJhdGlvbnM/IEknbGwgYWxzbyBiZSBjb25zaWRlcmluZyB0aGUgZWRnZSBjYXNlczogd2hhdCBoYXBwZW5zIGlmIGEgcG9ydCBncm91cCBpcyBhZGRlZCBhbmQgdGhlbiBkZWxldGVkIGluIHJhcGlkIHN1Y2Nlc3Npb24/IERvZXMgdGhlIGNvZGUgaGFuZGxlIHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgY29ycnVwdGlvbj8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGFsbG9jYXRpb25zIHRoYXQgbmVlZCB0byBiZSBjYXJlZnVsbHkgbWFuYWdlZD8gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBtZW50YWwgbW9kZWwgdG8gZW5zdXJlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWhhdmluZyBjb3JyZWN0bHksIGVmZmljaWVudGx5LCBhbmQsIGFib3ZlIGFsbCwgc2FmZWx5LiBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCBjb250ZXh0IG9mIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIGFuZCB3aGF0IGNhbGxzIHRoZW0sIGFyZSBhbHNvIGNydWNpYWwgYXNwZWN0cyBmb3IgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODowNi41MzM0MjY1ODdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyNTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQwMDpcXHRcXG4xNDAxOlxcdFxcdHJldHVybiBncnBfc3JjO1xcbjE0MDI6XFx0fVxcbjE0MDM6XFx0XFxuMTQwNDpcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXFxuMTQwNTpcXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxcbjE0MDY6XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJyX2lwICpncm91cCxcXG4xNDA3OlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgX19yY3UgKm5leHQsXFxuMTQwODpcXHRcXHRcXHRcXHR1bnNpZ25lZCBjaGFyIGZsYWdzLFxcbjE0MDk6XFx0XFx0XFx0XFx0Y29uc3QgdW5zaWduZWQgY2hhciAqc3JjLFxcbjE0MTA6XFx0XFx0XFx0XFx0dTggZmlsdGVyX21vZGUsXFxuMTQxMTpcXHRcXHRcXHRcXHR1OCBydF9wcm90b2NvbCxcXG4xNDEyOlxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xNDEzOlxcdHtcXG4xNDE0OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnA7XFxuMTQxNTpcXHRcXHRpbnQgZXJyO1xcbjE0MTY6XFx0XFxuMTQxNzpcXHRcXHRlcnIgPSBicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2luYyhwb3J0LCBncm91cCwgZXh0YWNrKTtcXG4xNDE4OlxcdFxcdGlmIChlcnIpXFxuMTQxOTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDIwOlxcdFxcbjE0MjE6XFx0XFx0cCA9IGt6YWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG4xNDIyOlxcdFxcdGlmICh1bmxpa2VseSghcCkpIHtcXG4xNDIzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJDb3VsZG4ndCBhbGxvY2F0ZSBuZXcgcG9ydCBncm91cFxcXCIpO1xcbjE0MjQ6XFx0XFx0XFx0Z290byBkZWNfb3V0O1xcbjE0MjU6XFx0XFx0fVxcbjE0MjY6XFx0XFxuMTQyNzpcXHRcXHRwLVxcdTAwM2VrZXkuYWRkciA9ICpncm91cDtcXG4xNDI4OlxcdFxcdHAtXFx1MDAzZWtleS5wb3J0ID0gcG9ydDtcXG4xNDI5OlxcdFxcdHAtXFx1MDAzZWZsYWdzID0gZmxhZ3M7XFxuMTQzMDpcXHRcXHRwLVxcdTAwM2VmaWx0ZXJfbW9kZSA9IGZpbHRlcl9tb2RlO1xcbjE0MzE6XFx0XFx0cC1cXHUwMDNlcnRfcHJvdG9jb2wgPSBydF9wcm90b2NvbDtcXG4xNDMyOlxcdFxcdHAtXFx1MDAzZWVodF9ob3N0X3RyZWUgPSBSQl9ST09UO1xcbjE0MzM6XFx0XFx0cC1cXHUwMDNlZWh0X3NldF90cmVlID0gUkJfUk9PVDtcXG4xNDM0OlxcdFxcdHAtXFx1MDAzZW1jYXN0X2djLmRlc3Ryb3kgPSBicl9tdWx0aWNhc3RfZGVzdHJveV9wb3J0X2dyb3VwO1xcbjE0MzU6XFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZwLVxcdTAwM2VzcmNfbGlzdCk7XFxuMTQzNjpcXHRcXG4xNDM3OlxcdFxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhncm91cCkgXFx1MDAyNlxcdTAwMjZcXG4xNDM4OlxcdFxcdCAgICByaGFzaHRhYmxlX2xvb2t1cF9pbnNlcnRfZmFzdChcXHUwMDI2cG9ydC1cXHUwMDNlYnItXFx1MDAzZXNnX3BvcnRfdGJsLCBcXHUwMDI2cC1cXHUwMDNlcmhub2RlLFxcbjE0Mzk6XFx0XFx0XFx0XFx0XFx0XFx0ICBicl9zZ19wb3J0X3JodF9wYXJhbXMpKSB7XFxuMTQ0MDpcXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiQ291bGRuJ3QgaW5zZXJ0IG5ldyBwb3J0IGdyb3VwXFxcIik7XFxuMTQ0MTpcXHRcXHRcXHRnb3RvIGZyZWVfb3V0O1xcbjE0NDI6XFx0XFx0fVxcbjE0NDM6XFx0XFxuMTQ0NDpcXHRcXHR0aW1lcl9zZXR1cChcXHUwMDI2cC1cXHUwMDNldGltZXIsIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQsIDApO1xcbjE0NDU6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNnAtXFx1MDAzZXJleG1pdF90aW1lciwgYnJfbXVsdGljYXN0X3BvcnRfZ3JvdXBfcmV4bWl0LCAwKTtcXG4xNDQ2OlxcdFxcbjE0NDc6XFx0XFx0aWYgKHNyYylcXG4xNDQ4OlxcdFxcdFxcdG1lbWNweShwLVxcdTAwM2VldGhfYWRkciwgc3JjLCBFVEhfQUxFTik7XFxuMTQ0OTpcXHRcXHRlbHNlXFxuMTQ1MDpcXHRcXHRcXHRldGhfYnJvYWRjYXN0X2FkZHIocC1cXHUwMDNlZXRoX2FkZHIpO1xcbjE0NTE6XFx0XFxuMTQ1MjpcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKHAtXFx1MDAzZW5leHQsIG5leHQpO1xcbjE0NTM6XFx0XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QsIFxcdTAwMjZwb3J0LVxcdTAwM2VtZ2xpc3QpO1xcbjE0NTQ6XFx0XFxuMTQ1NTpcXHRcXHRyZXR1cm4gcDtcXG4xNDU2OlxcdFxcbjE0NTc6XFx0ZnJlZV9vdXQ6XFxuMTQ1ODpcXHRcXHRrZnJlZShwKTtcXG4xNDU5OlxcdGRlY19vdXQ6XFxuMTQ2MDpcXHRcXHRicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCBncm91cC1cXHUwMDNldmlkKTtcXG4xNDYxOlxcdFxcdHJldHVybiBOVUxMO1xcbjE0NjI6XFx0fVxcbjE0NjM6XFx0XFxuMTQ2NDpcXHR2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxcbjE0NjU6XFx0e1xcbjE0NjY6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHAtXFx1MDAzZWtleS5wb3J0O1xcbjE0Njc6XFx0XFx0X191MTYgdmlkID0gcC1cXHUwMDNla2V5LmFkZHIudmlkO1xcbjE0Njg6XFx0XFxuMTQ2OTpcXHRcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCk7XFxuMTQ3MDpcXHRcXHRpZiAoIWJyX211bHRpY2FzdF9pc19zdGFyX2coXFx1MDAyNnAtXFx1MDAzZWtleS5hZGRyKSlcXG4xNDcxOlxcdFxcdFxcdHJoYXNodGFibGVfcmVtb3ZlX2Zhc3QoXFx1MDAyNnBvcnQtXFx1MDAzZWJyLVxcdTAwM2VzZ19wb3J0X3RibCwgXFx1MDAyNnAtXFx1MDAzZXJobm9kZSxcXG4xNDcyOlxcdFxcdFxcdFxcdFxcdCAgICAgICBicl9zZ19wb3J0X3JodF9wYXJhbXMpO1xcbjE0NzM6XFx0XFx0a2ZyZWVfcmN1KHAsIHJjdSk7XFxuMTQ3NDpcXHRcXHRicl9tdWx0aWNhc3RfcG9ydF9uZ3JvdXBzX2RlYyhwb3J0LCB2aWQpO1xcbjE0NzU6XFx0fVxcbjE0NzY6XFx0XFxuMTQ3NzpcXHR2b2lkIGJyX211bHRpY2FzdF9ob3N0X2pvaW4oY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfbWNhc3QgKmJybWN0eCxcXG4xNDc4OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wLCBib29sIG5vdGlmeSlcXG4xNDc5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjg6MDYuNTMzNzAyMjU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MTY1MDU1MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgYXMgSSBhcHByb2FjaCB0aGlzIGNvZGUgcGF0Y2g6XG5cbioqRGVjb25zdHJ1Y3RpbmcgVGhpcyBQYXRjaDogQSBNZW50YWwgQ2hlY2tsaXN0KipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGluLiBGaXJzdCB0aGluZ3MgZmlyc3Q6ICpXaGF0KiBpcyB0aGlzIHBhdGNoIGV2ZW4gKnRyeWluZyogdG8gYWNjb21wbGlzaD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmRhbWVudGFsIGNoYW5nZS4gVGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdXN1YWxseSByZXRyYWNpbmcgdGhlIHN0ZXBzIHRoYXQgbGVkIHRvIHRoaXMgcG9pbnQuIExldCdzIHN0YXJ0IHdpdGggdGhlIGltbWVkaWF0ZSBjb250ZXh0OiBsb29raW5nIGF0IHRoZSBgZ2l0YCBoaXN0b3J5IG9yIHRoZSBjb21taXQgbWVzc2FnZSB0byBzZWUgaWYgdGhlcmUncyBhbnkgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvciByZWFzb25pbmcgcHJvdmlkZWQgYXJvdW5kIHRoYXQgc3BlY2lmaWMgaXRlcmF0aW9uIGludm9sdmluZyBgcG9ydC1cdTAwM2VtZ2xpc3RgLlxuXG5UaGVuLCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBhZmZlY3RzIHRoZSByZXN0IG9mIHRoZSBwcm9ncmFtLCBzbyBJIHdpbGwgc2NhbiB0aGUgY29kZSBiYXNlIHRvIGZpbmQgYWxsIHRoZSBwbGFjZXMgd2hlcmUgYHBvcnQtXHUwMDNlbWdsaXN0YCBpcyBhY3R1YWxseSBiZWluZyAqdXNlZCouIFNlZWluZyB0aGUgdXNhZ2UgcG9pbnRzIGlzIHRoZSBtb3N0IGltcG9ydGFudCBwYXJ0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTc1LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODowOS45NTAyMTM0MDhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzMxMTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZ2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JyaWRnZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz03ODk9c3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2Rlc3Ryb3lfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nYyAqZ2MpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTc5My1cXHRwZyA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCwgbWNhc3RfZ2MpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6Nzk0OlxcdFdBUk5fT04oIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZwZy1cXHUwMDNlbWdsaXN0KSk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy03OTUtXFx0V0FSTl9PTighaGxpc3RfZW1wdHkoXFx1MDAyNnBnLVxcdTAwM2VzcmNfbGlzdCkpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz04MDI9dm9pZCBicl9tdWx0aWNhc3RfZGVsX3BnKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXAsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTgxMS1cXHQvKiBLZWVwIC1cXHUwMDNlbmV4dCAoaGVsZCB1bmRlciBtdWx0aWNhc3RfbG9jaywgZnJlZWQgbGF0ZXIgYnkgdGhlIEdDIHdvcmspOlxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODEyOlxcdCAqIGEgcG9ydC1cXHUwMDNlbWdsaXN0IHRlYXJkb3duIHdhbGsgbWF5IGhhdmUgbGF0Y2hlZCB0aGlzIG5vZGUgYXMgaXRzIG5leHQsXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTMtXFx0ICogYW5kIGRlbGV0aW5nIG90aGVyIGdyb3VwcyBvZiB0aGUgc2FtZSBwb3J0IG11c3Qgbm90IHRydW5jYXRlIGl0Llxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODE0LVxcdCAqL1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODE1OlxcdGhsaXN0X2RlbF9pbml0X3JjdShcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04MTYtXFx0YnJfbXVsdGljYXN0X2VodF9jbGVhbl9zZXRzKHBnKTtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9ODM1PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg0MjpcXHQvKiBBIHRlYXJkb3duIHdhbGsgb3ZlciBwb3J0LVxcdTAwM2VtZ2xpc3QgY2FuIHJlYWNoIGEgZ3JvdXAgdGhhdCBhbiBlYXJsaWVyXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy04NDMtXFx0ICogaXRlcmF0aW9uIGFscmVhZHkgZGVsZXRlZCBhcyBhIHNpZGUgZWZmZWN0LiBJdCBpcyBvZmYgbXAtXFx1MDAzZXBvcnRzIGJ5XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg0NS1cXHQgKi9cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjg0NjpcXHRpZiAoaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnBnLVxcdTAwM2VtZ2xpc3QpKVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtODQ3LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9ODY2PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQoc3RydWN0IHRpbWVyX2xpc3QgKnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3NS1cXHRpZiAoIW5ldGlmX3J1bm5pbmcoYnItXFx1MDAzZWRldikgfHwgdGltZXJfcGVuZGluZyhcXHUwMDI2cGctXFx1MDAzZXRpbWVyKSB8fFxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6ODc2OlxcdCAgICBobGlzdF91bmhhc2hlZChcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCkgfHwgcGctXFx1MDAzZWZsYWdzIFxcdTAwMjYgTURCX1BHX0ZMQUdTX1BFUk1BTkVOVClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTg3Ny1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQwND1zdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXAoXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTE0NTItXFx0UkNVX0lOSVRfUE9JTlRFUihwLVxcdTAwM2VuZXh0LCBuZXh0KTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjE0NTM6XFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QsIFxcdTAwMjZwb3J0LVxcdTAwM2VtZ2xpc3QpO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMTQ1NC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9MTQ2ND12b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydF9ncm91cChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDY4LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MTQ2OTpcXHRobGlzdF9kZWxfaW5pdF9yY3UoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0xNDcwLVxcdGlmICghYnJfbXVsdGljYXN0X2lzX3N0YXJfZyhcXHUwMDI2cC1cXHUwMDNla2V5LmFkZHIpKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0xOTk5PXN0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3JleG1pdChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtMjAwOS1cXHRzcGluX2xvY2soXFx1MDAyNmJyLVxcdTAwM2VtdWx0aWNhc3RfbG9jayk7XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMDEwOlxcdGlmICghbmV0aWZfcnVubmluZyhici1cXHUwMDNlZGV2KSB8fCBobGlzdF91bmhhc2hlZChcXHUwMDI2cGctXFx1MDAzZW1nbGlzdCkgfHxcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwMTEtXFx0ICAgICFicl9vcHRfZ2V0KGJyLCBCUk9QVF9NVUxUSUNBU1RfRU5BQkxFRCkpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTIwNTk9dm9pZCBicl9tdWx0aWNhc3RfcG9ydF9jdHhfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LFxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMDg1LVxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2cG9ydC1cXHUwMDNlYnItXFx1MDAzZW11bHRpY2FzdF9sb2NrKTtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjIwODY6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnkocGcsIFxcdTAwMjZwb3J0LVxcdTAwM2VtZ2xpc3QsIG1nbGlzdClcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIwODctXFx0XFx0XFx0aWYgKHBnLVxcdTAwM2VrZXkuYWRkci52aWQgPT0gdmxhbi1cXHUwMDNldmlkKVxcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTM2PXZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIxNDMtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZici1cXHUwMDNlbXVsdGljYXN0X2xvY2spO1xcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MjE0NDpcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBuLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMTQ1LVxcdFxcdGJyX211bHRpY2FzdF9maW5kX2RlbF9wZyhiciwgcGcpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYz0yMTk1PXN0YXRpYyB2b2lkIF9fYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydF9jdHgoc3RydWN0IG5ldF9icmlkZ2VfbWNhc3RfcG9ydCAqcG1jdHgpXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTIyMDAtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzoyMjAxOlxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGcsIG4sIFxcdTAwMjZwbWN0eC1cXHUwMDNlcG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0yMjAyLVxcdFxcdGlmICghKHBnLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1EQl9QR19GTEFHU19QRVJNQU5FTlQpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jPTM3Mjc9YnJfbXVsdGljYXN0X2xlYXZlX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlX21jYXN0ICpicm1jdHgsXFxuLS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM3ODQtXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYzozNzg1OlxcdFxcdFxcdGlmICghaGxpc3RfdW5oYXNoZWQoXFx1MDAyNnAtXFx1MDAzZW1nbGlzdCkgXFx1MDAyNlxcdTAwMjZcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTM3ODYtXFx0XFx0XFx0ICAgICh0aW1lcl9wZW5kaW5nKFxcdTAwMjZwLVxcdTAwM2V0aW1lcikgP1xcbi0tXFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODE2LVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM6MzgxNzpcXHRcXHRpZiAoIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZwLVxcdTAwM2VtZ2xpc3QpIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYy0zODE4LVxcdFxcdCAgICAodGltZXJfcGVuZGluZyhcXHUwMDI2cC1cXHUwMDNldGltZXIpID9cXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmM9NDk1OT1pbnQgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMtNDk4MS1cXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jOjQ5ODI6XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdyb3VwLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcXG5uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jLTQ5ODMtXFx0XFx0XFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnksIEdGUF9BVE9NSUMpO1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MzU2PXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAge1xcbi0tXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMzY4LVxcdHN0cnVjdCB0aW1lcl9saXN0XFx0XFx0cmV4bWl0X3RpbWVyO1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjM2OTpcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdFxcdG1nbGlzdDtcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0zNzAtXFx0c3RydWN0IHJiX3Jvb3RcXHRcXHRcXHRlaHRfc2V0X3RyZWU7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaD0zOTI9c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC00MzEtXFx0dTMyXFx0XFx0XFx0XFx0bXVsdGljYXN0X2VodF9ob3N0c19jbnQ7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6NDMyOlxcdHN0cnVjdCBobGlzdF9oZWFkXFx0XFx0bWdsaXN0O1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTQzMy0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjg6MTAuMDY3NTMwMDgzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0OTY0Mzc3ODAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGFzIGlmIGl0IHdlcmUgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudGAgYW5kIFJDVSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCDigJMgc3BlY2lmaWNhbGx5IGxpbmUgNDk1OSBpbiBgYnJfbXVsdGljYXN0LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSdyZSBsZXZlcmFnaW5nIFJlYWQtQ29weS1VcGRhdGUgKFJDVSkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgYG1nbGlzdGAgZGF0YSBzdHJ1Y3R1cmUgaGVyZS4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgY29udGV4dCwgdGhhdCBgbWdsaXN0YCBpcyBhIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwIGxpc3QuIFRoZSBjb3JlIGlzc3VlLCBJJ20gZ3Vlc3NpbmcsIGlzIGNvbmN1cnJlbnQgYWNjZXNzIOKAkyBtdWx0aXBsZSByZWFkZXJzLCBwb3RlbnRpYWwgd3JpdGVycy4gUkNVIGlzIGEgbmF0dXJhbCBmaXQgZm9yIHRoaXMga2luZCBvZiBzY2VuYXJpbywgZXNwZWNpYWxseSB3aGVyZSByZWFkcyBhcmUgbXVjaCBtb3JlIGZyZXF1ZW50IHRoYW4gd3JpdGVzLCBhbmQgdGhlIHRvbGVyYW5jZSBmb3IgYSBzbGlnaHQgZGVsYXkgaW4gdXBkYXRlcyBpcyBhY2NlcHRhYmxlLiBUaGlzIGhpbnRzIHRoYXQgdXBkYXRlcyB0byB0aGUgbXVsdGljYXN0IGdyb3VwIG1lbWJlcnNoaXAgYXJlbid0IGNyaXRpY2FsIHRvIGJlIGltbWVkaWF0ZWx5IHJlZmxlY3RlZCBhY3Jvc3MgYWxsIHRocmVhZHMuIFdlIHNob3VsZCBzZWUgdGhlIHJlYWQgc2lkZSB1dGlsaXppbmcgYHJjdV9kZXJlZmVyZW5jZWAgb3Igc2ltaWxhciBwcmltaXRpdmVzIGFuZCB0aGUgd3JpdGUgc2lkZSB1c2luZyBgc3luY2hyb25pemVfcmN1YCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gdG8gd2FpdCBvdXQgYW55IHJlYWRlcnMgYmVmb3JlIG1vZGlmeWluZyB0aGUgbGlzdCBzYWZlbHkuIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIHBvaW50ZXIgbWFuaXB1bGF0aW9uIHRvIHZlcmlmeSBSQ1UncyBhcHByb3ByaWF0ZSB1c2UuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjg6MzUuMDMxOTExMTY3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ5NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ5NzA6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuNDk3MTpcXHRcXG40OTcyOlxcdFxcdHBvcnQgPSBicl9wb3J0X2dldF9yY3UoZGV2KTtcXG40OTczOlxcdFxcdGlmICghcG9ydCB8fCAhcG9ydC1cXHUwMDNlYnIpXFxuNDk3NDpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG40OTc1OlxcdFxcbjQ5NzY6XFx0XFx0YnIgPSBwb3J0LVxcdTAwM2VicjtcXG40OTc3OlxcdFxcbjQ5Nzg6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9ydCwgXFx1MDAyNmJyLVxcdTAwM2Vwb3J0X2xpc3QsIGxpc3QpIHtcXG40OTc5OlxcdFxcdFxcdGlmICghcG9ydC1cXHUwMDNlZGV2IHx8IHBvcnQtXFx1MDAzZWRldiA9PSBkZXYpXFxuNDk4MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG40OTgxOlxcdFxcbjQ5ODI6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGdyb3VwLCBcXHUwMDI2cG9ydC1cXHUwMDNlbWdsaXN0LCBtZ2xpc3QpIHtcXG40OTgzOlxcdFxcdFxcdFxcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5LCBHRlBfQVRPTUlDKTtcXG40OTg0OlxcdFxcdFxcdFxcdGlmICghZW50cnkpXFxuNDk4NTpcXHRcXHRcXHRcXHRcXHRnb3RvIHVubG9jaztcXG40OTg2OlxcdFxcbjQ5ODc6XFx0XFx0XFx0XFx0ZW50cnktXFx1MDAzZWFkZHIgPSBncm91cC1cXHUwMDNla2V5LmFkZHI7XFxuNDk4ODpcXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2ZW50cnktXFx1MDAzZWxpc3QsIGJyX2lwX2xpc3QpO1xcbjQ5ODk6XFx0XFx0XFx0XFx0Y291bnQrKztcXG40OTkwOlxcdFxcdFxcdH1cXG40OTkxOlxcdFxcdH1cXG40OTkyOlxcdFxcbjQ5OTM6XFx0dW5sb2NrOlxcbjQ5OTQ6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuNDk5NTpcXHRcXHRyZXR1cm4gY291bnQ7XFxuNDk5NjpcXHR9XFxuNDk5NzpcXHRFWFBPUlRfU1lNQk9MX0dQTChicl9tdWx0aWNhc3RfbGlzdF9hZGphY2VudCk7XFxuNDk5ODpcXHRcXG40OTk5OlxcdC8qKlxcbjUwMDA6XFx0ICogYnJfbXVsdGljYXN0X2hhc19xdWVyaWVyX2FueXdoZXJlIC0gQ2hlY2tzIGZvciBhIHF1ZXJpZXIgb24gYSBicmlkZ2VcXG41MDAxOlxcdCAqIEBkZXY6IFRoZSBicmlkZ2UgcG9ydCBwcm92aWRpbmcgdGhlIGJyaWRnZSBvbiB3aGljaCB0byBjaGVjayBmb3IgYSBxdWVyaWVyXFxuNTAwMjpcXHQgKiBAcHJvdG86IFRoZSBwcm90b2NvbCBmYW1pbHkgdG8gY2hlY2sgZm9yOiBJR01QIC1cXHUwMDNlIEVUSF9QX0lQLCBNTEQgLVxcdTAwM2UgRVRIX1BfSVBWNlxcbjUwMDM6XFx0ICpcXG41MDA0OlxcdCAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBpbnRlcmZhY2UgaGFzIGEgYnJpZGdlIG9uIHRvcCBhbmQgaWYgc28gcmV0dXJuc1xcbjUwMDU6XFx0ICogdHJ1ZSBpZiBhIHZhbGlkIHF1ZXJpZXIgZXhpc3RzIGFueXdoZXJlIG9uIHRoZSBicmlkZ2VkIGxpbmsgbGF5ZXIuXFxuNTAwNjpcXHQgKiBPdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cXG41MDA3OlxcdCAqL1xcbjUwMDg6XFx0Ym9vbCBicl9tdWx0aWNhc3RfaGFzX3F1ZXJpZXJfYW55d2hlcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHByb3RvKVxcbjUwMDk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODozNS4wMzIxODIwNTZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ0MjM2MDE2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBHcm91cCBMaXN0IGluIHRoZSBCcmlkZ2UgQ29kZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gbG9va2luZyBhdCBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgIGFuZCBzcGVjaWZpY2FsbHksIHRoYXQgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdWAgbG9vcCwgaXRlcmF0aW5nIHRocm91Z2ggYHBvcnQtXHUwMDNlbWdsaXN0YC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIGluIGBicl9tdWx0aWNhc3RfbmV3X3BvcnRfZ3JvdXBgIGp1c3QgdXNlZCBgaGxpc3RfYWRkX2hlYWQoXHUwMDI2cC1cdTAwM2VtZ2xpc3QsIFx1MDAyNnBvcnQtXHUwMDNlbWdsaXN0KWAuIEFuZCBgYnJfbXVsdGljYXN0X2RlbF9wb3J0X2dyb3VwYCBzaW1wbHkgZGVsZXRlZCBpdCB3aXRoIGBobGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZW1nbGlzdClgIGZvbGxvd2VkIGltbWVkaWF0ZWx5IGJ5IGEgYGtmcmVlKHApYC5cblxuVGhhdCdzIGEgY2xhc3NpYyBSQ1UgY29uY3VycmVuY3kgaXNzdWUgcmlnaHQgdGhlcmUhIEl0IG1lYW5zIGNvbmN1cnJlbnQgUkNVIHJlYWRlcnMgaW4gYGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50YCBjb3VsZCB2ZXJ5IGVhc2lseSBydW4gaW50byBwcm9ibGVtcy4gVGhleSBtaWdodCByZWFkIGBwb3J0LVx1MDAzZW1nbGlzdGAgd2l0aG91dCB0aGUgbmVjZXNzYXJ5IG1lbW9yeSBiYXJyaWVycywgbGVhZGluZyB0byBpbmNvbnNpc3RlbnQgZGF0YS4gV29yc2UsIHRoZXkgY291bGQgZW5jb3VudGVyIGEgZGFuZ2xpbmcgcG9pbnRlciBiZWNhdXNlIGBwYCB3YXMgZnJlZWQgaW1tZWRpYXRlbHkgd2l0aCBga2ZyZWUocClgIHJhdGhlciB0aGFuIGBrZnJlZV9yY3UocCwgcmN1KWAsIHdoaWNoIGlzIGEgdGV4dGJvb2sgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eSFcblxuVGhpcyBwYXRjaCBpcyBvYnZpb3VzbHkgYWRkcmVzc2luZyB0aGlzIGJ5IHVzaW5nIGBobGlzdF9hZGRfaGVhZF9yY3VgIGluc3RlYWQuIEkgZXhwZWN0IHRoYXQgdGhpcyBlbnN1cmVzIHRoZSByZXF1aXJlZCBtZW1vcnkgYmFycmllcnMuIEl0IG1ha2VzIHN1cmUgdGhhdCBhbGwgdGhlIGluaXRpYWxpemVkIGZpZWxkcyBvZiBgcGAgYXJlIHZpc2libGUgKmJlZm9yZSogYHBgIGlzIGxpbmtlZCBpbnRvIGBwb3J0LVx1MDAzZW1nbGlzdGAuIFRoaXMgaXMgY3JpdGljYWwuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBtZW1iZXJzIG9mIGBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwYCBpbiBgYnJfcHJpdmF0ZS5oYCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHN1YnRsZSBpc3N1ZXMgaGVyZSB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjg6NDAuNDc0NTQ2NDU5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYnJpZGdlL2JyX3ByaXZhdGUuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTU6XFx0XFxuIDM1NjpcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIHtcXG4gMzU3OlxcdFxcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgX19yY3UgKm5leHQ7XFxuIDM1ODpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwX3NnX2tleSBrZXk7XFxuIDM1OTpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0XFx0ZXRoX2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG4gMzYwOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRcXHRmbGFncztcXG4gMzYxOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRcXHRmaWx0ZXJfbW9kZTtcXG4gMzYyOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRcXHRncnBfcXVlcnlfcmV4bWl0X2NudDtcXG4gMzYzOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRcXHRydF9wcm90b2NvbDtcXG4gMzY0OlxcdFxcbiAzNjU6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWRcXHRcXHRzcmNfbGlzdDtcXG4gMzY2OlxcdFxcdHVuc2lnbmVkIGludFxcdFxcdFxcdHNyY19lbnRzO1xcbiAzNjc6XFx0XFx0c3RydWN0IHRpbWVyX2xpc3RcXHRcXHR0aW1lcjtcXG4gMzY4OlxcdFxcdHN0cnVjdCB0aW1lcl9saXN0XFx0XFx0cmV4bWl0X3RpbWVyO1xcbiAzNjk6XFx0XFx0c3RydWN0IGhsaXN0X25vZGVcXHRcXHRtZ2xpc3Q7XFxuIDM3MDpcXHRcXHRzdHJ1Y3QgcmJfcm9vdFxcdFxcdFxcdGVodF9zZXRfdHJlZTtcXG4gMzcxOlxcdFxcdHN0cnVjdCByYl9yb290XFx0XFx0XFx0ZWh0X2hvc3RfdHJlZTtcXG4gMzcyOlxcdFxcbiAzNzM6XFx0XFx0c3RydWN0IHJoYXNoX2hlYWRcXHRcXHRyaG5vZGU7XFxuIDM3NDpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nY1xcdG1jYXN0X2djO1xcbiAzNzU6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0XFx0cmN1O1xcbiAzNzY6XFx0fTtcXG4gMzc3OlxcdFxcbiAzNzg6XFx0c3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5IHtcXG4gMzc5OlxcdFxcdHN0cnVjdCByaGFzaF9oZWFkXFx0XFx0cmhub2RlO1xcbiAzODA6XFx0XFx0c3RydWN0IG5ldF9icmlkZ2VcXHRcXHQqYnI7XFxuIDM4MTpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICpwb3J0cztcXG4gMzgyOlxcdFxcdHN0cnVjdCBicl9pcFxcdFxcdFxcdGFkZHI7XFxuIDM4MzpcXHRcXHRib29sXFx0XFx0XFx0XFx0aG9zdF9qb2luZWQ7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdHN0cnVjdCB0aW1lcl9saXN0XFx0XFx0dGltZXI7XFxuIDM4NjpcXHRcXHRzdHJ1Y3QgaGxpc3Rfbm9kZVxcdFxcdG1kYl9ub2RlO1xcbiAzODc6XFx0XFxuIDM4ODpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZV9tY2FzdF9nY1xcdG1jYXN0X2djO1xcbiAzODk6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0XFx0cmN1O1xcbiAzOTA6XFx0fTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCB7XFxuIDM5MzpcXHRcXHRzdHJ1Y3QgbmV0X2JyaWRnZVxcdFxcdCpicjtcXG4gMzk0OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlXFx0XFx0KmRldjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6Mjg6NDAuNDc0NzEwMDk5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY5NzIxOTE1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQnJpZGdpbmcgTXVsdGljYXN0IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggZm9jdXNlcyBzcGVjaWZpY2FsbHkgb24gbXVsdGljYXN0IGdyb3VwIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBicmlkZ2UgY29kZS4gTXkgcHJpbWFyeSBjb25jZXJuLCBnaXZlbiBteSBleHBlcnRpc2UsIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1pdGlnYXRlcyBhbnkgbWVtb3J5IHNhZmV0eSBpc3N1ZXMsIHBhcnRpY3VsYXJseSB0aG9zZSBLTVNBTiB3b3VsZCBiZSByZXNwb25zaWJsZSBmb3IgY2F0Y2hpbmcuXG5cbkZpcnN0LCBJIGFuYWx5emVkIHRoZSBjb2RlIGNoYW5nZXMuIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCBtb2RpZmljYXRpb25zIHRvIGBicl9tdWx0aWNhc3QuY2AgYW5kIHNwZWNpZmljYWxseSBpbnZvbHZlcyBga3phbGxvY19vYmpgLCB0aGUgdXNlIG9mIFJDVSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyAoYFJDVV9JTklUX1BPSU5URVJgLCBgaGxpc3RfZGVsX2luaXRfcmN1YCwgYGtmcmVlX3JjdWApLCBhbmQgbW9kaWZpY2F0aW9ucyB0byB0aGUgaGFuZGxpbmcgb2YgYHAtXHUwMDNlbmV4dGAgYW5kIGBwLVx1MDAzZW1nbGlzdGAuXG5cbkFuYWx5emluZyB0aGUgY2hhbmdlcyBJIHNlZTpcblxuMS4gIGBremFsbG9jX29iamAgaXMgdXNlZCBmb3IgYWxsb2NhdGlvbi4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyB6ZXJvLWluaXRpYWxpemVkIG1lbW9yeS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuXG4yLiAgVGhlIGBSQ1VfSU5JVF9QT0lOVEVSYCBtYWNybyByZXBsYWNlcyB0aGUgc3RhbmRhcmQgcG9pbnRlciBhc3NpZ25tZW50IGFuZCBpcyBub3cgYmVsb3cgdGhlIGBldGhfYWRkcmAgaW5pdGlhbGl6YXRpb24gYWxvbmcgd2l0aCBgaGxpc3RfYWRkX2hlYWRfcmN1YC4gVGhpcyBpcyBhIGNsZWFyIFJDVSBzeW5jaHJvbml6YXRpb24gY2hhbmdlLlxuMy4gIFRoZSByZW1vdmFsIGFuZCBmcmVlaW5nIG9mIG11bHRpY2FzdCBncm91cHMgaGF2ZSBhbHNvIGJlZW4gdXBkYXRlZCB0byB1c2UgdGhlIFJDVSBjb3VudGVycGFydHMuIGBobGlzdF9kZWxfaW5pdF9yY3VgIGluc3RlYWQgb2YgYGhsaXN0X2RlbF9pbml0YCBhbmQgYGtmcmVlX3JjdWAgaW5zdGVhZCBvZiBga2ZyZWVgLlxuXG5Ob3csIGV2YWx1YXRpbmcgYWdhaW5zdCBLTVNBTiBjcml0ZXJpYS4gRG9lcyBpdCBsZWFrIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2U/IE5vLiBJcyB0aGVyZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGE/IE5vLiBJcyB0aGVyZSBhbGxvY2F0aW9uIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IE5vLCBiZWNhdXNlIGBremFsbG9jX29iamAgemVyb2VzIHRoZSBtZW1vcnkuIEFueSBpc3N1ZXMgd2l0aCBib3VuZHMgY2hlY2tpbmc/IE5vLlxuXG5XaGF0IGlzIHRoZSBwb2ludCBvZiB0aGUgcGF0Y2g/IEl0IGxvb2tzIGxpa2UgdGhpcyBmaXhlcyBSQ1Ugc3luY2hyb25pemF0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHVzZS1hZnRlci1mcmVlIChVQUYpIGNvbmRpdGlvbnMgaW4gdGhlIGBwb3J0LVx1MDAzZW1nbGlzdGAgaXRlcmF0aW9uLiBUaGUgcmFjZSBjb25kaXRpb25zIGFyZSBsaWtlbHkgZXhwb3NlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgZGVidWdnZXJzIGxpa2UgUFJPVkVcXF9SQ1UgYW5kIEtBU0FOLiBJdCdzIGFib3V0IG1lbW9yeSBvcmRlcmluZyBhbmQgZW5zdXJpbmcgcHJvcGVyIFJDVSBncmFjZSBwZXJpb2RzLiBObyBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLlxuXG5JJ3ZlIGFsc28gZG91YmxlLWNoZWNrZWQgZm9yIGFueSBvdGhlciBtb2RpZmljYXRpb25zIHRvIHRoZSBhZmZlY3RlZCBjb2RlIGFuZCBmb3IgdGhlIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLiBJIHNlZSBub25lLiBObyBpbmZvcm1hdGlvbiBsZWFrIGZyb20gdGhlIGtlcm5lbCB0byB1c2VyIHNwYWNlIGVpdGhlci5cblxuVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmA6IGZhbHNlLiBUaGUgcGF0Y2ggaXMgYWJvdXQgYWRkcmVzc2luZyBSQ1Ugc3luY2hyb25pemF0aW9uIGlzc3VlcywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaW4gYSBtdWx0aXRocmVhZGVkIGVudmlyb25tZW50LiBUaGVzZSBidWdzIGFyZSBjb3JyZWN0bHkgaGFuZGxlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2Vycy4gS01TQU4gaXMgbm90IHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEyNSwiT3V0cHV0VG9rZW5zIjoyMjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoyODo0Ny40NDY5MDUwOTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZ3JvdXAgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyB0aGF0IGBobGlzdF9hZGRfaGVhZF9yY3VgLCBgUkNVX0lOSVRfUE9JTlRFUmAsIGBobGlzdF9kZWxfaW5pdF9yY3VgLCBhbmQgYGtmcmVlX3JjdWAgYXJlIHVzZWQgY29ycmVjdGx5IGZvciBgcG9ydC1cXHUwMDNlbWdsaXN0YCBhbmQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgLCBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgcmVhZGVycyAoc3VjaCBhcyBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgKSBmcm9tIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3Igb2JzZXJ2aW5nIHBhcnRpYWxseSBwdWJsaXNoZWQgZW50cmllcy5cXG5cXG5UaGUgYWxsb2NhdGVkIGBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwYCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBhc3NpZ25lZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgb3ZlcmZsb3dzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIENvbmN1cnJlbmN5IGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBSQ1UgZGVidWdnaW5nIHRvb2xzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIFJDVSBzeW5jaHJvbml6YXRpb24gYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBpbiBicmlkZ2UgbXVsdGljYXN0IHBvcnQgZ3JvdXAgaGFuZGxpbmcuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyB0aGF0IGBobGlzdF9hZGRfaGVhZF9yY3VgLCBgUkNVX0lOSVRfUE9JTlRFUmAsIGBobGlzdF9kZWxfaW5pdF9yY3VgLCBhbmQgYGtmcmVlX3JjdWAgYXJlIHVzZWQgY29ycmVjdGx5IGZvciBgcG9ydC1cXHUwMDNlbWdsaXN0YCBhbmQgYHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXBgLCBwcmV2ZW50aW5nIGNvbmN1cnJlbnQgcmVhZGVycyAoc3VjaCBhcyBgYnJfbXVsdGljYXN0X2xpc3RfYWRqYWNlbnRgKSBmcm9tIGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgb3Igb2JzZXJ2aW5nIHBhcnRpYWxseSBwdWJsaXNoZWQgZW50cmllcy5cXG5cXG5UaGUgYWxsb2NhdGVkIGBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwYCBzdHJ1Y3R1cmUgaXMgemVyby1pbml0aWFsaXplZCB1c2luZyBga3phbGxvY19vYmpgLCBhbmQgYWxsIGZpZWxkcyBhcmUgZXhwbGljaXRseSBhc3NpZ25lZC4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidWZmZXIgb3ZlcmZsb3dzLCBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UuIENvbmN1cnJlbmN5IGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBSQ1UgZGVidWdnaW5nIHRvb2xzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjftkl[1] Phase: Succeeded StartedAt: 2026-09-04 14:28:59 +0000 UTC FinishedAt: 2026-09-04 14:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 14:28:59 +0000 UTC FinishedAt: 2026-09-04 14:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2] Phase: Succeeded StartedAt: 2026-09-04 14:28:59 +0000 UTC FinishedAt: 2026-09-04 18:10:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 14:28:59 +0000 UTC FinishedAt: 2026-09-04 18:10:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 14:28:59 +0000 UTC FinishedAt: 2026-09-04 14:29:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 14:28:59 +0000 UTC FinishedAt: 2026-09-04 14:29:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjftkl/series-workflowjftkl-convert-artifact-1650754139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 14:29:09 +0000 UTC FinishedAt: 2026-09-04 14:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 14:29:09 +0000 UTC FinishedAt: 2026-09-04 14:47:19 +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:*09eaf4e3-d154-4379-a64d-3e1a6a55bf74,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-workflowjftkl/series-workflowjftkl-convert-artifact-1650754139/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": "cc0df59f-f4e7-4472-8627-e4c46f8321ea", "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-workflowjftkl/series-workflowjftkl-build-action-2823569305/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 14:29:09 +0000 UTC FinishedAt: 2026-09-04 14:47:09 +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:*09eaf4e3-d154-4379-a64d-3e1a6a55bf74,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-workflowjftkl/series-workflowjftkl-convert-artifact-1650754139/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": "cc0df59f-f4e7-4472-8627-e4c46f8321ea", "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-workflowjftkl/series-workflowjftkl-build-action-2823569305/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 14:47:19 +0000 UTC FinishedAt: 2026-09-04 14:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 14:47:19 +0000 UTC FinishedAt: 2026-09-04 14:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 14:47:19 +0000 UTC FinishedAt: 2026-09-04 14:47:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 14:47:19 +0000 UTC FinishedAt: 2026-09-04 14:47:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjftkl/series-workflowjftkl-convert-artifact-547788466/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 14:47:29 +0000 UTC FinishedAt: 2026-09-04 14:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 14:47:29 +0000 UTC FinishedAt: 2026-09-04 14:49:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cc0df59f-f4e7-4472-8627-e4c46f8321ea,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-workflowjftkl/series-workflowjftkl-build-action-2823569305/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-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 14:49:24 +0000 UTC FinishedAt: 2026-09-04 14:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 14:49:24 +0000 UTC FinishedAt: 2026-09-04 14:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 14:49:24 +0000 UTC FinishedAt: 2026-09-04 15:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 14:49:24 +0000 UTC FinishedAt: 2026-09-04 15:05:29 +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:*09eaf4e3-d154-4379-a64d-3e1a6a55bf74,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-workflowjftkl/series-workflowjftkl-convert-artifact-547788466/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": "959f050e-27df-4656-847b-ee21c460f4d6", "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-workflowjftkl/series-workflowjftkl-build-action-1189316678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 14:49:24 +0000 UTC FinishedAt: 2026-09-04 15:05:19 +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:*09eaf4e3-d154-4379-a64d-3e1a6a55bf74,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-workflowjftkl/series-workflowjftkl-convert-artifact-547788466/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": "959f050e-27df-4656-847b-ee21c460f4d6", "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-workflowjftkl/series-workflowjftkl-build-action-1189316678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 15:05:29 +0000 UTC FinishedAt: 2026-09-04 15:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 15:05:29 +0000 UTC FinishedAt: 2026-09-04 15:05:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 15:05:29 +0000 UTC FinishedAt: 2026-09-04 15:07:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 15:05:29 +0000 UTC FinishedAt: 2026-09-04 15:07: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:*959f050e-27df-4656-847b-ee21c460f4d6,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-workflowjftkl/series-workflowjftkl-build-action-1189316678/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-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 15:07:26 +0000 UTC FinishedAt: 2026-09-04 18:10:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 15:07:26 +0000 UTC FinishedAt: 2026-09-04 18:10:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"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:*cc0df59f-f4e7-4472-8627-e4c46f8321ea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*959f050e-27df-4656-847b-ee21c460f4d6,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-workflowjftkl/series-workflowjftkl-build-action-2823569305/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-workflowjftkl/series-workflowjftkl-build-action-1189316678/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 15:07:26 +0000 UTC FinishedAt: 2026-09-04 15:07:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 15:07:26 +0000 UTC FinishedAt: 2026-09-04 15:07:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"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-workflowjftkl/series-workflowjftkl-convert-artifact-2006005767/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 15:07:26 +0000 UTC FinishedAt: 2026-09-04 15:07:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 15:07:26 +0000 UTC FinishedAt: 2026-09-04 15:07:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 15:07:26 +0000 UTC FinishedAt: 2026-09-04 15:07:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 15:07:36 +0000 UTC FinishedAt: 2026-09-04 18:10:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjftkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_multicast_new_port_group","br_multicast_del_port_group"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["BRIDGE","BRIDGE_IGMP_SNOOPING"],"series_id":"fec8cfcf-e4d8-4bca-8c06-5998755fcf56","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 15:07:36 +0000 UTC FinishedAt: 2026-09-04 18:10:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cc0df59f-f4e7-4472-8627-e4c46f8321ea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*959f050e-27df-4656-847b-ee21c460f4d6,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-workflowjftkl/series-workflowjftkl-build-action-2823569305/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-workflowjftkl/series-workflowjftkl-build-action-1189316678/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-workflowjftkl/series-workflowjftkl-convert-artifact-2006005767/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,}