Name: series-workflowt6d4h Phase: Succeeded StartedAt: 2026-07-26 06:51:10 +0000 UTC FinishedAt: 2026-07-26 12:00:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[0] Phase: Succeeded StartedAt: 2026-07-26 06:51:10 +0000 UTC FinishedAt: 2026-07-26 07:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 06:51:10 +0000 UTC FinishedAt: 2026-07-26 07:14:17 +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": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_ISOTP", "CAN_DEV", "CAN_VCAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_ISOTP", "CAN_DEV", "CAN_VCAN" ], "series_id": "6c2c9f79-d14c-4e6c-bc94-862a7a894eab" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "isotp_sendmsg", "isotp_bind", "isotp_release", "isotp_poll", "isotp_rcv", "isotp_rcv_echo" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7Q0FOX0RFViYjMzQ7LAogICAgJiMzNDtDQU5fVkNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lzb3RwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXNvdHBfYmluZCYjMzQ7LAogICAgJiMzNDtpc290cF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2lzb3RwX3BvbGwmIzM0OywKICAgICYjMzQ7aXNvdHBfcmN2JiMzNDssCiAgICAmIzM0O2lzb3RwX3Jjdl9lY2hvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDQU4gSVNPVFAgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gZml4IGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBUWC9SWCBzdGF0ZSBoYW5kbGluZyBhbmQgdHJhbnNmZXIgZ2VuZXJhdGlvbiB0cmFja2luZy4gSXQgaW50cm9kdWNlcyBhIG5ldyB0eF9yZXN1bHQgYXJyYXkgYW5kIHVzZXMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgZm9yIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgdGhlIElTT1RQIHByb3RvY29sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDI5NTI3MWQxOTc5NzM1MWIzNmMzY2M1MGY3Y2RhM2IxMzE3YjBlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDA3OjEyOjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jYW4vaXNvdHAuYyBiL25ldC9jYW4vaXNvdHAuY1xuaW5kZXggNTRiZWNhZjY4OThmMTMuLjFmMTFjNjZiMzQzYzg2IDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9pc290cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2FuL2lzb3RwLmNcbkBAIC0xMjcsNiAmIzQzOzEyNywxNSBAQCBNT0RVTEVfUEFSTV9ERVNDKG1heF9wZHVfc2l6ZSwgXCYjMzQ7bWF4aW11bSBpc290cCBwZHUgc2l6ZSAoZGVmYXVsdCBcJiMzNDtcbiAjZGVmaW5lIElTT1RQX0ZDX1RJTUVPVVQgMVx0LyogMSBzZWMgKi9cbiAjZGVmaW5lIElTT1RQX0VDSE9fVElNRU9VVCAyXHQvKiAyIHNlY3MgKi9cbiBcbiYjNDM7Lyogc28tXHUwMDNldHhfcmVzdWx0W3NvLVx1MDAzZXR4X2dlbiAlIElTT1RQX1RYX1JFU1VMVF9TTE9UU10gaG9sZHMgdGhlIHBhY2tlZCB2YWx1ZVxuJiM0MzsgKiAoZXJyIFx1MDAzY1x1MDAzYyBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMgfCBnZW4pIGZvciBlYWNoIHR4IGdlbmVyYXRpb24gc2xvdCwgc28gaXRcbiYjNDM7ICogY2FuIGJlIGhhbmRsZWQgd2l0aCBhIHNpbmdsZSBSRUFEX09OQ0UoKS9XUklURV9PTkNFKCkgYWNjZXNzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBJU09UUF9UWF9SRVNVTFRfU0xPVFMgNFxuJiM0MzsjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUyAyNFxuJiM0MzsjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSyAoKDFVIFx1MDAzY1x1MDAzYyBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMpIC0gMSlcbiYjNDM7I2RlZmluZSBJU09UUF9UWF9SRVNVTFRfRVJSX01BU0sgMHhGRlxuJiM0MztcbiBlbnVtIHtcbiBcdElTT1RQX0lETEUgPSAwLFxuIFx0SVNPVFBfV0FJVF9GSVJTVF9GQyxcbkBAIC0xNjYsNyAmIzQzOzE3NSw4IEBAIHN0cnVjdCBpc290cF9zb2NrIHtcbiBcdHUzMiBmb3JjZV90eF9zdG1pbjtcbiBcdHUzMiBmb3JjZV9yeF9zdG1pbjtcbiBcdHUzMiBjZmVjaG87IC8qIGNvbnNlY3V0aXZlIGZyYW1lIGVjaG8gdGFnICovXG4tXHR1MzIgdHhfZ2VuOyAvKiBnZW5lcmF0aW9uLCBidW1wZWQgcGVyIG5ldyB0eCB0cmFuc2ZlciAqL1xuJiM0MztcdHUzMiB0eF9nZW47IC8qIHRyYW5zZmVyIGdlbmVyYXRpb24sIGluY3JlYXNlZCBwZXIgbmV3IHR4IHRyYW5zZmVyICovXG4mIzQzO1x0dTMyIHR4X3Jlc3VsdFtJU09UUF9UWF9SRVNVTFRfU0xPVFNdOyAvKiBwZXItZ2VuZXJhdGlvbiByZXN1bHQgc2xvdHMgKi9cbiBcdHN0cnVjdCB0cGNvbiByeCwgdHg7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vdGlmaWVyO1xuIFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcbkBAIC0xNzcsNiAmIzQzOzE4Nyw2NSBAQCBzdGF0aWMgTElTVF9IRUFEKGlzb3RwX25vdGlmaWVyX2xpc3QpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXNvdHBfbm90aWZpZXJfbG9jayk7XG4gc3RhdGljIHN0cnVjdCBpc290cF9zb2NrICppc290cF9idXN5X25vdGlmaWVyO1xuIFxuJiM0MzsvKiBpbmNyZWFzZSAoMjQgYml0KSB0eCBnZW5lcmF0aW9uIHZhbHVlICovXG4mIzQzO3N0YXRpYyB1MzIgaXNvdHBfaW5jX3R4X2dlbih1MzIgZ2VuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChnZW4gJiM0MzsgMSkgXHUwMDI2IElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyogc3RvcmUgOCBiaXQgZXJyb3IgYW5kIDI0IGJpdCB0eCBnZW5lcmF0aW9uIHZhbHVlcyBpbiBwYWNrZWQgdTMyIGVsZW1lbnQgKi9cbiYjNDM7c3RhdGljIHUzMiBpc290cF9wYWNrX3R4X3Jlc3VsdCh1MzIgZ2VuLCBpbnQgZXJyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGdlbiB8ICgodTMyKWVyciBcdTAwM2NcdTAwM2MgSVNPVFBfVFhfUkVTVUxUX0dFTl9CSVRTKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZ2V0IHRoZSAyNCBiaXQgdHggZ2VuZXJhdGlvbiB2YWx1ZSBmcm9tIHRoZSB0eCByZXN1bHQgKi9cbiYjNDM7c3RhdGljIHUzMiBpc290cF9nZXRfdHhfZ2VuKHUzMiBnZW5fZXJyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGdlbl9lcnIgXHUwMDI2IElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZ2V0IHRoZSA4IGJpdCBlcnJvciB2YWx1ZSBmcm9tIHRoZSB0eCByZXN1bHQgKi9cbiYjNDM7c3RhdGljIHUzMiBpc290cF9nZXRfdHhfZXJyKHUzMiBnZW5fZXJyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChnZW5fZXJyIFx1MDAzZVx1MDAzZSBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMpIFx1MDAyNiBJU09UUF9UWF9SRVNVTFRfRVJSX01BU0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHN0b3JlIHRyYW5zZmVyIHJlc3VsdCBpbiBwZXItZ2VuZXJhdGlvbiU0IHNvLVx1MDAzZXR4X3Jlc3VsdFtdIHNsb3QgKi9cbiYjNDM7c3RhdGljIHZvaWQgaXNvdHBfc2V0X3R4X3Jlc3VsdChzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHUzMiBnZW4sIGludCBlcnIpXG4mIzQzO3tcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4X3Jlc3VsdFtnZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdLFxuJiM0MztcdFx0ICAgaXNvdHBfcGFja190eF9yZXN1bHQoZ2VuLCBlcnIpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZmV0Y2ggdGhlIHJlc3VsdCByZWNvcmRlZCBmb3IgJiMzOTtnZW4mIzM5OywgYXMgYSAobmVnYXRpdmUpIGVycm5vICgwIGZvciBzdWNjZXNzKSAqL1xuJiM0MztzdGF0aWMgaW50IGlzb3RwX2dldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJlc3VsdCA9IFJFQURfT05DRShzby1cdTAwM2V0eF9yZXN1bHRbZ2VuICUgSVNPVFBfVFhfUkVTVUxUX1NMT1RTXSk7XG4mIzQzO1xuJiM0MztcdGlmIChpc290cF9nZXRfdHhfZ2VuKHJlc3VsdCkgIT0gZ2VuKSB7XG4mIzQzO1x0XHRwcl9ub3RpY2Vfb25jZShcJiMzNDtjYW4taXNvdHA6IHR4X3Jlc3VsdFtdIHNsb3QgcmV1c2VkIGJlZm9yZSByZWFkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHQvKiByZXBvcnQgZmFpbHVyZSByYXRoZXIgdGhhbiByaXNrIGEgZmFsc2Ugc3VjY2VzcyAqL1xuJiM0MztcdFx0cmV0dXJuIC1FQ09NTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtKGlzb3RwX2dldF90eF9lcnIocmVzdWx0KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHRydWUgaWYgZG9uZSwgc2h1dCBkb3duIG9yIHN1cGVyc2VkZWQgKCYjMzk7Z2VuJiMzOTsgaXMgbm8gbG9uZ2VyIHRoZSBhY3RpdmVcbiYjNDM7ICogdHJhbnNmZXIpLiBSZWFkcyB0eC5zdGF0ZSBmaXJzdCAoYWNxdWlyZSkgc28gdHhfZ2VuL3R4X3Jlc3VsdCByZWFkc1xuJiM0MzsgKiBiZWxvdyBzZWUgYXQgbGVhc3Qgd2hhdCB0aGF0IHN0YXRlIHdyaXRlIHB1Ymxpc2hlZCAoY29tbW9uIHNlcXVlbmNlKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGlzb3RwX3R4X2dlbl9kb25lKHN0cnVjdCBpc290cF9zb2NrICpzbywgdTMyIGdlbilcbiYjNDM7e1xuJiM0MztcdC8qIHJlYWQgdHguc3RhdGUgZmlyc3QgZm9yIHRoZSBjb21tb24gc2VxdWVuY2UgKi9cbiYjNDM7XHR1MzIgc3RhdGUgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0YXRlID09IElTT1RQX0lETEUgfHwgc3RhdGUgPT0gSVNPVFBfU0hVVERPV04gfHxcbiYjNDM7XHQgICAgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgIT0gZ2VuO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlzb3RwX3NvY2sgKmlzb3RwX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRyZXR1cm4gKHN0cnVjdCBpc290cF9zb2NrICopc2s7XG5AQCAtMTk5LDcgJiM0MzsyNjgsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbiBcdFx0XHRcdFx0ICAgICByeHRpbWVyKTtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNvLVx1MDAzZXNrO1xuIFxuLVx0aWYgKHNvLVx1MDAzZXJ4LnN0YXRlID09IElTT1RQX1dBSVRfREFUQSkge1xuJiM0MztcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNlcnguc3RhdGUpID09IElTT1RQX1dBSVRfREFUQSkge1xuIFx0XHQvKiB3ZSBkaWQgbm90IGdldCBuZXcgZGF0YSBmcmFtZXMgaW4gdGltZSAqL1xuIFxuIFx0XHQvKiByZXBvcnQgJiMzOTtjb25uZWN0aW9uIHRpbWVkIG91dCYjMzk7ICovXG5AQCAtMjA4LDcgJiM0MzsyNzcsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbiBcdFx0XHRza19lcnJvcl9yZXBvcnQoc2spO1xuIFxuIFx0XHQvKiByZXNldCByeCBzdGF0ZSAqL1xuLVx0XHRzby1cdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XG4mIzQzO1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcdH1cbiBcbiBcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbkBAIC0zNzIsMjAgJiM0Mzs0NDEsMTkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKTtcbiBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mYyhzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZzby1cdTAwM2VzaztcbiYjNDM7XHRpbnQgdHhfZXJyID0gRUJBRE1TRzsgLyogZGVmYXVsdCBmb3IgdW5rbm93biBGQyBzdGF0dXMgKi9cbiBcbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9XQUlUX0ZDIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRklSU1RfRkMpXG4mIzQzO1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9GQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZXR4dGltZXIpO1xuIFxuIFx0LyogaXNvdHBfdHhfdGltZW91dCgpIG1heSBoYXZlIGdpdmVuIHVwIG9uIHRoaXMgam9iIHdoaWxlXG4tXHQgKiBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoOyBzby1cdTAwM2VyeF9sb2NrXG4tXHQgKiAoaGVsZCBieSBvdXIgY2FsbGVyIGlzb3RwX3JjdigpKSBydWxlcyBvdXQgYSBjb25jdXJyZW50IGNsYWltLFxuLVx0ICogc28gYSBwbGFpbiByZWNoZWNrIGlzIGVub3VnaCBoZXJlLlxuJiM0MztcdCAqIGhydGltZXJfY2FuY2VsKCkgYWJvdmUgd2FpdGVkIGZvciBpdCB0byBmaW5pc2ggPVx1MDAzZSByZWNoZWNrXG4gXHQgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9XQUlUX0ZDIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRklSU1RfRkMpXG4mIzQzO1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9GQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxuIFx0XHRyZXR1cm4gMTtcbiBcbiBcdGlmICgoY2YtXHUwMDNlbGVuIFx1MDAzYyBhZSAmIzQzOyBGQ19DT05URU5UX1NaKSB8fFxuQEAgLTM5NiwxMyAmIzQzOzQ2NCwxNSBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mYyhzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiBcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4gXHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiBcbi1cdFx0c28tXHUwMDNldHguc3RhdGUgPSBJU09UUF9JRExFO1xuJiM0MztcdFx0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgc28tXHUwMDNldHhfZ2VuLCBFQkFETVNHKTtcbiYjNDM7XHRcdC8qIHNldCB0byBJRExFIGFmdGVyIHB1Ymxpc2hpbmcgdHhfcmVzdWx0ICovXG4mIzQzO1x0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfSURMRSk7XG4gXHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZzby1cdTAwM2V3YWl0KTtcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4gXHQvKiBnZXQgc3RhdGljL2R5bmFtaWMgY29tbXVuaWNhdGlvbiBwYXJhbXMgZnJvbSBmaXJzdC9ldmVyeSBGQyBmcmFtZSAqL1xuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlID09IElTT1RQX1dBSVRfRklSU1RfRkMgfHxcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9XQUlUX0ZJUlNUX0ZDIHx8XG4gXHQgICAgc28tXHUwMDNlb3B0LmZsYWdzIFx1MDAyNiBDQU5fSVNPVFBfRFlOX0ZDX1BBUk1TKSB7XG4gXHRcdHNvLVx1MDAzZXR4ZmMuYnMgPSBjZi1cdTAwM2VkYXRhW2FlICYjNDM7IDFdO1xuIFx0XHRzby1cdTAwM2V0eGZjLnN0bWluID0gY2YtXHUwMDNlZGF0YVthZSAmIzQzOyAyXTtcbkBAIC00MjYsMTMgJiM0Mzs0OTYsMTMgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXHRcdFx0c28tXHUwMDNldHhfZ2FwID0ga3RpbWVfYWRkX25zKHNvLVx1MDAzZXR4X2dhcCxcbiBcdFx0XHRcdFx0XHQgIChzby1cdTAwM2V0eGZjLnN0bWluIC0gMHhGMClcbiBcdFx0XHRcdFx0XHQgICogMTAwMDAwKTtcbi1cdFx0c28tXHUwMDNldHguc3RhdGUgPSBJU09UUF9XQUlUX0ZDO1xuJiM0MztcdFx0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfV0FJVF9GQyk7XG4gXHR9XG4gXG4gXHRzd2l0Y2ggKGNmLVx1MDAzZWRhdGFbYWVdIFx1MDAyNiAweDBGKSB7XG4gXHRjYXNlIElTT1RQX0ZDX0NUUzpcbiBcdFx0c28tXHUwMDNldHguYnMgPSAwO1xuLVx0XHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX1NFTkRJTkc7XG4mIzQzO1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcbiBcdFx0Lyogc2VuZCBDRiBmcmFtZSBhbmQgZW5hYmxlIGVjaG8gdGltZW91dCBoYW5kbGluZyAqL1xuIFx0XHRocnRpbWVyX3N0YXJ0KFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lciwga3RpbWVfc2V0KElTT1RQX0VDSE9fVElNRU9VVCwgMCksXG4gXHRcdFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9TT0ZUKTtcbkBAIC00NDcsMTQgJiM0Mzs1MTcsMTkgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXG4gXHRjYXNlIElTT1RQX0ZDX09WRkxXOlxuIFx0XHQvKiBvdmVyZmxvdyBvbiByZWNlaXZlciBzaWRlIC0gcmVwb3J0ICYjMzk7bWVzc2FnZSB0b28gbG9uZyYjMzk7ICovXG4tXHRcdHNrLVx1MDAzZXNrX2VyciA9IEVNU0dTSVpFO1xuLVx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbi1cdFx0XHRza19lcnJvcl9yZXBvcnQoc2spO1xuJiM0MztcdFx0dHhfZXJyID0gRU1TR1NJWkU7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFxuIFx0ZGVmYXVsdDpcbi1cdFx0Lyogc3RvcCB0aGlzIHR4IGpvYiAqL1xuLVx0XHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX0lETEU7XG4mIzQzO1x0XHQvKiByZXNlcnZlZC91bmtub3duIGZsb3cgc3RhdHVzICh0eF9lcnIgZGVmYXVsdHMgdG8gRUJBRE1TRykgKi9cbiYjNDM7XG4mIzQzO1x0XHRzay1cdTAwM2Vza19lcnIgPSB0eF9lcnI7XG4mIzQzO1x0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbiYjNDM7XHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiYjNDM7XG4mIzQzO1x0XHRpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBzby1cdTAwM2V0eF9nZW4sIHR4X2Vycik7XG4mIzQzO1x0XHQvKiBzZXQgdG8gSURMRSBhZnRlciBwdWJsaXNoaW5nIHR4X3Jlc3VsdCAqL1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c28tXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbkBAIC00NjcsNyAmIzQzOzU0Miw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X3NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IHBjaWxlbixcbiBcdHN0cnVjdCBza19idWZmICpuc2tiO1xuIFxuIFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2c28tXHUwMDNlcnh0aW1lcik7XG4tXHRzby1cdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2VyeC5zdGF0ZSwgSVNPVFBfSURMRSk7XG4gXG4gXHRpZiAoIWxlbiB8fCBsZW4gXHUwMDNlIGNmLVx1MDAzZWxlbiAtIHBjaWxlbilcbiBcdFx0cmV0dXJuIDE7XG5AQCAtNTAxLDcgJiM0Mzs1NzYsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiBcdGludCBmZl9wY2lfc3o7XG4gXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VyeHRpbWVyKTtcbi1cdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcbiBcdC8qIGdldCB0aGUgdXNlZCBzZW5kZXIgTExfREwgZnJvbSB0aGUgKGZpcnN0KSBDQU4gZnJhbWUgZGF0YSBsZW5ndGggKi9cbiBcdHNvLVx1MDAzZXJ4LmxsX2RsID0gcGFkbGVuKGNmLVx1MDAzZWxlbik7XG5AQCAtNTU1LDcgJiM0Mzs2MzAsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiBcbiBcdC8qIGluaXRpYWwgc2V0dXAgZm9yIHRoaXMgcGR1IHJlY2VwdGlvbiAqL1xuIFx0c28tXHUwMDNlcnguc24gPSAxO1xuLVx0c28tXHUwMDNlcnguc3RhdGUgPSBJU09UUF9XQUlUX0RBVEE7XG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2VyeC5zdGF0ZSwgSVNPVFBfV0FJVF9EQVRBKTtcbiBcbiBcdC8qIG5vIGNyZWF0aW9uIG9mIGZsb3cgY29udHJvbCBmcmFtZXMgKi9cbiBcdGlmIChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IENBTl9JU09UUF9MSVNURU5fTU9ERSlcbkBAIC01NzMsNyAmIzQzOzY0OCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLFxuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChzby1cdTAwM2VyeC5zdGF0ZSAhPSBJU09UUF9XQUlUX0RBVEEpXG4mIzQzO1x0aWYgKFJFQURfT05DRShzby1cdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9EQVRBKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIGRyb3AgaWYgdGltZXN0YW1wIGdhcCBpcyBsZXNzIHRoYW4gZm9yY2Vfcnhfc3RtaW4gbmFubyBzZWNzICovXG5AQCAtNTg4LDExICYjNDM7NjYzLDkgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VyeHRpbWVyKTtcbiBcbiBcdC8qIGlzb3RwX3J4X3RpbWVyX2hhbmRsZXIoKSBtYXkgaGF2ZSByYWNlZCB1cyBmb3Igc28tXHUwMDNlcnguc3RhdGVcbi1cdCAqIHdoaWxlIGhydGltZXJfY2FuY2VsKCkgYWJvdmUgd2FpdGVkIGZvciBpdCB0byBmaW5pc2gsIGFscmVhZHlcbi1cdCAqIHJlcG9ydGluZyBFVElNRURPVVQgYW5kIHJlc2V0dGluZyB0aGUgcmVjZXB0aW9uOyBkb24mIzM5O3QgcHJvY2Vzc1xuLVx0ICogdGhpcyBDRiBpbnRvIGEgcmVhc3NlbWJseSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZ2l2ZW4gdXAgb24uXG4mIzQzO1x0ICogd2hpbGUgaHJ0aW1lcl9jYW5jZWwoKSBhYm92ZSB3YWl0ZWQgZm9yIGl0IHRvIGZpbmlzaCA9XHUwMDNlIHJlY2hlY2tcbiBcdCAqL1xuLVx0aWYgKHNvLVx1MDAzZXJ4LnN0YXRlICE9IElTT1RQX1dBSVRfREFUQSlcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0RBVEEpXG4gXHRcdHJldHVybiAxO1xuIFxuIFx0LyogQ0ZzIGFyZSBuZXZlciBsb25nZXIgdGhhbiB0aGUgRkYgKi9cbkBAIC02MTMsNyAmIzQzOzY4Niw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLFxuIFx0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4gXG4gXHRcdC8qIHJlc2V0IHJ4IHN0YXRlICovXG4tXHRcdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbiYjNDM7XHRcdFdSSVRFX09OQ0Uoc28tXHUwMDNlcnguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcdHNvLVx1MDAzZXJ4LnNuJiM0MzsmIzQzOztcbkBAIC02MjcsNyAmIzQzOzcwMCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLFxuIFxuIFx0aWYgKHNvLVx1MDAzZXJ4LmlkeCBcdTAwM2U9IHNvLVx1MDAzZXJ4Lmxlbikge1xuIFx0XHQvKiB3ZSBhcmUgZG9uZSAqL1xuLVx0XHRzby1cdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XG4mIzQzO1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcbiBcdFx0aWYgKChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IElTT1RQX0NIRUNLX1BBRERJTkcpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgY2hlY2tfcGFkKHNvLCBjZiwgaSAmIzQzOyAxLCBzby1cdTAwM2VvcHQucnhwYWRfY29udGVudCkpIHtcbkBAIC02OTgsOCAmIzQzOzc3MSwxMCBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSlcbiBcbiBcdGlmIChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IENBTl9JU09UUF9IQUxGX0RVUExFWCkge1xuIFx0XHQvKiBjaGVjayByeC90eCBwYXRoIGhhbGYgZHVwbGV4IGV4cGVjdGF0aW9ucyAqL1xuLVx0XHRpZiAoKHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX0lETEUgXHUwMDI2XHUwMDI2IG5fcGNpX3R5cGUgIT0gTl9QQ0lfRkMpIHx8XG4tXHRcdCAgICAoc28tXHUwMDNlcnguc3RhdGUgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjYgbl9wY2lfdHlwZSA9PSBOX1BDSV9GQykpXG4mIzQzO1x0XHRpZiAoKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgbl9wY2lfdHlwZSAhPSBOX1BDSV9GQykgfHxcbiYjNDM7XHRcdCAgICAoUkVBRF9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlKSAhPSBJU09UUF9JRExFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBuX3BjaV90eXBlID09IE5fUENJX0ZDKSlcbiBcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG5AQCAtNzk0LDYgJiM0Mzs4NjksNyBAQCBzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pXG4gXHRzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmO1xuIFx0aW50IGNhbl9zZW5kX3JldDtcbiBcdGludCBhZSA9IChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IENBTl9JU09UUF9FWFRFTkRfQUREUikgPyAxIDogMDtcbiYjNDM7XHR1MzIgb2xkX2NmZWNobztcbiBcbiBcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzby1cdTAwM2VpZmluZGV4KTtcbiBcdGlmICghZGV2KVxuQEAgLTgxNCw2ICYjNDM7ODkwLDkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIFxuIFx0Y3N4LVx1MDAzZWNhbl9paWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiBcbiYjNDM7XHQvKiBzZXQgdWlkIGluIHR4IHNrYiB0byBpZGVudGlmeSBDRiBlY2hvIGZyYW1lcyAqL1xuJiM0MztcdGNhbl9zZXRfc2tiX3VpZChza2IpO1xuJiM0MztcbiBcdGNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cdTAwM2VkYXRhO1xuIFx0c2tiX3B1dF96ZXJvKHNrYiwgc28tXHUwMDNlbGwubXR1KTtcbiBcbkBAIC04MzAsMTIgJiM0Mzs5MDksMTUgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIFx0c2tiLVx1MDAzZWRldiA9IGRldjtcbiBcdGNhbl9za2Jfc2V0X293bmVyKHNrYiwgc2spO1xuIFxuLVx0LyogY2ZlY2hvIHNob3VsZCBoYXZlIGJlZW4gemVybyYjMzk7ZWQgYnkgaW5pdC9pc290cF9yY3ZfZWNobygpICovXG4tXHRpZiAoc28tXHUwMDNlY2ZlY2hvKVxuLVx0XHRwcl9ub3RpY2Vfb25jZShcJiMzNDtjYW4taXNvdHA6IGNmZWNobyBpcyAlMDhYICE9IDBcXG5cJiMzNDssIHNvLVx1MDAzZWNmZWNobyk7XG4mIzQzO1x0LyogemVybyYjMzk7ZWQgYnkgaW5pdC9pc290cF9yY3ZfZWNobygpOyByZWFjaGVkIGxvY2stZnJlZSB2aWFcbiYjNDM7XHQgKiBpc290cF90eGZyX3RpbWVyX2hhbmRsZXIoKSB0b28sIHNvIHVzZSBSRUFEX09OQ0UoKS9XUklURV9PTkNFKClcbiYjNDM7XHQgKi9cbiYjNDM7XHRvbGRfY2ZlY2hvID0gUkVBRF9PTkNFKHNvLVx1MDAzZWNmZWNobyk7XG4mIzQzO1x0aWYgKG9sZF9jZmVjaG8pXG4mIzQzO1x0XHRwcl9ub3RpY2Vfb25jZShcJiMzNDtjYW4taXNvdHA6IGNmZWNobyBpcyAlMDhYICE9IDBcXG5cJiMzNDssIG9sZF9jZmVjaG8pO1xuIFxuIFx0Lyogc2V0IGNvbnNlY3V0aXZlIGZyYW1lIGVjaG8gdGFnICovXG4tXHRzby1cdTAwM2VjZmVjaG8gPSAqKHUzMiAqKWNmLVx1MDAzZWRhdGE7XG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2VjZmVjaG8sIHNrYi1cdTAwM2VoYXNoKTtcbiBcbiBcdC8qIHNlbmQgZnJhbWUgd2l0aCBsb2NhbCBlY2hvIGVuYWJsZWQgKi9cbiBcdGNhbl9zZW5kX3JldCA9IGNhbl9zZW5kKHNrYiwgMSk7XG5AQCAtODg3LDcgJiM0Mzs5NjksNiBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3ZfZWNobyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWRhdGE7XG4gXHRzdHJ1Y3QgaXNvdHBfc29jayAqc28gPSBpc290cF9zayhzayk7XG4tXHRzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cdTAwM2VkYXRhO1xuIFxuIFx0Lyogb25seSBoYW5kbGUgbXkgb3duIGxvY2FsIGVjaG8gQ0YvU0Ygc2tiJiMzOTtzIChubyBGRiEpICovXG4gXHRpZiAoc2tiLVx1MDAzZXNrICE9IHNrKVxuQEAgLTg5OSwzMiAmIzQzOzk4MCwzNSBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3ZfZWNobyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuIFxuIFx0Lyogc28tXHUwMDNlY2ZlY2hvIG1heSBzaW5jZSBiZWxvbmcgdG8gYSBuZXcgdHJhbnNmZXI7IHJlY2hlY2sgdW5kZXIgbG9jayAqL1xuLVx0aWYgKHNvLVx1MDAzZWNmZWNobyAhPSAqKHUzMiAqKWNmLVx1MDAzZWRhdGEpXG4mIzQzO1x0aWYgKFJFQURfT05DRShzby1cdTAwM2VjZmVjaG8pICE9IHNrYi1cdTAwM2VoYXNoKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBjYW5jZWwgbG9jYWwgZWNobyB0aW1lb3V0ICovXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VlY2hvdGltZXIpO1xuIFxuIFx0LyogbG9jYWwgZWNobyBza2Igd2l0aCBjb25zZWN1dGl2ZSBmcmFtZSBoYXMgYmVlbiBjb25zdW1lZCAqL1xuLVx0c28tXHUwMDNlY2ZlY2hvID0gMDtcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4gXG4gXHQvKiBjbGFpbWluZyBhIHRyYW5zZmVyIGFsc28gdGFrZXMgc28tXHUwMDNlcnhfbG9jaywgc28gYSBwbGFpbiByZWNoZWNrXG4gXHQgKiBpcyBlbm91Z2g6IHNvLVx1MDAzZXR4LnN0YXRlIGNhbiYjMzk7dCBoYXZlIGZsaXBwZWQgdG8gSVNPVFBfU0VORElORyBmb3JcbiBcdCAqIGEgbmV3IGNsYWltIHdoaWxlIHdlJiMzOTtyZSBzdGlsbCBpbiBoZXJlXG4gXHQgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9TRU5ESU5HKVxuJiM0MztcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpICE9IElTT1RQX1NFTkRJTkcpXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGlmIChzby1cdTAwM2V0eC5pZHggXHUwMDNlPSBzby1cdTAwM2V0eC5sZW4pIHtcbiBcdFx0Lyogd2UgYXJlIGRvbmUgKi9cbi1cdFx0c28tXHUwMDNldHguc3RhdGUgPSBJU09UUF9JRExFO1xuJiM0MztcbiYjNDM7XHRcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIHNvLVx1MDAzZXR4X2dlbiwgMCk7XG4mIzQzO1x0XHQvKiBzZXQgdG8gSURMRSBhZnRlciBwdWJsaXNoaW5nIHR4X3Jlc3VsdCAqL1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c28tXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbiBcdGlmIChzby1cdTAwM2V0eGZjLmJzIFx1MDAyNlx1MDAyNiBzby1cdTAwM2V0eC5icyBcdTAwM2U9IHNvLVx1MDAzZXR4ZmMuYnMpIHtcbiBcdFx0Lyogc3RvcCBhbmQgd2FpdCBmb3IgRkMgd2l0aCB0aW1lb3V0ICovXG4tXHRcdHNvLVx1MDAzZXR4LnN0YXRlID0gSVNPVFBfV0FJVF9GQztcbiYjNDM7XHRcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIElTT1RQX1dBSVRfRkMpO1xuIFx0XHRocnRpbWVyX3N0YXJ0KFx1MDAyNnNvLVx1MDAzZXR4dGltZXIsIGt0aW1lX3NldChJU09UUF9GQ19USU1FT1VULCAwKSxcbiBcdFx0XHQgICAgICBIUlRJTUVSX01PREVfUkVMX1NPRlQpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtOTQ2LDE2ICYjNDM7MTAzMCwyMCBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3ZfZWNobyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4gfVxuIFxuLS8qIHNoYXJlZCBieSBzby1cdTAwM2V0eHRpbWVyJiMzOTtzIGFuZCBzby1cdTAwM2VlY2hvdGltZXImIzM5O3MgY2FsbGJhY2tzLiBCb3RoIHRpbWVycyBnZXRcbi0gKiBjYW5jZWxsZWQgdW5kZXIgc28tXHUwMDNlcnhfbG9jayBlbHNld2hlcmUsIHNvIHRoaXMgbXVzdCBzdGF5IGxvY2stZnJlZSB0b1xuLSAqIGF2b2lkIGRlYWRsb2NraW5nIHdpdGggdGhhdDsgdXNlcyBzby1cdTAwM2V0eF9nZW4gaW5zdGVhZCB0byBhdm9pZCB0YWludGluZ1xuLSAqIGEgbmV3IHRyYW5zZmVyIHdpdGggYW4gZXJyb3IgZnJvbSB0aGUgb25lIHRoYXQganVzdCB0aW1lZCBvdXQuXG4mIzQzOy8qIGlzb3RwX3R4X3RpbWVvdXQ6IHdlIGRpZCBub3QgZ2V0IGFueSBmbG93IGNvbnRyb2wgb3IgZWNobyBmcmFtZSBpbiB0aW1lXG4mIzQzOyAqXG4mIzQzOyAqIFNoYXJlZCBieSBzby1cdTAwM2V0eHRpbWVyJiMzOTtzIGFuZCBzby1cdTAwM2VlY2hvdGltZXImIzM5O3MgY2FsbGJhY2tzLiBCb3RoIHRpbWVycyBnZXRcbiYjNDM7ICogY2FuY2VsbGVkIHVuZGVyIHNvLVx1MDAzZXJ4X2xvY2sgZWxzZXdoZXJlLCBzbyB0aGlzIG11c3Qgc3RheSBsb2NrLWZyZWUuXG4mIzQzOyAqXG4mIzQzOyAqIHR4LnN0YXRlIGlzIGFjcXVpcmVkIGJlZm9yZSB0eF9nZW4uIENvbW1vbiBzZXF1ZW5jZSBpbiBpc290cF90eF9nZW5fZG9uZSgpLlxuJiM0MzsgKiBjbXB4Y2hnKCkgb25seSBvcmRlcnMgaXRzZWxmLCBub3QgdGhlIHR3byBwcmVjZWRpbmcgbG9hZHMuXG4gICovXG4gc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4X3RpbWVvdXQoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNvLVx1MDAzZXNrO1xuJiM0MztcdC8qIHJlYWQgdHguc3RhdGUgZmlyc3QgZm9yIHRoZSBjb21tb24gc2VxdWVuY2UgKi9cbiYjNDM7XHR1MzIgb2xkX3N0YXRlID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZzby1cdTAwM2V0eC5zdGF0ZSk7XG4gXHR1MzIgZ2VuID0gUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbik7XG4tXHR1MzIgb2xkX3N0YXRlID0gUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKTtcbiBcbiBcdC8qIGRvbiYjMzk7dCBoYW5kbGUgdGltZW91dHMgaW4gSURMRSBvciBTSFVURE9XTiBzdGF0ZSAqL1xuIFx0aWYgKG9sZF9zdGF0ZSA9PSBJU09UUF9JRExFIHx8IG9sZF9zdGF0ZSA9PSBJU09UUF9TSFVURE9XTilcbkBAIC05NjUsMTQgJiM0MzsxMDUzLDE0IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eF90aW1lb3V0KHN0cnVjdCBpc290cF9zb2NrICpzbylcbiBcdGlmIChjbXB4Y2hnKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlLCBvbGRfc3RhdGUsIElTT1RQX0lETEUpICE9IG9sZF9zdGF0ZSlcbiBcdFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xuIFxuLVx0Lyogd2UgZGlkIG5vdCBnZXQgYW55IGZsb3cgY29udHJvbCBvciBlY2hvIGZyYW1lIGluIHRpbWUgKi9cbiYjNDM7XHQvKiBkZXRlY3RlZCB0aW1lb3V0OiByZXBvcnQgJiMzOTtjb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQmIzM5OyAqL1xuIFxuLVx0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eF9nZW4pID09IGdlbikge1xuLVx0XHQvKiByZXBvcnQgJiMzOTtjb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQmIzM5OyAqL1xuLVx0XHRzay1cdTAwM2Vza19lcnIgPSBFQ09NTTtcbi1cdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4tXHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbi1cdH1cbiYjNDM7XHQvKiBhIHN0YWxlIHJlYWQgb2YgdGhpcyBzbG90IGJ5IGEgd2FpdGVyIHN0aWxsIGZhbGxzIGJhY2sgdG8gRUNPTU0gKi9cbiYjNDM7XHRpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBnZW4sIEVDT01NKTtcbiYjNDM7XG4mIzQzO1x0c2stXHUwMDNlc2tfZXJyID0gRUNPTU07XG4mIzQzO1x0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4mIzQzO1x0XHRza19lcnJvcl9yZXBvcnQoc2spO1xuIFxuIFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnNvLVx1MDAzZXdhaXQpO1xuIFxuQEAgLTEwMDcsNyAmIzQzOzEwOTUsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfdHhmcl90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxuIFx0XHQgICAgICBIUlRJTUVSX01PREVfUkVMX1NPRlQpO1xuIFxuIFx0LyogY2ZlY2hvIHNob3VsZCBiZSBjb25zdW1lZCBieSBpc290cF9yY3ZfZWNobygpIGhlcmUgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9TRU5ESU5HIFx1MDAyNlx1MDAyNiAhc28tXHUwMDNlY2ZlY2hvKVxuJiM0MztcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NFTkRJTkcgXHUwMDI2XHUwMDI2ICFSRUFEX09OQ0Uoc28tXHUwMDNlY2ZlY2hvKSlcbiBcdFx0aXNvdHBfc2VuZF9jZnJhbWUoc28pO1xuIFxuIFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xuQEAgLTEwMjYsMTAgJiM0MzsxMTE0LDEyIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0czY0IGhydGltZXJfc2VjID0gSVNPVFBfRUNIT19USU1FT1VUO1xuIFx0c3RydWN0IGhydGltZXIgKnR4X2hydCA9IFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lcjtcbiBcdHUzMiBuZXdfc3RhdGUgPSBJU09UUF9TRU5ESU5HO1xuJiM0MztcdHUzMiBteV9nZW47XG4mIzQzO1x0dTMyIG9sZF9jZmVjaG87XG4gXHRpbnQgb2ZmO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmICghc28tXHUwMDNlYm91bmQgfHwgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfU0hVVERPV04pXG4mIzQzO1x0aWYgKCFzby1cdTAwM2Vib3VuZCB8fCBSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4gXHQvKiBjbGFpbSB0aGUgc29ja2V0IHVuZGVyIHNvLVx1MDAzZXJ4X2xvY2s6IHRoaXMgc2VyaWFsaXplcyB0aGUgY2xhaW1cbkBAIC0xMDQ2LDI5ICYjNDM7MTEzNiwzMyBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0aWYgKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVClcbiBcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcbi1cdFx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKVxuJiM0MztcdFx0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04pXG4gXHRcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFxuIFx0XHQvKiB3YWl0IGZvciBjb21wbGV0ZSB0cmFuc21pc3Npb24gb2YgY3VycmVudCBwZHUgKi9cbiBcdFx0ZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVx1MDAzZXdhaXQsXG4tXHRcdFx0XHRcdCAgICAgICBzby1cdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9JRExFKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX0lETEUgfHxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0LyogbmV3IHRyYW5zZmVyOiBidW1wIHNvLVx1MDAzZXR4X2dlbiBhbmQgZHJhaW4gdGhlIG9sZCBvbmUmIzM5O3MgdGltZXJzLFxuLVx0ICogc3RpbGwgdW5kZXIgdGhlIHNvLVx1MDAzZXJ4X2xvY2sgd2UganVzdCBjbGFpbWVkIHRoZSBzb2NrZXQgd2l0aFxuLVx0ICovXG4tXHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcbi1cdFdSSVRFX09OQ0Uoc28tXHUwMDNldHhfZ2VuLCBSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSAmIzQzOyAxKTtcbiYjNDM7XHQvKiB0eGZydGltZXImIzM5O3MgY2FsbGJhY2sgcmUtYXJtcyBlY2hvdGltZXIgbG9jay1mcmVlOiBkcmFpbiBpdCBmaXJzdCAqL1xuJiM0MztcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZXR4ZnJ0aW1lcik7XG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eHRpbWVyKTtcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lcik7XG4tXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eGZydGltZXIpO1xuLVx0c28tXHUwMDNlY2ZlY2hvID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogbmV3IHRyYW5zZmVyOiBpbmNyZW1lbnQgc28tXHUwMDNldHhfZ2VuIGFuZCBzZXQgdHguc3RhdGUgYWZ0ZXIgYmFycmllciAqL1xuJiM0MztcdG15X2dlbiA9IGlzb3RwX2luY190eF9nZW4oUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikpO1xuJiM0MztcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIG15X2dlbiwgRUNPTU0pOyAvKiBwcmV2ZW50IHN0YWxlIHNsb3QgbWF0Y2hpbmcgKi9cbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4X2dlbiwgbXlfZ2VuKTtcbiYjNDM7XHRzbXBfd21iKCk7IC8qIHNlZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gaXNvdHBfdHhfW3RpbWVvdXR8Z2VuX2RvbmVdICovXG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2VjZmVjaG8sIDApO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4gXG4gXHQvKiBzby1cdTAwM2Vib3VuZCBpcyBvbmx5IGNoZWNrZWQgb25jZSBhYm92ZSAtIGEgd2FrZXVwIG1heSBoYXZlXG4tXHQgKiB1bmJvdW5kL3JlYm91bmQgdGhlIHNvY2tldCBtZWFud2hpbGUsIHNvIHJlLXZhbGlkYXRlIGl0XG4mIzQzO1x0ICogdW5ib3VuZC9yZWJvdW5kIHRoZSBzb2NrZXQgbWVhbndoaWxlID1cdTAwM2UgcmVjaGVja1xuIFx0ICovXG4gXHRpZiAoIXNvLVx1MDAzZWJvdW5kKSB7XG4gXHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuQEAgLTExMjcsNiAmIzQzOzEyMjEsOSBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcbiBcdGNzeC1cdTAwM2VjYW5faWlmID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4gXG4mIzQzO1x0Lyogc2V0IHVpZCBpbiB0eCBza2IgdG8gaWRlbnRpZnkgQ0YgZWNobyBmcmFtZXMgKi9cbiYjNDM7XHRjYW5fc2V0X3NrYl91aWQoc2tiKTtcbiYjNDM7XG4gXHRzby1cdTAwM2V0eC5sZW4gPSBzaXplO1xuIFx0c28tXHUwMDNldHguaWR4ID0gMDtcbiBcbkBAIC0xMTM0LDggJiM0MzsxMjMxLDkgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRza2JfcHV0X3plcm8oc2tiLCBzby1cdTAwM2VsbC5tdHUpO1xuIFxuIFx0LyogY2ZlY2hvIHNob3VsZCBoYXZlIGJlZW4gemVybyYjMzk7ZWQgYnkgaW5pdCAvIGZvcm1lciBpc290cF9yY3ZfZWNobygpICovXG4tXHRpZiAoc28tXHUwMDNlY2ZlY2hvKVxuLVx0XHRwcl9ub3RpY2Vfb25jZShcJiMzNDtjYW4taXNvdHA6IHVuaW5pdCBjZmVjaG8gJTA4WFxcblwmIzM0Oywgc28tXHUwMDNlY2ZlY2hvKTtcbiYjNDM7XHRvbGRfY2ZlY2hvID0gUkVBRF9PTkNFKHNvLVx1MDAzZWNmZWNobyk7XG4mIzQzO1x0aWYgKG9sZF9jZmVjaG8pXG4mIzQzO1x0XHRwcl9ub3RpY2Vfb25jZShcJiMzNDtjYW4taXNvdHA6IHVuaW5pdCBjZmVjaG8gJTA4WFxcblwmIzM0Oywgb2xkX2NmZWNobyk7XG4gXG4gXHQvKiBjaGVjayBmb3Igc2luZ2xlIGZyYW1lIHRyYW5zbWlzc2lvbiBkZXBlbmRpbmcgb24gVFhfREwgKi9cbiBcdGlmIChzaXplIFx1MDAzYz0gc28tXHUwMDNldHgubGxfZGwgLSBTRl9QQ0lfU1o0IC0gYWUgLSBvZmYpIHtcbkBAIC0xMTYzLDcgJiM0MzsxMjYxLDcgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0Y2YtXHUwMDNlZGF0YVthZV0gfD0gc2l6ZTtcbiBcbiBcdFx0Lyogc2V0IENGIGVjaG8gdGFnIGZvciBpc290cF9yY3ZfZWNobygpIChTRi1tb2RlKSAqL1xuLVx0XHRzby1cdTAwM2VjZmVjaG8gPSAqKHUzMiAqKWNmLVx1MDAzZWRhdGE7XG4mIzQzO1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgc2tiLVx1MDAzZWhhc2gpO1xuIFx0fSBlbHNlIHtcbiBcdFx0Lyogc2VuZCBmaXJzdCBmcmFtZSAqL1xuIFxuQEAgLTExODAsNyAmIzQzOzEyNzgsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRzby1cdTAwM2V0eGZjLmJzID0gMDtcbiBcbiBcdFx0XHQvKiBzZXQgQ0YgZWNobyB0YWcgZm9yIGlzb3RwX3Jjdl9lY2hvKCkgKENGLW1vZGUpICovXG4tXHRcdFx0c28tXHUwMDNlY2ZlY2hvID0gKih1MzIgKiljZi1cdTAwM2VkYXRhO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgc2tiLVx1MDAzZWhhc2gpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIHN0YW5kYXJkIGZsb3cgY29udHJvbCBjaGVjayAqL1xuIFx0XHRcdG5ld19zdGF0ZSA9IElTT1RQX1dBSVRfRklSU1RfRkM7XG5AQCAtMTE5MCwxMiAmIzQzOzEyODgsMTIgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0dHhfaHJ0ID0gXHUwMDI2c28tXHUwMDNldHh0aW1lcjtcbiBcbiBcdFx0XHQvKiBubyBDRiBlY2hvIHRhZyBmb3IgaXNvdHBfcmN2X2VjaG8oKSAoRkYtbW9kZSkgKi9cbi1cdFx0XHRzby1cdTAwM2VjZmVjaG8gPSAwO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4gXHRcdH1cbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9TSFVURE9XTikge1xuJiM0MztcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKSB7XG4gXHRcdC8qIGlzb3RwX3JlbGVhc2UoKSBoYXMgc2luY2UgdGFrZW4gb3ZlciBhbmQgYWxyZWFkeSBkcmFpbmVkXG4gXHRcdCAqIG91ciB0aW1lcnMgLSBkb24mIzM5O3Qgc2VuZCBpbnRvIGEgc29ja2V0IHRoYXQmIzM5O3MgZ29pbmcgYXdheVxuIFx0XHQgKi9cbkBAIC0xMjA2LDcgJiM0MzsxMzA0LDcgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdH1cbiBcdC8qIFdBSVRfRklSU1RfRkMgZm9yIHN0YW5kYXJkIEZGLCBlbHNlIHN0YXlzIElTT1RQX1NFTkRJTkcgKi9cbi1cdHNvLVx1MDAzZXR4LnN0YXRlID0gbmV3X3N0YXRlO1xuJiM0MztcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIG5ld19zdGF0ZSk7XG4gXHRocnRpbWVyX3N0YXJ0KHR4X2hydCwga3RpbWVfc2V0KGhydGltZXJfc2VjLCAwKSxcbiBcdFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9TT0ZUKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuQEAgLTEyMjMsMjAgJiM0MzsxMzIxLDQ5IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdCAgICAgICBfX2Z1bmNfXywgRVJSX1BUUihlcnIpKTtcbiBcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdC8qIG5ldyB0cmFuc2ZlciBhbHJlYWR5IGNsYWltZWQgYnkgYSBjb25jdXJyZW50IGNvbXBsZXRpb24sXG4mIzQzO1x0XHQgKiB0aW1lb3V0IG9yIHNlbmRtc2coKSB3aGlsZSB3ZSB3ZXJlIHN0dWNrIGluIGNhbl9zZW5kKCk/XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSAhPSBteV9nZW4pIHtcbiYjNDM7XHRcdFx0LyogZG9uJiMzOTt0IHRvdWNoIHRpbWVycyBhbmQgc3RhdGUgb2YgdGhlIG5ldyB0cmFuc2ZlciAqL1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIG5vIHRyYW5zbWlzc2lvbiAtXHUwMDNlIG5vIHRpbWVvdXQgbW9uaXRvcmluZyAqL1xuIFx0XHRocnRpbWVyX2NhbmNlbCh0eF9ocnQpO1xuIFx0XHRnb3RvIGVycl9vdXRfZHJvcF9sb2NrZWQ7XG4gXHR9XG4gXG4gXHRpZiAod2FpdF90eF9kb25lKSB7XG4tXHRcdC8qIHdhaXQgZm9yIGNvbXBsZXRlIHRyYW5zbWlzc2lvbiBvZiBjdXJyZW50IHBkdSAqL1xuLVx0XHRlcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCwgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfSURMRSk7XG4mIzQzO1x0XHQvKiB3YWtlIHVwIGZvcjpcbiYjNDM7XHRcdCAqIC0gY29uY3VycmVudCBzZW5kbXNnKCkgY2xhaW1pbmcgYSBuZXcgdHJhbnNmZXJcbiYjNDM7XHRcdCAqIC0gY29tcGxldGUgdHJhbnNtaXNzaW9uIG9mIGN1cnJlbnQgUERVXG4mIzQzO1x0XHQgKiAtIHNodXRkb3duIHN0YXRlIGNoYW5nZSBpbiBpc290cF9yZWxlYXNlKClcbiYjNDM7XHRcdCAqIGlzb3RwX3R4X2dlbl9kb25lKCkgdXNlcyBjb21tb24gdHguc3RhdGUvdHhfZ2VuIHJlYWQgc2VxdWVuY2VcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVx1MDAzZXdhaXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaXNvdHBfdHhfZ2VuX2RvbmUoc28sIG15X2dlbikpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJyX2V2ZW50X2Ryb3A7XG4gXG4tXHRcdGVyciA9IHNvY2tfZXJyb3Ioc2spO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHQvKiBzdGlsbCBvdXIgY2xhaW0sIGJ1dCBpc290cF9yZWxlYXNlKCkgZm9yY2Utc2h1dCBpdCBkb3duICovXG4mIzQzO1x0XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZzby1cdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgPT0gbXlfZ2VuKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuJiM0MztcdFx0XHRnb3RvIGVycl9ldmVudF9kcm9wO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIG93biBjb21wbGV0aW9uLCBvciB0eF9nZW4gbW92ZWQgb24gLSBlaXRoZXIgd2F5IHRoaXMgaXNcbiYjNDM7XHRcdCAqIHdoYXQgaXNvdHBfZ2V0X3R4X3Jlc3VsdCgpIHJlY29yZGVkIGZvciBteV9nZW5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZXJyID0gaXNvdHBfZ2V0X3R4X3Jlc3VsdChzbywgbXlfZ2VuKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBkcmFpbiB0byBhdm9pZCBzdGFsZSBlcnJvciBmb3IgYSBsYXRlciBwb2xsKCkvU09fRVJST1IgKi9cbiYjNDM7XHRcdHNvY2tfZXJyb3Ioc2spO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBlcnIgPyBlcnIgOiBzaXplO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHNpemU7XG5AQCAtMTI0NiwxNSAmIzQzOzEzNzMsMjYgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4gXHRnb3RvIGVycl9vdXRfZHJvcF9sb2NrZWQ7XG4gZXJyX2V2ZW50X2Ryb3A6XG4tXHQvKiBpbnRlcnJ1cHRlZCB3YWl0aW5nIG9uIG91ciBvd24gdHJhbnNmZXIgLSBkcmFpbiBpdHMgdGltZXJzICovXG4mIzQzO1x0LyogaW50ZXJydXB0ZWQgb3Igc2h1dCBkb3duIHdoaWxlIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAqL1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBuZXcgdHJhbnNmZXIgYWxyZWFkeSBzdGFydGVkIGJ5IGNvbmN1cnJlbnQgc2VuZG1zZygpPyAqL1xuJiM0MztcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSAhPSBteV9nZW4pIHtcbiYjNDM7XHRcdC8qIGRvbiYjMzk7dCB0b3VjaCB0aW1lcnMgYW5kIHN0YXRlcyBvZiB0aGUgbmV3IHRyYW5zZmVyICovXG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZXR4ZnJ0aW1lcik7XG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eHRpbWVyKTtcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lcik7XG4gZXJyX291dF9kcm9wX2xvY2tlZDpcbiBcdC8qIHJlbGVhc2UgdGhlIGNsYWltOyBzby1cdTAwM2VyeF9sb2NrIHN0aWxsIGhlbGQgZnJvbSBhYm92ZSAqL1xuLVx0c28tXHUwMDNlY2ZlY2hvID0gMDtcbi1cdHNvLVx1MDAzZXR4LnN0YXRlID0gSVNPVFBfSURMRTtcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4mIzQzO1xuJiM0MztcdC8qIG9ubHkgY2xhaW0gdG8gSURMRSBpZiBpc290cF9yZWxlYXNlKCkgaGFzIG5vdCB0YWtlbiBvdmVyICovXG4mIzQzO1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfU0hVVERPV04pXG4mIzQzO1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuIFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnNvLVx1MDAzZXdhaXQpO1xuIFxuQEAgLTEzMjAsOCAmIzQzOzE0NTgsOSBAQCBzdGF0aWMgaW50IGlzb3RwX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdC8qIGJlc3QtZWZmb3J0OiB3YWl0IGZvciBhIHJ1bm5pbmcgcGR1IHRvIGZpbmlzaCwgYnV0IGRvbiYjMzk7dCBibG9jayBvblxuIFx0ICogaXQgZm9yZXZlciAtIGdpdmUgdXAgYWZ0ZXIgdGhlIGZpcnN0IHNpZ25hbFxuIFx0ICovXG4tXHR3aGlsZSAoc28tXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCwgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfSURMRSkgPT0gMClcbiYjNDM7XHR3aGlsZSAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9JRExFIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCxcbiYjNDM7XHRcdFx0XHRcdFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfSURMRSkgPT0gMClcbiBcdFx0O1xuIFxuIFx0LyogY2xhaW0gdGhlIHNvY2tldCB1bmRlciBzby1cdTAwM2VyeF9sb2NrIGxpa2Ugc2VuZG1zZygpIGRvZXMsIHNvIGl0c1xuQEAgLTEzMjksOSAmIzQzOzE0NjgsMTIgQEAgc3RhdGljIGludCBpc290cF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXHQgKiB1bmNvbmRpdGlvbmFsbHksIGV2ZW4gd2hlbiBhIHNpZ25hbCBjdXQgdGhlIHdhaXQgYWJvdmUgc2hvcnRcbiBcdCAqL1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuLVx0c28tXHUwMDNldHguc3RhdGUgPSBJU09UUF9TSFVURE9XTjtcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TSFVURE9XTik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbi1cdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiYjNDM7XG4mIzQzO1x0LyogZm9yY2VkIFNIVVRET1dOIG1heSBoYXZlIHNraXBwZWQgSURMRSAoZ2F2ZSB1cCBvbiBhIHNpZ25hbCkgKi9cbiYjNDM7XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2aXNvdHBfbm90aWZpZXJfbG9jayk7XG4gXHR3aGlsZSAoaXNvdHBfYnVzeV9ub3RpZmllciA9PSBzbykge1xuQEAgLTE0NDcsNyAmIzQzOzE1ODksOCBAQCBzdGF0aWMgaW50IGlzb3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbFxuIFx0ICogd2l0aCBzby1cdTAwM2Vib3VuZCBpbiB0aGUgc2FtZSBsb2NrX3NvY2soKSBzZWN0aW9uIGFib3ZlLCBzbyB0aGVyZSBpc1xuIFx0ICogbm8gd2luZG93IGluIHdoaWNoIGEgY29uY3VycmVudCBpc290cF9ub3RpZnkoKSBjb3VsZCBiZSBtaXNzZWQuXG4gXHQgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFIHx8IHNvLVx1MDAzZXJ4LnN0YXRlICE9IElTT1RQX0lETEUpIHtcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9JRExFIHx8XG4mIzQzO1x0ICAgIFJFQURfT05DRShzby1cdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfSURMRSkge1xuIFx0XHRlcnIgPSAtRUFHQUlOO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xNDgxLDcgJiM0MzsxNjI0LDcgQEAgc3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxcbiBcdFx0XHRcdGlzb3RwX3Jjdiwgc2ssIFwmIzM0O2lzb3RwXCYjMzQ7LCBzayk7XG4gXG4gXHQvKiBubyBjb25zZWN1dGl2ZSBmcmFtZSBlY2hvIHNrYiBpbiBmbGlnaHQgKi9cbi1cdHNvLVx1MDAzZWNmZWNobyA9IDA7XG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2VjZmVjaG8sIDApO1xuIFxuIFx0LyogcmVnaXN0ZXIgZm9yIGVjaG8gc2tiJiMzOTtzICovXG4gXHRjYW5fcnhfcmVnaXN0ZXIobmV0LCBkZXYsIHR4X2lkLCBTSU5HTEVfTUFTSyh0eF9pZCksXG5AQCAtMTg0Nyw3ICYjNDM7MTk5MCw3IEBAIHN0YXRpYyBfX3BvbGxfdCBpc290cF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBwb2xsX3RhYmxlICp3XG4gXHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2c28tXHUwMDNld2FpdCwgd2FpdCk7XG4gXG4gXHQvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byBUWCBzdGF0ZSAqL1xuLVx0aWYgKChtYXNrIFx1MDAyNiBFUE9MTFdSTk9STSkgXHUwMDI2XHUwMDI2IChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFKSlcbiYjNDM7XHRpZiAoKG1hc2sgXHUwMDI2IEVQT0xMV1JOT1JNKSBcdTAwMjZcdTAwMjYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSkpXG4gXHRcdG1hc2sgXHUwMDI2PSB+KEVQT0xMT1VUIHwgRVBPTExXUk5PUk0pO1xuIFxuIFx0cmV0dXJuIG1hc2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7Q0FOX0RFViYjMzQ7LAogICAgJiMzNDtDQU5fVkNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lzb3RwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXNvdHBfYmluZCYjMzQ7LAogICAgJiMzNDtpc290cF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2lzb3RwX3BvbGwmIzM0OywKICAgICYjMzQ7aXNvdHBfcmN2JiMzNDssCiAgICAmIzM0O2lzb3RwX3Jjdl9lY2hvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDQU4gSVNPVFAgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gZml4IGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBUWC9SWCBzdGF0ZSBoYW5kbGluZyBhbmQgdHJhbnNmZXIgZ2VuZXJhdGlvbiB0cmFja2luZy4gSXQgaW50cm9kdWNlcyBhIG5ldyB0eF9yZXN1bHQgYXJyYXkgYW5kIHVzZXMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgZm9yIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgdGhlIElTT1RQIHByb3RvY29sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDI5NTI3MWQxOTc5NzM1MWIzNmMzY2M1MGY3Y2RhM2IxMzE3YjBlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDA3OjEyOjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9pc290cC5jIGIvbmV0L2Nhbi9pc290cC5jCmluZGV4IDU0YmVjYWY2ODk4ZjEzLi4xZjExYzY2YjM0M2M4NiAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9pc290cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vaXNvdHAuYwpAQCAtMTI3LDYgJiM0MzsxMjcsMTUgQEAgTU9EVUxFX1BBUk1fREVTQyhtYXhfcGR1X3NpemUsICYjMzQ7bWF4aW11bSBpc290cCBwZHUgc2l6ZSAoZGVmYXVsdCAmIzM0OwogI2RlZmluZSBJU09UUF9GQ19USU1FT1VUIDEJLyogMSBzZWMgKi8KICNkZWZpbmUgSVNPVFBfRUNIT19USU1FT1VUIDIJLyogMiBzZWNzICovCiAKJiM0MzsvKiBzby0mZ3Q7dHhfcmVzdWx0W3NvLSZndDt0eF9nZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdIGhvbGRzIHRoZSBwYWNrZWQgdmFsdWUKJiM0MzsgKiAoZXJyICZsdDsmbHQ7IElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUyB8IGdlbikgZm9yIGVhY2ggdHggZ2VuZXJhdGlvbiBzbG90LCBzbyBpdAomIzQzOyAqIGNhbiBiZSBoYW5kbGVkIHdpdGggYSBzaW5nbGUgUkVBRF9PTkNFKCkvV1JJVEVfT05DRSgpIGFjY2Vzcy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9TTE9UUyA0CiYjNDM7I2RlZmluZSBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMgMjQKJiM0MzsjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSyAoKDFVICZsdDsmbHQ7IElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUykgLSAxKQomIzQzOyNkZWZpbmUgSVNPVFBfVFhfUkVTVUxUX0VSUl9NQVNLIDB4RkYKJiM0MzsKIGVudW0gewogCUlTT1RQX0lETEUgPSAwLAogCUlTT1RQX1dBSVRfRklSU1RfRkMsCkBAIC0xNjYsNyAmIzQzOzE3NSw4IEBAIHN0cnVjdCBpc290cF9zb2NrIHsKIAl1MzIgZm9yY2VfdHhfc3RtaW47CiAJdTMyIGZvcmNlX3J4X3N0bWluOwogCXUzMiBjZmVjaG87IC8qIGNvbnNlY3V0aXZlIGZyYW1lIGVjaG8gdGFnICovCi0JdTMyIHR4X2dlbjsgLyogZ2VuZXJhdGlvbiwgYnVtcGVkIHBlciBuZXcgdHggdHJhbnNmZXIgKi8KJiM0MzsJdTMyIHR4X2dlbjsgLyogdHJhbnNmZXIgZ2VuZXJhdGlvbiwgaW5jcmVhc2VkIHBlciBuZXcgdHggdHJhbnNmZXIgKi8KJiM0MzsJdTMyIHR4X3Jlc3VsdFtJU09UUF9UWF9SRVNVTFRfU0xPVFNdOyAvKiBwZXItZ2VuZXJhdGlvbiByZXN1bHQgc2xvdHMgKi8KIAlzdHJ1Y3QgdHBjb24gcngsIHR4OwogCXN0cnVjdCBsaXN0X2hlYWQgbm90aWZpZXI7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKQEAgLTE3Nyw2ICYjNDM7MTg3LDY1IEBAIHN0YXRpYyBMSVNUX0hFQUQoaXNvdHBfbm90aWZpZXJfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlzb3RwX25vdGlmaWVyX2xvY2spOwogc3RhdGljIHN0cnVjdCBpc290cF9zb2NrICppc290cF9idXN5X25vdGlmaWVyOwogCiYjNDM7LyogaW5jcmVhc2UgKDI0IGJpdCkgdHggZ2VuZXJhdGlvbiB2YWx1ZSAqLwomIzQzO3N0YXRpYyB1MzIgaXNvdHBfaW5jX3R4X2dlbih1MzIgZ2VuKQomIzQzO3sKJiM0MzsJcmV0dXJuIChnZW4gJiM0MzsgMSkgJmFtcDsgSVNPVFBfVFhfUkVTVUxUX0dFTl9NQVNLOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzdG9yZSA4IGJpdCBlcnJvciBhbmQgMjQgYml0IHR4IGdlbmVyYXRpb24gdmFsdWVzIGluIHBhY2tlZCB1MzIgZWxlbWVudCAqLwomIzQzO3N0YXRpYyB1MzIgaXNvdHBfcGFja190eF9yZXN1bHQodTMyIGdlbiwgaW50IGVycikKJiM0Mzt7CiYjNDM7CXJldHVybiBnZW4gfCAoKHUzMillcnIgJmx0OyZsdDsgSVNPVFBfVFhfUkVTVUxUX0dFTl9CSVRTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZ2V0IHRoZSAyNCBiaXQgdHggZ2VuZXJhdGlvbiB2YWx1ZSBmcm9tIHRoZSB0eCByZXN1bHQgKi8KJiM0MztzdGF0aWMgdTMyIGlzb3RwX2dldF90eF9nZW4odTMyIGdlbl9lcnIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZ2VuX2VyciAmYW1wOyBJU09UUF9UWF9SRVNVTFRfR0VOX01BU0s7CiYjNDM7fQomIzQzOwomIzQzOy8qIGdldCB0aGUgOCBiaXQgZXJyb3IgdmFsdWUgZnJvbSB0aGUgdHggcmVzdWx0ICovCiYjNDM7c3RhdGljIHUzMiBpc290cF9nZXRfdHhfZXJyKHUzMiBnZW5fZXJyKQomIzQzO3sKJiM0MzsJcmV0dXJuIChnZW5fZXJyICZndDsmZ3Q7IElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUykgJmFtcDsgSVNPVFBfVFhfUkVTVUxUX0VSUl9NQVNLOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzdG9yZSB0cmFuc2ZlciByZXN1bHQgaW4gcGVyLWdlbmVyYXRpb24lNCBzby0mZ3Q7dHhfcmVzdWx0W10gc2xvdCAqLwomIzQzO3N0YXRpYyB2b2lkIGlzb3RwX3NldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuLCBpbnQgZXJyKQomIzQzO3sKJiM0MzsJV1JJVEVfT05DRShzby0mZ3Q7dHhfcmVzdWx0W2dlbiAlIElTT1RQX1RYX1JFU1VMVF9TTE9UU10sCiYjNDM7CQkgICBpc290cF9wYWNrX3R4X3Jlc3VsdChnZW4sIGVycikpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBmZXRjaCB0aGUgcmVzdWx0IHJlY29yZGVkIGZvciAmIzM5O2dlbiYjMzk7LCBhcyBhIChuZWdhdGl2ZSkgZXJybm8gKDAgZm9yIHN1Y2Nlc3MpICovCiYjNDM7c3RhdGljIGludCBpc290cF9nZXRfdHhfcmVzdWx0KHN0cnVjdCBpc290cF9zb2NrICpzbywgdTMyIGdlbikKJiM0Mzt7CiYjNDM7CXUzMiByZXN1bHQgPSBSRUFEX09OQ0Uoc28tJmd0O3R4X3Jlc3VsdFtnZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdKTsKJiM0MzsKJiM0MzsJaWYgKGlzb3RwX2dldF90eF9nZW4ocmVzdWx0KSAhPSBnZW4pIHsKJiM0MzsJCXByX25vdGljZV9vbmNlKCYjMzQ7Y2FuLWlzb3RwOiB0eF9yZXN1bHRbXSBzbG90IHJldXNlZCBiZWZvcmUgcmVhZFxuJiMzNDspOwomIzQzOwomIzQzOwkJLyogcmVwb3J0IGZhaWx1cmUgcmF0aGVyIHRoYW4gcmlzayBhIGZhbHNlIHN1Y2Nlc3MgKi8KJiM0MzsJCXJldHVybiAtRUNPTU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC0oaXNvdHBfZ2V0X3R4X2VycihyZXN1bHQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdHJ1ZSBpZiBkb25lLCBzaHV0IGRvd24gb3Igc3VwZXJzZWRlZCAoJiMzOTtnZW4mIzM5OyBpcyBubyBsb25nZXIgdGhlIGFjdGl2ZQomIzQzOyAqIHRyYW5zZmVyKS4gUmVhZHMgdHguc3RhdGUgZmlyc3QgKGFjcXVpcmUpIHNvIHR4X2dlbi90eF9yZXN1bHQgcmVhZHMKJiM0MzsgKiBiZWxvdyBzZWUgYXQgbGVhc3Qgd2hhdCB0aGF0IHN0YXRlIHdyaXRlIHB1Ymxpc2hlZCAoY29tbW9uIHNlcXVlbmNlKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBpc290cF90eF9nZW5fZG9uZShzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHUzMiBnZW4pCiYjNDM7ewomIzQzOwkvKiByZWFkIHR4LnN0YXRlIGZpcnN0IGZvciB0aGUgY29tbW9uIHNlcXVlbmNlICovCiYjNDM7CXUzMiBzdGF0ZSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtzby0mZ3Q7dHguc3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gc3RhdGUgPT0gSVNPVFBfSURMRSB8fCBzdGF0ZSA9PSBJU09UUF9TSFVURE9XTiB8fAomIzQzOwkgICAgICAgUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pICE9IGdlbjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpc290cF9zb2NrICppc290cF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIChzdHJ1Y3QgaXNvdHBfc29jayAqKXNrOwpAQCAtMTk5LDcgJiM0MzsyNjgsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKIAkJCQkJICAgICByeHRpbWVyKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3NvLSZndDtzazsKIAotCWlmIChzby0mZ3Q7cnguc3RhdGUgPT0gSVNPVFBfV0FJVF9EQVRBKSB7CiYjNDM7CWlmIChSRUFEX09OQ0Uoc28tJmd0O3J4LnN0YXRlKSA9PSBJU09UUF9XQUlUX0RBVEEpIHsKIAkJLyogd2UgZGlkIG5vdCBnZXQgbmV3IGRhdGEgZnJhbWVzIGluIHRpbWUgKi8KIAogCQkvKiByZXBvcnQgJiMzOTtjb25uZWN0aW9uIHRpbWVkIG91dCYjMzk7ICovCkBAIC0yMDgsNyAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF9yeF90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQogCQkJc2tfZXJyb3JfcmVwb3J0KHNrKTsKIAogCQkvKiByZXNldCByeCBzdGF0ZSAqLwotCQlzby0mZ3Q7cnguc3RhdGUgPSBJU09UUF9JRExFOwomIzQzOwkJV1JJVEVfT05DRShzby0mZ3Q7cnguc3RhdGUsIElTT1RQX0lETEUpOwogCX0KIAogCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKQEAgLTM3MiwyMCAmIzQzOzQ0MSwxOSBAQCBzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pOwogc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtzby0mZ3Q7c2s7CiYjNDM7CWludCB0eF9lcnIgPSBFQkFETVNHOyAvKiBkZWZhdWx0IGZvciB1bmtub3duIEZDIHN0YXR1cyAqLwogCi0JaWYgKHNvLSZndDt0eC5zdGF0ZSAhPSBJU09UUF9XQUlUX0ZDICZhbXA7JmFtcDsKLQkgICAgc28tJmd0O3R4LnN0YXRlICE9IElTT1RQX1dBSVRfRklSU1RfRkMpCiYjNDM7CWlmIChSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZDICZhbXA7JmFtcDsKJiM0MzsJICAgIFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpICE9IElTT1RQX1dBSVRfRklSU1RfRkMpCiAJCXJldHVybiAwOwogCiAJaHJ0aW1lcl9jYW5jZWwoJmFtcDtzby0mZ3Q7dHh0aW1lcik7CiAKIAkvKiBpc290cF90eF90aW1lb3V0KCkgbWF5IGhhdmUgZ2l2ZW4gdXAgb24gdGhpcyBqb2Igd2hpbGUKLQkgKiBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoOyBzby0mZ3Q7cnhfbG9jawotCSAqIChoZWxkIGJ5IG91ciBjYWxsZXIgaXNvdHBfcmN2KCkpIHJ1bGVzIG91dCBhIGNvbmN1cnJlbnQgY2xhaW0sCi0JICogc28gYSBwbGFpbiByZWNoZWNrIGlzIGVub3VnaCBoZXJlLgomIzQzOwkgKiBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoID0mZ3Q7IHJlY2hlY2sKIAkgKi8KLQlpZiAoc28tJmd0O3R4LnN0YXRlICE9IElTT1RQX1dBSVRfRkMgJmFtcDsmYW1wOwotCSAgICBzby0mZ3Q7dHguc3RhdGUgIT0gSVNPVFBfV0FJVF9GSVJTVF9GQykKJiM0MzsJaWYgKFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpICE9IElTT1RQX1dBSVRfRkMgJmFtcDsmYW1wOwomIzQzOwkgICAgUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9GSVJTVF9GQykKIAkJcmV0dXJuIDE7CiAKIAlpZiAoKGNmLSZndDtsZW4gJmx0OyBhZSAmIzQzOyBGQ19DT05URU5UX1NaKSB8fApAQCAtMzk2LDEzICYjNDM7NDY0LDE1IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKQogCQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKIAkJCXNrX2Vycm9yX3JlcG9ydChzayk7CiAKLQkJc28tJmd0O3R4LnN0YXRlID0gSVNPVFBfSURMRTsKJiM0MzsJCWlzb3RwX3NldF90eF9yZXN1bHQoc28sIHNvLSZndDt0eF9nZW4sIEVCQURNU0cpOwomIzQzOwkJLyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c28tJmd0O3R4LnN0YXRlLCBJU09UUF9JRExFKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7c28tJmd0O3dhaXQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBnZXQgc3RhdGljL2R5bmFtaWMgY29tbXVuaWNhdGlvbiBwYXJhbXMgZnJvbSBmaXJzdC9ldmVyeSBGQyBmcmFtZSAqLwotCWlmIChzby0mZ3Q7dHguc3RhdGUgPT0gSVNPVFBfV0FJVF9GSVJTVF9GQyB8fAomIzQzOwlpZiAoUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgPT0gSVNPVFBfV0FJVF9GSVJTVF9GQyB8fAogCSAgICBzby0mZ3Q7b3B0LmZsYWdzICZhbXA7IENBTl9JU09UUF9EWU5fRkNfUEFSTVMpIHsKIAkJc28tJmd0O3R4ZmMuYnMgPSBjZi0mZ3Q7ZGF0YVthZSAmIzQzOyAxXTsKIAkJc28tJmd0O3R4ZmMuc3RtaW4gPSBjZi0mZ3Q7ZGF0YVthZSAmIzQzOyAyXTsKQEAgLTQyNiwxMyAmIzQzOzQ5NiwxMyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mYyhzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSkKIAkJCXNvLSZndDt0eF9nYXAgPSBrdGltZV9hZGRfbnMoc28tJmd0O3R4X2dhcCwKIAkJCQkJCSAgKHNvLSZndDt0eGZjLnN0bWluIC0gMHhGMCkKIAkJCQkJCSAgKiAxMDAwMDApOwotCQlzby0mZ3Q7dHguc3RhdGUgPSBJU09UUF9XQUlUX0ZDOwomIzQzOwkJV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1dBSVRfRkMpOwogCX0KIAogCXN3aXRjaCAoY2YtJmd0O2RhdGFbYWVdICZhbXA7IDB4MEYpIHsKIAljYXNlIElTT1RQX0ZDX0NUUzoKIAkJc28tJmd0O3R4LmJzID0gMDsKLQkJc28tJmd0O3R4LnN0YXRlID0gSVNPVFBfU0VORElORzsKJiM0MzsJCVdSSVRFX09OQ0Uoc28tJmd0O3R4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTsKIAkJLyogc2VuZCBDRiBmcmFtZSBhbmQgZW5hYmxlIGVjaG8gdGltZW91dCBoYW5kbGluZyAqLwogCQlocnRpbWVyX3N0YXJ0KCZhbXA7c28tJmd0O2VjaG90aW1lciwga3RpbWVfc2V0KElTT1RQX0VDSE9fVElNRU9VVCwgMCksCiAJCQkgICAgICBIUlRJTUVSX01PREVfUkVMX1NPRlQpOwpAQCAtNDQ3LDE0ICYjNDM7NTE3LDE5IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKQogCiAJY2FzZSBJU09UUF9GQ19PVkZMVzoKIAkJLyogb3ZlcmZsb3cgb24gcmVjZWl2ZXIgc2lkZSAtIHJlcG9ydCAmIzM5O21lc3NhZ2UgdG9vIGxvbmcmIzM5OyAqLwotCQlzay0mZ3Q7c2tfZXJyID0gRU1TR1NJWkU7Ci0JCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKQotCQkJc2tfZXJyb3JfcmVwb3J0KHNrKTsKJiM0MzsJCXR4X2VyciA9IEVNU0dTSVpFOwogCQlmYWxsdGhyb3VnaDsKIAogCWRlZmF1bHQ6Ci0JCS8qIHN0b3AgdGhpcyB0eCBqb2IgKi8KLQkJc28tJmd0O3R4LnN0YXRlID0gSVNPVFBfSURMRTsKJiM0MzsJCS8qIHJlc2VydmVkL3Vua25vd24gZmxvdyBzdGF0dXMgKHR4X2VyciBkZWZhdWx0cyB0byBFQkFETVNHKSAqLwomIzQzOwomIzQzOwkJc2stJmd0O3NrX2VyciA9IHR4X2VycjsKJiM0MzsJCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKQomIzQzOwkJCXNrX2Vycm9yX3JlcG9ydChzayk7CiYjNDM7CiYjNDM7CQlpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBzby0mZ3Q7dHhfZ2VuLCB0eF9lcnIpOwomIzQzOwkJLyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c28tJmd0O3R4LnN0YXRlLCBJU09UUF9JRExFKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7c28tJmd0O3dhaXQpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ2Nyw3ICYjNDM7NTQyLDcgQEAgc3RhdGljIGludCBpc290cF9yY3Zfc2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgcGNpbGVuLAogCXN0cnVjdCBza19idWZmICpuc2tiOwogCiAJaHJ0aW1lcl9jYW5jZWwoJmFtcDtzby0mZ3Q7cnh0aW1lcik7Ci0Jc28tJmd0O3J4LnN0YXRlID0gSVNPVFBfSURMRTsKJiM0MzsJV1JJVEVfT05DRShzby0mZ3Q7cnguc3RhdGUsIElTT1RQX0lETEUpOwogCiAJaWYgKCFsZW4gfHwgbGVuICZndDsgY2YtJmd0O2xlbiAtIHBjaWxlbikKIAkJcmV0dXJuIDE7CkBAIC01MDEsNyAmIzQzOzU3Niw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKQogCWludCBmZl9wY2lfc3o7CiAKIAlocnRpbWVyX2NhbmNlbCgmYW1wO3NvLSZndDtyeHRpbWVyKTsKLQlzby0mZ3Q7cnguc3RhdGUgPSBJU09UUF9JRExFOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtyeC5zdGF0ZSwgSVNPVFBfSURMRSk7CiAKIAkvKiBnZXQgdGhlIHVzZWQgc2VuZGVyIExMX0RMIGZyb20gdGhlIChmaXJzdCkgQ0FOIGZyYW1lIGRhdGEgbGVuZ3RoICovCiAJc28tJmd0O3J4LmxsX2RsID0gcGFkbGVuKGNmLSZndDtsZW4pOwpAQCAtNTU1LDcgJiM0Mzs2MzAsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSkKIAogCS8qIGluaXRpYWwgc2V0dXAgZm9yIHRoaXMgcGR1IHJlY2VwdGlvbiAqLwogCXNvLSZndDtyeC5zbiA9IDE7Ci0Jc28tJmd0O3J4LnN0YXRlID0gSVNPVFBfV0FJVF9EQVRBOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtyeC5zdGF0ZSwgSVNPVFBfV0FJVF9EQVRBKTsKIAogCS8qIG5vIGNyZWF0aW9uIG9mIGZsb3cgY29udHJvbCBmcmFtZXMgKi8KIAlpZiAoc28tJmd0O29wdC5mbGFncyAmYW1wOyBDQU5fSVNPVFBfTElTVEVOX01PREUpCkBAIC01NzMsNyAmIzQzOzY0OCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLAogCXN0cnVjdCBza19idWZmICpuc2tiOwogCWludCBpOwogCi0JaWYgKHNvLSZndDtyeC5zdGF0ZSAhPSBJU09UUF9XQUlUX0RBVEEpCiYjNDM7CWlmIChSRUFEX09OQ0Uoc28tJmd0O3J4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0RBVEEpCiAJCXJldHVybiAwOwogCiAJLyogZHJvcCBpZiB0aW1lc3RhbXAgZ2FwIGlzIGxlc3MgdGhhbiBmb3JjZV9yeF9zdG1pbiBuYW5vIHNlY3MgKi8KQEAgLTU4OCwxMSAmIzQzOzY2Myw5IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLAogCWhydGltZXJfY2FuY2VsKCZhbXA7c28tJmd0O3J4dGltZXIpOwogCiAJLyogaXNvdHBfcnhfdGltZXJfaGFuZGxlcigpIG1heSBoYXZlIHJhY2VkIHVzIGZvciBzby0mZ3Q7cnguc3RhdGUKLQkgKiB3aGlsZSBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoLCBhbHJlYWR5Ci0JICogcmVwb3J0aW5nIEVUSU1FRE9VVCBhbmQgcmVzZXR0aW5nIHRoZSByZWNlcHRpb247IGRvbiYjMzk7dCBwcm9jZXNzCi0JICogdGhpcyBDRiBpbnRvIGEgcmVhc3NlbWJseSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZ2l2ZW4gdXAgb24uCiYjNDM7CSAqIHdoaWxlIGhydGltZXJfY2FuY2VsKCkgYWJvdmUgd2FpdGVkIGZvciBpdCB0byBmaW5pc2ggPSZndDsgcmVjaGVjawogCSAqLwotCWlmIChzby0mZ3Q7cnguc3RhdGUgIT0gSVNPVFBfV0FJVF9EQVRBKQomIzQzOwlpZiAoUkVBRF9PTkNFKHNvLSZndDtyeC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9EQVRBKQogCQlyZXR1cm4gMTsKIAogCS8qIENGcyBhcmUgbmV2ZXIgbG9uZ2VyIHRoYW4gdGhlIEZGICovCkBAIC02MTMsNyAmIzQzOzY4Niw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLAogCQkJc2tfZXJyb3JfcmVwb3J0KHNrKTsKIAogCQkvKiByZXNldCByeCBzdGF0ZSAqLwotCQlzby0mZ3Q7cnguc3RhdGUgPSBJU09UUF9JRExFOwomIzQzOwkJV1JJVEVfT05DRShzby0mZ3Q7cnguc3RhdGUsIElTT1RQX0lETEUpOwogCQlyZXR1cm4gMTsKIAl9CiAJc28tJmd0O3J4LnNuJiM0MzsmIzQzOzsKQEAgLTYyNyw3ICYjNDM7NzAwLDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsCiAKIAlpZiAoc28tJmd0O3J4LmlkeCAmZ3Q7PSBzby0mZ3Q7cngubGVuKSB7CiAJCS8qIHdlIGFyZSBkb25lICovCi0JCXNvLSZndDtyeC5zdGF0ZSA9IElTT1RQX0lETEU7CiYjNDM7CQlXUklURV9PTkNFKHNvLSZndDtyeC5zdGF0ZSwgSVNPVFBfSURMRSk7CiAKIAkJaWYgKChzby0mZ3Q7b3B0LmZsYWdzICZhbXA7IElTT1RQX0NIRUNLX1BBRERJTkcpICZhbXA7JmFtcDsKIAkJICAgIGNoZWNrX3BhZChzbywgY2YsIGkgJiM0MzsgMSwgc28tJmd0O29wdC5yeHBhZF9jb250ZW50KSkgewpAQCAtNjk4LDggJiM0Mzs3NzEsMTAgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpCiAKIAlpZiAoc28tJmd0O29wdC5mbGFncyAmYW1wOyBDQU5fSVNPVFBfSEFMRl9EVVBMRVgpIHsKIAkJLyogY2hlY2sgcngvdHggcGF0aCBoYWxmIGR1cGxleCBleHBlY3RhdGlvbnMgKi8KLQkJaWYgKChzby0mZ3Q7dHguc3RhdGUgIT0gSVNPVFBfSURMRSAmYW1wOyZhbXA7IG5fcGNpX3R5cGUgIT0gTl9QQ0lfRkMpIHx8Ci0JCSAgICAoc28tJmd0O3J4LnN0YXRlICE9IElTT1RQX0lETEUgJmFtcDsmYW1wOyBuX3BjaV90eXBlID09IE5fUENJX0ZDKSkKJiM0MzsJCWlmICgoUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIG5fcGNpX3R5cGUgIT0gTl9QQ0lfRkMpIHx8CiYjNDM7CQkgICAgKFJFQURfT05DRShzby0mZ3Q7cnguc3RhdGUpICE9IElTT1RQX0lETEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICBuX3BjaV90eXBlID09IE5fUENJX0ZDKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKQEAgLTc5NCw2ICYjNDM7ODY5LDcgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKQogCXN0cnVjdCBjYW5mZF9mcmFtZSAqY2Y7CiAJaW50IGNhbl9zZW5kX3JldDsKIAlpbnQgYWUgPSAoc28tJmd0O29wdC5mbGFncyAmYW1wOyBDQU5fSVNPVFBfRVhURU5EX0FERFIpID8gMSA6IDA7CiYjNDM7CXUzMiBvbGRfY2ZlY2hvOwogCiAJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHNvLSZndDtpZmluZGV4KTsKIAlpZiAoIWRldikKQEAgLTgxNCw2ICYjNDM7ODkwLDkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKQogCiAJY3N4LSZndDtjYW5faWlmID0gZGV2LSZndDtpZmluZGV4OwogCiYjNDM7CS8qIHNldCB1aWQgaW4gdHggc2tiIHRvIGlkZW50aWZ5IENGIGVjaG8gZnJhbWVzICovCiYjNDM7CWNhbl9zZXRfc2tiX3VpZChza2IpOwomIzQzOwogCWNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi0mZ3Q7ZGF0YTsKIAlza2JfcHV0X3plcm8oc2tiLCBzby0mZ3Q7bGwubXR1KTsKIApAQCAtODMwLDEyICYjNDM7OTA5LDE1IEBAIHN0YXRpYyB2b2lkIGlzb3RwX3NlbmRfY2ZyYW1lKHN0cnVjdCBpc290cF9zb2NrICpzbykKIAlza2ItJmd0O2RldiA9IGRldjsKIAljYW5fc2tiX3NldF9vd25lcihza2IsIHNrKTsKIAotCS8qIGNmZWNobyBzaG91bGQgaGF2ZSBiZWVuIHplcm8mIzM5O2VkIGJ5IGluaXQvaXNvdHBfcmN2X2VjaG8oKSAqLwotCWlmIChzby0mZ3Q7Y2ZlY2hvKQotCQlwcl9ub3RpY2Vfb25jZSgmIzM0O2Nhbi1pc290cDogY2ZlY2hvIGlzICUwOFggIT0gMFxuJiMzNDssIHNvLSZndDtjZmVjaG8pOwomIzQzOwkvKiB6ZXJvJiMzOTtlZCBieSBpbml0L2lzb3RwX3Jjdl9lY2hvKCk7IHJlYWNoZWQgbG9jay1mcmVlIHZpYQomIzQzOwkgKiBpc290cF90eGZyX3RpbWVyX2hhbmRsZXIoKSB0b28sIHNvIHVzZSBSRUFEX09OQ0UoKS9XUklURV9PTkNFKCkKJiM0MzsJICovCiYjNDM7CW9sZF9jZmVjaG8gPSBSRUFEX09OQ0Uoc28tJmd0O2NmZWNobyk7CiYjNDM7CWlmIChvbGRfY2ZlY2hvKQomIzQzOwkJcHJfbm90aWNlX29uY2UoJiMzNDtjYW4taXNvdHA6IGNmZWNobyBpcyAlMDhYICE9IDBcbiYjMzQ7LCBvbGRfY2ZlY2hvKTsKIAogCS8qIHNldCBjb25zZWN1dGl2ZSBmcmFtZSBlY2hvIHRhZyAqLwotCXNvLSZndDtjZmVjaG8gPSAqKHUzMiAqKWNmLSZndDtkYXRhOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtjZmVjaG8sIHNrYi0mZ3Q7aGFzaCk7CiAKIAkvKiBzZW5kIGZyYW1lIHdpdGggbG9jYWwgZWNobyBlbmFibGVkICovCiAJY2FuX3NlbmRfcmV0ID0gY2FuX3NlbmQoc2tiLCAxKTsKQEAgLTg4Nyw3ICYjNDM7OTY5LDYgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2X2VjaG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilkYXRhOwogCXN0cnVjdCBpc290cF9zb2NrICpzbyA9IGlzb3RwX3NrKHNrKTsKLQlzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi0mZ3Q7ZGF0YTsKIAogCS8qIG9ubHkgaGFuZGxlIG15IG93biBsb2NhbCBlY2hvIENGL1NGIHNrYiYjMzk7cyAobm8gRkYhKSAqLwogCWlmIChza2ItJmd0O3NrICE9IHNrKQpAQCAtODk5LDMyICYjNDM7OTgwLDM1IEBAIHN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9lY2hvKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpCiAJc3Bpbl9sb2NrKCZhbXA7c28tJmd0O3J4X2xvY2spOwogCiAJLyogc28tJmd0O2NmZWNobyBtYXkgc2luY2UgYmVsb25nIHRvIGEgbmV3IHRyYW5zZmVyOyByZWNoZWNrIHVuZGVyIGxvY2sgKi8KLQlpZiAoc28tJmd0O2NmZWNobyAhPSAqKHUzMiAqKWNmLSZndDtkYXRhKQomIzQzOwlpZiAoUkVBRF9PTkNFKHNvLSZndDtjZmVjaG8pICE9IHNrYi0mZ3Q7aGFzaCkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJLyogY2FuY2VsIGxvY2FsIGVjaG8gdGltZW91dCAqLwogCWhydGltZXJfY2FuY2VsKCZhbXA7c28tJmd0O2VjaG90aW1lcik7CiAKIAkvKiBsb2NhbCBlY2hvIHNrYiB3aXRoIGNvbnNlY3V0aXZlIGZyYW1lIGhhcyBiZWVuIGNvbnN1bWVkICovCi0Jc28tJmd0O2NmZWNobyA9IDA7CiYjNDM7CVdSSVRFX09OQ0Uoc28tJmd0O2NmZWNobywgMCk7CiAKIAkvKiBjbGFpbWluZyBhIHRyYW5zZmVyIGFsc28gdGFrZXMgc28tJmd0O3J4X2xvY2ssIHNvIGEgcGxhaW4gcmVjaGVjawogCSAqIGlzIGVub3VnaDogc28tJmd0O3R4LnN0YXRlIGNhbiYjMzk7dCBoYXZlIGZsaXBwZWQgdG8gSVNPVFBfU0VORElORyBmb3IKIAkgKiBhIG5ldyBjbGFpbSB3aGlsZSB3ZSYjMzk7cmUgc3RpbGwgaW4gaGVyZQogCSAqLwotCWlmIChzby0mZ3Q7dHguc3RhdGUgIT0gSVNPVFBfU0VORElORykKJiM0MzsJaWYgKFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpICE9IElTT1RQX1NFTkRJTkcpCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmIChzby0mZ3Q7dHguaWR4ICZndDs9IHNvLSZndDt0eC5sZW4pIHsKIAkJLyogd2UgYXJlIGRvbmUgKi8KLQkJc28tJmd0O3R4LnN0YXRlID0gSVNPVFBfSURMRTsKJiM0MzsKJiM0MzsJCWlzb3RwX3NldF90eF9yZXN1bHQoc28sIHNvLSZndDt0eF9nZW4sIDApOwomIzQzOwkJLyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c28tJmd0O3R4LnN0YXRlLCBJU09UUF9JRExFKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7c28tJmd0O3dhaXQpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJaWYgKHNvLSZndDt0eGZjLmJzICZhbXA7JmFtcDsgc28tJmd0O3R4LmJzICZndDs9IHNvLSZndDt0eGZjLmJzKSB7CiAJCS8qIHN0b3AgYW5kIHdhaXQgZm9yIEZDIHdpdGggdGltZW91dCAqLwotCQlzby0mZ3Q7dHguc3RhdGUgPSBJU09UUF9XQUlUX0ZDOwomIzQzOwkJV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1dBSVRfRkMpOwogCQlocnRpbWVyX3N0YXJ0KCZhbXA7c28tJmd0O3R4dGltZXIsIGt0aW1lX3NldChJU09UUF9GQ19USU1FT1VULCAwKSwKIAkJCSAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTk0NiwxNiAmIzQzOzEwMzAsMjAgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2X2VjaG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSkKIAlzcGluX3VubG9jaygmYW1wO3NvLSZndDtyeF9sb2NrKTsKIH0KIAotLyogc2hhcmVkIGJ5IHNvLSZndDt0eHRpbWVyJiMzOTtzIGFuZCBzby0mZ3Q7ZWNob3RpbWVyJiMzOTtzIGNhbGxiYWNrcy4gQm90aCB0aW1lcnMgZ2V0Ci0gKiBjYW5jZWxsZWQgdW5kZXIgc28tJmd0O3J4X2xvY2sgZWxzZXdoZXJlLCBzbyB0aGlzIG11c3Qgc3RheSBsb2NrLWZyZWUgdG8KLSAqIGF2b2lkIGRlYWRsb2NraW5nIHdpdGggdGhhdDsgdXNlcyBzby0mZ3Q7dHhfZ2VuIGluc3RlYWQgdG8gYXZvaWQgdGFpbnRpbmcKLSAqIGEgbmV3IHRyYW5zZmVyIHdpdGggYW4gZXJyb3IgZnJvbSB0aGUgb25lIHRoYXQganVzdCB0aW1lZCBvdXQuCiYjNDM7LyogaXNvdHBfdHhfdGltZW91dDogd2UgZGlkIG5vdCBnZXQgYW55IGZsb3cgY29udHJvbCBvciBlY2hvIGZyYW1lIGluIHRpbWUKJiM0MzsgKgomIzQzOyAqIFNoYXJlZCBieSBzby0mZ3Q7dHh0aW1lciYjMzk7cyBhbmQgc28tJmd0O2VjaG90aW1lciYjMzk7cyBjYWxsYmFja3MuIEJvdGggdGltZXJzIGdldAomIzQzOyAqIGNhbmNlbGxlZCB1bmRlciBzby0mZ3Q7cnhfbG9jayBlbHNld2hlcmUsIHNvIHRoaXMgbXVzdCBzdGF5IGxvY2stZnJlZS4KJiM0MzsgKgomIzQzOyAqIHR4LnN0YXRlIGlzIGFjcXVpcmVkIGJlZm9yZSB0eF9nZW4uIENvbW1vbiBzZXF1ZW5jZSBpbiBpc290cF90eF9nZW5fZG9uZSgpLgomIzQzOyAqIGNtcHhjaGcoKSBvbmx5IG9yZGVycyBpdHNlbGYsIG5vdCB0aGUgdHdvIHByZWNlZGluZyBsb2Fkcy4KICAqLwogc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4X3RpbWVvdXQoc3RydWN0IGlzb3RwX3NvY2sgKnNvKQogewogCXN0cnVjdCBzb2NrICpzayA9ICZhbXA7c28tJmd0O3NrOwomIzQzOwkvKiByZWFkIHR4LnN0YXRlIGZpcnN0IGZvciB0aGUgY29tbW9uIHNlcXVlbmNlICovCiYjNDM7CXUzMiBvbGRfc3RhdGUgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7c28tJmd0O3R4LnN0YXRlKTsKIAl1MzIgZ2VuID0gUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pOwotCXUzMiBvbGRfc3RhdGUgPSBSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKTsKIAogCS8qIGRvbiYjMzk7dCBoYW5kbGUgdGltZW91dHMgaW4gSURMRSBvciBTSFVURE9XTiBzdGF0ZSAqLwogCWlmIChvbGRfc3RhdGUgPT0gSVNPVFBfSURMRSB8fCBvbGRfc3RhdGUgPT0gSVNPVFBfU0hVVERPV04pCkBAIC05NjUsMTQgJiM0MzsxMDUzLDE0IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eF90aW1lb3V0KHN0cnVjdCBpc290cF9zb2NrICpzbykKIAlpZiAoY21weGNoZygmYW1wO3NvLSZndDt0eC5zdGF0ZSwgb2xkX3N0YXRlLCBJU09UUF9JRExFKSAhPSBvbGRfc3RhdGUpCiAJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIAotCS8qIHdlIGRpZCBub3QgZ2V0IGFueSBmbG93IGNvbnRyb2wgb3IgZWNobyBmcmFtZSBpbiB0aW1lICovCiYjNDM7CS8qIGRldGVjdGVkIHRpbWVvdXQ6IHJlcG9ydCAmIzM5O2NvbW11bmljYXRpb24gZXJyb3Igb24gc2VuZCYjMzk7ICovCiAKLQlpZiAoUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pID09IGdlbikgewotCQkvKiByZXBvcnQgJiMzOTtjb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQmIzM5OyAqLwotCQlzay0mZ3Q7c2tfZXJyID0gRUNPTU07Ci0JCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKQotCQkJc2tfZXJyb3JfcmVwb3J0KHNrKTsKLQl9CiYjNDM7CS8qIGEgc3RhbGUgcmVhZCBvZiB0aGlzIHNsb3QgYnkgYSB3YWl0ZXIgc3RpbGwgZmFsbHMgYmFjayB0byBFQ09NTSAqLwomIzQzOwlpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBnZW4sIEVDT01NKTsKJiM0MzsKJiM0MzsJc2stJmd0O3NrX2VyciA9IEVDT01NOwomIzQzOwlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKJiM0MzsJCXNrX2Vycm9yX3JlcG9ydChzayk7CiAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFtcDtzby0mZ3Q7d2FpdCk7CiAKQEAgLTEwMDcsNyAmIzQzOzEwOTUsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfdHhmcl90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQogCQkgICAgICBIUlRJTUVSX01PREVfUkVMX1NPRlQpOwogCiAJLyogY2ZlY2hvIHNob3VsZCBiZSBjb25zdW1lZCBieSBpc290cF9yY3ZfZWNobygpIGhlcmUgKi8KLQlpZiAoc28tJmd0O3R4LnN0YXRlID09IElTT1RQX1NFTkRJTkcgJmFtcDsmYW1wOyAhc28tJmd0O2NmZWNobykKJiM0MzsJaWYgKFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpID09IElTT1RQX1NFTkRJTkcgJmFtcDsmYW1wOyAhUkVBRF9PTkNFKHNvLSZndDtjZmVjaG8pKQogCQlpc290cF9zZW5kX2NmcmFtZShzbyk7CiAKIAlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CkBAIC0xMDI2LDEwICYjNDM7MTExNCwxMiBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAlzNjQgaHJ0aW1lcl9zZWMgPSBJU09UUF9FQ0hPX1RJTUVPVVQ7CiAJc3RydWN0IGhydGltZXIgKnR4X2hydCA9ICZhbXA7c28tJmd0O2VjaG90aW1lcjsKIAl1MzIgbmV3X3N0YXRlID0gSVNPVFBfU0VORElORzsKJiM0MzsJdTMyIG15X2dlbjsKJiM0MzsJdTMyIG9sZF9jZmVjaG87CiAJaW50IG9mZjsKIAlpbnQgZXJyOwogCi0JaWYgKCFzby0mZ3Q7Ym91bmQgfHwgc28tJmd0O3R4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKQomIzQzOwlpZiAoIXNvLSZndDtib3VuZCB8fCBSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKSA9PSBJU09UUF9TSFVURE9XTikKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCiAJLyogY2xhaW0gdGhlIHNvY2tldCB1bmRlciBzby0mZ3Q7cnhfbG9jazogdGhpcyBzZXJpYWxpemVzIHRoZSBjbGFpbQpAQCAtMTA0NiwyOSAmIzQzOzExMzYsMzMgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJCWlmIChtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAotCQlpZiAoc28tJmd0O3R4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKQomIzQzOwkJaWYgKFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKQogCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCiAJCS8qIHdhaXQgZm9yIGNvbXBsZXRlIHRyYW5zbWlzc2lvbiBvZiBjdXJyZW50IHBkdSAqLwogCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tJmd0O3dhaXQsCi0JCQkJCSAgICAgICBzby0mZ3Q7dHguc3RhdGUgPT0gSVNPVFBfSURMRSk7CiYjNDM7CQkJCQkgICAgICAgUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgPT0gSVNPVFBfSURMRSB8fAomIzQzOwkJCQkJICAgICAgIFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JLyogbmV3IHRyYW5zZmVyOiBidW1wIHNvLSZndDt0eF9nZW4gYW5kIGRyYWluIHRoZSBvbGQgb25lJiMzOTtzIHRpbWVycywKLQkgKiBzdGlsbCB1bmRlciB0aGUgc28tJmd0O3J4X2xvY2sgd2UganVzdCBjbGFpbWVkIHRoZSBzb2NrZXQgd2l0aAotCSAqLwotCVdSSVRFX09OQ0Uoc28tJmd0O3R4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTsKLQlXUklURV9PTkNFKHNvLSZndDt0eF9nZW4sIFJFQURfT05DRShzby0mZ3Q7dHhfZ2VuKSAmIzQzOyAxKTsKJiM0MzsJLyogdHhmcnRpbWVyJiMzOTtzIGNhbGxiYWNrIHJlLWFybXMgZWNob3RpbWVyIGxvY2stZnJlZTogZHJhaW4gaXQgZmlyc3QgKi8KJiM0MzsJaHJ0aW1lcl9jYW5jZWwoJmFtcDtzby0mZ3Q7dHhmcnRpbWVyKTsKIAlocnRpbWVyX2NhbmNlbCgmYW1wO3NvLSZndDt0eHRpbWVyKTsKIAlocnRpbWVyX2NhbmNlbCgmYW1wO3NvLSZndDtlY2hvdGltZXIpOwotCWhydGltZXJfY2FuY2VsKCZhbXA7c28tJmd0O3R4ZnJ0aW1lcik7Ci0Jc28tJmd0O2NmZWNobyA9IDA7CiYjNDM7CiYjNDM7CS8qIG5ldyB0cmFuc2ZlcjogaW5jcmVtZW50IHNvLSZndDt0eF9nZW4gYW5kIHNldCB0eC5zdGF0ZSBhZnRlciBiYXJyaWVyICovCiYjNDM7CW15X2dlbiA9IGlzb3RwX2luY190eF9nZW4oUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pKTsKJiM0MzsJaXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgbXlfZ2VuLCBFQ09NTSk7IC8qIHByZXZlbnQgc3RhbGUgc2xvdCBtYXRjaGluZyAqLwomIzQzOwlXUklURV9PTkNFKHNvLSZndDt0eF9nZW4sIG15X2dlbik7CiYjNDM7CXNtcF93bWIoKTsgLyogc2VlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi8KJiM0MzsJV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1NFTkRJTkcpOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtjZmVjaG8sIDApOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7c28tJmd0O3J4X2xvY2spOwogCiAJLyogc28tJmd0O2JvdW5kIGlzIG9ubHkgY2hlY2tlZCBvbmNlIGFib3ZlIC0gYSB3YWtldXAgbWF5IGhhdmUKLQkgKiB1bmJvdW5kL3JlYm91bmQgdGhlIHNvY2tldCBtZWFud2hpbGUsIHNvIHJlLXZhbGlkYXRlIGl0CiYjNDM7CSAqIHVuYm91bmQvcmVib3VuZCB0aGUgc29ja2V0IG1lYW53aGlsZSA9Jmd0OyByZWNoZWNrCiAJICovCiAJaWYgKCFzby0mZ3Q7Ym91bmQpIHsKIAkJZXJyID0gLUVBRERSTk9UQVZBSUw7CkBAIC0xMTI3LDYgJiM0MzsxMjIxLDkgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAKIAljc3gtJmd0O2Nhbl9paWYgPSBkZXYtJmd0O2lmaW5kZXg7CiAKJiM0MzsJLyogc2V0IHVpZCBpbiB0eCBza2IgdG8gaWRlbnRpZnkgQ0YgZWNobyBmcmFtZXMgKi8KJiM0MzsJY2FuX3NldF9za2JfdWlkKHNrYik7CiYjNDM7CiAJc28tJmd0O3R4LmxlbiA9IHNpemU7CiAJc28tJmd0O3R4LmlkeCA9IDA7CiAKQEAgLTExMzQsOCAmIzQzOzEyMzEsOSBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAlza2JfcHV0X3plcm8oc2tiLCBzby0mZ3Q7bGwubXR1KTsKIAogCS8qIGNmZWNobyBzaG91bGQgaGF2ZSBiZWVuIHplcm8mIzM5O2VkIGJ5IGluaXQgLyBmb3JtZXIgaXNvdHBfcmN2X2VjaG8oKSAqLwotCWlmIChzby0mZ3Q7Y2ZlY2hvKQotCQlwcl9ub3RpY2Vfb25jZSgmIzM0O2Nhbi1pc290cDogdW5pbml0IGNmZWNobyAlMDhYXG4mIzM0Oywgc28tJmd0O2NmZWNobyk7CiYjNDM7CW9sZF9jZmVjaG8gPSBSRUFEX09OQ0Uoc28tJmd0O2NmZWNobyk7CiYjNDM7CWlmIChvbGRfY2ZlY2hvKQomIzQzOwkJcHJfbm90aWNlX29uY2UoJiMzNDtjYW4taXNvdHA6IHVuaW5pdCBjZmVjaG8gJTA4WFxuJiMzNDssIG9sZF9jZmVjaG8pOwogCiAJLyogY2hlY2sgZm9yIHNpbmdsZSBmcmFtZSB0cmFuc21pc3Npb24gZGVwZW5kaW5nIG9uIFRYX0RMICovCiAJaWYgKHNpemUgJmx0Oz0gc28tJmd0O3R4LmxsX2RsIC0gU0ZfUENJX1NaNCAtIGFlIC0gb2ZmKSB7CkBAIC0xMTYzLDcgJiM0MzsxMjYxLDcgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJCQljZi0mZ3Q7ZGF0YVthZV0gfD0gc2l6ZTsKIAogCQkvKiBzZXQgQ0YgZWNobyB0YWcgZm9yIGlzb3RwX3Jjdl9lY2hvKCkgKFNGLW1vZGUpICovCi0JCXNvLSZndDtjZmVjaG8gPSAqKHUzMiAqKWNmLSZndDtkYXRhOwomIzQzOwkJV1JJVEVfT05DRShzby0mZ3Q7Y2ZlY2hvLCBza2ItJmd0O2hhc2gpOwogCX0gZWxzZSB7CiAJCS8qIHNlbmQgZmlyc3QgZnJhbWUgKi8KIApAQCAtMTE4MCw3ICYjNDM7MTI3OCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQkJc28tJmd0O3R4ZmMuYnMgPSAwOwogCiAJCQkvKiBzZXQgQ0YgZWNobyB0YWcgZm9yIGlzb3RwX3Jjdl9lY2hvKCkgKENGLW1vZGUpICovCi0JCQlzby0mZ3Q7Y2ZlY2hvID0gKih1MzIgKiljZi0mZ3Q7ZGF0YTsKJiM0MzsJCQlXUklURV9PTkNFKHNvLSZndDtjZmVjaG8sIHNrYi0mZ3Q7aGFzaCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBzdGFuZGFyZCBmbG93IGNvbnRyb2wgY2hlY2sgKi8KIAkJCW5ld19zdGF0ZSA9IElTT1RQX1dBSVRfRklSU1RfRkM7CkBAIC0xMTkwLDEyICYjNDM7MTI4OCwxMiBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCXR4X2hydCA9ICZhbXA7c28tJmd0O3R4dGltZXI7CiAKIAkJCS8qIG5vIENGIGVjaG8gdGFnIGZvciBpc290cF9yY3ZfZWNobygpIChGRi1tb2RlKSAqLwotCQkJc28tJmd0O2NmZWNobyA9IDA7CiYjNDM7CQkJV1JJVEVfT05DRShzby0mZ3Q7Y2ZlY2hvLCAwKTsKIAkJfQogCX0KIAogCXNwaW5fbG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKLQlpZiAoc28tJmd0O3R4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKSB7CiYjNDM7CWlmIChSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKSA9PSBJU09UUF9TSFVURE9XTikgewogCQkvKiBpc290cF9yZWxlYXNlKCkgaGFzIHNpbmNlIHRha2VuIG92ZXIgYW5kIGFscmVhZHkgZHJhaW5lZAogCQkgKiBvdXIgdGltZXJzIC0gZG9uJiMzOTt0IHNlbmQgaW50byBhIHNvY2tldCB0aGF0JiMzOTtzIGdvaW5nIGF3YXkKIAkJICovCkBAIC0xMjA2LDcgJiM0MzsxMzA0LDcgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAl9CiAJLyogV0FJVF9GSVJTVF9GQyBmb3Igc3RhbmRhcmQgRkYsIGVsc2Ugc3RheXMgSVNPVFBfU0VORElORyAqLwotCXNvLSZndDt0eC5zdGF0ZSA9IG5ld19zdGF0ZTsKJiM0MzsJV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIG5ld19zdGF0ZSk7CiAJaHJ0aW1lcl9zdGFydCh0eF9ocnQsIGt0aW1lX3NldChocnRpbWVyX3NlYywgMCksCiAJCSAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzby0mZ3Q7cnhfbG9jayk7CkBAIC0xMjIzLDIwICYjNDM7MTMyMSw0OSBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCSAgICAgICBfX2Z1bmNfXywgRVJSX1BUUihlcnIpKTsKIAogCQlzcGluX2xvY2tfYmgoJmFtcDtzby0mZ3Q7cnhfbG9jayk7CiYjNDM7CiYjNDM7CQkvKiBuZXcgdHJhbnNmZXIgYWxyZWFkeSBjbGFpbWVkIGJ5IGEgY29uY3VycmVudCBjb21wbGV0aW9uLAomIzQzOwkJICogdGltZW91dCBvciBzZW5kbXNnKCkgd2hpbGUgd2Ugd2VyZSBzdHVjayBpbiBjYW5fc2VuZCgpPwomIzQzOwkJICovCiYjNDM7CQlpZiAoUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pICE9IG15X2dlbikgewomIzQzOwkJCS8qIGRvbiYjMzk7dCB0b3VjaCB0aW1lcnMgYW5kIHN0YXRlIG9mIHRoZSBuZXcgdHJhbnNmZXIgKi8KJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwogCQkvKiBubyB0cmFuc21pc3Npb24gLSZndDsgbm8gdGltZW91dCBtb25pdG9yaW5nICovCiAJCWhydGltZXJfY2FuY2VsKHR4X2hydCk7CiAJCWdvdG8gZXJyX291dF9kcm9wX2xvY2tlZDsKIAl9CiAKIAlpZiAod2FpdF90eF9kb25lKSB7Ci0JCS8qIHdhaXQgZm9yIGNvbXBsZXRlIHRyYW5zbWlzc2lvbiBvZiBjdXJyZW50IHBkdSAqLwotCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tJmd0O3dhaXQsIHNvLSZndDt0eC5zdGF0ZSA9PSBJU09UUF9JRExFKTsKJiM0MzsJCS8qIHdha2UgdXAgZm9yOgomIzQzOwkJICogLSBjb25jdXJyZW50IHNlbmRtc2coKSBjbGFpbWluZyBhIG5ldyB0cmFuc2ZlcgomIzQzOwkJICogLSBjb21wbGV0ZSB0cmFuc21pc3Npb24gb2YgY3VycmVudCBQRFUKJiM0MzsJCSAqIC0gc2h1dGRvd24gc3RhdGUgY2hhbmdlIGluIGlzb3RwX3JlbGVhc2UoKQomIzQzOwkJICogaXNvdHBfdHhfZ2VuX2RvbmUoKSB1c2VzIGNvbW1vbiB0eC5zdGF0ZS90eF9nZW4gcmVhZCBzZXF1ZW5jZQomIzQzOwkJICovCiYjNDM7CQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tJmd0O3dhaXQsCiYjNDM7CQkJCQkgICAgICAgaXNvdHBfdHhfZ2VuX2RvbmUoc28sIG15X2dlbikpOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfZXZlbnRfZHJvcDsKIAotCQllcnIgPSBzb2NrX2Vycm9yKHNrKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CiYjNDM7CQkvKiBzdGlsbCBvdXIgY2xhaW0sIGJ1dCBpc290cF9yZWxlYXNlKCkgZm9yY2Utc2h1dCBpdCBkb3duICovCiYjNDM7CQlpZiAoc21wX2xvYWRfYWNxdWlyZSgmYW1wO3NvLSZndDt0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04gJmFtcDsmYW1wOwomIzQzOwkJICAgIFJFQURfT05DRShzby0mZ3Q7dHhfZ2VuKSA9PSBteV9nZW4pIHsKJiM0MzsJCQllcnIgPSAtRUFERFJOT1RBVkFJTDsKJiM0MzsJCQlnb3RvIGVycl9ldmVudF9kcm9wOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogb3duIGNvbXBsZXRpb24sIG9yIHR4X2dlbiBtb3ZlZCBvbiAtIGVpdGhlciB3YXkgdGhpcyBpcwomIzQzOwkJICogd2hhdCBpc290cF9nZXRfdHhfcmVzdWx0KCkgcmVjb3JkZWQgZm9yIG15X2dlbgomIzQzOwkJICovCiYjNDM7CQllcnIgPSBpc290cF9nZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4pOwomIzQzOwomIzQzOwkJLyogZHJhaW4gdG8gYXZvaWQgc3RhbGUgZXJyb3IgZm9yIGEgbGF0ZXIgcG9sbCgpL1NPX0VSUk9SICovCiYjNDM7CQlzb2NrX2Vycm9yKHNrKTsKJiM0MzsKJiM0MzsJCXJldHVybiBlcnIgPyBlcnIgOiBzaXplOwogCX0KIAogCXJldHVybiBzaXplOwpAQCAtMTI0NiwxNSAmIzQzOzEzNzMsMjYgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJc3Bpbl9sb2NrX2JoKCZhbXA7c28tJmd0O3J4X2xvY2spOwogCWdvdG8gZXJyX291dF9kcm9wX2xvY2tlZDsKIGVycl9ldmVudF9kcm9wOgotCS8qIGludGVycnVwdGVkIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAtIGRyYWluIGl0cyB0aW1lcnMgKi8KJiM0MzsJLyogaW50ZXJydXB0ZWQgb3Igc2h1dCBkb3duIHdoaWxlIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAqLwogCXNwaW5fbG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogbmV3IHRyYW5zZmVyIGFscmVhZHkgc3RhcnRlZCBieSBjb25jdXJyZW50IHNlbmRtc2coKT8gKi8KJiM0MzsJaWYgKFJFQURfT05DRShzby0mZ3Q7dHhfZ2VuKSAhPSBteV9nZW4pIHsKJiM0MzsJCS8qIGRvbiYjMzk7dCB0b3VjaCB0aW1lcnMgYW5kIHN0YXRlcyBvZiB0aGUgbmV3IHRyYW5zZmVyICovCiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlocnRpbWVyX2NhbmNlbCgmYW1wO3NvLSZndDt0eGZydGltZXIpOwogCWhydGltZXJfY2FuY2VsKCZhbXA7c28tJmd0O3R4dGltZXIpOwogCWhydGltZXJfY2FuY2VsKCZhbXA7c28tJmd0O2VjaG90aW1lcik7CiBlcnJfb3V0X2Ryb3BfbG9ja2VkOgogCS8qIHJlbGVhc2UgdGhlIGNsYWltOyBzby0mZ3Q7cnhfbG9jayBzdGlsbCBoZWxkIGZyb20gYWJvdmUgKi8KLQlzby0mZ3Q7Y2ZlY2hvID0gMDsKLQlzby0mZ3Q7dHguc3RhdGUgPSBJU09UUF9JRExFOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtjZmVjaG8sIDApOwomIzQzOwomIzQzOwkvKiBvbmx5IGNsYWltIHRvIElETEUgaWYgaXNvdHBfcmVsZWFzZSgpIGhhcyBub3QgdGFrZW4gb3ZlciAqLwomIzQzOwlpZiAoUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgIT0gSVNPVFBfU0hVVERPV04pCiYjNDM7CQlXUklURV9PTkNFKHNvLSZndDt0eC5zdGF0ZSwgSVNPVFBfSURMRSk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzby0mZ3Q7cnhfbG9jayk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7c28tJmd0O3dhaXQpOwogCkBAIC0xMzIwLDggJiM0MzsxNDU4LDkgQEAgc3RhdGljIGludCBpc290cF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJLyogYmVzdC1lZmZvcnQ6IHdhaXQgZm9yIGEgcnVubmluZyBwZHUgdG8gZmluaXNoLCBidXQgZG9uJiMzOTt0IGJsb2NrIG9uCiAJICogaXQgZm9yZXZlciAtIGdpdmUgdXAgYWZ0ZXIgdGhlIGZpcnN0IHNpZ25hbAogCSAqLwotCXdoaWxlIChzby0mZ3Q7dHguc3RhdGUgIT0gSVNPVFBfSURMRSAmYW1wOyZhbXA7Ci0JICAgICAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzby0mZ3Q7d2FpdCwgc28tJmd0O3R4LnN0YXRlID09IElTT1RQX0lETEUpID09IDApCiYjNDM7CXdoaWxlIChSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKSAhPSBJU09UUF9JRExFICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzby0mZ3Q7d2FpdCwKJiM0MzsJCQkJCVJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpID09IElTT1RQX0lETEUpID09IDApCiAJCTsKIAogCS8qIGNsYWltIHRoZSBzb2NrZXQgdW5kZXIgc28tJmd0O3J4X2xvY2sgbGlrZSBzZW5kbXNnKCkgZG9lcywgc28gaXRzCkBAIC0xMzI5LDkgJiM0MzsxNDY4LDEyIEBAIHN0YXRpYyBpbnQgaXNvdHBfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogCSAqIHVuY29uZGl0aW9uYWxseSwgZXZlbiB3aGVuIGEgc2lnbmFsIGN1dCB0aGUgd2FpdCBhYm92ZSBzaG9ydAogCSAqLwogCXNwaW5fbG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKLQlzby0mZ3Q7dHguc3RhdGUgPSBJU09UUF9TSFVURE9XTjsKJiM0MzsJV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1NIVVRET1dOKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKLQlzby0mZ3Q7cnguc3RhdGUgPSBJU09UUF9JRExFOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtyeC5zdGF0ZSwgSVNPVFBfSURMRSk7CiYjNDM7CiYjNDM7CS8qIGZvcmNlZCBTSFVURE9XTiBtYXkgaGF2ZSBza2lwcGVkIElETEUgKGdhdmUgdXAgb24gYSBzaWduYWwpICovCiYjNDM7CXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYW1wO3NvLSZndDt3YWl0KTsKIAogCXNwaW5fbG9jaygmYW1wO2lzb3RwX25vdGlmaWVyX2xvY2spOwogCXdoaWxlIChpc290cF9idXN5X25vdGlmaWVyID09IHNvKSB7CkBAIC0xNDQ3LDcgJiM0MzsxNTg5LDggQEAgc3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGwKIAkgKiB3aXRoIHNvLSZndDtib3VuZCBpbiB0aGUgc2FtZSBsb2NrX3NvY2soKSBzZWN0aW9uIGFib3ZlLCBzbyB0aGVyZSBpcwogCSAqIG5vIHdpbmRvdyBpbiB3aGljaCBhIGNvbmN1cnJlbnQgaXNvdHBfbm90aWZ5KCkgY291bGQgYmUgbWlzc2VkLgogCSAqLwotCWlmIChzby0mZ3Q7dHguc3RhdGUgIT0gSVNPVFBfSURMRSB8fCBzby0mZ3Q7cnguc3RhdGUgIT0gSVNPVFBfSURMRSkgewomIzQzOwlpZiAoUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSB8fAomIzQzOwkgICAgUkVBRF9PTkNFKHNvLSZndDtyeC5zdGF0ZSkgIT0gSVNPVFBfSURMRSkgewogCQllcnIgPSAtRUFHQUlOOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNDgxLDcgJiM0MzsxNjI0LDcgQEAgc3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGwKIAkJCQlpc290cF9yY3YsIHNrLCAmIzM0O2lzb3RwJiMzNDssIHNrKTsKIAogCS8qIG5vIGNvbnNlY3V0aXZlIGZyYW1lIGVjaG8gc2tiIGluIGZsaWdodCAqLwotCXNvLSZndDtjZmVjaG8gPSAwOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtjZmVjaG8sIDApOwogCiAJLyogcmVnaXN0ZXIgZm9yIGVjaG8gc2tiJiMzOTtzICovCiAJY2FuX3J4X3JlZ2lzdGVyKG5ldCwgZGV2LCB0eF9pZCwgU0lOR0xFX01BU0sodHhfaWQpLApAQCAtMTg0Nyw3ICYjNDM7MTk5MCw3IEBAIHN0YXRpYyBfX3BvbGxfdCBpc290cF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBwb2xsX3RhYmxlICp3CiAJcG9sbF93YWl0KGZpbGUsICZhbXA7c28tJmd0O3dhaXQsIHdhaXQpOwogCiAJLyogQ2hlY2sgZm9yIGZhbHNlIHBvc2l0aXZlcyBkdWUgdG8gVFggc3RhdGUgKi8KLQlpZiAoKG1hc2sgJmFtcDsgRVBPTExXUk5PUk0pICZhbXA7JmFtcDsgKHNvLSZndDt0eC5zdGF0ZSAhPSBJU09UUF9JRExFKSkKJiM0MzsJaWYgKChtYXNrICZhbXA7IEVQT0xMV1JOT1JNKSAmYW1wOyZhbXA7IChSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKSAhPSBJU09UUF9JRExFKSkKIAkJbWFzayAmYW1wOz0gfihFUE9MTE9VVCB8IEVQT0xMV1JOT1JNKTsKIAogCXJldHVybiBtYXNrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk1NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElTT1RQIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgbmV0L2Nhbi9pc290cC5jYC4gU2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBwcmltYXJpbHkgZm9jdXNlZCBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHRyYW5zbWl0IGFuZCByZWNlaXZlIHN0YXRlcyB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBvcHRpbWl6YXRpb24sIHdoaWNoIGFsd2F5cyBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgZGF0YSByYWNlcyBhbmQgZnV6emluZyBvcHBvcnR1bml0aWVzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBzby0mZ3Q7dHhfcmVzdWx0W11gIGFuZCBgc28tJmd0O3R4X2dlbmAgdG8gdHJhY2sgVFggcmVzdWx0cyBwZXIgZ2VuZXJhdGlvbiBpcyBuZXcuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBJIHdhbnQgdG8gc3ViamVjdCB0byBzb21lIHNlcmlvdXMgZnV6emluZy4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLiBMb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSB3aG9sZSBsaXN0OiBgaXNvdHBfcmN2X2ZjYCwgYGlzb3RwX3Jjdl9zZmAsIGBpc290cF9yY3ZfZmZgLCBgaXNvdHBfcmN2X2NmYCwgYGlzb3RwX3JjdmAsIGBpc290cF9zZW5kX2NmcmFtZWAsIGBpc290cF9yY3ZfZWNob2AsIGBpc290cF90eF90aW1lb3V0YCwgYGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcmAsIGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX3JlbGVhc2VgLCBgaXNvdHBfYmluZGAsIGFuZCBgaXNvdHBfcG9sbGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCB3aGF0IGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHM/IEkmIzM5O20gdGhpbmtpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGV4cG9zZSB0aGUgQVBJIHRvIHRoZSByZXN0IG9mIHRoZSBDQU4gc3RhY2sgYW5kLCB1bHRpbWF0ZWx5LCB0byB0aGUgdXNlciBzcGFjZS4gQmFzZWQgb24gdGhlIGxpc3QsIGBpc290cF9zZW5kbXNnYCBhbmQgYGlzb3RwX2JpbmRgIGFyZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIGBpc290cF9yY3ZgIGlzIGFsc28gdGhlcmUsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIHRoZSBDQU4gY29yZS4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBpc290cF9yY3ZfZmNgLCBldGMuIGFyZSBjYWxsZWQgYnkgYGlzb3RwX3JjdmAuIFNpbmNlIGBpc290cF9yY3ZgIGlzIGFsc28gc3RhdGljIEkmIzM5O2xsIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoYXQgd2l0aCBgZ3JlcHBlcmAgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIG1haW4gQVBJIGVudHJ5IHBvaW50cywgb3IgYW55dGhpbmcgZWxzZSBpbnRlcmVzdGluZy4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgSSBjYW4gZmluZCB0aGUgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkKSBpc290cF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL2lzb3RwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jPTIwOT1zdGF0aWMgdTMyIGlzb3RwX2dldF90eF9lcnIodTMyIGdlbl9lcnIpXG4tLVxubmV0L2Nhbi9pc290cC5jLTIxNC0vKiBzdG9yZSB0cmFuc2ZlciByZXN1bHQgaW4gcGVyLWdlbmVyYXRpb24lNCBzby1cdTAwM2V0eF9yZXN1bHRbXSBzbG90ICovXG5uZXQvY2FuL2lzb3RwLmM6MjE1OnN0YXRpYyB2b2lkIGlzb3RwX3NldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuLCBpbnQgZXJyKVxubmV0L2Nhbi9pc290cC5jLTIxNi17XG4tLVxubmV0L2Nhbi9pc290cC5jLTIyMS0vKiBmZXRjaCB0aGUgcmVzdWx0IHJlY29yZGVkIGZvciAmIzM5O2dlbiYjMzk7LCBhcyBhIChuZWdhdGl2ZSkgZXJybm8gKDAgZm9yIHN1Y2Nlc3MpICovXG5uZXQvY2FuL2lzb3RwLmM6MjIyOnN0YXRpYyBpbnQgaXNvdHBfZ2V0X3R4X3Jlc3VsdChzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHUzMiBnZW4pXG5uZXQvY2FuL2lzb3RwLmMtMjIzLXtcbi0tXG5uZXQvY2FuL2lzb3RwLmM9MjY1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF9yeF90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxuLS1cbm5ldC9jYW4vaXNvdHAuYy0yODUtXG5uZXQvY2FuL2lzb3RwLmM6Mjg2OnN0YXRpYyBpbnQgaXNvdHBfc2VuZF9mYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBhZSwgdTggZmxvd3N0YXR1cylcbm5ldC9jYW4vaXNvdHAuYy0yODcte1xuLS1cbm5ldC9jYW4vaXNvdHAuYy0zNTQtXG5uZXQvY2FuL2lzb3RwLmM6MzU1OnN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxubmV0L2Nhbi9pc290cC5jLTM1Ni17XG4tLVxubmV0L2Nhbi9pc290cC5jPTQxMT1zdGF0aWMgaW50IGNoZWNrX3BhZChzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsXG4tLVxubmV0L2Nhbi9pc290cC5jLTQzOC1cbm5ldC9jYW4vaXNvdHAuYzo0Mzk6c3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKTtcbm5ldC9jYW4vaXNvdHAuYy00NDAtXG5uZXQvY2FuL2lzb3RwLmM6NDQxOnN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxubmV0L2Nhbi9pc290cC5jLTQ0Mi17XG4tLVxubmV0L2Nhbi9pc290cC5jLTUzNy1cbm5ldC9jYW4vaXNvdHAuYzo1Mzg6c3RhdGljIGludCBpc290cF9yY3Zfc2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgcGNpbGVuLFxubmV0L2Nhbi9pc290cC5jLTUzOS1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuLS1cbm5ldC9jYW4vaXNvdHAuYy01NzAtXG5uZXQvY2FuL2lzb3RwLmM6NTcxOnN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxubmV0L2Nhbi9pc290cC5jLTU3Mi17XG4tLVxubmV0L2Nhbi9pc290cC5jLTY0My1cbm5ldC9jYW4vaXNvdHAuYzo2NDQ6c3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG5uZXQvY2FuL2lzb3RwLmMtNjQ1LVx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2Nhbi9pc290cC5jLTc0My1cbm5ldC9jYW4vaXNvdHAuYzo3NDQ6c3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXG5uZXQvY2FuL2lzb3RwLmMtNzQ1LXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtODMxLVxubmV0L2Nhbi9pc290cC5jOjgzMjpzdGF0aWMgdm9pZCBpc290cF9maWxsX2RhdGFmcmFtZShzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBzdHJ1Y3QgaXNvdHBfc29jayAqc28sXG5uZXQvY2FuL2lzb3RwLmMtODMzLVx0XHRcdFx0IGludCBhZSwgaW50IG9mZilcbi0tXG5uZXQvY2FuL2lzb3RwLmMtODYyLVxubmV0L2Nhbi9pc290cC5jOjg2MzpzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pXG5uZXQvY2FuL2lzb3RwLmMtODY0LXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtOTMyLVxubmV0L2Nhbi9pc290cC5jOjkzMzpzdGF0aWMgdm9pZCBpc290cF9jcmVhdGVfZmZyYW1lKHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIHN0cnVjdCBpc290cF9zb2NrICpzbyxcbm5ldC9jYW4vaXNvdHAuYy05MzQtXHRcdFx0XHRpbnQgYWUpXG4tLVxubmV0L2Nhbi9pc290cC5jLTk2Ny1cbm5ldC9jYW4vaXNvdHAuYzo5Njg6c3RhdGljIHZvaWQgaXNvdHBfcmN2X2VjaG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSlcbm5ldC9jYW4vaXNvdHAuYy05Njkte1xuLS1cbm5ldC9jYW4vaXNvdHAuYz0xMDg4PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eGZyX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpXG4tLVxubmV0L2Nhbi9pc290cC5jLTExMDMtXG5uZXQvY2FuL2lzb3RwLmM6MTEwNDpzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC9jYW4vaXNvdHAuYy0xMTA1LXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTQwMS1cbm5ldC9jYW4vaXNvdHAuYzoxNDAyOnN0YXRpYyBpbnQgaXNvdHBfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxubmV0L2Nhbi9pc290cC5jLTE0MDMtXHRcdFx0IGludCBmbGFncylcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTQ0NS1cbm5ldC9jYW4vaXNvdHAuYzoxNDQ2OnN0YXRpYyBpbnQgaXNvdHBfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L2Nhbi9pc290cC5jLTE0NDcte1xuLS1cbm5ldC9jYW4vaXNvdHAuYy0xNTMzLVxubmV0L2Nhbi9pc290cC5jOjE1MzQ6c3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxlbilcbm5ldC9jYW4vaXNvdHAuYy0xNTM1LXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTY2MS1cbm5ldC9jYW4vaXNvdHAuYzoxNjYyOnN0YXRpYyBpbnQgaXNvdHBfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgcGVlcilcbm5ldC9jYW4vaXNvdHAuYy0xNjYzLXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTY3OS1cbm5ldC9jYW4vaXNvdHAuYzoxNjgwOnN0YXRpYyBpbnQgaXNvdHBfc2V0c29ja29wdF9sb2NrZWQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbm5ldC9jYW4vaXNvdHAuYy0xNjgxLVx0XHRcdCAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9jYW4vaXNvdHAuYy0xNzc3LVxubmV0L2Nhbi9pc290cC5jOjE3Nzg6c3RhdGljIGludCBpc290cF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvY2FuL2lzb3RwLmMtMTc3OS1cdFx0XHQgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTc5My1cbm5ldC9jYW4vaXNvdHAuYzoxNzk0OnN0YXRpYyBpbnQgaXNvdHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L2Nhbi9pc290cC5jLTE3OTUtXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTg0NS1cbm5ldC9jYW4vaXNvdHAuYzoxODQ2OnN0YXRpYyB2b2lkIGlzb3RwX25vdGlmeShzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHVuc2lnbmVkIGxvbmcgbXNnLFxubmV0L2Nhbi9pc290cC5jLTE4NDctXHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2Nhbi9pc290cC5jLTE4OTAtXG5uZXQvY2FuL2lzb3RwLmM6MTg5MTpzdGF0aWMgaW50IGlzb3RwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxubmV0L2Nhbi9pc290cC5jLTE4OTItXHRcdFx0ICB2b2lkICpwdHIpXG4tLVxubmV0L2Nhbi9pc290cC5jLTE5MTMtXG5uZXQvY2FuL2lzb3RwLmM6MTkxNDpzdGF0aWMgdm9pZCBpc290cF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbm5ldC9jYW4vaXNvdHAuYy0xOTE1LXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTkyOC1cbm5ldC9jYW4vaXNvdHAuYzoxOTI5OnN0YXRpYyBpbnQgaXNvdHBfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY2FuL2lzb3RwLmMtMTkzMC17XG4tLVxubmV0L2Nhbi9pc290cC5jPTE5ODQ9c3RhdGljIF9fcG9sbF90IGlzb3RwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHBvbGxfdGFibGUgKndhaXQpXG4tLVxubmV0L2Nhbi9pc290cC5jLTE5OTgtXG5uZXQvY2FuL2lzb3RwLmM6MTk5OTpzdGF0aWMgaW50IGlzb3RwX3NvY2tfbm9faW9jdGxjbWQoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbm5ldC9jYW4vaXNvdHAuYy0yMDAwLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk3NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSVNPLVRQIEFQSSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBJU08tVFAgcGF0Y2gsIGFuZCBpbW1lZGlhdGVseSB0aGUga2V5IGVudHJ5IHBvaW50cyBqdW1wIG91dCBhdCBtZS4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnM6IGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX3JlY3Ztc2dgLCBgaXNvdHBfYmluZGAsIGBpc290cF9yZWxlYXNlYCwgYGlzb3RwX3NldHNvY2tvcHRgLCBgaXNvdHBfZ2V0c29ja29wdGAsIGBpc290cF9wb2xsYCwgYW5kIGBpc290cF9yY3ZgLiBPZiB0aGVzZSwgYGlzb3RwX3JjdmAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFzIGl0IGlzIHRoZSBjcml0aWNhbCBjYWxsYmFjayBmcm9tIHRoZSBDQU4gY29yZSB3aGVuIGEgZnJhbWUgaXMgcmVjZWl2ZWQuCgpUaGUgYXV0aG9yIGhhcyBjbGVhcmx5IGJlZW4gYnVzeSwgYXMgdGhlIHBhdGNoIHRvdWNoZXMgYSBnb29kIGNodW5rIG9mIHRoZSBjb3JlIElTTy1UUCBpbXBsZW1lbnRhdGlvbjsgdGhlIGxpc3QgaXMgY29tcHJlaGVuc2l2ZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkmIzM5O3ZlIGJlZW4gcmlnb3JvdXMuCgpHaXZlbiB0aGUgc2NvcGUgb2YgbW9kaWZpY2F0aW9ucywgSSBuZWVkIHRvIG5hcnJvdyBteSBmb2N1cyB0byB0aGUgbW9zdCBjcml0aWNhbCBzeW1ib2xzIHRvIHRydWx5IGdyYXNwIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgYGlzb3RwX3NlbmRtc2dgLCBgaXNvdHBfYmluZGAsIGBpc290cF9yY3ZgLCBgaXNvdHBfcmVsZWFzZWAgYW5kIGBpc290cF9wb2xsYCBhcmUgd2hlcmUgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuIFRob3NlIGFyZSB0aGUgb25lcyB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIG1vc3Qgc2lnbmlmaWNhbnRseS4KCkJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgQ0FOX0lTT1RQYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgaW52b2x2ZWQuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBiYXNlIGlzLCBhbmQgd2hhdCBjYW4gYmUgY2hhbmdlZC4gR290dGEga25vdyB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBJIGdvIHN0b3JtaW5nIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU5fSVNPVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnPTU3PXNvdXJjZSBcJiMzNDtuZXQvY2FuL2oxOTM5L0tjb25maWdcJiMzNDtcbm5ldC9jYW4vS2NvbmZpZy01OC1cbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXG5uZXQvY2FuL0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2OTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIENBTl9JU09UUCBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIENBTl9JU09UUC4gVGhpcyBpc24mIzM5O3QganVzdCBhIHN1cmZhY2UtbGV2ZWwgY2hlY2s7IGl0IG5lZWRzIGEgY29tcHJlaGVuc2l2ZSByZXZpZXcuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycyBpbnZvbHZlZCDigJMgd2hhdCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnMgYXJlIGluIHBsYXk/IFdoYXQgb3RoZXIgY29tbXVuaWNhdGlvbiBzdGFja3MgYXJlIGludGVncmF0ZWQgb3IgY291bGQgYmUgaW50ZWdyYXRlZD8gSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzaWxpY29uIHZlbmRvcnMgdGhpcyBpcyB0aWVkIHRvLCBhbmQgaWYgdGhlcmUgYXJlLCB3aHkuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGxpYnJhcnksIG9yIGlzIHRoaXMgYSBtb3JlIGNvbXBsZXggZnJhbWV3b3JrPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIHdpdGggdGhlIHVuZGVybHlpbmcgQ0FOIGNvbnRyb2xsZXIgYW5kIGFueSBhc3NvY2lhdGVkIGRyaXZlcnMuIEFsc28sIGNvbnNpZGVyaW5nIGFsbCB0aGUgdGhpbmdzIHRoYXQgdG91Y2ggQ0FOX0lTT1RQLCBJIG5lZWQgdG8ga25vdyBhYm91dCBhbnkgZXh0ZXJuYWwgZmFjdG9ycy4gSXMgdGhpcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgcHJvamVjdCBvciBpcyB0aGlzIGludGVuZGVkIHRvIGJlIGEgcmV1c2FibGUgY29tcG9uZW50PyBJIHdhbnQgdG8gZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiBjb3VwbGluZyBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgcG9ydGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBhdHRlbnRpb24sIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhbmQgdGhlaXIgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgZmxleGliaWxpdHkuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgbGlzdGluZyBkZXBlbmRlbmNpZXM7IGl0JiMzOTtzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGZvciBmdXR1cmUgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOX0lTT1RQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnPTU3PXNvdXJjZSBcJiMzNDtuZXQvY2FuL2oxOTM5L0tjb25maWdcJiMzNDtcbm5ldC9jYW4vS2NvbmZpZy01OC1cbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXG5uZXQvY2FuL0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDQU4gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQ0FOIHN1YnN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgbmV0L2Nhbi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgdGhlIG1lYXQgb2YgdGhlIG1hdHRlciBpcyBwcm9iYWJseSBhcm91bmQgbGluZSA1OS4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBDQU4gbGF5ZXIgYXJlIGRlZmluZWQsIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdFx0ICBUaGUgQ0FOIEdhdGV3YXkvUm91dGVyIGlzIHVzZWQgdG8gcm91dGUgKGFuZCBtb2RpZnkpIENBTiBmcmFtZXMuXG4gIDUxOlx0XHQgIEl0IGlzIGJhc2VkIG9uIHRoZSBQRl9DQU4gY29yZSBpbmZyYXN0cnVjdHVyZSBmb3IgbXNnIGZpbHRlcmluZyBhbmRcbiAgNTI6XHRcdCAgbXNnIHNlbmRpbmcgYW5kIGNhbiBvcHRpb25hbGx5IG1vZGlmeSByb3V0ZWQgQ0FOIGZyYW1lcyBvbiB0aGUgZmx5LlxuICA1MzpcdFx0ICBDQU4gZnJhbWVzIGNhbiBiZSByb3V0ZWQgYmV0d2VlbiBDQU4gbmV0d29yayBpbnRlcmZhY2VzIChvbmUgaG9wKS5cbiAgNTQ6XHRcdCAgVGhleSBjYW4gYmUgbW9kaWZpZWQgd2l0aCBBTkQvT1IvWE9SL1NFVCBvcGVyYXRpb25zIGFzIGNvbmZpZ3VyZWRcbiAgNTU6XHRcdCAgYnkgdGhlIG5ldGxpbmsgY29uZmlndXJhdGlvbiBpbnRlcmZhY2Uga25vd24gZS5nLiBmcm9tIGlwdGFibGVzLlxuICA1NjpcdFxuICA1NzpcdHNvdXJjZSBcJiMzNDtuZXQvY2FuL2oxOTM5L0tjb25maWdcJiMzNDtcbiAgNTg6XHRcbiAgNTk6XHRjb25maWcgQ0FOX0lTT1RQXG4gIDYwOlx0XHR0cmlzdGF0ZSBcJiMzNDtJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXCYjMzQ7XG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIENBTiBUcmFuc3BvcnQgUHJvdG9jb2xzIG9mZmVyIHN1cHBvcnQgZm9yIHNlZ21lbnRlZCBQb2ludC10by1Qb2ludFxuICA2MzpcdFx0ICBjb21tdW5pY2F0aW9uIGJldHdlZW4gQ0FOIG5vZGVzIHZpYSB0d28gZGVmaW5lZCBDQU4gSWRlbnRpZmllcnMuXG4gIDY0Olx0XHQgIFRoaXMgcHJvdG9jb2wgZHJpdmVyIGltcGxlbWVudHMgc2VnbWVudGVkIGRhdGEgdHJhbnNmZXJzIGZvciBDQU4gQ0NcbiAgNjU6XHRcdCAgKGFrYSBDbGFzc2ljYWwgQ0FOLCBDQU4gMi4wQikgYW5kIENBTiBGRCBmcmFtZSB0eXBlcyB3aGljaCB3ZXJlXG4gIDY2Olx0XHQgIGludHJvZHVjZWQgd2l0aCBJU08gMTU3NjUtMjoyMDE2LlxuICA2NzpcdFx0ICBBcyBDQU4gZnJhbWVzIGNhbiBvbmx5IHRyYW5zcG9ydCBhIHNtYWxsIGFtb3VudCBvZiBkYXRhIGJ5dGVzXG4gIDY4Olx0XHQgIChtYXguIDggYnl0ZXMgZm9yIENBTiBDQyBhbmQgbWF4LiA2NCBieXRlcyBmb3IgQ0FOIEZEKSB0aGlzXG4gIDY5Olx0XHQgIHNlZ21lbnRhdGlvbiBpcyBuZWVkZWQgdG8gdHJhbnNwb3J0IGxvbmdlciBQcm90b2NvbCBEYXRhIFVuaXRzIChQRFUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjU0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgQ0FOb3BlbiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBDQU5vcGVuIGNvbmZpZ3VyYXRpb24uICYjMzQ7Q0FOXF9JU09UUCYjMzQ7IGlzIHRoZSBrZXkuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgZGVwZW5kZW5jeS4gSXQmIzM5O3MgYnVpbHQgb24gdG9wIG9mIGBDQU5gLCBzbyB0aGF0JiMzOTtzIHRoZSBwYXJlbnQgbW9kdWxlIGluIHRoaXMgY29uZmlndXJhdGlvbiBoaWVyYXJjaHkuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB0cmFjayBkb3duIHRoZSBgbWVudWNvbmZpZyBDQU5gIGVudHJ5LiBSaWdodCwgbGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgbmV0L2Nhbi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBvdmVyYWxsIENBTiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgY2VydGFpbiBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwcm9wZXIgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgQ0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZy01LVxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cbm5ldC9jYW4vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Q0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKgoKT2theSwgc28gSSBuZWVkIHRvIGVuYWJsZSBDQU4gZnVuY3Rpb25hbGl0eSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQ0FOYCBhbmQgYENBTl9JU09UUGAuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCBgQ0FOYCBpcyBsaWtlbHkgYSBmb3VuZGF0aW9uYWwgc3Vic3lzdGVtLCBhIGJyb2FkZXIgZW5hYmxpbmcgZWxlbWVudCwgd2hpbGUgYENBTl9JU09UUGAgaXMgdGhlIHNwZWNpZmljIGZlYXR1cmUgSSByZXF1aXJlLiBCZWZvcmUgSSBnbyBhaGVhZCBhbmQgYXNzdW1lIHRoYXQmIzM5O3MgdGhlIGZ1bGwgcGljdHVyZSwgaG93ZXZlciwgSSBzaG91bGQgZGVmaW5pdGVseSB2ZXJpZnkgd2hldGhlciB0aGVyZSBhcmUgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYXZvaWQgc3VycHJpc2VzIGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGFzIGZvdW5kYXRpb25hbCBhcyBDQU4uIFRpbWUgdG8gZGVsdmUgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCBvdGhlciBlbGVtZW50cyBtaWdodCBiZSB0aWVkIGludG8gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDb250cm9sbGVyIEFyZWEgTmV0d29yayAoQ0FOKSBuZXR3b3JrIGxheWVyIGNvcmUgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIENBTlxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIChDQU4pIGlzIGEgc2xvdyAodXAgdG8gMU1iaXQvcykgc2VyaWFsXG4gIDExOlx0XHQgIGNvbW11bmljYXRpb25zIHByb3RvY29sLiBEZXZlbG9wbWVudCBvZiB0aGUgQ0FOIGJ1cyBzdGFydGVkIGluXG4gIDEyOlx0XHQgIDE5ODMgYXQgUm9iZXJ0IEJvc2NoIEdtYkgsIGFuZCB0aGUgcHJvdG9jb2wgd2FzIG9mZmljaWFsbHlcbiAgMTM6XHRcdCAgcmVsZWFzZWQgaW4gMTk4Ni4gVGhlIENBTiBidXMgd2FzIG9yaWdpbmFsbHkgbWFpbmx5IGZvciBhdXRvbW90aXZlLFxuICAxNDpcdFx0ICBidXQgaXMgbm93IHdpZGVseSB1c2VkIGluIG1hcmluZSAoTk1FQTIwMDApLCBpbmR1c3RyaWFsLCBhbmQgbWVkaWNhbFxuICAxNTpcdFx0ICBhcHBsaWNhdGlvbnMuIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIENBTiBuZXR3b3JrIHByb3RvY29sIGZhbWlseVxuICAxNjpcdFx0ICBQRl9DQU4gaXMgY29udGFpbmVkIGluIFx1MDAzY0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4ucnN0XHUwMDNlLlxuICAxNzpcdFxuICAxODpcdFx0ICBJZiB5b3Ugd2FudCBDQU4gc3VwcG9ydCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUgYW5kIGFsc28gdG8gdGhlXG4gIDE5Olx0XHQgIHNwZWNpZmljIGRyaXZlciBmb3IgeW91ciBjb250cm9sbGVyKHMpIHVuZGVyIHRoZSBOZXR3b3JrIGRldmljZVxuICAyMDpcdFx0ICBzdXBwb3J0IHNlY3Rpb24uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDY3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ0FOIEludGVyZmFjZSBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIHNvIHRvIHJlYWxseSBwcm9wZXJseSB0ZXN0IHRoaXMsIHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGEgQ0FOIGludGVyZmFjZS4gU29tZXRoaW5nIGxpa2UgYSBgQ0FOX1ZDQU5gIChWaXJ0dWFsIENBTikgd2lsbCBkbyB0aGUgdHJpY2sgbmljZWx5LiBJdCYjMzk7cyB0aGUgc2ltcGxlc3Qgd2F5IHRvIGdldCB1cCBhbmQgcnVubmluZyB3aXRob3V0IGFueSBwaHlzaWNhbCBoYXJkd2FyZS4gTm93LCBJIGtub3cgdGhlIGtlcm5lbCBoYXMgdmlydHVhbCBDQU4gaW50ZXJmYWNlczsgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgZW5hYmxlZCBhbmQgYWNjZXNzaWJsZS4gTGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGlmIGBDQU5fVkNBTmAgaXMgZXZlbiBhbiBvcHRpb24uIEkmIzM5O2xsIGNoZWNrIGBkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIHVzdWFsIHNwb3QgZm9yIENBTiBkcml2ZXIgc2V0dGluZ3MuIFNob3VsZG4mIzM5O3QgdGFrZSBsb25nIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU5fVkNBTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTIzPWlmIENBTl9ERVZcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI0LVxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc6MjU6Y29uZmlnIENBTl9WQ0FOXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgTG9jYWwgQ0FOIEludGVyZmFjZSAodmNhbilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipBc3Nlc3NpbmcgQ0FOIEJ1cyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBDQU5fVkNBTmAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHVzZWZ1bCBmbGFnIHRvIGhhdmUgY29uZmlndXJlZC4gR29vZCwgZ29vZC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnl0aGluZyBmdW5kYW1lbnRhbCBpbiB0aGUgZGV2aWNlIHNldHVwLiBUaW1lIHRvIHF1aWNrbHkgdGFrZSBhIGxvb2sgYXQgYENBTl9ERVZgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwaHlzaWNhbCBDQU4gZGV2aWNlIGlzIGNvcnJlY3RseSBpZGVudGlmaWVkIGFuZCBpbml0aWFsaXplZC4gTm8gcG9pbnQgcHJvY2VlZGluZyBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByb3Blcmx5IHdpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOX0RFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTItXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZzozOm1lbnVjb25maWcgQ0FOX0RFVlxuZHJpdmVycy9uZXQvY2FuL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0NBTiBEZXZpY2UgRHJpdmVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAyNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBDQU4gSVNPVFAgQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29uZmlndXJhdGlvbnMgaW4gcGxheSBoZXJlIGFyZSBgQ0FOYCwgYENBTl9JU09UUGAsIGBDQU5fREVWYCwgYW5kIGBDQU5fVkNBTmAuIExldCYjMzk7cyBqdXN0IHF1aWNrbHkgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBhIHNvbGlkIGdyYXNwIG9uIHdoYXQgZWFjaCBvbmUgZG9lcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIEdvdHRhIGJlIG1ldGljdWxvdXMgaGVyZS4KCk5vdywgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBpc290cC5jYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgSVNPLVRQIGltcGxlbWVudGF0aW9uLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUga2V5IGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYXJlIGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX2JpbmRgLCBgaXNvdHBfcmVsZWFzZWAsIGBpc290cF9wb2xsYCwgYW5kIGBpc290cF9yY3ZgLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBtb3N0IGNsb3NlbHkuCgpJbnRlcmVzdGluZy4uLiBgaXNvdHBfcmN2YCBpcyBkZWNsYXJlZCBgc3RhdGljYCwgYnV0IGl0JiMzOTtzIHVzZWQgYXMgYSBjYWxsYmFjay4gTmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGF0IHBhdHRlcm4uIEFuZCBub3cgSSBzaG91bGQgZG91YmxlIGNoZWNrLCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYz8gSSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIHRoYXQgY291bGQgcG90ZW50aWFsbHkgY2hhbmdlIGJlaGF2aW9yIG91dHNpZGUgdGhlIG1vZHVsZS4gR290dGEgaWRlbnRpZnkgYW55IGZ1bmN0aW9uIHdpdGggZXh0ZXJuYWwgbGlua2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGlzb3RwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vaXNvdHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSW5pdGlhbGl6YXRpb24gUm91dGluZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGF0IGBtb2R1bGVfaW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG1vZHVsZSBnZXRzIG9mZiB0aGUgZ3JvdW5kLiBXaGF0JiMzOTtzIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaGVyZT8gV2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZD8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWxseSB0cm91Ymxlc29tZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQgcGl0ZmFsbHMgdGhhdCBjb3VsZCBiZSBsdXJraW5nIGluIHRoZSBlYXJseSBzdGFnZXMuIEdvdHRhIGVuc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgd2UgZXZlbiB0aGluayBhYm91dCB0b3VjaGluZyB0aGUgJiMzNDt3b3JraW5nJiMzNDsgcGFydHMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHN0YWJsZSBhbmQgcHJlZGljdGFibGUgYmVoYXZpb3IgZG93biB0aGUgbGluZSwgYW5kIGEgbG90IG9mIGlzc3VlcyBvZnRlbiBzdXJmYWNlIGhlcmUgZmlyc3QuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL2lzb3RwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jPTIwNDA9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjYW5pc290cF9ub3RpZmllciA9IHtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMjA0My1cbm5ldC9jYW4vaXNvdHAuYzoyMDQ0OnN0YXRpYyBfX2luaXQgaW50IGlzb3RwX21vZHVsZV9pbml0KHZvaWQpXG5uZXQvY2FuL2lzb3RwLmMtMjA0NS17XG4tLVxubmV0L2Nhbi9pc290cC5jPTIwNjI9c3RhdGljIF9fZXhpdCB2b2lkIGlzb3RwX21vZHVsZV9leGl0KHZvaWQpXG4tLVxubmV0L2Nhbi9pc290cC5jLTIwNjctXG5uZXQvY2FuL2lzb3RwLmM6MjA2ODptb2R1bGVfaW5pdChpc290cF9tb2R1bGVfaW5pdCk7XG5uZXQvY2FuL2lzb3RwLmMtMjA2OS1tb2R1bGVfZXhpdChpc290cF9tb2R1bGVfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODQzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFByb3RvY29sIFN0cnVjdHVyZSoqCgpPa2F5LCB3aGVyZSBzaG91bGQgSSBzdGFydD8gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBtb3N0IGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgZ292ZXJuIHRoZSBJU08tVFAgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBjaGVjayB0aGUgYGlzb3RwX29wc2Agc3RydWN0IGZpcnN0LCBzaW5jZSB0aGF0IHdpbGwgbGlrZWx5IGNvbnRhaW4gdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGFuZCBjYWxsYmFja3MgdGhhdCBkZWZpbmUgaG93IHRoZSBwcm90b2NvbCBhY3R1YWxseSAqd29ya3MqLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGxvdy1sZXZlbCB0cmFuc3BvcnQgbWVjaGFuaXNtcy4gQWx0ZXJuYXRpdmVseSwgdGhlIGBwcm90b2Agc3RydWN0IG1pZ2h0IGJlIHRoZSBwbGFjZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtb3JlIGFic3RyYWN0IHByb3RvY29sIHBhcmFtZXRlcnMgYXJlIGhlbGQuIERlcGVuZGluZyBvbiB0aGUgZGVzaWduLCBlaXRoZXIgY291bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHN0YXRlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBob2xkcyB0aGUgbWFzdGVyIGRlZmluaXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoaWNoIHN0cnVjdHVyZSBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGJvdGggYW5kIGRldGVybWluZSB3aGljaCBvbmUgaG9sZHMgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBwcm90b19vcHMgaXNvdHBfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jYW4vaXNvdHAuYz0xOTk5PXN0YXRpYyBpbnQgaXNvdHBfc29ja19ub19pb2N0bGNtZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9jYW4vaXNvdHAuYy0yMDA1LVxubmV0L2Nhbi9pc290cC5jOjIwMDY6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXNvdHBfb3BzID0ge1xubmV0L2Nhbi9pc290cC5jLTIwMDctXHQuZmFtaWx5ID0gUEZfQ0FOLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIwMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBpc290cF9vcHNgIFN0cnVjdHVyZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIGl0LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBgaXNvdHBfb3BzYCBzdHJ1Y3R1cmUuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB0aGlzIElTTy1UUCBpbXBsZW1lbnRhdGlvbiBpcyB3b3JraW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBpbnNpZGUgYW5kIG91dC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGUgY29udGV4dCBpdCYjMzk7cyB1c2VkIGluLCB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJucywgZXZlcnl0aGluZy4gSXQmIzM5O3MgYWxsIGFib3V0IGRpc3NlY3RpbmcgdGhlIGludGVyZmFjZSBhbmQgc2VlaW5nIGhvdyBkaWZmZXJlbnQgbGF5ZXJzIGFuZCBjb21wb25lbnRzIGludGVyYWN0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG9wZXJhdGlvbnMgaXQgcHJvdmlkZXMsIHRoZSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcywgcGFydGljdWxhcmx5IGVycm9yIGhhbmRsaW5nIGFuZCBmcmFtZSB0cmFuc21pc3Npb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJ1ZmZlciBtYW5hZ2VtZW50LCBmbG93IGNvbnRyb2wsIGFuZCBhbnkgc3BlY2lmaWMgcXVpcmtzIG9yIG9wdGltaXphdGlvbnMgdGhhdCBzdGFuZCBvdXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGxvZ2ljLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBvdmVyYWxsIGRlc2lnbiBjaG9pY2VzLiBHb3R0YSBnZXQgYSBnb29kIGdyaXAgb24gdGhlIHdob2xlIG9wZXJhdGlvbmFsIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDAwOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxuMjAwMTpcdHtcbjIwMDI6XHRcdC8qIG5vIGlvY3RscyBmb3Igc29ja2V0IGxheWVyIC1cdTAwM2UgaGFuZCBpdCBkb3duIHRvIE5JQyBsYXllciAqL1xuMjAwMzpcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbjIwMDQ6XHR9XG4yMDA1Olx0XG4yMDA2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXNvdHBfb3BzID0ge1xuMjAwNzpcdFx0LmZhbWlseSA9IFBGX0NBTixcbjIwMDg6XHRcdC5yZWxlYXNlID0gaXNvdHBfcmVsZWFzZSxcbjIwMDk6XHRcdC5iaW5kID0gaXNvdHBfYmluZCxcbjIwMTA6XHRcdC5jb25uZWN0ID0gc29ja19ub19jb25uZWN0LFxuMjAxMTpcdFx0LnNvY2tldHBhaXIgPSBzb2NrX25vX3NvY2tldHBhaXIsXG4yMDEyOlx0XHQuYWNjZXB0ID0gc29ja19ub19hY2NlcHQsXG4yMDEzOlx0XHQuZ2V0bmFtZSA9IGlzb3RwX2dldG5hbWUsXG4yMDE0Olx0XHQucG9sbCA9IGlzb3RwX3BvbGwsXG4yMDE1Olx0XHQuaW9jdGwgPSBpc290cF9zb2NrX25vX2lvY3RsY21kLFxuMjAxNjpcdFx0LmdldHRzdGFtcCA9IHNvY2tfZ2V0dHN0YW1wLFxuMjAxNzpcdFx0Lmxpc3RlbiA9IHNvY2tfbm9fbGlzdGVuLFxuMjAxODpcdFx0LnNodXRkb3duID0gc29ja19ub19zaHV0ZG93bixcbjIwMTk6XHRcdC5zZXRzb2Nrb3B0ID0gaXNvdHBfc2V0c29ja29wdCxcbjIwMjA6XHRcdC5nZXRzb2Nrb3B0ID0gaXNvdHBfZ2V0c29ja29wdCxcbjIwMjE6XHRcdC5zZW5kbXNnID0gaXNvdHBfc2VuZG1zZyxcbjIwMjI6XHRcdC5yZWN2bXNnID0gaXNvdHBfcmVjdm1zZyxcbjIwMjM6XHRcdC5tbWFwID0gc29ja19ub19tbWFwLFxuMjAyNDpcdH07XG4yMDI1Olx0XG4yMDI2Olx0c3RhdGljIHN0cnVjdCBwcm90byBpc290cF9wcm90byBfX3JlYWRfbW9zdGx5ID0ge1xuMjAyNzpcdFx0Lm5hbWUgPSBcJiMzNDtDQU5fSVNPVFBcJiMzNDssXG4yMDI4Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbjIwMjk6XHRcdC5vYmpfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNvdHBfc29jayksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTQwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgVGhpcyBJU08tVFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBmb2N1cyBuYXJyb3dzIHRvIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gdG91Y2hlZC4gVGhlIHRleHQgZ2l2ZXMgYSBjb25jaXNlIGxpc3Qgb2YgdGhlICphdmFpbGFibGUqIElTTy1UUCBmdW5jdGlvbnM6IGBpc290cF9yZWxlYXNlYCwgYGlzb3RwX2JpbmRgLCBgaXNvdHBfZ2V0bmFtZWAsIGBpc290cF9wb2xsYCwgYGlzb3RwX3NldHNvY2tvcHRgLCBgaXNvdHBfZ2V0c29ja29wdGAsIGBpc290cF9zZW5kbXNnYCwgYW5kIGBpc290cF9yZWN2bXNnYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBBUEkgc3VyZmFjZS4KCkJ1dCB0aGUgKm1vZGlmaWVkKiBmdW5jdGlvbnMgYXJlIHdoYXQmIzM5O3MgaW50ZXJlc3RpbmcgaGVyZS4gVGhlIHBhdGNoIGhhcyB0d2Vha2VkIGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX3JlbGVhc2VgLCBgaXNvdHBfYmluZGAsIGFuZCBgaXNvdHBfcG9sbGAuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbiDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkga2V5IGFyZWFzIHRvIHNjcnV0aW5pemUuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRob3NlLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgbGlzdCBvZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIHRoYXQgZ290IGF0dGVudGlvbjogYGlzb3RwX3JjdmAsIGBpc290cF90eF90aW1lb3V0YCwgYGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcmAsIGBpc290cF9yY3ZfZWNob2AsIGBpc290cF9yY3ZfZmNgLCBgaXNvdHBfcmN2X3NmYCwgYGlzb3RwX3Jjdl9mZmAsIGFuZCBgaXNvdHBfcmN2X2NmYC4gSG1tLCBzb21lIG9mIHRoZXNlLCBsaWtlIGBpc290cF9yY3ZgLCBhcmUgc3RhdGljLiBUaGUgaW50ZXJuYWwgb25lcyBhcmUgdXN1YWxseSBsZXNzIGltcG9ydGFudCBmcm9tIGFuIEFQSSBwZXJzcGVjdGl2ZSwgYnV0IHNpbmNlIHRoZXkmIzM5O3JlICptb2RpZmllZCosIHRoZXkmIzM5O3JlIHNpZ25pZmljYW50LgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciB0aGUgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucywgYXMgdGhhdCB3b3VsZCBiZSBhIGhpZ2hlciBsZXZlbCB2aWV3IG9mIHRoZSBjaGFuZ2VzLgoKT2theSwgc28gbG9va2luZyBhdCB0aGUgbGlzdCBhZ2FpbiwgYGlzb3RwX3JjdmAgaXMgaW5kZWVkIHN0YXRpYy4gQnV0Li4uIHdhaXQsIGl0JiMzOTtzIGEgY2FsbGJhY2ssIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGluY29taW5nIENBTiBmcmFtZXMuIEl0ICppcyogdGhlIGNvcmUgb2YgdGhlIHJlY2VpdmUgcGF0aC4gRXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyByZWdpc3RlcmVkIGFzIGEgY3JpdGljYWwgY2FsbGJhY2suIEkgc2hvdWxkIG5vdGUgdGhhdCBpdCBpcyB0aGUgbWFpbiByZWNlaXZlciBlbnRyeSBwb2ludC4gU28gbWF5YmUgSSBzaG91bGQganVzdCBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBgcHJvdG9fb3BzYCB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGF0IGZ1bmN0aW9uIGlzIGlubGluZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIHZvaWQgaXNvdHBfcmN2XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jYW4vaXNvdHAuYz02NDQ9c3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG4tLVxubmV0L2Nhbi9pc290cC5jLTc0My1cbm5ldC9jYW4vaXNvdHAuYzo3NDQ6c3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXG5uZXQvY2FuL2lzb3RwLmMtNzQ1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENBTiBJU09UUCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhbiBpbmxpbmVkIGNoYW5nZTsgdGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGBpc290cF9yY3ZgIGFuZCBgaXNvdHBfcmN2X2VjaG9gIGFyZSBiZWluZyBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGNhbl9yeF9yZWdpc3RlcmAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBSWCBwYXRoIGlzIGJlaW5nIHNldCB1cC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKTXkgbWVudGFsIGxpc3Qgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpczogYGlzb3RwX3NlbmRtc2dgLCBgaXNvdHBfYmluZGAsIGBpc290cF9yZWxlYXNlYCwgYGlzb3RwX3BvbGxgLCBgaXNvdHBfcmN2YCwgYW5kIGBpc290cF9yY3ZfZWNob2AuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBBUEkgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aC4KCk5vdywgbG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgaW50ZXJhY3Rpb25zIG9jY3VyIHdpdGggYENBTmAsIGBDQU5fSVNPVFBgLCBgQ0FOX0RFVmAsIGFuZCBgQ0FOX1ZDQU5gLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBmaXhpbmcgY29uY3VycmVuY3kgcHJvYmxlbXMgd2l0aGluIHRoZSBDQU4gSVNPVFAgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgdGhlcmUgYXJlIHN0YXRlLWhhbmRsaW5nIGlzc3VlcyB3aXRoIFRYL1JYIGFuZCBob3cgdHJhbnNmZXJzIGFyZSB0cmFja2VkLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgdHhfcmVzdWx0YCBhcnJheSBhbmQgdGhlIHVzZSBvZiBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgYXJlIGtleSBpbmRpY2F0b3JzIG9mIHRoaXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgdmVyeSBoZWFydCBvZiB0aGUgSVNPVFAgcHJvdG9jb2wuCgpHaXZlbiB0aGlzLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSB3b3JzdDogdGhlcmUmIzM5O3MgYSBzdHJvbmcgcG9zc2liaWxpdHkgdGhhdCBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGVycm9ycyBoYXZlIGJlZW4gaW50cm9kdWNlZC4gVGhlIHBhdGNoICptdXN0KiBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBjaGFuZ2VzIGhhdmVuJiMzOTt0IGRlc3RhYmlsaXplZCB0aGUgY29yZSBwcm90b2NvbCBpbiBhbnkgd2F5LiBJIHdpbGwgYWxzbyBkb3VibGUtY2hlY2sgd2hldGhlciBgQ0FOX0lTT1RQYCBoYXMgYW55IGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3cgYnJva2VuIG9yIHJlcXVpcmUgZnVydGhlciBhbmFseXNpcyBnaXZlbiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU5NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGVwZW5kZW5jeSBDb25mdXNpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGBuZXQvY2FuL0tjb25maWdgIGZpbGUgYW5kIHNvbWV0aGluZyBzZWVtcy4uLm9mZi4gSXQmIzM5O3Mgb2RkLCBJIHdhcyBzdXJlIEkgaGFkIHNlZW4gYGRlcGVuZHMgb25gIGNsYXVzZXMgaW4gdGhpcyB0eXBlIG9mIEtjb25maWcgYmVmb3JlLiBMb29raW5nIGF0IGl0IGFnYWluLCBJJiMzOTttIG5vdCBzZWVpbmcgdGhlbSBoZXJlIGZvciB0aGVzZSBzcGVjaWZpYyBDQU4gb3B0aW9ucy4gVGhpcyBpcyBpbW1lZGlhdGVseSBtYWtpbmcgbWUgcXVlc3Rpb24gaG93IHRoZSBvcHRpb25zIGFyZSBiZWluZyBnYXRlZC4gQXJlIHRoZXJlIGltcGxpY2l0IGRlcGVuZGVuY2llcyBiYWtlZCBpbiBzb21ld2hlcmUgZWxzZT8gQW0gSSBtaXNzaW5nIHNvbWV0aGluZyBnbGFyaW5nbHkgb2J2aW91cz8gT3IgaXMgdGhpcyBhIGRlbGliZXJhdGUgYXJjaGl0ZWN0dXJhbCBjaG9pY2UgaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSwgcG9zc2libHkgcmVseWluZyBvbiBicm9hZGVyLCBsZXNzIGdyYW51bGFyIGRlcGVuZGVuY2llcyBkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGUgS2NvbmZpZyB0cmVlPyBUaGlzIGRldmlhdGVzIGZyb20gd2hhdCBJIHdhcyBleHBlY3RpbmcgYW5kIHdhcnJhbnRzIGEgZGVlcGVyIGRpdmUgdG8gZmlndXJlIG91dCB0aGUgaW50ZW5kZWQgYnVpbGQgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlzY3JlcGFuY3kgaW1tZWRpYXRlbHkgdG8gYXZvaWQgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHdpbGwgYWN0dWFsbHkgZnVuY3Rpb24gYXQgY29tcGlsZS10aW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRldGVybWluZSBpZiB0aGUgbG9naWMgSSBhbSBzZWVpbmcgaXMgaW50ZW50aW9uYWwgYW5kIGhvdyBpdCB0aWVzIGludG8gdGhlIHdob2xlIHBpY3R1cmUgb2YgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9qMTkzOS9LY29uZmlnPTY9Y29uZmlnIENBTl9KMTkzOVxubmV0L2Nhbi9qMTkzOS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtTQUUgSjE5MzlcJiMzNDtcbm5ldC9jYW4vajE5MzkvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBDQU5cbm5ldC9jYW4vajE5MzkvS2NvbmZpZy05LVx0aGVscFxuLS1cbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM9Mzk2PXN0YXRpYyBpbnQgajE5Mzlfc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy00MTktXG5uZXQvY2FuL2oxOTM5L3NvY2tldC5jOjQyMDpcdC8qIGoxOTM5X3NrX3NvY2tfZGVzdHJ1Y3QoKSBkZXBlbmRzIG9uIFNPQ0tfUkNVX0ZSRUUgZmxhZyAqL1xubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy00MjEtXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1JDVV9GUkVFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYENBTl9JU09UUGAgb3B0aW9uIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtzIG5vdCBleHBsaWNpdGx5IHN0YXRpbmcgaXRzIGRlcGVuZGVuY2llcyB1c2luZyBgZGVwZW5kcyBvbmAuIFRoYXQmIzM5O3MgYSBiaXQgdW51c3VhbC4gQWgsIGJ1dCBpdCYjMzk7cyBuZXN0ZWQgd2l0aGluIHRoZSBgbWVudWNvbmZpZyBDQU5gIHNlY3Rpb24uIFNvLCBJIG5lZWQgdG8gaW50ZXJwcmV0IHRoYXQgYXMgYW4gKmltcGxpY2l0KiBkZXBlbmRlbmN5IG9uIGBDQU5gLiBNYWtlcyBzZW5zZS4gSWYgeW91IHdhbnQgSVNPVFAsIHlvdSBjbGVhcmx5IG5lZWQgdGhlIENBTiBpbnRlcmZhY2UgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGVyZWZvcmUsIHRvIGJlIGNlcnRhaW4sIEkgaGFkIGJldHRlciB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYENBTmAgaXRzZWxmLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCB3aXRoIGBDQU5gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIENBTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWctNS1cbm5ldC9jYW4vS2NvbmZpZzo2Om1lbnVjb25maWcgQ0FOXG5uZXQvY2FuL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0NBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNzMKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIENBTiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgZm9jdXNlZCBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYENBTmAgYW5kIGBORVRgLiBDbGVhcmx5LCBgQ0FOYCBpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlIOKAkyBpdCYjMzk7cyByaWdodCB0aGVyZSBpbiB0aGUgYG5ldC9gIGRpcmVjdG9yeS4gU28sIHRoZSBkZXBlbmRlbmNlIGlzIHByZXR0eSBvYnZpb3VzLiBUaGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBmcm9tIG15IGV4cGVyaWVuY2UsIGBDQU5gLCBgQ0FOX0lTT1RQYCwgYW5kIGBDQU5fVkNBTmAgYXJlIHRoZSBrZXkgb25lcyB0byBjb25jZW50cmF0ZSBvbiBoZXJlLiBOb3csIHRpbWUgdG8gdXRpbGl6ZSBgc2V0LXJlc3VsdHNgIHRvIGltcGxlbWVudCB0aG9zZSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7Q0FOX0RFViYjMzQ7LAogICAgJiMzNDtDQU5fVkNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lzb3RwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXNvdHBfYmluZCYjMzQ7LAogICAgJiMzNDtpc290cF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2lzb3RwX3BvbGwmIzM0OywKICAgICYjMzQ7aXNvdHBfcmN2JiMzNDssCiAgICAmIzM0O2lzb3RwX3Jjdl9lY2hvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDQU4gSVNPVFAgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gZml4IGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBUWC9SWCBzdGF0ZSBoYW5kbGluZyBhbmQgdHJhbnNmZXIgZ2VuZXJhdGlvbiB0cmFja2luZy4gSXQgaW50cm9kdWNlcyBhIG5ldyB0eF9yZXN1bHQgYXJyYXkgYW5kIHVzZXMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgZm9yIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgdGhlIElTT1RQIHByb3RvY29sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0lTT1RQJiMzNDssCiAgICAmIzM0O0NBTl9ERVYmIzM0OywKICAgICYjMzQ7Q0FOX1ZDQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc290cF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O2lzb3RwX2JpbmQmIzM0OywKICAgICYjMzQ7aXNvdHBfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtpc290cF9wb2xsJiMzNDssCiAgICAmIzM0O2lzb3RwX3JjdiYjMzQ7LAogICAgJiMzNDtpc290cF9yY3ZfZWNobyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ0FOIElTT1RQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGZpeCBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gVFgvUlggc3RhdGUgaGFuZGxpbmcgYW5kIHRyYW5zZmVyIGdlbmVyYXRpb24gdHJhY2tpbmcuIEl0IGludHJvZHVjZXMgYSBuZXcgdHhfcmVzdWx0IGFycmF5IGFuZCB1c2VzIFJFQURfT05DRS9XUklURV9PTkNFIGZvciBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBJU09UUCBwcm90b2NvbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbmV3IHJhY2UgY29uZGl0aW9ucyBvciBsb2dpYyBidWdzIHdlcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEyOjU2LjE1MjUxMDA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1MzA0MzY5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0FOXCIsXG4gICAgXCJDQU5fSVNPVFBcIixcbiAgICBcIkNBTl9ERVZcIixcbiAgICBcIkNBTl9WQ0FOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvdHBfc2VuZG1zZ1wiLFxuICAgIFwiaXNvdHBfYmluZFwiLFxuICAgIFwiaXNvdHBfcmVsZWFzZVwiLFxuICAgIFwiaXNvdHBfcG9sbFwiLFxuICAgIFwiaXNvdHBfcmN2XCIsXG4gICAgXCJpc290cF9yY3ZfZWNob1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDQU4gSVNPVFAgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gZml4IGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBUWC9SWCBzdGF0ZSBoYW5kbGluZyBhbmQgdHJhbnNmZXIgZ2VuZXJhdGlvbiB0cmFja2luZy4gSXQgaW50cm9kdWNlcyBhIG5ldyB0eF9yZXN1bHQgYXJyYXkgYW5kIHVzZXMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgZm9yIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgdGhlIElTT1RQIHByb3RvY29sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMjo1Ni4xNTI1MTgwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4MTYwNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDI5NTI3MWQxOTc5NzM1MWIzNmMzY2M1MGY3Y2RhM2IxMzE3YjBlNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAwNzoxMjo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmNcXG5pbmRleCA1NGJlY2FmNjg5OGYxMy4uMWYxMWM2NmIzNDNjODYgMTAwNjQ0XFxuLS0tIGEvbmV0L2Nhbi9pc290cC5jXFxuKysrIGIvbmV0L2Nhbi9pc290cC5jXFxuQEAgLTEyNyw2ICsxMjcsMTUgQEAgTU9EVUxFX1BBUk1fREVTQyhtYXhfcGR1X3NpemUsIFxcXCJtYXhpbXVtIGlzb3RwIHBkdSBzaXplIChkZWZhdWx0IFxcXCJcXG4gI2RlZmluZSBJU09UUF9GQ19USU1FT1VUIDFcXHQvKiAxIHNlYyAqL1xcbiAjZGVmaW5lIElTT1RQX0VDSE9fVElNRU9VVCAyXFx0LyogMiBzZWNzICovXFxuIFxcbisvKiBzby1cXHUwMDNldHhfcmVzdWx0W3NvLVxcdTAwM2V0eF9nZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdIGhvbGRzIHRoZSBwYWNrZWQgdmFsdWVcXG4rICogKGVyciBcXHUwMDNjXFx1MDAzYyBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMgfCBnZW4pIGZvciBlYWNoIHR4IGdlbmVyYXRpb24gc2xvdCwgc28gaXRcXG4rICogY2FuIGJlIGhhbmRsZWQgd2l0aCBhIHNpbmdsZSBSRUFEX09OQ0UoKS9XUklURV9PTkNFKCkgYWNjZXNzLlxcbisgKi9cXG4rI2RlZmluZSBJU09UUF9UWF9SRVNVTFRfU0xPVFMgNFxcbisjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUyAyNFxcbisjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSyAoKDFVIFxcdTAwM2NcXHUwMDNjIElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUykgLSAxKVxcbisjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9FUlJfTUFTSyAweEZGXFxuK1xcbiBlbnVtIHtcXG4gXFx0SVNPVFBfSURMRSA9IDAsXFxuIFxcdElTT1RQX1dBSVRfRklSU1RfRkMsXFxuQEAgLTE2Niw3ICsxNzUsOCBAQCBzdHJ1Y3QgaXNvdHBfc29jayB7XFxuIFxcdHUzMiBmb3JjZV90eF9zdG1pbjtcXG4gXFx0dTMyIGZvcmNlX3J4X3N0bWluO1xcbiBcXHR1MzIgY2ZlY2hvOyAvKiBjb25zZWN1dGl2ZSBmcmFtZSBlY2hvIHRhZyAqL1xcbi1cXHR1MzIgdHhfZ2VuOyAvKiBnZW5lcmF0aW9uLCBidW1wZWQgcGVyIG5ldyB0eCB0cmFuc2ZlciAqL1xcbitcXHR1MzIgdHhfZ2VuOyAvKiB0cmFuc2ZlciBnZW5lcmF0aW9uLCBpbmNyZWFzZWQgcGVyIG5ldyB0eCB0cmFuc2ZlciAqL1xcbitcXHR1MzIgdHhfcmVzdWx0W0lTT1RQX1RYX1JFU1VMVF9TTE9UU107IC8qIHBlci1nZW5lcmF0aW9uIHJlc3VsdCBzbG90cyAqL1xcbiBcXHRzdHJ1Y3QgdHBjb24gcngsIHR4O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vdGlmaWVyO1xcbiBcXHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xcbkBAIC0xNzcsNiArMTg3LDY1IEBAIHN0YXRpYyBMSVNUX0hFQUQoaXNvdHBfbm90aWZpZXJfbGlzdCk7XFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXNvdHBfbm90aWZpZXJfbG9jayk7XFxuIHN0YXRpYyBzdHJ1Y3QgaXNvdHBfc29jayAqaXNvdHBfYnVzeV9ub3RpZmllcjtcXG4gXFxuKy8qIGluY3JlYXNlICgyNCBiaXQpIHR4IGdlbmVyYXRpb24gdmFsdWUgKi9cXG4rc3RhdGljIHUzMiBpc290cF9pbmNfdHhfZ2VuKHUzMiBnZW4pXFxuK3tcXG4rXFx0cmV0dXJuIChnZW4gKyAxKSBcXHUwMDI2IElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSztcXG4rfVxcbitcXG4rLyogc3RvcmUgOCBiaXQgZXJyb3IgYW5kIDI0IGJpdCB0eCBnZW5lcmF0aW9uIHZhbHVlcyBpbiBwYWNrZWQgdTMyIGVsZW1lbnQgKi9cXG4rc3RhdGljIHUzMiBpc290cF9wYWNrX3R4X3Jlc3VsdCh1MzIgZ2VuLCBpbnQgZXJyKVxcbit7XFxuK1xcdHJldHVybiBnZW4gfCAoKHUzMillcnIgXFx1MDAzY1xcdTAwM2MgSVNPVFBfVFhfUkVTVUxUX0dFTl9CSVRTKTtcXG4rfVxcbitcXG4rLyogZ2V0IHRoZSAyNCBiaXQgdHggZ2VuZXJhdGlvbiB2YWx1ZSBmcm9tIHRoZSB0eCByZXN1bHQgKi9cXG4rc3RhdGljIHUzMiBpc290cF9nZXRfdHhfZ2VuKHUzMiBnZW5fZXJyKVxcbit7XFxuK1xcdHJldHVybiBnZW5fZXJyIFxcdTAwMjYgSVNPVFBfVFhfUkVTVUxUX0dFTl9NQVNLO1xcbit9XFxuK1xcbisvKiBnZXQgdGhlIDggYml0IGVycm9yIHZhbHVlIGZyb20gdGhlIHR4IHJlc3VsdCAqL1xcbitzdGF0aWMgdTMyIGlzb3RwX2dldF90eF9lcnIodTMyIGdlbl9lcnIpXFxuK3tcXG4rXFx0cmV0dXJuIChnZW5fZXJyIFxcdTAwM2VcXHUwMDNlIElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUykgXFx1MDAyNiBJU09UUF9UWF9SRVNVTFRfRVJSX01BU0s7XFxuK31cXG4rXFxuKy8qIHN0b3JlIHRyYW5zZmVyIHJlc3VsdCBpbiBwZXItZ2VuZXJhdGlvbiU0IHNvLVxcdTAwM2V0eF9yZXN1bHRbXSBzbG90ICovXFxuK3N0YXRpYyB2b2lkIGlzb3RwX3NldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuLCBpbnQgZXJyKVxcbit7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4X3Jlc3VsdFtnZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdLFxcbitcXHRcXHQgICBpc290cF9wYWNrX3R4X3Jlc3VsdChnZW4sIGVycikpO1xcbit9XFxuK1xcbisvKiBmZXRjaCB0aGUgcmVzdWx0IHJlY29yZGVkIGZvciAnZ2VuJywgYXMgYSAobmVnYXRpdmUpIGVycm5vICgwIGZvciBzdWNjZXNzKSAqL1xcbitzdGF0aWMgaW50IGlzb3RwX2dldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuKVxcbit7XFxuK1xcdHUzMiByZXN1bHQgPSBSRUFEX09OQ0Uoc28tXFx1MDAzZXR4X3Jlc3VsdFtnZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdKTtcXG4rXFxuK1xcdGlmIChpc290cF9nZXRfdHhfZ2VuKHJlc3VsdCkgIT0gZ2VuKSB7XFxuK1xcdFxcdHByX25vdGljZV9vbmNlKFxcXCJjYW4taXNvdHA6IHR4X3Jlc3VsdFtdIHNsb3QgcmV1c2VkIGJlZm9yZSByZWFkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdC8qIHJlcG9ydCBmYWlsdXJlIHJhdGhlciB0aGFuIHJpc2sgYSBmYWxzZSBzdWNjZXNzICovXFxuK1xcdFxcdHJldHVybiAtRUNPTU07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtKGlzb3RwX2dldF90eF9lcnIocmVzdWx0KSk7XFxuK31cXG4rXFxuKy8qIHRydWUgaWYgZG9uZSwgc2h1dCBkb3duIG9yIHN1cGVyc2VkZWQgKCdnZW4nIGlzIG5vIGxvbmdlciB0aGUgYWN0aXZlXFxuKyAqIHRyYW5zZmVyKS4gUmVhZHMgdHguc3RhdGUgZmlyc3QgKGFjcXVpcmUpIHNvIHR4X2dlbi90eF9yZXN1bHQgcmVhZHNcXG4rICogYmVsb3cgc2VlIGF0IGxlYXN0IHdoYXQgdGhhdCBzdGF0ZSB3cml0ZSBwdWJsaXNoZWQgKGNvbW1vbiBzZXF1ZW5jZSkuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBpc290cF90eF9nZW5fZG9uZShzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHUzMiBnZW4pXFxuK3tcXG4rXFx0LyogcmVhZCB0eC5zdGF0ZSBmaXJzdCBmb3IgdGhlIGNvbW1vbiBzZXF1ZW5jZSAqL1xcbitcXHR1MzIgc3RhdGUgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZzby1cXHUwMDNldHguc3RhdGUpO1xcbitcXG4rXFx0cmV0dXJuIHN0YXRlID09IElTT1RQX0lETEUgfHwgc3RhdGUgPT0gSVNPVFBfU0hVVERPV04gfHxcXG4rXFx0ICAgICAgIFJFQURfT05DRShzby1cXHUwMDNldHhfZ2VuKSAhPSBnZW47XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlzb3RwX3NvY2sgKmlzb3RwX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRyZXR1cm4gKHN0cnVjdCBpc290cF9zb2NrICopc2s7XFxuQEAgLTE5OSw3ICsyNjgsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICByeHRpbWVyKTtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNnNvLVxcdTAwM2VzaztcXG4gXFxuLVxcdGlmIChzby1cXHUwMDNlcnguc3RhdGUgPT0gSVNPVFBfV0FJVF9EQVRBKSB7XFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZXJ4LnN0YXRlKSA9PSBJU09UUF9XQUlUX0RBVEEpIHtcXG4gXFx0XFx0Lyogd2UgZGlkIG5vdCBnZXQgbmV3IGRhdGEgZnJhbWVzIGluIHRpbWUgKi9cXG4gXFxuIFxcdFxcdC8qIHJlcG9ydCAnY29ubmVjdGlvbiB0aW1lZCBvdXQnICovXFxuQEAgLTIwOCw3ICsyNzcsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcXG4gXFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4gXFxuIFxcdFxcdC8qIHJlc2V0IHJ4IHN0YXRlICovXFxuLVxcdFxcdHNvLVxcdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XFxuK1xcdFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xcbkBAIC0zNzIsMjAgKzQ0MSwxOSBAQCBzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pO1xcbiBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mYyhzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2c28tXFx1MDAzZXNrO1xcbitcXHRpbnQgdHhfZXJyID0gRUJBRE1TRzsgLyogZGVmYXVsdCBmb3IgdW5rbm93biBGQyBzdGF0dXMgKi9cXG4gXFxuLVxcdGlmIChzby1cXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfV0FJVF9GQyBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgc28tXFx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRklSU1RfRkMpXFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZzby1cXHUwMDNldHh0aW1lcik7XFxuIFxcbiBcXHQvKiBpc290cF90eF90aW1lb3V0KCkgbWF5IGhhdmUgZ2l2ZW4gdXAgb24gdGhpcyBqb2Igd2hpbGVcXG4tXFx0ICogaHJ0aW1lcl9jYW5jZWwoKSBhYm92ZSB3YWl0ZWQgZm9yIGl0IHRvIGZpbmlzaDsgc28tXFx1MDAzZXJ4X2xvY2tcXG4tXFx0ICogKGhlbGQgYnkgb3VyIGNhbGxlciBpc290cF9yY3YoKSkgcnVsZXMgb3V0IGEgY29uY3VycmVudCBjbGFpbSxcXG4tXFx0ICogc28gYSBwbGFpbiByZWNoZWNrIGlzIGVub3VnaCBoZXJlLlxcbitcXHQgKiBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoID1cXHUwMDNlIHJlY2hlY2tcXG4gXFx0ICovXFxuLVxcdGlmIChzby1cXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfV0FJVF9GQyBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgc28tXFx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRklSU1RfRkMpXFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuIFxcdGlmICgoY2YtXFx1MDAzZWxlbiBcXHUwMDNjIGFlICsgRkNfQ09OVEVOVF9TWikgfHxcXG5AQCAtMzk2LDEzICs0NjQsMTUgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXFxuIFxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbiBcXHRcXHRcXHRza19lcnJvcl9yZXBvcnQoc2spO1xcbiBcXG4tXFx0XFx0c28tXFx1MDAzZXR4LnN0YXRlID0gSVNPVFBfSURMRTtcXG4rXFx0XFx0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgc28tXFx1MDAzZXR4X2dlbiwgRUJBRE1TRyk7XFxuK1xcdFxcdC8qIHNldCB0byBJRExFIGFmdGVyIHB1Ymxpc2hpbmcgdHhfcmVzdWx0ICovXFxuK1xcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZzby1cXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xcbiBcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnNvLVxcdTAwM2V3YWl0KTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGdldCBzdGF0aWMvZHluYW1pYyBjb21tdW5pY2F0aW9uIHBhcmFtcyBmcm9tIGZpcnN0L2V2ZXJ5IEZDIGZyYW1lICovXFxuLVxcdGlmIChzby1cXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfV0FJVF9GSVJTVF9GQyB8fFxcbitcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfV0FJVF9GSVJTVF9GQyB8fFxcbiBcXHQgICAgc28tXFx1MDAzZW9wdC5mbGFncyBcXHUwMDI2IENBTl9JU09UUF9EWU5fRkNfUEFSTVMpIHtcXG4gXFx0XFx0c28tXFx1MDAzZXR4ZmMuYnMgPSBjZi1cXHUwMDNlZGF0YVthZSArIDFdO1xcbiBcXHRcXHRzby1cXHUwMDNldHhmYy5zdG1pbiA9IGNmLVxcdTAwM2VkYXRhW2FlICsgMl07XFxuQEAgLTQyNiwxMyArNDk2LDEzIEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxcbiBcXHRcXHRcXHRzby1cXHUwMDNldHhfZ2FwID0ga3RpbWVfYWRkX25zKHNvLVxcdTAwM2V0eF9nYXAsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgKHNvLVxcdTAwM2V0eGZjLnN0bWluIC0gMHhGMClcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAqIDEwMDAwMCk7XFxuLVxcdFxcdHNvLVxcdTAwM2V0eC5zdGF0ZSA9IElTT1RQX1dBSVRfRkM7XFxuK1xcdFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlLCBJU09UUF9XQUlUX0ZDKTtcXG4gXFx0fVxcbiBcXG4gXFx0c3dpdGNoIChjZi1cXHUwMDNlZGF0YVthZV0gXFx1MDAyNiAweDBGKSB7XFxuIFxcdGNhc2UgSVNPVFBfRkNfQ1RTOlxcbiBcXHRcXHRzby1cXHUwMDNldHguYnMgPSAwO1xcbi1cXHRcXHRzby1cXHUwMDNldHguc3RhdGUgPSBJU09UUF9TRU5ESU5HO1xcbitcXHRcXHRXUklURV9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XFxuIFxcdFxcdC8qIHNlbmQgQ0YgZnJhbWUgYW5kIGVuYWJsZSBlY2hvIHRpbWVvdXQgaGFuZGxpbmcgKi9cXG4gXFx0XFx0aHJ0aW1lcl9zdGFydChcXHUwMDI2c28tXFx1MDAzZWVjaG90aW1lciwga3RpbWVfc2V0KElTT1RQX0VDSE9fVElNRU9VVCwgMCksXFxuIFxcdFxcdFxcdCAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7XFxuQEAgLTQ0NywxNCArNTE3LDE5IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxcbiBcXG4gXFx0Y2FzZSBJU09UUF9GQ19PVkZMVzpcXG4gXFx0XFx0Lyogb3ZlcmZsb3cgb24gcmVjZWl2ZXIgc2lkZSAtIHJlcG9ydCAnbWVzc2FnZSB0b28gbG9uZycgKi9cXG4tXFx0XFx0c2stXFx1MDAzZXNrX2VyciA9IEVNU0dTSVpFO1xcbi1cXHRcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcXG4tXFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4rXFx0XFx0dHhfZXJyID0gRU1TR1NJWkU7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0Lyogc3RvcCB0aGlzIHR4IGpvYiAqL1xcbi1cXHRcXHRzby1cXHUwMDNldHguc3RhdGUgPSBJU09UUF9JRExFO1xcbitcXHRcXHQvKiByZXNlcnZlZC91bmtub3duIGZsb3cgc3RhdHVzICh0eF9lcnIgZGVmYXVsdHMgdG8gRUJBRE1TRykgKi9cXG4rXFxuK1xcdFxcdHNrLVxcdTAwM2Vza19lcnIgPSB0eF9lcnI7XFxuK1xcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbitcXHRcXHRcXHRza19lcnJvcl9yZXBvcnQoc2spO1xcbitcXG4rXFx0XFx0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgc28tXFx1MDAzZXR4X2dlbiwgdHhfZXJyKTtcXG4rXFx0XFx0Lyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi9cXG4rXFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfSURMRSk7XFxuIFxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2c28tXFx1MDAzZXdhaXQpO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbkBAIC00NjcsNyArNTQyLDcgQEAgc3RhdGljIGludCBpc290cF9yY3Zfc2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgcGNpbGVuLFxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcXG4gXFxuIFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZzby1cXHUwMDNlcnh0aW1lcik7XFxuLVxcdHNvLVxcdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcXG4gXFxuIFxcdGlmICghbGVuIHx8IGxlbiBcXHUwMDNlIGNmLVxcdTAwM2VsZW4gLSBwY2lsZW4pXFxuIFxcdFxcdHJldHVybiAxO1xcbkBAIC01MDEsNyArNTc2LDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXFxuIFxcdGludCBmZl9wY2lfc3o7XFxuIFxcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c28tXFx1MDAzZXJ4dGltZXIpO1xcbi1cXHRzby1cXHUwMDNlcnguc3RhdGUgPSBJU09UUF9JRExFO1xcbitcXHRXUklURV9PTkNFKHNvLVxcdTAwM2VyeC5zdGF0ZSwgSVNPVFBfSURMRSk7XFxuIFxcbiBcXHQvKiBnZXQgdGhlIHVzZWQgc2VuZGVyIExMX0RMIGZyb20gdGhlIChmaXJzdCkgQ0FOIGZyYW1lIGRhdGEgbGVuZ3RoICovXFxuIFxcdHNvLVxcdTAwM2VyeC5sbF9kbCA9IHBhZGxlbihjZi1cXHUwMDNlbGVuKTtcXG5AQCAtNTU1LDcgKzYzMCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxcbiBcXG4gXFx0LyogaW5pdGlhbCBzZXR1cCBmb3IgdGhpcyBwZHUgcmVjZXB0aW9uICovXFxuIFxcdHNvLVxcdTAwM2VyeC5zbiA9IDE7XFxuLVxcdHNvLVxcdTAwM2VyeC5zdGF0ZSA9IElTT1RQX1dBSVRfREFUQTtcXG4rXFx0V1JJVEVfT05DRShzby1cXHUwMDNlcnguc3RhdGUsIElTT1RQX1dBSVRfREFUQSk7XFxuIFxcbiBcXHQvKiBubyBjcmVhdGlvbiBvZiBmbG93IGNvbnRyb2wgZnJhbWVzICovXFxuIFxcdGlmIChzby1cXHUwMDNlb3B0LmZsYWdzIFxcdTAwMjYgQ0FOX0lTT1RQX0xJU1RFTl9NT0RFKVxcbkBAIC01NzMsNyArNjQ4LDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXFxuIFxcdHN0cnVjdCBza19idWZmICpuc2tiO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGlmIChzby1cXHUwMDNlcnguc3RhdGUgIT0gSVNPVFBfV0FJVF9EQVRBKVxcbitcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9EQVRBKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qIGRyb3AgaWYgdGltZXN0YW1wIGdhcCBpcyBsZXNzIHRoYW4gZm9yY2Vfcnhfc3RtaW4gbmFubyBzZWNzICovXFxuQEAgLTU4OCwxMSArNjYzLDkgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXFxuIFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZzby1cXHUwMDNlcnh0aW1lcik7XFxuIFxcbiBcXHQvKiBpc290cF9yeF90aW1lcl9oYW5kbGVyKCkgbWF5IGhhdmUgcmFjZWQgdXMgZm9yIHNvLVxcdTAwM2VyeC5zdGF0ZVxcbi1cXHQgKiB3aGlsZSBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoLCBhbHJlYWR5XFxuLVxcdCAqIHJlcG9ydGluZyBFVElNRURPVVQgYW5kIHJlc2V0dGluZyB0aGUgcmVjZXB0aW9uOyBkb24ndCBwcm9jZXNzXFxuLVxcdCAqIHRoaXMgQ0YgaW50byBhIHJlYXNzZW1ibHkgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGdpdmVuIHVwIG9uLlxcbitcXHQgKiB3aGlsZSBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoID1cXHUwMDNlIHJlY2hlY2tcXG4gXFx0ICovXFxuLVxcdGlmIChzby1cXHUwMDNlcnguc3RhdGUgIT0gSVNPVFBfV0FJVF9EQVRBKVxcbitcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9EQVRBKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuIFxcdC8qIENGcyBhcmUgbmV2ZXIgbG9uZ2VyIHRoYW4gdGhlIEZGICovXFxuQEAgLTYxMyw3ICs2ODYsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9jZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSxcXG4gXFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4gXFxuIFxcdFxcdC8qIHJlc2V0IHJ4IHN0YXRlICovXFxuLVxcdFxcdHNvLVxcdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XFxuK1xcdFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFx0c28tXFx1MDAzZXJ4LnNuKys7XFxuQEAgLTYyNyw3ICs3MDAsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9jZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSxcXG4gXFxuIFxcdGlmIChzby1cXHUwMDNlcnguaWR4IFxcdTAwM2U9IHNvLVxcdTAwM2VyeC5sZW4pIHtcXG4gXFx0XFx0Lyogd2UgYXJlIGRvbmUgKi9cXG4tXFx0XFx0c28tXFx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcXG4rXFx0XFx0V1JJVEVfT05DRShzby1cXHUwMDNlcnguc3RhdGUsIElTT1RQX0lETEUpO1xcbiBcXG4gXFx0XFx0aWYgKChzby1cXHUwMDNlb3B0LmZsYWdzIFxcdTAwMjYgSVNPVFBfQ0hFQ0tfUEFERElORykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGNoZWNrX3BhZChzbywgY2YsIGkgKyAxLCBzby1cXHUwMDNlb3B0LnJ4cGFkX2NvbnRlbnQpKSB7XFxuQEAgLTY5OCw4ICs3NzEsMTAgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXFxuIFxcbiBcXHRpZiAoc28tXFx1MDAzZW9wdC5mbGFncyBcXHUwMDI2IENBTl9JU09UUF9IQUxGX0RVUExFWCkge1xcbiBcXHRcXHQvKiBjaGVjayByeC90eCBwYXRoIGhhbGYgZHVwbGV4IGV4cGVjdGF0aW9ucyAqL1xcbi1cXHRcXHRpZiAoKHNvLVxcdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFIFxcdTAwMjZcXHUwMDI2IG5fcGNpX3R5cGUgIT0gTl9QQ0lfRkMpIHx8XFxuLVxcdFxcdCAgICAoc28tXFx1MDAzZXJ4LnN0YXRlICE9IElTT1RQX0lETEUgXFx1MDAyNlxcdTAwMjYgbl9wY2lfdHlwZSA9PSBOX1BDSV9GQykpXFxuK1xcdFxcdGlmICgoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIG5fcGNpX3R5cGUgIT0gTl9QQ0lfRkMpIHx8XFxuK1xcdFxcdCAgICAoUkVBRF9PTkNFKHNvLVxcdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIG5fcGNpX3R5cGUgPT0gTl9QQ0lfRkMpKVxcbiBcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuQEAgLTc5NCw2ICs4NjksNyBAQCBzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pXFxuIFxcdHN0cnVjdCBjYW5mZF9mcmFtZSAqY2Y7XFxuIFxcdGludCBjYW5fc2VuZF9yZXQ7XFxuIFxcdGludCBhZSA9IChzby1cXHUwMDNlb3B0LmZsYWdzIFxcdTAwMjYgQ0FOX0lTT1RQX0VYVEVORF9BRERSKSA/IDEgOiAwO1xcbitcXHR1MzIgb2xkX2NmZWNobztcXG4gXFxuIFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzby1cXHUwMDNlaWZpbmRleCk7XFxuIFxcdGlmICghZGV2KVxcbkBAIC04MTQsNiArODkwLDkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxcbiBcXG4gXFx0Y3N4LVxcdTAwM2VjYW5faWlmID0gZGV2LVxcdTAwM2VpZmluZGV4O1xcbiBcXG4rXFx0Lyogc2V0IHVpZCBpbiB0eCBza2IgdG8gaWRlbnRpZnkgQ0YgZWNobyBmcmFtZXMgKi9cXG4rXFx0Y2FuX3NldF9za2JfdWlkKHNrYik7XFxuK1xcbiBcXHRjZiA9IChzdHJ1Y3QgY2FuZmRfZnJhbWUgKilza2ItXFx1MDAzZWRhdGE7XFxuIFxcdHNrYl9wdXRfemVybyhza2IsIHNvLVxcdTAwM2VsbC5tdHUpO1xcbiBcXG5AQCAtODMwLDEyICs5MDksMTUgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxcbiBcXHRza2ItXFx1MDAzZWRldiA9IGRldjtcXG4gXFx0Y2FuX3NrYl9zZXRfb3duZXIoc2tiLCBzayk7XFxuIFxcbi1cXHQvKiBjZmVjaG8gc2hvdWxkIGhhdmUgYmVlbiB6ZXJvJ2VkIGJ5IGluaXQvaXNvdHBfcmN2X2VjaG8oKSAqL1xcbi1cXHRpZiAoc28tXFx1MDAzZWNmZWNobylcXG4tXFx0XFx0cHJfbm90aWNlX29uY2UoXFxcImNhbi1pc290cDogY2ZlY2hvIGlzICUwOFggIT0gMFxcXFxuXFxcIiwgc28tXFx1MDAzZWNmZWNobyk7XFxuK1xcdC8qIHplcm8nZWQgYnkgaW5pdC9pc290cF9yY3ZfZWNobygpOyByZWFjaGVkIGxvY2stZnJlZSB2aWFcXG4rXFx0ICogaXNvdHBfdHhmcl90aW1lcl9oYW5kbGVyKCkgdG9vLCBzbyB1c2UgUkVBRF9PTkNFKCkvV1JJVEVfT05DRSgpXFxuK1xcdCAqL1xcbitcXHRvbGRfY2ZlY2hvID0gUkVBRF9PTkNFKHNvLVxcdTAwM2VjZmVjaG8pO1xcbitcXHRpZiAob2xkX2NmZWNobylcXG4rXFx0XFx0cHJfbm90aWNlX29uY2UoXFxcImNhbi1pc290cDogY2ZlY2hvIGlzICUwOFggIT0gMFxcXFxuXFxcIiwgb2xkX2NmZWNobyk7XFxuIFxcbiBcXHQvKiBzZXQgY29uc2VjdXRpdmUgZnJhbWUgZWNobyB0YWcgKi9cXG4tXFx0c28tXFx1MDAzZWNmZWNobyA9ICoodTMyICopY2YtXFx1MDAzZWRhdGE7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZWNmZWNobywgc2tiLVxcdTAwM2VoYXNoKTtcXG4gXFxuIFxcdC8qIHNlbmQgZnJhbWUgd2l0aCBsb2NhbCBlY2hvIGVuYWJsZWQgKi9cXG4gXFx0Y2FuX3NlbmRfcmV0ID0gY2FuX3NlbmQoc2tiLCAxKTtcXG5AQCAtODg3LDcgKzk2OSw2IEBAIHN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9lY2hvKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopZGF0YTtcXG4gXFx0c3RydWN0IGlzb3RwX3NvY2sgKnNvID0gaXNvdHBfc2soc2spO1xcbi1cXHRzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gXFxuIFxcdC8qIG9ubHkgaGFuZGxlIG15IG93biBsb2NhbCBlY2hvIENGL1NGIHNrYidzIChubyBGRiEpICovXFxuIFxcdGlmIChza2ItXFx1MDAzZXNrICE9IHNrKVxcbkBAIC04OTksMzIgKzk4MCwzNSBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3ZfZWNobyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxcbiBcXHRzcGluX2xvY2soXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4gXFxuIFxcdC8qIHNvLVxcdTAwM2VjZmVjaG8gbWF5IHNpbmNlIGJlbG9uZyB0byBhIG5ldyB0cmFuc2ZlcjsgcmVjaGVjayB1bmRlciBsb2NrICovXFxuLVxcdGlmIChzby1cXHUwMDNlY2ZlY2hvICE9ICoodTMyICopY2YtXFx1MDAzZWRhdGEpXFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZWNmZWNobykgIT0gc2tiLVxcdTAwM2VoYXNoKVxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcbiBcXHQvKiBjYW5jZWwgbG9jYWwgZWNobyB0aW1lb3V0ICovXFxuIFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZzby1cXHUwMDNlZWNob3RpbWVyKTtcXG4gXFxuIFxcdC8qIGxvY2FsIGVjaG8gc2tiIHdpdGggY29uc2VjdXRpdmUgZnJhbWUgaGFzIGJlZW4gY29uc3VtZWQgKi9cXG4tXFx0c28tXFx1MDAzZWNmZWNobyA9IDA7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZWNmZWNobywgMCk7XFxuIFxcbiBcXHQvKiBjbGFpbWluZyBhIHRyYW5zZmVyIGFsc28gdGFrZXMgc28tXFx1MDAzZXJ4X2xvY2ssIHNvIGEgcGxhaW4gcmVjaGVja1xcbiBcXHQgKiBpcyBlbm91Z2g6IHNvLVxcdTAwM2V0eC5zdGF0ZSBjYW4ndCBoYXZlIGZsaXBwZWQgdG8gSVNPVFBfU0VORElORyBmb3JcXG4gXFx0ICogYSBuZXcgY2xhaW0gd2hpbGUgd2UncmUgc3RpbGwgaW4gaGVyZVxcbiBcXHQgKi9cXG4tXFx0aWYgKHNvLVxcdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9TRU5ESU5HKVxcbitcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfU0VORElORylcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0aWYgKHNvLVxcdTAwM2V0eC5pZHggXFx1MDAzZT0gc28tXFx1MDAzZXR4Lmxlbikge1xcbiBcXHRcXHQvKiB3ZSBhcmUgZG9uZSAqL1xcbi1cXHRcXHRzby1cXHUwMDNldHguc3RhdGUgPSBJU09UUF9JRExFO1xcbitcXG4rXFx0XFx0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgc28tXFx1MDAzZXR4X2dlbiwgMCk7XFxuK1xcdFxcdC8qIHNldCB0byBJRExFIGFmdGVyIHB1Ymxpc2hpbmcgdHhfcmVzdWx0ICovXFxuK1xcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZzby1cXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xcbiBcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnNvLVxcdTAwM2V3YWl0KTtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoc28tXFx1MDAzZXR4ZmMuYnMgXFx1MDAyNlxcdTAwMjYgc28tXFx1MDAzZXR4LmJzIFxcdTAwM2U9IHNvLVxcdTAwM2V0eGZjLmJzKSB7XFxuIFxcdFxcdC8qIHN0b3AgYW5kIHdhaXQgZm9yIEZDIHdpdGggdGltZW91dCAqL1xcbi1cXHRcXHRzby1cXHUwMDNldHguc3RhdGUgPSBJU09UUF9XQUlUX0ZDO1xcbitcXHRcXHRXUklURV9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfV0FJVF9GQyk7XFxuIFxcdFxcdGhydGltZXJfc3RhcnQoXFx1MDAyNnNvLVxcdTAwM2V0eHRpbWVyLCBrdGltZV9zZXQoSVNPVFBfRkNfVElNRU9VVCwgMCksXFxuIFxcdFxcdFxcdCAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5AQCAtOTQ2LDE2ICsxMDMwLDIwIEBAIHN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9lY2hvKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzby1cXHUwMDNlcnhfbG9jayk7XFxuIH1cXG4gXFxuLS8qIHNoYXJlZCBieSBzby1cXHUwMDNldHh0aW1lcidzIGFuZCBzby1cXHUwMDNlZWNob3RpbWVyJ3MgY2FsbGJhY2tzLiBCb3RoIHRpbWVycyBnZXRcXG4tICogY2FuY2VsbGVkIHVuZGVyIHNvLVxcdTAwM2VyeF9sb2NrIGVsc2V3aGVyZSwgc28gdGhpcyBtdXN0IHN0YXkgbG9jay1mcmVlIHRvXFxuLSAqIGF2b2lkIGRlYWRsb2NraW5nIHdpdGggdGhhdDsgdXNlcyBzby1cXHUwMDNldHhfZ2VuIGluc3RlYWQgdG8gYXZvaWQgdGFpbnRpbmdcXG4tICogYSBuZXcgdHJhbnNmZXIgd2l0aCBhbiBlcnJvciBmcm9tIHRoZSBvbmUgdGhhdCBqdXN0IHRpbWVkIG91dC5cXG4rLyogaXNvdHBfdHhfdGltZW91dDogd2UgZGlkIG5vdCBnZXQgYW55IGZsb3cgY29udHJvbCBvciBlY2hvIGZyYW1lIGluIHRpbWVcXG4rICpcXG4rICogU2hhcmVkIGJ5IHNvLVxcdTAwM2V0eHRpbWVyJ3MgYW5kIHNvLVxcdTAwM2VlY2hvdGltZXIncyBjYWxsYmFja3MuIEJvdGggdGltZXJzIGdldFxcbisgKiBjYW5jZWxsZWQgdW5kZXIgc28tXFx1MDAzZXJ4X2xvY2sgZWxzZXdoZXJlLCBzbyB0aGlzIG11c3Qgc3RheSBsb2NrLWZyZWUuXFxuKyAqXFxuKyAqIHR4LnN0YXRlIGlzIGFjcXVpcmVkIGJlZm9yZSB0eF9nZW4uIENvbW1vbiBzZXF1ZW5jZSBpbiBpc290cF90eF9nZW5fZG9uZSgpLlxcbisgKiBjbXB4Y2hnKCkgb25seSBvcmRlcnMgaXRzZWxmLCBub3QgdGhlIHR3byBwcmVjZWRpbmcgbG9hZHMuXFxuICAqL1xcbiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfdHhfdGltZW91dChzdHJ1Y3QgaXNvdHBfc29jayAqc28pXFxuIHtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNnNvLVxcdTAwM2VzaztcXG4rXFx0LyogcmVhZCB0eC5zdGF0ZSBmaXJzdCBmb3IgdGhlIGNvbW1vbiBzZXF1ZW5jZSAqL1xcbitcXHR1MzIgb2xkX3N0YXRlID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2c28tXFx1MDAzZXR4LnN0YXRlKTtcXG4gXFx0dTMyIGdlbiA9IFJFQURfT05DRShzby1cXHUwMDNldHhfZ2VuKTtcXG4tXFx0dTMyIG9sZF9zdGF0ZSA9IFJFQURfT05DRShzby1cXHUwMDNldHguc3RhdGUpO1xcbiBcXG4gXFx0LyogZG9uJ3QgaGFuZGxlIHRpbWVvdXRzIGluIElETEUgb3IgU0hVVERPV04gc3RhdGUgKi9cXG4gXFx0aWYgKG9sZF9zdGF0ZSA9PSBJU09UUF9JRExFIHx8IG9sZF9zdGF0ZSA9PSBJU09UUF9TSFVURE9XTilcXG5AQCAtOTY1LDE0ICsxMDUzLDE0IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eF90aW1lb3V0KHN0cnVjdCBpc290cF9zb2NrICpzbylcXG4gXFx0aWYgKGNtcHhjaGcoXFx1MDAyNnNvLVxcdTAwM2V0eC5zdGF0ZSwgb2xkX3N0YXRlLCBJU09UUF9JRExFKSAhPSBvbGRfc3RhdGUpXFxuIFxcdFxcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcXG4gXFxuLVxcdC8qIHdlIGRpZCBub3QgZ2V0IGFueSBmbG93IGNvbnRyb2wgb3IgZWNobyBmcmFtZSBpbiB0aW1lICovXFxuK1xcdC8qIGRldGVjdGVkIHRpbWVvdXQ6IHJlcG9ydCAnY29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kJyAqL1xcbiBcXG4tXFx0aWYgKFJFQURfT05DRShzby1cXHUwMDNldHhfZ2VuKSA9PSBnZW4pIHtcXG4tXFx0XFx0LyogcmVwb3J0ICdjb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQnICovXFxuLVxcdFxcdHNrLVxcdTAwM2Vza19lcnIgPSBFQ09NTTtcXG4tXFx0XFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXFxuLVxcdFxcdFxcdHNrX2Vycm9yX3JlcG9ydChzayk7XFxuLVxcdH1cXG4rXFx0LyogYSBzdGFsZSByZWFkIG9mIHRoaXMgc2xvdCBieSBhIHdhaXRlciBzdGlsbCBmYWxscyBiYWNrIHRvIEVDT01NICovXFxuK1xcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIGdlbiwgRUNPTU0pO1xcbitcXG4rXFx0c2stXFx1MDAzZXNrX2VyciA9IEVDT01NO1xcbitcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcXG4rXFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4gXFxuIFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2c28tXFx1MDAzZXdhaXQpO1xcbiBcXG5AQCAtMTAwNyw3ICsxMDk1LDcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcXG4gXFx0XFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9TT0ZUKTtcXG4gXFxuIFxcdC8qIGNmZWNobyBzaG91bGQgYmUgY29uc3VtZWQgYnkgaXNvdHBfcmN2X2VjaG8oKSBoZXJlICovXFxuLVxcdGlmIChzby1cXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfU0VORElORyBcXHUwMDI2XFx1MDAyNiAhc28tXFx1MDAzZWNmZWNobylcXG4rXFx0aWYgKFJFQURfT05DRShzby1cXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NFTkRJTkcgXFx1MDAyNlxcdTAwMjYgIVJFQURfT05DRShzby1cXHUwMDNlY2ZlY2hvKSlcXG4gXFx0XFx0aXNvdHBfc2VuZF9jZnJhbWUoc28pO1xcbiBcXG4gXFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xcbkBAIC0xMDI2LDEwICsxMTE0LDEyIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRzNjQgaHJ0aW1lcl9zZWMgPSBJU09UUF9FQ0hPX1RJTUVPVVQ7XFxuIFxcdHN0cnVjdCBocnRpbWVyICp0eF9ocnQgPSBcXHUwMDI2c28tXFx1MDAzZWVjaG90aW1lcjtcXG4gXFx0dTMyIG5ld19zdGF0ZSA9IElTT1RQX1NFTkRJTkc7XFxuK1xcdHUzMiBteV9nZW47XFxuK1xcdHUzMiBvbGRfY2ZlY2hvO1xcbiBcXHRpbnQgb2ZmO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCFzby1cXHUwMDNlYm91bmQgfHwgc28tXFx1MDAzZXR4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKVxcbitcXHRpZiAoIXNvLVxcdTAwM2Vib3VuZCB8fCBSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9TSFVURE9XTilcXG4gXFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbiBcXG4gXFx0LyogY2xhaW0gdGhlIHNvY2tldCB1bmRlciBzby1cXHUwMDNlcnhfbG9jazogdGhpcyBzZXJpYWxpemVzIHRoZSBjbGFpbVxcbkBAIC0xMDQ2LDI5ICsxMTM2LDMzIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRcXHRpZiAobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpXFxuIFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXG4tXFx0XFx0aWYgKHNvLVxcdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9TSFVURE9XTilcXG4rXFx0XFx0aWYgKFJFQURfT05DRShzby1cXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcbiBcXHRcXHQvKiB3YWl0IGZvciBjb21wbGV0ZSB0cmFuc21pc3Npb24gb2YgY3VycmVudCBwZHUgKi9cXG4gXFx0XFx0ZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVxcdTAwM2V3YWl0LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc28tXFx1MDAzZXR4LnN0YXRlID09IElTT1RQX0lETEUpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfSURMRSB8fFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04pO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBuZXcgdHJhbnNmZXI6IGJ1bXAgc28tXFx1MDAzZXR4X2dlbiBhbmQgZHJhaW4gdGhlIG9sZCBvbmUncyB0aW1lcnMsXFxuLVxcdCAqIHN0aWxsIHVuZGVyIHRoZSBzby1cXHUwMDNlcnhfbG9jayB3ZSBqdXN0IGNsYWltZWQgdGhlIHNvY2tldCB3aXRoXFxuLVxcdCAqL1xcbi1cXHRXUklURV9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XFxuLVxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4X2dlbiwgUkVBRF9PTkNFKHNvLVxcdTAwM2V0eF9nZW4pICsgMSk7XFxuK1xcdC8qIHR4ZnJ0aW1lcidzIGNhbGxiYWNrIHJlLWFybXMgZWNob3RpbWVyIGxvY2stZnJlZTogZHJhaW4gaXQgZmlyc3QgKi9cXG4rXFx0aHJ0aW1lcl9jYW5jZWwoXFx1MDAyNnNvLVxcdTAwM2V0eGZydGltZXIpO1xcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c28tXFx1MDAzZXR4dGltZXIpO1xcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c28tXFx1MDAzZWVjaG90aW1lcik7XFxuLVxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZzby1cXHUwMDNldHhmcnRpbWVyKTtcXG4tXFx0c28tXFx1MDAzZWNmZWNobyA9IDA7XFxuK1xcbitcXHQvKiBuZXcgdHJhbnNmZXI6IGluY3JlbWVudCBzby1cXHUwMDNldHhfZ2VuIGFuZCBzZXQgdHguc3RhdGUgYWZ0ZXIgYmFycmllciAqL1xcbitcXHRteV9nZW4gPSBpc290cF9pbmNfdHhfZ2VuKFJFQURfT05DRShzby1cXHUwMDNldHhfZ2VuKSk7XFxuK1xcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIG15X2dlbiwgRUNPTU0pOyAvKiBwcmV2ZW50IHN0YWxlIHNsb3QgbWF0Y2hpbmcgKi9cXG4rXFx0V1JJVEVfT05DRShzby1cXHUwMDNldHhfZ2VuLCBteV9nZW4pO1xcbitcXHRzbXBfd21iKCk7IC8qIHNlZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gaXNvdHBfdHhfW3RpbWVvdXR8Z2VuX2RvbmVdICovXFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcXG4rXFx0V1JJVEVfT05DRShzby1cXHUwMDNlY2ZlY2hvLCAwKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4gXFxuIFxcdC8qIHNvLVxcdTAwM2Vib3VuZCBpcyBvbmx5IGNoZWNrZWQgb25jZSBhYm92ZSAtIGEgd2FrZXVwIG1heSBoYXZlXFxuLVxcdCAqIHVuYm91bmQvcmVib3VuZCB0aGUgc29ja2V0IG1lYW53aGlsZSwgc28gcmUtdmFsaWRhdGUgaXRcXG4rXFx0ICogdW5ib3VuZC9yZWJvdW5kIHRoZSBzb2NrZXQgbWVhbndoaWxlID1cXHUwMDNlIHJlY2hlY2tcXG4gXFx0ICovXFxuIFxcdGlmICghc28tXFx1MDAzZWJvdW5kKSB7XFxuIFxcdFxcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xcbkBAIC0xMTI3LDYgKzEyMjEsOSBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFxuIFxcdGNzeC1cXHUwMDNlY2FuX2lpZiA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4gXFxuK1xcdC8qIHNldCB1aWQgaW4gdHggc2tiIHRvIGlkZW50aWZ5IENGIGVjaG8gZnJhbWVzICovXFxuK1xcdGNhbl9zZXRfc2tiX3VpZChza2IpO1xcbitcXG4gXFx0c28tXFx1MDAzZXR4LmxlbiA9IHNpemU7XFxuIFxcdHNvLVxcdTAwM2V0eC5pZHggPSAwO1xcbiBcXG5AQCAtMTEzNCw4ICsxMjMxLDkgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuIFxcdHNrYl9wdXRfemVybyhza2IsIHNvLVxcdTAwM2VsbC5tdHUpO1xcbiBcXG4gXFx0LyogY2ZlY2hvIHNob3VsZCBoYXZlIGJlZW4gemVybydlZCBieSBpbml0IC8gZm9ybWVyIGlzb3RwX3Jjdl9lY2hvKCkgKi9cXG4tXFx0aWYgKHNvLVxcdTAwM2VjZmVjaG8pXFxuLVxcdFxcdHByX25vdGljZV9vbmNlKFxcXCJjYW4taXNvdHA6IHVuaW5pdCBjZmVjaG8gJTA4WFxcXFxuXFxcIiwgc28tXFx1MDAzZWNmZWNobyk7XFxuK1xcdG9sZF9jZmVjaG8gPSBSRUFEX09OQ0Uoc28tXFx1MDAzZWNmZWNobyk7XFxuK1xcdGlmIChvbGRfY2ZlY2hvKVxcbitcXHRcXHRwcl9ub3RpY2Vfb25jZShcXFwiY2FuLWlzb3RwOiB1bmluaXQgY2ZlY2hvICUwOFhcXFxcblxcXCIsIG9sZF9jZmVjaG8pO1xcbiBcXG4gXFx0LyogY2hlY2sgZm9yIHNpbmdsZSBmcmFtZSB0cmFuc21pc3Npb24gZGVwZW5kaW5nIG9uIFRYX0RMICovXFxuIFxcdGlmIChzaXplIFxcdTAwM2M9IHNvLVxcdTAwM2V0eC5sbF9kbCAtIFNGX1BDSV9TWjQgLSBhZSAtIG9mZikge1xcbkBAIC0xMTYzLDcgKzEyNjEsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0XFx0Y2YtXFx1MDAzZWRhdGFbYWVdIHw9IHNpemU7XFxuIFxcbiBcXHRcXHQvKiBzZXQgQ0YgZWNobyB0YWcgZm9yIGlzb3RwX3Jjdl9lY2hvKCkgKFNGLW1vZGUpICovXFxuLVxcdFxcdHNvLVxcdTAwM2VjZmVjaG8gPSAqKHUzMiAqKWNmLVxcdTAwM2VkYXRhO1xcbitcXHRcXHRXUklURV9PTkNFKHNvLVxcdTAwM2VjZmVjaG8sIHNrYi1cXHUwMDNlaGFzaCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIHNlbmQgZmlyc3QgZnJhbWUgKi9cXG4gXFxuQEAgLTExODAsNyArMTI3OCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRcXHRcXHRzby1cXHUwMDNldHhmYy5icyA9IDA7XFxuIFxcbiBcXHRcXHRcXHQvKiBzZXQgQ0YgZWNobyB0YWcgZm9yIGlzb3RwX3Jjdl9lY2hvKCkgKENGLW1vZGUpICovXFxuLVxcdFxcdFxcdHNvLVxcdTAwM2VjZmVjaG8gPSAqKHUzMiAqKWNmLVxcdTAwM2VkYXRhO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHNvLVxcdTAwM2VjZmVjaG8sIHNrYi1cXHUwMDNlaGFzaCk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qIHN0YW5kYXJkIGZsb3cgY29udHJvbCBjaGVjayAqL1xcbiBcXHRcXHRcXHRuZXdfc3RhdGUgPSBJU09UUF9XQUlUX0ZJUlNUX0ZDO1xcbkBAIC0xMTkwLDEyICsxMjg4LDEyIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRcXHRcXHR0eF9ocnQgPSBcXHUwMDI2c28tXFx1MDAzZXR4dGltZXI7XFxuIFxcbiBcXHRcXHRcXHQvKiBubyBDRiBlY2hvIHRhZyBmb3IgaXNvdHBfcmN2X2VjaG8oKSAoRkYtbW9kZSkgKi9cXG4tXFx0XFx0XFx0c28tXFx1MDAzZWNmZWNobyA9IDA7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZWNmZWNobywgMCk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzby1cXHUwMDNlcnhfbG9jayk7XFxuLVxcdGlmIChzby1cXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfU0hVVERPV04pIHtcXG4rXFx0aWYgKFJFQURfT05DRShzby1cXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKSB7XFxuIFxcdFxcdC8qIGlzb3RwX3JlbGVhc2UoKSBoYXMgc2luY2UgdGFrZW4gb3ZlciBhbmQgYWxyZWFkeSBkcmFpbmVkXFxuIFxcdFxcdCAqIG91ciB0aW1lcnMgLSBkb24ndCBzZW5kIGludG8gYSBzb2NrZXQgdGhhdCdzIGdvaW5nIGF3YXlcXG4gXFx0XFx0ICovXFxuQEAgLTEyMDYsNyArMTMwNCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcdH1cXG4gXFx0LyogV0FJVF9GSVJTVF9GQyBmb3Igc3RhbmRhcmQgRkYsIGVsc2Ugc3RheXMgSVNPVFBfU0VORElORyAqL1xcbi1cXHRzby1cXHUwMDNldHguc3RhdGUgPSBuZXdfc3RhdGU7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlLCBuZXdfc3RhdGUpO1xcbiBcXHRocnRpbWVyX3N0YXJ0KHR4X2hydCwga3RpbWVfc2V0KGhydGltZXJfc2VjLCAwKSxcXG4gXFx0XFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9TT0ZUKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG5AQCAtMTIyMywyMCArMTMyMSw0OSBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0XFx0ICAgICAgIF9fZnVuY19fLCBFUlJfUFRSKGVycikpO1xcbiBcXG4gXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzby1cXHUwMDNlcnhfbG9jayk7XFxuK1xcbitcXHRcXHQvKiBuZXcgdHJhbnNmZXIgYWxyZWFkeSBjbGFpbWVkIGJ5IGEgY29uY3VycmVudCBjb21wbGV0aW9uLFxcbitcXHRcXHQgKiB0aW1lb3V0IG9yIHNlbmRtc2coKSB3aGlsZSB3ZSB3ZXJlIHN0dWNrIGluIGNhbl9zZW5kKCk/XFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eF9nZW4pICE9IG15X2dlbikge1xcbitcXHRcXHRcXHQvKiBkb24ndCB0b3VjaCB0aW1lcnMgYW5kIHN0YXRlIG9mIHRoZSBuZXcgdHJhbnNmZXIgKi9cXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0Lyogbm8gdHJhbnNtaXNzaW9uIC1cXHUwMDNlIG5vIHRpbWVvdXQgbW9uaXRvcmluZyAqL1xcbiBcXHRcXHRocnRpbWVyX2NhbmNlbCh0eF9ocnQpO1xcbiBcXHRcXHRnb3RvIGVycl9vdXRfZHJvcF9sb2NrZWQ7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICh3YWl0X3R4X2RvbmUpIHtcXG4tXFx0XFx0Lyogd2FpdCBmb3IgY29tcGxldGUgdHJhbnNtaXNzaW9uIG9mIGN1cnJlbnQgcGR1ICovXFxuLVxcdFxcdGVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzby1cXHUwMDNld2FpdCwgc28tXFx1MDAzZXR4LnN0YXRlID09IElTT1RQX0lETEUpO1xcbitcXHRcXHQvKiB3YWtlIHVwIGZvcjpcXG4rXFx0XFx0ICogLSBjb25jdXJyZW50IHNlbmRtc2coKSBjbGFpbWluZyBhIG5ldyB0cmFuc2ZlclxcbitcXHRcXHQgKiAtIGNvbXBsZXRlIHRyYW5zbWlzc2lvbiBvZiBjdXJyZW50IFBEVVxcbitcXHRcXHQgKiAtIHNodXRkb3duIHN0YXRlIGNoYW5nZSBpbiBpc290cF9yZWxlYXNlKClcXG4rXFx0XFx0ICogaXNvdHBfdHhfZ2VuX2RvbmUoKSB1c2VzIGNvbW1vbiB0eC5zdGF0ZS90eF9nZW4gcmVhZCBzZXF1ZW5jZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVxcdTAwM2V3YWl0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgaXNvdHBfdHhfZ2VuX2RvbmUoc28sIG15X2dlbikpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9ldmVudF9kcm9wO1xcbiBcXG4tXFx0XFx0ZXJyID0gc29ja19lcnJvcihzayk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdC8qIHN0aWxsIG91ciBjbGFpbSwgYnV0IGlzb3RwX3JlbGVhc2UoKSBmb3JjZS1zaHV0IGl0IGRvd24gKi9cXG4rXFx0XFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnNvLVxcdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIFJFQURfT05DRShzby1cXHUwMDNldHhfZ2VuKSA9PSBteV9nZW4pIHtcXG4rXFx0XFx0XFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX2V2ZW50X2Ryb3A7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIG93biBjb21wbGV0aW9uLCBvciB0eF9nZW4gbW92ZWQgb24gLSBlaXRoZXIgd2F5IHRoaXMgaXNcXG4rXFx0XFx0ICogd2hhdCBpc290cF9nZXRfdHhfcmVzdWx0KCkgcmVjb3JkZWQgZm9yIG15X2dlblxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXJyID0gaXNvdHBfZ2V0X3R4X3Jlc3VsdChzbywgbXlfZ2VuKTtcXG4rXFxuK1xcdFxcdC8qIGRyYWluIHRvIGF2b2lkIHN0YWxlIGVycm9yIGZvciBhIGxhdGVyIHBvbGwoKS9TT19FUlJPUiAqL1xcbitcXHRcXHRzb2NrX2Vycm9yKHNrKTtcXG4rXFxuK1xcdFxcdHJldHVybiBlcnIgPyBlcnIgOiBzaXplO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gc2l6ZTtcXG5AQCAtMTI0NiwxNSArMTM3MywyNiBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzby1cXHUwMDNlcnhfbG9jayk7XFxuIFxcdGdvdG8gZXJyX291dF9kcm9wX2xvY2tlZDtcXG4gZXJyX2V2ZW50X2Ryb3A6XFxuLVxcdC8qIGludGVycnVwdGVkIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAtIGRyYWluIGl0cyB0aW1lcnMgKi9cXG4rXFx0LyogaW50ZXJydXB0ZWQgb3Igc2h1dCBkb3duIHdoaWxlIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAqL1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFxuK1xcdC8qIG5ldyB0cmFuc2ZlciBhbHJlYWR5IHN0YXJ0ZWQgYnkgY29uY3VycmVudCBzZW5kbXNnKCk/ICovXFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZXR4X2dlbikgIT0gbXlfZ2VuKSB7XFxuK1xcdFxcdC8qIGRvbid0IHRvdWNoIHRpbWVycyBhbmQgc3RhdGVzIG9mIHRoZSBuZXcgdHJhbnNmZXIgKi9cXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0aHJ0aW1lcl9jYW5jZWwoXFx1MDAyNnNvLVxcdTAwM2V0eGZydGltZXIpO1xcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c28tXFx1MDAzZXR4dGltZXIpO1xcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c28tXFx1MDAzZWVjaG90aW1lcik7XFxuIGVycl9vdXRfZHJvcF9sb2NrZWQ6XFxuIFxcdC8qIHJlbGVhc2UgdGhlIGNsYWltOyBzby1cXHUwMDNlcnhfbG9jayBzdGlsbCBoZWxkIGZyb20gYWJvdmUgKi9cXG4tXFx0c28tXFx1MDAzZWNmZWNobyA9IDA7XFxuLVxcdHNvLVxcdTAwM2V0eC5zdGF0ZSA9IElTT1RQX0lETEU7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZWNmZWNobywgMCk7XFxuK1xcbitcXHQvKiBvbmx5IGNsYWltIHRvIElETEUgaWYgaXNvdHBfcmVsZWFzZSgpIGhhcyBub3QgdGFrZW4gb3ZlciAqL1xcbitcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfU0hVVERPV04pXFxuK1xcdFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlLCBJU09UUF9JRExFKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4gXFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZzby1cXHUwMDNld2FpdCk7XFxuIFxcbkBAIC0xMzIwLDggKzE0NTgsOSBAQCBzdGF0aWMgaW50IGlzb3RwX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4gXFx0LyogYmVzdC1lZmZvcnQ6IHdhaXQgZm9yIGEgcnVubmluZyBwZHUgdG8gZmluaXNoLCBidXQgZG9uJ3QgYmxvY2sgb25cXG4gXFx0ICogaXQgZm9yZXZlciAtIGdpdmUgdXAgYWZ0ZXIgdGhlIGZpcnN0IHNpZ25hbFxcbiBcXHQgKi9cXG4tXFx0d2hpbGUgKHNvLVxcdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXFx1MDAzZXdhaXQsIHNvLVxcdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9JRExFKSA9PSAwKVxcbitcXHR3aGlsZSAoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVxcdTAwM2V3YWl0LFxcbitcXHRcXHRcXHRcXHRcXHRSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9JRExFKSA9PSAwKVxcbiBcXHRcXHQ7XFxuIFxcbiBcXHQvKiBjbGFpbSB0aGUgc29ja2V0IHVuZGVyIHNvLVxcdTAwM2VyeF9sb2NrIGxpa2Ugc2VuZG1zZygpIGRvZXMsIHNvIGl0c1xcbkBAIC0xMzI5LDkgKzE0NjgsMTIgQEAgc3RhdGljIGludCBpc290cF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuIFxcdCAqIHVuY29uZGl0aW9uYWxseSwgZXZlbiB3aGVuIGEgc2lnbmFsIGN1dCB0aGUgd2FpdCBhYm92ZSBzaG9ydFxcbiBcXHQgKi9cXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzby1cXHUwMDNlcnhfbG9jayk7XFxuLVxcdHNvLVxcdTAwM2V0eC5zdGF0ZSA9IElTT1RQX1NIVVRET1dOO1xcbitcXHRXUklURV9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0hVVERPV04pO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c28tXFx1MDAzZXJ4X2xvY2spO1xcbi1cXHRzby1cXHUwMDNlcnguc3RhdGUgPSBJU09UUF9JRExFO1xcbitcXHRXUklURV9PTkNFKHNvLVxcdTAwM2VyeC5zdGF0ZSwgSVNPVFBfSURMRSk7XFxuK1xcbitcXHQvKiBmb3JjZWQgU0hVVERPV04gbWF5IGhhdmUgc2tpcHBlZCBJRExFIChnYXZlIHVwIG9uIGEgc2lnbmFsKSAqL1xcbitcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnNvLVxcdTAwM2V3YWl0KTtcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2aXNvdHBfbm90aWZpZXJfbG9jayk7XFxuIFxcdHdoaWxlIChpc290cF9idXN5X25vdGlmaWVyID09IHNvKSB7XFxuQEAgLTE0NDcsNyArMTU4OSw4IEBAIHN0YXRpYyBpbnQgaXNvdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsXFxuIFxcdCAqIHdpdGggc28tXFx1MDAzZWJvdW5kIGluIHRoZSBzYW1lIGxvY2tfc29jaygpIHNlY3Rpb24gYWJvdmUsIHNvIHRoZXJlIGlzXFxuIFxcdCAqIG5vIHdpbmRvdyBpbiB3aGljaCBhIGNvbmN1cnJlbnQgaXNvdHBfbm90aWZ5KCkgY291bGQgYmUgbWlzc2VkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHNvLVxcdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFIHx8IHNvLVxcdTAwM2VyeC5zdGF0ZSAhPSBJU09UUF9JRExFKSB7XFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9JRExFIHx8XFxuK1xcdCAgICBSRUFEX09OQ0Uoc28tXFx1MDAzZXJ4LnN0YXRlKSAhPSBJU09UUF9JRExFKSB7XFxuIFxcdFxcdGVyciA9IC1FQUdBSU47XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTE0ODEsNyArMTYyNCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsXFxuIFxcdFxcdFxcdFxcdGlzb3RwX3Jjdiwgc2ssIFxcXCJpc290cFxcXCIsIHNrKTtcXG4gXFxuIFxcdC8qIG5vIGNvbnNlY3V0aXZlIGZyYW1lIGVjaG8gc2tiIGluIGZsaWdodCAqL1xcbi1cXHRzby1cXHUwMDNlY2ZlY2hvID0gMDtcXG4rXFx0V1JJVEVfT05DRShzby1cXHUwMDNlY2ZlY2hvLCAwKTtcXG4gXFxuIFxcdC8qIHJlZ2lzdGVyIGZvciBlY2hvIHNrYidzICovXFxuIFxcdGNhbl9yeF9yZWdpc3RlcihuZXQsIGRldiwgdHhfaWQsIFNJTkdMRV9NQVNLKHR4X2lkKSxcXG5AQCAtMTg0Nyw3ICsxOTkwLDcgQEAgc3RhdGljIF9fcG9sbF90IGlzb3RwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHBvbGxfdGFibGUgKndcXG4gXFx0cG9sbF93YWl0KGZpbGUsIFxcdTAwMjZzby1cXHUwMDNld2FpdCwgd2FpdCk7XFxuIFxcbiBcXHQvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byBUWCBzdGF0ZSAqL1xcbi1cXHRpZiAoKG1hc2sgXFx1MDAyNiBFUE9MTFdSTk9STSkgXFx1MDAyNlxcdTAwMjYgKHNvLVxcdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFKSlcXG4rXFx0aWYgKChtYXNrIFxcdTAwMjYgRVBPTExXUk5PUk0pIFxcdTAwMjZcXHUwMDI2IChSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9JRExFKSlcXG4gXFx0XFx0bWFzayBcXHUwMDI2PSB+KEVQT0xMT1VUIHwgRVBPTExXUk5PUk0pO1xcbiBcXG4gXFx0cmV0dXJuIG1hc2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEyOjU2LjkxMTU4OTMxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4NzcxMzQ5Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0lTT1RQXCIsXG4gICAgXCJDQU5fREVWXCIsXG4gICAgXCJDQU5fVkNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb3RwX3NlbmRtc2dcIixcbiAgICBcImlzb3RwX2JpbmRcIixcbiAgICBcImlzb3RwX3JlbGVhc2VcIixcbiAgICBcImlzb3RwX3BvbGxcIixcbiAgICBcImlzb3RwX3JjdlwiLFxuICAgIFwiaXNvdHBfcmN2X2VjaG9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ0FOIElTT1RQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGZpeCBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gVFgvUlggc3RhdGUgaGFuZGxpbmcgYW5kIHRyYW5zZmVyIGdlbmVyYXRpb24gdHJhY2tpbmcuIEl0IGludHJvZHVjZXMgYSBuZXcgdHhfcmVzdWx0IGFycmF5IGFuZCB1c2VzIFJFQURfT05DRS9XUklURV9PTkNFIGZvciBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBJU09UUCBwcm90b2NvbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbmV3IHJhY2UgY29uZGl0aW9ucyBvciBsb2dpYyBidWdzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDI5NTI3MWQxOTc5NzM1MWIzNmMzY2M1MGY3Y2RhM2IxMzE3YjBlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDA3OjEyOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9pc290cC5jIGIvbmV0L2Nhbi9pc290cC5jXG5pbmRleCA1NGJlY2FmNjg5OGYxMy4uMWYxMWM2NmIzNDNjODYgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2lzb3RwLmNcbisrKyBiL25ldC9jYW4vaXNvdHAuY1xuQEAgLTEyNyw2ICsxMjcsMTUgQEAgTU9EVUxFX1BBUk1fREVTQyhtYXhfcGR1X3NpemUsIFwibWF4aW11bSBpc290cCBwZHUgc2l6ZSAoZGVmYXVsdCBcIlxuICNkZWZpbmUgSVNPVFBfRkNfVElNRU9VVCAxXHQvKiAxIHNlYyAqL1xuICNkZWZpbmUgSVNPVFBfRUNIT19USU1FT1VUIDJcdC8qIDIgc2VjcyAqL1xuIFxuKy8qIHNvLVx1MDAzZXR4X3Jlc3VsdFtzby1cdTAwM2V0eF9nZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdIGhvbGRzIHRoZSBwYWNrZWQgdmFsdWVcbisgKiAoZXJyIFx1MDAzY1x1MDAzYyBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMgfCBnZW4pIGZvciBlYWNoIHR4IGdlbmVyYXRpb24gc2xvdCwgc28gaXRcbisgKiBjYW4gYmUgaGFuZGxlZCB3aXRoIGEgc2luZ2xlIFJFQURfT05DRSgpL1dSSVRFX09OQ0UoKSBhY2Nlc3MuXG4rICovXG4rI2RlZmluZSBJU09UUF9UWF9SRVNVTFRfU0xPVFMgNFxuKyNkZWZpbmUgSVNPVFBfVFhfUkVTVUxUX0dFTl9CSVRTIDI0XG4rI2RlZmluZSBJU09UUF9UWF9SRVNVTFRfR0VOX01BU0sgKCgxVSBcdTAwM2NcdTAwM2MgSVNPVFBfVFhfUkVTVUxUX0dFTl9CSVRTKSAtIDEpXG4rI2RlZmluZSBJU09UUF9UWF9SRVNVTFRfRVJSX01BU0sgMHhGRlxuK1xuIGVudW0ge1xuIFx0SVNPVFBfSURMRSA9IDAsXG4gXHRJU09UUF9XQUlUX0ZJUlNUX0ZDLFxuQEAgLTE2Niw3ICsxNzUsOCBAQCBzdHJ1Y3QgaXNvdHBfc29jayB7XG4gXHR1MzIgZm9yY2VfdHhfc3RtaW47XG4gXHR1MzIgZm9yY2Vfcnhfc3RtaW47XG4gXHR1MzIgY2ZlY2hvOyAvKiBjb25zZWN1dGl2ZSBmcmFtZSBlY2hvIHRhZyAqL1xuLVx0dTMyIHR4X2dlbjsgLyogZ2VuZXJhdGlvbiwgYnVtcGVkIHBlciBuZXcgdHggdHJhbnNmZXIgKi9cbitcdHUzMiB0eF9nZW47IC8qIHRyYW5zZmVyIGdlbmVyYXRpb24sIGluY3JlYXNlZCBwZXIgbmV3IHR4IHRyYW5zZmVyICovXG4rXHR1MzIgdHhfcmVzdWx0W0lTT1RQX1RYX1JFU1VMVF9TTE9UU107IC8qIHBlci1nZW5lcmF0aW9uIHJlc3VsdCBzbG90cyAqL1xuIFx0c3RydWN0IHRwY29uIHJ4LCB0eDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm90aWZpZXI7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xuQEAgLTE3Nyw2ICsxODcsNjUgQEAgc3RhdGljIExJU1RfSEVBRChpc290cF9ub3RpZmllcl9saXN0KTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlzb3RwX25vdGlmaWVyX2xvY2spO1xuIHN0YXRpYyBzdHJ1Y3QgaXNvdHBfc29jayAqaXNvdHBfYnVzeV9ub3RpZmllcjtcbiBcbisvKiBpbmNyZWFzZSAoMjQgYml0KSB0eCBnZW5lcmF0aW9uIHZhbHVlICovXG4rc3RhdGljIHUzMiBpc290cF9pbmNfdHhfZ2VuKHUzMiBnZW4pXG4re1xuK1x0cmV0dXJuIChnZW4gKyAxKSBcdTAwMjYgSVNPVFBfVFhfUkVTVUxUX0dFTl9NQVNLO1xuK31cbitcbisvKiBzdG9yZSA4IGJpdCBlcnJvciBhbmQgMjQgYml0IHR4IGdlbmVyYXRpb24gdmFsdWVzIGluIHBhY2tlZCB1MzIgZWxlbWVudCAqL1xuK3N0YXRpYyB1MzIgaXNvdHBfcGFja190eF9yZXN1bHQodTMyIGdlbiwgaW50IGVycilcbit7XG4rXHRyZXR1cm4gZ2VuIHwgKCh1MzIpZXJyIFx1MDAzY1x1MDAzYyBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMpO1xuK31cbitcbisvKiBnZXQgdGhlIDI0IGJpdCB0eCBnZW5lcmF0aW9uIHZhbHVlIGZyb20gdGhlIHR4IHJlc3VsdCAqL1xuK3N0YXRpYyB1MzIgaXNvdHBfZ2V0X3R4X2dlbih1MzIgZ2VuX2Vycilcbit7XG4rXHRyZXR1cm4gZ2VuX2VyciBcdTAwMjYgSVNPVFBfVFhfUkVTVUxUX0dFTl9NQVNLO1xuK31cbitcbisvKiBnZXQgdGhlIDggYml0IGVycm9yIHZhbHVlIGZyb20gdGhlIHR4IHJlc3VsdCAqL1xuK3N0YXRpYyB1MzIgaXNvdHBfZ2V0X3R4X2Vycih1MzIgZ2VuX2Vycilcbit7XG4rXHRyZXR1cm4gKGdlbl9lcnIgXHUwMDNlXHUwMDNlIElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUykgXHUwMDI2IElTT1RQX1RYX1JFU1VMVF9FUlJfTUFTSztcbit9XG4rXG4rLyogc3RvcmUgdHJhbnNmZXIgcmVzdWx0IGluIHBlci1nZW5lcmF0aW9uJTQgc28tXHUwMDNldHhfcmVzdWx0W10gc2xvdCAqL1xuK3N0YXRpYyB2b2lkIGlzb3RwX3NldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuLCBpbnQgZXJyKVxuK3tcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHhfcmVzdWx0W2dlbiAlIElTT1RQX1RYX1JFU1VMVF9TTE9UU10sXG4rXHRcdCAgIGlzb3RwX3BhY2tfdHhfcmVzdWx0KGdlbiwgZXJyKSk7XG4rfVxuK1xuKy8qIGZldGNoIHRoZSByZXN1bHQgcmVjb3JkZWQgZm9yICdnZW4nLCBhcyBhIChuZWdhdGl2ZSkgZXJybm8gKDAgZm9yIHN1Y2Nlc3MpICovXG4rc3RhdGljIGludCBpc290cF9nZXRfdHhfcmVzdWx0KHN0cnVjdCBpc290cF9zb2NrICpzbywgdTMyIGdlbilcbit7XG4rXHR1MzIgcmVzdWx0ID0gUkVBRF9PTkNFKHNvLVx1MDAzZXR4X3Jlc3VsdFtnZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdKTtcbitcbitcdGlmIChpc290cF9nZXRfdHhfZ2VuKHJlc3VsdCkgIT0gZ2VuKSB7XG4rXHRcdHByX25vdGljZV9vbmNlKFwiY2FuLWlzb3RwOiB0eF9yZXN1bHRbXSBzbG90IHJldXNlZCBiZWZvcmUgcmVhZFxcblwiKTtcbitcbitcdFx0LyogcmVwb3J0IGZhaWx1cmUgcmF0aGVyIHRoYW4gcmlzayBhIGZhbHNlIHN1Y2Nlc3MgKi9cbitcdFx0cmV0dXJuIC1FQ09NTTtcbitcdH1cbitcbitcdHJldHVybiAtKGlzb3RwX2dldF90eF9lcnIocmVzdWx0KSk7XG4rfVxuK1xuKy8qIHRydWUgaWYgZG9uZSwgc2h1dCBkb3duIG9yIHN1cGVyc2VkZWQgKCdnZW4nIGlzIG5vIGxvbmdlciB0aGUgYWN0aXZlXG4rICogdHJhbnNmZXIpLiBSZWFkcyB0eC5zdGF0ZSBmaXJzdCAoYWNxdWlyZSkgc28gdHhfZ2VuL3R4X3Jlc3VsdCByZWFkc1xuKyAqIGJlbG93IHNlZSBhdCBsZWFzdCB3aGF0IHRoYXQgc3RhdGUgd3JpdGUgcHVibGlzaGVkIChjb21tb24gc2VxdWVuY2UpLlxuKyAqL1xuK3N0YXRpYyBib29sIGlzb3RwX3R4X2dlbl9kb25lKHN0cnVjdCBpc290cF9zb2NrICpzbywgdTMyIGdlbilcbit7XG4rXHQvKiByZWFkIHR4LnN0YXRlIGZpcnN0IGZvciB0aGUgY29tbW9uIHNlcXVlbmNlICovXG4rXHR1MzIgc3RhdGUgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlKTtcbitcbitcdHJldHVybiBzdGF0ZSA9PSBJU09UUF9JRExFIHx8IHN0YXRlID09IElTT1RQX1NIVVRET1dOIHx8XG4rXHQgICAgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgIT0gZ2VuO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpc290cF9zb2NrICppc290cF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0cmV0dXJuIChzdHJ1Y3QgaXNvdHBfc29jayAqKXNrO1xuQEAgLTE5OSw3ICsyNjgsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbiBcdFx0XHRcdFx0ICAgICByeHRpbWVyKTtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNvLVx1MDAzZXNrO1xuIFxuLVx0aWYgKHNvLVx1MDAzZXJ4LnN0YXRlID09IElTT1RQX1dBSVRfREFUQSkge1xuK1x0aWYgKFJFQURfT05DRShzby1cdTAwM2VyeC5zdGF0ZSkgPT0gSVNPVFBfV0FJVF9EQVRBKSB7XG4gXHRcdC8qIHdlIGRpZCBub3QgZ2V0IG5ldyBkYXRhIGZyYW1lcyBpbiB0aW1lICovXG4gXG4gXHRcdC8qIHJlcG9ydCAnY29ubmVjdGlvbiB0aW1lZCBvdXQnICovXG5AQCAtMjA4LDcgKzI3Nyw3IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF9yeF90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxuIFx0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4gXG4gXHRcdC8qIHJlc2V0IHJ4IHN0YXRlICovXG4tXHRcdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbitcdFx0V1JJVEVfT05DRShzby1cdTAwM2VyeC5zdGF0ZSwgSVNPVFBfSURMRSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG5AQCAtMzcyLDIwICs0NDEsMTkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKTtcbiBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mYyhzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZzby1cdTAwM2VzaztcbitcdGludCB0eF9lcnIgPSBFQkFETVNHOyAvKiBkZWZhdWx0IGZvciB1bmtub3duIEZDIHN0YXR1cyAqL1xuIFxuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRkMgXHUwMDI2XHUwMDI2XG4tXHQgICAgc28tXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfV0FJVF9GSVJTVF9GQylcbitcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpICE9IElTT1RQX1dBSVRfRkMgXHUwMDI2XHUwMDI2XG4rXHQgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZXR4dGltZXIpO1xuIFxuIFx0LyogaXNvdHBfdHhfdGltZW91dCgpIG1heSBoYXZlIGdpdmVuIHVwIG9uIHRoaXMgam9iIHdoaWxlXG4tXHQgKiBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoOyBzby1cdTAwM2VyeF9sb2NrXG4tXHQgKiAoaGVsZCBieSBvdXIgY2FsbGVyIGlzb3RwX3JjdigpKSBydWxlcyBvdXQgYSBjb25jdXJyZW50IGNsYWltLFxuLVx0ICogc28gYSBwbGFpbiByZWNoZWNrIGlzIGVub3VnaCBoZXJlLlxuK1x0ICogaHJ0aW1lcl9jYW5jZWwoKSBhYm92ZSB3YWl0ZWQgZm9yIGl0IHRvIGZpbmlzaCA9XHUwMDNlIHJlY2hlY2tcbiBcdCAqL1xuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRkMgXHUwMDI2XHUwMDI2XG4tXHQgICAgc28tXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfV0FJVF9GSVJTVF9GQylcbitcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpICE9IElTT1RQX1dBSVRfRkMgXHUwMDI2XHUwMDI2XG4rXHQgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxuIFx0XHRyZXR1cm4gMTtcbiBcbiBcdGlmICgoY2YtXHUwMDNlbGVuIFx1MDAzYyBhZSArIEZDX0NPTlRFTlRfU1opIHx8XG5AQCAtMzk2LDEzICs0NjQsMTUgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxuIFx0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4gXG4tXHRcdHNvLVx1MDAzZXR4LnN0YXRlID0gSVNPVFBfSURMRTtcbitcdFx0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgc28tXHUwMDNldHhfZ2VuLCBFQkFETVNHKTtcbitcdFx0Lyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi9cbitcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c28tXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuIFx0LyogZ2V0IHN0YXRpYy9keW5hbWljIGNvbW11bmljYXRpb24gcGFyYW1zIGZyb20gZmlyc3QvZXZlcnkgRkMgZnJhbWUgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9XQUlUX0ZJUlNUX0ZDIHx8XG4rXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9XQUlUX0ZJUlNUX0ZDIHx8XG4gXHQgICAgc28tXHUwMDNlb3B0LmZsYWdzIFx1MDAyNiBDQU5fSVNPVFBfRFlOX0ZDX1BBUk1TKSB7XG4gXHRcdHNvLVx1MDAzZXR4ZmMuYnMgPSBjZi1cdTAwM2VkYXRhW2FlICsgMV07XG4gXHRcdHNvLVx1MDAzZXR4ZmMuc3RtaW4gPSBjZi1cdTAwM2VkYXRhW2FlICsgMl07XG5AQCAtNDI2LDEzICs0OTYsMTMgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXHRcdFx0c28tXHUwMDNldHhfZ2FwID0ga3RpbWVfYWRkX25zKHNvLVx1MDAzZXR4X2dhcCxcbiBcdFx0XHRcdFx0XHQgIChzby1cdTAwM2V0eGZjLnN0bWluIC0gMHhGMClcbiBcdFx0XHRcdFx0XHQgICogMTAwMDAwKTtcbi1cdFx0c28tXHUwMDNldHguc3RhdGUgPSBJU09UUF9XQUlUX0ZDO1xuK1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9XQUlUX0ZDKTtcbiBcdH1cbiBcbiBcdHN3aXRjaCAoY2YtXHUwMDNlZGF0YVthZV0gXHUwMDI2IDB4MEYpIHtcbiBcdGNhc2UgSVNPVFBfRkNfQ1RTOlxuIFx0XHRzby1cdTAwM2V0eC5icyA9IDA7XG4tXHRcdHNvLVx1MDAzZXR4LnN0YXRlID0gSVNPVFBfU0VORElORztcbitcdFx0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XG4gXHRcdC8qIHNlbmQgQ0YgZnJhbWUgYW5kIGVuYWJsZSBlY2hvIHRpbWVvdXQgaGFuZGxpbmcgKi9cbiBcdFx0aHJ0aW1lcl9zdGFydChcdTAwMjZzby1cdTAwM2VlY2hvdGltZXIsIGt0aW1lX3NldChJU09UUF9FQ0hPX1RJTUVPVVQsIDApLFxuIFx0XHRcdCAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7XG5AQCAtNDQ3LDE0ICs1MTcsMTkgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXG4gXHRjYXNlIElTT1RQX0ZDX09WRkxXOlxuIFx0XHQvKiBvdmVyZmxvdyBvbiByZWNlaXZlciBzaWRlIC0gcmVwb3J0ICdtZXNzYWdlIHRvbyBsb25nJyAqL1xuLVx0XHRzay1cdTAwM2Vza19lcnIgPSBFTVNHU0laRTtcbi1cdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4tXHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbitcdFx0dHhfZXJyID0gRU1TR1NJWkU7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFxuIFx0ZGVmYXVsdDpcbi1cdFx0Lyogc3RvcCB0aGlzIHR4IGpvYiAqL1xuLVx0XHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX0lETEU7XG4rXHRcdC8qIHJlc2VydmVkL3Vua25vd24gZmxvdyBzdGF0dXMgKHR4X2VyciBkZWZhdWx0cyB0byBFQkFETVNHKSAqL1xuK1xuK1x0XHRzay1cdTAwM2Vza19lcnIgPSB0eF9lcnI7XG4rXHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxuK1x0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4rXG4rXHRcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIHNvLVx1MDAzZXR4X2dlbiwgdHhfZXJyKTtcbitcdFx0Lyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi9cbitcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c28tXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbkBAIC00NjcsNyArNTQyLDcgQEAgc3RhdGljIGludCBpc290cF9yY3Zfc2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgcGNpbGVuLFxuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4gXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VyeHRpbWVyKTtcbi1cdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNlcnguc3RhdGUsIElTT1RQX0lETEUpO1xuIFxuIFx0aWYgKCFsZW4gfHwgbGVuIFx1MDAzZSBjZi1cdTAwM2VsZW4gLSBwY2lsZW4pXG4gXHRcdHJldHVybiAxO1xuQEAgLTUwMSw3ICs1NzYsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiBcdGludCBmZl9wY2lfc3o7XG4gXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VyeHRpbWVyKTtcbi1cdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNlcnguc3RhdGUsIElTT1RQX0lETEUpO1xuIFxuIFx0LyogZ2V0IHRoZSB1c2VkIHNlbmRlciBMTF9ETCBmcm9tIHRoZSAoZmlyc3QpIENBTiBmcmFtZSBkYXRhIGxlbmd0aCAqL1xuIFx0c28tXHUwMDNlcngubGxfZGwgPSBwYWRsZW4oY2YtXHUwMDNlbGVuKTtcbkBAIC01NTUsNyArNjMwLDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXG4gXHQvKiBpbml0aWFsIHNldHVwIGZvciB0aGlzIHBkdSByZWNlcHRpb24gKi9cbiBcdHNvLVx1MDAzZXJ4LnNuID0gMTtcbi1cdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfV0FJVF9EQVRBO1xuK1x0V1JJVEVfT05DRShzby1cdTAwM2VyeC5zdGF0ZSwgSVNPVFBfV0FJVF9EQVRBKTtcbiBcbiBcdC8qIG5vIGNyZWF0aW9uIG9mIGZsb3cgY29udHJvbCBmcmFtZXMgKi9cbiBcdGlmIChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IENBTl9JU09UUF9MSVNURU5fTU9ERSlcbkBAIC01NzMsNyArNjQ4LDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbiBcdGludCBpO1xuIFxuLVx0aWYgKHNvLVx1MDAzZXJ4LnN0YXRlICE9IElTT1RQX1dBSVRfREFUQSlcbitcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNlcnguc3RhdGUpICE9IElTT1RQX1dBSVRfREFUQSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBkcm9wIGlmIHRpbWVzdGFtcCBnYXAgaXMgbGVzcyB0aGFuIGZvcmNlX3J4X3N0bWluIG5hbm8gc2VjcyAqL1xuQEAgLTU4OCwxMSArNjYzLDkgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VyeHRpbWVyKTtcbiBcbiBcdC8qIGlzb3RwX3J4X3RpbWVyX2hhbmRsZXIoKSBtYXkgaGF2ZSByYWNlZCB1cyBmb3Igc28tXHUwMDNlcnguc3RhdGVcbi1cdCAqIHdoaWxlIGhydGltZXJfY2FuY2VsKCkgYWJvdmUgd2FpdGVkIGZvciBpdCB0byBmaW5pc2gsIGFscmVhZHlcbi1cdCAqIHJlcG9ydGluZyBFVElNRURPVVQgYW5kIHJlc2V0dGluZyB0aGUgcmVjZXB0aW9uOyBkb24ndCBwcm9jZXNzXG4tXHQgKiB0aGlzIENGIGludG8gYSByZWFzc2VtYmx5IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBnaXZlbiB1cCBvbi5cbitcdCAqIHdoaWxlIGhydGltZXJfY2FuY2VsKCkgYWJvdmUgd2FpdGVkIGZvciBpdCB0byBmaW5pc2ggPVx1MDAzZSByZWNoZWNrXG4gXHQgKi9cbi1cdGlmIChzby1cdTAwM2VyeC5zdGF0ZSAhPSBJU09UUF9XQUlUX0RBVEEpXG4rXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0RBVEEpXG4gXHRcdHJldHVybiAxO1xuIFxuIFx0LyogQ0ZzIGFyZSBuZXZlciBsb25nZXIgdGhhbiB0aGUgRkYgKi9cbkBAIC02MTMsNyArNjg2LDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG4gXHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiBcbiBcdFx0LyogcmVzZXQgcnggc3RhdGUgKi9cbi1cdFx0c28tXHUwMDNlcnguc3RhdGUgPSBJU09UUF9JRExFO1xuK1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXHRzby1cdTAwM2VyeC5zbisrO1xuQEAgLTYyNyw3ICs3MDAsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9jZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSxcbiBcbiBcdGlmIChzby1cdTAwM2VyeC5pZHggXHUwMDNlPSBzby1cdTAwM2VyeC5sZW4pIHtcbiBcdFx0Lyogd2UgYXJlIGRvbmUgKi9cbi1cdFx0c28tXHUwMDNlcnguc3RhdGUgPSBJU09UUF9JRExFO1xuK1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcbiBcdFx0aWYgKChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IElTT1RQX0NIRUNLX1BBRERJTkcpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgY2hlY2tfcGFkKHNvLCBjZiwgaSArIDEsIHNvLVx1MDAzZW9wdC5yeHBhZF9jb250ZW50KSkge1xuQEAgLTY5OCw4ICs3NzEsMTAgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXG4gXG4gXHRpZiAoc28tXHUwMDNlb3B0LmZsYWdzIFx1MDAyNiBDQU5fSVNPVFBfSEFMRl9EVVBMRVgpIHtcbiBcdFx0LyogY2hlY2sgcngvdHggcGF0aCBoYWxmIGR1cGxleCBleHBlY3RhdGlvbnMgKi9cbi1cdFx0aWYgKChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFIFx1MDAyNlx1MDAyNiBuX3BjaV90eXBlICE9IE5fUENJX0ZDKSB8fFxuLVx0XHQgICAgKHNvLVx1MDAzZXJ4LnN0YXRlICE9IElTT1RQX0lETEUgXHUwMDI2XHUwMDI2IG5fcGNpX3R5cGUgPT0gTl9QQ0lfRkMpKVxuK1x0XHRpZiAoKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBuX3BjaV90eXBlICE9IE5fUENJX0ZDKSB8fFxuK1x0XHQgICAgKFJFQURfT05DRShzby1cdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBuX3BjaV90eXBlID09IE5fUENJX0ZDKSlcbiBcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG5AQCAtNzk0LDYgKzg2OSw3IEBAIHN0YXRpYyB2b2lkIGlzb3RwX3NlbmRfY2ZyYW1lKHN0cnVjdCBpc290cF9zb2NrICpzbylcbiBcdHN0cnVjdCBjYW5mZF9mcmFtZSAqY2Y7XG4gXHRpbnQgY2FuX3NlbmRfcmV0O1xuIFx0aW50IGFlID0gKHNvLVx1MDAzZW9wdC5mbGFncyBcdTAwMjYgQ0FOX0lTT1RQX0VYVEVORF9BRERSKSA/IDEgOiAwO1xuK1x0dTMyIG9sZF9jZmVjaG87XG4gXG4gXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc28tXHUwMDNlaWZpbmRleCk7XG4gXHRpZiAoIWRldilcbkBAIC04MTQsNiArODkwLDkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIFxuIFx0Y3N4LVx1MDAzZWNhbl9paWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiBcbitcdC8qIHNldCB1aWQgaW4gdHggc2tiIHRvIGlkZW50aWZ5IENGIGVjaG8gZnJhbWVzICovXG4rXHRjYW5fc2V0X3NrYl91aWQoc2tiKTtcbitcbiBcdGNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cdTAwM2VkYXRhO1xuIFx0c2tiX3B1dF96ZXJvKHNrYiwgc28tXHUwMDNlbGwubXR1KTtcbiBcbkBAIC04MzAsMTIgKzkwOSwxNSBAQCBzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pXG4gXHRza2ItXHUwMDNlZGV2ID0gZGV2O1xuIFx0Y2FuX3NrYl9zZXRfb3duZXIoc2tiLCBzayk7XG4gXG4tXHQvKiBjZmVjaG8gc2hvdWxkIGhhdmUgYmVlbiB6ZXJvJ2VkIGJ5IGluaXQvaXNvdHBfcmN2X2VjaG8oKSAqL1xuLVx0aWYgKHNvLVx1MDAzZWNmZWNobylcbi1cdFx0cHJfbm90aWNlX29uY2UoXCJjYW4taXNvdHA6IGNmZWNobyBpcyAlMDhYICE9IDBcXG5cIiwgc28tXHUwMDNlY2ZlY2hvKTtcbitcdC8qIHplcm8nZWQgYnkgaW5pdC9pc290cF9yY3ZfZWNobygpOyByZWFjaGVkIGxvY2stZnJlZSB2aWFcbitcdCAqIGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcigpIHRvbywgc28gdXNlIFJFQURfT05DRSgpL1dSSVRFX09OQ0UoKVxuK1x0ICovXG4rXHRvbGRfY2ZlY2hvID0gUkVBRF9PTkNFKHNvLVx1MDAzZWNmZWNobyk7XG4rXHRpZiAob2xkX2NmZWNobylcbitcdFx0cHJfbm90aWNlX29uY2UoXCJjYW4taXNvdHA6IGNmZWNobyBpcyAlMDhYICE9IDBcXG5cIiwgb2xkX2NmZWNobyk7XG4gXG4gXHQvKiBzZXQgY29uc2VjdXRpdmUgZnJhbWUgZWNobyB0YWcgKi9cbi1cdHNvLVx1MDAzZWNmZWNobyA9ICoodTMyICopY2YtXHUwMDNlZGF0YTtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCBza2ItXHUwMDNlaGFzaCk7XG4gXG4gXHQvKiBzZW5kIGZyYW1lIHdpdGggbG9jYWwgZWNobyBlbmFibGVkICovXG4gXHRjYW5fc2VuZF9yZXQgPSBjYW5fc2VuZChza2IsIDEpO1xuQEAgLTg4Nyw3ICs5NjksNiBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3ZfZWNobyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWRhdGE7XG4gXHRzdHJ1Y3QgaXNvdHBfc29jayAqc28gPSBpc290cF9zayhzayk7XG4tXHRzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cdTAwM2VkYXRhO1xuIFxuIFx0Lyogb25seSBoYW5kbGUgbXkgb3duIGxvY2FsIGVjaG8gQ0YvU0Ygc2tiJ3MgKG5vIEZGISkgKi9cbiBcdGlmIChza2ItXHUwMDNlc2sgIT0gc2spXG5AQCAtODk5LDMyICs5ODAsMzUgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2X2VjaG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSlcbiBcdHNwaW5fbG9jayhcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiBcbiBcdC8qIHNvLVx1MDAzZWNmZWNobyBtYXkgc2luY2UgYmVsb25nIHRvIGEgbmV3IHRyYW5zZmVyOyByZWNoZWNrIHVuZGVyIGxvY2sgKi9cbi1cdGlmIChzby1cdTAwM2VjZmVjaG8gIT0gKih1MzIgKiljZi1cdTAwM2VkYXRhKVxuK1x0aWYgKFJFQURfT05DRShzby1cdTAwM2VjZmVjaG8pICE9IHNrYi1cdTAwM2VoYXNoKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBjYW5jZWwgbG9jYWwgZWNobyB0aW1lb3V0ICovXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VlY2hvdGltZXIpO1xuIFxuIFx0LyogbG9jYWwgZWNobyBza2Igd2l0aCBjb25zZWN1dGl2ZSBmcmFtZSBoYXMgYmVlbiBjb25zdW1lZCAqL1xuLVx0c28tXHUwMDNlY2ZlY2hvID0gMDtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCAwKTtcbiBcbiBcdC8qIGNsYWltaW5nIGEgdHJhbnNmZXIgYWxzbyB0YWtlcyBzby1cdTAwM2VyeF9sb2NrLCBzbyBhIHBsYWluIHJlY2hlY2tcbiBcdCAqIGlzIGVub3VnaDogc28tXHUwMDNldHguc3RhdGUgY2FuJ3QgaGF2ZSBmbGlwcGVkIHRvIElTT1RQX1NFTkRJTkcgZm9yXG4gXHQgKiBhIG5ldyBjbGFpbSB3aGlsZSB3ZSdyZSBzdGlsbCBpbiBoZXJlXG4gXHQgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9TRU5ESU5HKVxuK1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfU0VORElORylcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0aWYgKHNvLVx1MDAzZXR4LmlkeCBcdTAwM2U9IHNvLVx1MDAzZXR4Lmxlbikge1xuIFx0XHQvKiB3ZSBhcmUgZG9uZSAqL1xuLVx0XHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX0lETEU7XG4rXG4rXHRcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIHNvLVx1MDAzZXR4X2dlbiwgMCk7XG4rXHRcdC8qIHNldCB0byBJRExFIGFmdGVyIHB1Ymxpc2hpbmcgdHhfcmVzdWx0ICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnNvLVx1MDAzZXdhaXQpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4gXHRpZiAoc28tXHUwMDNldHhmYy5icyBcdTAwMjZcdTAwMjYgc28tXHUwMDNldHguYnMgXHUwMDNlPSBzby1cdTAwM2V0eGZjLmJzKSB7XG4gXHRcdC8qIHN0b3AgYW5kIHdhaXQgZm9yIEZDIHdpdGggdGltZW91dCAqL1xuLVx0XHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX1dBSVRfRkM7XG4rXHRcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIElTT1RQX1dBSVRfRkMpO1xuIFx0XHRocnRpbWVyX3N0YXJ0KFx1MDAyNnNvLVx1MDAzZXR4dGltZXIsIGt0aW1lX3NldChJU09UUF9GQ19USU1FT1VULCAwKSxcbiBcdFx0XHQgICAgICBIUlRJTUVSX01PREVfUkVMX1NPRlQpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtOTQ2LDE2ICsxMDMwLDIwIEBAIHN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9lY2hvKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXG4gXHRzcGluX3VubG9jayhcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiB9XG4gXG4tLyogc2hhcmVkIGJ5IHNvLVx1MDAzZXR4dGltZXIncyBhbmQgc28tXHUwMDNlZWNob3RpbWVyJ3MgY2FsbGJhY2tzLiBCb3RoIHRpbWVycyBnZXRcbi0gKiBjYW5jZWxsZWQgdW5kZXIgc28tXHUwMDNlcnhfbG9jayBlbHNld2hlcmUsIHNvIHRoaXMgbXVzdCBzdGF5IGxvY2stZnJlZSB0b1xuLSAqIGF2b2lkIGRlYWRsb2NraW5nIHdpdGggdGhhdDsgdXNlcyBzby1cdTAwM2V0eF9nZW4gaW5zdGVhZCB0byBhdm9pZCB0YWludGluZ1xuLSAqIGEgbmV3IHRyYW5zZmVyIHdpdGggYW4gZXJyb3IgZnJvbSB0aGUgb25lIHRoYXQganVzdCB0aW1lZCBvdXQuXG4rLyogaXNvdHBfdHhfdGltZW91dDogd2UgZGlkIG5vdCBnZXQgYW55IGZsb3cgY29udHJvbCBvciBlY2hvIGZyYW1lIGluIHRpbWVcbisgKlxuKyAqIFNoYXJlZCBieSBzby1cdTAwM2V0eHRpbWVyJ3MgYW5kIHNvLVx1MDAzZWVjaG90aW1lcidzIGNhbGxiYWNrcy4gQm90aCB0aW1lcnMgZ2V0XG4rICogY2FuY2VsbGVkIHVuZGVyIHNvLVx1MDAzZXJ4X2xvY2sgZWxzZXdoZXJlLCBzbyB0aGlzIG11c3Qgc3RheSBsb2NrLWZyZWUuXG4rICpcbisgKiB0eC5zdGF0ZSBpcyBhY3F1aXJlZCBiZWZvcmUgdHhfZ2VuLiBDb21tb24gc2VxdWVuY2UgaW4gaXNvdHBfdHhfZ2VuX2RvbmUoKS5cbisgKiBjbXB4Y2hnKCkgb25seSBvcmRlcnMgaXRzZWxmLCBub3QgdGhlIHR3byBwcmVjZWRpbmcgbG9hZHMuXG4gICovXG4gc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4X3RpbWVvdXQoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNvLVx1MDAzZXNrO1xuK1x0LyogcmVhZCB0eC5zdGF0ZSBmaXJzdCBmb3IgdGhlIGNvbW1vbiBzZXF1ZW5jZSAqL1xuK1x0dTMyIG9sZF9zdGF0ZSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2c28tXHUwMDNldHguc3RhdGUpO1xuIFx0dTMyIGdlbiA9IFJFQURfT05DRShzby1cdTAwM2V0eF9nZW4pO1xuLVx0dTMyIG9sZF9zdGF0ZSA9IFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSk7XG4gXG4gXHQvKiBkb24ndCBoYW5kbGUgdGltZW91dHMgaW4gSURMRSBvciBTSFVURE9XTiBzdGF0ZSAqL1xuIFx0aWYgKG9sZF9zdGF0ZSA9PSBJU09UUF9JRExFIHx8IG9sZF9zdGF0ZSA9PSBJU09UUF9TSFVURE9XTilcbkBAIC05NjUsMTQgKzEwNTMsMTQgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4X3RpbWVvdXQoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIFx0aWYgKGNtcHhjaGcoXHUwMDI2c28tXHUwMDNldHguc3RhdGUsIG9sZF9zdGF0ZSwgSVNPVFBfSURMRSkgIT0gb2xkX3N0YXRlKVxuIFx0XHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG4gXG4tXHQvKiB3ZSBkaWQgbm90IGdldCBhbnkgZmxvdyBjb250cm9sIG9yIGVjaG8gZnJhbWUgaW4gdGltZSAqL1xuK1x0LyogZGV0ZWN0ZWQgdGltZW91dDogcmVwb3J0ICdjb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQnICovXG4gXG4tXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgPT0gZ2VuKSB7XG4tXHRcdC8qIHJlcG9ydCAnY29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kJyAqL1xuLVx0XHRzay1cdTAwM2Vza19lcnIgPSBFQ09NTTtcbi1cdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4tXHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbi1cdH1cbitcdC8qIGEgc3RhbGUgcmVhZCBvZiB0aGlzIHNsb3QgYnkgYSB3YWl0ZXIgc3RpbGwgZmFsbHMgYmFjayB0byBFQ09NTSAqL1xuK1x0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgZ2VuLCBFQ09NTSk7XG4rXG4rXHRzay1cdTAwM2Vza19lcnIgPSBFQ09NTTtcbitcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxuK1x0XHRza19lcnJvcl9yZXBvcnQoc2spO1xuIFxuIFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnNvLVx1MDAzZXdhaXQpO1xuIFxuQEAgLTEwMDcsNyArMTA5NSw3IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eGZyX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpXG4gXHRcdCAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7XG4gXG4gXHQvKiBjZmVjaG8gc2hvdWxkIGJlIGNvbnN1bWVkIGJ5IGlzb3RwX3Jjdl9lY2hvKCkgaGVyZSAqL1xuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlID09IElTT1RQX1NFTkRJTkcgXHUwMDI2XHUwMDI2ICFzby1cdTAwM2VjZmVjaG8pXG4rXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9TRU5ESU5HIFx1MDAyNlx1MDAyNiAhUkVBRF9PTkNFKHNvLVx1MDAzZWNmZWNobykpXG4gXHRcdGlzb3RwX3NlbmRfY2ZyYW1lKHNvKTtcbiBcbiBcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbkBAIC0xMDI2LDEwICsxMTE0LDEyIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0czY0IGhydGltZXJfc2VjID0gSVNPVFBfRUNIT19USU1FT1VUO1xuIFx0c3RydWN0IGhydGltZXIgKnR4X2hydCA9IFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lcjtcbiBcdHUzMiBuZXdfc3RhdGUgPSBJU09UUF9TRU5ESU5HO1xuK1x0dTMyIG15X2dlbjtcbitcdHUzMiBvbGRfY2ZlY2hvO1xuIFx0aW50IG9mZjtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIXNvLVx1MDAzZWJvdW5kIHx8IHNvLVx1MDAzZXR4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKVxuK1x0aWYgKCFzby1cdTAwM2Vib3VuZCB8fCBSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4gXHQvKiBjbGFpbSB0aGUgc29ja2V0IHVuZGVyIHNvLVx1MDAzZXJ4X2xvY2s6IHRoaXMgc2VyaWFsaXplcyB0aGUgY2xhaW1cbkBAIC0xMDQ2LDI5ICsxMTM2LDMzIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIFxuLVx0XHRpZiAoc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfU0hVVERPV04pXG4rXHRcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKVxuIFx0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcbiBcdFx0Lyogd2FpdCBmb3IgY29tcGxldGUgdHJhbnNtaXNzaW9uIG9mIGN1cnJlbnQgcGR1ICovXG4gXHRcdGVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzby1cdTAwM2V3YWl0LFxuLVx0XHRcdFx0XHQgICAgICAgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfSURMRSk7XG4rXHRcdFx0XHRcdCAgICAgICBSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX0lETEUgfHxcbitcdFx0XHRcdFx0ICAgICAgIFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04pO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHQvKiBuZXcgdHJhbnNmZXI6IGJ1bXAgc28tXHUwMDNldHhfZ2VuIGFuZCBkcmFpbiB0aGUgb2xkIG9uZSdzIHRpbWVycyxcbi1cdCAqIHN0aWxsIHVuZGVyIHRoZSBzby1cdTAwM2VyeF9sb2NrIHdlIGp1c3QgY2xhaW1lZCB0aGUgc29ja2V0IHdpdGhcbi1cdCAqL1xuLVx0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XG4tXHRXUklURV9PTkNFKHNvLVx1MDAzZXR4X2dlbiwgUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgKyAxKTtcbitcdC8qIHR4ZnJ0aW1lcidzIGNhbGxiYWNrIHJlLWFybXMgZWNob3RpbWVyIGxvY2stZnJlZTogZHJhaW4gaXQgZmlyc3QgKi9cbitcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZXR4ZnJ0aW1lcik7XG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eHRpbWVyKTtcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lcik7XG4tXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eGZydGltZXIpO1xuLVx0c28tXHUwMDNlY2ZlY2hvID0gMDtcbitcbitcdC8qIG5ldyB0cmFuc2ZlcjogaW5jcmVtZW50IHNvLVx1MDAzZXR4X2dlbiBhbmQgc2V0IHR4LnN0YXRlIGFmdGVyIGJhcnJpZXIgKi9cbitcdG15X2dlbiA9IGlzb3RwX2luY190eF9nZW4oUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikpO1xuK1x0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgbXlfZ2VuLCBFQ09NTSk7IC8qIHByZXZlbnQgc3RhbGUgc2xvdCBtYXRjaGluZyAqL1xuK1x0V1JJVEVfT05DRShzby1cdTAwM2V0eF9nZW4sIG15X2dlbik7XG4rXHRzbXBfd21iKCk7IC8qIHNlZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gaXNvdHBfdHhfW3RpbWVvdXR8Z2VuX2RvbmVdICovXG4rXHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCAwKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuIFxuIFx0Lyogc28tXHUwMDNlYm91bmQgaXMgb25seSBjaGVja2VkIG9uY2UgYWJvdmUgLSBhIHdha2V1cCBtYXkgaGF2ZVxuLVx0ICogdW5ib3VuZC9yZWJvdW5kIHRoZSBzb2NrZXQgbWVhbndoaWxlLCBzbyByZS12YWxpZGF0ZSBpdFxuK1x0ICogdW5ib3VuZC9yZWJvdW5kIHRoZSBzb2NrZXQgbWVhbndoaWxlID1cdTAwM2UgcmVjaGVja1xuIFx0ICovXG4gXHRpZiAoIXNvLVx1MDAzZWJvdW5kKSB7XG4gXHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuQEAgLTExMjcsNiArMTIyMSw5IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFxuIFx0Y3N4LVx1MDAzZWNhbl9paWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiBcbitcdC8qIHNldCB1aWQgaW4gdHggc2tiIHRvIGlkZW50aWZ5IENGIGVjaG8gZnJhbWVzICovXG4rXHRjYW5fc2V0X3NrYl91aWQoc2tiKTtcbitcbiBcdHNvLVx1MDAzZXR4LmxlbiA9IHNpemU7XG4gXHRzby1cdTAwM2V0eC5pZHggPSAwO1xuIFxuQEAgLTExMzQsOCArMTIzMSw5IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0c2tiX3B1dF96ZXJvKHNrYiwgc28tXHUwMDNlbGwubXR1KTtcbiBcbiBcdC8qIGNmZWNobyBzaG91bGQgaGF2ZSBiZWVuIHplcm8nZWQgYnkgaW5pdCAvIGZvcm1lciBpc290cF9yY3ZfZWNobygpICovXG4tXHRpZiAoc28tXHUwMDNlY2ZlY2hvKVxuLVx0XHRwcl9ub3RpY2Vfb25jZShcImNhbi1pc290cDogdW5pbml0IGNmZWNobyAlMDhYXFxuXCIsIHNvLVx1MDAzZWNmZWNobyk7XG4rXHRvbGRfY2ZlY2hvID0gUkVBRF9PTkNFKHNvLVx1MDAzZWNmZWNobyk7XG4rXHRpZiAob2xkX2NmZWNobylcbitcdFx0cHJfbm90aWNlX29uY2UoXCJjYW4taXNvdHA6IHVuaW5pdCBjZmVjaG8gJTA4WFxcblwiLCBvbGRfY2ZlY2hvKTtcbiBcbiBcdC8qIGNoZWNrIGZvciBzaW5nbGUgZnJhbWUgdHJhbnNtaXNzaW9uIGRlcGVuZGluZyBvbiBUWF9ETCAqL1xuIFx0aWYgKHNpemUgXHUwMDNjPSBzby1cdTAwM2V0eC5sbF9kbCAtIFNGX1BDSV9TWjQgLSBhZSAtIG9mZikge1xuQEAgLTExNjMsNyArMTI2MSw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdGNmLVx1MDAzZWRhdGFbYWVdIHw9IHNpemU7XG4gXG4gXHRcdC8qIHNldCBDRiBlY2hvIHRhZyBmb3IgaXNvdHBfcmN2X2VjaG8oKSAoU0YtbW9kZSkgKi9cbi1cdFx0c28tXHUwMDNlY2ZlY2hvID0gKih1MzIgKiljZi1cdTAwM2VkYXRhO1xuK1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgc2tiLVx1MDAzZWhhc2gpO1xuIFx0fSBlbHNlIHtcbiBcdFx0Lyogc2VuZCBmaXJzdCBmcmFtZSAqL1xuIFxuQEAgLTExODAsNyArMTI3OCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdHNvLVx1MDAzZXR4ZmMuYnMgPSAwO1xuIFxuIFx0XHRcdC8qIHNldCBDRiBlY2hvIHRhZyBmb3IgaXNvdHBfcmN2X2VjaG8oKSAoQ0YtbW9kZSkgKi9cbi1cdFx0XHRzby1cdTAwM2VjZmVjaG8gPSAqKHUzMiAqKWNmLVx1MDAzZWRhdGE7XG4rXHRcdFx0V1JJVEVfT05DRShzby1cdTAwM2VjZmVjaG8sIHNrYi1cdTAwM2VoYXNoKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBzdGFuZGFyZCBmbG93IGNvbnRyb2wgY2hlY2sgKi9cbiBcdFx0XHRuZXdfc3RhdGUgPSBJU09UUF9XQUlUX0ZJUlNUX0ZDO1xuQEAgLTExOTAsMTIgKzEyODgsMTIgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0dHhfaHJ0ID0gXHUwMDI2c28tXHUwMDNldHh0aW1lcjtcbiBcbiBcdFx0XHQvKiBubyBDRiBlY2hvIHRhZyBmb3IgaXNvdHBfcmN2X2VjaG8oKSAoRkYtbW9kZSkgKi9cbi1cdFx0XHRzby1cdTAwM2VjZmVjaG8gPSAwO1xuK1x0XHRcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCAwKTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKSB7XG4rXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9TSFVURE9XTikge1xuIFx0XHQvKiBpc290cF9yZWxlYXNlKCkgaGFzIHNpbmNlIHRha2VuIG92ZXIgYW5kIGFscmVhZHkgZHJhaW5lZFxuIFx0XHQgKiBvdXIgdGltZXJzIC0gZG9uJ3Qgc2VuZCBpbnRvIGEgc29ja2V0IHRoYXQncyBnb2luZyBhd2F5XG4gXHRcdCAqL1xuQEAgLTEyMDYsNyArMTMwNCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXHR9XG4gXHQvKiBXQUlUX0ZJUlNUX0ZDIGZvciBzdGFuZGFyZCBGRiwgZWxzZSBzdGF5cyBJU09UUF9TRU5ESU5HICovXG4tXHRzby1cdTAwM2V0eC5zdGF0ZSA9IG5ld19zdGF0ZTtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIG5ld19zdGF0ZSk7XG4gXHRocnRpbWVyX3N0YXJ0KHR4X2hydCwga3RpbWVfc2V0KGhydGltZXJfc2VjLCAwKSxcbiBcdFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9TT0ZUKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuQEAgLTEyMjMsMjAgKzEzMjEsNDkgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0ICAgICAgIF9fZnVuY19fLCBFUlJfUFRSKGVycikpO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4rXG4rXHRcdC8qIG5ldyB0cmFuc2ZlciBhbHJlYWR5IGNsYWltZWQgYnkgYSBjb25jdXJyZW50IGNvbXBsZXRpb24sXG4rXHRcdCAqIHRpbWVvdXQgb3Igc2VuZG1zZygpIHdoaWxlIHdlIHdlcmUgc3R1Y2sgaW4gY2FuX3NlbmQoKT9cbitcdFx0ICovXG4rXHRcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSAhPSBteV9nZW4pIHtcbitcdFx0XHQvKiBkb24ndCB0b3VjaCB0aW1lcnMgYW5kIHN0YXRlIG9mIHRoZSBuZXcgdHJhbnNmZXIgKi9cbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4gXHRcdC8qIG5vIHRyYW5zbWlzc2lvbiAtXHUwMDNlIG5vIHRpbWVvdXQgbW9uaXRvcmluZyAqL1xuIFx0XHRocnRpbWVyX2NhbmNlbCh0eF9ocnQpO1xuIFx0XHRnb3RvIGVycl9vdXRfZHJvcF9sb2NrZWQ7XG4gXHR9XG4gXG4gXHRpZiAod2FpdF90eF9kb25lKSB7XG4tXHRcdC8qIHdhaXQgZm9yIGNvbXBsZXRlIHRyYW5zbWlzc2lvbiBvZiBjdXJyZW50IHBkdSAqL1xuLVx0XHRlcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCwgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfSURMRSk7XG4rXHRcdC8qIHdha2UgdXAgZm9yOlxuK1x0XHQgKiAtIGNvbmN1cnJlbnQgc2VuZG1zZygpIGNsYWltaW5nIGEgbmV3IHRyYW5zZmVyXG4rXHRcdCAqIC0gY29tcGxldGUgdHJhbnNtaXNzaW9uIG9mIGN1cnJlbnQgUERVXG4rXHRcdCAqIC0gc2h1dGRvd24gc3RhdGUgY2hhbmdlIGluIGlzb3RwX3JlbGVhc2UoKVxuK1x0XHQgKiBpc290cF90eF9nZW5fZG9uZSgpIHVzZXMgY29tbW9uIHR4LnN0YXRlL3R4X2dlbiByZWFkIHNlcXVlbmNlXG4rXHRcdCAqL1xuK1x0XHRlcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCxcbitcdFx0XHRcdFx0ICAgICAgIGlzb3RwX3R4X2dlbl9kb25lKHNvLCBteV9nZW4pKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGVycl9ldmVudF9kcm9wO1xuIFxuLVx0XHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHQvKiBzdGlsbCBvdXIgY2xhaW0sIGJ1dCBpc290cF9yZWxlYXNlKCkgZm9yY2Utc2h1dCBpdCBkb3duICovXG4rXHRcdGlmIChzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9TSFVURE9XTiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIFJFQURfT05DRShzby1cdTAwM2V0eF9nZW4pID09IG15X2dlbikge1xuK1x0XHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuK1x0XHRcdGdvdG8gZXJyX2V2ZW50X2Ryb3A7XG4rXHRcdH1cbitcbitcdFx0Lyogb3duIGNvbXBsZXRpb24sIG9yIHR4X2dlbiBtb3ZlZCBvbiAtIGVpdGhlciB3YXkgdGhpcyBpc1xuK1x0XHQgKiB3aGF0IGlzb3RwX2dldF90eF9yZXN1bHQoKSByZWNvcmRlZCBmb3IgbXlfZ2VuXG4rXHRcdCAqL1xuK1x0XHRlcnIgPSBpc290cF9nZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4pO1xuK1xuK1x0XHQvKiBkcmFpbiB0byBhdm9pZCBzdGFsZSBlcnJvciBmb3IgYSBsYXRlciBwb2xsKCkvU09fRVJST1IgKi9cbitcdFx0c29ja19lcnJvcihzayk7XG4rXG4rXHRcdHJldHVybiBlcnIgPyBlcnIgOiBzaXplO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHNpemU7XG5AQCAtMTI0NiwxNSArMTM3MywyNiBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiBcdGdvdG8gZXJyX291dF9kcm9wX2xvY2tlZDtcbiBlcnJfZXZlbnRfZHJvcDpcbi1cdC8qIGludGVycnVwdGVkIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAtIGRyYWluIGl0cyB0aW1lcnMgKi9cbitcdC8qIGludGVycnVwdGVkIG9yIHNodXQgZG93biB3aGlsZSB3YWl0aW5nIG9uIG91ciBvd24gdHJhbnNmZXIgKi9cbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbitcbitcdC8qIG5ldyB0cmFuc2ZlciBhbHJlYWR5IHN0YXJ0ZWQgYnkgY29uY3VycmVudCBzZW5kbXNnKCk/ICovXG4rXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgIT0gbXlfZ2VuKSB7XG4rXHRcdC8qIGRvbid0IHRvdWNoIHRpbWVycyBhbmQgc3RhdGVzIG9mIHRoZSBuZXcgdHJhbnNmZXIgKi9cbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eGZydGltZXIpO1xuIFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2c28tXHUwMDNldHh0aW1lcik7XG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VlY2hvdGltZXIpO1xuIGVycl9vdXRfZHJvcF9sb2NrZWQ6XG4gXHQvKiByZWxlYXNlIHRoZSBjbGFpbTsgc28tXHUwMDNlcnhfbG9jayBzdGlsbCBoZWxkIGZyb20gYWJvdmUgKi9cbi1cdHNvLVx1MDAzZWNmZWNobyA9IDA7XG4tXHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX0lETEU7XG4rXHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4rXG4rXHQvKiBvbmx5IGNsYWltIHRvIElETEUgaWYgaXNvdHBfcmVsZWFzZSgpIGhhcyBub3QgdGFrZW4gb3ZlciAqL1xuK1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfU0hVVERPV04pXG4rXHRcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4gXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXG5AQCAtMTMyMCw4ICsxNDU4LDkgQEAgc3RhdGljIGludCBpc290cF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXHQvKiBiZXN0LWVmZm9ydDogd2FpdCBmb3IgYSBydW5uaW5nIHBkdSB0byBmaW5pc2gsIGJ1dCBkb24ndCBibG9jayBvblxuIFx0ICogaXQgZm9yZXZlciAtIGdpdmUgdXAgYWZ0ZXIgdGhlIGZpcnN0IHNpZ25hbFxuIFx0ICovXG4tXHR3aGlsZSAoc28tXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCwgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfSURMRSkgPT0gMClcbitcdHdoaWxlIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpICE9IElTT1RQX0lETEUgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVx1MDAzZXdhaXQsXG4rXHRcdFx0XHRcdFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfSURMRSkgPT0gMClcbiBcdFx0O1xuIFxuIFx0LyogY2xhaW0gdGhlIHNvY2tldCB1bmRlciBzby1cdTAwM2VyeF9sb2NrIGxpa2Ugc2VuZG1zZygpIGRvZXMsIHNvIGl0c1xuQEAgLTEzMjksOSArMTQ2OCwxMiBAQCBzdGF0aWMgaW50IGlzb3RwX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdCAqIHVuY29uZGl0aW9uYWxseSwgZXZlbiB3aGVuIGEgc2lnbmFsIGN1dCB0aGUgd2FpdCBhYm92ZSBzaG9ydFxuIFx0ICovXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4tXHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX1NIVVRET1dOO1xuK1x0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0hVVERPV04pO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4tXHRzby1cdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XG4rXHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbitcbitcdC8qIGZvcmNlZCBTSFVURE9XTiBtYXkgaGF2ZSBza2lwcGVkIElETEUgKGdhdmUgdXAgb24gYSBzaWduYWwpICovXG4rXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2aXNvdHBfbm90aWZpZXJfbG9jayk7XG4gXHR3aGlsZSAoaXNvdHBfYnVzeV9ub3RpZmllciA9PSBzbykge1xuQEAgLTE0NDcsNyArMTU4OSw4IEBAIHN0YXRpYyBpbnQgaXNvdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsXG4gXHQgKiB3aXRoIHNvLVx1MDAzZWJvdW5kIGluIHRoZSBzYW1lIGxvY2tfc29jaygpIHNlY3Rpb24gYWJvdmUsIHNvIHRoZXJlIGlzXG4gXHQgKiBubyB3aW5kb3cgaW4gd2hpY2ggYSBjb25jdXJyZW50IGlzb3RwX25vdGlmeSgpIGNvdWxkIGJlIG1pc3NlZC5cbiBcdCAqL1xuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX0lETEUgfHwgc28tXHUwMDNlcnguc3RhdGUgIT0gSVNPVFBfSURMRSkge1xuK1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSB8fFxuK1x0ICAgIFJFQURfT05DRShzby1cdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfSURMRSkge1xuIFx0XHRlcnIgPSAtRUFHQUlOO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xNDgxLDcgKzE2MjQsNyBAQCBzdGF0aWMgaW50IGlzb3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbFxuIFx0XHRcdFx0aXNvdHBfcmN2LCBzaywgXCJpc290cFwiLCBzayk7XG4gXG4gXHQvKiBubyBjb25zZWN1dGl2ZSBmcmFtZSBlY2hvIHNrYiBpbiBmbGlnaHQgKi9cbi1cdHNvLVx1MDAzZWNmZWNobyA9IDA7XG4rXHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4gXG4gXHQvKiByZWdpc3RlciBmb3IgZWNobyBza2IncyAqL1xuIFx0Y2FuX3J4X3JlZ2lzdGVyKG5ldCwgZGV2LCB0eF9pZCwgU0lOR0xFX01BU0sodHhfaWQpLFxuQEAgLTE4NDcsNyArMTk5MCw3IEBAIHN0YXRpYyBfX3BvbGxfdCBpc290cF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBwb2xsX3RhYmxlICp3XG4gXHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2c28tXHUwMDNld2FpdCwgd2FpdCk7XG4gXG4gXHQvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byBUWCBzdGF0ZSAqL1xuLVx0aWYgKChtYXNrIFx1MDAyNiBFUE9MTFdSTk9STSkgXHUwMDI2XHUwMDI2IChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFKSlcbitcdGlmICgobWFzayBcdTAwMjYgRVBPTExXUk5PUk0pIFx1MDAyNlx1MDAyNiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9JRExFKSlcbiBcdFx0bWFzayBcdTAwMjY9IH4oRVBPTExPVVQgfCBFUE9MTFdSTk9STSk7XG4gXG4gXHRyZXR1cm4gbWFzaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEyOjU2LjkxMTU5MTM4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDYxMzQzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJU09UUCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggZm9yIGBuZXQvY2FuL2lzb3RwLmNgLiBTZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHByaW1hcmlseSBmb2N1c2VkIG9uIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgdHJhbnNtaXQgYW5kIHJlY2VpdmUgc3RhdGVzIHVzaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAuIFRoYXQncyBhIGNsYXNzaWMgY29uY3VycmVuY3kgb3B0aW1pemF0aW9uLCB3aGljaCBhbHdheXMgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGRhdGEgcmFjZXMgYW5kIGZ1enppbmcgb3Bwb3J0dW5pdGllcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgc28tXHUwMDNldHhfcmVzdWx0W11gIGFuZCBgc28tXHUwMDNldHhfZ2VuYCB0byB0cmFjayBUWCByZXN1bHRzIHBlciBnZW5lcmF0aW9uIGlzIG5ldy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IEkgd2FudCB0byBzdWJqZWN0IHRvIHNvbWUgc2VyaW91cyBmdXp6aW5nLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcy4gTG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSB3aG9sZSBsaXN0OiBgaXNvdHBfcmN2X2ZjYCwgYGlzb3RwX3Jjdl9zZmAsIGBpc290cF9yY3ZfZmZgLCBgaXNvdHBfcmN2X2NmYCwgYGlzb3RwX3JjdmAsIGBpc290cF9zZW5kX2NmcmFtZWAsIGBpc290cF9yY3ZfZWNob2AsIGBpc290cF90eF90aW1lb3V0YCwgYGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcmAsIGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX3JlbGVhc2VgLCBgaXNvdHBfYmluZGAsIGFuZCBgaXNvdHBfcG9sbGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgd2hhdCBhcmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzPyBJJ20gdGhpbmtpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGV4cG9zZSB0aGUgQVBJIHRvIHRoZSByZXN0IG9mIHRoZSBDQU4gc3RhY2sgYW5kLCB1bHRpbWF0ZWx5LCB0byB0aGUgdXNlciBzcGFjZS4gQmFzZWQgb24gdGhlIGxpc3QsIGBpc290cF9zZW5kbXNnYCBhbmQgYGlzb3RwX2JpbmRgIGFyZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIGBpc290cF9yY3ZgIGlzIGFsc28gdGhlcmUsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0J3MgY2FsbGVkIHRocm91Z2ggdGhlIENBTiBjb3JlLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgaXNvdHBfcmN2X2ZjYCwgZXRjLiBhcmUgY2FsbGVkIGJ5IGBpc290cF9yY3ZgLiBTaW5jZSBgaXNvdHBfcmN2YCBpcyBhbHNvIHN0YXRpYyBJJ2xsIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoYXQgd2l0aCBgZ3JlcHBlcmAgYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBiZSBzdXJlIEkndmUgaWRlbnRpZmllZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZSBtYWluIEFQSSBlbnRyeSBwb2ludHMsIG9yIGFueXRoaW5nIGVsc2UgaW50ZXJlc3RpbmcuIEknbGwgdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgSSBjYW4gZmluZCB0aGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjAzLjYxNzcyODQzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkzODY2NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oaW50fHZvaWQpIGlzb3RwX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL2lzb3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9pc290cC5jPTIwOT1zdGF0aWMgdTMyIGlzb3RwX2dldF90eF9lcnIodTMyIGdlbl9lcnIpXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtMjE0LS8qIHN0b3JlIHRyYW5zZmVyIHJlc3VsdCBpbiBwZXItZ2VuZXJhdGlvbiU0IHNvLVxcdTAwM2V0eF9yZXN1bHRbXSBzbG90ICovXFxubmV0L2Nhbi9pc290cC5jOjIxNTpzdGF0aWMgdm9pZCBpc290cF9zZXRfdHhfcmVzdWx0KHN0cnVjdCBpc290cF9zb2NrICpzbywgdTMyIGdlbiwgaW50IGVycilcXG5uZXQvY2FuL2lzb3RwLmMtMjE2LXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0yMjEtLyogZmV0Y2ggdGhlIHJlc3VsdCByZWNvcmRlZCBmb3IgJ2dlbicsIGFzIGEgKG5lZ2F0aXZlKSBlcnJubyAoMCBmb3Igc3VjY2VzcykgKi9cXG5uZXQvY2FuL2lzb3RwLmM6MjIyOnN0YXRpYyBpbnQgaXNvdHBfZ2V0X3R4X3Jlc3VsdChzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHUzMiBnZW4pXFxubmV0L2Nhbi9pc290cC5jLTIyMy17XFxuLS1cXG5uZXQvY2FuL2lzb3RwLmM9MjY1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF9yeF90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTI4NS1cXG5uZXQvY2FuL2lzb3RwLmM6Mjg2OnN0YXRpYyBpbnQgaXNvdHBfc2VuZF9mYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBhZSwgdTggZmxvd3N0YXR1cylcXG5uZXQvY2FuL2lzb3RwLmMtMjg3LXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0zNTQtXFxubmV0L2Nhbi9pc290cC5jOjM1NTpzdGF0aWMgdm9pZCBpc290cF9yY3Zfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY2FuL2lzb3RwLmMtMzU2LXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYz00MTE9c3RhdGljIGludCBjaGVja19wYWQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLFxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTQzOC1cXG5uZXQvY2FuL2lzb3RwLmM6NDM5OnN0YXRpYyB2b2lkIGlzb3RwX3NlbmRfY2ZyYW1lKHN0cnVjdCBpc290cF9zb2NrICpzbyk7XFxubmV0L2Nhbi9pc290cC5jLTQ0MC1cXG5uZXQvY2FuL2lzb3RwLmM6NDQxOnN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxcbm5ldC9jYW4vaXNvdHAuYy00NDIte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTUzNy1cXG5uZXQvY2FuL2lzb3RwLmM6NTM4OnN0YXRpYyBpbnQgaXNvdHBfcmN2X3NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IHBjaWxlbixcXG5uZXQvY2FuL2lzb3RwLmMtNTM5LVxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtNTcwLVxcbm5ldC9jYW4vaXNvdHAuYzo1NzE6c3RhdGljIGludCBpc290cF9yY3ZfZmYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXFxubmV0L2Nhbi9pc290cC5jLTU3Mi17XFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtNjQzLVxcbm5ldC9jYW4vaXNvdHAuYzo2NDQ6c3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXFxubmV0L2Nhbi9pc290cC5jLTY0NS1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTc0My1cXG5uZXQvY2FuL2lzb3RwLmM6NzQ0OnN0YXRpYyB2b2lkIGlzb3RwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxcbm5ldC9jYW4vaXNvdHAuYy03NDUte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTgzMS1cXG5uZXQvY2FuL2lzb3RwLmM6ODMyOnN0YXRpYyB2b2lkIGlzb3RwX2ZpbGxfZGF0YWZyYW1lKHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIHN0cnVjdCBpc290cF9zb2NrICpzbyxcXG5uZXQvY2FuL2lzb3RwLmMtODMzLVxcdFxcdFxcdFxcdCBpbnQgYWUsIGludCBvZmYpXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtODYyLVxcbm5ldC9jYW4vaXNvdHAuYzo4NjM6c3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxcbm5ldC9jYW4vaXNvdHAuYy04NjQte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTkzMi1cXG5uZXQvY2FuL2lzb3RwLmM6OTMzOnN0YXRpYyB2b2lkIGlzb3RwX2NyZWF0ZV9mZnJhbWUoc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgc3RydWN0IGlzb3RwX3NvY2sgKnNvLFxcbm5ldC9jYW4vaXNvdHAuYy05MzQtXFx0XFx0XFx0XFx0aW50IGFlKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTk2Ny1cXG5uZXQvY2FuL2lzb3RwLmM6OTY4OnN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9lY2hvKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXFxubmV0L2Nhbi9pc290cC5jLTk2OS17XFxuLS1cXG5uZXQvY2FuL2lzb3RwLmM9MTA4OD1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfdHhmcl90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTExMDMtXFxubmV0L2Nhbi9pc290cC5jOjExMDQ6c3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2Nhbi9pc290cC5jLTExMDUte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTE0MDEtXFxubmV0L2Nhbi9pc290cC5jOjE0MDI6c3RhdGljIGludCBpc290cF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXFxubmV0L2Nhbi9pc290cC5jLTE0MDMtXFx0XFx0XFx0IGludCBmbGFncylcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xNDQ1LVxcbm5ldC9jYW4vaXNvdHAuYzoxNDQ2OnN0YXRpYyBpbnQgaXNvdHBfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC9jYW4vaXNvdHAuYy0xNDQ3LXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xNTMzLVxcbm5ldC9jYW4vaXNvdHAuYzoxNTM0OnN0YXRpYyBpbnQgaXNvdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsZW4pXFxubmV0L2Nhbi9pc290cC5jLTE1MzUte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTE2NjEtXFxubmV0L2Nhbi9pc290cC5jOjE2NjI6c3RhdGljIGludCBpc290cF9nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBwZWVyKVxcbm5ldC9jYW4vaXNvdHAuYy0xNjYzLXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xNjc5LVxcbm5ldC9jYW4vaXNvdHAuYzoxNjgwOnN0YXRpYyBpbnQgaXNvdHBfc2V0c29ja29wdF9sb2NrZWQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQvY2FuL2lzb3RwLmMtMTY4MS1cXHRcXHRcXHQgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xNzc3LVxcbm5ldC9jYW4vaXNvdHAuYzoxNzc4OnN0YXRpYyBpbnQgaXNvdHBfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC9jYW4vaXNvdHAuYy0xNzc5LVxcdFxcdFxcdCAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTE3OTMtXFxubmV0L2Nhbi9pc290cC5jOjE3OTQ6c3RhdGljIGludCBpc290cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L2Nhbi9pc290cC5jLTE3OTUtXFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xODQ1LVxcbm5ldC9jYW4vaXNvdHAuYzoxODQ2OnN0YXRpYyB2b2lkIGlzb3RwX25vdGlmeShzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHVuc2lnbmVkIGxvbmcgbXNnLFxcbm5ldC9jYW4vaXNvdHAuYy0xODQ3LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTE4OTAtXFxubmV0L2Nhbi9pc290cC5jOjE4OTE6c3RhdGljIGludCBpc290cF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZyxcXG5uZXQvY2FuL2lzb3RwLmMtMTg5Mi1cXHRcXHRcXHQgIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xOTEzLVxcbm5ldC9jYW4vaXNvdHAuYzoxOTE0OnN0YXRpYyB2b2lkIGlzb3RwX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jYW4vaXNvdHAuYy0xOTE1LXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xOTI4LVxcbm5ldC9jYW4vaXNvdHAuYzoxOTI5OnN0YXRpYyBpbnQgaXNvdHBfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2Nhbi9pc290cC5jLTE5MzAte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jPTE5ODQ9c3RhdGljIF9fcG9sbF90IGlzb3RwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHBvbGxfdGFibGUgKndhaXQpXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtMTk5OC1cXG5uZXQvY2FuL2lzb3RwLmM6MTk5OTpzdGF0aWMgaW50IGlzb3RwX3NvY2tfbm9faW9jdGxjbWQoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG5uZXQvY2FuL2lzb3RwLmMtMjAwMC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzowMy43NjcxMjA2ODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjM4NjAzNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJU08tVFAgQVBJIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBJU08tVFAgcGF0Y2gsIGFuZCBpbW1lZGlhdGVseSB0aGUga2V5IGVudHJ5IHBvaW50cyBqdW1wIG91dCBhdCBtZS4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnM6IGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX3JlY3Ztc2dgLCBgaXNvdHBfYmluZGAsIGBpc290cF9yZWxlYXNlYCwgYGlzb3RwX3NldHNvY2tvcHRgLCBgaXNvdHBfZ2V0c29ja29wdGAsIGBpc290cF9wb2xsYCwgYW5kIGBpc290cF9yY3ZgLiBPZiB0aGVzZSwgYGlzb3RwX3JjdmAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFzIGl0IGlzIHRoZSBjcml0aWNhbCBjYWxsYmFjayBmcm9tIHRoZSBDQU4gY29yZSB3aGVuIGEgZnJhbWUgaXMgcmVjZWl2ZWQuXG5cblRoZSBhdXRob3IgaGFzIGNsZWFybHkgYmVlbiBidXN5LCBhcyB0aGUgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgY2h1bmsgb2YgdGhlIGNvcmUgSVNPLVRQIGltcGxlbWVudGF0aW9uOyB0aGUgbGlzdCBpcyBjb21wcmVoZW5zaXZlLiBUaGF0J3MgYSBnb29kIHNpZ24gdGhhdCB0aGV5J3ZlIGJlZW4gcmlnb3JvdXMuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiBtb2RpZmljYXRpb25zLCBJIG5lZWQgdG8gbmFycm93IG15IGZvY3VzIHRvIHRoZSBtb3N0IGNyaXRpY2FsIHN5bWJvbHMgdG8gdHJ1bHkgZ3Jhc3AgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSBgaXNvdHBfc2VuZG1zZ2AsIGBpc290cF9iaW5kYCwgYGlzb3RwX3JjdmAsIGBpc290cF9yZWxlYXNlYCBhbmQgYGlzb3RwX3BvbGxgIGFyZSB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cy4gVGhvc2UgYXJlIHRoZSBvbmVzIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgbW9zdCBzaWduaWZpY2FudGx5LlxuXG5CZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYENBTl9JU09UUGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGludm9sdmVkLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGUgYmFzZSBpcywgYW5kIHdoYXQgY2FuIGJlIGNoYW5nZWQuIEdvdHRhIGtub3cgdGhlIGxheSBvZiB0aGUgbGFuZCBiZWZvcmUgSSBnbyBzdG9ybWluZyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTM6MTAuMDA1NzI3NTE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE4NTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX0lTT1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxubmV0L2Nhbi9LY29uZmlnLTU4LVxcbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXFxubmV0L2Nhbi9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoxMC4xNjI5MTg3NjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA1ODIwNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIENBTl9JU09UUCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgQ0FOX0lTT1RQLiBUaGlzIGlzbid0IGp1c3QgYSBzdXJmYWNlLWxldmVsIGNoZWNrOyBpdCBuZWVkcyBhIGNvbXByZWhlbnNpdmUgcmV2aWV3LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycyBpbnZvbHZlZCDigJMgd2hhdCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnMgYXJlIGluIHBsYXk/IFdoYXQgb3RoZXIgY29tbXVuaWNhdGlvbiBzdGFja3MgYXJlIGludGVncmF0ZWQgb3IgY291bGQgYmUgaW50ZWdyYXRlZD8gSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzaWxpY29uIHZlbmRvcnMgdGhpcyBpcyB0aWVkIHRvLCBhbmQgaWYgdGhlcmUgYXJlLCB3aHkuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGxpYnJhcnksIG9yIGlzIHRoaXMgYSBtb3JlIGNvbXBsZXggZnJhbWV3b3JrPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIHdpdGggdGhlIHVuZGVybHlpbmcgQ0FOIGNvbnRyb2xsZXIgYW5kIGFueSBhc3NvY2lhdGVkIGRyaXZlcnMuIEFsc28sIGNvbnNpZGVyaW5nIGFsbCB0aGUgdGhpbmdzIHRoYXQgdG91Y2ggQ0FOX0lTT1RQLCBJIG5lZWQgdG8ga25vdyBhYm91dCBhbnkgZXh0ZXJuYWwgZmFjdG9ycy4gSXMgdGhpcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgcHJvamVjdCBvciBpcyB0aGlzIGludGVuZGVkIHRvIGJlIGEgcmV1c2FibGUgY29tcG9uZW50PyBJIHdhbnQgdG8gZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiBjb3VwbGluZyBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgcG9ydGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIGF0dGVudGlvbiwgSSB3aWxsIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBmbGV4aWJpbGl0eS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGxpc3RpbmcgZGVwZW5kZW5jaWVzOyBpdCdzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGZvciBmdXR1cmUgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2OTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoxMy41Njg3NDExMTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1Mjg3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTl9JU09UUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxubmV0L2Nhbi9LY29uZmlnLTU4LVxcbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXFxubmV0L2Nhbi9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoxMy42NjIyNzU1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODE0MDE1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENBTiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIENBTiBzdWJzeXN0ZW0ncyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGBuZXQvY2FuL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXIgaXMgcHJvYmFibHkgYXJvdW5kIGxpbmUgNTkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgQ0FOIGxheWVyIGFyZSBkZWZpbmVkLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTM6MTYuMjQzNjkzOTQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY2FuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFx0ICBUaGUgQ0FOIEdhdGV3YXkvUm91dGVyIGlzIHVzZWQgdG8gcm91dGUgKGFuZCBtb2RpZnkpIENBTiBmcmFtZXMuXFxuICA1MTpcXHRcXHQgIEl0IGlzIGJhc2VkIG9uIHRoZSBQRl9DQU4gY29yZSBpbmZyYXN0cnVjdHVyZSBmb3IgbXNnIGZpbHRlcmluZyBhbmRcXG4gIDUyOlxcdFxcdCAgbXNnIHNlbmRpbmcgYW5kIGNhbiBvcHRpb25hbGx5IG1vZGlmeSByb3V0ZWQgQ0FOIGZyYW1lcyBvbiB0aGUgZmx5LlxcbiAgNTM6XFx0XFx0ICBDQU4gZnJhbWVzIGNhbiBiZSByb3V0ZWQgYmV0d2VlbiBDQU4gbmV0d29yayBpbnRlcmZhY2VzIChvbmUgaG9wKS5cXG4gIDU0OlxcdFxcdCAgVGhleSBjYW4gYmUgbW9kaWZpZWQgd2l0aCBBTkQvT1IvWE9SL1NFVCBvcGVyYXRpb25zIGFzIGNvbmZpZ3VyZWRcXG4gIDU1OlxcdFxcdCAgYnkgdGhlIG5ldGxpbmsgY29uZmlndXJhdGlvbiBpbnRlcmZhY2Uga25vd24gZS5nLiBmcm9tIGlwdGFibGVzLlxcbiAgNTY6XFx0XFxuICA1NzpcXHRzb3VyY2UgXFxcIm5ldC9jYW4vajE5MzkvS2NvbmZpZ1xcXCJcXG4gIDU4OlxcdFxcbiAgNTk6XFx0Y29uZmlnIENBTl9JU09UUFxcbiAgNjA6XFx0XFx0dHJpc3RhdGUgXFxcIklTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcXFwiXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIENBTiBUcmFuc3BvcnQgUHJvdG9jb2xzIG9mZmVyIHN1cHBvcnQgZm9yIHNlZ21lbnRlZCBQb2ludC10by1Qb2ludFxcbiAgNjM6XFx0XFx0ICBjb21tdW5pY2F0aW9uIGJldHdlZW4gQ0FOIG5vZGVzIHZpYSB0d28gZGVmaW5lZCBDQU4gSWRlbnRpZmllcnMuXFxuICA2NDpcXHRcXHQgIFRoaXMgcHJvdG9jb2wgZHJpdmVyIGltcGxlbWVudHMgc2VnbWVudGVkIGRhdGEgdHJhbnNmZXJzIGZvciBDQU4gQ0NcXG4gIDY1OlxcdFxcdCAgKGFrYSBDbGFzc2ljYWwgQ0FOLCBDQU4gMi4wQikgYW5kIENBTiBGRCBmcmFtZSB0eXBlcyB3aGljaCB3ZXJlXFxuICA2NjpcXHRcXHQgIGludHJvZHVjZWQgd2l0aCBJU08gMTU3NjUtMjoyMDE2LlxcbiAgNjc6XFx0XFx0ICBBcyBDQU4gZnJhbWVzIGNhbiBvbmx5IHRyYW5zcG9ydCBhIHNtYWxsIGFtb3VudCBvZiBkYXRhIGJ5dGVzXFxuICA2ODpcXHRcXHQgIChtYXguIDggYnl0ZXMgZm9yIENBTiBDQyBhbmQgbWF4LiA2NCBieXRlcyBmb3IgQ0FOIEZEKSB0aGlzXFxuICA2OTpcXHRcXHQgIHNlZ21lbnRhdGlvbiBpcyBuZWVkZWQgdG8gdHJhbnNwb3J0IGxvbmdlciBQcm90b2NvbCBEYXRhIFVuaXRzIChQRFUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjE2LjI0MzgwNjQwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg5NzA4OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBlbWJlZGRlZCBzeXN0ZW1zIGV4cGVydDpcblxuKipOYXZpZ2F0aW5nIENBTm9wZW4gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIENBTm9wZW4gY29uZmlndXJhdGlvbi4gXCJDQU5cXF9JU09UUFwiIGlzIHRoZSBrZXkuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgZGVwZW5kZW5jeS4gSXQncyBidWlsdCBvbiB0b3Agb2YgYENBTmAsIHNvIHRoYXQncyB0aGUgcGFyZW50IG1vZHVsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gaGllcmFyY2h5LiBJJ20gZ29pbmcgdG8gbmVlZCB0byB0cmFjayBkb3duIHRoZSBgbWVudWNvbmZpZyBDQU5gIGVudHJ5LiBSaWdodCwgbGV0J3MgaGVhZCBvdmVyIHRvIGBuZXQvY2FuL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgb3ZlcmFsbCBDQU4gY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgY2VydGFpbiBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwcm9wZXIgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoxOS40MzM1MjE0ODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDA3ODM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIENBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnLTUtXFxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cXG5uZXQvY2FuL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQ0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTM6MTkuNTY3NjA0Nzg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzE2NzUzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBlbmFibGUgQ0FOIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYENBTmAgYW5kIGBDQU5fSVNPVFBgLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoYXQgYENBTmAgaXMgbGlrZWx5IGEgZm91bmRhdGlvbmFsIHN1YnN5c3RlbSwgYSBicm9hZGVyIGVuYWJsaW5nIGVsZW1lbnQsIHdoaWxlIGBDQU5fSVNPVFBgIGlzIHRoZSBzcGVjaWZpYyBmZWF0dXJlIEkgcmVxdWlyZS4gQmVmb3JlIEkgZ28gYWhlYWQgYW5kIGFzc3VtZSB0aGF0J3MgdGhlIGZ1bGwgcGljdHVyZSwgaG93ZXZlciwgSSBzaG91bGQgZGVmaW5pdGVseSB2ZXJpZnkgd2hldGhlciB0aGVyZSBhcmUgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzLiBJdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIGFuZCBhdm9pZCBzdXJwcmlzZXMgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgYXMgZm91bmRhdGlvbmFsIGFzIENBTi4gVGltZSB0byBkZWx2ZSBhIGJpdCBkZWVwZXIgYW5kIHNlZSB3aGF0IG90aGVyIGVsZW1lbnRzIG1pZ2h0IGJlIHRpZWQgaW50byB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjkzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjIyLjQzOTI4MzkwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY2FuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKENBTikgbmV0d29yayBsYXllciBjb3JlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBDQU5cXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIChDQU4pIGlzIGEgc2xvdyAodXAgdG8gMU1iaXQvcykgc2VyaWFsXFxuICAxMTpcXHRcXHQgIGNvbW11bmljYXRpb25zIHByb3RvY29sLiBEZXZlbG9wbWVudCBvZiB0aGUgQ0FOIGJ1cyBzdGFydGVkIGluXFxuICAxMjpcXHRcXHQgIDE5ODMgYXQgUm9iZXJ0IEJvc2NoIEdtYkgsIGFuZCB0aGUgcHJvdG9jb2wgd2FzIG9mZmljaWFsbHlcXG4gIDEzOlxcdFxcdCAgcmVsZWFzZWQgaW4gMTk4Ni4gVGhlIENBTiBidXMgd2FzIG9yaWdpbmFsbHkgbWFpbmx5IGZvciBhdXRvbW90aXZlLFxcbiAgMTQ6XFx0XFx0ICBidXQgaXMgbm93IHdpZGVseSB1c2VkIGluIG1hcmluZSAoTk1FQTIwMDApLCBpbmR1c3RyaWFsLCBhbmQgbWVkaWNhbFxcbiAgMTU6XFx0XFx0ICBhcHBsaWNhdGlvbnMuIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIENBTiBuZXR3b3JrIHByb3RvY29sIGZhbWlseVxcbiAgMTY6XFx0XFx0ICBQRl9DQU4gaXMgY29udGFpbmVkIGluIFxcdTAwM2NEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FuLnJzdFxcdTAwM2UuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgSWYgeW91IHdhbnQgQ0FOIHN1cHBvcnQgeW91IHNob3VsZCBzYXkgWSBoZXJlIGFuZCBhbHNvIHRvIHRoZVxcbiAgMTk6XFx0XFx0ICBzcGVjaWZpYyBkcml2ZXIgZm9yIHlvdXIgY29udHJvbGxlcihzKSB1bmRlciB0aGUgTmV0d29yayBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgc3VwcG9ydCBzZWN0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoyMi40MzkzNzE3MzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0MjUwNTY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ0FOIEludGVyZmFjZSBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgc28gdG8gcmVhbGx5IHByb3Blcmx5IHRlc3QgdGhpcywgd2UncmUgZ29pbmcgdG8gbmVlZCBhIENBTiBpbnRlcmZhY2UuIFNvbWV0aGluZyBsaWtlIGEgYENBTl9WQ0FOYCAoVmlydHVhbCBDQU4pIHdpbGwgZG8gdGhlIHRyaWNrIG5pY2VseS4gSXQncyB0aGUgc2ltcGxlc3Qgd2F5IHRvIGdldCB1cCBhbmQgcnVubmluZyB3aXRob3V0IGFueSBwaHlzaWNhbCBoYXJkd2FyZS4gTm93LCBJIGtub3cgdGhlIGtlcm5lbCBoYXMgdmlydHVhbCBDQU4gaW50ZXJmYWNlczsgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBlbmFibGVkIGFuZCBhY2Nlc3NpYmxlLiBMZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHNlZSBpZiBgQ0FOX1ZDQU5gIGlzIGV2ZW4gYW4gb3B0aW9uLiBJJ2xsIGNoZWNrIGBkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ2Ag4oCTIHRoYXQncyB0aGUgdXN1YWwgc3BvdCBmb3IgQ0FOIGRyaXZlciBzZXR0aW5ncy4gU2hvdWxkbid0IHRha2UgbG9uZyB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTM6MjUuNTgxODgwNjgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzcxMTMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX1ZDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvY2FuL0tjb25maWc9MjM9aWYgQ0FOX0RFVlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI0LVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjI1OmNvbmZpZyBDQU5fVkNBTlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIExvY2FsIENBTiBJbnRlcmZhY2UgKHZjYW4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoyNS42Nzk1OTgxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjc3NzE1NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipBc3Nlc3NpbmcgQ0FOIEJ1cyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYENBTl9WQ0FOYCwgdGhhdCdzIGRlZmluaXRlbHkgYSB1c2VmdWwgZmxhZyB0byBoYXZlIGNvbmZpZ3VyZWQuIEdvb2QsIGdvb2QuIE5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBkZXZpY2Ugc2V0dXAuIFRpbWUgdG8gcXVpY2tseSB0YWtlIGEgbG9vayBhdCBgQ0FOX0RFVmAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHBoeXNpY2FsIENBTiBkZXZpY2UgaXMgY29ycmVjdGx5IGlkZW50aWZpZWQgYW5kIGluaXRpYWxpemVkLiBObyBwb2ludCBwcm9jZWVkaW5nIGlmIHRoZSBoYXJkd2FyZSBpc24ndCBwcm9wZXJseSB3aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3ODgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoyOC4zNTczMTc1ODJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjg1MjM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX0RFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0yLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjM6bWVudWNvbmZpZyBDQU5fREVWXFxuZHJpdmVycy9uZXQvY2FuL0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiQ0FOIERldmljZSBEcml2ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoyOC40NjAxNzY4NTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0OTc1MjM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgQ0FOIElTT1RQIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29uZmlndXJhdGlvbnMgaW4gcGxheSBoZXJlIGFyZSBgQ0FOYCwgYENBTl9JU09UUGAsIGBDQU5fREVWYCwgYW5kIGBDQU5fVkNBTmAuIExldCdzIGp1c3QgcXVpY2tseSBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBzb2xpZCBncmFzcCBvbiB3aGF0IGVhY2ggb25lIGRvZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGhlcmUuXG5cbk5vdywgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBpc290cC5jYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBJU08tVFAgaW1wbGVtZW50YXRpb24sIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhcmUgYGlzb3RwX3NlbmRtc2dgLCBgaXNvdHBfYmluZGAsIGBpc290cF9yZWxlYXNlYCwgYGlzb3RwX3BvbGxgLCBhbmQgYGlzb3RwX3JjdmAuIFRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBzY3J1dGluaXplIG1vc3QgY2xvc2VseS5cblxuSW50ZXJlc3RpbmcuLi4gYGlzb3RwX3JjdmAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGJ1dCBpdCdzIHVzZWQgYXMgYSBjYWxsYmFjay4gTmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGF0IHBhdHRlcm4uIEFuZCBub3cgSSBzaG91bGQgZG91YmxlIGNoZWNrLCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYz8gSSBkb24ndCB3YW50IHRvIG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBjaGFuZ2UgYmVoYXZpb3Igb3V0c2lkZSB0aGUgbW9kdWxlLiBHb3R0YSBpZGVudGlmeSBhbnkgZnVuY3Rpb24gd2l0aCBleHRlcm5hbCBsaW5rYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAyNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzozMi40MDk5MzM3NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5OTQwODc4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGlzb3RwX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL2lzb3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjMyLjQ4OTg4MTYxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMxMDYyNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGF0IGBtb2R1bGVfaW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG1vZHVsZSBnZXRzIG9mZiB0aGUgZ3JvdW5kLiBXaGF0J3MgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBoZXJlPyBXaGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWxsb2NhdGVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsbHkgdHJvdWJsZXNvbWUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBtYW5hZ2VtZW50IHBpdGZhbGxzIHRoYXQgY291bGQgYmUgbHVya2luZyBpbiB0aGUgZWFybHkgc3RhZ2VzLiBHb3R0YSBlbnN1cmUgdGhlIGZvdW5kYXRpb24gaXMgc29saWQgYmVmb3JlIHdlIGV2ZW4gdGhpbmsgYWJvdXQgdG91Y2hpbmcgdGhlIFwid29ya2luZ1wiIHBhcnRzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBzdGFibGUgYW5kIHByZWRpY3RhYmxlIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUsIGFuZCBhIGxvdCBvZiBpc3N1ZXMgb2Z0ZW4gc3VyZmFjZSBoZXJlIGZpcnN0LiBMZXQncyBzZWUgd2hhdCB3ZSdyZSBsb29raW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ0MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjM1LjYyMDk0OTYzMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzk1OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vaXNvdHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL2lzb3RwLmM9MjA0MD1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNhbmlzb3RwX25vdGlmaWVyID0ge1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTIwNDMtXFxubmV0L2Nhbi9pc290cC5jOjIwNDQ6c3RhdGljIF9faW5pdCBpbnQgaXNvdHBfbW9kdWxlX2luaXQodm9pZClcXG5uZXQvY2FuL2lzb3RwLmMtMjA0NS17XFxuLS1cXG5uZXQvY2FuL2lzb3RwLmM9MjA2Mj1zdGF0aWMgX19leGl0IHZvaWQgaXNvdHBfbW9kdWxlX2V4aXQodm9pZClcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0yMDY3LVxcbm5ldC9jYW4vaXNvdHAuYzoyMDY4Om1vZHVsZV9pbml0KGlzb3RwX21vZHVsZV9pbml0KTtcXG5uZXQvY2FuL2lzb3RwLmMtMjA2OS1tb2R1bGVfZXhpdChpc290cF9tb2R1bGVfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjM1Ljc0Mzc1MTY1N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjEzOTkzOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgUHJvdG9jb2wgU3RydWN0dXJlKipcblxuT2theSwgd2hlcmUgc2hvdWxkIEkgc3RhcnQ/IEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgbW9zdCBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGdvdmVybiB0aGUgSVNPLVRQIGltcGxlbWVudGF0aW9uLiBJJ20gdGhpbmtpbmcsIGxldCdzIGNoZWNrIHRoZSBgaXNvdHBfb3BzYCBzdHJ1Y3QgZmlyc3QsIHNpbmNlIHRoYXQgd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGNhbGxiYWNrcyB0aGF0IGRlZmluZSBob3cgdGhlIHByb3RvY29sIGFjdHVhbGx5ICp3b3JrcyouIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgdHJhbnNwb3J0IG1lY2hhbmlzbXMuIEFsdGVybmF0aXZlbHksIHRoZSBgcHJvdG9gIHN0cnVjdCBtaWdodCBiZSB0aGUgcGxhY2UuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtb3JlIGFic3RyYWN0IHByb3RvY29sIHBhcmFtZXRlcnMgYXJlIGhlbGQuIERlcGVuZGluZyBvbiB0aGUgZGVzaWduLCBlaXRoZXIgY291bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHN0YXRlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBob2xkcyB0aGUgbWFzdGVyIGRlZmluaXRpb25zLiBMZXQncyBzZWUgd2hpY2ggc3RydWN0dXJlIHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50LiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIGFuZCBkZXRlcm1pbmUgd2hpY2ggb25lIGhvbGRzIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg0MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjM4Ljk1Nzc1MDIzM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgxNTU5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHByb3RvX29wcyBpc290cF9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9pc290cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vaXNvdHAuYz0xOTk5PXN0YXRpYyBpbnQgaXNvdHBfc29ja19ub19pb2N0bGNtZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTIwMDUtXFxubmV0L2Nhbi9pc290cC5jOjIwMDY6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXNvdHBfb3BzID0ge1xcbm5ldC9jYW4vaXNvdHAuYy0yMDA3LVxcdC5mYW1pbHkgPSBQRl9DQU4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjM5LjA1NTkxMjUyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjMwMDEyNzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGlzb3RwX29wc2AgU3RydWN0dXJlKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIGl0LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBgaXNvdHBfb3BzYCBzdHJ1Y3R1cmUuIEl0J3MgdGhlIGNvcmUgb2YgaG93IHRoaXMgSVNPLVRQIGltcGxlbWVudGF0aW9uIGlzIHdvcmtpbmcsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGluc2lkZSBhbmQgb3V0LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24sIHRoZSBmdW5jdGlvbiBwb2ludGVycywgdGhlIGNvbnRleHQgaXQncyB1c2VkIGluLCB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJucywgZXZlcnl0aGluZy4gSXQncyBhbGwgYWJvdXQgZGlzc2VjdGluZyB0aGUgaW50ZXJmYWNlIGFuZCBzZWVpbmcgaG93IGRpZmZlcmVudCBsYXllcnMgYW5kIGNvbXBvbmVudHMgaW50ZXJhY3QuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvcGVyYXRpb25zIGl0IHByb3ZpZGVzLCB0aGUgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3MsIHBhcnRpY3VsYXJseSBlcnJvciBoYW5kbGluZyBhbmQgZnJhbWUgdHJhbnNtaXNzaW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJ1ZmZlciBtYW5hZ2VtZW50LCBmbG93IGNvbnRyb2wsIGFuZCBhbnkgc3BlY2lmaWMgcXVpcmtzIG9yIG9wdGltaXphdGlvbnMgdGhhdCBzdGFuZCBvdXQuIEknbSBmb2N1c2luZyBvbiB0aGUgbG9naWMsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIG92ZXJhbGwgZGVzaWduIGNob2ljZXMuIEdvdHRhIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgd2hvbGUgb3BlcmF0aW9uYWwgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzo0Mi4yODU5Mjc1NTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jYW4vaXNvdHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDAwOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpXFxuMjAwMTpcXHR7XFxuMjAwMjpcXHRcXHQvKiBubyBpb2N0bHMgZm9yIHNvY2tldCBsYXllciAtXFx1MDAzZSBoYW5kIGl0IGRvd24gdG8gTklDIGxheWVyICovXFxuMjAwMzpcXHRcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbjIwMDQ6XFx0fVxcbjIwMDU6XFx0XFxuMjAwNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpc290cF9vcHMgPSB7XFxuMjAwNzpcXHRcXHQuZmFtaWx5ID0gUEZfQ0FOLFxcbjIwMDg6XFx0XFx0LnJlbGVhc2UgPSBpc290cF9yZWxlYXNlLFxcbjIwMDk6XFx0XFx0LmJpbmQgPSBpc290cF9iaW5kLFxcbjIwMTA6XFx0XFx0LmNvbm5lY3QgPSBzb2NrX25vX2Nvbm5lY3QsXFxuMjAxMTpcXHRcXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcXG4yMDEyOlxcdFxcdC5hY2NlcHQgPSBzb2NrX25vX2FjY2VwdCxcXG4yMDEzOlxcdFxcdC5nZXRuYW1lID0gaXNvdHBfZ2V0bmFtZSxcXG4yMDE0OlxcdFxcdC5wb2xsID0gaXNvdHBfcG9sbCxcXG4yMDE1OlxcdFxcdC5pb2N0bCA9IGlzb3RwX3NvY2tfbm9faW9jdGxjbWQsXFxuMjAxNjpcXHRcXHQuZ2V0dHN0YW1wID0gc29ja19nZXR0c3RhbXAsXFxuMjAxNzpcXHRcXHQubGlzdGVuID0gc29ja19ub19saXN0ZW4sXFxuMjAxODpcXHRcXHQuc2h1dGRvd24gPSBzb2NrX25vX3NodXRkb3duLFxcbjIwMTk6XFx0XFx0LnNldHNvY2tvcHQgPSBpc290cF9zZXRzb2Nrb3B0LFxcbjIwMjA6XFx0XFx0LmdldHNvY2tvcHQgPSBpc290cF9nZXRzb2Nrb3B0LFxcbjIwMjE6XFx0XFx0LnNlbmRtc2cgPSBpc290cF9zZW5kbXNnLFxcbjIwMjI6XFx0XFx0LnJlY3Ztc2cgPSBpc290cF9yZWN2bXNnLFxcbjIwMjM6XFx0XFx0Lm1tYXAgPSBzb2NrX25vX21tYXAsXFxuMjAyNDpcXHR9O1xcbjIwMjU6XFx0XFxuMjAyNjpcXHRzdGF0aWMgc3RydWN0IHByb3RvIGlzb3RwX3Byb3RvIF9fcmVhZF9tb3N0bHkgPSB7XFxuMjAyNzpcXHRcXHQubmFtZSA9IFxcXCJDQU5fSVNPVFBcXFwiLFxcbjIwMjg6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMjAyOTpcXHRcXHQub2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IGlzb3RwX3NvY2spLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzo0Mi4yODYyNTMzOTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMxMTkyNDQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIFRoaXMgSVNPLVRQIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGZvY3VzIG5hcnJvd3MgdG8gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiB0b3VjaGVkLiBUaGUgdGV4dCBnaXZlcyBhIGNvbmNpc2UgbGlzdCBvZiB0aGUgKmF2YWlsYWJsZSogSVNPLVRQIGZ1bmN0aW9uczogYGlzb3RwX3JlbGVhc2VgLCBgaXNvdHBfYmluZGAsIGBpc290cF9nZXRuYW1lYCwgYGlzb3RwX3BvbGxgLCBgaXNvdHBfc2V0c29ja29wdGAsIGBpc290cF9nZXRzb2Nrb3B0YCwgYGlzb3RwX3NlbmRtc2dgLCBhbmQgYGlzb3RwX3JlY3Ztc2dgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgQVBJIHN1cmZhY2UuXG5cbkJ1dCB0aGUgKm1vZGlmaWVkKiBmdW5jdGlvbnMgYXJlIHdoYXQncyBpbnRlcmVzdGluZyBoZXJlLiBUaGUgcGF0Y2ggaGFzIHR3ZWFrZWQgYGlzb3RwX3NlbmRtc2dgLCBgaXNvdHBfcmVsZWFzZWAsIGBpc290cF9iaW5kYCwgYW5kIGBpc290cF9wb2xsYC4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24g4oCTIHRob3NlIGFyZSBkZWZpbml0ZWx5IGtleSBhcmVhcyB0byBzY3J1dGluaXplLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRob3NlLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIGxpc3Qgb2YgdGhlIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IGdvdCBhdHRlbnRpb246IGBpc290cF9yY3ZgLCBgaXNvdHBfdHhfdGltZW91dGAsIGBpc290cF90eGZyX3RpbWVyX2hhbmRsZXJgLCBgaXNvdHBfcmN2X2VjaG9gLCBgaXNvdHBfcmN2X2ZjYCwgYGlzb3RwX3Jjdl9zZmAsIGBpc290cF9yY3ZfZmZgLCBhbmQgYGlzb3RwX3Jjdl9jZmAuIEhtbSwgc29tZSBvZiB0aGVzZSwgbGlrZSBgaXNvdHBfcmN2YCwgYXJlIHN0YXRpYy4gVGhlIGludGVybmFsIG9uZXMgYXJlIHVzdWFsbHkgbGVzcyBpbXBvcnRhbnQgZnJvbSBhbiBBUEkgcGVyc3BlY3RpdmUsIGJ1dCBzaW5jZSB0aGV5J3JlICptb2RpZmllZCosIHRoZXkncmUgc2lnbmlmaWNhbnQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgdGhlIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMsIGFzIHRoYXQgd291bGQgYmUgYSBoaWdoZXIgbGV2ZWwgdmlldyBvZiB0aGUgY2hhbmdlcy5cblxuT2theSwgc28gbG9va2luZyBhdCB0aGUgbGlzdCBhZ2FpbiwgYGlzb3RwX3JjdmAgaXMgaW5kZWVkIHN0YXRpYy4gQnV0Li4uIHdhaXQsIGl0J3MgYSBjYWxsYmFjaywgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgaW5jb21pbmcgQ0FOIGZyYW1lcy4gSXQgKmlzKiB0aGUgY29yZSBvZiB0aGUgcmVjZWl2ZSBwYXRoLiBFdmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyByZWdpc3RlcmVkIGFzIGEgY3JpdGljYWwgY2FsbGJhY2suIEkgc2hvdWxkIG5vdGUgdGhhdCBpdCBpcyB0aGUgbWFpbiByZWNlaXZlciBlbnRyeSBwb2ludC4gU28gbWF5YmUgSSBzaG91bGQganVzdCBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBgcHJvdG9fb3BzYCB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoYXQgZnVuY3Rpb24gaXMgaW5saW5lZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjQ4LjU5ODE4MzYzM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2NjE4NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIHZvaWQgaXNvdHBfcmN2XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9pc290cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vaXNvdHAuYz02NDQ9c3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtNzQzLVxcbm5ldC9jYW4vaXNvdHAuYzo3NDQ6c3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXFxubmV0L2Nhbi9pc290cC5jLTc0NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjQ4LjY5Mzg1MjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYwNDc0ODc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ0FOIElTT1RQIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBpc24ndCBhbiBpbmxpbmVkIGNoYW5nZTsgdGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGBpc290cF9yY3ZgIGFuZCBgaXNvdHBfcmN2X2VjaG9gIGFyZSBiZWluZyBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGNhbl9yeF9yZWdpc3RlcmAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBSWCBwYXRoIGlzIGJlaW5nIHNldCB1cC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5NeSBtZW50YWwgbGlzdCBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGlzOiBgaXNvdHBfc2VuZG1zZ2AsIGBpc290cF9iaW5kYCwgYGlzb3RwX3JlbGVhc2VgLCBgaXNvdHBfcG9sbGAsIGBpc290cF9yY3ZgLCBhbmQgYGlzb3RwX3Jjdl9lY2hvYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIEFQSSB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgSSdsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgaW50ZXJhY3Rpb25zIG9jY3VyIHdpdGggYENBTmAsIGBDQU5fSVNPVFBgLCBgQ0FOX0RFVmAsIGFuZCBgQ0FOX1ZDQU5gLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGZpeGluZyBjb25jdXJyZW5jeSBwcm9ibGVtcyB3aXRoaW4gdGhlIENBTiBJU09UUCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGVyZSBhcmUgc3RhdGUtaGFuZGxpbmcgaXNzdWVzIHdpdGggVFgvUlggYW5kIGhvdyB0cmFuc2ZlcnMgYXJlIHRyYWNrZWQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGB0eF9yZXN1bHRgIGFycmF5IGFuZCB0aGUgdXNlIG9mIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCBhcmUga2V5IGluZGljYXRvcnMgb2YgdGhpcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSB2ZXJ5IGhlYXJ0IG9mIHRoZSBJU09UUCBwcm90b2NvbC5cblxuR2l2ZW4gdGhpcywgSSBoYXZlIHRvIGFzc3VtZSB0aGUgd29yc3Q6IHRoZXJlJ3MgYSBzdHJvbmcgcG9zc2liaWxpdHkgdGhhdCBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGVycm9ycyBoYXZlIGJlZW4gaW50cm9kdWNlZC4gVGhlIHBhdGNoICptdXN0KiBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBjaGFuZ2VzIGhhdmVuJ3QgZGVzdGFiaWxpemVkIHRoZSBjb3JlIHByb3RvY29sIGluIGFueSB3YXkuIEkgd2lsbCBhbHNvIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBDQU5fSVNPVFBgIGhhcyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIG5vdyBicm9rZW4gb3IgcmVxdWlyZSBmdXJ0aGVyIGFuYWx5c2lzIGdpdmVuIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTI2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjU0LjI5ODYwNDMxN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwOTEzNDIyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTM6NTQuNTc5NTI3MDU5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzYzODI2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgRGVwZW5kZW5jeSBDb25mdXNpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBqdXN0IHJldmlld2luZyB0aGUgYG5ldC9jYW4vS2NvbmZpZ2AgZmlsZSBhbmQgc29tZXRoaW5nIHNlZW1zLi4ub2ZmLiBJdCdzIG9kZCwgSSB3YXMgc3VyZSBJIGhhZCBzZWVuIGBkZXBlbmRzIG9uYCBjbGF1c2VzIGluIHRoaXMgdHlwZSBvZiBLY29uZmlnIGJlZm9yZS4gTG9va2luZyBhdCBpdCBhZ2FpbiwgSSdtIG5vdCBzZWVpbmcgdGhlbSBoZXJlIGZvciB0aGVzZSBzcGVjaWZpYyBDQU4gb3B0aW9ucy4gVGhpcyBpcyBpbW1lZGlhdGVseSBtYWtpbmcgbWUgcXVlc3Rpb24gaG93IHRoZSBvcHRpb25zIGFyZSBiZWluZyBnYXRlZC4gQXJlIHRoZXJlIGltcGxpY2l0IGRlcGVuZGVuY2llcyBiYWtlZCBpbiBzb21ld2hlcmUgZWxzZT8gQW0gSSBtaXNzaW5nIHNvbWV0aGluZyBnbGFyaW5nbHkgb2J2aW91cz8gT3IgaXMgdGhpcyBhIGRlbGliZXJhdGUgYXJjaGl0ZWN0dXJhbCBjaG9pY2UgaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSwgcG9zc2libHkgcmVseWluZyBvbiBicm9hZGVyLCBsZXNzIGdyYW51bGFyIGRlcGVuZGVuY2llcyBkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGUgS2NvbmZpZyB0cmVlPyBUaGlzIGRldmlhdGVzIGZyb20gd2hhdCBJIHdhcyBleHBlY3RpbmcgYW5kIHdhcnJhbnRzIGEgZGVlcGVyIGRpdmUgdG8gZmlndXJlIG91dCB0aGUgaW50ZW5kZWQgYnVpbGQgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlzY3JlcGFuY3kgaW1tZWRpYXRlbHkgdG8gYXZvaWQgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHdpbGwgYWN0dWFsbHkgZnVuY3Rpb24gYXQgY29tcGlsZS10aW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRldGVybWluZSBpZiB0aGUgbG9naWMgSSBhbSBzZWVpbmcgaXMgaW50ZW50aW9uYWwgYW5kIGhvdyBpdCB0aWVzIGludG8gdGhlIHdob2xlIHBpY3R1cmUgb2YgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU5NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjU3LjU1NTkxMzUyMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5ODI2MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9qMTkzOS9LY29uZmlnPTY9Y29uZmlnIENBTl9KMTkzOVxcbm5ldC9jYW4vajE5MzkvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJTQUUgSjE5MzlcXFwiXFxubmV0L2Nhbi9qMTkzOS9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBDQU5cXG5uZXQvY2FuL2oxOTM5L0tjb25maWctOS1cXHRoZWxwXFxuLS1cXG5uZXQvY2FuL2oxOTM5L3NvY2tldC5jPTM5Nj1zdGF0aWMgaW50IGoxOTM5X3NrX2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy00MTktXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYzo0MjA6XFx0LyogajE5Mzlfc2tfc29ja19kZXN0cnVjdCgpIGRlcGVuZHMgb24gU09DS19SQ1VfRlJFRSBmbGFnICovXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy00MjEtXFx0c29ja19zZXRfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjU3Ljg3NTc0NzU1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgyNTI2NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBDQU5fSVNPVFBgIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCdzIG5vdCBleHBsaWNpdGx5IHN0YXRpbmcgaXRzIGRlcGVuZGVuY2llcyB1c2luZyBgZGVwZW5kcyBvbmAuIFRoYXQncyBhIGJpdCB1bnVzdWFsLiBBaCwgYnV0IGl0J3MgbmVzdGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgQ0FOYCBzZWN0aW9uLiBTbywgSSBuZWVkIHRvIGludGVycHJldCB0aGF0IGFzIGFuICppbXBsaWNpdCogZGVwZW5kZW5jeSBvbiBgQ0FOYC4gTWFrZXMgc2Vuc2UuIElmIHlvdSB3YW50IElTT1RQLCB5b3UgY2xlYXJseSBuZWVkIHRoZSBDQU4gaW50ZXJmYWNlIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhlcmVmb3JlLCB0byBiZSBjZXJ0YWluLCBJIGhhZCBiZXR0ZXIgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIG9mIGBDQU5gIGl0c2VsZi4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0IHdpdGggYENBTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTA1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTQ6MDAuODU4Mjc3MzM2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5MTQ5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vS2NvbmZpZy01LVxcbm5ldC9jYW4vS2NvbmZpZzo2Om1lbnVjb25maWcgQ0FOXFxubmV0L2Nhbi9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkNBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjE0OjAwLjk3OTIzMjA1MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ4MDM1OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgQ0FOIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgZm9jdXNlZCBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYENBTmAgYW5kIGBORVRgLiBDbGVhcmx5LCBgQ0FOYCBpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlIOKAkyBpdCdzIHJpZ2h0IHRoZXJlIGluIHRoZSBgbmV0L2AgZGlyZWN0b3J5LiBTbywgdGhlIGRlcGVuZGVuY2UgaXMgcHJldHR5IG9idmlvdXMuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIGZyb20gbXkgZXhwZXJpZW5jZSwgYENBTmAsIGBDQU5fSVNPVFBgLCBhbmQgYENBTl9WQ0FOYCBhcmUgdGhlIGtleSBvbmVzIHRvIGNvbmNlbnRyYXRlIG9uIGhlcmUuIE5vdywgdGltZSB0byB1dGlsaXplIGBzZXQtcmVzdWx0c2AgdG8gaW1wbGVtZW50IHRob3NlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM3MywiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxNDowNS41MjcyNzEyNTJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU2NjQ2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0lTT1RQXCIsXG4gICAgXCJDQU5fREVWXCIsXG4gICAgXCJDQU5fVkNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb3RwX3NlbmRtc2dcIixcbiAgICBcImlzb3RwX2JpbmRcIixcbiAgICBcImlzb3RwX3JlbGVhc2VcIixcbiAgICBcImlzb3RwX3BvbGxcIixcbiAgICBcImlzb3RwX3JjdlwiLFxuICAgIFwiaXNvdHBfcmN2X2VjaG9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ0FOIElTT1RQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGZpeCBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gVFgvUlggc3RhdGUgaGFuZGxpbmcgYW5kIHRyYW5zZmVyIGdlbmVyYXRpb24gdHJhY2tpbmcuIEl0IGludHJvZHVjZXMgYSBuZXcgdHhfcmVzdWx0IGFycmF5IGFuZCB1c2VzIFJFQURfT05DRS9XUklURV9PTkNFIGZvciBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBJU09UUCBwcm90b2NvbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbmV3IHJhY2UgY29uZGl0aW9ucyBvciBsb2dpYyBidWdzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiQ0FOX0RFVlwiLFxuICAgIFwiQ0FOX1ZDQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpc290cF9zZW5kbXNnXCIsXG4gICAgXCJpc290cF9iaW5kXCIsXG4gICAgXCJpc290cF9yZWxlYXNlXCIsXG4gICAgXCJpc290cF9wb2xsXCIsXG4gICAgXCJpc290cF9yY3ZcIixcbiAgICBcImlzb3RwX3Jjdl9lY2hvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENBTiBJU09UUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBmaXggY29uY3VycmVuY3kgaXNzdWVzIGluIFRYL1JYIHN0YXRlIGhhbmRsaW5nIGFuZCB0cmFuc2ZlciBnZW5lcmF0aW9uIHRyYWNraW5nLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHR4X3Jlc3VsdCBhcnJheSBhbmQgdXNlcyBSRUFEX09OQ0UvV1JJVEVfT05DRSBmb3Igc3RhdGUgdHJhbnNpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBsb2dpYyBvZiB0aGUgSVNPVFAgcHJvdG9jb2wgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG5ldyByYWNlIGNvbmRpdGlvbnMgb3IgbG9naWMgYnVncyB3ZXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowt6d4h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 06:51:10 +0000 UTC FinishedAt: 2026-07-26 07:14:07 +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": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_ISOTP", "CAN_DEV", "CAN_VCAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_ISOTP", "CAN_DEV", "CAN_VCAN" ], "series_id": "6c2c9f79-d14c-4e6c-bc94-862a7a894eab" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "isotp_sendmsg", "isotp_bind", "isotp_release", "isotp_poll", "isotp_rcv", "isotp_rcv_echo" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7Q0FOX0RFViYjMzQ7LAogICAgJiMzNDtDQU5fVkNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lzb3RwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXNvdHBfYmluZCYjMzQ7LAogICAgJiMzNDtpc290cF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2lzb3RwX3BvbGwmIzM0OywKICAgICYjMzQ7aXNvdHBfcmN2JiMzNDssCiAgICAmIzM0O2lzb3RwX3Jjdl9lY2hvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDQU4gSVNPVFAgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gZml4IGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBUWC9SWCBzdGF0ZSBoYW5kbGluZyBhbmQgdHJhbnNmZXIgZ2VuZXJhdGlvbiB0cmFja2luZy4gSXQgaW50cm9kdWNlcyBhIG5ldyB0eF9yZXN1bHQgYXJyYXkgYW5kIHVzZXMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgZm9yIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgdGhlIElTT1RQIHByb3RvY29sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDI5NTI3MWQxOTc5NzM1MWIzNmMzY2M1MGY3Y2RhM2IxMzE3YjBlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDA3OjEyOjU0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9jYW4vaXNvdHAuYyBiL25ldC9jYW4vaXNvdHAuY1xuaW5kZXggNTRiZWNhZjY4OThmMTMuLjFmMTFjNjZiMzQzYzg2IDEwMDY0NFxuLS0tIGEvbmV0L2Nhbi9pc290cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY2FuL2lzb3RwLmNcbkBAIC0xMjcsNiAmIzQzOzEyNywxNSBAQCBNT0RVTEVfUEFSTV9ERVNDKG1heF9wZHVfc2l6ZSwgXCYjMzQ7bWF4aW11bSBpc290cCBwZHUgc2l6ZSAoZGVmYXVsdCBcJiMzNDtcbiAjZGVmaW5lIElTT1RQX0ZDX1RJTUVPVVQgMVx0LyogMSBzZWMgKi9cbiAjZGVmaW5lIElTT1RQX0VDSE9fVElNRU9VVCAyXHQvKiAyIHNlY3MgKi9cbiBcbiYjNDM7Lyogc28tXHUwMDNldHhfcmVzdWx0W3NvLVx1MDAzZXR4X2dlbiAlIElTT1RQX1RYX1JFU1VMVF9TTE9UU10gaG9sZHMgdGhlIHBhY2tlZCB2YWx1ZVxuJiM0MzsgKiAoZXJyIFx1MDAzY1x1MDAzYyBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMgfCBnZW4pIGZvciBlYWNoIHR4IGdlbmVyYXRpb24gc2xvdCwgc28gaXRcbiYjNDM7ICogY2FuIGJlIGhhbmRsZWQgd2l0aCBhIHNpbmdsZSBSRUFEX09OQ0UoKS9XUklURV9PTkNFKCkgYWNjZXNzLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBJU09UUF9UWF9SRVNVTFRfU0xPVFMgNFxuJiM0MzsjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUyAyNFxuJiM0MzsjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSyAoKDFVIFx1MDAzY1x1MDAzYyBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMpIC0gMSlcbiYjNDM7I2RlZmluZSBJU09UUF9UWF9SRVNVTFRfRVJSX01BU0sgMHhGRlxuJiM0MztcbiBlbnVtIHtcbiBcdElTT1RQX0lETEUgPSAwLFxuIFx0SVNPVFBfV0FJVF9GSVJTVF9GQyxcbkBAIC0xNjYsNyAmIzQzOzE3NSw4IEBAIHN0cnVjdCBpc290cF9zb2NrIHtcbiBcdHUzMiBmb3JjZV90eF9zdG1pbjtcbiBcdHUzMiBmb3JjZV9yeF9zdG1pbjtcbiBcdHUzMiBjZmVjaG87IC8qIGNvbnNlY3V0aXZlIGZyYW1lIGVjaG8gdGFnICovXG4tXHR1MzIgdHhfZ2VuOyAvKiBnZW5lcmF0aW9uLCBidW1wZWQgcGVyIG5ldyB0eCB0cmFuc2ZlciAqL1xuJiM0MztcdHUzMiB0eF9nZW47IC8qIHRyYW5zZmVyIGdlbmVyYXRpb24sIGluY3JlYXNlZCBwZXIgbmV3IHR4IHRyYW5zZmVyICovXG4mIzQzO1x0dTMyIHR4X3Jlc3VsdFtJU09UUF9UWF9SRVNVTFRfU0xPVFNdOyAvKiBwZXItZ2VuZXJhdGlvbiByZXN1bHQgc2xvdHMgKi9cbiBcdHN0cnVjdCB0cGNvbiByeCwgdHg7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vdGlmaWVyO1xuIFx0d2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDtcbkBAIC0xNzcsNiAmIzQzOzE4Nyw2NSBAQCBzdGF0aWMgTElTVF9IRUFEKGlzb3RwX25vdGlmaWVyX2xpc3QpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXNvdHBfbm90aWZpZXJfbG9jayk7XG4gc3RhdGljIHN0cnVjdCBpc290cF9zb2NrICppc290cF9idXN5X25vdGlmaWVyO1xuIFxuJiM0MzsvKiBpbmNyZWFzZSAoMjQgYml0KSB0eCBnZW5lcmF0aW9uIHZhbHVlICovXG4mIzQzO3N0YXRpYyB1MzIgaXNvdHBfaW5jX3R4X2dlbih1MzIgZ2VuKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChnZW4gJiM0MzsgMSkgXHUwMDI2IElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7Lyogc3RvcmUgOCBiaXQgZXJyb3IgYW5kIDI0IGJpdCB0eCBnZW5lcmF0aW9uIHZhbHVlcyBpbiBwYWNrZWQgdTMyIGVsZW1lbnQgKi9cbiYjNDM7c3RhdGljIHUzMiBpc290cF9wYWNrX3R4X3Jlc3VsdCh1MzIgZ2VuLCBpbnQgZXJyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGdlbiB8ICgodTMyKWVyciBcdTAwM2NcdTAwM2MgSVNPVFBfVFhfUkVTVUxUX0dFTl9CSVRTKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZ2V0IHRoZSAyNCBiaXQgdHggZ2VuZXJhdGlvbiB2YWx1ZSBmcm9tIHRoZSB0eCByZXN1bHQgKi9cbiYjNDM7c3RhdGljIHUzMiBpc290cF9nZXRfdHhfZ2VuKHUzMiBnZW5fZXJyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGdlbl9lcnIgXHUwMDI2IElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSztcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZ2V0IHRoZSA4IGJpdCBlcnJvciB2YWx1ZSBmcm9tIHRoZSB0eCByZXN1bHQgKi9cbiYjNDM7c3RhdGljIHUzMiBpc290cF9nZXRfdHhfZXJyKHUzMiBnZW5fZXJyKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChnZW5fZXJyIFx1MDAzZVx1MDAzZSBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMpIFx1MDAyNiBJU09UUF9UWF9SRVNVTFRfRVJSX01BU0s7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHN0b3JlIHRyYW5zZmVyIHJlc3VsdCBpbiBwZXItZ2VuZXJhdGlvbiU0IHNvLVx1MDAzZXR4X3Jlc3VsdFtdIHNsb3QgKi9cbiYjNDM7c3RhdGljIHZvaWQgaXNvdHBfc2V0X3R4X3Jlc3VsdChzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHUzMiBnZW4sIGludCBlcnIpXG4mIzQzO3tcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4X3Jlc3VsdFtnZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdLFxuJiM0MztcdFx0ICAgaXNvdHBfcGFja190eF9yZXN1bHQoZ2VuLCBlcnIpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogZmV0Y2ggdGhlIHJlc3VsdCByZWNvcmRlZCBmb3IgJiMzOTtnZW4mIzM5OywgYXMgYSAobmVnYXRpdmUpIGVycm5vICgwIGZvciBzdWNjZXNzKSAqL1xuJiM0MztzdGF0aWMgaW50IGlzb3RwX2dldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJlc3VsdCA9IFJFQURfT05DRShzby1cdTAwM2V0eF9yZXN1bHRbZ2VuICUgSVNPVFBfVFhfUkVTVUxUX1NMT1RTXSk7XG4mIzQzO1xuJiM0MztcdGlmIChpc290cF9nZXRfdHhfZ2VuKHJlc3VsdCkgIT0gZ2VuKSB7XG4mIzQzO1x0XHRwcl9ub3RpY2Vfb25jZShcJiMzNDtjYW4taXNvdHA6IHR4X3Jlc3VsdFtdIHNsb3QgcmV1c2VkIGJlZm9yZSByZWFkXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0XHQvKiByZXBvcnQgZmFpbHVyZSByYXRoZXIgdGhhbiByaXNrIGEgZmFsc2Ugc3VjY2VzcyAqL1xuJiM0MztcdFx0cmV0dXJuIC1FQ09NTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtKGlzb3RwX2dldF90eF9lcnIocmVzdWx0KSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIHRydWUgaWYgZG9uZSwgc2h1dCBkb3duIG9yIHN1cGVyc2VkZWQgKCYjMzk7Z2VuJiMzOTsgaXMgbm8gbG9uZ2VyIHRoZSBhY3RpdmVcbiYjNDM7ICogdHJhbnNmZXIpLiBSZWFkcyB0eC5zdGF0ZSBmaXJzdCAoYWNxdWlyZSkgc28gdHhfZ2VuL3R4X3Jlc3VsdCByZWFkc1xuJiM0MzsgKiBiZWxvdyBzZWUgYXQgbGVhc3Qgd2hhdCB0aGF0IHN0YXRlIHdyaXRlIHB1Ymxpc2hlZCAoY29tbW9uIHNlcXVlbmNlKS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGlzb3RwX3R4X2dlbl9kb25lKHN0cnVjdCBpc290cF9zb2NrICpzbywgdTMyIGdlbilcbiYjNDM7e1xuJiM0MztcdC8qIHJlYWQgdHguc3RhdGUgZmlyc3QgZm9yIHRoZSBjb21tb24gc2VxdWVuY2UgKi9cbiYjNDM7XHR1MzIgc3RhdGUgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0YXRlID09IElTT1RQX0lETEUgfHwgc3RhdGUgPT0gSVNPVFBfU0hVVERPV04gfHxcbiYjNDM7XHQgICAgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgIT0gZ2VuO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlzb3RwX3NvY2sgKmlzb3RwX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcbiB7XG4gXHRyZXR1cm4gKHN0cnVjdCBpc290cF9zb2NrICopc2s7XG5AQCAtMTk5LDcgJiM0MzsyNjgsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbiBcdFx0XHRcdFx0ICAgICByeHRpbWVyKTtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNvLVx1MDAzZXNrO1xuIFxuLVx0aWYgKHNvLVx1MDAzZXJ4LnN0YXRlID09IElTT1RQX1dBSVRfREFUQSkge1xuJiM0MztcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNlcnguc3RhdGUpID09IElTT1RQX1dBSVRfREFUQSkge1xuIFx0XHQvKiB3ZSBkaWQgbm90IGdldCBuZXcgZGF0YSBmcmFtZXMgaW4gdGltZSAqL1xuIFxuIFx0XHQvKiByZXBvcnQgJiMzOTtjb25uZWN0aW9uIHRpbWVkIG91dCYjMzk7ICovXG5AQCAtMjA4LDcgJiM0MzsyNzcsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbiBcdFx0XHRza19lcnJvcl9yZXBvcnQoc2spO1xuIFxuIFx0XHQvKiByZXNldCByeCBzdGF0ZSAqL1xuLVx0XHRzby1cdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XG4mIzQzO1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcdH1cbiBcbiBcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbkBAIC0zNzIsMjAgJiM0Mzs0NDEsMTkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKTtcbiBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mYyhzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZzby1cdTAwM2VzaztcbiYjNDM7XHRpbnQgdHhfZXJyID0gRUJBRE1TRzsgLyogZGVmYXVsdCBmb3IgdW5rbm93biBGQyBzdGF0dXMgKi9cbiBcbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9XQUlUX0ZDIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRklSU1RfRkMpXG4mIzQzO1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9GQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZXR4dGltZXIpO1xuIFxuIFx0LyogaXNvdHBfdHhfdGltZW91dCgpIG1heSBoYXZlIGdpdmVuIHVwIG9uIHRoaXMgam9iIHdoaWxlXG4tXHQgKiBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoOyBzby1cdTAwM2VyeF9sb2NrXG4tXHQgKiAoaGVsZCBieSBvdXIgY2FsbGVyIGlzb3RwX3JjdigpKSBydWxlcyBvdXQgYSBjb25jdXJyZW50IGNsYWltLFxuLVx0ICogc28gYSBwbGFpbiByZWNoZWNrIGlzIGVub3VnaCBoZXJlLlxuJiM0MztcdCAqIGhydGltZXJfY2FuY2VsKCkgYWJvdmUgd2FpdGVkIGZvciBpdCB0byBmaW5pc2ggPVx1MDAzZSByZWNoZWNrXG4gXHQgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9XQUlUX0ZDIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRklSU1RfRkMpXG4mIzQzO1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9GQyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxuIFx0XHRyZXR1cm4gMTtcbiBcbiBcdGlmICgoY2YtXHUwMDNlbGVuIFx1MDAzYyBhZSAmIzQzOyBGQ19DT05URU5UX1NaKSB8fFxuQEAgLTM5NiwxMyAmIzQzOzQ2NCwxNSBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mYyhzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiBcdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4gXHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiBcbi1cdFx0c28tXHUwMDNldHguc3RhdGUgPSBJU09UUF9JRExFO1xuJiM0MztcdFx0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgc28tXHUwMDNldHhfZ2VuLCBFQkFETVNHKTtcbiYjNDM7XHRcdC8qIHNldCB0byBJRExFIGFmdGVyIHB1Ymxpc2hpbmcgdHhfcmVzdWx0ICovXG4mIzQzO1x0XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfSURMRSk7XG4gXHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZzby1cdTAwM2V3YWl0KTtcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXG4gXHQvKiBnZXQgc3RhdGljL2R5bmFtaWMgY29tbXVuaWNhdGlvbiBwYXJhbXMgZnJvbSBmaXJzdC9ldmVyeSBGQyBmcmFtZSAqL1xuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlID09IElTT1RQX1dBSVRfRklSU1RfRkMgfHxcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9XQUlUX0ZJUlNUX0ZDIHx8XG4gXHQgICAgc28tXHUwMDNlb3B0LmZsYWdzIFx1MDAyNiBDQU5fSVNPVFBfRFlOX0ZDX1BBUk1TKSB7XG4gXHRcdHNvLVx1MDAzZXR4ZmMuYnMgPSBjZi1cdTAwM2VkYXRhW2FlICYjNDM7IDFdO1xuIFx0XHRzby1cdTAwM2V0eGZjLnN0bWluID0gY2YtXHUwMDNlZGF0YVthZSAmIzQzOyAyXTtcbkBAIC00MjYsMTMgJiM0Mzs0OTYsMTMgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXHRcdFx0c28tXHUwMDNldHhfZ2FwID0ga3RpbWVfYWRkX25zKHNvLVx1MDAzZXR4X2dhcCxcbiBcdFx0XHRcdFx0XHQgIChzby1cdTAwM2V0eGZjLnN0bWluIC0gMHhGMClcbiBcdFx0XHRcdFx0XHQgICogMTAwMDAwKTtcbi1cdFx0c28tXHUwMDNldHguc3RhdGUgPSBJU09UUF9XQUlUX0ZDO1xuJiM0MztcdFx0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfV0FJVF9GQyk7XG4gXHR9XG4gXG4gXHRzd2l0Y2ggKGNmLVx1MDAzZWRhdGFbYWVdIFx1MDAyNiAweDBGKSB7XG4gXHRjYXNlIElTT1RQX0ZDX0NUUzpcbiBcdFx0c28tXHUwMDNldHguYnMgPSAwO1xuLVx0XHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX1NFTkRJTkc7XG4mIzQzO1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcbiBcdFx0Lyogc2VuZCBDRiBmcmFtZSBhbmQgZW5hYmxlIGVjaG8gdGltZW91dCBoYW5kbGluZyAqL1xuIFx0XHRocnRpbWVyX3N0YXJ0KFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lciwga3RpbWVfc2V0KElTT1RQX0VDSE9fVElNRU9VVCwgMCksXG4gXHRcdFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9TT0ZUKTtcbkBAIC00NDcsMTQgJiM0Mzs1MTcsMTkgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXG4gXHRjYXNlIElTT1RQX0ZDX09WRkxXOlxuIFx0XHQvKiBvdmVyZmxvdyBvbiByZWNlaXZlciBzaWRlIC0gcmVwb3J0ICYjMzk7bWVzc2FnZSB0b28gbG9uZyYjMzk7ICovXG4tXHRcdHNrLVx1MDAzZXNrX2VyciA9IEVNU0dTSVpFO1xuLVx0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbi1cdFx0XHRza19lcnJvcl9yZXBvcnQoc2spO1xuJiM0MztcdFx0dHhfZXJyID0gRU1TR1NJWkU7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFxuIFx0ZGVmYXVsdDpcbi1cdFx0Lyogc3RvcCB0aGlzIHR4IGpvYiAqL1xuLVx0XHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX0lETEU7XG4mIzQzO1x0XHQvKiByZXNlcnZlZC91bmtub3duIGZsb3cgc3RhdHVzICh0eF9lcnIgZGVmYXVsdHMgdG8gRUJBRE1TRykgKi9cbiYjNDM7XG4mIzQzO1x0XHRzay1cdTAwM2Vza19lcnIgPSB0eF9lcnI7XG4mIzQzO1x0XHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcbiYjNDM7XHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiYjNDM7XG4mIzQzO1x0XHRpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBzby1cdTAwM2V0eF9nZW4sIHR4X2Vycik7XG4mIzQzO1x0XHQvKiBzZXQgdG8gSURMRSBhZnRlciBwdWJsaXNoaW5nIHR4X3Jlc3VsdCAqL1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c28tXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbkBAIC00NjcsNyAmIzQzOzU0Miw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X3NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IHBjaWxlbixcbiBcdHN0cnVjdCBza19idWZmICpuc2tiO1xuIFxuIFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2c28tXHUwMDNlcnh0aW1lcik7XG4tXHRzby1cdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2VyeC5zdGF0ZSwgSVNPVFBfSURMRSk7XG4gXG4gXHRpZiAoIWxlbiB8fCBsZW4gXHUwMDNlIGNmLVx1MDAzZWxlbiAtIHBjaWxlbilcbiBcdFx0cmV0dXJuIDE7XG5AQCAtNTAxLDcgJiM0Mzs1NzYsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiBcdGludCBmZl9wY2lfc3o7XG4gXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VyeHRpbWVyKTtcbi1cdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcbiBcdC8qIGdldCB0aGUgdXNlZCBzZW5kZXIgTExfREwgZnJvbSB0aGUgKGZpcnN0KSBDQU4gZnJhbWUgZGF0YSBsZW5ndGggKi9cbiBcdHNvLVx1MDAzZXJ4LmxsX2RsID0gcGFkbGVuKGNmLVx1MDAzZWxlbik7XG5AQCAtNTU1LDcgJiM0Mzs2MzAsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiBcbiBcdC8qIGluaXRpYWwgc2V0dXAgZm9yIHRoaXMgcGR1IHJlY2VwdGlvbiAqL1xuIFx0c28tXHUwMDNlcnguc24gPSAxO1xuLVx0c28tXHUwMDNlcnguc3RhdGUgPSBJU09UUF9XQUlUX0RBVEE7XG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2VyeC5zdGF0ZSwgSVNPVFBfV0FJVF9EQVRBKTtcbiBcbiBcdC8qIG5vIGNyZWF0aW9uIG9mIGZsb3cgY29udHJvbCBmcmFtZXMgKi9cbiBcdGlmIChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IENBTl9JU09UUF9MSVNURU5fTU9ERSlcbkBAIC01NzMsNyAmIzQzOzY0OCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLFxuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChzby1cdTAwM2VyeC5zdGF0ZSAhPSBJU09UUF9XQUlUX0RBVEEpXG4mIzQzO1x0aWYgKFJFQURfT05DRShzby1cdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9EQVRBKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIGRyb3AgaWYgdGltZXN0YW1wIGdhcCBpcyBsZXNzIHRoYW4gZm9yY2Vfcnhfc3RtaW4gbmFubyBzZWNzICovXG5AQCAtNTg4LDExICYjNDM7NjYzLDkgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VyeHRpbWVyKTtcbiBcbiBcdC8qIGlzb3RwX3J4X3RpbWVyX2hhbmRsZXIoKSBtYXkgaGF2ZSByYWNlZCB1cyBmb3Igc28tXHUwMDNlcnguc3RhdGVcbi1cdCAqIHdoaWxlIGhydGltZXJfY2FuY2VsKCkgYWJvdmUgd2FpdGVkIGZvciBpdCB0byBmaW5pc2gsIGFscmVhZHlcbi1cdCAqIHJlcG9ydGluZyBFVElNRURPVVQgYW5kIHJlc2V0dGluZyB0aGUgcmVjZXB0aW9uOyBkb24mIzM5O3QgcHJvY2Vzc1xuLVx0ICogdGhpcyBDRiBpbnRvIGEgcmVhc3NlbWJseSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZ2l2ZW4gdXAgb24uXG4mIzQzO1x0ICogd2hpbGUgaHJ0aW1lcl9jYW5jZWwoKSBhYm92ZSB3YWl0ZWQgZm9yIGl0IHRvIGZpbmlzaCA9XHUwMDNlIHJlY2hlY2tcbiBcdCAqL1xuLVx0aWYgKHNvLVx1MDAzZXJ4LnN0YXRlICE9IElTT1RQX1dBSVRfREFUQSlcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0RBVEEpXG4gXHRcdHJldHVybiAxO1xuIFxuIFx0LyogQ0ZzIGFyZSBuZXZlciBsb25nZXIgdGhhbiB0aGUgRkYgKi9cbkBAIC02MTMsNyAmIzQzOzY4Niw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLFxuIFx0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4gXG4gXHRcdC8qIHJlc2V0IHJ4IHN0YXRlICovXG4tXHRcdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbiYjNDM7XHRcdFdSSVRFX09OQ0Uoc28tXHUwMDNlcnguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0XHRyZXR1cm4gMTtcbiBcdH1cbiBcdHNvLVx1MDAzZXJ4LnNuJiM0MzsmIzQzOztcbkBAIC02MjcsNyAmIzQzOzcwMCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLFxuIFxuIFx0aWYgKHNvLVx1MDAzZXJ4LmlkeCBcdTAwM2U9IHNvLVx1MDAzZXJ4Lmxlbikge1xuIFx0XHQvKiB3ZSBhcmUgZG9uZSAqL1xuLVx0XHRzby1cdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XG4mIzQzO1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcbiBcdFx0aWYgKChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IElTT1RQX0NIRUNLX1BBRERJTkcpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgY2hlY2tfcGFkKHNvLCBjZiwgaSAmIzQzOyAxLCBzby1cdTAwM2VvcHQucnhwYWRfY29udGVudCkpIHtcbkBAIC02OTgsOCAmIzQzOzc3MSwxMCBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSlcbiBcbiBcdGlmIChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IENBTl9JU09UUF9IQUxGX0RVUExFWCkge1xuIFx0XHQvKiBjaGVjayByeC90eCBwYXRoIGhhbGYgZHVwbGV4IGV4cGVjdGF0aW9ucyAqL1xuLVx0XHRpZiAoKHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX0lETEUgXHUwMDI2XHUwMDI2IG5fcGNpX3R5cGUgIT0gTl9QQ0lfRkMpIHx8XG4tXHRcdCAgICAoc28tXHUwMDNlcnguc3RhdGUgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjYgbl9wY2lfdHlwZSA9PSBOX1BDSV9GQykpXG4mIzQzO1x0XHRpZiAoKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAgbl9wY2lfdHlwZSAhPSBOX1BDSV9GQykgfHxcbiYjNDM7XHRcdCAgICAoUkVBRF9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlKSAhPSBJU09UUF9JRExFIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICBuX3BjaV90eXBlID09IE5fUENJX0ZDKSlcbiBcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG5AQCAtNzk0LDYgJiM0Mzs4NjksNyBAQCBzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pXG4gXHRzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmO1xuIFx0aW50IGNhbl9zZW5kX3JldDtcbiBcdGludCBhZSA9IChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IENBTl9JU09UUF9FWFRFTkRfQUREUikgPyAxIDogMDtcbiYjNDM7XHR1MzIgb2xkX2NmZWNobztcbiBcbiBcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzby1cdTAwM2VpZmluZGV4KTtcbiBcdGlmICghZGV2KVxuQEAgLTgxNCw2ICYjNDM7ODkwLDkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIFxuIFx0Y3N4LVx1MDAzZWNhbl9paWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiBcbiYjNDM7XHQvKiBzZXQgdWlkIGluIHR4IHNrYiB0byBpZGVudGlmeSBDRiBlY2hvIGZyYW1lcyAqL1xuJiM0MztcdGNhbl9zZXRfc2tiX3VpZChza2IpO1xuJiM0MztcbiBcdGNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cdTAwM2VkYXRhO1xuIFx0c2tiX3B1dF96ZXJvKHNrYiwgc28tXHUwMDNlbGwubXR1KTtcbiBcbkBAIC04MzAsMTIgJiM0Mzs5MDksMTUgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIFx0c2tiLVx1MDAzZWRldiA9IGRldjtcbiBcdGNhbl9za2Jfc2V0X293bmVyKHNrYiwgc2spO1xuIFxuLVx0LyogY2ZlY2hvIHNob3VsZCBoYXZlIGJlZW4gemVybyYjMzk7ZWQgYnkgaW5pdC9pc290cF9yY3ZfZWNobygpICovXG4tXHRpZiAoc28tXHUwMDNlY2ZlY2hvKVxuLVx0XHRwcl9ub3RpY2Vfb25jZShcJiMzNDtjYW4taXNvdHA6IGNmZWNobyBpcyAlMDhYICE9IDBcXG5cJiMzNDssIHNvLVx1MDAzZWNmZWNobyk7XG4mIzQzO1x0LyogemVybyYjMzk7ZWQgYnkgaW5pdC9pc290cF9yY3ZfZWNobygpOyByZWFjaGVkIGxvY2stZnJlZSB2aWFcbiYjNDM7XHQgKiBpc290cF90eGZyX3RpbWVyX2hhbmRsZXIoKSB0b28sIHNvIHVzZSBSRUFEX09OQ0UoKS9XUklURV9PTkNFKClcbiYjNDM7XHQgKi9cbiYjNDM7XHRvbGRfY2ZlY2hvID0gUkVBRF9PTkNFKHNvLVx1MDAzZWNmZWNobyk7XG4mIzQzO1x0aWYgKG9sZF9jZmVjaG8pXG4mIzQzO1x0XHRwcl9ub3RpY2Vfb25jZShcJiMzNDtjYW4taXNvdHA6IGNmZWNobyBpcyAlMDhYICE9IDBcXG5cJiMzNDssIG9sZF9jZmVjaG8pO1xuIFxuIFx0Lyogc2V0IGNvbnNlY3V0aXZlIGZyYW1lIGVjaG8gdGFnICovXG4tXHRzby1cdTAwM2VjZmVjaG8gPSAqKHUzMiAqKWNmLVx1MDAzZWRhdGE7XG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2VjZmVjaG8sIHNrYi1cdTAwM2VoYXNoKTtcbiBcbiBcdC8qIHNlbmQgZnJhbWUgd2l0aCBsb2NhbCBlY2hvIGVuYWJsZWQgKi9cbiBcdGNhbl9zZW5kX3JldCA9IGNhbl9zZW5kKHNrYiwgMSk7XG5AQCAtODg3LDcgJiM0Mzs5NjksNiBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3ZfZWNobyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWRhdGE7XG4gXHRzdHJ1Y3QgaXNvdHBfc29jayAqc28gPSBpc290cF9zayhzayk7XG4tXHRzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cdTAwM2VkYXRhO1xuIFxuIFx0Lyogb25seSBoYW5kbGUgbXkgb3duIGxvY2FsIGVjaG8gQ0YvU0Ygc2tiJiMzOTtzIChubyBGRiEpICovXG4gXHRpZiAoc2tiLVx1MDAzZXNrICE9IHNrKVxuQEAgLTg5OSwzMiAmIzQzOzk4MCwzNSBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3ZfZWNobyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuIFxuIFx0Lyogc28tXHUwMDNlY2ZlY2hvIG1heSBzaW5jZSBiZWxvbmcgdG8gYSBuZXcgdHJhbnNmZXI7IHJlY2hlY2sgdW5kZXIgbG9jayAqL1xuLVx0aWYgKHNvLVx1MDAzZWNmZWNobyAhPSAqKHUzMiAqKWNmLVx1MDAzZWRhdGEpXG4mIzQzO1x0aWYgKFJFQURfT05DRShzby1cdTAwM2VjZmVjaG8pICE9IHNrYi1cdTAwM2VoYXNoKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBjYW5jZWwgbG9jYWwgZWNobyB0aW1lb3V0ICovXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VlY2hvdGltZXIpO1xuIFxuIFx0LyogbG9jYWwgZWNobyBza2Igd2l0aCBjb25zZWN1dGl2ZSBmcmFtZSBoYXMgYmVlbiBjb25zdW1lZCAqL1xuLVx0c28tXHUwMDNlY2ZlY2hvID0gMDtcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4gXG4gXHQvKiBjbGFpbWluZyBhIHRyYW5zZmVyIGFsc28gdGFrZXMgc28tXHUwMDNlcnhfbG9jaywgc28gYSBwbGFpbiByZWNoZWNrXG4gXHQgKiBpcyBlbm91Z2g6IHNvLVx1MDAzZXR4LnN0YXRlIGNhbiYjMzk7dCBoYXZlIGZsaXBwZWQgdG8gSVNPVFBfU0VORElORyBmb3JcbiBcdCAqIGEgbmV3IGNsYWltIHdoaWxlIHdlJiMzOTtyZSBzdGlsbCBpbiBoZXJlXG4gXHQgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9TRU5ESU5HKVxuJiM0MztcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpICE9IElTT1RQX1NFTkRJTkcpXG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcbiBcdGlmIChzby1cdTAwM2V0eC5pZHggXHUwMDNlPSBzby1cdTAwM2V0eC5sZW4pIHtcbiBcdFx0Lyogd2UgYXJlIGRvbmUgKi9cbi1cdFx0c28tXHUwMDNldHguc3RhdGUgPSBJU09UUF9JRExFO1xuJiM0MztcbiYjNDM7XHRcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIHNvLVx1MDAzZXR4X2dlbiwgMCk7XG4mIzQzO1x0XHQvKiBzZXQgdG8gSURMRSBhZnRlciBwdWJsaXNoaW5nIHR4X3Jlc3VsdCAqL1xuJiM0MztcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c28tXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbiBcbiBcdGlmIChzby1cdTAwM2V0eGZjLmJzIFx1MDAyNlx1MDAyNiBzby1cdTAwM2V0eC5icyBcdTAwM2U9IHNvLVx1MDAzZXR4ZmMuYnMpIHtcbiBcdFx0Lyogc3RvcCBhbmQgd2FpdCBmb3IgRkMgd2l0aCB0aW1lb3V0ICovXG4tXHRcdHNvLVx1MDAzZXR4LnN0YXRlID0gSVNPVFBfV0FJVF9GQztcbiYjNDM7XHRcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIElTT1RQX1dBSVRfRkMpO1xuIFx0XHRocnRpbWVyX3N0YXJ0KFx1MDAyNnNvLVx1MDAzZXR4dGltZXIsIGt0aW1lX3NldChJU09UUF9GQ19USU1FT1VULCAwKSxcbiBcdFx0XHQgICAgICBIUlRJTUVSX01PREVfUkVMX1NPRlQpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtOTQ2LDE2ICYjNDM7MTAzMCwyMCBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3ZfZWNobyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4gfVxuIFxuLS8qIHNoYXJlZCBieSBzby1cdTAwM2V0eHRpbWVyJiMzOTtzIGFuZCBzby1cdTAwM2VlY2hvdGltZXImIzM5O3MgY2FsbGJhY2tzLiBCb3RoIHRpbWVycyBnZXRcbi0gKiBjYW5jZWxsZWQgdW5kZXIgc28tXHUwMDNlcnhfbG9jayBlbHNld2hlcmUsIHNvIHRoaXMgbXVzdCBzdGF5IGxvY2stZnJlZSB0b1xuLSAqIGF2b2lkIGRlYWRsb2NraW5nIHdpdGggdGhhdDsgdXNlcyBzby1cdTAwM2V0eF9nZW4gaW5zdGVhZCB0byBhdm9pZCB0YWludGluZ1xuLSAqIGEgbmV3IHRyYW5zZmVyIHdpdGggYW4gZXJyb3IgZnJvbSB0aGUgb25lIHRoYXQganVzdCB0aW1lZCBvdXQuXG4mIzQzOy8qIGlzb3RwX3R4X3RpbWVvdXQ6IHdlIGRpZCBub3QgZ2V0IGFueSBmbG93IGNvbnRyb2wgb3IgZWNobyBmcmFtZSBpbiB0aW1lXG4mIzQzOyAqXG4mIzQzOyAqIFNoYXJlZCBieSBzby1cdTAwM2V0eHRpbWVyJiMzOTtzIGFuZCBzby1cdTAwM2VlY2hvdGltZXImIzM5O3MgY2FsbGJhY2tzLiBCb3RoIHRpbWVycyBnZXRcbiYjNDM7ICogY2FuY2VsbGVkIHVuZGVyIHNvLVx1MDAzZXJ4X2xvY2sgZWxzZXdoZXJlLCBzbyB0aGlzIG11c3Qgc3RheSBsb2NrLWZyZWUuXG4mIzQzOyAqXG4mIzQzOyAqIHR4LnN0YXRlIGlzIGFjcXVpcmVkIGJlZm9yZSB0eF9nZW4uIENvbW1vbiBzZXF1ZW5jZSBpbiBpc290cF90eF9nZW5fZG9uZSgpLlxuJiM0MzsgKiBjbXB4Y2hnKCkgb25seSBvcmRlcnMgaXRzZWxmLCBub3QgdGhlIHR3byBwcmVjZWRpbmcgbG9hZHMuXG4gICovXG4gc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4X3RpbWVvdXQoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNvLVx1MDAzZXNrO1xuJiM0MztcdC8qIHJlYWQgdHguc3RhdGUgZmlyc3QgZm9yIHRoZSBjb21tb24gc2VxdWVuY2UgKi9cbiYjNDM7XHR1MzIgb2xkX3N0YXRlID0gc21wX2xvYWRfYWNxdWlyZShcdTAwMjZzby1cdTAwM2V0eC5zdGF0ZSk7XG4gXHR1MzIgZ2VuID0gUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbik7XG4tXHR1MzIgb2xkX3N0YXRlID0gUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKTtcbiBcbiBcdC8qIGRvbiYjMzk7dCBoYW5kbGUgdGltZW91dHMgaW4gSURMRSBvciBTSFVURE9XTiBzdGF0ZSAqL1xuIFx0aWYgKG9sZF9zdGF0ZSA9PSBJU09UUF9JRExFIHx8IG9sZF9zdGF0ZSA9PSBJU09UUF9TSFVURE9XTilcbkBAIC05NjUsMTQgJiM0MzsxMDUzLDE0IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eF90aW1lb3V0KHN0cnVjdCBpc290cF9zb2NrICpzbylcbiBcdGlmIChjbXB4Y2hnKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlLCBvbGRfc3RhdGUsIElTT1RQX0lETEUpICE9IG9sZF9zdGF0ZSlcbiBcdFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xuIFxuLVx0Lyogd2UgZGlkIG5vdCBnZXQgYW55IGZsb3cgY29udHJvbCBvciBlY2hvIGZyYW1lIGluIHRpbWUgKi9cbiYjNDM7XHQvKiBkZXRlY3RlZCB0aW1lb3V0OiByZXBvcnQgJiMzOTtjb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQmIzM5OyAqL1xuIFxuLVx0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eF9nZW4pID09IGdlbikge1xuLVx0XHQvKiByZXBvcnQgJiMzOTtjb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQmIzM5OyAqL1xuLVx0XHRzay1cdTAwM2Vza19lcnIgPSBFQ09NTTtcbi1cdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4tXHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbi1cdH1cbiYjNDM7XHQvKiBhIHN0YWxlIHJlYWQgb2YgdGhpcyBzbG90IGJ5IGEgd2FpdGVyIHN0aWxsIGZhbGxzIGJhY2sgdG8gRUNPTU0gKi9cbiYjNDM7XHRpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBnZW4sIEVDT01NKTtcbiYjNDM7XG4mIzQzO1x0c2stXHUwMDNlc2tfZXJyID0gRUNPTU07XG4mIzQzO1x0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4mIzQzO1x0XHRza19lcnJvcl9yZXBvcnQoc2spO1xuIFxuIFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnNvLVx1MDAzZXdhaXQpO1xuIFxuQEAgLTEwMDcsNyAmIzQzOzEwOTUsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfdHhmcl90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxuIFx0XHQgICAgICBIUlRJTUVSX01PREVfUkVMX1NPRlQpO1xuIFxuIFx0LyogY2ZlY2hvIHNob3VsZCBiZSBjb25zdW1lZCBieSBpc290cF9yY3ZfZWNobygpIGhlcmUgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9TRU5ESU5HIFx1MDAyNlx1MDAyNiAhc28tXHUwMDNlY2ZlY2hvKVxuJiM0MztcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NFTkRJTkcgXHUwMDI2XHUwMDI2ICFSRUFEX09OQ0Uoc28tXHUwMDNlY2ZlY2hvKSlcbiBcdFx0aXNvdHBfc2VuZF9jZnJhbWUoc28pO1xuIFxuIFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xuQEAgLTEwMjYsMTAgJiM0MzsxMTE0LDEyIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0czY0IGhydGltZXJfc2VjID0gSVNPVFBfRUNIT19USU1FT1VUO1xuIFx0c3RydWN0IGhydGltZXIgKnR4X2hydCA9IFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lcjtcbiBcdHUzMiBuZXdfc3RhdGUgPSBJU09UUF9TRU5ESU5HO1xuJiM0MztcdHUzMiBteV9nZW47XG4mIzQzO1x0dTMyIG9sZF9jZmVjaG87XG4gXHRpbnQgb2ZmO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmICghc28tXHUwMDNlYm91bmQgfHwgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfU0hVVERPV04pXG4mIzQzO1x0aWYgKCFzby1cdTAwM2Vib3VuZCB8fCBSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4gXHQvKiBjbGFpbSB0aGUgc29ja2V0IHVuZGVyIHNvLVx1MDAzZXJ4X2xvY2s6IHRoaXMgc2VyaWFsaXplcyB0aGUgY2xhaW1cbkBAIC0xMDQ2LDI5ICYjNDM7MTEzNiwzMyBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0aWYgKG1zZy1cdTAwM2Vtc2dfZmxhZ3MgXHUwMDI2IE1TR19ET05UV0FJVClcbiBcdFx0XHRyZXR1cm4gLUVBR0FJTjtcbiBcbi1cdFx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKVxuJiM0MztcdFx0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04pXG4gXHRcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuIFxuIFx0XHQvKiB3YWl0IGZvciBjb21wbGV0ZSB0cmFuc21pc3Npb24gb2YgY3VycmVudCBwZHUgKi9cbiBcdFx0ZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVx1MDAzZXdhaXQsXG4tXHRcdFx0XHRcdCAgICAgICBzby1cdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9JRExFKTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX0lETEUgfHxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0LyogbmV3IHRyYW5zZmVyOiBidW1wIHNvLVx1MDAzZXR4X2dlbiBhbmQgZHJhaW4gdGhlIG9sZCBvbmUmIzM5O3MgdGltZXJzLFxuLVx0ICogc3RpbGwgdW5kZXIgdGhlIHNvLVx1MDAzZXJ4X2xvY2sgd2UganVzdCBjbGFpbWVkIHRoZSBzb2NrZXQgd2l0aFxuLVx0ICovXG4tXHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcbi1cdFdSSVRFX09OQ0Uoc28tXHUwMDNldHhfZ2VuLCBSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSAmIzQzOyAxKTtcbiYjNDM7XHQvKiB0eGZydGltZXImIzM5O3MgY2FsbGJhY2sgcmUtYXJtcyBlY2hvdGltZXIgbG9jay1mcmVlOiBkcmFpbiBpdCBmaXJzdCAqL1xuJiM0MztcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZXR4ZnJ0aW1lcik7XG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eHRpbWVyKTtcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lcik7XG4tXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eGZydGltZXIpO1xuLVx0c28tXHUwMDNlY2ZlY2hvID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogbmV3IHRyYW5zZmVyOiBpbmNyZW1lbnQgc28tXHUwMDNldHhfZ2VuIGFuZCBzZXQgdHguc3RhdGUgYWZ0ZXIgYmFycmllciAqL1xuJiM0MztcdG15X2dlbiA9IGlzb3RwX2luY190eF9nZW4oUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikpO1xuJiM0MztcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIG15X2dlbiwgRUNPTU0pOyAvKiBwcmV2ZW50IHN0YWxlIHNsb3QgbWF0Y2hpbmcgKi9cbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4X2dlbiwgbXlfZ2VuKTtcbiYjNDM7XHRzbXBfd21iKCk7IC8qIHNlZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gaXNvdHBfdHhfW3RpbWVvdXR8Z2VuX2RvbmVdICovXG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2VjZmVjaG8sIDApO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4gXG4gXHQvKiBzby1cdTAwM2Vib3VuZCBpcyBvbmx5IGNoZWNrZWQgb25jZSBhYm92ZSAtIGEgd2FrZXVwIG1heSBoYXZlXG4tXHQgKiB1bmJvdW5kL3JlYm91bmQgdGhlIHNvY2tldCBtZWFud2hpbGUsIHNvIHJlLXZhbGlkYXRlIGl0XG4mIzQzO1x0ICogdW5ib3VuZC9yZWJvdW5kIHRoZSBzb2NrZXQgbWVhbndoaWxlID1cdTAwM2UgcmVjaGVja1xuIFx0ICovXG4gXHRpZiAoIXNvLVx1MDAzZWJvdW5kKSB7XG4gXHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuQEAgLTExMjcsNiAmIzQzOzEyMjEsOSBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcbiBcdGNzeC1cdTAwM2VjYW5faWlmID0gZGV2LVx1MDAzZWlmaW5kZXg7XG4gXG4mIzQzO1x0Lyogc2V0IHVpZCBpbiB0eCBza2IgdG8gaWRlbnRpZnkgQ0YgZWNobyBmcmFtZXMgKi9cbiYjNDM7XHRjYW5fc2V0X3NrYl91aWQoc2tiKTtcbiYjNDM7XG4gXHRzby1cdTAwM2V0eC5sZW4gPSBzaXplO1xuIFx0c28tXHUwMDNldHguaWR4ID0gMDtcbiBcbkBAIC0xMTM0LDggJiM0MzsxMjMxLDkgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRza2JfcHV0X3plcm8oc2tiLCBzby1cdTAwM2VsbC5tdHUpO1xuIFxuIFx0LyogY2ZlY2hvIHNob3VsZCBoYXZlIGJlZW4gemVybyYjMzk7ZWQgYnkgaW5pdCAvIGZvcm1lciBpc290cF9yY3ZfZWNobygpICovXG4tXHRpZiAoc28tXHUwMDNlY2ZlY2hvKVxuLVx0XHRwcl9ub3RpY2Vfb25jZShcJiMzNDtjYW4taXNvdHA6IHVuaW5pdCBjZmVjaG8gJTA4WFxcblwmIzM0Oywgc28tXHUwMDNlY2ZlY2hvKTtcbiYjNDM7XHRvbGRfY2ZlY2hvID0gUkVBRF9PTkNFKHNvLVx1MDAzZWNmZWNobyk7XG4mIzQzO1x0aWYgKG9sZF9jZmVjaG8pXG4mIzQzO1x0XHRwcl9ub3RpY2Vfb25jZShcJiMzNDtjYW4taXNvdHA6IHVuaW5pdCBjZmVjaG8gJTA4WFxcblwmIzM0Oywgb2xkX2NmZWNobyk7XG4gXG4gXHQvKiBjaGVjayBmb3Igc2luZ2xlIGZyYW1lIHRyYW5zbWlzc2lvbiBkZXBlbmRpbmcgb24gVFhfREwgKi9cbiBcdGlmIChzaXplIFx1MDAzYz0gc28tXHUwMDNldHgubGxfZGwgLSBTRl9QQ0lfU1o0IC0gYWUgLSBvZmYpIHtcbkBAIC0xMTYzLDcgJiM0MzsxMjYxLDcgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0Y2YtXHUwMDNlZGF0YVthZV0gfD0gc2l6ZTtcbiBcbiBcdFx0Lyogc2V0IENGIGVjaG8gdGFnIGZvciBpc290cF9yY3ZfZWNobygpIChTRi1tb2RlKSAqL1xuLVx0XHRzby1cdTAwM2VjZmVjaG8gPSAqKHUzMiAqKWNmLVx1MDAzZWRhdGE7XG4mIzQzO1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgc2tiLVx1MDAzZWhhc2gpO1xuIFx0fSBlbHNlIHtcbiBcdFx0Lyogc2VuZCBmaXJzdCBmcmFtZSAqL1xuIFxuQEAgLTExODAsNyAmIzQzOzEyNzgsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdFx0XHRzby1cdTAwM2V0eGZjLmJzID0gMDtcbiBcbiBcdFx0XHQvKiBzZXQgQ0YgZWNobyB0YWcgZm9yIGlzb3RwX3Jjdl9lY2hvKCkgKENGLW1vZGUpICovXG4tXHRcdFx0c28tXHUwMDNlY2ZlY2hvID0gKih1MzIgKiljZi1cdTAwM2VkYXRhO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgc2tiLVx1MDAzZWhhc2gpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIHN0YW5kYXJkIGZsb3cgY29udHJvbCBjaGVjayAqL1xuIFx0XHRcdG5ld19zdGF0ZSA9IElTT1RQX1dBSVRfRklSU1RfRkM7XG5AQCAtMTE5MCwxMiAmIzQzOzEyODgsMTIgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0dHhfaHJ0ID0gXHUwMDI2c28tXHUwMDNldHh0aW1lcjtcbiBcbiBcdFx0XHQvKiBubyBDRiBlY2hvIHRhZyBmb3IgaXNvdHBfcmN2X2VjaG8oKSAoRkYtbW9kZSkgKi9cbi1cdFx0XHRzby1cdTAwM2VjZmVjaG8gPSAwO1xuJiM0MztcdFx0XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4gXHRcdH1cbiBcdH1cbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9TSFVURE9XTikge1xuJiM0MztcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKSB7XG4gXHRcdC8qIGlzb3RwX3JlbGVhc2UoKSBoYXMgc2luY2UgdGFrZW4gb3ZlciBhbmQgYWxyZWFkeSBkcmFpbmVkXG4gXHRcdCAqIG91ciB0aW1lcnMgLSBkb24mIzM5O3Qgc2VuZCBpbnRvIGEgc29ja2V0IHRoYXQmIzM5O3MgZ29pbmcgYXdheVxuIFx0XHQgKi9cbkBAIC0xMjA2LDcgJiM0MzsxMzA0LDcgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdH1cbiBcdC8qIFdBSVRfRklSU1RfRkMgZm9yIHN0YW5kYXJkIEZGLCBlbHNlIHN0YXlzIElTT1RQX1NFTkRJTkcgKi9cbi1cdHNvLVx1MDAzZXR4LnN0YXRlID0gbmV3X3N0YXRlO1xuJiM0MztcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIG5ld19zdGF0ZSk7XG4gXHRocnRpbWVyX3N0YXJ0KHR4X2hydCwga3RpbWVfc2V0KGhydGltZXJfc2VjLCAwKSxcbiBcdFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9TT0ZUKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuQEAgLTEyMjMsMjAgJiM0MzsxMzIxLDQ5IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdCAgICAgICBfX2Z1bmNfXywgRVJSX1BUUihlcnIpKTtcbiBcbiBcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcbiYjNDM7XHRcdC8qIG5ldyB0cmFuc2ZlciBhbHJlYWR5IGNsYWltZWQgYnkgYSBjb25jdXJyZW50IGNvbXBsZXRpb24sXG4mIzQzO1x0XHQgKiB0aW1lb3V0IG9yIHNlbmRtc2coKSB3aGlsZSB3ZSB3ZXJlIHN0dWNrIGluIGNhbl9zZW5kKCk/XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSAhPSBteV9nZW4pIHtcbiYjNDM7XHRcdFx0LyogZG9uJiMzOTt0IHRvdWNoIHRpbWVycyBhbmQgc3RhdGUgb2YgdGhlIG5ldyB0cmFuc2ZlciAqL1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIG5vIHRyYW5zbWlzc2lvbiAtXHUwMDNlIG5vIHRpbWVvdXQgbW9uaXRvcmluZyAqL1xuIFx0XHRocnRpbWVyX2NhbmNlbCh0eF9ocnQpO1xuIFx0XHRnb3RvIGVycl9vdXRfZHJvcF9sb2NrZWQ7XG4gXHR9XG4gXG4gXHRpZiAod2FpdF90eF9kb25lKSB7XG4tXHRcdC8qIHdhaXQgZm9yIGNvbXBsZXRlIHRyYW5zbWlzc2lvbiBvZiBjdXJyZW50IHBkdSAqL1xuLVx0XHRlcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCwgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfSURMRSk7XG4mIzQzO1x0XHQvKiB3YWtlIHVwIGZvcjpcbiYjNDM7XHRcdCAqIC0gY29uY3VycmVudCBzZW5kbXNnKCkgY2xhaW1pbmcgYSBuZXcgdHJhbnNmZXJcbiYjNDM7XHRcdCAqIC0gY29tcGxldGUgdHJhbnNtaXNzaW9uIG9mIGN1cnJlbnQgUERVXG4mIzQzO1x0XHQgKiAtIHNodXRkb3duIHN0YXRlIGNoYW5nZSBpbiBpc290cF9yZWxlYXNlKClcbiYjNDM7XHRcdCAqIGlzb3RwX3R4X2dlbl9kb25lKCkgdXNlcyBjb21tb24gdHguc3RhdGUvdHhfZ2VuIHJlYWQgc2VxdWVuY2VcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVx1MDAzZXdhaXQsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgaXNvdHBfdHhfZ2VuX2RvbmUoc28sIG15X2dlbikpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGdvdG8gZXJyX2V2ZW50X2Ryb3A7XG4gXG4tXHRcdGVyciA9IHNvY2tfZXJyb3Ioc2spO1xuLVx0XHRpZiAoZXJyKVxuLVx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHQvKiBzdGlsbCBvdXIgY2xhaW0sIGJ1dCBpc290cF9yZWxlYXNlKCkgZm9yY2Utc2h1dCBpdCBkb3duICovXG4mIzQzO1x0XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZzby1cdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgPT0gbXlfZ2VuKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuJiM0MztcdFx0XHRnb3RvIGVycl9ldmVudF9kcm9wO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIG93biBjb21wbGV0aW9uLCBvciB0eF9nZW4gbW92ZWQgb24gLSBlaXRoZXIgd2F5IHRoaXMgaXNcbiYjNDM7XHRcdCAqIHdoYXQgaXNvdHBfZ2V0X3R4X3Jlc3VsdCgpIHJlY29yZGVkIGZvciBteV9nZW5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZXJyID0gaXNvdHBfZ2V0X3R4X3Jlc3VsdChzbywgbXlfZ2VuKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBkcmFpbiB0byBhdm9pZCBzdGFsZSBlcnJvciBmb3IgYSBsYXRlciBwb2xsKCkvU09fRVJST1IgKi9cbiYjNDM7XHRcdHNvY2tfZXJyb3Ioc2spO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBlcnIgPyBlcnIgOiBzaXplO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHNpemU7XG5AQCAtMTI0NiwxNSAmIzQzOzEzNzMsMjYgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4gXHRnb3RvIGVycl9vdXRfZHJvcF9sb2NrZWQ7XG4gZXJyX2V2ZW50X2Ryb3A6XG4tXHQvKiBpbnRlcnJ1cHRlZCB3YWl0aW5nIG9uIG91ciBvd24gdHJhbnNmZXIgLSBkcmFpbiBpdHMgdGltZXJzICovXG4mIzQzO1x0LyogaW50ZXJydXB0ZWQgb3Igc2h1dCBkb3duIHdoaWxlIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAqL1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBuZXcgdHJhbnNmZXIgYWxyZWFkeSBzdGFydGVkIGJ5IGNvbmN1cnJlbnQgc2VuZG1zZygpPyAqL1xuJiM0MztcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSAhPSBteV9nZW4pIHtcbiYjNDM7XHRcdC8qIGRvbiYjMzk7dCB0b3VjaCB0aW1lcnMgYW5kIHN0YXRlcyBvZiB0aGUgbmV3IHRyYW5zZmVyICovXG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZXR4ZnJ0aW1lcik7XG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eHRpbWVyKTtcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lcik7XG4gZXJyX291dF9kcm9wX2xvY2tlZDpcbiBcdC8qIHJlbGVhc2UgdGhlIGNsYWltOyBzby1cdTAwM2VyeF9sb2NrIHN0aWxsIGhlbGQgZnJvbSBhYm92ZSAqL1xuLVx0c28tXHUwMDNlY2ZlY2hvID0gMDtcbi1cdHNvLVx1MDAzZXR4LnN0YXRlID0gSVNPVFBfSURMRTtcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4mIzQzO1xuJiM0MztcdC8qIG9ubHkgY2xhaW0gdG8gSURMRSBpZiBpc290cF9yZWxlYXNlKCkgaGFzIG5vdCB0YWtlbiBvdmVyICovXG4mIzQzO1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfU0hVVERPV04pXG4mIzQzO1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuIFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnNvLVx1MDAzZXdhaXQpO1xuIFxuQEAgLTEzMjAsOCAmIzQzOzE0NTgsOSBAQCBzdGF0aWMgaW50IGlzb3RwX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdC8qIGJlc3QtZWZmb3J0OiB3YWl0IGZvciBhIHJ1bm5pbmcgcGR1IHRvIGZpbmlzaCwgYnV0IGRvbiYjMzk7dCBibG9jayBvblxuIFx0ICogaXQgZm9yZXZlciAtIGdpdmUgdXAgYWZ0ZXIgdGhlIGZpcnN0IHNpZ25hbFxuIFx0ICovXG4tXHR3aGlsZSAoc28tXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCwgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfSURMRSkgPT0gMClcbiYjNDM7XHR3aGlsZSAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9JRExFIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCxcbiYjNDM7XHRcdFx0XHRcdFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfSURMRSkgPT0gMClcbiBcdFx0O1xuIFxuIFx0LyogY2xhaW0gdGhlIHNvY2tldCB1bmRlciBzby1cdTAwM2VyeF9sb2NrIGxpa2Ugc2VuZG1zZygpIGRvZXMsIHNvIGl0c1xuQEAgLTEzMjksOSAmIzQzOzE0NjgsMTIgQEAgc3RhdGljIGludCBpc290cF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXHQgKiB1bmNvbmRpdGlvbmFsbHksIGV2ZW4gd2hlbiBhIHNpZ25hbCBjdXQgdGhlIHdhaXQgYWJvdmUgc2hvcnRcbiBcdCAqL1xuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuLVx0c28tXHUwMDNldHguc3RhdGUgPSBJU09UUF9TSFVURE9XTjtcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TSFVURE9XTik7XG4gXHRzcGluX3VubG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbi1cdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbiYjNDM7XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiYjNDM7XG4mIzQzO1x0LyogZm9yY2VkIFNIVVRET1dOIG1heSBoYXZlIHNraXBwZWQgSURMRSAoZ2F2ZSB1cCBvbiBhIHNpZ25hbCkgKi9cbiYjNDM7XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2aXNvdHBfbm90aWZpZXJfbG9jayk7XG4gXHR3aGlsZSAoaXNvdHBfYnVzeV9ub3RpZmllciA9PSBzbykge1xuQEAgLTE0NDcsNyAmIzQzOzE1ODksOCBAQCBzdGF0aWMgaW50IGlzb3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbFxuIFx0ICogd2l0aCBzby1cdTAwM2Vib3VuZCBpbiB0aGUgc2FtZSBsb2NrX3NvY2soKSBzZWN0aW9uIGFib3ZlLCBzbyB0aGVyZSBpc1xuIFx0ICogbm8gd2luZG93IGluIHdoaWNoIGEgY29uY3VycmVudCBpc290cF9ub3RpZnkoKSBjb3VsZCBiZSBtaXNzZWQuXG4gXHQgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFIHx8IHNvLVx1MDAzZXJ4LnN0YXRlICE9IElTT1RQX0lETEUpIHtcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9JRExFIHx8XG4mIzQzO1x0ICAgIFJFQURfT05DRShzby1cdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfSURMRSkge1xuIFx0XHRlcnIgPSAtRUFHQUlOO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xNDgxLDcgJiM0MzsxNjI0LDcgQEAgc3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxcbiBcdFx0XHRcdGlzb3RwX3Jjdiwgc2ssIFwmIzM0O2lzb3RwXCYjMzQ7LCBzayk7XG4gXG4gXHQvKiBubyBjb25zZWN1dGl2ZSBmcmFtZSBlY2hvIHNrYiBpbiBmbGlnaHQgKi9cbi1cdHNvLVx1MDAzZWNmZWNobyA9IDA7XG4mIzQzO1x0V1JJVEVfT05DRShzby1cdTAwM2VjZmVjaG8sIDApO1xuIFxuIFx0LyogcmVnaXN0ZXIgZm9yIGVjaG8gc2tiJiMzOTtzICovXG4gXHRjYW5fcnhfcmVnaXN0ZXIobmV0LCBkZXYsIHR4X2lkLCBTSU5HTEVfTUFTSyh0eF9pZCksXG5AQCAtMTg0Nyw3ICYjNDM7MTk5MCw3IEBAIHN0YXRpYyBfX3BvbGxfdCBpc290cF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBwb2xsX3RhYmxlICp3XG4gXHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2c28tXHUwMDNld2FpdCwgd2FpdCk7XG4gXG4gXHQvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byBUWCBzdGF0ZSAqL1xuLVx0aWYgKChtYXNrIFx1MDAyNiBFUE9MTFdSTk9STSkgXHUwMDI2XHUwMDI2IChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFKSlcbiYjNDM7XHRpZiAoKG1hc2sgXHUwMDI2IEVQT0xMV1JOT1JNKSBcdTAwMjZcdTAwMjYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSkpXG4gXHRcdG1hc2sgXHUwMDI2PSB+KEVQT0xMT1VUIHwgRVBPTExXUk5PUk0pO1xuIFxuIFx0cmV0dXJuIG1hc2s7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7Q0FOX0RFViYjMzQ7LAogICAgJiMzNDtDQU5fVkNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lzb3RwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXNvdHBfYmluZCYjMzQ7LAogICAgJiMzNDtpc290cF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2lzb3RwX3BvbGwmIzM0OywKICAgICYjMzQ7aXNvdHBfcmN2JiMzNDssCiAgICAmIzM0O2lzb3RwX3Jjdl9lY2hvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDQU4gSVNPVFAgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gZml4IGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBUWC9SWCBzdGF0ZSBoYW5kbGluZyBhbmQgdHJhbnNmZXIgZ2VuZXJhdGlvbiB0cmFja2luZy4gSXQgaW50cm9kdWNlcyBhIG5ldyB0eF9yZXN1bHQgYXJyYXkgYW5kIHVzZXMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgZm9yIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgdGhlIElTT1RQIHByb3RvY29sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDI5NTI3MWQxOTc5NzM1MWIzNmMzY2M1MGY3Y2RhM2IxMzE3YjBlNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDA3OjEyOjU0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9pc290cC5jIGIvbmV0L2Nhbi9pc290cC5jCmluZGV4IDU0YmVjYWY2ODk4ZjEzLi4xZjExYzY2YjM0M2M4NiAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9pc290cC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jYW4vaXNvdHAuYwpAQCAtMTI3LDYgJiM0MzsxMjcsMTUgQEAgTU9EVUxFX1BBUk1fREVTQyhtYXhfcGR1X3NpemUsICYjMzQ7bWF4aW11bSBpc290cCBwZHUgc2l6ZSAoZGVmYXVsdCAmIzM0OwogI2RlZmluZSBJU09UUF9GQ19USU1FT1VUIDEJLyogMSBzZWMgKi8KICNkZWZpbmUgSVNPVFBfRUNIT19USU1FT1VUIDIJLyogMiBzZWNzICovCiAKJiM0MzsvKiBzby0mZ3Q7dHhfcmVzdWx0W3NvLSZndDt0eF9nZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdIGhvbGRzIHRoZSBwYWNrZWQgdmFsdWUKJiM0MzsgKiAoZXJyICZsdDsmbHQ7IElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUyB8IGdlbikgZm9yIGVhY2ggdHggZ2VuZXJhdGlvbiBzbG90LCBzbyBpdAomIzQzOyAqIGNhbiBiZSBoYW5kbGVkIHdpdGggYSBzaW5nbGUgUkVBRF9PTkNFKCkvV1JJVEVfT05DRSgpIGFjY2Vzcy4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9TTE9UUyA0CiYjNDM7I2RlZmluZSBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMgMjQKJiM0MzsjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSyAoKDFVICZsdDsmbHQ7IElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUykgLSAxKQomIzQzOyNkZWZpbmUgSVNPVFBfVFhfUkVTVUxUX0VSUl9NQVNLIDB4RkYKJiM0MzsKIGVudW0gewogCUlTT1RQX0lETEUgPSAwLAogCUlTT1RQX1dBSVRfRklSU1RfRkMsCkBAIC0xNjYsNyAmIzQzOzE3NSw4IEBAIHN0cnVjdCBpc290cF9zb2NrIHsKIAl1MzIgZm9yY2VfdHhfc3RtaW47CiAJdTMyIGZvcmNlX3J4X3N0bWluOwogCXUzMiBjZmVjaG87IC8qIGNvbnNlY3V0aXZlIGZyYW1lIGVjaG8gdGFnICovCi0JdTMyIHR4X2dlbjsgLyogZ2VuZXJhdGlvbiwgYnVtcGVkIHBlciBuZXcgdHggdHJhbnNmZXIgKi8KJiM0MzsJdTMyIHR4X2dlbjsgLyogdHJhbnNmZXIgZ2VuZXJhdGlvbiwgaW5jcmVhc2VkIHBlciBuZXcgdHggdHJhbnNmZXIgKi8KJiM0MzsJdTMyIHR4X3Jlc3VsdFtJU09UUF9UWF9SRVNVTFRfU0xPVFNdOyAvKiBwZXItZ2VuZXJhdGlvbiByZXN1bHQgc2xvdHMgKi8KIAlzdHJ1Y3QgdHBjb24gcngsIHR4OwogCXN0cnVjdCBsaXN0X2hlYWQgbm90aWZpZXI7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKQEAgLTE3Nyw2ICYjNDM7MTg3LDY1IEBAIHN0YXRpYyBMSVNUX0hFQUQoaXNvdHBfbm90aWZpZXJfbGlzdCk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlzb3RwX25vdGlmaWVyX2xvY2spOwogc3RhdGljIHN0cnVjdCBpc290cF9zb2NrICppc290cF9idXN5X25vdGlmaWVyOwogCiYjNDM7LyogaW5jcmVhc2UgKDI0IGJpdCkgdHggZ2VuZXJhdGlvbiB2YWx1ZSAqLwomIzQzO3N0YXRpYyB1MzIgaXNvdHBfaW5jX3R4X2dlbih1MzIgZ2VuKQomIzQzO3sKJiM0MzsJcmV0dXJuIChnZW4gJiM0MzsgMSkgJmFtcDsgSVNPVFBfVFhfUkVTVUxUX0dFTl9NQVNLOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzdG9yZSA4IGJpdCBlcnJvciBhbmQgMjQgYml0IHR4IGdlbmVyYXRpb24gdmFsdWVzIGluIHBhY2tlZCB1MzIgZWxlbWVudCAqLwomIzQzO3N0YXRpYyB1MzIgaXNvdHBfcGFja190eF9yZXN1bHQodTMyIGdlbiwgaW50IGVycikKJiM0Mzt7CiYjNDM7CXJldHVybiBnZW4gfCAoKHUzMillcnIgJmx0OyZsdDsgSVNPVFBfVFhfUkVTVUxUX0dFTl9CSVRTKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogZ2V0IHRoZSAyNCBiaXQgdHggZ2VuZXJhdGlvbiB2YWx1ZSBmcm9tIHRoZSB0eCByZXN1bHQgKi8KJiM0MztzdGF0aWMgdTMyIGlzb3RwX2dldF90eF9nZW4odTMyIGdlbl9lcnIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZ2VuX2VyciAmYW1wOyBJU09UUF9UWF9SRVNVTFRfR0VOX01BU0s7CiYjNDM7fQomIzQzOwomIzQzOy8qIGdldCB0aGUgOCBiaXQgZXJyb3IgdmFsdWUgZnJvbSB0aGUgdHggcmVzdWx0ICovCiYjNDM7c3RhdGljIHUzMiBpc290cF9nZXRfdHhfZXJyKHUzMiBnZW5fZXJyKQomIzQzO3sKJiM0MzsJcmV0dXJuIChnZW5fZXJyICZndDsmZ3Q7IElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUykgJmFtcDsgSVNPVFBfVFhfUkVTVUxUX0VSUl9NQVNLOwomIzQzO30KJiM0MzsKJiM0MzsvKiBzdG9yZSB0cmFuc2ZlciByZXN1bHQgaW4gcGVyLWdlbmVyYXRpb24lNCBzby0mZ3Q7dHhfcmVzdWx0W10gc2xvdCAqLwomIzQzO3N0YXRpYyB2b2lkIGlzb3RwX3NldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuLCBpbnQgZXJyKQomIzQzO3sKJiM0MzsJV1JJVEVfT05DRShzby0mZ3Q7dHhfcmVzdWx0W2dlbiAlIElTT1RQX1RYX1JFU1VMVF9TTE9UU10sCiYjNDM7CQkgICBpc290cF9wYWNrX3R4X3Jlc3VsdChnZW4sIGVycikpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBmZXRjaCB0aGUgcmVzdWx0IHJlY29yZGVkIGZvciAmIzM5O2dlbiYjMzk7LCBhcyBhIChuZWdhdGl2ZSkgZXJybm8gKDAgZm9yIHN1Y2Nlc3MpICovCiYjNDM7c3RhdGljIGludCBpc290cF9nZXRfdHhfcmVzdWx0KHN0cnVjdCBpc290cF9zb2NrICpzbywgdTMyIGdlbikKJiM0Mzt7CiYjNDM7CXUzMiByZXN1bHQgPSBSRUFEX09OQ0Uoc28tJmd0O3R4X3Jlc3VsdFtnZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdKTsKJiM0MzsKJiM0MzsJaWYgKGlzb3RwX2dldF90eF9nZW4ocmVzdWx0KSAhPSBnZW4pIHsKJiM0MzsJCXByX25vdGljZV9vbmNlKCYjMzQ7Y2FuLWlzb3RwOiB0eF9yZXN1bHRbXSBzbG90IHJldXNlZCBiZWZvcmUgcmVhZFxuJiMzNDspOwomIzQzOwomIzQzOwkJLyogcmVwb3J0IGZhaWx1cmUgcmF0aGVyIHRoYW4gcmlzayBhIGZhbHNlIHN1Y2Nlc3MgKi8KJiM0MzsJCXJldHVybiAtRUNPTU07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIC0oaXNvdHBfZ2V0X3R4X2VycihyZXN1bHQpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogdHJ1ZSBpZiBkb25lLCBzaHV0IGRvd24gb3Igc3VwZXJzZWRlZCAoJiMzOTtnZW4mIzM5OyBpcyBubyBsb25nZXIgdGhlIGFjdGl2ZQomIzQzOyAqIHRyYW5zZmVyKS4gUmVhZHMgdHguc3RhdGUgZmlyc3QgKGFjcXVpcmUpIHNvIHR4X2dlbi90eF9yZXN1bHQgcmVhZHMKJiM0MzsgKiBiZWxvdyBzZWUgYXQgbGVhc3Qgd2hhdCB0aGF0IHN0YXRlIHdyaXRlIHB1Ymxpc2hlZCAoY29tbW9uIHNlcXVlbmNlKS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBpc290cF90eF9nZW5fZG9uZShzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHUzMiBnZW4pCiYjNDM7ewomIzQzOwkvKiByZWFkIHR4LnN0YXRlIGZpcnN0IGZvciB0aGUgY29tbW9uIHNlcXVlbmNlICovCiYjNDM7CXUzMiBzdGF0ZSA9IHNtcF9sb2FkX2FjcXVpcmUoJmFtcDtzby0mZ3Q7dHguc3RhdGUpOwomIzQzOwomIzQzOwlyZXR1cm4gc3RhdGUgPT0gSVNPVFBfSURMRSB8fCBzdGF0ZSA9PSBJU09UUF9TSFVURE9XTiB8fAomIzQzOwkgICAgICAgUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pICE9IGdlbjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpc290cF9zb2NrICppc290cF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJcmV0dXJuIChzdHJ1Y3QgaXNvdHBfc29jayAqKXNrOwpAQCAtMTk5LDcgJiM0MzsyNjgsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikKIAkJCQkJICAgICByeHRpbWVyKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAmYW1wO3NvLSZndDtzazsKIAotCWlmIChzby0mZ3Q7cnguc3RhdGUgPT0gSVNPVFBfV0FJVF9EQVRBKSB7CiYjNDM7CWlmIChSRUFEX09OQ0Uoc28tJmd0O3J4LnN0YXRlKSA9PSBJU09UUF9XQUlUX0RBVEEpIHsKIAkJLyogd2UgZGlkIG5vdCBnZXQgbmV3IGRhdGEgZnJhbWVzIGluIHRpbWUgKi8KIAogCQkvKiByZXBvcnQgJiMzOTtjb25uZWN0aW9uIHRpbWVkIG91dCYjMzk7ICovCkBAIC0yMDgsNyAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF9yeF90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQogCQkJc2tfZXJyb3JfcmVwb3J0KHNrKTsKIAogCQkvKiByZXNldCByeCBzdGF0ZSAqLwotCQlzby0mZ3Q7cnguc3RhdGUgPSBJU09UUF9JRExFOwomIzQzOwkJV1JJVEVfT05DRShzby0mZ3Q7cnguc3RhdGUsIElTT1RQX0lETEUpOwogCX0KIAogCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKQEAgLTM3MiwyMCAmIzQzOzQ0MSwxOSBAQCBzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pOwogc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gJmFtcDtzby0mZ3Q7c2s7CiYjNDM7CWludCB0eF9lcnIgPSBFQkFETVNHOyAvKiBkZWZhdWx0IGZvciB1bmtub3duIEZDIHN0YXR1cyAqLwogCi0JaWYgKHNvLSZndDt0eC5zdGF0ZSAhPSBJU09UUF9XQUlUX0ZDICZhbXA7JmFtcDsKLQkgICAgc28tJmd0O3R4LnN0YXRlICE9IElTT1RQX1dBSVRfRklSU1RfRkMpCiYjNDM7CWlmIChSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZDICZhbXA7JmFtcDsKJiM0MzsJICAgIFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpICE9IElTT1RQX1dBSVRfRklSU1RfRkMpCiAJCXJldHVybiAwOwogCiAJaHJ0aW1lcl9jYW5jZWwoJmFtcDtzby0mZ3Q7dHh0aW1lcik7CiAKIAkvKiBpc290cF90eF90aW1lb3V0KCkgbWF5IGhhdmUgZ2l2ZW4gdXAgb24gdGhpcyBqb2Igd2hpbGUKLQkgKiBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoOyBzby0mZ3Q7cnhfbG9jawotCSAqIChoZWxkIGJ5IG91ciBjYWxsZXIgaXNvdHBfcmN2KCkpIHJ1bGVzIG91dCBhIGNvbmN1cnJlbnQgY2xhaW0sCi0JICogc28gYSBwbGFpbiByZWNoZWNrIGlzIGVub3VnaCBoZXJlLgomIzQzOwkgKiBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoID0mZ3Q7IHJlY2hlY2sKIAkgKi8KLQlpZiAoc28tJmd0O3R4LnN0YXRlICE9IElTT1RQX1dBSVRfRkMgJmFtcDsmYW1wOwotCSAgICBzby0mZ3Q7dHguc3RhdGUgIT0gSVNPVFBfV0FJVF9GSVJTVF9GQykKJiM0MzsJaWYgKFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpICE9IElTT1RQX1dBSVRfRkMgJmFtcDsmYW1wOwomIzQzOwkgICAgUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9GSVJTVF9GQykKIAkJcmV0dXJuIDE7CiAKIAlpZiAoKGNmLSZndDtsZW4gJmx0OyBhZSAmIzQzOyBGQ19DT05URU5UX1NaKSB8fApAQCAtMzk2LDEzICYjNDM7NDY0LDE1IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKQogCQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKIAkJCXNrX2Vycm9yX3JlcG9ydChzayk7CiAKLQkJc28tJmd0O3R4LnN0YXRlID0gSVNPVFBfSURMRTsKJiM0MzsJCWlzb3RwX3NldF90eF9yZXN1bHQoc28sIHNvLSZndDt0eF9nZW4sIEVCQURNU0cpOwomIzQzOwkJLyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c28tJmd0O3R4LnN0YXRlLCBJU09UUF9JRExFKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7c28tJmd0O3dhaXQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBnZXQgc3RhdGljL2R5bmFtaWMgY29tbXVuaWNhdGlvbiBwYXJhbXMgZnJvbSBmaXJzdC9ldmVyeSBGQyBmcmFtZSAqLwotCWlmIChzby0mZ3Q7dHguc3RhdGUgPT0gSVNPVFBfV0FJVF9GSVJTVF9GQyB8fAomIzQzOwlpZiAoUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgPT0gSVNPVFBfV0FJVF9GSVJTVF9GQyB8fAogCSAgICBzby0mZ3Q7b3B0LmZsYWdzICZhbXA7IENBTl9JU09UUF9EWU5fRkNfUEFSTVMpIHsKIAkJc28tJmd0O3R4ZmMuYnMgPSBjZi0mZ3Q7ZGF0YVthZSAmIzQzOyAxXTsKIAkJc28tJmd0O3R4ZmMuc3RtaW4gPSBjZi0mZ3Q7ZGF0YVthZSAmIzQzOyAyXTsKQEAgLTQyNiwxMyAmIzQzOzQ5NiwxMyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mYyhzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSkKIAkJCXNvLSZndDt0eF9nYXAgPSBrdGltZV9hZGRfbnMoc28tJmd0O3R4X2dhcCwKIAkJCQkJCSAgKHNvLSZndDt0eGZjLnN0bWluIC0gMHhGMCkKIAkJCQkJCSAgKiAxMDAwMDApOwotCQlzby0mZ3Q7dHguc3RhdGUgPSBJU09UUF9XQUlUX0ZDOwomIzQzOwkJV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1dBSVRfRkMpOwogCX0KIAogCXN3aXRjaCAoY2YtJmd0O2RhdGFbYWVdICZhbXA7IDB4MEYpIHsKIAljYXNlIElTT1RQX0ZDX0NUUzoKIAkJc28tJmd0O3R4LmJzID0gMDsKLQkJc28tJmd0O3R4LnN0YXRlID0gSVNPVFBfU0VORElORzsKJiM0MzsJCVdSSVRFX09OQ0Uoc28tJmd0O3R4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTsKIAkJLyogc2VuZCBDRiBmcmFtZSBhbmQgZW5hYmxlIGVjaG8gdGltZW91dCBoYW5kbGluZyAqLwogCQlocnRpbWVyX3N0YXJ0KCZhbXA7c28tJmd0O2VjaG90aW1lciwga3RpbWVfc2V0KElTT1RQX0VDSE9fVElNRU9VVCwgMCksCiAJCQkgICAgICBIUlRJTUVSX01PREVfUkVMX1NPRlQpOwpAQCAtNDQ3LDE0ICYjNDM7NTE3LDE5IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKQogCiAJY2FzZSBJU09UUF9GQ19PVkZMVzoKIAkJLyogb3ZlcmZsb3cgb24gcmVjZWl2ZXIgc2lkZSAtIHJlcG9ydCAmIzM5O21lc3NhZ2UgdG9vIGxvbmcmIzM5OyAqLwotCQlzay0mZ3Q7c2tfZXJyID0gRU1TR1NJWkU7Ci0JCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKQotCQkJc2tfZXJyb3JfcmVwb3J0KHNrKTsKJiM0MzsJCXR4X2VyciA9IEVNU0dTSVpFOwogCQlmYWxsdGhyb3VnaDsKIAogCWRlZmF1bHQ6Ci0JCS8qIHN0b3AgdGhpcyB0eCBqb2IgKi8KLQkJc28tJmd0O3R4LnN0YXRlID0gSVNPVFBfSURMRTsKJiM0MzsJCS8qIHJlc2VydmVkL3Vua25vd24gZmxvdyBzdGF0dXMgKHR4X2VyciBkZWZhdWx0cyB0byBFQkFETVNHKSAqLwomIzQzOwomIzQzOwkJc2stJmd0O3NrX2VyciA9IHR4X2VycjsKJiM0MzsJCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKQomIzQzOwkJCXNrX2Vycm9yX3JlcG9ydChzayk7CiYjNDM7CiYjNDM7CQlpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBzby0mZ3Q7dHhfZ2VuLCB0eF9lcnIpOwomIzQzOwkJLyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c28tJmd0O3R4LnN0YXRlLCBJU09UUF9JRExFKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7c28tJmd0O3dhaXQpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ2Nyw3ICYjNDM7NTQyLDcgQEAgc3RhdGljIGludCBpc290cF9yY3Zfc2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgcGNpbGVuLAogCXN0cnVjdCBza19idWZmICpuc2tiOwogCiAJaHJ0aW1lcl9jYW5jZWwoJmFtcDtzby0mZ3Q7cnh0aW1lcik7Ci0Jc28tJmd0O3J4LnN0YXRlID0gSVNPVFBfSURMRTsKJiM0MzsJV1JJVEVfT05DRShzby0mZ3Q7cnguc3RhdGUsIElTT1RQX0lETEUpOwogCiAJaWYgKCFsZW4gfHwgbGVuICZndDsgY2YtJmd0O2xlbiAtIHBjaWxlbikKIAkJcmV0dXJuIDE7CkBAIC01MDEsNyAmIzQzOzU3Niw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKQogCWludCBmZl9wY2lfc3o7CiAKIAlocnRpbWVyX2NhbmNlbCgmYW1wO3NvLSZndDtyeHRpbWVyKTsKLQlzby0mZ3Q7cnguc3RhdGUgPSBJU09UUF9JRExFOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtyeC5zdGF0ZSwgSVNPVFBfSURMRSk7CiAKIAkvKiBnZXQgdGhlIHVzZWQgc2VuZGVyIExMX0RMIGZyb20gdGhlIChmaXJzdCkgQ0FOIGZyYW1lIGRhdGEgbGVuZ3RoICovCiAJc28tJmd0O3J4LmxsX2RsID0gcGFkbGVuKGNmLSZndDtsZW4pOwpAQCAtNTU1LDcgJiM0Mzs2MzAsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSkKIAogCS8qIGluaXRpYWwgc2V0dXAgZm9yIHRoaXMgcGR1IHJlY2VwdGlvbiAqLwogCXNvLSZndDtyeC5zbiA9IDE7Ci0Jc28tJmd0O3J4LnN0YXRlID0gSVNPVFBfV0FJVF9EQVRBOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtyeC5zdGF0ZSwgSVNPVFBfV0FJVF9EQVRBKTsKIAogCS8qIG5vIGNyZWF0aW9uIG9mIGZsb3cgY29udHJvbCBmcmFtZXMgKi8KIAlpZiAoc28tJmd0O29wdC5mbGFncyAmYW1wOyBDQU5fSVNPVFBfTElTVEVOX01PREUpCkBAIC01NzMsNyAmIzQzOzY0OCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLAogCXN0cnVjdCBza19idWZmICpuc2tiOwogCWludCBpOwogCi0JaWYgKHNvLSZndDtyeC5zdGF0ZSAhPSBJU09UUF9XQUlUX0RBVEEpCiYjNDM7CWlmIChSRUFEX09OQ0Uoc28tJmd0O3J4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0RBVEEpCiAJCXJldHVybiAwOwogCiAJLyogZHJvcCBpZiB0aW1lc3RhbXAgZ2FwIGlzIGxlc3MgdGhhbiBmb3JjZV9yeF9zdG1pbiBuYW5vIHNlY3MgKi8KQEAgLTU4OCwxMSAmIzQzOzY2Myw5IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLAogCWhydGltZXJfY2FuY2VsKCZhbXA7c28tJmd0O3J4dGltZXIpOwogCiAJLyogaXNvdHBfcnhfdGltZXJfaGFuZGxlcigpIG1heSBoYXZlIHJhY2VkIHVzIGZvciBzby0mZ3Q7cnguc3RhdGUKLQkgKiB3aGlsZSBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoLCBhbHJlYWR5Ci0JICogcmVwb3J0aW5nIEVUSU1FRE9VVCBhbmQgcmVzZXR0aW5nIHRoZSByZWNlcHRpb247IGRvbiYjMzk7dCBwcm9jZXNzCi0JICogdGhpcyBDRiBpbnRvIGEgcmVhc3NlbWJseSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZ2l2ZW4gdXAgb24uCiYjNDM7CSAqIHdoaWxlIGhydGltZXJfY2FuY2VsKCkgYWJvdmUgd2FpdGVkIGZvciBpdCB0byBmaW5pc2ggPSZndDsgcmVjaGVjawogCSAqLwotCWlmIChzby0mZ3Q7cnguc3RhdGUgIT0gSVNPVFBfV0FJVF9EQVRBKQomIzQzOwlpZiAoUkVBRF9PTkNFKHNvLSZndDtyeC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9EQVRBKQogCQlyZXR1cm4gMTsKIAogCS8qIENGcyBhcmUgbmV2ZXIgbG9uZ2VyIHRoYW4gdGhlIEZGICovCkBAIC02MTMsNyAmIzQzOzY4Niw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlLAogCQkJc2tfZXJyb3JfcmVwb3J0KHNrKTsKIAogCQkvKiByZXNldCByeCBzdGF0ZSAqLwotCQlzby0mZ3Q7cnguc3RhdGUgPSBJU09UUF9JRExFOwomIzQzOwkJV1JJVEVfT05DRShzby0mZ3Q7cnguc3RhdGUsIElTT1RQX0lETEUpOwogCQlyZXR1cm4gMTsKIAl9CiAJc28tJmd0O3J4LnNuJiM0MzsmIzQzOzsKQEAgLTYyNyw3ICYjNDM7NzAwLDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsCiAKIAlpZiAoc28tJmd0O3J4LmlkeCAmZ3Q7PSBzby0mZ3Q7cngubGVuKSB7CiAJCS8qIHdlIGFyZSBkb25lICovCi0JCXNvLSZndDtyeC5zdGF0ZSA9IElTT1RQX0lETEU7CiYjNDM7CQlXUklURV9PTkNFKHNvLSZndDtyeC5zdGF0ZSwgSVNPVFBfSURMRSk7CiAKIAkJaWYgKChzby0mZ3Q7b3B0LmZsYWdzICZhbXA7IElTT1RQX0NIRUNLX1BBRERJTkcpICZhbXA7JmFtcDsKIAkJICAgIGNoZWNrX3BhZChzbywgY2YsIGkgJiM0MzsgMSwgc28tJmd0O29wdC5yeHBhZF9jb250ZW50KSkgewpAQCAtNjk4LDggJiM0Mzs3NzEsMTAgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpCiAKIAlpZiAoc28tJmd0O29wdC5mbGFncyAmYW1wOyBDQU5fSVNPVFBfSEFMRl9EVVBMRVgpIHsKIAkJLyogY2hlY2sgcngvdHggcGF0aCBoYWxmIGR1cGxleCBleHBlY3RhdGlvbnMgKi8KLQkJaWYgKChzby0mZ3Q7dHguc3RhdGUgIT0gSVNPVFBfSURMRSAmYW1wOyZhbXA7IG5fcGNpX3R5cGUgIT0gTl9QQ0lfRkMpIHx8Ci0JCSAgICAoc28tJmd0O3J4LnN0YXRlICE9IElTT1RQX0lETEUgJmFtcDsmYW1wOyBuX3BjaV90eXBlID09IE5fUENJX0ZDKSkKJiM0MzsJCWlmICgoUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIG5fcGNpX3R5cGUgIT0gTl9QQ0lfRkMpIHx8CiYjNDM7CQkgICAgKFJFQURfT05DRShzby0mZ3Q7cnguc3RhdGUpICE9IElTT1RQX0lETEUgJmFtcDsmYW1wOwomIzQzOwkJICAgICBuX3BjaV90eXBlID09IE5fUENJX0ZDKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKQEAgLTc5NCw2ICYjNDM7ODY5LDcgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKQogCXN0cnVjdCBjYW5mZF9mcmFtZSAqY2Y7CiAJaW50IGNhbl9zZW5kX3JldDsKIAlpbnQgYWUgPSAoc28tJmd0O29wdC5mbGFncyAmYW1wOyBDQU5fSVNPVFBfRVhURU5EX0FERFIpID8gMSA6IDA7CiYjNDM7CXUzMiBvbGRfY2ZlY2hvOwogCiAJZGV2ID0gZGV2X2dldF9ieV9pbmRleChzb2NrX25ldChzayksIHNvLSZndDtpZmluZGV4KTsKIAlpZiAoIWRldikKQEAgLTgxNCw2ICYjNDM7ODkwLDkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKQogCiAJY3N4LSZndDtjYW5faWlmID0gZGV2LSZndDtpZmluZGV4OwogCiYjNDM7CS8qIHNldCB1aWQgaW4gdHggc2tiIHRvIGlkZW50aWZ5IENGIGVjaG8gZnJhbWVzICovCiYjNDM7CWNhbl9zZXRfc2tiX3VpZChza2IpOwomIzQzOwogCWNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi0mZ3Q7ZGF0YTsKIAlza2JfcHV0X3plcm8oc2tiLCBzby0mZ3Q7bGwubXR1KTsKIApAQCAtODMwLDEyICYjNDM7OTA5LDE1IEBAIHN0YXRpYyB2b2lkIGlzb3RwX3NlbmRfY2ZyYW1lKHN0cnVjdCBpc290cF9zb2NrICpzbykKIAlza2ItJmd0O2RldiA9IGRldjsKIAljYW5fc2tiX3NldF9vd25lcihza2IsIHNrKTsKIAotCS8qIGNmZWNobyBzaG91bGQgaGF2ZSBiZWVuIHplcm8mIzM5O2VkIGJ5IGluaXQvaXNvdHBfcmN2X2VjaG8oKSAqLwotCWlmIChzby0mZ3Q7Y2ZlY2hvKQotCQlwcl9ub3RpY2Vfb25jZSgmIzM0O2Nhbi1pc290cDogY2ZlY2hvIGlzICUwOFggIT0gMFxuJiMzNDssIHNvLSZndDtjZmVjaG8pOwomIzQzOwkvKiB6ZXJvJiMzOTtlZCBieSBpbml0L2lzb3RwX3Jjdl9lY2hvKCk7IHJlYWNoZWQgbG9jay1mcmVlIHZpYQomIzQzOwkgKiBpc290cF90eGZyX3RpbWVyX2hhbmRsZXIoKSB0b28sIHNvIHVzZSBSRUFEX09OQ0UoKS9XUklURV9PTkNFKCkKJiM0MzsJICovCiYjNDM7CW9sZF9jZmVjaG8gPSBSRUFEX09OQ0Uoc28tJmd0O2NmZWNobyk7CiYjNDM7CWlmIChvbGRfY2ZlY2hvKQomIzQzOwkJcHJfbm90aWNlX29uY2UoJiMzNDtjYW4taXNvdHA6IGNmZWNobyBpcyAlMDhYICE9IDBcbiYjMzQ7LCBvbGRfY2ZlY2hvKTsKIAogCS8qIHNldCBjb25zZWN1dGl2ZSBmcmFtZSBlY2hvIHRhZyAqLwotCXNvLSZndDtjZmVjaG8gPSAqKHUzMiAqKWNmLSZndDtkYXRhOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtjZmVjaG8sIHNrYi0mZ3Q7aGFzaCk7CiAKIAkvKiBzZW5kIGZyYW1lIHdpdGggbG9jYWwgZWNobyBlbmFibGVkICovCiAJY2FuX3NlbmRfcmV0ID0gY2FuX3NlbmQoc2tiLCAxKTsKQEAgLTg4Nyw3ICYjNDM7OTY5LDYgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2X2VjaG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSAoc3RydWN0IHNvY2sgKilkYXRhOwogCXN0cnVjdCBpc290cF9zb2NrICpzbyA9IGlzb3RwX3NrKHNrKTsKLQlzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi0mZ3Q7ZGF0YTsKIAogCS8qIG9ubHkgaGFuZGxlIG15IG93biBsb2NhbCBlY2hvIENGL1NGIHNrYiYjMzk7cyAobm8gRkYhKSAqLwogCWlmIChza2ItJmd0O3NrICE9IHNrKQpAQCAtODk5LDMyICYjNDM7OTgwLDM1IEBAIHN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9lY2hvKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpCiAJc3Bpbl9sb2NrKCZhbXA7c28tJmd0O3J4X2xvY2spOwogCiAJLyogc28tJmd0O2NmZWNobyBtYXkgc2luY2UgYmVsb25nIHRvIGEgbmV3IHRyYW5zZmVyOyByZWNoZWNrIHVuZGVyIGxvY2sgKi8KLQlpZiAoc28tJmd0O2NmZWNobyAhPSAqKHUzMiAqKWNmLSZndDtkYXRhKQomIzQzOwlpZiAoUkVBRF9PTkNFKHNvLSZndDtjZmVjaG8pICE9IHNrYi0mZ3Q7aGFzaCkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJLyogY2FuY2VsIGxvY2FsIGVjaG8gdGltZW91dCAqLwogCWhydGltZXJfY2FuY2VsKCZhbXA7c28tJmd0O2VjaG90aW1lcik7CiAKIAkvKiBsb2NhbCBlY2hvIHNrYiB3aXRoIGNvbnNlY3V0aXZlIGZyYW1lIGhhcyBiZWVuIGNvbnN1bWVkICovCi0Jc28tJmd0O2NmZWNobyA9IDA7CiYjNDM7CVdSSVRFX09OQ0Uoc28tJmd0O2NmZWNobywgMCk7CiAKIAkvKiBjbGFpbWluZyBhIHRyYW5zZmVyIGFsc28gdGFrZXMgc28tJmd0O3J4X2xvY2ssIHNvIGEgcGxhaW4gcmVjaGVjawogCSAqIGlzIGVub3VnaDogc28tJmd0O3R4LnN0YXRlIGNhbiYjMzk7dCBoYXZlIGZsaXBwZWQgdG8gSVNPVFBfU0VORElORyBmb3IKIAkgKiBhIG5ldyBjbGFpbSB3aGlsZSB3ZSYjMzk7cmUgc3RpbGwgaW4gaGVyZQogCSAqLwotCWlmIChzby0mZ3Q7dHguc3RhdGUgIT0gSVNPVFBfU0VORElORykKJiM0MzsJaWYgKFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpICE9IElTT1RQX1NFTkRJTkcpCiAJCWdvdG8gb3V0X3VubG9jazsKIAogCWlmIChzby0mZ3Q7dHguaWR4ICZndDs9IHNvLSZndDt0eC5sZW4pIHsKIAkJLyogd2UgYXJlIGRvbmUgKi8KLQkJc28tJmd0O3R4LnN0YXRlID0gSVNPVFBfSURMRTsKJiM0MzsKJiM0MzsJCWlzb3RwX3NldF90eF9yZXN1bHQoc28sIHNvLSZndDt0eF9nZW4sIDApOwomIzQzOwkJLyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi8KJiM0MzsJCXNtcF9zdG9yZV9yZWxlYXNlKCZhbXA7c28tJmd0O3R4LnN0YXRlLCBJU09UUF9JRExFKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7c28tJmd0O3dhaXQpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJaWYgKHNvLSZndDt0eGZjLmJzICZhbXA7JmFtcDsgc28tJmd0O3R4LmJzICZndDs9IHNvLSZndDt0eGZjLmJzKSB7CiAJCS8qIHN0b3AgYW5kIHdhaXQgZm9yIEZDIHdpdGggdGltZW91dCAqLwotCQlzby0mZ3Q7dHguc3RhdGUgPSBJU09UUF9XQUlUX0ZDOwomIzQzOwkJV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1dBSVRfRkMpOwogCQlocnRpbWVyX3N0YXJ0KCZhbXA7c28tJmd0O3R4dGltZXIsIGt0aW1lX3NldChJU09UUF9GQ19USU1FT1VULCAwKSwKIAkJCSAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7CiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTk0NiwxNiAmIzQzOzEwMzAsMjAgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2X2VjaG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSkKIAlzcGluX3VubG9jaygmYW1wO3NvLSZndDtyeF9sb2NrKTsKIH0KIAotLyogc2hhcmVkIGJ5IHNvLSZndDt0eHRpbWVyJiMzOTtzIGFuZCBzby0mZ3Q7ZWNob3RpbWVyJiMzOTtzIGNhbGxiYWNrcy4gQm90aCB0aW1lcnMgZ2V0Ci0gKiBjYW5jZWxsZWQgdW5kZXIgc28tJmd0O3J4X2xvY2sgZWxzZXdoZXJlLCBzbyB0aGlzIG11c3Qgc3RheSBsb2NrLWZyZWUgdG8KLSAqIGF2b2lkIGRlYWRsb2NraW5nIHdpdGggdGhhdDsgdXNlcyBzby0mZ3Q7dHhfZ2VuIGluc3RlYWQgdG8gYXZvaWQgdGFpbnRpbmcKLSAqIGEgbmV3IHRyYW5zZmVyIHdpdGggYW4gZXJyb3IgZnJvbSB0aGUgb25lIHRoYXQganVzdCB0aW1lZCBvdXQuCiYjNDM7LyogaXNvdHBfdHhfdGltZW91dDogd2UgZGlkIG5vdCBnZXQgYW55IGZsb3cgY29udHJvbCBvciBlY2hvIGZyYW1lIGluIHRpbWUKJiM0MzsgKgomIzQzOyAqIFNoYXJlZCBieSBzby0mZ3Q7dHh0aW1lciYjMzk7cyBhbmQgc28tJmd0O2VjaG90aW1lciYjMzk7cyBjYWxsYmFja3MuIEJvdGggdGltZXJzIGdldAomIzQzOyAqIGNhbmNlbGxlZCB1bmRlciBzby0mZ3Q7cnhfbG9jayBlbHNld2hlcmUsIHNvIHRoaXMgbXVzdCBzdGF5IGxvY2stZnJlZS4KJiM0MzsgKgomIzQzOyAqIHR4LnN0YXRlIGlzIGFjcXVpcmVkIGJlZm9yZSB0eF9nZW4uIENvbW1vbiBzZXF1ZW5jZSBpbiBpc290cF90eF9nZW5fZG9uZSgpLgomIzQzOyAqIGNtcHhjaGcoKSBvbmx5IG9yZGVycyBpdHNlbGYsIG5vdCB0aGUgdHdvIHByZWNlZGluZyBsb2Fkcy4KICAqLwogc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4X3RpbWVvdXQoc3RydWN0IGlzb3RwX3NvY2sgKnNvKQogewogCXN0cnVjdCBzb2NrICpzayA9ICZhbXA7c28tJmd0O3NrOwomIzQzOwkvKiByZWFkIHR4LnN0YXRlIGZpcnN0IGZvciB0aGUgY29tbW9uIHNlcXVlbmNlICovCiYjNDM7CXUzMiBvbGRfc3RhdGUgPSBzbXBfbG9hZF9hY3F1aXJlKCZhbXA7c28tJmd0O3R4LnN0YXRlKTsKIAl1MzIgZ2VuID0gUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pOwotCXUzMiBvbGRfc3RhdGUgPSBSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKTsKIAogCS8qIGRvbiYjMzk7dCBoYW5kbGUgdGltZW91dHMgaW4gSURMRSBvciBTSFVURE9XTiBzdGF0ZSAqLwogCWlmIChvbGRfc3RhdGUgPT0gSVNPVFBfSURMRSB8fCBvbGRfc3RhdGUgPT0gSVNPVFBfU0hVVERPV04pCkBAIC05NjUsMTQgJiM0MzsxMDUzLDE0IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eF90aW1lb3V0KHN0cnVjdCBpc290cF9zb2NrICpzbykKIAlpZiAoY21weGNoZygmYW1wO3NvLSZndDt0eC5zdGF0ZSwgb2xkX3N0YXRlLCBJU09UUF9JRExFKSAhPSBvbGRfc3RhdGUpCiAJCXJldHVybiBIUlRJTUVSX05PUkVTVEFSVDsKIAotCS8qIHdlIGRpZCBub3QgZ2V0IGFueSBmbG93IGNvbnRyb2wgb3IgZWNobyBmcmFtZSBpbiB0aW1lICovCiYjNDM7CS8qIGRldGVjdGVkIHRpbWVvdXQ6IHJlcG9ydCAmIzM5O2NvbW11bmljYXRpb24gZXJyb3Igb24gc2VuZCYjMzk7ICovCiAKLQlpZiAoUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pID09IGdlbikgewotCQkvKiByZXBvcnQgJiMzOTtjb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQmIzM5OyAqLwotCQlzay0mZ3Q7c2tfZXJyID0gRUNPTU07Ci0JCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKQotCQkJc2tfZXJyb3JfcmVwb3J0KHNrKTsKLQl9CiYjNDM7CS8qIGEgc3RhbGUgcmVhZCBvZiB0aGlzIHNsb3QgYnkgYSB3YWl0ZXIgc3RpbGwgZmFsbHMgYmFjayB0byBFQ09NTSAqLwomIzQzOwlpc290cF9zZXRfdHhfcmVzdWx0KHNvLCBnZW4sIEVDT01NKTsKJiM0MzsKJiM0MzsJc2stJmd0O3NrX2VyciA9IEVDT01NOwomIzQzOwlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSkKJiM0MzsJCXNrX2Vycm9yX3JlcG9ydChzayk7CiAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFtcDtzby0mZ3Q7d2FpdCk7CiAKQEAgLTEwMDcsNyAmIzQzOzEwOTUsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfdHhmcl90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQogCQkgICAgICBIUlRJTUVSX01PREVfUkVMX1NPRlQpOwogCiAJLyogY2ZlY2hvIHNob3VsZCBiZSBjb25zdW1lZCBieSBpc290cF9yY3ZfZWNobygpIGhlcmUgKi8KLQlpZiAoc28tJmd0O3R4LnN0YXRlID09IElTT1RQX1NFTkRJTkcgJmFtcDsmYW1wOyAhc28tJmd0O2NmZWNobykKJiM0MzsJaWYgKFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpID09IElTT1RQX1NFTkRJTkcgJmFtcDsmYW1wOyAhUkVBRF9PTkNFKHNvLSZndDtjZmVjaG8pKQogCQlpc290cF9zZW5kX2NmcmFtZShzbyk7CiAKIAlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CkBAIC0xMDI2LDEwICYjNDM7MTExNCwxMiBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAlzNjQgaHJ0aW1lcl9zZWMgPSBJU09UUF9FQ0hPX1RJTUVPVVQ7CiAJc3RydWN0IGhydGltZXIgKnR4X2hydCA9ICZhbXA7c28tJmd0O2VjaG90aW1lcjsKIAl1MzIgbmV3X3N0YXRlID0gSVNPVFBfU0VORElORzsKJiM0MzsJdTMyIG15X2dlbjsKJiM0MzsJdTMyIG9sZF9jZmVjaG87CiAJaW50IG9mZjsKIAlpbnQgZXJyOwogCi0JaWYgKCFzby0mZ3Q7Ym91bmQgfHwgc28tJmd0O3R4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKQomIzQzOwlpZiAoIXNvLSZndDtib3VuZCB8fCBSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKSA9PSBJU09UUF9TSFVURE9XTikKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCiAJLyogY2xhaW0gdGhlIHNvY2tldCB1bmRlciBzby0mZ3Q7cnhfbG9jazogdGhpcyBzZXJpYWxpemVzIHRoZSBjbGFpbQpAQCAtMTA0NiwyOSAmIzQzOzExMzYsMzMgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJCWlmIChtc2ctJmd0O21zZ19mbGFncyAmYW1wOyBNU0dfRE9OVFdBSVQpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAotCQlpZiAoc28tJmd0O3R4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKQomIzQzOwkJaWYgKFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKQogCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCiAJCS8qIHdhaXQgZm9yIGNvbXBsZXRlIHRyYW5zbWlzc2lvbiBvZiBjdXJyZW50IHBkdSAqLwogCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tJmd0O3dhaXQsCi0JCQkJCSAgICAgICBzby0mZ3Q7dHguc3RhdGUgPT0gSVNPVFBfSURMRSk7CiYjNDM7CQkJCQkgICAgICAgUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgPT0gSVNPVFBfSURMRSB8fAomIzQzOwkJCQkJICAgICAgIFJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JLyogbmV3IHRyYW5zZmVyOiBidW1wIHNvLSZndDt0eF9nZW4gYW5kIGRyYWluIHRoZSBvbGQgb25lJiMzOTtzIHRpbWVycywKLQkgKiBzdGlsbCB1bmRlciB0aGUgc28tJmd0O3J4X2xvY2sgd2UganVzdCBjbGFpbWVkIHRoZSBzb2NrZXQgd2l0aAotCSAqLwotCVdSSVRFX09OQ0Uoc28tJmd0O3R4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTsKLQlXUklURV9PTkNFKHNvLSZndDt0eF9nZW4sIFJFQURfT05DRShzby0mZ3Q7dHhfZ2VuKSAmIzQzOyAxKTsKJiM0MzsJLyogdHhmcnRpbWVyJiMzOTtzIGNhbGxiYWNrIHJlLWFybXMgZWNob3RpbWVyIGxvY2stZnJlZTogZHJhaW4gaXQgZmlyc3QgKi8KJiM0MzsJaHJ0aW1lcl9jYW5jZWwoJmFtcDtzby0mZ3Q7dHhmcnRpbWVyKTsKIAlocnRpbWVyX2NhbmNlbCgmYW1wO3NvLSZndDt0eHRpbWVyKTsKIAlocnRpbWVyX2NhbmNlbCgmYW1wO3NvLSZndDtlY2hvdGltZXIpOwotCWhydGltZXJfY2FuY2VsKCZhbXA7c28tJmd0O3R4ZnJ0aW1lcik7Ci0Jc28tJmd0O2NmZWNobyA9IDA7CiYjNDM7CiYjNDM7CS8qIG5ldyB0cmFuc2ZlcjogaW5jcmVtZW50IHNvLSZndDt0eF9nZW4gYW5kIHNldCB0eC5zdGF0ZSBhZnRlciBiYXJyaWVyICovCiYjNDM7CW15X2dlbiA9IGlzb3RwX2luY190eF9nZW4oUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pKTsKJiM0MzsJaXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgbXlfZ2VuLCBFQ09NTSk7IC8qIHByZXZlbnQgc3RhbGUgc2xvdCBtYXRjaGluZyAqLwomIzQzOwlXUklURV9PTkNFKHNvLSZndDt0eF9nZW4sIG15X2dlbik7CiYjNDM7CXNtcF93bWIoKTsgLyogc2VlIHNtcF9sb2FkX2FjcXVpcmUoKSBpbiBpc290cF90eF9bdGltZW91dHxnZW5fZG9uZV0gKi8KJiM0MzsJV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1NFTkRJTkcpOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtjZmVjaG8sIDApOwogCXNwaW5fdW5sb2NrX2JoKCZhbXA7c28tJmd0O3J4X2xvY2spOwogCiAJLyogc28tJmd0O2JvdW5kIGlzIG9ubHkgY2hlY2tlZCBvbmNlIGFib3ZlIC0gYSB3YWtldXAgbWF5IGhhdmUKLQkgKiB1bmJvdW5kL3JlYm91bmQgdGhlIHNvY2tldCBtZWFud2hpbGUsIHNvIHJlLXZhbGlkYXRlIGl0CiYjNDM7CSAqIHVuYm91bmQvcmVib3VuZCB0aGUgc29ja2V0IG1lYW53aGlsZSA9Jmd0OyByZWNoZWNrCiAJICovCiAJaWYgKCFzby0mZ3Q7Ym91bmQpIHsKIAkJZXJyID0gLUVBRERSTk9UQVZBSUw7CkBAIC0xMTI3LDYgJiM0MzsxMjIxLDkgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAKIAljc3gtJmd0O2Nhbl9paWYgPSBkZXYtJmd0O2lmaW5kZXg7CiAKJiM0MzsJLyogc2V0IHVpZCBpbiB0eCBza2IgdG8gaWRlbnRpZnkgQ0YgZWNobyBmcmFtZXMgKi8KJiM0MzsJY2FuX3NldF9za2JfdWlkKHNrYik7CiYjNDM7CiAJc28tJmd0O3R4LmxlbiA9IHNpemU7CiAJc28tJmd0O3R4LmlkeCA9IDA7CiAKQEAgLTExMzQsOCAmIzQzOzEyMzEsOSBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAlza2JfcHV0X3plcm8oc2tiLCBzby0mZ3Q7bGwubXR1KTsKIAogCS8qIGNmZWNobyBzaG91bGQgaGF2ZSBiZWVuIHplcm8mIzM5O2VkIGJ5IGluaXQgLyBmb3JtZXIgaXNvdHBfcmN2X2VjaG8oKSAqLwotCWlmIChzby0mZ3Q7Y2ZlY2hvKQotCQlwcl9ub3RpY2Vfb25jZSgmIzM0O2Nhbi1pc290cDogdW5pbml0IGNmZWNobyAlMDhYXG4mIzM0Oywgc28tJmd0O2NmZWNobyk7CiYjNDM7CW9sZF9jZmVjaG8gPSBSRUFEX09OQ0Uoc28tJmd0O2NmZWNobyk7CiYjNDM7CWlmIChvbGRfY2ZlY2hvKQomIzQzOwkJcHJfbm90aWNlX29uY2UoJiMzNDtjYW4taXNvdHA6IHVuaW5pdCBjZmVjaG8gJTA4WFxuJiMzNDssIG9sZF9jZmVjaG8pOwogCiAJLyogY2hlY2sgZm9yIHNpbmdsZSBmcmFtZSB0cmFuc21pc3Npb24gZGVwZW5kaW5nIG9uIFRYX0RMICovCiAJaWYgKHNpemUgJmx0Oz0gc28tJmd0O3R4LmxsX2RsIC0gU0ZfUENJX1NaNCAtIGFlIC0gb2ZmKSB7CkBAIC0xMTYzLDcgJiM0MzsxMjYxLDcgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJCQljZi0mZ3Q7ZGF0YVthZV0gfD0gc2l6ZTsKIAogCQkvKiBzZXQgQ0YgZWNobyB0YWcgZm9yIGlzb3RwX3Jjdl9lY2hvKCkgKFNGLW1vZGUpICovCi0JCXNvLSZndDtjZmVjaG8gPSAqKHUzMiAqKWNmLSZndDtkYXRhOwomIzQzOwkJV1JJVEVfT05DRShzby0mZ3Q7Y2ZlY2hvLCBza2ItJmd0O2hhc2gpOwogCX0gZWxzZSB7CiAJCS8qIHNlbmQgZmlyc3QgZnJhbWUgKi8KIApAQCAtMTE4MCw3ICYjNDM7MTI3OCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogCQkJc28tJmd0O3R4ZmMuYnMgPSAwOwogCiAJCQkvKiBzZXQgQ0YgZWNobyB0YWcgZm9yIGlzb3RwX3Jjdl9lY2hvKCkgKENGLW1vZGUpICovCi0JCQlzby0mZ3Q7Y2ZlY2hvID0gKih1MzIgKiljZi0mZ3Q7ZGF0YTsKJiM0MzsJCQlXUklURV9PTkNFKHNvLSZndDtjZmVjaG8sIHNrYi0mZ3Q7aGFzaCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBzdGFuZGFyZCBmbG93IGNvbnRyb2wgY2hlY2sgKi8KIAkJCW5ld19zdGF0ZSA9IElTT1RQX1dBSVRfRklSU1RfRkM7CkBAIC0xMTkwLDEyICYjNDM7MTI4OCwxMiBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCXR4X2hydCA9ICZhbXA7c28tJmd0O3R4dGltZXI7CiAKIAkJCS8qIG5vIENGIGVjaG8gdGFnIGZvciBpc290cF9yY3ZfZWNobygpIChGRi1tb2RlKSAqLwotCQkJc28tJmd0O2NmZWNobyA9IDA7CiYjNDM7CQkJV1JJVEVfT05DRShzby0mZ3Q7Y2ZlY2hvLCAwKTsKIAkJfQogCX0KIAogCXNwaW5fbG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKLQlpZiAoc28tJmd0O3R4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKSB7CiYjNDM7CWlmIChSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKSA9PSBJU09UUF9TSFVURE9XTikgewogCQkvKiBpc290cF9yZWxlYXNlKCkgaGFzIHNpbmNlIHRha2VuIG92ZXIgYW5kIGFscmVhZHkgZHJhaW5lZAogCQkgKiBvdXIgdGltZXJzIC0gZG9uJiMzOTt0IHNlbmQgaW50byBhIHNvY2tldCB0aGF0JiMzOTtzIGdvaW5nIGF3YXkKIAkJICovCkBAIC0xMjA2LDcgJiM0MzsxMzA0LDcgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAl9CiAJLyogV0FJVF9GSVJTVF9GQyBmb3Igc3RhbmRhcmQgRkYsIGVsc2Ugc3RheXMgSVNPVFBfU0VORElORyAqLwotCXNvLSZndDt0eC5zdGF0ZSA9IG5ld19zdGF0ZTsKJiM0MzsJV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIG5ld19zdGF0ZSk7CiAJaHJ0aW1lcl9zdGFydCh0eF9ocnQsIGt0aW1lX3NldChocnRpbWVyX3NlYywgMCksCiAJCSAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzby0mZ3Q7cnhfbG9jayk7CkBAIC0xMjIzLDIwICYjNDM7MTMyMSw0OSBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKIAkJCSAgICAgICBfX2Z1bmNfXywgRVJSX1BUUihlcnIpKTsKIAogCQlzcGluX2xvY2tfYmgoJmFtcDtzby0mZ3Q7cnhfbG9jayk7CiYjNDM7CiYjNDM7CQkvKiBuZXcgdHJhbnNmZXIgYWxyZWFkeSBjbGFpbWVkIGJ5IGEgY29uY3VycmVudCBjb21wbGV0aW9uLAomIzQzOwkJICogdGltZW91dCBvciBzZW5kbXNnKCkgd2hpbGUgd2Ugd2VyZSBzdHVjayBpbiBjYW5fc2VuZCgpPwomIzQzOwkJICovCiYjNDM7CQlpZiAoUkVBRF9PTkNFKHNvLSZndDt0eF9nZW4pICE9IG15X2dlbikgewomIzQzOwkJCS8qIGRvbiYjMzk7dCB0b3VjaCB0aW1lcnMgYW5kIHN0YXRlIG9mIHRoZSBuZXcgdHJhbnNmZXIgKi8KJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQomIzQzOwogCQkvKiBubyB0cmFuc21pc3Npb24gLSZndDsgbm8gdGltZW91dCBtb25pdG9yaW5nICovCiAJCWhydGltZXJfY2FuY2VsKHR4X2hydCk7CiAJCWdvdG8gZXJyX291dF9kcm9wX2xvY2tlZDsKIAl9CiAKIAlpZiAod2FpdF90eF9kb25lKSB7Ci0JCS8qIHdhaXQgZm9yIGNvbXBsZXRlIHRyYW5zbWlzc2lvbiBvZiBjdXJyZW50IHBkdSAqLwotCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tJmd0O3dhaXQsIHNvLSZndDt0eC5zdGF0ZSA9PSBJU09UUF9JRExFKTsKJiM0MzsJCS8qIHdha2UgdXAgZm9yOgomIzQzOwkJICogLSBjb25jdXJyZW50IHNlbmRtc2coKSBjbGFpbWluZyBhIG5ldyB0cmFuc2ZlcgomIzQzOwkJICogLSBjb21wbGV0ZSB0cmFuc21pc3Npb24gb2YgY3VycmVudCBQRFUKJiM0MzsJCSAqIC0gc2h1dGRvd24gc3RhdGUgY2hhbmdlIGluIGlzb3RwX3JlbGVhc2UoKQomIzQzOwkJICogaXNvdHBfdHhfZ2VuX2RvbmUoKSB1c2VzIGNvbW1vbiB0eC5zdGF0ZS90eF9nZW4gcmVhZCBzZXF1ZW5jZQomIzQzOwkJICovCiYjNDM7CQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tJmd0O3dhaXQsCiYjNDM7CQkJCQkgICAgICAgaXNvdHBfdHhfZ2VuX2RvbmUoc28sIG15X2dlbikpOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfZXZlbnRfZHJvcDsKIAotCQllcnIgPSBzb2NrX2Vycm9yKHNrKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CiYjNDM7CQkvKiBzdGlsbCBvdXIgY2xhaW0sIGJ1dCBpc290cF9yZWxlYXNlKCkgZm9yY2Utc2h1dCBpdCBkb3duICovCiYjNDM7CQlpZiAoc21wX2xvYWRfYWNxdWlyZSgmYW1wO3NvLSZndDt0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04gJmFtcDsmYW1wOwomIzQzOwkJICAgIFJFQURfT05DRShzby0mZ3Q7dHhfZ2VuKSA9PSBteV9nZW4pIHsKJiM0MzsJCQllcnIgPSAtRUFERFJOT1RBVkFJTDsKJiM0MzsJCQlnb3RvIGVycl9ldmVudF9kcm9wOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogb3duIGNvbXBsZXRpb24sIG9yIHR4X2dlbiBtb3ZlZCBvbiAtIGVpdGhlciB3YXkgdGhpcyBpcwomIzQzOwkJICogd2hhdCBpc290cF9nZXRfdHhfcmVzdWx0KCkgcmVjb3JkZWQgZm9yIG15X2dlbgomIzQzOwkJICovCiYjNDM7CQllcnIgPSBpc290cF9nZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4pOwomIzQzOwomIzQzOwkJLyogZHJhaW4gdG8gYXZvaWQgc3RhbGUgZXJyb3IgZm9yIGEgbGF0ZXIgcG9sbCgpL1NPX0VSUk9SICovCiYjNDM7CQlzb2NrX2Vycm9yKHNrKTsKJiM0MzsKJiM0MzsJCXJldHVybiBlcnIgPyBlcnIgOiBzaXplOwogCX0KIAogCXJldHVybiBzaXplOwpAQCAtMTI0NiwxNSAmIzQzOzEzNzMsMjYgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpCiAJc3Bpbl9sb2NrX2JoKCZhbXA7c28tJmd0O3J4X2xvY2spOwogCWdvdG8gZXJyX291dF9kcm9wX2xvY2tlZDsKIGVycl9ldmVudF9kcm9wOgotCS8qIGludGVycnVwdGVkIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAtIGRyYWluIGl0cyB0aW1lcnMgKi8KJiM0MzsJLyogaW50ZXJydXB0ZWQgb3Igc2h1dCBkb3duIHdoaWxlIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAqLwogCXNwaW5fbG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKJiM0MzsKJiM0MzsJLyogbmV3IHRyYW5zZmVyIGFscmVhZHkgc3RhcnRlZCBieSBjb25jdXJyZW50IHNlbmRtc2coKT8gKi8KJiM0MzsJaWYgKFJFQURfT05DRShzby0mZ3Q7dHhfZ2VuKSAhPSBteV9nZW4pIHsKJiM0MzsJCS8qIGRvbiYjMzk7dCB0b3VjaCB0aW1lcnMgYW5kIHN0YXRlcyBvZiB0aGUgbmV3IHRyYW5zZmVyICovCiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CX0KJiM0MzsKIAlocnRpbWVyX2NhbmNlbCgmYW1wO3NvLSZndDt0eGZydGltZXIpOwogCWhydGltZXJfY2FuY2VsKCZhbXA7c28tJmd0O3R4dGltZXIpOwogCWhydGltZXJfY2FuY2VsKCZhbXA7c28tJmd0O2VjaG90aW1lcik7CiBlcnJfb3V0X2Ryb3BfbG9ja2VkOgogCS8qIHJlbGVhc2UgdGhlIGNsYWltOyBzby0mZ3Q7cnhfbG9jayBzdGlsbCBoZWxkIGZyb20gYWJvdmUgKi8KLQlzby0mZ3Q7Y2ZlY2hvID0gMDsKLQlzby0mZ3Q7dHguc3RhdGUgPSBJU09UUF9JRExFOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtjZmVjaG8sIDApOwomIzQzOwomIzQzOwkvKiBvbmx5IGNsYWltIHRvIElETEUgaWYgaXNvdHBfcmVsZWFzZSgpIGhhcyBub3QgdGFrZW4gb3ZlciAqLwomIzQzOwlpZiAoUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgIT0gSVNPVFBfU0hVVERPV04pCiYjNDM7CQlXUklURV9PTkNFKHNvLSZndDt0eC5zdGF0ZSwgSVNPVFBfSURMRSk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtzby0mZ3Q7cnhfbG9jayk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhbXA7c28tJmd0O3dhaXQpOwogCkBAIC0xMzIwLDggJiM0MzsxNDU4LDkgQEAgc3RhdGljIGludCBpc290cF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiAJLyogYmVzdC1lZmZvcnQ6IHdhaXQgZm9yIGEgcnVubmluZyBwZHUgdG8gZmluaXNoLCBidXQgZG9uJiMzOTt0IGJsb2NrIG9uCiAJICogaXQgZm9yZXZlciAtIGdpdmUgdXAgYWZ0ZXIgdGhlIGZpcnN0IHNpZ25hbAogCSAqLwotCXdoaWxlIChzby0mZ3Q7dHguc3RhdGUgIT0gSVNPVFBfSURMRSAmYW1wOyZhbXA7Ci0JICAgICAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzby0mZ3Q7d2FpdCwgc28tJmd0O3R4LnN0YXRlID09IElTT1RQX0lETEUpID09IDApCiYjNDM7CXdoaWxlIChSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKSAhPSBJU09UUF9JRExFICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzby0mZ3Q7d2FpdCwKJiM0MzsJCQkJCVJFQURfT05DRShzby0mZ3Q7dHguc3RhdGUpID09IElTT1RQX0lETEUpID09IDApCiAJCTsKIAogCS8qIGNsYWltIHRoZSBzb2NrZXQgdW5kZXIgc28tJmd0O3J4X2xvY2sgbGlrZSBzZW5kbXNnKCkgZG9lcywgc28gaXRzCkBAIC0xMzI5LDkgJiM0MzsxNDY4LDEyIEBAIHN0YXRpYyBpbnQgaXNvdHBfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogCSAqIHVuY29uZGl0aW9uYWxseSwgZXZlbiB3aGVuIGEgc2lnbmFsIGN1dCB0aGUgd2FpdCBhYm92ZSBzaG9ydAogCSAqLwogCXNwaW5fbG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKLQlzby0mZ3Q7dHguc3RhdGUgPSBJU09UUF9TSFVURE9XTjsKJiM0MzsJV1JJVEVfT05DRShzby0mZ3Q7dHguc3RhdGUsIElTT1RQX1NIVVRET1dOKTsKIAlzcGluX3VubG9ja19iaCgmYW1wO3NvLSZndDtyeF9sb2NrKTsKLQlzby0mZ3Q7cnguc3RhdGUgPSBJU09UUF9JRExFOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtyeC5zdGF0ZSwgSVNPVFBfSURMRSk7CiYjNDM7CiYjNDM7CS8qIGZvcmNlZCBTSFVURE9XTiBtYXkgaGF2ZSBza2lwcGVkIElETEUgKGdhdmUgdXAgb24gYSBzaWduYWwpICovCiYjNDM7CXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYW1wO3NvLSZndDt3YWl0KTsKIAogCXNwaW5fbG9jaygmYW1wO2lzb3RwX25vdGlmaWVyX2xvY2spOwogCXdoaWxlIChpc290cF9idXN5X25vdGlmaWVyID09IHNvKSB7CkBAIC0xNDQ3LDcgJiM0MzsxNTg5LDggQEAgc3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGwKIAkgKiB3aXRoIHNvLSZndDtib3VuZCBpbiB0aGUgc2FtZSBsb2NrX3NvY2soKSBzZWN0aW9uIGFib3ZlLCBzbyB0aGVyZSBpcwogCSAqIG5vIHdpbmRvdyBpbiB3aGljaCBhIGNvbmN1cnJlbnQgaXNvdHBfbm90aWZ5KCkgY291bGQgYmUgbWlzc2VkLgogCSAqLwotCWlmIChzby0mZ3Q7dHguc3RhdGUgIT0gSVNPVFBfSURMRSB8fCBzby0mZ3Q7cnguc3RhdGUgIT0gSVNPVFBfSURMRSkgewomIzQzOwlpZiAoUkVBRF9PTkNFKHNvLSZndDt0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSB8fAomIzQzOwkgICAgUkVBRF9PTkNFKHNvLSZndDtyeC5zdGF0ZSkgIT0gSVNPVFBfSURMRSkgewogCQllcnIgPSAtRUFHQUlOOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNDgxLDcgJiM0MzsxNjI0LDcgQEAgc3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGwKIAkJCQlpc290cF9yY3YsIHNrLCAmIzM0O2lzb3RwJiMzNDssIHNrKTsKIAogCS8qIG5vIGNvbnNlY3V0aXZlIGZyYW1lIGVjaG8gc2tiIGluIGZsaWdodCAqLwotCXNvLSZndDtjZmVjaG8gPSAwOwomIzQzOwlXUklURV9PTkNFKHNvLSZndDtjZmVjaG8sIDApOwogCiAJLyogcmVnaXN0ZXIgZm9yIGVjaG8gc2tiJiMzOTtzICovCiAJY2FuX3J4X3JlZ2lzdGVyKG5ldCwgZGV2LCB0eF9pZCwgU0lOR0xFX01BU0sodHhfaWQpLApAQCAtMTg0Nyw3ICYjNDM7MTk5MCw3IEBAIHN0YXRpYyBfX3BvbGxfdCBpc290cF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBwb2xsX3RhYmxlICp3CiAJcG9sbF93YWl0KGZpbGUsICZhbXA7c28tJmd0O3dhaXQsIHdhaXQpOwogCiAJLyogQ2hlY2sgZm9yIGZhbHNlIHBvc2l0aXZlcyBkdWUgdG8gVFggc3RhdGUgKi8KLQlpZiAoKG1hc2sgJmFtcDsgRVBPTExXUk5PUk0pICZhbXA7JmFtcDsgKHNvLSZndDt0eC5zdGF0ZSAhPSBJU09UUF9JRExFKSkKJiM0MzsJaWYgKChtYXNrICZhbXA7IEVQT0xMV1JOT1JNKSAmYW1wOyZhbXA7IChSRUFEX09OQ0Uoc28tJmd0O3R4LnN0YXRlKSAhPSBJU09UUF9JRExFKSkKIAkJbWFzayAmYW1wOz0gfihFUE9MTE9VVCB8IEVQT0xMV1JOT1JNKTsKIAogCXJldHVybiBtYXNrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTk1NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIElTT1RQIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGZvciBgbmV0L2Nhbi9pc290cC5jYC4gU2VlbXMgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBwcmltYXJpbHkgZm9jdXNlZCBvbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHRyYW5zbWl0IGFuZCByZWNlaXZlIHN0YXRlcyB1c2luZyBgUkVBRF9PTkNFYCBhbmQgYFdSSVRFX09OQ0VgLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBvcHRpbWl6YXRpb24sIHdoaWNoIGFsd2F5cyBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgZGF0YSByYWNlcyBhbmQgZnV6emluZyBvcHBvcnR1bml0aWVzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBzby0mZ3Q7dHhfcmVzdWx0W11gIGFuZCBgc28tJmd0O3R4X2dlbmAgdG8gdHJhY2sgVFggcmVzdWx0cyBwZXIgZ2VuZXJhdGlvbiBpcyBuZXcuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBJIHdhbnQgdG8gc3ViamVjdCB0byBzb21lIHNlcmlvdXMgZnV6emluZy4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhpcyBwYXRjaCB0b3VjaGVzLiBMb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgYSB3aG9sZSBsaXN0OiBgaXNvdHBfcmN2X2ZjYCwgYGlzb3RwX3Jjdl9zZmAsIGBpc290cF9yY3ZfZmZgLCBgaXNvdHBfcmN2X2NmYCwgYGlzb3RwX3JjdmAsIGBpc290cF9zZW5kX2NmcmFtZWAsIGBpc290cF9yY3ZfZWNob2AsIGBpc290cF90eF90aW1lb3V0YCwgYGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcmAsIGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX3JlbGVhc2VgLCBgaXNvdHBfYmluZGAsIGFuZCBgaXNvdHBfcG9sbGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKTm93LCB3aGF0IGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHM/IEkmIzM5O20gdGhpbmtpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGV4cG9zZSB0aGUgQVBJIHRvIHRoZSByZXN0IG9mIHRoZSBDQU4gc3RhY2sgYW5kLCB1bHRpbWF0ZWx5LCB0byB0aGUgdXNlciBzcGFjZS4gQmFzZWQgb24gdGhlIGxpc3QsIGBpc290cF9zZW5kbXNnYCBhbmQgYGlzb3RwX2JpbmRgIGFyZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIGBpc290cF9yY3ZgIGlzIGFsc28gdGhlcmUsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCB0aHJvdWdoIHRoZSBDQU4gY29yZS4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyB0aGUgc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBpc290cF9yY3ZfZmNgLCBldGMuIGFyZSBjYWxsZWQgYnkgYGlzb3RwX3JjdmAuIFNpbmNlIGBpc290cF9yY3ZgIGlzIGFsc28gc3RhdGljIEkmIzM5O2xsIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoYXQgd2l0aCBgZ3JlcHBlcmAgYW5kIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucywgdGhlIG1haW4gQVBJIGVudHJ5IHBvaW50cywgb3IgYW55dGhpbmcgZWxzZSBpbnRlcmVzdGluZy4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgSSBjYW4gZmluZCB0aGUgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KGludHx2b2lkKSBpc290cF8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL2lzb3RwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jPTIwOT1zdGF0aWMgdTMyIGlzb3RwX2dldF90eF9lcnIodTMyIGdlbl9lcnIpXG4tLVxubmV0L2Nhbi9pc290cC5jLTIxNC0vKiBzdG9yZSB0cmFuc2ZlciByZXN1bHQgaW4gcGVyLWdlbmVyYXRpb24lNCBzby1cdTAwM2V0eF9yZXN1bHRbXSBzbG90ICovXG5uZXQvY2FuL2lzb3RwLmM6MjE1OnN0YXRpYyB2b2lkIGlzb3RwX3NldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuLCBpbnQgZXJyKVxubmV0L2Nhbi9pc290cC5jLTIxNi17XG4tLVxubmV0L2Nhbi9pc290cC5jLTIyMS0vKiBmZXRjaCB0aGUgcmVzdWx0IHJlY29yZGVkIGZvciAmIzM5O2dlbiYjMzk7LCBhcyBhIChuZWdhdGl2ZSkgZXJybm8gKDAgZm9yIHN1Y2Nlc3MpICovXG5uZXQvY2FuL2lzb3RwLmM6MjIyOnN0YXRpYyBpbnQgaXNvdHBfZ2V0X3R4X3Jlc3VsdChzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHUzMiBnZW4pXG5uZXQvY2FuL2lzb3RwLmMtMjIzLXtcbi0tXG5uZXQvY2FuL2lzb3RwLmM9MjY1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF9yeF90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxuLS1cbm5ldC9jYW4vaXNvdHAuYy0yODUtXG5uZXQvY2FuL2lzb3RwLmM6Mjg2OnN0YXRpYyBpbnQgaXNvdHBfc2VuZF9mYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBhZSwgdTggZmxvd3N0YXR1cylcbm5ldC9jYW4vaXNvdHAuYy0yODcte1xuLS1cbm5ldC9jYW4vaXNvdHAuYy0zNTQtXG5uZXQvY2FuL2lzb3RwLmM6MzU1OnN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrKVxubmV0L2Nhbi9pc290cC5jLTM1Ni17XG4tLVxubmV0L2Nhbi9pc290cC5jPTQxMT1zdGF0aWMgaW50IGNoZWNrX3BhZChzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsXG4tLVxubmV0L2Nhbi9pc290cC5jLTQzOC1cbm5ldC9jYW4vaXNvdHAuYzo0Mzk6c3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKTtcbm5ldC9jYW4vaXNvdHAuYy00NDAtXG5uZXQvY2FuL2lzb3RwLmM6NDQxOnN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxubmV0L2Nhbi9pc290cC5jLTQ0Mi17XG4tLVxubmV0L2Nhbi9pc290cC5jLTUzNy1cbm5ldC9jYW4vaXNvdHAuYzo1Mzg6c3RhdGljIGludCBpc290cF9yY3Zfc2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgcGNpbGVuLFxubmV0L2Nhbi9pc290cC5jLTUzOS1cdFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKVxuLS1cbm5ldC9jYW4vaXNvdHAuYy01NzAtXG5uZXQvY2FuL2lzb3RwLmM6NTcxOnN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxubmV0L2Nhbi9pc290cC5jLTU3Mi17XG4tLVxubmV0L2Nhbi9pc290cC5jLTY0My1cbm5ldC9jYW4vaXNvdHAuYzo2NDQ6c3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG5uZXQvY2FuL2lzb3RwLmMtNjQ1LVx0XHRcdHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2Nhbi9pc290cC5jLTc0My1cbm5ldC9jYW4vaXNvdHAuYzo3NDQ6c3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXG5uZXQvY2FuL2lzb3RwLmMtNzQ1LXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtODMxLVxubmV0L2Nhbi9pc290cC5jOjgzMjpzdGF0aWMgdm9pZCBpc290cF9maWxsX2RhdGFmcmFtZShzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBzdHJ1Y3QgaXNvdHBfc29jayAqc28sXG5uZXQvY2FuL2lzb3RwLmMtODMzLVx0XHRcdFx0IGludCBhZSwgaW50IG9mZilcbi0tXG5uZXQvY2FuL2lzb3RwLmMtODYyLVxubmV0L2Nhbi9pc290cC5jOjg2MzpzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pXG5uZXQvY2FuL2lzb3RwLmMtODY0LXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtOTMyLVxubmV0L2Nhbi9pc290cC5jOjkzMzpzdGF0aWMgdm9pZCBpc290cF9jcmVhdGVfZmZyYW1lKHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIHN0cnVjdCBpc290cF9zb2NrICpzbyxcbm5ldC9jYW4vaXNvdHAuYy05MzQtXHRcdFx0XHRpbnQgYWUpXG4tLVxubmV0L2Nhbi9pc290cC5jLTk2Ny1cbm5ldC9jYW4vaXNvdHAuYzo5Njg6c3RhdGljIHZvaWQgaXNvdHBfcmN2X2VjaG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSlcbm5ldC9jYW4vaXNvdHAuYy05Njkte1xuLS1cbm5ldC9jYW4vaXNvdHAuYz0xMDg4PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eGZyX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpXG4tLVxubmV0L2Nhbi9pc290cC5jLTExMDMtXG5uZXQvY2FuL2lzb3RwLmM6MTEwNDpzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbm5ldC9jYW4vaXNvdHAuYy0xMTA1LXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTQwMS1cbm5ldC9jYW4vaXNvdHAuYzoxNDAyOnN0YXRpYyBpbnQgaXNvdHBfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLFxubmV0L2Nhbi9pc290cC5jLTE0MDMtXHRcdFx0IGludCBmbGFncylcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTQ0NS1cbm5ldC9jYW4vaXNvdHAuYzoxNDQ2OnN0YXRpYyBpbnQgaXNvdHBfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxubmV0L2Nhbi9pc290cC5jLTE0NDcte1xuLS1cbm5ldC9jYW4vaXNvdHAuYy0xNTMzLVxubmV0L2Nhbi9pc290cC5jOjE1MzQ6c3RhdGljIGludCBpc290cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1YWRkciwgaW50IGxlbilcbm5ldC9jYW4vaXNvdHAuYy0xNTM1LXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTY2MS1cbm5ldC9jYW4vaXNvdHAuYzoxNjYyOnN0YXRpYyBpbnQgaXNvdHBfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgcGVlcilcbm5ldC9jYW4vaXNvdHAuYy0xNjYzLXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTY3OS1cbm5ldC9jYW4vaXNvdHAuYzoxNjgwOnN0YXRpYyBpbnQgaXNvdHBfc2V0c29ja29wdF9sb2NrZWQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcbm5ldC9jYW4vaXNvdHAuYy0xNjgxLVx0XHRcdCAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxuLS1cbm5ldC9jYW4vaXNvdHAuYy0xNzc3LVxubmV0L2Nhbi9pc290cC5jOjE3Nzg6c3RhdGljIGludCBpc290cF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG5uZXQvY2FuL2lzb3RwLmMtMTc3OS1cdFx0XHQgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTc5My1cbm5ldC9jYW4vaXNvdHAuYzoxNzk0OnN0YXRpYyBpbnQgaXNvdHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxubmV0L2Nhbi9pc290cC5jLTE3OTUtXHRcdFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTg0NS1cbm5ldC9jYW4vaXNvdHAuYzoxODQ2OnN0YXRpYyB2b2lkIGlzb3RwX25vdGlmeShzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHVuc2lnbmVkIGxvbmcgbXNnLFxubmV0L2Nhbi9pc290cC5jLTE4NDctXHRcdFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2Nhbi9pc290cC5jLTE4OTAtXG5uZXQvY2FuL2lzb3RwLmM6MTg5MTpzdGF0aWMgaW50IGlzb3RwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgbXNnLFxubmV0L2Nhbi9pc290cC5jLTE4OTItXHRcdFx0ICB2b2lkICpwdHIpXG4tLVxubmV0L2Nhbi9pc290cC5jLTE5MTMtXG5uZXQvY2FuL2lzb3RwLmM6MTkxNDpzdGF0aWMgdm9pZCBpc290cF9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaylcbm5ldC9jYW4vaXNvdHAuYy0xOTE1LXtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMTkyOC1cbm5ldC9jYW4vaXNvdHAuYzoxOTI5OnN0YXRpYyBpbnQgaXNvdHBfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY2FuL2lzb3RwLmMtMTkzMC17XG4tLVxubmV0L2Nhbi9pc290cC5jPTE5ODQ9c3RhdGljIF9fcG9sbF90IGlzb3RwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHBvbGxfdGFibGUgKndhaXQpXG4tLVxubmV0L2Nhbi9pc290cC5jLTE5OTgtXG5uZXQvY2FuL2lzb3RwLmM6MTk5OTpzdGF0aWMgaW50IGlzb3RwX3NvY2tfbm9faW9jdGxjbWQoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbm5ldC9jYW4vaXNvdHAuYy0yMDAwLVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGFyZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk3NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSVNPLVRQIEFQSSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBJU08tVFAgcGF0Y2gsIGFuZCBpbW1lZGlhdGVseSB0aGUga2V5IGVudHJ5IHBvaW50cyBqdW1wIG91dCBhdCBtZS4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnM6IGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX3JlY3Ztc2dgLCBgaXNvdHBfYmluZGAsIGBpc290cF9yZWxlYXNlYCwgYGlzb3RwX3NldHNvY2tvcHRgLCBgaXNvdHBfZ2V0c29ja29wdGAsIGBpc290cF9wb2xsYCwgYW5kIGBpc290cF9yY3ZgLiBPZiB0aGVzZSwgYGlzb3RwX3JjdmAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFzIGl0IGlzIHRoZSBjcml0aWNhbCBjYWxsYmFjayBmcm9tIHRoZSBDQU4gY29yZSB3aGVuIGEgZnJhbWUgaXMgcmVjZWl2ZWQuCgpUaGUgYXV0aG9yIGhhcyBjbGVhcmx5IGJlZW4gYnVzeSwgYXMgdGhlIHBhdGNoIHRvdWNoZXMgYSBnb29kIGNodW5rIG9mIHRoZSBjb3JlIElTTy1UUCBpbXBsZW1lbnRhdGlvbjsgdGhlIGxpc3QgaXMgY29tcHJlaGVuc2l2ZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiB0aGF0IHRoZXkmIzM5O3ZlIGJlZW4gcmlnb3JvdXMuCgpHaXZlbiB0aGUgc2NvcGUgb2YgbW9kaWZpY2F0aW9ucywgSSBuZWVkIHRvIG5hcnJvdyBteSBmb2N1cyB0byB0aGUgbW9zdCBjcml0aWNhbCBzeW1ib2xzIHRvIHRydWx5IGdyYXNwIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEl0IGxvb2tzIGxpa2UgYGlzb3RwX3NlbmRtc2dgLCBgaXNvdHBfYmluZGAsIGBpc290cF9yY3ZgLCBgaXNvdHBfcmVsZWFzZWAgYW5kIGBpc290cF9wb2xsYCBhcmUgd2hlcmUgSSBuZWVkIHRvIGNvbmNlbnRyYXRlIG15IGVmZm9ydHMuIFRob3NlIGFyZSB0aGUgb25lcyB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIG1vc3Qgc2lnbmlmaWNhbnRseS4KCkJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZvciBgQ0FOX0lTT1RQYC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgaW52b2x2ZWQuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBiYXNlIGlzLCBhbmQgd2hhdCBjYW4gYmUgY2hhbmdlZC4gR290dGEga25vdyB0aGUgbGF5IG9mIHRoZSBsYW5kIGJlZm9yZSBJIGdvIHN0b3JtaW5nIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU5fSVNPVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnPTU3PXNvdXJjZSBcJiMzNDtuZXQvY2FuL2oxOTM5L0tjb25maWdcJiMzNDtcbm5ldC9jYW4vS2NvbmZpZy01OC1cbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXG5uZXQvY2FuL0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2OTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIENBTl9JU09UUCBEZXBlbmRlbmNpZXMqKgoKT2theSwgdGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhpcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZGVsdmUgaW50byB0aGUgZGVwZW5kZW5jaWVzIG9mIENBTl9JU09UUC4gVGhpcyBpc24mIzM5O3QganVzdCBhIHN1cmZhY2UtbGV2ZWwgY2hlY2s7IGl0IG5lZWRzIGEgY29tcHJlaGVuc2l2ZSByZXZpZXcuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycyBpbnZvbHZlZCDigJMgd2hhdCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnMgYXJlIGluIHBsYXk/IFdoYXQgb3RoZXIgY29tbXVuaWNhdGlvbiBzdGFja3MgYXJlIGludGVncmF0ZWQgb3IgY291bGQgYmUgaW50ZWdyYXRlZD8gSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzaWxpY29uIHZlbmRvcnMgdGhpcyBpcyB0aWVkIHRvLCBhbmQgaWYgdGhlcmUgYXJlLCB3aHkuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGxpYnJhcnksIG9yIGlzIHRoaXMgYSBtb3JlIGNvbXBsZXggZnJhbWV3b3JrPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIHdpdGggdGhlIHVuZGVybHlpbmcgQ0FOIGNvbnRyb2xsZXIgYW5kIGFueSBhc3NvY2lhdGVkIGRyaXZlcnMuIEFsc28sIGNvbnNpZGVyaW5nIGFsbCB0aGUgdGhpbmdzIHRoYXQgdG91Y2ggQ0FOX0lTT1RQLCBJIG5lZWQgdG8ga25vdyBhYm91dCBhbnkgZXh0ZXJuYWwgZmFjdG9ycy4gSXMgdGhpcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgcHJvamVjdCBvciBpcyB0aGlzIGludGVuZGVkIHRvIGJlIGEgcmV1c2FibGUgY29tcG9uZW50PyBJIHdhbnQgdG8gZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiBjb3VwbGluZyBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgcG9ydGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eS4gTGV0JiMzOTtzIHNlZSBpZiB3ZSBjYW4gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBhdHRlbnRpb24sIEkgd2lsbCBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhbmQgdGhlaXIgcG90ZW50aWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSBhbmQgZmxleGliaWxpdHkuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgbGlzdGluZyBkZXBlbmRlbmNpZXM7IGl0JiMzOTtzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGZvciBmdXR1cmUgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOX0lTT1RQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnPTU3PXNvdXJjZSBcJiMzNDtuZXQvY2FuL2oxOTM5L0tjb25maWdcJiMzNDtcbm5ldC9jYW4vS2NvbmZpZy01OC1cbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXG5uZXQvY2FuL0tjb25maWctNjAtXHR0cmlzdGF0ZSBcJiMzNDtJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxMDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBDQU4gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgQ0FOIHN1YnN5c3RlbSYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IHRoZSBgbmV0L2Nhbi9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgdGhlIG1lYXQgb2YgdGhlIG1hdHRlciBpcyBwcm9iYWJseSBhcm91bmQgbGluZSA1OS4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBDQU4gbGF5ZXIgYXJlIGRlZmluZWQsIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA1MDpcdFx0ICBUaGUgQ0FOIEdhdGV3YXkvUm91dGVyIGlzIHVzZWQgdG8gcm91dGUgKGFuZCBtb2RpZnkpIENBTiBmcmFtZXMuXG4gIDUxOlx0XHQgIEl0IGlzIGJhc2VkIG9uIHRoZSBQRl9DQU4gY29yZSBpbmZyYXN0cnVjdHVyZSBmb3IgbXNnIGZpbHRlcmluZyBhbmRcbiAgNTI6XHRcdCAgbXNnIHNlbmRpbmcgYW5kIGNhbiBvcHRpb25hbGx5IG1vZGlmeSByb3V0ZWQgQ0FOIGZyYW1lcyBvbiB0aGUgZmx5LlxuICA1MzpcdFx0ICBDQU4gZnJhbWVzIGNhbiBiZSByb3V0ZWQgYmV0d2VlbiBDQU4gbmV0d29yayBpbnRlcmZhY2VzIChvbmUgaG9wKS5cbiAgNTQ6XHRcdCAgVGhleSBjYW4gYmUgbW9kaWZpZWQgd2l0aCBBTkQvT1IvWE9SL1NFVCBvcGVyYXRpb25zIGFzIGNvbmZpZ3VyZWRcbiAgNTU6XHRcdCAgYnkgdGhlIG5ldGxpbmsgY29uZmlndXJhdGlvbiBpbnRlcmZhY2Uga25vd24gZS5nLiBmcm9tIGlwdGFibGVzLlxuICA1NjpcdFxuICA1NzpcdHNvdXJjZSBcJiMzNDtuZXQvY2FuL2oxOTM5L0tjb25maWdcJiMzNDtcbiAgNTg6XHRcbiAgNTk6XHRjb25maWcgQ0FOX0lTT1RQXG4gIDYwOlx0XHR0cmlzdGF0ZSBcJiMzNDtJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXCYjMzQ7XG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIENBTiBUcmFuc3BvcnQgUHJvdG9jb2xzIG9mZmVyIHN1cHBvcnQgZm9yIHNlZ21lbnRlZCBQb2ludC10by1Qb2ludFxuICA2MzpcdFx0ICBjb21tdW5pY2F0aW9uIGJldHdlZW4gQ0FOIG5vZGVzIHZpYSB0d28gZGVmaW5lZCBDQU4gSWRlbnRpZmllcnMuXG4gIDY0Olx0XHQgIFRoaXMgcHJvdG9jb2wgZHJpdmVyIGltcGxlbWVudHMgc2VnbWVudGVkIGRhdGEgdHJhbnNmZXJzIGZvciBDQU4gQ0NcbiAgNjU6XHRcdCAgKGFrYSBDbGFzc2ljYWwgQ0FOLCBDQU4gMi4wQikgYW5kIENBTiBGRCBmcmFtZSB0eXBlcyB3aGljaCB3ZXJlXG4gIDY2Olx0XHQgIGludHJvZHVjZWQgd2l0aCBJU08gMTU3NjUtMjoyMDE2LlxuICA2NzpcdFx0ICBBcyBDQU4gZnJhbWVzIGNhbiBvbmx5IHRyYW5zcG9ydCBhIHNtYWxsIGFtb3VudCBvZiBkYXRhIGJ5dGVzXG4gIDY4Olx0XHQgIChtYXguIDggYnl0ZXMgZm9yIENBTiBDQyBhbmQgbWF4LiA2NCBieXRlcyBmb3IgQ0FOIEZEKSB0aGlzXG4gIDY5Olx0XHQgIHNlZ21lbnRhdGlvbiBpcyBuZWVkZWQgdG8gdHJhbnNwb3J0IGxvbmdlciBQcm90b2NvbCBEYXRhIFVuaXRzIChQRFUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjU0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZW1iZWRkZWQgc3lzdGVtcyBleHBlcnQ6CgoqKk5hdmlnYXRpbmcgQ0FOb3BlbiBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBDQU5vcGVuIGNvbmZpZ3VyYXRpb24uICYjMzQ7Q0FOXF9JU09UUCYjMzQ7IGlzIHRoZSBrZXkuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgZGVwZW5kZW5jeS4gSXQmIzM5O3MgYnVpbHQgb24gdG9wIG9mIGBDQU5gLCBzbyB0aGF0JiMzOTtzIHRoZSBwYXJlbnQgbW9kdWxlIGluIHRoaXMgY29uZmlndXJhdGlvbiBoaWVyYXJjaHkuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB0cmFjayBkb3duIHRoZSBgbWVudWNvbmZpZyBDQU5gIGVudHJ5LiBSaWdodCwgbGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgbmV0L2Nhbi9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBvdmVyYWxsIENBTiBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgY2VydGFpbiBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwcm9wZXIgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgQ0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZy01LVxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cbm5ldC9jYW4vS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7Q0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkzNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gUXVhbmRhcnkqKgoKT2theSwgc28gSSBuZWVkIHRvIGVuYWJsZSBDQU4gZnVuY3Rpb25hbGl0eSwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQ0FOYCBhbmQgYENBTl9JU09UUGAuIE15IGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCBgQ0FOYCBpcyBsaWtlbHkgYSBmb3VuZGF0aW9uYWwgc3Vic3lzdGVtLCBhIGJyb2FkZXIgZW5hYmxpbmcgZWxlbWVudCwgd2hpbGUgYENBTl9JU09UUGAgaXMgdGhlIHNwZWNpZmljIGZlYXR1cmUgSSByZXF1aXJlLiBCZWZvcmUgSSBnbyBhaGVhZCBhbmQgYXNzdW1lIHRoYXQmIzM5O3MgdGhlIGZ1bGwgcGljdHVyZSwgaG93ZXZlciwgSSBzaG91bGQgZGVmaW5pdGVseSB2ZXJpZnkgd2hldGhlciB0aGVyZSBhcmUgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhbHdheXMgYmVzdCB0byBiZSB0aG9yb3VnaCBhbmQgYXZvaWQgc3VycHJpc2VzIGRvd24gdGhlIGxpbmUsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGFzIGZvdW5kYXRpb25hbCBhcyBDQU4uIFRpbWUgdG8gZGVsdmUgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCBvdGhlciBlbGVtZW50cyBtaWdodCBiZSB0aWVkIGludG8gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBDb250cm9sbGVyIEFyZWEgTmV0d29yayAoQ0FOKSBuZXR3b3JrIGxheWVyIGNvcmUgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIENBTlxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgODpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIChDQU4pIGlzIGEgc2xvdyAodXAgdG8gMU1iaXQvcykgc2VyaWFsXG4gIDExOlx0XHQgIGNvbW11bmljYXRpb25zIHByb3RvY29sLiBEZXZlbG9wbWVudCBvZiB0aGUgQ0FOIGJ1cyBzdGFydGVkIGluXG4gIDEyOlx0XHQgIDE5ODMgYXQgUm9iZXJ0IEJvc2NoIEdtYkgsIGFuZCB0aGUgcHJvdG9jb2wgd2FzIG9mZmljaWFsbHlcbiAgMTM6XHRcdCAgcmVsZWFzZWQgaW4gMTk4Ni4gVGhlIENBTiBidXMgd2FzIG9yaWdpbmFsbHkgbWFpbmx5IGZvciBhdXRvbW90aXZlLFxuICAxNDpcdFx0ICBidXQgaXMgbm93IHdpZGVseSB1c2VkIGluIG1hcmluZSAoTk1FQTIwMDApLCBpbmR1c3RyaWFsLCBhbmQgbWVkaWNhbFxuICAxNTpcdFx0ICBhcHBsaWNhdGlvbnMuIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIENBTiBuZXR3b3JrIHByb3RvY29sIGZhbWlseVxuICAxNjpcdFx0ICBQRl9DQU4gaXMgY29udGFpbmVkIGluIFx1MDAzY0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4ucnN0XHUwMDNlLlxuICAxNzpcdFxuICAxODpcdFx0ICBJZiB5b3Ugd2FudCBDQU4gc3VwcG9ydCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUgYW5kIGFsc28gdG8gdGhlXG4gIDE5Olx0XHQgIHNwZWNpZmljIGRyaXZlciBmb3IgeW91ciBjb250cm9sbGVyKHMpIHVuZGVyIHRoZSBOZXR3b3JrIGRldmljZVxuICAyMDpcdFx0ICBzdXBwb3J0IHNlY3Rpb24uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDY3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ0FOIEludGVyZmFjZSBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIHNvIHRvIHJlYWxseSBwcm9wZXJseSB0ZXN0IHRoaXMsIHdlJiMzOTtyZSBnb2luZyB0byBuZWVkIGEgQ0FOIGludGVyZmFjZS4gU29tZXRoaW5nIGxpa2UgYSBgQ0FOX1ZDQU5gIChWaXJ0dWFsIENBTikgd2lsbCBkbyB0aGUgdHJpY2sgbmljZWx5LiBJdCYjMzk7cyB0aGUgc2ltcGxlc3Qgd2F5IHRvIGdldCB1cCBhbmQgcnVubmluZyB3aXRob3V0IGFueSBwaHlzaWNhbCBoYXJkd2FyZS4gTm93LCBJIGtub3cgdGhlIGtlcm5lbCBoYXMgdmlydHVhbCBDQU4gaW50ZXJmYWNlczsgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgZW5hYmxlZCBhbmQgYWNjZXNzaWJsZS4gTGV0JiMzOTtzIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGlmIGBDQU5fVkNBTmAgaXMgZXZlbiBhbiBvcHRpb24uIEkmIzM5O2xsIGNoZWNrIGBkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ2Ag4oCTIHRoYXQmIzM5O3MgdGhlIHVzdWFsIHNwb3QgZm9yIENBTiBkcml2ZXIgc2V0dGluZ3MuIFNob3VsZG4mIzM5O3QgdGFrZSBsb25nIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU5fVkNBTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTIzPWlmIENBTl9ERVZcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI0LVxuZHJpdmVycy9uZXQvY2FuL0tjb25maWc6MjU6Y29uZmlnIENBTl9WQ0FOXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0yNi1cdHRyaXN0YXRlIFwmIzM0O1ZpcnR1YWwgTG9jYWwgQ0FOIEludGVyZmFjZSAodmNhbilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3ODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipBc3Nlc3NpbmcgQ0FOIEJ1cyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBDQU5fVkNBTmAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBhIHVzZWZ1bCBmbGFnIHRvIGhhdmUgY29uZmlndXJlZC4gR29vZCwgZ29vZC4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3Qgb3Zlcmxvb2tlZCBhbnl0aGluZyBmdW5kYW1lbnRhbCBpbiB0aGUgZGV2aWNlIHNldHVwLiBUaW1lIHRvIHF1aWNrbHkgdGFrZSBhIGxvb2sgYXQgYENBTl9ERVZgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwaHlzaWNhbCBDQU4gZGV2aWNlIGlzIGNvcnJlY3RseSBpZGVudGlmaWVkIGFuZCBpbml0aWFsaXplZC4gTm8gcG9pbnQgcHJvY2VlZGluZyBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByb3Blcmx5IHdpcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ0FOX0RFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTItXG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZzozOm1lbnVjb25maWcgQ0FOX0RFVlxuZHJpdmVycy9uZXQvY2FuL0tjb25maWctNC1cdHRyaXN0YXRlIFwmIzM0O0NBTiBEZXZpY2UgRHJpdmVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODAyNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoZSBDQU4gSVNPVFAgQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29uZmlndXJhdGlvbnMgaW4gcGxheSBoZXJlIGFyZSBgQ0FOYCwgYENBTl9JU09UUGAsIGBDQU5fREVWYCwgYW5kIGBDQU5fVkNBTmAuIExldCYjMzk7cyBqdXN0IHF1aWNrbHkgbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCBhIHNvbGlkIGdyYXNwIG9uIHdoYXQgZWFjaCBvbmUgZG9lcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIEdvdHRhIGJlIG1ldGljdWxvdXMgaGVyZS4KCk5vdywgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBpc290cC5jYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgSVNPLVRQIGltcGxlbWVudGF0aW9uLCBzbyB0aGF0IG1ha2VzIHNlbnNlLiBUaGUga2V5IGVudHJ5IHBvaW50cyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgYXJlIGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX2JpbmRgLCBgaXNvdHBfcmVsZWFzZWAsIGBpc290cF9wb2xsYCwgYW5kIGBpc290cF9yY3ZgLiBUaG9zZSBhcmUgdGhlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gc2NydXRpbml6ZSBtb3N0IGNsb3NlbHkuCgpJbnRlcmVzdGluZy4uLiBgaXNvdHBfcmN2YCBpcyBkZWNsYXJlZCBgc3RhdGljYCwgYnV0IGl0JiMzOTtzIHVzZWQgYXMgYSBjYWxsYmFjay4gTmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGF0IHBhdHRlcm4uIEFuZCBub3cgSSBzaG91bGQgZG91YmxlIGNoZWNrLCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYz8gSSBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueXRoaW5nIHRoYXQgY291bGQgcG90ZW50aWFsbHkgY2hhbmdlIGJlaGF2aW9yIG91dHNpZGUgdGhlIG1vZHVsZS4gR290dGEgaWRlbnRpZnkgYW55IGZ1bmN0aW9uIHdpdGggZXh0ZXJuYWwgbGlua2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGlzb3RwXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vaXNvdHAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NDQxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSW5pdGlhbGl6YXRpb24gUm91dGluZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGF0IGBtb2R1bGVfaW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG1vZHVsZSBnZXRzIG9mZiB0aGUgZ3JvdW5kLiBXaGF0JiMzOTtzIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaGVyZT8gV2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZD8gQXJlIHRoZXJlIGFueSBzdWJ0bGUgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueSBwb3RlbnRpYWxseSB0cm91Ymxlc29tZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IG1hbmFnZW1lbnQgcGl0ZmFsbHMgdGhhdCBjb3VsZCBiZSBsdXJraW5nIGluIHRoZSBlYXJseSBzdGFnZXMuIEdvdHRhIGVuc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgd2UgZXZlbiB0aGluayBhYm91dCB0b3VjaGluZyB0aGUgJiMzNDt3b3JraW5nJiMzNDsgcGFydHMuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHN0YWJsZSBhbmQgcHJlZGljdGFibGUgYmVoYXZpb3IgZG93biB0aGUgbGluZSwgYW5kIGEgbG90IG9mIGlzc3VlcyBvZnRlbiBzdXJmYWNlIGhlcmUgZmlyc3QuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7cmUgbG9va2luZyBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL2lzb3RwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jPTIwNDA9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjYW5pc290cF9ub3RpZmllciA9IHtcbi0tXG5uZXQvY2FuL2lzb3RwLmMtMjA0My1cbm5ldC9jYW4vaXNvdHAuYzoyMDQ0OnN0YXRpYyBfX2luaXQgaW50IGlzb3RwX21vZHVsZV9pbml0KHZvaWQpXG5uZXQvY2FuL2lzb3RwLmMtMjA0NS17XG4tLVxubmV0L2Nhbi9pc290cC5jPTIwNjI9c3RhdGljIF9fZXhpdCB2b2lkIGlzb3RwX21vZHVsZV9leGl0KHZvaWQpXG4tLVxubmV0L2Nhbi9pc290cC5jLTIwNjctXG5uZXQvY2FuL2lzb3RwLmM6MjA2ODptb2R1bGVfaW5pdChpc290cF9tb2R1bGVfaW5pdCk7XG5uZXQvY2FuL2lzb3RwLmMtMjA2OS1tb2R1bGVfZXhpdChpc290cF9tb2R1bGVfZXhpdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODQzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFByb3RvY29sIFN0cnVjdHVyZSoqCgpPa2F5LCB3aGVyZSBzaG91bGQgSSBzdGFydD8gR2l2ZW4gdGhlIGNvbnRleHQsIHRoZSBtb3N0IGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgZ292ZXJuIHRoZSBJU08tVFAgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBjaGVjayB0aGUgYGlzb3RwX29wc2Agc3RydWN0IGZpcnN0LCBzaW5jZSB0aGF0IHdpbGwgbGlrZWx5IGNvbnRhaW4gdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGFuZCBjYWxsYmFja3MgdGhhdCBkZWZpbmUgaG93IHRoZSBwcm90b2NvbCBhY3R1YWxseSAqd29ya3MqLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGxvdy1sZXZlbCB0cmFuc3BvcnQgbWVjaGFuaXNtcy4gQWx0ZXJuYXRpdmVseSwgdGhlIGBwcm90b2Agc3RydWN0IG1pZ2h0IGJlIHRoZSBwbGFjZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtb3JlIGFic3RyYWN0IHByb3RvY29sIHBhcmFtZXRlcnMgYXJlIGhlbGQuIERlcGVuZGluZyBvbiB0aGUgZGVzaWduLCBlaXRoZXIgY291bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHN0YXRlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBob2xkcyB0aGUgbWFzdGVyIGRlZmluaXRpb25zLiBMZXQmIzM5O3Mgc2VlIHdoaWNoIHN0cnVjdHVyZSBzZWVtcyB0byBiZSB0aGUgY2VudHJhbCBwb2ludC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGJvdGggYW5kIGRldGVybWluZSB3aGljaCBvbmUgaG9sZHMgdGhlIHJlbGV2YW50IGZ1bmN0aW9uYWxpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBwcm90b19vcHMgaXNvdHBfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jYW4vaXNvdHAuYz0xOTk5PXN0YXRpYyBpbnQgaXNvdHBfc29ja19ub19pb2N0bGNtZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxuLS1cbm5ldC9jYW4vaXNvdHAuYy0yMDA1LVxubmV0L2Nhbi9pc290cC5jOjIwMDY6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXNvdHBfb3BzID0ge1xubmV0L2Nhbi9pc290cC5jLTIwMDctXHQuZmFtaWx5ID0gUEZfQ0FOLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIwMAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIGBpc290cF9vcHNgIFN0cnVjdHVyZSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIGl0LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBgaXNvdHBfb3BzYCBzdHJ1Y3R1cmUuIEl0JiMzOTtzIHRoZSBjb3JlIG9mIGhvdyB0aGlzIElTTy1UUCBpbXBsZW1lbnRhdGlvbiBpcyB3b3JraW5nLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBpbnNpZGUgYW5kIG91dC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiwgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzLCB0aGUgY29udGV4dCBpdCYjMzk7cyB1c2VkIGluLCB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJucywgZXZlcnl0aGluZy4gSXQmIzM5O3MgYWxsIGFib3V0IGRpc3NlY3RpbmcgdGhlIGludGVyZmFjZSBhbmQgc2VlaW5nIGhvdyBkaWZmZXJlbnQgbGF5ZXJzIGFuZCBjb21wb25lbnRzIGludGVyYWN0LiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG9wZXJhdGlvbnMgaXQgcHJvdmlkZXMsIHRoZSBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcywgcGFydGljdWxhcmx5IGVycm9yIGhhbmRsaW5nIGFuZCBmcmFtZSB0cmFuc21pc3Npb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJ1ZmZlciBtYW5hZ2VtZW50LCBmbG93IGNvbnRyb2wsIGFuZCBhbnkgc3BlY2lmaWMgcXVpcmtzIG9yIG9wdGltaXphdGlvbnMgdGhhdCBzdGFuZCBvdXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGxvZ2ljLCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBvdmVyYWxsIGRlc2lnbiBjaG9pY2VzLiBHb3R0YSBnZXQgYSBnb29kIGdyaXAgb24gdGhlIHdob2xlIG9wZXJhdGlvbmFsIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDAwOlx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxuMjAwMTpcdHtcbjIwMDI6XHRcdC8qIG5vIGlvY3RscyBmb3Igc29ja2V0IGxheWVyIC1cdTAwM2UgaGFuZCBpdCBkb3duIHRvIE5JQyBsYXllciAqL1xuMjAwMzpcdFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbjIwMDQ6XHR9XG4yMDA1Olx0XG4yMDA2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXNvdHBfb3BzID0ge1xuMjAwNzpcdFx0LmZhbWlseSA9IFBGX0NBTixcbjIwMDg6XHRcdC5yZWxlYXNlID0gaXNvdHBfcmVsZWFzZSxcbjIwMDk6XHRcdC5iaW5kID0gaXNvdHBfYmluZCxcbjIwMTA6XHRcdC5jb25uZWN0ID0gc29ja19ub19jb25uZWN0LFxuMjAxMTpcdFx0LnNvY2tldHBhaXIgPSBzb2NrX25vX3NvY2tldHBhaXIsXG4yMDEyOlx0XHQuYWNjZXB0ID0gc29ja19ub19hY2NlcHQsXG4yMDEzOlx0XHQuZ2V0bmFtZSA9IGlzb3RwX2dldG5hbWUsXG4yMDE0Olx0XHQucG9sbCA9IGlzb3RwX3BvbGwsXG4yMDE1Olx0XHQuaW9jdGwgPSBpc290cF9zb2NrX25vX2lvY3RsY21kLFxuMjAxNjpcdFx0LmdldHRzdGFtcCA9IHNvY2tfZ2V0dHN0YW1wLFxuMjAxNzpcdFx0Lmxpc3RlbiA9IHNvY2tfbm9fbGlzdGVuLFxuMjAxODpcdFx0LnNodXRkb3duID0gc29ja19ub19zaHV0ZG93bixcbjIwMTk6XHRcdC5zZXRzb2Nrb3B0ID0gaXNvdHBfc2V0c29ja29wdCxcbjIwMjA6XHRcdC5nZXRzb2Nrb3B0ID0gaXNvdHBfZ2V0c29ja29wdCxcbjIwMjE6XHRcdC5zZW5kbXNnID0gaXNvdHBfc2VuZG1zZyxcbjIwMjI6XHRcdC5yZWN2bXNnID0gaXNvdHBfcmVjdm1zZyxcbjIwMjM6XHRcdC5tbWFwID0gc29ja19ub19tbWFwLFxuMjAyNDpcdH07XG4yMDI1Olx0XG4yMDI2Olx0c3RhdGljIHN0cnVjdCBwcm90byBpc290cF9wcm90byBfX3JlYWRfbW9zdGx5ID0ge1xuMjAyNzpcdFx0Lm5hbWUgPSBcJiMzNDtDQU5fSVNPVFBcJiMzNDssXG4yMDI4Olx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbjIwMjk6XHRcdC5vYmpfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNvdHBfc29jayksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDA3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTQwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgVGhpcyBJU08tVFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBteSBmb2N1cyBuYXJyb3dzIHRvIHRoZSBmdW5jdGlvbnMgdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gdG91Y2hlZC4gVGhlIHRleHQgZ2l2ZXMgYSBjb25jaXNlIGxpc3Qgb2YgdGhlICphdmFpbGFibGUqIElTTy1UUCBmdW5jdGlvbnM6IGBpc290cF9yZWxlYXNlYCwgYGlzb3RwX2JpbmRgLCBgaXNvdHBfZ2V0bmFtZWAsIGBpc290cF9wb2xsYCwgYGlzb3RwX3NldHNvY2tvcHRgLCBgaXNvdHBfZ2V0c29ja29wdGAsIGBpc290cF9zZW5kbXNnYCwgYW5kIGBpc290cF9yZWN2bXNnYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIHRoZSBBUEkgc3VyZmFjZS4KCkJ1dCB0aGUgKm1vZGlmaWVkKiBmdW5jdGlvbnMgYXJlIHdoYXQmIzM5O3MgaW50ZXJlc3RpbmcgaGVyZS4gVGhlIHBhdGNoIGhhcyB0d2Vha2VkIGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX3JlbGVhc2VgLCBgaXNvdHBfYmluZGAsIGFuZCBgaXNvdHBfcG9sbGAuIFRoYXQmIzM5O3MgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgaW52ZXN0aWdhdGlvbiDigJMgdGhvc2UgYXJlIGRlZmluaXRlbHkga2V5IGFyZWFzIHRvIHNjcnV0aW5pemUuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRob3NlLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgbGlzdCBvZiB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIHRoYXQgZ290IGF0dGVudGlvbjogYGlzb3RwX3JjdmAsIGBpc290cF90eF90aW1lb3V0YCwgYGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcmAsIGBpc290cF9yY3ZfZWNob2AsIGBpc290cF9yY3ZfZmNgLCBgaXNvdHBfcmN2X3NmYCwgYGlzb3RwX3Jjdl9mZmAsIGFuZCBgaXNvdHBfcmN2X2NmYC4gSG1tLCBzb21lIG9mIHRoZXNlLCBsaWtlIGBpc290cF9yY3ZgLCBhcmUgc3RhdGljLiBUaGUgaW50ZXJuYWwgb25lcyBhcmUgdXN1YWxseSBsZXNzIGltcG9ydGFudCBmcm9tIGFuIEFQSSBwZXJzcGVjdGl2ZSwgYnV0IHNpbmNlIHRoZXkmIzM5O3JlICptb2RpZmllZCosIHRoZXkmIzM5O3JlIHNpZ25pZmljYW50LgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciB0aGUgaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucywgYXMgdGhhdCB3b3VsZCBiZSBhIGhpZ2hlciBsZXZlbCB2aWV3IG9mIHRoZSBjaGFuZ2VzLgoKT2theSwgc28gbG9va2luZyBhdCB0aGUgbGlzdCBhZ2FpbiwgYGlzb3RwX3JjdmAgaXMgaW5kZWVkIHN0YXRpYy4gQnV0Li4uIHdhaXQsIGl0JiMzOTtzIGEgY2FsbGJhY2ssIGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIGluY29taW5nIENBTiBmcmFtZXMuIEl0ICppcyogdGhlIGNvcmUgb2YgdGhlIHJlY2VpdmUgcGF0aC4gRXZlbiB0aG91Z2ggaXQmIzM5O3Mgc3RhdGljLCBpdCYjMzk7cyByZWdpc3RlcmVkIGFzIGEgY3JpdGljYWwgY2FsbGJhY2suIEkgc2hvdWxkIG5vdGUgdGhhdCBpdCBpcyB0aGUgbWFpbiByZWNlaXZlciBlbnRyeSBwb2ludC4gU28gbWF5YmUgSSBzaG91bGQganVzdCBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBgcHJvdG9fb3BzYCB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGF0IGZ1bmN0aW9uIGlzIGlubGluZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIHZvaWQgaXNvdHBfcmN2XFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi9pc290cC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jYW4vaXNvdHAuYz02NDQ9c3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG4tLVxubmV0L2Nhbi9pc290cC5jLTc0My1cbm5ldC9jYW4vaXNvdHAuYzo3NDQ6c3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXG5uZXQvY2FuL2lzb3RwLmMtNzQ1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5MjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENBTiBJU09UUCBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzbiYjMzk7dCBhbiBpbmxpbmVkIGNoYW5nZTsgdGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGBpc290cF9yY3ZgIGFuZCBgaXNvdHBfcmN2X2VjaG9gIGFyZSBiZWluZyBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGNhbl9yeF9yZWdpc3RlcmAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBSWCBwYXRoIGlzIGJlaW5nIHNldCB1cC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLgoKTXkgbWVudGFsIGxpc3Qgb2YgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpczogYGlzb3RwX3NlbmRtc2dgLCBgaXNvdHBfYmluZGAsIGBpc290cF9yZWxlYXNlYCwgYGlzb3RwX3BvbGxgLCBgaXNvdHBfcmN2YCwgYW5kIGBpc290cF9yY3ZfZWNob2AuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBBUEkgdGhpcyBwYXRjaCBpbnRlcmFjdHMgd2l0aC4KCk5vdywgbG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgaW50ZXJhY3Rpb25zIG9jY3VyIHdpdGggYENBTmAsIGBDQU5fSVNPVFBgLCBgQ0FOX0RFVmAsIGFuZCBgQ0FOX1ZDQU5gLgoKVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyBmaXhpbmcgY29uY3VycmVuY3kgcHJvYmxlbXMgd2l0aGluIHRoZSBDQU4gSVNPVFAgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgdGhlcmUgYXJlIHN0YXRlLWhhbmRsaW5nIGlzc3VlcyB3aXRoIFRYL1JYIGFuZCBob3cgdHJhbnNmZXJzIGFyZSB0cmFja2VkLiBUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBgdHhfcmVzdWx0YCBhcnJheSBhbmQgdGhlIHVzZSBvZiBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgYXJlIGtleSBpbmRpY2F0b3JzIG9mIHRoaXMuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgdmVyeSBoZWFydCBvZiB0aGUgSVNPVFAgcHJvdG9jb2wuCgpHaXZlbiB0aGlzLCBJIGhhdmUgdG8gYXNzdW1lIHRoZSB3b3JzdDogdGhlcmUmIzM5O3MgYSBzdHJvbmcgcG9zc2liaWxpdHkgdGhhdCBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGVycm9ycyBoYXZlIGJlZW4gaW50cm9kdWNlZC4gVGhlIHBhdGNoICptdXN0KiBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBjaGFuZ2VzIGhhdmVuJiMzOTt0IGRlc3RhYmlsaXplZCB0aGUgY29yZSBwcm90b2NvbCBpbiBhbnkgd2F5LiBJIHdpbGwgYWxzbyBkb3VibGUtY2hlY2sgd2hldGhlciBgQ0FOX0lTT1RQYCBoYXMgYW55IGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3cgYnJva2VuIG9yIHJlcXVpcmUgZnVydGhlciBhbmFseXNpcyBnaXZlbiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTU5NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGVwZW5kZW5jeSBDb25mdXNpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGBuZXQvY2FuL0tjb25maWdgIGZpbGUgYW5kIHNvbWV0aGluZyBzZWVtcy4uLm9mZi4gSXQmIzM5O3Mgb2RkLCBJIHdhcyBzdXJlIEkgaGFkIHNlZW4gYGRlcGVuZHMgb25gIGNsYXVzZXMgaW4gdGhpcyB0eXBlIG9mIEtjb25maWcgYmVmb3JlLiBMb29raW5nIGF0IGl0IGFnYWluLCBJJiMzOTttIG5vdCBzZWVpbmcgdGhlbSBoZXJlIGZvciB0aGVzZSBzcGVjaWZpYyBDQU4gb3B0aW9ucy4gVGhpcyBpcyBpbW1lZGlhdGVseSBtYWtpbmcgbWUgcXVlc3Rpb24gaG93IHRoZSBvcHRpb25zIGFyZSBiZWluZyBnYXRlZC4gQXJlIHRoZXJlIGltcGxpY2l0IGRlcGVuZGVuY2llcyBiYWtlZCBpbiBzb21ld2hlcmUgZWxzZT8gQW0gSSBtaXNzaW5nIHNvbWV0aGluZyBnbGFyaW5nbHkgb2J2aW91cz8gT3IgaXMgdGhpcyBhIGRlbGliZXJhdGUgYXJjaGl0ZWN0dXJhbCBjaG9pY2UgaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSwgcG9zc2libHkgcmVseWluZyBvbiBicm9hZGVyLCBsZXNzIGdyYW51bGFyIGRlcGVuZGVuY2llcyBkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGUgS2NvbmZpZyB0cmVlPyBUaGlzIGRldmlhdGVzIGZyb20gd2hhdCBJIHdhcyBleHBlY3RpbmcgYW5kIHdhcnJhbnRzIGEgZGVlcGVyIGRpdmUgdG8gZmlndXJlIG91dCB0aGUgaW50ZW5kZWQgYnVpbGQgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlzY3JlcGFuY3kgaW1tZWRpYXRlbHkgdG8gYXZvaWQgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHdpbGwgYWN0dWFsbHkgZnVuY3Rpb24gYXQgY29tcGlsZS10aW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRldGVybWluZSBpZiB0aGUgbG9naWMgSSBhbSBzZWVpbmcgaXMgaW50ZW50aW9uYWwgYW5kIGhvdyBpdCB0aWVzIGludG8gdGhlIHdob2xlIHBpY3R1cmUgb2YgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2Nhbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2Nhbi9qMTkzOS9LY29uZmlnPTY9Y29uZmlnIENBTl9KMTkzOVxubmV0L2Nhbi9qMTkzOS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtTQUUgSjE5MzlcJiMzNDtcbm5ldC9jYW4vajE5MzkvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiBDQU5cbm5ldC9jYW4vajE5MzkvS2NvbmZpZy05LVx0aGVscFxuLS1cbm5ldC9jYW4vajE5Mzkvc29ja2V0LmM9Mzk2PXN0YXRpYyBpbnQgajE5Mzlfc2tfaW5pdChzdHJ1Y3Qgc29jayAqc2spXG4tLVxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy00MTktXG5uZXQvY2FuL2oxOTM5L3NvY2tldC5jOjQyMDpcdC8qIGoxOTM5X3NrX3NvY2tfZGVzdHJ1Y3QoKSBkZXBlbmRzIG9uIFNPQ0tfUkNVX0ZSRUUgZmxhZyAqL1xubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy00MjEtXHRzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1JDVV9GUkVFKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxMDUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqVW5kZXJzdGFuZGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYENBTl9JU09UUGAgb3B0aW9uIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtzIG5vdCBleHBsaWNpdGx5IHN0YXRpbmcgaXRzIGRlcGVuZGVuY2llcyB1c2luZyBgZGVwZW5kcyBvbmAuIFRoYXQmIzM5O3MgYSBiaXQgdW51c3VhbC4gQWgsIGJ1dCBpdCYjMzk7cyBuZXN0ZWQgd2l0aGluIHRoZSBgbWVudWNvbmZpZyBDQU5gIHNlY3Rpb24uIFNvLCBJIG5lZWQgdG8gaW50ZXJwcmV0IHRoYXQgYXMgYW4gKmltcGxpY2l0KiBkZXBlbmRlbmN5IG9uIGBDQU5gLiBNYWtlcyBzZW5zZS4gSWYgeW91IHdhbnQgSVNPVFAsIHlvdSBjbGVhcmx5IG5lZWQgdGhlIENBTiBpbnRlcmZhY2UgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGVyZWZvcmUsIHRvIGJlIGNlcnRhaW4sIEkgaGFkIGJldHRlciB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYENBTmAgaXRzZWxmLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3Mgd2hhdCB3aXRoIGBDQU5gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIENBTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWctNS1cbm5ldC9jYW4vS2NvbmZpZzo2Om1lbnVjb25maWcgQ0FOXG5uZXQvY2FuL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0NBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNzMKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIENBTiBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgZm9jdXNlZCBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYENBTmAgYW5kIGBORVRgLiBDbGVhcmx5LCBgQ0FOYCBpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlIOKAkyBpdCYjMzk7cyByaWdodCB0aGVyZSBpbiB0aGUgYG5ldC9gIGRpcmVjdG9yeS4gU28sIHRoZSBkZXBlbmRlbmNlIGlzIHByZXR0eSBvYnZpb3VzLiBUaGUgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBmcm9tIG15IGV4cGVyaWVuY2UsIGBDQU5gLCBgQ0FOX0lTT1RQYCwgYW5kIGBDQU5fVkNBTmAgYXJlIHRoZSBrZXkgb25lcyB0byBjb25jZW50cmF0ZSBvbiBoZXJlLiBOb3csIHRpbWUgdG8gdXRpbGl6ZSBgc2V0LXJlc3VsdHNgIHRvIGltcGxlbWVudCB0aG9zZSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fSVNPVFAmIzM0OywKICAgICYjMzQ7Q0FOX0RFViYjMzQ7LAogICAgJiMzNDtDQU5fVkNBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lzb3RwX3NlbmRtc2cmIzM0OywKICAgICYjMzQ7aXNvdHBfYmluZCYjMzQ7LAogICAgJiMzNDtpc290cF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O2lzb3RwX3BvbGwmIzM0OywKICAgICYjMzQ7aXNvdHBfcmN2JiMzNDssCiAgICAmIzM0O2lzb3RwX3Jjdl9lY2hvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDQU4gSVNPVFAgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gZml4IGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBUWC9SWCBzdGF0ZSBoYW5kbGluZyBhbmQgdHJhbnNmZXIgZ2VuZXJhdGlvbiB0cmFja2luZy4gSXQgaW50cm9kdWNlcyBhIG5ldyB0eF9yZXN1bHQgYXJyYXkgYW5kIHVzZXMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgZm9yIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgdGhlIElTT1RQIHByb3RvY29sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0lTT1RQJiMzNDssCiAgICAmIzM0O0NBTl9ERVYmIzM0OywKICAgICYjMzQ7Q0FOX1ZDQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpc290cF9zZW5kbXNnJiMzNDssCiAgICAmIzM0O2lzb3RwX2JpbmQmIzM0OywKICAgICYjMzQ7aXNvdHBfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtpc290cF9wb2xsJiMzNDssCiAgICAmIzM0O2lzb3RwX3JjdiYjMzQ7LAogICAgJiMzNDtpc290cF9yY3ZfZWNobyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ0FOIElTT1RQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGZpeCBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gVFgvUlggc3RhdGUgaGFuZGxpbmcgYW5kIHRyYW5zZmVyIGdlbmVyYXRpb24gdHJhY2tpbmcuIEl0IGludHJvZHVjZXMgYSBuZXcgdHhfcmVzdWx0IGFycmF5IGFuZCB1c2VzIFJFQURfT05DRS9XUklURV9PTkNFIGZvciBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBJU09UUCBwcm90b2NvbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbmV3IHJhY2UgY29uZGl0aW9ucyBvciBsb2dpYyBidWdzIHdlcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEyOjU2LjE1MjUxMDA2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1MzA0MzY5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0FOXCIsXG4gICAgXCJDQU5fSVNPVFBcIixcbiAgICBcIkNBTl9ERVZcIixcbiAgICBcIkNBTl9WQ0FOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXNvdHBfc2VuZG1zZ1wiLFxuICAgIFwiaXNvdHBfYmluZFwiLFxuICAgIFwiaXNvdHBfcmVsZWFzZVwiLFxuICAgIFwiaXNvdHBfcG9sbFwiLFxuICAgIFwiaXNvdHBfcmN2XCIsXG4gICAgXCJpc290cF9yY3ZfZWNob1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBDQU4gSVNPVFAgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gdG8gZml4IGNvbmN1cnJlbmN5IGlzc3VlcyBpbiBUWC9SWCBzdGF0ZSBoYW5kbGluZyBhbmQgdHJhbnNmZXIgZ2VuZXJhdGlvbiB0cmFja2luZy4gSXQgaW50cm9kdWNlcyBhIG5ldyB0eF9yZXN1bHQgYXJyYXkgYW5kIHVzZXMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgZm9yIHN0YXRlIHRyYW5zaXRpb25zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbG9naWMgb2YgdGhlIElTT1RQIHByb3RvY29sIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMjo1Ni4xNTI1MTgwOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU4MTYwNTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDI5NTI3MWQxOTc5NzM1MWIzNmMzY2M1MGY3Y2RhM2IxMzE3YjBlNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAwNzoxMjo1NCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvY2FuL2lzb3RwLmMgYi9uZXQvY2FuL2lzb3RwLmNcXG5pbmRleCA1NGJlY2FmNjg5OGYxMy4uMWYxMWM2NmIzNDNjODYgMTAwNjQ0XFxuLS0tIGEvbmV0L2Nhbi9pc290cC5jXFxuKysrIGIvbmV0L2Nhbi9pc290cC5jXFxuQEAgLTEyNyw2ICsxMjcsMTUgQEAgTU9EVUxFX1BBUk1fREVTQyhtYXhfcGR1X3NpemUsIFxcXCJtYXhpbXVtIGlzb3RwIHBkdSBzaXplIChkZWZhdWx0IFxcXCJcXG4gI2RlZmluZSBJU09UUF9GQ19USU1FT1VUIDFcXHQvKiAxIHNlYyAqL1xcbiAjZGVmaW5lIElTT1RQX0VDSE9fVElNRU9VVCAyXFx0LyogMiBzZWNzICovXFxuIFxcbisvKiBzby1cXHUwMDNldHhfcmVzdWx0W3NvLVxcdTAwM2V0eF9nZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdIGhvbGRzIHRoZSBwYWNrZWQgdmFsdWVcXG4rICogKGVyciBcXHUwMDNjXFx1MDAzYyBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMgfCBnZW4pIGZvciBlYWNoIHR4IGdlbmVyYXRpb24gc2xvdCwgc28gaXRcXG4rICogY2FuIGJlIGhhbmRsZWQgd2l0aCBhIHNpbmdsZSBSRUFEX09OQ0UoKS9XUklURV9PTkNFKCkgYWNjZXNzLlxcbisgKi9cXG4rI2RlZmluZSBJU09UUF9UWF9SRVNVTFRfU0xPVFMgNFxcbisjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUyAyNFxcbisjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSyAoKDFVIFxcdTAwM2NcXHUwMDNjIElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUykgLSAxKVxcbisjZGVmaW5lIElTT1RQX1RYX1JFU1VMVF9FUlJfTUFTSyAweEZGXFxuK1xcbiBlbnVtIHtcXG4gXFx0SVNPVFBfSURMRSA9IDAsXFxuIFxcdElTT1RQX1dBSVRfRklSU1RfRkMsXFxuQEAgLTE2Niw3ICsxNzUsOCBAQCBzdHJ1Y3QgaXNvdHBfc29jayB7XFxuIFxcdHUzMiBmb3JjZV90eF9zdG1pbjtcXG4gXFx0dTMyIGZvcmNlX3J4X3N0bWluO1xcbiBcXHR1MzIgY2ZlY2hvOyAvKiBjb25zZWN1dGl2ZSBmcmFtZSBlY2hvIHRhZyAqL1xcbi1cXHR1MzIgdHhfZ2VuOyAvKiBnZW5lcmF0aW9uLCBidW1wZWQgcGVyIG5ldyB0eCB0cmFuc2ZlciAqL1xcbitcXHR1MzIgdHhfZ2VuOyAvKiB0cmFuc2ZlciBnZW5lcmF0aW9uLCBpbmNyZWFzZWQgcGVyIG5ldyB0eCB0cmFuc2ZlciAqL1xcbitcXHR1MzIgdHhfcmVzdWx0W0lTT1RQX1RYX1JFU1VMVF9TTE9UU107IC8qIHBlci1nZW5lcmF0aW9uIHJlc3VsdCBzbG90cyAqL1xcbiBcXHRzdHJ1Y3QgdHBjb24gcngsIHR4O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIG5vdGlmaWVyO1xcbiBcXHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xcbkBAIC0xNzcsNiArMTg3LDY1IEBAIHN0YXRpYyBMSVNUX0hFQUQoaXNvdHBfbm90aWZpZXJfbGlzdCk7XFxuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXNvdHBfbm90aWZpZXJfbG9jayk7XFxuIHN0YXRpYyBzdHJ1Y3QgaXNvdHBfc29jayAqaXNvdHBfYnVzeV9ub3RpZmllcjtcXG4gXFxuKy8qIGluY3JlYXNlICgyNCBiaXQpIHR4IGdlbmVyYXRpb24gdmFsdWUgKi9cXG4rc3RhdGljIHUzMiBpc290cF9pbmNfdHhfZ2VuKHUzMiBnZW4pXFxuK3tcXG4rXFx0cmV0dXJuIChnZW4gKyAxKSBcXHUwMDI2IElTT1RQX1RYX1JFU1VMVF9HRU5fTUFTSztcXG4rfVxcbitcXG4rLyogc3RvcmUgOCBiaXQgZXJyb3IgYW5kIDI0IGJpdCB0eCBnZW5lcmF0aW9uIHZhbHVlcyBpbiBwYWNrZWQgdTMyIGVsZW1lbnQgKi9cXG4rc3RhdGljIHUzMiBpc290cF9wYWNrX3R4X3Jlc3VsdCh1MzIgZ2VuLCBpbnQgZXJyKVxcbit7XFxuK1xcdHJldHVybiBnZW4gfCAoKHUzMillcnIgXFx1MDAzY1xcdTAwM2MgSVNPVFBfVFhfUkVTVUxUX0dFTl9CSVRTKTtcXG4rfVxcbitcXG4rLyogZ2V0IHRoZSAyNCBiaXQgdHggZ2VuZXJhdGlvbiB2YWx1ZSBmcm9tIHRoZSB0eCByZXN1bHQgKi9cXG4rc3RhdGljIHUzMiBpc290cF9nZXRfdHhfZ2VuKHUzMiBnZW5fZXJyKVxcbit7XFxuK1xcdHJldHVybiBnZW5fZXJyIFxcdTAwMjYgSVNPVFBfVFhfUkVTVUxUX0dFTl9NQVNLO1xcbit9XFxuK1xcbisvKiBnZXQgdGhlIDggYml0IGVycm9yIHZhbHVlIGZyb20gdGhlIHR4IHJlc3VsdCAqL1xcbitzdGF0aWMgdTMyIGlzb3RwX2dldF90eF9lcnIodTMyIGdlbl9lcnIpXFxuK3tcXG4rXFx0cmV0dXJuIChnZW5fZXJyIFxcdTAwM2VcXHUwMDNlIElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUykgXFx1MDAyNiBJU09UUF9UWF9SRVNVTFRfRVJSX01BU0s7XFxuK31cXG4rXFxuKy8qIHN0b3JlIHRyYW5zZmVyIHJlc3VsdCBpbiBwZXItZ2VuZXJhdGlvbiU0IHNvLVxcdTAwM2V0eF9yZXN1bHRbXSBzbG90ICovXFxuK3N0YXRpYyB2b2lkIGlzb3RwX3NldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuLCBpbnQgZXJyKVxcbit7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4X3Jlc3VsdFtnZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdLFxcbitcXHRcXHQgICBpc290cF9wYWNrX3R4X3Jlc3VsdChnZW4sIGVycikpO1xcbit9XFxuK1xcbisvKiBmZXRjaCB0aGUgcmVzdWx0IHJlY29yZGVkIGZvciAnZ2VuJywgYXMgYSAobmVnYXRpdmUpIGVycm5vICgwIGZvciBzdWNjZXNzKSAqL1xcbitzdGF0aWMgaW50IGlzb3RwX2dldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuKVxcbit7XFxuK1xcdHUzMiByZXN1bHQgPSBSRUFEX09OQ0Uoc28tXFx1MDAzZXR4X3Jlc3VsdFtnZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdKTtcXG4rXFxuK1xcdGlmIChpc290cF9nZXRfdHhfZ2VuKHJlc3VsdCkgIT0gZ2VuKSB7XFxuK1xcdFxcdHByX25vdGljZV9vbmNlKFxcXCJjYW4taXNvdHA6IHR4X3Jlc3VsdFtdIHNsb3QgcmV1c2VkIGJlZm9yZSByZWFkXFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdC8qIHJlcG9ydCBmYWlsdXJlIHJhdGhlciB0aGFuIHJpc2sgYSBmYWxzZSBzdWNjZXNzICovXFxuK1xcdFxcdHJldHVybiAtRUNPTU07XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtKGlzb3RwX2dldF90eF9lcnIocmVzdWx0KSk7XFxuK31cXG4rXFxuKy8qIHRydWUgaWYgZG9uZSwgc2h1dCBkb3duIG9yIHN1cGVyc2VkZWQgKCdnZW4nIGlzIG5vIGxvbmdlciB0aGUgYWN0aXZlXFxuKyAqIHRyYW5zZmVyKS4gUmVhZHMgdHguc3RhdGUgZmlyc3QgKGFjcXVpcmUpIHNvIHR4X2dlbi90eF9yZXN1bHQgcmVhZHNcXG4rICogYmVsb3cgc2VlIGF0IGxlYXN0IHdoYXQgdGhhdCBzdGF0ZSB3cml0ZSBwdWJsaXNoZWQgKGNvbW1vbiBzZXF1ZW5jZSkuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBpc290cF90eF9nZW5fZG9uZShzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHUzMiBnZW4pXFxuK3tcXG4rXFx0LyogcmVhZCB0eC5zdGF0ZSBmaXJzdCBmb3IgdGhlIGNvbW1vbiBzZXF1ZW5jZSAqL1xcbitcXHR1MzIgc3RhdGUgPSBzbXBfbG9hZF9hY3F1aXJlKFxcdTAwMjZzby1cXHUwMDNldHguc3RhdGUpO1xcbitcXG4rXFx0cmV0dXJuIHN0YXRlID09IElTT1RQX0lETEUgfHwgc3RhdGUgPT0gSVNPVFBfU0hVVERPV04gfHxcXG4rXFx0ICAgICAgIFJFQURfT05DRShzby1cXHUwMDNldHhfZ2VuKSAhPSBnZW47XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlzb3RwX3NvY2sgKmlzb3RwX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaylcXG4ge1xcbiBcXHRyZXR1cm4gKHN0cnVjdCBpc290cF9zb2NrICopc2s7XFxuQEAgLTE5OSw3ICsyNjgsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICByeHRpbWVyKTtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNnNvLVxcdTAwM2VzaztcXG4gXFxuLVxcdGlmIChzby1cXHUwMDNlcnguc3RhdGUgPT0gSVNPVFBfV0FJVF9EQVRBKSB7XFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZXJ4LnN0YXRlKSA9PSBJU09UUF9XQUlUX0RBVEEpIHtcXG4gXFx0XFx0Lyogd2UgZGlkIG5vdCBnZXQgbmV3IGRhdGEgZnJhbWVzIGluIHRpbWUgKi9cXG4gXFxuIFxcdFxcdC8qIHJlcG9ydCAnY29ubmVjdGlvbiB0aW1lZCBvdXQnICovXFxuQEAgLTIwOCw3ICsyNzcsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcXG4gXFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4gXFxuIFxcdFxcdC8qIHJlc2V0IHJ4IHN0YXRlICovXFxuLVxcdFxcdHNvLVxcdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XFxuK1xcdFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xcbkBAIC0zNzIsMjAgKzQ0MSwxOSBAQCBzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pO1xcbiBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mYyhzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc29jayAqc2sgPSBcXHUwMDI2c28tXFx1MDAzZXNrO1xcbitcXHRpbnQgdHhfZXJyID0gRUJBRE1TRzsgLyogZGVmYXVsdCBmb3IgdW5rbm93biBGQyBzdGF0dXMgKi9cXG4gXFxuLVxcdGlmIChzby1cXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfV0FJVF9GQyBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgc28tXFx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRklSU1RfRkMpXFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZzby1cXHUwMDNldHh0aW1lcik7XFxuIFxcbiBcXHQvKiBpc290cF90eF90aW1lb3V0KCkgbWF5IGhhdmUgZ2l2ZW4gdXAgb24gdGhpcyBqb2Igd2hpbGVcXG4tXFx0ICogaHJ0aW1lcl9jYW5jZWwoKSBhYm92ZSB3YWl0ZWQgZm9yIGl0IHRvIGZpbmlzaDsgc28tXFx1MDAzZXJ4X2xvY2tcXG4tXFx0ICogKGhlbGQgYnkgb3VyIGNhbGxlciBpc290cF9yY3YoKSkgcnVsZXMgb3V0IGEgY29uY3VycmVudCBjbGFpbSxcXG4tXFx0ICogc28gYSBwbGFpbiByZWNoZWNrIGlzIGVub3VnaCBoZXJlLlxcbitcXHQgKiBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoID1cXHUwMDNlIHJlY2hlY2tcXG4gXFx0ICovXFxuLVxcdGlmIChzby1cXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfV0FJVF9GQyBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgc28tXFx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRklSU1RfRkMpXFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZDIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuIFxcdGlmICgoY2YtXFx1MDAzZWxlbiBcXHUwMDNjIGFlICsgRkNfQ09OVEVOVF9TWikgfHxcXG5AQCAtMzk2LDEzICs0NjQsMTUgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXFxuIFxcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbiBcXHRcXHRcXHRza19lcnJvcl9yZXBvcnQoc2spO1xcbiBcXG4tXFx0XFx0c28tXFx1MDAzZXR4LnN0YXRlID0gSVNPVFBfSURMRTtcXG4rXFx0XFx0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgc28tXFx1MDAzZXR4X2dlbiwgRUJBRE1TRyk7XFxuK1xcdFxcdC8qIHNldCB0byBJRExFIGFmdGVyIHB1Ymxpc2hpbmcgdHhfcmVzdWx0ICovXFxuK1xcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZzby1cXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xcbiBcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnNvLVxcdTAwM2V3YWl0KTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGdldCBzdGF0aWMvZHluYW1pYyBjb21tdW5pY2F0aW9uIHBhcmFtcyBmcm9tIGZpcnN0L2V2ZXJ5IEZDIGZyYW1lICovXFxuLVxcdGlmIChzby1cXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfV0FJVF9GSVJTVF9GQyB8fFxcbitcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfV0FJVF9GSVJTVF9GQyB8fFxcbiBcXHQgICAgc28tXFx1MDAzZW9wdC5mbGFncyBcXHUwMDI2IENBTl9JU09UUF9EWU5fRkNfUEFSTVMpIHtcXG4gXFx0XFx0c28tXFx1MDAzZXR4ZmMuYnMgPSBjZi1cXHUwMDNlZGF0YVthZSArIDFdO1xcbiBcXHRcXHRzby1cXHUwMDNldHhmYy5zdG1pbiA9IGNmLVxcdTAwM2VkYXRhW2FlICsgMl07XFxuQEAgLTQyNiwxMyArNDk2LDEzIEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxcbiBcXHRcXHRcXHRzby1cXHUwMDNldHhfZ2FwID0ga3RpbWVfYWRkX25zKHNvLVxcdTAwM2V0eF9nYXAsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgKHNvLVxcdTAwM2V0eGZjLnN0bWluIC0gMHhGMClcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAqIDEwMDAwMCk7XFxuLVxcdFxcdHNvLVxcdTAwM2V0eC5zdGF0ZSA9IElTT1RQX1dBSVRfRkM7XFxuK1xcdFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlLCBJU09UUF9XQUlUX0ZDKTtcXG4gXFx0fVxcbiBcXG4gXFx0c3dpdGNoIChjZi1cXHUwMDNlZGF0YVthZV0gXFx1MDAyNiAweDBGKSB7XFxuIFxcdGNhc2UgSVNPVFBfRkNfQ1RTOlxcbiBcXHRcXHRzby1cXHUwMDNldHguYnMgPSAwO1xcbi1cXHRcXHRzby1cXHUwMDNldHguc3RhdGUgPSBJU09UUF9TRU5ESU5HO1xcbitcXHRcXHRXUklURV9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XFxuIFxcdFxcdC8qIHNlbmQgQ0YgZnJhbWUgYW5kIGVuYWJsZSBlY2hvIHRpbWVvdXQgaGFuZGxpbmcgKi9cXG4gXFx0XFx0aHJ0aW1lcl9zdGFydChcXHUwMDI2c28tXFx1MDAzZWVjaG90aW1lciwga3RpbWVfc2V0KElTT1RQX0VDSE9fVElNRU9VVCwgMCksXFxuIFxcdFxcdFxcdCAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7XFxuQEAgLTQ0NywxNCArNTE3LDE5IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxcbiBcXG4gXFx0Y2FzZSBJU09UUF9GQ19PVkZMVzpcXG4gXFx0XFx0Lyogb3ZlcmZsb3cgb24gcmVjZWl2ZXIgc2lkZSAtIHJlcG9ydCAnbWVzc2FnZSB0b28gbG9uZycgKi9cXG4tXFx0XFx0c2stXFx1MDAzZXNrX2VyciA9IEVNU0dTSVpFO1xcbi1cXHRcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcXG4tXFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4rXFx0XFx0dHhfZXJyID0gRU1TR1NJWkU7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXG4gXFx0ZGVmYXVsdDpcXG4tXFx0XFx0Lyogc3RvcCB0aGlzIHR4IGpvYiAqL1xcbi1cXHRcXHRzby1cXHUwMDNldHguc3RhdGUgPSBJU09UUF9JRExFO1xcbitcXHRcXHQvKiByZXNlcnZlZC91bmtub3duIGZsb3cgc3RhdHVzICh0eF9lcnIgZGVmYXVsdHMgdG8gRUJBRE1TRykgKi9cXG4rXFxuK1xcdFxcdHNrLVxcdTAwM2Vza19lcnIgPSB0eF9lcnI7XFxuK1xcdFxcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxcbitcXHRcXHRcXHRza19lcnJvcl9yZXBvcnQoc2spO1xcbitcXG4rXFx0XFx0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgc28tXFx1MDAzZXR4X2dlbiwgdHhfZXJyKTtcXG4rXFx0XFx0Lyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi9cXG4rXFx0XFx0c21wX3N0b3JlX3JlbGVhc2UoXFx1MDAyNnNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfSURMRSk7XFxuIFxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2c28tXFx1MDAzZXdhaXQpO1xcbiBcXHR9XFxuIFxcdHJldHVybiAwO1xcbkBAIC00NjcsNyArNTQyLDcgQEAgc3RhdGljIGludCBpc290cF9yY3Zfc2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgcGNpbGVuLFxcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcXG4gXFxuIFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZzby1cXHUwMDNlcnh0aW1lcik7XFxuLVxcdHNvLVxcdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcXG4gXFxuIFxcdGlmICghbGVuIHx8IGxlbiBcXHUwMDNlIGNmLVxcdTAwM2VsZW4gLSBwY2lsZW4pXFxuIFxcdFxcdHJldHVybiAxO1xcbkBAIC01MDEsNyArNTc2LDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXFxuIFxcdGludCBmZl9wY2lfc3o7XFxuIFxcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c28tXFx1MDAzZXJ4dGltZXIpO1xcbi1cXHRzby1cXHUwMDNlcnguc3RhdGUgPSBJU09UUF9JRExFO1xcbitcXHRXUklURV9PTkNFKHNvLVxcdTAwM2VyeC5zdGF0ZSwgSVNPVFBfSURMRSk7XFxuIFxcbiBcXHQvKiBnZXQgdGhlIHVzZWQgc2VuZGVyIExMX0RMIGZyb20gdGhlIChmaXJzdCkgQ0FOIGZyYW1lIGRhdGEgbGVuZ3RoICovXFxuIFxcdHNvLVxcdTAwM2VyeC5sbF9kbCA9IHBhZGxlbihjZi1cXHUwMDNlbGVuKTtcXG5AQCAtNTU1LDcgKzYzMCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxcbiBcXG4gXFx0LyogaW5pdGlhbCBzZXR1cCBmb3IgdGhpcyBwZHUgcmVjZXB0aW9uICovXFxuIFxcdHNvLVxcdTAwM2VyeC5zbiA9IDE7XFxuLVxcdHNvLVxcdTAwM2VyeC5zdGF0ZSA9IElTT1RQX1dBSVRfREFUQTtcXG4rXFx0V1JJVEVfT05DRShzby1cXHUwMDNlcnguc3RhdGUsIElTT1RQX1dBSVRfREFUQSk7XFxuIFxcbiBcXHQvKiBubyBjcmVhdGlvbiBvZiBmbG93IGNvbnRyb2wgZnJhbWVzICovXFxuIFxcdGlmIChzby1cXHUwMDNlb3B0LmZsYWdzIFxcdTAwMjYgQ0FOX0lTT1RQX0xJU1RFTl9NT0RFKVxcbkBAIC01NzMsNyArNjQ4LDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXFxuIFxcdHN0cnVjdCBza19idWZmICpuc2tiO1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGlmIChzby1cXHUwMDNlcnguc3RhdGUgIT0gSVNPVFBfV0FJVF9EQVRBKVxcbitcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9EQVRBKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qIGRyb3AgaWYgdGltZXN0YW1wIGdhcCBpcyBsZXNzIHRoYW4gZm9yY2Vfcnhfc3RtaW4gbmFubyBzZWNzICovXFxuQEAgLTU4OCwxMSArNjYzLDkgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXFxuIFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZzby1cXHUwMDNlcnh0aW1lcik7XFxuIFxcbiBcXHQvKiBpc290cF9yeF90aW1lcl9oYW5kbGVyKCkgbWF5IGhhdmUgcmFjZWQgdXMgZm9yIHNvLVxcdTAwM2VyeC5zdGF0ZVxcbi1cXHQgKiB3aGlsZSBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoLCBhbHJlYWR5XFxuLVxcdCAqIHJlcG9ydGluZyBFVElNRURPVVQgYW5kIHJlc2V0dGluZyB0aGUgcmVjZXB0aW9uOyBkb24ndCBwcm9jZXNzXFxuLVxcdCAqIHRoaXMgQ0YgaW50byBhIHJlYXNzZW1ibHkgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGdpdmVuIHVwIG9uLlxcbitcXHQgKiB3aGlsZSBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoID1cXHUwMDNlIHJlY2hlY2tcXG4gXFx0ICovXFxuLVxcdGlmIChzby1cXHUwMDNlcnguc3RhdGUgIT0gSVNPVFBfV0FJVF9EQVRBKVxcbitcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfV0FJVF9EQVRBKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFxuIFxcdC8qIENGcyBhcmUgbmV2ZXIgbG9uZ2VyIHRoYW4gdGhlIEZGICovXFxuQEAgLTYxMyw3ICs2ODYsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9jZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSxcXG4gXFx0XFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4gXFxuIFxcdFxcdC8qIHJlc2V0IHJ4IHN0YXRlICovXFxuLVxcdFxcdHNvLVxcdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XFxuK1xcdFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcdH1cXG4gXFx0c28tXFx1MDAzZXJ4LnNuKys7XFxuQEAgLTYyNyw3ICs3MDAsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9jZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSxcXG4gXFxuIFxcdGlmIChzby1cXHUwMDNlcnguaWR4IFxcdTAwM2U9IHNvLVxcdTAwM2VyeC5sZW4pIHtcXG4gXFx0XFx0Lyogd2UgYXJlIGRvbmUgKi9cXG4tXFx0XFx0c28tXFx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcXG4rXFx0XFx0V1JJVEVfT05DRShzby1cXHUwMDNlcnguc3RhdGUsIElTT1RQX0lETEUpO1xcbiBcXG4gXFx0XFx0aWYgKChzby1cXHUwMDNlb3B0LmZsYWdzIFxcdTAwMjYgSVNPVFBfQ0hFQ0tfUEFERElORykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIGNoZWNrX3BhZChzbywgY2YsIGkgKyAxLCBzby1cXHUwMDNlb3B0LnJ4cGFkX2NvbnRlbnQpKSB7XFxuQEAgLTY5OCw4ICs3NzEsMTAgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXFxuIFxcbiBcXHRpZiAoc28tXFx1MDAzZW9wdC5mbGFncyBcXHUwMDI2IENBTl9JU09UUF9IQUxGX0RVUExFWCkge1xcbiBcXHRcXHQvKiBjaGVjayByeC90eCBwYXRoIGhhbGYgZHVwbGV4IGV4cGVjdGF0aW9ucyAqL1xcbi1cXHRcXHRpZiAoKHNvLVxcdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFIFxcdTAwMjZcXHUwMDI2IG5fcGNpX3R5cGUgIT0gTl9QQ0lfRkMpIHx8XFxuLVxcdFxcdCAgICAoc28tXFx1MDAzZXJ4LnN0YXRlICE9IElTT1RQX0lETEUgXFx1MDAyNlxcdTAwMjYgbl9wY2lfdHlwZSA9PSBOX1BDSV9GQykpXFxuK1xcdFxcdGlmICgoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIG5fcGNpX3R5cGUgIT0gTl9QQ0lfRkMpIHx8XFxuK1xcdFxcdCAgICAoUkVBRF9PTkNFKHNvLVxcdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIG5fcGNpX3R5cGUgPT0gTl9QQ0lfRkMpKVxcbiBcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG4gXFxuQEAgLTc5NCw2ICs4NjksNyBAQCBzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pXFxuIFxcdHN0cnVjdCBjYW5mZF9mcmFtZSAqY2Y7XFxuIFxcdGludCBjYW5fc2VuZF9yZXQ7XFxuIFxcdGludCBhZSA9IChzby1cXHUwMDNlb3B0LmZsYWdzIFxcdTAwMjYgQ0FOX0lTT1RQX0VYVEVORF9BRERSKSA/IDEgOiAwO1xcbitcXHR1MzIgb2xkX2NmZWNobztcXG4gXFxuIFxcdGRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzby1cXHUwMDNlaWZpbmRleCk7XFxuIFxcdGlmICghZGV2KVxcbkBAIC04MTQsNiArODkwLDkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxcbiBcXG4gXFx0Y3N4LVxcdTAwM2VjYW5faWlmID0gZGV2LVxcdTAwM2VpZmluZGV4O1xcbiBcXG4rXFx0Lyogc2V0IHVpZCBpbiB0eCBza2IgdG8gaWRlbnRpZnkgQ0YgZWNobyBmcmFtZXMgKi9cXG4rXFx0Y2FuX3NldF9za2JfdWlkKHNrYik7XFxuK1xcbiBcXHRjZiA9IChzdHJ1Y3QgY2FuZmRfZnJhbWUgKilza2ItXFx1MDAzZWRhdGE7XFxuIFxcdHNrYl9wdXRfemVybyhza2IsIHNvLVxcdTAwM2VsbC5tdHUpO1xcbiBcXG5AQCAtODMwLDEyICs5MDksMTUgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxcbiBcXHRza2ItXFx1MDAzZWRldiA9IGRldjtcXG4gXFx0Y2FuX3NrYl9zZXRfb3duZXIoc2tiLCBzayk7XFxuIFxcbi1cXHQvKiBjZmVjaG8gc2hvdWxkIGhhdmUgYmVlbiB6ZXJvJ2VkIGJ5IGluaXQvaXNvdHBfcmN2X2VjaG8oKSAqL1xcbi1cXHRpZiAoc28tXFx1MDAzZWNmZWNobylcXG4tXFx0XFx0cHJfbm90aWNlX29uY2UoXFxcImNhbi1pc290cDogY2ZlY2hvIGlzICUwOFggIT0gMFxcXFxuXFxcIiwgc28tXFx1MDAzZWNmZWNobyk7XFxuK1xcdC8qIHplcm8nZWQgYnkgaW5pdC9pc290cF9yY3ZfZWNobygpOyByZWFjaGVkIGxvY2stZnJlZSB2aWFcXG4rXFx0ICogaXNvdHBfdHhmcl90aW1lcl9oYW5kbGVyKCkgdG9vLCBzbyB1c2UgUkVBRF9PTkNFKCkvV1JJVEVfT05DRSgpXFxuK1xcdCAqL1xcbitcXHRvbGRfY2ZlY2hvID0gUkVBRF9PTkNFKHNvLVxcdTAwM2VjZmVjaG8pO1xcbitcXHRpZiAob2xkX2NmZWNobylcXG4rXFx0XFx0cHJfbm90aWNlX29uY2UoXFxcImNhbi1pc290cDogY2ZlY2hvIGlzICUwOFggIT0gMFxcXFxuXFxcIiwgb2xkX2NmZWNobyk7XFxuIFxcbiBcXHQvKiBzZXQgY29uc2VjdXRpdmUgZnJhbWUgZWNobyB0YWcgKi9cXG4tXFx0c28tXFx1MDAzZWNmZWNobyA9ICoodTMyICopY2YtXFx1MDAzZWRhdGE7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZWNmZWNobywgc2tiLVxcdTAwM2VoYXNoKTtcXG4gXFxuIFxcdC8qIHNlbmQgZnJhbWUgd2l0aCBsb2NhbCBlY2hvIGVuYWJsZWQgKi9cXG4gXFx0Y2FuX3NlbmRfcmV0ID0gY2FuX3NlbmQoc2tiLCAxKTtcXG5AQCAtODg3LDcgKzk2OSw2IEBAIHN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9lY2hvKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopZGF0YTtcXG4gXFx0c3RydWN0IGlzb3RwX3NvY2sgKnNvID0gaXNvdHBfc2soc2spO1xcbi1cXHRzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cXHUwMDNlZGF0YTtcXG4gXFxuIFxcdC8qIG9ubHkgaGFuZGxlIG15IG93biBsb2NhbCBlY2hvIENGL1NGIHNrYidzIChubyBGRiEpICovXFxuIFxcdGlmIChza2ItXFx1MDAzZXNrICE9IHNrKVxcbkBAIC04OTksMzIgKzk4MCwzNSBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3ZfZWNobyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxcbiBcXHRzcGluX2xvY2soXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4gXFxuIFxcdC8qIHNvLVxcdTAwM2VjZmVjaG8gbWF5IHNpbmNlIGJlbG9uZyB0byBhIG5ldyB0cmFuc2ZlcjsgcmVjaGVjayB1bmRlciBsb2NrICovXFxuLVxcdGlmIChzby1cXHUwMDNlY2ZlY2hvICE9ICoodTMyICopY2YtXFx1MDAzZWRhdGEpXFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZWNmZWNobykgIT0gc2tiLVxcdTAwM2VoYXNoKVxcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcbiBcXHQvKiBjYW5jZWwgbG9jYWwgZWNobyB0aW1lb3V0ICovXFxuIFxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZzby1cXHUwMDNlZWNob3RpbWVyKTtcXG4gXFxuIFxcdC8qIGxvY2FsIGVjaG8gc2tiIHdpdGggY29uc2VjdXRpdmUgZnJhbWUgaGFzIGJlZW4gY29uc3VtZWQgKi9cXG4tXFx0c28tXFx1MDAzZWNmZWNobyA9IDA7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZWNmZWNobywgMCk7XFxuIFxcbiBcXHQvKiBjbGFpbWluZyBhIHRyYW5zZmVyIGFsc28gdGFrZXMgc28tXFx1MDAzZXJ4X2xvY2ssIHNvIGEgcGxhaW4gcmVjaGVja1xcbiBcXHQgKiBpcyBlbm91Z2g6IHNvLVxcdTAwM2V0eC5zdGF0ZSBjYW4ndCBoYXZlIGZsaXBwZWQgdG8gSVNPVFBfU0VORElORyBmb3JcXG4gXFx0ICogYSBuZXcgY2xhaW0gd2hpbGUgd2UncmUgc3RpbGwgaW4gaGVyZVxcbiBcXHQgKi9cXG4tXFx0aWYgKHNvLVxcdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9TRU5ESU5HKVxcbitcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfU0VORElORylcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXG4gXFx0aWYgKHNvLVxcdTAwM2V0eC5pZHggXFx1MDAzZT0gc28tXFx1MDAzZXR4Lmxlbikge1xcbiBcXHRcXHQvKiB3ZSBhcmUgZG9uZSAqL1xcbi1cXHRcXHRzby1cXHUwMDNldHguc3RhdGUgPSBJU09UUF9JRExFO1xcbitcXG4rXFx0XFx0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgc28tXFx1MDAzZXR4X2dlbiwgMCk7XFxuK1xcdFxcdC8qIHNldCB0byBJRExFIGFmdGVyIHB1Ymxpc2hpbmcgdHhfcmVzdWx0ICovXFxuK1xcdFxcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZzby1cXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xcbiBcXHRcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnNvLVxcdTAwM2V3YWl0KTtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAoc28tXFx1MDAzZXR4ZmMuYnMgXFx1MDAyNlxcdTAwMjYgc28tXFx1MDAzZXR4LmJzIFxcdTAwM2U9IHNvLVxcdTAwM2V0eGZjLmJzKSB7XFxuIFxcdFxcdC8qIHN0b3AgYW5kIHdhaXQgZm9yIEZDIHdpdGggdGltZW91dCAqL1xcbi1cXHRcXHRzby1cXHUwMDNldHguc3RhdGUgPSBJU09UUF9XQUlUX0ZDO1xcbitcXHRcXHRXUklURV9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfV0FJVF9GQyk7XFxuIFxcdFxcdGhydGltZXJfc3RhcnQoXFx1MDAyNnNvLVxcdTAwM2V0eHRpbWVyLCBrdGltZV9zZXQoSVNPVFBfRkNfVElNRU9VVCwgMCksXFxuIFxcdFxcdFxcdCAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7XFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG5AQCAtOTQ2LDE2ICsxMDMwLDIwIEBAIHN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9lY2hvKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzby1cXHUwMDNlcnhfbG9jayk7XFxuIH1cXG4gXFxuLS8qIHNoYXJlZCBieSBzby1cXHUwMDNldHh0aW1lcidzIGFuZCBzby1cXHUwMDNlZWNob3RpbWVyJ3MgY2FsbGJhY2tzLiBCb3RoIHRpbWVycyBnZXRcXG4tICogY2FuY2VsbGVkIHVuZGVyIHNvLVxcdTAwM2VyeF9sb2NrIGVsc2V3aGVyZSwgc28gdGhpcyBtdXN0IHN0YXkgbG9jay1mcmVlIHRvXFxuLSAqIGF2b2lkIGRlYWRsb2NraW5nIHdpdGggdGhhdDsgdXNlcyBzby1cXHUwMDNldHhfZ2VuIGluc3RlYWQgdG8gYXZvaWQgdGFpbnRpbmdcXG4tICogYSBuZXcgdHJhbnNmZXIgd2l0aCBhbiBlcnJvciBmcm9tIHRoZSBvbmUgdGhhdCBqdXN0IHRpbWVkIG91dC5cXG4rLyogaXNvdHBfdHhfdGltZW91dDogd2UgZGlkIG5vdCBnZXQgYW55IGZsb3cgY29udHJvbCBvciBlY2hvIGZyYW1lIGluIHRpbWVcXG4rICpcXG4rICogU2hhcmVkIGJ5IHNvLVxcdTAwM2V0eHRpbWVyJ3MgYW5kIHNvLVxcdTAwM2VlY2hvdGltZXIncyBjYWxsYmFja3MuIEJvdGggdGltZXJzIGdldFxcbisgKiBjYW5jZWxsZWQgdW5kZXIgc28tXFx1MDAzZXJ4X2xvY2sgZWxzZXdoZXJlLCBzbyB0aGlzIG11c3Qgc3RheSBsb2NrLWZyZWUuXFxuKyAqXFxuKyAqIHR4LnN0YXRlIGlzIGFjcXVpcmVkIGJlZm9yZSB0eF9nZW4uIENvbW1vbiBzZXF1ZW5jZSBpbiBpc290cF90eF9nZW5fZG9uZSgpLlxcbisgKiBjbXB4Y2hnKCkgb25seSBvcmRlcnMgaXRzZWxmLCBub3QgdGhlIHR3byBwcmVjZWRpbmcgbG9hZHMuXFxuICAqL1xcbiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfdHhfdGltZW91dChzdHJ1Y3QgaXNvdHBfc29jayAqc28pXFxuIHtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gXFx1MDAyNnNvLVxcdTAwM2VzaztcXG4rXFx0LyogcmVhZCB0eC5zdGF0ZSBmaXJzdCBmb3IgdGhlIGNvbW1vbiBzZXF1ZW5jZSAqL1xcbitcXHR1MzIgb2xkX3N0YXRlID0gc21wX2xvYWRfYWNxdWlyZShcXHUwMDI2c28tXFx1MDAzZXR4LnN0YXRlKTtcXG4gXFx0dTMyIGdlbiA9IFJFQURfT05DRShzby1cXHUwMDNldHhfZ2VuKTtcXG4tXFx0dTMyIG9sZF9zdGF0ZSA9IFJFQURfT05DRShzby1cXHUwMDNldHguc3RhdGUpO1xcbiBcXG4gXFx0LyogZG9uJ3QgaGFuZGxlIHRpbWVvdXRzIGluIElETEUgb3IgU0hVVERPV04gc3RhdGUgKi9cXG4gXFx0aWYgKG9sZF9zdGF0ZSA9PSBJU09UUF9JRExFIHx8IG9sZF9zdGF0ZSA9PSBJU09UUF9TSFVURE9XTilcXG5AQCAtOTY1LDE0ICsxMDUzLDE0IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eF90aW1lb3V0KHN0cnVjdCBpc290cF9zb2NrICpzbylcXG4gXFx0aWYgKGNtcHhjaGcoXFx1MDAyNnNvLVxcdTAwM2V0eC5zdGF0ZSwgb2xkX3N0YXRlLCBJU09UUF9JRExFKSAhPSBvbGRfc3RhdGUpXFxuIFxcdFxcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcXG4gXFxuLVxcdC8qIHdlIGRpZCBub3QgZ2V0IGFueSBmbG93IGNvbnRyb2wgb3IgZWNobyBmcmFtZSBpbiB0aW1lICovXFxuK1xcdC8qIGRldGVjdGVkIHRpbWVvdXQ6IHJlcG9ydCAnY29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kJyAqL1xcbiBcXG4tXFx0aWYgKFJFQURfT05DRShzby1cXHUwMDNldHhfZ2VuKSA9PSBnZW4pIHtcXG4tXFx0XFx0LyogcmVwb3J0ICdjb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQnICovXFxuLVxcdFxcdHNrLVxcdTAwM2Vza19lcnIgPSBFQ09NTTtcXG4tXFx0XFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXFxuLVxcdFxcdFxcdHNrX2Vycm9yX3JlcG9ydChzayk7XFxuLVxcdH1cXG4rXFx0LyogYSBzdGFsZSByZWFkIG9mIHRoaXMgc2xvdCBieSBhIHdhaXRlciBzdGlsbCBmYWxscyBiYWNrIHRvIEVDT01NICovXFxuK1xcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIGdlbiwgRUNPTU0pO1xcbitcXG4rXFx0c2stXFx1MDAzZXNrX2VyciA9IEVDT01NO1xcbitcXHRpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSlcXG4rXFx0XFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcXG4gXFxuIFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2c28tXFx1MDAzZXdhaXQpO1xcbiBcXG5AQCAtMTAwNyw3ICsxMDk1LDcgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcXG4gXFx0XFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9TT0ZUKTtcXG4gXFxuIFxcdC8qIGNmZWNobyBzaG91bGQgYmUgY29uc3VtZWQgYnkgaXNvdHBfcmN2X2VjaG8oKSBoZXJlICovXFxuLVxcdGlmIChzby1cXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfU0VORElORyBcXHUwMDI2XFx1MDAyNiAhc28tXFx1MDAzZWNmZWNobylcXG4rXFx0aWYgKFJFQURfT05DRShzby1cXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NFTkRJTkcgXFx1MDAyNlxcdTAwMjYgIVJFQURfT05DRShzby1cXHUwMDNlY2ZlY2hvKSlcXG4gXFx0XFx0aXNvdHBfc2VuZF9jZnJhbWUoc28pO1xcbiBcXG4gXFx0cmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUO1xcbkBAIC0xMDI2LDEwICsxMTE0LDEyIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRzNjQgaHJ0aW1lcl9zZWMgPSBJU09UUF9FQ0hPX1RJTUVPVVQ7XFxuIFxcdHN0cnVjdCBocnRpbWVyICp0eF9ocnQgPSBcXHUwMDI2c28tXFx1MDAzZWVjaG90aW1lcjtcXG4gXFx0dTMyIG5ld19zdGF0ZSA9IElTT1RQX1NFTkRJTkc7XFxuK1xcdHUzMiBteV9nZW47XFxuK1xcdHUzMiBvbGRfY2ZlY2hvO1xcbiBcXHRpbnQgb2ZmO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKCFzby1cXHUwMDNlYm91bmQgfHwgc28tXFx1MDAzZXR4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKVxcbitcXHRpZiAoIXNvLVxcdTAwM2Vib3VuZCB8fCBSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9TSFVURE9XTilcXG4gXFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbiBcXG4gXFx0LyogY2xhaW0gdGhlIHNvY2tldCB1bmRlciBzby1cXHUwMDNlcnhfbG9jazogdGhpcyBzZXJpYWxpemVzIHRoZSBjbGFpbVxcbkBAIC0xMDQ2LDI5ICsxMTM2LDMzIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRcXHRpZiAobXNnLVxcdTAwM2Vtc2dfZmxhZ3MgXFx1MDAyNiBNU0dfRE9OVFdBSVQpXFxuIFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbiBcXG4tXFx0XFx0aWYgKHNvLVxcdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9TSFVURE9XTilcXG4rXFx0XFx0aWYgKFJFQURfT05DRShzby1cXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcbiBcXHRcXHQvKiB3YWl0IGZvciBjb21wbGV0ZSB0cmFuc21pc3Npb24gb2YgY3VycmVudCBwZHUgKi9cXG4gXFx0XFx0ZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVxcdTAwM2V3YWl0LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICAgc28tXFx1MDAzZXR4LnN0YXRlID09IElTT1RQX0lETEUpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfSURMRSB8fFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04pO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuIFxcbi1cXHQvKiBuZXcgdHJhbnNmZXI6IGJ1bXAgc28tXFx1MDAzZXR4X2dlbiBhbmQgZHJhaW4gdGhlIG9sZCBvbmUncyB0aW1lcnMsXFxuLVxcdCAqIHN0aWxsIHVuZGVyIHRoZSBzby1cXHUwMDNlcnhfbG9jayB3ZSBqdXN0IGNsYWltZWQgdGhlIHNvY2tldCB3aXRoXFxuLVxcdCAqL1xcbi1cXHRXUklURV9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XFxuLVxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4X2dlbiwgUkVBRF9PTkNFKHNvLVxcdTAwM2V0eF9nZW4pICsgMSk7XFxuK1xcdC8qIHR4ZnJ0aW1lcidzIGNhbGxiYWNrIHJlLWFybXMgZWNob3RpbWVyIGxvY2stZnJlZTogZHJhaW4gaXQgZmlyc3QgKi9cXG4rXFx0aHJ0aW1lcl9jYW5jZWwoXFx1MDAyNnNvLVxcdTAwM2V0eGZydGltZXIpO1xcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c28tXFx1MDAzZXR4dGltZXIpO1xcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c28tXFx1MDAzZWVjaG90aW1lcik7XFxuLVxcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZzby1cXHUwMDNldHhmcnRpbWVyKTtcXG4tXFx0c28tXFx1MDAzZWNmZWNobyA9IDA7XFxuK1xcbitcXHQvKiBuZXcgdHJhbnNmZXI6IGluY3JlbWVudCBzby1cXHUwMDNldHhfZ2VuIGFuZCBzZXQgdHguc3RhdGUgYWZ0ZXIgYmFycmllciAqL1xcbitcXHRteV9nZW4gPSBpc290cF9pbmNfdHhfZ2VuKFJFQURfT05DRShzby1cXHUwMDNldHhfZ2VuKSk7XFxuK1xcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIG15X2dlbiwgRUNPTU0pOyAvKiBwcmV2ZW50IHN0YWxlIHNsb3QgbWF0Y2hpbmcgKi9cXG4rXFx0V1JJVEVfT05DRShzby1cXHUwMDNldHhfZ2VuLCBteV9nZW4pO1xcbitcXHRzbXBfd21iKCk7IC8qIHNlZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gaXNvdHBfdHhfW3RpbWVvdXR8Z2VuX2RvbmVdICovXFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcXG4rXFx0V1JJVEVfT05DRShzby1cXHUwMDNlY2ZlY2hvLCAwKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4gXFxuIFxcdC8qIHNvLVxcdTAwM2Vib3VuZCBpcyBvbmx5IGNoZWNrZWQgb25jZSBhYm92ZSAtIGEgd2FrZXVwIG1heSBoYXZlXFxuLVxcdCAqIHVuYm91bmQvcmVib3VuZCB0aGUgc29ja2V0IG1lYW53aGlsZSwgc28gcmUtdmFsaWRhdGUgaXRcXG4rXFx0ICogdW5ib3VuZC9yZWJvdW5kIHRoZSBzb2NrZXQgbWVhbndoaWxlID1cXHUwMDNlIHJlY2hlY2tcXG4gXFx0ICovXFxuIFxcdGlmICghc28tXFx1MDAzZWJvdW5kKSB7XFxuIFxcdFxcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xcbkBAIC0xMTI3LDYgKzEyMjEsOSBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFxuIFxcdGNzeC1cXHUwMDNlY2FuX2lpZiA9IGRldi1cXHUwMDNlaWZpbmRleDtcXG4gXFxuK1xcdC8qIHNldCB1aWQgaW4gdHggc2tiIHRvIGlkZW50aWZ5IENGIGVjaG8gZnJhbWVzICovXFxuK1xcdGNhbl9zZXRfc2tiX3VpZChza2IpO1xcbitcXG4gXFx0c28tXFx1MDAzZXR4LmxlbiA9IHNpemU7XFxuIFxcdHNvLVxcdTAwM2V0eC5pZHggPSAwO1xcbiBcXG5AQCAtMTEzNCw4ICsxMjMxLDkgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxuIFxcdHNrYl9wdXRfemVybyhza2IsIHNvLVxcdTAwM2VsbC5tdHUpO1xcbiBcXG4gXFx0LyogY2ZlY2hvIHNob3VsZCBoYXZlIGJlZW4gemVybydlZCBieSBpbml0IC8gZm9ybWVyIGlzb3RwX3Jjdl9lY2hvKCkgKi9cXG4tXFx0aWYgKHNvLVxcdTAwM2VjZmVjaG8pXFxuLVxcdFxcdHByX25vdGljZV9vbmNlKFxcXCJjYW4taXNvdHA6IHVuaW5pdCBjZmVjaG8gJTA4WFxcXFxuXFxcIiwgc28tXFx1MDAzZWNmZWNobyk7XFxuK1xcdG9sZF9jZmVjaG8gPSBSRUFEX09OQ0Uoc28tXFx1MDAzZWNmZWNobyk7XFxuK1xcdGlmIChvbGRfY2ZlY2hvKVxcbitcXHRcXHRwcl9ub3RpY2Vfb25jZShcXFwiY2FuLWlzb3RwOiB1bmluaXQgY2ZlY2hvICUwOFhcXFxcblxcXCIsIG9sZF9jZmVjaG8pO1xcbiBcXG4gXFx0LyogY2hlY2sgZm9yIHNpbmdsZSBmcmFtZSB0cmFuc21pc3Npb24gZGVwZW5kaW5nIG9uIFRYX0RMICovXFxuIFxcdGlmIChzaXplIFxcdTAwM2M9IHNvLVxcdTAwM2V0eC5sbF9kbCAtIFNGX1BDSV9TWjQgLSBhZSAtIG9mZikge1xcbkBAIC0xMTYzLDcgKzEyNjEsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0XFx0Y2YtXFx1MDAzZWRhdGFbYWVdIHw9IHNpemU7XFxuIFxcbiBcXHRcXHQvKiBzZXQgQ0YgZWNobyB0YWcgZm9yIGlzb3RwX3Jjdl9lY2hvKCkgKFNGLW1vZGUpICovXFxuLVxcdFxcdHNvLVxcdTAwM2VjZmVjaG8gPSAqKHUzMiAqKWNmLVxcdTAwM2VkYXRhO1xcbitcXHRcXHRXUklURV9PTkNFKHNvLVxcdTAwM2VjZmVjaG8sIHNrYi1cXHUwMDNlaGFzaCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIHNlbmQgZmlyc3QgZnJhbWUgKi9cXG4gXFxuQEAgLTExODAsNyArMTI3OCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRcXHRcXHRzby1cXHUwMDNldHhmYy5icyA9IDA7XFxuIFxcbiBcXHRcXHRcXHQvKiBzZXQgQ0YgZWNobyB0YWcgZm9yIGlzb3RwX3Jjdl9lY2hvKCkgKENGLW1vZGUpICovXFxuLVxcdFxcdFxcdHNvLVxcdTAwM2VjZmVjaG8gPSAqKHUzMiAqKWNmLVxcdTAwM2VkYXRhO1xcbitcXHRcXHRcXHRXUklURV9PTkNFKHNvLVxcdTAwM2VjZmVjaG8sIHNrYi1cXHUwMDNlaGFzaCk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qIHN0YW5kYXJkIGZsb3cgY29udHJvbCBjaGVjayAqL1xcbiBcXHRcXHRcXHRuZXdfc3RhdGUgPSBJU09UUF9XQUlUX0ZJUlNUX0ZDO1xcbkBAIC0xMTkwLDEyICsxMjg4LDEyIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRcXHRcXHR0eF9ocnQgPSBcXHUwMDI2c28tXFx1MDAzZXR4dGltZXI7XFxuIFxcbiBcXHRcXHRcXHQvKiBubyBDRiBlY2hvIHRhZyBmb3IgaXNvdHBfcmN2X2VjaG8oKSAoRkYtbW9kZSkgKi9cXG4tXFx0XFx0XFx0c28tXFx1MDAzZWNmZWNobyA9IDA7XFxuK1xcdFxcdFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZWNmZWNobywgMCk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzby1cXHUwMDNlcnhfbG9jayk7XFxuLVxcdGlmIChzby1cXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfU0hVVERPV04pIHtcXG4rXFx0aWYgKFJFQURfT05DRShzby1cXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKSB7XFxuIFxcdFxcdC8qIGlzb3RwX3JlbGVhc2UoKSBoYXMgc2luY2UgdGFrZW4gb3ZlciBhbmQgYWxyZWFkeSBkcmFpbmVkXFxuIFxcdFxcdCAqIG91ciB0aW1lcnMgLSBkb24ndCBzZW5kIGludG8gYSBzb2NrZXQgdGhhdCdzIGdvaW5nIGF3YXlcXG4gXFx0XFx0ICovXFxuQEAgLTEyMDYsNyArMTMwNCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcdH1cXG4gXFx0LyogV0FJVF9GSVJTVF9GQyBmb3Igc3RhbmRhcmQgRkYsIGVsc2Ugc3RheXMgSVNPVFBfU0VORElORyAqL1xcbi1cXHRzby1cXHUwMDNldHguc3RhdGUgPSBuZXdfc3RhdGU7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlLCBuZXdfc3RhdGUpO1xcbiBcXHRocnRpbWVyX3N0YXJ0KHR4X2hydCwga3RpbWVfc2V0KGhydGltZXJfc2VjLCAwKSxcXG4gXFx0XFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9TT0ZUKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG5AQCAtMTIyMywyMCArMTMyMSw0OSBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0XFx0XFx0ICAgICAgIF9fZnVuY19fLCBFUlJfUFRSKGVycikpO1xcbiBcXG4gXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzby1cXHUwMDNlcnhfbG9jayk7XFxuK1xcbitcXHRcXHQvKiBuZXcgdHJhbnNmZXIgYWxyZWFkeSBjbGFpbWVkIGJ5IGEgY29uY3VycmVudCBjb21wbGV0aW9uLFxcbitcXHRcXHQgKiB0aW1lb3V0IG9yIHNlbmRtc2coKSB3aGlsZSB3ZSB3ZXJlIHN0dWNrIGluIGNhbl9zZW5kKCk/XFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eF9nZW4pICE9IG15X2dlbikge1xcbitcXHRcXHRcXHQvKiBkb24ndCB0b3VjaCB0aW1lcnMgYW5kIHN0YXRlIG9mIHRoZSBuZXcgdHJhbnNmZXIgKi9cXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0Lyogbm8gdHJhbnNtaXNzaW9uIC1cXHUwMDNlIG5vIHRpbWVvdXQgbW9uaXRvcmluZyAqL1xcbiBcXHRcXHRocnRpbWVyX2NhbmNlbCh0eF9ocnQpO1xcbiBcXHRcXHRnb3RvIGVycl9vdXRfZHJvcF9sb2NrZWQ7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICh3YWl0X3R4X2RvbmUpIHtcXG4tXFx0XFx0Lyogd2FpdCBmb3IgY29tcGxldGUgdHJhbnNtaXNzaW9uIG9mIGN1cnJlbnQgcGR1ICovXFxuLVxcdFxcdGVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzby1cXHUwMDNld2FpdCwgc28tXFx1MDAzZXR4LnN0YXRlID09IElTT1RQX0lETEUpO1xcbitcXHRcXHQvKiB3YWtlIHVwIGZvcjpcXG4rXFx0XFx0ICogLSBjb25jdXJyZW50IHNlbmRtc2coKSBjbGFpbWluZyBhIG5ldyB0cmFuc2ZlclxcbitcXHRcXHQgKiAtIGNvbXBsZXRlIHRyYW5zbWlzc2lvbiBvZiBjdXJyZW50IFBEVVxcbitcXHRcXHQgKiAtIHNodXRkb3duIHN0YXRlIGNoYW5nZSBpbiBpc290cF9yZWxlYXNlKClcXG4rXFx0XFx0ICogaXNvdHBfdHhfZ2VuX2RvbmUoKSB1c2VzIGNvbW1vbiB0eC5zdGF0ZS90eF9nZW4gcmVhZCBzZXF1ZW5jZVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVxcdTAwM2V3YWl0LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgaXNvdHBfdHhfZ2VuX2RvbmUoc28sIG15X2dlbikpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGVycl9ldmVudF9kcm9wO1xcbiBcXG4tXFx0XFx0ZXJyID0gc29ja19lcnJvcihzayk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdC8qIHN0aWxsIG91ciBjbGFpbSwgYnV0IGlzb3RwX3JlbGVhc2UoKSBmb3JjZS1zaHV0IGl0IGRvd24gKi9cXG4rXFx0XFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnNvLVxcdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04gXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIFJFQURfT05DRShzby1cXHUwMDNldHhfZ2VuKSA9PSBteV9nZW4pIHtcXG4rXFx0XFx0XFx0ZXJyID0gLUVBRERSTk9UQVZBSUw7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX2V2ZW50X2Ryb3A7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIG93biBjb21wbGV0aW9uLCBvciB0eF9nZW4gbW92ZWQgb24gLSBlaXRoZXIgd2F5IHRoaXMgaXNcXG4rXFx0XFx0ICogd2hhdCBpc290cF9nZXRfdHhfcmVzdWx0KCkgcmVjb3JkZWQgZm9yIG15X2dlblxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZXJyID0gaXNvdHBfZ2V0X3R4X3Jlc3VsdChzbywgbXlfZ2VuKTtcXG4rXFxuK1xcdFxcdC8qIGRyYWluIHRvIGF2b2lkIHN0YWxlIGVycm9yIGZvciBhIGxhdGVyIHBvbGwoKS9TT19FUlJPUiAqL1xcbitcXHRcXHRzb2NrX2Vycm9yKHNrKTtcXG4rXFxuK1xcdFxcdHJldHVybiBlcnIgPyBlcnIgOiBzaXplO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gc2l6ZTtcXG5AQCAtMTI0NiwxNSArMTM3MywyNiBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzby1cXHUwMDNlcnhfbG9jayk7XFxuIFxcdGdvdG8gZXJyX291dF9kcm9wX2xvY2tlZDtcXG4gZXJyX2V2ZW50X2Ryb3A6XFxuLVxcdC8qIGludGVycnVwdGVkIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAtIGRyYWluIGl0cyB0aW1lcnMgKi9cXG4rXFx0LyogaW50ZXJydXB0ZWQgb3Igc2h1dCBkb3duIHdoaWxlIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAqL1xcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFxuK1xcdC8qIG5ldyB0cmFuc2ZlciBhbHJlYWR5IHN0YXJ0ZWQgYnkgY29uY3VycmVudCBzZW5kbXNnKCk/ICovXFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZXR4X2dlbikgIT0gbXlfZ2VuKSB7XFxuK1xcdFxcdC8qIGRvbid0IHRvdWNoIHRpbWVycyBhbmQgc3RhdGVzIG9mIHRoZSBuZXcgdHJhbnNmZXIgKi9cXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4gXFx0aHJ0aW1lcl9jYW5jZWwoXFx1MDAyNnNvLVxcdTAwM2V0eGZydGltZXIpO1xcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c28tXFx1MDAzZXR4dGltZXIpO1xcbiBcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2c28tXFx1MDAzZWVjaG90aW1lcik7XFxuIGVycl9vdXRfZHJvcF9sb2NrZWQ6XFxuIFxcdC8qIHJlbGVhc2UgdGhlIGNsYWltOyBzby1cXHUwMDNlcnhfbG9jayBzdGlsbCBoZWxkIGZyb20gYWJvdmUgKi9cXG4tXFx0c28tXFx1MDAzZWNmZWNobyA9IDA7XFxuLVxcdHNvLVxcdTAwM2V0eC5zdGF0ZSA9IElTT1RQX0lETEU7XFxuK1xcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZWNmZWNobywgMCk7XFxuK1xcbitcXHQvKiBvbmx5IGNsYWltIHRvIElETEUgaWYgaXNvdHBfcmVsZWFzZSgpIGhhcyBub3QgdGFrZW4gb3ZlciAqL1xcbitcXHRpZiAoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfU0hVVERPV04pXFxuK1xcdFxcdFdSSVRFX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlLCBJU09UUF9JRExFKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnNvLVxcdTAwM2VyeF9sb2NrKTtcXG4gXFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFxcdTAwMjZzby1cXHUwMDNld2FpdCk7XFxuIFxcbkBAIC0xMzIwLDggKzE0NTgsOSBAQCBzdGF0aWMgaW50IGlzb3RwX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4gXFx0LyogYmVzdC1lZmZvcnQ6IHdhaXQgZm9yIGEgcnVubmluZyBwZHUgdG8gZmluaXNoLCBidXQgZG9uJ3QgYmxvY2sgb25cXG4gXFx0ICogaXQgZm9yZXZlciAtIGdpdmUgdXAgYWZ0ZXIgdGhlIGZpcnN0IHNpZ25hbFxcbiBcXHQgKi9cXG4tXFx0d2hpbGUgKHNvLVxcdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXFx1MDAzZXdhaXQsIHNvLVxcdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9JRExFKSA9PSAwKVxcbitcXHR3aGlsZSAoUkVBRF9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVxcdTAwM2V3YWl0LFxcbitcXHRcXHRcXHRcXHRcXHRSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9JRExFKSA9PSAwKVxcbiBcXHRcXHQ7XFxuIFxcbiBcXHQvKiBjbGFpbSB0aGUgc29ja2V0IHVuZGVyIHNvLVxcdTAwM2VyeF9sb2NrIGxpa2Ugc2VuZG1zZygpIGRvZXMsIHNvIGl0c1xcbkBAIC0xMzI5LDkgKzE0NjgsMTIgQEAgc3RhdGljIGludCBpc290cF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXFxuIFxcdCAqIHVuY29uZGl0aW9uYWxseSwgZXZlbiB3aGVuIGEgc2lnbmFsIGN1dCB0aGUgd2FpdCBhYm92ZSBzaG9ydFxcbiBcXHQgKi9cXG4gXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZzby1cXHUwMDNlcnhfbG9jayk7XFxuLVxcdHNvLVxcdTAwM2V0eC5zdGF0ZSA9IElTT1RQX1NIVVRET1dOO1xcbitcXHRXUklURV9PTkNFKHNvLVxcdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0hVVERPV04pO1xcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2c28tXFx1MDAzZXJ4X2xvY2spO1xcbi1cXHRzby1cXHUwMDNlcnguc3RhdGUgPSBJU09UUF9JRExFO1xcbitcXHRXUklURV9PTkNFKHNvLVxcdTAwM2VyeC5zdGF0ZSwgSVNPVFBfSURMRSk7XFxuK1xcbitcXHQvKiBmb3JjZWQgU0hVVERPV04gbWF5IGhhdmUgc2tpcHBlZCBJRExFIChnYXZlIHVwIG9uIGEgc2lnbmFsKSAqL1xcbitcXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXFx1MDAyNnNvLVxcdTAwM2V3YWl0KTtcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2aXNvdHBfbm90aWZpZXJfbG9jayk7XFxuIFxcdHdoaWxlIChpc290cF9idXN5X25vdGlmaWVyID09IHNvKSB7XFxuQEAgLTE0NDcsNyArMTU4OSw4IEBAIHN0YXRpYyBpbnQgaXNvdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsXFxuIFxcdCAqIHdpdGggc28tXFx1MDAzZWJvdW5kIGluIHRoZSBzYW1lIGxvY2tfc29jaygpIHNlY3Rpb24gYWJvdmUsIHNvIHRoZXJlIGlzXFxuIFxcdCAqIG5vIHdpbmRvdyBpbiB3aGljaCBhIGNvbmN1cnJlbnQgaXNvdHBfbm90aWZ5KCkgY291bGQgYmUgbWlzc2VkLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHNvLVxcdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFIHx8IHNvLVxcdTAwM2VyeC5zdGF0ZSAhPSBJU09UUF9JRExFKSB7XFxuK1xcdGlmIChSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9JRExFIHx8XFxuK1xcdCAgICBSRUFEX09OQ0Uoc28tXFx1MDAzZXJ4LnN0YXRlKSAhPSBJU09UUF9JRExFKSB7XFxuIFxcdFxcdGVyciA9IC1FQUdBSU47XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuQEAgLTE0ODEsNyArMTYyNCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsXFxuIFxcdFxcdFxcdFxcdGlzb3RwX3Jjdiwgc2ssIFxcXCJpc290cFxcXCIsIHNrKTtcXG4gXFxuIFxcdC8qIG5vIGNvbnNlY3V0aXZlIGZyYW1lIGVjaG8gc2tiIGluIGZsaWdodCAqL1xcbi1cXHRzby1cXHUwMDNlY2ZlY2hvID0gMDtcXG4rXFx0V1JJVEVfT05DRShzby1cXHUwMDNlY2ZlY2hvLCAwKTtcXG4gXFxuIFxcdC8qIHJlZ2lzdGVyIGZvciBlY2hvIHNrYidzICovXFxuIFxcdGNhbl9yeF9yZWdpc3RlcihuZXQsIGRldiwgdHhfaWQsIFNJTkdMRV9NQVNLKHR4X2lkKSxcXG5AQCAtMTg0Nyw3ICsxOTkwLDcgQEAgc3RhdGljIF9fcG9sbF90IGlzb3RwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHBvbGxfdGFibGUgKndcXG4gXFx0cG9sbF93YWl0KGZpbGUsIFxcdTAwMjZzby1cXHUwMDNld2FpdCwgd2FpdCk7XFxuIFxcbiBcXHQvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byBUWCBzdGF0ZSAqL1xcbi1cXHRpZiAoKG1hc2sgXFx1MDAyNiBFUE9MTFdSTk9STSkgXFx1MDAyNlxcdTAwMjYgKHNvLVxcdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFKSlcXG4rXFx0aWYgKChtYXNrIFxcdTAwMjYgRVBPTExXUk5PUk0pIFxcdTAwMjZcXHUwMDI2IChSRUFEX09OQ0Uoc28tXFx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9JRExFKSlcXG4gXFx0XFx0bWFzayBcXHUwMDI2PSB+KEVQT0xMT1VUIHwgRVBPTExXUk5PUk0pO1xcbiBcXG4gXFx0cmV0dXJuIG1hc2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEyOjU2LjkxMTU4OTMxN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY4NzcxMzQ5Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0lTT1RQXCIsXG4gICAgXCJDQU5fREVWXCIsXG4gICAgXCJDQU5fVkNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb3RwX3NlbmRtc2dcIixcbiAgICBcImlzb3RwX2JpbmRcIixcbiAgICBcImlzb3RwX3JlbGVhc2VcIixcbiAgICBcImlzb3RwX3BvbGxcIixcbiAgICBcImlzb3RwX3JjdlwiLFxuICAgIFwiaXNvdHBfcmN2X2VjaG9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ0FOIElTT1RQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGZpeCBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gVFgvUlggc3RhdGUgaGFuZGxpbmcgYW5kIHRyYW5zZmVyIGdlbmVyYXRpb24gdHJhY2tpbmcuIEl0IGludHJvZHVjZXMgYSBuZXcgdHhfcmVzdWx0IGFycmF5IGFuZCB1c2VzIFJFQURfT05DRS9XUklURV9PTkNFIGZvciBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBJU09UUCBwcm90b2NvbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbmV3IHJhY2UgY29uZGl0aW9ucyBvciBsb2dpYyBidWdzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDI5NTI3MWQxOTc5NzM1MWIzNmMzY2M1MGY3Y2RhM2IxMzE3YjBlNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDA3OjEyOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2Nhbi9pc290cC5jIGIvbmV0L2Nhbi9pc290cC5jXG5pbmRleCA1NGJlY2FmNjg5OGYxMy4uMWYxMWM2NmIzNDNjODYgMTAwNjQ0XG4tLS0gYS9uZXQvY2FuL2lzb3RwLmNcbisrKyBiL25ldC9jYW4vaXNvdHAuY1xuQEAgLTEyNyw2ICsxMjcsMTUgQEAgTU9EVUxFX1BBUk1fREVTQyhtYXhfcGR1X3NpemUsIFwibWF4aW11bSBpc290cCBwZHUgc2l6ZSAoZGVmYXVsdCBcIlxuICNkZWZpbmUgSVNPVFBfRkNfVElNRU9VVCAxXHQvKiAxIHNlYyAqL1xuICNkZWZpbmUgSVNPVFBfRUNIT19USU1FT1VUIDJcdC8qIDIgc2VjcyAqL1xuIFxuKy8qIHNvLVx1MDAzZXR4X3Jlc3VsdFtzby1cdTAwM2V0eF9nZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdIGhvbGRzIHRoZSBwYWNrZWQgdmFsdWVcbisgKiAoZXJyIFx1MDAzY1x1MDAzYyBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMgfCBnZW4pIGZvciBlYWNoIHR4IGdlbmVyYXRpb24gc2xvdCwgc28gaXRcbisgKiBjYW4gYmUgaGFuZGxlZCB3aXRoIGEgc2luZ2xlIFJFQURfT05DRSgpL1dSSVRFX09OQ0UoKSBhY2Nlc3MuXG4rICovXG4rI2RlZmluZSBJU09UUF9UWF9SRVNVTFRfU0xPVFMgNFxuKyNkZWZpbmUgSVNPVFBfVFhfUkVTVUxUX0dFTl9CSVRTIDI0XG4rI2RlZmluZSBJU09UUF9UWF9SRVNVTFRfR0VOX01BU0sgKCgxVSBcdTAwM2NcdTAwM2MgSVNPVFBfVFhfUkVTVUxUX0dFTl9CSVRTKSAtIDEpXG4rI2RlZmluZSBJU09UUF9UWF9SRVNVTFRfRVJSX01BU0sgMHhGRlxuK1xuIGVudW0ge1xuIFx0SVNPVFBfSURMRSA9IDAsXG4gXHRJU09UUF9XQUlUX0ZJUlNUX0ZDLFxuQEAgLTE2Niw3ICsxNzUsOCBAQCBzdHJ1Y3QgaXNvdHBfc29jayB7XG4gXHR1MzIgZm9yY2VfdHhfc3RtaW47XG4gXHR1MzIgZm9yY2Vfcnhfc3RtaW47XG4gXHR1MzIgY2ZlY2hvOyAvKiBjb25zZWN1dGl2ZSBmcmFtZSBlY2hvIHRhZyAqL1xuLVx0dTMyIHR4X2dlbjsgLyogZ2VuZXJhdGlvbiwgYnVtcGVkIHBlciBuZXcgdHggdHJhbnNmZXIgKi9cbitcdHUzMiB0eF9nZW47IC8qIHRyYW5zZmVyIGdlbmVyYXRpb24sIGluY3JlYXNlZCBwZXIgbmV3IHR4IHRyYW5zZmVyICovXG4rXHR1MzIgdHhfcmVzdWx0W0lTT1RQX1RYX1JFU1VMVF9TTE9UU107IC8qIHBlci1nZW5lcmF0aW9uIHJlc3VsdCBzbG90cyAqL1xuIFx0c3RydWN0IHRwY29uIHJ4LCB0eDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm90aWZpZXI7XG4gXHR3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0O1xuQEAgLTE3Nyw2ICsxODcsNjUgQEAgc3RhdGljIExJU1RfSEVBRChpc290cF9ub3RpZmllcl9saXN0KTtcbiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGlzb3RwX25vdGlmaWVyX2xvY2spO1xuIHN0YXRpYyBzdHJ1Y3QgaXNvdHBfc29jayAqaXNvdHBfYnVzeV9ub3RpZmllcjtcbiBcbisvKiBpbmNyZWFzZSAoMjQgYml0KSB0eCBnZW5lcmF0aW9uIHZhbHVlICovXG4rc3RhdGljIHUzMiBpc290cF9pbmNfdHhfZ2VuKHUzMiBnZW4pXG4re1xuK1x0cmV0dXJuIChnZW4gKyAxKSBcdTAwMjYgSVNPVFBfVFhfUkVTVUxUX0dFTl9NQVNLO1xuK31cbitcbisvKiBzdG9yZSA4IGJpdCBlcnJvciBhbmQgMjQgYml0IHR4IGdlbmVyYXRpb24gdmFsdWVzIGluIHBhY2tlZCB1MzIgZWxlbWVudCAqL1xuK3N0YXRpYyB1MzIgaXNvdHBfcGFja190eF9yZXN1bHQodTMyIGdlbiwgaW50IGVycilcbit7XG4rXHRyZXR1cm4gZ2VuIHwgKCh1MzIpZXJyIFx1MDAzY1x1MDAzYyBJU09UUF9UWF9SRVNVTFRfR0VOX0JJVFMpO1xuK31cbitcbisvKiBnZXQgdGhlIDI0IGJpdCB0eCBnZW5lcmF0aW9uIHZhbHVlIGZyb20gdGhlIHR4IHJlc3VsdCAqL1xuK3N0YXRpYyB1MzIgaXNvdHBfZ2V0X3R4X2dlbih1MzIgZ2VuX2Vycilcbit7XG4rXHRyZXR1cm4gZ2VuX2VyciBcdTAwMjYgSVNPVFBfVFhfUkVTVUxUX0dFTl9NQVNLO1xuK31cbitcbisvKiBnZXQgdGhlIDggYml0IGVycm9yIHZhbHVlIGZyb20gdGhlIHR4IHJlc3VsdCAqL1xuK3N0YXRpYyB1MzIgaXNvdHBfZ2V0X3R4X2Vycih1MzIgZ2VuX2Vycilcbit7XG4rXHRyZXR1cm4gKGdlbl9lcnIgXHUwMDNlXHUwMDNlIElTT1RQX1RYX1JFU1VMVF9HRU5fQklUUykgXHUwMDI2IElTT1RQX1RYX1JFU1VMVF9FUlJfTUFTSztcbit9XG4rXG4rLyogc3RvcmUgdHJhbnNmZXIgcmVzdWx0IGluIHBlci1nZW5lcmF0aW9uJTQgc28tXHUwMDNldHhfcmVzdWx0W10gc2xvdCAqL1xuK3N0YXRpYyB2b2lkIGlzb3RwX3NldF90eF9yZXN1bHQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCB1MzIgZ2VuLCBpbnQgZXJyKVxuK3tcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHhfcmVzdWx0W2dlbiAlIElTT1RQX1RYX1JFU1VMVF9TTE9UU10sXG4rXHRcdCAgIGlzb3RwX3BhY2tfdHhfcmVzdWx0KGdlbiwgZXJyKSk7XG4rfVxuK1xuKy8qIGZldGNoIHRoZSByZXN1bHQgcmVjb3JkZWQgZm9yICdnZW4nLCBhcyBhIChuZWdhdGl2ZSkgZXJybm8gKDAgZm9yIHN1Y2Nlc3MpICovXG4rc3RhdGljIGludCBpc290cF9nZXRfdHhfcmVzdWx0KHN0cnVjdCBpc290cF9zb2NrICpzbywgdTMyIGdlbilcbit7XG4rXHR1MzIgcmVzdWx0ID0gUkVBRF9PTkNFKHNvLVx1MDAzZXR4X3Jlc3VsdFtnZW4gJSBJU09UUF9UWF9SRVNVTFRfU0xPVFNdKTtcbitcbitcdGlmIChpc290cF9nZXRfdHhfZ2VuKHJlc3VsdCkgIT0gZ2VuKSB7XG4rXHRcdHByX25vdGljZV9vbmNlKFwiY2FuLWlzb3RwOiB0eF9yZXN1bHRbXSBzbG90IHJldXNlZCBiZWZvcmUgcmVhZFxcblwiKTtcbitcbitcdFx0LyogcmVwb3J0IGZhaWx1cmUgcmF0aGVyIHRoYW4gcmlzayBhIGZhbHNlIHN1Y2Nlc3MgKi9cbitcdFx0cmV0dXJuIC1FQ09NTTtcbitcdH1cbitcbitcdHJldHVybiAtKGlzb3RwX2dldF90eF9lcnIocmVzdWx0KSk7XG4rfVxuK1xuKy8qIHRydWUgaWYgZG9uZSwgc2h1dCBkb3duIG9yIHN1cGVyc2VkZWQgKCdnZW4nIGlzIG5vIGxvbmdlciB0aGUgYWN0aXZlXG4rICogdHJhbnNmZXIpLiBSZWFkcyB0eC5zdGF0ZSBmaXJzdCAoYWNxdWlyZSkgc28gdHhfZ2VuL3R4X3Jlc3VsdCByZWFkc1xuKyAqIGJlbG93IHNlZSBhdCBsZWFzdCB3aGF0IHRoYXQgc3RhdGUgd3JpdGUgcHVibGlzaGVkIChjb21tb24gc2VxdWVuY2UpLlxuKyAqL1xuK3N0YXRpYyBib29sIGlzb3RwX3R4X2dlbl9kb25lKHN0cnVjdCBpc290cF9zb2NrICpzbywgdTMyIGdlbilcbit7XG4rXHQvKiByZWFkIHR4LnN0YXRlIGZpcnN0IGZvciB0aGUgY29tbW9uIHNlcXVlbmNlICovXG4rXHR1MzIgc3RhdGUgPSBzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlKTtcbitcbitcdHJldHVybiBzdGF0ZSA9PSBJU09UUF9JRExFIHx8IHN0YXRlID09IElTT1RQX1NIVVRET1dOIHx8XG4rXHQgICAgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgIT0gZ2VuO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpc290cF9zb2NrICppc290cF9zayhjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4ge1xuIFx0cmV0dXJuIChzdHJ1Y3QgaXNvdHBfc29jayAqKXNrO1xuQEAgLTE5OSw3ICsyNjgsNyBAQCBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfcnhfdGltZXJfaGFuZGxlcihzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcilcbiBcdFx0XHRcdFx0ICAgICByeHRpbWVyKTtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNvLVx1MDAzZXNrO1xuIFxuLVx0aWYgKHNvLVx1MDAzZXJ4LnN0YXRlID09IElTT1RQX1dBSVRfREFUQSkge1xuK1x0aWYgKFJFQURfT05DRShzby1cdTAwM2VyeC5zdGF0ZSkgPT0gSVNPVFBfV0FJVF9EQVRBKSB7XG4gXHRcdC8qIHdlIGRpZCBub3QgZ2V0IG5ldyBkYXRhIGZyYW1lcyBpbiB0aW1lICovXG4gXG4gXHRcdC8qIHJlcG9ydCAnY29ubmVjdGlvbiB0aW1lZCBvdXQnICovXG5AQCAtMjA4LDcgKzI3Nyw3IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF9yeF90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxuIFx0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4gXG4gXHRcdC8qIHJlc2V0IHJ4IHN0YXRlICovXG4tXHRcdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbitcdFx0V1JJVEVfT05DRShzby1cdTAwM2VyeC5zdGF0ZSwgSVNPVFBfSURMRSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG5AQCAtMzcyLDIwICs0NDEsMTkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKTtcbiBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mYyhzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiB7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBcdTAwMjZzby1cdTAwM2VzaztcbitcdGludCB0eF9lcnIgPSBFQkFETVNHOyAvKiBkZWZhdWx0IGZvciB1bmtub3duIEZDIHN0YXR1cyAqL1xuIFxuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRkMgXHUwMDI2XHUwMDI2XG4tXHQgICAgc28tXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfV0FJVF9GSVJTVF9GQylcbitcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpICE9IElTT1RQX1dBSVRfRkMgXHUwMDI2XHUwMDI2XG4rXHQgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZXR4dGltZXIpO1xuIFxuIFx0LyogaXNvdHBfdHhfdGltZW91dCgpIG1heSBoYXZlIGdpdmVuIHVwIG9uIHRoaXMgam9iIHdoaWxlXG4tXHQgKiBocnRpbWVyX2NhbmNlbCgpIGFib3ZlIHdhaXRlZCBmb3IgaXQgdG8gZmluaXNoOyBzby1cdTAwM2VyeF9sb2NrXG4tXHQgKiAoaGVsZCBieSBvdXIgY2FsbGVyIGlzb3RwX3JjdigpKSBydWxlcyBvdXQgYSBjb25jdXJyZW50IGNsYWltLFxuLVx0ICogc28gYSBwbGFpbiByZWNoZWNrIGlzIGVub3VnaCBoZXJlLlxuK1x0ICogaHJ0aW1lcl9jYW5jZWwoKSBhYm92ZSB3YWl0ZWQgZm9yIGl0IHRvIGZpbmlzaCA9XHUwMDNlIHJlY2hlY2tcbiBcdCAqL1xuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX1dBSVRfRkMgXHUwMDI2XHUwMDI2XG4tXHQgICAgc28tXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfV0FJVF9GSVJTVF9GQylcbitcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpICE9IElTT1RQX1dBSVRfRkMgXHUwMDI2XHUwMDI2XG4rXHQgICAgUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0ZJUlNUX0ZDKVxuIFx0XHRyZXR1cm4gMTtcbiBcbiBcdGlmICgoY2YtXHUwMDNlbGVuIFx1MDAzYyBhZSArIEZDX0NPTlRFTlRfU1opIHx8XG5AQCAtMzk2LDEzICs0NjQsMTUgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxuIFx0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4gXG4tXHRcdHNvLVx1MDAzZXR4LnN0YXRlID0gSVNPVFBfSURMRTtcbitcdFx0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgc28tXHUwMDNldHhfZ2VuLCBFQkFETVNHKTtcbitcdFx0Lyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi9cbitcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c28tXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXHRcdHJldHVybiAxO1xuIFx0fVxuIFxuIFx0LyogZ2V0IHN0YXRpYy9keW5hbWljIGNvbW11bmljYXRpb24gcGFyYW1zIGZyb20gZmlyc3QvZXZlcnkgRkMgZnJhbWUgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSA9PSBJU09UUF9XQUlUX0ZJUlNUX0ZDIHx8XG4rXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9XQUlUX0ZJUlNUX0ZDIHx8XG4gXHQgICAgc28tXHUwMDNlb3B0LmZsYWdzIFx1MDAyNiBDQU5fSVNPVFBfRFlOX0ZDX1BBUk1TKSB7XG4gXHRcdHNvLVx1MDAzZXR4ZmMuYnMgPSBjZi1cdTAwM2VkYXRhW2FlICsgMV07XG4gXHRcdHNvLVx1MDAzZXR4ZmMuc3RtaW4gPSBjZi1cdTAwM2VkYXRhW2FlICsgMl07XG5AQCAtNDI2LDEzICs0OTYsMTMgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXHRcdFx0c28tXHUwMDNldHhfZ2FwID0ga3RpbWVfYWRkX25zKHNvLVx1MDAzZXR4X2dhcCxcbiBcdFx0XHRcdFx0XHQgIChzby1cdTAwM2V0eGZjLnN0bWluIC0gMHhGMClcbiBcdFx0XHRcdFx0XHQgICogMTAwMDAwKTtcbi1cdFx0c28tXHUwMDNldHguc3RhdGUgPSBJU09UUF9XQUlUX0ZDO1xuK1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9XQUlUX0ZDKTtcbiBcdH1cbiBcbiBcdHN3aXRjaCAoY2YtXHUwMDNlZGF0YVthZV0gXHUwMDI2IDB4MEYpIHtcbiBcdGNhc2UgSVNPVFBfRkNfQ1RTOlxuIFx0XHRzby1cdTAwM2V0eC5icyA9IDA7XG4tXHRcdHNvLVx1MDAzZXR4LnN0YXRlID0gSVNPVFBfU0VORElORztcbitcdFx0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XG4gXHRcdC8qIHNlbmQgQ0YgZnJhbWUgYW5kIGVuYWJsZSBlY2hvIHRpbWVvdXQgaGFuZGxpbmcgKi9cbiBcdFx0aHJ0aW1lcl9zdGFydChcdTAwMjZzby1cdTAwM2VlY2hvdGltZXIsIGt0aW1lX3NldChJU09UUF9FQ0hPX1RJTUVPVVQsIDApLFxuIFx0XHRcdCAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7XG5AQCAtNDQ3LDE0ICs1MTcsMTkgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmMoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXG4gXHRjYXNlIElTT1RQX0ZDX09WRkxXOlxuIFx0XHQvKiBvdmVyZmxvdyBvbiByZWNlaXZlciBzaWRlIC0gcmVwb3J0ICdtZXNzYWdlIHRvbyBsb25nJyAqL1xuLVx0XHRzay1cdTAwM2Vza19lcnIgPSBFTVNHU0laRTtcbi1cdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4tXHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbitcdFx0dHhfZXJyID0gRU1TR1NJWkU7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFxuIFx0ZGVmYXVsdDpcbi1cdFx0Lyogc3RvcCB0aGlzIHR4IGpvYiAqL1xuLVx0XHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX0lETEU7XG4rXHRcdC8qIHJlc2VydmVkL3Vua25vd24gZmxvdyBzdGF0dXMgKHR4X2VyciBkZWZhdWx0cyB0byBFQkFETVNHKSAqL1xuK1xuK1x0XHRzay1cdTAwM2Vza19lcnIgPSB0eF9lcnI7XG4rXHRcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxuK1x0XHRcdHNrX2Vycm9yX3JlcG9ydChzayk7XG4rXG4rXHRcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIHNvLVx1MDAzZXR4X2dlbiwgdHhfZXJyKTtcbitcdFx0Lyogc2V0IHRvIElETEUgYWZ0ZXIgcHVibGlzaGluZyB0eF9yZXN1bHQgKi9cbitcdFx0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2c28tXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbkBAIC00NjcsNyArNTQyLDcgQEAgc3RhdGljIGludCBpc290cF9yY3Zfc2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgcGNpbGVuLFxuIFx0c3RydWN0IHNrX2J1ZmYgKm5za2I7XG4gXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VyeHRpbWVyKTtcbi1cdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNlcnguc3RhdGUsIElTT1RQX0lETEUpO1xuIFxuIFx0aWYgKCFsZW4gfHwgbGVuIFx1MDAzZSBjZi1cdTAwM2VsZW4gLSBwY2lsZW4pXG4gXHRcdHJldHVybiAxO1xuQEAgLTUwMSw3ICs1NzYsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9mZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSlcbiBcdGludCBmZl9wY2lfc3o7XG4gXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VyeHRpbWVyKTtcbi1cdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfSURMRTtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNlcnguc3RhdGUsIElTT1RQX0lETEUpO1xuIFxuIFx0LyogZ2V0IHRoZSB1c2VkIHNlbmRlciBMTF9ETCBmcm9tIHRoZSAoZmlyc3QpIENBTiBmcmFtZSBkYXRhIGxlbmd0aCAqL1xuIFx0c28tXHUwMDNlcngubGxfZGwgPSBwYWRsZW4oY2YtXHUwMDNlbGVuKTtcbkBAIC01NTUsNyArNjMwLDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfZmYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXG4gXG4gXHQvKiBpbml0aWFsIHNldHVwIGZvciB0aGlzIHBkdSByZWNlcHRpb24gKi9cbiBcdHNvLVx1MDAzZXJ4LnNuID0gMTtcbi1cdHNvLVx1MDAzZXJ4LnN0YXRlID0gSVNPVFBfV0FJVF9EQVRBO1xuK1x0V1JJVEVfT05DRShzby1cdTAwM2VyeC5zdGF0ZSwgSVNPVFBfV0FJVF9EQVRBKTtcbiBcbiBcdC8qIG5vIGNyZWF0aW9uIG9mIGZsb3cgY29udHJvbCBmcmFtZXMgKi9cbiBcdGlmIChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IENBTl9JU09UUF9MSVNURU5fTU9ERSlcbkBAIC01NzMsNyArNjQ4LDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjtcbiBcdGludCBpO1xuIFxuLVx0aWYgKHNvLVx1MDAzZXJ4LnN0YXRlICE9IElTT1RQX1dBSVRfREFUQSlcbitcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNlcnguc3RhdGUpICE9IElTT1RQX1dBSVRfREFUQSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBkcm9wIGlmIHRpbWVzdGFtcCBnYXAgaXMgbGVzcyB0aGFuIGZvcmNlX3J4X3N0bWluIG5hbm8gc2VjcyAqL1xuQEAgLTU4OCwxMSArNjYzLDkgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VyeHRpbWVyKTtcbiBcbiBcdC8qIGlzb3RwX3J4X3RpbWVyX2hhbmRsZXIoKSBtYXkgaGF2ZSByYWNlZCB1cyBmb3Igc28tXHUwMDNlcnguc3RhdGVcbi1cdCAqIHdoaWxlIGhydGltZXJfY2FuY2VsKCkgYWJvdmUgd2FpdGVkIGZvciBpdCB0byBmaW5pc2gsIGFscmVhZHlcbi1cdCAqIHJlcG9ydGluZyBFVElNRURPVVQgYW5kIHJlc2V0dGluZyB0aGUgcmVjZXB0aW9uOyBkb24ndCBwcm9jZXNzXG4tXHQgKiB0aGlzIENGIGludG8gYSByZWFzc2VtYmx5IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBnaXZlbiB1cCBvbi5cbitcdCAqIHdoaWxlIGhydGltZXJfY2FuY2VsKCkgYWJvdmUgd2FpdGVkIGZvciBpdCB0byBmaW5pc2ggPVx1MDAzZSByZWNoZWNrXG4gXHQgKi9cbi1cdGlmIChzby1cdTAwM2VyeC5zdGF0ZSAhPSBJU09UUF9XQUlUX0RBVEEpXG4rXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlKSAhPSBJU09UUF9XQUlUX0RBVEEpXG4gXHRcdHJldHVybiAxO1xuIFxuIFx0LyogQ0ZzIGFyZSBuZXZlciBsb25nZXIgdGhhbiB0aGUgRkYgKi9cbkBAIC02MTMsNyArNjg2LDcgQEAgc3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXG4gXHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbiBcbiBcdFx0LyogcmVzZXQgcnggc3RhdGUgKi9cbi1cdFx0c28tXHUwMDNlcnguc3RhdGUgPSBJU09UUF9JRExFO1xuK1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcdFx0cmV0dXJuIDE7XG4gXHR9XG4gXHRzby1cdTAwM2VyeC5zbisrO1xuQEAgLTYyNyw3ICs3MDAsNyBAQCBzdGF0aWMgaW50IGlzb3RwX3Jjdl9jZihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIGludCBhZSxcbiBcbiBcdGlmIChzby1cdTAwM2VyeC5pZHggXHUwMDNlPSBzby1cdTAwM2VyeC5sZW4pIHtcbiBcdFx0Lyogd2UgYXJlIGRvbmUgKi9cbi1cdFx0c28tXHUwMDNlcnguc3RhdGUgPSBJU09UUF9JRExFO1xuK1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcbiBcdFx0aWYgKChzby1cdTAwM2VvcHQuZmxhZ3MgXHUwMDI2IElTT1RQX0NIRUNLX1BBRERJTkcpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgY2hlY2tfcGFkKHNvLCBjZiwgaSArIDEsIHNvLVx1MDAzZW9wdC5yeHBhZF9jb250ZW50KSkge1xuQEAgLTY5OCw4ICs3NzEsMTAgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXG4gXG4gXHRpZiAoc28tXHUwMDNlb3B0LmZsYWdzIFx1MDAyNiBDQU5fSVNPVFBfSEFMRl9EVVBMRVgpIHtcbiBcdFx0LyogY2hlY2sgcngvdHggcGF0aCBoYWxmIGR1cGxleCBleHBlY3RhdGlvbnMgKi9cbi1cdFx0aWYgKChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFIFx1MDAyNlx1MDAyNiBuX3BjaV90eXBlICE9IE5fUENJX0ZDKSB8fFxuLVx0XHQgICAgKHNvLVx1MDAzZXJ4LnN0YXRlICE9IElTT1RQX0lETEUgXHUwMDI2XHUwMDI2IG5fcGNpX3R5cGUgPT0gTl9QQ0lfRkMpKVxuK1x0XHRpZiAoKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBuX3BjaV90eXBlICE9IE5fUENJX0ZDKSB8fFxuK1x0XHQgICAgKFJFQURfT05DRShzby1cdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICBuX3BjaV90eXBlID09IE5fUENJX0ZDKSlcbiBcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG5AQCAtNzk0LDYgKzg2OSw3IEBAIHN0YXRpYyB2b2lkIGlzb3RwX3NlbmRfY2ZyYW1lKHN0cnVjdCBpc290cF9zb2NrICpzbylcbiBcdHN0cnVjdCBjYW5mZF9mcmFtZSAqY2Y7XG4gXHRpbnQgY2FuX3NlbmRfcmV0O1xuIFx0aW50IGFlID0gKHNvLVx1MDAzZW9wdC5mbGFncyBcdTAwMjYgQ0FOX0lTT1RQX0VYVEVORF9BRERSKSA/IDEgOiAwO1xuK1x0dTMyIG9sZF9jZmVjaG87XG4gXG4gXHRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc28tXHUwMDNlaWZpbmRleCk7XG4gXHRpZiAoIWRldilcbkBAIC04MTQsNiArODkwLDkgQEAgc3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIFxuIFx0Y3N4LVx1MDAzZWNhbl9paWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiBcbitcdC8qIHNldCB1aWQgaW4gdHggc2tiIHRvIGlkZW50aWZ5IENGIGVjaG8gZnJhbWVzICovXG4rXHRjYW5fc2V0X3NrYl91aWQoc2tiKTtcbitcbiBcdGNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cdTAwM2VkYXRhO1xuIFx0c2tiX3B1dF96ZXJvKHNrYiwgc28tXHUwMDNlbGwubXR1KTtcbiBcbkBAIC04MzAsMTIgKzkwOSwxNSBAQCBzdGF0aWMgdm9pZCBpc290cF9zZW5kX2NmcmFtZShzdHJ1Y3QgaXNvdHBfc29jayAqc28pXG4gXHRza2ItXHUwMDNlZGV2ID0gZGV2O1xuIFx0Y2FuX3NrYl9zZXRfb3duZXIoc2tiLCBzayk7XG4gXG4tXHQvKiBjZmVjaG8gc2hvdWxkIGhhdmUgYmVlbiB6ZXJvJ2VkIGJ5IGluaXQvaXNvdHBfcmN2X2VjaG8oKSAqL1xuLVx0aWYgKHNvLVx1MDAzZWNmZWNobylcbi1cdFx0cHJfbm90aWNlX29uY2UoXCJjYW4taXNvdHA6IGNmZWNobyBpcyAlMDhYICE9IDBcXG5cIiwgc28tXHUwMDNlY2ZlY2hvKTtcbitcdC8qIHplcm8nZWQgYnkgaW5pdC9pc290cF9yY3ZfZWNobygpOyByZWFjaGVkIGxvY2stZnJlZSB2aWFcbitcdCAqIGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcigpIHRvbywgc28gdXNlIFJFQURfT05DRSgpL1dSSVRFX09OQ0UoKVxuK1x0ICovXG4rXHRvbGRfY2ZlY2hvID0gUkVBRF9PTkNFKHNvLVx1MDAzZWNmZWNobyk7XG4rXHRpZiAob2xkX2NmZWNobylcbitcdFx0cHJfbm90aWNlX29uY2UoXCJjYW4taXNvdHA6IGNmZWNobyBpcyAlMDhYICE9IDBcXG5cIiwgb2xkX2NmZWNobyk7XG4gXG4gXHQvKiBzZXQgY29uc2VjdXRpdmUgZnJhbWUgZWNobyB0YWcgKi9cbi1cdHNvLVx1MDAzZWNmZWNobyA9ICoodTMyICopY2YtXHUwMDNlZGF0YTtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCBza2ItXHUwMDNlaGFzaCk7XG4gXG4gXHQvKiBzZW5kIGZyYW1lIHdpdGggbG9jYWwgZWNobyBlbmFibGVkICovXG4gXHRjYW5fc2VuZF9yZXQgPSBjYW5fc2VuZChza2IsIDEpO1xuQEAgLTg4Nyw3ICs5NjksNiBAQCBzdGF0aWMgdm9pZCBpc290cF9yY3ZfZWNobyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IChzdHJ1Y3Qgc29jayAqKWRhdGE7XG4gXHRzdHJ1Y3QgaXNvdHBfc29jayAqc28gPSBpc290cF9zayhzayk7XG4tXHRzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi1cdTAwM2VkYXRhO1xuIFxuIFx0Lyogb25seSBoYW5kbGUgbXkgb3duIGxvY2FsIGVjaG8gQ0YvU0Ygc2tiJ3MgKG5vIEZGISkgKi9cbiBcdGlmIChza2ItXHUwMDNlc2sgIT0gc2spXG5AQCAtODk5LDMyICs5ODAsMzUgQEAgc3RhdGljIHZvaWQgaXNvdHBfcmN2X2VjaG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqZGF0YSlcbiBcdHNwaW5fbG9jayhcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiBcbiBcdC8qIHNvLVx1MDAzZWNmZWNobyBtYXkgc2luY2UgYmVsb25nIHRvIGEgbmV3IHRyYW5zZmVyOyByZWNoZWNrIHVuZGVyIGxvY2sgKi9cbi1cdGlmIChzby1cdTAwM2VjZmVjaG8gIT0gKih1MzIgKiljZi1cdTAwM2VkYXRhKVxuK1x0aWYgKFJFQURfT05DRShzby1cdTAwM2VjZmVjaG8pICE9IHNrYi1cdTAwM2VoYXNoKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKiBjYW5jZWwgbG9jYWwgZWNobyB0aW1lb3V0ICovXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VlY2hvdGltZXIpO1xuIFxuIFx0LyogbG9jYWwgZWNobyBza2Igd2l0aCBjb25zZWN1dGl2ZSBmcmFtZSBoYXMgYmVlbiBjb25zdW1lZCAqL1xuLVx0c28tXHUwMDNlY2ZlY2hvID0gMDtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCAwKTtcbiBcbiBcdC8qIGNsYWltaW5nIGEgdHJhbnNmZXIgYWxzbyB0YWtlcyBzby1cdTAwM2VyeF9sb2NrLCBzbyBhIHBsYWluIHJlY2hlY2tcbiBcdCAqIGlzIGVub3VnaDogc28tXHUwMDNldHguc3RhdGUgY2FuJ3QgaGF2ZSBmbGlwcGVkIHRvIElTT1RQX1NFTkRJTkcgZm9yXG4gXHQgKiBhIG5ldyBjbGFpbSB3aGlsZSB3ZSdyZSBzdGlsbCBpbiBoZXJlXG4gXHQgKi9cbi1cdGlmIChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9TRU5ESU5HKVxuK1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfU0VORElORylcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0aWYgKHNvLVx1MDAzZXR4LmlkeCBcdTAwM2U9IHNvLVx1MDAzZXR4Lmxlbikge1xuIFx0XHQvKiB3ZSBhcmUgZG9uZSAqL1xuLVx0XHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX0lETEU7XG4rXG4rXHRcdGlzb3RwX3NldF90eF9yZXN1bHQoc28sIHNvLVx1MDAzZXR4X2dlbiwgMCk7XG4rXHRcdC8qIHNldCB0byBJRExFIGFmdGVyIHB1Ymxpc2hpbmcgdHhfcmVzdWx0ICovXG4rXHRcdHNtcF9zdG9yZV9yZWxlYXNlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9JRExFKTtcbiBcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnNvLVx1MDAzZXdhaXQpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXHR9XG4gXG4gXHRpZiAoc28tXHUwMDNldHhmYy5icyBcdTAwMjZcdTAwMjYgc28tXHUwMDNldHguYnMgXHUwMDNlPSBzby1cdTAwM2V0eGZjLmJzKSB7XG4gXHRcdC8qIHN0b3AgYW5kIHdhaXQgZm9yIEZDIHdpdGggdGltZW91dCAqL1xuLVx0XHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX1dBSVRfRkM7XG4rXHRcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIElTT1RQX1dBSVRfRkMpO1xuIFx0XHRocnRpbWVyX3N0YXJ0KFx1MDAyNnNvLVx1MDAzZXR4dGltZXIsIGt0aW1lX3NldChJU09UUF9GQ19USU1FT1VULCAwKSxcbiBcdFx0XHQgICAgICBIUlRJTUVSX01PREVfUkVMX1NPRlQpO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtOTQ2LDE2ICsxMDMwLDIwIEBAIHN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9lY2hvKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXG4gXHRzcGluX3VubG9jayhcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiB9XG4gXG4tLyogc2hhcmVkIGJ5IHNvLVx1MDAzZXR4dGltZXIncyBhbmQgc28tXHUwMDNlZWNob3RpbWVyJ3MgY2FsbGJhY2tzLiBCb3RoIHRpbWVycyBnZXRcbi0gKiBjYW5jZWxsZWQgdW5kZXIgc28tXHUwMDNlcnhfbG9jayBlbHNld2hlcmUsIHNvIHRoaXMgbXVzdCBzdGF5IGxvY2stZnJlZSB0b1xuLSAqIGF2b2lkIGRlYWRsb2NraW5nIHdpdGggdGhhdDsgdXNlcyBzby1cdTAwM2V0eF9nZW4gaW5zdGVhZCB0byBhdm9pZCB0YWludGluZ1xuLSAqIGEgbmV3IHRyYW5zZmVyIHdpdGggYW4gZXJyb3IgZnJvbSB0aGUgb25lIHRoYXQganVzdCB0aW1lZCBvdXQuXG4rLyogaXNvdHBfdHhfdGltZW91dDogd2UgZGlkIG5vdCBnZXQgYW55IGZsb3cgY29udHJvbCBvciBlY2hvIGZyYW1lIGluIHRpbWVcbisgKlxuKyAqIFNoYXJlZCBieSBzby1cdTAwM2V0eHRpbWVyJ3MgYW5kIHNvLVx1MDAzZWVjaG90aW1lcidzIGNhbGxiYWNrcy4gQm90aCB0aW1lcnMgZ2V0XG4rICogY2FuY2VsbGVkIHVuZGVyIHNvLVx1MDAzZXJ4X2xvY2sgZWxzZXdoZXJlLCBzbyB0aGlzIG11c3Qgc3RheSBsb2NrLWZyZWUuXG4rICpcbisgKiB0eC5zdGF0ZSBpcyBhY3F1aXJlZCBiZWZvcmUgdHhfZ2VuLiBDb21tb24gc2VxdWVuY2UgaW4gaXNvdHBfdHhfZ2VuX2RvbmUoKS5cbisgKiBjbXB4Y2hnKCkgb25seSBvcmRlcnMgaXRzZWxmLCBub3QgdGhlIHR3byBwcmVjZWRpbmcgbG9hZHMuXG4gICovXG4gc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4X3RpbWVvdXQoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIHtcbiBcdHN0cnVjdCBzb2NrICpzayA9IFx1MDAyNnNvLVx1MDAzZXNrO1xuK1x0LyogcmVhZCB0eC5zdGF0ZSBmaXJzdCBmb3IgdGhlIGNvbW1vbiBzZXF1ZW5jZSAqL1xuK1x0dTMyIG9sZF9zdGF0ZSA9IHNtcF9sb2FkX2FjcXVpcmUoXHUwMDI2c28tXHUwMDNldHguc3RhdGUpO1xuIFx0dTMyIGdlbiA9IFJFQURfT05DRShzby1cdTAwM2V0eF9nZW4pO1xuLVx0dTMyIG9sZF9zdGF0ZSA9IFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSk7XG4gXG4gXHQvKiBkb24ndCBoYW5kbGUgdGltZW91dHMgaW4gSURMRSBvciBTSFVURE9XTiBzdGF0ZSAqL1xuIFx0aWYgKG9sZF9zdGF0ZSA9PSBJU09UUF9JRExFIHx8IG9sZF9zdGF0ZSA9PSBJU09UUF9TSFVURE9XTilcbkBAIC05NjUsMTQgKzEwNTMsMTQgQEAgc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlzb3RwX3R4X3RpbWVvdXQoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxuIFx0aWYgKGNtcHhjaGcoXHUwMDI2c28tXHUwMDNldHguc3RhdGUsIG9sZF9zdGF0ZSwgSVNPVFBfSURMRSkgIT0gb2xkX3N0YXRlKVxuIFx0XHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XG4gXG4tXHQvKiB3ZSBkaWQgbm90IGdldCBhbnkgZmxvdyBjb250cm9sIG9yIGVjaG8gZnJhbWUgaW4gdGltZSAqL1xuK1x0LyogZGV0ZWN0ZWQgdGltZW91dDogcmVwb3J0ICdjb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQnICovXG4gXG4tXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgPT0gZ2VuKSB7XG4tXHRcdC8qIHJlcG9ydCAnY29tbXVuaWNhdGlvbiBlcnJvciBvbiBzZW5kJyAqL1xuLVx0XHRzay1cdTAwM2Vza19lcnIgPSBFQ09NTTtcbi1cdFx0aWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkpXG4tXHRcdFx0c2tfZXJyb3JfcmVwb3J0KHNrKTtcbi1cdH1cbitcdC8qIGEgc3RhbGUgcmVhZCBvZiB0aGlzIHNsb3QgYnkgYSB3YWl0ZXIgc3RpbGwgZmFsbHMgYmFjayB0byBFQ09NTSAqL1xuK1x0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgZ2VuLCBFQ09NTSk7XG4rXG4rXHRzay1cdTAwM2Vza19lcnIgPSBFQ09NTTtcbitcdGlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKVxuK1x0XHRza19lcnJvcl9yZXBvcnQoc2spO1xuIFxuIFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlKFx1MDAyNnNvLVx1MDAzZXdhaXQpO1xuIFxuQEAgLTEwMDcsNyArMTA5NSw3IEBAIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF90eGZyX3RpbWVyX2hhbmRsZXIoc3RydWN0IGhydGltZXIgKmhydGltZXIpXG4gXHRcdCAgICAgIEhSVElNRVJfTU9ERV9SRUxfU09GVCk7XG4gXG4gXHQvKiBjZmVjaG8gc2hvdWxkIGJlIGNvbnN1bWVkIGJ5IGlzb3RwX3Jjdl9lY2hvKCkgaGVyZSAqL1xuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlID09IElTT1RQX1NFTkRJTkcgXHUwMDI2XHUwMDI2ICFzby1cdTAwM2VjZmVjaG8pXG4rXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9TRU5ESU5HIFx1MDAyNlx1MDAyNiAhUkVBRF9PTkNFKHNvLVx1MDAzZWNmZWNobykpXG4gXHRcdGlzb3RwX3NlbmRfY2ZyYW1lKHNvKTtcbiBcbiBcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbkBAIC0xMDI2LDEwICsxMTE0LDEyIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0czY0IGhydGltZXJfc2VjID0gSVNPVFBfRUNIT19USU1FT1VUO1xuIFx0c3RydWN0IGhydGltZXIgKnR4X2hydCA9IFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lcjtcbiBcdHUzMiBuZXdfc3RhdGUgPSBJU09UUF9TRU5ESU5HO1xuK1x0dTMyIG15X2dlbjtcbitcdHUzMiBvbGRfY2ZlY2hvO1xuIFx0aW50IG9mZjtcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoIXNvLVx1MDAzZWJvdW5kIHx8IHNvLVx1MDAzZXR4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKVxuK1x0aWYgKCFzby1cdTAwM2Vib3VuZCB8fCBSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXG4gXHQvKiBjbGFpbSB0aGUgc29ja2V0IHVuZGVyIHNvLVx1MDAzZXJ4X2xvY2s6IHRoaXMgc2VyaWFsaXplcyB0aGUgY2xhaW1cbkBAIC0xMDQ2LDI5ICsxMTM2LDMzIEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgTVNHX0RPTlRXQUlUKVxuIFx0XHRcdHJldHVybiAtRUFHQUlOO1xuIFxuLVx0XHRpZiAoc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfU0hVVERPV04pXG4rXHRcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX1NIVVRET1dOKVxuIFx0XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcbiBcdFx0Lyogd2FpdCBmb3IgY29tcGxldGUgdHJhbnNtaXNzaW9uIG9mIGN1cnJlbnQgcGR1ICovXG4gXHRcdGVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzby1cdTAwM2V3YWl0LFxuLVx0XHRcdFx0XHQgICAgICAgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfSURMRSk7XG4rXHRcdFx0XHRcdCAgICAgICBSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpID09IElTT1RQX0lETEUgfHxcbitcdFx0XHRcdFx0ICAgICAgIFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfU0hVVERPV04pO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4tXHQvKiBuZXcgdHJhbnNmZXI6IGJ1bXAgc28tXHUwMDNldHhfZ2VuIGFuZCBkcmFpbiB0aGUgb2xkIG9uZSdzIHRpbWVycyxcbi1cdCAqIHN0aWxsIHVuZGVyIHRoZSBzby1cdTAwM2VyeF9sb2NrIHdlIGp1c3QgY2xhaW1lZCB0aGUgc29ja2V0IHdpdGhcbi1cdCAqL1xuLVx0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0VORElORyk7XG4tXHRXUklURV9PTkNFKHNvLVx1MDAzZXR4X2dlbiwgUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgKyAxKTtcbitcdC8qIHR4ZnJ0aW1lcidzIGNhbGxiYWNrIHJlLWFybXMgZWNob3RpbWVyIGxvY2stZnJlZTogZHJhaW4gaXQgZmlyc3QgKi9cbitcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZXR4ZnJ0aW1lcik7XG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eHRpbWVyKTtcbiBcdGhydGltZXJfY2FuY2VsKFx1MDAyNnNvLVx1MDAzZWVjaG90aW1lcik7XG4tXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eGZydGltZXIpO1xuLVx0c28tXHUwMDNlY2ZlY2hvID0gMDtcbitcbitcdC8qIG5ldyB0cmFuc2ZlcjogaW5jcmVtZW50IHNvLVx1MDAzZXR4X2dlbiBhbmQgc2V0IHR4LnN0YXRlIGFmdGVyIGJhcnJpZXIgKi9cbitcdG15X2dlbiA9IGlzb3RwX2luY190eF9nZW4oUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikpO1xuK1x0aXNvdHBfc2V0X3R4X3Jlc3VsdChzbywgbXlfZ2VuLCBFQ09NTSk7IC8qIHByZXZlbnQgc3RhbGUgc2xvdCBtYXRjaGluZyAqL1xuK1x0V1JJVEVfT05DRShzby1cdTAwM2V0eF9nZW4sIG15X2dlbik7XG4rXHRzbXBfd21iKCk7IC8qIHNlZSBzbXBfbG9hZF9hY3F1aXJlKCkgaW4gaXNvdHBfdHhfW3RpbWVvdXR8Z2VuX2RvbmVdICovXG4rXHRXUklURV9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlLCBJU09UUF9TRU5ESU5HKTtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCAwKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuIFxuIFx0Lyogc28tXHUwMDNlYm91bmQgaXMgb25seSBjaGVja2VkIG9uY2UgYWJvdmUgLSBhIHdha2V1cCBtYXkgaGF2ZVxuLVx0ICogdW5ib3VuZC9yZWJvdW5kIHRoZSBzb2NrZXQgbWVhbndoaWxlLCBzbyByZS12YWxpZGF0ZSBpdFxuK1x0ICogdW5ib3VuZC9yZWJvdW5kIHRoZSBzb2NrZXQgbWVhbndoaWxlID1cdTAwM2UgcmVjaGVja1xuIFx0ICovXG4gXHRpZiAoIXNvLVx1MDAzZWJvdW5kKSB7XG4gXHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuQEAgLTExMjcsNiArMTIyMSw5IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFxuIFx0Y3N4LVx1MDAzZWNhbl9paWYgPSBkZXYtXHUwMDNlaWZpbmRleDtcbiBcbitcdC8qIHNldCB1aWQgaW4gdHggc2tiIHRvIGlkZW50aWZ5IENGIGVjaG8gZnJhbWVzICovXG4rXHRjYW5fc2V0X3NrYl91aWQoc2tiKTtcbitcbiBcdHNvLVx1MDAzZXR4LmxlbiA9IHNpemU7XG4gXHRzby1cdTAwM2V0eC5pZHggPSAwO1xuIFxuQEAgLTExMzQsOCArMTIzMSw5IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0c2tiX3B1dF96ZXJvKHNrYiwgc28tXHUwMDNlbGwubXR1KTtcbiBcbiBcdC8qIGNmZWNobyBzaG91bGQgaGF2ZSBiZWVuIHplcm8nZWQgYnkgaW5pdCAvIGZvcm1lciBpc290cF9yY3ZfZWNobygpICovXG4tXHRpZiAoc28tXHUwMDNlY2ZlY2hvKVxuLVx0XHRwcl9ub3RpY2Vfb25jZShcImNhbi1pc290cDogdW5pbml0IGNmZWNobyAlMDhYXFxuXCIsIHNvLVx1MDAzZWNmZWNobyk7XG4rXHRvbGRfY2ZlY2hvID0gUkVBRF9PTkNFKHNvLVx1MDAzZWNmZWNobyk7XG4rXHRpZiAob2xkX2NmZWNobylcbitcdFx0cHJfbm90aWNlX29uY2UoXCJjYW4taXNvdHA6IHVuaW5pdCBjZmVjaG8gJTA4WFxcblwiLCBvbGRfY2ZlY2hvKTtcbiBcbiBcdC8qIGNoZWNrIGZvciBzaW5nbGUgZnJhbWUgdHJhbnNtaXNzaW9uIGRlcGVuZGluZyBvbiBUWF9ETCAqL1xuIFx0aWYgKHNpemUgXHUwMDNjPSBzby1cdTAwM2V0eC5sbF9kbCAtIFNGX1BDSV9TWjQgLSBhZSAtIG9mZikge1xuQEAgLTExNjMsNyArMTI2MSw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdGNmLVx1MDAzZWRhdGFbYWVdIHw9IHNpemU7XG4gXG4gXHRcdC8qIHNldCBDRiBlY2hvIHRhZyBmb3IgaXNvdHBfcmN2X2VjaG8oKSAoU0YtbW9kZSkgKi9cbi1cdFx0c28tXHUwMDNlY2ZlY2hvID0gKih1MzIgKiljZi1cdTAwM2VkYXRhO1xuK1x0XHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgc2tiLVx1MDAzZWhhc2gpO1xuIFx0fSBlbHNlIHtcbiBcdFx0Lyogc2VuZCBmaXJzdCBmcmFtZSAqL1xuIFxuQEAgLTExODAsNyArMTI3OCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRcdHNvLVx1MDAzZXR4ZmMuYnMgPSAwO1xuIFxuIFx0XHRcdC8qIHNldCBDRiBlY2hvIHRhZyBmb3IgaXNvdHBfcmN2X2VjaG8oKSAoQ0YtbW9kZSkgKi9cbi1cdFx0XHRzby1cdTAwM2VjZmVjaG8gPSAqKHUzMiAqKWNmLVx1MDAzZWRhdGE7XG4rXHRcdFx0V1JJVEVfT05DRShzby1cdTAwM2VjZmVjaG8sIHNrYi1cdTAwM2VoYXNoKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBzdGFuZGFyZCBmbG93IGNvbnRyb2wgY2hlY2sgKi9cbiBcdFx0XHRuZXdfc3RhdGUgPSBJU09UUF9XQUlUX0ZJUlNUX0ZDO1xuQEAgLTExOTAsMTIgKzEyODgsMTIgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0dHhfaHJ0ID0gXHUwMDI2c28tXHUwMDNldHh0aW1lcjtcbiBcbiBcdFx0XHQvKiBubyBDRiBlY2hvIHRhZyBmb3IgaXNvdHBfcmN2X2VjaG8oKSAoRkYtbW9kZSkgKi9cbi1cdFx0XHRzby1cdTAwM2VjZmVjaG8gPSAwO1xuK1x0XHRcdFdSSVRFX09OQ0Uoc28tXHUwMDNlY2ZlY2hvLCAwKTtcbiBcdFx0fVxuIFx0fVxuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlID09IElTT1RQX1NIVVRET1dOKSB7XG4rXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9TSFVURE9XTikge1xuIFx0XHQvKiBpc290cF9yZWxlYXNlKCkgaGFzIHNpbmNlIHRha2VuIG92ZXIgYW5kIGFscmVhZHkgZHJhaW5lZFxuIFx0XHQgKiBvdXIgdGltZXJzIC0gZG9uJ3Qgc2VuZCBpbnRvIGEgc29ja2V0IHRoYXQncyBnb2luZyBhd2F5XG4gXHRcdCAqL1xuQEAgLTEyMDYsNyArMTMwNCw3IEBAIHN0YXRpYyBpbnQgaXNvdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4gXHR9XG4gXHQvKiBXQUlUX0ZJUlNUX0ZDIGZvciBzdGFuZGFyZCBGRiwgZWxzZSBzdGF5cyBJU09UUF9TRU5ESU5HICovXG4tXHRzby1cdTAwM2V0eC5zdGF0ZSA9IG5ld19zdGF0ZTtcbitcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIG5ld19zdGF0ZSk7XG4gXHRocnRpbWVyX3N0YXJ0KHR4X2hydCwga3RpbWVfc2V0KGhydGltZXJfc2VjLCAwKSxcbiBcdFx0ICAgICAgSFJUSU1FUl9NT0RFX1JFTF9TT0ZUKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnNvLVx1MDAzZXJ4X2xvY2spO1xuQEAgLTEyMjMsMjAgKzEzMjEsNDkgQEAgc3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXG4gXHRcdFx0ICAgICAgIF9fZnVuY19fLCBFUlJfUFRSKGVycikpO1xuIFxuIFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4rXG4rXHRcdC8qIG5ldyB0cmFuc2ZlciBhbHJlYWR5IGNsYWltZWQgYnkgYSBjb25jdXJyZW50IGNvbXBsZXRpb24sXG4rXHRcdCAqIHRpbWVvdXQgb3Igc2VuZG1zZygpIHdoaWxlIHdlIHdlcmUgc3R1Y2sgaW4gY2FuX3NlbmQoKT9cbitcdFx0ICovXG4rXHRcdGlmIChSRUFEX09OQ0Uoc28tXHUwMDNldHhfZ2VuKSAhPSBteV9nZW4pIHtcbitcdFx0XHQvKiBkb24ndCB0b3VjaCB0aW1lcnMgYW5kIHN0YXRlIG9mIHRoZSBuZXcgdHJhbnNmZXIgKi9cbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4rXG4gXHRcdC8qIG5vIHRyYW5zbWlzc2lvbiAtXHUwMDNlIG5vIHRpbWVvdXQgbW9uaXRvcmluZyAqL1xuIFx0XHRocnRpbWVyX2NhbmNlbCh0eF9ocnQpO1xuIFx0XHRnb3RvIGVycl9vdXRfZHJvcF9sb2NrZWQ7XG4gXHR9XG4gXG4gXHRpZiAod2FpdF90eF9kb25lKSB7XG4tXHRcdC8qIHdhaXQgZm9yIGNvbXBsZXRlIHRyYW5zbWlzc2lvbiBvZiBjdXJyZW50IHBkdSAqL1xuLVx0XHRlcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCwgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfSURMRSk7XG4rXHRcdC8qIHdha2UgdXAgZm9yOlxuK1x0XHQgKiAtIGNvbmN1cnJlbnQgc2VuZG1zZygpIGNsYWltaW5nIGEgbmV3IHRyYW5zZmVyXG4rXHRcdCAqIC0gY29tcGxldGUgdHJhbnNtaXNzaW9uIG9mIGN1cnJlbnQgUERVXG4rXHRcdCAqIC0gc2h1dGRvd24gc3RhdGUgY2hhbmdlIGluIGlzb3RwX3JlbGVhc2UoKVxuK1x0XHQgKiBpc290cF90eF9nZW5fZG9uZSgpIHVzZXMgY29tbW9uIHR4LnN0YXRlL3R4X2dlbiByZWFkIHNlcXVlbmNlXG4rXHRcdCAqL1xuK1x0XHRlcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCxcbitcdFx0XHRcdFx0ICAgICAgIGlzb3RwX3R4X2dlbl9kb25lKHNvLCBteV9nZW4pKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGVycl9ldmVudF9kcm9wO1xuIFxuLVx0XHRlcnIgPSBzb2NrX2Vycm9yKHNrKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHQvKiBzdGlsbCBvdXIgY2xhaW0sIGJ1dCBpc290cF9yZWxlYXNlKCkgZm9yY2Utc2h1dCBpdCBkb3duICovXG4rXHRcdGlmIChzbXBfbG9hZF9hY3F1aXJlKFx1MDAyNnNvLVx1MDAzZXR4LnN0YXRlKSA9PSBJU09UUF9TSFVURE9XTiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIFJFQURfT05DRShzby1cdTAwM2V0eF9nZW4pID09IG15X2dlbikge1xuK1x0XHRcdGVyciA9IC1FQUREUk5PVEFWQUlMO1xuK1x0XHRcdGdvdG8gZXJyX2V2ZW50X2Ryb3A7XG4rXHRcdH1cbitcbitcdFx0Lyogb3duIGNvbXBsZXRpb24sIG9yIHR4X2dlbiBtb3ZlZCBvbiAtIGVpdGhlciB3YXkgdGhpcyBpc1xuK1x0XHQgKiB3aGF0IGlzb3RwX2dldF90eF9yZXN1bHQoKSByZWNvcmRlZCBmb3IgbXlfZ2VuXG4rXHRcdCAqL1xuK1x0XHRlcnIgPSBpc290cF9nZXRfdHhfcmVzdWx0KHNvLCBteV9nZW4pO1xuK1xuK1x0XHQvKiBkcmFpbiB0byBhdm9pZCBzdGFsZSBlcnJvciBmb3IgYSBsYXRlciBwb2xsKCkvU09fRVJST1IgKi9cbitcdFx0c29ja19lcnJvcihzayk7XG4rXG4rXHRcdHJldHVybiBlcnIgPyBlcnIgOiBzaXplO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHNpemU7XG5AQCAtMTI0NiwxNSArMTM3MywyNiBAQCBzdGF0aWMgaW50IGlzb3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSlcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbiBcdGdvdG8gZXJyX291dF9kcm9wX2xvY2tlZDtcbiBlcnJfZXZlbnRfZHJvcDpcbi1cdC8qIGludGVycnVwdGVkIHdhaXRpbmcgb24gb3VyIG93biB0cmFuc2ZlciAtIGRyYWluIGl0cyB0aW1lcnMgKi9cbitcdC8qIGludGVycnVwdGVkIG9yIHNodXQgZG93biB3aGlsZSB3YWl0aW5nIG9uIG91ciBvd24gdHJhbnNmZXIgKi9cbiBcdHNwaW5fbG9ja19iaChcdTAwMjZzby1cdTAwM2VyeF9sb2NrKTtcbitcbitcdC8qIG5ldyB0cmFuc2ZlciBhbHJlYWR5IHN0YXJ0ZWQgYnkgY29uY3VycmVudCBzZW5kbXNnKCk/ICovXG4rXHRpZiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4X2dlbikgIT0gbXlfZ2VuKSB7XG4rXHRcdC8qIGRvbid0IHRvdWNoIHRpbWVycyBhbmQgc3RhdGVzIG9mIHRoZSBuZXcgdHJhbnNmZXIgKi9cbitcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2V0eGZydGltZXIpO1xuIFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2c28tXHUwMDNldHh0aW1lcik7XG4gXHRocnRpbWVyX2NhbmNlbChcdTAwMjZzby1cdTAwM2VlY2hvdGltZXIpO1xuIGVycl9vdXRfZHJvcF9sb2NrZWQ6XG4gXHQvKiByZWxlYXNlIHRoZSBjbGFpbTsgc28tXHUwMDNlcnhfbG9jayBzdGlsbCBoZWxkIGZyb20gYWJvdmUgKi9cbi1cdHNvLVx1MDAzZWNmZWNobyA9IDA7XG4tXHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX0lETEU7XG4rXHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4rXG4rXHQvKiBvbmx5IGNsYWltIHRvIElETEUgaWYgaXNvdHBfcmVsZWFzZSgpIGhhcyBub3QgdGFrZW4gb3ZlciAqL1xuK1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfU0hVVERPV04pXG4rXHRcdFdSSVRFX09OQ0Uoc28tXHUwMDNldHguc3RhdGUsIElTT1RQX0lETEUpO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4gXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXG5AQCAtMTMyMCw4ICsxNDU4LDkgQEAgc3RhdGljIGludCBpc290cF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4gXHQvKiBiZXN0LWVmZm9ydDogd2FpdCBmb3IgYSBydW5uaW5nIHBkdSB0byBmaW5pc2gsIGJ1dCBkb24ndCBibG9jayBvblxuIFx0ICogaXQgZm9yZXZlciAtIGdpdmUgdXAgYWZ0ZXIgdGhlIGZpcnN0IHNpZ25hbFxuIFx0ICovXG4tXHR3aGlsZSAoc28tXHUwMDNldHguc3RhdGUgIT0gSVNPVFBfSURMRSBcdTAwMjZcdTAwMjZcbi1cdCAgICAgICB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc28tXHUwMDNld2FpdCwgc28tXHUwMDNldHguc3RhdGUgPT0gSVNPVFBfSURMRSkgPT0gMClcbitcdHdoaWxlIChSRUFEX09OQ0Uoc28tXHUwMDNldHguc3RhdGUpICE9IElTT1RQX0lETEUgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNvLVx1MDAzZXdhaXQsXG4rXHRcdFx0XHRcdFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgPT0gSVNPVFBfSURMRSkgPT0gMClcbiBcdFx0O1xuIFxuIFx0LyogY2xhaW0gdGhlIHNvY2tldCB1bmRlciBzby1cdTAwM2VyeF9sb2NrIGxpa2Ugc2VuZG1zZygpIGRvZXMsIHNvIGl0c1xuQEAgLTEzMjksOSArMTQ2OCwxMiBAQCBzdGF0aWMgaW50IGlzb3RwX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcbiBcdCAqIHVuY29uZGl0aW9uYWxseSwgZXZlbiB3aGVuIGEgc2lnbmFsIGN1dCB0aGUgd2FpdCBhYm92ZSBzaG9ydFxuIFx0ICovXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4tXHRzby1cdTAwM2V0eC5zdGF0ZSA9IElTT1RQX1NIVVRET1dOO1xuK1x0V1JJVEVfT05DRShzby1cdTAwM2V0eC5zdGF0ZSwgSVNPVFBfU0hVVERPV04pO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2c28tXHUwMDNlcnhfbG9jayk7XG4tXHRzby1cdTAwM2VyeC5zdGF0ZSA9IElTT1RQX0lETEU7XG4rXHRXUklURV9PTkNFKHNvLVx1MDAzZXJ4LnN0YXRlLCBJU09UUF9JRExFKTtcbitcbitcdC8qIGZvcmNlZCBTSFVURE9XTiBtYXkgaGF2ZSBza2lwcGVkIElETEUgKGdhdmUgdXAgb24gYSBzaWduYWwpICovXG4rXHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2c28tXHUwMDNld2FpdCk7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2aXNvdHBfbm90aWZpZXJfbG9jayk7XG4gXHR3aGlsZSAoaXNvdHBfYnVzeV9ub3RpZmllciA9PSBzbykge1xuQEAgLTE0NDcsNyArMTU4OSw4IEBAIHN0YXRpYyBpbnQgaXNvdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsXG4gXHQgKiB3aXRoIHNvLVx1MDAzZWJvdW5kIGluIHRoZSBzYW1lIGxvY2tfc29jaygpIHNlY3Rpb24gYWJvdmUsIHNvIHRoZXJlIGlzXG4gXHQgKiBubyB3aW5kb3cgaW4gd2hpY2ggYSBjb25jdXJyZW50IGlzb3RwX25vdGlmeSgpIGNvdWxkIGJlIG1pc3NlZC5cbiBcdCAqL1xuLVx0aWYgKHNvLVx1MDAzZXR4LnN0YXRlICE9IElTT1RQX0lETEUgfHwgc28tXHUwMDNlcnguc3RhdGUgIT0gSVNPVFBfSURMRSkge1xuK1x0aWYgKFJFQURfT05DRShzby1cdTAwM2V0eC5zdGF0ZSkgIT0gSVNPVFBfSURMRSB8fFxuK1x0ICAgIFJFQURfT05DRShzby1cdTAwM2VyeC5zdGF0ZSkgIT0gSVNPVFBfSURMRSkge1xuIFx0XHRlcnIgPSAtRUFHQUlOO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbkBAIC0xNDgxLDcgKzE2MjQsNyBAQCBzdGF0aWMgaW50IGlzb3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVhZGRyLCBpbnQgbFxuIFx0XHRcdFx0aXNvdHBfcmN2LCBzaywgXCJpc290cFwiLCBzayk7XG4gXG4gXHQvKiBubyBjb25zZWN1dGl2ZSBmcmFtZSBlY2hvIHNrYiBpbiBmbGlnaHQgKi9cbi1cdHNvLVx1MDAzZWNmZWNobyA9IDA7XG4rXHRXUklURV9PTkNFKHNvLVx1MDAzZWNmZWNobywgMCk7XG4gXG4gXHQvKiByZWdpc3RlciBmb3IgZWNobyBza2IncyAqL1xuIFx0Y2FuX3J4X3JlZ2lzdGVyKG5ldCwgZGV2LCB0eF9pZCwgU0lOR0xFX01BU0sodHhfaWQpLFxuQEAgLTE4NDcsNyArMTk5MCw3IEBAIHN0YXRpYyBfX3BvbGxfdCBpc290cF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBwb2xsX3RhYmxlICp3XG4gXHRwb2xsX3dhaXQoZmlsZSwgXHUwMDI2c28tXHUwMDNld2FpdCwgd2FpdCk7XG4gXG4gXHQvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byBUWCBzdGF0ZSAqL1xuLVx0aWYgKChtYXNrIFx1MDAyNiBFUE9MTFdSTk9STSkgXHUwMDI2XHUwMDI2IChzby1cdTAwM2V0eC5zdGF0ZSAhPSBJU09UUF9JRExFKSlcbitcdGlmICgobWFzayBcdTAwMjYgRVBPTExXUk5PUk0pIFx1MDAyNlx1MDAyNiAoUkVBRF9PTkNFKHNvLVx1MDAzZXR4LnN0YXRlKSAhPSBJU09UUF9JRExFKSlcbiBcdFx0bWFzayBcdTAwMjY9IH4oRVBPTExPVVQgfCBFUE9MTFdSTk9STSk7XG4gXG4gXHRyZXR1cm4gbWFzaztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEyOjU2LjkxMTU5MTM4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDYxMzQzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJU09UUCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggZm9yIGBuZXQvY2FuL2lzb3RwLmNgLiBTZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHByaW1hcmlseSBmb2N1c2VkIG9uIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgdHJhbnNtaXQgYW5kIHJlY2VpdmUgc3RhdGVzIHVzaW5nIGBSRUFEX09OQ0VgIGFuZCBgV1JJVEVfT05DRWAuIFRoYXQncyBhIGNsYXNzaWMgY29uY3VycmVuY3kgb3B0aW1pemF0aW9uLCB3aGljaCBhbHdheXMgbWFrZXMgbWUgdGhpbmsgYWJvdXQgcG90ZW50aWFsIGRhdGEgcmFjZXMgYW5kIGZ1enppbmcgb3Bwb3J0dW5pdGllcy4gVGhlIGludHJvZHVjdGlvbiBvZiBgc28tXHUwMDNldHhfcmVzdWx0W11gIGFuZCBgc28tXHUwMDNldHhfZ2VuYCB0byB0cmFjayBUWCByZXN1bHRzIHBlciBnZW5lcmF0aW9uIGlzIG5ldy4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IEkgd2FudCB0byBzdWJqZWN0IHRvIHNvbWUgc2VyaW91cyBmdXp6aW5nLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlcy4gTG9va3MgbGlrZSB3ZSd2ZSBnb3QgYSB3aG9sZSBsaXN0OiBgaXNvdHBfcmN2X2ZjYCwgYGlzb3RwX3Jjdl9zZmAsIGBpc290cF9yY3ZfZmZgLCBgaXNvdHBfcmN2X2NmYCwgYGlzb3RwX3JjdmAsIGBpc290cF9zZW5kX2NmcmFtZWAsIGBpc290cF9yY3ZfZWNob2AsIGBpc290cF90eF90aW1lb3V0YCwgYGlzb3RwX3R4ZnJfdGltZXJfaGFuZGxlcmAsIGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX3JlbGVhc2VgLCBgaXNvdHBfYmluZGAsIGFuZCBgaXNvdHBfcG9sbGAuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgd2hhdCBhcmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzPyBJJ20gdGhpbmtpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGV4cG9zZSB0aGUgQVBJIHRvIHRoZSByZXN0IG9mIHRoZSBDQU4gc3RhY2sgYW5kLCB1bHRpbWF0ZWx5LCB0byB0aGUgdXNlciBzcGFjZS4gQmFzZWQgb24gdGhlIGxpc3QsIGBpc290cF9zZW5kbXNnYCBhbmQgYGlzb3RwX2JpbmRgIGFyZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIGBpc290cF9yY3ZgIGlzIGFsc28gdGhlcmUsIHdoaWNoIGlzIGludGVyZXN0aW5nLCBiZWNhdXNlIGl0J3MgY2FsbGVkIHRocm91Z2ggdGhlIENBTiBjb3JlLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgaXNvdHBfcmN2X2ZjYCwgZXRjLiBhcmUgY2FsbGVkIGJ5IGBpc290cF9yY3ZgLiBTaW5jZSBgaXNvdHBfcmN2YCBpcyBhbHNvIHN0YXRpYyBJJ2xsIGhhdmUgdG8gZG91YmxlLWNoZWNrIHRoYXQgd2l0aCBgZ3JlcHBlcmAgYW5kIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBiZSBzdXJlIEkndmUgaWRlbnRpZmllZCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIHRoZSBtYWluIEFQSSBlbnRyeSBwb2ludHMsIG9yIGFueXRoaW5nIGVsc2UgaW50ZXJlc3RpbmcuIEknbGwgdXNlIGBncmVwcGVyYCB0byBzZWUgaWYgSSBjYW4gZmluZCB0aGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk1NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjAzLjYxNzcyODQzMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkzODY2NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oaW50fHZvaWQpIGlzb3RwX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL2lzb3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9pc290cC5jPTIwOT1zdGF0aWMgdTMyIGlzb3RwX2dldF90eF9lcnIodTMyIGdlbl9lcnIpXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtMjE0LS8qIHN0b3JlIHRyYW5zZmVyIHJlc3VsdCBpbiBwZXItZ2VuZXJhdGlvbiU0IHNvLVxcdTAwM2V0eF9yZXN1bHRbXSBzbG90ICovXFxubmV0L2Nhbi9pc290cC5jOjIxNTpzdGF0aWMgdm9pZCBpc290cF9zZXRfdHhfcmVzdWx0KHN0cnVjdCBpc290cF9zb2NrICpzbywgdTMyIGdlbiwgaW50IGVycilcXG5uZXQvY2FuL2lzb3RwLmMtMjE2LXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0yMjEtLyogZmV0Y2ggdGhlIHJlc3VsdCByZWNvcmRlZCBmb3IgJ2dlbicsIGFzIGEgKG5lZ2F0aXZlKSBlcnJubyAoMCBmb3Igc3VjY2VzcykgKi9cXG5uZXQvY2FuL2lzb3RwLmM6MjIyOnN0YXRpYyBpbnQgaXNvdHBfZ2V0X3R4X3Jlc3VsdChzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHUzMiBnZW4pXFxubmV0L2Nhbi9pc290cC5jLTIyMy17XFxuLS1cXG5uZXQvY2FuL2lzb3RwLmM9MjY1PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpc290cF9yeF90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTI4NS1cXG5uZXQvY2FuL2lzb3RwLmM6Mjg2OnN0YXRpYyBpbnQgaXNvdHBfc2VuZF9mYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBhZSwgdTggZmxvd3N0YXR1cylcXG5uZXQvY2FuL2lzb3RwLmMtMjg3LXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0zNTQtXFxubmV0L2Nhbi9pc290cC5jOjM1NTpzdGF0aWMgdm9pZCBpc290cF9yY3Zfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzb2NrICpzaylcXG5uZXQvY2FuL2lzb3RwLmMtMzU2LXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYz00MTE9c3RhdGljIGludCBjaGVja19wYWQoc3RydWN0IGlzb3RwX3NvY2sgKnNvLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLFxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTQzOC1cXG5uZXQvY2FuL2lzb3RwLmM6NDM5OnN0YXRpYyB2b2lkIGlzb3RwX3NlbmRfY2ZyYW1lKHN0cnVjdCBpc290cF9zb2NrICpzbyk7XFxubmV0L2Nhbi9pc290cC5jLTQ0MC1cXG5uZXQvY2FuL2lzb3RwLmM6NDQxOnN0YXRpYyBpbnQgaXNvdHBfcmN2X2ZjKHN0cnVjdCBpc290cF9zb2NrICpzbywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IGFlKVxcbm5ldC9jYW4vaXNvdHAuYy00NDIte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTUzNy1cXG5uZXQvY2FuL2lzb3RwLmM6NTM4OnN0YXRpYyBpbnQgaXNvdHBfcmN2X3NmKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgaW50IHBjaWxlbixcXG5uZXQvY2FuL2lzb3RwLmMtNTM5LVxcdFxcdFxcdHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtNTcwLVxcbm5ldC9jYW4vaXNvdHAuYzo1NzE6c3RhdGljIGludCBpc290cF9yY3ZfZmYoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUpXFxubmV0L2Nhbi9pc290cC5jLTU3Mi17XFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtNjQzLVxcbm5ldC9jYW4vaXNvdHAuYzo2NDQ6c3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXFxubmV0L2Nhbi9pc290cC5jLTY0NS1cXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTc0My1cXG5uZXQvY2FuL2lzb3RwLmM6NzQ0OnN0YXRpYyB2b2lkIGlzb3RwX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpkYXRhKVxcbm5ldC9jYW4vaXNvdHAuYy03NDUte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTgzMS1cXG5uZXQvY2FuL2lzb3RwLmM6ODMyOnN0YXRpYyB2b2lkIGlzb3RwX2ZpbGxfZGF0YWZyYW1lKHN0cnVjdCBjYW5mZF9mcmFtZSAqY2YsIHN0cnVjdCBpc290cF9zb2NrICpzbyxcXG5uZXQvY2FuL2lzb3RwLmMtODMzLVxcdFxcdFxcdFxcdCBpbnQgYWUsIGludCBvZmYpXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtODYyLVxcbm5ldC9jYW4vaXNvdHAuYzo4NjM6c3RhdGljIHZvaWQgaXNvdHBfc2VuZF9jZnJhbWUoc3RydWN0IGlzb3RwX3NvY2sgKnNvKVxcbm5ldC9jYW4vaXNvdHAuYy04NjQte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTkzMi1cXG5uZXQvY2FuL2lzb3RwLmM6OTMzOnN0YXRpYyB2b2lkIGlzb3RwX2NyZWF0ZV9mZnJhbWUoc3RydWN0IGNhbmZkX2ZyYW1lICpjZiwgc3RydWN0IGlzb3RwX3NvY2sgKnNvLFxcbm5ldC9jYW4vaXNvdHAuYy05MzQtXFx0XFx0XFx0XFx0aW50IGFlKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTk2Ny1cXG5uZXQvY2FuL2lzb3RwLmM6OTY4OnN0YXRpYyB2b2lkIGlzb3RwX3Jjdl9lY2hvKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXFxubmV0L2Nhbi9pc290cC5jLTk2OS17XFxuLS1cXG5uZXQvY2FuL2lzb3RwLmM9MTA4OD1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXNvdHBfdHhmcl90aW1lcl9oYW5kbGVyKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTExMDMtXFxubmV0L2Nhbi9pc290cC5jOjExMDQ6c3RhdGljIGludCBpc290cF9zZW5kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUpXFxubmV0L2Nhbi9pc290cC5jLTExMDUte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTE0MDEtXFxubmV0L2Nhbi9pc290cC5jOjE0MDI6c3RhdGljIGludCBpc290cF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IHNpemUsXFxubmV0L2Nhbi9pc290cC5jLTE0MDMtXFx0XFx0XFx0IGludCBmbGFncylcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xNDQ1LVxcbm5ldC9jYW4vaXNvdHAuYzoxNDQ2OnN0YXRpYyBpbnQgaXNvdHBfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKVxcbm5ldC9jYW4vaXNvdHAuYy0xNDQ3LXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xNTMzLVxcbm5ldC9jYW4vaXNvdHAuYzoxNTM0OnN0YXRpYyBpbnQgaXNvdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqdWFkZHIsIGludCBsZW4pXFxubmV0L2Nhbi9pc290cC5jLTE1MzUte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTE2NjEtXFxubmV0L2Nhbi9pc290cC5jOjE2NjI6c3RhdGljIGludCBpc290cF9nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBwZWVyKVxcbm5ldC9jYW4vaXNvdHAuYy0xNjYzLXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xNjc5LVxcbm5ldC9jYW4vaXNvdHAuYzoxNjgwOnN0YXRpYyBpbnQgaXNvdHBfc2V0c29ja29wdF9sb2NrZWQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSxcXG5uZXQvY2FuL2lzb3RwLmMtMTY4MS1cXHRcXHRcXHQgICAgc29ja3B0cl90IG9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbilcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xNzc3LVxcbm5ldC9jYW4vaXNvdHAuYzoxNzc4OnN0YXRpYyBpbnQgaXNvdHBfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbm5ldC9jYW4vaXNvdHAuYy0xNzc5LVxcdFxcdFxcdCAgICBzb2NrcHRyX3Qgb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTE3OTMtXFxubmV0L2Nhbi9pc290cC5jOjE3OTQ6c3RhdGljIGludCBpc290cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxubmV0L2Nhbi9pc290cC5jLTE3OTUtXFx0XFx0XFx0ICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbilcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xODQ1LVxcbm5ldC9jYW4vaXNvdHAuYzoxODQ2OnN0YXRpYyB2b2lkIGlzb3RwX25vdGlmeShzdHJ1Y3QgaXNvdHBfc29jayAqc28sIHVuc2lnbmVkIGxvbmcgbXNnLFxcbm5ldC9jYW4vaXNvdHAuYy0xODQ3LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTE4OTAtXFxubmV0L2Nhbi9pc290cC5jOjE4OTE6c3RhdGljIGludCBpc290cF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIG1zZyxcXG5uZXQvY2FuL2lzb3RwLmMtMTg5Mi1cXHRcXHRcXHQgIHZvaWQgKnB0cilcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xOTEzLVxcbm5ldC9jYW4vaXNvdHAuYzoxOTE0OnN0YXRpYyB2b2lkIGlzb3RwX3NvY2tfZGVzdHJ1Y3Qoc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jYW4vaXNvdHAuYy0xOTE1LXtcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0xOTI4LVxcbm5ldC9jYW4vaXNvdHAuYzoxOTI5OnN0YXRpYyBpbnQgaXNvdHBfaW5pdChzdHJ1Y3Qgc29jayAqc2spXFxubmV0L2Nhbi9pc290cC5jLTE5MzAte1xcbi0tXFxubmV0L2Nhbi9pc290cC5jPTE5ODQ9c3RhdGljIF9fcG9sbF90IGlzb3RwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHBvbGxfdGFibGUgKndhaXQpXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtMTk5OC1cXG5uZXQvY2FuL2lzb3RwLmM6MTk5OTpzdGF0aWMgaW50IGlzb3RwX3NvY2tfbm9faW9jdGxjbWQoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG5uZXQvY2FuL2lzb3RwLmMtMjAwMC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYXJnKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzowMy43NjcxMjA2ODhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjM4NjAzNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJU08tVFAgQVBJIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBJU08tVFAgcGF0Y2gsIGFuZCBpbW1lZGlhdGVseSB0aGUga2V5IGVudHJ5IHBvaW50cyBqdW1wIG91dCBhdCBtZS4gVGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBoaW5nZXMgb24gdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnM6IGBpc290cF9zZW5kbXNnYCwgYGlzb3RwX3JlY3Ztc2dgLCBgaXNvdHBfYmluZGAsIGBpc290cF9yZWxlYXNlYCwgYGlzb3RwX3NldHNvY2tvcHRgLCBgaXNvdHBfZ2V0c29ja29wdGAsIGBpc290cF9wb2xsYCwgYW5kIGBpc290cF9yY3ZgLiBPZiB0aGVzZSwgYGlzb3RwX3JjdmAgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGFzIGl0IGlzIHRoZSBjcml0aWNhbCBjYWxsYmFjayBmcm9tIHRoZSBDQU4gY29yZSB3aGVuIGEgZnJhbWUgaXMgcmVjZWl2ZWQuXG5cblRoZSBhdXRob3IgaGFzIGNsZWFybHkgYmVlbiBidXN5LCBhcyB0aGUgcGF0Y2ggdG91Y2hlcyBhIGdvb2QgY2h1bmsgb2YgdGhlIGNvcmUgSVNPLVRQIGltcGxlbWVudGF0aW9uOyB0aGUgbGlzdCBpcyBjb21wcmVoZW5zaXZlLiBUaGF0J3MgYSBnb29kIHNpZ24gdGhhdCB0aGV5J3ZlIGJlZW4gcmlnb3JvdXMuXG5cbkdpdmVuIHRoZSBzY29wZSBvZiBtb2RpZmljYXRpb25zLCBJIG5lZWQgdG8gbmFycm93IG15IGZvY3VzIHRvIHRoZSBtb3N0IGNyaXRpY2FsIHN5bWJvbHMgdG8gdHJ1bHkgZ3Jhc3AgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSBgaXNvdHBfc2VuZG1zZ2AsIGBpc290cF9iaW5kYCwgYGlzb3RwX3JjdmAsIGBpc290cF9yZWxlYXNlYCBhbmQgYGlzb3RwX3BvbGxgIGFyZSB3aGVyZSBJIG5lZWQgdG8gY29uY2VudHJhdGUgbXkgZWZmb3J0cy4gVGhvc2UgYXJlIHRoZSBvbmVzIHRoZSBwYXRjaCBpcyBjaGFuZ2luZyB0aGUgbW9zdCBzaWduaWZpY2FudGx5LlxuXG5CZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmb3IgYENBTl9JU09UUGAuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGludm9sdmVkLiBJIG5lZWQgdG8ga25vdyB3aGVyZSB0aGUgYmFzZSBpcywgYW5kIHdoYXQgY2FuIGJlIGNoYW5nZWQuIEdvdHRhIGtub3cgdGhlIGxheSBvZiB0aGUgbGFuZCBiZWZvcmUgSSBnbyBzdG9ybWluZyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTM6MTAuMDA1NzI3NTE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzE4NTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX0lTT1RQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxubmV0L2Nhbi9LY29uZmlnLTU4LVxcbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXFxubmV0L2Nhbi9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoxMC4xNjI5MTg3NjJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA1ODIwNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIENBTl9JU09UUCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgQ0FOX0lTT1RQLiBUaGlzIGlzbid0IGp1c3QgYSBzdXJmYWNlLWxldmVsIGNoZWNrOyBpdCBuZWVkcyBhIGNvbXByZWhlbnNpdmUgcmV2aWV3LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycyBpbnZvbHZlZCDigJMgd2hhdCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnMgYXJlIGluIHBsYXk/IFdoYXQgb3RoZXIgY29tbXVuaWNhdGlvbiBzdGFja3MgYXJlIGludGVncmF0ZWQgb3IgY291bGQgYmUgaW50ZWdyYXRlZD8gSSB3YW50IHRvIGtub3cgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBzaWxpY29uIHZlbmRvcnMgdGhpcyBpcyB0aWVkIHRvLCBhbmQgaWYgdGhlcmUgYXJlLCB3aHkuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGxpYnJhcnksIG9yIGlzIHRoaXMgYSBtb3JlIGNvbXBsZXggZnJhbWV3b3JrPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIHdpdGggdGhlIHVuZGVybHlpbmcgQ0FOIGNvbnRyb2xsZXIgYW5kIGFueSBhc3NvY2lhdGVkIGRyaXZlcnMuIEFsc28sIGNvbnNpZGVyaW5nIGFsbCB0aGUgdGhpbmdzIHRoYXQgdG91Y2ggQ0FOX0lTT1RQLCBJIG5lZWQgdG8ga25vdyBhYm91dCBhbnkgZXh0ZXJuYWwgZmFjdG9ycy4gSXMgdGhpcyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgcHJvamVjdCBvciBpcyB0aGlzIGludGVuZGVkIHRvIGJlIGEgcmV1c2FibGUgY29tcG9uZW50PyBJIHdhbnQgdG8gZGV0ZXJtaW5lIHRoZSBsZXZlbCBvZiBjb3VwbGluZyBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgcG9ydGFiaWxpdHkgYW5kIG1haW50YWluYWJpbGl0eS4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIGF0dGVudGlvbiwgSSB3aWxsIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFuZCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIGFuZCBmbGV4aWJpbGl0eS4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGxpc3RpbmcgZGVwZW5kZW5jaWVzOyBpdCdzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgb24gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZSBhbmQgcG90ZW50aWFsIGZvciBmdXR1cmUgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2OTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoxMy41Njg3NDExMTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1Mjg3NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENBTl9JU09UUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL0tjb25maWc9NTc9c291cmNlIFxcXCJuZXQvY2FuL2oxOTM5L0tjb25maWdcXFwiXFxubmV0L2Nhbi9LY29uZmlnLTU4LVxcbm5ldC9jYW4vS2NvbmZpZzo1OTpjb25maWcgQ0FOX0lTT1RQXFxubmV0L2Nhbi9LY29uZmlnLTYwLVxcdHRyaXN0YXRlIFxcXCJJU08gMTU3NjUtMiBDQU4gdHJhbnNwb3J0IHByb3RvY29sXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoxMy42NjIyNzU1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODE0MDE1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIENBTiBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIENBTiBzdWJzeXN0ZW0ncyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGBuZXQvY2FuL0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXIgaXMgcHJvYmFibHkgYXJvdW5kIGxpbmUgNTkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgQ0FOIGxheWVyIGFyZSBkZWZpbmVkLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTAwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTM6MTYuMjQzNjkzOTQ1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY2FuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNTA6XFx0XFx0ICBUaGUgQ0FOIEdhdGV3YXkvUm91dGVyIGlzIHVzZWQgdG8gcm91dGUgKGFuZCBtb2RpZnkpIENBTiBmcmFtZXMuXFxuICA1MTpcXHRcXHQgIEl0IGlzIGJhc2VkIG9uIHRoZSBQRl9DQU4gY29yZSBpbmZyYXN0cnVjdHVyZSBmb3IgbXNnIGZpbHRlcmluZyBhbmRcXG4gIDUyOlxcdFxcdCAgbXNnIHNlbmRpbmcgYW5kIGNhbiBvcHRpb25hbGx5IG1vZGlmeSByb3V0ZWQgQ0FOIGZyYW1lcyBvbiB0aGUgZmx5LlxcbiAgNTM6XFx0XFx0ICBDQU4gZnJhbWVzIGNhbiBiZSByb3V0ZWQgYmV0d2VlbiBDQU4gbmV0d29yayBpbnRlcmZhY2VzIChvbmUgaG9wKS5cXG4gIDU0OlxcdFxcdCAgVGhleSBjYW4gYmUgbW9kaWZpZWQgd2l0aCBBTkQvT1IvWE9SL1NFVCBvcGVyYXRpb25zIGFzIGNvbmZpZ3VyZWRcXG4gIDU1OlxcdFxcdCAgYnkgdGhlIG5ldGxpbmsgY29uZmlndXJhdGlvbiBpbnRlcmZhY2Uga25vd24gZS5nLiBmcm9tIGlwdGFibGVzLlxcbiAgNTY6XFx0XFxuICA1NzpcXHRzb3VyY2UgXFxcIm5ldC9jYW4vajE5MzkvS2NvbmZpZ1xcXCJcXG4gIDU4OlxcdFxcbiAgNTk6XFx0Y29uZmlnIENBTl9JU09UUFxcbiAgNjA6XFx0XFx0dHJpc3RhdGUgXFxcIklTTyAxNTc2NS0yIENBTiB0cmFuc3BvcnQgcHJvdG9jb2xcXFwiXFxuICA2MTpcXHRcXHRoZWxwXFxuICA2MjpcXHRcXHQgIENBTiBUcmFuc3BvcnQgUHJvdG9jb2xzIG9mZmVyIHN1cHBvcnQgZm9yIHNlZ21lbnRlZCBQb2ludC10by1Qb2ludFxcbiAgNjM6XFx0XFx0ICBjb21tdW5pY2F0aW9uIGJldHdlZW4gQ0FOIG5vZGVzIHZpYSB0d28gZGVmaW5lZCBDQU4gSWRlbnRpZmllcnMuXFxuICA2NDpcXHRcXHQgIFRoaXMgcHJvdG9jb2wgZHJpdmVyIGltcGxlbWVudHMgc2VnbWVudGVkIGRhdGEgdHJhbnNmZXJzIGZvciBDQU4gQ0NcXG4gIDY1OlxcdFxcdCAgKGFrYSBDbGFzc2ljYWwgQ0FOLCBDQU4gMi4wQikgYW5kIENBTiBGRCBmcmFtZSB0eXBlcyB3aGljaCB3ZXJlXFxuICA2NjpcXHRcXHQgIGludHJvZHVjZWQgd2l0aCBJU08gMTU3NjUtMjoyMDE2LlxcbiAgNjc6XFx0XFx0ICBBcyBDQU4gZnJhbWVzIGNhbiBvbmx5IHRyYW5zcG9ydCBhIHNtYWxsIGFtb3VudCBvZiBkYXRhIGJ5dGVzXFxuICA2ODpcXHRcXHQgIChtYXguIDggYnl0ZXMgZm9yIENBTiBDQyBhbmQgbWF4LiA2NCBieXRlcyBmb3IgQ0FOIEZEKSB0aGlzXFxuICA2OTpcXHRcXHQgIHNlZ21lbnRhdGlvbiBpcyBuZWVkZWQgdG8gdHJhbnNwb3J0IGxvbmdlciBQcm90b2NvbCBEYXRhIFVuaXRzIChQRFUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjE2LjI0MzgwNjQwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTg5NzA4OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBlbWJlZGRlZCBzeXN0ZW1zIGV4cGVydDpcblxuKipOYXZpZ2F0aW5nIENBTm9wZW4gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIENBTm9wZW4gY29uZmlndXJhdGlvbi4gXCJDQU5cXF9JU09UUFwiIGlzIHRoZSBrZXkuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGUgZGVwZW5kZW5jeS4gSXQncyBidWlsdCBvbiB0b3Agb2YgYENBTmAsIHNvIHRoYXQncyB0aGUgcGFyZW50IG1vZHVsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24gaGllcmFyY2h5LiBJJ20gZ29pbmcgdG8gbmVlZCB0byB0cmFjayBkb3duIHRoZSBgbWVudWNvbmZpZyBDQU5gIGVudHJ5LiBSaWdodCwgbGV0J3MgaGVhZCBvdmVyIHRvIGBuZXQvY2FuL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCB0aGUgb3ZlcmFsbCBDQU4gY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdG8gYmUgY2VydGFpbiBvZiB0aGUgZGVwZW5kZW5jaWVzIGFuZCBwcm9wZXIgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoxOS40MzM1MjE0ODJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDA3ODM3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIENBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnLTUtXFxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cXG5uZXQvY2FuL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQ0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTM6MTkuNTY3NjA0Nzg4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzE2NzUzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBlbmFibGUgQ0FOIGZ1bmN0aW9uYWxpdHksIGFuZCBpdCBsb29rcyBsaWtlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYENBTmAgYW5kIGBDQU5fSVNPVFBgLiBNeSBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoYXQgYENBTmAgaXMgbGlrZWx5IGEgZm91bmRhdGlvbmFsIHN1YnN5c3RlbSwgYSBicm9hZGVyIGVuYWJsaW5nIGVsZW1lbnQsIHdoaWxlIGBDQU5fSVNPVFBgIGlzIHRoZSBzcGVjaWZpYyBmZWF0dXJlIEkgcmVxdWlyZS4gQmVmb3JlIEkgZ28gYWhlYWQgYW5kIGFzc3VtZSB0aGF0J3MgdGhlIGZ1bGwgcGljdHVyZSwgaG93ZXZlciwgSSBzaG91bGQgZGVmaW5pdGVseSB2ZXJpZnkgd2hldGhlciB0aGVyZSBhcmUgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzLiBJdCdzIGFsd2F5cyBiZXN0IHRvIGJlIHRob3JvdWdoIGFuZCBhdm9pZCBzdXJwcmlzZXMgZG93biB0aGUgbGluZSwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgYXMgZm91bmRhdGlvbmFsIGFzIENBTi4gVGltZSB0byBkZWx2ZSBhIGJpdCBkZWVwZXIgYW5kIHNlZSB3aGF0IG90aGVyIGVsZW1lbnRzIG1pZ2h0IGJlIHRpZWQgaW50byB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjkzNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjIyLjQzOTI4MzkwNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY2FuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgQ29udHJvbGxlciBBcmVhIE5ldHdvcmsgKENBTikgbmV0d29yayBsYXllciBjb3JlIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0bWVudWNvbmZpZyBDQU5cXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJDQU4gYnVzIHN1YnN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIChDQU4pIGlzIGEgc2xvdyAodXAgdG8gMU1iaXQvcykgc2VyaWFsXFxuICAxMTpcXHRcXHQgIGNvbW11bmljYXRpb25zIHByb3RvY29sLiBEZXZlbG9wbWVudCBvZiB0aGUgQ0FOIGJ1cyBzdGFydGVkIGluXFxuICAxMjpcXHRcXHQgIDE5ODMgYXQgUm9iZXJ0IEJvc2NoIEdtYkgsIGFuZCB0aGUgcHJvdG9jb2wgd2FzIG9mZmljaWFsbHlcXG4gIDEzOlxcdFxcdCAgcmVsZWFzZWQgaW4gMTk4Ni4gVGhlIENBTiBidXMgd2FzIG9yaWdpbmFsbHkgbWFpbmx5IGZvciBhdXRvbW90aXZlLFxcbiAgMTQ6XFx0XFx0ICBidXQgaXMgbm93IHdpZGVseSB1c2VkIGluIG1hcmluZSAoTk1FQTIwMDApLCBpbmR1c3RyaWFsLCBhbmQgbWVkaWNhbFxcbiAgMTU6XFx0XFx0ICBhcHBsaWNhdGlvbnMuIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIENBTiBuZXR3b3JrIHByb3RvY29sIGZhbWlseVxcbiAgMTY6XFx0XFx0ICBQRl9DQU4gaXMgY29udGFpbmVkIGluIFxcdTAwM2NEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FuLnJzdFxcdTAwM2UuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgSWYgeW91IHdhbnQgQ0FOIHN1cHBvcnQgeW91IHNob3VsZCBzYXkgWSBoZXJlIGFuZCBhbHNvIHRvIHRoZVxcbiAgMTk6XFx0XFx0ICBzcGVjaWZpYyBkcml2ZXIgZm9yIHlvdXIgY29udHJvbGxlcihzKSB1bmRlciB0aGUgTmV0d29yayBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgc3VwcG9ydCBzZWN0aW9uLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoyMi40MzkzNzE3MzRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0MjUwNTY3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ0FOIEludGVyZmFjZSBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgc28gdG8gcmVhbGx5IHByb3Blcmx5IHRlc3QgdGhpcywgd2UncmUgZ29pbmcgdG8gbmVlZCBhIENBTiBpbnRlcmZhY2UuIFNvbWV0aGluZyBsaWtlIGEgYENBTl9WQ0FOYCAoVmlydHVhbCBDQU4pIHdpbGwgZG8gdGhlIHRyaWNrIG5pY2VseS4gSXQncyB0aGUgc2ltcGxlc3Qgd2F5IHRvIGdldCB1cCBhbmQgcnVubmluZyB3aXRob3V0IGFueSBwaHlzaWNhbCBoYXJkd2FyZS4gTm93LCBJIGtub3cgdGhlIGtlcm5lbCBoYXMgdmlydHVhbCBDQU4gaW50ZXJmYWNlczsgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQncyBlbmFibGVkIGFuZCBhY2Nlc3NpYmxlLiBMZXQncyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvIHNlZSBpZiBgQ0FOX1ZDQU5gIGlzIGV2ZW4gYW4gb3B0aW9uLiBJJ2xsIGNoZWNrIGBkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ2Ag4oCTIHRoYXQncyB0aGUgdXN1YWwgc3BvdCBmb3IgQ0FOIGRyaXZlciBzZXR0aW5ncy4gU2hvdWxkbid0IHRha2UgbG9uZyB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ2NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTM6MjUuNTgxODgwNjgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzcxMTMxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX1ZDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvY2FuL0tjb25maWc9MjM9aWYgQ0FOX0RFVlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI0LVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjI1OmNvbmZpZyBDQU5fVkNBTlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI2LVxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIExvY2FsIENBTiBJbnRlcmZhY2UgKHZjYW4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoyNS42Nzk1OTgxMloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjc3NzE1NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBtZW50YWwgcHJvY2VzczpcblxuKipBc3Nlc3NpbmcgQ0FOIEJ1cyBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gYENBTl9WQ0FOYCwgdGhhdCdzIGRlZmluaXRlbHkgYSB1c2VmdWwgZmxhZyB0byBoYXZlIGNvbmZpZ3VyZWQuIEdvb2QsIGdvb2QuIE5vdywgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UgaGF2ZW4ndCBvdmVybG9va2VkIGFueXRoaW5nIGZ1bmRhbWVudGFsIGluIHRoZSBkZXZpY2Ugc2V0dXAuIFRpbWUgdG8gcXVpY2tseSB0YWtlIGEgbG9vayBhdCBgQ0FOX0RFVmAuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHBoeXNpY2FsIENBTiBkZXZpY2UgaXMgY29ycmVjdGx5IGlkZW50aWZpZWQgYW5kIGluaXRpYWxpemVkLiBObyBwb2ludCBwcm9jZWVkaW5nIGlmIHRoZSBoYXJkd2FyZSBpc24ndCBwcm9wZXJseSB3aXJlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3ODgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoyOC4zNTczMTc1ODJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjg1MjM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX0RFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0yLVxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjM6bWVudWNvbmZpZyBDQU5fREVWXFxuZHJpdmVycy9uZXQvY2FuL0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiQ0FOIERldmljZSBEcml2ZXJzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzoyOC40NjAxNzY4NTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0OTc1MjM5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgQ0FOIElTT1RQIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY29uZmlndXJhdGlvbnMgaW4gcGxheSBoZXJlIGFyZSBgQ0FOYCwgYENBTl9JU09UUGAsIGBDQU5fREVWYCwgYW5kIGBDQU5fVkNBTmAuIExldCdzIGp1c3QgcXVpY2tseSBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBzb2xpZCBncmFzcCBvbiB3aGF0IGVhY2ggb25lIGRvZXMgYW5kIGhvdyB0aGV5IGludGVyYWN0LiBHb3R0YSBiZSBtZXRpY3Vsb3VzIGhlcmUuXG5cbk5vdywgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBpc290cC5jYC4gVGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBJU08tVFAgaW1wbGVtZW50YXRpb24sIHNvIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZSBrZXkgZW50cnkgcG9pbnRzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiBhcmUgYGlzb3RwX3NlbmRtc2dgLCBgaXNvdHBfYmluZGAsIGBpc290cF9yZWxlYXNlYCwgYGlzb3RwX3BvbGxgLCBhbmQgYGlzb3RwX3JjdmAuIFRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIEkgbmVlZCB0byBzY3J1dGluaXplIG1vc3QgY2xvc2VseS5cblxuSW50ZXJlc3RpbmcuLi4gYGlzb3RwX3JjdmAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGJ1dCBpdCdzIHVzZWQgYXMgYSBjYWxsYmFjay4gTmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGF0IHBhdHRlcm4uIEFuZCBub3cgSSBzaG91bGQgZG91YmxlIGNoZWNrLCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgbm9uLXN0YXRpYz8gSSBkb24ndCB3YW50IHRvIG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBjaGFuZ2UgYmVoYXZpb3Igb3V0c2lkZSB0aGUgbW9kdWxlLiBHb3R0YSBpZGVudGlmeSBhbnkgZnVuY3Rpb24gd2l0aCBleHRlcm5hbCBsaW5rYWdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAyNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzozMi40MDk5MzM3NzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5OTQwODc4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGlzb3RwX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL2lzb3RwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjMyLjQ4OTg4MTYxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMxMDYyNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lKipcblxuQWxyaWdodCwgbGV0J3MgemVybyBpbiBvbiB0aGF0IGBtb2R1bGVfaW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIG1vZHVsZSBnZXRzIG9mZiB0aGUgZ3JvdW5kLiBXaGF0J3MgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cyBoZXJlPyBXaGF0IHJlc291cmNlcyBhcmUgYmVpbmcgYWxsb2NhdGVkPyBBcmUgdGhlcmUgYW55IHN1YnRsZSBkZXBlbmRlbmNpZXMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgcG90ZW50aWFsbHkgdHJvdWJsZXNvbWUgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBtYW5hZ2VtZW50IHBpdGZhbGxzIHRoYXQgY291bGQgYmUgbHVya2luZyBpbiB0aGUgZWFybHkgc3RhZ2VzLiBHb3R0YSBlbnN1cmUgdGhlIGZvdW5kYXRpb24gaXMgc29saWQgYmVmb3JlIHdlIGV2ZW4gdGhpbmsgYWJvdXQgdG91Y2hpbmcgdGhlIFwid29ya2luZ1wiIHBhcnRzLiBUaGlzIGlzIGNyaXRpY2FsIGZvciBzdGFibGUgYW5kIHByZWRpY3RhYmxlIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUsIGFuZCBhIGxvdCBvZiBpc3N1ZXMgb2Z0ZW4gc3VyZmFjZSBoZXJlIGZpcnN0LiBMZXQncyBzZWUgd2hhdCB3ZSdyZSBsb29raW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQ0MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjM1LjYyMDk0OTYzMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzk1OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vaXNvdHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY2FuL2lzb3RwLmM9MjA0MD1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNhbmlzb3RwX25vdGlmaWVyID0ge1xcbi0tXFxubmV0L2Nhbi9pc290cC5jLTIwNDMtXFxubmV0L2Nhbi9pc290cC5jOjIwNDQ6c3RhdGljIF9faW5pdCBpbnQgaXNvdHBfbW9kdWxlX2luaXQodm9pZClcXG5uZXQvY2FuL2lzb3RwLmMtMjA0NS17XFxuLS1cXG5uZXQvY2FuL2lzb3RwLmM9MjA2Mj1zdGF0aWMgX19leGl0IHZvaWQgaXNvdHBfbW9kdWxlX2V4aXQodm9pZClcXG4tLVxcbm5ldC9jYW4vaXNvdHAuYy0yMDY3LVxcbm5ldC9jYW4vaXNvdHAuYzoyMDY4Om1vZHVsZV9pbml0KGlzb3RwX21vZHVsZV9pbml0KTtcXG5uZXQvY2FuL2lzb3RwLmMtMjA2OS1tb2R1bGVfZXhpdChpc290cF9tb2R1bGVfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjM1Ljc0Mzc1MTY1N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjEzOTkzOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgUHJvdG9jb2wgU3RydWN0dXJlKipcblxuT2theSwgd2hlcmUgc2hvdWxkIEkgc3RhcnQ/IEdpdmVuIHRoZSBjb250ZXh0LCB0aGUgbW9zdCBsb2dpY2FsIGZpcnN0IHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyB0aGF0IGdvdmVybiB0aGUgSVNPLVRQIGltcGxlbWVudGF0aW9uLiBJJ20gdGhpbmtpbmcsIGxldCdzIGNoZWNrIHRoZSBgaXNvdHBfb3BzYCBzdHJ1Y3QgZmlyc3QsIHNpbmNlIHRoYXQgd2lsbCBsaWtlbHkgY29udGFpbiB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgYW5kIGNhbGxiYWNrcyB0aGF0IGRlZmluZSBob3cgdGhlIHByb3RvY29sIGFjdHVhbGx5ICp3b3JrcyouIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBsb3ctbGV2ZWwgdHJhbnNwb3J0IG1lY2hhbmlzbXMuIEFsdGVybmF0aXZlbHksIHRoZSBgcHJvdG9gIHN0cnVjdCBtaWdodCBiZSB0aGUgcGxhY2UuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtb3JlIGFic3RyYWN0IHByb3RvY29sIHBhcmFtZXRlcnMgYXJlIGhlbGQuIERlcGVuZGluZyBvbiB0aGUgZGVzaWduLCBlaXRoZXIgY291bGQgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjdXJyZW50IHN0YXRlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBob2xkcyB0aGUgbWFzdGVyIGRlZmluaXRpb25zLiBMZXQncyBzZWUgd2hpY2ggc3RydWN0dXJlIHNlZW1zIHRvIGJlIHRoZSBjZW50cmFsIHBvaW50LiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBib3RoIGFuZCBkZXRlcm1pbmUgd2hpY2ggb25lIGhvbGRzIHRoZSByZWxldmFudCBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg0MywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjM4Ljk1Nzc1MDIzM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgxNTU5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHByb3RvX29wcyBpc290cF9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9pc290cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vaXNvdHAuYz0xOTk5PXN0YXRpYyBpbnQgaXNvdHBfc29ja19ub19pb2N0bGNtZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxubmV0L2Nhbi9pc290cC5jLTIwMDUtXFxubmV0L2Nhbi9pc290cC5jOjIwMDY6c3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaXNvdHBfb3BzID0ge1xcbm5ldC9jYW4vaXNvdHAuYy0yMDA3LVxcdC5mYW1pbHkgPSBQRl9DQU4sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjM5LjA1NTkxMjUyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjMwMDEyNzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGlzb3RwX29wc2AgU3RydWN0dXJlKipcblxuUmlnaHQsIGxldCdzIGdldCBpbnRvIGl0LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgdGhpcyBgaXNvdHBfb3BzYCBzdHJ1Y3R1cmUuIEl0J3MgdGhlIGNvcmUgb2YgaG93IHRoaXMgSVNPLVRQIGltcGxlbWVudGF0aW9uIGlzIHdvcmtpbmcsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IGluc2lkZSBhbmQgb3V0LiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24sIHRoZSBmdW5jdGlvbiBwb2ludGVycywgdGhlIGNvbnRleHQgaXQncyB1c2VkIGluLCB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJucywgZXZlcnl0aGluZy4gSXQncyBhbGwgYWJvdXQgZGlzc2VjdGluZyB0aGUgaW50ZXJmYWNlIGFuZCBzZWVpbmcgaG93IGRpZmZlcmVudCBsYXllcnMgYW5kIGNvbXBvbmVudHMgaW50ZXJhY3QuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvcGVyYXRpb25zIGl0IHByb3ZpZGVzLCB0aGUgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3MsIHBhcnRpY3VsYXJseSBlcnJvciBoYW5kbGluZyBhbmQgZnJhbWUgdHJhbnNtaXNzaW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJ1ZmZlciBtYW5hZ2VtZW50LCBmbG93IGNvbnRyb2wsIGFuZCBhbnkgc3BlY2lmaWMgcXVpcmtzIG9yIG9wdGltaXphdGlvbnMgdGhhdCBzdGFuZCBvdXQuIEknbSBmb2N1c2luZyBvbiB0aGUgbG9naWMsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIG92ZXJhbGwgZGVzaWduIGNob2ljZXMuIEdvdHRhIGdldCBhIGdvb2QgZ3JpcCBvbiB0aGUgd2hvbGUgb3BlcmF0aW9uYWwgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyMDAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzo0Mi4yODU5Mjc1NTZaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzIyODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jYW4vaXNvdHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDAwOlxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBhcmcpXFxuMjAwMTpcXHR7XFxuMjAwMjpcXHRcXHQvKiBubyBpb2N0bHMgZm9yIHNvY2tldCBsYXllciAtXFx1MDAzZSBoYW5kIGl0IGRvd24gdG8gTklDIGxheWVyICovXFxuMjAwMzpcXHRcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbjIwMDQ6XFx0fVxcbjIwMDU6XFx0XFxuMjAwNjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpc290cF9vcHMgPSB7XFxuMjAwNzpcXHRcXHQuZmFtaWx5ID0gUEZfQ0FOLFxcbjIwMDg6XFx0XFx0LnJlbGVhc2UgPSBpc290cF9yZWxlYXNlLFxcbjIwMDk6XFx0XFx0LmJpbmQgPSBpc290cF9iaW5kLFxcbjIwMTA6XFx0XFx0LmNvbm5lY3QgPSBzb2NrX25vX2Nvbm5lY3QsXFxuMjAxMTpcXHRcXHQuc29ja2V0cGFpciA9IHNvY2tfbm9fc29ja2V0cGFpcixcXG4yMDEyOlxcdFxcdC5hY2NlcHQgPSBzb2NrX25vX2FjY2VwdCxcXG4yMDEzOlxcdFxcdC5nZXRuYW1lID0gaXNvdHBfZ2V0bmFtZSxcXG4yMDE0OlxcdFxcdC5wb2xsID0gaXNvdHBfcG9sbCxcXG4yMDE1OlxcdFxcdC5pb2N0bCA9IGlzb3RwX3NvY2tfbm9faW9jdGxjbWQsXFxuMjAxNjpcXHRcXHQuZ2V0dHN0YW1wID0gc29ja19nZXR0c3RhbXAsXFxuMjAxNzpcXHRcXHQubGlzdGVuID0gc29ja19ub19saXN0ZW4sXFxuMjAxODpcXHRcXHQuc2h1dGRvd24gPSBzb2NrX25vX3NodXRkb3duLFxcbjIwMTk6XFx0XFx0LnNldHNvY2tvcHQgPSBpc290cF9zZXRzb2Nrb3B0LFxcbjIwMjA6XFx0XFx0LmdldHNvY2tvcHQgPSBpc290cF9nZXRzb2Nrb3B0LFxcbjIwMjE6XFx0XFx0LnNlbmRtc2cgPSBpc290cF9zZW5kbXNnLFxcbjIwMjI6XFx0XFx0LnJlY3Ztc2cgPSBpc290cF9yZWN2bXNnLFxcbjIwMjM6XFx0XFx0Lm1tYXAgPSBzb2NrX25vX21tYXAsXFxuMjAyNDpcXHR9O1xcbjIwMjU6XFx0XFxuMjAyNjpcXHRzdGF0aWMgc3RydWN0IHByb3RvIGlzb3RwX3Byb3RvIF9fcmVhZF9tb3N0bHkgPSB7XFxuMjAyNzpcXHRcXHQubmFtZSA9IFxcXCJDQU5fSVNPVFBcXFwiLFxcbjIwMjg6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMjAyOTpcXHRcXHQub2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IGlzb3RwX3NvY2spLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxMzo0Mi4yODYyNTMzOTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMxMTkyNDQwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNjb3BlIG9mIFRoaXMgSVNPLVRQIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IGZvY3VzIG5hcnJvd3MgdG8gdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiB0b3VjaGVkLiBUaGUgdGV4dCBnaXZlcyBhIGNvbmNpc2UgbGlzdCBvZiB0aGUgKmF2YWlsYWJsZSogSVNPLVRQIGZ1bmN0aW9uczogYGlzb3RwX3JlbGVhc2VgLCBgaXNvdHBfYmluZGAsIGBpc290cF9nZXRuYW1lYCwgYGlzb3RwX3BvbGxgLCBgaXNvdHBfc2V0c29ja29wdGAsIGBpc290cF9nZXRzb2Nrb3B0YCwgYGlzb3RwX3NlbmRtc2dgLCBhbmQgYGlzb3RwX3JlY3Ztc2dgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLCB0aGUgQVBJIHN1cmZhY2UuXG5cbkJ1dCB0aGUgKm1vZGlmaWVkKiBmdW5jdGlvbnMgYXJlIHdoYXQncyBpbnRlcmVzdGluZyBoZXJlLiBUaGUgcGF0Y2ggaGFzIHR3ZWFrZWQgYGlzb3RwX3NlbmRtc2dgLCBgaXNvdHBfcmVsZWFzZWAsIGBpc290cF9iaW5kYCwgYW5kIGBpc290cF9wb2xsYC4gVGhhdCdzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24g4oCTIHRob3NlIGFyZSBkZWZpbml0ZWx5IGtleSBhcmVhcyB0byBzY3J1dGluaXplLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIHRob3NlLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIGxpc3Qgb2YgdGhlIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IGdvdCBhdHRlbnRpb246IGBpc290cF9yY3ZgLCBgaXNvdHBfdHhfdGltZW91dGAsIGBpc290cF90eGZyX3RpbWVyX2hhbmRsZXJgLCBgaXNvdHBfcmN2X2VjaG9gLCBgaXNvdHBfcmN2X2ZjYCwgYGlzb3RwX3Jjdl9zZmAsIGBpc290cF9yY3ZfZmZgLCBhbmQgYGlzb3RwX3Jjdl9jZmAuIEhtbSwgc29tZSBvZiB0aGVzZSwgbGlrZSBgaXNvdHBfcmN2YCwgYXJlIHN0YXRpYy4gVGhlIGludGVybmFsIG9uZXMgYXJlIHVzdWFsbHkgbGVzcyBpbXBvcnRhbnQgZnJvbSBhbiBBUEkgcGVyc3BlY3RpdmUsIGJ1dCBzaW5jZSB0aGV5J3JlICptb2RpZmllZCosIHRoZXkncmUgc2lnbmlmaWNhbnQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBwcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIG92ZXIgdGhlIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMsIGFzIHRoYXQgd291bGQgYmUgYSBoaWdoZXIgbGV2ZWwgdmlldyBvZiB0aGUgY2hhbmdlcy5cblxuT2theSwgc28gbG9va2luZyBhdCB0aGUgbGlzdCBhZ2FpbiwgYGlzb3RwX3JjdmAgaXMgaW5kZWVkIHN0YXRpYy4gQnV0Li4uIHdhaXQsIGl0J3MgYSBjYWxsYmFjaywgYSBjcml0aWNhbCBlbnRyeSBwb2ludCBmb3IgaW5jb21pbmcgQ0FOIGZyYW1lcy4gSXQgKmlzKiB0aGUgY29yZSBvZiB0aGUgcmVjZWl2ZSBwYXRoLiBFdmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyByZWdpc3RlcmVkIGFzIGEgY3JpdGljYWwgY2FsbGJhY2suIEkgc2hvdWxkIG5vdGUgdGhhdCBpdCBpcyB0aGUgbWFpbiByZWNlaXZlciBlbnRyeSBwb2ludC4gU28gbWF5YmUgSSBzaG91bGQganVzdCBrZWVwIGEgY2xvc2UgZXllIG9uIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRoZSBgcHJvdG9fb3BzYCB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoYXQgZnVuY3Rpb24gaXMgaW5saW5lZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk0MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjQ4LjU5ODE4MzYzM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2NjE4NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIHZvaWQgaXNvdHBfcmN2XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9pc290cC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vaXNvdHAuYz02NDQ9c3RhdGljIGludCBpc290cF9yY3ZfY2Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgY2FuZmRfZnJhbWUgKmNmLCBpbnQgYWUsXFxuLS1cXG5uZXQvY2FuL2lzb3RwLmMtNzQzLVxcbm5ldC9jYW4vaXNvdHAuYzo3NDQ6c3RhdGljIHZvaWQgaXNvdHBfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmRhdGEpXFxubmV0L2Nhbi9pc290cC5jLTc0NS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjQ4LjY5Mzg1MjRaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYwNDc0ODc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ0FOIElTT1RQIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBpc24ndCBhbiBpbmxpbmVkIGNoYW5nZTsgdGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGBpc290cF9yY3ZgIGFuZCBgaXNvdHBfcmN2X2VjaG9gIGFyZSBiZWluZyBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMgdG8gYGNhbl9yeF9yZWdpc3RlcmAuIFRoaXMgaXMgdGhlIGNvcmUgb2YgaG93IHRoZSBSWCBwYXRoIGlzIGJlaW5nIHNldCB1cC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5NeSBtZW50YWwgbGlzdCBvZiB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGlzOiBgaXNvdHBfc2VuZG1zZ2AsIGBpc290cF9iaW5kYCwgYGlzb3RwX3JlbGVhc2VgLCBgaXNvdHBfcG9sbGAsIGBpc290cF9yY3ZgLCBhbmQgYGlzb3RwX3Jjdl9lY2hvYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIEFQSSB0aGlzIHBhdGNoIGludGVyYWN0cyB3aXRoLlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgSSdsbCBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgaW50ZXJhY3Rpb25zIG9jY3VyIHdpdGggYENBTmAsIGBDQU5fSVNPVFBgLCBgQ0FOX0RFVmAsIGFuZCBgQ0FOX1ZDQU5gLlxuXG5UaGUgY29yZSBvZiB0aGlzIHBhdGNoLCBhcyBJIHVuZGVyc3RhbmQgaXQsIGlzIGZpeGluZyBjb25jdXJyZW5jeSBwcm9ibGVtcyB3aXRoaW4gdGhlIENBTiBJU09UUCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCB0aGVyZSBhcmUgc3RhdGUtaGFuZGxpbmcgaXNzdWVzIHdpdGggVFgvUlggYW5kIGhvdyB0cmFuc2ZlcnMgYXJlIHRyYWNrZWQuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIGB0eF9yZXN1bHRgIGFycmF5IGFuZCB0aGUgdXNlIG9mIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCBhcmUga2V5IGluZGljYXRvcnMgb2YgdGhpcy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSB2ZXJ5IGhlYXJ0IG9mIHRoZSBJU09UUCBwcm90b2NvbC5cblxuR2l2ZW4gdGhpcywgSSBoYXZlIHRvIGFzc3VtZSB0aGUgd29yc3Q6IHRoZXJlJ3MgYSBzdHJvbmcgcG9zc2liaWxpdHkgdGhhdCBuZXcgcmFjZSBjb25kaXRpb25zIG9yIGxvZ2ljIGVycm9ycyBoYXZlIGJlZW4gaW50cm9kdWNlZC4gVGhlIHBhdGNoICptdXN0KiBiZSBmdXp6ZWQgdGhvcm91Z2hseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBjaGFuZ2VzIGhhdmVuJ3QgZGVzdGFiaWxpemVkIHRoZSBjb3JlIHByb3RvY29sIGluIGFueSB3YXkuIEkgd2lsbCBhbHNvIGRvdWJsZS1jaGVjayB3aGV0aGVyIGBDQU5fSVNPVFBgIGhhcyBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIG5vdyBicm9rZW4gb3IgcmVxdWlyZSBmdXJ0aGVyIGFuYWx5c2lzIGdpdmVuIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTI2LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjU0LjI5ODYwNDMxN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwOTEzNDIyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jYW4vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTM6NTQuNTc5NTI3MDU5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NzYzODI2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgRGVwZW5kZW5jeSBDb25mdXNpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyBqdXN0IHJldmlld2luZyB0aGUgYG5ldC9jYW4vS2NvbmZpZ2AgZmlsZSBhbmQgc29tZXRoaW5nIHNlZW1zLi4ub2ZmLiBJdCdzIG9kZCwgSSB3YXMgc3VyZSBJIGhhZCBzZWVuIGBkZXBlbmRzIG9uYCBjbGF1c2VzIGluIHRoaXMgdHlwZSBvZiBLY29uZmlnIGJlZm9yZS4gTG9va2luZyBhdCBpdCBhZ2FpbiwgSSdtIG5vdCBzZWVpbmcgdGhlbSBoZXJlIGZvciB0aGVzZSBzcGVjaWZpYyBDQU4gb3B0aW9ucy4gVGhpcyBpcyBpbW1lZGlhdGVseSBtYWtpbmcgbWUgcXVlc3Rpb24gaG93IHRoZSBvcHRpb25zIGFyZSBiZWluZyBnYXRlZC4gQXJlIHRoZXJlIGltcGxpY2l0IGRlcGVuZGVuY2llcyBiYWtlZCBpbiBzb21ld2hlcmUgZWxzZT8gQW0gSSBtaXNzaW5nIHNvbWV0aGluZyBnbGFyaW5nbHkgb2J2aW91cz8gT3IgaXMgdGhpcyBhIGRlbGliZXJhdGUgYXJjaGl0ZWN0dXJhbCBjaG9pY2UgaW4gdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSwgcG9zc2libHkgcmVseWluZyBvbiBicm9hZGVyLCBsZXNzIGdyYW51bGFyIGRlcGVuZGVuY2llcyBkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGUgS2NvbmZpZyB0cmVlPyBUaGlzIGRldmlhdGVzIGZyb20gd2hhdCBJIHdhcyBleHBlY3RpbmcgYW5kIHdhcnJhbnRzIGEgZGVlcGVyIGRpdmUgdG8gZmlndXJlIG91dCB0aGUgaW50ZW5kZWQgYnVpbGQgYmVoYXZpb3IuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlzY3JlcGFuY3kgaW1tZWRpYXRlbHkgdG8gYXZvaWQgYXNzdW1wdGlvbnMgYWJvdXQgaG93IHRoZXNlIGNvbmZpZ3VyYXRpb25zIHdpbGwgYWN0dWFsbHkgZnVuY3Rpb24gYXQgY29tcGlsZS10aW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRldGVybWluZSBpZiB0aGUgbG9naWMgSSBhbSBzZWVpbmcgaXMgaW50ZW50aW9uYWwgYW5kIGhvdyBpdCB0aWVzIGludG8gdGhlIHdob2xlIHBpY3R1cmUgb2YgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTU5NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjU3LjU1NTkxMzUyMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5ODI2MjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9qMTkzOS9LY29uZmlnPTY9Y29uZmlnIENBTl9KMTkzOVxcbm5ldC9jYW4vajE5MzkvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJTQUUgSjE5MzlcXFwiXFxubmV0L2Nhbi9qMTkzOS9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBDQU5cXG5uZXQvY2FuL2oxOTM5L0tjb25maWctOS1cXHRoZWxwXFxuLS1cXG5uZXQvY2FuL2oxOTM5L3NvY2tldC5jPTM5Nj1zdGF0aWMgaW50IGoxOTM5X3NrX2luaXQoc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy00MTktXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYzo0MjA6XFx0LyogajE5Mzlfc2tfc29ja19kZXN0cnVjdCgpIGRlcGVuZHMgb24gU09DS19SQ1VfRlJFRSBmbGFnICovXFxubmV0L2Nhbi9qMTkzOS9zb2NrZXQuYy00MjEtXFx0c29ja19zZXRfZmxhZyhzaywgU09DS19SQ1VfRlJFRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjEzOjU3Ljg3NTc0NzU1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTgyNTI2NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqVW5kZXJzdGFuZGluZyB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBDQU5fSVNPVFBgIG9wdGlvbiBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBpdCdzIG5vdCBleHBsaWNpdGx5IHN0YXRpbmcgaXRzIGRlcGVuZGVuY2llcyB1c2luZyBgZGVwZW5kcyBvbmAuIFRoYXQncyBhIGJpdCB1bnVzdWFsLiBBaCwgYnV0IGl0J3MgbmVzdGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgQ0FOYCBzZWN0aW9uLiBTbywgSSBuZWVkIHRvIGludGVycHJldCB0aGF0IGFzIGFuICppbXBsaWNpdCogZGVwZW5kZW5jeSBvbiBgQ0FOYC4gTWFrZXMgc2Vuc2UuIElmIHlvdSB3YW50IElTT1RQLCB5b3UgY2xlYXJseSBuZWVkIHRoZSBDQU4gaW50ZXJmYWNlIGluIHRoZSBmaXJzdCBwbGFjZS4gVGhlcmVmb3JlLCB0byBiZSBjZXJ0YWluLCBJIGhhZCBiZXR0ZXIgdmVyaWZ5IHRoZSBjb25maWd1cmF0aW9uIG9mIGBDQU5gIGl0c2VsZi4gTGV0J3Mgc2VlIHdoYXQncyB3aGF0IHdpdGggYENBTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTA1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDc6MTQ6MDAuODU4Mjc3MzM2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5MTQ5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBDQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2Nhbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jYW4vS2NvbmZpZy01LVxcbm5ldC9jYW4vS2NvbmZpZzo2Om1lbnVjb25maWcgQ0FOXFxubmV0L2Nhbi9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIkNBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDA3OjE0OjAwLjk3OTIzMjA1MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ4MDM1OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgQ0FOIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgZm9jdXNlZCBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYENBTmAgYW5kIGBORVRgLiBDbGVhcmx5LCBgQ0FOYCBpcyBwYXJ0IG9mIHRoZSBuZXR3b3JraW5nIGluZnJhc3RydWN0dXJlIOKAkyBpdCdzIHJpZ2h0IHRoZXJlIGluIHRoZSBgbmV0L2AgZGlyZWN0b3J5LiBTbywgdGhlIGRlcGVuZGVuY2UgaXMgcHJldHR5IG9idmlvdXMuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIGZyb20gbXkgZXhwZXJpZW5jZSwgYENBTmAsIGBDQU5fSVNPVFBgLCBhbmQgYENBTl9WQ0FOYCBhcmUgdGhlIGtleSBvbmVzIHRvIGNvbmNlbnRyYXRlIG9uIGhlcmUuIE5vdywgdGltZSB0byB1dGlsaXplIGBzZXQtcmVzdWx0c2AgdG8gaW1wbGVtZW50IHRob3NlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM3MywiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwNzoxNDowNS41MjcyNzEyNTJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU2NjQ2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0lTT1RQXCIsXG4gICAgXCJDQU5fREVWXCIsXG4gICAgXCJDQU5fVkNBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlzb3RwX3NlbmRtc2dcIixcbiAgICBcImlzb3RwX2JpbmRcIixcbiAgICBcImlzb3RwX3JlbGVhc2VcIixcbiAgICBcImlzb3RwX3BvbGxcIixcbiAgICBcImlzb3RwX3JjdlwiLFxuICAgIFwiaXNvdHBfcmN2X2VjaG9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQ0FOIElTT1RQIHByb3RvY29sIGltcGxlbWVudGF0aW9uIHRvIGZpeCBjb25jdXJyZW5jeSBpc3N1ZXMgaW4gVFgvUlggc3RhdGUgaGFuZGxpbmcgYW5kIHRyYW5zZmVyIGdlbmVyYXRpb24gdHJhY2tpbmcuIEl0IGludHJvZHVjZXMgYSBuZXcgdHhfcmVzdWx0IGFycmF5IGFuZCB1c2VzIFJFQURfT05DRS9XUklURV9PTkNFIGZvciBzdGF0ZSB0cmFuc2l0aW9ucy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBJU09UUCBwcm90b2NvbCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbmV3IHJhY2UgY29uZGl0aW9ucyBvciBsb2dpYyBidWdzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9JU09UUFwiLFxuICAgIFwiQ0FOX0RFVlwiLFxuICAgIFwiQ0FOX1ZDQU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpc290cF9zZW5kbXNnXCIsXG4gICAgXCJpc290cF9iaW5kXCIsXG4gICAgXCJpc290cF9yZWxlYXNlXCIsXG4gICAgXCJpc290cF9wb2xsXCIsXG4gICAgXCJpc290cF9yY3ZcIixcbiAgICBcImlzb3RwX3Jjdl9lY2hvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIENBTiBJU09UUCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbiB0byBmaXggY29uY3VycmVuY3kgaXNzdWVzIGluIFRYL1JYIHN0YXRlIGhhbmRsaW5nIGFuZCB0cmFuc2ZlciBnZW5lcmF0aW9uIHRyYWNraW5nLiBJdCBpbnRyb2R1Y2VzIGEgbmV3IHR4X3Jlc3VsdCBhcnJheSBhbmQgdXNlcyBSRUFEX09OQ0UvV1JJVEVfT05DRSBmb3Igc3RhdGUgdHJhbnNpdGlvbnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSBsb2dpYyBvZiB0aGUgSVNPVFAgcHJvdG9jb2wgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG5ldyByYWNlIGNvbmRpdGlvbnMgb3IgbG9naWMgYnVncyB3ZXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowt6d4h[1] Phase: Succeeded StartedAt: 2026-07-26 07:14:17 +0000 UTC FinishedAt: 2026-07-26 07:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 07:14:17 +0000 UTC FinishedAt: 2026-07-26 07:14:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2] Phase: Succeeded StartedAt: 2026-07-26 07:14:17 +0000 UTC FinishedAt: 2026-07-26 12:00:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:14:17 +0000 UTC FinishedAt: 2026-07-26 12:00:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:14:17 +0000 UTC FinishedAt: 2026-07-26 07:14:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:14:17 +0000 UTC FinishedAt: 2026-07-26 07:14:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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-workflowt6d4h/series-workflowt6d4h-convert-artifact-720026312/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:14:27 +0000 UTC FinishedAt: 2026-07-26 07:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:14:27 +0000 UTC FinishedAt: 2026-07-26 07:43:24 +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:*17e7e479-d47f-4b64-b791-fd7717b6ac98,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-workflowt6d4h/series-workflowt6d4h-convert-artifact-720026312/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": "1bf166b4-9965-44e9-92e5-fd342d84b992", "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-workflowt6d4h/series-workflowt6d4h-build-action-2143856446/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:14:27 +0000 UTC FinishedAt: 2026-07-26 07:43:14 +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:*17e7e479-d47f-4b64-b791-fd7717b6ac98,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-workflowt6d4h/series-workflowt6d4h-convert-artifact-720026312/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": "1bf166b4-9965-44e9-92e5-fd342d84b992", "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-workflowt6d4h/series-workflowt6d4h-build-action-2143856446/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:43:24 +0000 UTC FinishedAt: 2026-07-26 07:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:43:24 +0000 UTC FinishedAt: 2026-07-26 07:43:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:43:24 +0000 UTC FinishedAt: 2026-07-26 07:43:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:43:24 +0000 UTC FinishedAt: 2026-07-26 07:43:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-workflowt6d4h/series-workflowt6d4h-convert-artifact-3751271855/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:43:34 +0000 UTC FinishedAt: 2026-07-26 07:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:43:34 +0000 UTC FinishedAt: 2026-07-26 07:45:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1bf166b4-9965-44e9-92e5-fd342d84b992,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-workflowt6d4h/series-workflowt6d4h-build-action-2143856446/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-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:45:49 +0000 UTC FinishedAt: 2026-07-26 07:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:45:49 +0000 UTC FinishedAt: 2026-07-26 07:45:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:45:49 +0000 UTC FinishedAt: 2026-07-26 08:51:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:45:49 +0000 UTC FinishedAt: 2026-07-26 08:51:20 +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:*17e7e479-d47f-4b64-b791-fd7717b6ac98,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-workflowt6d4h/series-workflowt6d4h-convert-artifact-3751271855/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": "e6ceb65b-73ca-4af1-8581-98cc5abeec10", "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-workflowt6d4h/series-workflowt6d4h-build-action-4188514627/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 07:45:49 +0000 UTC FinishedAt: 2026-07-26 08:51:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*17e7e479-d47f-4b64-b791-fd7717b6ac98,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-workflowt6d4h/series-workflowt6d4h-convert-artifact-3751271855/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": "e6ceb65b-73ca-4af1-8581-98cc5abeec10", "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-workflowt6d4h/series-workflowt6d4h-build-action-4188514627/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:51:20 +0000 UTC FinishedAt: 2026-07-26 08:51:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:51:20 +0000 UTC FinishedAt: 2026-07-26 08:51:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:51:20 +0000 UTC FinishedAt: 2026-07-26 08:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:51:20 +0000 UTC FinishedAt: 2026-07-26 08:53:20 +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:*e6ceb65b-73ca-4af1-8581-98cc5abeec10,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-workflowt6d4h/series-workflowt6d4h-build-action-4188514627/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-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:53:30 +0000 UTC FinishedAt: 2026-07-26 12:00:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:53:30 +0000 UTC FinishedAt: 2026-07-26 12:00:18 +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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"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:*1bf166b4-9965-44e9-92e5-fd342d84b992,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6ceb65b-73ca-4af1-8581-98cc5abeec10,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-workflowt6d4h/series-workflowt6d4h-build-action-2143856446/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-workflowt6d4h/series-workflowt6d4h-build-action-4188514627/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:53:30 +0000 UTC FinishedAt: 2026-07-26 08:53:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:53:30 +0000 UTC FinishedAt: 2026-07-26 08:53:36 +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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"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-workflowt6d4h/series-workflowt6d4h-convert-artifact-2293905000/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:53:30 +0000 UTC FinishedAt: 2026-07-26 08:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:53:30 +0000 UTC FinishedAt: 2026-07-26 08:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:53:30 +0000 UTC FinishedAt: 2026-07-26 08:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:53:40 +0000 UTC FinishedAt: 2026-07-26 12:00:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt6d4h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"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":["isotp_sendmsg","isotp_bind","isotp_release","isotp_poll","isotp_rcv","isotp_rcv_echo"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_ISOTP","CAN_DEV","CAN_VCAN"],"series_id":"6c2c9f79-d14c-4e6c-bc94-862a7a894eab","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-07-26 08:53:40 +0000 UTC FinishedAt: 2026-07-26 12:00:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1bf166b4-9965-44e9-92e5-fd342d84b992,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6ceb65b-73ca-4af1-8581-98cc5abeec10,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-workflowt6d4h/series-workflowt6d4h-build-action-2143856446/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-workflowt6d4h/series-workflowt6d4h-build-action-4188514627/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-workflowt6d4h/series-workflowt6d4h-convert-artifact-2293905000/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,}