Name: series-workflowfv7nn Phase: Running StartedAt: 2026-08-03 15:09:20 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv7nn[0] Phase: Succeeded StartedAt: 2026-08-03 15:09:20 +0000 UTC FinishedAt: 2026-08-03 15:29:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv7nn[0].run-triage Phase: Succeeded StartedAt: 2026-08-03 15:09:20 +0000 UTC FinishedAt: 2026-08-03 15:29:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "6c5fc504d0d6934132637aa3db4b9b58148eaa78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "6c5fc504d0d6934132637aa3db4b9b58148eaa78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "e51900cc-ef8a-48e6-8976-5edabd4ad6e1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_tx_mgmt", "ieee80211_mgmt_tx", "ieee80211_rx_list", "ieee80211_rx_napi" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE1OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ210X3R4JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9saXN0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9uYXBpJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBob3cgcmVjZWl2ZWQgZnJhbWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbnMgYW5kIGxpbmtzIChNdWx0aS1MaW5rIE9wZXJhdGlvbikuIEl0IGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBjb3JlIFJYIGZ1bmN0aW9ucyAoYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCkgYW5kIG1vZGlmaWVzIHRoZSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBwYXRoIHRvIGhhbmRsZSBhIG5ldyBgbm9fc3RhYCBmbGFnLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE1OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODdmNGM5NDNjOWI1MmM3ZTk2NmU1NzAzMzkyYjk4MjdiODdjZWE2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTU6Mjc6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jXG5pbmRleCAzMzQyNTcwN2MwODQyLi5mYmIzZDE4ZjU1ZGRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcbkBAIC0yNTAwLDcgJiM0MzsyNTAwLDcgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBcbiBcdCAgICAhKGlzX21jYmMgXHUwMDI2XHUwMDI2IHJ4X3N0YXR1cy1cdTAwM2VmbGFnIFx1MDAyNiBSWF9GTEFHX0RFQ1JZUFRFRCkpXG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfODAyMztcbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKGFyLVx1MDAzZWh3LCBwdWJzdGEsIG1zZHUsIG5hcGkpO1xuJiM0MztcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVx1MDAzZWh3LCBwdWJzdGEgPyBcdTAwMjZwdWJzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIG1zZHUsIG5hcGkpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhdGgxMWtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXG5pbmRleCA3ZDViZTc3YjA4MWY4Li4xZmFmMTg5NmQwYWIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xuQEAgLTUwMyw4ICYjNDM7NTAzLDYgQEAgdm9pZCBhdGgxMmtfZHBfbW9uX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZSAqaGUgPSBOVUxMO1xuIFxuLVx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAwO1xuLVxuIFx0aWYgKChzdGF0dXMtXHUwMDNlZW5jb2RpbmcgPT0gUlhfRU5DX0hFKSBcdTAwMjZcdTAwMjYgIShzdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR19SQURJT1RBUF9IRSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShzdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR19TS0lQX01PTklUT1IpKSB7XG4gXHRcdGhlID0gc2tiX3B1c2gobXNkdSwgc2l6ZW9mKGtub3duKSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG5pbmRleCA4ZmEwZTkwYjQ1MzE2Li44NDdhZDI4ZmQzMGIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbkBAIC0xMzc1LDYgJiM0MzsxMzc1LDcgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcdHN0cnVjdCBhdGgxMmtfZHAgKmRwID0gZHBfcGRldi1cdTAwM2VkcDtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhID0gTlVMTDtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcjtcbiBcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gcnhfaW5mby1cdTAwM2VyeF9zdGF0dXM7XG5AQCAtMTM4NCw5ICYjNDM7MTM4NSwxOSBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y1xuIFxuIFx0cHVic3RhID0gcGVlciA/IHBlZXItXHUwMDNlc3RhIDogTlVMTDtcbiBcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMDtcbi1cdGlmIChwdWJzdGEgXHUwMDI2XHUwMDI2IHB1YnN0YS1cdTAwM2V2YWxpZF9saW5rcylcbi1cdFx0YXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGRwLVx1MDAzZWh3X3BhcmFtcywgcGVlciwgcnhjYiwgc3RhdHVzKTtcbiYjNDM7XHRpZiAocHVic3RhKSB7XG4mIzQzO1x0XHRpZiAocHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4mIzQzO1x0XHRcdHU4IGxpbmtfaWQgPVxuJiM0MztcdFx0XHRcdGF0aDEya19od19nZXRfcnhfbGlua19pZChkcC1cdTAwM2Vod19wYXJhbXMsIHBlZXIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IHJ4Y2IsIHN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGlua19pZCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0XHRsaW5rX3B1YnN0YSA9XG4mIzQzO1x0XHRcdFx0XHRyY3VfZGVyZWZlcmVuY2UocHVic3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bGlua19wdWJzdGEgPSBcdTAwMjZwdWJzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRhdGgxMmtfZGJnKGRwLVx1MDAzZWFiLCBBVEgxMktfREJHX0RBVEEsXG4gXHRcdCAgIFwmIzM0O3J4IHNrYiAlcCBsZW4gJXUgcGVlciAlcE0gJWQgJXMgc24gJXUgJXMlcyVzJXMlcyVzJXMlcyVzJXMgcmF0ZV9pZHggJXUgdmh0X25zcyAldSBmcmVxICV1IGJhbmQgJXUgZmxhZyAweCV4IGZjcy1lcnIgJWkgbWljLWVyciAlaSBhbXNkdS1tb3JlICVpXFxuXCYjMzQ7LFxuQEAgLTE0MjIsNyAmIzQzOzE0MzMsOCBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y1xuIFxuIFx0LyogVE9ETzogdHJhY2UgcnggcGFja2V0ICovXG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgcHVic3RhLCBtc2R1LCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsXG4mIzQzO1x0XHRcdCAgbmFwaSk7XG4gfVxuIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXG5pbmRleCA0OWNmZDVkZmM3MGE2Li4yNjhmMGE4ZmQ0NmRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmhcbkBAIC0yNDgsOSAmIzQzOzI0OCw5IEBAIHN0cnVjdCBhdGgxMmtfaHdfb3BzIHtcbiBcdGJvb2wgKCpkcF9zcm5nX2lzX3R4X2NvbXBfcmluZykoaW50IHJpbmdfbnVtKTtcbiBcdGJvb2wgKCppc19mcmFtZV9saW5rX2Fnbm9zdGljKShzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQpO1xuLVx0dm9pZCAoKnNldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xuJiM0MztcdGludCAoKmdldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xuIH07XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTI4MSwxMyAmIzQzOzI4MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfbWFjX2lkX3RvX3NybmdfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGgxMmtfaHdfc2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGF0aDEya19od19nZXRfcnhfbGlua19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cylcbiB7XG4tXHRpZiAoaHctXHUwMDNlaHdfb3BzLVx1MDAzZXNldF9yeF9saW5rX2lkKVxuLVx0XHRody1cdTAwM2Vod19vcHMtXHUwMDNlc2V0X3J4X2xpbmtfaWQoZHBfcGVlciwgcnhjYiwgc3RhdHVzKTtcbiYjNDM7XHRpZiAoaHctXHUwMDNlaHdfb3BzLVx1MDAzZWdldF9yeF9saW5rX2lkKVxuJiM0MztcdFx0cmV0dXJuIGh3LVx1MDAzZWh3X29wcy1cdTAwM2VnZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLTE7XG4gfVxuIFxuIHN0cnVjdCBhdGgxMmtfZndfaWUge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuaW5kZXggOTVkODdkZDY3ODcyZi4uOGI3MjJlZTBhZDhmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXG5AQCAtMjMxNywxNyAmIzQzOzIzMTcsMTYgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRyZXR1cm4gdGx2X3RhZyA9PSBIQUxfUlhfTVBEVV9TVEFSVDtcbiB9XG4gXG4tdm9pZFxuLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiYjNDM7aW50XG4mIzQzO2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuLVx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAxO1xuLVx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBkcF9wZWVyLVx1MDAzZWh3X2xpbmtzW3J4Y2ItXHUwMDNlaHdfbGlua19pZF07XG4mIzQzO1x0cmV0dXJuIGRwX3BlZXItXHUwMDNlaHdfbGlua3NbcnhjYi1cdTAwM2Vod19saW5rX2lkXTtcbiB9XG4gXG4tdm9pZFxuLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiYjNDM7aW50XG4mIzQzO2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuQEAgLTIzNDEsMTAgJiM0MzsyMzQwLDkgQEAgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuIFx0bGlua3NfbWFwID0gUkVBRF9PTkNFKGRwX3BlZXItXHUwMDNlbGlua19wZWVyc19tYXApO1xuIFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZsaW5rc19tYXAsIEFUSDEyS19OVU1fTUFYX0xJTktTKSB7XG4gXHRcdGxpbmtfcGVlciA9IHJjdV9kZXJlZmVyZW5jZShkcF9wZWVyLVx1MDAzZWxpbmtfcGVlcnNbaV0pO1xuLVx0XHRpZiAobGlua19wZWVyIFx1MDAyNlx1MDAyNiBsaW5rX3BlZXItXHUwMDNlcGVlcl9pZCA9PSByeGNiLVx1MDAzZXBlZXJfaWQpIHtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX3BlZXItXHUwMDNlbGlua19pZDtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbiYjNDM7XHRcdGlmIChsaW5rX3BlZXIgXHUwMDI2XHUwMDI2IGxpbmtfcGVlci1cdTAwM2VwZWVyX2lkID09IHJ4Y2ItXHUwMDNlcGVlcl9pZClcbiYjNDM7XHRcdFx0cmV0dXJuIGxpbmtfcGVlci1cdTAwM2VsaW5rX2lkO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLTE7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaFxuaW5kZXggMWQzYTQ3ODhhMmRkOS4uZDY4NDg5ZmY3YjAzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXG5AQCAtNTcsMTAgJiM0Mzs1NywxMCBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYixcbiBcdFx0XHRcdCAgc3RydWN0IGhhbF9yeF9kZXNjICpyeF9kZXNjKTtcbiBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3RpZF9kZWxldGVfaGFuZGxlcihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBhdGgxMmtfZHBfcnhfdGlkX3J4cSAqcnhfdGlkKTtcbi12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbi12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiYjNDM7aW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiYjNDM7aW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbmluZGV4IDRjMTExOWVkY2FlZGMuLjNjZDM1MTQ2NDI5NmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuY1xuQEAgLTE1OCw3ICYjNDM7MTU4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjbjkyNzRfb3BzID0ge1xuIFx0LmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3FjbjkyNzQsXG4gXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3JpbmdfcWNuOTI3NCxcbiBcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfcWNuOTI3NCxcbi1cdC5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0LFxuJiM0MztcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0LFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0ge1xuQEAgLTE2OSw3ICYjNDM7MTY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0ge1xuIFx0LmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3djbjc4NTAsXG4gXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCxcbiBcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCxcbi1cdC5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwLFxuJiM0MztcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0ge1xuQEAgLTE4MCw3ICYjNDM7MTgwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0ge1xuIFx0LmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3djbjc4NTAsXG4gXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCxcbiBcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCxcbi1cdC5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwLFxuJiM0MztcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxuIH07XG4gXG4gI2RlZmluZSBBVEgxMktfVFhfUklOR19NQVNLXzAgMHgxXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcbmluZGV4IDJiNzA3ZmZjMWEyMGYuLjVkNjJjNGM4NjFiYjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5AQCAtNzI2MCw3ICYjNDM7NzI2MCw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgYXRoMTJrX3dtaV9tZ210X3J4X2FyZyByeF9ldiA9IHt9O1xuIFx0c3RydWN0IGF0aDEyayAqYXI7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhID0gTlVMTDtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbiBcdGJvb2wgaXNfNGFkZHJfbnVsbF9wa3Q7XG5AQCAtNzM2MiwxMSAmIzQzOzczNjEsNiBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXHRcdH1cbi1cdFx0cHVic3RhID0gcGVlci1cdTAwM2VzdGE7XG4tXHRcdGlmIChwdWJzdGEgXHUwMDI2XHUwMDI2IHB1YnN0YS1cdTAwM2V2YWxpZF9saW5rcykge1xuLVx0XHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMTtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IHBlZXItXHUwMDNlbGlua19pZDtcbi1cdFx0fVxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiBcdFx0Z290byBzZW5kX3J4O1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcbmluZGV4IDk2MTAyZDJhZjJjZjkuLmM0NWM0NzMzNzUwOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcbkBAIC03LDcgJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcJiMzNDtoY21kLmhcJiMzNDtcbiBcbiBzdGF0aWMgdm9pZFxuLWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0Mztpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBpd2xfbWxkX2JhaWRfZGF0YSAqYmFpZF9kYXRhLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgaXdsX21sZF9yZW9yZGVyX2J1ZmZlciAqcmVvcmRlcl9idWYsXG5AQCAtMzIsNyAmIzQzOzMzLDcgQEAgaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShza2JfbGlzdCkpKSB7XG4gXHRcdFx0aXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYixcbiBcdFx0XHRcdFx0XHRcdHJlb3JkZXJfYnVmLVx1MDAzZXF1ZXVlLFxuLVx0XHRcdFx0XHRcdFx0c3RhKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHRsaW5rX3N0YSk7XG4gXHRcdFx0cmVvcmRlcl9idWYtXHUwMDNlbnVtX3N0b3JlZC0tO1xuIFx0XHR9XG4gXHR9XG5AQCAtNzQsNyAmIzQzOzc1LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF9yZWxlYXNlX2ZyYW1lc19mcm9tX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXG4gXHRyZW9yZGVyX2J1ZiA9IFx1MDAyNmJhX2RhdGEtXHUwMDNlcmVvcmRlcl9idWZbcXVldWVdO1xuIFxuLVx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtXHUwMDNlc3RhLCBuYXBpLCBiYV9kYXRhLFxuJiM0MztcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYV9kYXRhLFxuIFx0XHRcdFx0ICAgICAgIHJlb3JkZXJfYnVmLCBuc3NuKTtcbiBvdXRfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5AQCAtMTgwLDcgJiM0MzsxODEsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcbiBcdHJlb3JkZXJfYnVmID0gXHUwMDI2YmFfZGF0YS1cdTAwM2VyZW9yZGVyX2J1ZltxdWV1ZV07XG4gXG4gXHQvKiByZWxlYXNlIGFsbCBmcmFtZXMgdGhhdCBhcmUgaW4gdGhlIHJlb3JkZXIgYnVmZmVyIHRvIHRoZSBzdGFjayAqL1xuLVx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtXHUwMDNlc3RhLCBOVUxMLFxuJiM0MztcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBOVUxMLFxuIFx0XHRcdFx0ICAgICAgIGJhX2RhdGEsIHJlb3JkZXJfYnVmLFxuIFx0XHRcdFx0ICAgICAgIGllZWU4MDIxMV9zbl9hZGQocmVvcmRlcl9idWYtXHUwMDNlaGVhZF9zbixcbiBcdFx0XHRcdFx0XHRcdGJhX2RhdGEtXHUwMDNlYnVmX3NpemUpKTtcbkBAIC0xOTMsNyAmIzQzOzE5NCw3IEBAIHZvaWQgaXdsX21sZF9kZWxfYmEoc3RydWN0IGl3bF9tbGQgKm1sZCwgaW50IHF1ZXVlLFxuICAqL1xuIGVudW0gaXdsX21sZF9yZW9yZGVyX3Jlc3VsdFxuIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tXHRcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiYjNDM7XHRcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG5AQCAtMjI4LDEyICYjNDM7MjI5LDEyIEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xuIFxuIFx0Lyogbm8gc3RhIHlldCAqL1xuLVx0aWYgKElXTF9GV19DSEVDSyhtbGQsICFzdGEsXG4mIzQzO1x0aWYgKElXTF9GV19DSEVDSyhtbGQsICFsaW5rX3N0YSxcbiBcdFx0XHQgXCYjMzQ7R290IHZhbGlkIEJBSUQgd2l0aG91dCBhIHZhbGlkIHN0YXRpb24gYXNzaWduZWQgLSAlZFxcblwmIzM0OyxcbiBcdFx0XHQgYmFpZCkpXG4gXHRcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbiYjNDM7XHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cdTAwM2VzdGEpO1xuIFxuIFx0Lyogbm90IGEgZGF0YSBwYWNrZXQgKi9cbiBcdGlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSB8fFxuQEAgLTMyNCw3ICYjNDM7MzI1LDcgQEAgaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdCAqIHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGUgZnJhbWUgcmVsZWFzZSBub3RpZmljYXRpb24gYXJyaXZlcy5cbiBcdCAqL1xuIFx0aWYgKCFhbXNkdSB8fCBsYXN0X3N1YmZyYW1lKVxuLVx0XHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBzdGEsIG5hcGksIGJhaWRfZGF0YSxcbiYjNDM7XHRcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYWlkX2RhdGEsXG4gXHRcdFx0XHRcdCAgICAgICBidWZmZXIsIG5zc24pO1xuIFx0ZWxzZSBpZiAoYnVmZmVyLVx1MDAzZW51bV9zdG9yZWQgPT0gMSlcbiBcdFx0YnVmZmVyLVx1MDAzZWhlYWRfc24gPSBuc3NuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcbmluZGV4IDY1MWM4MGQxYzdjZGEuLmM2Y2Q1ZmEyMTliZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcbkBAIC0xLDYgJiM0MzsxLDYgQEBcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UgKi9cbiAvKlxuLSAqIENvcHlyaWdodCAoQykgMjAyNCBJbnRlbCBDb3Jwb3JhdGlvblxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQsIDIwMjYgSW50ZWwgQ29ycG9yYXRpb25cbiAgKi9cbiAjaWZuZGVmIF9faXdsX2FnZ19oX19cbiAjZGVmaW5lIF9faXdsX2FnZ19oX19cbkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIGludCBpd2xfbWxkX2FtcGR1X3J4X3N0b3Aoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcbiBlbnVtIGl3bF9tbGRfcmVvcmRlcl9yZXN1bHRcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLVx0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4mIzQzO1x0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYyk7XG4gXG4gdm9pZCBpd2xfbWxkX2hhbmRsZV9mcmFtZV9yZWxlYXNlX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmNcbmluZGV4IDI2OTQzOWQ3ODlmNDYuLjAyYmRmNmNjYmNkYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXG5AQCAtNDcsNyAmIzQzOzQ3LDggQEAgaXdsX21sZF9maWxsX3BoeV9kYXRhX2Zyb21fbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICBpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpXG4mIzQzO1x0XHRcdFx0ICAgaW50IHF1ZXVlLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbkBAIC03MSwxMyAmIzQzOzcyLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBpZiB3ZSBhcmUgaGVyZSAtIHRoaXMgZm9yIHN1cmUgaXMgZWl0aGVyIENDTVAgb3IgR0NNUCAqL1xuLVx0aWYgKCFzdGEpIHtcbiYjNDM7XHRpZiAoIWxpbmtfc3RhKSB7XG4gXHRcdElXTF9ERUJVR19EUk9QKG1sZCxcbiBcdFx0XHQgICAgICAgXCYjMzQ7ZXhwZWN0ZWQgaHctZGVjcnlwdGVkIHVuaWNhc3QgZnJhbWUgZm9yIHN0YXRpb25cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xuJiM0MztcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVx1MDAzZXN0YSk7XG4gXG4gXHRleHRpdiA9ICh1OCAqKWhkciAmIzQzOyBpZWVlODAyMTFfaGRybGVuKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbiBcdGtleWlkeCA9IGV4dGl2WzNdIFx1MDAzZVx1MDAzZSA2O1xuQEAgLTExOSwxNyAmIzQzOzEyMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXG4ge1xuIFx0S1VOSVRfU1RBVElDX1NUVUJfUkVESVJFQ1QoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSxcbi1cdFx0XHRcdCAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTtcbiYjNDM7XHRcdFx0XHQgICBtbGQsIG5hcGksIHNrYiwgcXVldWUsIGxpbmtfc3RhKTtcbiBcbi1cdGlmICh1bmxpa2VseShpd2xfbWxkX2NoZWNrX3BuKG1sZCwgc2tiLCBxdWV1ZSwgc3RhKSkpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIGxpbmtfc3RhKSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xuJiM0MztcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cdTAwM2VodywgbGlua19zdGEsIHNrYiwgbmFwaSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfSUZfSVdMV0lGSV9LVU5JVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKTtcbiBcbkBAIC0xNzI4LDcgJiM0MzsxNzI5LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF91cGRhdGVfbGFzdF9yeF90aW1lc3RhbXAoc3RydWN0IGl3bF9tbGQgKm1sZCwgdTggYmFpZClcbiAgKiBTZXRzICpkcm9wIHRvIHRydWUgaWYgdGhlIHBhY2tldCBzaG91bGQgYmUgZHJvcHBlZC5cbiAgKiBSZXR1cm5zIHRoZSBzdGF0aW9uIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdGEgKlxuJiM0MztzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqXG4gaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgIGNvbnN0IHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MsXG5AQCAtMTc2NCwxMSAmIzQzOzE3NjUsNiBAQCBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXG4gXHRyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcbi1cdGlmIChsaW5rX3N0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkO1xuLVx0fVxuLVxuIFx0LyogZmlsbCBjaGVja3N1bSAqL1xuIFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBwa3QtXHUwMDNlbGVuX25fZmxhZ3MgXHUwMDI2IGNwdV90b19sZTMyKEZIX1JTQ1NSX1JQQV9FTikpIHtcbkBAIC0xODAzLDEwICYjNDM7MTc5OSwxMCBAQCBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXHRcdFx0XHRcdFx0XHQgICAgcXVldWUpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHN0YTtcbiYjNDM7XHRyZXR1cm4gbGlua19zdGE7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiYjNDM7c3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLFxuIFx0XHRcdFx0dTMyIG1wZHVfc3RhdHVzLFxuQEAgLTE4MjAsNyAmIzQzOzE4MTYsNiBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXk7XG4gXHRjb25zdCB1OCAqZnJhbWUgPSAodm9pZCAqKWhkcjtcbiBcdGNvbnN0IHU4ICptbWllO1xuLVx0dTggbGlua19pZDtcbiBcbiBcdGlmICgobXBkdV9zdGF0dXMgXHUwMDI2IElXTF9SWF9NUERVX1NUQVRVU19TRUNfTUFTSykgPT1cbiBcdCAgICAgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19OT05FKVxuQEAgLTE4MzYsMTAgJiM0MzsxODMxLDEwIEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdGlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKCFzdGEpXG4mIzQzO1x0aWYgKCFsaW5rX3N0YSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbiYjNDM7XHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cdTAwM2VzdGEpO1xuIFx0bWxkX3ZpZiA9IGl3bF9tbGRfdmlmX2Zyb21fbWFjODAyMTEobWxkX3N0YS1cdTAwM2V2aWYpO1xuIFxuIFx0Lyoga2V5IG1pc21hdGNoIC0gd2lsbCBhbHNvIHJlcG9ydCAhTUlDX09LIGJ1dCB3ZSBzaG91bGRuJiMzOTt0IGNvdW50IGl0ICovXG5AQCAtMTg1Myw4ICYjNDM7MTg0OCw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRsaW5rX2lkID0gcnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPyByeF9zdGF0dXMtXHUwMDNlbGlua19pZCA6IDA7XG4tXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4mIzQzO1x0bGluayA9IHJjdV9kZXJlZmVyZW5jZShtbGRfdmlmLVx1MDAzZWxpbmtbbGlua19zdGEtXHUwMDNlbGlua19pZF0pO1xuIFx0aWYgKFdBUk5fT05fT05DRSghbGluaykpXG4gXHRcdHJldHVybiAtMTtcbiBcbkBAIC0xOTA1LDcgJiM0MzsxODk5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIH1cbiBcbiBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYywgaW50IHF1ZXVlLFxuQEAgLTE5MTUsNyAmIzQzOzE5MDksNyBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXG4gXHRpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpKVxuLVx0XHRyZXR1cm4gaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLFxuJiM0MztcdFx0cmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLFxuIFx0XHRcdFx0XHQgICAgbGUxNl90b19jcHUoZGVzYy1cdTAwM2VtcGR1X2xlbikpO1xuIFxuIFx0aWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbkBAIC0yMDIzLDcgJiM0MzsyMDE3LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0c3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IHJ4Yl9hZGRyKHJ4Yik7XG4gXHRzdHJ1Y3QgaXdsX21sZF9yeF9waHlfZGF0YSBwaHlfZGF0YSA9IHt9O1xuIFx0c3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKm1wZHVfZGVzYyA9ICh2b2lkICopcGt0LVx1MDAzZWRhdGE7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhO1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzaXplX3QgbXBkdV9kZXNjX3NpemUgPSBzaXplb2YoKm1wZHVfZGVzYyk7XG5AQCAtMjA4Niw3ICYjNDM7MjA4MCw4IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbi1cdHN0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLCBcdTAwMjZkcm9wKTtcbiYjNDM7XHRsaW5rX3N0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZkcm9wKTtcbiBcdGlmIChkcm9wKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG5AQCAtMjEyNyw3ICYjNDM7MjEyMiw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBcdGl3bF9tbGRfcnhfZmlsbF9zdGF0dXMobWxkLCBsaW5rX2lkLCBoZHIsIHNrYiwgXHUwMDI2cGh5X2RhdGEpO1xuIFxuLVx0aWYgKGl3bF9tbGRfcnhfY3J5cHRvKG1sZCwgc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSxcbiYjNDM7XHRpZiAoaXdsX21sZF9yeF9jcnlwdG8obWxkLCBsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsXG4gXHRcdFx0ICAgICAgbGUzMl90b19jcHUocGt0LVx1MDAzZWxlbl9uX2ZsYWdzKSwgXHUwMDI2Y3J5cHRvX2xlbikpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbkBAIC0yMTQwLDcgJiM0MzsyMTM1LDggQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0aWYgKGl3bF9tbGRfdGltZV9zeW5jX2ZyYW1lKG1sZCwgc2tiLCBoZHItXHUwMDNlYWRkcjIpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIHN0YSwgc2tiLCBtcGR1X2Rlc2MpO1xuJiM0MztcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIGxpbmtfc3RhLCBza2IsXG4mIzQzO1x0XHRcdFx0ICAgICAgbXBkdV9kZXNjKTtcbiBcdHN3aXRjaCAocmVvcmRlcl9yZXMpIHtcbiBcdGNhc2UgSVdMX01MRF9QQVNTX1NLQjpcbiBcdFx0YnJlYWs7XG5AQCAtMjE1Myw3ICYjNDM7MjE0OSw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0Z290byBkcm9wO1xuIFx0fVxuIFxuLVx0aXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIHN0YSk7XG4mIzQzO1x0aXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIGxpbmtfc3RhKTtcbiBcbiBcdGdvdG8gb3V0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oXG5pbmRleCA1NzNiODljM2M5YzYxLi5iMDhjNWFkZTNkYjhmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuQEAgLTY5LDcgJiM0Mzs2OSw3IEBAIHZvaWQgaXdsX21sZF9oYW5kbGVfcnNjX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTtcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKTtcbiBcbiB2b2lkIGl3bF9tbGRfaGFuZGxlX3BoeV9haXJfc25pZmZlcl9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXG5pbmRleCAyOWIwMjQ4Y2VjM2RmLi5lOWVmZTI5OTZmMDcxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXG5AQCAtMiw3ICYjNDM7Miw3IEBAXG4gLypcbiAgKiBLVW5pdCB0ZXN0cyBmb3IgY2hhbm5lbCBoZWxwZXIgZnVuY3Rpb25zXG4gICpcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2t1bml0L3N0YXRpY19zdHViLmhcdTAwM2VcbkBAIC00NDEsNyAmIzQzOzQ0MSw3IEBAIHN0YXRpYyB2b2lkXG4gZmFrZV9pd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXG4ge1xuIFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZnX3JlbGVhc2VkX3NrYnMsIHNrYik7XG4gXHRnX251bV9yZWxlYXNlZF9za2JzJiM0MzsmIzQzOztcbkBAIC02MzAsNyAmIzQzOzYzMCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfcmVvcmRlcl9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0bXBkdV9kZXNjID0gc2V0dXBfbXBkdV9kZXNjKCk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTtcbiYjNDM7XHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaywgc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgIG1wZHVfZGVzYyk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZW9yZGVyX3JlcywgcGFyYW0tXHUwMDNlZXhwZWN0ZWQucmVvcmRlcl9yZXMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXG5pbmRleCBhYjFlYjJlYjBjM2NkLi44YzE5N2EwOTBjMmIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguY1xuQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcbiBcdFx0XHRcdGZyYWdsZW4sIHJ4Yi1cdTAwM2V0cnVlc2l6ZSk7XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcbmluZGV4IDdmMGI0ZjVkYWEyMTQuLjhjNDAwOWQzYTAwY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuY1xuQEAgLTEsNiAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuIC8qXG4tICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTgtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkhcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBJbnRlbCBEZXV0c2NobGFuZCBHbWJIXG4gICovXG5AQCAtMjQzLDcgJiM0MzsyNDMsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xuJiM0MztcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2Vodywgc3RhID8gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpd2xfbXZtX3VzZWRfYXZlcmFnZV9lbmVyZ3koc3RydWN0IGl3bF9tdm0gKm12bSxcbkBAIC0yNTI4LDcgJiM0MzsyNTI4LDcgQEAgdm9pZCBpd2xfbXZtX3J4X21vbml0b3Jfbm9fZGF0YShzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHR9XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcbmluZGV4IGFiYmU2NWNiY2Q4OWUuLjNkYTA2YTU1OTEzZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuY1xuQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBFWFBPUlRfU1lNQk9MKG10NzZfcnhfc2lnbmFsKTtcbiBzdGF0aWMgdm9pZFxuIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqKmh3LFxuLVx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqKnN0YSlcbiYjNDM7XHRcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKipsaW5rX3N0YSlcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gbXQ3Nl9za2JfZ2V0X2hkcihza2IpO1xuQEAgLTEzMDIsMTEgJiM0MzsxMzAyLDE1IEBAIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICAgICBzaXplb2YobXN0YXQuY2hhaW5fc2lnbmFsKSk7XG4gXG4gXHRpZiAobXN0YXQud2NpZCkge1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IG1zdGF0LndjaWQtXHUwMDNlbGlua192YWxpZDtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBtc3RhdC53Y2lkLVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gd2NpZF90b19zdGEobXN0YXQud2NpZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1zdGF0LndjaWQtXHUwMDNlbGlua192YWxpZClcbiYjNDM7XHRcdFx0Kmxpbmtfc3RhID1cbiYjNDM7XHRcdFx0XHRyY3VfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxpbmtbbXN0YXQud2NpZC1cdTAwM2VsaW5rX2lkXSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdCpsaW5rX3N0YSA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rO1xuIFx0fVxuIFxuLVx0KnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpO1xuIFx0Kmh3ID0gbXQ3Nl9waHlfaHcoZGV2LCBtc3RhdC5waHlfaWR4KTtcbiB9XG4gXG5AQCAtMTUzMCw3ICYjNDM7MTUzNCw3IEBAIG10NzZfY2hlY2tfc3RhKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFx0XHQgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4ge1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDtcbiBcdExJU1RfSEVBRChsaXN0KTtcbkBAIC0xNTQxLDggJiM0MzsxNTQ1LDggQEAgdm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsXG4gXG4gXHRcdG10NzZfY2hlY2tfY2NtcF9wbihza2IpO1xuIFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ19saXN0ID0gTlVMTDtcbi1cdFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcdTAwMjZodywgXHUwMDI2c3RhKTtcbi1cdFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIHN0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiYjNDM7XHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNmxpbmtfc3RhKTtcbiYjNDM7XHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiBcbiBcdFx0Lyogc3Vic2VxdWVudCBhbXNkdSBmcmFtZXMgKi9cbiBcdFx0d2hpbGUgKG5za2IpIHtcbkBAIC0xNTUwLDggJiM0MzsxNTU0LDggQEAgdm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsXG4gXHRcdFx0bnNrYiA9IG5za2ItXHUwMDNlbmV4dDtcbiBcdFx0XHRza2ItXHUwMDNlbmV4dCA9IE5VTEw7XG4gXG4tXHRcdFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcdTAwMjZodywgXHUwMDI2c3RhKTtcbi1cdFx0XHRpZWVlODAyMTFfcnhfbGlzdChodywgc3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuJiM0MztcdFx0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZsaW5rX3N0YSk7XG4mIzQzO1x0XHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiBcdFx0fVxuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXJ4X2xvY2spO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcbmluZGV4IDM5N2ViYmZjYWMwOWEuLjQ1NGQ4NzZhZWI4ODYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcbkBAIC0zMDczLDEwICYjNDM7MzA3Myw4IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG4gXHRzdHJ1Y3QgcnR3ODlfdmlmICpydHd2aWYgPSB2aWZfdG9fcnR3dmlmKHZpZik7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfZGVzY19pbmZvICpkZXNjX2luZm8gPSBpdGVyX2RhdGEtXHUwMDNlZGVzY19pbmZvO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGl0ZXJfZGF0YS1cdTAwM2Vza2I7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfcGh5X3BwZHUgKnBoeV9wcGR1ID0gaXRlcl9kYXRhLVx1MDAzZXBoeV9wcGR1O1xuLVx0Ym9vbCBpc19tbGQgPSBpZWVlODAyMTFfdmlmX2lzX21sZCh2aWYpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmY7XG4gXHRzdHJ1Y3QgcnR3ODlfdmlmX2xpbmsgKnJ0d3ZpZl9saW5rO1xuIFx0Y29uc3QgdTggKmJzc2lkID0gaXRlcl9kYXRhLVx1MDAzZWJzc2lkO1xuQEAgLTMxMTAsMTEgJiM0MzszMTA4LDYgQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcbiBcdGlmICghZXRoZXJfYWRkcl9lcXVhbCh0YXJnZXRfYnNzaWQsIGJzc2lkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoaXNfbWxkKSB7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBydHd2aWZfbGluay1cdTAwM2VsaW5rX2lkO1xuLVx0fVxuLVxuIFx0YmIgPSBydHc4OV9nZXRfYmJfY3R4KHJ0d2RldiwgcnR3dmlmX2xpbmstXHUwMDNlcGh5X2lkeCk7XG4gXHRwa3Rfc3RhdCA9IFx1MDAyNmJiLVx1MDAzZWN1cl9wa3Rfc3RhdDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5hMGQ1MTljZDljNGZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5AQCAtMTg4MCw5ICYjNDM7MTg4MCw2IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3J4KHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxuIFx0XHRcdFx0c3AtXHUwMDNlYWN0aXZlX2xpbmtzX3J4IFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRzcC1cdTAwM2VhY3RpdmVfbGlua3NfcnggfD0gQklUKGxpbmtfaWQpO1xuLVxuLVx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IDk3YzE2ZDRmZjEyNzEuLjQzNjQ3OGRhZjU1OTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtNDAwOSw2ICYjNDM7NDAwOSw3IEBAIHN0cnVjdCBjZmc4MDIxMV91cGRhdGVfZnRfaWVzX3BhcmFtcyB7XG4gICogQGxpbmtfaWQ6IGZvciBNTE8sIHRoZSBsaW5rIElEIHRvIHRyYW5zbWl0IG9uLCAtMSBpZiBub3QgZ2l2ZW47IG5vdGVcbiAgKlx0dGhhdCB0aGUgbGluayBJRCBpc24mIzM5O3QgdmFsaWRhdGVkIChtdWNoKSwgaXQmIzM5O3MgaW4gcmFuZ2UgYnV0IHRoZVxuICAqXHRsaW5rIG1pZ2h0IG5vdCBleGlzdCAob3IgYmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIgU1RBKVxuJiM0MzsgKiBAbm9fc3RhOiBzZXQgaWYgdGhlIGZyYW1lIHNob3VsZCBub3QgYmUgdHJhbnNtaXR0ZWQgdXNpbmcgYW4gZXhpc3RpbmcgU1RBXG4gICovXG4gc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjtcbkBAIC00MDIxLDYgJiM0Mzs0MDIyLDcgQEAgc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcbiBcdGludCBuX2NzYV9vZmZzZXRzO1xuIFx0Y29uc3QgdTE2ICpjc2Ffb2Zmc2V0cztcbiBcdGludCBsaW5rX2lkO1xuJiM0MztcdGJvb2wgbm9fc3RhO1xuIH07XG4gXG4gLyoqXG5AQCAtOTUwMSw2ICYjNDM7OTUwMyw3IEBAIHZvaWQgY2ZnODAyMTFfY29ubl9mYWlsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLFxuICAqIEBmbGFnczogZmxhZ3MsIGFzIGRlZmluZWQgaW4gXHUwMDI2ZW51bSBubDgwMjExX3J4bWdtdF9mbGFnc1xuICAqIEByeF90c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBmcmFtZSBSWCBpbiBuYW5vc2Vjb25kc1xuICAqIEBhY2tfdHN0YW1wOiBIYXJkd2FyZSB0aW1lc3RhbXAgb2YgYWNrIFRYIGluIG5hbm9zZWNvbmRzXG4mIzQzOyAqIEBub19zdGE6IHNldCBpZiBubyBzdGF0aW9uIGlzIGtub3duIGZvciB0aGUgZnJhbWUgKHJlbGV2YW50IGZvciBNTEQpXG4gICovXG4gc3RydWN0IGNmZzgwMjExX3J4X2luZm8ge1xuIFx0aW50IGZyZXE7XG5AQCAtOTUxMiw2ICYjNDM7OTUxNSw3IEBAIHN0cnVjdCBjZmc4MDIxMV9yeF9pbmZvIHtcbiBcdHUzMiBmbGFncztcbiBcdHU2NCByeF90c3RhbXA7XG4gXHR1NjQgYWNrX3RzdGFtcDtcbiYjNDM7XHRib29sIG5vX3N0YTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA5ZDFmYWM2ZTgwODI5Li43YWFlNzI4ZTk2ZDg0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTE3NzAsMTAgJiM0MzsxNzcwLDkgQEAgZW51bSBtYWM4MDIxMV9yeF9lbmNvZGluZyB7XG4gICogQGFtcGR1X3JlZmVyZW5jZTogQS1NUERVIHJlZmVyZW5jZSBudW1iZXIsIG11c3QgYmUgYSBkaWZmZXJlbnQgdmFsdWUgZm9yXG4gICpcdGVhY2ggQS1NUERVIGJ1dCB0aGUgc2FtZSBmb3IgZWFjaCBzdWJmcmFtZSB3aXRoaW4gb25lIEEtTVBEVVxuICAqIEB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU6IHJhZGlvdGFwIHR5cGUgb2YgdGhlIDAtbGVuZ3RoIFBTRFVcbi0gKiBAbGlua192YWxpZDogaWYgdGhlIGxpbmsgd2hpY2ggaXMgaWRlbnRpZmllZCBieSBAbGlua19pZCBpcyB2YWxpZC4gVGhpcyBmbGFnXG4tICpcdGlzIHNldCBvbmx5IHdoZW4gY29ubmVjdGlvbiBpcyBNTE8uXG4tICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBUaGlzIGlzIHVzZWQgYWxvbmcgd2l0aFxuLSAqXHRAbGlua192YWxpZC5cbiYjNDM7ICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBTZXQgYW5kIHVzZWQgYnlcbiYjNDM7ICpcdG1hYzgwMjExIGludGVybmFsbHksIGl0IHVzZXMgQGZyZXEgc2V0IGJ5IHRoZSBkcml2ZXIgdG8gaWRlbnRpZnkgdGhlXG4mIzQzOyAqXHRjb3JyZWN0IGxpbmsgcGVyIHZpZi5cbiAgKi9cbiBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyB7XG4gXHR1NjQgbWFjdGltZTtcbkBAIC0xODEzLDcgJiM0MzsxODEyLDcgQEAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMge1xuIFx0dTggY2hhaW5zO1xuIFx0czggY2hhaW5fc2lnbmFsW0lFRUU4MDIxMV9NQVhfQ0hBSU5TXTtcbiBcdHU4IHplcm9fbGVuZ3RoX3BzZHVfdHlwZTtcbi1cdHU4IGxpbmtfdmFsaWQ6MSwgbGlua19pZDo0O1xuJiM0MztcdHU4IGxpbmtfaWQ6NDtcbiB9O1xuIFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSBcdTAwM2M9IHNpemVvZl9maWVsZChzdHJ1Y3Qgc2tfYnVmZiwgY2IpKTtcbkBAIC01Mzg5LDE0ICYjNDM7NTM4OCwxOCBAQCB2b2lkIGllZWU4MDIxMV9yZXN0YXJ0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTtcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxuICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLlxuICAqXG4mIzQzOyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuJiM0MzsgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXG4mIzQzOyAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZCBhbmQgUkNVIHJlYWQgbG9ja1xuICAqXG4gICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uXG4tICogQHN0YTogdGhlIHN0YXRpb24gdGhlIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuJiM0MzsgKiBAbGlua19zdGE6IHRoZSBsaW5rIHN0YXRpb24gdGhlIGRhdGEgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4gICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGxcbiAgKiBAbGlzdDogdGhlIGRlc3RpbmF0aW9uIGxpc3RcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XG4gXG4gLyoqXG5AQCAtNTQxNCwxNCAmIzQzOzU0MTcsMTggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxuICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLlxuICAqXG4mIzQzOyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuJiM0MzsgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXG4mIzQzOyAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZC5cbiAgKlxuICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvblxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcbiYjNDM7ICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsXG4gICogQG5hcGk6IHRoZSBOQVBJIGNvbnRleHRcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuaW5kZXggMDIwMzg3ZDc2NDEyMi4uNDY1M2Y4ZjI2ZWU3MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbkBAIC0zMTg1LDYgJiM0MzszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XG4gICpcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXG4gICpcdHNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLlxuICAqXG4mIzQzOyAqIEBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQTogVmFsaWQgZm9yIE5MODAyMTFfQ01EX0ZSQU1FIHRvIGRlbm90ZSB0aGF0XG4mIzQzOyAqXHR0aGUga2VybmVsIGhhZCBubyBzdGF0aW9uIGZvciBhIHJlY2VpdmVkIGZyYW1lIG9yIHNob3VsZCBub3QgdXNlIGFcbiYjNDM7ICpcdGtub3duIHN0YXRpb24gdG8gdHJhbnNtaXQgYSBmcmFtZS4gVGhpcyBpcyByZWxldmFudCB0byBrbm93IHdoZXRoZXJcbiYjNDM7ICpcdE1MRCBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcHBlbmVkIG9yIHRvIGRpc2FibGUgaXQgd2hlbiBzZW5kaW5nIGEgZnJhbWUuXG4mIzQzOyAqXG4gICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZVxuICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWRcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXG5AQCAtMzc4NSw2ICYjNDM7Mzc5MCw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7XG4gXG4gXHROTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUUyxcbiBcbiYjNDM7XHROTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQSxcbiYjNDM7XG4gXHQvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi9cbiBcbiBcdF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jXG5pbmRleCA0ODMzYjQ2NzcwYjYyLi5kZDhhMTFlZjZlNTJiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FnZy10eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmNcbkBAIC05OCw3ICYjNDM7OTgsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLFxuIFx0aWYgKHN0YS1cdTAwM2VzdGEuZGVmbGluay5oZV9jYXAuaGFzX2hlKVxuIFx0XHRpZWVlODAyMTFfYWRkX2FkZGJhZXh0KHNrYiwgMCwgYWdnX3NpemUpO1xuIFxuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XG4gfVxuIFxuIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcbkBAIC0xMjcsNyAmIzQzOzEyNyw3IEBAIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcbiBcbiBcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHxcbiBcdFx0XHRcdFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NlbmRfYmFyKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYXAuYyBiL25ldC9tYWM4MDIxMS9hcC5jXG5pbmRleCBlN2FjOTljNWEyMmViLi5mZTI1NTg5MWMzNWYwIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9hcC5jXG5AQCAtODIsOSAmIzQzOzgyLDYgQEAgaWVlZTgwMjExX3J4X2VtbF9vcF9tb2RlX25vdGlmKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0aWYgKCFpZnRfZXh0X2NhcGEpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpXG4tXHRcdHJldHVybjtcbi1cbiBcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlc2EpO1xuIFx0aWYgKCFzdGEpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jXG5pbmRleCBlMWUxYjdmODJmM2ZlLi5jNWMyMTEzZmE0Zjc5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2h0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9odC5jXG5AQCAtNTQ1LDcgJiM0Mzs1NDUsNyBAQCBpbnQgaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhID0gSUVFRTgwMjExX1NUQVRVU19UWVBFX1NNUFMgfFxuIFx0XHRcdCAgICB1MTZfZW5jb2RlX2JpdHMoc3RhdHVzX2xpbmtfaWQgXHUwMDNjXHUwMDNjIDIgfCBzbXBzLFxuIFx0XHRcdFx0XHQgICAgSUVFRTgwMjExX1NUQVRVU19TVUJEQVRBX01BU0spO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgbGlua19pZCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuaW5kZXggNTc2MWU5NjIxNDkxNC4uMGQ4ZWIwNDI4ODdhOSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuQEAgLTI0NjMsNyAmIzQzOzI0NjMsOCBAQCB2b2lkIGllZWU4MDIxMV94bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHQgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0XHQgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4gXHRcdFx0XHQgZW51bSBubDgwMjExX2JhbmQgYmFuZCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsXG5AQCAtMjQ4MywxOCAmIzQzOzI0ODQsMjAgQEAgaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQpXG4ge1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHRpZCwgLTEsIGJhbmQpO1xuJiM0MztcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLFxuJiM0MztcdFx0XHRcdCAgICB0aWQsIC0xLCBiYW5kKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpO1xuJiM0MztcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHQgIGludCB0aWQsIGludCBsaW5rX2lkKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXG4tXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5pbmRleCA0MzQ2MGE3MDVhNmJkLi5hMGIyMTRkYmI4YWY4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5AQCAtMTY3MywxMSAmIzQzOzE2NzMsOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZhY2VfcHJvY2Vzc19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHRzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRcdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3RhLVx1MDAzZWxpbmtbc3RhdHVzLVx1MDAzZWxpbmtfaWRdLFxuLVx0XHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmxvY2FsLVx1MDAzZWh3LndpcGh5LVx1MDAzZW10eCkpO1xuJiM0MztcdFx0XHRsaW5rX3N0YSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHN0YS1cdTAwM2VsaW5rW3N0YXR1cy1cdTAwM2VsaW5rX2lkXSk7XG4gXHRcdFx0aWYgKGxpbmtfc3RhKVxuIFx0XHRcdFx0aWVlZTgwMjExX2h0X2hhbmRsZV9jaGFud2lkdGhfbm90aWYobG9jYWwsIHNkYXRhLCBzdGEsXG4gXHRcdFx0XHRcdFx0XHRcdCAgICBsaW5rX3N0YSwgY2hhbndpZHRoLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi4zNjE3NzVmYjkzMWVjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTExODMxLDEyICYjNDM7MTE4MzEsMTAgQEAgdm9pZCBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdHJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItXHUwMDNlY2I7XG4gXHRmYyA9IGxlMTZfdG9fY3B1KG1nbXQtXHUwMDNlZnJhbWVfY29udHJvbCk7XG4gXG4tXHRpZiAocnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpIHtcbi1cdFx0bGluayA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxpbmtbcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWRdLFxuLVx0XHRcdFx0XHQgc2RhdGEpO1xuLVx0XHRpZiAoIWxpbmspXG4tXHRcdFx0cmV0dXJuO1xuLVx0fVxuJiM0MztcdGxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW3J4X3N0YXR1cy1cdTAwM2VsaW5rX2lkXSxcbiYjNDM7XHRcdFx0XHQgc2RhdGEpO1xuJiM0MztcdGlmICghbGluaylcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdHN3aXRjaCAoZmMgXHUwMDI2IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7XG4gXHRjYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcbmluZGV4IDdhY2VmODBkNWYxZmIuLjY1MzcxMDU3NjgzMTYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG5AQCAtODU0LDggJiM0Mzs4NTQsMTAgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVx1MDAzZWRhKTtcbi1cdFx0bWxvX3N0YSA9IHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG87XG4mIzQzO1x0XHRpZiAoIXBhcmFtcy1cdTAwM2Vub19zdGEpIHtcbiYjNDM7XHRcdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cdTAwM2VkYSk7XG4mIzQzO1x0XHRcdG1sb19zdGEgPSBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEubWxvO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoIWllZWU4MDIxMV9pc19hY3Rpb24obWdtdC1cdTAwM2VmcmFtZV9jb250cm9sKSB8fFxuIFx0XHQgICAgbWdtdC1cdTAwM2V1LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyB8fFxuQEAgLTg4NCw3ICYjNDM7ODg2LDggQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdCAgICAgbG9jYWwtXHUwMDNlb3BzLVx1MDAzZXJlbWFpbl9vbl9jaGFubmVsIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIG1lbWNtcChzZGF0YS1cdTAwM2V2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKSkpIHtcbiBcdFx0XHRuZWVkX29mZmNoYW4gPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHNkYXRhLVx1MDAzZXUubWdkLmFzc29jaWF0ZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFwYXJhbXMtXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICBzZGF0YS1cdTAwM2V1Lm1nZC5hc3NvY2lhdGVkIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGV0aGVyX2FkZHJfZXF1YWwoc2RhdGEtXHUwMDNldmlmLmNmZy5hcF9hZGRyLCBtZ210LVx1MDAzZWRhKSkge1xuIFx0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlZGEpO1xuIFx0XHRcdG1sb19zdGEgPSBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEubWxvO1xuQEAgLTEwMjIsNyAmIzQzOzEwMjUsOSBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdH1cbiBcbiBcdGlmICghbmVlZF9vZmZjaGFuKSB7XG4tXHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xuJiM0MztcdFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcbiYjNDM7XHRcdFx0XHQgICAgIHBhcmFtcy1cdTAwM2Vub19zdGEgPyBzdGEgOiBFUlJfUFRSKC1FTk9FTlQpLFxuJiM0MztcdFx0XHRcdCAgICAgNywgbGlua19pZCk7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jXG5pbmRleCA1ZTI2YmU4ZTI3ZDhmLi5lZDVhMmUwNTkwNzU3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9yeC5jXG5AQCAtMjIyLDQzICYjNDM7MjIyLDIxIEBAIGllZWU4MDIxMV9yeF9yYWRpb3RhcF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdFx0ICAgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cbi1cdGlmIChsaW5rX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gbGlua19pZDtcbi1cdH0gZWxzZSB7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMDtcbi1cdH1cbi1cbiBcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnNkYXRhLVx1MDAzZXNrYl9xdWV1ZSwgc2tiKTtcbiBcdHdpcGh5X3dvcmtfcXVldWUoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksIFx1MDAyNnNkYXRhLVx1MDAzZXdvcmspO1xuLVx0aWYgKHN0YSkge1xuLVx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGFfaW5mbztcbi1cbi1cdFx0aWYgKGxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdFx0bGlua19zdGFfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4tXHRcdFx0aWYgKCFsaW5rX3N0YV9pbmZvKVxuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGxpbmtfc3RhX2luZm8gPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbi1cdFx0fVxuLVxuLVx0XHRsaW5rX3N0YV9pbmZvLVx1MDAzZXJ4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7O1xuLVx0fVxuJiM0MztcdGlmIChsaW5rX3N0YSlcbiYjNDM7XHRcdGxpbmtfc3RhLVx1MDAzZXJ4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0XHQgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHRcdCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IDA7XG4tXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfaWQsIHN0YSwgc2tiKTtcbiYjNDM7XHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfc3RhLCBza2IpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuQEAgLTMwMSw3ICYjNDM7Mjc5LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9tdV9taW1vX21vbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGlmICghc2tiKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCAtMSwgTlVMTCwgc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBOVUxMLCBza2IpO1xuIH1cbiBcbiAvKlxuQEAgLTE0OTgsNyAmIzQzOzE0NzYsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0LyogaWYgdGhpcyBtcGR1IGlzIGZyYWdtZW50ZWQgLSB0ZXJtaW5hdGUgcnggYWdncmVnYXRpb24gc2Vzc2lvbiAqL1xuIFx0c2MgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlc2VxX2N0cmwpO1xuIFx0aWYgKHNjIFx1MDAyNiBJRUVFODAyMTFfU0NUTF9GUkFHKSB7XG4tXHRcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXHUwMDNlc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIE5VTEwsIHNrYik7XG4mIzQzO1x0XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHJ4LVx1MDAzZXNkYXRhLCBOVUxMLCBza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMjUyNCw3ICYjNDM7MjUwMiw3IEBAIGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcbiAgb3V0OlxuIFx0aWVlZTgwMjExX2xlZF9yeChyeC1cdTAwM2Vsb2NhbCk7XG4tXHRpZiAocngtXHUwMDNlc3RhKVxuJiM0MztcdGlmIChyeC1cdTAwM2VsaW5rX3N0YSlcbiBcdFx0cngtXHUwMDNlbGlua19zdGEtXHUwMDNlcnhfc3RhdHMucGFja2V0cyYjNDM7JiM0Mzs7XG4gXHRyZXR1cm4gUlhfQ09OVElOVUU7XG4gfVxuQEAgLTMzMzUsOCAmIzQzOzMzMTMsOCBAQCBpZWVlODAyMTFfcnhfaF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdCAgICAodGYtXHUwMDNlYWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX0NIQU5ORUxfU1dJVENIX1JFUVVFU1QgfHxcbiBcdFx0ICAgICB0Zi1cdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVTUE9OU0UpKSB7XG4gXHRcdFx0cngtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfVERMUyk7XG4tXHRcdFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLFxuLVx0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0XHRcdF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2Vza2IpO1xuIFx0XHRcdHJldHVybiBSWF9RVUVVRUQ7XG4gXHRcdH1cbiBcdH1cbkBAIC0zOTkxLDcgJiM0MzszOTY5LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIFxuICBxdWV1ZTpcbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSwgcngtXHUwMDNlc2tiKTtcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gfVxuIFxuQEAgLTQwMDUsNiAmIzQzOzM5ODMsNyBAQCBpZWVlODAyMTFfcnhfaF91c2Vyc3BhY2VfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHQubGVuID0gcngtXHUwMDNlc2tiLVx1MDAzZWxlbixcbiBcdFx0LmxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkLFxuIFx0XHQuaGF2ZV9saW5rX2lkID0gcngtXHUwMDNlbGlua19pZCBcdTAwM2U9IDAsXG4mIzQzO1x0XHQubm9fc3RhID0gIXJ4LVx1MDAzZXN0YSxcbiBcdH07XG4gXG4gXHQvKiBza2lwIGtub3duLWJhZCBhY3Rpb24gZnJhbWVzIGFuZCByZXR1cm4gdGhlbSBpbiB0aGUgbmV4dCBoYW5kbGVyICovXG5AQCAtNDEyNyw3ICYjNDM7NDEwNiw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbl9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0XHRcdFx0bG9jYWwtXHUwMDNlaHcub2ZmY2hhbm5lbF90eF9od19xdWV1ZTtcbiBcdFx0fVxuIFxuLVx0XHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQocngtXHUwMDNlc2RhdGEsIG5za2IsIDcsIC0xLFxuJiM0MztcdFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LVx1MDAzZXNkYXRhLCBuc2tiLCByeC1cdTAwM2VzdGEsIDcsIC0xLFxuIFx0XHRcdFx0XHQgICAgc3RhdHVzLVx1MDAzZWJhbmQpO1xuIFx0fVxuIFxuQEAgLTQxNDcsNyAmIzQzOzQxMjYsNyBAQCBpZWVlODAyMTFfcnhfaF9leHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0cmV0dXJuIFJYX0RST1BfVV9VTkVYUEVDVEVEX0VYVF9GUkFNRTtcbiBcbiBcdC8qIGZvciBub3cgb25seSBiZWFjb25zIGFyZSBleHQsIHNvIHF1ZXVlIHRoZW0gKi9cbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSwgcngtXHUwMDNlc2tiKTtcbiBcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gfVxuQEAgLTQyMDQsNyAmIzQzOzQxODMsNyBAQCBpZWVlODAyMTFfcnhfaF9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdHJldHVybiBSWF9EUk9QX1VfVU5IQU5ETEVEX01HTVRfU1RZUEU7XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLCByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsIHJ4LVx1MDAzZXNrYik7XG4gXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIH1cbkBAIC00MjQ4LDEyICYjNDM7NDIyNywyOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZyeC1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9wYXRoX2xvY2spO1xuIFxuIFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGZyYW1lcykpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4mIzQzO1xuIFx0XHQvKlxuLVx0XHQgKiBhbGwgdGhlIG90aGVyIGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lc1xuLVx0XHQgKiB0aGF0IGJlbG9uZyB0byBhbiBhTVBEVSBzaW5jZSB0aGV5IGFyZSBvbiB0aGVcbi1cdFx0ICogc2FtZSBUSUQgZnJvbSB0aGUgc2FtZSBzdGF0aW9uXG4mIzQzO1x0XHQgKiBNb3N0IGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lcy4gSG93ZXZlcixcbiYjNDM7XHRcdCAqIGluIHRoZSBjYXNlIG9mIHJlb3JkZXJpbmcgZnJhbWVzIG1heSBoYXZlIGFycml2ZWRcbiYjNDM7XHRcdCAqIG9uIGRpZmZlcmVudCBsaW5rcywgc28gYWRqdXN0IHRoZSBsaW5rX2lkLCBsaW5rXG4mIzQzO1x0XHQgKiBhbmQgbGlua19zdGEgYWNjb3JkaW5nbHkuXG4gXHRcdCAqL1xuIFx0XHRyeC1cdTAwM2Vza2IgPSBza2I7XG4mIzQzO1x0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNldmlmKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB1bmxpa2VseShyeC1cdTAwM2VsaW5rX2lkICE9IHN0YXR1cy1cdTAwM2VsaW5rX2lkKSkge1xuJiM0MztcdFx0XHRpZiAocngtXHUwMDNlc3RhKSB7XG4mIzQzO1x0XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPVxuJiM0MztcdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHJ4LVx1MDAzZXN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0LyogTGluayBnb3QgZGlzYWJsZWQsIGp1c3QgdXNlIGRlZmxpbmsgKi9cbiYjNDM7XHRcdFx0XHRpZiAoIXJ4LVx1MDAzZWxpbmtfc3RhKVxuJiM0MztcdFx0XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPSBcdTAwMjZyeC1cdTAwM2VzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyeC1cdTAwM2VsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1x0XHRcdHJ4LVx1MDAzZWxpbmsgPSByY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tzdGF0dXMtXHUwMDNlbGlua19pZF0pO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFyeC1cdTAwM2VsaW5rKSkge1xuIFx0XHRcdHJlcyA9IFJYX0RST1BfVV9OT19MSU5LO1xuQEAgLTQzMjMsNyAmIzQzOzQzMTgsMzQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIHN0YXRpYyBib29sXG4gaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IGxpbmtfaWQpXG4ge1xuLVx0cmV0dXJuICEhKHN0YS1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKGxpbmtfaWQpKTtcbiYjNDM7XHRpZiAoc3RhLVx1MDAzZW1sbylcbiYjNDM7XHRcdHJldHVybiBzdGEtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0YS1cdTAwM2VkZWZsaW5rLmxpbmtfaWQgPT0gbGlua19pZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpIHx8XG4mIzQzO1x0ICAgICFpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoXHUwMDI2bGlua19zdGEtXHUwMDNlc3RhLVx1MDAzZXN0YSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2VzdGEgPSBzdGE7XG4mIzQzO1x0cngtXHUwMDNlbG9jYWwgPSBzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWw7XG4mIzQzO1x0cngtXHUwMDNlbGluayA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4mIzQzO1x0aWYgKCFyeC1cdTAwM2VsaW5rKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2VsaW5rX2lkID0gcngtXHUwMDNlbGluay1cdTAwM2VsaW5rX2lkO1xuJiM0MztcdHJ4LVx1MDAzZWxpbmtfc3RhID0gbGlua19zdGE7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuQEAgLTQzNjAsMTEgJiM0Mzs0MzgyLDEzIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcbiBcdGlmIChsaW5rX2lkIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZyeC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgc3RhIFx1MDAyNlx1MDAyNiAhc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcylcbiYjNDM7XHRcdCAgICBzdGEgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSB7XG4gXHRcdFx0cngtXHUwMDNlbGluayA9XG4gXHRcdFx0XHRyY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tzdGEtXHUwMDNlZGVmbGluay5saW5rX2lkXSk7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRyeC1cdTAwM2VsaW5rID0gXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdH1cbiBcdH0gZWxzZSBpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHJ4LCBsaW5rX2lkKSkge1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtNDM4Nyw3ICYjNDM7NDQxMSw3IEBAIHZvaWQgaWVlZTgwMjExX3JlbGVhc2VfcmVvcmRlcl90aW1lb3V0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGlkKVxuIFx0c3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeDtcbiBcdGludCBsaW5rX2lkID0gLTE7XG4gXG4tXHQvKiBGSVhNRTogc3RhdGlzdGljcyB3b24mIzM5O3QgYmUgcmlnaHQgd2l0aCB0aGlzICovXG4mIzQzO1x0LyogTk9URTogdGhlIGNvcnJlY3QgbGluayBTVEEgZm9yIHRoZSBmcmFtZSBpcyBzZXQgbGF0ZXIgKi9cbiBcdGlmIChzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKVxuIFx0XHRsaW5rX2lkID0gZmZzKHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpIC0gMTtcbiBcbkBAIC00OTE0LDIwICYjNDM7NDkzOCwxNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpzdGF0cztcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0IocngtXHUwMDNlc2tiKTtcbi1cdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gcngtXHUwMDNlc3RhO1xuLVx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuJiM0MztcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVx1MDAzZXNrYjtcbiBcdHZvaWQgKnNhID0gc2tiLVx1MDAzZWRhdGEgJiM0MzsgRVRIX0FMRU47XG4gXHR2b2lkICpkYSA9IHNrYi1cdTAwM2VkYXRhO1xuIFxuLVx0aWYgKHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbi1cdFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYihyeC1cdTAwM2Vza2IpO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHN0YXRzID0gXHUwMDI2bGlua19zdGEtXHUwMDNlcnhfc3RhdHM7XG5AQCAtNTE1NCw2ICYjNDM7NTE3Miw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9pbnZva2VfZmFzdF9yeChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4mIzQzO1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0aWVlZTgwMjExX3J4XzgwMjMocngsIGZhc3RfcngsIG9yaWdfbGVuKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTUxNzgsNiAmIzQzOzUxOTksNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSByeC1cdTAwM2VsaW5rO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXM7XG4gXG4gXHRyeC1cdTAwM2Vza2IgPSBza2I7XG4gXG5AQCAtNTIyMSw2ICYjNDM7NTI0Myw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcdFx0aGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0aWYgKGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSkge1xuIFx0XHRpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHJ4KTtcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtNTI1NiwyMiAmIzQzOzUyODEsMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfcnggKmZhc3Rfcng7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgcng7XG4gXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbi1cdGludCBsaW5rX2lkID0gLTE7XG4gXG4gXHRtZW1zZXQoXHUwMDI2cngsIDAsIHNpemVvZihyeCkpO1xuIFx0cnguc2tiID0gc2tiO1xuIFx0cngubG9jYWwgPSBsb2NhbDtcbiBcdHJ4Lmxpc3QgPSBsaXN0O1xuLVx0cngubGlua19pZCA9IC0xO1xuIFxuIFx0STgwMl9ERUJVR19JTkMobG9jYWwtXHUwMDNlZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpO1xuIFxuQEAgLTUyNzksMjMgJiM0Mzs1MzAxLDE1IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0aWYgKCFwdWJzdGEpXG4mIzQzO1x0aWYgKCFsaW5rX3B1YnN0YSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4tXG4tXHQvKlxuLVx0ICogVE9ETzogU2hvdWxkIHRoZSBmcmFtZSBiZSBkcm9wcGVkIGlmIHRoZSByaWdodCBsaW5rX2lkIGlzIG5vdFxuLVx0ICogYXZhaWxhYmxlPyBPciBtYXkgYmUgaXQgaXMgZmluZSBpbiB0aGUgY3VycmVudCBmb3JtIHRvIHByb2NlZWQgd2l0aFxuLVx0ICogdGhlIGZyYW1lIHByb2Nlc3NpbmcgYmVjYXVzZSB3aXRoIGZyYW1lIGJlaW5nIGluIDgwMi4zIGZvcm1hdCxcbi1cdCAqIGxpbmtfaWQgaXMgdXNlZCBvbmx5IGZvciBzdGF0cyBwdXJwb3NlIGFuZCB1cGRhdGluZyB0aGUgc3RhdHMgb25cbi1cdCAqIHRoZSBkZWZsaW5rIGlzIGZpbmU/XG4tXHQgKi9cbi1cdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgc3RhLCBsaW5rX2lkKSlcbiYjNDM7XHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG4mIzQzO1x0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFx1MDAyNnJ4LCBzdGEsIGxpbmtfcHVic3RhLVx1MDAzZWxpbmtfaWQpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4mIzQzO1x0cngubGlua19pZCA9IGxpbmtfcHVic3RhLVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0ZmFzdF9yeCA9IHJjdV9kZXJlZmVyZW5jZShyeC5zdGEtXHUwMDNlZmFzdF9yeCk7XG4gXHRpZiAoIWZhc3RfcngpXG4gXHRcdGdvdG8gZHJvcDtcbkBAIC01MzA3LDU5ICYjNDM7NTMyMSwxOSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGNvbnN1bWUpXG4mIzQzO3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKGludCBmcmVxLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcbiB7XG4tXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbi1cdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuLVx0aW50IGxpbmtfaWQgPSAtMTtcbi1cbi1cdGlmIChpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbi1cdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBOVUxMLCAtMSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0XHRyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTtcbi1cdH1cbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbiBcbi1cdC8qXG4tXHQgKiBMb29rIHVwIGxpbmsgc3RhdGlvbiBmaXJzdCwgaW4gY2FzZSB0aGVyZSYjMzk7cyBhXG4tXHQgKiBjaGFuY2UgdGhhdCB0aGV5IG1pZ2h0IGhhdmUgYSBsaW5rIGFkZHJlc3MgdGhhdFxuLVx0ICogaXMgaWRlbnRpY2FsIHRvIHRoZSBNTEQgYWRkcmVzcywgdGhhdCB3YXkgd2UmIzM5O2xsXG4tXHQgKiBoYXZlIHRoZSBsaW5rIGluZm9ybWF0aW9uIGlmIG5lZWRlZC5cbi1cdCAqL1xuLVx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3MocngtXHUwMDNlc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4tXHRpZiAobGlua19zdGEpIHtcbi1cdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuLVx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbi1cdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cbi1cdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhyeC1cdTAwM2VzZGF0YSwgaGRyLVx1MDAzZWFkZHIyKTtcbi1cdFx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKSB7XG4tXHRcdFx0bGlua19pZCA9IHN0YXR1cy1cdTAwM2VsaW5rX2lkO1xuLVx0XHR9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnJ4LVx1MDAzZXNkYXRhLVx1MDAzZXZpZikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgc3RhdHVzLVx1MDAzZWZyZXEpIHtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbi1cbi1cdFx0XHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHJ4LVx1MDAzZXNkYXRhLCBsaW5rKSB7XG4tXHRcdFx0XHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXHUwMDNlY29uZi1cdTAwM2VjaGFuY3R4X2NvbmYpO1xuLVx0XHRcdFx0aWYgKCFjb25mIHx8ICFjb25mLVx1MDAzZWRlZi5jaGFuKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHRcdGlmIChzdGF0dXMtXHUwMDNlZnJlcSA9PSBjb25mLVx1MDAzZWRlZi5jaGFuLVx1MDAzZWNlbnRlcl9mcmVxKSB7XG4tXHRcdFx0XHRcdGxpbmtfaWQgPSBsaW5rLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmICghZnJlcSB8fCBsaW5rLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuJiM0MztcdCAgICBsaW5rLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIHN0YSwgbGlua19pZCkpXG4mIzQzO1x0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbiYjNDM7XHRpZiAoIWNvbmYgfHwgIWNvbmYtXHUwMDNlZGVmLmNoYW4pXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpO1xuJiM0MztcdHJldHVybiBmcmVxID09IGNvbmYtXHUwMDNlZGVmLmNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4gfVxuIFxuIC8qXG5AQCAtNTM2NywxOCAmIzQzOzUzNDEsMjAgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiAgKiBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIHByb3RlY3Rpb24uXG4gICovXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4mIzQzO1x0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuJiM0MztcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIFx0X19sZTE2IGZjO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4O1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqcHJldjtcbiBcdHN0cnVjdCByaGxpc3RfaGVhZCAqdG1wO1xuJiM0MztcdGJvb2wgcnhfZGF0YV9wZW5kaW5nO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRmYyA9ICgoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YSktXHUwMDNlZnJhbWVfY29udHJvbDtcbkBAIC01Mzg2LDcgJiM0Mzs1MzYyLDYgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdHJ4LnNrYiA9IHNrYjtcbiBcdHJ4LmxvY2FsID0gbG9jYWw7XG4gXHRyeC5saXN0ID0gbGlzdDtcbi1cdHJ4LmxpbmtfaWQgPSAtMTtcbiBcbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaWVlZTgwMjExX2lzX21nbXQoZmMpKVxuIFx0XHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cdTAwM2Vkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCk7XG5AQCAtNTQyNiw5NyAmIzQzOzU0MDEsMTAyIEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdCAgICAgaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSlcbiBcdFx0aWVlZTgwMjExX3NjYW5fcngobG9jYWwsIHNrYik7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSWCBvZiBhIGRhdGEgZnJhbWUgc2hvdWxkIG9ubHkgaGFwcGVuIHRvIGV4aXN0aW5nIHN0YXRpb25zLlxuJiM0MztcdCAqIEl0IGlzIHRoZXJlZm9yZSBtb3JlIGVmZmljaWVudCB0byB1c2UgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyXG4mIzQzO1x0ICogb3Igc2VhcmNoIGJhc2VkIG9uIHRoZSBzdGF0aW9uJiMzOTtzIGFkZHJlc3MuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBOb3RlIHdlIHdpbGwgZmFsbCB0aHJvdWdoIGFuZCBoYW5kbGUgYSBzcHVyaW91cyBkYXRhIGZyYW1lIGluIHRoZVxuJiM0MztcdCAqIHNhbWUgd2F5IGFzIGEgbWFuYWdlbWVudCBmcmFtZS5cbiYjNDM7XHQgKi9cbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHtcbi1cdFx0c3RydWN0IHN0YV9pbmZvICpzdGEsICpwcmV2X3N0YTtcbi1cdFx0aW50IGxpbmtfaWQgPSAtMTtcbi1cbi1cdFx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRcdGxpbmtfaWQgPSBzdGF0dXMtXHUwMDNlbGlua19pZDtcbi1cbi1cdFx0aWYgKHB1YnN0YSkge1xuLVx0XHRcdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHN0YSwgbGlua19pZCkpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEluIE1MTyBjb25uZWN0aW9uLCBmZXRjaCB0aGUgbGlua19pZCB1c2luZyBhZGRyMlxuLVx0XHRcdCAqIHdoZW4gdGhlIGRyaXZlciBkb2VzIG5vdCBwYXNzIGxpbmtfaWQgaW4gc3RhdHVzLlxuLVx0XHRcdCAqIFdoZW4gdGhlIGFkZHJlc3MgdHJhbnNsYXRpb24gaXMgYWxyZWFkeSBwZXJmb3JtZWQgYnlcbi1cdFx0XHQgKiBkcml2ZXIvaHcsIHRoZSB2YWxpZCBsaW5rX2lkIG11c3QgYmUgcGFzc2VkIGluXG4tXHRcdFx0ICogc3RhdHVzLlxuLVx0XHRcdCAqL1xuLVxuLVx0XHRcdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgXHUwMDI2XHUwMDI2IHB1YnN0YS1cdTAwM2VtbG8pIHtcbi1cdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcbi1cbi1cdFx0XHRcdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLFxuLVx0XHRcdFx0XHRcdFx0XHQgaGRyLVx1MDAzZWFkZHIyKTtcbi1cdFx0XHRcdGlmICghbGlua19zdGEpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuLVxuLVx0XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhcdTAwMjZyeCxcbi1cdFx0XHRcdFx0XHRcdFx0bGlua19zdGEtXHUwMDNlbGlua19pZCkpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiYjNDM7XHRcdGlmIChsaW5rX3B1YnN0YSkge1xuJiM0MztcdFx0XHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sXG4mIzQzO1x0XHRcdFx0XHQgICBzdGEpO1xuJiM0MztcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX3B1YnN0YS1cdTAwM2VsaW5rX2lkXSk7XG4mIzQzO1xuJiM0MztcdFx0XHRyeC5zZGF0YSA9IHN0YS1cdTAwM2VzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcdTAwMjZyeCwgbGlua19zdGEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiBcdFx0XHRcdHJldHVybjtcbiYjNDM7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0cHJldl9zdGEgPSBOVUxMO1xuJiM0MztcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4gXG4mIzQzO1x0XHQvKiBTZWFyY2ggZm9yIHN0YXRpb25zIG9uIG5vbi1NTEQgaW50ZXJmYWNlcyAqL1xuIFx0XHRmb3JfZWFjaF9zdGFfaW5mbyhsb2NhbCwgaGRyLVx1MDAzZWFkZHIyLCBzdGEsIHRtcCkge1xuLVx0XHRcdGlmICghcHJldl9zdGEpIHtcbi1cdFx0XHRcdHByZXZfc3RhID0gc3RhO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbiBcbi1cdFx0XHRyeC5zZGF0YSA9IHByZXZfc3RhLVx1MDAzZXNkYXRhO1xuLVx0XHRcdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgXHUwMDI2XHUwMDI2IHByZXZfc3RhLVx1MDAzZXN0YS5tbG8pIHtcbi1cdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXG4tXHRcdFx0XHRcdFx0XHRcdCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0XHRcdFx0aWYgKCFsaW5rX3N0YSlcbi1cdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdGxpbmsgPSBcdTAwMjZzdGEtXHUwMDNlc2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xuJiM0MztcdFx0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFx1MDAyNnJ4LCBwcmV2X3N0YSwgbGlua19pZCkpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cbi1cdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRcdFx0cnguc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4mIzQzO1x0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFx1MDAyNnJ4LCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0cHJldl9zdGEgPSBzdGE7XG4mIzQzO1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHByZXZfc3RhKSB7XG4tXHRcdFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cdTAwM2VzZGF0YTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkIFx1MDAyNlx1MDAyNiBwcmV2X3N0YS1cdTAwM2VzdGEubWxvKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4mIzQzO1x0XHQvKiBBbmQgc2VhcmNoIHN0YXRpb25zIG9uIE1MRCBpbnRlcmZhY2VzICovXG4mIzQzO1x0XHRmb3JfZWFjaF9saW5rX3N0YV9pbmZvKGxvY2FsLCBoZHItXHUwMDNlYWRkcjIsIGxpbmtfc3RhLCB0bXApIHtcbiYjNDM7XHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XG4gXG4tXHRcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcbi1cdFx0XHRcdFx0XHRcdFx0IGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdFx0XHRpZiAoIWxpbmtfc3RhKVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuJiM0MztcdFx0XHRzZGF0YSA9XHRzdGEtXHUwMDNlc2RhdGE7XG4mIzQzO1x0XHRcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ZmFsc2UpO1xuJiM0MztcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRyeC5zZGF0YSA9IHN0YS1cdTAwM2VzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIGxpbmtfc3RhKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4mIzQzO1x0XHR9XG4gXG4mIzQzO1x0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4gXHRcdFx0aWYgKGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXG4gXHRcdFx0XHRyZXR1cm47XG4mIzQzO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogZmFsbCB0aHJvdWdoLCBlLmcuIGZvciBzcHVyaW91cyBmcmFtZSBub3RpZmljYXRpb24gKi9cbiBcdH1cbiBcbi1cdHByZXYgPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBpcyBhIG1hbmFnZW1lbnQgZnJhbWUgKG9yIGEgZGF0YSBmcmFtZSB3aXRob3V0IGEgc3RhdGlvbikgYW5kXG4mIzQzO1x0ICogaXQgd2lsbCBiZSBkZWxpdmVyZWQgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBhIHN0YXRpb24gZXhpc3RzLFxuJiM0MztcdCAqIHNvIGl0ZXJhdGUgdGhlIGludGVyZmFjZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFdlIGV4cGVjdCB0aGUgZHJpdmVyIHRvIHByb3ZpZGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uICovXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbG9jYWwtXHUwMDNlZW11bGF0ZV9jaGFuY3R4IFx1MDAyNlx1MDAyNiAhc3RhdHVzLVx1MDAzZWZyZXEpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xuJiM0MztcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSBOVUxMO1xuJiM0MztcbiBcdFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5AQCAtNTUyNCwzMCAmIzQzOzU1MDQsODUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0ICAgIHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRsaW5rX3N0YSA9IE5VTEw7XG4mIzQzO1x0XHRsaW5rID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBUcnkgdG8gcmVzb2x2ZSB0aGUgc3RhdGlvbiAqL1xuJiM0MztcdFx0aWYgKCFpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4mIzQzO1x0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoc3RhKSB7XG4mIzQzO1x0XHRcdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0XHRsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGlua19zdGEpXG4mIzQzO1x0XHRcdFx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qXG4tXHRcdCAqIGZyYW1lIGlzIGRlc3RpbmVkIGZvciB0aGlzIGludGVyZmFjZSwgYnV0IGlmIGl0JiMzOTtzXG4tXHRcdCAqIG5vdCBhbHNvIGZvciB0aGUgcHJldmlvdXMgb25lIHdlIGhhbmRsZSB0aGF0IGFmdGVyXG4tXHRcdCAqIHRoZSBsb29wIHRvIGF2b2lkIGNvcHlpbmcgdGhlIFNLQiBvbmNlIHRvbyBtdWNoXG4mIzQzO1x0XHQgKiBJZiB3ZSBmb3VuZCBhIFNUQSBhbmQgaXQgaGFzIGEgdmFsaWQgbGluayBpbmZvcm1hdGlvbiwgdGhlblxuJiM0MztcdFx0ICogUlggdXNpbmcgdGhlIHN0YXRpb24uXG4gXHRcdCAqL1xuJiM0MztcdFx0aWYgKGxpbmtfc3RhIFx1MDAyNlx1MDAyNiBsaW5rIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cdTAwM2VmcmVxLCBsaW5rKSkge1xuJiM0MztcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE5vIHZhbGlkX2xpbmtzIGNoZWNrIGFzIHdlIG5lZWQgdG8gUlggYmVhY29ucyAqL1xuJiM0MztcbiYjNDM7XHRcdFx0cnguc2RhdGEgPSBzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcdTAwMjZyeCwgbGlua19zdGEpKVxuJiM0MztcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXG4tXHRcdGlmICghcHJldikge1xuLVx0XHRcdHByZXYgPSBzZGF0YTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRyeC5zZGF0YSA9IHByZXY7XG4tXHRcdGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRcdC8qIE5vIHN0YXRpb24sIHRyeSB0byByZXNvbHZlIHRoZSBsaW5rIGFuZCBSWCAqL1xuJiM0MztcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XG4mIzQzO1x0XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiBcbi1cdFx0cHJldiA9IHNkYXRhO1xuLVx0fVxuJiM0MztcdFx0XHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHNkYXRhLCBsaW5rKSB7XG4mIzQzO1x0XHRcdFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbiYjNDM7XHRcdFx0XHRpZiAoIWNvbmYgfHwgIWNvbmYtXHUwMDNlZGVmLmNoYW4pXG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdGlmIChwcmV2KSB7XG4tXHRcdHJ4LnNkYXRhID0gcHJldjtcbiYjNDM7XHRcdFx0XHRpZiAoc3RhdHVzLVx1MDAzZWZyZXEgPT0gY29uZi1cdTAwM2VkZWYuY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSkge1xuJiM0MztcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4gXG4tXHRcdGlmIChpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbi1cdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGlmICghZm91bmQpXG4mIzQzO1x0XHRcdFx0bGluayA9IFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbms7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xuJiM0MztcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyeC5zZGF0YSA9IHNkYXRhO1xuJiM0MztcdFx0cngubG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbiYjNDM7XHRcdHJ4LmxpbmsgPSBsaW5rO1xuJiM0MztcdFx0cngubGlua19pZCA9IGxpbmstXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdHJ4LnN0YSA9IE5VTEw7XG4mIzQzO1x0XHRyeC5saW5rX3N0YSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0cnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocnhfZGF0YV9wZW5kaW5nIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiAgb3V0OlxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIH1cbkBAIC01NTU2LDcgJiM0Mzs1NTkxLDggQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiAgKiBUaGlzIGlzIHRoZSByZWNlaXZlIHBhdGggaGFuZGxlci4gSXQgaXMgY2FsbGVkIGJ5IGEgbG93IGxldmVsIGRyaXZlciB3aGVuIGFuXG4gICogODAyLjExIE1QRFUgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgaGFyZHdhcmUuXG4gICovXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiYjNDM7dm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG5AQCAtNTY5NCw5ICYjNDM7NTczMCw2IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChXQVJOX09OX09OQ0Uoc3RhdHVzLVx1MDAzZWxpbmtfaWQgXHUwMDNlPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkpXG4tXHRcdGdvdG8gZHJvcDtcbi1cbiBcdHN0YXR1cy1cdTAwM2VyeF9mbGFncyA9IDA7XG4gXG4gXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbkBAIC01NzE1LDkgJiM0Mzs1NzQ4LDEwIEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gXHRcdFx0aWVlZTgwMjExX3RwdF9sZWRfdHJpZ19yeChsb2NhbCwgc2tiLVx1MDAzZWxlbik7XG4gXG4gXHRcdGlmIChzdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR184MDIzKVxuLVx0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBwdWJzdGEsIHNrYiwgbGlzdCk7XG4mIzQzO1x0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBsaXN0KTtcbiBcdFx0ZWxzZVxuLVx0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcbiYjNDM7XHRcdFx0X19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgbGlua19wdWJzdGEsIHNrYixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBsaXN0KTtcbiBcdH1cbiBcbiBcdGtjb3ZfcmVtb3RlX3N0b3AoKTtcbkBAIC01NzI3LDcgJiM0Mzs1NzYxLDggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiB9XG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnhfbGlzdCk7XG4gXG4tdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiYjNDM7dm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqdG1wO1xuQEAgLTU3NDAsNyAmIzQzOzU3NzUsNyBAQCB2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuIFx0ICogcmVjZWl2ZSBwcm9jZXNzaW5nXG4gXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGllZWU4MDIxMV9yeF9saXN0KGh3LCBwdWJzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4mIzQzO1x0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfcHVic3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAoIW5hcGkpIHtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uY1xuaW5kZXggZWVmZjIzMGJkOTA5Zi4uMzI0YzJiNmQ3Y2UxYiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zY2FuLmNcbkBAIC05LDcgJiM0Mzs5LDcgQEBcbiAgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSBcdTAwM2NmbGFtaW5naWNlQHNvdXJtaWxrLm5ldFx1MDAzZVxuICAqIENvcHlyaWdodCAyMDEzLTIwMTUgIEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJIXG4gICogQ29weXJpZ2h0IDIwMTYtMjAxNyAgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxuLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbkBAIC0yMDQsMTIgJiM0MzsyMDQsMTAgQEAgaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0ICogYW4gaW5kaWNhdGlvbiBvbiB3aGljaCBvZiB0aGUgbGlua3MgdGhlIGZyYW1lIHdhcyByZWNlaXZlZFxuIFx0XHQgKi9cbiBcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNjYW5fc2RhdGEtXHUwMDNldmlmKSkge1xuLVx0XHRcdGlmIChyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCkge1xuLVx0XHRcdFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkO1xuJiM0MztcdFx0XHRzOCBsaW5rX2lkID0gcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4gXG4tXHRcdFx0XHRsaW5rX2NvbmYgPVxuLVx0XHRcdFx0XHRyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS1cdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcbi1cdFx0XHR9XG4mIzQzO1x0XHRcdGxpbmtfY29uZiA9XG4mIzQzO1x0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bGlua19jb25mID0gXHUwMDI2c2Nhbl9zZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmY7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGRscy5jIGIvbmV0L21hYzgwMjExL3RkbHMuY1xuaW5kZXggZGMyZjY2MmZlNGM0Ni4uZTE3ZDQ5MmJlNTkwMiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90ZGxzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcbkBAIC0xMDY2LDcgJiM0MzsxMDY2LDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGFjdGlvbl9jb2RlID09IFdMQU5fUFVCX0FDVElPTl9URExTX0RJU0NPVkVSX1JFUykge1xuLVx0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcbiYjNDM7XHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHN0YSwgNywgbGlua19pZCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IDNhMWUyYzllMTU2NWUuLjZmNTJlODg0MDIzNzEgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC02NDM2LDcgJiM0Mzs2NDM2LDggQEAgdm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQpXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdW5yZXNlcnZlX3RpZCk7XG4gXG4gdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHRcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbiBcdFx0XHRcdCBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuQEAgLTY0ODgsMTIgJiM0Mzs2NDg5LDEzIEBAIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0ICovXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXHUwMDNlYmFuZCA9IGJhbmQ7XG4tXHRpZWVlODAyMTFfeG1pdChzZGF0YSwgTlVMTCwgc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfeG1pdChzZGF0YSwgc3RhLCBza2IpO1xuIFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZClcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0ICBpbnQgdGlkLCBpbnQgbGlua19pZClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY2hhbmN0eF9jb25mO1xuIFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcbkBAIC02NTE5LDcgJiM0Mzs2NTIxLDcgQEAgdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0YmFuZCA9IDA7XG4gXHR9XG4gXG4tXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCBsaW5rX2lkLCBiYW5kKTtcbiYjNDM7XHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA0NGYyYmFkMDg2NzA1Li40MzdiZWJjYzAyNzQ4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEwOTYsNiAmIzQzOzEwOTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XG4gXHRbTkw4MDIxMV9BVFRSX05QQ0FfUFVOQ1RfQklUTUFQXSA9XG4gXHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXG4gXHRbTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFNdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4mIzQzO1x0W05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIH07XG4gXG4gLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi9cbkBAIC0xNDg2MCw2ICYjNDM7MTQ4NjEsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0ICAgICEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX2lkKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHBhcmFtcy5ub19zdGEgPVxuJiM0MztcdFx0bmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdKTtcbiYjNDM7XG4gXHRwYXJhbXMuYnVmID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKTtcbiBcdHBhcmFtcy5sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7XG4gXG5AQCAtMjIwMjQsNyAmIzQzOzIyMDI4LDkgQEAgaW50IG5sODAyMTFfc2VuZF9tZ210KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdCAgICAoaW5mby1cdTAwM2VhY2tfdHN0YW1wIFx1MDAyNlx1MDAyNiBubGFfcHV0X3U2NF82NGJpdChtc2csXG4gXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1RYX0hXX1RJTUVTVEFNUCxcbiBcdFx0XHRcdFx0XHQgICBpbmZvLVx1MDAzZWFja190c3RhbXAsXG4tXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpKVxuJiM0MztcdFx0XHRcdFx0XHQgICBOTDgwMjExX0FUVFJfUEFEKSkgfHxcbiYjNDM7XHQgICAgKGluZm8tXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTU6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ210X3R4JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9saXN0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9uYXBpJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBob3cgcmVjZWl2ZWQgZnJhbWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbnMgYW5kIGxpbmtzIChNdWx0aS1MaW5rIE9wZXJhdGlvbikuIEl0IGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBjb3JlIFJYIGZ1bmN0aW9ucyAoYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCkgYW5kIG1vZGlmaWVzIHRoZSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBwYXRoIHRvIGhhbmRsZSBhIG5ldyBgbm9fc3RhYCBmbGFnLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODdmNGM5NDNjOWI1MmM3ZTk2NmU1NzAzMzkyYjk4MjdiODdjZWE2NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTU6Mjc6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMKaW5kZXggMzM0MjU3MDdjMDg0Mi4uZmJiM2QxOGY1NWRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguYwpAQCAtMjUwMCw3ICYjNDM7MjUwMCw3IEBAIHN0YXRpYyB2b2lkIGF0aDExa19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDExayAqYXIsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwCiAJICAgICEoaXNfbWNiYyAmYW1wOyZhbXA7IHJ4X3N0YXR1cy0mZ3Q7ZmxhZyAmYW1wOyBSWF9GTEFHX0RFQ1JZUFRFRCkpCiAJCXJ4X3N0YXR1cy0mZ3Q7ZmxhZyB8PSBSWF9GTEFHXzgwMjM7CiAKLQlpZWVlODAyMTFfcnhfbmFwaShhci0mZ3Q7aHcsIHB1YnN0YSwgbXNkdSwgbmFwaSk7CiYjNDM7CWllZWU4MDIxMV9yeF9uYXBpKGFyLSZndDtodywgcHVic3RhID8gJmFtcDtwdWJzdGEtJmd0O2RlZmxpbmsgOiBOVUxMLCBtc2R1LCBuYXBpKTsKIH0KIAogc3RhdGljIGJvb2wgYXRoMTFrX2RwX3J4X2NoZWNrX253aWZpX2hkcl9sZW5fdmFsaWQoc3RydWN0IGF0aDExa19iYXNlICphYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jCmluZGV4IDdkNWJlNzdiMDgxZjguLjFmYWYxODk2ZDBhYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uYwpAQCAtNTAzLDggJiM0Mzs1MDMsNiBAQCB2b2lkIGF0aDEya19kcF9tb25fcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzOwogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGUgKmhlID0gTlVMTDsKIAotCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDA7Ci0KIAlpZiAoKHN0YXR1cy0mZ3Q7ZW5jb2RpbmcgPT0gUlhfRU5DX0hFKSAmYW1wOyZhbXA7ICEoc3RhdHVzLSZndDtmbGFnICZhbXA7IFJYX0ZMQUdfUkFESU9UQVBfSEUpICZhbXA7JmFtcDsKIAkgICAgIShzdGF0dXMtJmd0O2ZsYWcgJmFtcDsgUlhfRkxBR19TS0lQX01PTklUT1IpKSB7CiAJCWhlID0gc2tiX3B1c2gobXNkdSwgc2l6ZW9mKGtub3duKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMKaW5kZXggOGZhMGU5MGI0NTMxNi4uODQ3YWQyOGZkMzBiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYwpAQCAtMTM3NSw2ICYjNDM7MTM3NSw3IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjCiAJc3RydWN0IGF0aDEya19kcCAqZHAgPSBkcF9wZGV2LSZndDtkcDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGE7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhID0gTlVMTDsKIAlzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKnBlZXI7CiAJc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gcnhfaW5mby0mZ3Q7cnhfc3RhdHVzOwpAQCAtMTM4NCw5ICYjNDM7MTM4NSwxOSBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1YwogCiAJcHVic3RhID0gcGVlciA/IHBlZXItJmd0O3N0YSA6IE5VTEw7CiAKLQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSAwOwotCWlmIChwdWJzdGEgJmFtcDsmYW1wOyBwdWJzdGEtJmd0O3ZhbGlkX2xpbmtzKQotCQlhdGgxMmtfaHdfc2V0X3J4X2xpbmtfaWQoZHAtJmd0O2h3X3BhcmFtcywgcGVlciwgcnhjYiwgc3RhdHVzKTsKJiM0MzsJaWYgKHB1YnN0YSkgewomIzQzOwkJaWYgKHB1YnN0YS0mZ3Q7dmFsaWRfbGlua3MpIHsKJiM0MzsJCQl1OCBsaW5rX2lkID0KJiM0MzsJCQkJYXRoMTJrX2h3X2dldF9yeF9saW5rX2lkKGRwLSZndDtod19wYXJhbXMsIHBlZXIsCiYjNDM7CQkJCQkJCSByeGNiLCBzdGF0dXMpOwomIzQzOwomIzQzOwkJCWlmIChsaW5rX2lkICZndDsgMCkKJiM0MzsJCQkJbGlua19wdWJzdGEgPQomIzQzOwkJCQkJcmN1X2RlcmVmZXJlbmNlKHB1YnN0YS0mZ3Q7bGlua1tsaW5rX2lkXSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWxpbmtfcHVic3RhID0gJmFtcDtwdWJzdGEtJmd0O2RlZmxpbms7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWF0aDEya19kYmcoZHAtJmd0O2FiLCBBVEgxMktfREJHX0RBVEEsCiAJCSAgICYjMzQ7cnggc2tiICVwIGxlbiAldSBwZWVyICVwTSAlZCAlcyBzbiAldSAlcyVzJXMlcyVzJXMlcyVzJXMlcyByYXRlX2lkeCAldSB2aHRfbnNzICV1IGZyZXEgJXUgYmFuZCAldSBmbGFnIDB4JXggZmNzLWVyciAlaSBtaWMtZXJyICVpIGFtc2R1LW1vcmUgJWlcbiYjMzQ7LApAQCAtMTQyMiw3ICYjNDM7MTQzMyw4IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjCiAKIAkvKiBUT0RPOiB0cmFjZSByeCBwYWNrZXQgKi8KIAotCWllZWU4MDIxMV9yeF9uYXBpKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBwdWJzdGEsIG1zZHUsIG5hcGkpOwomIzQzOwlpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsCiYjNDM7CQkJICBuYXBpKTsKIH0KIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaAppbmRleCA0OWNmZDVkZmM3MGE2Li4yNjhmMGE4ZmQ0NmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oCkBAIC0yNDgsOSAmIzQzOzI0OCw5IEBAIHN0cnVjdCBhdGgxMmtfaHdfb3BzIHsKIAlib29sICgqZHBfc3JuZ19pc190eF9jb21wX3JpbmcpKGludCByaW5nX251bSk7CiAJYm9vbCAoKmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMpKHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQpOwotCXZvaWQgKCpzZXRfcnhfbGlua19pZCkoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAotCQkJICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7CiYjNDM7CWludCAoKmdldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiYjNDM7CQkJICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTsKIH07CiAKIHN0YXRpYyBpbmxpbmUKQEAgLTI4MSwxMyAmIzQzOzI4MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfbWFjX2lkX3RvX3NybmdfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodywKLQkJCQkJICAgIHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKLQkJCQkJICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGF0aDEya19od19nZXRfcnhfbGlua19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAomIzQzOwkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKIHsKLQlpZiAoaHctJmd0O2h3X29wcy0mZ3Q7c2V0X3J4X2xpbmtfaWQpCi0JCWh3LSZndDtod19vcHMtJmd0O3NldF9yeF9saW5rX2lkKGRwX3BlZXIsIHJ4Y2IsIHN0YXR1cyk7CiYjNDM7CWlmIChody0mZ3Q7aHdfb3BzLSZndDtnZXRfcnhfbGlua19pZCkKJiM0MzsJCXJldHVybiBody0mZ3Q7aHdfb3BzLSZndDtnZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpOwomIzQzOwomIzQzOwlyZXR1cm4gLTE7CiB9CiAKIHN0cnVjdCBhdGgxMmtfZndfaWUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jCmluZGV4IDk1ZDg3ZGQ2Nzg3MmYuLjhiNzIyZWUwYWQ4ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMKQEAgLTIzMTcsMTcgJiM0MzsyMzE3LDE2IEBAIGF0aDEya193aWZpN19kcF9yeGRlc2NfbXBkdV92YWxpZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLAogCXJldHVybiB0bHZfdGFnID09IEhBTF9SWF9NUERVX1NUQVJUOwogfQogCi12b2lkCi1hdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiYjNDM7aW50CiYjNDM7YXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAogCQkJCSAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKQogewotCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDE7Ci0Jc3RhdHVzLSZndDtsaW5rX2lkID0gZHBfcGVlci0mZ3Q7aHdfbGlua3NbcnhjYi0mZ3Q7aHdfbGlua19pZF07CiYjNDM7CXJldHVybiBkcF9wZWVyLSZndDtod19saW5rc1tyeGNiLSZndDtod19saW5rX2lkXTsKIH0KIAotdm9pZAotYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAomIzQzO2ludAomIzQzO2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKIAkJCQkgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKIHsKQEAgLTIzNDEsMTAgJiM0MzsyMzQwLDkgQEAgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAogCWxpbmtzX21hcCA9IFJFQURfT05DRShkcF9wZWVyLSZndDtsaW5rX3BlZXJzX21hcCk7CiAJZm9yX2VhY2hfc2V0X2JpdChpLCAmYW1wO2xpbmtzX21hcCwgQVRIMTJLX05VTV9NQVhfTElOS1MpIHsKIAkJbGlua19wZWVyID0gcmN1X2RlcmVmZXJlbmNlKGRwX3BlZXItJmd0O2xpbmtfcGVlcnNbaV0pOwotCQlpZiAobGlua19wZWVyICZhbXA7JmFtcDsgbGlua19wZWVyLSZndDtwZWVyX2lkID09IHJ4Y2ItJmd0O3BlZXJfaWQpIHsKLQkJCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDE7Ci0JCQlzdGF0dXMtJmd0O2xpbmtfaWQgPSBsaW5rX3BlZXItJmd0O2xpbmtfaWQ7Ci0JCQlyZXR1cm47Ci0JCX0KJiM0MzsJCWlmIChsaW5rX3BlZXIgJmFtcDsmYW1wOyBsaW5rX3BlZXItJmd0O3BlZXJfaWQgPT0gcnhjYi0mZ3Q7cGVlcl9pZCkKJiM0MzsJCQlyZXR1cm4gbGlua19wZWVyLSZndDtsaW5rX2lkOwogCX0KJiM0MzsKJiM0MzsJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oCmluZGV4IDFkM2E0Nzg4YTJkZDkuLmQ2ODQ4OWZmN2IwMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmgKQEAgLTU3LDEwICYjNDM7NTcsMTAgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsCiAJCQkJICBzdHJ1Y3QgaGFsX3J4X2Rlc2MgKnJ4X2Rlc2MpOwogaW50IGF0aDEya193aWZpN19kcF9yeF90aWRfZGVsZXRlX2hhbmRsZXIoc3RydWN0IGF0aDEya19iYXNlICphYiwKIAkJCQkJICBzdHJ1Y3QgYXRoMTJrX2RwX3J4X3RpZF9yeHEgKnJ4X3RpZCk7Ci12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKLQkJCQkJICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTsKLXZvaWQgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAotCQkJCQkgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKLQkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpOwomIzQzO2ludCBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAomIzQzOwkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7CiYjNDM7aW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKJiM0MzsJCQkJCSAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jCmluZGV4IDRjMTExOWVkY2FlZGMuLjNjZDM1MTQ2NDI5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmMKQEAgLTE1OCw3ICYjNDM7MTU4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjbjkyNzRfb3BzID0gewogCS5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl9xY245Mjc0LAogCS5kcF9zcm5nX2lzX3R4X2NvbXBfcmluZyA9IGF0aDEya193aWZpN19kcF9zcm5nX2lzX2NvbXBfcmluZ19xY245Mjc0LAogCS5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfcWNuOTI3NCwKLQkuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NCwKJiM0MzsJLmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgd2NuNzg1MF9vcHMgPSB7CkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB3Y243ODUwX29wcyA9IHsKIAkuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3Jfd2NuNzg1MCwKIAkuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCwKIAkuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3djbjc4NTAsCi0JLnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAsCiYjNDM7CS5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0gewpAQCAtMTgwLDcgJiM0MzsxODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNjMjA3Ml9vcHMgPSB7CiAJLmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3djbjc4NTAsCiAJLmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsCiAJLmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY193Y243ODUwLAotCS5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwLAomIzQzOwkuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MCwKIH07CiAKICNkZWZpbmUgQVRIMTJLX1RYX1JJTkdfTUFTS18wIDB4MQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMKaW5kZXggMmI3MDdmZmMxYTIwZi4uNWQ2MmM0Yzg2MWJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jCkBAIC03MjYwLDcgJiM0Mzs3MjYwLDYgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgYXRoMTJrX3dtaV9tZ210X3J4X2FyZyByeF9ldiA9IHt9OwogCXN0cnVjdCBhdGgxMmsgKmFyOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhID0gTlVMTDsKIAlzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCWJvb2wgaXNfNGFkZHJfbnVsbF9wa3Q7CkBAIC03MzYyLDExICYjNDM7NzM2MSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KLQkJcHVic3RhID0gcGVlci0mZ3Q7c3RhOwotCQlpZiAocHVic3RhICZhbXA7JmFtcDsgcHVic3RhLSZndDt2YWxpZF9saW5rcykgewotCQkJc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gMTsKLQkJCXN0YXR1cy0mZ3Q7bGlua19pZCA9IHBlZXItJmd0O2xpbmtfaWQ7Ci0JCX0KIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtkcC0mZ3Q7ZHBfbG9jayk7CiAJCWdvdG8gc2VuZF9yeDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jCmluZGV4IDk2MTAyZDJhZjJjZjkuLmM0NWM0NzMzNzUwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jCkBAIC03LDcgJiM0Mzs3LDggQEAKICNpbmNsdWRlICYjMzQ7aGNtZC5oJiMzNDsKIAogc3RhdGljIHZvaWQKLWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzO2l3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSwKIAkJCSAgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkgICAgICAgc3RydWN0IGl3bF9tbGRfYmFpZF9kYXRhICpiYWlkX2RhdGEsCiAJCQkgICAgICAgc3RydWN0IGl3bF9tbGRfcmVvcmRlcl9idWZmZXIgKnJlb3JkZXJfYnVmLApAQCAtMzIsNyAmIzQzOzMzLDcgQEAgaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShza2JfbGlzdCkpKSB7CiAJCQlpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLAogCQkJCQkJCXJlb3JkZXJfYnVmLSZndDtxdWV1ZSwKLQkJCQkJCQlzdGEpOwomIzQzOwkJCQkJCQlsaW5rX3N0YSk7CiAJCQlyZW9yZGVyX2J1Zi0mZ3Q7bnVtX3N0b3JlZC0tOwogCQl9CiAJfQpAQCAtNzQsNyAmIzQzOzc1LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF9yZWxlYXNlX2ZyYW1lc19mcm9tX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsCiAKIAlyZW9yZGVyX2J1ZiA9ICZhbXA7YmFfZGF0YS0mZ3Q7cmVvcmRlcl9idWZbcXVldWVdOwogCi0JaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtJmd0O3N0YSwgbmFwaSwgYmFfZGF0YSwKJiM0MzsJaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEsIG5hcGksIGJhX2RhdGEsCiAJCQkJICAgICAgIHJlb3JkZXJfYnVmLCBuc3NuKTsKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xODAsNyAmIzQzOzE4MSw3IEBAIHZvaWQgaXdsX21sZF9kZWxfYmEoc3RydWN0IGl3bF9tbGQgKm1sZCwgaW50IHF1ZXVlLAogCXJlb3JkZXJfYnVmID0gJmFtcDtiYV9kYXRhLSZndDtyZW9yZGVyX2J1ZltxdWV1ZV07CiAKIAkvKiByZWxlYXNlIGFsbCBmcmFtZXMgdGhhdCBhcmUgaW4gdGhlIHJlb3JkZXIgYnVmZmVyIHRvIHRoZSBzdGFjayAqLwotCWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLSZndDtzdGEsIE5VTEwsCiYjNDM7CWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBOVUxMLAogCQkJCSAgICAgICBiYV9kYXRhLCByZW9yZGVyX2J1ZiwKIAkJCQkgICAgICAgaWVlZTgwMjExX3NuX2FkZChyZW9yZGVyX2J1Zi0mZ3Q7aGVhZF9zbiwKIAkJCQkJCQliYV9kYXRhLSZndDtidWZfc2l6ZSkpOwpAQCAtMTkzLDcgJiM0MzsxOTQsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSwKICAqLwogZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0CiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAotCQlpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiYjNDM7CQlpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpOwpAQCAtMjI4LDEyICYjNDM7MjI5LDEyIEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCXJldHVybiBJV0xfTUxEX1BBU1NfU0tCOwogCiAJLyogbm8gc3RhIHlldCAqLwotCWlmIChJV0xfRldfQ0hFQ0sobWxkLCAhc3RhLAomIzQzOwlpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIWxpbmtfc3RhLAogCQkJICYjMzQ7R290IHZhbGlkIEJBSUQgd2l0aG91dCBhIHZhbGlkIHN0YXRpb24gYXNzaWduZWQgLSAlZFxuJiMzNDssCiAJCQkgYmFpZCkpCiAJCXJldHVybiBJV0xfTUxEX1BBU1NfU0tCOwogCi0JbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTsKJiM0MzsJbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtJmd0O3N0YSk7CiAKIAkvKiBub3QgYSBkYXRhIHBhY2tldCAqLwogCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgfHwKQEAgLTMyNCw3ICYjNDM7MzI1LDcgQEAgaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkgKiB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGZyYW1lIHJlbGVhc2Ugbm90aWZpY2F0aW9uIGFycml2ZXMuCiAJICovCiAJaWYgKCFhbXNkdSB8fCBsYXN0X3N1YmZyYW1lKQotCQlpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBzdGEsIG5hcGksIGJhaWRfZGF0YSwKJiM0MzsJCWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYWlkX2RhdGEsCiAJCQkJCSAgICAgICBidWZmZXIsIG5zc24pOwogCWVsc2UgaWYgKGJ1ZmZlci0mZ3Q7bnVtX3N0b3JlZCA9PSAxKQogCQlidWZmZXItJmd0O2hlYWRfc24gPSBuc3NuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaAppbmRleCA2NTFjODBkMWM3Y2RhLi5jNmNkNWZhMjE5YmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaApAQCAtMSw2ICYjNDM7MSw2IEBACiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UgKi8KIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQsIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24KICAqLwogI2lmbmRlZiBfX2l3bF9hZ2dfaF9fCiAjZGVmaW5lIF9faXdsX2FnZ19oX18KQEAgLTEwNiw3ICYjNDM7MTA2LDcgQEAgaW50IGl3bF9tbGRfYW1wZHVfcnhfc3RvcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCiBlbnVtIGl3bF9tbGRfcmVvcmRlcl9yZXN1bHQKIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCi0JCWludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKJiM0MzsJCWludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKTsKIAogdm9pZCBpd2xfbWxkX2hhbmRsZV9mcmFtZV9yZWxlYXNlX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYwppbmRleCAyNjk0MzlkNzg5ZjQ2Li4wMmJkZjZjY2JjZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMKQEAgLTQ3LDcgJiM0Mzs0Nyw4IEBAIGl3bF9tbGRfZmlsbF9waHlfZGF0YV9mcm9tX21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgIGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKJiM0MzsJCQkJICAgaW50IHF1ZXVlLAomIzQzOwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwpAQCAtNzEsMTMgJiM0Mzs3MiwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiAwOwogCiAJLyogaWYgd2UgYXJlIGhlcmUgLSB0aGlzIGZvciBzdXJlIGlzIGVpdGhlciBDQ01QIG9yIEdDTVAgKi8KLQlpZiAoIXN0YSkgewomIzQzOwlpZiAoIWxpbmtfc3RhKSB7CiAJCUlXTF9ERUJVR19EUk9QKG1sZCwKIAkJCSAgICAgICAmIzM0O2V4cGVjdGVkIGh3LWRlY3J5cHRlZCB1bmljYXN0IGZyYW1lIGZvciBzdGF0aW9uXG4mIzM0Oyk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQltbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOwomIzQzOwltbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS0mZ3Q7c3RhKTsKIAogCWV4dGl2ID0gKHU4ICopaGRyICYjNDM7IGllZWU4MDIxMV9oZHJsZW4oaGRyLSZndDtmcmFtZV9jb250cm9sKTsKIAlrZXlpZHggPSBleHRpdlszXSAmZ3Q7Jmd0OyA2OwpAQCAtMTE5LDE3ICYjNDM7MTIwLDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHZvaWQgaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLAogCQkJCSAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKJiM0MzsJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSkKIHsKIAlLVU5JVF9TVEFUSUNfU1RVQl9SRURJUkVDVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExLAotCQkJCSAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTsKJiM0MzsJCQkJICAgbWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7CiAKLQlpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIHN0YSkpKSB7CiYjNDM7CWlmICh1bmxpa2VseShpd2xfbWxkX2NoZWNrX3BuKG1sZCwgc2tiLCBxdWV1ZSwgbGlua19zdGEpKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwogCX0KIAotCWllZWU4MDIxMV9yeF9uYXBpKG1sZC0mZ3Q7aHcsIHN0YSwgc2tiLCBuYXBpKTsKJiM0MzsJaWVlZTgwMjExX3J4X25hcGkobWxkLSZndDtodywgbGlua19zdGEsIHNrYiwgbmFwaSk7CiB9CiBFWFBPUlRfU1lNQk9MX0lGX0lXTFdJRklfS1VOSVQoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSk7CiAKQEAgLTE3MjgsNyAmIzQzOzE3MjksNyBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX3VwZGF0ZV9sYXN0X3J4X3RpbWVzdGFtcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCB1OCBiYWlkKQogICogU2V0cyAqZHJvcCB0byB0cnVlIGlmIHRoZSBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQuCiAgKiBSZXR1cm5zIHRoZSBzdGF0aW9uIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4KICAqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhICoKJiM0MztzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqCiBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgY29uc3Qgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKm1wZHVfZGVzYywKQEAgLTE3NjQsMTEgJiM0MzsxNzY1LDYgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCiAJcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAKLQlpZiAobGlua19zdGEgJmFtcDsmYW1wOyBzdGEtJmd0O3ZhbGlkX2xpbmtzKSB7Ci0JCXJ4X3N0YXR1cy0mZ3Q7bGlua192YWxpZCA9IHRydWU7Ci0JCXJ4X3N0YXR1cy0mZ3Q7bGlua19pZCA9IGxpbmtfc3RhLSZndDtsaW5rX2lkOwotCX0KLQogCS8qIGZpbGwgY2hlY2tzdW0gKi8KIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLSZndDtmcmFtZV9jb250cm9sKSAmYW1wOyZhbXA7CiAJICAgIHBrdC0mZ3Q7bGVuX25fZmxhZ3MgJmFtcDsgY3B1X3RvX2xlMzIoRkhfUlNDU1JfUlBBX0VOKSkgewpAQCAtMTgwMywxMCAmIzQzOzE3OTksMTAgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCQkJCSAgICBxdWV1ZSk7CiAJfQogCi0JcmV0dXJuIHN0YTsKJiM0MzsJcmV0dXJuIGxpbmtfc3RhOwogfQogCi1zdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiYjNDM7c3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsCiAJCQkJdTMyIG1wZHVfc3RhdHVzLApAQCAtMTgyMCw3ICYjNDM7MTgxNiw2IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXk7CiAJY29uc3QgdTggKmZyYW1lID0gKHZvaWQgKiloZHI7CiAJY29uc3QgdTggKm1taWU7Ci0JdTggbGlua19pZDsKIAogCWlmICgobXBkdV9zdGF0dXMgJmFtcDsgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19NQVNLKSA9PQogCSAgICAgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19OT05FKQpAQCAtMTgzNiwxMCAmIzQzOzE4MzEsMTAgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCWlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItJmd0O2ZyYW1lX2NvbnRyb2wpKQogCQlyZXR1cm4gMDsKIAotCWlmICghc3RhKQomIzQzOwlpZiAoIWxpbmtfc3RhKQogCQlyZXR1cm4gLTE7CiAKLQltbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOwomIzQzOwltbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS0mZ3Q7c3RhKTsKIAltbGRfdmlmID0gaXdsX21sZF92aWZfZnJvbV9tYWM4MDIxMShtbGRfc3RhLSZndDt2aWYpOwogCiAJLyoga2V5IG1pc21hdGNoIC0gd2lsbCBhbHNvIHJlcG9ydCAhTUlDX09LIGJ1dCB3ZSBzaG91bGRuJiMzOTt0IGNvdW50IGl0ICovCkBAIC0xODUzLDggJiM0MzsxODQ4LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQlyZXR1cm4gMDsKIAl9CiAKLQlsaW5rX2lkID0gcnhfc3RhdHVzLSZndDtsaW5rX3ZhbGlkID8gcnhfc3RhdHVzLSZndDtsaW5rX2lkIDogMDsKLQlsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtJmd0O2xpbmtbbGlua19pZF0pOwomIzQzOwlsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtJmd0O2xpbmtbbGlua19zdGEtJmd0O2xpbmtfaWRdKTsKIAlpZiAoV0FSTl9PTl9PTkNFKCFsaW5rKSkKIAkJcmV0dXJuIC0xOwogCkBAIC0xOTA1LDcgJiM0MzsxODk5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogfQogCiBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiYjNDM7CQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKIAkJCSAgICAgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MsIGludCBxdWV1ZSwKQEAgLTE5MTUsNyAmIzQzOzE5MDksNyBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsCiAKIAlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLSZndDtmcmFtZV9jb250cm9sKSAmYW1wOyZhbXA7CiAJCSAgICAgIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkpKQotCQlyZXR1cm4gaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLAomIzQzOwkJcmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLAogCQkJCQkgICAgbGUxNl90b19jcHUoZGVzYy0mZ3Q7bXBkdV9sZW4pKTsKIAogCWlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLSZndDtmcmFtZV9jb250cm9sKSB8fApAQCAtMjAyMyw3ICYjNDM7MjAxNyw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKIAlzdHJ1Y3QgaXdsX21sZF9yeF9waHlfZGF0YSBwaHlfZGF0YSA9IHt9OwogCXN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MgPSAodm9pZCAqKXBrdC0mZ3Q7ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IG1wZHVfZGVzY19zaXplID0gc2l6ZW9mKCptcGR1X2Rlc2MpOwpAQCAtMjA4Niw3ICYjNDM7MjA4MCw4IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLCAmYW1wO2Ryb3ApOwomIzQzOwlsaW5rX3N0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLAomIzQzOwkJCQkgICAgICAgJmFtcDtkcm9wKTsKIAlpZiAoZHJvcCkKIAkJZ290byBkcm9wOwogCkBAIC0yMTI3LDcgJiM0MzsyMTIyLDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCiAJaXdsX21sZF9yeF9maWxsX3N0YXR1cyhtbGQsIGxpbmtfaWQsIGhkciwgc2tiLCAmYW1wO3BoeV9kYXRhKTsKIAotCWlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIHN0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsCiYjNDM7CWlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSwKIAkJCSAgICAgIGxlMzJfdG9fY3B1KHBrdC0mZ3Q7bGVuX25fZmxhZ3MpLCAmYW1wO2NyeXB0b19sZW4pKQogCQlnb3RvIGRyb3A7CiAKQEAgLTIxNDAsNyAmIzQzOzIxMzUsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJaWYgKGl3bF9tbGRfdGltZV9zeW5jX2ZyYW1lKG1sZCwgc2tiLCBoZHItJmd0O2FkZHIyKSkKIAkJZ290byBvdXQ7CiAKLQlyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTsKJiM0MzsJcmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBuYXBpLCBxdWV1ZSwgbGlua19zdGEsIHNrYiwKJiM0MzsJCQkJICAgICAgbXBkdV9kZXNjKTsKIAlzd2l0Y2ggKHJlb3JkZXJfcmVzKSB7CiAJY2FzZSBJV0xfTUxEX1BBU1NfU0tCOgogCQlicmVhazsKQEAgLTIxNTMsNyAmIzQzOzIxNDksNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTsKJiM0MzsJaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIGxpbmtfc3RhKTsKIAogCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaAppbmRleCA1NzNiODljM2M5YzYxLi5iMDhjNWFkZTNkYjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmgKQEAgLTY5LDcgJiM0Mzs2OSw3IEBAIHZvaWQgaXdsX21sZF9oYW5kbGVfcnNjX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsCiB2b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCwKIAkJCQkgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOwomIzQzOwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKTsKIAogdm9pZCBpd2xfbWxkX2hhbmRsZV9waHlfYWlyX3NuaWZmZXJfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCwKIAkJCQkJICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jCmluZGV4IDI5YjAyNDhjZWMzZGYuLmU5ZWZlMjk5NmYwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jCkBAIC0yLDcgJiM0MzsyLDcgQEAKIC8qCiAgKiBLVW5pdCB0ZXN0cyBmb3IgY2hhbm5lbCBoZWxwZXIgZnVuY3Rpb25zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbgogICovCiAjaW5jbHVkZSAmbHQ7a3VuaXQvdGVzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2t1bml0L3N0YXRpY19zdHViLmgmZ3Q7CkBAIC00NDEsNyAmIzQzOzQ0MSw3IEBAIHN0YXRpYyB2b2lkCiBmYWtlX2l3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCwKIAkJCQkgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiYjNDM7CQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpCiB7CiAJX19za2JfcXVldWVfdGFpbCgmYW1wO2dfcmVsZWFzZWRfc2ticywgc2tiKTsKIAlnX251bV9yZWxlYXNlZF9za2JzJiM0MzsmIzQzOzsKQEAgLTYzMCw3ICYjNDM7NjMwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9yZW9yZGVyX2J1ZmZlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJbXBkdV9kZXNjID0gc2V0dXBfbXBkdV9kZXNjKCk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JcmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7CiYjNDM7CXJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgTlVMTCwgUVVFVUUsICZhbXA7c3RhLSZndDtkZWZsaW5rLCBza2IsCiYjNDM7CQkJCSAgICAgIG1wZHVfZGVzYyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmVvcmRlcl9yZXMsIHBhcmFtLSZndDtleHBlY3RlZC5yZW9yZGVyX3Jlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYwppbmRleCBhYjFlYjJlYjBjM2NkLi44YzE5N2EwOTBjMmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMKQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSwKIAkJCQlmcmFnbGVuLCByeGItJmd0O3RydWVzaXplKTsKIAl9CiAKLQlpZWVlODAyMTFfcnhfbmFwaShtdm0tJmd0O2h3LCBzdGEsIHNrYiwgbmFwaSk7CiYjNDM7CWllZWU4MDIxMV9yeF9uYXBpKG12bS0mZ3Q7aHcsIHN0YSA/ICZhbXA7c3RhLSZndDtkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYwppbmRleCA3ZjBiNGY1ZGFhMjE0Li44YzQwMDlkM2EwMGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jCkBAIC0xLDYgJiM0MzsxLDYgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE4LTIwMjUgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBJbnRlbCBNb2JpbGUgQ29tbXVuaWNhdGlvbnMgR21iSAogICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgSW50ZWwgRGV1dHNjaGxhbmQgR21iSAogICovCkBAIC0yNDMsNyAmIzQzOzI0Myw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSwKIAkJcmV0dXJuOwogCX0KIAotCWllZWU4MDIxMV9yeF9uYXBpKG12bS0mZ3Q7aHcsIHN0YSwgc2tiLCBuYXBpKTsKJiM0MzsJaWVlZTgwMjExX3J4X25hcGkobXZtLSZndDtodywgc3RhID8gJmFtcDtzdGEtJmd0O2RlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpOwogfQogCiBzdGF0aWMgYm9vbCBpd2xfbXZtX3VzZWRfYXZlcmFnZV9lbmVyZ3koc3RydWN0IGl3bF9tdm0gKm12bSwKQEAgLTI1MjgsNyAmIzQzOzI1MjgsNyBAQCB2b2lkIGl3bF9tdm1fcnhfbW9uaXRvcl9ub19kYXRhKHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWVlZTgwMjExX3J4X25hcGkobXZtLSZndDtodywgc3RhLCBza2IsIG5hcGkpOwomIzQzOwlpZWVlODAyMTFfcnhfbmFwaShtdm0tJmd0O2h3LCBzdGEgPyAmYW1wO3N0YS0mZ3Q7ZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYwppbmRleCBhYmJlNjVjYmNkODllLi4zZGEwNmE1NTkxM2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jCkBAIC0xMjU1LDcgJiM0MzsxMjU1LDcgQEAgRVhQT1JUX1NZTUJPTChtdDc2X3J4X3NpZ25hbCk7CiBzdGF0aWMgdm9pZAogbXQ3Nl9yeF9jb252ZXJ0KHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICoqaHcsCi0JCXN0cnVjdCBpZWVlODAyMTFfc3RhICoqc3RhKQomIzQzOwkJc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqKmxpbmtfc3RhKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gbXQ3Nl9za2JfZ2V0X2hkcihza2IpOwpAQCAtMTMwMiwxMSAmIzQzOzEzMDIsMTUgQEAgbXQ3Nl9yeF9jb252ZXJ0KHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgICBzaXplb2YobXN0YXQuY2hhaW5fc2lnbmFsKSk7CiAKIAlpZiAobXN0YXQud2NpZCkgewotCQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSBtc3RhdC53Y2lkLSZndDtsaW5rX3ZhbGlkOwotCQlzdGF0dXMtJmd0O2xpbmtfaWQgPSBtc3RhdC53Y2lkLSZndDtsaW5rX2lkOwomIzQzOwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpOwomIzQzOwomIzQzOwkJaWYgKG1zdGF0LndjaWQtJmd0O2xpbmtfdmFsaWQpCiYjNDM7CQkJKmxpbmtfc3RhID0KJiM0MzsJCQkJcmN1X2RlcmVmZXJlbmNlKHN0YS0mZ3Q7bGlua1ttc3RhdC53Y2lkLSZndDtsaW5rX2lkXSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJKmxpbmtfc3RhID0gJmFtcDtzdGEtJmd0O2RlZmxpbms7CiAJfQogCi0JKnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpOwogCSpodyA9IG10NzZfcGh5X2h3KGRldiwgbXN0YXQucGh5X2lkeCk7CiB9CiAKQEAgLTE1MzAsNyAmIzQzOzE1MzQsNyBAQCBtdDc2X2NoZWNrX3N0YShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLAogCQkgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDsKIAlMSVNUX0hFQUQobGlzdCk7CkBAIC0xNTQxLDggJiM0MzsxNTQ1LDggQEAgdm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsCiAKIAkJbXQ3Nl9jaGVja19jY21wX3BuKHNrYik7CiAJCXNrYl9zaGluZm8oc2tiKS0mZ3Q7ZnJhZ19saXN0ID0gTlVMTDsKLQkJbXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCAmYW1wO2h3LCAmYW1wO3N0YSk7Ci0JCWllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgJmFtcDtsaXN0KTsKJiM0MzsJCW10NzZfcnhfY29udmVydChkZXYsIHNrYiwgJmFtcDtodywgJmFtcDtsaW5rX3N0YSk7CiYjNDM7CQlpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgJmFtcDtsaXN0KTsKIAogCQkvKiBzdWJzZXF1ZW50IGFtc2R1IGZyYW1lcyAqLwogCQl3aGlsZSAobnNrYikgewpAQCAtMTU1MCw4ICYjNDM7MTU1NCw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLAogCQkJbnNrYiA9IG5za2ItJmd0O25leHQ7CiAJCQlza2ItJmd0O25leHQgPSBOVUxMOwogCi0JCQltdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsICZhbXA7aHcsICZhbXA7c3RhKTsKLQkJCWllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgJmFtcDtsaXN0KTsKJiM0MzsJCQltdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsICZhbXA7aHcsICZhbXA7bGlua19zdGEpOwomIzQzOwkJCWllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCAmYW1wO2xpc3QpOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7ZGV2LSZndDtyeF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmMKaW5kZXggMzk3ZWJiZmNhYzA5YS4uNDU0ZDg3NmFlYjg4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmMKQEAgLTMwNzMsMTAgJiM0MzszMDczLDggQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywKIAlzdHJ1Y3QgcnR3ODlfdmlmICpydHd2aWYgPSB2aWZfdG9fcnR3dmlmKHZpZik7CiAJc3RydWN0IHJ0dzg5X3J4X2Rlc2NfaW5mbyAqZGVzY19pbmZvID0gaXRlcl9kYXRhLSZndDtkZXNjX2luZm87CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGl0ZXJfZGF0YS0mZ3Q7c2tiOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhOwogCXN0cnVjdCBydHc4OV9yeF9waHlfcHBkdSAqcGh5X3BwZHUgPSBpdGVyX2RhdGEtJmd0O3BoeV9wcGR1OwotCWJvb2wgaXNfbWxkID0gaWVlZTgwMjExX3ZpZl9pc19tbGQodmlmKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZjsKIAlzdHJ1Y3QgcnR3ODlfdmlmX2xpbmsgKnJ0d3ZpZl9saW5rOwogCWNvbnN0IHU4ICpic3NpZCA9IGl0ZXJfZGF0YS0mZ3Q7YnNzaWQ7CkBAIC0zMTEwLDExICYjNDM7MzEwOCw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsCiAJaWYgKCFldGhlcl9hZGRyX2VxdWFsKHRhcmdldF9ic3NpZCwgYnNzaWQpKQogCQlnb3RvIG91dDsKIAotCWlmIChpc19tbGQpIHsKLQkJcnhfc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gdHJ1ZTsKLQkJcnhfc3RhdHVzLSZndDtsaW5rX2lkID0gcnR3dmlmX2xpbmstJmd0O2xpbmtfaWQ7Ci0JfQotCiAJYmIgPSBydHc4OV9nZXRfYmJfY3R4KHJ0d2RldiwgcnR3dmlmX2xpbmstJmd0O3BoeV9pZHgpOwogCXBrdF9zdGF0ID0gJmFtcDtiYi0mZ3Q7Y3VyX3BrdF9zdGF0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCmluZGV4IDAyYjZkODFjY2NkMTEuLmEwZDUxOWNkOWM0ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCkBAIC0xODgwLDkgJiM0MzsxODgwLDYgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fcngoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsCiAJCQkJc3AtJmd0O2FjdGl2ZV9saW5rc19yeCAmYW1wOz0gfkJJVChsaW5rX2lkKTsKIAkJCWVsc2UKIAkJCQlzcC0mZ3Q7YWN0aXZlX2xpbmtzX3J4IHw9IEJJVChsaW5rX2lkKTsKLQotCQkJcnhfc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gdHJ1ZTsKLQkJCXJ4X3N0YXR1cy0mZ3Q7bGlua19pZCA9IGxpbmtfaWQ7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggOTdjMTZkNGZmMTI3MS4uNDM2NDc4ZGFmNTU5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC00MDA5LDYgJiM0Mzs0MDA5LDcgQEAgc3RydWN0IGNmZzgwMjExX3VwZGF0ZV9mdF9pZXNfcGFyYW1zIHsKICAqIEBsaW5rX2lkOiBmb3IgTUxPLCB0aGUgbGluayBJRCB0byB0cmFuc21pdCBvbiwgLTEgaWYgbm90IGdpdmVuOyBub3RlCiAgKgl0aGF0IHRoZSBsaW5rIElEIGlzbiYjMzk7dCB2YWxpZGF0ZWQgKG11Y2gpLCBpdCYjMzk7cyBpbiByYW5nZSBidXQgdGhlCiAgKglsaW5rIG1pZ2h0IG5vdCBleGlzdCAob3IgYmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIgU1RBKQomIzQzOyAqIEBub19zdGE6IHNldCBpZiB0aGUgZnJhbWUgc2hvdWxkIG5vdCBiZSB0cmFuc21pdHRlZCB1c2luZyBhbiBleGlzdGluZyBTVEEKICAqLwogc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CkBAIC00MDIxLDYgJiM0Mzs0MDIyLDcgQEAgc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHsKIAlpbnQgbl9jc2Ffb2Zmc2V0czsKIAljb25zdCB1MTYgKmNzYV9vZmZzZXRzOwogCWludCBsaW5rX2lkOwomIzQzOwlib29sIG5vX3N0YTsKIH07CiAKIC8qKgpAQCAtOTUwMSw2ICYjNDM7OTUwMyw3IEBAIHZvaWQgY2ZnODAyMTFfY29ubl9mYWlsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLAogICogQGZsYWdzOiBmbGFncywgYXMgZGVmaW5lZCBpbiAmYW1wO2VudW0gbmw4MDIxMV9yeG1nbXRfZmxhZ3MKICAqIEByeF90c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBmcmFtZSBSWCBpbiBuYW5vc2Vjb25kcwogICogQGFja190c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBhY2sgVFggaW4gbmFub3NlY29uZHMKJiM0MzsgKiBAbm9fc3RhOiBzZXQgaWYgbm8gc3RhdGlvbiBpcyBrbm93biBmb3IgdGhlIGZyYW1lIChyZWxldmFudCBmb3IgTUxEKQogICovCiBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7CiAJaW50IGZyZXE7CkBAIC05NTEyLDYgJiM0Mzs5NTE1LDcgQEAgc3RydWN0IGNmZzgwMjExX3J4X2luZm8gewogCXUzMiBmbGFnczsKIAl1NjQgcnhfdHN0YW1wOwogCXU2NCBhY2tfdHN0YW1wOwomIzQzOwlib29sIG5vX3N0YTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKaW5kZXggOWQxZmFjNmU4MDgyOS4uN2FhZTcyOGU5NmQ4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC0xNzcwLDEwICYjNDM7MTc3MCw5IEBAIGVudW0gbWFjODAyMTFfcnhfZW5jb2RpbmcgewogICogQGFtcGR1X3JlZmVyZW5jZTogQS1NUERVIHJlZmVyZW5jZSBudW1iZXIsIG11c3QgYmUgYSBkaWZmZXJlbnQgdmFsdWUgZm9yCiAgKgllYWNoIEEtTVBEVSBidXQgdGhlIHNhbWUgZm9yIGVhY2ggc3ViZnJhbWUgd2l0aGluIG9uZSBBLU1QRFUKICAqIEB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU6IHJhZGlvdGFwIHR5cGUgb2YgdGhlIDAtbGVuZ3RoIFBTRFUKLSAqIEBsaW5rX3ZhbGlkOiBpZiB0aGUgbGluayB3aGljaCBpcyBpZGVudGlmaWVkIGJ5IEBsaW5rX2lkIGlzIHZhbGlkLiBUaGlzIGZsYWcKLSAqCWlzIHNldCBvbmx5IHdoZW4gY29ubmVjdGlvbiBpcyBNTE8uCi0gKiBAbGlua19pZDogaWQgb2YgdGhlIGxpbmsgdXNlZCB0byByZWNlaXZlIHRoZSBwYWNrZXQuIFRoaXMgaXMgdXNlZCBhbG9uZyB3aXRoCi0gKglAbGlua192YWxpZC4KJiM0MzsgKiBAbGlua19pZDogaWQgb2YgdGhlIGxpbmsgdXNlZCB0byByZWNlaXZlIHRoZSBwYWNrZXQuIFNldCBhbmQgdXNlZCBieQomIzQzOyAqCW1hYzgwMjExIGludGVybmFsbHksIGl0IHVzZXMgQGZyZXEgc2V0IGJ5IHRoZSBkcml2ZXIgdG8gaWRlbnRpZnkgdGhlCiYjNDM7ICoJY29ycmVjdCBsaW5rIHBlciB2aWYuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHsKIAl1NjQgbWFjdGltZTsKQEAgLTE4MTMsNyAmIzQzOzE4MTIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyB7CiAJdTggY2hhaW5zOwogCXM4IGNoYWluX3NpZ25hbFtJRUVFODAyMTFfTUFYX0NIQUlOU107CiAJdTggemVyb19sZW5ndGhfcHNkdV90eXBlOwotCXU4IGxpbmtfdmFsaWQ6MSwgbGlua19pZDo0OwomIzQzOwl1OCBsaW5rX2lkOjQ7CiB9OwogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykgJmx0Oz0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBza19idWZmLCBjYikpOwpAQCAtNTM4OSwxNCAmIzQzOzUzODgsMTggQEAgdm9pZCBpZWVlODAyMTFfcmVzdGFydF9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aAogICogaWVlZTgwMjExX3R4X3N0YXR1c19za2IoKSBvciBpZWVlODAyMTFfdHhfc3RhdHVzX25pKCkuCiAgKgomIzQzOyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvbgomIzQzOyAqIGhhcyB0byBiZSBwcm92aWRlZCBhbmQgdGhlIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBtYXkgYmUgc2tpcHBlZC4KJiM0MzsgKgogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZCBhbmQgUkNVIHJlYWQgbG9jawogICoKICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvbgotICogQHN0YTogdGhlIHN0YXRpb24gdGhlIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTAomIzQzOyAqIEBsaW5rX3N0YTogdGhlIGxpbmsgc3RhdGlvbiB0aGUgZGF0YSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTEwKICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsCiAgKiBAbGlzdDogdGhlIGRlc3RpbmF0aW9uIGxpc3QKICAqLwotdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAomIzQzOwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLAogCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CiAKIC8qKgpAQCAtNTQxNCwxNCAmIzQzOzU0MTcsMTggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKICAqIG1peGVkIGZvciBhIHNpbmdsZSBoYXJkd2FyZS4gTXVzdCBub3QgcnVuIGNvbmN1cnJlbnRseSB3aXRoCiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS4KICAqCiYjNDM7ICogRm9yIGRhdGEgZnJhbWVzLCB3aGVuIGhhcmR3YXJlIGhhcyBkb25lIGFkZHJlc3MgdHJhbnNsYXRpb24sIGEgbGluayBzdGF0aW9uCiYjNDM7ICogaGFzIHRvIGJlIHByb3ZpZGVkIGFuZCB0aGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uIG1heSBiZSBza2lwcGVkLgomIzQzOyAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggQkhzIGRpc2FibGVkLgogICoKICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvbgotICogQHN0YTogdGhlIHN0YXRpb24gdGhlIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTAomIzQzOyAqIEBsaW5rX3N0YTogdGhlIGxpbmsgc3RhdGlvbiB0aGUgZGF0YSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTEwKICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsCiAgKiBAbmFwaTogdGhlIE5BUEkgY29udGV4dAogICovCi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzO3ZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpOwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCmluZGV4IDAyMDM4N2Q3NjQxMjIuLjQ2NTNmOGYyNmVlNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaApAQCAtMzE4NSw2ICYjNDM7MzE4NSwxMSBAQCBlbnVtIG5sODAyMTFfY29tbWFuZHMgewogICoJVGhlIGFnZ3JlZ2F0ZWQgbWVzc2FnZSBhbHdheXMgcHJlY2VkZXMgdGhlIHBlci1saW5rIG1lc3NhZ2VzIGZvciB0aGUKICAqCXNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLgogICoKJiM0MzsgKiBATkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEE6IFZhbGlkIGZvciBOTDgwMjExX0NNRF9GUkFNRSB0byBkZW5vdGUgdGhhdAomIzQzOyAqCXRoZSBrZXJuZWwgaGFkIG5vIHN0YXRpb24gZm9yIGEgcmVjZWl2ZWQgZnJhbWUgb3Igc2hvdWxkIG5vdCB1c2UgYQomIzQzOyAqCWtub3duIHN0YXRpb24gdG8gdHJhbnNtaXQgYSBmcmFtZS4gVGhpcyBpcyByZWxldmFudCB0byBrbm93IHdoZXRoZXIKJiM0MzsgKglNTEQgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXBwZW5lZCBvciB0byBkaXNhYmxlIGl0IHdoZW4gc2VuZGluZyBhIGZyYW1lLgomIzQzOyAqCiAgKiBATlVNX05MODAyMTFfQVRUUjogdG90YWwgbnVtYmVyIG9mIG5sODAyMTFfYXR0cnMgYXZhaWxhYmxlCiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkCiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCkBAIC0zNzg1LDYgJiM0MzszNzkwLDggQEAgZW51bSBubDgwMjExX2F0dHJzIHsKIAogCU5MODAyMTFfQVRUUl9TVEFfRFVNUF9MSU5LX1NUQVRTLAogCiYjNDM7CU5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBLAomIzQzOwogCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLwogCiAJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguYwppbmRleCA0ODMzYjQ2NzcwYjYyLi5kZDhhMTFlZjZlNTJiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2FnZy10eC5jCkBAIC05OCw3ICYjNDM7OTgsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAogCWlmIChzdGEtJmd0O3N0YS5kZWZsaW5rLmhlX2NhcC5oYXNfaGUpCiAJCWllZWU4MDIxMV9hZGRfYWRkYmFleHQoc2tiLCAwLCBhZ2dfc2l6ZSk7CiAKLQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCB0aWQsIC0xKTsKJiM0MzsJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbikKQEAgLTEyNyw3ICYjNDM7MTI3LDcgQEAgdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKQogCiAJSUVFRTgwMjExX1NLQl9DQihza2IpLSZndDtmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHwKIAkJCQkJSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOwotCWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHRpZCwgLTEpOwomIzQzOwlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCB0aWQsIC0xKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NlbmRfYmFyKTsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FwLmMgYi9uZXQvbWFjODAyMTEvYXAuYwppbmRleCBlN2FjOTljNWEyMmViLi5mZTI1NTg5MWMzNWYwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvYXAuYwpAQCAtODIsOSAmIzQzOzgyLDYgQEAgaWVlZTgwMjExX3J4X2VtbF9vcF9tb2RlX25vdGlmKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCWlmICghaWZ0X2V4dF9jYXBhKQogCQlyZXR1cm47CiAKLQlpZiAoIXN0YXR1cy0mZ3Q7bGlua192YWxpZCkKLQkJcmV0dXJuOwotCiAJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC0mZ3Q7c2EpOwogCWlmICghc3RhKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jCmluZGV4IGUxZTFiN2Y4MmYzZmUuLmM1YzIxMTNmYTRmNzkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9odC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9odC5jCkBAIC01NDUsNyAmIzQzOzU0NSw3IEBAIGludCBpZWVlODAyMTFfc2VuZF9zbXBzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAlpbmZvLSZndDtzdGF0dXNfZGF0YSA9IElFRUU4MDIxMV9TVEFUVVNfVFlQRV9TTVBTIHwKIAkJCSAgICB1MTZfZW5jb2RlX2JpdHMoc3RhdHVzX2xpbmtfaWQgJmx0OyZsdDsgMiB8IHNtcHMsCiAJCQkJCSAgICBJRUVFODAyMTFfU1RBVFVTX1NVQkRBVEFfTUFTSyk7Ci0JaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7CiYjNDM7CWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIDcsIGxpbmtfaWQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IDU3NjFlOTYyMTQ5MTQuLjBkOGViMDQyODg3YTkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC0yNDYzLDcgJiM0MzsyNDYzLDggQEAgdm9pZCBpZWVlODAyMTFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLAomIzQzOwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsCiYjNDM7CQkJCSBpbnQgdGlkLCBpbnQgbGlua19pZCwKIAkJCQkgZW51bSBubDgwMjExX2JhbmQgYmFuZCk7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfcmVxdWlyZV9lbmNyeXB0ZWRfYXNzb2MoX19sZTE2IGZjLApAQCAtMjQ4MywxOCAmIzQzOzI0ODQsMjAgQEAgaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgZW51bSBubDgwMjExX2JhbmQgYmFuZCkKIHsKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHRpZCwgLTEsIGJhbmQpOwomIzQzOwlfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgRVJSX1BUUigtRU5PRU5UKSwKJiM0MzsJCQkJICAgIHRpZCwgLTEsIGJhbmQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCk7CiYjNDM7CQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkgIGludCB0aWQsIGludCBsaW5rX2lkKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJLyogU2VuZCBhbGwgaW50ZXJuYWwgbWdtdCBmcmFtZXMgb24gVk8uIEFjY29yZGluZ2x5IHNldCBUSUQgdG8gNy4gKi8KLQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCAtMSk7CiYjNDM7CWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIDcsIC0xKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IDQzNDYwYTcwNWE2YmQuLmEwYjIxNGRiYjhhZjggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0xNjczLDExICYjNDM7MTY3Myw4IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pZmFjZV9wcm9jZXNzX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQlicmVhazsKIAogCQkJc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7Ci0JCQlpZiAoIXN0YXR1cy0mZ3Q7bGlua192YWxpZCkKLQkJCQlsaW5rX3N0YSA9ICZhbXA7c3RhLSZndDtkZWZsaW5rOwotCQkJZWxzZQotCQkJCWxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzdGEtJmd0O2xpbmtbc3RhdHVzLSZndDtsaW5rX2lkXSwKLQkJCQkJCQlsb2NrZGVwX2lzX2hlbGQoJmFtcDtsb2NhbC0mZ3Q7aHcud2lwaHktJmd0O210eCkpOwomIzQzOwkJCWxpbmtfc3RhID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtJmd0O2h3LndpcGh5LAomIzQzOwkJCQkJCSAgICAgc3RhLSZndDtsaW5rW3N0YXR1cy0mZ3Q7bGlua19pZF0pOwogCQkJaWYgKGxpbmtfc3RhKQogCQkJCWllZWU4MDIxMV9odF9oYW5kbGVfY2hhbndpZHRoX25vdGlmKGxvY2FsLCBzZGF0YSwgc3RhLAogCQkJCQkJCQkgICAgbGlua19zdGEsIGNoYW53aWR0aCwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IGY1MTE2N2YwZmM0NmQuLjM2MTc3NWZiOTMxZWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMTE4MzEsMTIgJiM0MzsxMTgzMSwxMCBAQCB2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCXJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItJmd0O2NiOwogCWZjID0gbGUxNl90b19jcHUobWdtdC0mZ3Q7ZnJhbWVfY29udHJvbCk7CiAKLQlpZiAocnhfc3RhdHVzLSZndDtsaW5rX3ZhbGlkKSB7Ci0JCWxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS0mZ3Q7bGlua1tyeF9zdGF0dXMtJmd0O2xpbmtfaWRdLAotCQkJCQkgc2RhdGEpOwotCQlpZiAoIWxpbmspCi0JCQlyZXR1cm47Ci0JfQomIzQzOwlsaW5rID0gc2RhdGFfZGVyZWZlcmVuY2Uoc2RhdGEtJmd0O2xpbmtbcnhfc3RhdHVzLSZndDtsaW5rX2lkXSwKJiM0MzsJCQkJIHNkYXRhKTsKJiM0MzsJaWYgKCFsaW5rKQomIzQzOwkJcmV0dXJuOwogCiAJc3dpdGNoIChmYyAmYW1wOyBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jCmluZGV4IDdhY2VmODBkNWYxZmIuLjY1MzcxMDU3NjgzMTYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYwpAQCAtODU0LDggJiM0Mzs4NTQsMTAgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJCQluZWVkX29mZmNoYW4gPSB0cnVlOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC0mZ3Q7ZGEpOwotCQltbG9fc3RhID0gc3RhICZhbXA7JmFtcDsgc3RhLSZndDtzdGEubWxvOwomIzQzOwkJaWYgKCFwYXJhbXMtJmd0O25vX3N0YSkgewomIzQzOwkJCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtJmd0O2RhKTsKJiM0MzsJCQltbG9fc3RhID0gc3RhICZhbXA7JmFtcDsgc3RhLSZndDtzdGEubWxvOwomIzQzOwkJfQogCiAJCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LSZndDtmcmFtZV9jb250cm9sKSB8fAogCQkgICAgbWdtdC0mZ3Q7dS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9QVUJMSUMgfHwKQEAgLTg4NCw3ICYjNDM7ODg2LDggQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJCSAgICAgbG9jYWwtJmd0O29wcy0mZ3Q7cmVtYWluX29uX2NoYW5uZWwgJmFtcDsmYW1wOwogCQkgICAgIG1lbWNtcChzZGF0YS0mZ3Q7dmlmLmNmZy5hcF9hZGRyLCBtZ210LSZndDtic3NpZCwgRVRIX0FMRU4pKSkgewogCQkJbmVlZF9vZmZjaGFuID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzZGF0YS0mZ3Q7dS5tZ2QuYXNzb2NpYXRlZCAmYW1wOyZhbXA7CiYjNDM7CQl9IGVsc2UgaWYgKCFwYXJhbXMtJmd0O25vX3N0YSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgc2RhdGEtJmd0O3UubWdkLmFzc29jaWF0ZWQgJmFtcDsmYW1wOwogCQkJICAgZXRoZXJfYWRkcl9lcXVhbChzZGF0YS0mZ3Q7dmlmLmNmZy5hcF9hZGRyLCBtZ210LSZndDtkYSkpIHsKIAkJCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtJmd0O2RhKTsKIAkJCW1sb19zdGEgPSBzdGEgJmFtcDsmYW1wOyBzdGEtJmd0O3N0YS5tbG87CkBAIC0xMDIyLDcgJiM0MzsxMDI1LDkgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJfQogCiAJaWYgKCFuZWVkX29mZmNoYW4pIHsKLQkJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7CiYjNDM7CQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLAomIzQzOwkJCQkgICAgIHBhcmFtcy0mZ3Q7bm9fc3RhID8gc3RhIDogRVJSX1BUUigtRU5PRU5UKSwKJiM0MzsJCQkJICAgICA3LCBsaW5rX2lkKTsKIAkJcmV0ID0gMDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yeC5jIGIvbmV0L21hYzgwMjExL3J4LmMKaW5kZXggNWUyNmJlOGUyN2Q4Zi4uZWQ1YTJlMDU5MDc1NyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3J4LmMKQEAgLTIyMiw0MyAmIzQzOzIyMiwyMSBAQCBpZWVlODAyMTFfcnhfcmFkaW90YXBfaGRybGVuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogfQogCiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSAgIGludCBsaW5rX2lkLAotCQkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkJCSAgIHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSwKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7Ci0KLQlpZiAobGlua19pZCAmZ3Q7PSAwKSB7Ci0JCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDE7Ci0JCXN0YXR1cy0mZ3Q7bGlua19pZCA9IGxpbmtfaWQ7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gMDsKLQl9Ci0KIAlza2JfcXVldWVfdGFpbCgmYW1wO3NkYXRhLSZndDtza2JfcXVldWUsIHNrYik7CiAJd2lwaHlfd29ya19xdWV1ZShzZGF0YS0mZ3Q7bG9jYWwtJmd0O2h3LndpcGh5LCAmYW1wO3NkYXRhLSZndDt3b3JrKTsKLQlpZiAoc3RhKSB7Ci0JCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YV9pbmZvOwotCi0JCWlmIChsaW5rX2lkICZndDs9IDApIHsKLQkJCWxpbmtfc3RhX2luZm8gPSByY3VfZGVyZWZlcmVuY2Uoc3RhLSZndDtsaW5rW2xpbmtfaWRdKTsKLQkJCWlmICghbGlua19zdGFfaW5mbykKLQkJCQlyZXR1cm47Ci0JCX0gZWxzZSB7Ci0JCQlsaW5rX3N0YV9pbmZvID0gJmFtcDtzdGEtJmd0O2RlZmxpbms7Ci0JCX0KLQotCQlsaW5rX3N0YV9pbmZvLSZndDtyeF9zdGF0cy5wYWNrZXRzJiM0MzsmIzQzOzsKLQl9CiYjNDM7CWlmIChsaW5rX3N0YSkKJiM0MzsJCWxpbmtfc3RhLSZndDtyeF9zdGF0cy5wYWNrZXRzJiM0MzsmIzQzOzsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIGludCBsaW5rX2lkLAotCQkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEsCiYjNDM7CQkJCQkgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlza2ItJmd0O3Byb3RvY29sID0gMDsKLQlfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfaWQsIHN0YSwgc2tiKTsKJiM0MzsJX19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBsaW5rX3N0YSwgc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9tdV9taW1vX21vbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTMwMSw3ICYjNDM7Mjc5LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9tdV9taW1vX21vbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAlpZiAoIXNrYikKIAkJcmV0dXJuOwogCi0JaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgLTEsIE5VTEwsIHNrYik7CiYjNDM7CWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIE5VTEwsIHNrYik7CiB9CiAKIC8qCkBAIC0xNDk4LDcgJiM0MzsxNDc2LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X3Jlb3JkZXJfYW1wZHUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAkvKiBpZiB0aGlzIG1wZHUgaXMgZnJhZ21lbnRlZCAtIHRlcm1pbmF0ZSByeCBhZ2dyZWdhdGlvbiBzZXNzaW9uICovCiAJc2MgPSBsZTE2X3RvX2NwdShoZHItJmd0O3NlcV9jdHJsKTsKIAlpZiAoc2MgJmFtcDsgSUVFRTgwMjExX1NDVExfRlJBRykgewotCQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHJ4LSZndDtzZGF0YSwgcngtJmd0O2xpbmtfaWQsIE5VTEwsIHNrYik7CiYjNDM7CQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHJ4LSZndDtzZGF0YSwgTlVMTCwgc2tiKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjUyNCw3ICYjNDM7MjUwMiw3IEBAIGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAogIG91dDoKIAlpZWVlODAyMTFfbGVkX3J4KHJ4LSZndDtsb2NhbCk7Ci0JaWYgKHJ4LSZndDtzdGEpCiYjNDM7CWlmIChyeC0mZ3Q7bGlua19zdGEpCiAJCXJ4LSZndDtsaW5rX3N0YS0mZ3Q7cnhfc3RhdHMucGFja2V0cyYjNDM7JiM0Mzs7CiAJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQpAQCAtMzMzNSw4ICYjNDM7MzMxMyw4IEBAIGllZWU4MDIxMV9yeF9oX2RhdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAkJICAgICh0Zi0mZ3Q7YWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX0NIQU5ORUxfU1dJVENIX1JFUVVFU1QgfHwKIAkJICAgICB0Zi0mZ3Q7YWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX0NIQU5ORUxfU1dJVENIX1JFU1BPTlNFKSkgewogCQkJcngtJmd0O3NrYi0mZ3Q7cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9URExTKTsKLQkJCV9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtJmd0O2xpbmtfaWQsCi0JCQkJCQkgICAgICAgcngtJmd0O3N0YSwgcngtJmd0O3NrYik7CiYjNDM7CQkJX19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19zdGEsCiYjNDM7CQkJCQkJICAgICAgIHJ4LSZndDtza2IpOwogCQkJcmV0dXJuIFJYX1FVRVVFRDsKIAkJfQogCX0KQEAgLTM5OTEsNyAmIzQzOzM5NjksNyBAQCBpZWVlODAyMTFfcnhfaF9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAlyZXR1cm4gUlhfUVVFVUVEOwogCiAgcXVldWU6Ci0JaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtJmd0O2xpbmtfaWQsIHJ4LSZndDtzdGEsIHJ4LSZndDtza2IpOwomIzQzOwlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19zdGEsIHJ4LSZndDtza2IpOwogCXJldHVybiBSWF9RVUVVRUQ7CiB9CiAKQEAgLTQwMDUsNiAmIzQzOzM5ODMsNyBAQCBpZWVlODAyMTFfcnhfaF91c2Vyc3BhY2VfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCQkubGVuID0gcngtJmd0O3NrYi0mZ3Q7bGVuLAogCQkubGlua19pZCA9IHJ4LSZndDtsaW5rX2lkLAogCQkuaGF2ZV9saW5rX2lkID0gcngtJmd0O2xpbmtfaWQgJmd0Oz0gMCwKJiM0MzsJCS5ub19zdGEgPSAhcngtJmd0O3N0YSwKIAl9OwogCiAJLyogc2tpcCBrbm93bi1iYWQgYWN0aW9uIGZyYW1lcyBhbmQgcmV0dXJuIHRoZW0gaW4gdGhlIG5leHQgaGFuZGxlciAqLwpAQCAtNDEyNyw3ICYjNDM7NDEwNiw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbl9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAkJCQkJbG9jYWwtJmd0O2h3Lm9mZmNoYW5uZWxfdHhfaHdfcXVldWU7CiAJCX0KIAotCQlfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQocngtJmd0O3NkYXRhLCBuc2tiLCA3LCAtMSwKJiM0MzsJCV9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC0mZ3Q7c2RhdGEsIG5za2IsIHJ4LSZndDtzdGEsIDcsIC0xLAogCQkJCQkgICAgc3RhdHVzLSZndDtiYW5kKTsKIAl9CiAKQEAgLTQxNDcsNyAmIzQzOzQxMjYsNyBAQCBpZWVlODAyMTFfcnhfaF9leHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAkJcmV0dXJuIFJYX0RST1BfVV9VTkVYUEVDVEVEX0VYVF9GUkFNRTsKIAogCS8qIGZvciBub3cgb25seSBiZWFjb25zIGFyZSBleHQsIHNvIHF1ZXVlIHRoZW0gKi8KLQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19pZCwgcngtJmd0O3N0YSwgcngtJmd0O3NrYik7CiYjNDM7CWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX3N0YSwgcngtJmd0O3NrYik7CiAKIAlyZXR1cm4gUlhfUVVFVUVEOwogfQpAQCAtNDIwNCw3ICYjNDM7NDE4Myw3IEBAIGllZWU4MDIxMV9yeF9oX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAkJcmV0dXJuIFJYX0RST1BfVV9VTkhBTkRMRURfTUdNVF9TVFlQRTsKIAl9CiAKLQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19pZCwgcngtJmd0O3N0YSwgcngtJmd0O3NrYik7CiYjNDM7CWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX3N0YSwgcngtJmd0O3NrYik7CiAKIAlyZXR1cm4gUlhfUVVFVUVEOwogfQpAQCAtNDI0OCwxMiAmIzQzOzQyMjcsMjggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAJc3Bpbl9sb2NrX2JoKCZhbXA7cngtJmd0O2xvY2FsLSZndDtyeF9wYXRoX2xvY2spOwogCiAJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGZyYW1lcykpKSB7CiYjNDM7CQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiYjNDM7CiAJCS8qCi0JCSAqIGFsbCB0aGUgb3RoZXIgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzCi0JCSAqIHRoYXQgYmVsb25nIHRvIGFuIGFNUERVIHNpbmNlIHRoZXkgYXJlIG9uIHRoZQotCQkgKiBzYW1lIFRJRCBmcm9tIHRoZSBzYW1lIHN0YXRpb24KJiM0MzsJCSAqIE1vc3QgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzLiBIb3dldmVyLAomIzQzOwkJICogaW4gdGhlIGNhc2Ugb2YgcmVvcmRlcmluZyBmcmFtZXMgbWF5IGhhdmUgYXJyaXZlZAomIzQzOwkJICogb24gZGlmZmVyZW50IGxpbmtzLCBzbyBhZGp1c3QgdGhlIGxpbmtfaWQsIGxpbmsKJiM0MzsJCSAqIGFuZCBsaW5rX3N0YSBhY2NvcmRpbmdseS4KIAkJICovCiAJCXJ4LSZndDtza2IgPSBza2I7CiYjNDM7CQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoJmFtcDtyeC0mZ3Q7c2RhdGEtJmd0O3ZpZikgJmFtcDsmYW1wOwomIzQzOwkJICAgIHVubGlrZWx5KHJ4LSZndDtsaW5rX2lkICE9IHN0YXR1cy0mZ3Q7bGlua19pZCkpIHsKJiM0MzsJCQlpZiAocngtJmd0O3N0YSkgewomIzQzOwkJCQlyeC0mZ3Q7bGlua19zdGEgPQomIzQzOwkJCQkJcmN1X2RlcmVmZXJlbmNlKHJ4LSZndDtzdGEtJmd0O2xpbmtbcngtJmd0O2xpbmtfaWRdKTsKJiM0MzsKJiM0MzsJCQkJLyogTGluayBnb3QgZGlzYWJsZWQsIGp1c3QgdXNlIGRlZmxpbmsgKi8KJiM0MzsJCQkJaWYgKCFyeC0mZ3Q7bGlua19zdGEpCiYjNDM7CQkJCQlyeC0mZ3Q7bGlua19zdGEgPSAmYW1wO3J4LSZndDtzdGEtJmd0O2RlZmxpbms7CiYjNDM7CQkJfQomIzQzOwkJCXJ4LSZndDtsaW5rX2lkID0gc3RhdHVzLSZndDtsaW5rX2lkOwomIzQzOwkJCXJ4LSZndDtsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHJ4LSZndDtzZGF0YS0mZ3Q7bGlua1tzdGF0dXMtJmd0O2xpbmtfaWRdKTsKJiM0MzsJCX0KIAogCQlpZiAoV0FSTl9PTl9PTkNFKCFyeC0mZ3Q7bGluaykpIHsKIAkJCXJlcyA9IFJYX0RST1BfVV9OT19MSU5LOwpAQCAtNDMyMyw3ICYjNDM7NDMxOCwzNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiBzdGF0aWMgYm9vbAogaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IGxpbmtfaWQpCiB7Ci0JcmV0dXJuICEhKHN0YS0mZ3Q7dmFsaWRfbGlua3MgJmFtcDsgQklUKGxpbmtfaWQpKTsKJiM0MzsJaWYgKHN0YS0mZ3Q7bWxvKQomIzQzOwkJcmV0dXJuIHN0YS0mZ3Q7dmFsaWRfbGlua3MgJmFtcDsgQklUKGxpbmtfaWQpOwomIzQzOwomIzQzOwlyZXR1cm4gc3RhLSZndDtkZWZsaW5rLmxpbmtfaWQgPT0gbGlua19pZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpIHx8CiYjNDM7CSAgICAhaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKCZhbXA7bGlua19zdGEtJmd0O3N0YS0mZ3Q7c3RhLAomIzQzOwkJCQkJICAgICAgIGxpbmtfc3RhLSZndDtsaW5rX2lkKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc3RhID0gbGlua19zdGEtJmd0O3N0YTsKJiM0MzsKJiM0MzsJcngtJmd0O3N0YSA9IHN0YTsKJiM0MzsJcngtJmd0O2xvY2FsID0gc3RhLSZndDtzZGF0YS0mZ3Q7bG9jYWw7CiYjNDM7CXJ4LSZndDtsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHN0YS0mZ3Q7c2RhdGEtJmd0O2xpbmtbbGlua19zdGEtJmd0O2xpbmtfaWRdKTsKJiM0MzsJaWYgKCFyeC0mZ3Q7bGluaykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcngtJmd0O2xpbmtfaWQgPSByeC0mZ3Q7bGluay0mZ3Q7bGlua19pZDsKJiM0MzsJcngtJmd0O2xpbmtfc3RhID0gbGlua19zdGE7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LApAQCAtNDM2MCwxMSAmIzQzOzQzODIsMTMgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogCiAJaWYgKGxpbmtfaWQgJmx0OyAwKSB7CiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3J4LSZndDtzZGF0YS0mZ3Q7dmlmKSAmYW1wOyZhbXA7Ci0JCSAgICBzdGEgJmFtcDsmYW1wOyAhc3RhLSZndDtzdGEudmFsaWRfbGlua3MpCiYjNDM7CQkgICAgc3RhICZhbXA7JmFtcDsgIXN0YS0mZ3Q7c3RhLnZhbGlkX2xpbmtzKSB7CiAJCQlyeC0mZ3Q7bGluayA9CiAJCQkJcmN1X2RlcmVmZXJlbmNlKHJ4LSZndDtzZGF0YS0mZ3Q7bGlua1tzdGEtJmd0O2RlZmxpbmsubGlua19pZF0pOwotCQllbHNlCiYjNDM7CQkJcngtJmd0O2xpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHJ4LSZndDtzdGEtJmd0O2xpbmtbbGlua19pZF0pOwomIzQzOwkJfSBlbHNlIHsKIAkJCXJ4LSZndDtsaW5rID0gJmFtcDtyeC0mZ3Q7c2RhdGEtJmd0O2RlZmxpbms7CiYjNDM7CQl9CiAJfSBlbHNlIGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsocngsIGxpbmtfaWQpKSB7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC00Mzg3LDcgJiM0Mzs0NDExLDcgQEAgdm9pZCBpZWVlODAyMTFfcmVsZWFzZV9yZW9yZGVyX3RpbWVvdXQoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpCiAJc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeDsKIAlpbnQgbGlua19pZCA9IC0xOwogCi0JLyogRklYTUU6IHN0YXRpc3RpY3Mgd29uJiMzOTt0IGJlIHJpZ2h0IHdpdGggdGhpcyAqLwomIzQzOwkvKiBOT1RFOiB0aGUgY29ycmVjdCBsaW5rIFNUQSBmb3IgdGhlIGZyYW1lIGlzIHNldCBsYXRlciAqLwogCWlmIChzdGEtJmd0O3N0YS52YWxpZF9saW5rcykKIAkJbGlua19pZCA9IGZmcyhzdGEtJmd0O3N0YS52YWxpZF9saW5rcykgLSAxOwogCkBAIC00OTE0LDIwICYjNDM7NDkzOCwxNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogewogCXN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpzdGF0czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LSZndDtza2IpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gcngtJmd0O3N0YTsKLQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7CiYjNDM7CXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LSZndDtsaW5rX3N0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtJmd0O3NrYjsKIAl2b2lkICpzYSA9IHNrYi0mZ3Q7ZGF0YSAmIzQzOyBFVEhfQUxFTjsKIAl2b2lkICpkYSA9IHNrYi0mZ3Q7ZGF0YTsKIAotCWlmIChyeC0mZ3Q7bGlua19pZCAmZ3Q7PSAwKSB7Ci0JCWxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS0mZ3Q7bGlua1tyeC0mZ3Q7bGlua19pZF0pOwotCQlpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHsKLQkJCWRldl9rZnJlZV9za2IocngtJmd0O3NrYik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9IGVsc2UgewotCQlsaW5rX3N0YSA9ICZhbXA7c3RhLSZndDtkZWZsaW5rOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHsKJiM0MzsJCWRldl9rZnJlZV9za2IocngtJmd0O3NrYik7CiYjNDM7CQlyZXR1cm47CiAJfQogCiAJc3RhdHMgPSAmYW1wO2xpbmtfc3RhLSZndDtyeF9zdGF0czsKQEAgLTUxNTQsNiAmIzQzOzUxNzIsOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfaW52b2tlX2Zhc3Rfcngoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAkJZ290byBkcm9wOwogCX0KIAomIzQzOwlzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKJiM0MzsJc3RhdHVzLSZndDtsaW5rX2lkID0gcngtJmd0O2xpbmtfaWQgJmx0OyAwID8gMCA6IHJ4LSZndDtsaW5rX2lkOwomIzQzOwogCWllZWU4MDIxMV9yeF84MDIzKHJ4LCBmYXN0X3J4LCBvcmlnX2xlbik7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTUxNzgsNiAmIzQzOzUxOTksNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLSZndDtkYXRhOwogCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LSZndDtsaW5rX3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9IHJ4LSZndDtsaW5rOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzOwogCiAJcngtJmd0O3NrYiA9IHNrYjsKIApAQCAtNTIyMSw2ICYjNDM7NTI0Myw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtJmd0O3NrYi0mZ3Q7ZGF0YTsKIAl9CiAKJiM0MzsJc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LSZndDtza2IpOwomIzQzOwlzdGF0dXMtJmd0O2xpbmtfaWQgPSByeC0mZ3Q7bGlua19pZCAmbHQ7IDAgPyAwIDogcngtJmd0O2xpbmtfaWQ7CiYjNDM7CiAJaWYgKGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkpIHsKIAkJaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhyeCk7CiAJCXJldHVybiB0cnVlOwpAQCAtNTI1NiwyMiAmIzQzOzUyODEsMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogfQogCiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLAogCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfcnggKmZhc3Rfcng7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4OwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCWludCBsaW5rX2lkID0gLTE7CiAKIAltZW1zZXQoJmFtcDtyeCwgMCwgc2l6ZW9mKHJ4KSk7CiAJcnguc2tiID0gc2tiOwogCXJ4LmxvY2FsID0gbG9jYWw7CiAJcngubGlzdCA9IGxpc3Q7Ci0JcngubGlua19pZCA9IC0xOwogCiAJSTgwMl9ERUJVR19JTkMobG9jYWwtJmd0O2RvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50KTsKIApAQCAtNTI3OSwyMyAmIzQzOzUzMDEsMTUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKQogCQlnb3RvIGRyb3A7CiAKLQlpZiAoIXB1YnN0YSkKJiM0MzsJaWYgKCFsaW5rX3B1YnN0YSkKIAkJZ290byBkcm9wOwogCi0JaWYgKHN0YXR1cy0mZ3Q7bGlua192YWxpZCkKLQkJbGlua19pZCA9IHN0YXR1cy0mZ3Q7bGlua19pZDsKLQotCS8qCi0JICogVE9ETzogU2hvdWxkIHRoZSBmcmFtZSBiZSBkcm9wcGVkIGlmIHRoZSByaWdodCBsaW5rX2lkIGlzIG5vdAotCSAqIGF2YWlsYWJsZT8gT3IgbWF5IGJlIGl0IGlzIGZpbmUgaW4gdGhlIGN1cnJlbnQgZm9ybSB0byBwcm9jZWVkIHdpdGgKLQkgKiB0aGUgZnJhbWUgcHJvY2Vzc2luZyBiZWNhdXNlIHdpdGggZnJhbWUgYmVpbmcgaW4gODAyLjMgZm9ybWF0LAotCSAqIGxpbmtfaWQgaXMgdXNlZCBvbmx5IGZvciBzdGF0cyBwdXJwb3NlIGFuZCB1cGRhdGluZyB0aGUgc3RhdHMgb24KLQkgKiB0aGUgZGVmbGluayBpcyBmaW5lPwotCSAqLwotCXN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTsKLQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoJmFtcDtyeCwgc3RhLCBsaW5rX2lkKSkKJiM0MzsJc3RhID0gY29udGFpbmVyX29mKGxpbmtfcHVic3RhLSZndDtzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTsKJiM0MzsJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKCZhbXA7cngsIHN0YSwgbGlua19wdWJzdGEtJmd0O2xpbmtfaWQpKQogCQlnb3RvIGRyb3A7CiAKJiM0MzsJcngubGlua19pZCA9IGxpbmtfcHVic3RhLSZndDtsaW5rX2lkOwomIzQzOwogCWZhc3RfcnggPSByY3VfZGVyZWZlcmVuY2Uocnguc3RhLSZndDtmYXN0X3J4KTsKIAlpZiAoIWZhc3RfcngpCiAJCWdvdG8gZHJvcDsKQEAgLTUzMDcsNTkgJiM0Mzs1MzIxLDE5IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKLQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBjb25zdW1lKQomIzQzO3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKGludCBmcmVxLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaykKIHsKLQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLSZndDtkYXRhOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCWludCBsaW5rX2lkID0gLTE7Ci0KLQlpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLSZndDtmcmFtZV9jb250cm9sKSkgewotCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIE5VTEwsIC0xKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTsKLQl9CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mOwogCi0JLyoKLQkgKiBMb29rIHVwIGxpbmsgc3RhdGlvbiBmaXJzdCwgaW4gY2FzZSB0aGVyZSYjMzk7cyBhCi0JICogY2hhbmNlIHRoYXQgdGhleSBtaWdodCBoYXZlIGEgbGluayBhZGRyZXNzIHRoYXQKLQkgKiBpcyBpZGVudGljYWwgdG8gdGhlIE1MRCBhZGRyZXNzLCB0aGF0IHdheSB3ZSYjMzk7bGwKLQkgKiBoYXZlIHRoZSBsaW5rIGluZm9ybWF0aW9uIGlmIG5lZWRlZC4KLQkgKi8KLQlsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC0mZ3Q7c2RhdGEsIGhkci0mZ3Q7YWRkcjIpOwotCWlmIChsaW5rX3N0YSkgewotCQlzdGEgPSBsaW5rX3N0YS0mZ3Q7c3RhOwotCQlsaW5rX2lkID0gbGlua19zdGEtJmd0O2xpbmtfaWQ7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwotCi0JCXN0YSA9IHN0YV9pbmZvX2dldF9ic3MocngtJmd0O3NkYXRhLCBoZHItJmd0O2FkZHIyKTsKLQkJaWYgKHN0YXR1cy0mZ3Q7bGlua192YWxpZCkgewotCQkJbGlua19pZCA9IHN0YXR1cy0mZ3Q7bGlua19pZDsKLQkJfSBlbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3J4LSZndDtzZGF0YS0mZ3Q7dmlmKSAmYW1wOyZhbXA7Ci0JCQkgICBzdGF0dXMtJmd0O2ZyZXEpIHsKLQkJCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rOwotCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7Ci0KLQkJCWZvcl9lYWNoX2xpbmtfZGF0YV9yY3UocngtJmd0O3NkYXRhLCBsaW5rKSB7Ci0JCQkJY29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLSZndDtjb25mLSZndDtjaGFuY3R4X2NvbmYpOwotCQkJCWlmICghY29uZiB8fCAhY29uZi0mZ3Q7ZGVmLmNoYW4pCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJaWYgKHN0YXR1cy0mZ3Q7ZnJlcSA9PSBjb25mLSZndDtkZWYuY2hhbi0mZ3Q7Y2VudGVyX2ZyZXEpIHsKLQkJCQkJbGlua19pZCA9IGxpbmstJmd0O2xpbmtfaWQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KJiM0MzsJaWYgKCFmcmVxIHx8IGxpbmstJmd0O3NkYXRhLSZndDt2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU4gfHwKJiM0MzsJICAgIGxpbmstJmd0O3NkYXRhLSZndDt2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkKJiM0MzsJCXJldHVybiB0cnVlOwogCi0JaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBzdGEsIGxpbmtfaWQpKQomIzQzOwljb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstJmd0O2NvbmYtJmd0O2NoYW5jdHhfY29uZik7CiYjNDM7CWlmICghY29uZiB8fCAhY29uZi0mZ3Q7ZGVmLmNoYW4pCiAJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpOwomIzQzOwlyZXR1cm4gZnJlcSA9PSBjb25mLSZndDtkZWYuY2hhbi0mZ3Q7Y2VudGVyX2ZyZXE7CiB9CiAKIC8qCkBAIC01MzY3LDE4ICYjNDM7NTM0MSwyMCBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogICogYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBwcm90ZWN0aW9uLgogICovCiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKJiM0MzsJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSwKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiYjNDM7CXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKJiM0MzsJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJX19sZTE2IGZjOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpwcmV2OwogCXN0cnVjdCByaGxpc3RfaGVhZCAqdG1wOwomIzQzOwlib29sIHJ4X2RhdGFfcGVuZGluZzsKIAlpbnQgZXJyID0gMDsKIAogCWZjID0gKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0mZ3Q7ZGF0YSktJmd0O2ZyYW1lX2NvbnRyb2w7CkBAIC01Mzg2LDcgJiM0Mzs1MzYyLDYgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAlyeC5za2IgPSBza2I7CiAJcngubG9jYWwgPSBsb2NhbDsKIAlyeC5saXN0ID0gbGlzdDsKLQlyeC5saW5rX2lkID0gLTE7CiAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpIHx8IGllZWU4MDIxMV9pc19tZ210KGZjKSkKIAkJSTgwMl9ERUJVR19JTkMobG9jYWwtJmd0O2RvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50KTsKQEAgLTU0MjYsOTcgJiM0Mzs1NDAxLDEwMiBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkgICAgIGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkpKQogCQlpZWVlODAyMTFfc2Nhbl9yeChsb2NhbCwgc2tiKTsKIAomIzQzOwkvKgomIzQzOwkgKiBSWCBvZiBhIGRhdGEgZnJhbWUgc2hvdWxkIG9ubHkgaGFwcGVuIHRvIGV4aXN0aW5nIHN0YXRpb25zLgomIzQzOwkgKiBJdCBpcyB0aGVyZWZvcmUgbW9yZSBlZmZpY2llbnQgdG8gdXNlIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIGRyaXZlcgomIzQzOwkgKiBvciBzZWFyY2ggYmFzZWQgb24gdGhlIHN0YXRpb24mIzM5O3MgYWRkcmVzcy4KJiM0MzsJICoKJiM0MzsJICogTm90ZSB3ZSB3aWxsIGZhbGwgdGhyb3VnaCBhbmQgaGFuZGxlIGEgc3B1cmlvdXMgZGF0YSBmcmFtZSBpbiB0aGUKJiM0MzsJICogc2FtZSB3YXkgYXMgYSBtYW5hZ2VtZW50IGZyYW1lLgomIzQzOwkgKi8KIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7Ci0JCXN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqcHJldl9zdGE7Ci0JCWludCBsaW5rX2lkID0gLTE7Ci0KLQkJaWYgKHN0YXR1cy0mZ3Q7bGlua192YWxpZCkKLQkJCWxpbmtfaWQgPSBzdGF0dXMtJmd0O2xpbmtfaWQ7Ci0KLQkJaWYgKHB1YnN0YSkgewotCQkJc3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOwotCQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKCZhbXA7cngsIHN0YSwgbGlua19pZCkpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCS8qCi0JCQkgKiBJbiBNTE8gY29ubmVjdGlvbiwgZmV0Y2ggdGhlIGxpbmtfaWQgdXNpbmcgYWRkcjIKLQkJCSAqIHdoZW4gdGhlIGRyaXZlciBkb2VzIG5vdCBwYXNzIGxpbmtfaWQgaW4gc3RhdHVzLgotCQkJICogV2hlbiB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBhbHJlYWR5IHBlcmZvcm1lZCBieQotCQkJICogZHJpdmVyL2h3LCB0aGUgdmFsaWQgbGlua19pZCBtdXN0IGJlIHBhc3NlZCBpbgotCQkJICogc3RhdHVzLgotCQkJICovCi0KLQkJCWlmICghc3RhdHVzLSZndDtsaW5rX3ZhbGlkICZhbXA7JmFtcDsgcHVic3RhLSZndDttbG8pIHsKLQkJCQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7Ci0KLQkJCQlsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSwKLQkJCQkJCQkJIGhkci0mZ3Q7YWRkcjIpOwotCQkJCWlmICghbGlua19zdGEpCi0JCQkJCWdvdG8gb3V0OwotCi0JCQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluaygmYW1wO3J4LAotCQkJCQkJCQlsaW5rX3N0YS0mZ3Q7bGlua19pZCkpCi0JCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQlpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIHRydWUpKQomIzQzOwkJaWYgKGxpbmtfcHVic3RhKSB7CiYjNDM7CQkJc3RhID0gY29udGFpbmVyX29mKGxpbmtfcHVic3RhLSZndDtzdGEsIHN0cnVjdCBzdGFfaW5mbywKJiM0MzsJCQkJCSAgIHN0YSk7CiYjNDM7CQkJbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLSZndDtsaW5rW2xpbmtfcHVic3RhLSZndDtsaW5rX2lkXSk7CiYjNDM7CiYjNDM7CQkJcnguc2RhdGEgPSBzdGEtJmd0O3NkYXRhOwomIzQzOwkJCWlmIChpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoJmFtcDtyeCwgbGlua19zdGEpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIHRydWUpKQogCQkJCXJldHVybjsKJiM0MzsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcHJldl9zdGEgPSBOVUxMOwomIzQzOwkJcnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7CiAKJiM0MzsJCS8qIFNlYXJjaCBmb3Igc3RhdGlvbnMgb24gbm9uLU1MRCBpbnRlcmZhY2VzICovCiAJCWZvcl9lYWNoX3N0YV9pbmZvKGxvY2FsLCBoZHItJmd0O2FkZHIyLCBzdGEsIHRtcCkgewotCQkJaWYgKCFwcmV2X3N0YSkgewotCQkJCXByZXZfc3RhID0gc3RhOwotCQkJCWNvbnRpbnVlOwotCQkJfQomIzQzOwkJCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rOwogCi0JCQlyeC5zZGF0YSA9IHByZXZfc3RhLSZndDtzZGF0YTsKLQkJCWlmICghc3RhdHVzLSZndDtsaW5rX3ZhbGlkICZhbXA7JmFtcDsgcHJldl9zdGEtJmd0O3N0YS5tbG8pIHsKLQkJCQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7CiYjNDM7CQkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7c3RhLSZndDtzZGF0YS0mZ3Q7dmlmKSkKJiM0MzsJCQkJY29udGludWU7CiAKLQkJCQlsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSwKLQkJCQkJCQkJIGhkci0mZ3Q7YWRkcjIpOwotCQkJCWlmICghbGlua19zdGEpCi0JCQkJCWNvbnRpbnVlOwomIzQzOwkJCWxpbmsgPSAmYW1wO3N0YS0mZ3Q7c2RhdGEtJmd0O2RlZmxpbms7CiYjNDM7CQkJaWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtJmd0O2ZyZXEsIGxpbmspKQomIzQzOwkJCQljb250aW51ZTsKIAotCQkJCWxpbmtfaWQgPSBsaW5rX3N0YS0mZ3Q7bGlua19pZDsKJiM0MzsJCQlpZiAocnhfZGF0YV9wZW5kaW5nKSB7CiYjNDM7CQkJCWllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoJmFtcDtyeCwgc2tiLAomIzQzOwkJCQkJCQkJZmFsc2UpOwomIzQzOwkJCQlyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTsKIAkJCX0KIAotCQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKCZhbXA7cngsIHByZXZfc3RhLCBsaW5rX2lkKSkKLQkJCQlnb3RvIG91dDsKLQotCQkJaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIGZhbHNlKTsKJiM0MzsJCQlyeC5zZGF0YSA9IHN0YS0mZ3Q7c2RhdGE7CiYjNDM7CQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoJmFtcDtyeCwgJmFtcDtzdGEtJmd0O2RlZmxpbmspKQomIzQzOwkJCQljb250aW51ZTsKIAotCQkJcHJldl9zdGEgPSBzdGE7CiYjNDM7CQkJcnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTsKIAkJfQogCi0JCWlmIChwcmV2X3N0YSkgewotCQkJcnguc2RhdGEgPSBwcmV2X3N0YS0mZ3Q7c2RhdGE7Ci0JCQlpZiAoIXN0YXR1cy0mZ3Q7bGlua192YWxpZCAmYW1wOyZhbXA7IHByZXZfc3RhLSZndDtzdGEubWxvKSB7Ci0JCQkJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhOwomIzQzOwkJLyogQW5kIHNlYXJjaCBzdGF0aW9ucyBvbiBNTEQgaW50ZXJmYWNlcyAqLwomIzQzOwkJZm9yX2VhY2hfbGlua19zdGFfaW5mbyhsb2NhbCwgaGRyLSZndDthZGRyMiwgbGlua19zdGEsIHRtcCkgewomIzQzOwkJCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rOwogCi0JCQkJbGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsCi0JCQkJCQkJCSBoZHItJmd0O2FkZHIyKTsKLQkJCQlpZiAoIWxpbmtfc3RhKQotCQkJCQlnb3RvIG91dDsKJiM0MzsJCQlzdGEgPSBsaW5rX3N0YS0mZ3Q7c3RhOwomIzQzOwkJCXNkYXRhID0Jc3RhLSZndDtzZGF0YTsKJiM0MzsJCQlsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsaW5rW2xpbmtfc3RhLSZndDtsaW5rX2lkXSk7CiAKLQkJCQlsaW5rX2lkID0gbGlua19zdGEtJmd0O2xpbmtfaWQ7CiYjNDM7CQkJaWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtJmd0O2ZyZXEsIGxpbmspKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAocnhfZGF0YV9wZW5kaW5nKSB7CiYjNDM7CQkJCWllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoJmFtcDtyeCwgc2tiLAomIzQzOwkJCQkJCQkJZmFsc2UpOwomIzQzOwkJCQlyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTsKIAkJCX0KIAotCQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKCZhbXA7cngsIHByZXZfc3RhLCBsaW5rX2lkKSkKLQkJCQlnb3RvIG91dDsKJiM0MzsJCQlyeC5zZGF0YSA9IHN0YS0mZ3Q7c2RhdGE7CiYjNDM7CQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoJmFtcDtyeCwgbGlua19zdGEpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlyeF9kYXRhX3BlbmRpbmcgPSB0cnVlOwomIzQzOwkJfQogCiYjNDM7CQlpZiAocnhfZGF0YV9wZW5kaW5nKSB7CiAJCQlpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIHRydWUpKQogCQkJCXJldHVybjsKJiM0MzsKIAkJCWdvdG8gb3V0OwogCQl9CiYjNDM7CiYjNDM7CQkvKiBmYWxsIHRocm91Z2gsIGUuZy4gZm9yIHNwdXJpb3VzIGZyYW1lIG5vdGlmaWNhdGlvbiAqLwogCX0KIAotCXByZXYgPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGlzIGEgbWFuYWdlbWVudCBmcmFtZSAob3IgYSBkYXRhIGZyYW1lIHdpdGhvdXQgYSBzdGF0aW9uKSBhbmQKJiM0MzsJICogaXQgd2lsbCBiZSBkZWxpdmVyZWQgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBhIHN0YXRpb24gZXhpc3RzLAomIzQzOwkgKiBzbyBpdGVyYXRlIHRoZSBpbnRlcmZhY2VzLgomIzQzOwkgKi8KJiM0MzsJcnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFdlIGV4cGVjdCB0aGUgZHJpdmVyIHRvIHByb3ZpZGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uICovCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWxvY2FsLSZndDtlbXVsYXRlX2NoYW5jdHggJmFtcDsmYW1wOyAhc3RhdHVzLSZndDtmcmVxKSkKJiM0MzsJCWdvdG8gb3V0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZhbXA7bG9jYWwtJmd0O2ludGVyZmFjZXMsIGxpc3QpIHsKJiM0MzsJCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0gTlVMTDsKJiM0MzsKIAkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQljb250aW51ZTsKIApAQCAtNTUyNCwzMCAmIzQzOzU1MDQsODUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgIHNkYXRhLSZndDt2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQogCQkJY29udGludWU7CiAKJiM0MzsJCWxpbmtfc3RhID0gTlVMTDsKJiM0MzsJCWxpbmsgPSBOVUxMOwomIzQzOwomIzQzOwkJLyogVHJ5IHRvIHJlc29sdmUgdGhlIHN0YXRpb24gKi8KJiM0MzsJCWlmICghaWVlZTgwMjExX3ZpZl9pc19tbGQoJmFtcDtzZGF0YS0mZ3Q7dmlmKSkgewomIzQzOwkJCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci0mZ3Q7YWRkcjIpOwomIzQzOwomIzQzOwkJCWlmIChzdGEpIHsKJiM0MzsJCQkJbGlua19zdGEgPSAmYW1wO3N0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCQkJbGluayA9ICZhbXA7c2RhdGEtJmd0O2RlZmxpbms7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgaGRyLSZndDthZGRyMik7CiYjNDM7CiYjNDM7CQkJaWYgKGxpbmtfc3RhKQomIzQzOwkJCQlsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsaW5rW2xpbmtfc3RhLSZndDtsaW5rX2lkXSk7CiYjNDM7CQl9CiYjNDM7CiAJCS8qCi0JCSAqIGZyYW1lIGlzIGRlc3RpbmVkIGZvciB0aGlzIGludGVyZmFjZSwgYnV0IGlmIGl0JiMzOTtzCi0JCSAqIG5vdCBhbHNvIGZvciB0aGUgcHJldmlvdXMgb25lIHdlIGhhbmRsZSB0aGF0IGFmdGVyCi0JCSAqIHRoZSBsb29wIHRvIGF2b2lkIGNvcHlpbmcgdGhlIFNLQiBvbmNlIHRvbyBtdWNoCiYjNDM7CQkgKiBJZiB3ZSBmb3VuZCBhIFNUQSBhbmQgaXQgaGFzIGEgdmFsaWQgbGluayBpbmZvcm1hdGlvbiwgdGhlbgomIzQzOwkJICogUlggdXNpbmcgdGhlIHN0YXRpb24uCiAJCSAqLwomIzQzOwkJaWYgKGxpbmtfc3RhICZhbXA7JmFtcDsgbGluayAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoc3RhdHVzLSZndDtmcmVxLCBsaW5rKSkgewomIzQzOwkJCWlmIChyeF9kYXRhX3BlbmRpbmcpIHsKJiM0MzsJCQkJaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIGZhbHNlKTsKJiM0MzsJCQkJcnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCS8qIE5vIHZhbGlkX2xpbmtzIGNoZWNrIGFzIHdlIG5lZWQgdG8gUlggYmVhY29ucyAqLwomIzQzOwomIzQzOwkJCXJ4LnNkYXRhID0gc2RhdGE7CiYjNDM7CQkJaWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YSgmYW1wO3J4LCBsaW5rX3N0YSkpCiYjNDM7CQkJCXJ4X2RhdGFfcGVuZGluZyA9IHRydWU7CiAKLQkJaWYgKCFwcmV2KSB7Ci0JCQlwcmV2ID0gc2RhdGE7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCXJ4LnNkYXRhID0gcHJldjsKLQkJaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2UoJmFtcDtyeCwgc2tiLCBmYWxzZSk7CiYjNDM7CQkvKiBObyBzdGF0aW9uLCB0cnkgdG8gcmVzb2x2ZSB0aGUgbGluayBhbmQgUlggKi8KJiM0MzsJCWlmIChpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3NkYXRhLSZndDt2aWYpKSB7CiYjNDM7CQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7CiYjNDM7CQkJYm9vbCBmb3VuZCA9IGZhbHNlOwogCi0JCXByZXYgPSBzZGF0YTsKLQl9CiYjNDM7CQkJZm9yX2VhY2hfbGlua19kYXRhX3JjdShzZGF0YSwgbGluaykgewomIzQzOwkJCQljb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstJmd0O2NvbmYtJmd0O2NoYW5jdHhfY29uZik7CiYjNDM7CQkJCWlmICghY29uZiB8fCAhY29uZi0mZ3Q7ZGVmLmNoYW4pCiYjNDM7CQkJCQljb250aW51ZTsKIAotCWlmIChwcmV2KSB7Ci0JCXJ4LnNkYXRhID0gcHJldjsKJiM0MzsJCQkJaWYgKHN0YXR1cy0mZ3Q7ZnJlcSA9PSBjb25mLSZndDtkZWYuY2hhbi0mZ3Q7Y2VudGVyX2ZyZXEpIHsKJiM0MzsJCQkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQogCi0JCWlmIChpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZSgmYW1wO3J4LCBza2IsIHRydWUpKQotCQkJcmV0dXJuOwomIzQzOwkJCWlmICghZm91bmQpCiYjNDM7CQkJCWxpbmsgPSAmYW1wO3NkYXRhLSZndDtkZWZsaW5rOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlsaW5rID0gJmFtcDtzZGF0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChyeF9kYXRhX3BlbmRpbmcpIHsKJiM0MzsJCQlpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgZmFsc2UpOwomIzQzOwkJCXJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcnguc2RhdGEgPSBzZGF0YTsKJiM0MzsJCXJ4LmxvY2FsID0gc2RhdGEtJmd0O2xvY2FsOwomIzQzOwkJcngubGluayA9IGxpbms7CiYjNDM7CQlyeC5saW5rX2lkID0gbGluay0mZ3Q7bGlua19pZDsKJiM0MzsJCXJ4LnN0YSA9IE5VTEw7CiYjNDM7CQlyeC5saW5rX3N0YSA9IE5VTEw7CiYjNDM7CiYjNDM7CQlyeF9kYXRhX3BlbmRpbmcgPSB0cnVlOwogCX0KIAomIzQzOwlpZiAocnhfZGF0YV9wZW5kaW5nICZhbXA7JmFtcDsKJiM0MzsJICAgIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoJmFtcDtyeCwgc2tiLCB0cnVlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKICBvdXQ6CiAJZGV2X2tmcmVlX3NrYihza2IpOwogfQpAQCAtNTU1Niw3ICYjNDM7NTU5MSw4IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAgKiBUaGlzIGlzIHRoZSByZWNlaXZlIHBhdGggaGFuZGxlci4gSXQgaXMgY2FsbGVkIGJ5IGEgbG93IGxldmVsIGRyaXZlciB3aGVuIGFuCiAgKiA4MDIuMTEgTVBEVSBpcyByZWNlaXZlZCBmcm9tIHRoZSBoYXJkd2FyZS4KICAqLwotdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAomIzQzOwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLAogCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKQEAgLTU2OTQsOSAmIzQzOzU3MzAsNiBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAogCQl9CiAJfQogCi0JaWYgKFdBUk5fT05fT05DRShzdGF0dXMtJmd0O2xpbmtfaWQgJmd0Oz0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQpKQotCQlnb3RvIGRyb3A7Ci0KIAlzdGF0dXMtJmd0O3J4X2ZsYWdzID0gMDsKIAogCWtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpOwpAQCAtNTcxNSw5ICYjNDM7NTc0OCwxMCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAogCQkJaWVlZTgwMjExX3RwdF9sZWRfdHJpZ19yeChsb2NhbCwgc2tiLSZndDtsZW4pOwogCiAJCWlmIChzdGF0dXMtJmd0O2ZsYWcgJmFtcDsgUlhfRkxBR184MDIzKQotCQkJX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTsKJiM0MzsJCQlfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgbGlua19wdWJzdGEsIHNrYiwgbGlzdCk7CiAJCWVsc2UKLQkJCV9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTsKJiM0MzsJCQlfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLAomIzQzOwkJCQkJCSAgICAgbGlzdCk7CiAJfQogCiAJa2Nvdl9yZW1vdGVfc3RvcCgpOwpAQCAtNTcyNyw3ICYjNDM7NTc2MSw4IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsCiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeF9saXN0KTsKIAotdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAomIzQzOwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLAogCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogewogCXN0cnVjdCBza19idWZmICp0bXA7CkBAIC01NzQwLDcgJiM0Mzs1Nzc1LDcgQEAgdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKIAkgKiByZWNlaXZlIHByb2Nlc3NpbmcKIAkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWVlZTgwMjExX3J4X2xpc3QoaHcsIHB1YnN0YSwgc2tiLCAmYW1wO2xpc3QpOwomIzQzOwlpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19wdWJzdGEsIHNrYiwgJmFtcDtsaXN0KTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmICghbmFwaSkgewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKaW5kZXggZWVmZjIzMGJkOTA5Zi4uMzI0YzJiNmQ3Y2UxYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCkBAIC05LDcgJiM0Mzs5LDcgQEAKICAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1ICZsdDtmbGFtaW5naWNlQHNvdXJtaWxrLm5ldCZndDsKICAqIENvcHlyaWdodCAyMDEzLTIwMTUgIEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJICiAgKiBDb3B5cmlnaHQgMjAxNi0yMDE3ICBJbnRlbCBEZXV0c2NobGFuZCBHbWJICi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvbgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uCiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2FycC5oJmd0OwpAQCAtMjA0LDEyICYjNDM7MjA0LDEwIEBAIGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCSAqIGFuIGluZGljYXRpb24gb24gd2hpY2ggb2YgdGhlIGxpbmtzIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQKIAkJICovCiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3NjYW5fc2RhdGEtJmd0O3ZpZikpIHsKLQkJCWlmIChyeF9zdGF0dXMtJmd0O2xpbmtfdmFsaWQpIHsKLQkJCQlzOCBsaW5rX2lkID0gcnhfc3RhdHVzLSZndDtsaW5rX2lkOwomIzQzOwkJCXM4IGxpbmtfaWQgPSByeF9zdGF0dXMtJmd0O2xpbmtfaWQ7CiAKLQkJCQlsaW5rX2NvbmYgPQotCQkJCQlyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS0mZ3Q7dmlmLmxpbmtfY29uZltsaW5rX2lkXSk7Ci0JCQl9CiYjNDM7CQkJbGlua19jb25mID0KJiM0MzsJCQkJcmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtJmd0O3ZpZi5saW5rX2NvbmZbbGlua19pZF0pOwogCQl9IGVsc2UgewogCQkJbGlua19jb25mID0gJmFtcDtzY2FuX3NkYXRhLSZndDt2aWYuYnNzX2NvbmY7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90ZGxzLmMgYi9uZXQvbWFjODAyMTEvdGRscy5jCmluZGV4IGRjMmY2NjJmZTRjNDYuLmUxN2Q0OTJiZTU5MDIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90ZGxzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3RkbHMuYwpAQCAtMTA2Niw3ICYjNDM7MTA2Niw3IEBAIGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9CiAKIAlpZiAoYWN0aW9uX2NvZGUgPT0gV0xBTl9QVUJfQUNUSU9OX1RETFNfRElTQ09WRVJfUkVTKSB7Ci0JCWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpOwomIzQzOwkJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgc3RhLCA3LCBsaW5rX2lkKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDNhMWUyYzllMTU2NWUuLjZmNTJlODg0MDIzNzEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC02NDM2LDcgJiM0Mzs2NDM2LDggQEAgdm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQpCiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV91bnJlc2VydmVfdGlkKTsKIAogdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLAomIzQzOwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsCiYjNDM7CQkJCSBpbnQgdGlkLCBpbnQgbGlua19pZCwKIAkJCQkgZW51bSBubDgwMjExX2JhbmQgYmFuZCkKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItJmd0O2RhdGE7CkBAIC02NDg4LDEyICYjNDM7NjQ4OSwxMyBAQCB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkgKi8KIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJSUVFRTgwMjExX1NLQl9DQihza2IpLSZndDtiYW5kID0gYmFuZDsKLQlpZWVlODAyMTFfeG1pdChzZGF0YSwgTlVMTCwgc2tiKTsKJiM0MzsJaWVlZTgwMjExX3htaXQoc2RhdGEsIHN0YSwgc2tiKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpCiYjNDM7CQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkgIGludCB0aWQsIGludCBsaW5rX2lkKQogewogCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjaGFuY3R4X2NvbmY7CiAJZW51bSBubDgwMjExX2JhbmQgYmFuZDsKQEAgLTY1MTksNyAmIzQzOzY1MjEsNyBAQCB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQliYW5kID0gMDsKIAl9CiAKLQlfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCBsaW5rX2lkLCBiYW5kKTsKJiM0MzsJX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHN0YSwgdGlkLCBsaW5rX2lkLCBiYW5kKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggNDRmMmJhZDA4NjcwNS4uNDM3YmViY2MwMjc0OCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xMDk2LDYgJiM0MzsxMDk2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sODAyMTFfcG9saWN5W05VTV9OTDgwMjExX0FUVFJdID0gewogCVtOTDgwMjExX0FUVFJfTlBDQV9QVU5DVF9CSVRNQVBdID0KIAkJTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsICZhbXA7bmw4MDIxMV9wdW5jdF9iaXRtYXBfcmFuZ2UpLAogCVtOTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUU10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKJiM0MzsJW05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogfTsKIAogLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi8KQEAgLTE0ODYwLDYgJiM0MzsxNDg2MSw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV90eF9tZ210KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJICAgICEod2Rldi0mZ3Q7dmFsaWRfbGlua3MgJmFtcDsgQklUKHBhcmFtcy5saW5rX2lkKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CXBhcmFtcy5ub19zdGEgPQomIzQzOwkJbmxhX2dldF9mbGFnKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSk7CiYjNDM7CiAJcGFyYW1zLmJ1ZiA9IG5sYV9kYXRhKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9GUkFNRV0pOwogCXBhcmFtcy5sZW4gPSBubGFfbGVuKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9GUkFNRV0pOwogCkBAIC0yMjAyNCw3ICYjNDM7MjIwMjgsOSBAQCBpbnQgbmw4MDIxMV9zZW5kX21nbXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCSAgICAoaW5mby0mZ3Q7YWNrX3RzdGFtcCAmYW1wOyZhbXA7IG5sYV9wdXRfdTY0XzY0Yml0KG1zZywKIAkJCQkJCSAgIE5MODAyMTFfQVRUUl9UWF9IV19USU1FU1RBTVAsCiAJCQkJCQkgICBpbmZvLSZndDthY2tfdHN0YW1wLAotCQkJCQkJICAgTkw4MDIxMV9BVFRSX1BBRCkpKQomIzQzOwkJCQkJCSAgIE5MODAyMTFfQVRUUl9QQUQpKSB8fAomIzQzOwkgICAgKGluZm8tJmd0O25vX3N0YSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEpKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlnZW5sbXNnX2VuZChtc2csIGhkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTk4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNpZ25pZmljYW50IG1hYzgwMjExL2NmZzgwMjExIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzZWVtcyBjZW50ZXJlZCBvbiB0aGUgY29yZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgZGlyZWN0bHkgaW1wYWN0aW5nIGhvdyBNdWx0aS1MaW5rIE9wZXJhdGlvbiAoTUxPKSBhbmQgc3RhdGlvbiBoYW5kbGluZyBhcmUgbWFuYWdlZC4gVGhlIGJyZWFkdGggb2YgdGhlIGFmZmVjdGVkIGRyaXZlcnPigJRhdGgxMWssIGF0aDEyaywgaXdsd2lmaSwgbXQ3NiwgcnR3ODksIGFuZCBldmVuIG1hYzgwMjExX2h3c2lt4oCUdGVsbHMgbWUgdGhpcyBpcyBhIGZvdW5kYXRpb25hbCBzaGlmdCwgbm90IGp1c3QgYSBtaW5vciB0d2Vhay4gRGVmaW5pdGVseSB3b3J0aHkgb2YgY2xvc2Ugc2NydXRpbnkgYW5kIGZ1enppbmcuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIGtleSBpcyBpbiBob3cgcmVjZWl2ZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhbmQgaG93IGluZm9ybWF0aW9uIGlzIHBhc3NlZC4gU3BlY2lmaWNhbGx5LCBgaWVlZTgwMjExX3J4X25hcGlgIGFuZCBgaWVlZTgwMjExX3J4X2xpc3RgIGFyZSBjaGFuZ2luZyB0aGVpciBzaWduYXR1cmUuICBJbnN0ZWFkIG9mIHRoZSBmYW1pbGlhciBgc3RydWN0IGllZWU4MDIxMV9zdGEgKmAsIHRoZXkmIzM5O3JlIG5vdyBkZWFsaW5nIHdpdGggYHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmAuIFRoaXMgaW1wbGllcyBhIHJlLWFyY2hpdGVjdHVyZSBvZiBob3cgc3RhdGlvbiBhc3NvY2lhdGlvbiBhbmQgbGluayBtYW5hZ2VtZW50IGlzIGJlaW5nIGhhbmRsZWQgZHVyaW5nIHJlY2VpdmUgcHJvY2Vzc2luZy4gQWRkaXRpb25hbGx5LCB0aGUgYHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzYCBpcyBiZWluZyBzaW1wbGlmaWVkLiBUaGUgcmVtb3ZhbCBvZiBgbGlua192YWxpZGAgYW5kIHRoZSByZXRlbnRpb24gb2Ygb25seSBgbGlua19pZGAgaW5kaWNhdGVzIGEgbW9yZSBleHBsaWNpdCBhbmQgcG90ZW50aWFsbHkgc3RyZWFtbGluZWQgd2F5IG9mIGlkZW50aWZ5aW5nIHRoZSBhc3NvY2lhdGVkIGxpbmsgaW4gdGhlIHJ4IHBhdGguCgpPbiB0aGUgdHJhbnNtaXQgc2lkZSwgdGhlIGBjZmc4MDIxMV9tZ210X3R4X3BhcmFtc2AgYW5kIGBjZmc4MDIxMV9yeF9pbmZvYCBub3cgaW5jbHVkZSBhIGBub19zdGFgIGZpZWxkLiBUaGlzLCBhbG9uZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gYG5sODAyMTFfdHhfbWdtdGAgYW5kIGBubDgwMjExX3NlbmRfbWdtdGAgdG8gaGFuZGxlIGBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQWAsIHRlbGxzIG1lIHRoaXMgbWlnaHQgYmUgcmVsYXRlZCB0byBtZ210IGZyYW1lcyB0aGF0IGFyZW4mIzM5O3QgbmVjZXNzYXJpbHkgdGllZCB0byBhIHNwZWNpZmljIHN0YXRpb24gKGUuZy4sIGJlYWNvbiB0cmFuc21pc3Npb25zLCBwcm9iZSByZXNwb25zZXMsIGV0Yy4pIG9yIGZyYW1lcyB3aGVyZSBzdGF0aW9uIGluZm9ybWF0aW9uIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgdW5kZXIgTUxPLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRob3NlIGZvY3VzIHN5bWJvbHM6IGBubDgwMjExX3R4X21nbXRgLCBgaWVlZTgwMjExX21nbXRfdHhgLCBgaWVlZTgwMjExX3J4X2xpc3RgLCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlZ3JhdGUgd2l0aCB0aGUgb3ZlcmFsbCByZWNlaXZlIHBhdGguIFRoZXJlIGFyZSBhIG51bWJlciBvZiBpbnRlcm5hbCBmdW5jdGlvbiBjYWxscyBtb2RpZmllZCBhbmQgSSB3aWxsIGludmVzdGlnYXRlIHRoZW0gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiAKCkFzIGZvciBjb25maWd1cmF0aW9ucywgSSYjMzk7bSBleHBlY3RpbmcgYENPTkZJR19NQUM4MDIxMWAsIGBDT05GSUdfQ0ZHODAyMTFgLCBhbmQgcG9zc2libHkgYENPTkZJR19NQUM4MDIxMV9IV1NJTWAgdG8gYmUgZXNzZW50aWFsLiBUaW1lIHRvIHZlcmlmeSB0aG9zZSBzeW1ib2xzLCBjcm9zcy1yZWZlcmVuY2UgdGhlbSB3aXRoIHRoZSBjaGFuZ2VzLCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZ1bGx5LiBUaGlzIGNvdWxkIGJlIGEgZ2FtZS1jaGFuZ2VyIGZvciBNTE8gc3VwcG9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubDgwMjExX3R4X21nbXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNDcwNz1zdGF0aWMgaW50IG5sODAyMTFfcmVnaXN0ZXJfbWdtdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ3NjQtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0NzY1OnN0YXRpYyBpbnQgbmw4MDIxMV90eF9tZ210KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NzY2LXtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0OTEzLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNDkxNDpzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdF9jYW5jZWxfd2FpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDkxNS17XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTczNz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDEyNC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDEyNTpcdFx0LmRvaXQgPSBubDgwMjExX3R4X21nbXQsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMTI2LVx0XHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAxMzEtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAxMzI6XHRcdC5kb2l0ID0gbmw4MDIxMV90eF9tZ210X2NhbmNlbF93YWl0LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDEzMy1cdFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA4OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQW5hbHl6aW5nIHRoZSBgaWVlZTgwMjExX21nbXRfdHhgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGllZWU4MDIxMV9tZ210X3R4YC4gVGhpcyBsaWtlbHkgbWVhbnMgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcgYSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBpc3N1ZSwgb3IgbWF5YmUgSSYjMzk7bSByZXZpZXdpbmcgdGhlIGNvZGUgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCYjMzk7cyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24/IElzIGl0IHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGV2ZW50IGxpa2UgYW4gYXNzb2NpYXRpb24gcmVxdWVzdCwgYSBiZWFjb24gdHJhbnNtaXNzaW9uLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyBjcnVjaWFsIHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIGZsb3cuCgpJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBwcm9ibGVtIGFyZWFzLiBBcmUgd2UgaGFuZGxpbmcgZnJhbWUgbGlmZXRpbWVzIGNvcnJlY3RseT8gSXMgdGhlcmUgYXBwcm9wcmlhdGUgcmV0cnkgbG9naWMgaWYgdGhlIHRyYW5zbWlzc2lvbiBmYWlscz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBlcnJvciBwYXRocywgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3MsIHJhY2UgY29uZGl0aW9ucywgb3IgaW5jb3JyZWN0IHBhcmFtZXRlciB2YWxpZGF0aW9uLiBNZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgYSBjb25jZXJuOyBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIG1hbmFnZW1lbnQgZnJhbWUgYnVmZmVyIGlzIG1hbmFnZWQsIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCwgYW5kIHdoZW4gaXQmIzM5O3MgZnJlZWQuCgpJJiMzOTtsbCBhbHNvIGJlIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiBvY2N1cnMuIEhvdyBpcyB0aGUgZnJhbWUgZm9ybWF0dGVkIGZvciB0aGUgcmFkaW8/IElzIHRoZSBjb3JyZWN0IG1vZHVsYXRpb24gYW5kIGNvZGluZyBzY2hlbWUgYmVpbmcgdXNlZD8gQXJlIHdlIHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIHRyYW5zbWl0IHBvd2VyIGFuZCBjaGFubmVsPyBBbnkgZGV2aWF0aW9uIGhlcmUgY291bGQgbGVhZCB0byB0cmFuc21pc3Npb24gZmFpbHVyZXMgb3IgcG9vciBwZXJmb3JtYW5jZS4KCkZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHNlY3VyaXR5LXJlbGF0ZWQgYXNwZWN0cy4gSXMgdGhpcyBmdW5jdGlvbiB2dWxuZXJhYmxlIHRvIGFueSBraW5kIG9mIGluamVjdGlvbiBhdHRhY2s/IENvdWxkIGEgbWFsaWNpb3VzIGFjdG9yIGNyYWZ0IGEgbWFuYWdlbWVudCBmcmFtZSB0aGF0IGNhdXNlcyBhIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIGV2ZW4gY29kZSBleGVjdXRpb24/IEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVyIHZhbGlkYXRpb24gYW5kIGFueSBzYW5pdGl6YXRpb24gc3RlcHMuIEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbiBpbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgZmlybXdhcmU/CgpCYXNpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGVudGlyZSB0cmFuc21pc3Npb24gcHJvY2VzcywgZnJvbSB0aGUgc291cmNlIGRhdGEgdG8gdGhlIHBoeXNpY2FsIHJhZGlvIHdhdmVzLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBtZW50YWwgbW9kZWwgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHdpcmVsZXNzIG5ldHdvcmtpbmcsIHRpbWluZyBhbmQgY29uY3VycmVuY3kgY291bGQgYWxzbyBiZSBhIG1ham9yIGNvbmNlcm4sIEkmIzM5O2xsIGJlIHJlYWR5IHRvIGFuYWx5emUgdGhpcyBpZiBuZWNlc3NhcnkuIExldCYjMzk7cyBzdGFydCBieSB3YWxraW5nIHRocm91Z2ggdGhlIGNvZGUgbGluZSBieSBsaW5lIGFuZCBzZWVpbmcgaG93IHRoZXNlIHZhcmlvdXMgYXNwZWN0cyBhcmUgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfbWdtdF90eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvY2ZnLmM9NTk3Nj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTYwMzgtXHQuY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsID0gaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbCxcbm5ldC9tYWM4MDIxMS9jZmcuYzo2MDM5Olx0Lm1nbXRfdHggPSBpZWVlODAyMTFfbWdtdF90eCxcbm5ldC9tYWM4MDIxMS9jZmcuYzo2MDQwOlx0Lm1nbXRfdHhfY2FuY2VsX3dhaXQgPSBpZWVlODAyMTFfbWdtdF90eF9jYW5jZWxfd2FpdCxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDQxLVx0LnNldF9jcW1fcnNzaV9jb25maWcgPSBpZWVlODAyMTFfc2V0X2NxbV9yc3NpX2NvbmZpZyxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMTU1PWludCBpZWVlODAyMTFfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMTU2LVx0XHRcdFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHU2NCBjb29raWUpO1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjE1NzppbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxNTgtXHRcdCAgICAgIHN0cnVjdCBjZmc4MDIxMV9tZ210X3R4X3BhcmFtcyAqcGFyYW1zLCB1NjQgY29va2llKTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIxNTk6aW50IGllZWU4MDIxMV9tZ210X3R4X2NhbmNlbF93YWl0KHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMTYwLVx0XHRcdFx0ICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCB1NjQgY29va2llKTtcbi0tXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jPTgwMT1pbnQgaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODA5LVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzo4MTA6aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTgxMS1cdFx0ICAgICAgc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zICpwYXJhbXMsIHU2NCBjb29raWUpXG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDUwLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzoxMDUxOmludCBpZWVlODAyMTFfbWdtdF90eF9jYW5jZWxfd2FpdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDUyLVx0XHRcdFx0ICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCB1NjQgY29va2llKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzgwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIDgwMi4xMSBSWCBQYXRoKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlY2VpdmluZyBzaWRlIG9mIHRoaXMgODAyLjExIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkIHdoZW4gdGhleSBhcnJpdmUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBnZXR0aW5nIHRoZXNlIGZyYW1lcyBpbnRvIHRoZSBzeXN0ZW0uCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2Yga2V5IGFyZWFzLiBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgYGllZWU4MDIxMV9yeF9saXN0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHBhY2tldHMgYXJlIGluaXRpYWxseSBxdWV1ZWQsIGFuZCBob3cgdGhlIHJlY2VpdmVkIGZyYW1lcyBhcmUgcHJvY2Vzc2VkIHdpdGhpbiB0aGF0IHN0cnVjdHVyZS4gVGhlbiwgSSBzaG91bGQgY29tcGFyZSBhbmQgY29udHJhc3QgaXQgd2l0aCB0aGUgYGllZWU4MDIxMV9yeF9uYXBpYCBwYXRoLiBOQVBJIGlzIGEgY29yZSBwYXJ0IG9mIG1vZGVybiBuZXR3b3JrIGRyaXZlciBkZXNpZ24sIHNvIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIFJYIHByb2Nlc3MgaGVyZSBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gc3lzdGVtcyBpbnRlcmFjdCwgYW5kIHdoYXQgdGhlIGZsb3cgaXMgZm9yIHRoZSBpbmNvbWluZyBmcmFtZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX3J4X2xpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jPTE1MzQ9dm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jLTE1NDgtXHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNmxpbmtfc3RhKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYzoxNTQ5Olx0XHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMtMTU1MC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMtMTU1Ny1cdFx0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZsaW5rX3N0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmM6MTU1ODpcdFx0XHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMtMTU1OS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvZG1hLmM9NzY9c3RhdGljIHZvaWQgbXQ3NjAxdV9yeF9wcm9jZXNzX3NlZyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTggKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9kbWEuYy0xMTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2RtYS5jOjExMTpcdGllZWU4MDIxMV9yeF9saXN0KGRldi1cdTAwM2VodywgTlVMTCwgc2tiLCBsaXN0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvZG1hLmMtMTEyLVxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NTM3ND12b2lkIGllZWU4MDIxMV9yZXN0YXJ0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTtcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTUzNzYtLyoqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjUzNzc6ICogaWVlZTgwMjExX3J4X2xpc3QgLSByZWNlaXZlIGZyYW1lIGFuZCBzdG9yZSBwcm9jZXNzZWQgc2ticyBpbiBhIGxpc3RcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTM3OC0gKlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQwMC0gKi9cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTQwMTp2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDAyLVx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4tLVxubmV0L21hYzgwMjExL3J4LmM9NTM0Mz1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTU1OTMtICovXG5uZXQvbWFjODAyMTEvcnguYzo1NTk0OnZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG5uZXQvbWFjODAyMTEvcnguYy01NTk1LVx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4tLVxubmV0L21hYzgwMjExL3J4LmMtNTc2MS19XG5uZXQvbWFjODAyMTEvcnguYzo1NzYyOkVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X2xpc3QpO1xubmV0L21hYzgwMjExL3J4LmMtNTc2My1cbm5ldC9tYWM4MDIxMS9yeC5jPTU3NjQ9dm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvcnguYy01Nzc3LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L21hYzgwMjExL3J4LmM6NTc3ODpcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbm5ldC9tYWM4MDIxMS9yeC5jLTU3NzktXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzc2NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgdGhvdWdoIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYGllZWU4MDIxMV9yeF9uYXBpYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgcmV2aXNpdCBgaWVlZTgwMjExX3J4X25hcGlgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaGFuZGxlcyBpbmNvbWluZyA4MDIuMTEgcGFja2V0cyB3aXRoaW4gdGhlIE5BUEkgY29udGV4dC4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIGludGVycnVwdCBoYW5kbGluZyBhbmQgZGF0YSBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgZHJpdmVyLiBJIHdpbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaGFyZHdhcmUgcmVjZWl2ZSBxdWV1ZXMgYW5kIGhvdyB0aGVzZSBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgdG8gYXZvaWQgYW55IGxhdGVuY3kgaXNzdWVzLCBzdWNoIGFzIHRob3NlIHJlbGF0ZWQgdG8gRE1BIG9yIGJ1ZmZlciBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfcnhfbmFwaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jPTEzNjQ9c3RhdGljIHZvaWQgYXRoMTBrX3Byb2Nlc3Nfcngoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYy0xNDA2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYzoxNDA3Olx0aWVlZTgwMjExX3J4X25hcGkoYXItXHUwMDNlaHcsIE5VTEwsIHNrYiwgXHUwMDI2YXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jLTE0MDgtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmM9MjQ1ND1zdGF0aWMgYm9vbCBhdGgxMGtfaHR0X3J4X3Byb2NfcnhfaW5kX2hsKHN0cnVjdCBhdGgxMGtfaHR0ICpodHQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYy0yNjcwLVx0aWYgKGFyLVx1MDAzZW5hcGkuZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYzoyNjcxOlx0XHRpZWVlODAyMTFfcnhfbmFwaShhci1cdTAwM2VodywgTlVMTCwgc2tiLCBcdTAwMjZhci1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmMtMjY3Mi1cdGVsc2Vcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmM9MjQyNz1zdGF0aWMgdm9pZCBhdGgxMWtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jLTI1MDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmM6MjUwMzpcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVx1MDAzZWh3LCBwdWJzdGEgPyBcdTAwMjZwdWJzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIG1zZHUsIG5hcGkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jLTI1MDQtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmM9NDkzPXZvaWQgYXRoMTJrX2RwX21vbl9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMtNTE1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uYzo1MTY6XHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgTlVMTCwgbXNkdSwgbmFwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jLTUxNy19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jPTEzNzE9dm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYy0xNDM1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jOjE0MzY6XHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMtMTQzNy1cdFx0XHQgIG5hcGkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4LmM9NjA0PXN0YXRpYyB2b2lkIGl3bGFnbl9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vcnguYy02NzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9yeC5jOjY3MTpcdGllZWU4MDIxMV9yeF9uYXBpKHByaXYtXHUwMDNlaHcsIE5VTEwsIHNrYiwgcHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4LmMtNjcyLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jPTEyMD12b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jLTEzMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmM6MTMzOlx0aWVlZTgwMjExX3J4X25hcGkobWxkLVx1MDAzZWh3LCBsaW5rX3N0YSwgc2tiLCBuYXBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMtMTM0LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jPTIyODM9c3RhdGljIHZvaWQgaXdsX21sZF9ub19kYXRhX3J4KHN0cnVjdCBpd2xfbWxkICptbGQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYy0yMzUwLVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYzoyMzUxOlx0aWVlZTgwMjExX3J4X25hcGkobWxkLVx1MDAzZWh3LCBOVUxMLCBza2IsIG5hcGkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYy0yMzUyLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmM9MTcwPXZvaWQgaXdsX21sZF9oYW5kbGVfdGltZV9tc210X25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmMtMjAxLVx0XHQgICAgICAga3RpbWVfdG9fbnMocnhfc3RhdHVzLVx1MDAzZWFja190eF9od3RzdGFtcCkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmM6MjAyOlx0aWVlZTgwMjExX3J4X25hcGkobWxkLVx1MDAzZWh3LCBOVUxMLCBza2IsIE5VTEwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmMtMjAzLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9tYWMtY3R4dC5jPTE2ODc9dm9pZCBpd2xfbXZtX3J4X3N0b3JlZF9iZWFjb25fbm90aWYoc3RydWN0IGl3bF9tdm0gKm12bSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9tYWMtY3R4dC5jLTE3NDQtXHQvKiBwYXNzIGl0IGFzIHJlZ3VsYXIgcnggdG8gbWFjODAyMTEgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM6MTc0NTpcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2VodywgTlVMTCwgc2tiLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmMtMTc0Ni19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYz00NT1zdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYy05Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmM6OTM6XHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMtOTQtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYz0yMzY9c3RhdGljIHZvaWQgaXdsX212bV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX212bSAqbXZtLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYy0yNDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmM6MjQ2Olx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMtMjQ3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmM9MjQwOT12b2lkIGl3bF9tdm1fcnhfbW9uaXRvcl9ub19kYXRhKHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMtMjUzMC1cdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYzoyNTMxOlx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMtMjUzMi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3RpbWUtc3luYy5jPTU4PXZvaWQgaXdsX212bV90aW1lX3N5bmNfbXNtdF9ldmVudChzdHJ1Y3QgaXdsX212bSAqbXZtLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3RpbWUtc3luYy5jLTg5LVx0XHQgICAgICAga3RpbWVfdG9fbnMocnhfc3RhdHVzLVx1MDAzZWFja190eF9od3RzdGFtcCkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vdGltZS1zeW5jLmM6OTA6XHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIE5VTEwsIHNrYiwgTlVMTCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS90aW1lLXN5bmMuYy05MS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9wY2kuYz0xMDQyPXN0YXRpYyB1MzIgcnR3X3BjaV9yeF9uYXBpKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBydHdfcGNpICpydHdwY2ksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9wY2kuYy0xMTA0LVx0XHRcdG1lbWNweShuZXctXHUwMDNlY2IsIFx1MDAyNnJ4X3N0YXR1cywgc2l6ZW9mKHJ4X3N0YXR1cykpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9wY2kuYzoxMTA1Olx0XHRcdGllZWU4MDIxMV9yeF9uYXBpKHJ0d2Rldi1cdTAwM2VodywgTlVMTCwgbmV3LCBuYXBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcGNpLmMtMTEwNi1cdFx0XHRyeF9kb25lJiM0MzsmIzQzOztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYz00MDAyPXN0YXRpYyB2b2lkIHJ0dzg5X2NvcmVfcnhfdG9fbWFjODAyMTEoc3RydWN0IHJ0dzg5X2RldiAqcnR3ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQwMjMtXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYzo0MDI0Olx0aWVlZTgwMjExX3J4X25hcGkocnR3ZGV2LVx1MDAzZWh3LCBOVUxMLCBza2JfcHBkdSwgbmFwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYy00MDI1LVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01NDAxPXZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDA1LS8qKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NDA2OiAqIGllZWU4MDIxMV9yeF9uYXBpIC0gcmVjZWl2ZSBmcmFtZSBmcm9tIE5BUEkgY29udGV4dFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDA3LSAqXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDI5LSAqL1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NDMwOnZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU0MzEtXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU0NTQ9c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQ1NS17XG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU0NTY6XHRpZWVlODAyMTFfcnhfbmFwaShodywgTlVMTCwgc2tiLCBOVUxMKTtcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQ1Ny19XG4tLVxubmV0L21hYzgwMjExL3J4LmM9NTc2Mj1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeF9saXN0KTtcbm5ldC9tYWM4MDIxMS9yeC5jLTU3NjMtXG5uZXQvbWFjODAyMTEvcnguYzo1NzY0OnZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG5uZXQvbWFjODAyMTEvcnguYy01NzY1LVx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4tLVxubmV0L21hYzgwMjExL3J4LmMtNTc5MC19XG5uZXQvbWFjODAyMTEvcnguYzo1NzkxOkVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X25hcGkpO1xubmV0L21hYzgwMjExL3J4LmMtNTc5Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNDAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQUM4MDIxMSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgdGFyZ2V0ZWQgY2hhbmdlcyB3aXRoaW4gdGhlIE1BQzgwMjExIGFuZCBDRkc4MDIxMSBsYXllcnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzb21lIG51YW5jZWQgYXNwZWN0cyBvZiBzdGF0aW9uIChTVEEpIGFzc29jaWF0aW9uIGFuZCBtYW5hZ2VtZW50IGZyYW1lIGhhbmRsaW5nLiBJIHNlZSBpdCYjMzk7cyByZWZhY3RvcmluZyBzb21lIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QgYXMgYSBwb3RlbnRpYWwgaW5kaWNhdG9yIG9mIGFyY2hpdGVjdHVyYWwgaW1wcm92ZW1lbnRzIG9yIG9wdGltaXphdGlvbi4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhhdCBgaWVlZTgwMjExX3J4X2xpc3RgIGFuZCBgaWVlZTgwMjExX3J4X25hcGlgIGFyZSBzaGlmdGluZyBmcm9tIHVzaW5nIGBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqYCB0byBgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqYC4gVGhpcyBzdWdnZXN0cyB0aGV5IGFyZSBub3cgZGVhbGluZyB3aXRoIGxpbmstc3BlY2lmaWMgU1RBIGluZm9ybWF0aW9uLCB3aGljaCB0ZWxscyBtZSB0aGUgcGF0Y2ggaXMgZm9jdXNpbmcgb24gZW5oYW5jZW1lbnRzIHJlbGF0ZWQgdG8gbGluay1sYXllciBtYW5hZ2VtZW50IGFuZCBwZXJoYXBzIG11bHRpLWxpbmsgb3BlcmF0aW9uLgoKVGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5sODAyMTFfdHhfbWdtdGAgYW5kIGBubDgwMjExX3NlbmRfbWdtdGAgdG8gaGFuZGxlIGBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQWAgYXJlIGFsc28gc2lnbmlmaWNhbnQuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIG9yIHJlZmluaW5nIGEgbWVjaGFuaXNtIGZvciBzZW5kaW5nIG1hbmFnZW1lbnQgZnJhbWVzIHRoYXQgZG9uJiMzOTt0IG5lY2Vzc2FyaWx5IHRhcmdldCBhIHNwZWNpZmljIFNUQS4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc2VtYW50aWNzIG9mIHRoYXQgYXR0cmlidXRlLCBidXQgaXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGJyb2FkY2FzdCBvciBnZW5lcmFsLXB1cnBvc2UgbWFuYWdlbWVudCBmcmFtZSB0cmFuc21pc3Npb25zLCBtYXliZSByZWxhdGVkIHRvIGRpc2NvdmVyeSBvciBwcm9iaW5nLiBBbHNvLCB0aGUgYGllZWU4MDIxMV9tZ210X3R4YCBtb2RpZmljYXRpb24gdG8gaGFuZGxlIGBwYXJhbXMtJmd0O25vX3N0YWAgZnVydGhlciByZWluZm9yY2VzIHRoaXMgZm9jdXMgb24gbm9uLVNUQS1zcGVjaWZpYyBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbi4KCkZpbmFsbHksIHRoZSBhZGRlZCBgc3RydWN0IHN0YV9pbmZvICpzdGFgIGFyZ3VtZW50IHRvIGBpZWVlODAyMTFfdHhfc2tiX3RpZGAgaW1wbGllcyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gaG93IHRoZSB0cmFuc21pdCBwYXRoIGFzc29jaWF0ZXMgU0tCcyB3aXRoIFNUQSBpbmZvcm1hdGlvbi4gTWF5YmUgdGhpcyB3aWxsIGhlbHAgd2l0aCBhZHZhbmNlZCBzY2hlZHVsaW5nIGFuZCBRb1MgZmVhdHVyZXMsIGJ1dCBJIHdvdWxkIG5lZWQgdG8gZmluZCBvdXQgbW9yZS4KCk15IGtleSBmb2N1cyBzeW1ib2xzIGhlcmUgYXJlOiBgbmw4MDIxMV90eF9tZ210YCwgYGllZWU4MDIxMV9tZ210X3R4YCwgYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCwgYW5kIGBpZWVlODAyMTFfdHhfc2tiX3RpZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHNpZ25hdHVyZSBjaGFuZ2VzIGFuZCBob3cgdGhlIGBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQWAgYXR0cmlidXRlIGlzIGJlaW5nIHVzZWQuIEFuZCwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSByZS1leHBvcnRlZCwgSSB3aWxsIGNoZWNrIHRvIHNlZSBpZiBgaWVlZTgwMjExX3R4X3NrYl90aWRgIGlzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfdHhfc2tiX3RpZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvYWdnLXR4LmM9NjE9c3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCxcbi0tXG5uZXQvbWFjODAyMTEvYWdnLXR4LmMtMTAwLVxubmV0L21hYzgwMjExL2FnZy10eC5jOjEwMTpcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIHRpZCwgLTEpO1xubmV0L21hYzgwMjExL2FnZy10eC5jLTEwMi19XG4tLVxubmV0L21hYzgwMjExL2FnZy10eC5jPTEwND12b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pXG4tLVxubmV0L21hYzgwMjExL2FnZy10eC5jLTEyOS1cdFx0XHRcdFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xubmV0L21hYzgwMjExL2FnZy10eC5jOjEzMDpcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIHRpZCwgLTEpO1xubmV0L21hYzgwMjExL2FnZy10eC5jLTEzMS19XG4tLVxubmV0L21hYzgwMjExL2h0LmM9NDk3PWludCBpZWVlODAyMTFfc2VuZF9zbXBzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvaHQuYy01NDctXHRcdFx0XHRcdCAgICBJRUVFODAyMTFfU1RBVFVTX1NVQkRBVEFfTUFTSyk7XG5uZXQvbWFjODAyMTEvaHQuYzo1NDg6XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCBsaW5rX2lkKTtcbm5ldC9tYWM4MDIxMS9odC5jLTU0OS1cbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yNDYyPXZvaWQgaWVlZTgwMjExX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjQ2NC1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjI0NjU6dm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDY2LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI0ODE9c3RhdGljIGlubGluZSB2b2lkXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyNDgyOmllZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDgzLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDg2LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ4NzpcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjQ4OC1cdFx0XHRcdCAgICB0aWQsIC0xLCBiYW5kKTtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDkxLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ5Mjp2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjQ5My1cdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI0OTY9c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjQ5OS1cdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyNTAwOlx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpO1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjUwMS19XG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYz0yMzc9c3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9yb2Nfc3RhcnRlZChzdHJ1Y3QgaWVlZTgwMjExX3JvY193b3JrICpyb2MsXG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0yNDctXHRcdGlmICghV0FSTl9PTighcm9jLVx1MDAzZWZyYW1lKSkge1xubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzoyNDg6XHRcdFx0aWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyb2MtXHUwMDNlc2RhdGEsIHJvYy1cdTAwM2VmcmFtZSwgNyxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMjQ5LVx0XHRcdFx0XHRcdCAgcm9jLVx1MDAzZWNoYW4tXHUwMDNlYmFuZCk7XG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYz04MTA9aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDI3LVx0aWYgKCFuZWVkX29mZmNoYW4pIHtcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM6MTAyODpcdFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMTAyOS1cdFx0XHRcdCAgICAgcGFyYW1zLVx1MDAzZW5vX3N0YSA/IHN0YSA6IEVSUl9QVFIoLUVOT0VOVCksXG4tLVxubmV0L21hYzgwMjExL3J4LmM9NDA1NT1pZWVlODAyMTFfcnhfaF9hY3Rpb25fcmV0dXJuKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4tLVxubmV0L21hYzgwMjExL3J4LmMtNDEwOC1cbm5ldC9tYWM4MDIxMS9yeC5jOjQxMDk6XHRcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC1cdTAwM2VzZGF0YSwgbnNrYiwgcngtXHUwMDNlc3RhLCA3LCAtMSxcbm5ldC9tYWM4MDIxMS9yeC5jLTQxMTAtXHRcdFx0XHRcdCAgICBzdGF0dXMtXHUwMDNlYmFuZCk7XG4tLVxubmV0L21hYzgwMjExL3NjYW4uYz02NTg9c3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfc2Nhbl9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3NjYW4uYy02ODItXHRcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cdTAwM2Vjb250cm9sLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVFJMX0RPTlRfVVNFX1JBVEVfTUFTSztcbm5ldC9tYWM4MDIxMS9zY2FuLmM6NjgzOlx0XHRpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIDcsIGNoYW5uZWwtXHUwMDNlYmFuZCk7XG5uZXQvbWFjODAyMTEvc2Nhbi5jLTY4NC1cdH1cbi0tXG5uZXQvbWFjODAyMTEvdGRscy5jPTk5Nz1pZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL3RkbHMuYy0xMDY4LVx0aWYgKGFjdGlvbl9jb2RlID09IFdMQU5fUFVCX0FDVElPTl9URExTX0RJU0NPVkVSX1JFUykge1xubmV0L21hYzgwMjExL3RkbHMuYzoxMDY5Olx0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBzdGEsIDcsIGxpbmtfaWQpO1xubmV0L21hYzgwMjExL3RkbHMuYy0xMDcwLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz02NDM2PUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVzZXJ2ZV90aWQpO1xubmV0L21hYzgwMjExL3R4LmMtNjQzNy1cbm5ldC9tYWM4MDIxMS90eC5jOjY0Mzg6dm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvdHguYy02NDM5LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTY0OTUtXG5uZXQvbWFjODAyMTEvdHguYzo2NDk2OnZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvdHguYy02NDk3LVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNjUyMy1cbm5ldC9tYWM4MDIxMS90eC5jOjY1MjQ6XHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xubmV0L21hYzgwMjExL3R4LmMtNjUyNS1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDcwMAoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiA2MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgVGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiB0aGUgYG1hYzgwMjExYCBhbmQgYGNmZzgwMjExYCBzdWJzeXN0ZW1zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGhvdyBmcmFtZXMgZ2V0IGhhbmRsZWQsIGVzcGVjaWFsbHkgd2l0aCB0aGlzIE11bHRpLUxpbmsgT3BlcmF0aW9uIHN0dWZmLiBUaGUga2V5IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cy4KCkZpcnN0LCBsZXQmIzM5O3MgZmlsdGVyIG91dCB0aGUgbm9pc2UuIFRoZSBmdW5jdGlvbnMgYGllZWU4MDIxMV90eF9za2JfdGlkYCBhbmQgYF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZGAgYXJlbiYjMzk7dCBleHBvcnRlZCwgc28gdGhleSYjMzk7cmUgbm90IGVudHJ5IHBvaW50cyBmb3IgdXMuIGBpZWVlODAyMTFfcnhfbGlzdGAgYW5kIGBpZWVlODAyMTFfcnhfbmFwaWAgYXJlIGV4cG9ydGVkLCBzbyB0aG9zZSBhcmUgZ29vZCBjYW5kaWRhdGVzLiBgaWVlZTgwMjExX21nbXRfdHhgIGlzIGEgY2FsbGJhY2sgd2l0aGluIGBtYWM4MDIxMV9jb25maWdfb3BzYCwgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0LCBldmVuIGlmIGl0JiMzOTtzIG5vdCBleHBvcnRlZCBkaXJlY3RseS4gQW5kIGBubDgwMjExX3R4X21nbXRgIGlzIGEgbmV0bGluayBjYWxsYmFjaywgc28gaXQmIzM5O3MgZXhwb3NlZCBleHRlcm5hbGx5LCBhbmQgdGhlcmVmb3JlIHZlcnkgaW1wb3J0YW50LgoKU28sIEkgdGhpbmsgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOgoqICAgYG5sODAyMTFfdHhfbWdtdGAgKG5ldGxpbmsgZm9yIFRYIG1hbmFnZW1lbnQpCiogICBgaWVlZTgwMjExX21nbXRfdHhgIChtYWM4MDIxMSBjYWxsYmFjayBmb3IgVFggbWFuYWdlbWVudCkKKiAgIGBpZWVlODAyMTFfcnhfbGlzdGAgKG1haW4gUlggZW50cnlwb2ludCkKKiAgIGBpZWVlODAyMTFfcnhfbmFwaWAgKG1haW4gUlggZW50cnlwb2ludCkKCk5vdywgd2hhdCBhYm91dCBjb25maWd1cmF0aW9ucz8gV2VsbCwgdGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggYG1hYzgwMjExX2h3c2ltX21haW4uY2AsIHNvIEkmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCBgTUFDODAyMTFfSFdTSU1gLiBJJiMzOTtsbCBhbHNvIG5lZWQgdGhlIGdlbmVyYWwgYE1BQzgwMjExYCBhbmQgYENGRzgwMjExYCBjb25maWd1cmF0aW9ucywgb2J2aW91c2x5LgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYGllZWU4MDIxMV9yeF9saXN0YCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYCAqYXJlKiBpbmRlZWQgdGhlIG1haW4gUlggZW50cnkgcG9pbnRzIGZvciBtYWM4MDIxMSwgYW5kIHRoZXkgYXJlLiBBbmQgdGhlIG90aGVyIHR3byBmdW5jdGlvbnMgYXJlIHRoZSByaWdodCBlbnRyeSBwb2ludHMgZm9yIG1nbXQgVFguCgpBbHJpZ2h0LCB3aXRoIHRoYXQgaW4gbWluZCwgaGVyZSYjMzk7cyBteSBwbGFuOgoKKiAgIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCiogICBNeSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOgogICAgKiAgIGBubDgwMjExX3R4X21nbXRgCiAgICAqICAgYGllZWU4MDIxMV9tZ210X3R4YAogICAgKiAgIGBpZWVlODAyMTFfcnhfbGlzdGAKICAgICogICBgaWVlZTgwMjExX3J4X25hcGlgCiogICBJJiMzOTtsbCBzZXQgdGhlIGZvbGxvd2luZyBgRW5hYmxlQ29uZmlnc2A6CiAgICAqICAgYE1BQzgwMjExYAogICAgKiAgIGBDRkc4MDIxMWAKICAgICogICBgTUFDODAyMTFfSFdTSU1gCgpUaGUgcmF0aW9uYWxlPyBUaGlzIHBhdGNoJiMzOTtzIG1vZGlmaWNhdGlvbnMsIGVzcGVjaWFsbHkgdGhlIGNoYW5nZXMgdG8gdGhlIFJYIGZ1bmN0aW9ucyBhbmQgdGhlIG5ldyAmIzM5O25vX3N0YSYjMzk7IGhhbmRsaW5nIGluIG1hbmFnZW1lbnQgZnJhbWUgdHJhbnNtaXNzaW9uLCBhcmUgY3JpdGljYWwgcGF0aHMgYW5kIGludHJvZHVjZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBmdW5jdGlvbmFsaXR5IGluIGEgc2lnbmlmaWNhbnQgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX3R4X21nbXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nbXRfdHgmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J4X2xpc3QmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J4X25hcGkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG1hYzgwMjExIGFuZCBjZmc4MDIxMSBzdWJzeXN0ZW1zLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGhvdyByZWNlaXZlZCBmcmFtZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCBzdGF0aW9ucyBhbmQgbGlua3MgKE11bHRpLUxpbmsgT3BlcmF0aW9uKS4gSXQgY2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIGNvcmUgUlggZnVuY3Rpb25zIChgaWVlZTgwMjExX3J4X2xpc3RgLCBgaWVlZTgwMjExX3J4X25hcGlgKSBhbmQgbW9kaWZpZXMgdGhlIG1hbmFnZW1lbnQgZnJhbWUgdHJhbnNtaXNzaW9uIHBhdGggdG8gaGFuZGxlIGEgbmV3IGBub19zdGFgIGZsYWcuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ210X3R4JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9saXN0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9uYXBpJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBob3cgcmVjZWl2ZWQgZnJhbWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbnMgYW5kIGxpbmtzIChNdWx0aS1MaW5rIE9wZXJhdGlvbikuIEl0IGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBjb3JlIFJYIGZ1bmN0aW9ucyAoYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCkgYW5kIG1vZGlmaWVzIHRoZSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBwYXRoIHRvIGhhbmRsZSBhIG5ldyBgbm9fc3RhYCBmbGFnLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTU6Mjc6NTYuMTM4NzM5MDcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMyNzAzNDMyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfdHhfbWdtdFwiLFxuICAgIFwiaWVlZTgwMjExX21nbXRfdHhcIixcbiAgICBcImllZWU4MDIxMV9yeF9saXN0XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbmFwaVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBob3cgcmVjZWl2ZWQgZnJhbWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbnMgYW5kIGxpbmtzIChNdWx0aS1MaW5rIE9wZXJhdGlvbikuIEl0IGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBjb3JlIFJYIGZ1bmN0aW9ucyAoYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCkgYW5kIG1vZGlmaWVzIHRoZSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBwYXRoIHRvIGhhbmRsZSBhIG5ldyBgbm9fc3RhYCBmbGFnLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyNzo1Ni4xMzg3NDQ1OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDA5OTIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg3ZjRjOTQzYzliNTJjN2U5NjZlNTcwMzM5MmI5ODI3Yjg3Y2VhNjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxNToyNzo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcXG5pbmRleCAzMzQyNTcwN2MwODQyLi5mYmIzZDE4ZjU1ZGRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xcbkBAIC0yNTAwLDcgKzI1MDAsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcFxcbiBcXHQgICAgIShpc19tY2JjIFxcdTAwMjZcXHUwMDI2IHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyBcXHUwMDI2IFJYX0ZMQUdfREVDUllQVEVEKSlcXG4gXFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VmbGFnIHw9IFJYX0ZMQUdfODAyMztcXG4gXFxuLVxcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVxcdTAwM2VodywgcHVic3RhLCBtc2R1LCBuYXBpKTtcXG4rXFx0aWVlZTgwMjExX3J4X25hcGkoYXItXFx1MDAzZWh3LCBwdWJzdGEgPyBcXHUwMDI2cHVic3RhLVxcdTAwM2VkZWZsaW5rIDogTlVMTCwgbXNkdSwgbmFwaSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGF0aDExa19kcF9yeF9jaGVja19ud2lmaV9oZHJfbGVuX3ZhbGlkKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXFxuaW5kZXggN2Q1YmU3N2IwODFmOC4uMWZhZjE4OTZkMGFiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xcbkBAIC01MDMsOCArNTAzLDYgQEAgdm9pZCBhdGgxMmtfZHBfbW9uX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGUgKmhlID0gTlVMTDtcXG4gXFxuLVxcdHN0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IDA7XFxuLVxcbiBcXHRpZiAoKHN0YXR1cy1cXHUwMDNlZW5jb2RpbmcgPT0gUlhfRU5DX0hFKSBcXHUwMDI2XFx1MDAyNiAhKHN0YXR1cy1cXHUwMDNlZmxhZyBcXHUwMDI2IFJYX0ZMQUdfUkFESU9UQVBfSEUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKHN0YXR1cy1cXHUwMDNlZmxhZyBcXHUwMDI2IFJYX0ZMQUdfU0tJUF9NT05JVE9SKSkge1xcbiBcXHRcXHRoZSA9IHNrYl9wdXNoKG1zZHUsIHNpemVvZihrbm93bikpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcXG5pbmRleCA4ZmEwZTkwYjQ1MzE2Li44NDdhZDI4ZmQzMGIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xcbkBAIC0xMzc1LDYgKzEzNzUsNyBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGRwX3BkZXYtXFx1MDAzZWRwO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcjtcXG4gXFx0c3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IHJ4X2luZm8tXFx1MDAzZXJ4X3N0YXR1cztcXG5AQCAtMTM4NCw5ICsxMzg1LDE5IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXFxuIFxcbiBcXHRwdWJzdGEgPSBwZWVyID8gcGVlci1cXHUwMDNlc3RhIDogTlVMTDtcXG4gXFxuLVxcdHN0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IDA7XFxuLVxcdGlmIChwdWJzdGEgXFx1MDAyNlxcdTAwMjYgcHVic3RhLVxcdTAwM2V2YWxpZF9saW5rcylcXG4tXFx0XFx0YXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGRwLVxcdTAwM2Vod19wYXJhbXMsIHBlZXIsIHJ4Y2IsIHN0YXR1cyk7XFxuK1xcdGlmIChwdWJzdGEpIHtcXG4rXFx0XFx0aWYgKHB1YnN0YS1cXHUwMDNldmFsaWRfbGlua3MpIHtcXG4rXFx0XFx0XFx0dTggbGlua19pZCA9XFxuK1xcdFxcdFxcdFxcdGF0aDEya19od19nZXRfcnhfbGlua19pZChkcC1cXHUwMDNlaHdfcGFyYW1zLCBwZWVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgcnhjYiwgc3RhdHVzKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChsaW5rX2lkIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0XFx0bGlua19wdWJzdGEgPVxcbitcXHRcXHRcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2UocHVic3RhLVxcdTAwM2VsaW5rW2xpbmtfaWRdKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bGlua19wdWJzdGEgPSBcXHUwMDI2cHVic3RhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGF0aDEya19kYmcoZHAtXFx1MDAzZWFiLCBBVEgxMktfREJHX0RBVEEsXFxuIFxcdFxcdCAgIFxcXCJyeCBza2IgJXAgbGVuICV1IHBlZXIgJXBNICVkICVzIHNuICV1ICVzJXMlcyVzJXMlcyVzJXMlcyVzIHJhdGVfaWR4ICV1IHZodF9uc3MgJXUgZnJlcSAldSBiYW5kICV1IGZsYWcgMHgleCBmY3MtZXJyICVpIG1pYy1lcnIgJWkgYW1zZHUtbW9yZSAlaVxcXFxuXFxcIixcXG5AQCAtMTQyMiw3ICsxNDMzLDggQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcXG4gXFxuIFxcdC8qIFRPRE86IHRyYWNlIHJ4IHBhY2tldCAqL1xcbiBcXG4tXFx0aWVlZTgwMjExX3J4X25hcGkoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIHB1YnN0YSwgbXNkdSwgbmFwaSk7XFxuK1xcdGllZWU4MDIxMV9yeF9uYXBpKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBsaW5rX3B1YnN0YSwgbXNkdSxcXG4rXFx0XFx0XFx0ICBuYXBpKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXFxuaW5kZXggNDljZmQ1ZGZjNzBhNi4uMjY4ZjBhOGZkNDZkZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmhcXG5AQCAtMjQ4LDkgKzI0OCw5IEBAIHN0cnVjdCBhdGgxMmtfaHdfb3BzIHtcXG4gXFx0Ym9vbCAoKmRwX3NybmdfaXNfdHhfY29tcF9yaW5nKShpbnQgcmluZ19udW0pO1xcbiBcXHRib29sICgqaXNfZnJhbWVfbGlua19hZ25vc3RpYykoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQpO1xcbi1cXHR2b2lkICgqc2V0X3J4X2xpbmtfaWQpKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4tXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcXG4rXFx0aW50ICgqZ2V0X3J4X2xpbmtfaWQpKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuQEAgLTI4MSwxMyArMjgxLDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19od19tYWNfaWRfdG9fc3JuZ19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxcbitzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXFxuIHtcXG4tXFx0aWYgKGh3LVxcdTAwM2Vod19vcHMtXFx1MDAzZXNldF9yeF9saW5rX2lkKVxcbi1cXHRcXHRody1cXHUwMDNlaHdfb3BzLVxcdTAwM2VzZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpO1xcbitcXHRpZiAoaHctXFx1MDAzZWh3X29wcy1cXHUwMDNlZ2V0X3J4X2xpbmtfaWQpXFxuK1xcdFxcdHJldHVybiBody1cXHUwMDNlaHdfb3BzLVxcdTAwM2VnZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpO1xcbitcXG4rXFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgYXRoMTJrX2Z3X2llIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXFxuaW5kZXggOTVkODdkZDY3ODcyZi4uOGI3MjJlZTBhZDhmYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcXG5AQCAtMjMxNywxNyArMjMxNywxNiBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYixcXG4gXFx0cmV0dXJuIHRsdl90YWcgPT0gSEFMX1JYX01QRFVfU1RBUlQ7XFxuIH1cXG4gXFxuLXZvaWRcXG4tYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbitpbnRcXG4rYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXFxuIHtcXG4tXFx0c3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gMTtcXG4tXFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gZHBfcGVlci1cXHUwMDNlaHdfbGlua3NbcnhjYi1cXHUwMDNlaHdfbGlua19pZF07XFxuK1xcdHJldHVybiBkcF9wZWVyLVxcdTAwM2Vod19saW5rc1tyeGNiLVxcdTAwM2Vod19saW5rX2lkXTtcXG4gfVxcbiBcXG4tdm9pZFxcbi1hdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuK2ludFxcbithdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cylcXG4ge1xcbkBAIC0yMzQxLDEwICsyMzQwLDkgQEAgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbiBcXHRsaW5rc19tYXAgPSBSRUFEX09OQ0UoZHBfcGVlci1cXHUwMDNlbGlua19wZWVyc19tYXApO1xcbiBcXHRmb3JfZWFjaF9zZXRfYml0KGksIFxcdTAwMjZsaW5rc19tYXAsIEFUSDEyS19OVU1fTUFYX0xJTktTKSB7XFxuIFxcdFxcdGxpbmtfcGVlciA9IHJjdV9kZXJlZmVyZW5jZShkcF9wZWVyLVxcdTAwM2VsaW5rX3BlZXJzW2ldKTtcXG4tXFx0XFx0aWYgKGxpbmtfcGVlciBcXHUwMDI2XFx1MDAyNiBsaW5rX3BlZXItXFx1MDAzZXBlZXJfaWQgPT0gcnhjYi1cXHUwMDNlcGVlcl9pZCkge1xcbi1cXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAxO1xcbi1cXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBsaW5rX3BlZXItXFx1MDAzZWxpbmtfaWQ7XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAobGlua19wZWVyIFxcdTAwMjZcXHUwMDI2IGxpbmtfcGVlci1cXHUwMDNlcGVlcl9pZCA9PSByeGNiLVxcdTAwM2VwZWVyX2lkKVxcbitcXHRcXHRcXHRyZXR1cm4gbGlua19wZWVyLVxcdTAwM2VsaW5rX2lkO1xcbiBcXHR9XFxuK1xcbitcXHRyZXR1cm4gLTE7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXFxuaW5kZXggMWQzYTQ3ODhhMmRkOS4uZDY4NDg5ZmY3YjAzNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcXG5AQCAtNTcsMTAgKzU3LDEwIEBAIGF0aDEya193aWZpN19kcF9yeGRlc2NfbXBkdV92YWxpZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBoYWxfcnhfZGVzYyAqcnhfZGVzYyk7XFxuIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfdGlkX2RlbGV0ZV9oYW5kbGVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGF0aDEya19kcF9yeF90aWRfcnhxICpyeF90aWQpO1xcbi12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcXG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XFxuK2ludCBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xcbitpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuY1xcbmluZGV4IDRjMTExOWVkY2FlZGMuLjNjZDM1MTQ2NDI5NmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXFxuQEAgLTE1OCw3ICsxNTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNuOTI3NF9vcHMgPSB7XFxuIFxcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl9xY245Mjc0LFxcbiBcXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3JpbmdfcWNuOTI3NCxcXG4gXFx0LmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY19xY245Mjc0LFxcbi1cXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NCxcXG4rXFx0LmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQsXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgd2NuNzg1MF9vcHMgPSB7XFxuQEAgLTE2OSw3ICsxNjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgd2NuNzg1MF9vcHMgPSB7XFxuIFxcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxcbiBcXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCxcXG4gXFx0LmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY193Y243ODUwLFxcbi1cXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcXG4rXFx0LmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAsXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNjMjA3Ml9vcHMgPSB7XFxuQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNjMjA3Ml9vcHMgPSB7XFxuIFxcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxcbiBcXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCxcXG4gXFx0LmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY193Y243ODUwLFxcbi1cXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcXG4rXFx0LmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAsXFxuIH07XFxuIFxcbiAjZGVmaW5lIEFUSDEyS19UWF9SSU5HX01BU0tfMCAweDFcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcXG5pbmRleCAyYjcwN2ZmYzFhMjBmLi41ZDYyYzRjODYxYmI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXFxuQEAgLTcyNjAsNyArNzI2MCw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHN0cnVjdCBhdGgxMmtfd21pX21nbXRfcnhfYXJnIHJ4X2V2ID0ge307XFxuIFxcdHN0cnVjdCBhdGgxMmsgKmFyO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuLVxcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcXG4gXFx0Ym9vbCBpc180YWRkcl9udWxsX3BrdDtcXG5AQCAtNzM2MiwxMSArNzM2MSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0Z290byBleGl0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdHB1YnN0YSA9IHBlZXItXFx1MDAzZXN0YTtcXG4tXFx0XFx0aWYgKHB1YnN0YSBcXHUwMDI2XFx1MDAyNiBwdWJzdGEtXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuLVxcdFxcdFxcdHN0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IDE7XFxuLVxcdFxcdFxcdHN0YXR1cy1cXHUwMDNlbGlua19pZCA9IHBlZXItXFx1MDAzZWxpbmtfaWQ7XFxuLVxcdFxcdH1cXG4gXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmRwLVxcdTAwM2VkcF9sb2NrKTtcXG4gXFx0XFx0Z290byBzZW5kX3J4O1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcXG5pbmRleCA5NjEwMmQyYWYyY2Y5Li5jNDVjNDczMzc1MDllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcXG5AQCAtNyw3ICs3LDggQEBcXG4gI2luY2x1ZGUgXFxcImhjbWQuaFxcXCJcXG4gXFxuIHN0YXRpYyB2b2lkXFxuLWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbitpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGl3bF9tbGRfYmFpZF9kYXRhICpiYWlkX2RhdGEsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaXdsX21sZF9yZW9yZGVyX2J1ZmZlciAqcmVvcmRlcl9idWYsXFxuQEAgLTMyLDcgKzMzLDcgQEAgaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuIFxcdFxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShza2JfbGlzdCkpKSB7XFxuIFxcdFxcdFxcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdHJlb3JkZXJfYnVmLVxcdTAwM2VxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RhKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0bGlua19zdGEpO1xcbiBcXHRcXHRcXHRyZW9yZGVyX2J1Zi1cXHUwMDNlbnVtX3N0b3JlZC0tO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtNzQsNyArNzUsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX3JlbGVhc2VfZnJhbWVzX2Zyb21fbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gXFxuIFxcdHJlb3JkZXJfYnVmID0gXFx1MDAyNmJhX2RhdGEtXFx1MDAzZXJlb3JkZXJfYnVmW3F1ZXVlXTtcXG4gXFxuLVxcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLVxcdTAwM2VzdGEsIG5hcGksIGJhX2RhdGEsXFxuK1xcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYV9kYXRhLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgcmVvcmRlcl9idWYsIG5zc24pO1xcbiBvdXRfdW5sb2NrOlxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5AQCAtMTgwLDcgKzE4MSw3IEBAIHZvaWQgaXdsX21sZF9kZWxfYmEoc3RydWN0IGl3bF9tbGQgKm1sZCwgaW50IHF1ZXVlLFxcbiBcXHRyZW9yZGVyX2J1ZiA9IFxcdTAwMjZiYV9kYXRhLVxcdTAwM2VyZW9yZGVyX2J1ZltxdWV1ZV07XFxuIFxcbiBcXHQvKiByZWxlYXNlIGFsbCBmcmFtZXMgdGhhdCBhcmUgaW4gdGhlIHJlb3JkZXIgYnVmZmVyIHRvIHRoZSBzdGFjayAqL1xcbi1cXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YS1cXHUwMDNlc3RhLCBOVUxMLFxcbitcXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGJhX2RhdGEsIHJlb3JkZXJfYnVmLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaWVlZTgwMjExX3NuX2FkZChyZW9yZGVyX2J1Zi1cXHUwMDNlaGVhZF9zbixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0YmFfZGF0YS1cXHUwMDNlYnVmX3NpemUpKTtcXG5AQCAtMTkzLDcgKzE5NCw3IEBAIHZvaWQgaXdsX21sZF9kZWxfYmEoc3RydWN0IGl3bF9tbGQgKm1sZCwgaW50IHF1ZXVlLFxcbiAgKi9cXG4gZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0XFxuIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLVxcdFxcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4rXFx0XFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MpXFxuIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiX21hY19oZWFkZXIoc2tiKTtcXG5AQCAtMjI4LDEyICsyMjksMTIgQEAgaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0cmV0dXJuIElXTF9NTERfUEFTU19TS0I7XFxuIFxcbiBcXHQvKiBubyBzdGEgeWV0ICovXFxuLVxcdGlmIChJV0xfRldfQ0hFQ0sobWxkLCAhc3RhLFxcbitcXHRpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIWxpbmtfc3RhLFxcbiBcXHRcXHRcXHQgXFxcIkdvdCB2YWxpZCBCQUlEIHdpdGhvdXQgYSB2YWxpZCBzdGF0aW9uIGFzc2lnbmVkIC0gJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBiYWlkKSlcXG4gXFx0XFx0cmV0dXJuIElXTF9NTERfUEFTU19TS0I7XFxuIFxcbi1cXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xcbitcXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cXHUwMDNlc3RhKTtcXG4gXFxuIFxcdC8qIG5vdCBhIGRhdGEgcGFja2V0ICovXFxuIFxcdGlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcXG5AQCAtMzI0LDcgKzMyNSw3IEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdCAqIHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGUgZnJhbWUgcmVsZWFzZSBub3RpZmljYXRpb24gYXJyaXZlcy5cXG4gXFx0ICovXFxuIFxcdGlmICghYW1zZHUgfHwgbGFzdF9zdWJmcmFtZSlcXG4tXFx0XFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgc3RhLCBuYXBpLCBiYWlkX2RhdGEsXFxuK1xcdFxcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYWlkX2RhdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBidWZmZXIsIG5zc24pO1xcbiBcXHRlbHNlIGlmIChidWZmZXItXFx1MDAzZW51bV9zdG9yZWQgPT0gMSlcXG4gXFx0XFx0YnVmZmVyLVxcdTAwM2VoZWFkX3NuID0gbnNzbjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxcbmluZGV4IDY1MWM4MGQxYzdjZGEuLmM2Y2Q1ZmEyMTliZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxcbkBAIC0xLDYgKzEsNiBAQFxcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UgKi9cXG4gLypcXG4tICogQ29weXJpZ2h0IChDKSAyMDI0IEludGVsIENvcnBvcmF0aW9uXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNCwgMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxcbiAgKi9cXG4gI2lmbmRlZiBfX2l3bF9hZ2dfaF9fXFxuICNkZWZpbmUgX19pd2xfYWdnX2hfX1xcbkBAIC0xMDYsNyArMTA2LDcgQEAgaW50IGl3bF9tbGRfYW1wZHVfcnhfc3RvcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiBcXG4gZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0XFxuIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLVxcdFxcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4rXFx0XFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MpO1xcbiBcXG4gdm9pZCBpd2xfbWxkX2hhbmRsZV9mcmFtZV9yZWxlYXNlX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXFxuaW5kZXggMjY5NDM5ZDc4OWY0Ni4uMDJiZGY2Y2NiY2RjOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xcbkBAIC00Nyw3ICs0Nyw4IEBAIGl3bF9tbGRfZmlsbF9waHlfZGF0YV9mcm9tX21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICBpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpXFxuK1xcdFxcdFxcdFxcdCAgIGludCBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXFxuIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiX21hY19oZWFkZXIoc2tiKTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuQEAgLTcxLDEzICs3MiwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LyogaWYgd2UgYXJlIGhlcmUgLSB0aGlzIGZvciBzdXJlIGlzIGVpdGhlciBDQ01QIG9yIEdDTVAgKi9cXG4tXFx0aWYgKCFzdGEpIHtcXG4rXFx0aWYgKCFsaW5rX3N0YSkge1xcbiBcXHRcXHRJV0xfREVCVUdfRFJPUChtbGQsXFxuIFxcdFxcdFxcdCAgICAgICBcXFwiZXhwZWN0ZWQgaHctZGVjcnlwdGVkIHVuaWNhc3QgZnJhbWUgZm9yIHN0YXRpb25cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuLVxcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7XFxuK1xcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVxcdTAwM2VzdGEpO1xcbiBcXG4gXFx0ZXh0aXYgPSAodTggKiloZHIgKyBpZWVlODAyMTFfaGRybGVuKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCk7XFxuIFxcdGtleWlkeCA9IGV4dGl2WzNdIFxcdTAwM2VcXHUwMDNlIDY7XFxuQEAgLTExOSwxNyArMTIwLDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxcbiB7XFxuIFxcdEtVTklUX1NUQVRJQ19TVFVCX1JFRElSRUNUKGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEsXFxuLVxcdFxcdFxcdFxcdCAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTtcXG4rXFx0XFx0XFx0XFx0ICAgbWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIHN0YSkpKSB7XFxuK1xcdGlmICh1bmxpa2VseShpd2xfbWxkX2NoZWNrX3BuKG1sZCwgc2tiLCBxdWV1ZSwgbGlua19zdGEpKSkge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRpZWVlODAyMTFfcnhfbmFwaShtbGQtXFx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XFxuK1xcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cXHUwMDNlaHcsIGxpbmtfc3RhLCBza2IsIG5hcGkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfSUZfSVdMV0lGSV9LVU5JVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKTtcXG4gXFxuQEAgLTE3MjgsNyArMTcyOSw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tbGRfdXBkYXRlX2xhc3RfcnhfdGltZXN0YW1wKHN0cnVjdCBpd2xfbWxkICptbGQsIHU4IGJhaWQpXFxuICAqIFNldHMgKmRyb3AgdG8gdHJ1ZSBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkLlxcbiAgKiBSZXR1cm5zIHRoZSBzdGF0aW9uIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS5cXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqXFxuK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpcXG4gaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiBcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MsXFxuQEAgLTE3NjQsMTEgKzE3NjUsNiBAQCBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuIFxcbiBcXHRyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcXG4gXFxuLVxcdGlmIChsaW5rX3N0YSBcXHUwMDI2XFx1MDAyNiBzdGEtXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuLVxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IHRydWU7XFxuLVxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZCA9IGxpbmtfc3RhLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHR9XFxuLVxcbiBcXHQvKiBmaWxsIGNoZWNrc3VtICovXFxuIFxcdGlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBwa3QtXFx1MDAzZWxlbl9uX2ZsYWdzIFxcdTAwMjYgY3B1X3RvX2xlMzIoRkhfUlNDU1JfUlBBX0VOKSkge1xcbkBAIC0xODAzLDEwICsxNzk5LDEwIEBAIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHF1ZXVlKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHN0YTtcXG4rXFx0cmV0dXJuIGxpbmtfc3RhO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK3N0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsXFxuIFxcdFxcdFxcdFxcdHUzMiBtcGR1X3N0YXR1cyxcXG5AQCAtMTgyMCw3ICsxODE2LDYgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXk7XFxuIFxcdGNvbnN0IHU4ICpmcmFtZSA9ICh2b2lkICopaGRyO1xcbiBcXHRjb25zdCB1OCAqbW1pZTtcXG4tXFx0dTggbGlua19pZDtcXG4gXFxuIFxcdGlmICgobXBkdV9zdGF0dXMgXFx1MDAyNiBJV0xfUlhfTVBEVV9TVEFUVVNfU0VDX01BU0spID09XFxuIFxcdCAgICAgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19OT05FKVxcbkBAIC0xODM2LDEwICsxODMxLDEwIEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gXFx0aWYgKCFpZWVlODAyMTFfaXNfYmVhY29uKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKCFzdGEpXFxuK1xcdGlmICghbGlua19zdGEpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuLVxcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7XFxuK1xcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVxcdTAwM2VzdGEpO1xcbiBcXHRtbGRfdmlmID0gaXdsX21sZF92aWZfZnJvbV9tYWM4MDIxMShtbGRfc3RhLVxcdTAwM2V2aWYpO1xcbiBcXG4gXFx0Lyoga2V5IG1pc21hdGNoIC0gd2lsbCBhbHNvIHJlcG9ydCAhTUlDX09LIGJ1dCB3ZSBzaG91bGRuJ3QgY291bnQgaXQgKi9cXG5AQCAtMTg1Myw4ICsxODQ4LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0bGlua19pZCA9IHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCA/IHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZCA6IDA7XFxuLVxcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2UobWxkX3ZpZi1cXHUwMDNlbGlua1tsaW5rX2lkXSk7XFxuK1xcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2UobWxkX3ZpZi1cXHUwMDNlbGlua1tsaW5rX3N0YS1cXHUwMDNlbGlua19pZF0pO1xcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rKSlcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG5AQCAtMTkwNSw3ICsxODk5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MsIGludCBxdWV1ZSxcXG5AQCAtMTkxNSw3ICsxOTA5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAhaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKSkpXFxuLVxcdFxcdHJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChzdGEsIGhkciwgcnhfc3RhdHVzLCBzdGF0dXMsXFxuK1xcdFxcdHJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGxlMTZfdG9fY3B1KGRlc2MtXFx1MDAzZW1wZHVfbGVuKSk7XFxuIFxcbiBcXHRpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcXG5AQCAtMjAyMyw3ICsyMDE3LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTtcXG4gXFx0c3RydWN0IGl3bF9tbGRfcnhfcGh5X2RhdGEgcGh5X2RhdGEgPSB7fTtcXG4gXFx0c3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKm1wZHVfZGVzYyA9ICh2b2lkICopcGt0LVxcdTAwM2VkYXRhO1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0c2l6ZV90IG1wZHVfZGVzY19zaXplID0gc2l6ZW9mKCptcGR1X2Rlc2MpO1xcbkBAIC0yMDg2LDcgKzIwODAsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcbi1cXHRzdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSwgXFx1MDAyNmRyb3ApO1xcbitcXHRsaW5rX3N0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmRyb3ApO1xcbiBcXHRpZiAoZHJvcClcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG5AQCAtMjEyNyw3ICsyMTIyLDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXG4gXFx0aXdsX21sZF9yeF9maWxsX3N0YXR1cyhtbGQsIGxpbmtfaWQsIGhkciwgc2tiLCBcXHUwMDI2cGh5X2RhdGEpO1xcbiBcXG4tXFx0aWYgKGl3bF9tbGRfcnhfY3J5cHRvKG1sZCwgc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSxcXG4rXFx0aWYgKGl3bF9tbGRfcnhfY3J5cHRvKG1sZCwgbGlua19zdGEsIGhkciwgcnhfc3RhdHVzLCBtcGR1X2Rlc2MsIHF1ZXVlLFxcbiBcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShwa3QtXFx1MDAzZWxlbl9uX2ZsYWdzKSwgXFx1MDAyNmNyeXB0b19sZW4pKVxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbkBAIC0yMTQwLDcgKzIxMzUsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdGlmIChpd2xfbWxkX3RpbWVfc3luY19mcmFtZShtbGQsIHNrYiwgaGRyLVxcdTAwM2VhZGRyMikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBuYXBpLCBxdWV1ZSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7XFxuK1xcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIGxpbmtfc3RhLCBza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG1wZHVfZGVzYyk7XFxuIFxcdHN3aXRjaCAocmVvcmRlcl9yZXMpIHtcXG4gXFx0Y2FzZSBJV0xfTUxEX1BBU1NfU0tCOlxcbiBcXHRcXHRicmVhaztcXG5AQCAtMjE1Myw3ICsyMTQ5LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcdH1cXG4gXFxuLVxcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBzdGEpO1xcbitcXHRpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgbGlua19zdGEpO1xcbiBcXG4gXFx0Z290byBvdXQ7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxcbmluZGV4IDU3M2I4OWMzYzljNjEuLmIwOGM1YWRlM2RiOGYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcXG5AQCAtNjksNyArNjksNyBAQCB2b2lkIGl3bF9tbGRfaGFuZGxlX3JzY19ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbiB2b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpO1xcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKTtcXG4gXFxuIHZvaWQgaXdsX21sZF9oYW5kbGVfcGh5X2Fpcl9zbmlmZmVyX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXFxuaW5kZXggMjliMDI0OGNlYzNkZi4uZTllZmUyOTk2ZjA3MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXFxuQEAgLTIsNyArMiw3IEBAXFxuIC8qXFxuICAqIEtVbml0IHRlc3RzIGZvciBjaGFubmVsIGhlbHBlciBmdW5jdGlvbnNcXG4gICpcXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cXG4rICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgSW50ZWwgQ29ycG9yYXRpb25cXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NrdW5pdC90ZXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NrdW5pdC9zdGF0aWNfc3R1Yi5oXFx1MDAzZVxcbkBAIC00NDEsNyArNDQxLDcgQEAgc3RhdGljIHZvaWRcXG4gZmFrZV9pd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxcbiB7XFxuIFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmdfcmVsZWFzZWRfc2ticywgc2tiKTtcXG4gXFx0Z19udW1fcmVsZWFzZWRfc2ticysrO1xcbkBAIC02MzAsNyArNjMwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9yZW9yZGVyX2J1ZmZlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdG1wZHVfZGVzYyA9IHNldHVwX21wZHVfZGVzYygpO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTtcXG4rXFx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaywgc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBtcGR1X2Rlc2MpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZW9yZGVyX3JlcywgcGFyYW0tXFx1MDAzZWV4cGVjdGVkLnJlb3JkZXJfcmVzKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcXG5pbmRleCBhYjFlYjJlYjBjM2NkLi44YzE5N2EwOTBjMmIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXFxuQEAgLTkwLDcgKzkwLDcgQEAgc3RhdGljIHZvaWQgaXdsX212bV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbiBcXHRcXHRcXHRcXHRmcmFnbGVuLCByeGItXFx1MDAzZXRydWVzaXplKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWVlZTgwMjExX3J4X25hcGkobXZtLVxcdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xcbitcXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBzdGEgPyBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXFxuaW5kZXggN2YwYjRmNWRhYTIxNC4uOGM0MDA5ZDNhMDBjYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcXG5AQCAtMSw2ICsxLDYgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXFxuIC8qXFxuLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE4LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cXG4rICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBJbnRlbCBNb2JpbGUgQ29tbXVuaWNhdGlvbnMgR21iSFxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBJbnRlbCBEZXV0c2NobGFuZCBHbWJIXFxuICAqL1xcbkBAIC0yNDMsNyArMjQzLDcgQEAgc3RhdGljIHZvaWQgaXdsX212bV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcXG4rXFx0aWVlZTgwMjExX3J4X25hcGkobXZtLVxcdTAwM2Vodywgc3RhID8gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGl3bF9tdm1fdXNlZF9hdmVyYWdlX2VuZXJneShzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbkBAIC0yNTI4LDcgKzI1MjgsNyBAQCB2b2lkIGl3bF9tdm1fcnhfbW9uaXRvcl9ub19kYXRhKHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0fVxcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XFxuK1xcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIHN0YSA/IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXFxuaW5kZXggYWJiZTY1Y2JjZDg5ZS4uM2RhMDZhNTU5MTNlZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcXG5AQCAtMTI1NSw3ICsxMjU1LDcgQEAgRVhQT1JUX1NZTUJPTChtdDc2X3J4X3NpZ25hbCk7XFxuIHN0YXRpYyB2b2lkXFxuIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqKmh3LFxcbi1cXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqKnN0YSlcXG4rXFx0XFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqKmxpbmtfc3RhKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IG10NzZfc2tiX2dldF9oZHIoc2tiKTtcXG5AQCAtMTMwMiwxMSArMTMwMiwxNSBAQCBtdDc2X3J4X2NvbnZlcnQoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAgICAgICBzaXplb2YobXN0YXQuY2hhaW5fc2lnbmFsKSk7XFxuIFxcbiBcXHRpZiAobXN0YXQud2NpZCkge1xcbi1cXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSBtc3RhdC53Y2lkLVxcdTAwM2VsaW5rX3ZhbGlkO1xcbi1cXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBtc3RhdC53Y2lkLVxcdTAwM2VsaW5rX2lkO1xcbitcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gd2NpZF90b19zdGEobXN0YXQud2NpZCk7XFxuK1xcbitcXHRcXHRpZiAobXN0YXQud2NpZC1cXHUwMDNlbGlua192YWxpZClcXG4rXFx0XFx0XFx0Kmxpbmtfc3RhID1cXG4rXFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlKHN0YS1cXHUwMDNlbGlua1ttc3RhdC53Y2lkLVxcdTAwM2VsaW5rX2lkXSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0Kmxpbmtfc3RhID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaztcXG4gXFx0fVxcbiBcXG4tXFx0KnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpO1xcbiBcXHQqaHcgPSBtdDc2X3BoeV9odyhkZXYsIG1zdGF0LnBoeV9pZHgpO1xcbiB9XFxuIFxcbkBAIC0xNTMwLDcgKzE1MzQsNyBAQCBtdDc2X2NoZWNrX3N0YShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gdm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4ge1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IsICp0bXA7XFxuIFxcdExJU1RfSEVBRChsaXN0KTtcXG5AQCAtMTU0MSw4ICsxNTQ1LDggQEAgdm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsXFxuIFxcbiBcXHRcXHRtdDc2X2NoZWNrX2NjbXBfcG4oc2tiKTtcXG4gXFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnX2xpc3QgPSBOVUxMO1xcbi1cXHRcXHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFxcdTAwMjZodywgXFx1MDAyNnN0YSk7XFxuLVxcdFxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbitcXHRcXHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFxcdTAwMjZodywgXFx1MDAyNmxpbmtfc3RhKTtcXG4rXFx0XFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfc3RhLCBza2IsIFxcdTAwMjZsaXN0KTtcXG4gXFxuIFxcdFxcdC8qIHN1YnNlcXVlbnQgYW1zZHUgZnJhbWVzICovXFxuIFxcdFxcdHdoaWxlIChuc2tiKSB7XFxuQEAgLTE1NTAsOCArMTU1NCw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxcbiBcXHRcXHRcXHRuc2tiID0gbnNrYi1cXHUwMDNlbmV4dDtcXG4gXFx0XFx0XFx0c2tiLVxcdTAwM2VuZXh0ID0gTlVMTDtcXG4gXFxuLVxcdFxcdFxcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXFx1MDAyNmh3LCBcXHUwMDI2c3RhKTtcXG4tXFx0XFx0XFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIHN0YSwgc2tiLCBcXHUwMDI2bGlzdCk7XFxuK1xcdFxcdFxcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXFx1MDAyNmh3LCBcXHUwMDI2bGlua19zdGEpO1xcbitcXHRcXHRcXHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlcnhfbG9jayk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcXG5pbmRleCAzOTdlYmJmY2FjMDlhLi40NTRkODc2YWViODg2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcXG5AQCAtMzA3MywxMCArMzA3Myw4IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXFxuIFxcdHN0cnVjdCBydHc4OV92aWYgKnJ0d3ZpZiA9IHZpZl90b19ydHd2aWYodmlmKTtcXG4gXFx0c3RydWN0IHJ0dzg5X3J4X2Rlc2NfaW5mbyAqZGVzY19pbmZvID0gaXRlcl9kYXRhLVxcdTAwM2VkZXNjX2luZm87XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBpdGVyX2RhdGEtXFx1MDAzZXNrYjtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXHRzdHJ1Y3QgcnR3ODlfcnhfcGh5X3BwZHUgKnBoeV9wcGR1ID0gaXRlcl9kYXRhLVxcdTAwM2VwaHlfcHBkdTtcXG4tXFx0Ym9vbCBpc19tbGQgPSBpZWVlODAyMTFfdmlmX2lzX21sZCh2aWYpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZjtcXG4gXFx0c3RydWN0IHJ0dzg5X3ZpZl9saW5rICpydHd2aWZfbGluaztcXG4gXFx0Y29uc3QgdTggKmJzc2lkID0gaXRlcl9kYXRhLVxcdTAwM2Vic3NpZDtcXG5AQCAtMzExMCwxMSArMzEwOCw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXFxuIFxcdGlmICghZXRoZXJfYWRkcl9lcXVhbCh0YXJnZXRfYnNzaWQsIGJzc2lkKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoaXNfbWxkKSB7XFxuLVxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IHRydWU7XFxuLVxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZCA9IHJ0d3ZpZl9saW5rLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHR9XFxuLVxcbiBcXHRiYiA9IHJ0dzg5X2dldF9iYl9jdHgocnR3ZGV2LCBydHd2aWZfbGluay1cXHUwMDNlcGh5X2lkeCk7XFxuIFxcdHBrdF9zdGF0ID0gXFx1MDAyNmJiLVxcdTAwM2VjdXJfcGt0X3N0YXQ7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuaW5kZXggMDJiNmQ4MWNjY2QxMS4uYTBkNTE5Y2Q5YzRmYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuQEAgLTE4ODAsOSArMTg4MCw2IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3J4KHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxcbiBcXHRcXHRcXHRcXHRzcC1cXHUwMDNlYWN0aXZlX2xpbmtzX3J4IFxcdTAwMjY9IH5CSVQobGlua19pZCk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0c3AtXFx1MDAzZWFjdGl2ZV9saW5rc19yeCB8PSBCSVQobGlua19pZCk7XFxuLVxcbi1cXHRcXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSB0cnVlO1xcbi1cXHRcXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXFxuaW5kZXggOTdjMTZkNGZmMTI3MS4uNDM2NDc4ZGFmNTU5NiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbkBAIC00MDA5LDYgKzQwMDksNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfdXBkYXRlX2Z0X2llc19wYXJhbXMge1xcbiAgKiBAbGlua19pZDogZm9yIE1MTywgdGhlIGxpbmsgSUQgdG8gdHJhbnNtaXQgb24sIC0xIGlmIG5vdCBnaXZlbjsgbm90ZVxcbiAgKlxcdHRoYXQgdGhlIGxpbmsgSUQgaXNuJ3QgdmFsaWRhdGVkIChtdWNoKSwgaXQncyBpbiByYW5nZSBidXQgdGhlXFxuICAqXFx0bGluayBtaWdodCBub3QgZXhpc3QgKG9yIGJlIHVzZWQgYnkgdGhlIHJlY2VpdmVyIFNUQSlcXG4rICogQG5vX3N0YTogc2V0IGlmIHRoZSBmcmFtZSBzaG91bGQgbm90IGJlIHRyYW5zbWl0dGVkIHVzaW5nIGFuIGV4aXN0aW5nIFNUQVxcbiAgKi9cXG4gc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuO1xcbkBAIC00MDIxLDYgKzQwMjIsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMge1xcbiBcXHRpbnQgbl9jc2Ffb2Zmc2V0cztcXG4gXFx0Y29uc3QgdTE2ICpjc2Ffb2Zmc2V0cztcXG4gXFx0aW50IGxpbmtfaWQ7XFxuK1xcdGJvb2wgbm9fc3RhO1xcbiB9O1xcbiBcXG4gLyoqXFxuQEAgLTk1MDEsNiArOTUwMyw3IEBAIHZvaWQgY2ZnODAyMTFfY29ubl9mYWlsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLFxcbiAgKiBAZmxhZ3M6IGZsYWdzLCBhcyBkZWZpbmVkIGluIFxcdTAwMjZlbnVtIG5sODAyMTFfcnhtZ210X2ZsYWdzXFxuICAqIEByeF90c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBmcmFtZSBSWCBpbiBuYW5vc2Vjb25kc1xcbiAgKiBAYWNrX3RzdGFtcDogSGFyZHdhcmUgdGltZXN0YW1wIG9mIGFjayBUWCBpbiBuYW5vc2Vjb25kc1xcbisgKiBAbm9fc3RhOiBzZXQgaWYgbm8gc3RhdGlvbiBpcyBrbm93biBmb3IgdGhlIGZyYW1lIChyZWxldmFudCBmb3IgTUxEKVxcbiAgKi9cXG4gc3RydWN0IGNmZzgwMjExX3J4X2luZm8ge1xcbiBcXHRpbnQgZnJlcTtcXG5AQCAtOTUxMiw2ICs5NTE1LDcgQEAgc3RydWN0IGNmZzgwMjExX3J4X2luZm8ge1xcbiBcXHR1MzIgZmxhZ3M7XFxuIFxcdHU2NCByeF90c3RhbXA7XFxuIFxcdHU2NCBhY2tfdHN0YW1wO1xcbitcXHRib29sIG5vX3N0YTtcXG4gfTtcXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbmluZGV4IDlkMWZhYzZlODA4MjkuLjdhYWU3MjhlOTZkODQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcXG5AQCAtMTc3MCwxMCArMTc3MCw5IEBAIGVudW0gbWFjODAyMTFfcnhfZW5jb2Rpbmcge1xcbiAgKiBAYW1wZHVfcmVmZXJlbmNlOiBBLU1QRFUgcmVmZXJlbmNlIG51bWJlciwgbXVzdCBiZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3JcXG4gICpcXHRlYWNoIEEtTVBEVSBidXQgdGhlIHNhbWUgZm9yIGVhY2ggc3ViZnJhbWUgd2l0aGluIG9uZSBBLU1QRFVcXG4gICogQHplcm9fbGVuZ3RoX3BzZHVfdHlwZTogcmFkaW90YXAgdHlwZSBvZiB0aGUgMC1sZW5ndGggUFNEVVxcbi0gKiBAbGlua192YWxpZDogaWYgdGhlIGxpbmsgd2hpY2ggaXMgaWRlbnRpZmllZCBieSBAbGlua19pZCBpcyB2YWxpZC4gVGhpcyBmbGFnXFxuLSAqXFx0aXMgc2V0IG9ubHkgd2hlbiBjb25uZWN0aW9uIGlzIE1MTy5cXG4tICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBUaGlzIGlzIHVzZWQgYWxvbmcgd2l0aFxcbi0gKlxcdEBsaW5rX3ZhbGlkLlxcbisgKiBAbGlua19pZDogaWQgb2YgdGhlIGxpbmsgdXNlZCB0byByZWNlaXZlIHRoZSBwYWNrZXQuIFNldCBhbmQgdXNlZCBieVxcbisgKlxcdG1hYzgwMjExIGludGVybmFsbHksIGl0IHVzZXMgQGZyZXEgc2V0IGJ5IHRoZSBkcml2ZXIgdG8gaWRlbnRpZnkgdGhlXFxuKyAqXFx0Y29ycmVjdCBsaW5rIHBlciB2aWYuXFxuICAqL1xcbiBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyB7XFxuIFxcdHU2NCBtYWN0aW1lO1xcbkBAIC0xODEzLDcgKzE4MTIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyB7XFxuIFxcdHU4IGNoYWlucztcXG4gXFx0czggY2hhaW5fc2lnbmFsW0lFRUU4MDIxMV9NQVhfQ0hBSU5TXTtcXG4gXFx0dTggemVyb19sZW5ndGhfcHNkdV90eXBlO1xcbi1cXHR1OCBsaW5rX3ZhbGlkOjEsIGxpbmtfaWQ6NDtcXG4rXFx0dTggbGlua19pZDo0O1xcbiB9O1xcbiBcXG4gc3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpIFxcdTAwM2M9IHNpemVvZl9maWVsZChzdHJ1Y3Qgc2tfYnVmZiwgY2IpKTtcXG5AQCAtNTM4OSwxNCArNTM4OCwxOCBAQCB2b2lkIGllZWU4MDIxMV9yZXN0YXJ0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTtcXG4gICogbWl4ZWQgZm9yIGEgc2luZ2xlIGhhcmR3YXJlLiBNdXN0IG5vdCBydW4gY29uY3VycmVudGx5IHdpdGhcXG4gICogaWVlZTgwMjExX3R4X3N0YXR1c19za2IoKSBvciBpZWVlODAyMTFfdHhfc3RhdHVzX25pKCkuXFxuICAqXFxuKyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxcbisgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXFxuKyAqXFxuICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBCSHMgZGlzYWJsZWQgYW5kIFJDVSByZWFkIGxvY2tcXG4gICpcXG4gICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uXFxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcXG4rICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxcbiAgKiBAc2tiOiB0aGUgYnVmZmVyIHRvIHJlY2VpdmUsIG93bmVkIGJ5IG1hYzgwMjExIGFmdGVyIHRoaXMgY2FsbFxcbiAgKiBAbGlzdDogdGhlIGRlc3RpbmF0aW9uIGxpc3RcXG4gICovXFxuLXZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xcbiBcXG4gLyoqXFxuQEAgLTU0MTQsMTQgKzU0MTcsMTggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gICogbWl4ZWQgZm9yIGEgc2luZ2xlIGhhcmR3YXJlLiBNdXN0IG5vdCBydW4gY29uY3VycmVudGx5IHdpdGhcXG4gICogaWVlZTgwMjExX3R4X3N0YXR1c19za2IoKSBvciBpZWVlODAyMTFfdHhfc3RhdHVzX25pKCkuXFxuICAqXFxuKyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxcbisgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXFxuKyAqXFxuICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBCSHMgZGlzYWJsZWQuXFxuICAqXFxuICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvblxcbi0gKiBAc3RhOiB0aGUgc3RhdGlvbiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXFxuKyAqIEBsaW5rX3N0YTogdGhlIGxpbmsgc3RhdGlvbiB0aGUgZGF0YSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcXG4gICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGxcXG4gICogQG5hcGk6IHRoZSBOQVBJIGNvbnRleHRcXG4gICovXFxuLXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK3ZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG5pbmRleCAwMjAzODdkNzY0MTIyLi40NjUzZjhmMjZlZTcwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXFxuQEAgLTMxODUsNiArMzE4NSwxMSBAQCBlbnVtIG5sODAyMTFfY29tbWFuZHMge1xcbiAgKlxcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXFxuICAqXFx0c2FtZSBzdGF0aW9uIHdpdGhpbiBhIGR1bXAgc2VxdWVuY2UuXFxuICAqXFxuKyAqIEBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQTogVmFsaWQgZm9yIE5MODAyMTFfQ01EX0ZSQU1FIHRvIGRlbm90ZSB0aGF0XFxuKyAqXFx0dGhlIGtlcm5lbCBoYWQgbm8gc3RhdGlvbiBmb3IgYSByZWNlaXZlZCBmcmFtZSBvciBzaG91bGQgbm90IHVzZSBhXFxuKyAqXFx0a25vd24gc3RhdGlvbiB0byB0cmFuc21pdCBhIGZyYW1lLiBUaGlzIGlzIHJlbGV2YW50IHRvIGtub3cgd2hldGhlclxcbisgKlxcdE1MRCBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcHBlbmVkIG9yIHRvIGRpc2FibGUgaXQgd2hlbiBzZW5kaW5nIGEgZnJhbWUuXFxuKyAqXFxuICAqIEBOVU1fTkw4MDIxMV9BVFRSOiB0b3RhbCBudW1iZXIgb2Ygbmw4MDIxMV9hdHRycyBhdmFpbGFibGVcXG4gICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZFxcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXFxuQEAgLTM3ODUsNiArMzc5MCw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7XFxuIFxcbiBcXHROTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUUyxcXG4gXFxuK1xcdE5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBLFxcbitcXG4gXFx0LyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovXFxuIFxcbiBcXHRfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNULFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmNcXG5pbmRleCA0ODMzYjQ2NzcwYjYyLi5kZDhhMTFlZjZlNTJiIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctdHguY1xcbisrKyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguY1xcbkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsXFxuIFxcdGlmIChzdGEtXFx1MDAzZXN0YS5kZWZsaW5rLmhlX2NhcC5oYXNfaGUpXFxuIFxcdFxcdGllZWU4MDIxMV9hZGRfYWRkYmFleHQoc2tiLCAwLCBhZ2dfc2l6ZSk7XFxuIFxcbi1cXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCB0aWQsIC0xKTtcXG4rXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XFxuIH1cXG4gXFxuIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcXG5AQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcXG4gXFxuIFxcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVCB8XFxuIFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcXG4tXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XFxuK1xcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIHRpZCwgLTEpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NlbmRfYmFyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hcC5jIGIvbmV0L21hYzgwMjExL2FwLmNcXG5pbmRleCBlN2FjOTljNWEyMmViLi5mZTI1NTg5MWMzNWYwIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9hcC5jXFxuKysrIGIvbmV0L21hYzgwMjExL2FwLmNcXG5AQCAtODIsOSArODIsNiBAQCBpZWVlODAyMTFfcnhfZW1sX29wX21vZGVfbm90aWYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdGlmICghaWZ0X2V4dF9jYXBhKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAoIXN0YXR1cy1cXHUwMDNlbGlua192YWxpZClcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4gXFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cXHUwMDNlc2EpO1xcbiBcXHRpZiAoIXN0YSlcXG4gXFx0XFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jXFxuaW5kZXggZTFlMWI3ZjgyZjNmZS4uYzVjMjExM2ZhNGY3OSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvaHQuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9odC5jXFxuQEAgLTU0NSw3ICs1NDUsNyBAQCBpbnQgaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdGluZm8tXFx1MDAzZXN0YXR1c19kYXRhID0gSUVFRTgwMjExX1NUQVRVU19UWVBFX1NNUFMgfFxcbiBcXHRcXHRcXHQgICAgdTE2X2VuY29kZV9iaXRzKHN0YXR1c19saW5rX2lkIFxcdTAwM2NcXHUwMDNjIDIgfCBzbXBzLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgSUVFRTgwMjExX1NUQVRVU19TVUJEQVRBX01BU0spO1xcbi1cXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcXG4rXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgbGlua19pZCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuaW5kZXggNTc2MWU5NjIxNDkxNC4uMGQ4ZWIwNDI4ODdhOSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuQEAgLTI0NjMsNyArMjQ2Myw4IEBAIHZvaWQgaWVlZTgwMjExX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuK1xcdFxcdFxcdFxcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcXG4gXFx0XFx0XFx0XFx0IGVudW0gbmw4MDIxMV9iYW5kIGJhbmQpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsXFxuQEAgLTI0ODMsMTggKzI0ODQsMjAgQEAgaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0ICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxcbiB7XFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHRpZCwgLTEsIGJhbmQpO1xcbitcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgRVJSX1BUUigtRU5PRU5UKSxcXG4rXFx0XFx0XFx0XFx0ICAgIHRpZCwgLTEsIGJhbmQpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCk7XFxuK1xcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuK1xcdFxcdFxcdCAgaW50IHRpZCwgaW50IGxpbmtfaWQpO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXFxuLVxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIC0xKTtcXG4rXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xcbmluZGV4IDQzNDYwYTcwNWE2YmQuLmEwYjIxNGRiYjhhZjggMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xcbkBAIC0xNjczLDExICsxNjczLDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmYWNlX3Byb2Nlc3Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdFxcdHN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbi1cXHRcXHRcXHRpZiAoIXN0YXR1cy1cXHUwMDNlbGlua192YWxpZClcXG4tXFx0XFx0XFx0XFx0bGlua19zdGEgPSBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rO1xcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzdGEtXFx1MDAzZWxpbmtbc3RhdHVzLVxcdTAwM2VsaW5rX2lkXSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcud2lwaHktXFx1MDAzZW10eCkpO1xcbitcXHRcXHRcXHRsaW5rX3N0YSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdGEtXFx1MDAzZWxpbmtbc3RhdHVzLVxcdTAwM2VsaW5rX2lkXSk7XFxuIFxcdFxcdFxcdGlmIChsaW5rX3N0YSlcXG4gXFx0XFx0XFx0XFx0aWVlZTgwMjExX2h0X2hhbmRsZV9jaGFud2lkdGhfbm90aWYobG9jYWwsIHNkYXRhLCBzdGEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBsaW5rX3N0YSwgY2hhbndpZHRoLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuY1xcbmluZGV4IGY1MTE2N2YwZmM0NmQuLjM2MTc3NWZiOTMxZWMgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmNcXG5AQCAtMTE4MzEsMTIgKzExODMxLDEwIEBAIHZvaWQgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdHJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItXFx1MDAzZWNiO1xcbiBcXHRmYyA9IGxlMTZfdG9fY3B1KG1nbXQtXFx1MDAzZWZyYW1lX2NvbnRyb2wpO1xcbiBcXG4tXFx0aWYgKHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCkge1xcbi1cXHRcXHRsaW5rID0gc2RhdGFfZGVyZWZlcmVuY2Uoc2RhdGEtXFx1MDAzZWxpbmtbcnhfc3RhdHVzLVxcdTAwM2VsaW5rX2lkXSxcXG4tXFx0XFx0XFx0XFx0XFx0IHNkYXRhKTtcXG4tXFx0XFx0aWYgKCFsaW5rKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFx0bGluayA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2VsaW5rW3J4X3N0YXR1cy1cXHUwMDNlbGlua19pZF0sXFxuK1xcdFxcdFxcdFxcdCBzZGF0YSk7XFxuK1xcdGlmICghbGluaylcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0c3dpdGNoIChmYyBcXHUwMDI2IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7XFxuIFxcdGNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjpcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcXG5pbmRleCA3YWNlZjgwZDVmMWZiLi42NTM3MTA1NzY4MzE2IDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXFxuQEAgLTg1NCw4ICs4NTQsMTAgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdFxcdFxcdG5lZWRfb2ZmY2hhbiA9IHRydWU7XFxuIFxcbiBcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXFx1MDAzZWRhKTtcXG4tXFx0XFx0bWxvX3N0YSA9IHN0YSBcXHUwMDI2XFx1MDAyNiBzdGEtXFx1MDAzZXN0YS5tbG87XFxuK1xcdFxcdGlmICghcGFyYW1zLVxcdTAwM2Vub19zdGEpIHtcXG4rXFx0XFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cXHUwMDNlZGEpO1xcbitcXHRcXHRcXHRtbG9fc3RhID0gc3RhIFxcdTAwMjZcXHUwMDI2IHN0YS1cXHUwMDNlc3RhLm1sbztcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKG1nbXQtXFx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XFxuIFxcdFxcdCAgICBtZ210LVxcdTAwM2V1LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyB8fFxcbkBAIC04ODQsNyArODg2LDggQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdFxcdCAgICAgbG9jYWwtXFx1MDAzZW9wcy1cXHUwMDNlcmVtYWluX29uX2NoYW5uZWwgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICBtZW1jbXAoc2RhdGEtXFx1MDAzZXZpZi5jZmcuYXBfYWRkciwgbWdtdC1cXHUwMDNlYnNzaWQsIEVUSF9BTEVOKSkpIHtcXG4gXFx0XFx0XFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzZGF0YS1cXHUwMDNldS5tZ2QuYXNzb2NpYXRlZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHR9IGVsc2UgaWYgKCFwYXJhbXMtXFx1MDAzZW5vX3N0YSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICBzZGF0YS1cXHUwMDNldS5tZ2QuYXNzb2NpYXRlZCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBldGhlcl9hZGRyX2VxdWFsKHNkYXRhLVxcdTAwM2V2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtXFx1MDAzZWRhKSkge1xcbiBcXHRcXHRcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVxcdTAwM2VkYSk7XFxuIFxcdFxcdFxcdG1sb19zdGEgPSBzdGEgXFx1MDAyNlxcdTAwMjYgc3RhLVxcdTAwM2VzdGEubWxvO1xcbkBAIC0xMDIyLDcgKzEwMjUsOSBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCFuZWVkX29mZmNoYW4pIHtcXG4tXFx0XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7XFxuK1xcdFxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGFyYW1zLVxcdTAwM2Vub19zdGEgPyBzdGEgOiBFUlJfUFRSKC1FTk9FTlQpLFxcbitcXHRcXHRcXHRcXHQgICAgIDcsIGxpbmtfaWQpO1xcbiBcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguY1xcbmluZGV4IDVlMjZiZThlMjdkOGYuLmVkNWEyZTA1OTA3NTcgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3J4LmNcXG4rKysgYi9uZXQvbWFjODAyMTEvcnguY1xcbkBAIC0yMjIsNDMgKzIyMiwyMSBAQCBpZWVlODAyMTFfcnhfcmFkaW90YXBfaGRybGVuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIGludCBsaW5rX2lkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcXG4tXFxuLVxcdGlmIChsaW5rX2lkIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gMTtcXG4tXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gbGlua19pZDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gMDtcXG4tXFx0fVxcbi1cXG4gXFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnNkYXRhLVxcdTAwM2Vza2JfcXVldWUsIHNrYik7XFxuIFxcdHdpcGh5X3dvcmtfcXVldWUoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSwgXFx1MDAyNnNkYXRhLVxcdTAwM2V3b3JrKTtcXG4tXFx0aWYgKHN0YSkge1xcbi1cXHRcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGFfaW5mbztcXG4tXFxuLVxcdFxcdGlmIChsaW5rX2lkIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0XFx0bGlua19zdGFfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXFx1MDAzZWxpbmtbbGlua19pZF0pO1xcbi1cXHRcXHRcXHRpZiAoIWxpbmtfc3RhX2luZm8pXFxuLVxcdFxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0bGlua19zdGFfaW5mbyA9IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbms7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGxpbmtfc3RhX2luZm8tXFx1MDAzZXJ4X3N0YXRzLnBhY2tldHMrKztcXG4tXFx0fVxcbitcXHRpZiAobGlua19zdGEpXFxuK1xcdFxcdGxpbmtfc3RhLVxcdTAwM2VyeF9zdGF0cy5wYWNrZXRzKys7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdCBpbnQgbGlua19pZCxcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxcbiBcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRza2ItXFx1MDAzZXByb3RvY29sID0gMDtcXG4tXFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBsaW5rX2lkLCBzdGEsIHNrYik7XFxuK1xcdF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgbGlua19zdGEsIHNrYik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9oYW5kbGVfbXVfbWltb19tb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuQEAgLTMwMSw3ICsyNzksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRpZiAoIXNrYilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgLTEsIE5VTEwsIHNrYik7XFxuK1xcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIE5VTEwsIHNrYik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTE0OTgsNyArMTQ3Niw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9yZW9yZGVyX2FtcGR1KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcdC8qIGlmIHRoaXMgbXBkdSBpcyBmcmFnbWVudGVkIC0gdGVybWluYXRlIHJ4IGFnZ3JlZ2F0aW9uIHNlc3Npb24gKi9cXG4gXFx0c2MgPSBsZTE2X3RvX2NwdShoZHItXFx1MDAzZXNlcV9jdHJsKTtcXG4gXFx0aWYgKHNjIFxcdTAwMjYgSUVFRTgwMjExX1NDVExfRlJBRykge1xcbi1cXHRcXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHJ4LVxcdTAwM2VzZGF0YSwgcngtXFx1MDAzZWxpbmtfaWQsIE5VTEwsIHNrYik7XFxuK1xcdFxcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXFx1MDAzZXNkYXRhLCBOVUxMLCBza2IpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuQEAgLTI1MjQsNyArMjUwMiw3IEBAIGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4gXFxuICBvdXQ6XFxuIFxcdGllZWU4MDIxMV9sZWRfcngocngtXFx1MDAzZWxvY2FsKTtcXG4tXFx0aWYgKHJ4LVxcdTAwM2VzdGEpXFxuK1xcdGlmIChyeC1cXHUwMDNlbGlua19zdGEpXFxuIFxcdFxcdHJ4LVxcdTAwM2VsaW5rX3N0YS1cXHUwMDNlcnhfc3RhdHMucGFja2V0cysrO1xcbiBcXHRyZXR1cm4gUlhfQ09OVElOVUU7XFxuIH1cXG5AQCAtMzMzNSw4ICszMzEzLDggQEAgaWVlZTgwMjExX3J4X2hfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXHRcXHQgICAgKHRmLVxcdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVRVUVTVCB8fFxcbiBcXHRcXHQgICAgIHRmLVxcdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVTUE9OU0UpKSB7XFxuIFxcdFxcdFxcdHJ4LVxcdTAwM2Vza2ItXFx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfVERMUyk7XFxuLVxcdFxcdFxcdF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXFx1MDAzZWxpbmtfaWQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByeC1cXHUwMDNlc3RhLCByeC1cXHUwMDNlc2tiKTtcXG4rXFx0XFx0XFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19zdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByeC1cXHUwMDNlc2tiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIFJYX1FVRVVFRDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTM5OTEsNyArMzk2OSw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXHRyZXR1cm4gUlhfUVVFVUVEO1xcbiBcXG4gIHF1ZXVlOlxcbi1cXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19pZCwgcngtXFx1MDAzZXN0YSwgcngtXFx1MDAzZXNrYik7XFxuK1xcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX3N0YSwgcngtXFx1MDAzZXNrYik7XFxuIFxcdHJldHVybiBSWF9RVUVVRUQ7XFxuIH1cXG4gXFxuQEAgLTQwMDUsNiArMzk4Myw3IEBAIGllZWU4MDIxMV9yeF9oX3VzZXJzcGFjZV9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuIFxcdFxcdC5sZW4gPSByeC1cXHUwMDNlc2tiLVxcdTAwM2VsZW4sXFxuIFxcdFxcdC5saW5rX2lkID0gcngtXFx1MDAzZWxpbmtfaWQsXFxuIFxcdFxcdC5oYXZlX2xpbmtfaWQgPSByeC1cXHUwMDNlbGlua19pZCBcXHUwMDNlPSAwLFxcbitcXHRcXHQubm9fc3RhID0gIXJ4LVxcdTAwM2VzdGEsXFxuIFxcdH07XFxuIFxcbiBcXHQvKiBza2lwIGtub3duLWJhZCBhY3Rpb24gZnJhbWVzIGFuZCByZXR1cm4gdGhlbSBpbiB0aGUgbmV4dCBoYW5kbGVyICovXFxuQEAgLTQxMjcsNyArNDEwNiw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbl9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4gXFx0XFx0XFx0XFx0XFx0bG9jYWwtXFx1MDAzZWh3Lm9mZmNoYW5uZWxfdHhfaHdfcXVldWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC1cXHUwMDNlc2RhdGEsIG5za2IsIDcsIC0xLFxcbitcXHRcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQocngtXFx1MDAzZXNkYXRhLCBuc2tiLCByeC1cXHUwMDNlc3RhLCA3LCAtMSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHN0YXR1cy1cXHUwMDNlYmFuZCk7XFxuIFxcdH1cXG4gXFxuQEAgLTQxNDcsNyArNDEyNiw3IEBAIGllZWU4MDIxMV9yeF9oX2V4dChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXHRcXHRyZXR1cm4gUlhfRFJPUF9VX1VORVhQRUNURURfRVhUX0ZSQU1FO1xcbiBcXG4gXFx0LyogZm9yIG5vdyBvbmx5IGJlYWNvbnMgYXJlIGV4dCwgc28gcXVldWUgdGhlbSAqL1xcbi1cXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19pZCwgcngtXFx1MDAzZXN0YSwgcngtXFx1MDAzZXNrYik7XFxuK1xcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX3N0YSwgcngtXFx1MDAzZXNrYik7XFxuIFxcbiBcXHRyZXR1cm4gUlhfUVVFVUVEO1xcbiB9XFxuQEAgLTQyMDQsNyArNDE4Myw3IEBAIGllZWU4MDIxMV9yeF9oX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4gXFx0XFx0cmV0dXJuIFJYX0RST1BfVV9VTkhBTkRMRURfTUdNVF9TVFlQRTtcXG4gXFx0fVxcbiBcXG4tXFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXFx1MDAzZWxpbmtfaWQsIHJ4LVxcdTAwM2VzdGEsIHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19zdGEsIHJ4LVxcdTAwM2Vza2IpO1xcbiBcXG4gXFx0cmV0dXJuIFJYX1FVRVVFRDtcXG4gfVxcbkBAIC00MjQ4LDEyICs0MjI3LDI4IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJ4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfcGF0aF9sb2NrKTtcXG4gXFxuIFxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShmcmFtZXMpKSkge1xcbitcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuK1xcbiBcXHRcXHQvKlxcbi1cXHRcXHQgKiBhbGwgdGhlIG90aGVyIGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lc1xcbi1cXHRcXHQgKiB0aGF0IGJlbG9uZyB0byBhbiBhTVBEVSBzaW5jZSB0aGV5IGFyZSBvbiB0aGVcXG4tXFx0XFx0ICogc2FtZSBUSUQgZnJvbSB0aGUgc2FtZSBzdGF0aW9uXFxuK1xcdFxcdCAqIE1vc3QgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzLiBIb3dldmVyLFxcbitcXHRcXHQgKiBpbiB0aGUgY2FzZSBvZiByZW9yZGVyaW5nIGZyYW1lcyBtYXkgaGF2ZSBhcnJpdmVkXFxuK1xcdFxcdCAqIG9uIGRpZmZlcmVudCBsaW5rcywgc28gYWRqdXN0IHRoZSBsaW5rX2lkLCBsaW5rXFxuK1xcdFxcdCAqIGFuZCBsaW5rX3N0YSBhY2NvcmRpbmdseS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHJ4LVxcdTAwM2Vza2IgPSBza2I7XFxuK1xcdFxcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2cngtXFx1MDAzZXNkYXRhLVxcdTAwM2V2aWYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB1bmxpa2VseShyeC1cXHUwMDNlbGlua19pZCAhPSBzdGF0dXMtXFx1MDAzZWxpbmtfaWQpKSB7XFxuK1xcdFxcdFxcdGlmIChyeC1cXHUwMDNlc3RhKSB7XFxuK1xcdFxcdFxcdFxcdHJ4LVxcdTAwM2VsaW5rX3N0YSA9XFxuK1xcdFxcdFxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZShyeC1cXHUwMDNlc3RhLVxcdTAwM2VsaW5rW3J4LVxcdTAwM2VsaW5rX2lkXSk7XFxuK1xcbitcXHRcXHRcXHRcXHQvKiBMaW5rIGdvdCBkaXNhYmxlZCwganVzdCB1c2UgZGVmbGluayAqL1xcbitcXHRcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VsaW5rX3N0YSlcXG4rXFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZWxpbmtfc3RhID0gXFx1MDAyNnJ4LVxcdTAwM2VzdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cngtXFx1MDAzZWxpbmtfaWQgPSBzdGF0dXMtXFx1MDAzZWxpbmtfaWQ7XFxuK1xcdFxcdFxcdHJ4LVxcdTAwM2VsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHJ4LVxcdTAwM2VzZGF0YS1cXHUwMDNlbGlua1tzdGF0dXMtXFx1MDAzZWxpbmtfaWRdKTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKFdBUk5fT05fT05DRSghcngtXFx1MDAzZWxpbmspKSB7XFxuIFxcdFxcdFxcdHJlcyA9IFJYX0RST1BfVV9OT19MSU5LO1xcbkBAIC00MzIzLDcgKzQzMTgsMzQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBzdGF0aWMgYm9vbFxcbiBpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggbGlua19pZClcXG4ge1xcbi1cXHRyZXR1cm4gISEoc3RhLVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2IEJJVChsaW5rX2lkKSk7XFxuK1xcdGlmIChzdGEtXFx1MDAzZW1sbylcXG4rXFx0XFx0cmV0dXJuIHN0YS1cXHUwMDNldmFsaWRfbGlua3MgXFx1MDAyNiBCSVQobGlua19pZCk7XFxuK1xcbitcXHRyZXR1cm4gc3RhLVxcdTAwM2VkZWZsaW5rLmxpbmtfaWQgPT0gbGlua19pZDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWxpbmtfc3RhKSB8fFxcbitcXHQgICAgIWllZWU4MDIxMV9yeF9pc192YWxpZF9zdGFfbGlua19pZChcXHUwMDI2bGlua19zdGEtXFx1MDAzZXN0YS1cXHUwMDNlc3RhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbGlua19zdGEtXFx1MDAzZWxpbmtfaWQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRzdGEgPSBsaW5rX3N0YS1cXHUwMDNlc3RhO1xcbitcXG4rXFx0cngtXFx1MDAzZXN0YSA9IHN0YTtcXG4rXFx0cngtXFx1MDAzZWxvY2FsID0gc3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNlbG9jYWw7XFxuK1xcdHJ4LVxcdTAwM2VsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cXHUwMDNlc2RhdGEtXFx1MDAzZWxpbmtbbGlua19zdGEtXFx1MDAzZWxpbmtfaWRdKTtcXG4rXFx0aWYgKCFyeC1cXHUwMDNlbGluaylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cngtXFx1MDAzZWxpbmtfaWQgPSByeC1cXHUwMDNlbGluay1cXHUwMDNlbGlua19pZDtcXG4rXFx0cngtXFx1MDAzZWxpbmtfc3RhID0gbGlua19zdGE7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG5AQCAtNDM2MCwxMSArNDM4MiwxMyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcbiBcXHRpZiAobGlua19pZCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZyeC1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIHN0YSBcXHUwMDI2XFx1MDAyNiAhc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3MpXFxuK1xcdFxcdCAgICBzdGEgXFx1MDAyNlxcdTAwMjYgIXN0YS1cXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSB7XFxuIFxcdFxcdFxcdHJ4LVxcdTAwM2VsaW5rID1cXG4gXFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlKHJ4LVxcdTAwM2VzZGF0YS1cXHUwMDNlbGlua1tzdGEtXFx1MDAzZWRlZmxpbmsubGlua19pZF0pO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJ4LVxcdTAwM2VsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShyeC1cXHUwMDNlc3RhLVxcdTAwM2VsaW5rW2xpbmtfaWRdKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cngtXFx1MDAzZWxpbmsgPSBcXHUwMDI2cngtXFx1MDAzZXNkYXRhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHJ4LCBsaW5rX2lkKSkge1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG5AQCAtNDM4Nyw3ICs0NDExLDcgQEAgdm9pZCBpZWVlODAyMTFfcmVsZWFzZV9yZW9yZGVyX3RpbWVvdXQoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpXFxuIFxcdHN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7XFxuIFxcdGludCBsaW5rX2lkID0gLTE7XFxuIFxcbi1cXHQvKiBGSVhNRTogc3RhdGlzdGljcyB3b24ndCBiZSByaWdodCB3aXRoIHRoaXMgKi9cXG4rXFx0LyogTk9URTogdGhlIGNvcnJlY3QgbGluayBTVEEgZm9yIHRoZSBmcmFtZSBpcyBzZXQgbGF0ZXIgKi9cXG4gXFx0aWYgKHN0YS1cXHUwMDNlc3RhLnZhbGlkX2xpbmtzKVxcbiBcXHRcXHRsaW5rX2lkID0gZmZzKHN0YS1cXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSAtIDE7XFxuIFxcbkBAIC00OTE0LDIwICs0OTM4LDE0IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF84MDIzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9zdGFfcnhfc3RhdHMgKnN0YXRzO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVxcdTAwM2Vza2IpO1xcbi1cXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IHJ4LVxcdTAwM2VzdGE7XFxuLVxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcXG4rXFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gcngtXFx1MDAzZWxpbmtfc3RhO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtXFx1MDAzZXNrYjtcXG4gXFx0dm9pZCAqc2EgPSBza2ItXFx1MDAzZWRhdGEgKyBFVEhfQUxFTjtcXG4gXFx0dm9pZCAqZGEgPSBza2ItXFx1MDAzZWRhdGE7XFxuIFxcbi1cXHRpZiAocngtXFx1MDAzZWxpbmtfaWQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXFx1MDAzZWxpbmtbcngtXFx1MDAzZWxpbmtfaWRdKTtcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XFxuLVxcdFxcdFxcdGRldl9rZnJlZV9za2IocngtXFx1MDAzZXNrYik7XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRsaW5rX3N0YSA9IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWxpbmtfc3RhKSkge1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiKHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdHN0YXRzID0gXFx1MDAyNmxpbmtfc3RhLVxcdTAwM2VyeF9zdGF0cztcXG5AQCAtNTE1NCw2ICs1MTcyLDkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2ludm9rZV9mYXN0X3J4KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0fVxcbiBcXG4rXFx0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuK1xcdHN0YXR1cy1cXHUwMDNlbGlua19pZCA9IHJ4LVxcdTAwM2VsaW5rX2lkIFxcdTAwM2MgMCA/IDAgOiByeC1cXHUwMDNlbGlua19pZDtcXG4rXFxuIFxcdGllZWU4MDIxMV9yeF84MDIzKHJ4LCBmYXN0X3J4LCBvcmlnX2xlbik7XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtNTE3OCw2ICs1MTk5LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVxcdTAwM2VsaW5rX3N0YTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSByeC1cXHUwMDNlbGluaztcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cztcXG4gXFxuIFxcdHJ4LVxcdTAwM2Vza2IgPSBza2I7XFxuIFxcbkBAIC01MjIxLDYgKzUyNDMsOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcdFxcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LVxcdTAwM2Vza2ItXFx1MDAzZWRhdGE7XFxuIFxcdH1cXG4gXFxuK1xcdHN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihyeC1cXHUwMDNlc2tiKTtcXG4rXFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gcngtXFx1MDAzZWxpbmtfaWQgXFx1MDAzYyAwID8gMCA6IHJ4LVxcdTAwM2VsaW5rX2lkO1xcbitcXG4gXFx0aWYgKGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcXG4gXFx0XFx0aWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhyeCk7XFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbkBAIC01MjU2LDIyICs1MjgxLDE5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfcnggKmZhc3Rfcng7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeDtcXG4gXFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XFxuLVxcdGludCBsaW5rX2lkID0gLTE7XFxuIFxcbiBcXHRtZW1zZXQoXFx1MDAyNnJ4LCAwLCBzaXplb2YocngpKTtcXG4gXFx0cnguc2tiID0gc2tiO1xcbiBcXHRyeC5sb2NhbCA9IGxvY2FsO1xcbiBcXHRyeC5saXN0ID0gbGlzdDtcXG4tXFx0cngubGlua19pZCA9IC0xO1xcbiBcXG4gXFx0STgwMl9ERUJVR19JTkMobG9jYWwtXFx1MDAzZWRvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50KTtcXG4gXFxuQEAgLTUyNzksMjMgKzUzMDEsMTUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4tXFx0aWYgKCFwdWJzdGEpXFxuK1xcdGlmICghbGlua19wdWJzdGEpXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFxuLVxcdGlmIChzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQpXFxuLVxcdFxcdGxpbmtfaWQgPSBzdGF0dXMtXFx1MDAzZWxpbmtfaWQ7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBUT0RPOiBTaG91bGQgdGhlIGZyYW1lIGJlIGRyb3BwZWQgaWYgdGhlIHJpZ2h0IGxpbmtfaWQgaXMgbm90XFxuLVxcdCAqIGF2YWlsYWJsZT8gT3IgbWF5IGJlIGl0IGlzIGZpbmUgaW4gdGhlIGN1cnJlbnQgZm9ybSB0byBwcm9jZWVkIHdpdGhcXG4tXFx0ICogdGhlIGZyYW1lIHByb2Nlc3NpbmcgYmVjYXVzZSB3aXRoIGZyYW1lIGJlaW5nIGluIDgwMi4zIGZvcm1hdCxcXG4tXFx0ICogbGlua19pZCBpcyB1c2VkIG9ubHkgZm9yIHN0YXRzIHB1cnBvc2UgYW5kIHVwZGF0aW5nIHRoZSBzdGF0cyBvblxcbi1cXHQgKiB0aGUgZGVmbGluayBpcyBmaW5lP1xcbi1cXHQgKi9cXG4tXFx0c3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xcbi1cXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXFx1MDAyNnJ4LCBzdGEsIGxpbmtfaWQpKVxcbitcXHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXFx1MDAzZXN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xcbitcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXFx1MDAyNnJ4LCBzdGEsIGxpbmtfcHVic3RhLVxcdTAwM2VsaW5rX2lkKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4rXFx0cngubGlua19pZCA9IGxpbmtfcHVic3RhLVxcdTAwM2VsaW5rX2lkO1xcbitcXG4gXFx0ZmFzdF9yeCA9IHJjdV9kZXJlZmVyZW5jZShyeC5zdGEtXFx1MDAzZWZhc3RfcngpO1xcbiBcXHRpZiAoIWZhc3RfcngpXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG5AQCAtNTMwNyw1OSArNTMyMSwxOSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBjb25zdW1lKVxcbitzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShpbnQgZnJlcSwgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXFxuIHtcXG4tXFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuLVxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbi1cXHRpbnQgbGlua19pZCA9IC0xO1xcbi1cXG4tXFx0aWYgKGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcXG4tXFx0XFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBOVUxMLCAtMSkpXFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdFxcdHJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpO1xcbi1cXHR9XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogTG9vayB1cCBsaW5rIHN0YXRpb24gZmlyc3QsIGluIGNhc2UgdGhlcmUncyBhXFxuLVxcdCAqIGNoYW5jZSB0aGF0IHRoZXkgbWlnaHQgaGF2ZSBhIGxpbmsgYWRkcmVzcyB0aGF0XFxuLVxcdCAqIGlzIGlkZW50aWNhbCB0byB0aGUgTUxEIGFkZHJlc3MsIHRoYXQgd2F5IHdlJ2xsXFxuLVxcdCAqIGhhdmUgdGhlIGxpbmsgaW5mb3JtYXRpb24gaWYgbmVlZGVkLlxcbi1cXHQgKi9cXG4tXFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3MocngtXFx1MDAzZXNkYXRhLCBoZHItXFx1MDAzZWFkZHIyKTtcXG4tXFx0aWYgKGxpbmtfc3RhKSB7XFxuLVxcdFxcdHN0YSA9IGxpbmtfc3RhLVxcdTAwM2VzdGE7XFxuLVxcdFxcdGxpbmtfaWQgPSBsaW5rX3N0YS1cXHUwMDNlbGlua19pZDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbi1cXG4tXFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhyeC1cXHUwMDNlc2RhdGEsIGhkci1cXHUwMDNlYWRkcjIpO1xcbi1cXHRcXHRpZiAoc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkKSB7XFxuLVxcdFxcdFxcdGxpbmtfaWQgPSBzdGF0dXMtXFx1MDAzZWxpbmtfaWQ7XFxuLVxcdFxcdH0gZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXFx1MDAyNnJ4LVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICBzdGF0dXMtXFx1MDAzZWZyZXEpIHtcXG4tXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XFxuLVxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mO1xcbi1cXG4tXFx0XFx0XFx0Zm9yX2VhY2hfbGlua19kYXRhX3JjdShyeC1cXHUwMDNlc2RhdGEsIGxpbmspIHtcXG4tXFx0XFx0XFx0XFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2VjaGFuY3R4X2NvbmYpO1xcbi1cXHRcXHRcXHRcXHRpZiAoIWNvbmYgfHwgIWNvbmYtXFx1MDAzZWRlZi5jaGFuKVxcbi1cXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdFxcdFxcdGlmIChzdGF0dXMtXFx1MDAzZWZyZXEgPT0gY29uZi1cXHUwMDNlZGVmLmNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxKSB7XFxuLVxcdFxcdFxcdFxcdFxcdGxpbmtfaWQgPSBsaW5rLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0fVxcbitcXHRpZiAoIWZyZXEgfHwgbGluay1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxcbitcXHQgICAgbGluay1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShyeCwgc3RhLCBsaW5rX2lkKSlcXG4rXFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2VjaGFuY3R4X2NvbmYpO1xcbitcXHRpZiAoIWNvbmYgfHwgIWNvbmYtXFx1MDAzZWRlZi5jaGFuKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTtcXG4rXFx0cmV0dXJuIGZyZXEgPT0gY29uZi1cXHUwMDNlZGVmLmNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC01MzY3LDE4ICs1MzQxLDIwIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuICAqIGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgcHJvdGVjdGlvbi5cXG4gICovXFxuIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbitcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuK1xcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbiBcXHRfX2xlMTYgZmM7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeDtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqcHJldjtcXG4gXFx0c3RydWN0IHJobGlzdF9oZWFkICp0bXA7XFxuK1xcdGJvb2wgcnhfZGF0YV9wZW5kaW5nO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGZjID0gKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YSktXFx1MDAzZWZyYW1lX2NvbnRyb2w7XFxuQEAgLTUzODYsNyArNTM2Miw2IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdHJ4LnNrYiA9IHNrYjtcXG4gXFx0cngubG9jYWwgPSBsb2NhbDtcXG4gXFx0cngubGlzdCA9IGxpc3Q7XFxuLVxcdHJ4LmxpbmtfaWQgPSAtMTtcXG4gXFxuIFxcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaWVlZTgwMjExX2lzX21nbXQoZmMpKVxcbiBcXHRcXHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cXHUwMDNlZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpO1xcbkBAIC01NDI2LDk3ICs1NDAxLDEwMiBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRcXHQgICAgIGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpKVxcbiBcXHRcXHRpZWVlODAyMTFfc2Nhbl9yeChsb2NhbCwgc2tiKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJYIG9mIGEgZGF0YSBmcmFtZSBzaG91bGQgb25seSBoYXBwZW4gdG8gZXhpc3Rpbmcgc3RhdGlvbnMuXFxuK1xcdCAqIEl0IGlzIHRoZXJlZm9yZSBtb3JlIGVmZmljaWVudCB0byB1c2UgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyXFxuK1xcdCAqIG9yIHNlYXJjaCBiYXNlZCBvbiB0aGUgc3RhdGlvbidzIGFkZHJlc3MuXFxuK1xcdCAqXFxuK1xcdCAqIE5vdGUgd2Ugd2lsbCBmYWxsIHRocm91Z2ggYW5kIGhhbmRsZSBhIHNwdXJpb3VzIGRhdGEgZnJhbWUgaW4gdGhlXFxuK1xcdCAqIHNhbWUgd2F5IGFzIGEgbWFuYWdlbWVudCBmcmFtZS5cXG4rXFx0ICovXFxuIFxcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHtcXG4tXFx0XFx0c3RydWN0IHN0YV9pbmZvICpzdGEsICpwcmV2X3N0YTtcXG4tXFx0XFx0aW50IGxpbmtfaWQgPSAtMTtcXG4tXFxuLVxcdFxcdGlmIChzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQpXFxuLVxcdFxcdFxcdGxpbmtfaWQgPSBzdGF0dXMtXFx1MDAzZWxpbmtfaWQ7XFxuLVxcbi1cXHRcXHRpZiAocHVic3RhKSB7XFxuLVxcdFxcdFxcdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcXG4tXFx0XFx0XFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFxcdTAwMjZyeCwgc3RhLCBsaW5rX2lkKSlcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBJbiBNTE8gY29ubmVjdGlvbiwgZmV0Y2ggdGhlIGxpbmtfaWQgdXNpbmcgYWRkcjJcXG4tXFx0XFx0XFx0ICogd2hlbiB0aGUgZHJpdmVyIGRvZXMgbm90IHBhc3MgbGlua19pZCBpbiBzdGF0dXMuXFxuLVxcdFxcdFxcdCAqIFdoZW4gdGhlIGFkZHJlc3MgdHJhbnNsYXRpb24gaXMgYWxyZWFkeSBwZXJmb3JtZWQgYnlcXG4tXFx0XFx0XFx0ICogZHJpdmVyL2h3LCB0aGUgdmFsaWQgbGlua19pZCBtdXN0IGJlIHBhc3NlZCBpblxcbi1cXHRcXHRcXHQgKiBzdGF0dXMuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXG4tXFx0XFx0XFx0aWYgKCFzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgXFx1MDAyNlxcdTAwMjYgcHVic3RhLVxcdTAwM2VtbG8pIHtcXG4tXFx0XFx0XFx0XFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xcbi1cXG4tXFx0XFx0XFx0XFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBoZHItXFx1MDAzZWFkZHIyKTtcXG4tXFx0XFx0XFx0XFx0aWYgKCFsaW5rX3N0YSlcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRcXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKFxcdTAwMjZyeCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bGlua19zdGEtXFx1MDAzZWxpbmtfaWQpKVxcbi1cXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0aWYgKGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIHRydWUpKVxcbitcXHRcXHRpZiAobGlua19wdWJzdGEpIHtcXG4rXFx0XFx0XFx0c3RhID0gY29udGFpbmVyX29mKGxpbmtfcHVic3RhLVxcdTAwM2VzdGEsIHN0cnVjdCBzdGFfaW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RhKTtcXG4rXFx0XFx0XFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVxcdTAwM2VsaW5rW2xpbmtfcHVic3RhLVxcdTAwM2VsaW5rX2lkXSk7XFxuK1xcbitcXHRcXHRcXHRyeC5zZGF0YSA9IHN0YS1cXHUwMDNlc2RhdGE7XFxuK1xcdFxcdFxcdGlmIChpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXFx1MDAyNnJ4LCBsaW5rX3N0YSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIHRydWUpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cHJldl9zdGEgPSBOVUxMO1xcbitcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcXG4gXFxuK1xcdFxcdC8qIFNlYXJjaCBmb3Igc3RhdGlvbnMgb24gbm9uLU1MRCBpbnRlcmZhY2VzICovXFxuIFxcdFxcdGZvcl9lYWNoX3N0YV9pbmZvKGxvY2FsLCBoZHItXFx1MDAzZWFkZHIyLCBzdGEsIHRtcCkge1xcbi1cXHRcXHRcXHRpZiAoIXByZXZfc3RhKSB7XFxuLVxcdFxcdFxcdFxcdHByZXZfc3RhID0gc3RhO1xcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcXG4gXFxuLVxcdFxcdFxcdHJ4LnNkYXRhID0gcHJldl9zdGEtXFx1MDAzZXNkYXRhO1xcbi1cXHRcXHRcXHRpZiAoIXN0YXR1cy1cXHUwMDNlbGlua192YWxpZCBcXHUwMDI2XFx1MDAyNiBwcmV2X3N0YS1cXHUwMDNlc3RhLm1sbykge1xcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuK1xcdFxcdFxcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2c3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRcXHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGhkci1cXHUwMDNlYWRkcjIpO1xcbi1cXHRcXHRcXHRcXHRpZiAoIWxpbmtfc3RhKVxcbi1cXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0bGluayA9IFxcdTAwMjZzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cXHUwMDNlZnJlcSwgbGluaykpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0XFx0bGlua19pZCA9IGxpbmtfc3RhLVxcdTAwM2VsaW5rX2lkO1xcbitcXHRcXHRcXHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XFxuK1xcdFxcdFxcdFxcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRcXHRcXHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFxcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XFxuK1xcdFxcdFxcdHJ4LnNkYXRhID0gc3RhLVxcdTAwM2VzZGF0YTtcXG4rXFx0XFx0XFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXFx1MDAyNnJ4LCBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRwcmV2X3N0YSA9IHN0YTtcXG4rXFx0XFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKHByZXZfc3RhKSB7XFxuLVxcdFxcdFxcdHJ4LnNkYXRhID0gcHJldl9zdGEtXFx1MDAzZXNkYXRhO1xcbi1cXHRcXHRcXHRpZiAoIXN0YXR1cy1cXHUwMDNlbGlua192YWxpZCBcXHUwMDI2XFx1MDAyNiBwcmV2X3N0YS1cXHUwMDNlc3RhLm1sbykge1xcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuK1xcdFxcdC8qIEFuZCBzZWFyY2ggc3RhdGlvbnMgb24gTUxEIGludGVyZmFjZXMgKi9cXG4rXFx0XFx0Zm9yX2VhY2hfbGlua19zdGFfaW5mbyhsb2NhbCwgaGRyLVxcdTAwM2VhZGRyMiwgbGlua19zdGEsIHRtcCkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcXG4gXFxuLVxcdFxcdFxcdFxcdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaGRyLVxcdTAwM2VhZGRyMik7XFxuLVxcdFxcdFxcdFxcdGlmICghbGlua19zdGEpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRzdGEgPSBsaW5rX3N0YS1cXHUwMDNlc3RhO1xcbitcXHRcXHRcXHRzZGF0YSA9XFx0c3RhLVxcdTAwM2VzZGF0YTtcXG4rXFx0XFx0XFx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbGlua1tsaW5rX3N0YS1cXHUwMDNlbGlua19pZF0pO1xcbiBcXG4tXFx0XFx0XFx0XFx0bGlua19pZCA9IGxpbmtfc3RhLVxcdTAwM2VsaW5rX2lkO1xcbitcXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cXHUwMDNlZnJlcSwgbGluaykpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xcbitcXHRcXHRcXHRcXHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFxcdTAwMjZyeCwgc2tiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xcbiBcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXFx1MDAyNnJ4LCBwcmV2X3N0YSwgbGlua19pZCkpXFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRyeC5zZGF0YSA9IHN0YS1cXHUwMDNlc2RhdGE7XFxuK1xcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFxcdTAwMjZyeCwgbGlua19zdGEpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XFxuK1xcdFxcdH1cXG4gXFxuK1xcdFxcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcXG4gXFx0XFx0XFx0aWYgKGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIHRydWUpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogZmFsbCB0aHJvdWdoLCBlLmcuIGZvciBzcHVyaW91cyBmcmFtZSBub3RpZmljYXRpb24gKi9cXG4gXFx0fVxcbiBcXG4tXFx0cHJldiA9IE5VTEw7XFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgaXMgYSBtYW5hZ2VtZW50IGZyYW1lIChvciBhIGRhdGEgZnJhbWUgd2l0aG91dCBhIHN0YXRpb24pIGFuZFxcbitcXHQgKiBpdCB3aWxsIGJlIGRlbGl2ZXJlZCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIGEgc3RhdGlvbiBleGlzdHMsXFxuK1xcdCAqIHNvIGl0ZXJhdGUgdGhlIGludGVyZmFjZXMuXFxuK1xcdCAqL1xcbitcXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFxuK1xcdC8qIFdlIGV4cGVjdCB0aGUgZHJpdmVyIHRvIHByb3ZpZGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uICovXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWxvY2FsLVxcdTAwM2VlbXVsYXRlX2NoYW5jdHggXFx1MDAyNlxcdTAwMjYgIXN0YXR1cy1cXHUwMDNlZnJlcSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbitcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9IE5VTEw7XFxuK1xcbiBcXHRcXHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbkBAIC01NTI0LDMwICs1NTA0LDg1IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdFxcdCAgICBzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRsaW5rX3N0YSA9IE5VTEw7XFxuK1xcdFxcdGxpbmsgPSBOVUxMO1xcbitcXG4rXFx0XFx0LyogVHJ5IHRvIHJlc29sdmUgdGhlIHN0YXRpb24gKi9cXG4rXFx0XFx0aWYgKCFpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZikpIHtcXG4rXFx0XFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgaGRyLVxcdTAwM2VhZGRyMik7XFxuK1xcbitcXHRcXHRcXHRpZiAoc3RhKSB7XFxuK1xcdFxcdFxcdFxcdGxpbmtfc3RhID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0XFx0XFx0XFx0bGluayA9IFxcdTAwMjZzZGF0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgaGRyLVxcdTAwM2VhZGRyMik7XFxuK1xcbitcXHRcXHRcXHRpZiAobGlua19zdGEpXFxuK1xcdFxcdFxcdFxcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtXFx1MDAzZWxpbmtbbGlua19zdGEtXFx1MDAzZWxpbmtfaWRdKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogZnJhbWUgaXMgZGVzdGluZWQgZm9yIHRoaXMgaW50ZXJmYWNlLCBidXQgaWYgaXQnc1xcbi1cXHRcXHQgKiBub3QgYWxzbyBmb3IgdGhlIHByZXZpb3VzIG9uZSB3ZSBoYW5kbGUgdGhhdCBhZnRlclxcbi1cXHRcXHQgKiB0aGUgbG9vcCB0byBhdm9pZCBjb3B5aW5nIHRoZSBTS0Igb25jZSB0b28gbXVjaFxcbitcXHRcXHQgKiBJZiB3ZSBmb3VuZCBhIFNUQSBhbmQgaXQgaGFzIGEgdmFsaWQgbGluayBpbmZvcm1hdGlvbiwgdGhlblxcbitcXHRcXHQgKiBSWCB1c2luZyB0aGUgc3RhdGlvbi5cXG4gXFx0XFx0ICovXFxuK1xcdFxcdGlmIChsaW5rX3N0YSBcXHUwMDI2XFx1MDAyNiBsaW5rIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXFx1MDAzZWZyZXEsIGxpbmspKSB7XFxuK1xcdFxcdFxcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcXG4rXFx0XFx0XFx0XFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0LyogTm8gdmFsaWRfbGlua3MgY2hlY2sgYXMgd2UgbmVlZCB0byBSWCBiZWFjb25zICovXFxuK1xcbitcXHRcXHRcXHRyeC5zZGF0YSA9IHNkYXRhO1xcbitcXHRcXHRcXHRpZiAoaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFxcdTAwMjZyeCwgbGlua19zdGEpKVxcbitcXHRcXHRcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xcbiBcXG4tXFx0XFx0aWYgKCFwcmV2KSB7XFxuLVxcdFxcdFxcdHByZXYgPSBzZGF0YTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJ4LnNkYXRhID0gcHJldjtcXG4tXFx0XFx0aWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2UoXFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcXG4rXFx0XFx0LyogTm8gc3RhdGlvbiwgdHJ5IHRvIHJlc29sdmUgdGhlIGxpbmsgYW5kIFJYICovXFxuK1xcdFxcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZikpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XFxuK1xcdFxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4gXFxuLVxcdFxcdHByZXYgPSBzZGF0YTtcXG4tXFx0fVxcbitcXHRcXHRcXHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHNkYXRhLCBsaW5rKSB7XFxuK1xcdFxcdFxcdFxcdGNvbmYgPSByY3VfZGVyZWZlcmVuY2UobGluay1cXHUwMDNlY29uZi1cXHUwMDNlY2hhbmN0eF9jb25mKTtcXG4rXFx0XFx0XFx0XFx0aWYgKCFjb25mIHx8ICFjb25mLVxcdTAwM2VkZWYuY2hhbilcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRpZiAocHJldikge1xcbi1cXHRcXHRyeC5zZGF0YSA9IHByZXY7XFxuK1xcdFxcdFxcdFxcdGlmIChzdGF0dXMtXFx1MDAzZWZyZXEgPT0gY29uZi1cXHUwMDNlZGVmLmNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGZvdW5kID0gdHJ1ZTtcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKFxcdTAwMjZyeCwgc2tiLCB0cnVlKSlcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRpZiAoIWZvdW5kKVxcbitcXHRcXHRcXHRcXHRsaW5rID0gXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRsaW5rID0gXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XFxuK1xcdFxcdFxcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcXG4rXFx0XFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJ4LnNkYXRhID0gc2RhdGE7XFxuK1xcdFxcdHJ4LmxvY2FsID0gc2RhdGEtXFx1MDAzZWxvY2FsO1xcbitcXHRcXHRyeC5saW5rID0gbGluaztcXG4rXFx0XFx0cngubGlua19pZCA9IGxpbmstXFx1MDAzZWxpbmtfaWQ7XFxuK1xcdFxcdHJ4LnN0YSA9IE5VTEw7XFxuK1xcdFxcdHJ4Lmxpbmtfc3RhID0gTlVMTDtcXG4rXFxuK1xcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChyeF9kYXRhX3BlbmRpbmcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIHRydWUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiAgb3V0OlxcbiBcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuIH1cXG5AQCAtNTU1Niw3ICs1NTkxLDggQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gICogVGhpcyBpcyB0aGUgcmVjZWl2ZSBwYXRoIGhhbmRsZXIuIEl0IGlzIGNhbGxlZCBieSBhIGxvdyBsZXZlbCBkcml2ZXIgd2hlbiBhblxcbiAgKiA4MDIuMTEgTVBEVSBpcyByZWNlaXZlZCBmcm9tIHRoZSBoYXJkd2FyZS5cXG4gICovXFxuLXZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuK3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XFxuQEAgLTU2OTQsOSArNTczMCw2IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRShzdGF0dXMtXFx1MDAzZWxpbmtfaWQgXFx1MDAzZT0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQpKVxcbi1cXHRcXHRnb3RvIGRyb3A7XFxuLVxcbiBcXHRzdGF0dXMtXFx1MDAzZXJ4X2ZsYWdzID0gMDtcXG4gXFxuIFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbkBAIC01NzE1LDkgKzU3NDgsMTAgQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcXG4gXFx0XFx0XFx0aWVlZTgwMjExX3RwdF9sZWRfdHJpZ19yeChsb2NhbCwgc2tiLVxcdTAwM2VsZW4pO1xcbiBcXG4gXFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlZmxhZyBcXHUwMDI2IFJYX0ZMQUdfODAyMylcXG4tXFx0XFx0XFx0X19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcXG4rXFx0XFx0XFx0X19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoaHcsIGxpbmtfcHVic3RhLCBza2IsIGxpc3QpO1xcbiBcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcXG4rXFx0XFx0XFx0X19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgbGlua19wdWJzdGEsIHNrYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsaXN0KTtcXG4gXFx0fVxcbiBcXG4gXFx0a2Nvdl9yZW1vdGVfc3RvcCgpO1xcbkBAIC01NzI3LDcgKzU3NjEsOCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X2xpc3QpO1xcbiBcXG4tdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcXG4rdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmICp0bXA7XFxuQEAgLTU3NDAsNyArNTc3NSw3IEBAIHZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuIFxcdCAqIHJlY2VpdmUgcHJvY2Vzc2luZ1xcbiBcXHQgKi9cXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRpZWVlODAyMTFfcnhfbGlzdChodywgcHVic3RhLCBza2IsIFxcdTAwMjZsaXN0KTtcXG4rXFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfcHVic3RhLCBza2IsIFxcdTAwMjZsaXN0KTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRpZiAoIW5hcGkpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmNcXG5pbmRleCBlZWZmMjMwYmQ5MDlmLi4zMjRjMmI2ZDdjZTFiIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvc2Nhbi5jXFxuQEAgLTksNyArOSw3IEBAXFxuICAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1IFxcdTAwM2NmbGFtaW5naWNlQHNvdXJtaWxrLm5ldFxcdTAwM2VcXG4gICogQ29weXJpZ2h0IDIwMTMtMjAxNSAgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkhcXG4gICogQ29weXJpZ2h0IDIwMTYtMjAxNyAgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9hcnAuaFxcdTAwM2VcXG5AQCAtMjA0LDEyICsyMDQsMTAgQEAgaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4gXFx0XFx0ICogYW4gaW5kaWNhdGlvbiBvbiB3aGljaCBvZiB0aGUgbGlua3MgdGhlIGZyYW1lIHdhcyByZWNlaXZlZFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZzY2FuX3NkYXRhLVxcdTAwM2V2aWYpKSB7XFxuLVxcdFxcdFxcdGlmIChyeF9zdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQpIHtcXG4tXFx0XFx0XFx0XFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4rXFx0XFx0XFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4gXFxuLVxcdFxcdFxcdFxcdGxpbmtfY29uZiA9XFxuLVxcdFxcdFxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZShzY2FuX3NkYXRhLVxcdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRsaW5rX2NvbmYgPVxcbitcXHRcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS1cXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGxpbmtfY29uZiA9IFxcdTAwMjZzY2FuX3NkYXRhLVxcdTAwM2V2aWYuYnNzX2NvbmY7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RkbHMuYyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcXG5pbmRleCBkYzJmNjYyZmU0YzQ2Li5lMTdkNDkyYmU1OTAyIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS90ZGxzLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvdGRscy5jXFxuQEAgLTEwNjYsNyArMTA2Niw3IEBAIGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGFjdGlvbl9jb2RlID09IFdMQU5fUFVCX0FDVElPTl9URExTX0RJU0NPVkVSX1JFUykge1xcbi1cXHRcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcXG4rXFx0XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgc3RhLCA3LCBsaW5rX2lkKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcXG5pbmRleCAzYTFlMmM5ZTE1NjVlLi42ZjUyZTg4NDAyMzcxIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXFxuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcXG5AQCAtNjQzNiw3ICs2NDM2LDggQEAgdm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQpXFxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVzZXJ2ZV90aWQpO1xcbiBcXG4gdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbitcXHRcXHRcXHRcXHQgaW50IHRpZCwgaW50IGxpbmtfaWQsXFxuIFxcdFxcdFxcdFxcdCBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YTtcXG5AQCAtNjQ4OCwxMiArNjQ4OSwxMyBAQCB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0ICovXFxuIFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gXFx0SUVFRTgwMjExX1NLQl9DQihza2IpLVxcdTAwM2ViYW5kID0gYmFuZDtcXG4tXFx0aWVlZTgwMjExX3htaXQoc2RhdGEsIE5VTEwsIHNrYik7XFxuK1xcdGllZWU4MDIxMV94bWl0KHNkYXRhLCBzdGEsIHNrYik7XFxuIFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiB9XFxuIFxcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkKVxcbitcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbitcXHRcXHRcXHQgIGludCB0aWQsIGludCBsaW5rX2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjaGFuY3R4X2NvbmY7XFxuIFxcdGVudW0gbmw4MDIxMV9iYW5kIGJhbmQ7XFxuQEAgLTY1MTksNyArNjUyMSw3IEBAIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdGJhbmQgPSAwO1xcbiBcXHR9XFxuIFxcbi1cXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCBsaW5rX2lkLCBiYW5kKTtcXG4rXFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHN0YSwgdGlkLCBsaW5rX2lkLCBiYW5kKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuaW5kZXggNDRmMmJhZDA4NjcwNS4uNDM3YmViY2MwMjc0OCAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbkBAIC0xMDk2LDYgKzEwOTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XFxuIFxcdFtOTDgwMjExX0FUVFJfTlBDQV9QVU5DVF9CSVRNQVBdID1cXG4gXFx0XFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFxcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXFxuIFxcdFtOTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUU10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4rXFx0W05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbiB9O1xcbiBcXG4gLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi9cXG5AQCAtMTQ4NjAsNiArMTQ4NjEsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHQgICAgISh3ZGV2LVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2IEJJVChwYXJhbXMubGlua19pZCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdHBhcmFtcy5ub19zdGEgPVxcbitcXHRcXHRubGFfZ2V0X2ZsYWcoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdKTtcXG4rXFxuIFxcdHBhcmFtcy5idWYgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKTtcXG4gXFx0cGFyYW1zLmxlbiA9IG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7XFxuIFxcbkBAIC0yMjAyNCw3ICsyMjAyOCw5IEBAIGludCBubDgwMjExX3NlbmRfbWdtdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdCAgICAoaW5mby1cXHUwMDNlYWNrX3RzdGFtcCBcXHUwMDI2XFx1MDAyNiBubGFfcHV0X3U2NF82NGJpdChtc2csXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIE5MODAyMTFfQVRUUl9UWF9IV19USU1FU1RBTVAsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluZm8tXFx1MDAzZWFja190c3RhbXAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIE5MODAyMTFfQVRUUl9QQUQpKSlcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpIHx8XFxuK1xcdCAgICAoaW5mby1cXHUwMDNlbm9fc3RhIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEpKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbiBcXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI3OjU2LjY4MzY5NTA2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYyNzI1Mzc5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX3R4X21nbXRcIixcbiAgICBcImllZWU4MDIxMV9tZ210X3R4XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbGlzdFwiLFxuICAgIFwiaWVlZTgwMjExX3J4X25hcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWFjODAyMTEgYW5kIGNmZzgwMjExIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgaG93IHJlY2VpdmVkIGZyYW1lcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHN0YXRpb25zIGFuZCBsaW5rcyAoTXVsdGktTGluayBPcGVyYXRpb24pLiBJdCBjaGFuZ2VzIHRoZSBzaWduYXR1cmUgb2YgY29yZSBSWCBmdW5jdGlvbnMgKGBpZWVlODAyMTFfcnhfbGlzdGAsIGBpZWVlODAyMTFfcnhfbmFwaWApIGFuZCBtb2RpZmllcyB0aGUgbWFuYWdlbWVudCBmcmFtZSB0cmFuc21pc3Npb24gcGF0aCB0byBoYW5kbGUgYSBuZXcgYG5vX3N0YWAgZmxhZy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODdmNGM5NDNjOWI1MmM3ZTk2NmU1NzAzMzkyYjk4MjdiODdjZWE2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTU6Mjc6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcbmluZGV4IDMzNDI1NzA3YzA4NDIuLmZiYjNkMThmNTVkZGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xuQEAgLTI1MDAsNyArMjUwMCw3IEBAIHN0YXRpYyB2b2lkIGF0aDExa19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDExayAqYXIsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwXG4gXHQgICAgIShpc19tY2JjIFx1MDAyNlx1MDAyNiByeF9zdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR19ERUNSWVBURUQpKVxuIFx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHXzgwMjM7XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShhci1cdTAwM2VodywgcHVic3RhLCBtc2R1LCBuYXBpKTtcbitcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVx1MDAzZWh3LCBwdWJzdGEgPyBcdTAwMjZwdWJzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIG1zZHUsIG5hcGkpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhdGgxMWtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXG5pbmRleCA3ZDViZTc3YjA4MWY4Li4xZmFmMTg5NmQwYWIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xuQEAgLTUwMyw4ICs1MDMsNiBAQCB2b2lkIGF0aDEya19kcF9tb25fcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlICpoZSA9IE5VTEw7XG4gXG4tXHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDA7XG4tXG4gXHRpZiAoKHN0YXR1cy1cdTAwM2VlbmNvZGluZyA9PSBSWF9FTkNfSEUpIFx1MDAyNlx1MDAyNiAhKHN0YXR1cy1cdTAwM2VmbGFnIFx1MDAyNiBSWF9GTEFHX1JBRElPVEFQX0hFKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKHN0YXR1cy1cdTAwM2VmbGFnIFx1MDAyNiBSWF9GTEFHX1NLSVBfTU9OSVRPUikpIHtcbiBcdFx0aGUgPSBza2JfcHVzaChtc2R1LCBzaXplb2Yoa25vd24pKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbmluZGV4IDhmYTBlOTBiNDUzMTYuLjg0N2FkMjhmZDMwYjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuQEAgLTEzNzUsNiArMTM3NSw3IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXG4gXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGRwX3BkZXYtXHUwMDNlZHA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzO1xuIFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YTtcbitcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhID0gTlVMTDtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcjtcbiBcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gcnhfaW5mby1cdTAwM2VyeF9zdGF0dXM7XG5AQCAtMTM4NCw5ICsxMzg1LDE5IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXG4gXG4gXHRwdWJzdGEgPSBwZWVyID8gcGVlci1cdTAwM2VzdGEgOiBOVUxMO1xuIFxuLVx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAwO1xuLVx0aWYgKHB1YnN0YSBcdTAwMjZcdTAwMjYgcHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKVxuLVx0XHRhdGgxMmtfaHdfc2V0X3J4X2xpbmtfaWQoZHAtXHUwMDNlaHdfcGFyYW1zLCBwZWVyLCByeGNiLCBzdGF0dXMpO1xuK1x0aWYgKHB1YnN0YSkge1xuK1x0XHRpZiAocHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4rXHRcdFx0dTggbGlua19pZCA9XG4rXHRcdFx0XHRhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoZHAtXHUwMDNlaHdfcGFyYW1zLCBwZWVyLFxuK1x0XHRcdFx0XHRcdFx0IHJ4Y2IsIHN0YXR1cyk7XG4rXG4rXHRcdFx0aWYgKGxpbmtfaWQgXHUwMDNlIDApXG4rXHRcdFx0XHRsaW5rX3B1YnN0YSA9XG4rXHRcdFx0XHRcdHJjdV9kZXJlZmVyZW5jZShwdWJzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bGlua19wdWJzdGEgPSBcdTAwMjZwdWJzdGEtXHUwMDNlZGVmbGluaztcbitcdFx0fVxuK1x0fVxuIFxuIFx0YXRoMTJrX2RiZyhkcC1cdTAwM2VhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHQgICBcInJ4IHNrYiAlcCBsZW4gJXUgcGVlciAlcE0gJWQgJXMgc24gJXUgJXMlcyVzJXMlcyVzJXMlcyVzJXMgcmF0ZV9pZHggJXUgdmh0X25zcyAldSBmcmVxICV1IGJhbmQgJXUgZmxhZyAweCV4IGZjcy1lcnIgJWkgbWljLWVyciAlaSBhbXNkdS1tb3JlICVpXFxuXCIsXG5AQCAtMTQyMiw3ICsxNDMzLDggQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcbiBcdC8qIFRPRE86IHRyYWNlIHJ4IHBhY2tldCAqL1xuIFxuLVx0aWVlZTgwMjExX3J4X25hcGkoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIHB1YnN0YSwgbXNkdSwgbmFwaSk7XG4rXHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsXG4rXHRcdFx0ICBuYXBpKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmhcbmluZGV4IDQ5Y2ZkNWRmYzcwYTYuLjI2OGYwYThmZDQ2ZGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxuQEAgLTI0OCw5ICsyNDgsOSBAQCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB7XG4gXHRib29sICgqZHBfc3JuZ19pc190eF9jb21wX3JpbmcpKGludCByaW5nX251bSk7XG4gXHRib29sICgqaXNfZnJhbWVfbGlua19hZ25vc3RpYykoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210KTtcbi1cdHZvaWQgKCpzZXRfcnhfbGlua19pZCkoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbitcdGludCAoKmdldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4rXHRcdFx0ICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbitcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmVcbkBAIC0yODEsMTMgKzI4MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfbWFjX2lkX3RvX3NybmdfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGgxMmtfaHdfc2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4rc3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2h3X2dldF9yeF9saW5rX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodyxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuIHtcbi1cdGlmIChody1cdTAwM2Vod19vcHMtXHUwMDNlc2V0X3J4X2xpbmtfaWQpXG4tXHRcdGh3LVx1MDAzZWh3X29wcy1cdTAwM2VzZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpO1xuK1x0aWYgKGh3LVx1MDAzZWh3X29wcy1cdTAwM2VnZXRfcnhfbGlua19pZClcbitcdFx0cmV0dXJuIGh3LVx1MDAzZWh3X29wcy1cdTAwM2VnZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpO1xuK1xuK1x0cmV0dXJuIC0xO1xuIH1cbiBcbiBzdHJ1Y3QgYXRoMTJrX2Z3X2llIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcbmluZGV4IDk1ZDg3ZGQ2Nzg3MmYuLjhiNzIyZWUwYWQ4ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuQEAgLTIzMTcsMTcgKzIzMTcsMTYgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRyZXR1cm4gdGx2X3RhZyA9PSBIQUxfUlhfTVBEVV9TVEFSVDtcbiB9XG4gXG4tdm9pZFxuLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbitpbnRcbithdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuIHtcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMTtcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gZHBfcGVlci1cdTAwM2Vod19saW5rc1tyeGNiLVx1MDAzZWh3X2xpbmtfaWRdO1xuK1x0cmV0dXJuIGRwX3BlZXItXHUwMDNlaHdfbGlua3NbcnhjYi1cdTAwM2Vod19saW5rX2lkXTtcbiB9XG4gXG4tdm9pZFxuLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbitpbnRcbithdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuIHtcbkBAIC0yMzQxLDEwICsyMzQwLDkgQEAgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuIFx0bGlua3NfbWFwID0gUkVBRF9PTkNFKGRwX3BlZXItXHUwMDNlbGlua19wZWVyc19tYXApO1xuIFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZsaW5rc19tYXAsIEFUSDEyS19OVU1fTUFYX0xJTktTKSB7XG4gXHRcdGxpbmtfcGVlciA9IHJjdV9kZXJlZmVyZW5jZShkcF9wZWVyLVx1MDAzZWxpbmtfcGVlcnNbaV0pO1xuLVx0XHRpZiAobGlua19wZWVyIFx1MDAyNlx1MDAyNiBsaW5rX3BlZXItXHUwMDNlcGVlcl9pZCA9PSByeGNiLVx1MDAzZXBlZXJfaWQpIHtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX3BlZXItXHUwMDNlbGlua19pZDtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbitcdFx0aWYgKGxpbmtfcGVlciBcdTAwMjZcdTAwMjYgbGlua19wZWVyLVx1MDAzZXBlZXJfaWQgPT0gcnhjYi1cdTAwM2VwZWVyX2lkKVxuK1x0XHRcdHJldHVybiBsaW5rX3BlZXItXHUwMDNlbGlua19pZDtcbiBcdH1cbitcbitcdHJldHVybiAtMTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXG5pbmRleCAxZDNhNDc4OGEyZGQ5Li5kNjg0ODlmZjdiMDM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcbkBAIC01NywxMCArNTcsMTAgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRcdFx0XHQgIHN0cnVjdCBoYWxfcnhfZGVzYyAqcnhfZGVzYyk7XG4gaW50IGF0aDEya193aWZpN19kcF9yeF90aWRfZGVsZXRlX2hhbmRsZXIoc3RydWN0IGF0aDEya19iYXNlICphYixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgYXRoMTJrX2RwX3J4X3RpZF9yeHEgKnJ4X3RpZCk7XG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4raW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbitcdFx0XHRcdFx0ICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbitcdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4raW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbitcdFx0XHRcdFx0ICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbitcdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXG5pbmRleCA0YzExMTllZGNhZWRjLi4zY2QzNTE0NjQyOTZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjbjkyNzRfb3BzID0ge1xuIFx0LmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3FjbjkyNzQsXG4gXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3JpbmdfcWNuOTI3NCxcbiBcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfcWNuOTI3NCxcbi1cdC5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0LFxuK1x0LmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgd2NuNzg1MF9vcHMgPSB7XG5AQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB3Y243ODUwX29wcyA9IHtcbiBcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxuIFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXG4gXHQuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3djbjc4NTAsXG4tXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcbitcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0ge1xuQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNjMjA3Ml9vcHMgPSB7XG4gXHQuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3Jfd2NuNzg1MCxcbiBcdC5kcF9zcm5nX2lzX3R4X2NvbXBfcmluZyA9IGF0aDEya193aWZpN19kcF9zcm5nX2lzX2NvbXBfcmluZ193Y243ODUwLFxuIFx0LmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY193Y243ODUwLFxuLVx0LnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAsXG4rXHQuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MCxcbiB9O1xuIFxuICNkZWZpbmUgQVRIMTJLX1RYX1JJTkdfTUFTS18wIDB4MVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5pbmRleCAyYjcwN2ZmYzFhMjBmLi41ZDYyYzRjODYxYmI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuQEAgLTcyNjAsNyArNzI2MCw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgYXRoMTJrX3dtaV9tZ210X3J4X2FyZyByeF9ldiA9IHt9O1xuIFx0c3RydWN0IGF0aDEyayAqYXI7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhID0gTlVMTDtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbiBcdGJvb2wgaXNfNGFkZHJfbnVsbF9wa3Q7XG5AQCAtNzM2MiwxMSArNzM2MSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuLVx0XHRwdWJzdGEgPSBwZWVyLVx1MDAzZXN0YTtcbi1cdFx0aWYgKHB1YnN0YSBcdTAwMjZcdTAwMjYgcHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAxO1xuLVx0XHRcdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gcGVlci1cdTAwM2VsaW5rX2lkO1xuLVx0XHR9XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRwLVx1MDAzZWRwX2xvY2spO1xuIFx0XHRnb3RvIHNlbmRfcng7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuY1xuaW5kZXggOTYxMDJkMmFmMmNmOS4uYzQ1YzQ3MzM3NTA5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuY1xuQEAgLTcsNyArNyw4IEBAXG4gI2luY2x1ZGUgXCJoY21kLmhcIlxuIFxuIHN0YXRpYyB2b2lkXG4taXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4raXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBpd2xfbWxkX2JhaWRfZGF0YSAqYmFpZF9kYXRhLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgaXdsX21sZF9yZW9yZGVyX2J1ZmZlciAqcmVvcmRlcl9idWYsXG5AQCAtMzIsNyArMzMsNyBAQCBpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKHNrYl9saXN0KSkpIHtcbiBcdFx0XHRpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLFxuIFx0XHRcdFx0XHRcdFx0cmVvcmRlcl9idWYtXHUwMDNlcXVldWUsXG4tXHRcdFx0XHRcdFx0XHRzdGEpO1xuK1x0XHRcdFx0XHRcdFx0bGlua19zdGEpO1xuIFx0XHRcdHJlb3JkZXJfYnVmLVx1MDAzZW51bV9zdG9yZWQtLTtcbiBcdFx0fVxuIFx0fVxuQEAgLTc0LDcgKzc1LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF9yZWxlYXNlX2ZyYW1lc19mcm9tX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXG4gXHRyZW9yZGVyX2J1ZiA9IFx1MDAyNmJhX2RhdGEtXHUwMDNlcmVvcmRlcl9idWZbcXVldWVdO1xuIFxuLVx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtXHUwMDNlc3RhLCBuYXBpLCBiYV9kYXRhLFxuK1x0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEsIG5hcGksIGJhX2RhdGEsXG4gXHRcdFx0XHQgICAgICAgcmVvcmRlcl9idWYsIG5zc24pO1xuIG91dF91bmxvY2s6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbkBAIC0xODAsNyArMTgxLDcgQEAgdm9pZCBpd2xfbWxkX2RlbF9iYShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBpbnQgcXVldWUsXG4gXHRyZW9yZGVyX2J1ZiA9IFx1MDAyNmJhX2RhdGEtXHUwMDNlcmVvcmRlcl9idWZbcXVldWVdO1xuIFxuIFx0LyogcmVsZWFzZSBhbGwgZnJhbWVzIHRoYXQgYXJlIGluIHRoZSByZW9yZGVyIGJ1ZmZlciB0byB0aGUgc3RhY2sgKi9cbi1cdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLVx1MDAzZXN0YSwgTlVMTCxcbitcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBOVUxMLFxuIFx0XHRcdFx0ICAgICAgIGJhX2RhdGEsIHJlb3JkZXJfYnVmLFxuIFx0XHRcdFx0ICAgICAgIGllZWU4MDIxMV9zbl9hZGQocmVvcmRlcl9idWYtXHUwMDNlaGVhZF9zbixcbiBcdFx0XHRcdFx0XHRcdGJhX2RhdGEtXHUwMDNlYnVmX3NpemUpKTtcbkBAIC0xOTMsNyArMTk0LDcgQEAgdm9pZCBpd2xfbWxkX2RlbF9iYShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBpbnQgcXVldWUsXG4gICovXG4gZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0XG4gaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbi1cdFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuK1x0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYylcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpO1xuQEAgLTIyOCwxMiArMjI5LDEyIEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xuIFxuIFx0Lyogbm8gc3RhIHlldCAqL1xuLVx0aWYgKElXTF9GV19DSEVDSyhtbGQsICFzdGEsXG4rXHRpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIWxpbmtfc3RhLFxuIFx0XHRcdCBcIkdvdCB2YWxpZCBCQUlEIHdpdGhvdXQgYSB2YWxpZCBzdGF0aW9uIGFzc2lnbmVkIC0gJWRcXG5cIixcbiBcdFx0XHQgYmFpZCkpXG4gXHRcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbitcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVx1MDAzZXN0YSk7XG4gXG4gXHQvKiBub3QgYSBkYXRhIHBhY2tldCAqL1xuIFx0aWYgKCFpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XG5AQCAtMzI0LDcgKzMyNSw3IEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHQgKiB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGZyYW1lIHJlbGVhc2Ugbm90aWZpY2F0aW9uIGFycml2ZXMuXG4gXHQgKi9cbiBcdGlmICghYW1zZHUgfHwgbGFzdF9zdWJmcmFtZSlcbi1cdFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgc3RhLCBuYXBpLCBiYWlkX2RhdGEsXG4rXHRcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYWlkX2RhdGEsXG4gXHRcdFx0XHRcdCAgICAgICBidWZmZXIsIG5zc24pO1xuIFx0ZWxzZSBpZiAoYnVmZmVyLVx1MDAzZW51bV9zdG9yZWQgPT0gMSlcbiBcdFx0YnVmZmVyLVx1MDAzZWhlYWRfc24gPSBuc3NuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcbmluZGV4IDY1MWM4MGQxYzdjZGEuLmM2Y2Q1ZmEyMTliZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcbkBAIC0xLDYgKzEsNiBAQFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZSAqL1xuIC8qXG4tICogQ29weXJpZ2h0IChDKSAyMDI0IEludGVsIENvcnBvcmF0aW9uXG4rICogQ29weXJpZ2h0IChDKSAyMDI0LCAyMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gI2lmbmRlZiBfX2l3bF9hZ2dfaF9fXG4gI2RlZmluZSBfX2l3bF9hZ2dfaF9fXG5AQCAtMTA2LDcgKzEwNiw3IEBAIGludCBpd2xfbWxkX2FtcGR1X3J4X3N0b3Aoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcbiBlbnVtIGl3bF9tbGRfcmVvcmRlcl9yZXN1bHRcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLVx0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4rXHRcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKTtcbiBcbiB2b2lkIGl3bF9tbGRfaGFuZGxlX2ZyYW1lX3JlbGVhc2Vfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xuaW5kZXggMjY5NDM5ZDc4OWY0Ni4uMDJiZGY2Y2NiY2RjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmNcbkBAIC00Nyw3ICs0Nyw4IEBAIGl3bF9tbGRfZmlsbF9waHlfZGF0YV9mcm9tX21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgaW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxuK1x0XHRcdFx0ICAgaW50IHF1ZXVlLFxuK1x0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiX21hY19oZWFkZXIoc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuQEAgLTcxLDEzICs3MiwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogaWYgd2UgYXJlIGhlcmUgLSB0aGlzIGZvciBzdXJlIGlzIGVpdGhlciBDQ01QIG9yIEdDTVAgKi9cbi1cdGlmICghc3RhKSB7XG4rXHRpZiAoIWxpbmtfc3RhKSB7XG4gXHRcdElXTF9ERUJVR19EUk9QKG1sZCxcbiBcdFx0XHQgICAgICAgXCJleHBlY3RlZCBody1kZWNyeXB0ZWQgdW5pY2FzdCBmcmFtZSBmb3Igc3RhdGlvblxcblwiKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbitcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVx1MDAzZXN0YSk7XG4gXG4gXHRleHRpdiA9ICh1OCAqKWhkciArIGllZWU4MDIxMV9oZHJsZW4oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpO1xuIFx0a2V5aWR4ID0gZXh0aXZbM10gXHUwMDNlXHUwMDNlIDY7XG5AQCAtMTE5LDE3ICsxMjAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHZvaWQgaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcbitcdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXG4ge1xuIFx0S1VOSVRfU1RBVElDX1NUVUJfUkVESVJFQ1QoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSxcbi1cdFx0XHRcdCAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTtcbitcdFx0XHRcdCAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgbGlua19zdGEpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGl3bF9tbGRfY2hlY2tfcG4obWxkLCBza2IsIHF1ZXVlLCBzdGEpKSkge1xuK1x0aWYgKHVubGlrZWx5KGl3bF9tbGRfY2hlY2tfcG4obWxkLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSkpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShtbGQtXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbitcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cdTAwM2VodywgbGlua19zdGEsIHNrYiwgbmFwaSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfSUZfSVdMV0lGSV9LVU5JVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKTtcbiBcbkBAIC0xNzI4LDcgKzE3MjksNyBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX3VwZGF0ZV9sYXN0X3J4X3RpbWVzdGFtcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCB1OCBiYWlkKVxuICAqIFNldHMgKmRyb3AgdG8gdHJ1ZSBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkLlxuICAqIFJldHVybnMgdGhlIHN0YXRpb24gaWYgZm91bmQsIG9yIE5VTEwgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqXG4rc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKlxuIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICBjb25zdCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqbXBkdV9kZXNjLFxuQEAgLTE3NjQsMTEgKzE3NjUsNiBAQCBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXG4gXHRyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcbi1cdGlmIChsaW5rX3N0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkO1xuLVx0fVxuLVxuIFx0LyogZmlsbCBjaGVja3N1bSAqL1xuIFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBwa3QtXHUwMDNlbGVuX25fZmxhZ3MgXHUwMDI2IGNwdV90b19sZTMyKEZIX1JTQ1NSX1JQQV9FTikpIHtcbkBAIC0xODAzLDEwICsxNzk5LDEwIEBAIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0XHRcdFx0XHRcdCAgICBxdWV1ZSk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gc3RhO1xuK1x0cmV0dXJuIGxpbmtfc3RhO1xuIH1cbiBcbi1zdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4rc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLFxuIFx0XHRcdFx0dTMyIG1wZHVfc3RhdHVzLFxuQEAgLTE4MjAsNyArMTgxNiw2IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleTtcbiBcdGNvbnN0IHU4ICpmcmFtZSA9ICh2b2lkICopaGRyO1xuIFx0Y29uc3QgdTggKm1taWU7XG4tXHR1OCBsaW5rX2lkO1xuIFxuIFx0aWYgKChtcGR1X3N0YXR1cyBcdTAwMjYgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19NQVNLKSA9PVxuIFx0ICAgICBJV0xfUlhfTVBEVV9TVEFUVVNfU0VDX05PTkUpXG5AQCAtMTgzNiwxMCArMTgzMSwxMCBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXHRpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICghc3RhKVxuK1x0aWYgKCFsaW5rX3N0YSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbitcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVx1MDAzZXN0YSk7XG4gXHRtbGRfdmlmID0gaXdsX21sZF92aWZfZnJvbV9tYWM4MDIxMShtbGRfc3RhLVx1MDAzZXZpZik7XG4gXG4gXHQvKiBrZXkgbWlzbWF0Y2ggLSB3aWxsIGFsc28gcmVwb3J0ICFNSUNfT0sgYnV0IHdlIHNob3VsZG4ndCBjb3VudCBpdCAqL1xuQEAgLTE4NTMsOCArMTg0OCw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRsaW5rX2lkID0gcnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPyByeF9zdGF0dXMtXHUwMDNlbGlua19pZCA6IDA7XG4tXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4rXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuQEAgLTE5MDUsNyArMTg5OSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiB9XG4gXG4gc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuLVx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbitcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYywgaW50IHF1ZXVlLFxuQEAgLTE5MTUsNyArMTkwOSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9jcnlwdG8oc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcbiBcdGlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSkpXG4tXHRcdHJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChzdGEsIGhkciwgcnhfc3RhdHVzLCBzdGF0dXMsXG4rXHRcdHJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cyxcbiBcdFx0XHRcdFx0ICAgIGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlbXBkdV9sZW4pKTtcbiBcbiBcdGlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XG5AQCAtMjAyMyw3ICsyMDE3LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0c3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IHJ4Yl9hZGRyKHJ4Yik7XG4gXHRzdHJ1Y3QgaXdsX21sZF9yeF9waHlfZGF0YSBwaHlfZGF0YSA9IHt9O1xuIFx0c3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKm1wZHVfZGVzYyA9ICh2b2lkICopcGt0LVx1MDAzZWRhdGE7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xuK1x0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHNpemVfdCBtcGR1X2Rlc2Nfc2l6ZSA9IHNpemVvZigqbXBkdV9kZXNjKTtcbkBAIC0yMDg2LDcgKzIwODAsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRzdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSwgXHUwMDI2ZHJvcCk7XG4rXHRsaW5rX3N0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmRyb3ApO1xuIFx0aWYgKGRyb3ApXG4gXHRcdGdvdG8gZHJvcDtcbiBcbkBAIC0yMTI3LDcgKzIxMjIsNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXG4gXHRpd2xfbWxkX3J4X2ZpbGxfc3RhdHVzKG1sZCwgbGlua19pZCwgaGRyLCBza2IsIFx1MDAyNnBoeV9kYXRhKTtcbiBcbi1cdGlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIHN0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsXG4rXHRpZiAoaXdsX21sZF9yeF9jcnlwdG8obWxkLCBsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsXG4gXHRcdFx0ICAgICAgbGUzMl90b19jcHUocGt0LVx1MDAzZWxlbl9uX2ZsYWdzKSwgXHUwMDI2Y3J5cHRvX2xlbikpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbkBAIC0yMTQwLDcgKzIxMzUsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRpZiAoaXdsX21sZF90aW1lX3N5bmNfZnJhbWUobWxkLCBza2IsIGhkci1cdTAwM2VhZGRyMikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBuYXBpLCBxdWV1ZSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7XG4rXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBsaW5rX3N0YSwgc2tiLFxuK1x0XHRcdFx0ICAgICAgbXBkdV9kZXNjKTtcbiBcdHN3aXRjaCAocmVvcmRlcl9yZXMpIHtcbiBcdGNhc2UgSVdMX01MRF9QQVNTX1NLQjpcbiBcdFx0YnJlYWs7XG5AQCAtMjE1Myw3ICsyMTQ5LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4tXHRpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTtcbitcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7XG4gXG4gXHRnb3RvIG91dDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuaW5kZXggNTczYjg5YzNjOWM2MS4uYjA4YzVhZGUzZGI4ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcbkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgaXdsX21sZF9oYW5kbGVfcnNjX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTtcbitcdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpO1xuIFxuIHZvaWQgaXdsX21sZF9oYW5kbGVfcGh5X2Fpcl9zbmlmZmVyX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmNcbmluZGV4IDI5YjAyNDhjZWMzZGYuLmU5ZWZlMjk5NmYwNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmNcbkBAIC0yLDcgKzIsNyBAQFxuIC8qXG4gICogS1VuaXQgdGVzdHMgZm9yIGNoYW5uZWwgaGVscGVyIGZ1bmN0aW9uc1xuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2t1bml0L3N0YXRpY19zdHViLmhcdTAwM2VcbkBAIC00NDEsNyArNDQxLDcgQEAgc3RhdGljIHZvaWRcbiBmYWtlX2l3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxuIHtcbiBcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Z19yZWxlYXNlZF9za2JzLCBza2IpO1xuIFx0Z19udW1fcmVsZWFzZWRfc2ticysrO1xuQEAgLTYzMCw3ICs2MzAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3Jlb3JkZXJfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdG1wZHVfZGVzYyA9IHNldHVwX21wZHVfZGVzYygpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7XG4rXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaywgc2tiLFxuK1x0XHRcdFx0ICAgICAgbXBkdV9kZXNjKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJlb3JkZXJfcmVzLCBwYXJhbS1cdTAwM2VleHBlY3RlZC5yZW9yZGVyX3Jlcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcbmluZGV4IGFiMWViMmViMGMzY2QuLjhjMTk3YTA5MGMyYjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXG5AQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sXG4gXHRcdFx0XHRmcmFnbGVuLCByeGItXHUwMDNldHJ1ZXNpemUpO1xuIFx0fVxuIFxuLVx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XG4rXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcbmluZGV4IDdmMGI0ZjVkYWEyMTQuLjhjNDAwOWQzYTAwY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuY1xuQEAgLTEsNiArMSw2IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXG4gLypcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uXG4rICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJIXG4gICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxuICAqL1xuQEAgLTI0Myw3ICsyNDMsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xuK1x0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGl3bF9tdm1fdXNlZF9hdmVyYWdlX2VuZXJneShzdHJ1Y3QgaXdsX212bSAqbXZtLFxuQEAgLTI1MjgsNyArMjUyOCw3IEBAIHZvaWQgaXdsX212bV9yeF9tb25pdG9yX25vX2RhdGEoc3RydWN0IGl3bF9tdm0gKm12bSwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0fVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XG4rXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcbmluZGV4IGFiYmU2NWNiY2Q4OWUuLjNkYTA2YTU1OTEzZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuY1xuQEAgLTEyNTUsNyArMTI1NSw3IEBAIEVYUE9SVF9TWU1CT0wobXQ3Nl9yeF9zaWduYWwpO1xuIHN0YXRpYyB2b2lkXG4gbXQ3Nl9yeF9jb252ZXJ0KHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICoqaHcsXG4tXHRcdHN0cnVjdCBpZWVlODAyMTFfc3RhICoqc3RhKVxuK1x0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICoqbGlua19zdGEpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IG10NzZfc2tiX2dldF9oZHIoc2tiKTtcbkBAIC0xMzAyLDExICsxMzAyLDE1IEBAIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICAgICBzaXplb2YobXN0YXQuY2hhaW5fc2lnbmFsKSk7XG4gXG4gXHRpZiAobXN0YXQud2NpZCkge1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IG1zdGF0LndjaWQtXHUwMDNlbGlua192YWxpZDtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBtc3RhdC53Y2lkLVx1MDAzZWxpbmtfaWQ7XG4rXHRcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTtcbitcbitcdFx0aWYgKG1zdGF0LndjaWQtXHUwMDNlbGlua192YWxpZClcbitcdFx0XHQqbGlua19zdGEgPVxuK1x0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW21zdGF0LndjaWQtXHUwMDNlbGlua19pZF0pO1xuK1x0XHRlbHNlXG4rXHRcdFx0Kmxpbmtfc3RhID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbms7XG4gXHR9XG4gXG4tXHQqc3RhID0gd2NpZF90b19zdGEobXN0YXQud2NpZCk7XG4gXHQqaHcgPSBtdDc2X3BoeV9odyhkZXYsIG1zdGF0LnBoeV9pZHgpO1xuIH1cbiBcbkBAIC0xNTMwLDcgKzE1MzQsNyBAQCBtdDc2X2NoZWNrX3N0YShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcbiBcdFx0ICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbi1cdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDtcbiBcdExJU1RfSEVBRChsaXN0KTtcbkBAIC0xNTQxLDggKzE1NDUsOCBAQCB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcbiBcbiBcdFx0bXQ3Nl9jaGVja19jY21wX3BuKHNrYik7XG4gXHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmcmFnX2xpc3QgPSBOVUxMO1xuLVx0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZzdGEpO1xuLVx0XHRpZWVlODAyMTFfcnhfbGlzdChodywgc3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuK1x0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZsaW5rX3N0YSk7XG4rXHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiBcbiBcdFx0Lyogc3Vic2VxdWVudCBhbXNkdSBmcmFtZXMgKi9cbiBcdFx0d2hpbGUgKG5za2IpIHtcbkBAIC0xNTUwLDggKzE1NTQsOCBAQCB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcbiBcdFx0XHRuc2tiID0gbnNrYi1cdTAwM2VuZXh0O1xuIFx0XHRcdHNrYi1cdTAwM2VuZXh0ID0gTlVMTDtcbiBcbi1cdFx0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZzdGEpO1xuLVx0XHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4rXHRcdFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcdTAwMjZodywgXHUwMDI2bGlua19zdGEpO1xuK1x0XHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiBcdFx0fVxuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXJ4X2xvY2spO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcbmluZGV4IDM5N2ViYmZjYWMwOWEuLjQ1NGQ4NzZhZWI4ODYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcbkBAIC0zMDczLDEwICszMDczLDggQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcbiBcdHN0cnVjdCBydHc4OV92aWYgKnJ0d3ZpZiA9IHZpZl90b19ydHd2aWYodmlmKTtcbiBcdHN0cnVjdCBydHc4OV9yeF9kZXNjX2luZm8gKmRlc2NfaW5mbyA9IGl0ZXJfZGF0YS1cdTAwM2VkZXNjX2luZm87XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaXRlcl9kYXRhLVx1MDAzZXNrYjtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBydHc4OV9yeF9waHlfcHBkdSAqcGh5X3BwZHUgPSBpdGVyX2RhdGEtXHUwMDNlcGh5X3BwZHU7XG4tXHRib29sIGlzX21sZCA9IGllZWU4MDIxMV92aWZfaXNfbWxkKHZpZik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZjtcbiBcdHN0cnVjdCBydHc4OV92aWZfbGluayAqcnR3dmlmX2xpbms7XG4gXHRjb25zdCB1OCAqYnNzaWQgPSBpdGVyX2RhdGEtXHUwMDNlYnNzaWQ7XG5AQCAtMzExMCwxMSArMzEwOCw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG4gXHRpZiAoIWV0aGVyX2FkZHJfZXF1YWwodGFyZ2V0X2Jzc2lkLCBic3NpZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKGlzX21sZCkge1xuLVx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IHRydWU7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkID0gcnR3dmlmX2xpbmstXHUwMDNlbGlua19pZDtcbi1cdH1cbi1cbiBcdGJiID0gcnR3ODlfZ2V0X2JiX2N0eChydHdkZXYsIHJ0d3ZpZl9saW5rLVx1MDAzZXBoeV9pZHgpO1xuIFx0cGt0X3N0YXQgPSBcdTAwMjZiYi1cdTAwM2VjdXJfcGt0X3N0YXQ7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuaW5kZXggMDJiNmQ4MWNjY2QxMS4uYTBkNTE5Y2Q5YzRmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuQEAgLTE4ODAsOSArMTg4MCw2IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3J4KHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxuIFx0XHRcdFx0c3AtXHUwMDNlYWN0aXZlX2xpbmtzX3J4IFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRzcC1cdTAwM2VhY3RpdmVfbGlua3NfcnggfD0gQklUKGxpbmtfaWQpO1xuLVxuLVx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IDk3YzE2ZDRmZjEyNzEuLjQzNjQ3OGRhZjU1OTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtNDAwOSw2ICs0MDA5LDcgQEAgc3RydWN0IGNmZzgwMjExX3VwZGF0ZV9mdF9pZXNfcGFyYW1zIHtcbiAgKiBAbGlua19pZDogZm9yIE1MTywgdGhlIGxpbmsgSUQgdG8gdHJhbnNtaXQgb24sIC0xIGlmIG5vdCBnaXZlbjsgbm90ZVxuICAqXHR0aGF0IHRoZSBsaW5rIElEIGlzbid0IHZhbGlkYXRlZCAobXVjaCksIGl0J3MgaW4gcmFuZ2UgYnV0IHRoZVxuICAqXHRsaW5rIG1pZ2h0IG5vdCBleGlzdCAob3IgYmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIgU1RBKVxuKyAqIEBub19zdGE6IHNldCBpZiB0aGUgZnJhbWUgc2hvdWxkIG5vdCBiZSB0cmFuc21pdHRlZCB1c2luZyBhbiBleGlzdGluZyBTVEFcbiAgKi9cbiBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMge1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuO1xuQEAgLTQwMjEsNiArNDAyMiw3IEBAIHN0cnVjdCBjZmc4MDIxMV9tZ210X3R4X3BhcmFtcyB7XG4gXHRpbnQgbl9jc2Ffb2Zmc2V0cztcbiBcdGNvbnN0IHUxNiAqY3NhX29mZnNldHM7XG4gXHRpbnQgbGlua19pZDtcbitcdGJvb2wgbm9fc3RhO1xuIH07XG4gXG4gLyoqXG5AQCAtOTUwMSw2ICs5NTAzLDcgQEAgdm9pZCBjZmc4MDIxMV9jb25uX2ZhaWxlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsXG4gICogQGZsYWdzOiBmbGFncywgYXMgZGVmaW5lZCBpbiBcdTAwMjZlbnVtIG5sODAyMTFfcnhtZ210X2ZsYWdzXG4gICogQHJ4X3RzdGFtcDogSGFyZHdhcmUgdGltZXN0YW1wIG9mIGZyYW1lIFJYIGluIG5hbm9zZWNvbmRzXG4gICogQGFja190c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBhY2sgVFggaW4gbmFub3NlY29uZHNcbisgKiBAbm9fc3RhOiBzZXQgaWYgbm8gc3RhdGlvbiBpcyBrbm93biBmb3IgdGhlIGZyYW1lIChyZWxldmFudCBmb3IgTUxEKVxuICAqL1xuIHN0cnVjdCBjZmc4MDIxMV9yeF9pbmZvIHtcbiBcdGludCBmcmVxO1xuQEAgLTk1MTIsNiArOTUxNSw3IEBAIHN0cnVjdCBjZmc4MDIxMV9yeF9pbmZvIHtcbiBcdHUzMiBmbGFncztcbiBcdHU2NCByeF90c3RhbXA7XG4gXHR1NjQgYWNrX3RzdGFtcDtcbitcdGJvb2wgbm9fc3RhO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbmluZGV4IDlkMWZhYzZlODA4MjkuLjdhYWU3MjhlOTZkODQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5AQCAtMTc3MCwxMCArMTc3MCw5IEBAIGVudW0gbWFjODAyMTFfcnhfZW5jb2Rpbmcge1xuICAqIEBhbXBkdV9yZWZlcmVuY2U6IEEtTVBEVSByZWZlcmVuY2UgbnVtYmVyLCBtdXN0IGJlIGEgZGlmZmVyZW50IHZhbHVlIGZvclxuICAqXHRlYWNoIEEtTVBEVSBidXQgdGhlIHNhbWUgZm9yIGVhY2ggc3ViZnJhbWUgd2l0aGluIG9uZSBBLU1QRFVcbiAgKiBAemVyb19sZW5ndGhfcHNkdV90eXBlOiByYWRpb3RhcCB0eXBlIG9mIHRoZSAwLWxlbmd0aCBQU0RVXG4tICogQGxpbmtfdmFsaWQ6IGlmIHRoZSBsaW5rIHdoaWNoIGlzIGlkZW50aWZpZWQgYnkgQGxpbmtfaWQgaXMgdmFsaWQuIFRoaXMgZmxhZ1xuLSAqXHRpcyBzZXQgb25seSB3aGVuIGNvbm5lY3Rpb24gaXMgTUxPLlxuLSAqIEBsaW5rX2lkOiBpZCBvZiB0aGUgbGluayB1c2VkIHRvIHJlY2VpdmUgdGhlIHBhY2tldC4gVGhpcyBpcyB1c2VkIGFsb25nIHdpdGhcbi0gKlx0QGxpbmtfdmFsaWQuXG4rICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBTZXQgYW5kIHVzZWQgYnlcbisgKlx0bWFjODAyMTEgaW50ZXJuYWxseSwgaXQgdXNlcyBAZnJlcSBzZXQgYnkgdGhlIGRyaXZlciB0byBpZGVudGlmeSB0aGVcbisgKlx0Y29ycmVjdCBsaW5rIHBlciB2aWYuXG4gICovXG4gc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMge1xuIFx0dTY0IG1hY3RpbWU7XG5AQCAtMTgxMyw3ICsxODEyLDcgQEAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMge1xuIFx0dTggY2hhaW5zO1xuIFx0czggY2hhaW5fc2lnbmFsW0lFRUU4MDIxMV9NQVhfQ0hBSU5TXTtcbiBcdHU4IHplcm9fbGVuZ3RoX3BzZHVfdHlwZTtcbi1cdHU4IGxpbmtfdmFsaWQ6MSwgbGlua19pZDo0O1xuK1x0dTggbGlua19pZDo0O1xuIH07XG4gXG4gc3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpIFx1MDAzYz0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBza19idWZmLCBjYikpO1xuQEAgLTUzODksMTQgKzUzODgsMTggQEAgdm9pZCBpZWVlODAyMTFfcmVzdGFydF9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7XG4gICogbWl4ZWQgZm9yIGEgc2luZ2xlIGhhcmR3YXJlLiBNdXN0IG5vdCBydW4gY29uY3VycmVudGx5IHdpdGhcbiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS5cbiAgKlxuKyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuKyAqIGhhcyB0byBiZSBwcm92aWRlZCBhbmQgdGhlIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBtYXkgYmUgc2tpcHBlZC5cbisgKlxuICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBCSHMgZGlzYWJsZWQgYW5kIFJDVSByZWFkIGxvY2tcbiAgKlxuICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvblxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcbisgKiBAbGlua19zdGE6IHRoZSBsaW5rIHN0YXRpb24gdGhlIGRhdGEgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4gICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGxcbiAgKiBAbGlzdDogdGhlIGRlc3RpbmF0aW9uIGxpc3RcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuK3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4rXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIFxuIC8qKlxuQEAgLTU0MTQsMTQgKzU0MTcsMTggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxuICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLlxuICAqXG4rICogRm9yIGRhdGEgZnJhbWVzLCB3aGVuIGhhcmR3YXJlIGhhcyBkb25lIGFkZHJlc3MgdHJhbnNsYXRpb24sIGEgbGluayBzdGF0aW9uXG4rICogaGFzIHRvIGJlIHByb3ZpZGVkIGFuZCB0aGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uIG1heSBiZSBza2lwcGVkLlxuKyAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZC5cbiAgKlxuICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvblxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcbisgKiBAbGlua19zdGE6IHRoZSBsaW5rIHN0YXRpb24gdGhlIGRhdGEgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4gICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGxcbiAgKiBAbmFwaTogdGhlIE5BUEkgY29udGV4dFxuICAqL1xuLXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4rdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbitcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuaW5kZXggMDIwMzg3ZDc2NDEyMi4uNDY1M2Y4ZjI2ZWU3MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbkBAIC0zMTg1LDYgKzMxODUsMTEgQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHtcbiAgKlx0VGhlIGFnZ3JlZ2F0ZWQgbWVzc2FnZSBhbHdheXMgcHJlY2VkZXMgdGhlIHBlci1saW5rIG1lc3NhZ2VzIGZvciB0aGVcbiAgKlx0c2FtZSBzdGF0aW9uIHdpdGhpbiBhIGR1bXAgc2VxdWVuY2UuXG4gICpcbisgKiBATkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEE6IFZhbGlkIGZvciBOTDgwMjExX0NNRF9GUkFNRSB0byBkZW5vdGUgdGhhdFxuKyAqXHR0aGUga2VybmVsIGhhZCBubyBzdGF0aW9uIGZvciBhIHJlY2VpdmVkIGZyYW1lIG9yIHNob3VsZCBub3QgdXNlIGFcbisgKlx0a25vd24gc3RhdGlvbiB0byB0cmFuc21pdCBhIGZyYW1lLiBUaGlzIGlzIHJlbGV2YW50IHRvIGtub3cgd2hldGhlclxuKyAqXHRNTEQgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXBwZW5lZCBvciB0byBkaXNhYmxlIGl0IHdoZW4gc2VuZGluZyBhIGZyYW1lLlxuKyAqXG4gICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZVxuICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWRcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXG5AQCAtMzc4NSw2ICszNzkwLDggQEAgZW51bSBubDgwMjExX2F0dHJzIHtcbiBcbiBcdE5MODAyMTFfQVRUUl9TVEFfRFVNUF9MSU5LX1NUQVRTLFxuIFxuK1x0Tkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEsXG4rXG4gXHQvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi9cbiBcbiBcdF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jXG5pbmRleCA0ODMzYjQ2NzcwYjYyLi5kZDhhMTFlZjZlNTJiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FnZy10eC5jXG4rKysgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmNcbkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsXG4gXHRpZiAoc3RhLVx1MDAzZXN0YS5kZWZsaW5rLmhlX2NhcC5oYXNfaGUpXG4gXHRcdGllZWU4MDIxMV9hZGRfYWRkYmFleHQoc2tiLCAwLCBhZ2dfc2l6ZSk7XG4gXG4tXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCB0aWQsIC0xKTtcbitcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIHRpZCwgLTEpO1xuIH1cbiBcbiB2b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pXG5AQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcbiBcbiBcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHxcbiBcdFx0XHRcdFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4rXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCB0aWQsIC0xKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2VuZF9iYXIpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hcC5jIGIvbmV0L21hYzgwMjExL2FwLmNcbmluZGV4IGU3YWM5OWM1YTIyZWIuLmZlMjU1ODkxYzM1ZjAgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvYXAuY1xuKysrIGIvbmV0L21hYzgwMjExL2FwLmNcbkBAIC04Miw5ICs4Miw2IEBAIGllZWU4MDIxMV9yeF9lbWxfb3BfbW9kZV9ub3RpZihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGlmICghaWZ0X2V4dF9jYXBhKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVx1MDAzZXNhKTtcbiBcdGlmICghc3RhKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2h0LmMgYi9uZXQvbWFjODAyMTEvaHQuY1xuaW5kZXggZTFlMWI3ZjgyZjNmZS4uYzVjMjExM2ZhNGY3OSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9odC5jXG4rKysgYi9uZXQvbWFjODAyMTEvaHQuY1xuQEAgLTU0NSw3ICs1NDUsNyBAQCBpbnQgaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhID0gSUVFRTgwMjExX1NUQVRVU19UWVBFX1NNUFMgfFxuIFx0XHRcdCAgICB1MTZfZW5jb2RlX2JpdHMoc3RhdHVzX2xpbmtfaWQgXHUwMDNjXHUwMDNjIDIgfCBzbXBzLFxuIFx0XHRcdFx0XHQgICAgSUVFRTgwMjExX1NUQVRVU19TVUJEQVRBX01BU0spO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7XG4rXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCBsaW5rX2lkKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCA1NzYxZTk2MjE0OTE0Li4wZDhlYjA0Mjg4N2E5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5AQCAtMjQ2Myw3ICsyNDYzLDggQEAgdm9pZCBpZWVlODAyMTFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0ICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbitcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbitcdFx0XHRcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbiBcdFx0XHRcdCBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JlcXVpcmVfZW5jcnlwdGVkX2Fzc29jKF9fbGUxNiBmYyxcbkBAIC0yNDgzLDE4ICsyNDg0LDIwIEBAIGllZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0ICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxuIHtcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCB0aWQsIC0xLCBiYW5kKTtcbitcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLFxuK1x0XHRcdFx0ICAgIHRpZCwgLTEsIGJhbmQpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCk7XG4rXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbitcdFx0XHQgIGludCB0aWQsIGludCBsaW5rX2lkKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXG4tXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCAtMSk7XG4rXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCAtMSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IDQzNDYwYTcwNWE2YmQuLmEwYjIxNGRiYjhhZjggMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC0xNjczLDExICsxNjczLDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmYWNlX3Byb2Nlc3Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHRcdFx0YnJlYWs7XG4gXG4gXHRcdFx0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tXHRcdFx0aWYgKCFzdGF0dXMtXHUwMDNlbGlua192YWxpZClcbi1cdFx0XHRcdGxpbmtfc3RhID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbms7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN0YS1cdTAwM2VsaW5rW3N0YXR1cy1cdTAwM2VsaW5rX2lkXSxcbi1cdFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZsb2NhbC1cdTAwM2Vody53aXBoeS1cdTAwM2VtdHgpKTtcbitcdFx0XHRsaW5rX3N0YSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuK1x0XHRcdFx0XHRcdCAgICAgc3RhLVx1MDAzZWxpbmtbc3RhdHVzLVx1MDAzZWxpbmtfaWRdKTtcbiBcdFx0XHRpZiAobGlua19zdGEpXG4gXHRcdFx0XHRpZWVlODAyMTFfaHRfaGFuZGxlX2NoYW53aWR0aF9ub3RpZihsb2NhbCwgc2RhdGEsIHN0YSxcbiBcdFx0XHRcdFx0XHRcdFx0ICAgIGxpbmtfc3RhLCBjaGFud2lkdGgsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmNcbmluZGV4IGY1MTE2N2YwZmM0NmQuLjM2MTc3NWZiOTMxZWMgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jXG4rKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5AQCAtMTE4MzEsMTIgKzExODMxLDEwIEBAIHZvaWQgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRyeF9zdGF0dXMgPSAoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKikgc2tiLVx1MDAzZWNiO1xuIFx0ZmMgPSBsZTE2X3RvX2NwdShtZ210LVx1MDAzZWZyYW1lX2NvbnRyb2wpO1xuIFxuLVx0aWYgKHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKSB7XG4tXHRcdGxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW3J4X3N0YXR1cy1cdTAwM2VsaW5rX2lkXSxcbi1cdFx0XHRcdFx0IHNkYXRhKTtcbi1cdFx0aWYgKCFsaW5rKVxuLVx0XHRcdHJldHVybjtcbi1cdH1cbitcdGxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW3J4X3N0YXR1cy1cdTAwM2VsaW5rX2lkXSxcbitcdFx0XHRcdCBzZGF0YSk7XG4rXHRpZiAoIWxpbmspXG4rXHRcdHJldHVybjtcbiBcbiBcdHN3aXRjaCAoZmMgXHUwMDI2IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7XG4gXHRjYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcbmluZGV4IDdhY2VmODBkNWYxZmIuLjY1MzcxMDU3NjgzMTYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG4rKysgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG5AQCAtODU0LDggKzg1NCwxMCBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdFx0XHRuZWVkX29mZmNoYW4gPSB0cnVlO1xuIFxuIFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlZGEpO1xuLVx0XHRtbG9fc3RhID0gc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLm1sbztcbitcdFx0aWYgKCFwYXJhbXMtXHUwMDNlbm9fc3RhKSB7XG4rXHRcdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cdTAwM2VkYSk7XG4rXHRcdFx0bWxvX3N0YSA9IHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG87XG4rXHRcdH1cbiBcbiBcdFx0aWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKG1nbXQtXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbiBcdFx0ICAgIG1nbXQtXHUwMDNldS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9QVUJMSUMgfHxcbkBAIC04ODQsNyArODg2LDggQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdCAgICAgbG9jYWwtXHUwMDNlb3BzLVx1MDAzZXJlbWFpbl9vbl9jaGFubmVsIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIG1lbWNtcChzZGF0YS1cdTAwM2V2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKSkpIHtcbiBcdFx0XHRuZWVkX29mZmNoYW4gPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHNkYXRhLVx1MDAzZXUubWdkLmFzc29jaWF0ZWQgXHUwMDI2XHUwMDI2XG4rXHRcdH0gZWxzZSBpZiAoIXBhcmFtcy1cdTAwM2Vub19zdGEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgc2RhdGEtXHUwMDNldS5tZ2QuYXNzb2NpYXRlZCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBldGhlcl9hZGRyX2VxdWFsKHNkYXRhLVx1MDAzZXZpZi5jZmcuYXBfYWRkciwgbWdtdC1cdTAwM2VkYSkpIHtcbiBcdFx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVx1MDAzZWRhKTtcbiBcdFx0XHRtbG9fc3RhID0gc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLm1sbztcbkBAIC0xMDIyLDcgKzEwMjUsOSBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdH1cbiBcbiBcdGlmICghbmVlZF9vZmZjaGFuKSB7XG4tXHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xuK1x0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLFxuK1x0XHRcdFx0ICAgICBwYXJhbXMtXHUwMDNlbm9fc3RhID8gc3RhIDogRVJSX1BUUigtRU5PRU5UKSxcbitcdFx0XHRcdCAgICAgNywgbGlua19pZCk7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jXG5pbmRleCA1ZTI2YmU4ZTI3ZDhmLi5lZDVhMmUwNTkwNzU3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3J4LmNcbisrKyBiL25ldC9tYWM4MDIxMS9yeC5jXG5AQCAtMjIyLDQzICsyMjIsMjEgQEAgaWVlZTgwMjExX3J4X3JhZGlvdGFwX2hkcmxlbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0XHQgICBpbnQgbGlua19pZCxcbi1cdFx0XHRcdFx0ICAgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tXG4tXHRpZiAobGlua19pZCBcdTAwM2U9IDApIHtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAxO1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDA7XG4tXHR9XG4tXG4gXHRza2JfcXVldWVfdGFpbChcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUsIHNrYik7XG4gXHR3aXBoeV93b3JrX3F1ZXVlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LCBcdTAwMjZzZGF0YS1cdTAwM2V3b3JrKTtcbi1cdGlmIChzdGEpIHtcbi1cdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhX2luZm87XG4tXG4tXHRcdGlmIChsaW5rX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRcdGxpbmtfc3RhX2luZm8gPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuLVx0XHRcdGlmICghbGlua19zdGFfaW5mbylcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRsaW5rX3N0YV9pbmZvID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbms7XG4tXHRcdH1cbi1cbi1cdFx0bGlua19zdGFfaW5mby1cdTAwM2VyeF9zdGF0cy5wYWNrZXRzKys7XG4tXHR9XG4rXHRpZiAobGlua19zdGEpXG4rXHRcdGxpbmtfc3RhLVx1MDAzZXJ4X3N0YXRzLnBhY2tldHMrKztcbiB9XG4gXG4gc3RhdGljIHZvaWQgaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdFx0IGludCBsaW5rX2lkLFxuLVx0XHRcdFx0XHQgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IDA7XG4tXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfaWQsIHN0YSwgc2tiKTtcbitcdF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgbGlua19zdGEsIHNrYik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9oYW5kbGVfbXVfbWltb19tb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5AQCAtMzAxLDcgKzI3OSw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9oYW5kbGVfbXVfbWltb19tb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpZiAoIXNrYilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgLTEsIE5VTEwsIHNrYik7XG4rXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBOVUxMLCBza2IpO1xuIH1cbiBcbiAvKlxuQEAgLTE0OTgsNyArMTQ3Niw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9yZW9yZGVyX2FtcGR1KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHQvKiBpZiB0aGlzIG1wZHUgaXMgZnJhZ21lbnRlZCAtIHRlcm1pbmF0ZSByeCBhZ2dyZWdhdGlvbiBzZXNzaW9uICovXG4gXHRzYyA9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2VzZXFfY3RybCk7XG4gXHRpZiAoc2MgXHUwMDI2IElFRUU4MDIxMV9TQ1RMX0ZSQUcpIHtcbi1cdFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShyeC1cdTAwM2VzZGF0YSwgcngtXHUwMDNlbGlua19pZCwgTlVMTCwgc2tiKTtcbitcdFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShyeC1cdTAwM2VzZGF0YSwgTlVMTCwgc2tiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTI1MjQsNyArMjUwMiw3IEBAIGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcbiAgb3V0OlxuIFx0aWVlZTgwMjExX2xlZF9yeChyeC1cdTAwM2Vsb2NhbCk7XG4tXHRpZiAocngtXHUwMDNlc3RhKVxuK1x0aWYgKHJ4LVx1MDAzZWxpbmtfc3RhKVxuIFx0XHRyeC1cdTAwM2VsaW5rX3N0YS1cdTAwM2VyeF9zdGF0cy5wYWNrZXRzKys7XG4gXHRyZXR1cm4gUlhfQ09OVElOVUU7XG4gfVxuQEAgLTMzMzUsOCArMzMxMyw4IEBAIGllZWU4MDIxMV9yeF9oX2RhdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0ICAgICh0Zi1cdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVRVUVTVCB8fFxuIFx0XHQgICAgIHRmLVx1MDAzZWFjdGlvbl9jb2RlID09IFdMQU5fVERMU19DSEFOTkVMX1NXSVRDSF9SRVNQT05TRSkpIHtcbiBcdFx0XHRyeC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9URExTKTtcbi1cdFx0XHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsXG4tXHRcdFx0XHRcdFx0ICAgICAgIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbitcdFx0XHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfc3RhLFxuK1x0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2Vza2IpO1xuIFx0XHRcdHJldHVybiBSWF9RVUVVRUQ7XG4gXHRcdH1cbiBcdH1cbkBAIC0zOTkxLDcgKzM5NjksNyBAQCBpZWVlODAyMTFfcnhfaF9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gXG4gIHF1ZXVlOlxuLVx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19pZCwgcngtXHUwMDNlc3RhLCByeC1cdTAwM2Vza2IpO1xuK1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsIHJ4LVx1MDAzZXNrYik7XG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIH1cbiBcbkBAIC00MDA1LDYgKzM5ODMsNyBAQCBpZWVlODAyMTFfcnhfaF91c2Vyc3BhY2VfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHQubGVuID0gcngtXHUwMDNlc2tiLVx1MDAzZWxlbixcbiBcdFx0LmxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkLFxuIFx0XHQuaGF2ZV9saW5rX2lkID0gcngtXHUwMDNlbGlua19pZCBcdTAwM2U9IDAsXG4rXHRcdC5ub19zdGEgPSAhcngtXHUwMDNlc3RhLFxuIFx0fTtcbiBcbiBcdC8qIHNraXAga25vd24tYmFkIGFjdGlvbiBmcmFtZXMgYW5kIHJldHVybiB0aGVtIGluIHRoZSBuZXh0IGhhbmRsZXIgKi9cbkBAIC00MTI3LDcgKzQxMDYsNyBAQCBpZWVlODAyMTFfcnhfaF9hY3Rpb25fcmV0dXJuKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdFx0XHRcdGxvY2FsLVx1MDAzZWh3Lm9mZmNoYW5uZWxfdHhfaHdfcXVldWU7XG4gXHRcdH1cbiBcbi1cdFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LVx1MDAzZXNkYXRhLCBuc2tiLCA3LCAtMSxcbitcdFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LVx1MDAzZXNkYXRhLCBuc2tiLCByeC1cdTAwM2VzdGEsIDcsIC0xLFxuIFx0XHRcdFx0XHQgICAgc3RhdHVzLVx1MDAzZWJhbmQpO1xuIFx0fVxuIFxuQEAgLTQxNDcsNyArNDEyNiw3IEBAIGllZWU4MDIxMV9yeF9oX2V4dChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHRyZXR1cm4gUlhfRFJPUF9VX1VORVhQRUNURURfRVhUX0ZSQU1FO1xuIFxuIFx0LyogZm9yIG5vdyBvbmx5IGJlYWNvbnMgYXJlIGV4dCwgc28gcXVldWUgdGhlbSAqL1xuLVx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19pZCwgcngtXHUwMDNlc3RhLCByeC1cdTAwM2Vza2IpO1xuK1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsIHJ4LVx1MDAzZXNrYik7XG4gXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIH1cbkBAIC00MjA0LDcgKzQxODMsNyBAQCBpZWVlODAyMTFfcnhfaF9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdHJldHVybiBSWF9EUk9QX1VfVU5IQU5ETEVEX01HTVRfU1RZUEU7XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLCByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4rXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSwgcngtXHUwMDNlc2tiKTtcbiBcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gfVxuQEAgLTQyNDgsMTIgKzQyMjcsMjggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2cngtXHUwMDNlbG9jYWwtXHUwMDNlcnhfcGF0aF9sb2NrKTtcbiBcbiBcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShmcmFtZXMpKSkge1xuK1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4rXG4gXHRcdC8qXG4tXHRcdCAqIGFsbCB0aGUgb3RoZXIgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzXG4tXHRcdCAqIHRoYXQgYmVsb25nIHRvIGFuIGFNUERVIHNpbmNlIHRoZXkgYXJlIG9uIHRoZVxuLVx0XHQgKiBzYW1lIFRJRCBmcm9tIHRoZSBzYW1lIHN0YXRpb25cbitcdFx0ICogTW9zdCBmaWVsZHMgYXJlIHZhbGlkIGFjcm9zcyBmcmFtZXMuIEhvd2V2ZXIsXG4rXHRcdCAqIGluIHRoZSBjYXNlIG9mIHJlb3JkZXJpbmcgZnJhbWVzIG1heSBoYXZlIGFycml2ZWRcbitcdFx0ICogb24gZGlmZmVyZW50IGxpbmtzLCBzbyBhZGp1c3QgdGhlIGxpbmtfaWQsIGxpbmtcbitcdFx0ICogYW5kIGxpbmtfc3RhIGFjY29yZGluZ2x5LlxuIFx0XHQgKi9cbiBcdFx0cngtXHUwMDNlc2tiID0gc2tiO1xuK1x0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNldmlmKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHVubGlrZWx5KHJ4LVx1MDAzZWxpbmtfaWQgIT0gc3RhdHVzLVx1MDAzZWxpbmtfaWQpKSB7XG4rXHRcdFx0aWYgKHJ4LVx1MDAzZXN0YSkge1xuK1x0XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPVxuK1x0XHRcdFx0XHRyY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc3RhLVx1MDAzZWxpbmtbcngtXHUwMDNlbGlua19pZF0pO1xuK1xuK1x0XHRcdFx0LyogTGluayBnb3QgZGlzYWJsZWQsIGp1c3QgdXNlIGRlZmxpbmsgKi9cbitcdFx0XHRcdGlmICghcngtXHUwMDNlbGlua19zdGEpXG4rXHRcdFx0XHRcdHJ4LVx1MDAzZWxpbmtfc3RhID0gXHUwMDI2cngtXHUwMDNlc3RhLVx1MDAzZWRlZmxpbms7XG4rXHRcdFx0fVxuK1x0XHRcdHJ4LVx1MDAzZWxpbmtfaWQgPSBzdGF0dXMtXHUwMDNlbGlua19pZDtcbitcdFx0XHRyeC1cdTAwM2VsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHJ4LVx1MDAzZXNkYXRhLVx1MDAzZWxpbmtbc3RhdHVzLVx1MDAzZWxpbmtfaWRdKTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFyeC1cdTAwM2VsaW5rKSkge1xuIFx0XHRcdHJlcyA9IFJYX0RST1BfVV9OT19MSU5LO1xuQEAgLTQzMjMsNyArNDMxOCwzNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gc3RhdGljIGJvb2xcbiBpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggbGlua19pZClcbiB7XG4tXHRyZXR1cm4gISEoc3RhLVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNiBCSVQobGlua19pZCkpO1xuK1x0aWYgKHN0YS1cdTAwM2VtbG8pXG4rXHRcdHJldHVybiBzdGEtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKTtcbitcbitcdHJldHVybiBzdGEtXHUwMDNlZGVmbGluay5saW5rX2lkID09IGxpbmtfaWQ7XG4rfVxuK1xuK3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG4re1xuK1x0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkgfHxcbitcdCAgICAhaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKFx1MDAyNmxpbmtfc3RhLVx1MDAzZXN0YS1cdTAwM2VzdGEsXG4rXHRcdFx0XHRcdCAgICAgICBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuK1xuK1x0cngtXHUwMDNlc3RhID0gc3RhO1xuK1x0cngtXHUwMDNlbG9jYWwgPSBzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWw7XG4rXHRyeC1cdTAwM2VsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VzZGF0YS1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbitcdGlmICghcngtXHUwMDNlbGluaylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cngtXHUwMDNlbGlua19pZCA9IHJ4LVx1MDAzZWxpbmstXHUwMDNlbGlua19pZDtcbitcdHJ4LVx1MDAzZWxpbmtfc3RhID0gbGlua19zdGE7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbkBAIC00MzYwLDExICs0MzgyLDEzIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcbiBcdGlmIChsaW5rX2lkIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZyeC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgc3RhIFx1MDAyNlx1MDAyNiAhc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcylcbitcdFx0ICAgIHN0YSBcdTAwMjZcdTAwMjYgIXN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpIHtcbiBcdFx0XHRyeC1cdTAwM2VsaW5rID1cbiBcdFx0XHRcdHJjdV9kZXJlZmVyZW5jZShyeC1cdTAwM2VzZGF0YS1cdTAwM2VsaW5rW3N0YS1cdTAwM2VkZWZsaW5rLmxpbmtfaWRdKTtcbi1cdFx0ZWxzZVxuK1x0XHRcdHJ4LVx1MDAzZWxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHJ4LVx1MDAzZXN0YS1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRyeC1cdTAwM2VsaW5rID0gXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNlZGVmbGluaztcbitcdFx0fVxuIFx0fSBlbHNlIGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsocngsIGxpbmtfaWQpKSB7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC00Mzg3LDcgKzQ0MTEsNyBAQCB2b2lkIGllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfdGltZW91dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZClcbiBcdHN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7XG4gXHRpbnQgbGlua19pZCA9IC0xO1xuIFxuLVx0LyogRklYTUU6IHN0YXRpc3RpY3Mgd29uJ3QgYmUgcmlnaHQgd2l0aCB0aGlzICovXG4rXHQvKiBOT1RFOiB0aGUgY29ycmVjdCBsaW5rIFNUQSBmb3IgdGhlIGZyYW1lIGlzIHNldCBsYXRlciAqL1xuIFx0aWYgKHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpXG4gXHRcdGxpbmtfaWQgPSBmZnMoc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcykgLSAxO1xuIFxuQEAgLTQ5MTQsMjAgKzQ5MzgsMTQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4XzgwMjMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9yeF9zdGF0cyAqc3RhdHM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVx1MDAzZXNrYik7XG4tXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IHJ4LVx1MDAzZXN0YTtcbi1cdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcbitcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVx1MDAzZXNrYjtcbiBcdHZvaWQgKnNhID0gc2tiLVx1MDAzZWRhdGEgKyBFVEhfQUxFTjtcbiBcdHZvaWQgKmRhID0gc2tiLVx1MDAzZWRhdGE7XG4gXG4tXHRpZiAocngtXHUwMDNlbGlua19pZCBcdTAwM2U9IDApIHtcbi1cdFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxpbmtbcngtXHUwMDNlbGlua19pZF0pO1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiKHJ4LVx1MDAzZXNrYik7XG4tXHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRsaW5rX3N0YSA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rO1xuK1x0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XG4rXHRcdGRldl9rZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0c3RhdHMgPSBcdTAwMjZsaW5rX3N0YS1cdTAwM2VyeF9zdGF0cztcbkBAIC01MTU0LDYgKzUxNzIsOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfaW52b2tlX2Zhc3Rfcngoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcdFx0Z290byBkcm9wO1xuIFx0fVxuIFxuK1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4rXHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNjIDAgPyAwIDogcngtXHUwMDNlbGlua19pZDtcbitcbiBcdGllZWU4MDIxMV9yeF84MDIzKHJ4LCBmYXN0X3J4LCBvcmlnX2xlbik7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC01MTc4LDYgKzUxOTksNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSByeC1cdTAwM2VsaW5rO1xuK1x0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cztcbiBcbiBcdHJ4LVx1MDAzZXNrYiA9IHNrYjtcbiBcbkBAIC01MjIxLDYgKzUyNDMsOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LVx1MDAzZXNrYi1cdTAwM2VkYXRhO1xuIFx0fVxuIFxuK1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVx1MDAzZXNrYik7XG4rXHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNjIDAgPyAwIDogcngtXHUwMDNlbGlua19pZDtcbitcbiBcdGlmIChpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbiBcdFx0aWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhyeCk7XG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTUyNTYsMjIgKzUyODEsMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfZmFzdF9yeCAqZmFzdF9yeDtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeDtcbiBcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuLVx0aW50IGxpbmtfaWQgPSAtMTtcbiBcbiBcdG1lbXNldChcdTAwMjZyeCwgMCwgc2l6ZW9mKHJ4KSk7XG4gXHRyeC5za2IgPSBza2I7XG4gXHRyeC5sb2NhbCA9IGxvY2FsO1xuIFx0cngubGlzdCA9IGxpc3Q7XG4tXHRyeC5saW5rX2lkID0gLTE7XG4gXG4gXHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cdTAwM2Vkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCk7XG4gXG5AQCAtNTI3OSwyMyArNTMwMSwxNSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IGV0aGhkcikpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbi1cdGlmICghcHVic3RhKVxuK1x0aWYgKCFsaW5rX3B1YnN0YSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4tXG4tXHQvKlxuLVx0ICogVE9ETzogU2hvdWxkIHRoZSBmcmFtZSBiZSBkcm9wcGVkIGlmIHRoZSByaWdodCBsaW5rX2lkIGlzIG5vdFxuLVx0ICogYXZhaWxhYmxlPyBPciBtYXkgYmUgaXQgaXMgZmluZSBpbiB0aGUgY3VycmVudCBmb3JtIHRvIHByb2NlZWQgd2l0aFxuLVx0ICogdGhlIGZyYW1lIHByb2Nlc3NpbmcgYmVjYXVzZSB3aXRoIGZyYW1lIGJlaW5nIGluIDgwMi4zIGZvcm1hdCxcbi1cdCAqIGxpbmtfaWQgaXMgdXNlZCBvbmx5IGZvciBzdGF0cyBwdXJwb3NlIGFuZCB1cGRhdGluZyB0aGUgc3RhdHMgb25cbi1cdCAqIHRoZSBkZWZsaW5rIGlzIGZpbmU/XG4tXHQgKi9cbi1cdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgc3RhLCBsaW5rX2lkKSlcbitcdHN0YSA9IGNvbnRhaW5lcl9vZihsaW5rX3B1YnN0YS1cdTAwM2VzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbitcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgc3RhLCBsaW5rX3B1YnN0YS1cdTAwM2VsaW5rX2lkKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuK1x0cngubGlua19pZCA9IGxpbmtfcHVic3RhLVx1MDAzZWxpbmtfaWQ7XG4rXG4gXHRmYXN0X3J4ID0gcmN1X2RlcmVmZXJlbmNlKHJ4LnN0YS1cdTAwM2VmYXN0X3J4KTtcbiBcdGlmICghZmFzdF9yeClcbiBcdFx0Z290byBkcm9wO1xuQEAgLTUzMDcsNTkgKzUzMjEsMTkgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4gfVxuIFxuLXN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBjb25zdW1lKVxuK3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKGludCBmcmVxLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcbiB7XG4tXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbi1cdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuLVx0aW50IGxpbmtfaWQgPSAtMTtcbi1cbi1cdGlmIChpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbi1cdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBOVUxMLCAtMSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0XHRyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTtcbi1cdH1cbitcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mO1xuIFxuLVx0Lypcbi1cdCAqIExvb2sgdXAgbGluayBzdGF0aW9uIGZpcnN0LCBpbiBjYXNlIHRoZXJlJ3MgYVxuLVx0ICogY2hhbmNlIHRoYXQgdGhleSBtaWdodCBoYXZlIGEgbGluayBhZGRyZXNzIHRoYXRcbi1cdCAqIGlzIGlkZW50aWNhbCB0byB0aGUgTUxEIGFkZHJlc3MsIHRoYXQgd2F5IHdlJ2xsXG4tXHQgKiBoYXZlIHRoZSBsaW5rIGluZm9ybWF0aW9uIGlmIG5lZWRlZC5cbi1cdCAqL1xuLVx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3MocngtXHUwMDNlc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4tXHRpZiAobGlua19zdGEpIHtcbi1cdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuLVx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbi1cdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cbi1cdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhyeC1cdTAwM2VzZGF0YSwgaGRyLVx1MDAzZWFkZHIyKTtcbi1cdFx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKSB7XG4tXHRcdFx0bGlua19pZCA9IHN0YXR1cy1cdTAwM2VsaW5rX2lkO1xuLVx0XHR9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnJ4LVx1MDAzZXNkYXRhLVx1MDAzZXZpZikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgc3RhdHVzLVx1MDAzZWZyZXEpIHtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbi1cbi1cdFx0XHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHJ4LVx1MDAzZXNkYXRhLCBsaW5rKSB7XG4tXHRcdFx0XHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXHUwMDNlY29uZi1cdTAwM2VjaGFuY3R4X2NvbmYpO1xuLVx0XHRcdFx0aWYgKCFjb25mIHx8ICFjb25mLVx1MDAzZWRlZi5jaGFuKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHRcdGlmIChzdGF0dXMtXHUwMDNlZnJlcSA9PSBjb25mLVx1MDAzZWRlZi5jaGFuLVx1MDAzZWNlbnRlcl9mcmVxKSB7XG4tXHRcdFx0XHRcdGxpbmtfaWQgPSBsaW5rLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0fVxuLVx0fVxuK1x0aWYgKCFmcmVxIHx8IGxpbmstXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8XG4rXHQgICAgbGluay1cdTAwM2VzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSlcbitcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIHN0YSwgbGlua19pZCkpXG4rXHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXHUwMDNlY29uZi1cdTAwM2VjaGFuY3R4X2NvbmYpO1xuK1x0aWYgKCFjb25mIHx8ICFjb25mLVx1MDAzZWRlZi5jaGFuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTtcbitcdHJldHVybiBmcmVxID09IGNvbmYtXHUwMDNlZGVmLmNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4gfVxuIFxuIC8qXG5AQCAtNTM2NywxOCArNTM0MSwyMCBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuICAqIGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgcHJvdGVjdGlvbi5cbiAgKi9cbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLVx0XHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbitcdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxuIFx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTtcbitcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4rXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4rXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbiBcdF9fbGUxNiBmYztcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeDtcbi1cdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnByZXY7XG4gXHRzdHJ1Y3QgcmhsaXN0X2hlYWQgKnRtcDtcbitcdGJvb2wgcnhfZGF0YV9wZW5kaW5nO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRmYyA9ICgoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YSktXHUwMDNlZnJhbWVfY29udHJvbDtcbkBAIC01Mzg2LDcgKzUzNjIsNiBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0cnguc2tiID0gc2tiO1xuIFx0cngubG9jYWwgPSBsb2NhbDtcbiBcdHJ4Lmxpc3QgPSBsaXN0O1xuLVx0cngubGlua19pZCA9IC0xO1xuIFxuIFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSB8fCBpZWVlODAyMTFfaXNfbWdtdChmYykpXG4gXHRcdEk4MDJfREVCVUdfSU5DKGxvY2FsLVx1MDAzZWRvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50KTtcbkBAIC01NDI2LDk3ICs1NDAxLDEwMiBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHQgICAgIGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSkpXG4gXHRcdGllZWU4MDIxMV9zY2FuX3J4KGxvY2FsLCBza2IpO1xuIFxuK1x0LypcbitcdCAqIFJYIG9mIGEgZGF0YSBmcmFtZSBzaG91bGQgb25seSBoYXBwZW4gdG8gZXhpc3Rpbmcgc3RhdGlvbnMuXG4rXHQgKiBJdCBpcyB0aGVyZWZvcmUgbW9yZSBlZmZpY2llbnQgdG8gdXNlIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIGRyaXZlclxuK1x0ICogb3Igc2VhcmNoIGJhc2VkIG9uIHRoZSBzdGF0aW9uJ3MgYWRkcmVzcy5cbitcdCAqXG4rXHQgKiBOb3RlIHdlIHdpbGwgZmFsbCB0aHJvdWdoIGFuZCBoYW5kbGUgYSBzcHVyaW91cyBkYXRhIGZyYW1lIGluIHRoZVxuK1x0ICogc2FtZSB3YXkgYXMgYSBtYW5hZ2VtZW50IGZyYW1lLlxuK1x0ICovXG4gXHRpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7XG4tXHRcdHN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqcHJldl9zdGE7XG4tXHRcdGludCBsaW5rX2lkID0gLTE7XG4tXG4tXHRcdGlmIChzdGF0dXMtXHUwMDNlbGlua192YWxpZClcbi1cdFx0XHRsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4tXG4tXHRcdGlmIChwdWJzdGEpIHtcbi1cdFx0XHRzdGEgPSBjb250YWluZXJfb2YocHVic3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG4tXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFx1MDAyNnJ4LCBzdGEsIGxpbmtfaWQpKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBJbiBNTE8gY29ubmVjdGlvbiwgZmV0Y2ggdGhlIGxpbmtfaWQgdXNpbmcgYWRkcjJcbi1cdFx0XHQgKiB3aGVuIHRoZSBkcml2ZXIgZG9lcyBub3QgcGFzcyBsaW5rX2lkIGluIHN0YXR1cy5cbi1cdFx0XHQgKiBXaGVuIHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGlzIGFscmVhZHkgcGVyZm9ybWVkIGJ5XG4tXHRcdFx0ICogZHJpdmVyL2h3LCB0aGUgdmFsaWQgbGlua19pZCBtdXN0IGJlIHBhc3NlZCBpblxuLVx0XHRcdCAqIHN0YXR1cy5cbi1cdFx0XHQgKi9cbi1cbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNlbWxvKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4tXG4tXHRcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcbi1cdFx0XHRcdFx0XHRcdFx0IGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdFx0XHRpZiAoIWxpbmtfc3RhKVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbi1cbi1cdFx0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsoXHUwMDI2cngsXG4tXHRcdFx0XHRcdFx0XHRcdGxpbmtfc3RhLVx1MDAzZWxpbmtfaWQpKVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0aWYgKGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXG4rXHRcdGlmIChsaW5rX3B1YnN0YSkge1xuK1x0XHRcdHN0YSA9IGNvbnRhaW5lcl9vZihsaW5rX3B1YnN0YS1cdTAwM2VzdGEsIHN0cnVjdCBzdGFfaW5mbyxcbitcdFx0XHRcdFx0ICAgc3RhKTtcbitcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX3B1YnN0YS1cdTAwM2VsaW5rX2lkXSk7XG4rXG4rXHRcdFx0cnguc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4rXHRcdFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcdTAwMjZyeCwgbGlua19zdGEpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuIFx0XHRcdFx0cmV0dXJuO1xuK1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHByZXZfc3RhID0gTlVMTDtcbitcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4gXG4rXHRcdC8qIFNlYXJjaCBmb3Igc3RhdGlvbnMgb24gbm9uLU1MRCBpbnRlcmZhY2VzICovXG4gXHRcdGZvcl9lYWNoX3N0YV9pbmZvKGxvY2FsLCBoZHItXHUwMDNlYWRkcjIsIHN0YSwgdG1wKSB7XG4tXHRcdFx0aWYgKCFwcmV2X3N0YSkge1xuLVx0XHRcdFx0cHJldl9zdGEgPSBzdGE7XG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4rXHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XG4gXG4tXHRcdFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cdTAwM2VzZGF0YTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkIFx1MDAyNlx1MDAyNiBwcmV2X3N0YS1cdTAwM2VzdGEubWxvKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4rXHRcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcbi1cdFx0XHRcdFx0XHRcdFx0IGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdFx0XHRpZiAoIWxpbmtfc3RhKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRsaW5rID0gXHUwMDI2c3RhLVx1MDAzZXNkYXRhLVx1MDAzZWRlZmxpbms7XG4rXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4rXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdGxpbmtfaWQgPSBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkO1xuK1x0XHRcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcbitcdFx0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYixcbitcdFx0XHRcdFx0XHRcdFx0ZmFsc2UpO1xuK1x0XHRcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgcHJldl9zdGEsIGxpbmtfaWQpKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXG4tXHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XG4rXHRcdFx0cnguc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4rXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHByZXZfc3RhID0gc3RhO1xuK1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHByZXZfc3RhKSB7XG4tXHRcdFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cdTAwM2VzZGF0YTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkIFx1MDAyNlx1MDAyNiBwcmV2X3N0YS1cdTAwM2VzdGEubWxvKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4rXHRcdC8qIEFuZCBzZWFyY2ggc3RhdGlvbnMgb24gTUxEIGludGVyZmFjZXMgKi9cbitcdFx0Zm9yX2VhY2hfbGlua19zdGFfaW5mbyhsb2NhbCwgaGRyLVx1MDAzZWFkZHIyLCBsaW5rX3N0YSwgdG1wKSB7XG4rXHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XG4gXG4tXHRcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcbi1cdFx0XHRcdFx0XHRcdFx0IGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdFx0XHRpZiAoIWxpbmtfc3RhKVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRzdGEgPSBsaW5rX3N0YS1cdTAwM2VzdGE7XG4rXHRcdFx0c2RhdGEgPVx0c3RhLVx1MDAzZXNkYXRhO1xuK1x0XHRcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbitcdFx0XHRpZiAoIWllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cdTAwM2VmcmVxLCBsaW5rKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcbitcdFx0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYixcbitcdFx0XHRcdFx0XHRcdFx0ZmFsc2UpO1xuK1x0XHRcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgcHJldl9zdGEsIGxpbmtfaWQpKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0cnguc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4rXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIGxpbmtfc3RhKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4rXHRcdH1cbiBcbitcdFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xuIFx0XHRcdGlmIChpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuIFx0XHRcdFx0cmV0dXJuO1xuK1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXG4rXHRcdC8qIGZhbGwgdGhyb3VnaCwgZS5nLiBmb3Igc3B1cmlvdXMgZnJhbWUgbm90aWZpY2F0aW9uICovXG4gXHR9XG4gXG4tXHRwcmV2ID0gTlVMTDtcbitcdC8qXG4rXHQgKiBUaGlzIGlzIGEgbWFuYWdlbWVudCBmcmFtZSAob3IgYSBkYXRhIGZyYW1lIHdpdGhvdXQgYSBzdGF0aW9uKSBhbmRcbitcdCAqIGl0IHdpbGwgYmUgZGVsaXZlcmVkIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgYSBzdGF0aW9uIGV4aXN0cyxcbitcdCAqIHNvIGl0ZXJhdGUgdGhlIGludGVyZmFjZXMuXG4rXHQgKi9cbitcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuK1xuK1x0LyogV2UgZXhwZWN0IHRoZSBkcml2ZXIgdG8gcHJvdmlkZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gKi9cbitcdGlmIChXQVJOX09OX09OQ0UoIWxvY2FsLVx1MDAzZWVtdWxhdGVfY2hhbmN0eCBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2VmcmVxKSlcbitcdFx0Z290byBvdXQ7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xuK1x0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9IE5VTEw7XG4rXG4gXHRcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTU1MjQsMzAgKzU1MDQsODUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0ICAgIHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdGxpbmtfc3RhID0gTlVMTDtcbitcdFx0bGluayA9IE5VTEw7XG4rXG4rXHRcdC8qIFRyeSB0byByZXNvbHZlIHRoZSBzdGF0aW9uICovXG4rXHRcdGlmICghaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2c2RhdGEtXHUwMDNldmlmKSkge1xuK1x0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4rXG4rXHRcdFx0aWYgKHN0YSkge1xuK1x0XHRcdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbitcdFx0XHRcdGxpbmsgPSBcdTAwMjZzZGF0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgaGRyLVx1MDAzZWFkZHIyKTtcbitcbitcdFx0XHRpZiAobGlua19zdGEpXG4rXHRcdFx0XHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxpbmtbbGlua19zdGEtXHUwMDNlbGlua19pZF0pO1xuK1x0XHR9XG4rXG4gXHRcdC8qXG4tXHRcdCAqIGZyYW1lIGlzIGRlc3RpbmVkIGZvciB0aGlzIGludGVyZmFjZSwgYnV0IGlmIGl0J3Ncbi1cdFx0ICogbm90IGFsc28gZm9yIHRoZSBwcmV2aW91cyBvbmUgd2UgaGFuZGxlIHRoYXQgYWZ0ZXJcbi1cdFx0ICogdGhlIGxvb3AgdG8gYXZvaWQgY29weWluZyB0aGUgU0tCIG9uY2UgdG9vIG11Y2hcbitcdFx0ICogSWYgd2UgZm91bmQgYSBTVEEgYW5kIGl0IGhhcyBhIHZhbGlkIGxpbmsgaW5mb3JtYXRpb24sIHRoZW5cbitcdFx0ICogUlggdXNpbmcgdGhlIHN0YXRpb24uXG4gXHRcdCAqL1xuK1x0XHRpZiAobGlua19zdGEgXHUwMDI2XHUwMDI2IGxpbmsgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpIHtcbitcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4rXHRcdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbitcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKiBObyB2YWxpZF9saW5rcyBjaGVjayBhcyB3ZSBuZWVkIHRvIFJYIGJlYWNvbnMgKi9cbitcbitcdFx0XHRyeC5zZGF0YSA9IHNkYXRhO1xuK1x0XHRcdGlmIChpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIGxpbmtfc3RhKSlcbitcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXG4tXHRcdGlmICghcHJldikge1xuLVx0XHRcdHByZXYgPSBzZGF0YTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRyeC5zZGF0YSA9IHByZXY7XG4tXHRcdGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbitcdFx0LyogTm8gc3RhdGlvbiwgdHJ5IHRvIHJlc29sdmUgdGhlIGxpbmsgYW5kIFJYICovXG4rXHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4rXHRcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XG4rXHRcdFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuIFxuLVx0XHRwcmV2ID0gc2RhdGE7XG4tXHR9XG4rXHRcdFx0Zm9yX2VhY2hfbGlua19kYXRhX3JjdShzZGF0YSwgbGluaykge1xuK1x0XHRcdFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbitcdFx0XHRcdGlmICghY29uZiB8fCAhY29uZi1cdTAwM2VkZWYuY2hhbilcbitcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAocHJldikge1xuLVx0XHRyeC5zZGF0YSA9IHByZXY7XG4rXHRcdFx0XHRpZiAoc3RhdHVzLVx1MDAzZWZyZXEgPT0gY29uZi1cdTAwM2VkZWYuY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSkge1xuK1x0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbiBcbi1cdFx0aWYgKGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuLVx0XHRcdHJldHVybjtcbitcdFx0XHRpZiAoIWZvdW5kKVxuK1x0XHRcdFx0bGluayA9IFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbms7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bGluayA9IFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbms7XG4rXHRcdH1cbitcbitcdFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xuK1x0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xuK1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuK1x0XHR9XG4rXG4rXHRcdHJ4LnNkYXRhID0gc2RhdGE7XG4rXHRcdHJ4LmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4rXHRcdHJ4LmxpbmsgPSBsaW5rO1xuK1x0XHRyeC5saW5rX2lkID0gbGluay1cdTAwM2VsaW5rX2lkO1xuK1x0XHRyeC5zdGEgPSBOVUxMO1xuK1x0XHRyeC5saW5rX3N0YSA9IE5VTEw7XG4rXG4rXHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXHR9XG4gXG4rXHRpZiAocnhfZGF0YV9wZW5kaW5nIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXG4rXHRcdHJldHVybjtcbitcbiAgb3V0OlxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIH1cbkBAIC01NTU2LDcgKzU1OTEsOCBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuICAqIFRoaXMgaXMgdGhlIHJlY2VpdmUgcGF0aCBoYW5kbGVyLiBJdCBpcyBjYWxsZWQgYnkgYSBsb3cgbGV2ZWwgZHJpdmVyIHdoZW4gYW5cbiAgKiA4MDIuMTEgTVBEVSBpcyByZWNlaXZlZCBmcm9tIHRoZSBoYXJkd2FyZS5cbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuK3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4rXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG5AQCAtNTY5NCw5ICs1NzMwLDYgQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKFdBUk5fT05fT05DRShzdGF0dXMtXHUwMDNlbGlua19pZCBcdTAwM2U9IElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVEKSlcbi1cdFx0Z290byBkcm9wO1xuLVxuIFx0c3RhdHVzLVx1MDAzZXJ4X2ZsYWdzID0gMDtcbiBcbiBcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xuQEAgLTU3MTUsOSArNTc0OCwxMCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuIFx0XHRcdGllZWU4MDIxMV90cHRfbGVkX3RyaWdfcngobG9jYWwsIHNrYi1cdTAwM2VsZW4pO1xuIFxuIFx0XHRpZiAoc3RhdHVzLVx1MDAzZWZsYWcgXHUwMDI2IFJYX0ZMQUdfODAyMylcbi1cdFx0XHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgcHVic3RhLCBza2IsIGxpc3QpO1xuK1x0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBsaXN0KTtcbiBcdFx0ZWxzZVxuLVx0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcbitcdFx0XHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLFxuK1x0XHRcdFx0XHRcdCAgICAgbGlzdCk7XG4gXHR9XG4gXG4gXHRrY292X3JlbW90ZV9zdG9wKCk7XG5AQCAtNTcyNyw3ICs1NzYxLDggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiB9XG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnhfbGlzdCk7XG4gXG4tdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbit2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuK1x0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnRtcDtcbkBAIC01NzQwLDcgKzU3NzUsNyBAQCB2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuIFx0ICogcmVjZWl2ZSBwcm9jZXNzaW5nXG4gXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGllZWU4MDIxMV9yeF9saXN0KGh3LCBwdWJzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4rXHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19wdWJzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmICghbmFwaSkge1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zY2FuLmMgYi9uZXQvbWFjODAyMTEvc2Nhbi5jXG5pbmRleCBlZWZmMjMwYmQ5MDlmLi4zMjRjMmI2ZDdjZTFiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uY1xuKysrIGIvbmV0L21hYzgwMjExL3NjYW4uY1xuQEAgLTksNyArOSw3IEBAXG4gICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgXHUwMDNjZmxhbWluZ2ljZUBzb3VybWlsay5uZXRcdTAwM2VcbiAgKiBDb3B5cmlnaHQgMjAxMy0yMDE1ICBJbnRlbCBNb2JpbGUgQ29tbXVuaWNhdGlvbnMgR21iSFxuICAqIENvcHlyaWdodCAyMDE2LTIwMTcgIEludGVsIERldXRzY2hsYW5kIEdtYkhcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxuKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbkBAIC0yMDQsMTIgKzIwNCwxMCBAQCBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHQgKiBhbiBpbmRpY2F0aW9uIG9uIHdoaWNoIG9mIHRoZSBsaW5rcyB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkXG4gXHRcdCAqL1xuIFx0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2c2Nhbl9zZGF0YS1cdTAwM2V2aWYpKSB7XG4tXHRcdFx0aWYgKHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKSB7XG4tXHRcdFx0XHRzOCBsaW5rX2lkID0gcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4rXHRcdFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkO1xuIFxuLVx0XHRcdFx0bGlua19jb25mID1cbi1cdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XG4tXHRcdFx0fVxuK1x0XHRcdGxpbmtfY29uZiA9XG4rXHRcdFx0XHRyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS1cdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRsaW5rX2NvbmYgPSBcdTAwMjZzY2FuX3NkYXRhLVx1MDAzZXZpZi5ic3NfY29uZjtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90ZGxzLmMgYi9uZXQvbWFjODAyMTEvdGRscy5jXG5pbmRleCBkYzJmNjYyZmU0YzQ2Li5lMTdkNDkyYmU1OTAyIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuY1xuKysrIGIvbmV0L21hYzgwMjExL3RkbHMuY1xuQEAgLTEwNjYsNyArMTA2Niw3IEBAIGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcbiBcdGlmIChhY3Rpb25fY29kZSA9PSBXTEFOX1BVQl9BQ1RJT05fVERMU19ESVNDT1ZFUl9SRVMpIHtcbi1cdFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7XG4rXHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHN0YSwgNywgbGlua19pZCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IDNhMWUyYzllMTU2NWUuLjZmNTJlODg0MDIzNzEgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC02NDM2LDcgKzY0MzYsOCBAQCB2b2lkIGllZWU4MDIxMV91bnJlc2VydmVfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHU4IHRpZClcbiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV91bnJlc2VydmVfdGlkKTtcbiBcbiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbitcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbitcdFx0XHRcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbiBcdFx0XHRcdCBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuQEAgLTY0ODgsMTIgKzY0ODksMTMgQEAgdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHQgKi9cbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cdTAwM2ViYW5kID0gYmFuZDtcbi1cdGllZWU4MDIxMV94bWl0KHNkYXRhLCBOVUxMLCBza2IpO1xuK1x0aWVlZTgwMjExX3htaXQoc2RhdGEsIHN0YSwgc2tiKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIH1cbiBcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpXG4rXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbitcdFx0XHQgIGludCB0aWQsIGludCBsaW5rX2lkKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjaGFuY3R4X2NvbmY7XG4gXHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xuQEAgLTY1MTksNyArNjUyMSw3IEBAIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGJhbmQgPSAwO1xuIFx0fVxuIFxuLVx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHRpZCwgbGlua19pZCwgYmFuZCk7XG4rXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA0NGYyYmFkMDg2NzA1Li40MzdiZWJjYzAyNzQ4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEwOTYsNiArMTA5Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcbiBcdFtOTDgwMjExX0FUVFJfTlBDQV9QVU5DVF9CSVRNQVBdID1cbiBcdFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFx1MDAyNm5sODAyMTFfcHVuY3RfYml0bWFwX3JhbmdlKSxcbiBcdFtOTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUU10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbitcdFtOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiB9O1xuIFxuIC8qIHBvbGljeSBmb3IgdGhlIGtleSBhdHRyaWJ1dGVzICovXG5AQCAtMTQ4NjAsNiArMTQ4NjEsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0ICAgICEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX2lkKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0cGFyYW1zLm5vX3N0YSA9XG4rXHRcdG5sYV9nZXRfZmxhZyhpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSk7XG4rXG4gXHRwYXJhbXMuYnVmID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKTtcbiBcdHBhcmFtcy5sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7XG4gXG5AQCAtMjIwMjQsNyArMjIwMjgsOSBAQCBpbnQgbmw4MDIxMV9zZW5kX21nbXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0ICAgIChpbmZvLVx1MDAzZWFja190c3RhbXAgXHUwMDI2XHUwMDI2IG5sYV9wdXRfdTY0XzY0Yml0KG1zZyxcbiBcdFx0XHRcdFx0XHQgICBOTDgwMjExX0FUVFJfVFhfSFdfVElNRVNUQU1QLFxuIFx0XHRcdFx0XHRcdCAgIGluZm8tXHUwMDNlYWNrX3RzdGFtcCxcbi1cdFx0XHRcdFx0XHQgICBOTDgwMjExX0FUVFJfUEFEKSkpXG4rXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpIHx8XG4rXHQgICAgKGluZm8tXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuK1x0ICAgICBubGFfcHV0X2ZsYWcobXNnLCBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQSkpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI3OjU2LjY4MzY5NjUwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDI3ODY1NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNpZ25pZmljYW50IG1hYzgwMjExL2NmZzgwMjExIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgc2VlbXMgY2VudGVyZWQgb24gdGhlIGNvcmUgbWFjODAyMTEgYW5kIGNmZzgwMjExIHN1YnN5c3RlbXMsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgTXVsdGktTGluayBPcGVyYXRpb24gKE1MTykgYW5kIHN0YXRpb24gaGFuZGxpbmcgYXJlIG1hbmFnZWQuIFRoZSBicmVhZHRoIG9mIHRoZSBhZmZlY3RlZCBkcml2ZXJz4oCUYXRoMTFrLCBhdGgxMmssIGl3bHdpZmksIG10NzYsIHJ0dzg5LCBhbmQgZXZlbiBtYWM4MDIxMV9od3NpbeKAlHRlbGxzIG1lIHRoaXMgaXMgYSBmb3VuZGF0aW9uYWwgc2hpZnQsIG5vdCBqdXN0IGEgbWlub3IgdHdlYWsuIERlZmluaXRlbHkgd29ydGh5IG9mIGNsb3NlIHNjcnV0aW55IGFuZCBmdXp6aW5nLlxuXG5MZXQncyBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBrZXkgaXMgaW4gaG93IHJlY2VpdmUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIGhvdyBpbmZvcm1hdGlvbiBpcyBwYXNzZWQuIFNwZWNpZmljYWxseSwgYGllZWU4MDIxMV9yeF9uYXBpYCBhbmQgYGllZWU4MDIxMV9yeF9saXN0YCBhcmUgY2hhbmdpbmcgdGhlaXIgc2lnbmF0dXJlLiAgSW5zdGVhZCBvZiB0aGUgZmFtaWxpYXIgYHN0cnVjdCBpZWVlODAyMTFfc3RhICpgLCB0aGV5J3JlIG5vdyBkZWFsaW5nIHdpdGggYHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmAuIFRoaXMgaW1wbGllcyBhIHJlLWFyY2hpdGVjdHVyZSBvZiBob3cgc3RhdGlvbiBhc3NvY2lhdGlvbiBhbmQgbGluayBtYW5hZ2VtZW50IGlzIGJlaW5nIGhhbmRsZWQgZHVyaW5nIHJlY2VpdmUgcHJvY2Vzc2luZy4gQWRkaXRpb25hbGx5LCB0aGUgYHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzYCBpcyBiZWluZyBzaW1wbGlmaWVkLiBUaGUgcmVtb3ZhbCBvZiBgbGlua192YWxpZGAgYW5kIHRoZSByZXRlbnRpb24gb2Ygb25seSBgbGlua19pZGAgaW5kaWNhdGVzIGEgbW9yZSBleHBsaWNpdCBhbmQgcG90ZW50aWFsbHkgc3RyZWFtbGluZWQgd2F5IG9mIGlkZW50aWZ5aW5nIHRoZSBhc3NvY2lhdGVkIGxpbmsgaW4gdGhlIHJ4IHBhdGguXG5cbk9uIHRoZSB0cmFuc21pdCBzaWRlLCB0aGUgYGNmZzgwMjExX21nbXRfdHhfcGFyYW1zYCBhbmQgYGNmZzgwMjExX3J4X2luZm9gIG5vdyBpbmNsdWRlIGEgYG5vX3N0YWAgZmllbGQuIFRoaXMsIGFsb25nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBgbmw4MDIxMV90eF9tZ210YCBhbmQgYG5sODAyMTFfc2VuZF9tZ210YCB0byBoYW5kbGUgYE5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBYCwgdGVsbHMgbWUgdGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIG1nbXQgZnJhbWVzIHRoYXQgYXJlbid0IG5lY2Vzc2FyaWx5IHRpZWQgdG8gYSBzcGVjaWZpYyBzdGF0aW9uIChlLmcuLCBiZWFjb24gdHJhbnNtaXNzaW9ucywgcHJvYmUgcmVzcG9uc2VzLCBldGMuKSBvciBmcmFtZXMgd2hlcmUgc3RhdGlvbiBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IHVuZGVyIE1MTy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhvc2UgZm9jdXMgc3ltYm9sczogYG5sODAyMTFfdHhfbWdtdGAsIGBpZWVlODAyMTFfbWdtdF90eGAsIGBpZWVlODAyMTFfcnhfbGlzdGAsIGFuZCBgaWVlZTgwMjExX3J4X25hcGlgLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlIHdpdGggdGhlIG92ZXJhbGwgcmVjZWl2ZSBwYXRoLiBUaGVyZSBhcmUgYSBudW1iZXIgb2YgaW50ZXJuYWwgZnVuY3Rpb24gY2FsbHMgbW9kaWZpZWQgYW5kIEkgd2lsbCBpbnZlc3RpZ2F0ZSB0aGVtIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gXG5cbkFzIGZvciBjb25maWd1cmF0aW9ucywgSSdtIGV4cGVjdGluZyBgQ09ORklHX01BQzgwMjExYCwgYENPTkZJR19DRkc4MDIxMWAsIGFuZCBwb3NzaWJseSBgQ09ORklHX01BQzgwMjExX0hXU0lNYCB0byBiZSBlc3NlbnRpYWwuIFRpbWUgdG8gdmVyaWZ5IHRob3NlIHN5bWJvbHMsIGNyb3NzLXJlZmVyZW5jZSB0aGVtIHdpdGggdGhlIGNoYW5nZXMsIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZnVsbHkuIFRoaXMgY291bGQgYmUgYSBnYW1lLWNoYW5nZXIgZm9yIE1MTyBzdXBwb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzE5OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI4OjA4LjExMTU2NDY4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIxNjYxNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfdHhfbWdtdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE0NzA3PXN0YXRpYyBpbnQgbmw4MDIxMV9yZWdpc3Rlcl9tZ210KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NzY0LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQ3NjU6c3RhdGljIGludCBubDgwMjExX3R4X21nbXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NzY2LXtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ5MTMtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNDkxNDpzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdF9jYW5jZWxfd2FpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ5MTUte1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTczNz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMTI0LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwMTI1OlxcdFxcdC5kb2l0ID0gbmw4MDIxMV90eF9tZ210LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAxMjYtXFx0XFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAxMzEtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAxMzI6XFx0XFx0LmRvaXQgPSBubDgwMjExX3R4X21nbXRfY2FuY2VsX3dhaXQsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDEzMy1cXHRcXHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyODoxMC4xMzMyMzUxMjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTAxOTYzMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIHRoZSBgaWVlZTgwMjExX21nbXRfdHhgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgaWVlZTgwMjExX21nbXRfdHhgLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gdHJvdWJsZXNob290aW5nIGEgbWFuYWdlbWVudCBmcmFtZSB0cmFuc21pc3Npb24gaXNzdWUsIG9yIG1heWJlIEknbSByZXZpZXdpbmcgdGhlIGNvZGUgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCdzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgc3BlY2lmaWMgZXZlbnQgbGlrZSBhbiBhc3NvY2lhdGlvbiByZXF1ZXN0LCBhIGJlYWNvbiB0cmFuc21pc3Npb24sIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgZmxvdy5cblxuSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhcy4gQXJlIHdlIGhhbmRsaW5nIGZyYW1lIGxpZmV0aW1lcyBjb3JyZWN0bHk/IElzIHRoZXJlIGFwcHJvcHJpYXRlIHJldHJ5IGxvZ2ljIGlmIHRoZSB0cmFuc21pc3Npb24gZmFpbHM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgcGF0aHMsIGFuZCBob3cgYXJlIHRoZXkgaGFuZGxlZD8gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3MsIHJhY2UgY29uZGl0aW9ucywgb3IgaW5jb3JyZWN0IHBhcmFtZXRlciB2YWxpZGF0aW9uLiBNZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgYSBjb25jZXJuOyBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbWFuYWdlbWVudCBmcmFtZSBidWZmZXIgaXMgbWFuYWdlZCwgaG93IGl0J3MgaW5pdGlhbGl6ZWQsIGFuZCB3aGVuIGl0J3MgZnJlZWQuXG5cbkknbGwgYWxzbyBiZSBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24gb2NjdXJzLiBIb3cgaXMgdGhlIGZyYW1lIGZvcm1hdHRlZCBmb3IgdGhlIHJhZGlvPyBJcyB0aGUgY29ycmVjdCBtb2R1bGF0aW9uIGFuZCBjb2Rpbmcgc2NoZW1lIGJlaW5nIHVzZWQ/IEFyZSB3ZSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSB0cmFuc21pdCBwb3dlciBhbmQgY2hhbm5lbD8gQW55IGRldmlhdGlvbiBoZXJlIGNvdWxkIGxlYWQgdG8gdHJhbnNtaXNzaW9uIGZhaWx1cmVzIG9yIHBvb3IgcGVyZm9ybWFuY2UuXG5cbkZ1cnRoZXJtb3JlLCBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3Igc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzLiBJcyB0aGlzIGZ1bmN0aW9uIHZ1bG5lcmFibGUgdG8gYW55IGtpbmQgb2YgaW5qZWN0aW9uIGF0dGFjaz8gQ291bGQgYSBtYWxpY2lvdXMgYWN0b3IgY3JhZnQgYSBtYW5hZ2VtZW50IGZyYW1lIHRoYXQgY2F1c2VzIGEgZGVuaWFsLW9mLXNlcnZpY2Ugb3IgZXZlbiBjb2RlIGV4ZWN1dGlvbj8gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBhcmFtZXRlciB2YWxpZGF0aW9uIGFuZCBhbnkgc2FuaXRpemF0aW9uIHN0ZXBzLiBBcmUgdGhlcmUgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb24gaW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlIGZpcm13YXJlP1xuXG5CYXNpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgZW50aXJlIHRyYW5zbWlzc2lvbiBwcm9jZXNzLCBmcm9tIHRoZSBzb3VyY2UgZGF0YSB0byB0aGUgcGh5c2ljYWwgcmFkaW8gd2F2ZXMuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiB3aGF0J3MgaGFwcGVuaW5nLiBBbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB3aXJlbGVzcyBuZXR3b3JraW5nLCB0aW1pbmcgYW5kIGNvbmN1cnJlbmN5IGNvdWxkIGFsc28gYmUgYSBtYWpvciBjb25jZXJuLCBJJ2xsIGJlIHJlYWR5IHRvIGFuYWx5emUgdGhpcyBpZiBuZWNlc3NhcnkuIExldCdzIHN0YXJ0IGJ5IHdhbGtpbmcgdGhyb3VnaCB0aGUgY29kZSBsaW5lIGJ5IGxpbmUgYW5kIHNlZWluZyBob3cgdGhlc2UgdmFyaW91cyBhc3BlY3RzIGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA4OSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI4OjE2LjYzNTIwMTE3M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzNjMxMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9tZ210X3R4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDM4LVxcdC5jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwgPSBpZWVlODAyMTFfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsLFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo2MDM5OlxcdC5tZ210X3R4ID0gaWVlZTgwMjExX21nbXRfdHgsXFxubmV0L21hYzgwMjExL2NmZy5jOjYwNDA6XFx0Lm1nbXRfdHhfY2FuY2VsX3dhaXQgPSBpZWVlODAyMTFfbWdtdF90eF9jYW5jZWxfd2FpdCxcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjA0MS1cXHQuc2V0X2NxbV9yc3NpX2NvbmZpZyA9IGllZWU4MDIxMV9zZXRfY3FtX3Jzc2lfY29uZmlnLFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjE1NT1pbnQgaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxNTYtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHU2NCBjb29raWUpO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIxNTc6aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjE1OC1cXHRcXHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMgKnBhcmFtcywgdTY0IGNvb2tpZSk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjE1OTppbnQgaWVlZTgwMjExX21nbXRfdHhfY2FuY2VsX3dhaXQoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMTYwLVxcdFxcdFxcdFxcdCAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgdTY0IGNvb2tpZSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jPTgwMT1pbnQgaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy04MDktXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzo4MTA6aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy04MTEtXFx0XFx0ICAgICAgc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zICpwYXJhbXMsIHU2NCBjb29raWUpXFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTEwNTAtXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzoxMDUxOmludCBpZWVlODAyMTFfbWdtdF90eF9jYW5jZWxfd2FpdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMTA1Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHU2NCBjb29raWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI4OjE4LjMyODgzOTc5N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDc5ODQzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSA4MDIuMTEgUlggUGF0aCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlY2VpdmluZyBzaWRlIG9mIHRoaXMgODAyLjExIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkIHdoZW4gdGhleSBhcnJpdmUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBnZXR0aW5nIHRoZXNlIGZyYW1lcyBpbnRvIHRoZSBzeXN0ZW0uXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGNvdXBsZSBvZiBrZXkgYXJlYXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyBgaWVlZTgwMjExX3J4X2xpc3RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgcGFja2V0cyBhcmUgaW5pdGlhbGx5IHF1ZXVlZCwgYW5kIGhvdyB0aGUgcmVjZWl2ZWQgZnJhbWVzIGFyZSBwcm9jZXNzZWQgd2l0aGluIHRoYXQgc3RydWN0dXJlLiBUaGVuLCBJIHNob3VsZCBjb21wYXJlIGFuZCBjb250cmFzdCBpdCB3aXRoIHRoZSBgaWVlZTgwMjExX3J4X25hcGlgIHBhdGguIE5BUEkgaXMgYSBjb3JlIHBhcnQgb2YgbW9kZXJuIG5ldHdvcmsgZHJpdmVyIGRlc2lnbiwgc28gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgUlggcHJvY2VzcyBoZXJlIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHR3byBzeXN0ZW1zIGludGVyYWN0LCBhbmQgd2hhdCB0aGUgZmxvdyBpcyBmb3IgdGhlIGluY29taW5nIGZyYW1lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzODAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyODoyMi4zMzY4MjY3NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjQ4MzEyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfcnhfbGlzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmM9MTUzND12b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYy0xNTQ4LVxcdFxcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXFx1MDAyNmh3LCBcXHUwMDI2bGlua19zdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYzoxNTQ5OlxcdFxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcXHUwMDI2bGlzdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jLTE1NTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMtMTU1Ny1cXHRcXHRcXHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFxcdTAwMjZodywgXFx1MDAyNmxpbmtfc3RhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmM6MTU1ODpcXHRcXHRcXHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYy0xNTU5LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvZG1hLmM9NzY9c3RhdGljIHZvaWQgbXQ3NjAxdV9yeF9wcm9jZXNzX3NlZyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTggKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2RtYS5jLTExMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2RtYS5jOjExMTpcXHRpZWVlODAyMTFfcnhfbGlzdChkZXYtXFx1MDAzZWh3LCBOVUxMLCBza2IsIGxpc3QpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvZG1hLmMtMTEyLVxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01Mzc0PXZvaWQgaWVlZTgwMjExX3Jlc3RhcnRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01Mzc2LS8qKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTM3NzogKiBpZWVlODAyMTFfcnhfbGlzdCAtIHJlY2VpdmUgZnJhbWUgYW5kIHN0b3JlIHByb2Nlc3NlZCBza2JzIGluIGEgbGlzdFxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTM3OC0gKlxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDAwLSAqL1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTQwMTp2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQwMi1cXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz01MzQzPXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy01NTkzLSAqL1xcbm5ldC9tYWM4MDIxMS9yeC5jOjU1OTQ6dm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG5uZXQvbWFjODAyMTEvcnguYy01NTk1LVxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jLTU3NjEtfVxcbm5ldC9tYWM4MDIxMS9yeC5jOjU3NjI6RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnhfbGlzdCk7XFxubmV0L21hYzgwMjExL3J4LmMtNTc2My1cXG5uZXQvbWFjODAyMTEvcnguYz01NzY0PXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy01Nzc3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvbWFjODAyMTEvcnguYzo1Nzc4OlxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBcXHUwMDI2bGlzdCk7XFxubmV0L21hYzgwMjExL3J4LmMtNTc3OS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTU6Mjg6MjMuOTI5MzE2MzI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcwMzc1Mjg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyB0aG91Z2ggdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBpZWVlODAyMTFfcnhfbmFwaWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgcmV2aXNpdCBgaWVlZTgwMjExX3J4X25hcGlgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaGFuZGxlcyBpbmNvbWluZyA4MDIuMTEgcGFja2V0cyB3aXRoaW4gdGhlIE5BUEkgY29udGV4dC4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIGludGVycnVwdCBoYW5kbGluZyBhbmQgZGF0YSBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgZHJpdmVyLiBJIHdpbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaGFyZHdhcmUgcmVjZWl2ZSBxdWV1ZXMgYW5kIGhvdyB0aGVzZSBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgdG8gYXZvaWQgYW55IGxhdGVuY3kgaXNzdWVzLCBzdWNoIGFzIHRob3NlIHJlbGF0ZWQgdG8gRE1BIG9yIGJ1ZmZlciBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzc2NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI4OjMyLjYzMzA3MTA5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzA4NTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfcnhfbmFwaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jPTEzNjQ9c3RhdGljIHZvaWQgYXRoMTBrX3Byb2Nlc3Nfcngoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jLTE0MDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYzoxNDA3OlxcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVxcdTAwM2VodywgTlVMTCwgc2tiLCBcXHUwMDI2YXItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmMtMTQwOC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jPTI0NTQ9c3RhdGljIGJvb2wgYXRoMTBrX2h0dF9yeF9wcm9jX3J4X2luZF9obChzdHJ1Y3QgYXRoMTBrX2h0dCAqaHR0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYy0yNjcwLVxcdGlmIChhci1cXHUwMDNlbmFwaS5kZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYzoyNjcxOlxcdFxcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVxcdTAwM2VodywgTlVMTCwgc2tiLCBcXHUwMDI2YXItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmMtMjY3Mi1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmM9MjQyNz1zdGF0aWMgdm9pZCBhdGgxMWtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMtMjUwMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmM6MjUwMzpcXHRpZWVlODAyMTFfcnhfbmFwaShhci1cXHUwMDNlaHcsIHB1YnN0YSA/IFxcdTAwMjZwdWJzdGEtXFx1MDAzZWRlZmxpbmsgOiBOVUxMLCBtc2R1LCBuYXBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMtMjUwNC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jPTQ5Mz12b2lkIGF0aDEya19kcF9tb25fcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMtNTE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmM6NTE2OlxcdGllZWU4MDIxMV9yeF9uYXBpKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBOVUxMLCBtc2R1LCBuYXBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jLTUxNy19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmM9MTM3MT12b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMtMTQzNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmM6MTQzNjpcXHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jLTE0MzctXFx0XFx0XFx0ICBuYXBpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4LmM9NjA0PXN0YXRpYyB2b2lkIGl3bGFnbl9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9yeC5jLTY3MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9yeC5jOjY3MTpcXHRpZWVlODAyMTFfcnhfbmFwaShwcml2LVxcdTAwM2VodywgTlVMTCwgc2tiLCBwcml2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9yeC5jLTY3Mi19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jPTEyMD12b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMtMTMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmM6MTMzOlxcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cXHUwMDNlaHcsIGxpbmtfc3RhLCBza2IsIG5hcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMtMTM0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmM9MjI4Mz1zdGF0aWMgdm9pZCBpd2xfbWxkX25vX2RhdGFfcngoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMtMjM1MC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYzoyMzUxOlxcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cXHUwMDNlaHcsIE5VTEwsIHNrYiwgbmFwaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYy0yMzUyLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmM9MTcwPXZvaWQgaXdsX21sZF9oYW5kbGVfdGltZV9tc210X25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90aW1lX3N5bmMuYy0yMDEtXFx0XFx0ICAgICAgIGt0aW1lX3RvX25zKHJ4X3N0YXR1cy1cXHUwMDNlYWNrX3R4X2h3dHN0YW1wKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmM6MjAyOlxcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cXHUwMDNlaHcsIE5VTEwsIHNrYiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmMtMjAzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM9MTY4Nz12b2lkIGl3bF9tdm1fcnhfc3RvcmVkX2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vbWFjLWN0eHQuYy0xNzQ0LVxcdC8qIHBhc3MgaXQgYXMgcmVndWxhciByeCB0byBtYWM4MDIxMSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM6MTc0NTpcXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBOVUxMLCBza2IsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmMtMTc0Ni19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jPTQ1PXN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMtOTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYzo5MzpcXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBzdGEgPyBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jLTk0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYz0yMzY9c3RhdGljIHZvaWQgaXdsX212bV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jLTI0NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmM6MjQ2OlxcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIHN0YSA/IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYy0yNDctfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jPTI0MDk9dm9pZCBpd2xfbXZtX3J4X21vbml0b3Jfbm9fZGF0YShzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMtMjUzMC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jOjI1MzE6XFx0aWVlZTgwMjExX3J4X25hcGkobXZtLVxcdTAwM2Vodywgc3RhID8gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jLTI1MzItXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS90aW1lLXN5bmMuYz01OD12b2lkIGl3bF9tdm1fdGltZV9zeW5jX21zbXRfZXZlbnQoc3RydWN0IGl3bF9tdm0gKm12bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3RpbWUtc3luYy5jLTg5LVxcdFxcdCAgICAgICBrdGltZV90b19ucyhyeF9zdGF0dXMtXFx1MDAzZWFja190eF9od3RzdGFtcCkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3RpbWUtc3luYy5jOjkwOlxcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIE5VTEwsIHNrYiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vdGltZS1zeW5jLmMtOTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9wY2kuYz0xMDQyPXN0YXRpYyB1MzIgcnR3X3BjaV9yeF9uYXBpKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBydHdfcGNpICpydHdwY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3BjaS5jLTExMDQtXFx0XFx0XFx0bWVtY3B5KG5ldy1cXHUwMDNlY2IsIFxcdTAwMjZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3BjaS5jOjExMDU6XFx0XFx0XFx0aWVlZTgwMjExX3J4X25hcGkocnR3ZGV2LVxcdTAwM2VodywgTlVMTCwgbmV3LCBuYXBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3BjaS5jLTExMDYtXFx0XFx0XFx0cnhfZG9uZSsrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmM9NDAwMj1zdGF0aWMgdm9pZCBydHc4OV9jb3JlX3J4X3RvX21hYzgwMjExKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQwMjMtXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jOjQwMjQ6XFx0aWVlZTgwMjExX3J4X25hcGkocnR3ZGV2LVxcdTAwM2VodywgTlVMTCwgc2tiX3BwZHUsIG5hcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQwMjUtXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU0MDE9dm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQwNS0vKipcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU0MDY6ICogaWVlZTgwMjExX3J4X25hcGkgLSByZWNlaXZlIGZyYW1lIGZyb20gTkFQSSBjb250ZXh0XFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDA3LSAqXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU0MjktICovXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NDMwOnZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDMxLVxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NTQ1ND1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQ1NS17XFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NDU2OlxcdGllZWU4MDIxMV9yeF9uYXBpKGh3LCBOVUxMLCBza2IsIE5VTEwpO1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQ1Ny19XFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz01NzYyPUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X2xpc3QpO1xcbm5ldC9tYWM4MDIxMS9yeC5jLTU3NjMtXFxubmV0L21hYzgwMjExL3J4LmM6NTc2NDp2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbm5ldC9tYWM4MDIxMS9yeC5jLTU3NjUtXFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtNTc5MC19XFxubmV0L21hYzgwMjExL3J4LmM6NTc5MTpFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeF9uYXBpKTtcXG5uZXQvbWFjODAyMTEvcnguYy01NzkyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyODozNC4yMzYxNjQzNjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NzAyMzcyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNQUM4MDIxMSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtYWtpbmcgc29tZSB0YXJnZXRlZCBjaGFuZ2VzIHdpdGhpbiB0aGUgTUFDODAyMTEgYW5kIENGRzgwMjExIGxheWVycy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggc29tZSBudWFuY2VkIGFzcGVjdHMgb2Ygc3RhdGlvbiAoU1RBKSBhc3NvY2lhdGlvbiBhbmQgbWFuYWdlbWVudCBmcmFtZSBoYW5kbGluZy4gSSBzZWUgaXQncyByZWZhY3RvcmluZyBzb21lIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QgYXMgYSBwb3RlbnRpYWwgaW5kaWNhdG9yIG9mIGFyY2hpdGVjdHVyYWwgaW1wcm92ZW1lbnRzIG9yIG9wdGltaXphdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgYGllZWU4MDIxMV9yeF9saXN0YCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYCBhcmUgc2hpZnRpbmcgZnJvbSB1c2luZyBgc3RydWN0IGllZWU4MDIxMV9zdGEgKmAgdG8gYHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmAuIFRoaXMgc3VnZ2VzdHMgdGhleSBhcmUgbm93IGRlYWxpbmcgd2l0aCBsaW5rLXNwZWNpZmljIFNUQSBpbmZvcm1hdGlvbiwgd2hpY2ggdGVsbHMgbWUgdGhlIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGVuaGFuY2VtZW50cyByZWxhdGVkIHRvIGxpbmstbGF5ZXIgbWFuYWdlbWVudCBhbmQgcGVyaGFwcyBtdWx0aS1saW5rIG9wZXJhdGlvbi5cblxuVGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5sODAyMTFfdHhfbWdtdGAgYW5kIGBubDgwMjExX3NlbmRfbWdtdGAgdG8gaGFuZGxlIGBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQWAgYXJlIGFsc28gc2lnbmlmaWNhbnQuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIG9yIHJlZmluaW5nIGEgbWVjaGFuaXNtIGZvciBzZW5kaW5nIG1hbmFnZW1lbnQgZnJhbWVzIHRoYXQgZG9uJ3QgbmVjZXNzYXJpbHkgdGFyZ2V0IGEgc3BlY2lmaWMgU1RBLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNlbWFudGljcyBvZiB0aGF0IGF0dHJpYnV0ZSwgYnV0IGl0J3MgbGlrZWx5IGludm9sdmVkIGluIGJyb2FkY2FzdCBvciBnZW5lcmFsLXB1cnBvc2UgbWFuYWdlbWVudCBmcmFtZSB0cmFuc21pc3Npb25zLCBtYXliZSByZWxhdGVkIHRvIGRpc2NvdmVyeSBvciBwcm9iaW5nLiBBbHNvLCB0aGUgYGllZWU4MDIxMV9tZ210X3R4YCBtb2RpZmljYXRpb24gdG8gaGFuZGxlIGBwYXJhbXMtXHUwMDNlbm9fc3RhYCBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhpcyBmb2N1cyBvbiBub24tU1RBLXNwZWNpZmljIG1hbmFnZW1lbnQgZnJhbWUgdHJhbnNtaXNzaW9uLlxuXG5GaW5hbGx5LCB0aGUgYWRkZWQgYHN0cnVjdCBzdGFfaW5mbyAqc3RhYCBhcmd1bWVudCB0byBgaWVlZTgwMjExX3R4X3NrYl90aWRgIGltcGxpZXMgYSBwb3RlbnRpYWwgY2hhbmdlIGluIGhvdyB0aGUgdHJhbnNtaXQgcGF0aCBhc3NvY2lhdGVzIFNLQnMgd2l0aCBTVEEgaW5mb3JtYXRpb24uIE1heWJlIHRoaXMgd2lsbCBoZWxwIHdpdGggYWR2YW5jZWQgc2NoZWR1bGluZyBhbmQgUW9TIGZlYXR1cmVzLCBidXQgSSB3b3VsZCBuZWVkIHRvIGZpbmQgb3V0IG1vcmUuXG5cbk15IGtleSBmb2N1cyBzeW1ib2xzIGhlcmUgYXJlOiBgbmw4MDIxMV90eF9tZ210YCwgYGllZWU4MDIxMV9tZ210X3R4YCwgYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCwgYW5kIGBpZWVlODAyMTFfdHhfc2tiX3RpZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHNpZ25hdHVyZSBjaGFuZ2VzIGFuZCBob3cgdGhlIGBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQWAgYXR0cmlidXRlIGlzIGJlaW5nIHVzZWQuIEFuZCwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSByZS1leHBvcnRlZCwgSSB3aWxsIGNoZWNrIHRvIHNlZSBpZiBgaWVlZTgwMjExX3R4X3NrYl90aWRgIGlzIGV4cG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM0MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyODo0NC44MDY0MDQyNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE4OTQ2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX3R4X3NrYl90aWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2FnZy10eC5jPTYxPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsXFxuLS1cXG5uZXQvbWFjODAyMTEvYWdnLXR4LmMtMTAwLVxcbm5ldC9tYWM4MDIxMS9hZ2ctdHguYzoxMDE6XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XFxubmV0L21hYzgwMjExL2FnZy10eC5jLTEwMi19XFxuLS1cXG5uZXQvbWFjODAyMTEvYWdnLXR4LmM9MTA0PXZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcXG4tLVxcbm5ldC9tYWM4MDIxMS9hZ2ctdHguYy0xMjktXFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xcbm5ldC9tYWM4MDIxMS9hZ2ctdHguYzoxMzA6XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XFxubmV0L21hYzgwMjExL2FnZy10eC5jLTEzMS19XFxuLS1cXG5uZXQvbWFjODAyMTEvaHQuYz00OTc9aW50IGllZWU4MDIxMV9zZW5kX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2h0LmMtNTQ3LVxcdFxcdFxcdFxcdFxcdCAgICBJRUVFODAyMTFfU1RBVFVTX1NVQkRBVEFfTUFTSyk7XFxubmV0L21hYzgwMjExL2h0LmM6NTQ4OlxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIDcsIGxpbmtfaWQpO1xcbm5ldC9tYWM4MDIxMS9odC5jLTU0OS1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI0NjI9dm9pZCBpZWVlODAyMTFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI0NjQtXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ2NTp2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDY2LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI0ODE9c3RhdGljIGlubGluZSB2b2lkXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ4MjppZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI0ODMtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjQ4Ni1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ4NzpcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgRVJSX1BUUigtRU5PRU5UKSxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDg4LVxcdFxcdFxcdFxcdCAgICB0aWQsIC0xLCBiYW5kKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI0OTEtXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ5Mjp2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI0OTMtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI0OTY9c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDk5LVxcdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjUwMDpcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCAtMSk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjUwMS19XFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jPTIzNz1zdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX3JvY19zdGFydGVkKHN0cnVjdCBpZWVlODAyMTFfcm9jX3dvcmsgKnJvYyxcXG4tLVxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMjQ3LVxcdFxcdGlmICghV0FSTl9PTighcm9jLVxcdTAwM2VmcmFtZSkpIHtcXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jOjI0ODpcXHRcXHRcXHRpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJvYy1cXHUwMDNlc2RhdGEsIHJvYy1cXHUwMDNlZnJhbWUsIDcsXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0yNDktXFx0XFx0XFx0XFx0XFx0XFx0ICByb2MtXFx1MDAzZWNoYW4tXFx1MDAzZWJhbmQpO1xcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYz04MTA9aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTEwMjctXFx0aWYgKCFuZWVkX29mZmNoYW4pIHtcXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jOjEwMjg6XFx0XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTEwMjktXFx0XFx0XFx0XFx0ICAgICBwYXJhbXMtXFx1MDAzZW5vX3N0YSA/IHN0YSA6IEVSUl9QVFIoLUVOT0VOVCksXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz00MDU1PWllZWU4MDIxMV9yeF9oX2FjdGlvbl9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jLTQxMDgtXFxubmV0L21hYzgwMjExL3J4LmM6NDEwOTpcXHRcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQocngtXFx1MDAzZXNkYXRhLCBuc2tiLCByeC1cXHUwMDNlc3RhLCA3LCAtMSxcXG5uZXQvbWFjODAyMTEvcnguYy00MTEwLVxcdFxcdFxcdFxcdFxcdCAgICBzdGF0dXMtXFx1MDAzZWJhbmQpO1xcbi0tXFxubmV0L21hYzgwMjExL3NjYW4uYz02NTg9c3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfc2Nhbl9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jLTY4Mi1cXHRcXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXFx1MDAzZWNvbnRyb2wuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUUkxfRE9OVF9VU0VfUkFURV9NQVNLO1xcbm5ldC9tYWM4MDIxMS9zY2FuLmM6NjgzOlxcdFxcdGllZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgNywgY2hhbm5lbC1cXHUwMDNlYmFuZCk7XFxubmV0L21hYzgwMjExL3NjYW4uYy02ODQtXFx0fVxcbi0tXFxubmV0L21hYzgwMjExL3RkbHMuYz05OTc9aWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL3RkbHMuYy0xMDY4LVxcdGlmIChhY3Rpb25fY29kZSA9PSBXTEFOX1BVQl9BQ1RJT05fVERMU19ESVNDT1ZFUl9SRVMpIHtcXG5uZXQvbWFjODAyMTEvdGRscy5jOjEwNjk6XFx0XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgc3RhLCA3LCBsaW5rX2lkKTtcXG5uZXQvbWFjODAyMTEvdGRscy5jLTEwNzAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz02NDM2PUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVzZXJ2ZV90aWQpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTY0MzctXFxubmV0L21hYzgwMjExL3R4LmM6NjQzODp2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvdHguYy02NDM5LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTY0OTUtXFxubmV0L21hYzgwMjExL3R4LmM6NjQ5Njp2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS90eC5jLTY0OTctXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTY1MjMtXFxubmV0L21hYzgwMjExL3R4LmM6NjUyNDpcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTY1MjUtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI4OjQ2LjQ1ODMwNDkxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg2ODg0MzI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gdGhlIGBtYWM4MDIxMWAgYW5kIGBjZmc4MDIxMWAgc3Vic3lzdGVtcywgcGFydGljdWxhcmx5IGFyb3VuZCBob3cgZnJhbWVzIGdldCBoYW5kbGVkLCBlc3BlY2lhbGx5IHdpdGggdGhpcyBNdWx0aS1MaW5rIE9wZXJhdGlvbiBzdHVmZi4gVGhlIGtleSBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMuXG5cbkZpcnN0LCBsZXQncyBmaWx0ZXIgb3V0IHRoZSBub2lzZS4gVGhlIGZ1bmN0aW9ucyBgaWVlZTgwMjExX3R4X3NrYl90aWRgIGFuZCBgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kYCBhcmVuJ3QgZXhwb3J0ZWQsIHNvIHRoZXkncmUgbm90IGVudHJ5IHBvaW50cyBmb3IgdXMuIGBpZWVlODAyMTFfcnhfbGlzdGAgYW5kIGBpZWVlODAyMTFfcnhfbmFwaWAgYXJlIGV4cG9ydGVkLCBzbyB0aG9zZSBhcmUgZ29vZCBjYW5kaWRhdGVzLiBgaWVlZTgwMjExX21nbXRfdHhgIGlzIGEgY2FsbGJhY2sgd2l0aGluIGBtYWM4MDIxMV9jb25maWdfb3BzYCwgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0LCBldmVuIGlmIGl0J3Mgbm90IGV4cG9ydGVkIGRpcmVjdGx5LiBBbmQgYG5sODAyMTFfdHhfbWdtdGAgaXMgYSBuZXRsaW5rIGNhbGxiYWNrLCBzbyBpdCdzIGV4cG9zZWQgZXh0ZXJuYWxseSwgYW5kIHRoZXJlZm9yZSB2ZXJ5IGltcG9ydGFudC5cblxuU28sIEkgdGhpbmsgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOlxuKiAgIGBubDgwMjExX3R4X21nbXRgIChuZXRsaW5rIGZvciBUWCBtYW5hZ2VtZW50KVxuKiAgIGBpZWVlODAyMTFfbWdtdF90eGAgKG1hYzgwMjExIGNhbGxiYWNrIGZvciBUWCBtYW5hZ2VtZW50KVxuKiAgIGBpZWVlODAyMTFfcnhfbGlzdGAgKG1haW4gUlggZW50cnlwb2ludClcbiogICBgaWVlZTgwMjExX3J4X25hcGlgIChtYWluIFJYIGVudHJ5cG9pbnQpXG5cbk5vdywgd2hhdCBhYm91dCBjb25maWd1cmF0aW9ucz8gV2VsbCwgdGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggYG1hYzgwMjExX2h3c2ltX21haW4uY2AsIHNvIEknbGwgZGVmaW5pdGVseSBuZWVkIGBNQUM4MDIxMV9IV1NJTWAuIEknbGwgYWxzbyBuZWVkIHRoZSBnZW5lcmFsIGBNQUM4MDIxMWAgYW5kIGBDRkc4MDIxMWAgY29uZmlndXJhdGlvbnMsIG9idmlvdXNseS5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYGllZWU4MDIxMV9yeF9saXN0YCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYCAqYXJlKiBpbmRlZWQgdGhlIG1haW4gUlggZW50cnkgcG9pbnRzIGZvciBtYWM4MDIxMSwgYW5kIHRoZXkgYXJlLiBBbmQgdGhlIG90aGVyIHR3byBmdW5jdGlvbnMgYXJlIHRoZSByaWdodCBlbnRyeSBwb2ludHMgZm9yIG1nbXQgVFguXG5cbkFscmlnaHQsIHdpdGggdGhhdCBpbiBtaW5kLCBoZXJlJ3MgbXkgcGxhbjpcblxuKiAgIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cbiogICBNeSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOlxuICAgICogICBgbmw4MDIxMV90eF9tZ210YFxuICAgICogICBgaWVlZTgwMjExX21nbXRfdHhgXG4gICAgKiAgIGBpZWVlODAyMTFfcnhfbGlzdGBcbiAgICAqICAgYGllZWU4MDIxMV9yeF9uYXBpYFxuKiAgIEknbGwgc2V0IHRoZSBmb2xsb3dpbmcgYEVuYWJsZUNvbmZpZ3NgOlxuICAgICogICBgTUFDODAyMTFgXG4gICAgKiAgIGBDRkc4MDIxMWBcbiAgICAqICAgYE1BQzgwMjExX0hXU0lNYFxuXG5UaGUgcmF0aW9uYWxlPyBUaGlzIHBhdGNoJ3MgbW9kaWZpY2F0aW9ucywgZXNwZWNpYWxseSB0aGUgY2hhbmdlcyB0byB0aGUgUlggZnVuY3Rpb25zIGFuZCB0aGUgbmV3ICdub19zdGEnIGhhbmRsaW5nIGluIG1hbmFnZW1lbnQgZnJhbWUgdHJhbnNtaXNzaW9uLCBhcmUgY3JpdGljYWwgcGF0aHMgYW5kIGludHJvZHVjZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gSXQncyB0b3VjaGluZyBjb3JlIGZ1bmN0aW9uYWxpdHkgaW4gYSBzaWduaWZpY2FudCB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzAwLCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyODo1OS4zMjcxNTA4NjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTkyMDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfdHhfbWdtdFwiLFxuICAgIFwiaWVlZTgwMjExX21nbXRfdHhcIixcbiAgICBcImllZWU4MDIxMV9yeF9saXN0XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbmFwaVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBob3cgcmVjZWl2ZWQgZnJhbWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbnMgYW5kIGxpbmtzIChNdWx0aS1MaW5rIE9wZXJhdGlvbikuIEl0IGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBjb3JlIFJYIGZ1bmN0aW9ucyAoYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCkgYW5kIG1vZGlmaWVzIHRoZSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBwYXRoIHRvIGhhbmRsZSBhIG5ldyBgbm9fc3RhYCBmbGFnLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX3R4X21nbXRcIixcbiAgICBcImllZWU4MDIxMV9tZ210X3R4XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbGlzdFwiLFxuICAgIFwiaWVlZTgwMjExX3J4X25hcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWFjODAyMTEgYW5kIGNmZzgwMjExIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgaG93IHJlY2VpdmVkIGZyYW1lcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHN0YXRpb25zIGFuZCBsaW5rcyAoTXVsdGktTGluayBPcGVyYXRpb24pLiBJdCBjaGFuZ2VzIHRoZSBzaWduYXR1cmUgb2YgY29yZSBSWCBmdW5jdGlvbnMgKGBpZWVlODAyMTFfcnhfbGlzdGAsIGBpZWVlODAyMTFfcnhfbmFwaWApIGFuZCBtb2RpZmllcyB0aGUgbWFuYWdlbWVudCBmcmFtZSB0cmFuc21pc3Npb24gcGF0aCB0byBoYW5kbGUgYSBuZXcgYG5vX3N0YWAgZmxhZy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv7nn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-03 15:09:20 +0000 UTC FinishedAt: 2026-08-03 15:29:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "6c5fc504d0d6934132637aa3db4b9b58148eaa78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "wireless-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git", "commit_hash": "6c5fc504d0d6934132637aa3db4b9b58148eaa78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MAC80211", "CFG80211", "MAC80211_HWSIM" ], "series_id": "e51900cc-ef8a-48e6-8976-5edabd4ad6e1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nl80211_tx_mgmt", "ieee80211_mgmt_tx", "ieee80211_rx_list", "ieee80211_rx_napi" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAzIDE1OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ210X3R4JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9saXN0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9uYXBpJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBob3cgcmVjZWl2ZWQgZnJhbWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbnMgYW5kIGxpbmtzIChNdWx0aS1MaW5rIE9wZXJhdGlvbikuIEl0IGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBjb3JlIFJYIGZ1bmN0aW9ucyAoYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCkgYW5kIG1vZGlmaWVzIHRoZSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBwYXRoIHRvIGhhbmRsZSBhIG5ldyBgbm9fc3RhYCBmbGFnLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE1OjI3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODdmNGM5NDNjOWI1MmM3ZTk2NmU1NzAzMzkyYjk4MjdiODdjZWE2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTU6Mjc6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jXG5pbmRleCAzMzQyNTcwN2MwODQyLi5mYmIzZDE4ZjU1ZGRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcbkBAIC0yNTAwLDcgJiM0MzsyNTAwLDcgQEAgc3RhdGljIHZvaWQgYXRoMTFrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTFrICphciwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBcbiBcdCAgICAhKGlzX21jYmMgXHUwMDI2XHUwMDI2IHJ4X3N0YXR1cy1cdTAwM2VmbGFnIFx1MDAyNiBSWF9GTEFHX0RFQ1JZUFRFRCkpXG4gXHRcdHJ4X3N0YXR1cy1cdTAwM2VmbGFnIHw9IFJYX0ZMQUdfODAyMztcbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKGFyLVx1MDAzZWh3LCBwdWJzdGEsIG1zZHUsIG5hcGkpO1xuJiM0MztcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVx1MDAzZWh3LCBwdWJzdGEgPyBcdTAwMjZwdWJzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIG1zZHUsIG5hcGkpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhdGgxMWtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXG5pbmRleCA3ZDViZTc3YjA4MWY4Li4xZmFmMTg5NmQwYWIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xuQEAgLTUwMyw4ICYjNDM7NTAzLDYgQEAgdm9pZCBhdGgxMmtfZHBfbW9uX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZSAqaGUgPSBOVUxMO1xuIFxuLVx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAwO1xuLVxuIFx0aWYgKChzdGF0dXMtXHUwMDNlZW5jb2RpbmcgPT0gUlhfRU5DX0hFKSBcdTAwMjZcdTAwMjYgIShzdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR19SQURJT1RBUF9IRSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgIShzdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR19TS0lQX01PTklUT1IpKSB7XG4gXHRcdGhlID0gc2tiX3B1c2gobXNkdSwgc2l6ZW9mKGtub3duKSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG5pbmRleCA4ZmEwZTkwYjQ1MzE2Li44NDdhZDI4ZmQzMGIyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbkBAIC0xMzc1LDYgJiM0MzsxMzc1LDcgQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcdHN0cnVjdCBhdGgxMmtfZHAgKmRwID0gZHBfcGRldi1cdTAwM2VkcDtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhID0gTlVMTDtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcjtcbiBcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gcnhfaW5mby1cdTAwM2VyeF9zdGF0dXM7XG5AQCAtMTM4NCw5ICYjNDM7MTM4NSwxOSBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y1xuIFxuIFx0cHVic3RhID0gcGVlciA/IHBlZXItXHUwMDNlc3RhIDogTlVMTDtcbiBcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMDtcbi1cdGlmIChwdWJzdGEgXHUwMDI2XHUwMDI2IHB1YnN0YS1cdTAwM2V2YWxpZF9saW5rcylcbi1cdFx0YXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGRwLVx1MDAzZWh3X3BhcmFtcywgcGVlciwgcnhjYiwgc3RhdHVzKTtcbiYjNDM7XHRpZiAocHVic3RhKSB7XG4mIzQzO1x0XHRpZiAocHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4mIzQzO1x0XHRcdHU4IGxpbmtfaWQgPVxuJiM0MztcdFx0XHRcdGF0aDEya19od19nZXRfcnhfbGlua19pZChkcC1cdTAwM2Vod19wYXJhbXMsIHBlZXIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IHJ4Y2IsIHN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGlua19pZCBcdTAwM2UgMClcbiYjNDM7XHRcdFx0XHRsaW5rX3B1YnN0YSA9XG4mIzQzO1x0XHRcdFx0XHRyY3VfZGVyZWZlcmVuY2UocHVic3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bGlua19wdWJzdGEgPSBcdTAwMjZwdWJzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXG4gXHRhdGgxMmtfZGJnKGRwLVx1MDAzZWFiLCBBVEgxMktfREJHX0RBVEEsXG4gXHRcdCAgIFwmIzM0O3J4IHNrYiAlcCBsZW4gJXUgcGVlciAlcE0gJWQgJXMgc24gJXUgJXMlcyVzJXMlcyVzJXMlcyVzJXMgcmF0ZV9pZHggJXUgdmh0X25zcyAldSBmcmVxICV1IGJhbmQgJXUgZmxhZyAweCV4IGZjcy1lcnIgJWkgbWljLWVyciAlaSBhbXNkdS1tb3JlICVpXFxuXCYjMzQ7LFxuQEAgLTE0MjIsNyAmIzQzOzE0MzMsOCBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y1xuIFxuIFx0LyogVE9ETzogdHJhY2UgcnggcGFja2V0ICovXG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgcHVic3RhLCBtc2R1LCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsXG4mIzQzO1x0XHRcdCAgbmFwaSk7XG4gfVxuIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXG5pbmRleCA0OWNmZDVkZmM3MGE2Li4yNjhmMGE4ZmQ0NmRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmhcbkBAIC0yNDgsOSAmIzQzOzI0OCw5IEBAIHN0cnVjdCBhdGgxMmtfaHdfb3BzIHtcbiBcdGJvb2wgKCpkcF9zcm5nX2lzX3R4X2NvbXBfcmluZykoaW50IHJpbmdfbnVtKTtcbiBcdGJvb2wgKCppc19mcmFtZV9saW5rX2Fnbm9zdGljKShzdHJ1Y3QgYXRoMTJrX2xpbmtfdmlmICphcnZpZixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQpO1xuLVx0dm9pZCAoKnNldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xuJiM0MztcdGludCAoKmdldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xuIH07XG4gXG4gc3RhdGljIGlubGluZVxuQEAgLTI4MSwxMyAmIzQzOzI4MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfbWFjX2lkX3RvX3NybmdfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGgxMmtfaHdfc2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGF0aDEya19od19nZXRfcnhfbGlua19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cylcbiB7XG4tXHRpZiAoaHctXHUwMDNlaHdfb3BzLVx1MDAzZXNldF9yeF9saW5rX2lkKVxuLVx0XHRody1cdTAwM2Vod19vcHMtXHUwMDNlc2V0X3J4X2xpbmtfaWQoZHBfcGVlciwgcnhjYiwgc3RhdHVzKTtcbiYjNDM7XHRpZiAoaHctXHUwMDNlaHdfb3BzLVx1MDAzZWdldF9yeF9saW5rX2lkKVxuJiM0MztcdFx0cmV0dXJuIGh3LVx1MDAzZWh3X29wcy1cdTAwM2VnZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLTE7XG4gfVxuIFxuIHN0cnVjdCBhdGgxMmtfZndfaWUge1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuaW5kZXggOTVkODdkZDY3ODcyZi4uOGI3MjJlZTBhZDhmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXG5AQCAtMjMxNywxNyAmIzQzOzIzMTcsMTYgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRyZXR1cm4gdGx2X3RhZyA9PSBIQUxfUlhfTVBEVV9TVEFSVDtcbiB9XG4gXG4tdm9pZFxuLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiYjNDM7aW50XG4mIzQzO2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuLVx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAxO1xuLVx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBkcF9wZWVyLVx1MDAzZWh3X2xpbmtzW3J4Y2ItXHUwMDNlaHdfbGlua19pZF07XG4mIzQzO1x0cmV0dXJuIGRwX3BlZXItXHUwMDNlaHdfbGlua3NbcnhjYi1cdTAwM2Vod19saW5rX2lkXTtcbiB9XG4gXG4tdm9pZFxuLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiYjNDM7aW50XG4mIzQzO2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4ge1xuQEAgLTIzNDEsMTAgJiM0MzsyMzQwLDkgQEAgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuIFx0bGlua3NfbWFwID0gUkVBRF9PTkNFKGRwX3BlZXItXHUwMDNlbGlua19wZWVyc19tYXApO1xuIFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZsaW5rc19tYXAsIEFUSDEyS19OVU1fTUFYX0xJTktTKSB7XG4gXHRcdGxpbmtfcGVlciA9IHJjdV9kZXJlZmVyZW5jZShkcF9wZWVyLVx1MDAzZWxpbmtfcGVlcnNbaV0pO1xuLVx0XHRpZiAobGlua19wZWVyIFx1MDAyNlx1MDAyNiBsaW5rX3BlZXItXHUwMDNlcGVlcl9pZCA9PSByeGNiLVx1MDAzZXBlZXJfaWQpIHtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX3BlZXItXHUwMDNlbGlua19pZDtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbiYjNDM7XHRcdGlmIChsaW5rX3BlZXIgXHUwMDI2XHUwMDI2IGxpbmtfcGVlci1cdTAwM2VwZWVyX2lkID09IHJ4Y2ItXHUwMDNlcGVlcl9pZClcbiYjNDM7XHRcdFx0cmV0dXJuIGxpbmtfcGVlci1cdTAwM2VsaW5rX2lkO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLTE7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaFxuaW5kZXggMWQzYTQ3ODhhMmRkOS4uZDY4NDg5ZmY3YjAzNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXG5AQCAtNTcsMTAgJiM0Mzs1NywxMCBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYixcbiBcdFx0XHRcdCAgc3RydWN0IGhhbF9yeF9kZXNjICpyeF9kZXNjKTtcbiBpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X3RpZF9kZWxldGVfaGFuZGxlcihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBhdGgxMmtfZHBfcnhfdGlkX3J4cSAqcnhfdGlkKTtcbi12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbi12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiYjNDM7aW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiYjNDM7aW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbmluZGV4IDRjMTExOWVkY2FlZGMuLjNjZDM1MTQ2NDI5NmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuY1xuQEAgLTE1OCw3ICYjNDM7MTU4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjbjkyNzRfb3BzID0ge1xuIFx0LmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3FjbjkyNzQsXG4gXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3JpbmdfcWNuOTI3NCxcbiBcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfcWNuOTI3NCxcbi1cdC5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0LFxuJiM0MztcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0LFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0ge1xuQEAgLTE2OSw3ICYjNDM7MTY5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHdjbjc4NTBfb3BzID0ge1xuIFx0LmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3djbjc4NTAsXG4gXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCxcbiBcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCxcbi1cdC5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwLFxuJiM0MztcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0ge1xuQEAgLTE4MCw3ICYjNDM7MTgwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0ge1xuIFx0LmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3djbjc4NTAsXG4gXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCxcbiBcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfd2NuNzg1MCxcbi1cdC5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwLFxuJiM0MztcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxuIH07XG4gXG4gI2RlZmluZSBBVEgxMktfVFhfUklOR19NQVNLXzAgMHgxXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcbmluZGV4IDJiNzA3ZmZjMWEyMGYuLjVkNjJjNGM4NjFiYjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5AQCAtNzI2MCw3ICYjNDM7NzI2MCw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgYXRoMTJrX3dtaV9tZ210X3J4X2FyZyByeF9ldiA9IHt9O1xuIFx0c3RydWN0IGF0aDEyayAqYXI7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhID0gTlVMTDtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbiBcdGJvb2wgaXNfNGFkZHJfbnVsbF9wa3Q7XG5AQCAtNzM2MiwxMSAmIzQzOzczNjEsNiBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfbWdtdF9yeF9ldmVudChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRnb3RvIGV4aXQ7XG4gXHRcdH1cbi1cdFx0cHVic3RhID0gcGVlci1cdTAwM2VzdGE7XG4tXHRcdGlmIChwdWJzdGEgXHUwMDI2XHUwMDI2IHB1YnN0YS1cdTAwM2V2YWxpZF9saW5rcykge1xuLVx0XHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMTtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IHBlZXItXHUwMDNlbGlua19pZDtcbi1cdFx0fVxuIFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZkcC1cdTAwM2VkcF9sb2NrKTtcbiBcdFx0Z290byBzZW5kX3J4O1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcbmluZGV4IDk2MTAyZDJhZjJjZjkuLmM0NWM0NzMzNzUwOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcbkBAIC03LDcgJiM0Mzs3LDggQEBcbiAjaW5jbHVkZSBcJiMzNDtoY21kLmhcJiMzNDtcbiBcbiBzdGF0aWMgdm9pZFxuLWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0Mztpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBpd2xfbWxkX2JhaWRfZGF0YSAqYmFpZF9kYXRhLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgaXdsX21sZF9yZW9yZGVyX2J1ZmZlciAqcmVvcmRlcl9idWYsXG5AQCAtMzIsNyAmIzQzOzMzLDcgQEAgaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXHRcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShza2JfbGlzdCkpKSB7XG4gXHRcdFx0aXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYixcbiBcdFx0XHRcdFx0XHRcdHJlb3JkZXJfYnVmLVx1MDAzZXF1ZXVlLFxuLVx0XHRcdFx0XHRcdFx0c3RhKTtcbiYjNDM7XHRcdFx0XHRcdFx0XHRsaW5rX3N0YSk7XG4gXHRcdFx0cmVvcmRlcl9idWYtXHUwMDNlbnVtX3N0b3JlZC0tO1xuIFx0XHR9XG4gXHR9XG5AQCAtNzQsNyAmIzQzOzc1LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF9yZWxlYXNlX2ZyYW1lc19mcm9tX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXG4gXHRyZW9yZGVyX2J1ZiA9IFx1MDAyNmJhX2RhdGEtXHUwMDNlcmVvcmRlcl9idWZbcXVldWVdO1xuIFxuLVx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtXHUwMDNlc3RhLCBuYXBpLCBiYV9kYXRhLFxuJiM0MztcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYV9kYXRhLFxuIFx0XHRcdFx0ICAgICAgIHJlb3JkZXJfYnVmLCBuc3NuKTtcbiBvdXRfdW5sb2NrOlxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG5AQCAtMTgwLDcgJiM0MzsxODEsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSxcbiBcdHJlb3JkZXJfYnVmID0gXHUwMDI2YmFfZGF0YS1cdTAwM2VyZW9yZGVyX2J1ZltxdWV1ZV07XG4gXG4gXHQvKiByZWxlYXNlIGFsbCBmcmFtZXMgdGhhdCBhcmUgaW4gdGhlIHJlb3JkZXIgYnVmZmVyIHRvIHRoZSBzdGFjayAqL1xuLVx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtXHUwMDNlc3RhLCBOVUxMLFxuJiM0MztcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBOVUxMLFxuIFx0XHRcdFx0ICAgICAgIGJhX2RhdGEsIHJlb3JkZXJfYnVmLFxuIFx0XHRcdFx0ICAgICAgIGllZWU4MDIxMV9zbl9hZGQocmVvcmRlcl9idWYtXHUwMDNlaGVhZF9zbixcbiBcdFx0XHRcdFx0XHRcdGJhX2RhdGEtXHUwMDNlYnVmX3NpemUpKTtcbkBAIC0xOTMsNyAmIzQzOzE5NCw3IEBAIHZvaWQgaXdsX21sZF9kZWxfYmEoc3RydWN0IGl3bF9tbGQgKm1sZCwgaW50IHF1ZXVlLFxuICAqL1xuIGVudW0gaXdsX21sZF9yZW9yZGVyX3Jlc3VsdFxuIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tXHRcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiYjNDM7XHRcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG5AQCAtMjI4LDEyICYjNDM7MjI5LDEyIEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xuIFxuIFx0Lyogbm8gc3RhIHlldCAqL1xuLVx0aWYgKElXTF9GV19DSEVDSyhtbGQsICFzdGEsXG4mIzQzO1x0aWYgKElXTF9GV19DSEVDSyhtbGQsICFsaW5rX3N0YSxcbiBcdFx0XHQgXCYjMzQ7R290IHZhbGlkIEJBSUQgd2l0aG91dCBhIHZhbGlkIHN0YXRpb24gYXNzaWduZWQgLSAlZFxcblwmIzM0OyxcbiBcdFx0XHQgYmFpZCkpXG4gXHRcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbiYjNDM7XHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cdTAwM2VzdGEpO1xuIFxuIFx0Lyogbm90IGEgZGF0YSBwYWNrZXQgKi9cbiBcdGlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSB8fFxuQEAgLTMyNCw3ICYjNDM7MzI1LDcgQEAgaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdCAqIHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGUgZnJhbWUgcmVsZWFzZSBub3RpZmljYXRpb24gYXJyaXZlcy5cbiBcdCAqL1xuIFx0aWYgKCFhbXNkdSB8fCBsYXN0X3N1YmZyYW1lKVxuLVx0XHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBzdGEsIG5hcGksIGJhaWRfZGF0YSxcbiYjNDM7XHRcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYWlkX2RhdGEsXG4gXHRcdFx0XHRcdCAgICAgICBidWZmZXIsIG5zc24pO1xuIFx0ZWxzZSBpZiAoYnVmZmVyLVx1MDAzZW51bV9zdG9yZWQgPT0gMSlcbiBcdFx0YnVmZmVyLVx1MDAzZWhlYWRfc24gPSBuc3NuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcbmluZGV4IDY1MWM4MGQxYzdjZGEuLmM2Y2Q1ZmEyMTliZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcbkBAIC0xLDYgJiM0MzsxLDYgQEBcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UgKi9cbiAvKlxuLSAqIENvcHlyaWdodCAoQykgMjAyNCBJbnRlbCBDb3Jwb3JhdGlvblxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQsIDIwMjYgSW50ZWwgQ29ycG9yYXRpb25cbiAgKi9cbiAjaWZuZGVmIF9faXdsX2FnZ19oX19cbiAjZGVmaW5lIF9faXdsX2FnZ19oX19cbkBAIC0xMDYsNyAmIzQzOzEwNiw3IEBAIGludCBpd2xfbWxkX2FtcGR1X3J4X3N0b3Aoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcbiBlbnVtIGl3bF9tbGRfcmVvcmRlcl9yZXN1bHRcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLVx0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4mIzQzO1x0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYyk7XG4gXG4gdm9pZCBpd2xfbWxkX2hhbmRsZV9mcmFtZV9yZWxlYXNlX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmNcbmluZGV4IDI2OTQzOWQ3ODlmNDYuLjAyYmRmNmNjYmNkYzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXG5AQCAtNDcsNyAmIzQzOzQ3LDggQEAgaXdsX21sZF9maWxsX3BoeV9kYXRhX2Zyb21fbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4tXHRcdFx0XHQgICBpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpXG4mIzQzO1x0XHRcdFx0ICAgaW50IHF1ZXVlLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYl9tYWNfaGVhZGVyKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbkBAIC03MSwxMyAmIzQzOzcyLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBpZiB3ZSBhcmUgaGVyZSAtIHRoaXMgZm9yIHN1cmUgaXMgZWl0aGVyIENDTVAgb3IgR0NNUCAqL1xuLVx0aWYgKCFzdGEpIHtcbiYjNDM7XHRpZiAoIWxpbmtfc3RhKSB7XG4gXHRcdElXTF9ERUJVR19EUk9QKG1sZCxcbiBcdFx0XHQgICAgICAgXCYjMzQ7ZXhwZWN0ZWQgaHctZGVjcnlwdGVkIHVuaWNhc3QgZnJhbWUgZm9yIHN0YXRpb25cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xuJiM0MztcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVx1MDAzZXN0YSk7XG4gXG4gXHRleHRpdiA9ICh1OCAqKWhkciAmIzQzOyBpZWVlODAyMTFfaGRybGVuKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKTtcbiBcdGtleWlkeCA9IGV4dGl2WzNdIFx1MDAzZVx1MDAzZSA2O1xuQEAgLTExOSwxNyAmIzQzOzEyMCwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXG4ge1xuIFx0S1VOSVRfU1RBVElDX1NUVUJfUkVESVJFQ1QoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSxcbi1cdFx0XHRcdCAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTtcbiYjNDM7XHRcdFx0XHQgICBtbGQsIG5hcGksIHNrYiwgcXVldWUsIGxpbmtfc3RhKTtcbiBcbi1cdGlmICh1bmxpa2VseShpd2xfbWxkX2NoZWNrX3BuKG1sZCwgc2tiLCBxdWV1ZSwgc3RhKSkpIHtcbiYjNDM7XHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIGxpbmtfc3RhKSkpIHtcbiBcdFx0a2ZyZWVfc2tiKHNrYik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xuJiM0MztcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cdTAwM2VodywgbGlua19zdGEsIHNrYiwgbmFwaSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfSUZfSVdMV0lGSV9LVU5JVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKTtcbiBcbkBAIC0xNzI4LDcgJiM0MzsxNzI5LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF91cGRhdGVfbGFzdF9yeF90aW1lc3RhbXAoc3RydWN0IGl3bF9tbGQgKm1sZCwgdTggYmFpZClcbiAgKiBTZXRzICpkcm9wIHRvIHRydWUgaWYgdGhlIHBhY2tldCBzaG91bGQgYmUgZHJvcHBlZC5cbiAgKiBSZXR1cm5zIHRoZSBzdGF0aW9uIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdGEgKlxuJiM0MztzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqXG4gaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxuIFx0XHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICAgIGNvbnN0IHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MsXG5AQCAtMTc2NCwxMSAmIzQzOzE3NjUsNiBAQCBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXG4gXHRyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcbi1cdGlmIChsaW5rX3N0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkO1xuLVx0fVxuLVxuIFx0LyogZmlsbCBjaGVja3N1bSAqL1xuIFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBwa3QtXHUwMDNlbGVuX25fZmxhZ3MgXHUwMDI2IGNwdV90b19sZTMyKEZIX1JTQ1NSX1JQQV9FTikpIHtcbkBAIC0xODAzLDEwICYjNDM7MTc5OSwxMCBAQCBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXHRcdFx0XHRcdFx0XHQgICAgcXVldWUpO1xuIFx0fVxuIFxuLVx0cmV0dXJuIHN0YTtcbiYjNDM7XHRyZXR1cm4gbGlua19zdGE7XG4gfVxuIFxuLXN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiYjNDM7c3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLFxuIFx0XHRcdFx0dTMyIG1wZHVfc3RhdHVzLFxuQEAgLTE4MjAsNyAmIzQzOzE4MTYsNiBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXk7XG4gXHRjb25zdCB1OCAqZnJhbWUgPSAodm9pZCAqKWhkcjtcbiBcdGNvbnN0IHU4ICptbWllO1xuLVx0dTggbGlua19pZDtcbiBcbiBcdGlmICgobXBkdV9zdGF0dXMgXHUwMDI2IElXTF9SWF9NUERVX1NUQVRVU19TRUNfTUFTSykgPT1cbiBcdCAgICAgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19OT05FKVxuQEAgLTE4MzYsMTAgJiM0MzsxODMxLDEwIEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdGlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKCFzdGEpXG4mIzQzO1x0aWYgKCFsaW5rX3N0YSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbiYjNDM7XHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cdTAwM2VzdGEpO1xuIFx0bWxkX3ZpZiA9IGl3bF9tbGRfdmlmX2Zyb21fbWFjODAyMTEobWxkX3N0YS1cdTAwM2V2aWYpO1xuIFxuIFx0Lyoga2V5IG1pc21hdGNoIC0gd2lsbCBhbHNvIHJlcG9ydCAhTUlDX09LIGJ1dCB3ZSBzaG91bGRuJiMzOTt0IGNvdW50IGl0ICovXG5AQCAtMTg1Myw4ICYjNDM7MTg0OCw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRsaW5rX2lkID0gcnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPyByeF9zdGF0dXMtXHUwMDNlbGlua19pZCA6IDA7XG4tXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4mIzQzO1x0bGluayA9IHJjdV9kZXJlZmVyZW5jZShtbGRfdmlmLVx1MDAzZWxpbmtbbGlua19zdGEtXHUwMDNlbGlua19pZF0pO1xuIFx0aWYgKFdBUk5fT05fT05DRSghbGluaykpXG4gXHRcdHJldHVybiAtMTtcbiBcbkBAIC0xOTA1LDcgJiM0MzsxODk5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuIH1cbiBcbiBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYywgaW50IHF1ZXVlLFxuQEAgLTE5MTUsNyAmIzQzOzE5MDksNyBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXG4gXHRpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgICFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpKVxuLVx0XHRyZXR1cm4gaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLFxuJiM0MztcdFx0cmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLFxuIFx0XHRcdFx0XHQgICAgbGUxNl90b19jcHUoZGVzYy1cdTAwM2VtcGR1X2xlbikpO1xuIFxuIFx0aWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbkBAIC0yMDIzLDcgJiM0MzsyMDE3LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0c3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IHJ4Yl9hZGRyKHJ4Yik7XG4gXHRzdHJ1Y3QgaXdsX21sZF9yeF9waHlfZGF0YSBwaHlfZGF0YSA9IHt9O1xuIFx0c3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKm1wZHVfZGVzYyA9ICh2b2lkICopcGt0LVx1MDAzZWRhdGE7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhO1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzaXplX3QgbXBkdV9kZXNjX3NpemUgPSBzaXplb2YoKm1wZHVfZGVzYyk7XG5AQCAtMjA4Niw3ICYjNDM7MjA4MCw4IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBcdHJjdV9yZWFkX2xvY2soKTtcbiBcbi1cdHN0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLCBcdTAwMjZkcm9wKTtcbiYjNDM7XHRsaW5rX3N0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZkcm9wKTtcbiBcdGlmIChkcm9wKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG5AQCAtMjEyNyw3ICYjNDM7MjEyMiw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcbiBcdGl3bF9tbGRfcnhfZmlsbF9zdGF0dXMobWxkLCBsaW5rX2lkLCBoZHIsIHNrYiwgXHUwMDI2cGh5X2RhdGEpO1xuIFxuLVx0aWYgKGl3bF9tbGRfcnhfY3J5cHRvKG1sZCwgc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSxcbiYjNDM7XHRpZiAoaXdsX21sZF9yeF9jcnlwdG8obWxkLCBsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsXG4gXHRcdFx0ICAgICAgbGUzMl90b19jcHUocGt0LVx1MDAzZWxlbl9uX2ZsYWdzKSwgXHUwMDI2Y3J5cHRvX2xlbikpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbkBAIC0yMTQwLDcgJiM0MzsyMTM1LDggQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0aWYgKGl3bF9tbGRfdGltZV9zeW5jX2ZyYW1lKG1sZCwgc2tiLCBoZHItXHUwMDNlYWRkcjIpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIHN0YSwgc2tiLCBtcGR1X2Rlc2MpO1xuJiM0MztcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIGxpbmtfc3RhLCBza2IsXG4mIzQzO1x0XHRcdFx0ICAgICAgbXBkdV9kZXNjKTtcbiBcdHN3aXRjaCAocmVvcmRlcl9yZXMpIHtcbiBcdGNhc2UgSVdMX01MRF9QQVNTX1NLQjpcbiBcdFx0YnJlYWs7XG5AQCAtMjE1Myw3ICYjNDM7MjE0OSw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0Z290byBkcm9wO1xuIFx0fVxuIFxuLVx0aXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIHN0YSk7XG4mIzQzO1x0aXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIGxpbmtfc3RhKTtcbiBcbiBcdGdvdG8gb3V0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oXG5pbmRleCA1NzNiODljM2M5YzYxLi5iMDhjNWFkZTNkYjhmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuQEAgLTY5LDcgJiM0Mzs2OSw3IEBAIHZvaWQgaXdsX21sZF9oYW5kbGVfcnNjX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTtcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKTtcbiBcbiB2b2lkIGl3bF9tbGRfaGFuZGxlX3BoeV9haXJfc25pZmZlcl9ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXG5pbmRleCAyOWIwMjQ4Y2VjM2RmLi5lOWVmZTI5OTZmMDcxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXG5AQCAtMiw3ICYjNDM7Miw3IEBAXG4gLypcbiAgKiBLVW5pdCB0ZXN0cyBmb3IgY2hhbm5lbCBoZWxwZXIgZnVuY3Rpb25zXG4gICpcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2t1bml0L3N0YXRpY19zdHViLmhcdTAwM2VcbkBAIC00NDEsNyAmIzQzOzQ0MSw3IEBAIHN0YXRpYyB2b2lkXG4gZmFrZV9pd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXG4ge1xuIFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZnX3JlbGVhc2VkX3NrYnMsIHNrYik7XG4gXHRnX251bV9yZWxlYXNlZF9za2JzJiM0MzsmIzQzOztcbkBAIC02MzAsNyAmIzQzOzYzMCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfcmVvcmRlcl9idWZmZXIoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0bXBkdV9kZXNjID0gc2V0dXBfbXBkdV9kZXNjKCk7XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTtcbiYjNDM7XHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaywgc2tiLFxuJiM0MztcdFx0XHRcdCAgICAgIG1wZHVfZGVzYyk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZW9yZGVyX3JlcywgcGFyYW0tXHUwMDNlZXhwZWN0ZWQucmVvcmRlcl9yZXMpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXG5pbmRleCBhYjFlYjJlYjBjM2NkLi44YzE5N2EwOTBjMmIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguY1xuQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcbiBcdFx0XHRcdGZyYWdsZW4sIHJ4Yi1cdTAwM2V0cnVlc2l6ZSk7XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcbmluZGV4IDdmMGI0ZjVkYWEyMTQuLjhjNDAwOWQzYTAwY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuY1xuQEAgLTEsNiAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZVxuIC8qXG4tICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTgtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxuJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkhcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBJbnRlbCBEZXV0c2NobGFuZCBHbWJIXG4gICovXG5AQCAtMjQzLDcgJiM0MzsyNDMsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xuJiM0MztcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2Vodywgc3RhID8gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpd2xfbXZtX3VzZWRfYXZlcmFnZV9lbmVyZ3koc3RydWN0IGl3bF9tdm0gKm12bSxcbkBAIC0yNTI4LDcgJiM0MzsyNTI4LDcgQEAgdm9pZCBpd2xfbXZtX3J4X21vbml0b3Jfbm9fZGF0YShzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHR9XG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbiYjNDM7XHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcbmluZGV4IGFiYmU2NWNiY2Q4OWUuLjNkYTA2YTU1OTEzZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuY1xuQEAgLTEyNTUsNyAmIzQzOzEyNTUsNyBAQCBFWFBPUlRfU1lNQk9MKG10NzZfcnhfc2lnbmFsKTtcbiBzdGF0aWMgdm9pZFxuIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0c3RydWN0IGllZWU4MDIxMV9odyAqKmh3LFxuLVx0XHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqKnN0YSlcbiYjNDM7XHRcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKipsaW5rX3N0YSlcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gbXQ3Nl9za2JfZ2V0X2hkcihza2IpO1xuQEAgLTEzMDIsMTEgJiM0MzsxMzAyLDE1IEBAIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICAgICBzaXplb2YobXN0YXQuY2hhaW5fc2lnbmFsKSk7XG4gXG4gXHRpZiAobXN0YXQud2NpZCkge1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IG1zdGF0LndjaWQtXHUwMDNlbGlua192YWxpZDtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBtc3RhdC53Y2lkLVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gd2NpZF90b19zdGEobXN0YXQud2NpZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKG1zdGF0LndjaWQtXHUwMDNlbGlua192YWxpZClcbiYjNDM7XHRcdFx0Kmxpbmtfc3RhID1cbiYjNDM7XHRcdFx0XHRyY3VfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxpbmtbbXN0YXQud2NpZC1cdTAwM2VsaW5rX2lkXSk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdCpsaW5rX3N0YSA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rO1xuIFx0fVxuIFxuLVx0KnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpO1xuIFx0Kmh3ID0gbXQ3Nl9waHlfaHcoZGV2LCBtc3RhdC5waHlfaWR4KTtcbiB9XG4gXG5AQCAtMTUzMCw3ICYjNDM7MTUzNCw3IEBAIG10NzZfY2hlY2tfc3RhKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxuIFx0XHQgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4ge1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDtcbiBcdExJU1RfSEVBRChsaXN0KTtcbkBAIC0xNTQxLDggJiM0MzsxNTQ1LDggQEAgdm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsXG4gXG4gXHRcdG10NzZfY2hlY2tfY2NtcF9wbihza2IpO1xuIFx0XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNlZnJhZ19saXN0ID0gTlVMTDtcbi1cdFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcdTAwMjZodywgXHUwMDI2c3RhKTtcbi1cdFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIHN0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiYjNDM7XHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNmxpbmtfc3RhKTtcbiYjNDM7XHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiBcbiBcdFx0Lyogc3Vic2VxdWVudCBhbXNkdSBmcmFtZXMgKi9cbiBcdFx0d2hpbGUgKG5za2IpIHtcbkBAIC0xNTUwLDggJiM0MzsxNTU0LDggQEAgdm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsXG4gXHRcdFx0bnNrYiA9IG5za2ItXHUwMDNlbmV4dDtcbiBcdFx0XHRza2ItXHUwMDNlbmV4dCA9IE5VTEw7XG4gXG4tXHRcdFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcdTAwMjZodywgXHUwMDI2c3RhKTtcbi1cdFx0XHRpZWVlODAyMTFfcnhfbGlzdChodywgc3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuJiM0MztcdFx0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZsaW5rX3N0YSk7XG4mIzQzO1x0XHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiBcdFx0fVxuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXJ4X2xvY2spO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcbmluZGV4IDM5N2ViYmZjYWMwOWEuLjQ1NGQ4NzZhZWI4ODYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcbkBAIC0zMDczLDEwICYjNDM7MzA3Myw4IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG4gXHRzdHJ1Y3QgcnR3ODlfdmlmICpydHd2aWYgPSB2aWZfdG9fcnR3dmlmKHZpZik7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfZGVzY19pbmZvICpkZXNjX2luZm8gPSBpdGVyX2RhdGEtXHUwMDNlZGVzY19pbmZvO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGl0ZXJfZGF0YS1cdTAwM2Vza2I7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVx1MDAzZWRhdGE7XG4gXHRzdHJ1Y3QgcnR3ODlfcnhfcGh5X3BwZHUgKnBoeV9wcGR1ID0gaXRlcl9kYXRhLVx1MDAzZXBoeV9wcGR1O1xuLVx0Ym9vbCBpc19tbGQgPSBpZWVlODAyMTFfdmlmX2lzX21sZCh2aWYpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmY7XG4gXHRzdHJ1Y3QgcnR3ODlfdmlmX2xpbmsgKnJ0d3ZpZl9saW5rO1xuIFx0Y29uc3QgdTggKmJzc2lkID0gaXRlcl9kYXRhLVx1MDAzZWJzc2lkO1xuQEAgLTMxMTAsMTEgJiM0MzszMTA4LDYgQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcbiBcdGlmICghZXRoZXJfYWRkcl9lcXVhbCh0YXJnZXRfYnNzaWQsIGJzc2lkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoaXNfbWxkKSB7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBydHd2aWZfbGluay1cdTAwM2VsaW5rX2lkO1xuLVx0fVxuLVxuIFx0YmIgPSBydHc4OV9nZXRfYmJfY3R4KHJ0d2RldiwgcnR3dmlmX2xpbmstXHUwMDNlcGh5X2lkeCk7XG4gXHRwa3Rfc3RhdCA9IFx1MDAyNmJiLVx1MDAzZWN1cl9wa3Rfc3RhdDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5pbmRleCAwMmI2ZDgxY2NjZDExLi5hMGQ1MTljZDljNGZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG5AQCAtMTg4MCw5ICYjNDM7MTg4MCw2IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3J4KHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxuIFx0XHRcdFx0c3AtXHUwMDNlYWN0aXZlX2xpbmtzX3J4IFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRzcC1cdTAwM2VhY3RpdmVfbGlua3NfcnggfD0gQklUKGxpbmtfaWQpO1xuLVxuLVx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IDk3YzE2ZDRmZjEyNzEuLjQzNjQ3OGRhZjU1OTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtNDAwOSw2ICYjNDM7NDAwOSw3IEBAIHN0cnVjdCBjZmc4MDIxMV91cGRhdGVfZnRfaWVzX3BhcmFtcyB7XG4gICogQGxpbmtfaWQ6IGZvciBNTE8sIHRoZSBsaW5rIElEIHRvIHRyYW5zbWl0IG9uLCAtMSBpZiBub3QgZ2l2ZW47IG5vdGVcbiAgKlx0dGhhdCB0aGUgbGluayBJRCBpc24mIzM5O3QgdmFsaWRhdGVkIChtdWNoKSwgaXQmIzM5O3MgaW4gcmFuZ2UgYnV0IHRoZVxuICAqXHRsaW5rIG1pZ2h0IG5vdCBleGlzdCAob3IgYmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIgU1RBKVxuJiM0MzsgKiBAbm9fc3RhOiBzZXQgaWYgdGhlIGZyYW1lIHNob3VsZCBub3QgYmUgdHJhbnNtaXR0ZWQgdXNpbmcgYW4gZXhpc3RpbmcgU1RBXG4gICovXG4gc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjtcbkBAIC00MDIxLDYgJiM0Mzs0MDIyLDcgQEAgc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcbiBcdGludCBuX2NzYV9vZmZzZXRzO1xuIFx0Y29uc3QgdTE2ICpjc2Ffb2Zmc2V0cztcbiBcdGludCBsaW5rX2lkO1xuJiM0MztcdGJvb2wgbm9fc3RhO1xuIH07XG4gXG4gLyoqXG5AQCAtOTUwMSw2ICYjNDM7OTUwMyw3IEBAIHZvaWQgY2ZnODAyMTFfY29ubl9mYWlsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLFxuICAqIEBmbGFnczogZmxhZ3MsIGFzIGRlZmluZWQgaW4gXHUwMDI2ZW51bSBubDgwMjExX3J4bWdtdF9mbGFnc1xuICAqIEByeF90c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBmcmFtZSBSWCBpbiBuYW5vc2Vjb25kc1xuICAqIEBhY2tfdHN0YW1wOiBIYXJkd2FyZSB0aW1lc3RhbXAgb2YgYWNrIFRYIGluIG5hbm9zZWNvbmRzXG4mIzQzOyAqIEBub19zdGE6IHNldCBpZiBubyBzdGF0aW9uIGlzIGtub3duIGZvciB0aGUgZnJhbWUgKHJlbGV2YW50IGZvciBNTEQpXG4gICovXG4gc3RydWN0IGNmZzgwMjExX3J4X2luZm8ge1xuIFx0aW50IGZyZXE7XG5AQCAtOTUxMiw2ICYjNDM7OTUxNSw3IEBAIHN0cnVjdCBjZmc4MDIxMV9yeF9pbmZvIHtcbiBcdHUzMiBmbGFncztcbiBcdHU2NCByeF90c3RhbXA7XG4gXHR1NjQgYWNrX3RzdGFtcDtcbiYjNDM7XHRib29sIG5vX3N0YTtcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5pbmRleCA5ZDFmYWM2ZTgwODI5Li43YWFlNzI4ZTk2ZDg0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxuQEAgLTE3NzAsMTAgJiM0MzsxNzcwLDkgQEAgZW51bSBtYWM4MDIxMV9yeF9lbmNvZGluZyB7XG4gICogQGFtcGR1X3JlZmVyZW5jZTogQS1NUERVIHJlZmVyZW5jZSBudW1iZXIsIG11c3QgYmUgYSBkaWZmZXJlbnQgdmFsdWUgZm9yXG4gICpcdGVhY2ggQS1NUERVIGJ1dCB0aGUgc2FtZSBmb3IgZWFjaCBzdWJmcmFtZSB3aXRoaW4gb25lIEEtTVBEVVxuICAqIEB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU6IHJhZGlvdGFwIHR5cGUgb2YgdGhlIDAtbGVuZ3RoIFBTRFVcbi0gKiBAbGlua192YWxpZDogaWYgdGhlIGxpbmsgd2hpY2ggaXMgaWRlbnRpZmllZCBieSBAbGlua19pZCBpcyB2YWxpZC4gVGhpcyBmbGFnXG4tICpcdGlzIHNldCBvbmx5IHdoZW4gY29ubmVjdGlvbiBpcyBNTE8uXG4tICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBUaGlzIGlzIHVzZWQgYWxvbmcgd2l0aFxuLSAqXHRAbGlua192YWxpZC5cbiYjNDM7ICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBTZXQgYW5kIHVzZWQgYnlcbiYjNDM7ICpcdG1hYzgwMjExIGludGVybmFsbHksIGl0IHVzZXMgQGZyZXEgc2V0IGJ5IHRoZSBkcml2ZXIgdG8gaWRlbnRpZnkgdGhlXG4mIzQzOyAqXHRjb3JyZWN0IGxpbmsgcGVyIHZpZi5cbiAgKi9cbiBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyB7XG4gXHR1NjQgbWFjdGltZTtcbkBAIC0xODEzLDcgJiM0MzsxODEyLDcgQEAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMge1xuIFx0dTggY2hhaW5zO1xuIFx0czggY2hhaW5fc2lnbmFsW0lFRUU4MDIxMV9NQVhfQ0hBSU5TXTtcbiBcdHU4IHplcm9fbGVuZ3RoX3BzZHVfdHlwZTtcbi1cdHU4IGxpbmtfdmFsaWQ6MSwgbGlua19pZDo0O1xuJiM0MztcdHU4IGxpbmtfaWQ6NDtcbiB9O1xuIFxuIHN0YXRpY19hc3NlcnQoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzKSBcdTAwM2M9IHNpemVvZl9maWVsZChzdHJ1Y3Qgc2tfYnVmZiwgY2IpKTtcbkBAIC01Mzg5LDE0ICYjNDM7NTM4OCwxOCBAQCB2b2lkIGllZWU4MDIxMV9yZXN0YXJ0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTtcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxuICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLlxuICAqXG4mIzQzOyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuJiM0MzsgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXG4mIzQzOyAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZCBhbmQgUkNVIHJlYWQgbG9ja1xuICAqXG4gICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uXG4tICogQHN0YTogdGhlIHN0YXRpb24gdGhlIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuJiM0MzsgKiBAbGlua19zdGE6IHRoZSBsaW5rIHN0YXRpb24gdGhlIGRhdGEgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4gICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGxcbiAgKiBAbGlzdDogdGhlIGRlc3RpbmF0aW9uIGxpc3RcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XG4gXG4gLyoqXG5AQCAtNTQxNCwxNCAmIzQzOzU0MTcsMTggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxuICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLlxuICAqXG4mIzQzOyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuJiM0MzsgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXG4mIzQzOyAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZC5cbiAgKlxuICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvblxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcbiYjNDM7ICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxuICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsXG4gICogQG5hcGk6IHRoZSBOQVBJIGNvbnRleHRcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuJiM0MztcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuaW5kZXggMDIwMzg3ZDc2NDEyMi4uNDY1M2Y4ZjI2ZWU3MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbkBAIC0zMTg1LDYgJiM0MzszMTg1LDExIEBAIGVudW0gbmw4MDIxMV9jb21tYW5kcyB7XG4gICpcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXG4gICpcdHNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLlxuICAqXG4mIzQzOyAqIEBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQTogVmFsaWQgZm9yIE5MODAyMTFfQ01EX0ZSQU1FIHRvIGRlbm90ZSB0aGF0XG4mIzQzOyAqXHR0aGUga2VybmVsIGhhZCBubyBzdGF0aW9uIGZvciBhIHJlY2VpdmVkIGZyYW1lIG9yIHNob3VsZCBub3QgdXNlIGFcbiYjNDM7ICpcdGtub3duIHN0YXRpb24gdG8gdHJhbnNtaXQgYSBmcmFtZS4gVGhpcyBpcyByZWxldmFudCB0byBrbm93IHdoZXRoZXJcbiYjNDM7ICpcdE1MRCBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcHBlbmVkIG9yIHRvIGRpc2FibGUgaXQgd2hlbiBzZW5kaW5nIGEgZnJhbWUuXG4mIzQzOyAqXG4gICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZVxuICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWRcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXG5AQCAtMzc4NSw2ICYjNDM7Mzc5MCw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7XG4gXG4gXHROTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUUyxcbiBcbiYjNDM7XHROTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQSxcbiYjNDM7XG4gXHQvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi9cbiBcbiBcdF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jXG5pbmRleCA0ODMzYjQ2NzcwYjYyLi5kZDhhMTFlZjZlNTJiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FnZy10eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmNcbkBAIC05OCw3ICYjNDM7OTgsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLFxuIFx0aWYgKHN0YS1cdTAwM2VzdGEuZGVmbGluay5oZV9jYXAuaGFzX2hlKVxuIFx0XHRpZWVlODAyMTFfYWRkX2FkZGJhZXh0KHNrYiwgMCwgYWdnX3NpemUpO1xuIFxuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XG4gfVxuIFxuIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcbkBAIC0xMjcsNyAmIzQzOzEyNyw3IEBAIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcbiBcbiBcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHxcbiBcdFx0XHRcdFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XG4gfVxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NlbmRfYmFyKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYXAuYyBiL25ldC9tYWM4MDIxMS9hcC5jXG5pbmRleCBlN2FjOTljNWEyMmViLi5mZTI1NTg5MWMzNWYwIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9hcC5jXG5AQCAtODIsOSAmIzQzOzgyLDYgQEAgaWVlZTgwMjExX3J4X2VtbF9vcF9tb2RlX25vdGlmKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0aWYgKCFpZnRfZXh0X2NhcGEpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpXG4tXHRcdHJldHVybjtcbi1cbiBcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlc2EpO1xuIFx0aWYgKCFzdGEpXG4gXHRcdHJldHVybjtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jXG5pbmRleCBlMWUxYjdmODJmM2ZlLi5jNWMyMTEzZmE0Zjc5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2h0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9odC5jXG5AQCAtNTQ1LDcgJiM0Mzs1NDUsNyBAQCBpbnQgaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhID0gSUVFRTgwMjExX1NUQVRVU19UWVBFX1NNUFMgfFxuIFx0XHRcdCAgICB1MTZfZW5jb2RlX2JpdHMoc3RhdHVzX2xpbmtfaWQgXHUwMDNjXHUwMDNjIDIgfCBzbXBzLFxuIFx0XHRcdFx0XHQgICAgSUVFRTgwMjExX1NUQVRVU19TVUJEQVRBX01BU0spO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgbGlua19pZCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuaW5kZXggNTc2MWU5NjIxNDkxNC4uMGQ4ZWIwNDI4ODdhOSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxuQEAgLTI0NjMsNyAmIzQzOzI0NjMsOCBAQCB2b2lkIGllZWU4MDIxMV94bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0XHQgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBza19idWZmICpza2IpO1xuIFxuIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0XHQgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4gXHRcdFx0XHQgZW51bSBubDgwMjExX2JhbmQgYmFuZCk7XG4gXG4gc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsXG5AQCAtMjQ4MywxOCAmIzQzOzI0ODQsMjAgQEAgaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHQgIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQpXG4ge1xuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHRpZCwgLTEsIGJhbmQpO1xuJiM0MztcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLFxuJiM0MztcdFx0XHRcdCAgICB0aWQsIC0xLCBiYW5kKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpO1xuJiM0MztcdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHQgIGludCB0aWQsIGludCBsaW5rX2lkKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXG4tXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCAtMSk7XG4mIzQzO1x0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5pbmRleCA0MzQ2MGE3MDVhNmJkLi5hMGIyMTRkYmI4YWY4IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jXG5AQCAtMTY3MywxMSAmIzQzOzE2NzMsOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZhY2VfcHJvY2Vzc19za2Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gXHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHRzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRcdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbi1cdFx0XHRlbHNlXG4tXHRcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3RhLVx1MDAzZWxpbmtbc3RhdHVzLVx1MDAzZWxpbmtfaWRdLFxuLVx0XHRcdFx0XHRcdFx0bG9ja2RlcF9pc19oZWxkKFx1MDAyNmxvY2FsLVx1MDAzZWh3LndpcGh5LVx1MDAzZW10eCkpO1xuJiM0MztcdFx0XHRsaW5rX3N0YSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgIHN0YS1cdTAwM2VsaW5rW3N0YXR1cy1cdTAwM2VsaW5rX2lkXSk7XG4gXHRcdFx0aWYgKGxpbmtfc3RhKVxuIFx0XHRcdFx0aWVlZTgwMjExX2h0X2hhbmRsZV9jaGFud2lkdGhfbm90aWYobG9jYWwsIHNkYXRhLCBzdGEsXG4gXHRcdFx0XHRcdFx0XHRcdCAgICBsaW5rX3N0YSwgY2hhbndpZHRoLFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5pbmRleCBmNTExNjdmMGZjNDZkLi4zNjE3NzVmYjkzMWVjIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21sbWUuY1xuQEAgLTExODMxLDEyICYjNDM7MTE4MzEsMTAgQEAgdm9pZCBpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdHJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItXHUwMDNlY2I7XG4gXHRmYyA9IGxlMTZfdG9fY3B1KG1nbXQtXHUwMDNlZnJhbWVfY29udHJvbCk7XG4gXG4tXHRpZiAocnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQpIHtcbi1cdFx0bGluayA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxpbmtbcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWRdLFxuLVx0XHRcdFx0XHQgc2RhdGEpO1xuLVx0XHRpZiAoIWxpbmspXG4tXHRcdFx0cmV0dXJuO1xuLVx0fVxuJiM0MztcdGxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW3J4X3N0YXR1cy1cdTAwM2VsaW5rX2lkXSxcbiYjNDM7XHRcdFx0XHQgc2RhdGEpO1xuJiM0MztcdGlmICghbGluaylcbiYjNDM7XHRcdHJldHVybjtcbiBcbiBcdHN3aXRjaCAoZmMgXHUwMDI2IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7XG4gXHRjYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcbmluZGV4IDdhY2VmODBkNWYxZmIuLjY1MzcxMDU3NjgzMTYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG5AQCAtODU0LDggJiM0Mzs4NTQsMTAgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVx1MDAzZWRhKTtcbi1cdFx0bWxvX3N0YSA9IHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG87XG4mIzQzO1x0XHRpZiAoIXBhcmFtcy1cdTAwM2Vub19zdGEpIHtcbiYjNDM7XHRcdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cdTAwM2VkYSk7XG4mIzQzO1x0XHRcdG1sb19zdGEgPSBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEubWxvO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoIWllZWU4MDIxMV9pc19hY3Rpb24obWdtdC1cdTAwM2VmcmFtZV9jb250cm9sKSB8fFxuIFx0XHQgICAgbWdtdC1cdTAwM2V1LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyB8fFxuQEAgLTg4NCw3ICYjNDM7ODg2LDggQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdCAgICAgbG9jYWwtXHUwMDNlb3BzLVx1MDAzZXJlbWFpbl9vbl9jaGFubmVsIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIG1lbWNtcChzZGF0YS1cdTAwM2V2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKSkpIHtcbiBcdFx0XHRuZWVkX29mZmNoYW4gPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHNkYXRhLVx1MDAzZXUubWdkLmFzc29jaWF0ZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHR9IGVsc2UgaWYgKCFwYXJhbXMtXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICBzZGF0YS1cdTAwM2V1Lm1nZC5hc3NvY2lhdGVkIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgIGV0aGVyX2FkZHJfZXF1YWwoc2RhdGEtXHUwMDNldmlmLmNmZy5hcF9hZGRyLCBtZ210LVx1MDAzZWRhKSkge1xuIFx0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlZGEpO1xuIFx0XHRcdG1sb19zdGEgPSBzdGEgXHUwMDI2XHUwMDI2IHN0YS1cdTAwM2VzdGEubWxvO1xuQEAgLTEwMjIsNyAmIzQzOzEwMjUsOSBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdH1cbiBcbiBcdGlmICghbmVlZF9vZmZjaGFuKSB7XG4tXHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xuJiM0MztcdFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcbiYjNDM7XHRcdFx0XHQgICAgIHBhcmFtcy1cdTAwM2Vub19zdGEgPyBzdGEgOiBFUlJfUFRSKC1FTk9FTlQpLFxuJiM0MztcdFx0XHRcdCAgICAgNywgbGlua19pZCk7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jXG5pbmRleCA1ZTI2YmU4ZTI3ZDhmLi5lZDVhMmUwNTkwNzU3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3J4LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9yeC5jXG5AQCAtMjIyLDQzICYjNDM7MjIyLDIxIEBAIGllZWU4MDIxMV9yeF9yYWRpb3RhcF9oZHJsZW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsXG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdFx0ICAgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHRcdCAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxuIFx0XHRcdFx0XHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cbi1cdGlmIChsaW5rX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gbGlua19pZDtcbi1cdH0gZWxzZSB7XG4tXHRcdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMDtcbi1cdH1cbi1cbiBcdHNrYl9xdWV1ZV90YWlsKFx1MDAyNnNkYXRhLVx1MDAzZXNrYl9xdWV1ZSwgc2tiKTtcbiBcdHdpcGh5X3dvcmtfcXVldWUoc2RhdGEtXHUwMDNlbG9jYWwtXHUwMDNlaHcud2lwaHksIFx1MDAyNnNkYXRhLVx1MDAzZXdvcmspO1xuLVx0aWYgKHN0YSkge1xuLVx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGFfaW5mbztcbi1cbi1cdFx0aWYgKGxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdFx0bGlua19zdGFfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4tXHRcdFx0aWYgKCFsaW5rX3N0YV9pbmZvKVxuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdGxpbmtfc3RhX2luZm8gPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbi1cdFx0fVxuLVxuLVx0XHRsaW5rX3N0YV9pbmZvLVx1MDAzZXJ4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7O1xuLVx0fVxuJiM0MztcdGlmIChsaW5rX3N0YSlcbiYjNDM7XHRcdGxpbmtfc3RhLVx1MDAzZXJ4X3N0YXRzLnBhY2tldHMmIzQzOyYjNDM7O1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0XHQgaW50IGxpbmtfaWQsXG4tXHRcdFx0XHRcdCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0XHRcdCBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IDA7XG4tXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfaWQsIHN0YSwgc2tiKTtcbiYjNDM7XHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfc3RhLCBza2IpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuQEAgLTMwMSw3ICYjNDM7Mjc5LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9tdV9taW1vX21vbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGlmICghc2tiKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCAtMSwgTlVMTCwgc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBOVUxMLCBza2IpO1xuIH1cbiBcbiAvKlxuQEAgLTE0OTgsNyAmIzQzOzE0NzYsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfcmVvcmRlcl9hbXBkdShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0LyogaWYgdGhpcyBtcGR1IGlzIGZyYWdtZW50ZWQgLSB0ZXJtaW5hdGUgcnggYWdncmVnYXRpb24gc2Vzc2lvbiAqL1xuIFx0c2MgPSBsZTE2X3RvX2NwdShoZHItXHUwMDNlc2VxX2N0cmwpO1xuIFx0aWYgKHNjIFx1MDAyNiBJRUVFODAyMTFfU0NUTF9GUkFHKSB7XG4tXHRcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXHUwMDNlc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIE5VTEwsIHNrYik7XG4mIzQzO1x0XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHJ4LVx1MDAzZXNkYXRhLCBOVUxMLCBza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMjUyNCw3ICYjNDM7MjUwMiw3IEBAIGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcbiAgb3V0OlxuIFx0aWVlZTgwMjExX2xlZF9yeChyeC1cdTAwM2Vsb2NhbCk7XG4tXHRpZiAocngtXHUwMDNlc3RhKVxuJiM0MztcdGlmIChyeC1cdTAwM2VsaW5rX3N0YSlcbiBcdFx0cngtXHUwMDNlbGlua19zdGEtXHUwMDNlcnhfc3RhdHMucGFja2V0cyYjNDM7JiM0Mzs7XG4gXHRyZXR1cm4gUlhfQ09OVElOVUU7XG4gfVxuQEAgLTMzMzUsOCAmIzQzOzMzMTMsOCBAQCBpZWVlODAyMTFfcnhfaF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdCAgICAodGYtXHUwMDNlYWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX0NIQU5ORUxfU1dJVENIX1JFUVVFU1QgfHxcbiBcdFx0ICAgICB0Zi1cdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVTUE9OU0UpKSB7XG4gXHRcdFx0cngtXHUwMDNlc2tiLVx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfVERMUyk7XG4tXHRcdFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLFxuLVx0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0XHRcdF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2Vza2IpO1xuIFx0XHRcdHJldHVybiBSWF9RVUVVRUQ7XG4gXHRcdH1cbiBcdH1cbkBAIC0zOTkxLDcgJiM0MzszOTY5LDcgQEAgaWVlZTgwMjExX3J4X2hfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIFxuICBxdWV1ZTpcbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSwgcngtXHUwMDNlc2tiKTtcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gfVxuIFxuQEAgLTQwMDUsNiAmIzQzOzM5ODMsNyBAQCBpZWVlODAyMTFfcnhfaF91c2Vyc3BhY2VfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHQubGVuID0gcngtXHUwMDNlc2tiLVx1MDAzZWxlbixcbiBcdFx0LmxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkLFxuIFx0XHQuaGF2ZV9saW5rX2lkID0gcngtXHUwMDNlbGlua19pZCBcdTAwM2U9IDAsXG4mIzQzO1x0XHQubm9fc3RhID0gIXJ4LVx1MDAzZXN0YSxcbiBcdH07XG4gXG4gXHQvKiBza2lwIGtub3duLWJhZCBhY3Rpb24gZnJhbWVzIGFuZCByZXR1cm4gdGhlbSBpbiB0aGUgbmV4dCBoYW5kbGVyICovXG5AQCAtNDEyNyw3ICYjNDM7NDEwNiw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbl9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0XHRcdFx0bG9jYWwtXHUwMDNlaHcub2ZmY2hhbm5lbF90eF9od19xdWV1ZTtcbiBcdFx0fVxuIFxuLVx0XHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQocngtXHUwMDNlc2RhdGEsIG5za2IsIDcsIC0xLFxuJiM0MztcdFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LVx1MDAzZXNkYXRhLCBuc2tiLCByeC1cdTAwM2VzdGEsIDcsIC0xLFxuIFx0XHRcdFx0XHQgICAgc3RhdHVzLVx1MDAzZWJhbmQpO1xuIFx0fVxuIFxuQEAgLTQxNDcsNyAmIzQzOzQxMjYsNyBAQCBpZWVlODAyMTFfcnhfaF9leHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0cmV0dXJuIFJYX0RST1BfVV9VTkVYUEVDVEVEX0VYVF9GUkFNRTtcbiBcbiBcdC8qIGZvciBub3cgb25seSBiZWFjb25zIGFyZSBleHQsIHNvIHF1ZXVlIHRoZW0gKi9cbi1cdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSwgcngtXHUwMDNlc2tiKTtcbiBcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gfVxuQEAgLTQyMDQsNyAmIzQzOzQxODMsNyBAQCBpZWVlODAyMTFfcnhfaF9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdHJldHVybiBSWF9EUk9QX1VfVU5IQU5ETEVEX01HTVRfU1RZUEU7XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLCByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsIHJ4LVx1MDAzZXNrYik7XG4gXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIH1cbkBAIC00MjQ4LDEyICYjNDM7NDIyNywyOCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZyeC1cdTAwM2Vsb2NhbC1cdTAwM2VyeF9wYXRoX2xvY2spO1xuIFxuIFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGZyYW1lcykpKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4mIzQzO1xuIFx0XHQvKlxuLVx0XHQgKiBhbGwgdGhlIG90aGVyIGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lc1xuLVx0XHQgKiB0aGF0IGJlbG9uZyB0byBhbiBhTVBEVSBzaW5jZSB0aGV5IGFyZSBvbiB0aGVcbi1cdFx0ICogc2FtZSBUSUQgZnJvbSB0aGUgc2FtZSBzdGF0aW9uXG4mIzQzO1x0XHQgKiBNb3N0IGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lcy4gSG93ZXZlcixcbiYjNDM7XHRcdCAqIGluIHRoZSBjYXNlIG9mIHJlb3JkZXJpbmcgZnJhbWVzIG1heSBoYXZlIGFycml2ZWRcbiYjNDM7XHRcdCAqIG9uIGRpZmZlcmVudCBsaW5rcywgc28gYWRqdXN0IHRoZSBsaW5rX2lkLCBsaW5rXG4mIzQzO1x0XHQgKiBhbmQgbGlua19zdGEgYWNjb3JkaW5nbHkuXG4gXHRcdCAqL1xuIFx0XHRyeC1cdTAwM2Vza2IgPSBza2I7XG4mIzQzO1x0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNldmlmKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICB1bmxpa2VseShyeC1cdTAwM2VsaW5rX2lkICE9IHN0YXR1cy1cdTAwM2VsaW5rX2lkKSkge1xuJiM0MztcdFx0XHRpZiAocngtXHUwMDNlc3RhKSB7XG4mIzQzO1x0XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPVxuJiM0MztcdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHJ4LVx1MDAzZXN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0LyogTGluayBnb3QgZGlzYWJsZWQsIGp1c3QgdXNlIGRlZmxpbmsgKi9cbiYjNDM7XHRcdFx0XHRpZiAoIXJ4LVx1MDAzZWxpbmtfc3RhKVxuJiM0MztcdFx0XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPSBcdTAwMjZyeC1cdTAwM2VzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyeC1cdTAwM2VsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1x0XHRcdHJ4LVx1MDAzZWxpbmsgPSByY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tzdGF0dXMtXHUwMDNlbGlua19pZF0pO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFyeC1cdTAwM2VsaW5rKSkge1xuIFx0XHRcdHJlcyA9IFJYX0RST1BfVV9OT19MSU5LO1xuQEAgLTQzMjMsNyAmIzQzOzQzMTgsMzQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIHN0YXRpYyBib29sXG4gaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IGxpbmtfaWQpXG4ge1xuLVx0cmV0dXJuICEhKHN0YS1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKGxpbmtfaWQpKTtcbiYjNDM7XHRpZiAoc3RhLVx1MDAzZW1sbylcbiYjNDM7XHRcdHJldHVybiBzdGEtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHN0YS1cdTAwM2VkZWZsaW5rLmxpbmtfaWQgPT0gbGlua19pZDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpIHx8XG4mIzQzO1x0ICAgICFpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoXHUwMDI2bGlua19zdGEtXHUwMDNlc3RhLVx1MDAzZXN0YSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2VzdGEgPSBzdGE7XG4mIzQzO1x0cngtXHUwMDNlbG9jYWwgPSBzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWw7XG4mIzQzO1x0cngtXHUwMDNlbGluayA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4mIzQzO1x0aWYgKCFyeC1cdTAwM2VsaW5rKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyeC1cdTAwM2VsaW5rX2lkID0gcngtXHUwMDNlbGluay1cdTAwM2VsaW5rX2lkO1xuJiM0MztcdHJ4LVx1MDAzZWxpbmtfc3RhID0gbGlua19zdGE7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuQEAgLTQzNjAsMTEgJiM0Mzs0MzgyLDEzIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcbiBcdGlmIChsaW5rX2lkIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZyeC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgc3RhIFx1MDAyNlx1MDAyNiAhc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcylcbiYjNDM7XHRcdCAgICBzdGEgXHUwMDI2XHUwMDI2ICFzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSB7XG4gXHRcdFx0cngtXHUwMDNlbGluayA9XG4gXHRcdFx0XHRyY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc2RhdGEtXHUwMDNlbGlua1tzdGEtXHUwMDNlZGVmbGluay5saW5rX2lkXSk7XG4tXHRcdGVsc2VcbiYjNDM7XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuJiM0MztcdFx0fSBlbHNlIHtcbiBcdFx0XHRyeC1cdTAwM2VsaW5rID0gXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdH1cbiBcdH0gZWxzZSBpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHJ4LCBsaW5rX2lkKSkge1xuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG5AQCAtNDM4Nyw3ICYjNDM7NDQxMSw3IEBAIHZvaWQgaWVlZTgwMjExX3JlbGVhc2VfcmVvcmRlcl90aW1lb3V0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBpbnQgdGlkKVxuIFx0c3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeDtcbiBcdGludCBsaW5rX2lkID0gLTE7XG4gXG4tXHQvKiBGSVhNRTogc3RhdGlzdGljcyB3b24mIzM5O3QgYmUgcmlnaHQgd2l0aCB0aGlzICovXG4mIzQzO1x0LyogTk9URTogdGhlIGNvcnJlY3QgbGluayBTVEEgZm9yIHRoZSBmcmFtZSBpcyBzZXQgbGF0ZXIgKi9cbiBcdGlmIChzdGEtXHUwMDNlc3RhLnZhbGlkX2xpbmtzKVxuIFx0XHRsaW5rX2lkID0gZmZzKHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpIC0gMTtcbiBcbkBAIC00OTE0LDIwICYjNDM7NDkzOCwxNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpzdGF0cztcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0IocngtXHUwMDNlc2tiKTtcbi1cdHN0cnVjdCBzdGFfaW5mbyAqc3RhID0gcngtXHUwMDNlc3RhO1xuLVx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuJiM0MztcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVx1MDAzZXNrYjtcbiBcdHZvaWQgKnNhID0gc2tiLVx1MDAzZWRhdGEgJiM0MzsgRVRIX0FMRU47XG4gXHR2b2lkICpkYSA9IHNrYi1cdTAwM2VkYXRhO1xuIFxuLVx0aWYgKHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNlPSAwKSB7XG4tXHRcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW3J4LVx1MDAzZWxpbmtfaWRdKTtcbi1cdFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XG4tXHRcdFx0ZGV2X2tmcmVlX3NrYihyeC1cdTAwM2Vza2IpO1xuLVx0XHRcdHJldHVybjtcbi1cdFx0fVxuLVx0fSBlbHNlIHtcbi1cdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHtcbiYjNDM7XHRcdGRldl9rZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHN0YXRzID0gXHUwMDI2bGlua19zdGEtXHUwMDNlcnhfc3RhdHM7XG5AQCAtNTE1NCw2ICYjNDM7NTE3Miw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9pbnZva2VfZmFzdF9yeChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4mIzQzO1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0aWVlZTgwMjExX3J4XzgwMjMocngsIGZhc3RfcngsIG9yaWdfbGVuKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuQEAgLTUxNzgsNiAmIzQzOzUxOTksNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSByeC1cdTAwM2VsaW5rO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXM7XG4gXG4gXHRyeC1cdTAwM2Vza2IgPSBza2I7XG4gXG5AQCAtNTIyMSw2ICYjNDM7NTI0Myw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcdFx0aGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVx1MDAzZXNrYik7XG4mIzQzO1x0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkIFx1MDAzYyAwID8gMCA6IHJ4LVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0aWYgKGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSkge1xuIFx0XHRpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHJ4KTtcbiBcdFx0cmV0dXJuIHRydWU7XG5AQCAtNTI1NiwyMiAmIzQzOzUyODEsMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfcnggKmZhc3Rfcng7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgcng7XG4gXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbi1cdGludCBsaW5rX2lkID0gLTE7XG4gXG4gXHRtZW1zZXQoXHUwMDI2cngsIDAsIHNpemVvZihyeCkpO1xuIFx0cnguc2tiID0gc2tiO1xuIFx0cngubG9jYWwgPSBsb2NhbDtcbiBcdHJ4Lmxpc3QgPSBsaXN0O1xuLVx0cngubGlua19pZCA9IC0xO1xuIFxuIFx0STgwMl9ERUJVR19JTkMobG9jYWwtXHUwMDNlZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpO1xuIFxuQEAgLTUyNzksMjMgJiM0Mzs1MzAxLDE1IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0aWYgKCFwdWJzdGEpXG4mIzQzO1x0aWYgKCFsaW5rX3B1YnN0YSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4tXG4tXHQvKlxuLVx0ICogVE9ETzogU2hvdWxkIHRoZSBmcmFtZSBiZSBkcm9wcGVkIGlmIHRoZSByaWdodCBsaW5rX2lkIGlzIG5vdFxuLVx0ICogYXZhaWxhYmxlPyBPciBtYXkgYmUgaXQgaXMgZmluZSBpbiB0aGUgY3VycmVudCBmb3JtIHRvIHByb2NlZWQgd2l0aFxuLVx0ICogdGhlIGZyYW1lIHByb2Nlc3NpbmcgYmVjYXVzZSB3aXRoIGZyYW1lIGJlaW5nIGluIDgwMi4zIGZvcm1hdCxcbi1cdCAqIGxpbmtfaWQgaXMgdXNlZCBvbmx5IGZvciBzdGF0cyBwdXJwb3NlIGFuZCB1cGRhdGluZyB0aGUgc3RhdHMgb25cbi1cdCAqIHRoZSBkZWZsaW5rIGlzIGZpbmU/XG4tXHQgKi9cbi1cdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgc3RhLCBsaW5rX2lkKSlcbiYjNDM7XHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG4mIzQzO1x0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFx1MDAyNnJ4LCBzdGEsIGxpbmtfcHVic3RhLVx1MDAzZWxpbmtfaWQpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4mIzQzO1x0cngubGlua19pZCA9IGxpbmtfcHVic3RhLVx1MDAzZWxpbmtfaWQ7XG4mIzQzO1xuIFx0ZmFzdF9yeCA9IHJjdV9kZXJlZmVyZW5jZShyeC5zdGEtXHUwMDNlZmFzdF9yeCk7XG4gXHRpZiAoIWZhc3RfcngpXG4gXHRcdGdvdG8gZHJvcDtcbkBAIC01MzA3LDU5ICYjNDM7NTMyMSwxOSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGNvbnN1bWUpXG4mIzQzO3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKGludCBmcmVxLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcbiB7XG4tXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbi1cdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuLVx0aW50IGxpbmtfaWQgPSAtMTtcbi1cbi1cdGlmIChpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbi1cdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBOVUxMLCAtMSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0XHRyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTtcbi1cdH1cbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbiBcbi1cdC8qXG4tXHQgKiBMb29rIHVwIGxpbmsgc3RhdGlvbiBmaXJzdCwgaW4gY2FzZSB0aGVyZSYjMzk7cyBhXG4tXHQgKiBjaGFuY2UgdGhhdCB0aGV5IG1pZ2h0IGhhdmUgYSBsaW5rIGFkZHJlc3MgdGhhdFxuLVx0ICogaXMgaWRlbnRpY2FsIHRvIHRoZSBNTEQgYWRkcmVzcywgdGhhdCB3YXkgd2UmIzM5O2xsXG4tXHQgKiBoYXZlIHRoZSBsaW5rIGluZm9ybWF0aW9uIGlmIG5lZWRlZC5cbi1cdCAqL1xuLVx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3MocngtXHUwMDNlc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4tXHRpZiAobGlua19zdGEpIHtcbi1cdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuLVx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbi1cdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cbi1cdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhyeC1cdTAwM2VzZGF0YSwgaGRyLVx1MDAzZWFkZHIyKTtcbi1cdFx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKSB7XG4tXHRcdFx0bGlua19pZCA9IHN0YXR1cy1cdTAwM2VsaW5rX2lkO1xuLVx0XHR9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnJ4LVx1MDAzZXNkYXRhLVx1MDAzZXZpZikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgc3RhdHVzLVx1MDAzZWZyZXEpIHtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbi1cbi1cdFx0XHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHJ4LVx1MDAzZXNkYXRhLCBsaW5rKSB7XG4tXHRcdFx0XHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXHUwMDNlY29uZi1cdTAwM2VjaGFuY3R4X2NvbmYpO1xuLVx0XHRcdFx0aWYgKCFjb25mIHx8ICFjb25mLVx1MDAzZWRlZi5jaGFuKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHRcdGlmIChzdGF0dXMtXHUwMDNlZnJlcSA9PSBjb25mLVx1MDAzZWRlZi5jaGFuLVx1MDAzZWNlbnRlcl9mcmVxKSB7XG4tXHRcdFx0XHRcdGxpbmtfaWQgPSBsaW5rLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmICghZnJlcSB8fCBsaW5rLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxuJiM0MztcdCAgICBsaW5rLVx1MDAzZXNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIHN0YSwgbGlua19pZCkpXG4mIzQzO1x0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbiYjNDM7XHRpZiAoIWNvbmYgfHwgIWNvbmYtXHUwMDNlZGVmLmNoYW4pXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpO1xuJiM0MztcdHJldHVybiBmcmVxID09IGNvbmYtXHUwMDNlZGVmLmNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4gfVxuIFxuIC8qXG5AQCAtNTM2NywxOCAmIzQzOzUzNDEsMjAgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiAgKiBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIHByb3RlY3Rpb24uXG4gICovXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0XHQgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhO1xuJiM0MztcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4mIzQzO1x0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xuJiM0MztcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuIFx0X19sZTE2IGZjO1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4O1xuLVx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqcHJldjtcbiBcdHN0cnVjdCByaGxpc3RfaGVhZCAqdG1wO1xuJiM0MztcdGJvb2wgcnhfZGF0YV9wZW5kaW5nO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRmYyA9ICgoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YSktXHUwMDNlZnJhbWVfY29udHJvbDtcbkBAIC01Mzg2LDcgJiM0Mzs1MzYyLDYgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdHJ4LnNrYiA9IHNrYjtcbiBcdHJ4LmxvY2FsID0gbG9jYWw7XG4gXHRyeC5saXN0ID0gbGlzdDtcbi1cdHJ4LmxpbmtfaWQgPSAtMTtcbiBcbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaWVlZTgwMjExX2lzX21nbXQoZmMpKVxuIFx0XHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cdTAwM2Vkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCk7XG5AQCAtNTQyNiw5NyAmIzQzOzU0MDEsMTAyIEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRcdCAgICAgaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKSlcbiBcdFx0aWVlZTgwMjExX3NjYW5fcngobG9jYWwsIHNrYik7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSWCBvZiBhIGRhdGEgZnJhbWUgc2hvdWxkIG9ubHkgaGFwcGVuIHRvIGV4aXN0aW5nIHN0YXRpb25zLlxuJiM0MztcdCAqIEl0IGlzIHRoZXJlZm9yZSBtb3JlIGVmZmljaWVudCB0byB1c2UgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyXG4mIzQzO1x0ICogb3Igc2VhcmNoIGJhc2VkIG9uIHRoZSBzdGF0aW9uJiMzOTtzIGFkZHJlc3MuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBOb3RlIHdlIHdpbGwgZmFsbCB0aHJvdWdoIGFuZCBoYW5kbGUgYSBzcHVyaW91cyBkYXRhIGZyYW1lIGluIHRoZVxuJiM0MztcdCAqIHNhbWUgd2F5IGFzIGEgbWFuYWdlbWVudCBmcmFtZS5cbiYjNDM7XHQgKi9cbiBcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHtcbi1cdFx0c3RydWN0IHN0YV9pbmZvICpzdGEsICpwcmV2X3N0YTtcbi1cdFx0aW50IGxpbmtfaWQgPSAtMTtcbi1cbi1cdFx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRcdGxpbmtfaWQgPSBzdGF0dXMtXHUwMDNlbGlua19pZDtcbi1cbi1cdFx0aWYgKHB1YnN0YSkge1xuLVx0XHRcdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHN0YSwgbGlua19pZCkpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEluIE1MTyBjb25uZWN0aW9uLCBmZXRjaCB0aGUgbGlua19pZCB1c2luZyBhZGRyMlxuLVx0XHRcdCAqIHdoZW4gdGhlIGRyaXZlciBkb2VzIG5vdCBwYXNzIGxpbmtfaWQgaW4gc3RhdHVzLlxuLVx0XHRcdCAqIFdoZW4gdGhlIGFkZHJlc3MgdHJhbnNsYXRpb24gaXMgYWxyZWFkeSBwZXJmb3JtZWQgYnlcbi1cdFx0XHQgKiBkcml2ZXIvaHcsIHRoZSB2YWxpZCBsaW5rX2lkIG11c3QgYmUgcGFzc2VkIGluXG4tXHRcdFx0ICogc3RhdHVzLlxuLVx0XHRcdCAqL1xuLVxuLVx0XHRcdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgXHUwMDI2XHUwMDI2IHB1YnN0YS1cdTAwM2VtbG8pIHtcbi1cdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcbi1cbi1cdFx0XHRcdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLFxuLVx0XHRcdFx0XHRcdFx0XHQgaGRyLVx1MDAzZWFkZHIyKTtcbi1cdFx0XHRcdGlmICghbGlua19zdGEpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuLVxuLVx0XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhcdTAwMjZyeCxcbi1cdFx0XHRcdFx0XHRcdFx0bGlua19zdGEtXHUwMDNlbGlua19pZCkpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHRpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiYjNDM7XHRcdGlmIChsaW5rX3B1YnN0YSkge1xuJiM0MztcdFx0XHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXHUwMDNlc3RhLCBzdHJ1Y3Qgc3RhX2luZm8sXG4mIzQzO1x0XHRcdFx0XHQgICBzdGEpO1xuJiM0MztcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX3B1YnN0YS1cdTAwM2VsaW5rX2lkXSk7XG4mIzQzO1xuJiM0MztcdFx0XHRyeC5zZGF0YSA9IHN0YS1cdTAwM2VzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcdTAwMjZyeCwgbGlua19zdGEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbiBcdFx0XHRcdHJldHVybjtcbiYjNDM7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0cHJldl9zdGEgPSBOVUxMO1xuJiM0MztcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4gXG4mIzQzO1x0XHQvKiBTZWFyY2ggZm9yIHN0YXRpb25zIG9uIG5vbi1NTEQgaW50ZXJmYWNlcyAqL1xuIFx0XHRmb3JfZWFjaF9zdGFfaW5mbyhsb2NhbCwgaGRyLVx1MDAzZWFkZHIyLCBzdGEsIHRtcCkge1xuLVx0XHRcdGlmICghcHJldl9zdGEpIHtcbi1cdFx0XHRcdHByZXZfc3RhID0gc3RhO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbiBcbi1cdFx0XHRyeC5zZGF0YSA9IHByZXZfc3RhLVx1MDAzZXNkYXRhO1xuLVx0XHRcdGlmICghc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgXHUwMDI2XHUwMDI2IHByZXZfc3RhLVx1MDAzZXN0YS5tbG8pIHtcbi1cdFx0XHRcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXG4tXHRcdFx0XHRcdFx0XHRcdCBoZHItXHUwMDNlYWRkcjIpO1xuLVx0XHRcdFx0aWYgKCFsaW5rX3N0YSlcbi1cdFx0XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRcdGxpbmsgPSBcdTAwMjZzdGEtXHUwMDNlc2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xuJiM0MztcdFx0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdGZhbHNlKTtcbiYjNDM7XHRcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFx1MDAyNnJ4LCBwcmV2X3N0YSwgbGlua19pZCkpXG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cbi1cdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRcdFx0cnguc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4mIzQzO1x0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFx1MDAyNnJ4LCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0cHJldl9zdGEgPSBzdGE7XG4mIzQzO1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHByZXZfc3RhKSB7XG4tXHRcdFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cdTAwM2VzZGF0YTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkIFx1MDAyNlx1MDAyNiBwcmV2X3N0YS1cdTAwM2VzdGEubWxvKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4mIzQzO1x0XHQvKiBBbmQgc2VhcmNoIHN0YXRpb25zIG9uIE1MRCBpbnRlcmZhY2VzICovXG4mIzQzO1x0XHRmb3JfZWFjaF9saW5rX3N0YV9pbmZvKGxvY2FsLCBoZHItXHUwMDNlYWRkcjIsIGxpbmtfc3RhLCB0bXApIHtcbiYjNDM7XHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XG4gXG4tXHRcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcbi1cdFx0XHRcdFx0XHRcdFx0IGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdFx0XHRpZiAoIWxpbmtfc3RhKVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuJiM0MztcdFx0XHRzZGF0YSA9XHRzdGEtXHUwMDNlc2RhdGE7XG4mIzQzO1x0XHRcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0ZmFsc2UpO1xuJiM0MztcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcbi1cdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRyeC5zZGF0YSA9IHN0YS1cdTAwM2VzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIGxpbmtfc3RhKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4mIzQzO1x0XHR9XG4gXG4mIzQzO1x0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4gXHRcdFx0aWYgKGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXG4gXHRcdFx0XHRyZXR1cm47XG4mIzQzO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogZmFsbCB0aHJvdWdoLCBlLmcuIGZvciBzcHVyaW91cyBmcmFtZSBub3RpZmljYXRpb24gKi9cbiBcdH1cbiBcbi1cdHByZXYgPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBpcyBhIG1hbmFnZW1lbnQgZnJhbWUgKG9yIGEgZGF0YSBmcmFtZSB3aXRob3V0IGEgc3RhdGlvbikgYW5kXG4mIzQzO1x0ICogaXQgd2lsbCBiZSBkZWxpdmVyZWQgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBhIHN0YXRpb24gZXhpc3RzLFxuJiM0MztcdCAqIHNvIGl0ZXJhdGUgdGhlIGludGVyZmFjZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFdlIGV4cGVjdCB0aGUgZHJpdmVyIHRvIHByb3ZpZGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uICovXG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbG9jYWwtXHUwMDNlZW11bGF0ZV9jaGFuY3R4IFx1MDAyNlx1MDAyNiAhc3RhdHVzLVx1MDAzZWZyZXEpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xuJiM0MztcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSBOVUxMO1xuJiM0MztcbiBcdFx0aWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG5AQCAtNTUyNCwzMCAmIzQzOzU1MDQsODUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0ICAgIHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pXG4gXHRcdFx0Y29udGludWU7XG4gXG4mIzQzO1x0XHRsaW5rX3N0YSA9IE5VTEw7XG4mIzQzO1x0XHRsaW5rID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBUcnkgdG8gcmVzb2x2ZSB0aGUgc3RhdGlvbiAqL1xuJiM0MztcdFx0aWYgKCFpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4mIzQzO1x0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoc3RhKSB7XG4mIzQzO1x0XHRcdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0XHRsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAobGlua19zdGEpXG4mIzQzO1x0XHRcdFx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qXG4tXHRcdCAqIGZyYW1lIGlzIGRlc3RpbmVkIGZvciB0aGlzIGludGVyZmFjZSwgYnV0IGlmIGl0JiMzOTtzXG4tXHRcdCAqIG5vdCBhbHNvIGZvciB0aGUgcHJldmlvdXMgb25lIHdlIGhhbmRsZSB0aGF0IGFmdGVyXG4tXHRcdCAqIHRoZSBsb29wIHRvIGF2b2lkIGNvcHlpbmcgdGhlIFNLQiBvbmNlIHRvbyBtdWNoXG4mIzQzO1x0XHQgKiBJZiB3ZSBmb3VuZCBhIFNUQSBhbmQgaXQgaGFzIGEgdmFsaWQgbGluayBpbmZvcm1hdGlvbiwgdGhlblxuJiM0MztcdFx0ICogUlggdXNpbmcgdGhlIHN0YXRpb24uXG4gXHRcdCAqL1xuJiM0MztcdFx0aWYgKGxpbmtfc3RhIFx1MDAyNlx1MDAyNiBsaW5rIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cdTAwM2VmcmVxLCBsaW5rKSkge1xuJiM0MztcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdC8qIE5vIHZhbGlkX2xpbmtzIGNoZWNrIGFzIHdlIG5lZWQgdG8gUlggYmVhY29ucyAqL1xuJiM0MztcbiYjNDM7XHRcdFx0cnguc2RhdGEgPSBzZGF0YTtcbiYjNDM7XHRcdFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcdTAwMjZyeCwgbGlua19zdGEpKVxuJiM0MztcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXG4tXHRcdGlmICghcHJldikge1xuLVx0XHRcdHByZXYgPSBzZGF0YTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRyeC5zZGF0YSA9IHByZXY7XG4tXHRcdGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbiYjNDM7XHRcdC8qIE5vIHN0YXRpb24sIHRyeSB0byByZXNvbHZlIHRoZSBsaW5rIGFuZCBSWCAqL1xuJiM0MztcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNkYXRhLVx1MDAzZXZpZikpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XG4mIzQzO1x0XHRcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiBcbi1cdFx0cHJldiA9IHNkYXRhO1xuLVx0fVxuJiM0MztcdFx0XHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHNkYXRhLCBsaW5rKSB7XG4mIzQzO1x0XHRcdFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbiYjNDM7XHRcdFx0XHRpZiAoIWNvbmYgfHwgIWNvbmYtXHUwMDNlZGVmLmNoYW4pXG4mIzQzO1x0XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdGlmIChwcmV2KSB7XG4tXHRcdHJ4LnNkYXRhID0gcHJldjtcbiYjNDM7XHRcdFx0XHRpZiAoc3RhdHVzLVx1MDAzZWZyZXEgPT0gY29uZi1cdTAwM2VkZWYuY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSkge1xuJiM0MztcdFx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4gXG4tXHRcdGlmIChpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShcdTAwMjZyeCwgc2tiLCB0cnVlKSlcbi1cdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdGlmICghZm91bmQpXG4mIzQzO1x0XHRcdFx0bGluayA9IFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbms7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRsaW5rID0gXHUwMDI2c2RhdGEtXHUwMDNlZGVmbGluaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4mIzQzO1x0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xuJiM0MztcdFx0XHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyeC5zZGF0YSA9IHNkYXRhO1xuJiM0MztcdFx0cngubG9jYWwgPSBzZGF0YS1cdTAwM2Vsb2NhbDtcbiYjNDM7XHRcdHJ4LmxpbmsgPSBsaW5rO1xuJiM0MztcdFx0cngubGlua19pZCA9IGxpbmstXHUwMDNlbGlua19pZDtcbiYjNDM7XHRcdHJ4LnN0YSA9IE5VTEw7XG4mIzQzO1x0XHRyeC5saW5rX3N0YSA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0cnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocnhfZGF0YV9wZW5kaW5nIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiAgb3V0OlxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIH1cbkBAIC01NTU2LDcgJiM0Mzs1NTkxLDggQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiAgKiBUaGlzIGlzIHRoZSByZWNlaXZlIHBhdGggaGFuZGxlci4gSXQgaXMgY2FsbGVkIGJ5IGEgbG93IGxldmVsIGRyaXZlciB3aGVuIGFuXG4gICogODAyLjExIE1QRFUgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgaGFyZHdhcmUuXG4gICovXG4tdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiYjNDM7dm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG5AQCAtNTY5NCw5ICYjNDM7NTczMCw2IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGlmIChXQVJOX09OX09OQ0Uoc3RhdHVzLVx1MDAzZWxpbmtfaWQgXHUwMDNlPSBJRUVFODAyMTFfTElOS19VTlNQRUNJRklFRCkpXG4tXHRcdGdvdG8gZHJvcDtcbi1cbiBcdHN0YXR1cy1cdTAwM2VyeF9mbGFncyA9IDA7XG4gXG4gXHRrY292X3JlbW90ZV9zdGFydF9jb21tb24oc2tiX2dldF9rY292X2hhbmRsZShza2IpKTtcbkBAIC01NzE1LDkgJiM0Mzs1NzQ4LDEwIEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXG4gXHRcdFx0aWVlZTgwMjExX3RwdF9sZWRfdHJpZ19yeChsb2NhbCwgc2tiLVx1MDAzZWxlbik7XG4gXG4gXHRcdGlmIChzdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR184MDIzKVxuLVx0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBwdWJzdGEsIHNrYiwgbGlzdCk7XG4mIzQzO1x0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBsaXN0KTtcbiBcdFx0ZWxzZVxuLVx0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcbiYjNDM7XHRcdFx0X19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgbGlua19wdWJzdGEsIHNrYixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBsaXN0KTtcbiBcdH1cbiBcbiBcdGtjb3ZfcmVtb3RlX3N0b3AoKTtcbkBAIC01NzI3LDcgJiM0Mzs1NzYxLDggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiB9XG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnhfbGlzdCk7XG4gXG4tdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiYjNDM7dm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiYjNDM7XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbiB7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqdG1wO1xuQEAgLTU3NDAsNyAmIzQzOzU3NzUsNyBAQCB2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuIFx0ICogcmVjZWl2ZSBwcm9jZXNzaW5nXG4gXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGllZWU4MDIxMV9yeF9saXN0KGh3LCBwdWJzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4mIzQzO1x0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfcHVic3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAoIW5hcGkpIHtcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc2Nhbi5jIGIvbmV0L21hYzgwMjExL3NjYW4uY1xuaW5kZXggZWVmZjIzMGJkOTA5Zi4uMzI0YzJiNmQ3Y2UxYiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9zY2FuLmNcbkBAIC05LDcgJiM0Mzs5LDcgQEBcbiAgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSBcdTAwM2NmbGFtaW5naWNlQHNvdXJtaWxrLm5ldFx1MDAzZVxuICAqIENvcHlyaWdodCAyMDEzLTIwMTUgIEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJIXG4gICogQ29weXJpZ2h0IDIwMTYtMjAxNyAgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxuLSAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbkBAIC0yMDQsMTIgJiM0MzsyMDQsMTAgQEAgaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiBcdFx0ICogYW4gaW5kaWNhdGlvbiBvbiB3aGljaCBvZiB0aGUgbGlua3MgdGhlIGZyYW1lIHdhcyByZWNlaXZlZFxuIFx0XHQgKi9cbiBcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnNjYW5fc2RhdGEtXHUwMDNldmlmKSkge1xuLVx0XHRcdGlmIChyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCkge1xuLVx0XHRcdFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkO1xuJiM0MztcdFx0XHRzOCBsaW5rX2lkID0gcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4gXG4tXHRcdFx0XHRsaW5rX2NvbmYgPVxuLVx0XHRcdFx0XHRyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS1cdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcbi1cdFx0XHR9XG4mIzQzO1x0XHRcdGxpbmtfY29uZiA9XG4mIzQzO1x0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0bGlua19jb25mID0gXHUwMDI2c2Nhbl9zZGF0YS1cdTAwM2V2aWYuYnNzX2NvbmY7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGRscy5jIGIvbmV0L21hYzgwMjExL3RkbHMuY1xuaW5kZXggZGMyZjY2MmZlNGM0Ni4uZTE3ZDQ5MmJlNTkwMiAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS90ZGxzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcbkBAIC0xMDY2LDcgJiM0MzsxMDY2LDcgQEAgaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0aWYgKGFjdGlvbl9jb2RlID09IFdMQU5fUFVCX0FDVElPTl9URExTX0RJU0NPVkVSX1JFUykge1xuLVx0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcbiYjNDM7XHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHN0YSwgNywgbGlua19pZCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IDNhMWUyYzllMTU2NWUuLjZmNTJlODg0MDIzNzEgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC02NDM2LDcgJiM0Mzs2NDM2LDggQEAgdm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQpXG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfdW5yZXNlcnZlX3RpZCk7XG4gXG4gdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuJiM0MztcdFx0XHRcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbiBcdFx0XHRcdCBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuQEAgLTY0ODgsMTIgJiM0Mzs2NDg5LDEzIEBAIHZvaWQgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuIFx0ICovXG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXHUwMDNlYmFuZCA9IGJhbmQ7XG4tXHRpZWVlODAyMTFfeG1pdChzZGF0YSwgTlVMTCwgc2tiKTtcbiYjNDM7XHRpZWVlODAyMTFfeG1pdChzZGF0YSwgc3RhLCBza2IpO1xuIFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gfVxuIFxuIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZClcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbiYjNDM7XHRcdFx0ICBpbnQgdGlkLCBpbnQgbGlua19pZClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY2hhbmN0eF9jb25mO1xuIFx0ZW51bSBubDgwMjExX2JhbmQgYmFuZDtcbkBAIC02NTE5LDcgJiM0Mzs2NTIxLDcgQEAgdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0YmFuZCA9IDA7XG4gXHR9XG4gXG4tXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCBsaW5rX2lkLCBiYW5kKTtcbiYjNDM7XHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA0NGYyYmFkMDg2NzA1Li40MzdiZWJjYzAyNzQ4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEwOTYsNiAmIzQzOzEwOTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XG4gXHRbTkw4MDIxMV9BVFRSX05QQ0FfUFVOQ1RfQklUTUFQXSA9XG4gXHRcdE5MQV9QT0xJQ1lfRlVMTF9SQU5HRShOTEFfVTMyLCBcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXG4gXHRbTkw4MDIxMV9BVFRSX1NUQV9EVU1QX0xJTktfU1RBVFNdID0geyAudHlwZSA9IE5MQV9GTEFHIH0sXG4mIzQzO1x0W05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxuIH07XG4gXG4gLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi9cbkBAIC0xNDg2MCw2ICYjNDM7MTQ4NjEsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0ICAgICEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX2lkKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuJiM0MztcdHBhcmFtcy5ub19zdGEgPVxuJiM0MztcdFx0bmxhX2dldF9mbGFnKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdKTtcbiYjNDM7XG4gXHRwYXJhbXMuYnVmID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKTtcbiBcdHBhcmFtcy5sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7XG4gXG5AQCAtMjIwMjQsNyAmIzQzOzIyMDI4LDkgQEAgaW50IG5sODAyMTFfc2VuZF9tZ210KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldixcbiBcdCAgICAoaW5mby1cdTAwM2VhY2tfdHN0YW1wIFx1MDAyNlx1MDAyNiBubGFfcHV0X3U2NF82NGJpdChtc2csXG4gXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1RYX0hXX1RJTUVTVEFNUCxcbiBcdFx0XHRcdFx0XHQgICBpbmZvLVx1MDAzZWFja190c3RhbXAsXG4tXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpKVxuJiM0MztcdFx0XHRcdFx0XHQgICBOTDgwMjExX0FUVFJfUEFEKSkgfHxcbiYjNDM7XHQgICAgKGluZm8tXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEpKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTU6Mjc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ210X3R4JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9saXN0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9uYXBpJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBob3cgcmVjZWl2ZWQgZnJhbWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbnMgYW5kIGxpbmtzIChNdWx0aS1MaW5rIE9wZXJhdGlvbikuIEl0IGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBjb3JlIFJYIGZ1bmN0aW9ucyAoYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCkgYW5kIG1vZGlmaWVzIHRoZSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBwYXRoIHRvIGhhbmRsZSBhIG5ldyBgbm9fc3RhYCBmbGFnLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODdmNGM5NDNjOWI1MmM3ZTk2NmU1NzAzMzkyYjk4MjdiODdjZWE2NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMgMTU6Mjc6NTUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMKaW5kZXggMzM0MjU3MDdjMDg0Mi4uZmJiM2QxOGY1NWRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguYwpAQCAtMjUwMCw3ICYjNDM7MjUwMCw3IEBAIHN0YXRpYyB2b2lkIGF0aDExa19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDExayAqYXIsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwCiAJICAgICEoaXNfbWNiYyAmYW1wOyZhbXA7IHJ4X3N0YXR1cy0mZ3Q7ZmxhZyAmYW1wOyBSWF9GTEFHX0RFQ1JZUFRFRCkpCiAJCXJ4X3N0YXR1cy0mZ3Q7ZmxhZyB8PSBSWF9GTEFHXzgwMjM7CiAKLQlpZWVlODAyMTFfcnhfbmFwaShhci0mZ3Q7aHcsIHB1YnN0YSwgbXNkdSwgbmFwaSk7CiYjNDM7CWllZWU4MDIxMV9yeF9uYXBpKGFyLSZndDtodywgcHVic3RhID8gJmFtcDtwdWJzdGEtJmd0O2RlZmxpbmsgOiBOVUxMLCBtc2R1LCBuYXBpKTsKIH0KIAogc3RhdGljIGJvb2wgYXRoMTFrX2RwX3J4X2NoZWNrX253aWZpX2hkcl9sZW5fdmFsaWQoc3RydWN0IGF0aDExa19iYXNlICphYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jCmluZGV4IDdkNWJlNzdiMDgxZjguLjFmYWYxODk2ZDBhYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uYwpAQCAtNTAzLDggJiM0Mzs1MDMsNiBAQCB2b2lkIGF0aDEya19kcF9tb25fcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzOwogCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGUgKmhlID0gTlVMTDsKIAotCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDA7Ci0KIAlpZiAoKHN0YXR1cy0mZ3Q7ZW5jb2RpbmcgPT0gUlhfRU5DX0hFKSAmYW1wOyZhbXA7ICEoc3RhdHVzLSZndDtmbGFnICZhbXA7IFJYX0ZMQUdfUkFESU9UQVBfSEUpICZhbXA7JmFtcDsKIAkgICAgIShzdGF0dXMtJmd0O2ZsYWcgJmFtcDsgUlhfRkxBR19TS0lQX01PTklUT1IpKSB7CiAJCWhlID0gc2tiX3B1c2gobXNkdSwgc2l6ZW9mKGtub3duKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMKaW5kZXggOGZhMGU5MGI0NTMxNi4uODQ3YWQyOGZkMzBiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYwpAQCAtMTM3NSw2ICYjNDM7MTM3NSw3IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjCiAJc3RydWN0IGF0aDEya19kcCAqZHAgPSBkcF9wZGV2LSZndDtkcDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGE7CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhID0gTlVMTDsKIAlzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKnBlZXI7CiAJc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gcnhfaW5mby0mZ3Q7cnhfc3RhdHVzOwpAQCAtMTM4NCw5ICYjNDM7MTM4NSwxOSBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1YwogCiAJcHVic3RhID0gcGVlciA/IHBlZXItJmd0O3N0YSA6IE5VTEw7CiAKLQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSAwOwotCWlmIChwdWJzdGEgJmFtcDsmYW1wOyBwdWJzdGEtJmd0O3ZhbGlkX2xpbmtzKQotCQlhdGgxMmtfaHdfc2V0X3J4X2xpbmtfaWQoZHAtJmd0O2h3X3BhcmFtcywgcGVlciwgcnhjYiwgc3RhdHVzKTsKJiM0MzsJaWYgKHB1YnN0YSkgewomIzQzOwkJaWYgKHB1YnN0YS0mZ3Q7dmFsaWRfbGlua3MpIHsKJiM0MzsJCQl1OCBsaW5rX2lkID0KJiM0MzsJCQkJYXRoMTJrX2h3X2dldF9yeF9saW5rX2lkKGRwLSZndDtod19wYXJhbXMsIHBlZXIsCiYjNDM7CQkJCQkJCSByeGNiLCBzdGF0dXMpOwomIzQzOwomIzQzOwkJCWlmIChsaW5rX2lkICZndDsgMCkKJiM0MzsJCQkJbGlua19wdWJzdGEgPQomIzQzOwkJCQkJcmN1X2RlcmVmZXJlbmNlKHB1YnN0YS0mZ3Q7bGlua1tsaW5rX2lkXSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWxpbmtfcHVic3RhID0gJmFtcDtwdWJzdGEtJmd0O2RlZmxpbms7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWF0aDEya19kYmcoZHAtJmd0O2FiLCBBVEgxMktfREJHX0RBVEEsCiAJCSAgICYjMzQ7cnggc2tiICVwIGxlbiAldSBwZWVyICVwTSAlZCAlcyBzbiAldSAlcyVzJXMlcyVzJXMlcyVzJXMlcyByYXRlX2lkeCAldSB2aHRfbnNzICV1IGZyZXEgJXUgYmFuZCAldSBmbGFnIDB4JXggZmNzLWVyciAlaSBtaWMtZXJyICVpIGFtc2R1LW1vcmUgJWlcbiYjMzQ7LApAQCAtMTQyMiw3ICYjNDM7MTQzMyw4IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjCiAKIAkvKiBUT0RPOiB0cmFjZSByeCBwYWNrZXQgKi8KIAotCWllZWU4MDIxMV9yeF9uYXBpKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBwdWJzdGEsIG1zZHUsIG5hcGkpOwomIzQzOwlpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsCiYjNDM7CQkJICBuYXBpKTsKIH0KIEVYUE9SVF9TWU1CT0woYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaAppbmRleCA0OWNmZDVkZmM3MGE2Li4yNjhmMGE4ZmQ0NmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oCkBAIC0yNDgsOSAmIzQzOzI0OCw5IEBAIHN0cnVjdCBhdGgxMmtfaHdfb3BzIHsKIAlib29sICgqZHBfc3JuZ19pc190eF9jb21wX3JpbmcpKGludCByaW5nX251bSk7CiAJYm9vbCAoKmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMpKHN0cnVjdCBhdGgxMmtfbGlua192aWYgKmFydmlmLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQpOwotCXZvaWQgKCpzZXRfcnhfbGlua19pZCkoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAotCQkJICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7CiYjNDM7CWludCAoKmdldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiYjNDM7CQkJICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKJiM0MzsJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTsKIH07CiAKIHN0YXRpYyBpbmxpbmUKQEAgLTI4MSwxMyAmIzQzOzI4MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfbWFjX2lkX3RvX3NybmdfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodywKLQkJCQkJICAgIHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKLQkJCQkJICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGF0aDEya19od19nZXRfcnhfbGlua19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAomIzQzOwkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKIHsKLQlpZiAoaHctJmd0O2h3X29wcy0mZ3Q7c2V0X3J4X2xpbmtfaWQpCi0JCWh3LSZndDtod19vcHMtJmd0O3NldF9yeF9saW5rX2lkKGRwX3BlZXIsIHJ4Y2IsIHN0YXR1cyk7CiYjNDM7CWlmIChody0mZ3Q7aHdfb3BzLSZndDtnZXRfcnhfbGlua19pZCkKJiM0MzsJCXJldHVybiBody0mZ3Q7aHdfb3BzLSZndDtnZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpOwomIzQzOwomIzQzOwlyZXR1cm4gLTE7CiB9CiAKIHN0cnVjdCBhdGgxMmtfZndfaWUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jCmluZGV4IDk1ZDg3ZGQ2Nzg3MmYuLjhiNzIyZWUwYWQ4ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMKQEAgLTIzMTcsMTcgJiM0MzsyMzE3LDE2IEBAIGF0aDEya193aWZpN19kcF9yeGRlc2NfbXBkdV92YWxpZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLAogCXJldHVybiB0bHZfdGFnID09IEhBTF9SWF9NUERVX1NUQVJUOwogfQogCi12b2lkCi1hdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiYjNDM7aW50CiYjNDM7YXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAogCQkJCSAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKQogewotCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDE7Ci0Jc3RhdHVzLSZndDtsaW5rX2lkID0gZHBfcGVlci0mZ3Q7aHdfbGlua3NbcnhjYi0mZ3Q7aHdfbGlua19pZF07CiYjNDM7CXJldHVybiBkcF9wZWVyLSZndDtod19saW5rc1tyeGNiLSZndDtod19saW5rX2lkXTsKIH0KIAotdm9pZAotYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAomIzQzO2ludAomIzQzO2F0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKIAkJCQkgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cykKIHsKQEAgLTIzNDEsMTAgJiM0MzsyMzQwLDkgQEAgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAogCWxpbmtzX21hcCA9IFJFQURfT05DRShkcF9wZWVyLSZndDtsaW5rX3BlZXJzX21hcCk7CiAJZm9yX2VhY2hfc2V0X2JpdChpLCAmYW1wO2xpbmtzX21hcCwgQVRIMTJLX05VTV9NQVhfTElOS1MpIHsKIAkJbGlua19wZWVyID0gcmN1X2RlcmVmZXJlbmNlKGRwX3BlZXItJmd0O2xpbmtfcGVlcnNbaV0pOwotCQlpZiAobGlua19wZWVyICZhbXA7JmFtcDsgbGlua19wZWVyLSZndDtwZWVyX2lkID09IHJ4Y2ItJmd0O3BlZXJfaWQpIHsKLQkJCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDE7Ci0JCQlzdGF0dXMtJmd0O2xpbmtfaWQgPSBsaW5rX3BlZXItJmd0O2xpbmtfaWQ7Ci0JCQlyZXR1cm47Ci0JCX0KJiM0MzsJCWlmIChsaW5rX3BlZXIgJmFtcDsmYW1wOyBsaW5rX3BlZXItJmd0O3BlZXJfaWQgPT0gcnhjYi0mZ3Q7cGVlcl9pZCkKJiM0MzsJCQlyZXR1cm4gbGlua19wZWVyLSZndDtsaW5rX2lkOwogCX0KJiM0MzsKJiM0MzsJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oCmluZGV4IDFkM2E0Nzg4YTJkZDkuLmQ2ODQ4OWZmN2IwMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmgKQEAgLTU3LDEwICYjNDM7NTcsMTAgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsCiAJCQkJICBzdHJ1Y3QgaGFsX3J4X2Rlc2MgKnJ4X2Rlc2MpOwogaW50IGF0aDEya193aWZpN19kcF9yeF90aWRfZGVsZXRlX2hhbmRsZXIoc3RydWN0IGF0aDEya19iYXNlICphYiwKIAkJCQkJICBzdHJ1Y3QgYXRoMTJrX2RwX3J4X3RpZF9yeHEgKnJ4X3RpZCk7Ci12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKLQkJCQkJICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCi0JCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTsKLXZvaWQgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLAotCQkJCQkgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiwKLQkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpOwomIzQzO2ludCBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLAomIzQzOwkJCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7CiYjNDM7aW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlciwKJiM0MzsJCQkJCSAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jCmluZGV4IDRjMTExOWVkY2FlZGMuLjNjZDM1MTQ2NDI5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmMKQEAgLTE1OCw3ICYjNDM7MTU4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjbjkyNzRfb3BzID0gewogCS5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl9xY245Mjc0LAogCS5kcF9zcm5nX2lzX3R4X2NvbXBfcmluZyA9IGF0aDEya193aWZpN19kcF9zcm5nX2lzX2NvbXBfcmluZ19xY245Mjc0LAogCS5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfcWNuOTI3NCwKLQkuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NCwKJiM0MzsJLmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgd2NuNzg1MF9vcHMgPSB7CkBAIC0xNjksNyAmIzQzOzE2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB3Y243ODUwX29wcyA9IHsKIAkuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3Jfd2NuNzg1MCwKIAkuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCwKIAkuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3djbjc4NTAsCi0JLnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAsCiYjNDM7CS5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0gewpAQCAtMTgwLDcgJiM0MzsxODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNjMjA3Ml9vcHMgPSB7CiAJLmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3djbjc4NTAsCiAJLmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsCiAJLmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY193Y243ODUwLAotCS5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwLAomIzQzOwkuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MCwKIH07CiAKICNkZWZpbmUgQVRIMTJLX1RYX1JJTkdfTUFTS18wIDB4MQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMKaW5kZXggMmI3MDdmZmMxYTIwZi4uNWQ2MmM0Yzg2MWJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jCkBAIC03MjYwLDcgJiM0Mzs3MjYwLDYgQEAgc3RhdGljIHZvaWQgYXRoMTJrX21nbXRfcnhfZXZlbnQoc3RydWN0IGF0aDEya19iYXNlICphYiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlzdHJ1Y3QgYXRoMTJrX3dtaV9tZ210X3J4X2FyZyByeF9ldiA9IHt9OwogCXN0cnVjdCBhdGgxMmsgKmFyOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhID0gTlVMTDsKIAlzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCWJvb2wgaXNfNGFkZHJfbnVsbF9wa3Q7CkBAIC03MzYyLDExICYjNDM7NzM2MSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KLQkJcHVic3RhID0gcGVlci0mZ3Q7c3RhOwotCQlpZiAocHVic3RhICZhbXA7JmFtcDsgcHVic3RhLSZndDt2YWxpZF9saW5rcykgewotCQkJc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gMTsKLQkJCXN0YXR1cy0mZ3Q7bGlua19pZCA9IHBlZXItJmd0O2xpbmtfaWQ7Ci0JCX0KIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtkcC0mZ3Q7ZHBfbG9jayk7CiAJCWdvdG8gc2VuZF9yeDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jCmluZGV4IDk2MTAyZDJhZjJjZjkuLmM0NWM0NzMzNzUwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jCkBAIC03LDcgJiM0Mzs3LDggQEAKICNpbmNsdWRlICYjMzQ7aGNtZC5oJiMzNDsKIAogc3RhdGljIHZvaWQKLWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzO2l3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSwKIAkJCSAgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkgICAgICAgc3RydWN0IGl3bF9tbGRfYmFpZF9kYXRhICpiYWlkX2RhdGEsCiAJCQkgICAgICAgc3RydWN0IGl3bF9tbGRfcmVvcmRlcl9idWZmZXIgKnJlb3JkZXJfYnVmLApAQCAtMzIsNyAmIzQzOzMzLDcgQEAgaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShza2JfbGlzdCkpKSB7CiAJCQlpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLAogCQkJCQkJCXJlb3JkZXJfYnVmLSZndDtxdWV1ZSwKLQkJCQkJCQlzdGEpOwomIzQzOwkJCQkJCQlsaW5rX3N0YSk7CiAJCQlyZW9yZGVyX2J1Zi0mZ3Q7bnVtX3N0b3JlZC0tOwogCQl9CiAJfQpAQCAtNzQsNyAmIzQzOzc1LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF9yZWxlYXNlX2ZyYW1lc19mcm9tX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsCiAKIAlyZW9yZGVyX2J1ZiA9ICZhbXA7YmFfZGF0YS0mZ3Q7cmVvcmRlcl9idWZbcXVldWVdOwogCi0JaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtJmd0O3N0YSwgbmFwaSwgYmFfZGF0YSwKJiM0MzsJaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEsIG5hcGksIGJhX2RhdGEsCiAJCQkJICAgICAgIHJlb3JkZXJfYnVmLCBuc3NuKTsKIG91dF91bmxvY2s6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xODAsNyAmIzQzOzE4MSw3IEBAIHZvaWQgaXdsX21sZF9kZWxfYmEoc3RydWN0IGl3bF9tbGQgKm1sZCwgaW50IHF1ZXVlLAogCXJlb3JkZXJfYnVmID0gJmFtcDtiYV9kYXRhLSZndDtyZW9yZGVyX2J1ZltxdWV1ZV07CiAKIAkvKiByZWxlYXNlIGFsbCBmcmFtZXMgdGhhdCBhcmUgaW4gdGhlIHJlb3JkZXIgYnVmZmVyIHRvIHRoZSBzdGFjayAqLwotCWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLSZndDtzdGEsIE5VTEwsCiYjNDM7CWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBOVUxMLAogCQkJCSAgICAgICBiYV9kYXRhLCByZW9yZGVyX2J1ZiwKIAkJCQkgICAgICAgaWVlZTgwMjExX3NuX2FkZChyZW9yZGVyX2J1Zi0mZ3Q7aGVhZF9zbiwKIAkJCQkJCQliYV9kYXRhLSZndDtidWZfc2l6ZSkpOwpAQCAtMTkzLDcgJiM0MzsxOTQsNyBAQCB2b2lkIGl3bF9tbGRfZGVsX2JhKHN0cnVjdCBpd2xfbWxkICptbGQsIGludCBxdWV1ZSwKICAqLwogZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0CiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAotCQlpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiYjNDM7CQlpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpOwpAQCAtMjI4LDEyICYjNDM7MjI5LDEyIEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCXJldHVybiBJV0xfTUxEX1BBU1NfU0tCOwogCiAJLyogbm8gc3RhIHlldCAqLwotCWlmIChJV0xfRldfQ0hFQ0sobWxkLCAhc3RhLAomIzQzOwlpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIWxpbmtfc3RhLAogCQkJICYjMzQ7R290IHZhbGlkIEJBSUQgd2l0aG91dCBhIHZhbGlkIHN0YXRpb24gYXNzaWduZWQgLSAlZFxuJiMzNDssCiAJCQkgYmFpZCkpCiAJCXJldHVybiBJV0xfTUxEX1BBU1NfU0tCOwogCi0JbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTsKJiM0MzsJbWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEobGlua19zdGEtJmd0O3N0YSk7CiAKIAkvKiBub3QgYSBkYXRhIHBhY2tldCAqLwogCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkgfHwKQEAgLTMyNCw3ICYjNDM7MzI1LDcgQEAgaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkgKiB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGZyYW1lIHJlbGVhc2Ugbm90aWZpY2F0aW9uIGFycml2ZXMuCiAJICovCiAJaWYgKCFhbXNkdSB8fCBsYXN0X3N1YmZyYW1lKQotCQlpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBzdGEsIG5hcGksIGJhaWRfZGF0YSwKJiM0MzsJCWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYWlkX2RhdGEsCiAJCQkJCSAgICAgICBidWZmZXIsIG5zc24pOwogCWVsc2UgaWYgKGJ1ZmZlci0mZ3Q7bnVtX3N0b3JlZCA9PSAxKQogCQlidWZmZXItJmd0O2hlYWRfc24gPSBuc3NuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaAppbmRleCA2NTFjODBkMWM3Y2RhLi5jNmNkNWZhMjE5YmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaApAQCAtMSw2ICYjNDM7MSw2IEBACiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UgKi8KIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQsIDIwMjYgSW50ZWwgQ29ycG9yYXRpb24KICAqLwogI2lmbmRlZiBfX2l3bF9hZ2dfaF9fCiAjZGVmaW5lIF9faXdsX2FnZ19oX18KQEAgLTEwNiw3ICYjNDM7MTA2LDcgQEAgaW50IGl3bF9tbGRfYW1wZHVfcnhfc3RvcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCiBlbnVtIGl3bF9tbGRfcmVvcmRlcl9yZXN1bHQKIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCi0JCWludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKJiM0MzsJCWludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKTsKIAogdm9pZCBpd2xfbWxkX2hhbmRsZV9mcmFtZV9yZWxlYXNlX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYwppbmRleCAyNjk0MzlkNzg5ZjQ2Li4wMmJkZjZjY2JjZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMKQEAgLTQ3LDcgJiM0Mzs0Nyw4IEBAIGl3bF9tbGRfZmlsbF9waHlfZGF0YV9mcm9tX21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSAgIGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKJiM0MzsJCQkJICAgaW50IHF1ZXVlLAomIzQzOwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwpAQCAtNzEsMTMgJiM0Mzs3MiwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiAwOwogCiAJLyogaWYgd2UgYXJlIGhlcmUgLSB0aGlzIGZvciBzdXJlIGlzIGVpdGhlciBDQ01QIG9yIEdDTVAgKi8KLQlpZiAoIXN0YSkgewomIzQzOwlpZiAoIWxpbmtfc3RhKSB7CiAJCUlXTF9ERUJVR19EUk9QKG1sZCwKIAkJCSAgICAgICAmIzM0O2V4cGVjdGVkIGh3LWRlY3J5cHRlZCB1bmljYXN0IGZyYW1lIGZvciBzdGF0aW9uXG4mIzM0Oyk7CiAJCXJldHVybiAtMTsKIAl9CiAKLQltbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOwomIzQzOwltbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS0mZ3Q7c3RhKTsKIAogCWV4dGl2ID0gKHU4ICopaGRyICYjNDM7IGllZWU4MDIxMV9oZHJsZW4oaGRyLSZndDtmcmFtZV9jb250cm9sKTsKIAlrZXlpZHggPSBleHRpdlszXSAmZ3Q7Jmd0OyA2OwpAQCAtMTE5LDE3ICYjNDM7MTIwLDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHZvaWQgaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLAogCQkJCSAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKJiM0MzsJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSkKIHsKIAlLVU5JVF9TVEFUSUNfU1RVQl9SRURJUkVDVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExLAotCQkJCSAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTsKJiM0MzsJCQkJICAgbWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7CiAKLQlpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIHN0YSkpKSB7CiYjNDM7CWlmICh1bmxpa2VseShpd2xfbWxkX2NoZWNrX3BuKG1sZCwgc2tiLCBxdWV1ZSwgbGlua19zdGEpKSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwogCX0KIAotCWllZWU4MDIxMV9yeF9uYXBpKG1sZC0mZ3Q7aHcsIHN0YSwgc2tiLCBuYXBpKTsKJiM0MzsJaWVlZTgwMjExX3J4X25hcGkobWxkLSZndDtodywgbGlua19zdGEsIHNrYiwgbmFwaSk7CiB9CiBFWFBPUlRfU1lNQk9MX0lGX0lXTFdJRklfS1VOSVQoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSk7CiAKQEAgLTE3MjgsNyAmIzQzOzE3MjksNyBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX3VwZGF0ZV9sYXN0X3J4X3RpbWVzdGFtcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCB1OCBiYWlkKQogICogU2V0cyAqZHJvcCB0byB0cnVlIGlmIHRoZSBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQuCiAgKiBSZXR1cm5zIHRoZSBzdGF0aW9uIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4KICAqLwotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhICoKJiM0MztzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqCiBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgY29uc3Qgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKm1wZHVfZGVzYywKQEAgLTE3NjQsMTEgJiM0MzsxNzY1LDYgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCiAJcnhfc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiAKLQlpZiAobGlua19zdGEgJmFtcDsmYW1wOyBzdGEtJmd0O3ZhbGlkX2xpbmtzKSB7Ci0JCXJ4X3N0YXR1cy0mZ3Q7bGlua192YWxpZCA9IHRydWU7Ci0JCXJ4X3N0YXR1cy0mZ3Q7bGlua19pZCA9IGxpbmtfc3RhLSZndDtsaW5rX2lkOwotCX0KLQogCS8qIGZpbGwgY2hlY2tzdW0gKi8KIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLSZndDtmcmFtZV9jb250cm9sKSAmYW1wOyZhbXA7CiAJICAgIHBrdC0mZ3Q7bGVuX25fZmxhZ3MgJmFtcDsgY3B1X3RvX2xlMzIoRkhfUlNDU1JfUlBBX0VOKSkgewpAQCAtMTgwMywxMCAmIzQzOzE3OTksMTAgQEAgaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCQkJCSAgICBxdWV1ZSk7CiAJfQogCi0JcmV0dXJuIHN0YTsKJiM0MzsJcmV0dXJuIGxpbmtfc3RhOwogfQogCi1zdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiYjNDM7c3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsCiAJCQkJdTMyIG1wZHVfc3RhdHVzLApAQCAtMTgyMCw3ICYjNDM7MTgxNiw2IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXk7CiAJY29uc3QgdTggKmZyYW1lID0gKHZvaWQgKiloZHI7CiAJY29uc3QgdTggKm1taWU7Ci0JdTggbGlua19pZDsKIAogCWlmICgobXBkdV9zdGF0dXMgJmFtcDsgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19NQVNLKSA9PQogCSAgICAgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19OT05FKQpAQCAtMTgzNiwxMCAmIzQzOzE4MzEsMTAgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCWlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItJmd0O2ZyYW1lX2NvbnRyb2wpKQogCQlyZXR1cm4gMDsKIAotCWlmICghc3RhKQomIzQzOwlpZiAoIWxpbmtfc3RhKQogCQlyZXR1cm4gLTE7CiAKLQltbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOwomIzQzOwltbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS0mZ3Q7c3RhKTsKIAltbGRfdmlmID0gaXdsX21sZF92aWZfZnJvbV9tYWM4MDIxMShtbGRfc3RhLSZndDt2aWYpOwogCiAJLyoga2V5IG1pc21hdGNoIC0gd2lsbCBhbHNvIHJlcG9ydCAhTUlDX09LIGJ1dCB3ZSBzaG91bGRuJiMzOTt0IGNvdW50IGl0ICovCkBAIC0xODUzLDggJiM0MzsxODQ4LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQlyZXR1cm4gMDsKIAl9CiAKLQlsaW5rX2lkID0gcnhfc3RhdHVzLSZndDtsaW5rX3ZhbGlkID8gcnhfc3RhdHVzLSZndDtsaW5rX2lkIDogMDsKLQlsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtJmd0O2xpbmtbbGlua19pZF0pOwomIzQzOwlsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtJmd0O2xpbmtbbGlua19zdGEtJmd0O2xpbmtfaWRdKTsKIAlpZiAoV0FSTl9PTl9PTkNFKCFsaW5rKSkKIAkJcmV0dXJuIC0xOwogCkBAIC0xOTA1LDcgJiM0MzsxODk5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogfQogCiBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiYjNDM7CQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKIAkJCSAgICAgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MsIGludCBxdWV1ZSwKQEAgLTE5MTUsNyAmIzQzOzE5MDksNyBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsCiAKIAlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLSZndDtmcmFtZV9jb250cm9sKSAmYW1wOyZhbXA7CiAJCSAgICAgIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkpKQotCQlyZXR1cm4gaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLAomIzQzOwkJcmV0dXJuIGl3bF9tbGRfcnhfbWdtdF9wcm90KGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgc3RhdHVzLAogCQkJCQkgICAgbGUxNl90b19jcHUoZGVzYy0mZ3Q7bXBkdV9sZW4pKTsKIAogCWlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLSZndDtmcmFtZV9jb250cm9sKSB8fApAQCAtMjAyMyw3ICYjNDM7MjAxNyw3IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKIAlzdHJ1Y3QgaXdsX21sZF9yeF9waHlfZGF0YSBwaHlfZGF0YSA9IHt9OwogCXN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MgPSAodm9pZCAqKXBrdC0mZ3Q7ZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc2l6ZV90IG1wZHVfZGVzY19zaXplID0gc2l6ZW9mKCptcGR1X2Rlc2MpOwpAQCAtMjA4Niw3ICYjNDM7MjA4MCw4IEBAIHZvaWQgaXdsX21sZF9yeF9tcGR1KHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLCAmYW1wO2Ryb3ApOwomIzQzOwlsaW5rX3N0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLAomIzQzOwkJCQkgICAgICAgJmFtcDtkcm9wKTsKIAlpZiAoZHJvcCkKIAkJZ290byBkcm9wOwogCkBAIC0yMTI3LDcgJiM0MzsyMTIyLDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCiAJaXdsX21sZF9yeF9maWxsX3N0YXR1cyhtbGQsIGxpbmtfaWQsIGhkciwgc2tiLCAmYW1wO3BoeV9kYXRhKTsKIAotCWlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIHN0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsCiYjNDM7CWlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIGxpbmtfc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSwKIAkJCSAgICAgIGxlMzJfdG9fY3B1KHBrdC0mZ3Q7bGVuX25fZmxhZ3MpLCAmYW1wO2NyeXB0b19sZW4pKQogCQlnb3RvIGRyb3A7CiAKQEAgLTIxNDAsNyAmIzQzOzIxMzUsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJaWYgKGl3bF9tbGRfdGltZV9zeW5jX2ZyYW1lKG1sZCwgc2tiLCBoZHItJmd0O2FkZHIyKSkKIAkJZ290byBvdXQ7CiAKLQlyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTsKJiM0MzsJcmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBuYXBpLCBxdWV1ZSwgbGlua19zdGEsIHNrYiwKJiM0MzsJCQkJICAgICAgbXBkdV9kZXNjKTsKIAlzd2l0Y2ggKHJlb3JkZXJfcmVzKSB7CiAJY2FzZSBJV0xfTUxEX1BBU1NfU0tCOgogCQlicmVhazsKQEAgLTIxNTMsNyAmIzQzOzIxNDksNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTsKJiM0MzsJaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShtbGQsIG5hcGksIHNrYiwgcXVldWUsIGxpbmtfc3RhKTsKIAogCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaAppbmRleCA1NzNiODljM2M5YzYxLi5iMDhjNWFkZTNkYjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmgKQEAgLTY5LDcgJiM0Mzs2OSw3IEBAIHZvaWQgaXdsX21sZF9oYW5kbGVfcnNjX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsCiB2b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCwKIAkJCQkgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOwomIzQzOwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKTsKIAogdm9pZCBpd2xfbWxkX2hhbmRsZV9waHlfYWlyX3NuaWZmZXJfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCwKIAkJCQkJICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jCmluZGV4IDI5YjAyNDhjZWMzZGYuLmU5ZWZlMjk5NmYwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jCkBAIC0yLDcgJiM0MzsyLDcgQEAKIC8qCiAgKiBLVW5pdCB0ZXN0cyBmb3IgY2hhbm5lbCBoZWxwZXIgZnVuY3Rpb25zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvbgogICovCiAjaW5jbHVkZSAmbHQ7a3VuaXQvdGVzdC5oJmd0OwogI2luY2x1ZGUgJmx0O2t1bml0L3N0YXRpY19zdHViLmgmZ3Q7CkBAIC00NDEsNyAmIzQzOzQ0MSw3IEBAIHN0YXRpYyB2b2lkCiBmYWtlX2l3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCwKIAkJCQkgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiYjNDM7CQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpCiB7CiAJX19za2JfcXVldWVfdGFpbCgmYW1wO2dfcmVsZWFzZWRfc2ticywgc2tiKTsKIAlnX251bV9yZWxlYXNlZF9za2JzJiM0MzsmIzQzOzsKQEAgLTYzMCw3ICYjNDM7NjMwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9yZW9yZGVyX2J1ZmZlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJbXBkdV9kZXNjID0gc2V0dXBfbXBkdV9kZXNjKCk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JcmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7CiYjNDM7CXJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgTlVMTCwgUVVFVUUsICZhbXA7c3RhLSZndDtkZWZsaW5rLCBza2IsCiYjNDM7CQkJCSAgICAgIG1wZHVfZGVzYyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlLVU5JVF9BU1NFUlRfRVEodGVzdCwgcmVvcmRlcl9yZXMsIHBhcmFtLSZndDtleHBlY3RlZC5yZW9yZGVyX3Jlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYwppbmRleCBhYjFlYjJlYjBjM2NkLi44YzE5N2EwOTBjMmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMKQEAgLTkwLDcgJiM0Mzs5MCw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSwKIAkJCQlmcmFnbGVuLCByeGItJmd0O3RydWVzaXplKTsKIAl9CiAKLQlpZWVlODAyMTFfcnhfbmFwaShtdm0tJmd0O2h3LCBzdGEsIHNrYiwgbmFwaSk7CiYjNDM7CWllZWU4MDIxMV9yeF9uYXBpKG12bS0mZ3Q7aHcsIHN0YSA/ICZhbXA7c3RhLSZndDtkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYwppbmRleCA3ZjBiNGY1ZGFhMjE0Li44YzQwMDlkM2EwMGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jCkBAIC0xLDYgJiM0MzsxLDYgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZQogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE4LTIwMjUgSW50ZWwgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBJbnRlbCBNb2JpbGUgQ29tbXVuaWNhdGlvbnMgR21iSAogICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgSW50ZWwgRGV1dHNjaGxhbmQgR21iSAogICovCkBAIC0yNDMsNyAmIzQzOzI0Myw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSwKIAkJcmV0dXJuOwogCX0KIAotCWllZWU4MDIxMV9yeF9uYXBpKG12bS0mZ3Q7aHcsIHN0YSwgc2tiLCBuYXBpKTsKJiM0MzsJaWVlZTgwMjExX3J4X25hcGkobXZtLSZndDtodywgc3RhID8gJmFtcDtzdGEtJmd0O2RlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpOwogfQogCiBzdGF0aWMgYm9vbCBpd2xfbXZtX3VzZWRfYXZlcmFnZV9lbmVyZ3koc3RydWN0IGl3bF9tdm0gKm12bSwKQEAgLTI1MjgsNyAmIzQzOzI1MjgsNyBAQCB2b2lkIGl3bF9tdm1fcnhfbW9uaXRvcl9ub19kYXRhKHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWVlZTgwMjExX3J4X25hcGkobXZtLSZndDtodywgc3RhLCBza2IsIG5hcGkpOwomIzQzOwlpZWVlODAyMTFfcnhfbmFwaShtdm0tJmd0O2h3LCBzdGEgPyAmYW1wO3N0YS0mZ3Q7ZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYwppbmRleCBhYmJlNjVjYmNkODllLi4zZGEwNmE1NTkxM2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jCkBAIC0xMjU1LDcgJiM0MzsxMjU1LDcgQEAgRVhQT1JUX1NZTUJPTChtdDc2X3J4X3NpZ25hbCk7CiBzdGF0aWMgdm9pZAogbXQ3Nl9yeF9jb252ZXJ0KHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICoqaHcsCi0JCXN0cnVjdCBpZWVlODAyMTFfc3RhICoqc3RhKQomIzQzOwkJc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqKmxpbmtfc3RhKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gbXQ3Nl9za2JfZ2V0X2hkcihza2IpOwpAQCAtMTMwMiwxMSAmIzQzOzEzMDIsMTUgQEAgbXQ3Nl9yeF9jb252ZXJ0KHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgICBzaXplb2YobXN0YXQuY2hhaW5fc2lnbmFsKSk7CiAKIAlpZiAobXN0YXQud2NpZCkgewotCQlzdGF0dXMtJmd0O2xpbmtfdmFsaWQgPSBtc3RhdC53Y2lkLSZndDtsaW5rX3ZhbGlkOwotCQlzdGF0dXMtJmd0O2xpbmtfaWQgPSBtc3RhdC53Y2lkLSZndDtsaW5rX2lkOwomIzQzOwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpOwomIzQzOwomIzQzOwkJaWYgKG1zdGF0LndjaWQtJmd0O2xpbmtfdmFsaWQpCiYjNDM7CQkJKmxpbmtfc3RhID0KJiM0MzsJCQkJcmN1X2RlcmVmZXJlbmNlKHN0YS0mZ3Q7bGlua1ttc3RhdC53Y2lkLSZndDtsaW5rX2lkXSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJKmxpbmtfc3RhID0gJmFtcDtzdGEtJmd0O2RlZmxpbms7CiAJfQogCi0JKnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpOwogCSpodyA9IG10NzZfcGh5X2h3KGRldiwgbXN0YXQucGh5X2lkeCk7CiB9CiAKQEAgLTE1MzAsNyAmIzQzOzE1MzQsNyBAQCBtdDc2X2NoZWNrX3N0YShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLAogCQkgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDsKIAlMSVNUX0hFQUQobGlzdCk7CkBAIC0xNTQxLDggJiM0MzsxNTQ1LDggQEAgdm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsCiAKIAkJbXQ3Nl9jaGVja19jY21wX3BuKHNrYik7CiAJCXNrYl9zaGluZm8oc2tiKS0mZ3Q7ZnJhZ19saXN0ID0gTlVMTDsKLQkJbXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCAmYW1wO2h3LCAmYW1wO3N0YSk7Ci0JCWllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgJmFtcDtsaXN0KTsKJiM0MzsJCW10NzZfcnhfY29udmVydChkZXYsIHNrYiwgJmFtcDtodywgJmFtcDtsaW5rX3N0YSk7CiYjNDM7CQlpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgJmFtcDtsaXN0KTsKIAogCQkvKiBzdWJzZXF1ZW50IGFtc2R1IGZyYW1lcyAqLwogCQl3aGlsZSAobnNrYikgewpAQCAtMTU1MCw4ICYjNDM7MTU1NCw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLAogCQkJbnNrYiA9IG5za2ItJmd0O25leHQ7CiAJCQlza2ItJmd0O25leHQgPSBOVUxMOwogCi0JCQltdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsICZhbXA7aHcsICZhbXA7c3RhKTsKLQkJCWllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgJmFtcDtsaXN0KTsKJiM0MzsJCQltdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsICZhbXA7aHcsICZhbXA7bGlua19zdGEpOwomIzQzOwkJCWllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCAmYW1wO2xpc3QpOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZhbXA7ZGV2LSZndDtyeF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmMKaW5kZXggMzk3ZWJiZmNhYzA5YS4uNDU0ZDg3NmFlYjg4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmMKQEAgLTMwNzMsMTAgJiM0MzszMDczLDggQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywKIAlzdHJ1Y3QgcnR3ODlfdmlmICpydHd2aWYgPSB2aWZfdG9fcnR3dmlmKHZpZik7CiAJc3RydWN0IHJ0dzg5X3J4X2Rlc2NfaW5mbyAqZGVzY19pbmZvID0gaXRlcl9kYXRhLSZndDtkZXNjX2luZm87CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGl0ZXJfZGF0YS0mZ3Q7c2tiOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLSZndDtkYXRhOwogCXN0cnVjdCBydHc4OV9yeF9waHlfcHBkdSAqcGh5X3BwZHUgPSBpdGVyX2RhdGEtJmd0O3BoeV9wcGR1OwotCWJvb2wgaXNfbWxkID0gaWVlZTgwMjExX3ZpZl9pc19tbGQodmlmKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZjsKIAlzdHJ1Y3QgcnR3ODlfdmlmX2xpbmsgKnJ0d3ZpZl9saW5rOwogCWNvbnN0IHU4ICpic3NpZCA9IGl0ZXJfZGF0YS0mZ3Q7YnNzaWQ7CkBAIC0zMTEwLDExICYjNDM7MzEwOCw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsCiAJaWYgKCFldGhlcl9hZGRyX2VxdWFsKHRhcmdldF9ic3NpZCwgYnNzaWQpKQogCQlnb3RvIG91dDsKIAotCWlmIChpc19tbGQpIHsKLQkJcnhfc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gdHJ1ZTsKLQkJcnhfc3RhdHVzLSZndDtsaW5rX2lkID0gcnR3dmlmX2xpbmstJmd0O2xpbmtfaWQ7Ci0JfQotCiAJYmIgPSBydHc4OV9nZXRfYmJfY3R4KHJ0d2RldiwgcnR3dmlmX2xpbmstJmd0O3BoeV9pZHgpOwogCXBrdF9zdGF0ID0gJmFtcDtiYi0mZ3Q7Y3VyX3BrdF9zdGF0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCmluZGV4IDAyYjZkODFjY2NkMTEuLmEwZDUxOWNkOWM0ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jCkBAIC0xODgwLDkgJiM0MzsxODgwLDYgQEAgc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fcngoc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGEsCiAJCQkJc3AtJmd0O2FjdGl2ZV9saW5rc19yeCAmYW1wOz0gfkJJVChsaW5rX2lkKTsKIAkJCWVsc2UKIAkJCQlzcC0mZ3Q7YWN0aXZlX2xpbmtzX3J4IHw9IEJJVChsaW5rX2lkKTsKLQotCQkJcnhfc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gdHJ1ZTsKLQkJCXJ4X3N0YXR1cy0mZ3Q7bGlua19pZCA9IGxpbmtfaWQ7CiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggOTdjMTZkNGZmMTI3MS4uNDM2NDc4ZGFmNTU5NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC00MDA5LDYgJiM0Mzs0MDA5LDcgQEAgc3RydWN0IGNmZzgwMjExX3VwZGF0ZV9mdF9pZXNfcGFyYW1zIHsKICAqIEBsaW5rX2lkOiBmb3IgTUxPLCB0aGUgbGluayBJRCB0byB0cmFuc21pdCBvbiwgLTEgaWYgbm90IGdpdmVuOyBub3RlCiAgKgl0aGF0IHRoZSBsaW5rIElEIGlzbiYjMzk7dCB2YWxpZGF0ZWQgKG11Y2gpLCBpdCYjMzk7cyBpbiByYW5nZSBidXQgdGhlCiAgKglsaW5rIG1pZ2h0IG5vdCBleGlzdCAob3IgYmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIgU1RBKQomIzQzOyAqIEBub19zdGE6IHNldCBpZiB0aGUgZnJhbWUgc2hvdWxkIG5vdCBiZSB0cmFuc21pdHRlZCB1c2luZyBhbiBleGlzdGluZyBTVEEKICAqLwogc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CkBAIC00MDIxLDYgJiM0Mzs0MDIyLDcgQEAgc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHsKIAlpbnQgbl9jc2Ffb2Zmc2V0czsKIAljb25zdCB1MTYgKmNzYV9vZmZzZXRzOwogCWludCBsaW5rX2lkOwomIzQzOwlib29sIG5vX3N0YTsKIH07CiAKIC8qKgpAQCAtOTUwMSw2ICYjNDM7OTUwMyw3IEBAIHZvaWQgY2ZnODAyMTFfY29ubl9mYWlsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLAogICogQGZsYWdzOiBmbGFncywgYXMgZGVmaW5lZCBpbiAmYW1wO2VudW0gbmw4MDIxMV9yeG1nbXRfZmxhZ3MKICAqIEByeF90c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBmcmFtZSBSWCBpbiBuYW5vc2Vjb25kcwogICogQGFja190c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBhY2sgVFggaW4gbmFub3NlY29uZHMKJiM0MzsgKiBAbm9fc3RhOiBzZXQgaWYgbm8gc3RhdGlvbiBpcyBrbm93biBmb3IgdGhlIGZyYW1lIChyZWxldmFudCBmb3IgTUxEKQogICovCiBzdHJ1Y3QgY2ZnODAyMTFfcnhfaW5mbyB7CiAJaW50IGZyZXE7CkBAIC05NTEyLDYgJiM0Mzs5NTE1LDcgQEAgc3RydWN0IGNmZzgwMjExX3J4X2luZm8gewogCXUzMiBmbGFnczsKIAl1NjQgcnhfdHN0YW1wOwogCXU2NCBhY2tfdHN0YW1wOwomIzQzOwlib29sIG5vX3N0YTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKaW5kZXggOWQxZmFjNmU4MDgyOS4uN2FhZTcyOGU5NmQ4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC0xNzcwLDEwICYjNDM7MTc3MCw5IEBAIGVudW0gbWFjODAyMTFfcnhfZW5jb2RpbmcgewogICogQGFtcGR1X3JlZmVyZW5jZTogQS1NUERVIHJlZmVyZW5jZSBudW1iZXIsIG11c3QgYmUgYSBkaWZmZXJlbnQgdmFsdWUgZm9yCiAgKgllYWNoIEEtTVBEVSBidXQgdGhlIHNhbWUgZm9yIGVhY2ggc3ViZnJhbWUgd2l0aGluIG9uZSBBLU1QRFUKICAqIEB6ZXJvX2xlbmd0aF9wc2R1X3R5cGU6IHJhZGlvdGFwIHR5cGUgb2YgdGhlIDAtbGVuZ3RoIFBTRFUKLSAqIEBsaW5rX3ZhbGlkOiBpZiB0aGUgbGluayB3aGljaCBpcyBpZGVudGlmaWVkIGJ5IEBsaW5rX2lkIGlzIHZhbGlkLiBUaGlzIGZsYWcKLSAqCWlzIHNldCBvbmx5IHdoZW4gY29ubmVjdGlvbiBpcyBNTE8uCi0gKiBAbGlua19pZDogaWQgb2YgdGhlIGxpbmsgdXNlZCB0byByZWNlaXZlIHRoZSBwYWNrZXQuIFRoaXMgaXMgdXNlZCBhbG9uZyB3aXRoCi0gKglAbGlua192YWxpZC4KJiM0MzsgKiBAbGlua19pZDogaWQgb2YgdGhlIGxpbmsgdXNlZCB0byByZWNlaXZlIHRoZSBwYWNrZXQuIFNldCBhbmQgdXNlZCBieQomIzQzOyAqCW1hYzgwMjExIGludGVybmFsbHksIGl0IHVzZXMgQGZyZXEgc2V0IGJ5IHRoZSBkcml2ZXIgdG8gaWRlbnRpZnkgdGhlCiYjNDM7ICoJY29ycmVjdCBsaW5rIHBlciB2aWYuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHsKIAl1NjQgbWFjdGltZTsKQEAgLTE4MTMsNyAmIzQzOzE4MTIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyB7CiAJdTggY2hhaW5zOwogCXM4IGNoYWluX3NpZ25hbFtJRUVFODAyMTFfTUFYX0NIQUlOU107CiAJdTggemVyb19sZW5ndGhfcHNkdV90eXBlOwotCXU4IGxpbmtfdmFsaWQ6MSwgbGlua19pZDo0OwomIzQzOwl1OCBsaW5rX2lkOjQ7CiB9OwogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cykgJmx0Oz0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBza19idWZmLCBjYikpOwpAQCAtNTM4OSwxNCAmIzQzOzUzODgsMTggQEAgdm9pZCBpZWVlODAyMTFfcmVzdGFydF9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aAogICogaWVlZTgwMjExX3R4X3N0YXR1c19za2IoKSBvciBpZWVlODAyMTFfdHhfc3RhdHVzX25pKCkuCiAgKgomIzQzOyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvbgomIzQzOyAqIGhhcyB0byBiZSBwcm92aWRlZCBhbmQgdGhlIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBtYXkgYmUgc2tpcHBlZC4KJiM0MzsgKgogICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZCBhbmQgUkNVIHJlYWQgbG9jawogICoKICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvbgotICogQHN0YTogdGhlIHN0YXRpb24gdGhlIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTAomIzQzOyAqIEBsaW5rX3N0YTogdGhlIGxpbmsgc3RhdGlvbiB0aGUgZGF0YSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTEwKICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsCiAgKiBAbGlzdDogdGhlIGRlc3RpbmF0aW9uIGxpc3QKICAqLwotdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAomIzQzOwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLAogCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CiAKIC8qKgpAQCAtNTQxNCwxNCAmIzQzOzU0MTcsMTggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKICAqIG1peGVkIGZvciBhIHNpbmdsZSBoYXJkd2FyZS4gTXVzdCBub3QgcnVuIGNvbmN1cnJlbnRseSB3aXRoCiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS4KICAqCiYjNDM7ICogRm9yIGRhdGEgZnJhbWVzLCB3aGVuIGhhcmR3YXJlIGhhcyBkb25lIGFkZHJlc3MgdHJhbnNsYXRpb24sIGEgbGluayBzdGF0aW9uCiYjNDM7ICogaGFzIHRvIGJlIHByb3ZpZGVkIGFuZCB0aGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uIG1heSBiZSBza2lwcGVkLgomIzQzOyAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggQkhzIGRpc2FibGVkLgogICoKICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvbgotICogQHN0YTogdGhlIHN0YXRpb24gdGhlIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTAomIzQzOyAqIEBsaW5rX3N0YTogdGhlIGxpbmsgc3RhdGlvbiB0aGUgZGF0YSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTEwKICAqIEBza2I6IHRoZSBidWZmZXIgdG8gcmVjZWl2ZSwgb3duZWQgYnkgbWFjODAyMTEgYWZ0ZXIgdGhpcyBjYWxsCiAgKiBAbmFwaTogdGhlIE5BUEkgY29udGV4dAogICovCi12b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAomIzQzO3ZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiYjNDM7CQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsCiAJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpOwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCmluZGV4IDAyMDM4N2Q3NjQxMjIuLjQ2NTNmOGYyNmVlNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaApAQCAtMzE4NSw2ICYjNDM7MzE4NSwxMSBAQCBlbnVtIG5sODAyMTFfY29tbWFuZHMgewogICoJVGhlIGFnZ3JlZ2F0ZWQgbWVzc2FnZSBhbHdheXMgcHJlY2VkZXMgdGhlIHBlci1saW5rIG1lc3NhZ2VzIGZvciB0aGUKICAqCXNhbWUgc3RhdGlvbiB3aXRoaW4gYSBkdW1wIHNlcXVlbmNlLgogICoKJiM0MzsgKiBATkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEE6IFZhbGlkIGZvciBOTDgwMjExX0NNRF9GUkFNRSB0byBkZW5vdGUgdGhhdAomIzQzOyAqCXRoZSBrZXJuZWwgaGFkIG5vIHN0YXRpb24gZm9yIGEgcmVjZWl2ZWQgZnJhbWUgb3Igc2hvdWxkIG5vdCB1c2UgYQomIzQzOyAqCWtub3duIHN0YXRpb24gdG8gdHJhbnNtaXQgYSBmcmFtZS4gVGhpcyBpcyByZWxldmFudCB0byBrbm93IHdoZXRoZXIKJiM0MzsgKglNTEQgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXBwZW5lZCBvciB0byBkaXNhYmxlIGl0IHdoZW4gc2VuZGluZyBhIGZyYW1lLgomIzQzOyAqCiAgKiBATlVNX05MODAyMTFfQVRUUjogdG90YWwgbnVtYmVyIG9mIG5sODAyMTFfYXR0cnMgYXZhaWxhYmxlCiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkCiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCkBAIC0zNzg1LDYgJiM0MzszNzkwLDggQEAgZW51bSBubDgwMjExX2F0dHJzIHsKIAogCU5MODAyMTFfQVRUUl9TVEFfRFVNUF9MSU5LX1NUQVRTLAogCiYjNDM7CU5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBLAomIzQzOwogCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLwogCiAJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguYwppbmRleCA0ODMzYjQ2NzcwYjYyLi5kZDhhMTFlZjZlNTJiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL2FnZy10eC5jCkBAIC05OCw3ICYjNDM7OTgsNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAogCWlmIChzdGEtJmd0O3N0YS5kZWZsaW5rLmhlX2NhcC5oYXNfaGUpCiAJCWllZWU4MDIxMV9hZGRfYWRkYmFleHQoc2tiLCAwLCBhZ2dfc2l6ZSk7CiAKLQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCB0aWQsIC0xKTsKJiM0MzsJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbikKQEAgLTEyNyw3ICYjNDM7MTI3LDcgQEAgdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKnJhLCB1MTYgdGlkLCB1MTYgc3NuKQogCiAJSUVFRTgwMjExX1NLQl9DQihza2IpLSZndDtmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHwKIAkJCQkJSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOwotCWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHRpZCwgLTEpOwomIzQzOwlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCB0aWQsIC0xKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NlbmRfYmFyKTsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FwLmMgYi9uZXQvbWFjODAyMTEvYXAuYwppbmRleCBlN2FjOTljNWEyMmViLi5mZTI1NTg5MWMzNWYwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvYXAuYwpAQCAtODIsOSAmIzQzOzgyLDYgQEAgaWVlZTgwMjExX3J4X2VtbF9vcF9tb2RlX25vdGlmKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCWlmICghaWZ0X2V4dF9jYXBhKQogCQlyZXR1cm47CiAKLQlpZiAoIXN0YXR1cy0mZ3Q7bGlua192YWxpZCkKLQkJcmV0dXJuOwotCiAJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC0mZ3Q7c2EpOwogCWlmICghc3RhKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jCmluZGV4IGUxZTFiN2Y4MmYzZmUuLmM1YzIxMTNmYTRmNzkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9odC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9odC5jCkBAIC01NDUsNyAmIzQzOzU0NSw3IEBAIGludCBpZWVlODAyMTFfc2VuZF9zbXBzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAlpbmZvLSZndDtzdGF0dXNfZGF0YSA9IElFRUU4MDIxMV9TVEFUVVNfVFlQRV9TTVBTIHwKIAkJCSAgICB1MTZfZW5jb2RlX2JpdHMoc3RhdHVzX2xpbmtfaWQgJmx0OyZsdDsgMiB8IHNtcHMsCiAJCQkJCSAgICBJRUVFODAyMTFfU1RBVFVTX1NVQkRBVEFfTUFTSyk7Ci0JaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7CiYjNDM7CWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIDcsIGxpbmtfaWQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IDU3NjFlOTYyMTQ5MTQuLjBkOGViMDQyODg3YTkgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC0yNDYzLDcgJiM0MzsyNDYzLDggQEAgdm9pZCBpZWVlODAyMTFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLAomIzQzOwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsCiYjNDM7CQkJCSBpbnQgdGlkLCBpbnQgbGlua19pZCwKIAkJCQkgZW51bSBubDgwMjExX2JhbmQgYmFuZCk7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfcmVxdWlyZV9lbmNyeXB0ZWRfYXNzb2MoX19sZTE2IGZjLApAQCAtMjQ4MywxOCAmIzQzOzI0ODQsMjAgQEAgaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgZW51bSBubDgwMjExX2JhbmQgYmFuZCkKIHsKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHRpZCwgLTEsIGJhbmQpOwomIzQzOwlfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgRVJSX1BUUigtRU5PRU5UKSwKJiM0MzsJCQkJICAgIHRpZCwgLTEsIGJhbmQpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCk7CiYjNDM7CQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkgIGludCB0aWQsIGludCBsaW5rX2lkKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJLyogU2VuZCBhbGwgaW50ZXJuYWwgbWdtdCBmcmFtZXMgb24gVk8uIEFjY29yZGluZ2x5IHNldCBUSUQgdG8gNy4gKi8KLQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCAtMSk7CiYjNDM7CWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIDcsIC0xKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IDQzNDYwYTcwNWE2YmQuLmEwYjIxNGRiYjhhZjggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0xNjczLDExICYjNDM7MTY3Myw4IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9pZmFjZV9wcm9jZXNzX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQlicmVhazsKIAogCQkJc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7Ci0JCQlpZiAoIXN0YXR1cy0mZ3Q7bGlua192YWxpZCkKLQkJCQlsaW5rX3N0YSA9ICZhbXA7c3RhLSZndDtkZWZsaW5rOwotCQkJZWxzZQotCQkJCWxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzdGEtJmd0O2xpbmtbc3RhdHVzLSZndDtsaW5rX2lkXSwKLQkJCQkJCQlsb2NrZGVwX2lzX2hlbGQoJmFtcDtsb2NhbC0mZ3Q7aHcud2lwaHktJmd0O210eCkpOwomIzQzOwkJCWxpbmtfc3RhID0gd2lwaHlfZGVyZWZlcmVuY2UobG9jYWwtJmd0O2h3LndpcGh5LAomIzQzOwkJCQkJCSAgICAgc3RhLSZndDtsaW5rW3N0YXR1cy0mZ3Q7bGlua19pZF0pOwogCQkJaWYgKGxpbmtfc3RhKQogCQkJCWllZWU4MDIxMV9odF9oYW5kbGVfY2hhbndpZHRoX25vdGlmKGxvY2FsLCBzZGF0YSwgc3RhLAogCQkJCQkJCQkgICAgbGlua19zdGEsIGNoYW53aWR0aCwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IGY1MTE2N2YwZmM0NmQuLjM2MTc3NWZiOTMxZWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMTE4MzEsMTIgJiM0MzsxMTgzMSwxMCBAQCB2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCXJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItJmd0O2NiOwogCWZjID0gbGUxNl90b19jcHUobWdtdC0mZ3Q7ZnJhbWVfY29udHJvbCk7CiAKLQlpZiAocnhfc3RhdHVzLSZndDtsaW5rX3ZhbGlkKSB7Ci0JCWxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS0mZ3Q7bGlua1tyeF9zdGF0dXMtJmd0O2xpbmtfaWRdLAotCQkJCQkgc2RhdGEpOwotCQlpZiAoIWxpbmspCi0JCQlyZXR1cm47Ci0JfQomIzQzOwlsaW5rID0gc2RhdGFfZGVyZWZlcmVuY2Uoc2RhdGEtJmd0O2xpbmtbcnhfc3RhdHVzLSZndDtsaW5rX2lkXSwKJiM0MzsJCQkJIHNkYXRhKTsKJiM0MzsJaWYgKCFsaW5rKQomIzQzOwkJcmV0dXJuOwogCiAJc3dpdGNoIChmYyAmYW1wOyBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jCmluZGV4IDdhY2VmODBkNWYxZmIuLjY1MzcxMDU3NjgzMTYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYwpAQCAtODU0LDggJiM0Mzs4NTQsMTAgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJCQluZWVkX29mZmNoYW4gPSB0cnVlOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC0mZ3Q7ZGEpOwotCQltbG9fc3RhID0gc3RhICZhbXA7JmFtcDsgc3RhLSZndDtzdGEubWxvOwomIzQzOwkJaWYgKCFwYXJhbXMtJmd0O25vX3N0YSkgewomIzQzOwkJCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtJmd0O2RhKTsKJiM0MzsJCQltbG9fc3RhID0gc3RhICZhbXA7JmFtcDsgc3RhLSZndDtzdGEubWxvOwomIzQzOwkJfQogCiAJCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LSZndDtmcmFtZV9jb250cm9sKSB8fAogCQkgICAgbWdtdC0mZ3Q7dS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9QVUJMSUMgfHwKQEAgLTg4NCw3ICYjNDM7ODg2LDggQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJCSAgICAgbG9jYWwtJmd0O29wcy0mZ3Q7cmVtYWluX29uX2NoYW5uZWwgJmFtcDsmYW1wOwogCQkgICAgIG1lbWNtcChzZGF0YS0mZ3Q7dmlmLmNmZy5hcF9hZGRyLCBtZ210LSZndDtic3NpZCwgRVRIX0FMRU4pKSkgewogCQkJbmVlZF9vZmZjaGFuID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzZGF0YS0mZ3Q7dS5tZ2QuYXNzb2NpYXRlZCAmYW1wOyZhbXA7CiYjNDM7CQl9IGVsc2UgaWYgKCFwYXJhbXMtJmd0O25vX3N0YSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgc2RhdGEtJmd0O3UubWdkLmFzc29jaWF0ZWQgJmFtcDsmYW1wOwogCQkJICAgZXRoZXJfYWRkcl9lcXVhbChzZGF0YS0mZ3Q7dmlmLmNmZy5hcF9hZGRyLCBtZ210LSZndDtkYSkpIHsKIAkJCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtJmd0O2RhKTsKIAkJCW1sb19zdGEgPSBzdGEgJmFtcDsmYW1wOyBzdGEtJmd0O3N0YS5tbG87CkBAIC0xMDIyLDcgJiM0MzsxMDI1LDkgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCiAJfQogCiAJaWYgKCFuZWVkX29mZmNoYW4pIHsKLQkJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7CiYjNDM7CQlpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLAomIzQzOwkJCQkgICAgIHBhcmFtcy0mZ3Q7bm9fc3RhID8gc3RhIDogRVJSX1BUUigtRU5PRU5UKSwKJiM0MzsJCQkJICAgICA3LCBsaW5rX2lkKTsKIAkJcmV0ID0gMDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yeC5jIGIvbmV0L21hYzgwMjExL3J4LmMKaW5kZXggNWUyNmJlOGUyN2Q4Zi4uZWQ1YTJlMDU5MDc1NyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3J4LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3J4LmMKQEAgLTIyMiw0MyAmIzQzOzIyMiwyMSBAQCBpZWVlODAyMTFfcnhfcmFkaW90YXBfaGRybGVuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogfQogCiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSAgIGludCBsaW5rX2lkLAotCQkJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkJCSAgIHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSwKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7Ci0KLQlpZiAobGlua19pZCAmZ3Q7PSAwKSB7Ci0JCXN0YXR1cy0mZ3Q7bGlua192YWxpZCA9IDE7Ci0JCXN0YXR1cy0mZ3Q7bGlua19pZCA9IGxpbmtfaWQ7Ci0JfSBlbHNlIHsKLQkJc3RhdHVzLSZndDtsaW5rX3ZhbGlkID0gMDsKLQl9Ci0KIAlza2JfcXVldWVfdGFpbCgmYW1wO3NkYXRhLSZndDtza2JfcXVldWUsIHNrYik7CiAJd2lwaHlfd29ya19xdWV1ZShzZGF0YS0mZ3Q7bG9jYWwtJmd0O2h3LndpcGh5LCAmYW1wO3NkYXRhLSZndDt3b3JrKTsKLQlpZiAoc3RhKSB7Ci0JCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YV9pbmZvOwotCi0JCWlmIChsaW5rX2lkICZndDs9IDApIHsKLQkJCWxpbmtfc3RhX2luZm8gPSByY3VfZGVyZWZlcmVuY2Uoc3RhLSZndDtsaW5rW2xpbmtfaWRdKTsKLQkJCWlmICghbGlua19zdGFfaW5mbykKLQkJCQlyZXR1cm47Ci0JCX0gZWxzZSB7Ci0JCQlsaW5rX3N0YV9pbmZvID0gJmFtcDtzdGEtJmd0O2RlZmxpbms7Ci0JCX0KLQotCQlsaW5rX3N0YV9pbmZvLSZndDtyeF9zdGF0cy5wYWNrZXRzJiM0MzsmIzQzOzsKLQl9CiYjNDM7CWlmIChsaW5rX3N0YSkKJiM0MzsJCWxpbmtfc3RhLSZndDtyeF9zdGF0cy5wYWNrZXRzJiM0MzsmIzQzOzsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIGludCBsaW5rX2lkLAotCQkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEsCiYjNDM7CQkJCQkgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlza2ItJmd0O3Byb3RvY29sID0gMDsKLQlfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfaWQsIHN0YSwgc2tiKTsKJiM0MzsJX19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBsaW5rX3N0YSwgc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9tdV9taW1vX21vbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTMwMSw3ICYjNDM7Mjc5LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9tdV9taW1vX21vbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAlpZiAoIXNrYikKIAkJcmV0dXJuOwogCi0JaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgLTEsIE5VTEwsIHNrYik7CiYjNDM7CWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIE5VTEwsIHNrYik7CiB9CiAKIC8qCkBAIC0xNDk4LDcgJiM0MzsxNDc2LDcgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X3Jlb3JkZXJfYW1wZHUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAkvKiBpZiB0aGlzIG1wZHUgaXMgZnJhZ21lbnRlZCAtIHRlcm1pbmF0ZSByeCBhZ2dyZWdhdGlvbiBzZXNzaW9uICovCiAJc2MgPSBsZTE2X3RvX2NwdShoZHItJmd0O3NlcV9jdHJsKTsKIAlpZiAoc2MgJmFtcDsgSUVFRTgwMjExX1NDVExfRlJBRykgewotCQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHJ4LSZndDtzZGF0YSwgcngtJmd0O2xpbmtfaWQsIE5VTEwsIHNrYik7CiYjNDM7CQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHJ4LSZndDtzZGF0YSwgTlVMTCwgc2tiKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjUyNCw3ICYjNDM7MjUwMiw3IEBAIGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAogIG91dDoKIAlpZWVlODAyMTFfbGVkX3J4KHJ4LSZndDtsb2NhbCk7Ci0JaWYgKHJ4LSZndDtzdGEpCiYjNDM7CWlmIChyeC0mZ3Q7bGlua19zdGEpCiAJCXJ4LSZndDtsaW5rX3N0YS0mZ3Q7cnhfc3RhdHMucGFja2V0cyYjNDM7JiM0Mzs7CiAJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQpAQCAtMzMzNSw4ICYjNDM7MzMxMyw4IEBAIGllZWU4MDIxMV9yeF9oX2RhdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAkJICAgICh0Zi0mZ3Q7YWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX0NIQU5ORUxfU1dJVENIX1JFUVVFU1QgfHwKIAkJICAgICB0Zi0mZ3Q7YWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX0NIQU5ORUxfU1dJVENIX1JFU1BPTlNFKSkgewogCQkJcngtJmd0O3NrYi0mZ3Q7cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9URExTKTsKLQkJCV9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtJmd0O2xpbmtfaWQsCi0JCQkJCQkgICAgICAgcngtJmd0O3N0YSwgcngtJmd0O3NrYik7CiYjNDM7CQkJX19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19zdGEsCiYjNDM7CQkJCQkJICAgICAgIHJ4LSZndDtza2IpOwogCQkJcmV0dXJuIFJYX1FVRVVFRDsKIAkJfQogCX0KQEAgLTM5OTEsNyAmIzQzOzM5NjksNyBAQCBpZWVlODAyMTFfcnhfaF9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAlyZXR1cm4gUlhfUVVFVUVEOwogCiAgcXVldWU6Ci0JaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtJmd0O2xpbmtfaWQsIHJ4LSZndDtzdGEsIHJ4LSZndDtza2IpOwomIzQzOwlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19zdGEsIHJ4LSZndDtza2IpOwogCXJldHVybiBSWF9RVUVVRUQ7CiB9CiAKQEAgLTQwMDUsNiAmIzQzOzM5ODMsNyBAQCBpZWVlODAyMTFfcnhfaF91c2Vyc3BhY2VfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogCQkubGVuID0gcngtJmd0O3NrYi0mZ3Q7bGVuLAogCQkubGlua19pZCA9IHJ4LSZndDtsaW5rX2lkLAogCQkuaGF2ZV9saW5rX2lkID0gcngtJmd0O2xpbmtfaWQgJmd0Oz0gMCwKJiM0MzsJCS5ub19zdGEgPSAhcngtJmd0O3N0YSwKIAl9OwogCiAJLyogc2tpcCBrbm93bi1iYWQgYWN0aW9uIGZyYW1lcyBhbmQgcmV0dXJuIHRoZW0gaW4gdGhlIG5leHQgaGFuZGxlciAqLwpAQCAtNDEyNyw3ICYjNDM7NDEwNiw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbl9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAkJCQkJbG9jYWwtJmd0O2h3Lm9mZmNoYW5uZWxfdHhfaHdfcXVldWU7CiAJCX0KIAotCQlfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQocngtJmd0O3NkYXRhLCBuc2tiLCA3LCAtMSwKJiM0MzsJCV9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC0mZ3Q7c2RhdGEsIG5za2IsIHJ4LSZndDtzdGEsIDcsIC0xLAogCQkJCQkgICAgc3RhdHVzLSZndDtiYW5kKTsKIAl9CiAKQEAgLTQxNDcsNyAmIzQzOzQxMjYsNyBAQCBpZWVlODAyMTFfcnhfaF9leHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAkJcmV0dXJuIFJYX0RST1BfVV9VTkVYUEVDVEVEX0VYVF9GUkFNRTsKIAogCS8qIGZvciBub3cgb25seSBiZWFjb25zIGFyZSBleHQsIHNvIHF1ZXVlIHRoZW0gKi8KLQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19pZCwgcngtJmd0O3N0YSwgcngtJmd0O3NrYik7CiYjNDM7CWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX3N0YSwgcngtJmd0O3NrYik7CiAKIAlyZXR1cm4gUlhfUVVFVUVEOwogfQpAQCAtNDIwNCw3ICYjNDM7NDE4Myw3IEBAIGllZWU4MDIxMV9yeF9oX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIAkJcmV0dXJuIFJYX0RST1BfVV9VTkhBTkRMRURfTUdNVF9TVFlQRTsKIAl9CiAKLQlpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC0mZ3Q7bGlua19pZCwgcngtJmd0O3N0YSwgcngtJmd0O3NrYik7CiYjNDM7CWllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LSZndDtsaW5rX3N0YSwgcngtJmd0O3NrYik7CiAKIAlyZXR1cm4gUlhfUVVFVUVEOwogfQpAQCAtNDI0OCwxMiAmIzQzOzQyMjcsMjggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAJc3Bpbl9sb2NrX2JoKCZhbXA7cngtJmd0O2xvY2FsLSZndDtyeF9wYXRoX2xvY2spOwogCiAJd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKGZyYW1lcykpKSB7CiYjNDM7CQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7CiYjNDM7CiAJCS8qCi0JCSAqIGFsbCB0aGUgb3RoZXIgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzCi0JCSAqIHRoYXQgYmVsb25nIHRvIGFuIGFNUERVIHNpbmNlIHRoZXkgYXJlIG9uIHRoZQotCQkgKiBzYW1lIFRJRCBmcm9tIHRoZSBzYW1lIHN0YXRpb24KJiM0MzsJCSAqIE1vc3QgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzLiBIb3dldmVyLAomIzQzOwkJICogaW4gdGhlIGNhc2Ugb2YgcmVvcmRlcmluZyBmcmFtZXMgbWF5IGhhdmUgYXJyaXZlZAomIzQzOwkJICogb24gZGlmZmVyZW50IGxpbmtzLCBzbyBhZGp1c3QgdGhlIGxpbmtfaWQsIGxpbmsKJiM0MzsJCSAqIGFuZCBsaW5rX3N0YSBhY2NvcmRpbmdseS4KIAkJICovCiAJCXJ4LSZndDtza2IgPSBza2I7CiYjNDM7CQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoJmFtcDtyeC0mZ3Q7c2RhdGEtJmd0O3ZpZikgJmFtcDsmYW1wOwomIzQzOwkJICAgIHVubGlrZWx5KHJ4LSZndDtsaW5rX2lkICE9IHN0YXR1cy0mZ3Q7bGlua19pZCkpIHsKJiM0MzsJCQlpZiAocngtJmd0O3N0YSkgewomIzQzOwkJCQlyeC0mZ3Q7bGlua19zdGEgPQomIzQzOwkJCQkJcmN1X2RlcmVmZXJlbmNlKHJ4LSZndDtzdGEtJmd0O2xpbmtbcngtJmd0O2xpbmtfaWRdKTsKJiM0MzsKJiM0MzsJCQkJLyogTGluayBnb3QgZGlzYWJsZWQsIGp1c3QgdXNlIGRlZmxpbmsgKi8KJiM0MzsJCQkJaWYgKCFyeC0mZ3Q7bGlua19zdGEpCiYjNDM7CQkJCQlyeC0mZ3Q7bGlua19zdGEgPSAmYW1wO3J4LSZndDtzdGEtJmd0O2RlZmxpbms7CiYjNDM7CQkJfQomIzQzOwkJCXJ4LSZndDtsaW5rX2lkID0gc3RhdHVzLSZndDtsaW5rX2lkOwomIzQzOwkJCXJ4LSZndDtsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHJ4LSZndDtzZGF0YS0mZ3Q7bGlua1tzdGF0dXMtJmd0O2xpbmtfaWRdKTsKJiM0MzsJCX0KIAogCQlpZiAoV0FSTl9PTl9PTkNFKCFyeC0mZ3Q7bGluaykpIHsKIAkJCXJlcyA9IFJYX0RST1BfVV9OT19MSU5LOwpAQCAtNDMyMyw3ICYjNDM7NDMxOCwzNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiBzdGF0aWMgYm9vbAogaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHU4IGxpbmtfaWQpCiB7Ci0JcmV0dXJuICEhKHN0YS0mZ3Q7dmFsaWRfbGlua3MgJmFtcDsgQklUKGxpbmtfaWQpKTsKJiM0MzsJaWYgKHN0YS0mZ3Q7bWxvKQomIzQzOwkJcmV0dXJuIHN0YS0mZ3Q7dmFsaWRfbGlua3MgJmFtcDsgQklUKGxpbmtfaWQpOwomIzQzOwomIzQzOwlyZXR1cm4gc3RhLSZndDtkZWZsaW5rLmxpbmtfaWQgPT0gbGlua19pZDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpIHx8CiYjNDM7CSAgICAhaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKCZhbXA7bGlua19zdGEtJmd0O3N0YS0mZ3Q7c3RhLAomIzQzOwkJCQkJICAgICAgIGxpbmtfc3RhLSZndDtsaW5rX2lkKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJc3RhID0gbGlua19zdGEtJmd0O3N0YTsKJiM0MzsKJiM0MzsJcngtJmd0O3N0YSA9IHN0YTsKJiM0MzsJcngtJmd0O2xvY2FsID0gc3RhLSZndDtzZGF0YS0mZ3Q7bG9jYWw7CiYjNDM7CXJ4LSZndDtsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHN0YS0mZ3Q7c2RhdGEtJmd0O2xpbmtbbGlua19zdGEtJmd0O2xpbmtfaWRdKTsKJiM0MzsJaWYgKCFyeC0mZ3Q7bGluaykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcngtJmd0O2xpbmtfaWQgPSByeC0mZ3Q7bGluay0mZ3Q7bGlua19pZDsKJiM0MzsJcngtJmd0O2xpbmtfc3RhID0gbGlua19zdGE7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LApAQCAtNDM2MCwxMSAmIzQzOzQzODIsMTMgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogCiAJaWYgKGxpbmtfaWQgJmx0OyAwKSB7CiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3J4LSZndDtzZGF0YS0mZ3Q7dmlmKSAmYW1wOyZhbXA7Ci0JCSAgICBzdGEgJmFtcDsmYW1wOyAhc3RhLSZndDtzdGEudmFsaWRfbGlua3MpCiYjNDM7CQkgICAgc3RhICZhbXA7JmFtcDsgIXN0YS0mZ3Q7c3RhLnZhbGlkX2xpbmtzKSB7CiAJCQlyeC0mZ3Q7bGluayA9CiAJCQkJcmN1X2RlcmVmZXJlbmNlKHJ4LSZndDtzZGF0YS0mZ3Q7bGlua1tzdGEtJmd0O2RlZmxpbmsubGlua19pZF0pOwotCQllbHNlCiYjNDM7CQkJcngtJmd0O2xpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHJ4LSZndDtzdGEtJmd0O2xpbmtbbGlua19pZF0pOwomIzQzOwkJfSBlbHNlIHsKIAkJCXJ4LSZndDtsaW5rID0gJmFtcDtyeC0mZ3Q7c2RhdGEtJmd0O2RlZmxpbms7CiYjNDM7CQl9CiAJfSBlbHNlIGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsocngsIGxpbmtfaWQpKSB7CiAJCXJldHVybiBmYWxzZTsKIAl9CkBAIC00Mzg3LDcgJiM0Mzs0NDExLDcgQEAgdm9pZCBpZWVlODAyMTFfcmVsZWFzZV9yZW9yZGVyX3RpbWVvdXQoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpCiAJc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX2FnZ19yeDsKIAlpbnQgbGlua19pZCA9IC0xOwogCi0JLyogRklYTUU6IHN0YXRpc3RpY3Mgd29uJiMzOTt0IGJlIHJpZ2h0IHdpdGggdGhpcyAqLwomIzQzOwkvKiBOT1RFOiB0aGUgY29ycmVjdCBsaW5rIFNUQSBmb3IgdGhlIGZyYW1lIGlzIHNldCBsYXRlciAqLwogCWlmIChzdGEtJmd0O3N0YS52YWxpZF9saW5rcykKIAkJbGlua19pZCA9IGZmcyhzdGEtJmd0O3N0YS52YWxpZF9saW5rcykgLSAxOwogCkBAIC00OTE0LDIwICYjNDM7NDkzOCwxNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogewogCXN0cnVjdCBpZWVlODAyMTFfc3RhX3J4X3N0YXRzICpzdGF0czsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LSZndDtza2IpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gcngtJmd0O3N0YTsKLQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7CiYjNDM7CXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LSZndDtsaW5rX3N0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtJmd0O3NrYjsKIAl2b2lkICpzYSA9IHNrYi0mZ3Q7ZGF0YSAmIzQzOyBFVEhfQUxFTjsKIAl2b2lkICpkYSA9IHNrYi0mZ3Q7ZGF0YTsKIAotCWlmIChyeC0mZ3Q7bGlua19pZCAmZ3Q7PSAwKSB7Ci0JCWxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHN0YS0mZ3Q7bGlua1tyeC0mZ3Q7bGlua19pZF0pOwotCQlpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHsKLQkJCWRldl9rZnJlZV9za2IocngtJmd0O3NrYik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9IGVsc2UgewotCQlsaW5rX3N0YSA9ICZhbXA7c3RhLSZndDtkZWZsaW5rOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHsKJiM0MzsJCWRldl9rZnJlZV9za2IocngtJmd0O3NrYik7CiYjNDM7CQlyZXR1cm47CiAJfQogCiAJc3RhdHMgPSAmYW1wO2xpbmtfc3RhLSZndDtyeF9zdGF0czsKQEAgLTUxNTQsNiAmIzQzOzUxNzIsOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfaW52b2tlX2Zhc3Rfcngoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAkJZ290byBkcm9wOwogCX0KIAomIzQzOwlzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKJiM0MzsJc3RhdHVzLSZndDtsaW5rX2lkID0gcngtJmd0O2xpbmtfaWQgJmx0OyAwID8gMCA6IHJ4LSZndDtsaW5rX2lkOwomIzQzOwogCWllZWU4MDIxMV9yeF84MDIzKHJ4LCBmYXN0X3J4LCBvcmlnX2xlbik7CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTUxNzgsNiAmIzQzOzUxOTksNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLSZndDtkYXRhOwogCXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LSZndDtsaW5rX3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9IHJ4LSZndDtsaW5rOwomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzOwogCiAJcngtJmd0O3NrYiA9IHNrYjsKIApAQCAtNTIyMSw2ICYjNDM7NTI0Myw5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKIAkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtJmd0O3NrYi0mZ3Q7ZGF0YTsKIAl9CiAKJiM0MzsJc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LSZndDtza2IpOwomIzQzOwlzdGF0dXMtJmd0O2xpbmtfaWQgPSByeC0mZ3Q7bGlua19pZCAmbHQ7IDAgPyAwIDogcngtJmd0O2xpbmtfaWQ7CiYjNDM7CiAJaWYgKGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkpIHsKIAkJaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhyeCk7CiAJCXJldHVybiB0cnVlOwpAQCAtNTI1NiwyMiAmIzQzOzUyODEsMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogfQogCiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLAogCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfcnggKmZhc3Rfcng7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhIHJ4OwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCWludCBsaW5rX2lkID0gLTE7CiAKIAltZW1zZXQoJmFtcDtyeCwgMCwgc2l6ZW9mKHJ4KSk7CiAJcnguc2tiID0gc2tiOwogCXJ4LmxvY2FsID0gbG9jYWw7CiAJcngubGlzdCA9IGxpc3Q7Ci0JcngubGlua19pZCA9IC0xOwogCiAJSTgwMl9ERUJVR19JTkMobG9jYWwtJmd0O2RvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50KTsKIApAQCAtNTI3OSwyMyAmIzQzOzUzMDEsMTUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKQogCQlnb3RvIGRyb3A7CiAKLQlpZiAoIXB1YnN0YSkKJiM0MzsJaWYgKCFsaW5rX3B1YnN0YSkKIAkJZ290byBkcm9wOwogCi0JaWYgKHN0YXR1cy0mZ3Q7bGlua192YWxpZCkKLQkJbGlua19pZCA9IHN0YXR1cy0mZ3Q7bGlua19pZDsKLQotCS8qCi0JICogVE9ETzogU2hvdWxkIHRoZSBmcmFtZSBiZSBkcm9wcGVkIGlmIHRoZSByaWdodCBsaW5rX2lkIGlzIG5vdAotCSAqIGF2YWlsYWJsZT8gT3IgbWF5IGJlIGl0IGlzIGZpbmUgaW4gdGhlIGN1cnJlbnQgZm9ybSB0byBwcm9jZWVkIHdpdGgKLQkgKiB0aGUgZnJhbWUgcHJvY2Vzc2luZyBiZWNhdXNlIHdpdGggZnJhbWUgYmVpbmcgaW4gODAyLjMgZm9ybWF0LAotCSAqIGxpbmtfaWQgaXMgdXNlZCBvbmx5IGZvciBzdGF0cyBwdXJwb3NlIGFuZCB1cGRhdGluZyB0aGUgc3RhdHMgb24KLQkgKiB0aGUgZGVmbGluayBpcyBmaW5lPwotCSAqLwotCXN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTsKLQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoJmFtcDtyeCwgc3RhLCBsaW5rX2lkKSkKJiM0MzsJc3RhID0gY29udGFpbmVyX29mKGxpbmtfcHVic3RhLSZndDtzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTsKJiM0MzsJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKCZhbXA7cngsIHN0YSwgbGlua19wdWJzdGEtJmd0O2xpbmtfaWQpKQogCQlnb3RvIGRyb3A7CiAKJiM0MzsJcngubGlua19pZCA9IGxpbmtfcHVic3RhLSZndDtsaW5rX2lkOwomIzQzOwogCWZhc3RfcnggPSByY3VfZGVyZWZlcmVuY2Uocnguc3RhLSZndDtmYXN0X3J4KTsKIAlpZiAoIWZhc3RfcngpCiAJCWdvdG8gZHJvcDsKQEAgLTUzMDcsNTkgJiM0Mzs1MzIxLDE5IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKLQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBjb25zdW1lKQomIzQzO3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKGludCBmcmVxLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaykKIHsKLQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiLSZndDtkYXRhOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCWludCBsaW5rX2lkID0gLTE7Ci0KLQlpZiAoaWVlZTgwMjExX2lzX3MxZ19iZWFjb24oaGRyLSZndDtmcmFtZV9jb250cm9sKSkgewotCQlpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIE5VTEwsIC0xKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTsKLQl9CiYjNDM7CXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mOwogCi0JLyoKLQkgKiBMb29rIHVwIGxpbmsgc3RhdGlvbiBmaXJzdCwgaW4gY2FzZSB0aGVyZSYjMzk7cyBhCi0JICogY2hhbmNlIHRoYXQgdGhleSBtaWdodCBoYXZlIGEgbGluayBhZGRyZXNzIHRoYXQKLQkgKiBpcyBpZGVudGljYWwgdG8gdGhlIE1MRCBhZGRyZXNzLCB0aGF0IHdheSB3ZSYjMzk7bGwKLQkgKiBoYXZlIHRoZSBsaW5rIGluZm9ybWF0aW9uIGlmIG5lZWRlZC4KLQkgKi8KLQlsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC0mZ3Q7c2RhdGEsIGhkci0mZ3Q7YWRkcjIpOwotCWlmIChsaW5rX3N0YSkgewotCQlzdGEgPSBsaW5rX3N0YS0mZ3Q7c3RhOwotCQlsaW5rX2lkID0gbGlua19zdGEtJmd0O2xpbmtfaWQ7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwotCi0JCXN0YSA9IHN0YV9pbmZvX2dldF9ic3MocngtJmd0O3NkYXRhLCBoZHItJmd0O2FkZHIyKTsKLQkJaWYgKHN0YXR1cy0mZ3Q7bGlua192YWxpZCkgewotCQkJbGlua19pZCA9IHN0YXR1cy0mZ3Q7bGlua19pZDsKLQkJfSBlbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3J4LSZndDtzZGF0YS0mZ3Q7dmlmKSAmYW1wOyZhbXA7Ci0JCQkgICBzdGF0dXMtJmd0O2ZyZXEpIHsKLQkJCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rOwotCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7Ci0KLQkJCWZvcl9lYWNoX2xpbmtfZGF0YV9yY3UocngtJmd0O3NkYXRhLCBsaW5rKSB7Ci0JCQkJY29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLSZndDtjb25mLSZndDtjaGFuY3R4X2NvbmYpOwotCQkJCWlmICghY29uZiB8fCAhY29uZi0mZ3Q7ZGVmLmNoYW4pCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJaWYgKHN0YXR1cy0mZ3Q7ZnJlcSA9PSBjb25mLSZndDtkZWYuY2hhbi0mZ3Q7Y2VudGVyX2ZyZXEpIHsKLQkJCQkJbGlua19pZCA9IGxpbmstJmd0O2xpbmtfaWQ7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KJiM0MzsJaWYgKCFmcmVxIHx8IGxpbmstJmd0O3NkYXRhLSZndDt2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU4gfHwKJiM0MzsJICAgIGxpbmstJmd0O3NkYXRhLSZndDt2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSkKJiM0MzsJCXJldHVybiB0cnVlOwogCi0JaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBzdGEsIGxpbmtfaWQpKQomIzQzOwljb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstJmd0O2NvbmYtJmd0O2NoYW5jdHhfY29uZik7CiYjNDM7CWlmICghY29uZiB8fCAhY29uZi0mZ3Q7ZGVmLmNoYW4pCiAJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpOwomIzQzOwlyZXR1cm4gZnJlcSA9PSBjb25mLSZndDtkZWYuY2hhbi0mZ3Q7Y2VudGVyX2ZyZXE7CiB9CiAKIC8qCkBAIC01MzY3LDE4ICYjNDM7NTM0MSwyMCBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAogICogYmUgY2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBwcm90ZWN0aW9uLgogICovCiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKJiM0MzsJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSwKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKJiM0MzsJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiYjNDM7CXN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTsKJiM0MzsJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJX19sZTE2IGZjOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpwcmV2OwogCXN0cnVjdCByaGxpc3RfaGVhZCAqdG1wOwomIzQzOwlib29sIHJ4X2RhdGFfcGVuZGluZzsKIAlpbnQgZXJyID0gMDsKIAogCWZjID0gKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0mZ3Q7ZGF0YSktJmd0O2ZyYW1lX2NvbnRyb2w7CkBAIC01Mzg2LDcgJiM0Mzs1MzYyLDYgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAlyeC5za2IgPSBza2I7CiAJcngubG9jYWwgPSBsb2NhbDsKIAlyeC5saXN0ID0gbGlzdDsKLQlyeC5saW5rX2lkID0gLTE7CiAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpIHx8IGllZWU4MDIxMV9pc19tZ210KGZjKSkKIAkJSTgwMl9ERUJVR19JTkMobG9jYWwtJmd0O2RvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50KTsKQEAgLTU0MjYsOTcgJiM0Mzs1NDAxLDEwMiBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkgICAgIGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci0mZ3Q7ZnJhbWVfY29udHJvbCkpKQogCQlpZWVlODAyMTFfc2Nhbl9yeChsb2NhbCwgc2tiKTsKIAomIzQzOwkvKgomIzQzOwkgKiBSWCBvZiBhIGRhdGEgZnJhbWUgc2hvdWxkIG9ubHkgaGFwcGVuIHRvIGV4aXN0aW5nIHN0YXRpb25zLgomIzQzOwkgKiBJdCBpcyB0aGVyZWZvcmUgbW9yZSBlZmZpY2llbnQgdG8gdXNlIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIGRyaXZlcgomIzQzOwkgKiBvciBzZWFyY2ggYmFzZWQgb24gdGhlIHN0YXRpb24mIzM5O3MgYWRkcmVzcy4KJiM0MzsJICoKJiM0MzsJICogTm90ZSB3ZSB3aWxsIGZhbGwgdGhyb3VnaCBhbmQgaGFuZGxlIGEgc3B1cmlvdXMgZGF0YSBmcmFtZSBpbiB0aGUKJiM0MzsJICogc2FtZSB3YXkgYXMgYSBtYW5hZ2VtZW50IGZyYW1lLgomIzQzOwkgKi8KIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7Ci0JCXN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqcHJldl9zdGE7Ci0JCWludCBsaW5rX2lkID0gLTE7Ci0KLQkJaWYgKHN0YXR1cy0mZ3Q7bGlua192YWxpZCkKLQkJCWxpbmtfaWQgPSBzdGF0dXMtJmd0O2xpbmtfaWQ7Ci0KLQkJaWYgKHB1YnN0YSkgewotCQkJc3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOwotCQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKCZhbXA7cngsIHN0YSwgbGlua19pZCkpCi0JCQkJZ290byBvdXQ7Ci0KLQkJCS8qCi0JCQkgKiBJbiBNTE8gY29ubmVjdGlvbiwgZmV0Y2ggdGhlIGxpbmtfaWQgdXNpbmcgYWRkcjIKLQkJCSAqIHdoZW4gdGhlIGRyaXZlciBkb2VzIG5vdCBwYXNzIGxpbmtfaWQgaW4gc3RhdHVzLgotCQkJICogV2hlbiB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyBhbHJlYWR5IHBlcmZvcm1lZCBieQotCQkJICogZHJpdmVyL2h3LCB0aGUgdmFsaWQgbGlua19pZCBtdXN0IGJlIHBhc3NlZCBpbgotCQkJICogc3RhdHVzLgotCQkJICovCi0KLQkJCWlmICghc3RhdHVzLSZndDtsaW5rX3ZhbGlkICZhbXA7JmFtcDsgcHVic3RhLSZndDttbG8pIHsKLQkJCQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7Ci0KLQkJCQlsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSwKLQkJCQkJCQkJIGhkci0mZ3Q7YWRkcjIpOwotCQkJCWlmICghbGlua19zdGEpCi0JCQkJCWdvdG8gb3V0OwotCi0JCQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGluaygmYW1wO3J4LAotCQkJCQkJCQlsaW5rX3N0YS0mZ3Q7bGlua19pZCkpCi0JCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQlpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIHRydWUpKQomIzQzOwkJaWYgKGxpbmtfcHVic3RhKSB7CiYjNDM7CQkJc3RhID0gY29udGFpbmVyX29mKGxpbmtfcHVic3RhLSZndDtzdGEsIHN0cnVjdCBzdGFfaW5mbywKJiM0MzsJCQkJCSAgIHN0YSk7CiYjNDM7CQkJbGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLSZndDtsaW5rW2xpbmtfcHVic3RhLSZndDtsaW5rX2lkXSk7CiYjNDM7CiYjNDM7CQkJcnguc2RhdGEgPSBzdGEtJmd0O3NkYXRhOwomIzQzOwkJCWlmIChpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoJmFtcDtyeCwgbGlua19zdGEpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIHRydWUpKQogCQkJCXJldHVybjsKJiM0MzsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJcHJldl9zdGEgPSBOVUxMOwomIzQzOwkJcnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7CiAKJiM0MzsJCS8qIFNlYXJjaCBmb3Igc3RhdGlvbnMgb24gbm9uLU1MRCBpbnRlcmZhY2VzICovCiAJCWZvcl9lYWNoX3N0YV9pbmZvKGxvY2FsLCBoZHItJmd0O2FkZHIyLCBzdGEsIHRtcCkgewotCQkJaWYgKCFwcmV2X3N0YSkgewotCQkJCXByZXZfc3RhID0gc3RhOwotCQkJCWNvbnRpbnVlOwotCQkJfQomIzQzOwkJCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rOwogCi0JCQlyeC5zZGF0YSA9IHByZXZfc3RhLSZndDtzZGF0YTsKLQkJCWlmICghc3RhdHVzLSZndDtsaW5rX3ZhbGlkICZhbXA7JmFtcDsgcHJldl9zdGEtJmd0O3N0YS5tbG8pIHsKLQkJCQlzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7CiYjNDM7CQkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKCZhbXA7c3RhLSZndDtzZGF0YS0mZ3Q7dmlmKSkKJiM0MzsJCQkJY29udGludWU7CiAKLQkJCQlsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSwKLQkJCQkJCQkJIGhkci0mZ3Q7YWRkcjIpOwotCQkJCWlmICghbGlua19zdGEpCi0JCQkJCWNvbnRpbnVlOwomIzQzOwkJCWxpbmsgPSAmYW1wO3N0YS0mZ3Q7c2RhdGEtJmd0O2RlZmxpbms7CiYjNDM7CQkJaWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtJmd0O2ZyZXEsIGxpbmspKQomIzQzOwkJCQljb250aW51ZTsKIAotCQkJCWxpbmtfaWQgPSBsaW5rX3N0YS0mZ3Q7bGlua19pZDsKJiM0MzsJCQlpZiAocnhfZGF0YV9wZW5kaW5nKSB7CiYjNDM7CQkJCWllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoJmFtcDtyeCwgc2tiLAomIzQzOwkJCQkJCQkJZmFsc2UpOwomIzQzOwkJCQlyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTsKIAkJCX0KIAotCQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKCZhbXA7cngsIHByZXZfc3RhLCBsaW5rX2lkKSkKLQkJCQlnb3RvIG91dDsKLQotCQkJaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIGZhbHNlKTsKJiM0MzsJCQlyeC5zZGF0YSA9IHN0YS0mZ3Q7c2RhdGE7CiYjNDM7CQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoJmFtcDtyeCwgJmFtcDtzdGEtJmd0O2RlZmxpbmspKQomIzQzOwkJCQljb250aW51ZTsKIAotCQkJcHJldl9zdGEgPSBzdGE7CiYjNDM7CQkJcnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTsKIAkJfQogCi0JCWlmIChwcmV2X3N0YSkgewotCQkJcnguc2RhdGEgPSBwcmV2X3N0YS0mZ3Q7c2RhdGE7Ci0JCQlpZiAoIXN0YXR1cy0mZ3Q7bGlua192YWxpZCAmYW1wOyZhbXA7IHByZXZfc3RhLSZndDtzdGEubWxvKSB7Ci0JCQkJc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhOwomIzQzOwkJLyogQW5kIHNlYXJjaCBzdGF0aW9ucyBvbiBNTEQgaW50ZXJmYWNlcyAqLwomIzQzOwkJZm9yX2VhY2hfbGlua19zdGFfaW5mbyhsb2NhbCwgaGRyLSZndDthZGRyMiwgbGlua19zdGEsIHRtcCkgewomIzQzOwkJCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rOwogCi0JCQkJbGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsCi0JCQkJCQkJCSBoZHItJmd0O2FkZHIyKTsKLQkJCQlpZiAoIWxpbmtfc3RhKQotCQkJCQlnb3RvIG91dDsKJiM0MzsJCQlzdGEgPSBsaW5rX3N0YS0mZ3Q7c3RhOwomIzQzOwkJCXNkYXRhID0Jc3RhLSZndDtzZGF0YTsKJiM0MzsJCQlsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsaW5rW2xpbmtfc3RhLSZndDtsaW5rX2lkXSk7CiAKLQkJCQlsaW5rX2lkID0gbGlua19zdGEtJmd0O2xpbmtfaWQ7CiYjNDM7CQkJaWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtJmd0O2ZyZXEsIGxpbmspKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlpZiAocnhfZGF0YV9wZW5kaW5nKSB7CiYjNDM7CQkJCWllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoJmFtcDtyeCwgc2tiLAomIzQzOwkJCQkJCQkJZmFsc2UpOwomIzQzOwkJCQlyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTsKIAkJCX0KIAotCQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKCZhbXA7cngsIHByZXZfc3RhLCBsaW5rX2lkKSkKLQkJCQlnb3RvIG91dDsKJiM0MzsJCQlyeC5zZGF0YSA9IHN0YS0mZ3Q7c2RhdGE7CiYjNDM7CQkJaWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoJmFtcDtyeCwgbGlua19zdGEpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQlyeF9kYXRhX3BlbmRpbmcgPSB0cnVlOwomIzQzOwkJfQogCiYjNDM7CQlpZiAocnhfZGF0YV9wZW5kaW5nKSB7CiAJCQlpZiAoaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIHRydWUpKQogCQkJCXJldHVybjsKJiM0MzsKIAkJCWdvdG8gb3V0OwogCQl9CiYjNDM7CiYjNDM7CQkvKiBmYWxsIHRocm91Z2gsIGUuZy4gZm9yIHNwdXJpb3VzIGZyYW1lIG5vdGlmaWNhdGlvbiAqLwogCX0KIAotCXByZXYgPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBUaGlzIGlzIGEgbWFuYWdlbWVudCBmcmFtZSAob3IgYSBkYXRhIGZyYW1lIHdpdGhvdXQgYSBzdGF0aW9uKSBhbmQKJiM0MzsJICogaXQgd2lsbCBiZSBkZWxpdmVyZWQgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBhIHN0YXRpb24gZXhpc3RzLAomIzQzOwkgKiBzbyBpdGVyYXRlIHRoZSBpbnRlcmZhY2VzLgomIzQzOwkgKi8KJiM0MzsJcnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIFdlIGV4cGVjdCB0aGUgZHJpdmVyIHRvIHByb3ZpZGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uICovCiYjNDM7CWlmIChXQVJOX09OX09OQ0UoIWxvY2FsLSZndDtlbXVsYXRlX2NoYW5jdHggJmFtcDsmYW1wOyAhc3RhdHVzLSZndDtmcmVxKSkKJiM0MzsJCWdvdG8gb3V0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZhbXA7bG9jYWwtJmd0O2ludGVyZmFjZXMsIGxpc3QpIHsKJiM0MzsJCXN0cnVjdCBpZWVlODAyMTFfbGlua19kYXRhICpsaW5rID0gTlVMTDsKJiM0MzsKIAkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQljb250aW51ZTsKIApAQCAtNTUyNCwzMCAmIzQzOzU1MDQsODUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgIHNkYXRhLSZndDt2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQogCQkJY29udGludWU7CiAKJiM0MzsJCWxpbmtfc3RhID0gTlVMTDsKJiM0MzsJCWxpbmsgPSBOVUxMOwomIzQzOwomIzQzOwkJLyogVHJ5IHRvIHJlc29sdmUgdGhlIHN0YXRpb24gKi8KJiM0MzsJCWlmICghaWVlZTgwMjExX3ZpZl9pc19tbGQoJmFtcDtzZGF0YS0mZ3Q7dmlmKSkgewomIzQzOwkJCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci0mZ3Q7YWRkcjIpOwomIzQzOwomIzQzOwkJCWlmIChzdGEpIHsKJiM0MzsJCQkJbGlua19zdGEgPSAmYW1wO3N0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCQkJbGluayA9ICZhbXA7c2RhdGEtJmd0O2RlZmxpbms7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgaGRyLSZndDthZGRyMik7CiYjNDM7CiYjNDM7CQkJaWYgKGxpbmtfc3RhKQomIzQzOwkJCQlsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLSZndDtsaW5rW2xpbmtfc3RhLSZndDtsaW5rX2lkXSk7CiYjNDM7CQl9CiYjNDM7CiAJCS8qCi0JCSAqIGZyYW1lIGlzIGRlc3RpbmVkIGZvciB0aGlzIGludGVyZmFjZSwgYnV0IGlmIGl0JiMzOTtzCi0JCSAqIG5vdCBhbHNvIGZvciB0aGUgcHJldmlvdXMgb25lIHdlIGhhbmRsZSB0aGF0IGFmdGVyCi0JCSAqIHRoZSBsb29wIHRvIGF2b2lkIGNvcHlpbmcgdGhlIFNLQiBvbmNlIHRvbyBtdWNoCiYjNDM7CQkgKiBJZiB3ZSBmb3VuZCBhIFNUQSBhbmQgaXQgaGFzIGEgdmFsaWQgbGluayBpbmZvcm1hdGlvbiwgdGhlbgomIzQzOwkJICogUlggdXNpbmcgdGhlIHN0YXRpb24uCiAJCSAqLwomIzQzOwkJaWYgKGxpbmtfc3RhICZhbXA7JmFtcDsgbGluayAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaWVlZTgwMjExX3J4X3ZhbGlkX2ZyZXEoc3RhdHVzLSZndDtmcmVxLCBsaW5rKSkgewomIzQzOwkJCWlmIChyeF9kYXRhX3BlbmRpbmcpIHsKJiM0MzsJCQkJaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZSgmYW1wO3J4LCBza2IsIGZhbHNlKTsKJiM0MzsJCQkJcnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCS8qIE5vIHZhbGlkX2xpbmtzIGNoZWNrIGFzIHdlIG5lZWQgdG8gUlggYmVhY29ucyAqLwomIzQzOwomIzQzOwkJCXJ4LnNkYXRhID0gc2RhdGE7CiYjNDM7CQkJaWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YSgmYW1wO3J4LCBsaW5rX3N0YSkpCiYjNDM7CQkJCXJ4X2RhdGFfcGVuZGluZyA9IHRydWU7CiAKLQkJaWYgKCFwcmV2KSB7Ci0JCQlwcmV2ID0gc2RhdGE7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCXJ4LnNkYXRhID0gcHJldjsKLQkJaWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2UoJmFtcDtyeCwgc2tiLCBmYWxzZSk7CiYjNDM7CQkvKiBObyBzdGF0aW9uLCB0cnkgdG8gcmVzb2x2ZSB0aGUgbGluayBhbmQgUlggKi8KJiM0MzsJCWlmIChpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3NkYXRhLSZndDt2aWYpKSB7CiYjNDM7CQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7CiYjNDM7CQkJYm9vbCBmb3VuZCA9IGZhbHNlOwogCi0JCXByZXYgPSBzZGF0YTsKLQl9CiYjNDM7CQkJZm9yX2VhY2hfbGlua19kYXRhX3JjdShzZGF0YSwgbGluaykgewomIzQzOwkJCQljb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstJmd0O2NvbmYtJmd0O2NoYW5jdHhfY29uZik7CiYjNDM7CQkJCWlmICghY29uZiB8fCAhY29uZi0mZ3Q7ZGVmLmNoYW4pCiYjNDM7CQkJCQljb250aW51ZTsKIAotCWlmIChwcmV2KSB7Ci0JCXJ4LnNkYXRhID0gcHJldjsKJiM0MzsJCQkJaWYgKHN0YXR1cy0mZ3Q7ZnJlcSA9PSBjb25mLSZndDtkZWYuY2hhbi0mZ3Q7Y2VudGVyX2ZyZXEpIHsKJiM0MzsJCQkJCWZvdW5kID0gdHJ1ZTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQogCi0JCWlmIChpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZSgmYW1wO3J4LCBza2IsIHRydWUpKQotCQkJcmV0dXJuOwomIzQzOwkJCWlmICghZm91bmQpCiYjNDM7CQkJCWxpbmsgPSAmYW1wO3NkYXRhLSZndDtkZWZsaW5rOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlsaW5rID0gJmFtcDtzZGF0YS0mZ3Q7ZGVmbGluazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChyeF9kYXRhX3BlbmRpbmcpIHsKJiM0MzsJCQlpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKCZhbXA7cngsIHNrYiwgZmFsc2UpOwomIzQzOwkJCXJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcnguc2RhdGEgPSBzZGF0YTsKJiM0MzsJCXJ4LmxvY2FsID0gc2RhdGEtJmd0O2xvY2FsOwomIzQzOwkJcngubGluayA9IGxpbms7CiYjNDM7CQlyeC5saW5rX2lkID0gbGluay0mZ3Q7bGlua19pZDsKJiM0MzsJCXJ4LnN0YSA9IE5VTEw7CiYjNDM7CQlyeC5saW5rX3N0YSA9IE5VTEw7CiYjNDM7CiYjNDM7CQlyeF9kYXRhX3BlbmRpbmcgPSB0cnVlOwogCX0KIAomIzQzOwlpZiAocnhfZGF0YV9wZW5kaW5nICZhbXA7JmFtcDsKJiM0MzsJICAgIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoJmFtcDtyeCwgc2tiLCB0cnVlKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKICBvdXQ6CiAJZGV2X2tmcmVlX3NrYihza2IpOwogfQpAQCAtNTU1Niw3ICYjNDM7NTU5MSw4IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAgKiBUaGlzIGlzIHRoZSByZWNlaXZlIHBhdGggaGFuZGxlci4gSXQgaXMgY2FsbGVkIGJ5IGEgbG93IGxldmVsIGRyaXZlciB3aGVuIGFuCiAgKiA4MDIuMTEgTVBEVSBpcyByZWNlaXZlZCBmcm9tIHRoZSBoYXJkd2FyZS4KICAqLwotdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAomIzQzOwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLAogCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKQEAgLTU2OTQsOSAmIzQzOzU3MzAsNiBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAogCQl9CiAJfQogCi0JaWYgKFdBUk5fT05fT05DRShzdGF0dXMtJmd0O2xpbmtfaWQgJmd0Oz0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQpKQotCQlnb3RvIGRyb3A7Ci0KIAlzdGF0dXMtJmd0O3J4X2ZsYWdzID0gMDsKIAogCWtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpOwpAQCAtNTcxNSw5ICYjNDM7NTc0OCwxMCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLAogCQkJaWVlZTgwMjExX3RwdF9sZWRfdHJpZ19yeChsb2NhbCwgc2tiLSZndDtsZW4pOwogCiAJCWlmIChzdGF0dXMtJmd0O2ZsYWcgJmFtcDsgUlhfRkxBR184MDIzKQotCQkJX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTsKJiM0MzsJCQlfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgbGlua19wdWJzdGEsIHNrYiwgbGlzdCk7CiAJCWVsc2UKLQkJCV9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTsKJiM0MzsJCQlfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLAomIzQzOwkJCQkJCSAgICAgbGlzdCk7CiAJfQogCiAJa2Nvdl9yZW1vdGVfc3RvcCgpOwpAQCAtNTcyNyw3ICYjNDM7NTc2MSw4IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsCiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeF9saXN0KTsKIAotdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKJiM0Mzt2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAomIzQzOwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLAogCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogewogCXN0cnVjdCBza19idWZmICp0bXA7CkBAIC01NzQwLDcgJiM0Mzs1Nzc1LDcgQEAgdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSwKIAkgKiByZWNlaXZlIHByb2Nlc3NpbmcKIAkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWVlZTgwMjExX3J4X2xpc3QoaHcsIHB1YnN0YSwgc2tiLCAmYW1wO2xpc3QpOwomIzQzOwlpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19wdWJzdGEsIHNrYiwgJmFtcDtsaXN0KTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmICghbmFwaSkgewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKaW5kZXggZWVmZjIzMGJkOTA5Zi4uMzI0YzJiNmQ3Y2UxYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCkBAIC05LDcgJiM0Mzs5LDcgQEAKICAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1ICZsdDtmbGFtaW5naWNlQHNvdXJtaWxrLm5ldCZndDsKICAqIENvcHlyaWdodCAyMDEzLTIwMTUgIEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJICiAgKiBDb3B5cmlnaHQgMjAxNi0yMDE3ICBJbnRlbCBEZXV0c2NobGFuZCBHbWJICi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvbgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uCiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2lmX2FycC5oJmd0OwpAQCAtMjA0LDEyICYjNDM7MjA0LDEwIEBAIGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCSAqIGFuIGluZGljYXRpb24gb24gd2hpY2ggb2YgdGhlIGxpbmtzIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQKIAkJICovCiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21sZCgmYW1wO3NjYW5fc2RhdGEtJmd0O3ZpZikpIHsKLQkJCWlmIChyeF9zdGF0dXMtJmd0O2xpbmtfdmFsaWQpIHsKLQkJCQlzOCBsaW5rX2lkID0gcnhfc3RhdHVzLSZndDtsaW5rX2lkOwomIzQzOwkJCXM4IGxpbmtfaWQgPSByeF9zdGF0dXMtJmd0O2xpbmtfaWQ7CiAKLQkJCQlsaW5rX2NvbmYgPQotCQkJCQlyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS0mZ3Q7dmlmLmxpbmtfY29uZltsaW5rX2lkXSk7Ci0JCQl9CiYjNDM7CQkJbGlua19jb25mID0KJiM0MzsJCQkJcmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtJmd0O3ZpZi5saW5rX2NvbmZbbGlua19pZF0pOwogCQl9IGVsc2UgewogCQkJbGlua19jb25mID0gJmFtcDtzY2FuX3NkYXRhLSZndDt2aWYuYnNzX2NvbmY7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90ZGxzLmMgYi9uZXQvbWFjODAyMTEvdGRscy5jCmluZGV4IGRjMmY2NjJmZTRjNDYuLmUxN2Q0OTJiZTU5MDIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90ZGxzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L21hYzgwMjExL3RkbHMuYwpAQCAtMTA2Niw3ICYjNDM7MTA2Niw3IEBAIGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9CiAKIAlpZiAoYWN0aW9uX2NvZGUgPT0gV0xBTl9QVUJfQUNUSU9OX1RETFNfRElTQ09WRVJfUkVTKSB7Ci0JCWllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpOwomIzQzOwkJaWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgc3RhLCA3LCBsaW5rX2lkKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDNhMWUyYzllMTU2NWUuLjZmNTJlODg0MDIzNzEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC02NDM2LDcgJiM0Mzs2NDM2LDggQEAgdm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQpCiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV91bnJlc2VydmVfdGlkKTsKIAogdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLAomIzQzOwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsCiYjNDM7CQkJCSBpbnQgdGlkLCBpbnQgbGlua19pZCwKIAkJCQkgZW51bSBubDgwMjExX2JhbmQgYmFuZCkKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItJmd0O2RhdGE7CkBAIC02NDg4LDEyICYjNDM7NjQ4OSwxMyBAQCB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkgKi8KIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJSUVFRTgwMjExX1NLQl9DQihza2IpLSZndDtiYW5kID0gYmFuZDsKLQlpZWVlODAyMTFfeG1pdChzZGF0YSwgTlVMTCwgc2tiKTsKJiM0MzsJaWVlZTgwMjExX3htaXQoc2RhdGEsIHN0YSwgc2tiKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpCiYjNDM7CQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKJiM0MzsJCQkgIGludCB0aWQsIGludCBsaW5rX2lkKQogewogCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjaGFuY3R4X2NvbmY7CiAJZW51bSBubDgwMjExX2JhbmQgYmFuZDsKQEAgLTY1MTksNyAmIzQzOzY1MjEsNyBAQCB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQliYW5kID0gMDsKIAl9CiAKLQlfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCBsaW5rX2lkLCBiYW5kKTsKJiM0MzsJX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHN0YSwgdGlkLCBsaW5rX2lkLCBiYW5kKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggNDRmMmJhZDA4NjcwNS4uNDM3YmViY2MwMjc0OCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xMDk2LDYgJiM0MzsxMDk2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sODAyMTFfcG9saWN5W05VTV9OTDgwMjExX0FUVFJdID0gewogCVtOTDgwMjExX0FUVFJfTlBDQV9QVU5DVF9CSVRNQVBdID0KIAkJTkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsICZhbXA7bmw4MDIxMV9wdW5jdF9iaXRtYXBfcmFuZ2UpLAogCVtOTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUU10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSwKJiM0MzsJW05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogfTsKIAogLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi8KQEAgLTE0ODYwLDYgJiM0MzsxNDg2MSw5IEBAIHN0YXRpYyBpbnQgbmw4MDIxMV90eF9tZ210KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJICAgICEod2Rldi0mZ3Q7dmFsaWRfbGlua3MgJmFtcDsgQklUKHBhcmFtcy5saW5rX2lkKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiYjNDM7CXBhcmFtcy5ub19zdGEgPQomIzQzOwkJbmxhX2dldF9mbGFnKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSk7CiYjNDM7CiAJcGFyYW1zLmJ1ZiA9IG5sYV9kYXRhKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9GUkFNRV0pOwogCXBhcmFtcy5sZW4gPSBubGFfbGVuKGluZm8tJmd0O2F0dHJzW05MODAyMTFfQVRUUl9GUkFNRV0pOwogCkBAIC0yMjAyNCw3ICYjNDM7MjIwMjgsOSBAQCBpbnQgbmw4MDIxMV9zZW5kX21nbXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCSAgICAoaW5mby0mZ3Q7YWNrX3RzdGFtcCAmYW1wOyZhbXA7IG5sYV9wdXRfdTY0XzY0Yml0KG1zZywKIAkJCQkJCSAgIE5MODAyMTFfQVRUUl9UWF9IV19USU1FU1RBTVAsCiAJCQkJCQkgICBpbmZvLSZndDthY2tfdHN0YW1wLAotCQkJCQkJICAgTkw4MDIxMV9BVFRSX1BBRCkpKQomIzQzOwkJCQkJCSAgIE5MODAyMTFfQVRUUl9QQUQpKSB8fAomIzQzOwkgICAgKGluZm8tJmd0O25vX3N0YSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEpKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlnZW5sbXNnX2VuZChtc2csIGhkcik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE1OjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTk4CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNjg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFNpZ25pZmljYW50IG1hYzgwMjExL2NmZzgwMjExIE1vZGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzZWVtcyBjZW50ZXJlZCBvbiB0aGUgY29yZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgZGlyZWN0bHkgaW1wYWN0aW5nIGhvdyBNdWx0aS1MaW5rIE9wZXJhdGlvbiAoTUxPKSBhbmQgc3RhdGlvbiBoYW5kbGluZyBhcmUgbWFuYWdlZC4gVGhlIGJyZWFkdGggb2YgdGhlIGFmZmVjdGVkIGRyaXZlcnPigJRhdGgxMWssIGF0aDEyaywgaXdsd2lmaSwgbXQ3NiwgcnR3ODksIGFuZCBldmVuIG1hYzgwMjExX2h3c2lt4oCUdGVsbHMgbWUgdGhpcyBpcyBhIGZvdW5kYXRpb25hbCBzaGlmdCwgbm90IGp1c3QgYSBtaW5vciB0d2Vhay4gRGVmaW5pdGVseSB3b3J0aHkgb2YgY2xvc2Ugc2NydXRpbnkgYW5kIGZ1enppbmcuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGhhcHBlbmluZy4gVGhlIGtleSBpcyBpbiBob3cgcmVjZWl2ZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhbmQgaG93IGluZm9ybWF0aW9uIGlzIHBhc3NlZC4gU3BlY2lmaWNhbGx5LCBgaWVlZTgwMjExX3J4X25hcGlgIGFuZCBgaWVlZTgwMjExX3J4X2xpc3RgIGFyZSBjaGFuZ2luZyB0aGVpciBzaWduYXR1cmUuICBJbnN0ZWFkIG9mIHRoZSBmYW1pbGlhciBgc3RydWN0IGllZWU4MDIxMV9zdGEgKmAsIHRoZXkmIzM5O3JlIG5vdyBkZWFsaW5nIHdpdGggYHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmAuIFRoaXMgaW1wbGllcyBhIHJlLWFyY2hpdGVjdHVyZSBvZiBob3cgc3RhdGlvbiBhc3NvY2lhdGlvbiBhbmQgbGluayBtYW5hZ2VtZW50IGlzIGJlaW5nIGhhbmRsZWQgZHVyaW5nIHJlY2VpdmUgcHJvY2Vzc2luZy4gQWRkaXRpb25hbGx5LCB0aGUgYHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzYCBpcyBiZWluZyBzaW1wbGlmaWVkLiBUaGUgcmVtb3ZhbCBvZiBgbGlua192YWxpZGAgYW5kIHRoZSByZXRlbnRpb24gb2Ygb25seSBgbGlua19pZGAgaW5kaWNhdGVzIGEgbW9yZSBleHBsaWNpdCBhbmQgcG90ZW50aWFsbHkgc3RyZWFtbGluZWQgd2F5IG9mIGlkZW50aWZ5aW5nIHRoZSBhc3NvY2lhdGVkIGxpbmsgaW4gdGhlIHJ4IHBhdGguCgpPbiB0aGUgdHJhbnNtaXQgc2lkZSwgdGhlIGBjZmc4MDIxMV9tZ210X3R4X3BhcmFtc2AgYW5kIGBjZmc4MDIxMV9yeF9pbmZvYCBub3cgaW5jbHVkZSBhIGBub19zdGFgIGZpZWxkLiBUaGlzLCBhbG9uZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gYG5sODAyMTFfdHhfbWdtdGAgYW5kIGBubDgwMjExX3NlbmRfbWdtdGAgdG8gaGFuZGxlIGBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQWAsIHRlbGxzIG1lIHRoaXMgbWlnaHQgYmUgcmVsYXRlZCB0byBtZ210IGZyYW1lcyB0aGF0IGFyZW4mIzM5O3QgbmVjZXNzYXJpbHkgdGllZCB0byBhIHNwZWNpZmljIHN0YXRpb24gKGUuZy4sIGJlYWNvbiB0cmFuc21pc3Npb25zLCBwcm9iZSByZXNwb25zZXMsIGV0Yy4pIG9yIGZyYW1lcyB3aGVyZSBzdGF0aW9uIGluZm9ybWF0aW9uIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkgdW5kZXIgTUxPLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRob3NlIGZvY3VzIHN5bWJvbHM6IGBubDgwMjExX3R4X21nbXRgLCBgaWVlZTgwMjExX21nbXRfdHhgLCBgaWVlZTgwMjExX3J4X2xpc3RgLCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlZ3JhdGUgd2l0aCB0aGUgb3ZlcmFsbCByZWNlaXZlIHBhdGguIFRoZXJlIGFyZSBhIG51bWJlciBvZiBpbnRlcm5hbCBmdW5jdGlvbiBjYWxscyBtb2RpZmllZCBhbmQgSSB3aWxsIGludmVzdGlnYXRlIHRoZW0gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiAKCkFzIGZvciBjb25maWd1cmF0aW9ucywgSSYjMzk7bSBleHBlY3RpbmcgYENPTkZJR19NQUM4MDIxMWAsIGBDT05GSUdfQ0ZHODAyMTFgLCBhbmQgcG9zc2libHkgYENPTkZJR19NQUM4MDIxMV9IV1NJTWAgdG8gYmUgZXNzZW50aWFsLiBUaW1lIHRvIHZlcmlmeSB0aG9zZSBzeW1ib2xzLCBjcm9zcy1yZWZlcmVuY2UgdGhlbSB3aXRoIHRoZSBjaGFuZ2VzLCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZ1bGx5LiBUaGlzIGNvdWxkIGJlIGEgZ2FtZS1jaGFuZ2VyIGZvciBNTE8gc3VwcG9ydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtubDgwMjExX3R4X21nbXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3dpcmVsZXNzL25sODAyMTEuYz0xNDcwNz1zdGF0aWMgaW50IG5sODAyMTFfcmVnaXN0ZXJfbWdtdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ3NjQtXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjE0NzY1OnN0YXRpYyBpbnQgbmw4MDIxMV90eF9tZ210KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NzY2LXtcbi0tXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0OTEzLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNDkxNDpzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdF9jYW5jZWxfd2FpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0xNDkxNS17XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTczNz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XG4tLVxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDEyNC1cdFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoyMDEyNTpcdFx0LmRvaXQgPSBubDgwMjExX3R4X21nbXQsXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMTI2LVx0XHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxuLS1cbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAxMzEtXHRcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAxMzI6XHRcdC5kb2l0ID0gbmw4MDIxMV90eF9tZ210X2NhbmNlbF93YWl0LFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDEzMy1cdFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTA4OQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqQW5hbHl6aW5nIHRoZSBgaWVlZTgwMjExX21nbXRfdHhgIEZ1bmN0aW9uKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gYGllZWU4MDIxMV9tZ210X3R4YC4gVGhpcyBsaWtlbHkgbWVhbnMgSSYjMzk7bSB0cm91Ymxlc2hvb3RpbmcgYSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBpc3N1ZSwgb3IgbWF5YmUgSSYjMzk7bSByZXZpZXdpbmcgdGhlIGNvZGUgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCYjMzk7cyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24/IElzIGl0IHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIGV2ZW50IGxpa2UgYW4gYXNzb2NpYXRpb24gcmVxdWVzdCwgYSBiZWFjb24gdHJhbnNtaXNzaW9uLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBpcyBjcnVjaWFsIHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIGZsb3cuCgpJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBwcm9ibGVtIGFyZWFzLiBBcmUgd2UgaGFuZGxpbmcgZnJhbWUgbGlmZXRpbWVzIGNvcnJlY3RseT8gSXMgdGhlcmUgYXBwcm9wcmlhdGUgcmV0cnkgbG9naWMgaWYgdGhlIHRyYW5zbWlzc2lvbiBmYWlscz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBlcnJvciBwYXRocywgYW5kIGhvdyBhcmUgdGhleSBoYW5kbGVkPyBJJiMzOTttIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3MsIHJhY2UgY29uZGl0aW9ucywgb3IgaW5jb3JyZWN0IHBhcmFtZXRlciB2YWxpZGF0aW9uLiBNZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgYSBjb25jZXJuOyBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIG1hbmFnZW1lbnQgZnJhbWUgYnVmZmVyIGlzIG1hbmFnZWQsIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCwgYW5kIHdoZW4gaXQmIzM5O3MgZnJlZWQuCgpJJiMzOTtsbCBhbHNvIGJlIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpY3Mgb2YgaG93IHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiBvY2N1cnMuIEhvdyBpcyB0aGUgZnJhbWUgZm9ybWF0dGVkIGZvciB0aGUgcmFkaW8/IElzIHRoZSBjb3JyZWN0IG1vZHVsYXRpb24gYW5kIGNvZGluZyBzY2hlbWUgYmVpbmcgdXNlZD8gQXJlIHdlIHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlIHRyYW5zbWl0IHBvd2VyIGFuZCBjaGFubmVsPyBBbnkgZGV2aWF0aW9uIGhlcmUgY291bGQgbGVhZCB0byB0cmFuc21pc3Npb24gZmFpbHVyZXMgb3IgcG9vciBwZXJmb3JtYW5jZS4KCkZ1cnRoZXJtb3JlLCBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHNlY3VyaXR5LXJlbGF0ZWQgYXNwZWN0cy4gSXMgdGhpcyBmdW5jdGlvbiB2dWxuZXJhYmxlIHRvIGFueSBraW5kIG9mIGluamVjdGlvbiBhdHRhY2s/IENvdWxkIGEgbWFsaWNpb3VzIGFjdG9yIGNyYWZ0IGEgbWFuYWdlbWVudCBmcmFtZSB0aGF0IGNhdXNlcyBhIGRlbmlhbC1vZi1zZXJ2aWNlIG9yIGV2ZW4gY29kZSBleGVjdXRpb24/IEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgcGFyYW1ldGVyIHZhbGlkYXRpb24gYW5kIGFueSBzYW5pdGl6YXRpb24gc3RlcHMuIEFyZSB0aGVyZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzIHJlbGF0ZWQgdG8gdGhpcyBmdW5jdGlvbiBpbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgZmlybXdhcmU/CgpCYXNpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGVudGlyZSB0cmFuc21pc3Npb24gcHJvY2VzcywgZnJvbSB0aGUgc291cmNlIGRhdGEgdG8gdGhlIHBoeXNpY2FsIHJhZGlvIHdhdmVzLiBJIHdhbnQgdG8gYnVpbGQgYSBjb21wbGV0ZSBtZW50YWwgbW9kZWwgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEFuZCBnaXZlbiB0aGUgbmF0dXJlIG9mIHdpcmVsZXNzIG5ldHdvcmtpbmcsIHRpbWluZyBhbmQgY29uY3VycmVuY3kgY291bGQgYWxzbyBiZSBhIG1ham9yIGNvbmNlcm4sIEkmIzM5O2xsIGJlIHJlYWR5IHRvIGFuYWx5emUgdGhpcyBpZiBuZWNlc3NhcnkuIExldCYjMzk7cyBzdGFydCBieSB3YWxraW5nIHRocm91Z2ggdGhlIGNvZGUgbGluZSBieSBsaW5lIGFuZCBzZWVpbmcgaG93IHRoZXNlIHZhcmlvdXMgYXNwZWN0cyBhcmUgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfbWdtdF90eCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvY2ZnLmM9NTk3Nj1jb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2NmZy5jLTYwMzgtXHQuY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsID0gaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbCxcbm5ldC9tYWM4MDIxMS9jZmcuYzo2MDM5Olx0Lm1nbXRfdHggPSBpZWVlODAyMTFfbWdtdF90eCxcbm5ldC9tYWM4MDIxMS9jZmcuYzo2MDQwOlx0Lm1nbXRfdHhfY2FuY2VsX3dhaXQgPSBpZWVlODAyMTFfbWdtdF90eF9jYW5jZWxfd2FpdCxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDQxLVx0LnNldF9jcW1fcnNzaV9jb25maWcgPSBpZWVlODAyMTFfc2V0X2NxbV9yc3NpX2NvbmZpZyxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yMTU1PWludCBpZWVlODAyMTFfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMTU2LVx0XHRcdFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHU2NCBjb29raWUpO1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjE1NzppbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2Rldixcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxNTgtXHRcdCAgICAgIHN0cnVjdCBjZmc4MDIxMV9tZ210X3R4X3BhcmFtcyAqcGFyYW1zLCB1NjQgY29va2llKTtcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIxNTk6aW50IGllZWU4MDIxMV9tZ210X3R4X2NhbmNlbF93YWl0KHN0cnVjdCB3aXBoeSAqd2lwaHksXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMTYwLVx0XHRcdFx0ICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCB1NjQgY29va2llKTtcbi0tXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jPTgwMT1pbnQgaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuLS1cbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtODA5LVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzo4MTA6aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTgxMS1cdFx0ICAgICAgc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zICpwYXJhbXMsIHU2NCBjb29raWUpXG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDUwLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzoxMDUxOmludCBpZWVlODAyMTFfbWdtdF90eF9jYW5jZWxfd2FpdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDUyLVx0XHRcdFx0ICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCB1NjQgY29va2llKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAzIDE1OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzgwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIDgwMi4xMSBSWCBQYXRoKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlY2VpdmluZyBzaWRlIG9mIHRoaXMgODAyLjExIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkIHdoZW4gdGhleSBhcnJpdmUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBnZXR0aW5nIHRoZXNlIGZyYW1lcyBpbnRvIHRoZSBzeXN0ZW0uCgpNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2Yga2V5IGFyZWFzLiBJIHNob3VsZCBzdGFydCBieSBleGFtaW5pbmcgYGllZWU4MDIxMV9yeF9saXN0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHBhY2tldHMgYXJlIGluaXRpYWxseSBxdWV1ZWQsIGFuZCBob3cgdGhlIHJlY2VpdmVkIGZyYW1lcyBhcmUgcHJvY2Vzc2VkIHdpdGhpbiB0aGF0IHN0cnVjdHVyZS4gVGhlbiwgSSBzaG91bGQgY29tcGFyZSBhbmQgY29udHJhc3QgaXQgd2l0aCB0aGUgYGllZWU4MDIxMV9yeF9uYXBpYCBwYXRoLiBOQVBJIGlzIGEgY29yZSBwYXJ0IG9mIG1vZGVybiBuZXR3b3JrIGRyaXZlciBkZXNpZ24sIHNvIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIFJYIHByb2Nlc3MgaGVyZSBpcyBjcnVjaWFsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSB0d28gc3lzdGVtcyBpbnRlcmFjdCwgYW5kIHdoYXQgdGhlIGZsb3cgaXMgZm9yIHRoZSBpbmNvbWluZyBmcmFtZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTU6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWVlZTgwMjExX3J4X2xpc3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jPTE1MzQ9dm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jLTE1NDgtXHRcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXHUwMDI2aHcsIFx1MDAyNmxpbmtfc3RhKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYzoxNTQ5Olx0XHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMtMTU1MC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMtMTU1Ny1cdFx0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZsaW5rX3N0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmM6MTU1ODpcdFx0XHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMtMTU1OS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvZG1hLmM9NzY9c3RhdGljIHZvaWQgbXQ3NjAxdV9yeF9wcm9jZXNzX3NlZyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTggKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3NjAxdS9kbWEuYy0xMTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2RtYS5jOjExMTpcdGllZWU4MDIxMV9yeF9saXN0KGRldi1cdTAwM2VodywgTlVMTCwgc2tiLCBsaXN0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvZG1hLmMtMTEyLVxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NTM3ND12b2lkIGllZWU4MDIxMV9yZXN0YXJ0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTtcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTUzNzYtLyoqXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjUzNzc6ICogaWVlZTgwMjExX3J4X2xpc3QgLSByZWNlaXZlIGZyYW1lIGFuZCBzdG9yZSBwcm9jZXNzZWQgc2ticyBpbiBhIGxpc3RcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTM3OC0gKlxuLS1cbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQwMC0gKi9cbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTQwMTp2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDAyLVx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4tLVxubmV0L21hYzgwMjExL3J4LmM9NTM0Mz1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTU1OTMtICovXG5uZXQvbWFjODAyMTEvcnguYzo1NTk0OnZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG5uZXQvbWFjODAyMTEvcnguYy01NTk1LVx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4tLVxubmV0L21hYzgwMjExL3J4LmMtNTc2MS19XG5uZXQvbWFjODAyMTEvcnguYzo1NzYyOkVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X2xpc3QpO1xubmV0L21hYzgwMjExL3J4LmMtNTc2My1cbm5ldC9tYWM4MDIxMS9yeC5jPTU3NjQ9dm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi0tXG5uZXQvbWFjODAyMTEvcnguYy01Nzc3LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L21hYzgwMjExL3J4LmM6NTc3ODpcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbm5ldC9tYWM4MDIxMS9yeC5jLTU3NzktXHRyY3VfcmVhZF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzc2NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgdGhvdWdoIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYGllZWU4MDIxMV9yeF9uYXBpYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgcmV2aXNpdCBgaWVlZTgwMjExX3J4X25hcGlgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaGFuZGxlcyBpbmNvbWluZyA4MDIuMTEgcGFja2V0cyB3aXRoaW4gdGhlIE5BUEkgY29udGV4dC4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIGludGVycnVwdCBoYW5kbGluZyBhbmQgZGF0YSBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgZHJpdmVyLiBJIHdpbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaGFyZHdhcmUgcmVjZWl2ZSBxdWV1ZXMgYW5kIGhvdyB0aGVzZSBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgdG8gYXZvaWQgYW55IGxhdGVuY3kgaXNzdWVzLCBzdWNoIGFzIHRob3NlIHJlbGF0ZWQgdG8gRE1BIG9yIGJ1ZmZlciBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfcnhfbmFwaSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jPTEzNjQ9c3RhdGljIHZvaWQgYXRoMTBrX3Byb2Nlc3Nfcngoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYy0xNDA2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYzoxNDA3Olx0aWVlZTgwMjExX3J4X25hcGkoYXItXHUwMDNlaHcsIE5VTEwsIHNrYiwgXHUwMDI2YXItXHUwMDNlbmFwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jLTE0MDgtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmM9MjQ1ND1zdGF0aWMgYm9vbCBhdGgxMGtfaHR0X3J4X3Byb2NfcnhfaW5kX2hsKHN0cnVjdCBhdGgxMGtfaHR0ICpodHQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYy0yNjcwLVx0aWYgKGFyLVx1MDAzZW5hcGkuZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYzoyNjcxOlx0XHRpZWVlODAyMTFfcnhfbmFwaShhci1cdTAwM2VodywgTlVMTCwgc2tiLCBcdTAwMjZhci1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmMtMjY3Mi1cdGVsc2Vcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmM9MjQyNz1zdGF0aWMgdm9pZCBhdGgxMWtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jLTI1MDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmM6MjUwMzpcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVx1MDAzZWh3LCBwdWJzdGEgPyBcdTAwMjZwdWJzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIG1zZHUsIG5hcGkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay9kcF9yeC5jLTI1MDQtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmM9NDkzPXZvaWQgYXRoMTJrX2RwX21vbl9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMtNTE1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uYzo1MTY6XHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgTlVMTCwgbXNkdSwgbmFwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jLTUxNy19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jPTEzNzE9dm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguYy0xNDM1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jOjE0MzY6XHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMtMTQzNy1cdFx0XHQgIG5hcGkpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4LmM9NjA0PXN0YXRpYyB2b2lkIGl3bGFnbl9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vcnguYy02NzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9yeC5jOjY3MTpcdGllZWU4MDIxMV9yeF9uYXBpKHByaXYtXHUwMDNlaHcsIE5VTEwsIHNrYiwgcHJpdi1cdTAwM2VuYXBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4LmMtNjcyLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jPTEyMD12b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jLTEzMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmM6MTMzOlx0aWVlZTgwMjExX3J4X25hcGkobWxkLVx1MDAzZWh3LCBsaW5rX3N0YSwgc2tiLCBuYXBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMtMTM0LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jPTIyODM9c3RhdGljIHZvaWQgaXdsX21sZF9ub19kYXRhX3J4KHN0cnVjdCBpd2xfbWxkICptbGQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYy0yMzUwLVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYzoyMzUxOlx0aWVlZTgwMjExX3J4X25hcGkobWxkLVx1MDAzZWh3LCBOVUxMLCBza2IsIG5hcGkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYy0yMzUyLVx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmM9MTcwPXZvaWQgaXdsX21sZF9oYW5kbGVfdGltZV9tc210X25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmMtMjAxLVx0XHQgICAgICAga3RpbWVfdG9fbnMocnhfc3RhdHVzLVx1MDAzZWFja190eF9od3RzdGFtcCkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmM6MjAyOlx0aWVlZTgwMjExX3J4X25hcGkobWxkLVx1MDAzZWh3LCBOVUxMLCBza2IsIE5VTEwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmMtMjAzLX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9tYWMtY3R4dC5jPTE2ODc9dm9pZCBpd2xfbXZtX3J4X3N0b3JlZF9iZWFjb25fbm90aWYoc3RydWN0IGl3bF9tdm0gKm12bSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9tYWMtY3R4dC5jLTE3NDQtXHQvKiBwYXNzIGl0IGFzIHJlZ3VsYXIgcnggdG8gbWFjODAyMTEgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM6MTc0NTpcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2VodywgTlVMTCwgc2tiLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmMtMTc0Ni19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYz00NT1zdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYy05Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmM6OTM6XHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMtOTQtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYz0yMzY9c3RhdGljIHZvaWQgaXdsX212bV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX212bSAqbXZtLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYy0yNDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmM6MjQ2Olx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMtMjQ3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmM9MjQwOT12b2lkIGl3bF9tdm1fcnhfbW9uaXRvcl9ub19kYXRhKHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMtMjUzMC1cdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYzoyNTMxOlx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMtMjUzMi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3RpbWUtc3luYy5jPTU4PXZvaWQgaXdsX212bV90aW1lX3N5bmNfbXNtdF9ldmVudChzdHJ1Y3QgaXdsX212bSAqbXZtLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3RpbWUtc3luYy5jLTg5LVx0XHQgICAgICAga3RpbWVfdG9fbnMocnhfc3RhdHVzLVx1MDAzZWFja190eF9od3RzdGFtcCkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vdGltZS1zeW5jLmM6OTA6XHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIE5VTEwsIHNrYiwgTlVMTCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS90aW1lLXN5bmMuYy05MS19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9wY2kuYz0xMDQyPXN0YXRpYyB1MzIgcnR3X3BjaV9yeF9uYXBpKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBydHdfcGNpICpydHdwY2ksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9wY2kuYy0xMTA0LVx0XHRcdG1lbWNweShuZXctXHUwMDNlY2IsIFx1MDAyNnJ4X3N0YXR1cywgc2l6ZW9mKHJ4X3N0YXR1cykpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9wY2kuYzoxMTA1Olx0XHRcdGllZWU4MDIxMV9yeF9uYXBpKHJ0d2Rldi1cdTAwM2VodywgTlVMTCwgbmV3LCBuYXBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcGNpLmMtMTEwNi1cdFx0XHRyeF9kb25lJiM0MzsmIzQzOztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYz00MDAyPXN0YXRpYyB2b2lkIHJ0dzg5X2NvcmVfcnhfdG9fbWFjODAyMTEoc3RydWN0IHJ0dzg5X2RldiAqcnR3ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQwMjMtXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYzo0MDI0Olx0aWVlZTgwMjExX3J4X25hcGkocnR3ZGV2LVx1MDAzZWh3LCBOVUxMLCBza2JfcHBkdSwgbmFwaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuYy00MDI1LVx0bG9jYWxfYmhfZW5hYmxlKCk7XG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01NDAxPXZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDA1LS8qKlxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NDA2OiAqIGllZWU4MDIxMV9yeF9uYXBpIC0gcmVjZWl2ZSBmcmFtZSBmcm9tIE5BUEkgY29udGV4dFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDA3LSAqXG4tLVxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDI5LSAqL1xuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NDMwOnZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU0MzEtXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbi0tXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU0NTQ9c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQ1NS17XG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU0NTY6XHRpZWVlODAyMTFfcnhfbmFwaShodywgTlVMTCwgc2tiLCBOVUxMKTtcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQ1Ny19XG4tLVxubmV0L21hYzgwMjExL3J4LmM9NTc2Mj1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeF9saXN0KTtcbm5ldC9tYWM4MDIxMS9yeC5jLTU3NjMtXG5uZXQvbWFjODAyMTEvcnguYzo1NzY0OnZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG5uZXQvbWFjODAyMTEvcnguYy01NzY1LVx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4tLVxubmV0L21hYzgwMjExL3J4LmMtNTc5MC19XG5uZXQvbWFjODAyMTEvcnguYzo1NzkxOkVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X25hcGkpO1xubmV0L21hYzgwMjExL3J4LmMtNTc5Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDMgMTU6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEzNDAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQUM4MDIxMSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgbWFraW5nIHNvbWUgdGFyZ2V0ZWQgY2hhbmdlcyB3aXRoaW4gdGhlIE1BQzgwMjExIGFuZCBDRkc4MDIxMSBsYXllcnMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBzb21lIG51YW5jZWQgYXNwZWN0cyBvZiBzdGF0aW9uIChTVEEpIGFzc29jaWF0aW9uIGFuZCBtYW5hZ2VtZW50IGZyYW1lIGhhbmRsaW5nLiBJIHNlZSBpdCYjMzk7cyByZWZhY3RvcmluZyBzb21lIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QgYXMgYSBwb3RlbnRpYWwgaW5kaWNhdG9yIG9mIGFyY2hpdGVjdHVyYWwgaW1wcm92ZW1lbnRzIG9yIG9wdGltaXphdGlvbi4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhhdCBgaWVlZTgwMjExX3J4X2xpc3RgIGFuZCBgaWVlZTgwMjExX3J4X25hcGlgIGFyZSBzaGlmdGluZyBmcm9tIHVzaW5nIGBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqYCB0byBgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqYC4gVGhpcyBzdWdnZXN0cyB0aGV5IGFyZSBub3cgZGVhbGluZyB3aXRoIGxpbmstc3BlY2lmaWMgU1RBIGluZm9ybWF0aW9uLCB3aGljaCB0ZWxscyBtZSB0aGUgcGF0Y2ggaXMgZm9jdXNpbmcgb24gZW5oYW5jZW1lbnRzIHJlbGF0ZWQgdG8gbGluay1sYXllciBtYW5hZ2VtZW50IGFuZCBwZXJoYXBzIG11bHRpLWxpbmsgb3BlcmF0aW9uLgoKVGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5sODAyMTFfdHhfbWdtdGAgYW5kIGBubDgwMjExX3NlbmRfbWdtdGAgdG8gaGFuZGxlIGBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQWAgYXJlIGFsc28gc2lnbmlmaWNhbnQuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIG9yIHJlZmluaW5nIGEgbWVjaGFuaXNtIGZvciBzZW5kaW5nIG1hbmFnZW1lbnQgZnJhbWVzIHRoYXQgZG9uJiMzOTt0IG5lY2Vzc2FyaWx5IHRhcmdldCBhIHNwZWNpZmljIFNUQS4gSSYjMzk7ZCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgc2VtYW50aWNzIG9mIHRoYXQgYXR0cmlidXRlLCBidXQgaXQmIzM5O3MgbGlrZWx5IGludm9sdmVkIGluIGJyb2FkY2FzdCBvciBnZW5lcmFsLXB1cnBvc2UgbWFuYWdlbWVudCBmcmFtZSB0cmFuc21pc3Npb25zLCBtYXliZSByZWxhdGVkIHRvIGRpc2NvdmVyeSBvciBwcm9iaW5nLiBBbHNvLCB0aGUgYGllZWU4MDIxMV9tZ210X3R4YCBtb2RpZmljYXRpb24gdG8gaGFuZGxlIGBwYXJhbXMtJmd0O25vX3N0YWAgZnVydGhlciByZWluZm9yY2VzIHRoaXMgZm9jdXMgb24gbm9uLVNUQS1zcGVjaWZpYyBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbi4KCkZpbmFsbHksIHRoZSBhZGRlZCBgc3RydWN0IHN0YV9pbmZvICpzdGFgIGFyZ3VtZW50IHRvIGBpZWVlODAyMTFfdHhfc2tiX3RpZGAgaW1wbGllcyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gaG93IHRoZSB0cmFuc21pdCBwYXRoIGFzc29jaWF0ZXMgU0tCcyB3aXRoIFNUQSBpbmZvcm1hdGlvbi4gTWF5YmUgdGhpcyB3aWxsIGhlbHAgd2l0aCBhZHZhbmNlZCBzY2hlZHVsaW5nIGFuZCBRb1MgZmVhdHVyZXMsIGJ1dCBJIHdvdWxkIG5lZWQgdG8gZmluZCBvdXQgbW9yZS4KCk15IGtleSBmb2N1cyBzeW1ib2xzIGhlcmUgYXJlOiBgbmw4MDIxMV90eF9tZ210YCwgYGllZWU4MDIxMV9tZ210X3R4YCwgYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCwgYW5kIGBpZWVlODAyMTFfdHhfc2tiX3RpZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHNpZ25hdHVyZSBjaGFuZ2VzIGFuZCBob3cgdGhlIGBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQWAgYXR0cmlidXRlIGlzIGJlaW5nIHVzZWQuIEFuZCwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSByZS1leHBvcnRlZCwgSSB3aWxsIGNoZWNrIHRvIHNlZSBpZiBgaWVlZTgwMjExX3R4X3NrYl90aWRgIGlzIGV4cG9ydGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZWVlODAyMTFfdHhfc2tiX3RpZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbWFjODAyMTEvYWdnLXR4LmM9NjE9c3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCxcbi0tXG5uZXQvbWFjODAyMTEvYWdnLXR4LmMtMTAwLVxubmV0L21hYzgwMjExL2FnZy10eC5jOjEwMTpcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIHRpZCwgLTEpO1xubmV0L21hYzgwMjExL2FnZy10eC5jLTEwMi19XG4tLVxubmV0L21hYzgwMjExL2FnZy10eC5jPTEwND12b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pXG4tLVxubmV0L21hYzgwMjExL2FnZy10eC5jLTEyOS1cdFx0XHRcdFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xubmV0L21hYzgwMjExL2FnZy10eC5jOjEzMDpcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIHRpZCwgLTEpO1xubmV0L21hYzgwMjExL2FnZy10eC5jLTEzMS19XG4tLVxubmV0L21hYzgwMjExL2h0LmM9NDk3PWludCBpZWVlODAyMTFfc2VuZF9zbXBzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi0tXG5uZXQvbWFjODAyMTEvaHQuYy01NDctXHRcdFx0XHRcdCAgICBJRUVFODAyMTFfU1RBVFVTX1NVQkRBVEFfTUFTSyk7XG5uZXQvbWFjODAyMTEvaHQuYzo1NDg6XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCBsaW5rX2lkKTtcbm5ldC9tYWM4MDIxMS9odC5jLTU0OS1cbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaD0yNDYyPXZvaWQgaWVlZTgwMjExX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjQ2NC1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjI0NjU6dm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDY2LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI0ODE9c3RhdGljIGlubGluZSB2b2lkXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyNDgyOmllZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDgzLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCxcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDg2LVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ4NzpcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjQ4OC1cdFx0XHRcdCAgICB0aWQsIC0xLCBiYW5kKTtcbi0tXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDkxLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ5Mjp2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjQ5My1cdFx0XHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI0OTY9c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjQ5OS1cdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaDoyNTAwOlx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpO1xubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjUwMS19XG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYz0yMzc9c3RhdGljIHZvaWQgaWVlZTgwMjExX2hhbmRsZV9yb2Nfc3RhcnRlZChzdHJ1Y3QgaWVlZTgwMjExX3JvY193b3JrICpyb2MsXG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0yNDctXHRcdGlmICghV0FSTl9PTighcm9jLVx1MDAzZWZyYW1lKSkge1xubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzoyNDg6XHRcdFx0aWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyb2MtXHUwMDNlc2RhdGEsIHJvYy1cdTAwM2VmcmFtZSwgNyxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMjQ5LVx0XHRcdFx0XHRcdCAgcm9jLVx1MDAzZWNoYW4tXHUwMDNlYmFuZCk7XG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYz04MTA9aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4tLVxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0xMDI3LVx0aWYgKCFuZWVkX29mZmNoYW4pIHtcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmM6MTAyODpcdFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMTAyOS1cdFx0XHRcdCAgICAgcGFyYW1zLVx1MDAzZW5vX3N0YSA/IHN0YSA6IEVSUl9QVFIoLUVOT0VOVCksXG4tLVxubmV0L21hYzgwMjExL3J4LmM9NDA1NT1pZWVlODAyMTFfcnhfaF9hY3Rpb25fcmV0dXJuKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4tLVxubmV0L21hYzgwMjExL3J4LmMtNDEwOC1cbm5ldC9tYWM4MDIxMS9yeC5jOjQxMDk6XHRcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC1cdTAwM2VzZGF0YSwgbnNrYiwgcngtXHUwMDNlc3RhLCA3LCAtMSxcbm5ldC9tYWM4MDIxMS9yeC5jLTQxMTAtXHRcdFx0XHRcdCAgICBzdGF0dXMtXHUwMDNlYmFuZCk7XG4tLVxubmV0L21hYzgwMjExL3NjYW4uYz02NTg9c3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfc2Nhbl9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tLVxubmV0L21hYzgwMjExL3NjYW4uYy02ODItXHRcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cdTAwM2Vjb250cm9sLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVFJMX0RPTlRfVVNFX1JBVEVfTUFTSztcbm5ldC9tYWM4MDIxMS9zY2FuLmM6NjgzOlx0XHRpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIDcsIGNoYW5uZWwtXHUwMDNlYmFuZCk7XG5uZXQvbWFjODAyMTEvc2Nhbi5jLTY4NC1cdH1cbi0tXG5uZXQvbWFjODAyMTEvdGRscy5jPTk5Nz1pZWVlODAyMTFfdGRsc19wcmVwX21nbXRfcGFja2V0KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L21hYzgwMjExL3RkbHMuYy0xMDY4LVx0aWYgKGFjdGlvbl9jb2RlID09IFdMQU5fUFVCX0FDVElPTl9URExTX0RJU0NPVkVSX1JFUykge1xubmV0L21hYzgwMjExL3RkbHMuYzoxMDY5Olx0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBzdGEsIDcsIGxpbmtfaWQpO1xubmV0L21hYzgwMjExL3RkbHMuYy0xMDcwLVx0XHRyZXR1cm4gMDtcbi0tXG5uZXQvbWFjODAyMTEvdHguYz02NDM2PUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVzZXJ2ZV90aWQpO1xubmV0L21hYzgwMjExL3R4LmMtNjQzNy1cbm5ldC9tYWM4MDIxMS90eC5jOjY0Mzg6dm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvdHguYy02NDM5LVx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxuLS1cbm5ldC9tYWM4MDIxMS90eC5jLTY0OTUtXG5uZXQvbWFjODAyMTEvdHguYzo2NDk2OnZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5uZXQvbWFjODAyMTEvdHguYy02NDk3LVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4tLVxubmV0L21hYzgwMjExL3R4LmMtNjUyMy1cbm5ldC9tYWM4MDIxMS90eC5jOjY1MjQ6XHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xubmV0L21hYzgwMjExL3R4LmMtNjUyNS1cdHJjdV9yZWFkX3VubG9jaygpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDcwMAoJCQkJCQkJb3V0cHV0OiAyMjMKCQkJCQkJCXRob3VnaHRzOiA2MTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgVGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgcG9raW5nIGFyb3VuZCBpbiB0aGUgYG1hYzgwMjExYCBhbmQgYGNmZzgwMjExYCBzdWJzeXN0ZW1zLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGhvdyBmcmFtZXMgZ2V0IGhhbmRsZWQsIGVzcGVjaWFsbHkgd2l0aCB0aGlzIE11bHRpLUxpbmsgT3BlcmF0aW9uIHN0dWZmLiBUaGUga2V5IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIGVudHJ5IHBvaW50cy4KCkZpcnN0LCBsZXQmIzM5O3MgZmlsdGVyIG91dCB0aGUgbm9pc2UuIFRoZSBmdW5jdGlvbnMgYGllZWU4MDIxMV90eF9za2JfdGlkYCBhbmQgYF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZGAgYXJlbiYjMzk7dCBleHBvcnRlZCwgc28gdGhleSYjMzk7cmUgbm90IGVudHJ5IHBvaW50cyBmb3IgdXMuIGBpZWVlODAyMTFfcnhfbGlzdGAgYW5kIGBpZWVlODAyMTFfcnhfbmFwaWAgYXJlIGV4cG9ydGVkLCBzbyB0aG9zZSBhcmUgZ29vZCBjYW5kaWRhdGVzLiBgaWVlZTgwMjExX21nbXRfdHhgIGlzIGEgY2FsbGJhY2sgd2l0aGluIGBtYWM4MDIxMV9jb25maWdfb3BzYCwgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0LCBldmVuIGlmIGl0JiMzOTtzIG5vdCBleHBvcnRlZCBkaXJlY3RseS4gQW5kIGBubDgwMjExX3R4X21nbXRgIGlzIGEgbmV0bGluayBjYWxsYmFjaywgc28gaXQmIzM5O3MgZXhwb3NlZCBleHRlcm5hbGx5LCBhbmQgdGhlcmVmb3JlIHZlcnkgaW1wb3J0YW50LgoKU28sIEkgdGhpbmsgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOgoqICAgYG5sODAyMTFfdHhfbWdtdGAgKG5ldGxpbmsgZm9yIFRYIG1hbmFnZW1lbnQpCiogICBgaWVlZTgwMjExX21nbXRfdHhgIChtYWM4MDIxMSBjYWxsYmFjayBmb3IgVFggbWFuYWdlbWVudCkKKiAgIGBpZWVlODAyMTFfcnhfbGlzdGAgKG1haW4gUlggZW50cnlwb2ludCkKKiAgIGBpZWVlODAyMTFfcnhfbmFwaWAgKG1haW4gUlggZW50cnlwb2ludCkKCk5vdywgd2hhdCBhYm91dCBjb25maWd1cmF0aW9ucz8gV2VsbCwgdGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggYG1hYzgwMjExX2h3c2ltX21haW4uY2AsIHNvIEkmIzM5O2xsIGRlZmluaXRlbHkgbmVlZCBgTUFDODAyMTFfSFdTSU1gLiBJJiMzOTtsbCBhbHNvIG5lZWQgdGhlIGdlbmVyYWwgYE1BQzgwMjExYCBhbmQgYENGRzgwMjExYCBjb25maWd1cmF0aW9ucywgb2J2aW91c2x5LgoKSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYGllZWU4MDIxMV9yeF9saXN0YCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYCAqYXJlKiBpbmRlZWQgdGhlIG1haW4gUlggZW50cnkgcG9pbnRzIGZvciBtYWM4MDIxMSwgYW5kIHRoZXkgYXJlLiBBbmQgdGhlIG90aGVyIHR3byBmdW5jdGlvbnMgYXJlIHRoZSByaWdodCBlbnRyeSBwb2ludHMgZm9yIG1nbXQgVFguCgpBbHJpZ2h0LCB3aXRoIHRoYXQgaW4gbWluZCwgaGVyZSYjMzk7cyBteSBwbGFuOgoKKiAgIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHBhdGNoIHRoYXQgaW50cm9kdWNlcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCiogICBNeSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOgogICAgKiAgIGBubDgwMjExX3R4X21nbXRgCiAgICAqICAgYGllZWU4MDIxMV9tZ210X3R4YAogICAgKiAgIGBpZWVlODAyMTFfcnhfbGlzdGAKICAgICogICBgaWVlZTgwMjExX3J4X25hcGlgCiogICBJJiMzOTtsbCBzZXQgdGhlIGZvbGxvd2luZyBgRW5hYmxlQ29uZmlnc2A6CiAgICAqICAgYE1BQzgwMjExYAogICAgKiAgIGBDRkc4MDIxMWAKICAgICogICBgTUFDODAyMTFfSFdTSU1gCgpUaGUgcmF0aW9uYWxlPyBUaGlzIHBhdGNoJiMzOTtzIG1vZGlmaWNhdGlvbnMsIGVzcGVjaWFsbHkgdGhlIGNoYW5nZXMgdG8gdGhlIFJYIGZ1bmN0aW9ucyBhbmQgdGhlIG5ldyAmIzM5O25vX3N0YSYjMzk7IGhhbmRsaW5nIGluIG1hbmFnZW1lbnQgZnJhbWUgdHJhbnNtaXNzaW9uLCBhcmUgY3JpdGljYWwgcGF0aHMgYW5kIGludHJvZHVjZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gSXQmIzM5O3MgdG91Y2hpbmcgY29yZSBmdW5jdGlvbmFsaXR5IGluIGEgc2lnbmlmaWNhbnQgd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMyAxNToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUFDODAyMTEmIzM0OywKICAgICYjMzQ7Q0ZHODAyMTEmIzM0OywKICAgICYjMzQ7TUFDODAyMTFfSFdTSU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtubDgwMjExX3R4X21nbXQmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX21nbXRfdHgmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J4X2xpc3QmIzM0OywKICAgICYjMzQ7aWVlZTgwMjExX3J4X25hcGkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG1hYzgwMjExIGFuZCBjZmc4MDIxMSBzdWJzeXN0ZW1zLCBzcGVjaWZpY2FsbHkgbW9kaWZ5aW5nIGhvdyByZWNlaXZlZCBmcmFtZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCBzdGF0aW9ucyBhbmQgbGlua3MgKE11bHRpLUxpbmsgT3BlcmF0aW9uKS4gSXQgY2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIGNvcmUgUlggZnVuY3Rpb25zIChgaWVlZTgwMjExX3J4X2xpc3RgLCBgaWVlZTgwMjExX3J4X25hcGlgKSBhbmQgbW9kaWZpZXMgdGhlIG1hbmFnZW1lbnQgZnJhbWUgdHJhbnNtaXNzaW9uIHBhdGggdG8gaGFuZGxlIGEgbmV3IGBub19zdGFgIGZsYWcuIFRoZXNlIGFyZSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01BQzgwMjExJiMzNDssCiAgICAmIzM0O0NGRzgwMjExJiMzNDssCiAgICAmIzM0O01BQzgwMjExX0hXU0lNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmw4MDIxMV90eF9tZ210JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9tZ210X3R4JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9saXN0JiMzNDssCiAgICAmIzM0O2llZWU4MDIxMV9yeF9uYXBpJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBob3cgcmVjZWl2ZWQgZnJhbWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbnMgYW5kIGxpbmtzIChNdWx0aS1MaW5rIE9wZXJhdGlvbikuIEl0IGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBjb3JlIFJYIGZ1bmN0aW9ucyAoYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCkgYW5kIG1vZGlmaWVzIHRoZSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBwYXRoIHRvIGhhbmRsZSBhIG5ldyBgbm9fc3RhYCBmbGFnLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTU6Mjc6NTYuMTM4NzM5MDcxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjMyNzAzNDMyODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfdHhfbWdtdFwiLFxuICAgIFwiaWVlZTgwMjExX21nbXRfdHhcIixcbiAgICBcImllZWU4MDIxMV9yeF9saXN0XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbmFwaVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBob3cgcmVjZWl2ZWQgZnJhbWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbnMgYW5kIGxpbmtzIChNdWx0aS1MaW5rIE9wZXJhdGlvbikuIEl0IGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBjb3JlIFJYIGZ1bmN0aW9ucyAoYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCkgYW5kIG1vZGlmaWVzIHRoZSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBwYXRoIHRvIGhhbmRsZSBhIG5ldyBgbm9fc3RhYCBmbGFnLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyNzo1Ni4xMzg3NDQ1OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NDA5OTIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg3ZjRjOTQzYzliNTJjN2U5NjZlNTcwMzM5MmI5ODI3Yjg3Y2VhNjZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMyAxNToyNzo1NSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcXG5pbmRleCAzMzQyNTcwN2MwODQyLi5mYmIzZDE4ZjU1ZGRkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xcbkBAIC0yNTAwLDcgKzI1MDAsNyBAQCBzdGF0aWMgdm9pZCBhdGgxMWtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcFxcbiBcXHQgICAgIShpc19tY2JjIFxcdTAwMjZcXHUwMDI2IHJ4X3N0YXR1cy1cXHUwMDNlZmxhZyBcXHUwMDI2IFJYX0ZMQUdfREVDUllQVEVEKSlcXG4gXFx0XFx0cnhfc3RhdHVzLVxcdTAwM2VmbGFnIHw9IFJYX0ZMQUdfODAyMztcXG4gXFxuLVxcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVxcdTAwM2VodywgcHVic3RhLCBtc2R1LCBuYXBpKTtcXG4rXFx0aWVlZTgwMjExX3J4X25hcGkoYXItXFx1MDAzZWh3LCBwdWJzdGEgPyBcXHUwMDI2cHVic3RhLVxcdTAwM2VkZWZsaW5rIDogTlVMTCwgbXNkdSwgbmFwaSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGF0aDExa19kcF9yeF9jaGVja19ud2lmaV9oZHJfbGVuX3ZhbGlkKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXFxuaW5kZXggN2Q1YmU3N2IwODFmOC4uMWZhZjE4OTZkMGFiMSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xcbkBAIC01MDMsOCArNTAzLDYgQEAgdm9pZCBhdGgxMmtfZHBfbW9uX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsXFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGUgKmhlID0gTlVMTDtcXG4gXFxuLVxcdHN0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IDA7XFxuLVxcbiBcXHRpZiAoKHN0YXR1cy1cXHUwMDNlZW5jb2RpbmcgPT0gUlhfRU5DX0hFKSBcXHUwMDI2XFx1MDAyNiAhKHN0YXR1cy1cXHUwMDNlZmxhZyBcXHUwMDI2IFJYX0ZMQUdfUkFESU9UQVBfSEUpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICAhKHN0YXR1cy1cXHUwMDNlZmxhZyBcXHUwMDI2IFJYX0ZMQUdfU0tJUF9NT05JVE9SKSkge1xcbiBcXHRcXHRoZSA9IHNrYl9wdXNoKG1zZHUsIHNpemVvZihrbm93bikpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcXG5pbmRleCA4ZmEwZTkwYjQ1MzE2Li44NDdhZDI4ZmQzMGIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xcbkBAIC0xMzc1LDYgKzEzNzUsNyBAQCB2b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGRwX3BkZXYtXFx1MDAzZWRwO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcjtcXG4gXFx0c3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYiA9IEFUSDEyS19TS0JfUlhDQihtc2R1KTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IHJ4X2luZm8tXFx1MDAzZXJ4X3N0YXR1cztcXG5AQCAtMTM4NCw5ICsxMzg1LDE5IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXFxuIFxcbiBcXHRwdWJzdGEgPSBwZWVyID8gcGVlci1cXHUwMDNlc3RhIDogTlVMTDtcXG4gXFxuLVxcdHN0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IDA7XFxuLVxcdGlmIChwdWJzdGEgXFx1MDAyNlxcdTAwMjYgcHVic3RhLVxcdTAwM2V2YWxpZF9saW5rcylcXG4tXFx0XFx0YXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGRwLVxcdTAwM2Vod19wYXJhbXMsIHBlZXIsIHJ4Y2IsIHN0YXR1cyk7XFxuK1xcdGlmIChwdWJzdGEpIHtcXG4rXFx0XFx0aWYgKHB1YnN0YS1cXHUwMDNldmFsaWRfbGlua3MpIHtcXG4rXFx0XFx0XFx0dTggbGlua19pZCA9XFxuK1xcdFxcdFxcdFxcdGF0aDEya19od19nZXRfcnhfbGlua19pZChkcC1cXHUwMDNlaHdfcGFyYW1zLCBwZWVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgcnhjYiwgc3RhdHVzKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChsaW5rX2lkIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0XFx0bGlua19wdWJzdGEgPVxcbitcXHRcXHRcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2UocHVic3RhLVxcdTAwM2VsaW5rW2xpbmtfaWRdKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bGlua19wdWJzdGEgPSBcXHUwMDI2cHVic3RhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGF0aDEya19kYmcoZHAtXFx1MDAzZWFiLCBBVEgxMktfREJHX0RBVEEsXFxuIFxcdFxcdCAgIFxcXCJyeCBza2IgJXAgbGVuICV1IHBlZXIgJXBNICVkICVzIHNuICV1ICVzJXMlcyVzJXMlcyVzJXMlcyVzIHJhdGVfaWR4ICV1IHZodF9uc3MgJXUgZnJlcSAldSBiYW5kICV1IGZsYWcgMHgleCBmY3MtZXJyICVpIG1pYy1lcnIgJWkgYW1zZHUtbW9yZSAlaVxcXFxuXFxcIixcXG5AQCAtMTQyMiw3ICsxNDMzLDggQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcXG4gXFxuIFxcdC8qIFRPRE86IHRyYWNlIHJ4IHBhY2tldCAqL1xcbiBcXG4tXFx0aWVlZTgwMjExX3J4X25hcGkoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIHB1YnN0YSwgbXNkdSwgbmFwaSk7XFxuK1xcdGllZWU4MDIxMV9yeF9uYXBpKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBsaW5rX3B1YnN0YSwgbXNkdSxcXG4rXFx0XFx0XFx0ICBuYXBpKTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9ody5oXFxuaW5kZXggNDljZmQ1ZGZjNzBhNi4uMjY4ZjBhOGZkNDZkZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmhcXG5AQCAtMjQ4LDkgKzI0OCw5IEBAIHN0cnVjdCBhdGgxMmtfaHdfb3BzIHtcXG4gXFx0Ym9vbCAoKmRwX3NybmdfaXNfdHhfY29tcF9yaW5nKShpbnQgcmluZ19udW0pO1xcbiBcXHRib29sICgqaXNfZnJhbWVfbGlua19hZ25vc3RpYykoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQpO1xcbi1cXHR2b2lkICgqc2V0X3J4X2xpbmtfaWQpKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4tXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcXG4rXFx0aW50ICgqZ2V0X3J4X2xpbmtfaWQpKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW5saW5lXFxuQEAgLTI4MSwxMyArMjgxLDE1IEBAIHN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19od19tYWNfaWRfdG9fc3JuZ19pZChjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHcsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoMTJrX2h3X3NldF9yeF9saW5rX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodyxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxcbitzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXFxuIHtcXG4tXFx0aWYgKGh3LVxcdTAwM2Vod19vcHMtXFx1MDAzZXNldF9yeF9saW5rX2lkKVxcbi1cXHRcXHRody1cXHUwMDNlaHdfb3BzLVxcdTAwM2VzZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpO1xcbitcXHRpZiAoaHctXFx1MDAzZWh3X29wcy1cXHUwMDNlZ2V0X3J4X2xpbmtfaWQpXFxuK1xcdFxcdHJldHVybiBody1cXHUwMDNlaHdfb3BzLVxcdTAwM2VnZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpO1xcbitcXG4rXFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgYXRoMTJrX2Z3X2llIHtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5jXFxuaW5kZXggOTVkODdkZDY3ODcyZi4uOGI3MjJlZTBhZDhmYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcXG5AQCAtMjMxNywxNyArMjMxNywxNiBAQCBhdGgxMmtfd2lmaTdfZHBfcnhkZXNjX21wZHVfdmFsaWQoc3RydWN0IGF0aDEya19iYXNlICphYixcXG4gXFx0cmV0dXJuIHRsdl90YWcgPT0gSEFMX1JYX01QRFVfU1RBUlQ7XFxuIH1cXG4gXFxuLXZvaWRcXG4tYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbitpbnRcXG4rYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXFxuIHtcXG4tXFx0c3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gMTtcXG4tXFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gZHBfcGVlci1cXHUwMDNlaHdfbGlua3NbcnhjYi1cXHUwMDNlaHdfbGlua19pZF07XFxuK1xcdHJldHVybiBkcF9wZWVyLVxcdTAwM2Vod19saW5rc1tyeGNiLVxcdTAwM2Vod19saW5rX2lkXTtcXG4gfVxcbiBcXG4tdm9pZFxcbi1hdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuK2ludFxcbithdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cylcXG4ge1xcbkBAIC0yMzQxLDEwICsyMzQwLDkgQEAgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbiBcXHRsaW5rc19tYXAgPSBSRUFEX09OQ0UoZHBfcGVlci1cXHUwMDNlbGlua19wZWVyc19tYXApO1xcbiBcXHRmb3JfZWFjaF9zZXRfYml0KGksIFxcdTAwMjZsaW5rc19tYXAsIEFUSDEyS19OVU1fTUFYX0xJTktTKSB7XFxuIFxcdFxcdGxpbmtfcGVlciA9IHJjdV9kZXJlZmVyZW5jZShkcF9wZWVyLVxcdTAwM2VsaW5rX3BlZXJzW2ldKTtcXG4tXFx0XFx0aWYgKGxpbmtfcGVlciBcXHUwMDI2XFx1MDAyNiBsaW5rX3BlZXItXFx1MDAzZXBlZXJfaWQgPT0gcnhjYi1cXHUwMDNlcGVlcl9pZCkge1xcbi1cXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSAxO1xcbi1cXHRcXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBsaW5rX3BlZXItXFx1MDAzZWxpbmtfaWQ7XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAobGlua19wZWVyIFxcdTAwMjZcXHUwMDI2IGxpbmtfcGVlci1cXHUwMDNlcGVlcl9pZCA9PSByeGNiLVxcdTAwM2VwZWVyX2lkKVxcbitcXHRcXHRcXHRyZXR1cm4gbGlua19wZWVyLVxcdTAwM2VsaW5rX2lkO1xcbiBcXHR9XFxuK1xcbitcXHRyZXR1cm4gLTE7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXFxuaW5kZXggMWQzYTQ3ODhhMmRkOS4uZDY4NDg5ZmY3YjAzNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcXG5AQCAtNTcsMTAgKzU3LDEwIEBAIGF0aDEya193aWZpN19kcF9yeGRlc2NfbXBkdV92YWxpZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBoYWxfcnhfZGVzYyAqcnhfZGVzYyk7XFxuIGludCBhdGgxMmtfd2lmaTdfZHBfcnhfdGlkX2RlbGV0ZV9oYW5kbGVyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGF0aDEya19kcF9yeF90aWRfcnhxICpyeF90aWQpO1xcbi12b2lkIGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcXG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XFxuK2ludCBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpO1xcbitpbnQgYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxcbitcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvaHcuY1xcbmluZGV4IDRjMTExOWVkY2FlZGMuLjNjZDM1MTQ2NDI5NmMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXFxuQEAgLTE1OCw3ICsxNTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNuOTI3NF9vcHMgPSB7XFxuIFxcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl9xY245Mjc0LFxcbiBcXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3JpbmdfcWNuOTI3NCxcXG4gXFx0LmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY19xY245Mjc0LFxcbi1cXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NCxcXG4rXFx0LmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQsXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgd2NuNzg1MF9vcHMgPSB7XFxuQEAgLTE2OSw3ICsxNjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgd2NuNzg1MF9vcHMgPSB7XFxuIFxcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxcbiBcXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCxcXG4gXFx0LmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY193Y243ODUwLFxcbi1cXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcXG4rXFx0LmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAsXFxuIH07XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNjMjA3Ml9vcHMgPSB7XFxuQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNjMjA3Ml9vcHMgPSB7XFxuIFxcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxcbiBcXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3Jpbmdfd2NuNzg1MCxcXG4gXFx0LmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY193Y243ODUwLFxcbi1cXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcXG4rXFx0LmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3djbjc4NTAsXFxuIH07XFxuIFxcbiAjZGVmaW5lIEFUSDEyS19UWF9SSU5HX01BU0tfMCAweDFcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcXG5pbmRleCAyYjcwN2ZmYzFhMjBmLi41ZDYyYzRjODYxYmI5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXFxuQEAgLTcyNjAsNyArNzI2MCw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHN0cnVjdCBhdGgxMmtfd21pX21nbXRfcnhfYXJnIHJ4X2V2ID0ge307XFxuIFxcdHN0cnVjdCBhdGgxMmsgKmFyO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuLVxcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgYXRoMTJrX2RwX2xpbmtfcGVlciAqcGVlcjtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcXG4gXFx0Ym9vbCBpc180YWRkcl9udWxsX3BrdDtcXG5AQCAtNzM2MiwxMSArNzM2MSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdGRldl9rZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0XFx0Z290byBleGl0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdHB1YnN0YSA9IHBlZXItXFx1MDAzZXN0YTtcXG4tXFx0XFx0aWYgKHB1YnN0YSBcXHUwMDI2XFx1MDAyNiBwdWJzdGEtXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuLVxcdFxcdFxcdHN0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IDE7XFxuLVxcdFxcdFxcdHN0YXR1cy1cXHUwMDNlbGlua19pZCA9IHBlZXItXFx1MDAzZWxpbmtfaWQ7XFxuLVxcdFxcdH1cXG4gXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmRwLVxcdTAwM2VkcF9sb2NrKTtcXG4gXFx0XFx0Z290byBzZW5kX3J4O1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcXG5pbmRleCA5NjEwMmQyYWYyY2Y5Li5jNDVjNDczMzc1MDllIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmNcXG5AQCAtNyw3ICs3LDggQEBcXG4gI2luY2x1ZGUgXFxcImhjbWQuaFxcXCJcXG4gXFxuIHN0YXRpYyB2b2lkXFxuLWl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbitpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4rXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGl3bF9tbGRfYmFpZF9kYXRhICpiYWlkX2RhdGEsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaXdsX21sZF9yZW9yZGVyX2J1ZmZlciAqcmVvcmRlcl9idWYsXFxuQEAgLTMyLDcgKzMzLDcgQEAgaXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuIFxcdFxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShza2JfbGlzdCkpKSB7XFxuIFxcdFxcdFxcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdHJlb3JkZXJfYnVmLVxcdTAwM2VxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0c3RhKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0bGlua19zdGEpO1xcbiBcXHRcXHRcXHRyZW9yZGVyX2J1Zi1cXHUwMDNlbnVtX3N0b3JlZC0tO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtNzQsNyArNzUsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX3JlbGVhc2VfZnJhbWVzX2Zyb21fbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gXFxuIFxcdHJlb3JkZXJfYnVmID0gXFx1MDAyNmJhX2RhdGEtXFx1MDAzZXJlb3JkZXJfYnVmW3F1ZXVlXTtcXG4gXFxuLVxcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLVxcdTAwM2VzdGEsIG5hcGksIGJhX2RhdGEsXFxuK1xcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYV9kYXRhLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgcmVvcmRlcl9idWYsIG5zc24pO1xcbiBvdXRfdW5sb2NrOlxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG5AQCAtMTgwLDcgKzE4MSw3IEBAIHZvaWQgaXdsX21sZF9kZWxfYmEoc3RydWN0IGl3bF9tbGQgKm1sZCwgaW50IHF1ZXVlLFxcbiBcXHRyZW9yZGVyX2J1ZiA9IFxcdTAwMjZiYV9kYXRhLVxcdTAwM2VyZW9yZGVyX2J1ZltxdWV1ZV07XFxuIFxcbiBcXHQvKiByZWxlYXNlIGFsbCBmcmFtZXMgdGhhdCBhcmUgaW4gdGhlIHJlb3JkZXIgYnVmZmVyIHRvIHRoZSBzdGFjayAqL1xcbi1cXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YS1cXHUwMDNlc3RhLCBOVUxMLFxcbitcXHRpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMobWxkLCBsaW5rX3N0YSwgTlVMTCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGJhX2RhdGEsIHJlb3JkZXJfYnVmLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgaWVlZTgwMjExX3NuX2FkZChyZW9yZGVyX2J1Zi1cXHUwMDNlaGVhZF9zbixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0YmFfZGF0YS1cXHUwMDNlYnVmX3NpemUpKTtcXG5AQCAtMTkzLDcgKzE5NCw3IEBAIHZvaWQgaXdsX21sZF9kZWxfYmEoc3RydWN0IGl3bF9tbGQgKm1sZCwgaW50IHF1ZXVlLFxcbiAgKi9cXG4gZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0XFxuIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLVxcdFxcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4rXFx0XFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MpXFxuIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiX21hY19oZWFkZXIoc2tiKTtcXG5AQCAtMjI4LDEyICsyMjksMTIgQEAgaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0cmV0dXJuIElXTF9NTERfUEFTU19TS0I7XFxuIFxcbiBcXHQvKiBubyBzdGEgeWV0ICovXFxuLVxcdGlmIChJV0xfRldfQ0hFQ0sobWxkLCAhc3RhLFxcbitcXHRpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIWxpbmtfc3RhLFxcbiBcXHRcXHRcXHQgXFxcIkdvdCB2YWxpZCBCQUlEIHdpdGhvdXQgYSB2YWxpZCBzdGF0aW9uIGFzc2lnbmVkIC0gJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBiYWlkKSlcXG4gXFx0XFx0cmV0dXJuIElXTF9NTERfUEFTU19TS0I7XFxuIFxcbi1cXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShzdGEpO1xcbitcXHRtbGRfc3RhID0gaXdsX21sZF9zdGFfZnJvbV9tYWM4MDIxMShsaW5rX3N0YS1cXHUwMDNlc3RhKTtcXG4gXFxuIFxcdC8qIG5vdCBhIGRhdGEgcGFja2V0ICovXFxuIFxcdGlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcXG5AQCAtMzI0LDcgKzMyNSw3IEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdCAqIHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGUgZnJhbWUgcmVsZWFzZSBub3RpZmljYXRpb24gYXJyaXZlcy5cXG4gXFx0ICovXFxuIFxcdGlmICghYW1zZHUgfHwgbGFzdF9zdWJmcmFtZSlcXG4tXFx0XFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgc3RhLCBuYXBpLCBiYWlkX2RhdGEsXFxuK1xcdFxcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYWlkX2RhdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBidWZmZXIsIG5zc24pO1xcbiBcXHRlbHNlIGlmIChidWZmZXItXFx1MDAzZW51bV9zdG9yZWQgPT0gMSlcXG4gXFx0XFx0YnVmZmVyLVxcdTAwM2VoZWFkX3NuID0gbnNzbjtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxcbmluZGV4IDY1MWM4MGQxYzdjZGEuLmM2Y2Q1ZmEyMTliZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxcbkBAIC0xLDYgKzEsNiBAQFxcbiAvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBCU0QtMy1DbGF1c2UgKi9cXG4gLypcXG4tICogQ29weXJpZ2h0IChDKSAyMDI0IEludGVsIENvcnBvcmF0aW9uXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNCwgMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxcbiAgKi9cXG4gI2lmbmRlZiBfX2l3bF9hZ2dfaF9fXFxuICNkZWZpbmUgX19pd2xfYWdnX2hfX1xcbkBAIC0xMDYsNyArMTA2LDcgQEAgaW50IGl3bF9tbGRfYW1wZHVfcnhfc3RvcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiBcXG4gZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0XFxuIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLVxcdFxcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4rXFx0XFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MpO1xcbiBcXG4gdm9pZCBpd2xfbWxkX2hhbmRsZV9mcmFtZV9yZWxlYXNlX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXFxuaW5kZXggMjY5NDM5ZDc4OWY0Ni4uMDJiZGY2Y2NiY2RjOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xcbkBAIC00Nyw3ICs0Nyw4IEBAIGl3bF9tbGRfZmlsbF9waHlfZGF0YV9mcm9tX21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi1cXHRcXHRcXHRcXHQgICBpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpXFxuK1xcdFxcdFxcdFxcdCAgIGludCBxdWV1ZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXFxuIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiX21hY19oZWFkZXIoc2tiKTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuQEAgLTcxLDEzICs3MiwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LyogaWYgd2UgYXJlIGhlcmUgLSB0aGlzIGZvciBzdXJlIGlzIGVpdGhlciBDQ01QIG9yIEdDTVAgKi9cXG4tXFx0aWYgKCFzdGEpIHtcXG4rXFx0aWYgKCFsaW5rX3N0YSkge1xcbiBcXHRcXHRJV0xfREVCVUdfRFJPUChtbGQsXFxuIFxcdFxcdFxcdCAgICAgICBcXFwiZXhwZWN0ZWQgaHctZGVjcnlwdGVkIHVuaWNhc3QgZnJhbWUgZm9yIHN0YXRpb25cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdH1cXG4gXFxuLVxcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7XFxuK1xcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVxcdTAwM2VzdGEpO1xcbiBcXG4gXFx0ZXh0aXYgPSAodTggKiloZHIgKyBpZWVlODAyMTFfaGRybGVuKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCk7XFxuIFxcdGtleWlkeCA9IGV4dGl2WzNdIFxcdTAwM2VcXHUwMDNlIDY7XFxuQEAgLTExOSwxNyArMTIwLDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9tbGRfY2hlY2tfcG4oc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxcbiB7XFxuIFxcdEtVTklUX1NUQVRJQ19TVFVCX1JFRElSRUNUKGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEsXFxuLVxcdFxcdFxcdFxcdCAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTtcXG4rXFx0XFx0XFx0XFx0ICAgbWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7XFxuIFxcbi1cXHRpZiAodW5saWtlbHkoaXdsX21sZF9jaGVja19wbihtbGQsIHNrYiwgcXVldWUsIHN0YSkpKSB7XFxuK1xcdGlmICh1bmxpa2VseShpd2xfbWxkX2NoZWNrX3BuKG1sZCwgc2tiLCBxdWV1ZSwgbGlua19zdGEpKSkge1xcbiBcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRpZWVlODAyMTFfcnhfbmFwaShtbGQtXFx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XFxuK1xcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cXHUwMDNlaHcsIGxpbmtfc3RhLCBza2IsIG5hcGkpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfSUZfSVdMV0lGSV9LVU5JVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKTtcXG4gXFxuQEAgLTE3MjgsNyArMTcyOSw3IEBAIHN0YXRpYyB2b2lkIGl3bF9tbGRfdXBkYXRlX2xhc3RfcnhfdGltZXN0YW1wKHN0cnVjdCBpd2xfbWxkICptbGQsIHU4IGJhaWQpXFxuICAqIFNldHMgKmRyb3AgdG8gdHJ1ZSBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkLlxcbiAgKiBSZXR1cm5zIHRoZSBzdGF0aW9uIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS5cXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqXFxuK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpcXG4gaXdsX21sZF9yeF93aXRoX3N0YShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiBcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICptcGR1X2Rlc2MsXFxuQEAgLTE3NjQsMTEgKzE3NjUsNiBAQCBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuIFxcbiBcXHRyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcXG4gXFxuLVxcdGlmIChsaW5rX3N0YSBcXHUwMDI2XFx1MDAyNiBzdGEtXFx1MDAzZXZhbGlkX2xpbmtzKSB7XFxuLVxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IHRydWU7XFxuLVxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZCA9IGxpbmtfc3RhLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHR9XFxuLVxcbiBcXHQvKiBmaWxsIGNoZWNrc3VtICovXFxuIFxcdGlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItXFx1MDAzZWZyYW1lX2NvbnRyb2wpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBwa3QtXFx1MDAzZWxlbl9uX2ZsYWdzIFxcdTAwMjYgY3B1X3RvX2xlMzIoRkhfUlNDU1JfUlBBX0VOKSkge1xcbkBAIC0xODAzLDEwICsxNzk5LDEwIEBAIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHF1ZXVlKTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHN0YTtcXG4rXFx0cmV0dXJuIGxpbmtfc3RhO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK3N0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsXFxuIFxcdFxcdFxcdFxcdHUzMiBtcGR1X3N0YXR1cyxcXG5AQCAtMTgyMCw3ICsxODE2LDYgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXk7XFxuIFxcdGNvbnN0IHU4ICpmcmFtZSA9ICh2b2lkICopaGRyO1xcbiBcXHRjb25zdCB1OCAqbW1pZTtcXG4tXFx0dTggbGlua19pZDtcXG4gXFxuIFxcdGlmICgobXBkdV9zdGF0dXMgXFx1MDAyNiBJV0xfUlhfTVBEVV9TVEFUVVNfU0VDX01BU0spID09XFxuIFxcdCAgICAgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19OT05FKVxcbkBAIC0xODM2LDEwICsxODMxLDEwIEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gXFx0aWYgKCFpZWVlODAyMTFfaXNfYmVhY29uKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0aWYgKCFzdGEpXFxuK1xcdGlmICghbGlua19zdGEpXFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFxuLVxcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7XFxuK1xcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVxcdTAwM2VzdGEpO1xcbiBcXHRtbGRfdmlmID0gaXdsX21sZF92aWZfZnJvbV9tYWM4MDIxMShtbGRfc3RhLVxcdTAwM2V2aWYpO1xcbiBcXG4gXFx0Lyoga2V5IG1pc21hdGNoIC0gd2lsbCBhbHNvIHJlcG9ydCAhTUlDX09LIGJ1dCB3ZSBzaG91bGRuJ3QgY291bnQgaXQgKi9cXG5AQCAtMTg1Myw4ICsxODQ4LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG4tXFx0bGlua19pZCA9IHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCA/IHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZCA6IDA7XFxuLVxcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2UobWxkX3ZpZi1cXHUwMDNlbGlua1tsaW5rX2lkXSk7XFxuK1xcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2UobWxkX3ZpZi1cXHUwMDNlbGlua1tsaW5rX3N0YS1cXHUwMDNlbGlua19pZF0pO1xcbiBcXHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rKSlcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiBcXG5AQCAtMTkwNSw3ICsxODk5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGl3bF9tbGRfcnhfY3J5cHRvKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKmRlc2MsIGludCBxdWV1ZSxcXG5AQCAtMTkxNSw3ICsxOTA5LDcgQEAgc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbiBcXG4gXFx0aWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc19tZ210KGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICAhaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLVxcdTAwM2VmcmFtZV9jb250cm9sKSkpXFxuLVxcdFxcdHJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChzdGEsIGhkciwgcnhfc3RhdHVzLCBzdGF0dXMsXFxuK1xcdFxcdHJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGxlMTZfdG9fY3B1KGRlc2MtXFx1MDAzZW1wZHVfbGVuKSk7XFxuIFxcbiBcXHRpZiAoIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcXG5AQCAtMjAyMyw3ICsyMDE3LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTtcXG4gXFx0c3RydWN0IGl3bF9tbGRfcnhfcGh5X2RhdGEgcGh5X2RhdGEgPSB7fTtcXG4gXFx0c3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKm1wZHVfZGVzYyA9ICh2b2lkICopcGt0LVxcdTAwM2VkYXRhO1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gXFx0c2l6ZV90IG1wZHVfZGVzY19zaXplID0gc2l6ZW9mKCptcGR1X2Rlc2MpO1xcbkBAIC0yMDg2LDcgKzIwODAsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcbi1cXHRzdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSwgXFx1MDAyNmRyb3ApO1xcbitcXHRsaW5rX3N0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmRyb3ApO1xcbiBcXHRpZiAoZHJvcClcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG5AQCAtMjEyNyw3ICsyMTIyLDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXG4gXFx0aXdsX21sZF9yeF9maWxsX3N0YXR1cyhtbGQsIGxpbmtfaWQsIGhkciwgc2tiLCBcXHUwMDI2cGh5X2RhdGEpO1xcbiBcXG4tXFx0aWYgKGl3bF9tbGRfcnhfY3J5cHRvKG1sZCwgc3RhLCBoZHIsIHJ4X3N0YXR1cywgbXBkdV9kZXNjLCBxdWV1ZSxcXG4rXFx0aWYgKGl3bF9tbGRfcnhfY3J5cHRvKG1sZCwgbGlua19zdGEsIGhkciwgcnhfc3RhdHVzLCBtcGR1X2Rlc2MsIHF1ZXVlLFxcbiBcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShwa3QtXFx1MDAzZWxlbl9uX2ZsYWdzKSwgXFx1MDAyNmNyeXB0b19sZW4pKVxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcbkBAIC0yMTQwLDcgKzIxMzUsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdGlmIChpd2xfbWxkX3RpbWVfc3luY19mcmFtZShtbGQsIHNrYiwgaGRyLVxcdTAwM2VhZGRyMikpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBuYXBpLCBxdWV1ZSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7XFxuK1xcdHJlb3JkZXJfcmVzID0gaXdsX21sZF9yZW9yZGVyKG1sZCwgbmFwaSwgcXVldWUsIGxpbmtfc3RhLCBza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgIG1wZHVfZGVzYyk7XFxuIFxcdHN3aXRjaCAocmVvcmRlcl9yZXMpIHtcXG4gXFx0Y2FzZSBJV0xfTUxEX1BBU1NfU0tCOlxcbiBcXHRcXHRicmVhaztcXG5AQCAtMjE1Myw3ICsyMTQ5LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHRnb3RvIGRyb3A7XFxuIFxcdH1cXG4gXFxuLVxcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBzdGEpO1xcbitcXHRpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgbGlua19zdGEpO1xcbiBcXG4gXFx0Z290byBvdXQ7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxcbmluZGV4IDU3M2I4OWMzYzljNjEuLmIwOGM1YWRlM2RiOGYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcXG5AQCAtNjksNyArNjksNyBAQCB2b2lkIGl3bF9tbGRfaGFuZGxlX3JzY19ub3RpZihzdHJ1Y3QgaXdsX21sZCAqbWxkLFxcbiB2b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4gXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpO1xcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKTtcXG4gXFxuIHZvaWQgaXdsX21sZF9oYW5kbGVfcGh5X2Fpcl9zbmlmZmVyX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXFxuaW5kZXggMjliMDI0OGNlYzNkZi4uZTllZmUyOTk2ZjA3MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jXFxuQEAgLTIsNyArMiw3IEBAXFxuIC8qXFxuICAqIEtVbml0IHRlc3RzIGZvciBjaGFubmVsIGhlbHBlciBmdW5jdGlvbnNcXG4gICpcXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cXG4rICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjYgSW50ZWwgQ29ycG9yYXRpb25cXG4gICovXFxuICNpbmNsdWRlIFxcdTAwM2NrdW5pdC90ZXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NrdW5pdC9zdGF0aWNfc3R1Yi5oXFx1MDAzZVxcbkBAIC00NDEsNyArNDQxLDcgQEAgc3RhdGljIHZvaWRcXG4gZmFrZV9pd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxcbiB7XFxuIFxcdF9fc2tiX3F1ZXVlX3RhaWwoXFx1MDAyNmdfcmVsZWFzZWRfc2ticywgc2tiKTtcXG4gXFx0Z19udW1fcmVsZWFzZWRfc2ticysrO1xcbkBAIC02MzAsNyArNjMwLDggQEAgc3RhdGljIHZvaWQgdGVzdF9yZW9yZGVyX2J1ZmZlcihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdG1wZHVfZGVzYyA9IHNldHVwX21wZHVfZGVzYygpO1xcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCBzdGEsIHNrYiwgbXBkdV9kZXNjKTtcXG4rXFx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaywgc2tiLFxcbitcXHRcXHRcXHRcXHQgICAgICBtcGR1X2Rlc2MpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdEtVTklUX0FTU0VSVF9FUSh0ZXN0LCByZW9yZGVyX3JlcywgcGFyYW0tXFx1MDAzZWV4cGVjdGVkLnJlb3JkZXJfcmVzKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcXG5pbmRleCBhYjFlYjJlYjBjM2NkLi44YzE5N2EwOTBjMmIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXFxuQEAgLTkwLDcgKzkwLDcgQEAgc3RhdGljIHZvaWQgaXdsX212bV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbiBcXHRcXHRcXHRcXHRmcmFnbGVuLCByeGItXFx1MDAzZXRydWVzaXplKTtcXG4gXFx0fVxcbiBcXG4tXFx0aWVlZTgwMjExX3J4X25hcGkobXZtLVxcdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xcbitcXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBzdGEgPyBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jXFxuaW5kZXggN2YwYjRmNWRhYTIxNC4uOGM0MDA5ZDNhMDBjYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcXG5AQCAtMSw2ICsxLDYgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXFxuIC8qXFxuLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0LCAyMDE4LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cXG4rICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBJbnRlbCBNb2JpbGUgQ29tbXVuaWNhdGlvbnMgR21iSFxcbiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBJbnRlbCBEZXV0c2NobGFuZCBHbWJIXFxuICAqL1xcbkBAIC0yNDMsNyArMjQzLDcgQEAgc3RhdGljIHZvaWQgaXdsX212bV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcXG4rXFx0aWVlZTgwMjExX3J4X25hcGkobXZtLVxcdTAwM2Vodywgc3RhID8gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGl3bF9tdm1fdXNlZF9hdmVyYWdlX2VuZXJneShzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbkBAIC0yNTI4LDcgKzI1MjgsNyBAQCB2b2lkIGl3bF9tdm1fcnhfbW9uaXRvcl9ub19kYXRhKHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0fVxcbiBcXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XFxuK1xcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIHN0YSA/IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jXFxuaW5kZXggYWJiZTY1Y2JjZDg5ZS4uM2RhMDZhNTU5MTNlZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcXG5AQCAtMTI1NSw3ICsxMjU1LDcgQEAgRVhQT1JUX1NZTUJPTChtdDc2X3J4X3NpZ25hbCk7XFxuIHN0YXRpYyB2b2lkXFxuIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0c3RydWN0IGllZWU4MDIxMV9odyAqKmh3LFxcbi1cXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqKnN0YSlcXG4rXFx0XFx0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqKmxpbmtfc3RhKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IG10NzZfc2tiX2dldF9oZHIoc2tiKTtcXG5AQCAtMTMwMiwxMSArMTMwMiwxNSBAQCBtdDc2X3J4X2NvbnZlcnQoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdCAgICAgICBzaXplb2YobXN0YXQuY2hhaW5fc2lnbmFsKSk7XFxuIFxcbiBcXHRpZiAobXN0YXQud2NpZCkge1xcbi1cXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSBtc3RhdC53Y2lkLVxcdTAwM2VsaW5rX3ZhbGlkO1xcbi1cXHRcXHRzdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBtc3RhdC53Y2lkLVxcdTAwM2VsaW5rX2lkO1xcbitcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gd2NpZF90b19zdGEobXN0YXQud2NpZCk7XFxuK1xcbitcXHRcXHRpZiAobXN0YXQud2NpZC1cXHUwMDNlbGlua192YWxpZClcXG4rXFx0XFx0XFx0Kmxpbmtfc3RhID1cXG4rXFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlKHN0YS1cXHUwMDNlbGlua1ttc3RhdC53Y2lkLVxcdTAwM2VsaW5rX2lkXSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0Kmxpbmtfc3RhID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaztcXG4gXFx0fVxcbiBcXG4tXFx0KnN0YSA9IHdjaWRfdG9fc3RhKG1zdGF0LndjaWQpO1xcbiBcXHQqaHcgPSBtdDc2X3BoeV9odyhkZXYsIG1zdGF0LnBoeV9pZHgpO1xcbiB9XFxuIFxcbkBAIC0xNTMwLDcgKzE1MzQsNyBAQCBtdDc2X2NoZWNrX3N0YShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gdm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcXG4ge1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9odyAqaHc7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IsICp0bXA7XFxuIFxcdExJU1RfSEVBRChsaXN0KTtcXG5AQCAtMTU0MSw4ICsxNTQ1LDggQEAgdm9pZCBtdDc2X3J4X2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmcmFtZXMsXFxuIFxcbiBcXHRcXHRtdDc2X2NoZWNrX2NjbXBfcG4oc2tiKTtcXG4gXFx0XFx0c2tiX3NoaW5mbyhza2IpLVxcdTAwM2VmcmFnX2xpc3QgPSBOVUxMO1xcbi1cXHRcXHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFxcdTAwMjZodywgXFx1MDAyNnN0YSk7XFxuLVxcdFxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbitcXHRcXHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFxcdTAwMjZodywgXFx1MDAyNmxpbmtfc3RhKTtcXG4rXFx0XFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfc3RhLCBza2IsIFxcdTAwMjZsaXN0KTtcXG4gXFxuIFxcdFxcdC8qIHN1YnNlcXVlbnQgYW1zZHUgZnJhbWVzICovXFxuIFxcdFxcdHdoaWxlIChuc2tiKSB7XFxuQEAgLTE1NTAsOCArMTU1NCw4IEBAIHZvaWQgbXQ3Nl9yeF9jb21wbGV0ZShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZnJhbWVzLFxcbiBcXHRcXHRcXHRuc2tiID0gbnNrYi1cXHUwMDNlbmV4dDtcXG4gXFx0XFx0XFx0c2tiLVxcdTAwM2VuZXh0ID0gTlVMTDtcXG4gXFxuLVxcdFxcdFxcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXFx1MDAyNmh3LCBcXHUwMDI2c3RhKTtcXG4tXFx0XFx0XFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIHN0YSwgc2tiLCBcXHUwMDI2bGlzdCk7XFxuK1xcdFxcdFxcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXFx1MDAyNmh3LCBcXHUwMDI2bGlua19zdGEpO1xcbitcXHRcXHRcXHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0c3Bpbl91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlcnhfbG9jayk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcXG5pbmRleCAzOTdlYmJmY2FjMDlhLi40NTRkODc2YWViODg2IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcXG5AQCAtMzA3MywxMCArMzA3Myw4IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXFxuIFxcdHN0cnVjdCBydHc4OV92aWYgKnJ0d3ZpZiA9IHZpZl90b19ydHd2aWYodmlmKTtcXG4gXFx0c3RydWN0IHJ0dzg5X3J4X2Rlc2NfaW5mbyAqZGVzY19pbmZvID0gaXRlcl9kYXRhLVxcdTAwM2VkZXNjX2luZm87XFxuIFxcdHN0cnVjdCBza19idWZmICpza2IgPSBpdGVyX2RhdGEtXFx1MDAzZXNrYjtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbiBcXHRzdHJ1Y3QgcnR3ODlfcnhfcGh5X3BwZHUgKnBoeV9wcGR1ID0gaXRlcl9kYXRhLVxcdTAwM2VwaHlfcHBkdTtcXG4tXFx0Ym9vbCBpc19tbGQgPSBpZWVlODAyMTFfdmlmX2lzX21sZCh2aWYpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZjtcXG4gXFx0c3RydWN0IHJ0dzg5X3ZpZl9saW5rICpydHd2aWZfbGluaztcXG4gXFx0Y29uc3QgdTggKmJzc2lkID0gaXRlcl9kYXRhLVxcdTAwM2Vic3NpZDtcXG5AQCAtMzExMCwxMSArMzEwOCw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXFxuIFxcdGlmICghZXRoZXJfYWRkcl9lcXVhbCh0YXJnZXRfYnNzaWQsIGJzc2lkKSlcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoaXNfbWxkKSB7XFxuLVxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCA9IHRydWU7XFxuLVxcdFxcdHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZCA9IHJ0d3ZpZl9saW5rLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHR9XFxuLVxcbiBcXHRiYiA9IHJ0dzg5X2dldF9iYl9jdHgocnR3ZGV2LCBydHd2aWZfbGluay1cXHUwMDNlcGh5X2lkeCk7XFxuIFxcdHBrdF9zdGF0ID0gXFx1MDAyNmJiLVxcdTAwM2VjdXJfcGt0X3N0YXQ7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuaW5kZXggMDJiNmQ4MWNjY2QxMS4uYTBkNTE5Y2Q5YzRmYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXFxuQEAgLTE4ODAsOSArMTg4MCw2IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3J4KHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxcbiBcXHRcXHRcXHRcXHRzcC1cXHUwMDNlYWN0aXZlX2xpbmtzX3J4IFxcdTAwMjY9IH5CSVQobGlua19pZCk7XFxuIFxcdFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0XFx0c3AtXFx1MDAzZWFjdGl2ZV9saW5rc19yeCB8PSBCSVQobGlua19pZCk7XFxuLVxcbi1cXHRcXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgPSB0cnVlO1xcbi1cXHRcXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWxpbmtfaWQgPSBsaW5rX2lkO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2NmZzgwMjExLmggYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXFxuaW5kZXggOTdjMTZkNGZmMTI3MS4uNDM2NDc4ZGFmNTU5NiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaFxcbkBAIC00MDA5LDYgKzQwMDksNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfdXBkYXRlX2Z0X2llc19wYXJhbXMge1xcbiAgKiBAbGlua19pZDogZm9yIE1MTywgdGhlIGxpbmsgSUQgdG8gdHJhbnNtaXQgb24sIC0xIGlmIG5vdCBnaXZlbjsgbm90ZVxcbiAgKlxcdHRoYXQgdGhlIGxpbmsgSUQgaXNuJ3QgdmFsaWRhdGVkIChtdWNoKSwgaXQncyBpbiByYW5nZSBidXQgdGhlXFxuICAqXFx0bGluayBtaWdodCBub3QgZXhpc3QgKG9yIGJlIHVzZWQgYnkgdGhlIHJlY2VpdmVyIFNUQSlcXG4rICogQG5vX3N0YTogc2V0IGlmIHRoZSBmcmFtZSBzaG91bGQgbm90IGJlIHRyYW5zbWl0dGVkIHVzaW5nIGFuIGV4aXN0aW5nIFNUQVxcbiAgKi9cXG4gc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuO1xcbkBAIC00MDIxLDYgKzQwMjIsNyBAQCBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMge1xcbiBcXHRpbnQgbl9jc2Ffb2Zmc2V0cztcXG4gXFx0Y29uc3QgdTE2ICpjc2Ffb2Zmc2V0cztcXG4gXFx0aW50IGxpbmtfaWQ7XFxuK1xcdGJvb2wgbm9fc3RhO1xcbiB9O1xcbiBcXG4gLyoqXFxuQEAgLTk1MDEsNiArOTUwMyw3IEBAIHZvaWQgY2ZnODAyMTFfY29ubl9mYWlsZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLFxcbiAgKiBAZmxhZ3M6IGZsYWdzLCBhcyBkZWZpbmVkIGluIFxcdTAwMjZlbnVtIG5sODAyMTFfcnhtZ210X2ZsYWdzXFxuICAqIEByeF90c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBmcmFtZSBSWCBpbiBuYW5vc2Vjb25kc1xcbiAgKiBAYWNrX3RzdGFtcDogSGFyZHdhcmUgdGltZXN0YW1wIG9mIGFjayBUWCBpbiBuYW5vc2Vjb25kc1xcbisgKiBAbm9fc3RhOiBzZXQgaWYgbm8gc3RhdGlvbiBpcyBrbm93biBmb3IgdGhlIGZyYW1lIChyZWxldmFudCBmb3IgTUxEKVxcbiAgKi9cXG4gc3RydWN0IGNmZzgwMjExX3J4X2luZm8ge1xcbiBcXHRpbnQgZnJlcTtcXG5AQCAtOTUxMiw2ICs5NTE1LDcgQEAgc3RydWN0IGNmZzgwMjExX3J4X2luZm8ge1xcbiBcXHR1MzIgZmxhZ3M7XFxuIFxcdHU2NCByeF90c3RhbXA7XFxuIFxcdHU2NCBhY2tfdHN0YW1wO1xcbitcXHRib29sIG5vX3N0YTtcXG4gfTtcXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbmluZGV4IDlkMWZhYzZlODA4MjkuLjdhYWU3MjhlOTZkODQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaFxcbisrKyBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcXG5AQCAtMTc3MCwxMCArMTc3MCw5IEBAIGVudW0gbWFjODAyMTFfcnhfZW5jb2Rpbmcge1xcbiAgKiBAYW1wZHVfcmVmZXJlbmNlOiBBLU1QRFUgcmVmZXJlbmNlIG51bWJlciwgbXVzdCBiZSBhIGRpZmZlcmVudCB2YWx1ZSBmb3JcXG4gICpcXHRlYWNoIEEtTVBEVSBidXQgdGhlIHNhbWUgZm9yIGVhY2ggc3ViZnJhbWUgd2l0aGluIG9uZSBBLU1QRFVcXG4gICogQHplcm9fbGVuZ3RoX3BzZHVfdHlwZTogcmFkaW90YXAgdHlwZSBvZiB0aGUgMC1sZW5ndGggUFNEVVxcbi0gKiBAbGlua192YWxpZDogaWYgdGhlIGxpbmsgd2hpY2ggaXMgaWRlbnRpZmllZCBieSBAbGlua19pZCBpcyB2YWxpZC4gVGhpcyBmbGFnXFxuLSAqXFx0aXMgc2V0IG9ubHkgd2hlbiBjb25uZWN0aW9uIGlzIE1MTy5cXG4tICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBUaGlzIGlzIHVzZWQgYWxvbmcgd2l0aFxcbi0gKlxcdEBsaW5rX3ZhbGlkLlxcbisgKiBAbGlua19pZDogaWQgb2YgdGhlIGxpbmsgdXNlZCB0byByZWNlaXZlIHRoZSBwYWNrZXQuIFNldCBhbmQgdXNlZCBieVxcbisgKlxcdG1hYzgwMjExIGludGVybmFsbHksIGl0IHVzZXMgQGZyZXEgc2V0IGJ5IHRoZSBkcml2ZXIgdG8gaWRlbnRpZnkgdGhlXFxuKyAqXFx0Y29ycmVjdCBsaW5rIHBlciB2aWYuXFxuICAqL1xcbiBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyB7XFxuIFxcdHU2NCBtYWN0aW1lO1xcbkBAIC0xODEzLDcgKzE4MTIsNyBAQCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyB7XFxuIFxcdHU4IGNoYWlucztcXG4gXFx0czggY2hhaW5fc2lnbmFsW0lFRUU4MDIxMV9NQVhfQ0hBSU5TXTtcXG4gXFx0dTggemVyb19sZW5ndGhfcHNkdV90eXBlO1xcbi1cXHR1OCBsaW5rX3ZhbGlkOjEsIGxpbmtfaWQ6NDtcXG4rXFx0dTggbGlua19pZDo0O1xcbiB9O1xcbiBcXG4gc3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpIFxcdTAwM2M9IHNpemVvZl9maWVsZChzdHJ1Y3Qgc2tfYnVmZiwgY2IpKTtcXG5AQCAtNTM4OSwxNCArNTM4OCwxOCBAQCB2b2lkIGllZWU4MDIxMV9yZXN0YXJ0X2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTtcXG4gICogbWl4ZWQgZm9yIGEgc2luZ2xlIGhhcmR3YXJlLiBNdXN0IG5vdCBydW4gY29uY3VycmVudGx5IHdpdGhcXG4gICogaWVlZTgwMjExX3R4X3N0YXR1c19za2IoKSBvciBpZWVlODAyMTFfdHhfc3RhdHVzX25pKCkuXFxuICAqXFxuKyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxcbisgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXFxuKyAqXFxuICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBCSHMgZGlzYWJsZWQgYW5kIFJDVSByZWFkIGxvY2tcXG4gICpcXG4gICogQGh3OiB0aGUgaGFyZHdhcmUgdGhpcyBmcmFtZSBjYW1lIGluIG9uXFxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcXG4rICogQGxpbmtfc3RhOiB0aGUgbGluayBzdGF0aW9uIHRoZSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCBmcm9tLCBvciAlTlVMTFxcbiAgKiBAc2tiOiB0aGUgYnVmZmVyIHRvIHJlY2VpdmUsIG93bmVkIGJ5IG1hYzgwMjExIGFmdGVyIHRoaXMgY2FsbFxcbiAgKiBAbGlzdDogdGhlIGRlc3RpbmF0aW9uIGxpc3RcXG4gICovXFxuLXZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xcbiBcXG4gLyoqXFxuQEAgLTU0MTQsMTQgKzU0MTcsMTggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcXG4gICogbWl4ZWQgZm9yIGEgc2luZ2xlIGhhcmR3YXJlLiBNdXN0IG5vdCBydW4gY29uY3VycmVudGx5IHdpdGhcXG4gICogaWVlZTgwMjExX3R4X3N0YXR1c19za2IoKSBvciBpZWVlODAyMTFfdHhfc3RhdHVzX25pKCkuXFxuICAqXFxuKyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxcbisgKiBoYXMgdG8gYmUgcHJvdmlkZWQgYW5kIHRoZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gbWF5IGJlIHNraXBwZWQuXFxuKyAqXFxuICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBCSHMgZGlzYWJsZWQuXFxuICAqXFxuICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvblxcbi0gKiBAc3RhOiB0aGUgc3RhdGlvbiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXFxuKyAqIEBsaW5rX3N0YTogdGhlIGxpbmsgc3RhdGlvbiB0aGUgZGF0YSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcXG4gICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGxcXG4gICogQG5hcGk6IHRoZSBOQVBJIGNvbnRleHRcXG4gICovXFxuLXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXFxuK3ZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG5pbmRleCAwMjAzODdkNzY0MTIyLi40NjUzZjhmMjZlZTcwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oXFxuQEAgLTMxODUsNiArMzE4NSwxMSBAQCBlbnVtIG5sODAyMTFfY29tbWFuZHMge1xcbiAgKlxcdFRoZSBhZ2dyZWdhdGVkIG1lc3NhZ2UgYWx3YXlzIHByZWNlZGVzIHRoZSBwZXItbGluayBtZXNzYWdlcyBmb3IgdGhlXFxuICAqXFx0c2FtZSBzdGF0aW9uIHdpdGhpbiBhIGR1bXAgc2VxdWVuY2UuXFxuICAqXFxuKyAqIEBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQTogVmFsaWQgZm9yIE5MODAyMTFfQ01EX0ZSQU1FIHRvIGRlbm90ZSB0aGF0XFxuKyAqXFx0dGhlIGtlcm5lbCBoYWQgbm8gc3RhdGlvbiBmb3IgYSByZWNlaXZlZCBmcmFtZSBvciBzaG91bGQgbm90IHVzZSBhXFxuKyAqXFx0a25vd24gc3RhdGlvbiB0byB0cmFuc21pdCBhIGZyYW1lLiBUaGlzIGlzIHJlbGV2YW50IHRvIGtub3cgd2hldGhlclxcbisgKlxcdE1MRCBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcHBlbmVkIG9yIHRvIGRpc2FibGUgaXQgd2hlbiBzZW5kaW5nIGEgZnJhbWUuXFxuKyAqXFxuICAqIEBOVU1fTkw4MDIxMV9BVFRSOiB0b3RhbCBudW1iZXIgb2Ygbmw4MDIxMV9hdHRycyBhdmFpbGFibGVcXG4gICogQE5MODAyMTFfQVRUUl9NQVg6IGhpZ2hlc3QgYXR0cmlidXRlIG51bWJlciBjdXJyZW50bHkgZGVmaW5lZFxcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXFxuQEAgLTM3ODUsNiArMzc5MCw4IEBAIGVudW0gbmw4MDIxMV9hdHRycyB7XFxuIFxcbiBcXHROTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUUyxcXG4gXFxuK1xcdE5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBLFxcbitcXG4gXFx0LyogYWRkIGF0dHJpYnV0ZXMgaGVyZSwgdXBkYXRlIHRoZSBwb2xpY3kgaW4gbmw4MDIxMS5jICovXFxuIFxcbiBcXHRfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNULFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWdnLXR4LmMgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmNcXG5pbmRleCA0ODMzYjQ2NzcwYjYyLi5kZDhhMTFlZjZlNTJiIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctdHguY1xcbisrKyBiL25ldC9tYWM4MDIxMS9hZ2ctdHguY1xcbkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsXFxuIFxcdGlmIChzdGEtXFx1MDAzZXN0YS5kZWZsaW5rLmhlX2NhcC5oYXNfaGUpXFxuIFxcdFxcdGllZWU4MDIxMV9hZGRfYWRkYmFleHQoc2tiLCAwLCBhZ2dfc2l6ZSk7XFxuIFxcbi1cXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCB0aWQsIC0xKTtcXG4rXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XFxuIH1cXG4gXFxuIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcXG5AQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcXG4gXFxuIFxcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cXHUwMDNlZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVCB8XFxuIFxcdFxcdFxcdFxcdFxcdElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUztcXG4tXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XFxuK1xcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIHRpZCwgLTEpO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3NlbmRfYmFyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hcC5jIGIvbmV0L21hYzgwMjExL2FwLmNcXG5pbmRleCBlN2FjOTljNWEyMmViLi5mZTI1NTg5MWMzNWYwIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9hcC5jXFxuKysrIGIvbmV0L21hYzgwMjExL2FwLmNcXG5AQCAtODIsOSArODIsNiBAQCBpZWVlODAyMTFfcnhfZW1sX29wX21vZGVfbm90aWYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdGlmICghaWZ0X2V4dF9jYXBhKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAoIXN0YXR1cy1cXHUwMDNlbGlua192YWxpZClcXG4tXFx0XFx0cmV0dXJuO1xcbi1cXG4gXFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cXHUwMDNlc2EpO1xcbiBcXHRpZiAoIXN0YSlcXG4gXFx0XFx0cmV0dXJuO1xcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jXFxuaW5kZXggZTFlMWI3ZjgyZjNmZS4uYzVjMjExM2ZhNGY3OSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvaHQuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9odC5jXFxuQEAgLTU0NSw3ICs1NDUsNyBAQCBpbnQgaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdGluZm8tXFx1MDAzZXN0YXR1c19kYXRhID0gSUVFRTgwMjExX1NUQVRVU19UWVBFX1NNUFMgfFxcbiBcXHRcXHRcXHQgICAgdTE2X2VuY29kZV9iaXRzKHN0YXR1c19saW5rX2lkIFxcdTAwM2NcXHUwMDNjIDIgfCBzbXBzLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgSUVFRTgwMjExX1NUQVRVU19TVUJEQVRBX01BU0spO1xcbi1cXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcXG4rXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgbGlua19pZCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuaW5kZXggNTc2MWU5NjIxNDkxNC4uMGQ4ZWIwNDI4ODdhOSAxMDA2NDRcXG4tLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaFxcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXFxuQEAgLTI0NjMsNyArMjQ2Myw4IEBAIHZvaWQgaWVlZTgwMjExX3htaXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdCAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIFxcbiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuK1xcdFxcdFxcdFxcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcXG4gXFx0XFx0XFx0XFx0IGVudW0gbmw4MDIxMV9iYW5kIGJhbmQpO1xcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yZXF1aXJlX2VuY3J5cHRlZF9hc3NvYyhfX2xlMTYgZmMsXFxuQEAgLTI0ODMsMTggKzI0ODQsMjAgQEAgaWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0XFx0XFx0ICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxcbiB7XFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHRpZCwgLTEsIGJhbmQpO1xcbitcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgRVJSX1BUUigtRU5PRU5UKSxcXG4rXFx0XFx0XFx0XFx0ICAgIHRpZCwgLTEsIGJhbmQpO1xcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gfVxcbiBcXG4gdm9pZCBpZWVlODAyMTFfdHhfc2tiX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCk7XFxuK1xcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN0YV9pbmZvICpzdGEsXFxuK1xcdFxcdFxcdCAgaW50IHRpZCwgaW50IGxpbmtfaWQpO1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXFxuLVxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIC0xKTtcXG4rXFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgNywgLTEpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xcbmluZGV4IDQzNDYwYTcwNWE2YmQuLmEwYjIxNGRiYjhhZjggMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuY1xcbkBAIC0xNjczLDExICsxNjczLDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmYWNlX3Byb2Nlc3Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdFxcdHN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbi1cXHRcXHRcXHRpZiAoIXN0YXR1cy1cXHUwMDNlbGlua192YWxpZClcXG4tXFx0XFx0XFx0XFx0bGlua19zdGEgPSBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rO1xcbi1cXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdGxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzdGEtXFx1MDAzZWxpbmtbc3RhdHVzLVxcdTAwM2VsaW5rX2lkXSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0bG9ja2RlcF9pc19oZWxkKFxcdTAwMjZsb2NhbC1cXHUwMDNlaHcud2lwaHktXFx1MDAzZW10eCkpO1xcbitcXHRcXHRcXHRsaW5rX3N0YSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVxcdTAwM2Vody53aXBoeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzdGEtXFx1MDAzZWxpbmtbc3RhdHVzLVxcdTAwM2VsaW5rX2lkXSk7XFxuIFxcdFxcdFxcdGlmIChsaW5rX3N0YSlcXG4gXFx0XFx0XFx0XFx0aWVlZTgwMjExX2h0X2hhbmRsZV9jaGFud2lkdGhfbm90aWYobG9jYWwsIHNkYXRhLCBzdGEsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBsaW5rX3N0YSwgY2hhbndpZHRoLFxcbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuY1xcbmluZGV4IGY1MTE2N2YwZmM0NmQuLjM2MTc3NWZiOTMxZWMgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL21sbWUuY1xcbisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmNcXG5AQCAtMTE4MzEsMTIgKzExODMxLDEwIEBAIHZvaWQgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdHJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItXFx1MDAzZWNiO1xcbiBcXHRmYyA9IGxlMTZfdG9fY3B1KG1nbXQtXFx1MDAzZWZyYW1lX2NvbnRyb2wpO1xcbiBcXG4tXFx0aWYgKHJ4X3N0YXR1cy1cXHUwMDNlbGlua192YWxpZCkge1xcbi1cXHRcXHRsaW5rID0gc2RhdGFfZGVyZWZlcmVuY2Uoc2RhdGEtXFx1MDAzZWxpbmtbcnhfc3RhdHVzLVxcdTAwM2VsaW5rX2lkXSxcXG4tXFx0XFx0XFx0XFx0XFx0IHNkYXRhKTtcXG4tXFx0XFx0aWYgKCFsaW5rKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFx0bGluayA9IHNkYXRhX2RlcmVmZXJlbmNlKHNkYXRhLVxcdTAwM2VsaW5rW3J4X3N0YXR1cy1cXHUwMDNlbGlua19pZF0sXFxuK1xcdFxcdFxcdFxcdCBzZGF0YSk7XFxuK1xcdGlmICghbGluaylcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0c3dpdGNoIChmYyBcXHUwMDI2IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7XFxuIFxcdGNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjpcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcXG5pbmRleCA3YWNlZjgwZDVmMWZiLi42NTM3MTA1NzY4MzE2IDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXFxuQEAgLTg1NCw4ICs4NTQsMTAgQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdFxcdFxcdG5lZWRfb2ZmY2hhbiA9IHRydWU7XFxuIFxcbiBcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXFx1MDAzZWRhKTtcXG4tXFx0XFx0bWxvX3N0YSA9IHN0YSBcXHUwMDI2XFx1MDAyNiBzdGEtXFx1MDAzZXN0YS5tbG87XFxuK1xcdFxcdGlmICghcGFyYW1zLVxcdTAwM2Vub19zdGEpIHtcXG4rXFx0XFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cXHUwMDNlZGEpO1xcbitcXHRcXHRcXHRtbG9fc3RhID0gc3RhIFxcdTAwMjZcXHUwMDI2IHN0YS1cXHUwMDNlc3RhLm1sbztcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKG1nbXQtXFx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XFxuIFxcdFxcdCAgICBtZ210LVxcdTAwM2V1LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX1BVQkxJQyB8fFxcbkBAIC04ODQsNyArODg2LDggQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuIFxcdFxcdCAgICAgbG9jYWwtXFx1MDAzZW9wcy1cXHUwMDNlcmVtYWluX29uX2NoYW5uZWwgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICBtZW1jbXAoc2RhdGEtXFx1MDAzZXZpZi5jZmcuYXBfYWRkciwgbWdtdC1cXHUwMDNlYnNzaWQsIEVUSF9BTEVOKSkpIHtcXG4gXFx0XFx0XFx0bmVlZF9vZmZjaGFuID0gdHJ1ZTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzZGF0YS1cXHUwMDNldS5tZ2QuYXNzb2NpYXRlZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHR9IGVsc2UgaWYgKCFwYXJhbXMtXFx1MDAzZW5vX3N0YSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICBzZGF0YS1cXHUwMDNldS5tZ2QuYXNzb2NpYXRlZCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICBldGhlcl9hZGRyX2VxdWFsKHNkYXRhLVxcdTAwM2V2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtXFx1MDAzZWRhKSkge1xcbiBcXHRcXHRcXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVxcdTAwM2VkYSk7XFxuIFxcdFxcdFxcdG1sb19zdGEgPSBzdGEgXFx1MDAyNlxcdTAwMjYgc3RhLVxcdTAwM2VzdGEubWxvO1xcbkBAIC0xMDIyLDcgKzEwMjUsOSBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCFuZWVkX29mZmNoYW4pIHtcXG4tXFx0XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7XFxuK1xcdFxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGFyYW1zLVxcdTAwM2Vub19zdGEgPyBzdGEgOiBFUlJfUFRSKC1FTk9FTlQpLFxcbitcXHRcXHRcXHRcXHQgICAgIDcsIGxpbmtfaWQpO1xcbiBcXHRcXHRyZXQgPSAwO1xcbiBcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguY1xcbmluZGV4IDVlMjZiZThlMjdkOGYuLmVkNWEyZTA1OTA3NTcgMTAwNjQ0XFxuLS0tIGEvbmV0L21hYzgwMjExL3J4LmNcXG4rKysgYi9uZXQvbWFjODAyMTEvcnguY1xcbkBAIC0yMjIsNDMgKzIyMiwyMSBAQCBpZWVlODAyMTFfcnhfcmFkaW90YXBfaGRybGVuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIGludCBsaW5rX2lkLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuLVxcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcXG4tXFxuLVxcdGlmIChsaW5rX2lkIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gMTtcXG4tXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gbGlua19pZDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkID0gMDtcXG4tXFx0fVxcbi1cXG4gXFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnNkYXRhLVxcdTAwM2Vza2JfcXVldWUsIHNrYik7XFxuIFxcdHdpcGh5X3dvcmtfcXVldWUoc2RhdGEtXFx1MDAzZWxvY2FsLVxcdTAwM2Vody53aXBoeSwgXFx1MDAyNnNkYXRhLVxcdTAwM2V3b3JrKTtcXG4tXFx0aWYgKHN0YSkge1xcbi1cXHRcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGFfaW5mbztcXG4tXFxuLVxcdFxcdGlmIChsaW5rX2lkIFxcdTAwM2U9IDApIHtcXG4tXFx0XFx0XFx0bGlua19zdGFfaW5mbyA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXFx1MDAzZWxpbmtbbGlua19pZF0pO1xcbi1cXHRcXHRcXHRpZiAoIWxpbmtfc3RhX2luZm8pXFxuLVxcdFxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0bGlua19zdGFfaW5mbyA9IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbms7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGxpbmtfc3RhX2luZm8tXFx1MDAzZXJ4X3N0YXRzLnBhY2tldHMrKztcXG4tXFx0fVxcbitcXHRpZiAobGlua19zdGEpXFxuK1xcdFxcdGxpbmtfc3RhLVxcdTAwM2VyeF9zdGF0cy5wYWNrZXRzKys7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdCBpbnQgbGlua19pZCxcXG4tXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhLFxcbiBcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRza2ItXFx1MDAzZXByb3RvY29sID0gMDtcXG4tXFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBsaW5rX2lkLCBzdGEsIHNrYik7XFxuK1xcdF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgbGlua19zdGEsIHNrYik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9oYW5kbGVfbXVfbWltb19tb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuQEAgLTMwMSw3ICsyNzksNyBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX211X21pbW9fbW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbiBcXHRpZiAoIXNrYilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgLTEsIE5VTEwsIHNrYik7XFxuK1xcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIE5VTEwsIHNrYik7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTE0OTgsNyArMTQ3Niw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9yZW9yZGVyX2FtcGR1KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcdC8qIGlmIHRoaXMgbXBkdSBpcyBmcmFnbWVudGVkIC0gdGVybWluYXRlIHJ4IGFnZ3JlZ2F0aW9uIHNlc3Npb24gKi9cXG4gXFx0c2MgPSBsZTE2X3RvX2NwdShoZHItXFx1MDAzZXNlcV9jdHJsKTtcXG4gXFx0aWYgKHNjIFxcdTAwMjYgSUVFRTgwMjExX1NDVExfRlJBRykge1xcbi1cXHRcXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHJ4LVxcdTAwM2VzZGF0YSwgcngtXFx1MDAzZWxpbmtfaWQsIE5VTEwsIHNrYik7XFxuK1xcdFxcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2UocngtXFx1MDAzZXNkYXRhLCBOVUxMLCBza2IpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuQEAgLTI1MjQsNyArMjUwMiw3IEBAIGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4gXFxuICBvdXQ6XFxuIFxcdGllZWU4MDIxMV9sZWRfcngocngtXFx1MDAzZWxvY2FsKTtcXG4tXFx0aWYgKHJ4LVxcdTAwM2VzdGEpXFxuK1xcdGlmIChyeC1cXHUwMDNlbGlua19zdGEpXFxuIFxcdFxcdHJ4LVxcdTAwM2VsaW5rX3N0YS1cXHUwMDNlcnhfc3RhdHMucGFja2V0cysrO1xcbiBcXHRyZXR1cm4gUlhfQ09OVElOVUU7XFxuIH1cXG5AQCAtMzMzNSw4ICszMzEzLDggQEAgaWVlZTgwMjExX3J4X2hfZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXHRcXHQgICAgKHRmLVxcdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVRVUVTVCB8fFxcbiBcXHRcXHQgICAgIHRmLVxcdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVTUE9OU0UpKSB7XFxuIFxcdFxcdFxcdHJ4LVxcdTAwM2Vza2ItXFx1MDAzZXByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfVERMUyk7XFxuLVxcdFxcdFxcdF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXFx1MDAzZWxpbmtfaWQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByeC1cXHUwMDNlc3RhLCByeC1cXHUwMDNlc2tiKTtcXG4rXFx0XFx0XFx0X19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19zdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICByeC1cXHUwMDNlc2tiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIFJYX1FVRVVFRDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuQEAgLTM5OTEsNyArMzk2OSw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXHRyZXR1cm4gUlhfUVVFVUVEO1xcbiBcXG4gIHF1ZXVlOlxcbi1cXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19pZCwgcngtXFx1MDAzZXN0YSwgcngtXFx1MDAzZXNrYik7XFxuK1xcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX3N0YSwgcngtXFx1MDAzZXNrYik7XFxuIFxcdHJldHVybiBSWF9RVUVVRUQ7XFxuIH1cXG4gXFxuQEAgLTQwMDUsNiArMzk4Myw3IEBAIGllZWU4MDIxMV9yeF9oX3VzZXJzcGFjZV9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuIFxcdFxcdC5sZW4gPSByeC1cXHUwMDNlc2tiLVxcdTAwM2VsZW4sXFxuIFxcdFxcdC5saW5rX2lkID0gcngtXFx1MDAzZWxpbmtfaWQsXFxuIFxcdFxcdC5oYXZlX2xpbmtfaWQgPSByeC1cXHUwMDNlbGlua19pZCBcXHUwMDNlPSAwLFxcbitcXHRcXHQubm9fc3RhID0gIXJ4LVxcdTAwM2VzdGEsXFxuIFxcdH07XFxuIFxcbiBcXHQvKiBza2lwIGtub3duLWJhZCBhY3Rpb24gZnJhbWVzIGFuZCByZXR1cm4gdGhlbSBpbiB0aGUgbmV4dCBoYW5kbGVyICovXFxuQEAgLTQxMjcsNyArNDEwNiw3IEBAIGllZWU4MDIxMV9yeF9oX2FjdGlvbl9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4gXFx0XFx0XFx0XFx0XFx0bG9jYWwtXFx1MDAzZWh3Lm9mZmNoYW5uZWxfdHhfaHdfcXVldWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChyeC1cXHUwMDNlc2RhdGEsIG5za2IsIDcsIC0xLFxcbitcXHRcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQocngtXFx1MDAzZXNkYXRhLCBuc2tiLCByeC1cXHUwMDNlc3RhLCA3LCAtMSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIHN0YXR1cy1cXHUwMDNlYmFuZCk7XFxuIFxcdH1cXG4gXFxuQEAgLTQxNDcsNyArNDEyNiw3IEBAIGllZWU4MDIxMV9yeF9oX2V4dChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBcXHRcXHRyZXR1cm4gUlhfRFJPUF9VX1VORVhQRUNURURfRVhUX0ZSQU1FO1xcbiBcXG4gXFx0LyogZm9yIG5vdyBvbmx5IGJlYWNvbnMgYXJlIGV4dCwgc28gcXVldWUgdGhlbSAqL1xcbi1cXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19pZCwgcngtXFx1MDAzZXN0YSwgcngtXFx1MDAzZXNrYik7XFxuK1xcdGllZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVxcdTAwM2VsaW5rX3N0YSwgcngtXFx1MDAzZXNrYik7XFxuIFxcbiBcXHRyZXR1cm4gUlhfUVVFVUVEO1xcbiB9XFxuQEAgLTQyMDQsNyArNDE4Myw3IEBAIGllZWU4MDIxMV9yeF9oX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4gXFx0XFx0cmV0dXJuIFJYX0RST1BfVV9VTkhBTkRMRURfTUdNVF9TVFlQRTtcXG4gXFx0fVxcbiBcXG4tXFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXFx1MDAzZWxpbmtfaWQsIHJ4LVxcdTAwM2VzdGEsIHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cXHUwMDNlbGlua19zdGEsIHJ4LVxcdTAwM2Vza2IpO1xcbiBcXG4gXFx0cmV0dXJuIFJYX1FVRVVFRDtcXG4gfVxcbkBAIC00MjQ4LDEyICs0MjI3LDI4IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxcbiBcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnJ4LVxcdTAwM2Vsb2NhbC1cXHUwMDNlcnhfcGF0aF9sb2NrKTtcXG4gXFxuIFxcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShmcmFtZXMpKSkge1xcbitcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuK1xcbiBcXHRcXHQvKlxcbi1cXHRcXHQgKiBhbGwgdGhlIG90aGVyIGZpZWxkcyBhcmUgdmFsaWQgYWNyb3NzIGZyYW1lc1xcbi1cXHRcXHQgKiB0aGF0IGJlbG9uZyB0byBhbiBhTVBEVSBzaW5jZSB0aGV5IGFyZSBvbiB0aGVcXG4tXFx0XFx0ICogc2FtZSBUSUQgZnJvbSB0aGUgc2FtZSBzdGF0aW9uXFxuK1xcdFxcdCAqIE1vc3QgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzLiBIb3dldmVyLFxcbitcXHRcXHQgKiBpbiB0aGUgY2FzZSBvZiByZW9yZGVyaW5nIGZyYW1lcyBtYXkgaGF2ZSBhcnJpdmVkXFxuK1xcdFxcdCAqIG9uIGRpZmZlcmVudCBsaW5rcywgc28gYWRqdXN0IHRoZSBsaW5rX2lkLCBsaW5rXFxuK1xcdFxcdCAqIGFuZCBsaW5rX3N0YSBhY2NvcmRpbmdseS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdHJ4LVxcdTAwM2Vza2IgPSBza2I7XFxuK1xcdFxcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2cngtXFx1MDAzZXNkYXRhLVxcdTAwM2V2aWYpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICB1bmxpa2VseShyeC1cXHUwMDNlbGlua19pZCAhPSBzdGF0dXMtXFx1MDAzZWxpbmtfaWQpKSB7XFxuK1xcdFxcdFxcdGlmIChyeC1cXHUwMDNlc3RhKSB7XFxuK1xcdFxcdFxcdFxcdHJ4LVxcdTAwM2VsaW5rX3N0YSA9XFxuK1xcdFxcdFxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZShyeC1cXHUwMDNlc3RhLVxcdTAwM2VsaW5rW3J4LVxcdTAwM2VsaW5rX2lkXSk7XFxuK1xcbitcXHRcXHRcXHRcXHQvKiBMaW5rIGdvdCBkaXNhYmxlZCwganVzdCB1c2UgZGVmbGluayAqL1xcbitcXHRcXHRcXHRcXHRpZiAoIXJ4LVxcdTAwM2VsaW5rX3N0YSlcXG4rXFx0XFx0XFx0XFx0XFx0cngtXFx1MDAzZWxpbmtfc3RhID0gXFx1MDAyNnJ4LVxcdTAwM2VzdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cngtXFx1MDAzZWxpbmtfaWQgPSBzdGF0dXMtXFx1MDAzZWxpbmtfaWQ7XFxuK1xcdFxcdFxcdHJ4LVxcdTAwM2VsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHJ4LVxcdTAwM2VzZGF0YS1cXHUwMDNlbGlua1tzdGF0dXMtXFx1MDAzZWxpbmtfaWRdKTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKFdBUk5fT05fT05DRSghcngtXFx1MDAzZWxpbmspKSB7XFxuIFxcdFxcdFxcdHJlcyA9IFJYX0RST1BfVV9OT19MSU5LO1xcbkBAIC00MzIzLDcgKzQzMTgsMzQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxcbiBzdGF0aWMgYm9vbFxcbiBpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggbGlua19pZClcXG4ge1xcbi1cXHRyZXR1cm4gISEoc3RhLVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2IEJJVChsaW5rX2lkKSk7XFxuK1xcdGlmIChzdGEtXFx1MDAzZW1sbylcXG4rXFx0XFx0cmV0dXJuIHN0YS1cXHUwMDNldmFsaWRfbGlua3MgXFx1MDAyNiBCSVQobGlua19pZCk7XFxuK1xcbitcXHRyZXR1cm4gc3RhLVxcdTAwM2VkZWZsaW5rLmxpbmtfaWQgPT0gbGlua19pZDtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSlcXG4re1xcbitcXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcXG4rXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWxpbmtfc3RhKSB8fFxcbitcXHQgICAgIWllZWU4MDIxMV9yeF9pc192YWxpZF9zdGFfbGlua19pZChcXHUwMDI2bGlua19zdGEtXFx1MDAzZXN0YS1cXHUwMDNlc3RhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgbGlua19zdGEtXFx1MDAzZWxpbmtfaWQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRzdGEgPSBsaW5rX3N0YS1cXHUwMDNlc3RhO1xcbitcXG4rXFx0cngtXFx1MDAzZXN0YSA9IHN0YTtcXG4rXFx0cngtXFx1MDAzZWxvY2FsID0gc3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNlbG9jYWw7XFxuK1xcdHJ4LVxcdTAwM2VsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cXHUwMDNlc2RhdGEtXFx1MDAzZWxpbmtbbGlua19zdGEtXFx1MDAzZWxpbmtfaWRdKTtcXG4rXFx0aWYgKCFyeC1cXHUwMDNlbGluaylcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cngtXFx1MDAzZWxpbmtfaWQgPSByeC1cXHUwMDNlbGluay1cXHUwMDNlbGlua19pZDtcXG4rXFx0cngtXFx1MDAzZWxpbmtfc3RhID0gbGlua19zdGE7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4gc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG5AQCAtNDM2MCwxMSArNDM4MiwxMyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcbiBcXHRpZiAobGlua19pZCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZyeC1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZikgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIHN0YSBcXHUwMDI2XFx1MDAyNiAhc3RhLVxcdTAwM2VzdGEudmFsaWRfbGlua3MpXFxuK1xcdFxcdCAgICBzdGEgXFx1MDAyNlxcdTAwMjYgIXN0YS1cXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSB7XFxuIFxcdFxcdFxcdHJ4LVxcdTAwM2VsaW5rID1cXG4gXFx0XFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlKHJ4LVxcdTAwM2VzZGF0YS1cXHUwMDNlbGlua1tzdGEtXFx1MDAzZWRlZmxpbmsubGlua19pZF0pO1xcbi1cXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHJ4LVxcdTAwM2VsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShyeC1cXHUwMDNlc3RhLVxcdTAwM2VsaW5rW2xpbmtfaWRdKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0cngtXFx1MDAzZWxpbmsgPSBcXHUwMDI2cngtXFx1MDAzZXNkYXRhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKHJ4LCBsaW5rX2lkKSkge1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdH1cXG5AQCAtNDM4Nyw3ICs0NDExLDcgQEAgdm9pZCBpZWVlODAyMTFfcmVsZWFzZV9yZW9yZGVyX3RpbWVvdXQoc3RydWN0IHN0YV9pbmZvICpzdGEsIGludCB0aWQpXFxuIFxcdHN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7XFxuIFxcdGludCBsaW5rX2lkID0gLTE7XFxuIFxcbi1cXHQvKiBGSVhNRTogc3RhdGlzdGljcyB3b24ndCBiZSByaWdodCB3aXRoIHRoaXMgKi9cXG4rXFx0LyogTk9URTogdGhlIGNvcnJlY3QgbGluayBTVEEgZm9yIHRoZSBmcmFtZSBpcyBzZXQgbGF0ZXIgKi9cXG4gXFx0aWYgKHN0YS1cXHUwMDNlc3RhLnZhbGlkX2xpbmtzKVxcbiBcXHRcXHRsaW5rX2lkID0gZmZzKHN0YS1cXHUwMDNlc3RhLnZhbGlkX2xpbmtzKSAtIDE7XFxuIFxcbkBAIC00OTE0LDIwICs0OTM4LDE0IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF84MDIzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9zdGFfcnhfc3RhdHMgKnN0YXRzO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVxcdTAwM2Vza2IpO1xcbi1cXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IHJ4LVxcdTAwM2VzdGE7XFxuLVxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcXG4rXFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhID0gcngtXFx1MDAzZWxpbmtfc3RhO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtXFx1MDAzZXNrYjtcXG4gXFx0dm9pZCAqc2EgPSBza2ItXFx1MDAzZWRhdGEgKyBFVEhfQUxFTjtcXG4gXFx0dm9pZCAqZGEgPSBza2ItXFx1MDAzZWRhdGE7XFxuIFxcbi1cXHRpZiAocngtXFx1MDAzZWxpbmtfaWQgXFx1MDAzZT0gMCkge1xcbi1cXHRcXHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXFx1MDAzZWxpbmtbcngtXFx1MDAzZWxpbmtfaWRdKTtcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XFxuLVxcdFxcdFxcdGRldl9rZnJlZV9za2IocngtXFx1MDAzZXNrYik7XFxuLVxcdFxcdFxcdHJldHVybjtcXG4tXFx0XFx0fVxcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRsaW5rX3N0YSA9IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbms7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWxpbmtfc3RhKSkge1xcbitcXHRcXHRkZXZfa2ZyZWVfc2tiKHJ4LVxcdTAwM2Vza2IpO1xcbitcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdHN0YXRzID0gXFx1MDAyNmxpbmtfc3RhLVxcdTAwM2VyeF9zdGF0cztcXG5AQCAtNTE1NCw2ICs1MTcyLDkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX2ludm9rZV9mYXN0X3J4KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0fVxcbiBcXG4rXFx0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XFxuK1xcdHN0YXR1cy1cXHUwMDNlbGlua19pZCA9IHJ4LVxcdTAwM2VsaW5rX2lkIFxcdTAwM2MgMCA/IDAgOiByeC1cXHUwMDNlbGlua19pZDtcXG4rXFxuIFxcdGllZWU4MDIxMV9yeF84MDIzKHJ4LCBmYXN0X3J4LCBvcmlnX2xlbik7XFxuIFxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG5AQCAtNTE3OCw2ICs1MTk5LDcgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuIFxcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVxcdTAwM2VsaW5rX3N0YTtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSByeC1cXHUwMDNlbGluaztcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cztcXG4gXFxuIFxcdHJ4LVxcdTAwM2Vza2IgPSBza2I7XFxuIFxcbkBAIC01MjIxLDYgKzUyNDMsOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuIFxcdFxcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LVxcdTAwM2Vza2ItXFx1MDAzZWRhdGE7XFxuIFxcdH1cXG4gXFxuK1xcdHN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihyeC1cXHUwMDNlc2tiKTtcXG4rXFx0c3RhdHVzLVxcdTAwM2VsaW5rX2lkID0gcngtXFx1MDAzZWxpbmtfaWQgXFx1MDAzYyAwID8gMCA6IHJ4LVxcdTAwM2VsaW5rX2lkO1xcbitcXG4gXFx0aWYgKGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcXG4gXFx0XFx0aWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhyeCk7XFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbkBAIC01MjU2LDIyICs1MjgxLDE5IEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXFxuIFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2Zhc3RfcnggKmZhc3Rfcng7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeDtcXG4gXFx0c3RydWN0IHN0YV9pbmZvICpzdGE7XFxuLVxcdGludCBsaW5rX2lkID0gLTE7XFxuIFxcbiBcXHRtZW1zZXQoXFx1MDAyNnJ4LCAwLCBzaXplb2YocngpKTtcXG4gXFx0cnguc2tiID0gc2tiO1xcbiBcXHRyeC5sb2NhbCA9IGxvY2FsO1xcbiBcXHRyeC5saXN0ID0gbGlzdDtcXG4tXFx0cngubGlua19pZCA9IC0xO1xcbiBcXG4gXFx0STgwMl9ERUJVR19JTkMobG9jYWwtXFx1MDAzZWRvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50KTtcXG4gXFxuQEAgLTUyNzksMjMgKzUzMDEsMTUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdGlmIChza2ItXFx1MDAzZWxlbiBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4tXFx0aWYgKCFwdWJzdGEpXFxuK1xcdGlmICghbGlua19wdWJzdGEpXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFxuLVxcdGlmIChzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQpXFxuLVxcdFxcdGxpbmtfaWQgPSBzdGF0dXMtXFx1MDAzZWxpbmtfaWQ7XFxuLVxcbi1cXHQvKlxcbi1cXHQgKiBUT0RPOiBTaG91bGQgdGhlIGZyYW1lIGJlIGRyb3BwZWQgaWYgdGhlIHJpZ2h0IGxpbmtfaWQgaXMgbm90XFxuLVxcdCAqIGF2YWlsYWJsZT8gT3IgbWF5IGJlIGl0IGlzIGZpbmUgaW4gdGhlIGN1cnJlbnQgZm9ybSB0byBwcm9jZWVkIHdpdGhcXG4tXFx0ICogdGhlIGZyYW1lIHByb2Nlc3NpbmcgYmVjYXVzZSB3aXRoIGZyYW1lIGJlaW5nIGluIDgwMi4zIGZvcm1hdCxcXG4tXFx0ICogbGlua19pZCBpcyB1c2VkIG9ubHkgZm9yIHN0YXRzIHB1cnBvc2UgYW5kIHVwZGF0aW5nIHRoZSBzdGF0cyBvblxcbi1cXHQgKiB0aGUgZGVmbGluayBpcyBmaW5lP1xcbi1cXHQgKi9cXG4tXFx0c3RhID0gY29udGFpbmVyX29mKHB1YnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xcbi1cXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXFx1MDAyNnJ4LCBzdGEsIGxpbmtfaWQpKVxcbitcXHRzdGEgPSBjb250YWluZXJfb2YobGlua19wdWJzdGEtXFx1MDAzZXN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpO1xcbitcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXFx1MDAyNnJ4LCBzdGEsIGxpbmtfcHVic3RhLVxcdTAwM2VsaW5rX2lkKSlcXG4gXFx0XFx0Z290byBkcm9wO1xcbiBcXG4rXFx0cngubGlua19pZCA9IGxpbmtfcHVic3RhLVxcdTAwM2VsaW5rX2lkO1xcbitcXG4gXFx0ZmFzdF9yeCA9IHJjdV9kZXJlZmVyZW5jZShyeC5zdGEtXFx1MDAzZWZhc3RfcngpO1xcbiBcXHRpZiAoIWZhc3RfcngpXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG5AQCAtNTMwNyw1OSArNTMyMSwxOSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gXFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBjb25zdW1lKVxcbitzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShpbnQgZnJlcSwgc3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmspXFxuIHtcXG4tXFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xcbi1cXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXFx1MDAzZWRhdGE7XFxuLVxcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbi1cXHRpbnQgbGlua19pZCA9IC0xO1xcbi1cXG4tXFx0aWYgKGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcXG4tXFx0XFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBOVUxMLCAtMSkpXFxuLVxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFxuLVxcdFxcdHJldHVybiBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHJ4LCBza2IsIGNvbnN1bWUpO1xcbi1cXHR9XFxuK1xcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogTG9vayB1cCBsaW5rIHN0YXRpb24gZmlyc3QsIGluIGNhc2UgdGhlcmUncyBhXFxuLVxcdCAqIGNoYW5jZSB0aGF0IHRoZXkgbWlnaHQgaGF2ZSBhIGxpbmsgYWRkcmVzcyB0aGF0XFxuLVxcdCAqIGlzIGlkZW50aWNhbCB0byB0aGUgTUxEIGFkZHJlc3MsIHRoYXQgd2F5IHdlJ2xsXFxuLVxcdCAqIGhhdmUgdGhlIGxpbmsgaW5mb3JtYXRpb24gaWYgbmVlZGVkLlxcbi1cXHQgKi9cXG4tXFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3MocngtXFx1MDAzZXNkYXRhLCBoZHItXFx1MDAzZWFkZHIyKTtcXG4tXFx0aWYgKGxpbmtfc3RhKSB7XFxuLVxcdFxcdHN0YSA9IGxpbmtfc3RhLVxcdTAwM2VzdGE7XFxuLVxcdFxcdGxpbmtfaWQgPSBsaW5rX3N0YS1cXHUwMDNlbGlua19pZDtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbi1cXG4tXFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhyeC1cXHUwMDNlc2RhdGEsIGhkci1cXHUwMDNlYWRkcjIpO1xcbi1cXHRcXHRpZiAoc3RhdHVzLVxcdTAwM2VsaW5rX3ZhbGlkKSB7XFxuLVxcdFxcdFxcdGxpbmtfaWQgPSBzdGF0dXMtXFx1MDAzZWxpbmtfaWQ7XFxuLVxcdFxcdH0gZWxzZSBpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXFx1MDAyNnJ4LVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQgICBzdGF0dXMtXFx1MDAzZWZyZXEpIHtcXG4tXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XFxuLVxcdFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mO1xcbi1cXG4tXFx0XFx0XFx0Zm9yX2VhY2hfbGlua19kYXRhX3JjdShyeC1cXHUwMDNlc2RhdGEsIGxpbmspIHtcXG4tXFx0XFx0XFx0XFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2VjaGFuY3R4X2NvbmYpO1xcbi1cXHRcXHRcXHRcXHRpZiAoIWNvbmYgfHwgIWNvbmYtXFx1MDAzZWRlZi5jaGFuKVxcbi1cXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdFxcdFxcdGlmIChzdGF0dXMtXFx1MDAzZWZyZXEgPT0gY29uZi1cXHUwMDNlZGVmLmNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxKSB7XFxuLVxcdFxcdFxcdFxcdFxcdGxpbmtfaWQgPSBsaW5rLVxcdTAwM2VsaW5rX2lkO1xcbi1cXHRcXHRcXHRcXHRcXHRicmVhaztcXG4tXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFx0fVxcbitcXHRpZiAoIWZyZXEgfHwgbGluay1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTiB8fFxcbitcXHQgICAgbGluay1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX05BTl9EQVRBKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFxuLVxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShyeCwgc3RhLCBsaW5rX2lkKSlcXG4rXFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVxcdTAwM2Vjb25mLVxcdTAwM2VjaGFuY3R4X2NvbmYpO1xcbitcXHRpZiAoIWNvbmYgfHwgIWNvbmYtXFx1MDAzZWRlZi5jaGFuKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTtcXG4rXFx0cmV0dXJuIGZyZXEgPT0gY29uZi1cXHUwMDNlZGVmLmNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC01MzY3LDE4ICs1MzQxLDIwIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXFxuICAqIGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgcHJvdGVjdGlvbi5cXG4gICovXFxuIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4ge1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTtcXG4rXFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xcbiBcXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xcbitcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuK1xcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xcbiBcXHRfX2xlMTYgZmM7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeDtcXG4tXFx0c3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqcHJldjtcXG4gXFx0c3RydWN0IHJobGlzdF9oZWFkICp0bXA7XFxuK1xcdGJvb2wgcnhfZGF0YV9wZW5kaW5nO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdGZjID0gKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi1cXHUwMDNlZGF0YSktXFx1MDAzZWZyYW1lX2NvbnRyb2w7XFxuQEAgLTUzODYsNyArNTM2Miw2IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdHJ4LnNrYiA9IHNrYjtcXG4gXFx0cngubG9jYWwgPSBsb2NhbDtcXG4gXFx0cngubGlzdCA9IGxpc3Q7XFxuLVxcdHJ4LmxpbmtfaWQgPSAtMTtcXG4gXFxuIFxcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaWVlZTgwMjExX2lzX21nbXQoZmMpKVxcbiBcXHRcXHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cXHUwMDNlZG90MTFSZWNlaXZlZEZyYWdtZW50Q291bnQpO1xcbkBAIC01NDI2LDk3ICs1NDAxLDEwMiBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbiBcXHRcXHQgICAgIGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cXHUwMDNlZnJhbWVfY29udHJvbCkpKVxcbiBcXHRcXHRpZWVlODAyMTFfc2Nhbl9yeChsb2NhbCwgc2tiKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFJYIG9mIGEgZGF0YSBmcmFtZSBzaG91bGQgb25seSBoYXBwZW4gdG8gZXhpc3Rpbmcgc3RhdGlvbnMuXFxuK1xcdCAqIEl0IGlzIHRoZXJlZm9yZSBtb3JlIGVmZmljaWVudCB0byB1c2UgdGhlIG9uZSBwcm92aWRlZCBieSB0aGUgZHJpdmVyXFxuK1xcdCAqIG9yIHNlYXJjaCBiYXNlZCBvbiB0aGUgc3RhdGlvbidzIGFkZHJlc3MuXFxuK1xcdCAqXFxuK1xcdCAqIE5vdGUgd2Ugd2lsbCBmYWxsIHRocm91Z2ggYW5kIGhhbmRsZSBhIHNwdXJpb3VzIGRhdGEgZnJhbWUgaW4gdGhlXFxuK1xcdCAqIHNhbWUgd2F5IGFzIGEgbWFuYWdlbWVudCBmcmFtZS5cXG4rXFx0ICovXFxuIFxcdGlmIChpZWVlODAyMTFfaXNfZGF0YShmYykpIHtcXG4tXFx0XFx0c3RydWN0IHN0YV9pbmZvICpzdGEsICpwcmV2X3N0YTtcXG4tXFx0XFx0aW50IGxpbmtfaWQgPSAtMTtcXG4tXFxuLVxcdFxcdGlmIChzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQpXFxuLVxcdFxcdFxcdGxpbmtfaWQgPSBzdGF0dXMtXFx1MDAzZWxpbmtfaWQ7XFxuLVxcbi1cXHRcXHRpZiAocHVic3RhKSB7XFxuLVxcdFxcdFxcdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcXG4tXFx0XFx0XFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFxcdTAwMjZyeCwgc3RhLCBsaW5rX2lkKSlcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBJbiBNTE8gY29ubmVjdGlvbiwgZmV0Y2ggdGhlIGxpbmtfaWQgdXNpbmcgYWRkcjJcXG4tXFx0XFx0XFx0ICogd2hlbiB0aGUgZHJpdmVyIGRvZXMgbm90IHBhc3MgbGlua19pZCBpbiBzdGF0dXMuXFxuLVxcdFxcdFxcdCAqIFdoZW4gdGhlIGFkZHJlc3MgdHJhbnNsYXRpb24gaXMgYWxyZWFkeSBwZXJmb3JtZWQgYnlcXG4tXFx0XFx0XFx0ICogZHJpdmVyL2h3LCB0aGUgdmFsaWQgbGlua19pZCBtdXN0IGJlIHBhc3NlZCBpblxcbi1cXHRcXHRcXHQgKiBzdGF0dXMuXFxuLVxcdFxcdFxcdCAqL1xcbi1cXG4tXFx0XFx0XFx0aWYgKCFzdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQgXFx1MDAyNlxcdTAwMjYgcHVic3RhLVxcdTAwM2VtbG8pIHtcXG4tXFx0XFx0XFx0XFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhO1xcbi1cXG4tXFx0XFx0XFx0XFx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3Mocnguc2RhdGEsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBoZHItXFx1MDAzZWFkZHIyKTtcXG4tXFx0XFx0XFx0XFx0aWYgKCFsaW5rX3N0YSlcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRcXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rKFxcdTAwMjZyeCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bGlua19zdGEtXFx1MDAzZWxpbmtfaWQpKVxcbi1cXHRcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0XFx0XFx0fVxcbi1cXG4tXFx0XFx0XFx0aWYgKGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIHRydWUpKVxcbitcXHRcXHRpZiAobGlua19wdWJzdGEpIHtcXG4rXFx0XFx0XFx0c3RhID0gY29udGFpbmVyX29mKGxpbmtfcHVic3RhLVxcdTAwM2VzdGEsIHN0cnVjdCBzdGFfaW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RhKTtcXG4rXFx0XFx0XFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVxcdTAwM2VsaW5rW2xpbmtfcHVic3RhLVxcdTAwM2VsaW5rX2lkXSk7XFxuK1xcbitcXHRcXHRcXHRyeC5zZGF0YSA9IHN0YS1cXHUwMDNlc2RhdGE7XFxuK1xcdFxcdFxcdGlmIChpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXFx1MDAyNnJ4LCBsaW5rX3N0YSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIHRydWUpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0cHJldl9zdGEgPSBOVUxMO1xcbitcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcXG4gXFxuK1xcdFxcdC8qIFNlYXJjaCBmb3Igc3RhdGlvbnMgb24gbm9uLU1MRCBpbnRlcmZhY2VzICovXFxuIFxcdFxcdGZvcl9lYWNoX3N0YV9pbmZvKGxvY2FsLCBoZHItXFx1MDAzZWFkZHIyLCBzdGEsIHRtcCkge1xcbi1cXHRcXHRcXHRpZiAoIXByZXZfc3RhKSB7XFxuLVxcdFxcdFxcdFxcdHByZXZfc3RhID0gc3RhO1xcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcXG4gXFxuLVxcdFxcdFxcdHJ4LnNkYXRhID0gcHJldl9zdGEtXFx1MDAzZXNkYXRhO1xcbi1cXHRcXHRcXHRpZiAoIXN0YXR1cy1cXHUwMDNlbGlua192YWxpZCBcXHUwMDI2XFx1MDAyNiBwcmV2X3N0YS1cXHUwMDNlc3RhLm1sbykge1xcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuK1xcdFxcdFxcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2c3RhLVxcdTAwM2VzZGF0YS1cXHUwMDNldmlmKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRcXHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGhkci1cXHUwMDNlYWRkcjIpO1xcbi1cXHRcXHRcXHRcXHRpZiAoIWxpbmtfc3RhKVxcbi1cXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0bGluayA9IFxcdTAwMjZzdGEtXFx1MDAzZXNkYXRhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cXHUwMDNlZnJlcSwgbGluaykpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0XFx0XFx0bGlua19pZCA9IGxpbmtfc3RhLVxcdTAwM2VsaW5rX2lkO1xcbitcXHRcXHRcXHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XFxuK1xcdFxcdFxcdFxcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGZhbHNlKTtcXG4rXFx0XFx0XFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcXHUwMDI2cngsIHByZXZfc3RhLCBsaW5rX2lkKSlcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcbi1cXHRcXHRcXHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFxcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XFxuK1xcdFxcdFxcdHJ4LnNkYXRhID0gc3RhLVxcdTAwM2VzZGF0YTtcXG4rXFx0XFx0XFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXFx1MDAyNnJ4LCBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRwcmV2X3N0YSA9IHN0YTtcXG4rXFx0XFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gdHJ1ZTtcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKHByZXZfc3RhKSB7XFxuLVxcdFxcdFxcdHJ4LnNkYXRhID0gcHJldl9zdGEtXFx1MDAzZXNkYXRhO1xcbi1cXHRcXHRcXHRpZiAoIXN0YXR1cy1cXHUwMDNlbGlua192YWxpZCBcXHUwMDI2XFx1MDAyNiBwcmV2X3N0YS1cXHUwMDNlc3RhLm1sbykge1xcbi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XFxuK1xcdFxcdC8qIEFuZCBzZWFyY2ggc3RhdGlvbnMgb24gTUxEIGludGVyZmFjZXMgKi9cXG4rXFx0XFx0Zm9yX2VhY2hfbGlua19zdGFfaW5mbyhsb2NhbCwgaGRyLVxcdTAwM2VhZGRyMiwgbGlua19zdGEsIHRtcCkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcXG4gXFxuLVxcdFxcdFxcdFxcdGxpbmtfc3RhID0gbGlua19zdGFfaW5mb19nZXRfYnNzKHJ4LnNkYXRhLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgaGRyLVxcdTAwM2VhZGRyMik7XFxuLVxcdFxcdFxcdFxcdGlmICghbGlua19zdGEpXFxuLVxcdFxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRzdGEgPSBsaW5rX3N0YS1cXHUwMDNlc3RhO1xcbitcXHRcXHRcXHRzZGF0YSA9XFx0c3RhLVxcdTAwM2VzZGF0YTtcXG4rXFx0XFx0XFx0bGluayA9IHJjdV9kZXJlZmVyZW5jZShzZGF0YS1cXHUwMDNlbGlua1tsaW5rX3N0YS1cXHUwMDNlbGlua19pZF0pO1xcbiBcXG4tXFx0XFx0XFx0XFx0bGlua19pZCA9IGxpbmtfc3RhLVxcdTAwM2VsaW5rX2lkO1xcbitcXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cXHUwMDNlZnJlcSwgbGluaykpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xcbitcXHRcXHRcXHRcXHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFxcdTAwMjZyeCwgc2tiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRmYWxzZSk7XFxuK1xcdFxcdFxcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xcbiBcXHRcXHRcXHR9XFxuIFxcbi1cXHRcXHRcXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoXFx1MDAyNnJ4LCBwcmV2X3N0YSwgbGlua19pZCkpXFxuLVxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRyeC5zZGF0YSA9IHN0YS1cXHUwMDNlc2RhdGE7XFxuK1xcdFxcdFxcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFxcdTAwMjZyeCwgbGlua19zdGEpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XFxuK1xcdFxcdH1cXG4gXFxuK1xcdFxcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcXG4gXFx0XFx0XFx0aWYgKGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIHRydWUpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogZmFsbCB0aHJvdWdoLCBlLmcuIGZvciBzcHVyaW91cyBmcmFtZSBub3RpZmljYXRpb24gKi9cXG4gXFx0fVxcbiBcXG4tXFx0cHJldiA9IE5VTEw7XFxuK1xcdC8qXFxuK1xcdCAqIFRoaXMgaXMgYSBtYW5hZ2VtZW50IGZyYW1lIChvciBhIGRhdGEgZnJhbWUgd2l0aG91dCBhIHN0YXRpb24pIGFuZFxcbitcXHQgKiBpdCB3aWxsIGJlIGRlbGl2ZXJlZCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIGEgc3RhdGlvbiBleGlzdHMsXFxuK1xcdCAqIHNvIGl0ZXJhdGUgdGhlIGludGVyZmFjZXMuXFxuK1xcdCAqL1xcbitcXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFxuK1xcdC8qIFdlIGV4cGVjdCB0aGUgZHJpdmVyIHRvIHByb3ZpZGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uICovXFxuK1xcdGlmIChXQVJOX09OX09OQ0UoIWxvY2FsLVxcdTAwM2VlbXVsYXRlX2NoYW5jdHggXFx1MDAyNlxcdTAwMjYgIXN0YXR1cy1cXHUwMDNlZnJlcSkpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsIFxcdTAwMjZsb2NhbC1cXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xcbitcXHRcXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9IE5VTEw7XFxuK1xcbiBcXHRcXHRpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbkBAIC01NTI0LDMwICs1NTA0LDg1IEBAIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuIFxcdFxcdCAgICBzZGF0YS1cXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHRsaW5rX3N0YSA9IE5VTEw7XFxuK1xcdFxcdGxpbmsgPSBOVUxMO1xcbitcXG4rXFx0XFx0LyogVHJ5IHRvIHJlc29sdmUgdGhlIHN0YXRpb24gKi9cXG4rXFx0XFx0aWYgKCFpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZikpIHtcXG4rXFx0XFx0XFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgaGRyLVxcdTAwM2VhZGRyMik7XFxuK1xcbitcXHRcXHRcXHRpZiAoc3RhKSB7XFxuK1xcdFxcdFxcdFxcdGxpbmtfc3RhID0gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0XFx0XFx0XFx0bGluayA9IFxcdTAwMjZzZGF0YS1cXHUwMDNlZGVmbGluaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgaGRyLVxcdTAwM2VhZGRyMik7XFxuK1xcbitcXHRcXHRcXHRpZiAobGlua19zdGEpXFxuK1xcdFxcdFxcdFxcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtXFx1MDAzZWxpbmtbbGlua19zdGEtXFx1MDAzZWxpbmtfaWRdKTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogZnJhbWUgaXMgZGVzdGluZWQgZm9yIHRoaXMgaW50ZXJmYWNlLCBidXQgaWYgaXQnc1xcbi1cXHRcXHQgKiBub3QgYWxzbyBmb3IgdGhlIHByZXZpb3VzIG9uZSB3ZSBoYW5kbGUgdGhhdCBhZnRlclxcbi1cXHRcXHQgKiB0aGUgbG9vcCB0byBhdm9pZCBjb3B5aW5nIHRoZSBTS0Igb25jZSB0b28gbXVjaFxcbitcXHRcXHQgKiBJZiB3ZSBmb3VuZCBhIFNUQSBhbmQgaXQgaGFzIGEgdmFsaWQgbGluayBpbmZvcm1hdGlvbiwgdGhlblxcbitcXHRcXHQgKiBSWCB1c2luZyB0aGUgc3RhdGlvbi5cXG4gXFx0XFx0ICovXFxuK1xcdFxcdGlmIChsaW5rX3N0YSBcXHUwMDI2XFx1MDAyNiBsaW5rIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXFx1MDAzZWZyZXEsIGxpbmspKSB7XFxuK1xcdFxcdFxcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcXG4rXFx0XFx0XFx0XFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSBmYWxzZTtcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0LyogTm8gdmFsaWRfbGlua3MgY2hlY2sgYXMgd2UgbmVlZCB0byBSWCBiZWFjb25zICovXFxuK1xcbitcXHRcXHRcXHRyeC5zZGF0YSA9IHNkYXRhO1xcbitcXHRcXHRcXHRpZiAoaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmtfc3RhKFxcdTAwMjZyeCwgbGlua19zdGEpKVxcbitcXHRcXHRcXHRcXHRyeF9kYXRhX3BlbmRpbmcgPSB0cnVlO1xcbiBcXG4tXFx0XFx0aWYgKCFwcmV2KSB7XFxuLVxcdFxcdFxcdHByZXYgPSBzZGF0YTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdHJ4LnNkYXRhID0gcHJldjtcXG4tXFx0XFx0aWVlZTgwMjExX3J4X2Zvcl9pbnRlcmZhY2UoXFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcXG4rXFx0XFx0LyogTm8gc3RhdGlvbiwgdHJ5IHRvIHJlc29sdmUgdGhlIGxpbmsgYW5kIFJYICovXFxuK1xcdFxcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcXHUwMDI2c2RhdGEtXFx1MDAzZXZpZikpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XFxuK1xcdFxcdFxcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4gXFxuLVxcdFxcdHByZXYgPSBzZGF0YTtcXG4tXFx0fVxcbitcXHRcXHRcXHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHNkYXRhLCBsaW5rKSB7XFxuK1xcdFxcdFxcdFxcdGNvbmYgPSByY3VfZGVyZWZlcmVuY2UobGluay1cXHUwMDNlY29uZi1cXHUwMDNlY2hhbmN0eF9jb25mKTtcXG4rXFx0XFx0XFx0XFx0aWYgKCFjb25mIHx8ICFjb25mLVxcdTAwM2VkZWYuY2hhbilcXG4rXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRpZiAocHJldikge1xcbi1cXHRcXHRyeC5zZGF0YSA9IHByZXY7XFxuK1xcdFxcdFxcdFxcdGlmIChzdGF0dXMtXFx1MDAzZWZyZXEgPT0gY29uZi1cXHUwMDNlZGVmLmNoYW4tXFx1MDAzZWNlbnRlcl9mcmVxKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGZvdW5kID0gdHJ1ZTtcXG4rXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0aWYgKGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKFxcdTAwMjZyeCwgc2tiLCB0cnVlKSlcXG4tXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRpZiAoIWZvdW5kKVxcbitcXHRcXHRcXHRcXHRsaW5rID0gXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRsaW5rID0gXFx1MDAyNnNkYXRhLVxcdTAwM2VkZWZsaW5rO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XFxuK1xcdFxcdFxcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcXG4rXFx0XFx0XFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdHJ4LnNkYXRhID0gc2RhdGE7XFxuK1xcdFxcdHJ4LmxvY2FsID0gc2RhdGEtXFx1MDAzZWxvY2FsO1xcbitcXHRcXHRyeC5saW5rID0gbGluaztcXG4rXFx0XFx0cngubGlua19pZCA9IGxpbmstXFx1MDAzZWxpbmtfaWQ7XFxuK1xcdFxcdHJ4LnN0YSA9IE5VTEw7XFxuK1xcdFxcdHJ4Lmxpbmtfc3RhID0gTlVMTDtcXG4rXFxuK1xcdFxcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChyeF9kYXRhX3BlbmRpbmcgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXFx1MDAyNnJ4LCBza2IsIHRydWUpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiAgb3V0OlxcbiBcXHRkZXZfa2ZyZWVfc2tiKHNrYik7XFxuIH1cXG5AQCAtNTU1Niw3ICs1NTkxLDggQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4gICogVGhpcyBpcyB0aGUgcmVjZWl2ZSBwYXRoIGhhbmRsZXIuIEl0IGlzIGNhbGxlZCBieSBhIGxvdyBsZXZlbCBkcml2ZXIgd2hlbiBhblxcbiAgKiA4MDIuMTEgTVBEVSBpcyByZWNlaXZlZCBmcm9tIHRoZSBoYXJkd2FyZS5cXG4gICovXFxuLXZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuK3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuIHtcXG4gXFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XFxuQEAgLTU2OTQsOSArNTczMCw2IEBAIHZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKFdBUk5fT05fT05DRShzdGF0dXMtXFx1MDAzZWxpbmtfaWQgXFx1MDAzZT0gSUVFRTgwMjExX0xJTktfVU5TUEVDSUZJRUQpKVxcbi1cXHRcXHRnb3RvIGRyb3A7XFxuLVxcbiBcXHRzdGF0dXMtXFx1MDAzZXJ4X2ZsYWdzID0gMDtcXG4gXFxuIFxcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xcbkBAIC01NzE1LDkgKzU3NDgsMTAgQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcXG4gXFx0XFx0XFx0aWVlZTgwMjExX3RwdF9sZWRfdHJpZ19yeChsb2NhbCwgc2tiLVxcdTAwM2VsZW4pO1xcbiBcXG4gXFx0XFx0aWYgKHN0YXR1cy1cXHUwMDNlZmxhZyBcXHUwMDI2IFJYX0ZMQUdfODAyMylcXG4tXFx0XFx0XFx0X19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcXG4rXFx0XFx0XFx0X19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoaHcsIGxpbmtfcHVic3RhLCBza2IsIGxpc3QpO1xcbiBcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcXG4rXFx0XFx0XFx0X19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChodywgbGlua19wdWJzdGEsIHNrYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBsaXN0KTtcXG4gXFx0fVxcbiBcXG4gXFx0a2Nvdl9yZW1vdGVfc3RvcCgpO1xcbkBAIC01NzI3LDcgKzU3NjEsOCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X2xpc3QpO1xcbiBcXG4tdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcXG4rdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxcbiBcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxcbiB7XFxuIFxcdHN0cnVjdCBza19idWZmICp0bXA7XFxuQEAgLTU3NDAsNyArNTc3NSw3IEBAIHZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsXFxuIFxcdCAqIHJlY2VpdmUgcHJvY2Vzc2luZ1xcbiBcXHQgKi9cXG4gXFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRpZWVlODAyMTFfcnhfbGlzdChodywgcHVic3RhLCBza2IsIFxcdTAwMjZsaXN0KTtcXG4rXFx0aWVlZTgwMjExX3J4X2xpc3QoaHcsIGxpbmtfcHVic3RhLCBza2IsIFxcdTAwMjZsaXN0KTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbiBcXHRpZiAoIW5hcGkpIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmNcXG5pbmRleCBlZWZmMjMwYmQ5MDlmLi4zMjRjMmI2ZDdjZTFiIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS9zY2FuLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvc2Nhbi5jXFxuQEAgLTksNyArOSw3IEBAXFxuICAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1IFxcdTAwM2NmbGFtaW5naWNlQHNvdXJtaWxrLm5ldFxcdTAwM2VcXG4gICogQ29weXJpZ2h0IDIwMTMtMjAxNSAgSW50ZWwgTW9iaWxlIENvbW11bmljYXRpb25zIEdtYkhcXG4gICogQ29weXJpZ2h0IDIwMTYtMjAxNyAgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxcbisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9hcnAuaFxcdTAwM2VcXG5AQCAtMjA0LDEyICsyMDQsMTAgQEAgaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcXG4gXFx0XFx0ICogYW4gaW5kaWNhdGlvbiBvbiB3aGljaCBvZiB0aGUgbGlua3MgdGhlIGZyYW1lIHdhcyByZWNlaXZlZFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFxcdTAwMjZzY2FuX3NkYXRhLVxcdTAwM2V2aWYpKSB7XFxuLVxcdFxcdFxcdGlmIChyeF9zdGF0dXMtXFx1MDAzZWxpbmtfdmFsaWQpIHtcXG4tXFx0XFx0XFx0XFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4rXFx0XFx0XFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cXHUwMDNlbGlua19pZDtcXG4gXFxuLVxcdFxcdFxcdFxcdGxpbmtfY29uZiA9XFxuLVxcdFxcdFxcdFxcdFxcdHJjdV9kZXJlZmVyZW5jZShzY2FuX3NkYXRhLVxcdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRsaW5rX2NvbmYgPVxcbitcXHRcXHRcXHRcXHRyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS1cXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGxpbmtfY29uZiA9IFxcdTAwMjZzY2FuX3NkYXRhLVxcdTAwM2V2aWYuYnNzX2NvbmY7XFxuIFxcdFxcdH1cXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RkbHMuYyBiL25ldC9tYWM4MDIxMS90ZGxzLmNcXG5pbmRleCBkYzJmNjYyZmU0YzQ2Li5lMTdkNDkyYmU1OTAyIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS90ZGxzLmNcXG4rKysgYi9uZXQvbWFjODAyMTEvdGRscy5jXFxuQEAgLTEwNjYsNyArMTA2Niw3IEBAIGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGFjdGlvbl9jb2RlID09IFdMQU5fUFVCX0FDVElPTl9URExTX0RJU0NPVkVSX1JFUykge1xcbi1cXHRcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCBsaW5rX2lkKTtcXG4rXFx0XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgc3RhLCA3LCBsaW5rX2lkKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcXG5pbmRleCAzYTFlMmM5ZTE1NjVlLi42ZjUyZTg4NDAyMzcxIDEwMDY0NFxcbi0tLSBhL25ldC9tYWM4MDIxMS90eC5jXFxuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcXG5AQCAtNjQzNiw3ICs2NDM2LDggQEAgdm9pZCBpZWVlODAyMTFfdW5yZXNlcnZlX3RpZChzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLCB1OCB0aWQpXFxuIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVzZXJ2ZV90aWQpO1xcbiBcXG4gdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbitcXHRcXHRcXHRcXHQgaW50IHRpZCwgaW50IGxpbmtfaWQsXFxuIFxcdFxcdFxcdFxcdCBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cXHUwMDNlZGF0YTtcXG5AQCAtNjQ4OCwxMiArNjQ4OSwxMyBAQCB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4gXFx0ICovXFxuIFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gXFx0SUVFRTgwMjExX1NLQl9DQihza2IpLVxcdTAwM2ViYW5kID0gYmFuZDtcXG4tXFx0aWVlZTgwMjExX3htaXQoc2RhdGEsIE5VTEwsIHNrYik7XFxuK1xcdGllZWU4MDIxMV94bWl0KHNkYXRhLCBzdGEsIHNrYik7XFxuIFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiB9XFxuIFxcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsIGludCB0aWQsIGludCBsaW5rX2lkKVxcbitcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzdGFfaW5mbyAqc3RhLFxcbitcXHRcXHRcXHQgIGludCB0aWQsIGludCBsaW5rX2lkKVxcbiB7XFxuIFxcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjaGFuY3R4X2NvbmY7XFxuIFxcdGVudW0gbmw4MDIxMV9iYW5kIGJhbmQ7XFxuQEAgLTY1MTksNyArNjUyMSw3IEBAIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuIFxcdFxcdGJhbmQgPSAwO1xcbiBcXHR9XFxuIFxcbi1cXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgdGlkLCBsaW5rX2lkLCBiYW5kKTtcXG4rXFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHN0YSwgdGlkLCBsaW5rX2lkLCBiYW5kKTtcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuaW5kZXggNDRmMmJhZDA4NjcwNS4uNDM3YmViY2MwMjc0OCAxMDA2NDRcXG4tLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXFxuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xcbkBAIC0xMDk2LDYgKzEwOTYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9wb2xpY3lbTlVNX05MODAyMTFfQVRUUl0gPSB7XFxuIFxcdFtOTDgwMjExX0FUVFJfTlBDQV9QVU5DVF9CSVRNQVBdID1cXG4gXFx0XFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFxcdTAwMjZubDgwMjExX3B1bmN0X2JpdG1hcF9yYW5nZSksXFxuIFxcdFtOTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUU10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcXG4rXFx0W05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LFxcbiB9O1xcbiBcXG4gLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi9cXG5AQCAtMTQ4NjAsNiArMTQ4NjEsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbiBcXHQgICAgISh3ZGV2LVxcdTAwM2V2YWxpZF9saW5rcyBcXHUwMDI2IEJJVChwYXJhbXMubGlua19pZCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuK1xcdHBhcmFtcy5ub19zdGEgPVxcbitcXHRcXHRubGFfZ2V0X2ZsYWcoaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEFdKTtcXG4rXFxuIFxcdHBhcmFtcy5idWYgPSBubGFfZGF0YShpbmZvLVxcdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKTtcXG4gXFx0cGFyYW1zLmxlbiA9IG5sYV9sZW4oaW5mby1cXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7XFxuIFxcbkBAIC0yMjAyNCw3ICsyMjAyOCw5IEBAIGludCBubDgwMjExX3NlbmRfbWdtdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsXFxuIFxcdCAgICAoaW5mby1cXHUwMDNlYWNrX3RzdGFtcCBcXHUwMDI2XFx1MDAyNiBubGFfcHV0X3U2NF82NGJpdChtc2csXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIE5MODAyMTFfQVRUUl9UWF9IV19USU1FU1RBTVAsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIGluZm8tXFx1MDAzZWFja190c3RhbXAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIE5MODAyMTFfQVRUUl9QQUQpKSlcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpIHx8XFxuK1xcdCAgICAoaW5mby1cXHUwMDNlbm9fc3RhIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEpKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbiBcXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI3OjU2LjY4MzY5NTA2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjYyNzI1Mzc5MDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX3R4X21nbXRcIixcbiAgICBcImllZWU4MDIxMV9tZ210X3R4XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbGlzdFwiLFxuICAgIFwiaWVlZTgwMjExX3J4X25hcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWFjODAyMTEgYW5kIGNmZzgwMjExIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgaG93IHJlY2VpdmVkIGZyYW1lcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHN0YXRpb25zIGFuZCBsaW5rcyAoTXVsdGktTGluayBPcGVyYXRpb24pLiBJdCBjaGFuZ2VzIHRoZSBzaWduYXR1cmUgb2YgY29yZSBSWCBmdW5jdGlvbnMgKGBpZWVlODAyMTFfcnhfbGlzdGAsIGBpZWVlODAyMTFfcnhfbmFwaWApIGFuZCBtb2RpZmllcyB0aGUgbWFuYWdlbWVudCBmcmFtZSB0cmFuc21pc3Npb24gcGF0aCB0byBoYW5kbGUgYSBuZXcgYG5vX3N0YWAgZmxhZy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODdmNGM5NDNjOWI1MmM3ZTk2NmU1NzAzMzkyYjk4MjdiODdjZWE2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMgMTU6Mjc6NTUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcbmluZGV4IDMzNDI1NzA3YzA4NDIuLmZiYjNkMThmNTVkZGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvZHBfcnguY1xuQEAgLTI1MDAsNyArMjUwMCw3IEBAIHN0YXRpYyB2b2lkIGF0aDExa19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDExayAqYXIsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwXG4gXHQgICAgIShpc19tY2JjIFx1MDAyNlx1MDAyNiByeF9zdGF0dXMtXHUwMDNlZmxhZyBcdTAwMjYgUlhfRkxBR19ERUNSWVBURUQpKVxuIFx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHXzgwMjM7XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShhci1cdTAwM2VodywgcHVic3RhLCBtc2R1LCBuYXBpKTtcbitcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVx1MDAzZWh3LCBwdWJzdGEgPyBcdTAwMjZwdWJzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIG1zZHUsIG5hcGkpO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBhdGgxMWtfZHBfcnhfY2hlY2tfbndpZmlfaGRyX2xlbl92YWxpZChzdHJ1Y3QgYXRoMTFrX2Jhc2UgKmFiLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jXG5pbmRleCA3ZDViZTc3YjA4MWY4Li4xZmFmMTg5NmQwYWIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9tb24uY1xuQEAgLTUwMyw4ICs1MDMsNiBAQCB2b2lkIGF0aDEya19kcF9tb25fcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlICpoZSA9IE5VTEw7XG4gXG4tXHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDA7XG4tXG4gXHRpZiAoKHN0YXR1cy1cdTAwM2VlbmNvZGluZyA9PSBSWF9FTkNfSEUpIFx1MDAyNlx1MDAyNiAhKHN0YXR1cy1cdTAwM2VmbGFnIFx1MDAyNiBSWF9GTEFHX1JBRElPVEFQX0hFKSBcdTAwMjZcdTAwMjZcbiBcdCAgICAhKHN0YXR1cy1cdTAwM2VmbGFnIFx1MDAyNiBSWF9GTEFHX1NLSVBfTU9OSVRPUikpIHtcbiBcdFx0aGUgPSBza2JfcHVzaChtc2R1LCBzaXplb2Yoa25vd24pKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbmluZGV4IDhmYTBlOTBiNDUzMTYuLjg0N2FkMjhmZDMwYjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfcnguY1xuQEAgLTEzNzUsNiArMTM3NSw3IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXG4gXHRzdHJ1Y3QgYXRoMTJrX2RwICpkcCA9IGRwX3BkZXYtXHUwMDNlZHA7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzO1xuIFx0c3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YTtcbitcdHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhID0gTlVMTDtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqcGVlcjtcbiBcdHN0cnVjdCBhdGgxMmtfc2tiX3J4Y2IgKnJ4Y2IgPSBBVEgxMktfU0tCX1JYQ0IobXNkdSk7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gcnhfaW5mby1cdTAwM2VyeF9zdGF0dXM7XG5AQCAtMTM4NCw5ICsxMzg1LDE5IEBAIHZvaWQgYXRoMTJrX2RwX3J4X2RlbGl2ZXJfbXNkdShzdHJ1Y3QgYXRoMTJrX3BkZXZfZHAgKmRwX3BkZXYsIHN0cnVjdCBuYXBpX3N0cnVjXG4gXG4gXHRwdWJzdGEgPSBwZWVyID8gcGVlci1cdTAwM2VzdGEgOiBOVUxMO1xuIFxuLVx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAwO1xuLVx0aWYgKHB1YnN0YSBcdTAwMjZcdTAwMjYgcHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKVxuLVx0XHRhdGgxMmtfaHdfc2V0X3J4X2xpbmtfaWQoZHAtXHUwMDNlaHdfcGFyYW1zLCBwZWVyLCByeGNiLCBzdGF0dXMpO1xuK1x0aWYgKHB1YnN0YSkge1xuK1x0XHRpZiAocHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4rXHRcdFx0dTggbGlua19pZCA9XG4rXHRcdFx0XHRhdGgxMmtfaHdfZ2V0X3J4X2xpbmtfaWQoZHAtXHUwMDNlaHdfcGFyYW1zLCBwZWVyLFxuK1x0XHRcdFx0XHRcdFx0IHJ4Y2IsIHN0YXR1cyk7XG4rXG4rXHRcdFx0aWYgKGxpbmtfaWQgXHUwMDNlIDApXG4rXHRcdFx0XHRsaW5rX3B1YnN0YSA9XG4rXHRcdFx0XHRcdHJjdV9kZXJlZmVyZW5jZShwdWJzdGEtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bGlua19wdWJzdGEgPSBcdTAwMjZwdWJzdGEtXHUwMDNlZGVmbGluaztcbitcdFx0fVxuK1x0fVxuIFxuIFx0YXRoMTJrX2RiZyhkcC1cdTAwM2VhYiwgQVRIMTJLX0RCR19EQVRBLFxuIFx0XHQgICBcInJ4IHNrYiAlcCBsZW4gJXUgcGVlciAlcE0gJWQgJXMgc24gJXUgJXMlcyVzJXMlcyVzJXMlcyVzJXMgcmF0ZV9pZHggJXUgdmh0X25zcyAldSBmcmVxICV1IGJhbmQgJXUgZmxhZyAweCV4IGZjcy1lcnIgJWkgbWljLWVyciAlaSBhbXNkdS1tb3JlICVpXFxuXCIsXG5AQCAtMTQyMiw3ICsxNDMzLDggQEAgdm9pZCBhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldiwgc3RydWN0IG5hcGlfc3RydWNcbiBcbiBcdC8qIFRPRE86IHRyYWNlIHJ4IHBhY2tldCAqL1xuIFxuLVx0aWVlZTgwMjExX3J4X25hcGkoYXRoMTJrX3BkZXZfZHBfdG9faHcoZHBfcGRldiksIHB1YnN0YSwgbXNkdSwgbmFwaSk7XG4rXHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsXG4rXHRcdFx0ICBuYXBpKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChhdGgxMmtfZHBfcnhfZGVsaXZlcl9tc2R1KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmhcbmluZGV4IDQ5Y2ZkNWRmYzcwYTYuLjI2OGYwYThmZDQ2ZGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2h3LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaHcuaFxuQEAgLTI0OCw5ICsyNDgsOSBAQCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB7XG4gXHRib29sICgqZHBfc3JuZ19pc190eF9jb21wX3JpbmcpKGludCByaW5nX251bSk7XG4gXHRib29sICgqaXNfZnJhbWVfbGlua19hZ25vc3RpYykoc3RydWN0IGF0aDEya19saW5rX3ZpZiAqYXJ2aWYsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210KTtcbi1cdHZvaWQgKCpzZXRfcnhfbGlua19pZCkoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbitcdGludCAoKmdldF9yeF9saW5rX2lkKShzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4rXHRcdFx0ICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbitcdFx0XHQgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKTtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmVcbkBAIC0yODEsMTMgKzI4MSwxNSBAQCBzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfaHdfbWFjX2lkX3RvX3NybmdfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhdGgxMmtfaHdfc2V0X3J4X2xpbmtfaWQoY29uc3Qgc3RydWN0IGF0aDEya19od19wYXJhbXMgKmh3LFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbi1cdFx0XHRcdFx0ICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMpXG4rc3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2h3X2dldF9yeF9saW5rX2lkKGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpodyxcbitcdFx0XHRcdFx0ICAgc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuIHtcbi1cdGlmIChody1cdTAwM2Vod19vcHMtXHUwMDNlc2V0X3J4X2xpbmtfaWQpXG4tXHRcdGh3LVx1MDAzZWh3X29wcy1cdTAwM2VzZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpO1xuK1x0aWYgKGh3LVx1MDAzZWh3X29wcy1cdTAwM2VnZXRfcnhfbGlua19pZClcbitcdFx0cmV0dXJuIGh3LVx1MDAzZWh3X29wcy1cdTAwM2VnZXRfcnhfbGlua19pZChkcF9wZWVyLCByeGNiLCBzdGF0dXMpO1xuK1xuK1x0cmV0dXJuIC0xO1xuIH1cbiBcbiBzdHJ1Y3QgYXRoMTJrX2Z3X2llIHtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcbmluZGV4IDk1ZDg3ZGQ2Nzg3MmYuLjhiNzIyZWUwYWQ4ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvZHBfcnguY1xuQEAgLTIzMTcsMTcgKzIzMTcsMTYgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRyZXR1cm4gdGx2X3RhZyA9PSBIQUxfUlhfTVBEVV9TVEFSVDtcbiB9XG4gXG4tdm9pZFxuLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbitpbnRcbithdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuIHtcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gMTtcbi1cdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gZHBfcGVlci1cdTAwM2Vod19saW5rc1tyeGNiLVx1MDAzZWh3X2xpbmtfaWRdO1xuK1x0cmV0dXJuIGRwX3BlZXItXHUwMDNlaHdfbGlua3NbcnhjYi1cdTAwM2Vod19saW5rX2lkXTtcbiB9XG4gXG4tdm9pZFxuLWF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbitpbnRcbithdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzKVxuIHtcbkBAIC0yMzQxLDEwICsyMzQwLDkgQEAgYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAoc3RydWN0IGF0aDEya19kcF9wZWVyICpkcF9wZWVyLFxuIFx0bGlua3NfbWFwID0gUkVBRF9PTkNFKGRwX3BlZXItXHUwMDNlbGlua19wZWVyc19tYXApO1xuIFx0Zm9yX2VhY2hfc2V0X2JpdChpLCBcdTAwMjZsaW5rc19tYXAsIEFUSDEyS19OVU1fTUFYX0xJTktTKSB7XG4gXHRcdGxpbmtfcGVlciA9IHJjdV9kZXJlZmVyZW5jZShkcF9wZWVyLVx1MDAzZWxpbmtfcGVlcnNbaV0pO1xuLVx0XHRpZiAobGlua19wZWVyIFx1MDAyNlx1MDAyNiBsaW5rX3BlZXItXHUwMDNlcGVlcl9pZCA9PSByeGNiLVx1MDAzZXBlZXJfaWQpIHtcbi1cdFx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDE7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX3BlZXItXHUwMDNlbGlua19pZDtcbi1cdFx0XHRyZXR1cm47XG4tXHRcdH1cbitcdFx0aWYgKGxpbmtfcGVlciBcdTAwMjZcdTAwMjYgbGlua19wZWVyLVx1MDAzZXBlZXJfaWQgPT0gcnhjYi1cdTAwM2VwZWVyX2lkKVxuK1x0XHRcdHJldHVybiBsaW5rX3BlZXItXHUwMDNlbGlua19pZDtcbiBcdH1cbitcbitcdHJldHVybiAtMTtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXG5pbmRleCAxZDNhNDc4OGEyZGQ5Li5kNjg0ODlmZjdiMDM3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9kcF9yeC5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2RwX3J4LmhcbkBAIC01NywxMCArNTcsMTAgQEAgYXRoMTJrX3dpZmk3X2RwX3J4ZGVzY19tcGR1X3ZhbGlkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXG4gXHRcdFx0XHQgIHN0cnVjdCBoYWxfcnhfZGVzYyAqcnhfZGVzYyk7XG4gaW50IGF0aDEya193aWZpN19kcF9yeF90aWRfZGVsZXRlX2hhbmRsZXIoc3RydWN0IGF0aDEya19iYXNlICphYixcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgYXRoMTJrX2RwX3J4X3RpZF9yeHEgKnJ4X3RpZCk7XG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfcWNuOTI3NChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4tdm9pZCBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MChzdHJ1Y3QgYXRoMTJrX2RwX3BlZXIgKmRwX3BlZXIsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgYXRoMTJrX3NrYl9yeGNiICpyeGNiLFxuLVx0XHRcdFx0XHQgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4raW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF9xY245Mjc0KHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbitcdFx0XHRcdFx0ICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbitcdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4raW50IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwKHN0cnVjdCBhdGgxMmtfZHBfcGVlciAqZHBfcGVlcixcbitcdFx0XHRcdFx0ICAgc3RydWN0IGF0aDEya19za2JfcnhjYiAqcnhjYixcbitcdFx0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXG5pbmRleCA0YzExMTllZGNhZWRjLi4zY2QzNTE0NjQyOTZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9ody5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2h3LmNcbkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjbjkyNzRfb3BzID0ge1xuIFx0LmdldF9yaW5nX3NlbGVjdG9yID0gYXRoMTJrX3dpZmk3X2h3X2dldF9yaW5nX3NlbGVjdG9yX3FjbjkyNzQsXG4gXHQuZHBfc3JuZ19pc190eF9jb21wX3JpbmcgPSBhdGgxMmtfd2lmaTdfZHBfc3JuZ19pc19jb21wX3JpbmdfcWNuOTI3NCxcbiBcdC5pc19mcmFtZV9saW5rX2Fnbm9zdGljID0gYXRoMTJrX3dpZmk3X2lzX2ZyYW1lX2xpbmtfYWdub3N0aWNfcWNuOTI3NCxcbi1cdC5zZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9zZXRfbGlua19pZF9xY245Mjc0LFxuK1x0LmdldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X2dldF9saW5rX2lkX3FjbjkyNzQsXG4gfTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgd2NuNzg1MF9vcHMgPSB7XG5AQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X29wcyB3Y243ODUwX29wcyA9IHtcbiBcdC5nZXRfcmluZ19zZWxlY3RvciA9IGF0aDEya193aWZpN19od19nZXRfcmluZ19zZWxlY3Rvcl93Y243ODUwLFxuIFx0LmRwX3NybmdfaXNfdHhfY29tcF9yaW5nID0gYXRoMTJrX3dpZmk3X2RwX3NybmdfaXNfY29tcF9yaW5nX3djbjc4NTAsXG4gXHQuaXNfZnJhbWVfbGlua19hZ25vc3RpYyA9IGF0aDEya193aWZpN19pc19mcmFtZV9saW5rX2Fnbm9zdGljX3djbjc4NTAsXG4tXHQuc2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfc2V0X2xpbmtfaWRfd2NuNzg1MCxcbitcdC5nZXRfcnhfbGlua19pZCA9IGF0aDEya193aWZpN19kcF9yeF9nZXRfbGlua19pZF93Y243ODUwLFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfb3BzIHFjYzIwNzJfb3BzID0ge1xuQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19od19vcHMgcWNjMjA3Ml9vcHMgPSB7XG4gXHQuZ2V0X3Jpbmdfc2VsZWN0b3IgPSBhdGgxMmtfd2lmaTdfaHdfZ2V0X3Jpbmdfc2VsZWN0b3Jfd2NuNzg1MCxcbiBcdC5kcF9zcm5nX2lzX3R4X2NvbXBfcmluZyA9IGF0aDEya193aWZpN19kcF9zcm5nX2lzX2NvbXBfcmluZ193Y243ODUwLFxuIFx0LmlzX2ZyYW1lX2xpbmtfYWdub3N0aWMgPSBhdGgxMmtfd2lmaTdfaXNfZnJhbWVfbGlua19hZ25vc3RpY193Y243ODUwLFxuLVx0LnNldF9yeF9saW5rX2lkID0gYXRoMTJrX3dpZmk3X2RwX3J4X3NldF9saW5rX2lkX3djbjc4NTAsXG4rXHQuZ2V0X3J4X2xpbmtfaWQgPSBhdGgxMmtfd2lmaTdfZHBfcnhfZ2V0X2xpbmtfaWRfd2NuNzg1MCxcbiB9O1xuIFxuICNkZWZpbmUgQVRIMTJLX1RYX1JJTkdfTUFTS18wIDB4MVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jXG5pbmRleCAyYjcwN2ZmYzFhMjBmLi41ZDYyYzRjODYxYmI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuY1xuQEAgLTcyNjAsNyArNzI2MCw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRzdHJ1Y3QgYXRoMTJrX3dtaV9tZ210X3J4X2FyZyByeF9ldiA9IHt9O1xuIFx0c3RydWN0IGF0aDEyayAqYXI7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhID0gTlVMTDtcbiBcdHN0cnVjdCBhdGgxMmtfZHBfbGlua19wZWVyICpwZWVyO1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjtcbiBcdGJvb2wgaXNfNGFkZHJfbnVsbF9wa3Q7XG5AQCAtNzM2MiwxMSArNzM2MSw2IEBAIHN0YXRpYyB2b2lkIGF0aDEya19tZ210X3J4X2V2ZW50KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIFx0XHRcdGdvdG8gZXhpdDtcbiBcdFx0fVxuLVx0XHRwdWJzdGEgPSBwZWVyLVx1MDAzZXN0YTtcbi1cdFx0aWYgKHB1YnN0YSBcdTAwMjZcdTAwMjYgcHVic3RhLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tXHRcdFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAxO1xuLVx0XHRcdHN0YXR1cy1cdTAwM2VsaW5rX2lkID0gcGVlci1cdTAwM2VsaW5rX2lkO1xuLVx0XHR9XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmRwLVx1MDAzZWRwX2xvY2spO1xuIFx0XHRnb3RvIHNlbmRfcng7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuY1xuaW5kZXggOTYxMDJkMmFmMmNmOS4uYzQ1YzQ3MzM3NTA5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuY1xuQEAgLTcsNyArNyw4IEBAXG4gI2luY2x1ZGUgXCJoY21kLmhcIlxuIFxuIHN0YXRpYyB2b2lkXG4taXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4raXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKHN0cnVjdCBpd2xfbWxkICptbGQsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBpd2xfbWxkX2JhaWRfZGF0YSAqYmFpZF9kYXRhLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgaXdsX21sZF9yZW9yZGVyX2J1ZmZlciAqcmVvcmRlcl9idWYsXG5AQCAtMzIsNyArMzMsNyBAQCBpd2xfbWxkX3Jlb3JkZXJfcmVsZWFzZV9mcmFtZXMoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdFx0d2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKHNrYl9saXN0KSkpIHtcbiBcdFx0XHRpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLFxuIFx0XHRcdFx0XHRcdFx0cmVvcmRlcl9idWYtXHUwMDNlcXVldWUsXG4tXHRcdFx0XHRcdFx0XHRzdGEpO1xuK1x0XHRcdFx0XHRcdFx0bGlua19zdGEpO1xuIFx0XHRcdHJlb3JkZXJfYnVmLVx1MDAzZW51bV9zdG9yZWQtLTtcbiBcdFx0fVxuIFx0fVxuQEAgLTc0LDcgKzc1LDcgQEAgc3RhdGljIHZvaWQgaXdsX21sZF9yZWxlYXNlX2ZyYW1lc19mcm9tX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXG4gXHRyZW9yZGVyX2J1ZiA9IFx1MDAyNmJhX2RhdGEtXHUwMDNlcmVvcmRlcl9idWZbcXVldWVdO1xuIFxuLVx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEtXHUwMDNlc3RhLCBuYXBpLCBiYV9kYXRhLFxuK1x0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgbGlua19zdGEsIG5hcGksIGJhX2RhdGEsXG4gXHRcdFx0XHQgICAgICAgcmVvcmRlcl9idWYsIG5zc24pO1xuIG91dF91bmxvY2s6XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbkBAIC0xODAsNyArMTgxLDcgQEAgdm9pZCBpd2xfbWxkX2RlbF9iYShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBpbnQgcXVldWUsXG4gXHRyZW9yZGVyX2J1ZiA9IFx1MDAyNmJhX2RhdGEtXHUwMDNlcmVvcmRlcl9idWZbcXVldWVdO1xuIFxuIFx0LyogcmVsZWFzZSBhbGwgZnJhbWVzIHRoYXQgYXJlIGluIHRoZSByZW9yZGVyIGJ1ZmZlciB0byB0aGUgc3RhY2sgKi9cbi1cdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLVx1MDAzZXN0YSwgTlVMTCxcbitcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBOVUxMLFxuIFx0XHRcdFx0ICAgICAgIGJhX2RhdGEsIHJlb3JkZXJfYnVmLFxuIFx0XHRcdFx0ICAgICAgIGllZWU4MDIxMV9zbl9hZGQocmVvcmRlcl9idWYtXHUwMDNlaGVhZF9zbixcbiBcdFx0XHRcdFx0XHRcdGJhX2RhdGEtXHUwMDNlYnVmX3NpemUpKTtcbkBAIC0xOTMsNyArMTk0LDcgQEAgdm9pZCBpd2xfbWxkX2RlbF9iYShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBpbnQgcXVldWUsXG4gICovXG4gZW51bSBpd2xfbWxkX3Jlb3JkZXJfcmVzdWx0XG4gaXdsX21sZF9yZW9yZGVyKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbi1cdFx0aW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuK1x0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYylcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2JfbWFjX2hlYWRlcihza2IpO1xuQEAgLTIyOCwxMiArMjI5LDEyIEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xuIFxuIFx0Lyogbm8gc3RhIHlldCAqL1xuLVx0aWYgKElXTF9GV19DSEVDSyhtbGQsICFzdGEsXG4rXHRpZiAoSVdMX0ZXX0NIRUNLKG1sZCwgIWxpbmtfc3RhLFxuIFx0XHRcdCBcIkdvdCB2YWxpZCBCQUlEIHdpdGhvdXQgYSB2YWxpZCBzdGF0aW9uIGFzc2lnbmVkIC0gJWRcXG5cIixcbiBcdFx0XHQgYmFpZCkpXG4gXHRcdHJldHVybiBJV0xfTUxEX1BBU1NfU0tCO1xuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbitcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVx1MDAzZXN0YSk7XG4gXG4gXHQvKiBub3QgYSBkYXRhIHBhY2tldCAqL1xuIFx0aWYgKCFpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XG5AQCAtMzI0LDcgKzMyNSw3IEBAIGl3bF9tbGRfcmVvcmRlcihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHQgKiB3aWxsIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGZyYW1lIHJlbGVhc2Ugbm90aWZpY2F0aW9uIGFycml2ZXMuXG4gXHQgKi9cbiBcdGlmICghYW1zZHUgfHwgbGFzdF9zdWJmcmFtZSlcbi1cdFx0aXdsX21sZF9yZW9yZGVyX3JlbGVhc2VfZnJhbWVzKG1sZCwgc3RhLCBuYXBpLCBiYWlkX2RhdGEsXG4rXHRcdGl3bF9tbGRfcmVvcmRlcl9yZWxlYXNlX2ZyYW1lcyhtbGQsIGxpbmtfc3RhLCBuYXBpLCBiYWlkX2RhdGEsXG4gXHRcdFx0XHRcdCAgICAgICBidWZmZXIsIG5zc24pO1xuIFx0ZWxzZSBpZiAoYnVmZmVyLVx1MDAzZW51bV9zdG9yZWQgPT0gMSlcbiBcdFx0YnVmZmVyLVx1MDAzZWhlYWRfc24gPSBuc3NuO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL2FnZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcbmluZGV4IDY1MWM4MGQxYzdjZGEuLmM2Y2Q1ZmEyMTliZWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9hZ2cuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvYWdnLmhcbkBAIC0xLDYgKzEsNiBAQFxuIC8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIEJTRC0zLUNsYXVzZSAqL1xuIC8qXG4tICogQ29weXJpZ2h0IChDKSAyMDI0IEludGVsIENvcnBvcmF0aW9uXG4rICogQ29weXJpZ2h0IChDKSAyMDI0LCAyMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gI2lmbmRlZiBfX2l3bF9hZ2dfaF9fXG4gI2RlZmluZSBfX2l3bF9hZ2dfaF9fXG5AQCAtMTA2LDcgKzEwNiw3IEBAIGludCBpd2xfbWxkX2FtcGR1X3J4X3N0b3Aoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcbiBlbnVtIGl3bF9tbGRfcmVvcmRlcl9yZXN1bHRcbiBpd2xfbWxkX3Jlb3JkZXIoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLVx0XHRpbnQgcXVldWUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4rXHRcdGludCBxdWV1ZSwgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXG4gXHRcdHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpd2xfcnhfbXBkdV9kZXNjICpkZXNjKTtcbiBcbiB2b2lkIGl3bF9tbGRfaGFuZGxlX2ZyYW1lX3JlbGVhc2Vfbm90aWYoc3RydWN0IGl3bF9tbGQgKm1sZCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguY1xuaW5kZXggMjY5NDM5ZDc4OWY0Ni4uMDJiZGY2Y2NiY2RjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmNcbkBAIC00Nyw3ICs0Nyw4IEBAIGl3bF9tbGRfZmlsbF9waHlfZGF0YV9mcm9tX21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLVx0XHRcdFx0ICAgaW50IHF1ZXVlLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKVxuK1x0XHRcdFx0ICAgaW50IHF1ZXVlLFxuK1x0XHRcdFx0ICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopc2tiX21hY19oZWFkZXIoc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuQEAgLTcxLDEzICs3MiwxMyBAQCBzdGF0aWMgaW5saW5lIGludCBpd2xfbWxkX2NoZWNrX3BuKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0LyogaWYgd2UgYXJlIGhlcmUgLSB0aGlzIGZvciBzdXJlIGlzIGVpdGhlciBDQ01QIG9yIEdDTVAgKi9cbi1cdGlmICghc3RhKSB7XG4rXHRpZiAoIWxpbmtfc3RhKSB7XG4gXHRcdElXTF9ERUJVR19EUk9QKG1sZCxcbiBcdFx0XHQgICAgICAgXCJleHBlY3RlZCBody1kZWNyeXB0ZWQgdW5pY2FzdCBmcmFtZSBmb3Igc3RhdGlvblxcblwiKTtcbiBcdFx0cmV0dXJuIC0xO1xuIFx0fVxuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbitcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVx1MDAzZXN0YSk7XG4gXG4gXHRleHRpdiA9ICh1OCAqKWhkciArIGllZWU4MDIxMV9oZHJsZW4oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpO1xuIFx0a2V5aWR4ID0gZXh0aXZbM10gXHUwMDNlXHUwMDNlIDY7XG5AQCAtMTE5LDE3ICsxMjAsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgaXdsX21sZF9jaGVja19wbihzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIHZvaWQgaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBxdWV1ZSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSlcbitcdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpXG4ge1xuIFx0S1VOSVRfU1RBVElDX1NUVUJfUkVESVJFQ1QoaXdsX21sZF9wYXNzX3BhY2tldF90b19tYWM4MDIxMSxcbi1cdFx0XHRcdCAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTtcbitcdFx0XHRcdCAgIG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgbGlua19zdGEpO1xuIFxuLVx0aWYgKHVubGlrZWx5KGl3bF9tbGRfY2hlY2tfcG4obWxkLCBza2IsIHF1ZXVlLCBzdGEpKSkge1xuK1x0aWYgKHVubGlrZWx5KGl3bF9tbGRfY2hlY2tfcG4obWxkLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSkpKSB7XG4gXHRcdGtmcmVlX3NrYihza2IpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcnhfbmFwaShtbGQtXHUwMDNlaHcsIHN0YSwgc2tiLCBuYXBpKTtcbitcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cdTAwM2VodywgbGlua19zdGEsIHNrYiwgbmFwaSk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfSUZfSVdMV0lGSV9LVU5JVChpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKTtcbiBcbkBAIC0xNzI4LDcgKzE3MjksNyBAQCBzdGF0aWMgdm9pZCBpd2xfbWxkX3VwZGF0ZV9sYXN0X3J4X3RpbWVzdGFtcChzdHJ1Y3QgaXdsX21sZCAqbWxkLCB1OCBiYWlkKVxuICAqIFNldHMgKmRyb3AgdG8gdHJ1ZSBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkLlxuICAqIFJldHVybnMgdGhlIHN0YXRpb24gaWYgZm91bmQsIG9yIE5VTEwgb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqXG4rc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKlxuIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgICBjb25zdCBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqbXBkdV9kZXNjLFxuQEAgLTE3NjQsMTEgKzE3NjUsNiBAQCBpd2xfbWxkX3J4X3dpdGhfc3RhKHN0cnVjdCBpd2xfbWxkICptbGQsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXG4gXHRyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcbi1cdGlmIChsaW5rX3N0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXZhbGlkX2xpbmtzKSB7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0cnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkO1xuLVx0fVxuLVxuIFx0LyogZmlsbCBjaGVja3N1bSAqL1xuIFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBwa3QtXHUwMDNlbGVuX25fZmxhZ3MgXHUwMDI2IGNwdV90b19sZTMyKEZIX1JTQ1NSX1JQQV9FTikpIHtcbkBAIC0xODAzLDEwICsxNzk5LDEwIEBAIGl3bF9tbGRfcnhfd2l0aF9zdGEoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0XHRcdFx0XHRcdCAgICBxdWV1ZSk7XG4gXHR9XG4gXG4tXHRyZXR1cm4gc3RhO1xuK1x0cmV0dXJuIGxpbmtfc3RhO1xuIH1cbiBcbi1zdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4rc3RhdGljIGludCBpd2xfbWxkX3J4X21nbXRfcHJvdChzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0XHRcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsXG4gXHRcdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLFxuIFx0XHRcdFx0dTMyIG1wZHVfc3RhdHVzLFxuQEAgLTE4MjAsNyArMTgxNiw2IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleTtcbiBcdGNvbnN0IHU4ICpmcmFtZSA9ICh2b2lkICopaGRyO1xuIFx0Y29uc3QgdTggKm1taWU7XG4tXHR1OCBsaW5rX2lkO1xuIFxuIFx0aWYgKChtcGR1X3N0YXR1cyBcdTAwMjYgSVdMX1JYX01QRFVfU1RBVFVTX1NFQ19NQVNLKSA9PVxuIFx0ICAgICBJV0xfUlhfTVBEVV9TVEFUVVNfU0VDX05PTkUpXG5AQCAtMTgzNiwxMCArMTgzMSwxMCBAQCBzdGF0aWMgaW50IGl3bF9tbGRfcnhfbWdtdF9wcm90KHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4gXHRpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmICghc3RhKVxuK1x0aWYgKCFsaW5rX3N0YSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuLVx0bWxkX3N0YSA9IGl3bF9tbGRfc3RhX2Zyb21fbWFjODAyMTEoc3RhKTtcbitcdG1sZF9zdGEgPSBpd2xfbWxkX3N0YV9mcm9tX21hYzgwMjExKGxpbmtfc3RhLVx1MDAzZXN0YSk7XG4gXHRtbGRfdmlmID0gaXdsX21sZF92aWZfZnJvbV9tYWM4MDIxMShtbGRfc3RhLVx1MDAzZXZpZik7XG4gXG4gXHQvKiBrZXkgbWlzbWF0Y2ggLSB3aWxsIGFsc28gcmVwb3J0ICFNSUNfT0sgYnV0IHdlIHNob3VsZG4ndCBjb3VudCBpdCAqL1xuQEAgLTE4NTMsOCArMTg0OCw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiBcdFx0cmV0dXJuIDA7XG4gXHR9XG4gXG4tXHRsaW5rX2lkID0gcnhfc3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPyByeF9zdGF0dXMtXHUwMDNlbGlua19pZCA6IDA7XG4tXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtXHUwMDNlbGlua1tsaW5rX2lkXSk7XG4rXHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKG1sZF92aWYtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4gXHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rKSlcbiBcdFx0cmV0dXJuIC0xO1xuIFxuQEAgLTE5MDUsNyArMTg5OSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9tZ210X3Byb3Qoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiB9XG4gXG4gc3RhdGljIGludCBpd2xfbWxkX3J4X2NyeXB0byhzdHJ1Y3QgaXdsX21sZCAqbWxkLFxuLVx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbitcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixcbiBcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgaXdsX3J4X21wZHVfZGVzYyAqZGVzYywgaW50IHF1ZXVlLFxuQEAgLTE5MTUsNyArMTkwOSw3IEBAIHN0YXRpYyBpbnQgaXdsX21sZF9yeF9jcnlwdG8oc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcbiBcdGlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItXHUwMDNlZnJhbWVfY29udHJvbCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAgIWllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSkpXG4tXHRcdHJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChzdGEsIGhkciwgcnhfc3RhdHVzLCBzdGF0dXMsXG4rXHRcdHJldHVybiBpd2xfbWxkX3J4X21nbXRfcHJvdChsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIHN0YXR1cyxcbiBcdFx0XHRcdFx0ICAgIGxlMTZfdG9fY3B1KGRlc2MtXHUwMDNlbXBkdV9sZW4pKTtcbiBcbiBcdGlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLVx1MDAzZWZyYW1lX2NvbnRyb2wpIHx8XG5AQCAtMjAyMyw3ICsyMDE3LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0c3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IHJ4Yl9hZGRyKHJ4Yik7XG4gXHRzdHJ1Y3QgaXdsX21sZF9yeF9waHlfZGF0YSBwaHlfZGF0YSA9IHt9O1xuIFx0c3RydWN0IGl3bF9yeF9tcGR1X2Rlc2MgKm1wZHVfZGVzYyA9ICh2b2lkICopcGt0LVx1MDAzZWRhdGE7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhO1xuK1x0c3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGE7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiBcdHNpemVfdCBtcGR1X2Rlc2Nfc2l6ZSA9IHNpemVvZigqbXBkdV9kZXNjKTtcbkBAIC0yMDg2LDcgKzIwODAsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXG4tXHRzdGEgPSBpd2xfbWxkX3J4X3dpdGhfc3RhKG1sZCwgaGRyLCBza2IsIG1wZHVfZGVzYywgcGt0LCBxdWV1ZSwgXHUwMDI2ZHJvcCk7XG4rXHRsaW5rX3N0YSA9IGl3bF9tbGRfcnhfd2l0aF9zdGEobWxkLCBoZHIsIHNrYiwgbXBkdV9kZXNjLCBwa3QsIHF1ZXVlLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmRyb3ApO1xuIFx0aWYgKGRyb3ApXG4gXHRcdGdvdG8gZHJvcDtcbiBcbkBAIC0yMTI3LDcgKzIxMjIsNyBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXG4gXHRpd2xfbWxkX3J4X2ZpbGxfc3RhdHVzKG1sZCwgbGlua19pZCwgaGRyLCBza2IsIFx1MDAyNnBoeV9kYXRhKTtcbiBcbi1cdGlmIChpd2xfbWxkX3J4X2NyeXB0byhtbGQsIHN0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsXG4rXHRpZiAoaXdsX21sZF9yeF9jcnlwdG8obWxkLCBsaW5rX3N0YSwgaGRyLCByeF9zdGF0dXMsIG1wZHVfZGVzYywgcXVldWUsXG4gXHRcdFx0ICAgICAgbGUzMl90b19jcHUocGt0LVx1MDAzZWxlbl9uX2ZsYWdzKSwgXHUwMDI2Y3J5cHRvX2xlbikpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbkBAIC0yMTQwLDcgKzIxMzUsOCBAQCB2b2lkIGl3bF9tbGRfcnhfbXBkdShzdHJ1Y3QgaXdsX21sZCAqbWxkLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRpZiAoaXdsX21sZF90aW1lX3N5bmNfZnJhbWUobWxkLCBza2IsIGhkci1cdTAwM2VhZGRyMikpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBuYXBpLCBxdWV1ZSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7XG4rXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIG5hcGksIHF1ZXVlLCBsaW5rX3N0YSwgc2tiLFxuK1x0XHRcdFx0ICAgICAgbXBkdV9kZXNjKTtcbiBcdHN3aXRjaCAocmVvcmRlcl9yZXMpIHtcbiBcdGNhc2UgSVdMX01MRF9QQVNTX1NLQjpcbiBcdFx0YnJlYWs7XG5AQCAtMjE1Myw3ICsyMTQ5LDcgQEAgdm9pZCBpd2xfbWxkX3J4X21wZHUoc3RydWN0IGl3bF9tbGQgKm1sZCwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG4gXG4tXHRpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG1sZCwgbmFwaSwgc2tiLCBxdWV1ZSwgc3RhKTtcbitcdGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEobWxkLCBuYXBpLCBza2IsIHF1ZXVlLCBsaW5rX3N0YSk7XG4gXG4gXHRnb3RvIG91dDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguaFxuaW5kZXggNTczYjg5YzNjOWM2MS4uYjA4YzVhZGUzZGI4ZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmhcbkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgaXdsX21sZF9oYW5kbGVfcnNjX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gdm9pZCBpd2xfbWxkX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHF1ZXVlLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTtcbitcdFx0XHRcdCAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEpO1xuIFxuIHZvaWQgaXdsX21sZF9oYW5kbGVfcGh5X2Fpcl9zbmlmZmVyX25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXG4gXHRcdFx0XHRcdCAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3Rlc3RzL2FnZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmNcbmluZGV4IDI5YjAyNDhjZWMzZGYuLmU5ZWZlMjk5NmYwNzEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90ZXN0cy9hZ2cuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGVzdHMvYWdnLmNcbkBAIC0yLDcgKzIsNyBAQFxuIC8qXG4gICogS1VuaXQgdGVzdHMgZm9yIGNoYW5uZWwgaGVscGVyIGZ1bmN0aW9uc1xuICAqXG4tICogQ29weXJpZ2h0IChDKSAyMDI0LTIwMjUgSW50ZWwgQ29ycG9yYXRpb25cbisgKiBDb3B5cmlnaHQgKEMpIDIwMjQtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2t1bml0L3Rlc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2t1bml0L3N0YXRpY19zdHViLmhcdTAwM2VcbkBAIC00NDEsNyArNDQxLDcgQEAgc3RhdGljIHZvaWRcbiBmYWtlX2l3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcXVldWUsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhKVxuIHtcbiBcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Z19yZWxlYXNlZF9za2JzLCBza2IpO1xuIFx0Z19udW1fcmVsZWFzZWRfc2ticysrO1xuQEAgLTYzMCw3ICs2MzAsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3Jlb3JkZXJfYnVmZmVyKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdG1wZHVfZGVzYyA9IHNldHVwX21wZHVfZGVzYygpO1xuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0cmVvcmRlcl9yZXMgPSBpd2xfbWxkX3Jlb3JkZXIobWxkLCBOVUxMLCBRVUVVRSwgc3RhLCBza2IsIG1wZHVfZGVzYyk7XG4rXHRyZW9yZGVyX3JlcyA9IGl3bF9tbGRfcmVvcmRlcihtbGQsIE5VTEwsIFFVRVVFLCBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaywgc2tiLFxuK1x0XHRcdFx0ICAgICAgbXBkdV9kZXNjKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0S1VOSVRfQVNTRVJUX0VRKHRlc3QsIHJlb3JkZXJfcmVzLCBwYXJhbS1cdTAwM2VleHBlY3RlZC5yZW9yZGVyX3Jlcyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmNcbmluZGV4IGFiMWViMmViMGMzY2QuLjhjMTk3YTA5MGMyYjEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jXG5AQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sXG4gXHRcdFx0XHRmcmFnbGVuLCByeGItXHUwMDNldHJ1ZXNpemUpO1xuIFx0fVxuIFxuLVx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XG4rXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcbmluZGV4IDdmMGI0ZjVkYWEyMTQuLjhjNDAwOWQzYTAwY2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuY1xuQEAgLTEsNiArMSw2IEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgQlNELTMtQ2xhdXNlXG4gLypcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCwgMjAxOC0yMDI1IEludGVsIENvcnBvcmF0aW9uXG4rICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQsIDIwMTgtMjAyNiBJbnRlbCBDb3Jwb3JhdGlvblxuICAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJIXG4gICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgSW50ZWwgRGV1dHNjaGxhbmQgR21iSFxuICAqL1xuQEAgLTI0Myw3ICsyNDMsNyBAQCBzdGF0aWMgdm9pZCBpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfbXZtICptdm0sXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cdTAwM2Vodywgc3RhLCBza2IsIG5hcGkpO1xuK1x0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEgPyBcdTAwMjZzdGEtXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XG4gfVxuIFxuIHN0YXRpYyBib29sIGl3bF9tdm1fdXNlZF9hdmVyYWdlX2VuZXJneShzdHJ1Y3QgaXdsX212bSAqbXZtLFxuQEAgLTI1MjgsNyArMjUyOCw3IEBAIHZvaWQgaXdsX212bV9yeF9tb25pdG9yX25vX2RhdGEoc3RydWN0IGl3bF9tdm0gKm12bSwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0fVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0aWVlZTgwMjExX3J4X25hcGkobXZtLVx1MDAzZWh3LCBzdGEsIHNrYiwgbmFwaSk7XG4rXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXHUwMDNlaHcsIHN0YSA/IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcbmluZGV4IGFiYmU2NWNiY2Q4OWUuLjNkYTA2YTU1OTEzZWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuY1xuQEAgLTEyNTUsNyArMTI1NSw3IEBAIEVYUE9SVF9TWU1CT0wobXQ3Nl9yeF9zaWduYWwpO1xuIHN0YXRpYyB2b2lkXG4gbXQ3Nl9yeF9jb252ZXJ0KHN0cnVjdCBtdDc2X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2h3ICoqaHcsXG4tXHRcdHN0cnVjdCBpZWVlODAyMTFfc3RhICoqc3RhKVxuK1x0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICoqbGlua19zdGEpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpO1xuIFx0c3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IG10NzZfc2tiX2dldF9oZHIoc2tiKTtcbkBAIC0xMzAyLDExICsxMzAyLDE1IEBAIG10NzZfcnhfY29udmVydChzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdCAgICAgICBzaXplb2YobXN0YXQuY2hhaW5fc2lnbmFsKSk7XG4gXG4gXHRpZiAobXN0YXQud2NpZCkge1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IG1zdGF0LndjaWQtXHUwMDNlbGlua192YWxpZDtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfaWQgPSBtc3RhdC53Y2lkLVx1MDAzZWxpbmtfaWQ7XG4rXHRcdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSB3Y2lkX3RvX3N0YShtc3RhdC53Y2lkKTtcbitcbitcdFx0aWYgKG1zdGF0LndjaWQtXHUwMDNlbGlua192YWxpZClcbitcdFx0XHQqbGlua19zdGEgPVxuK1x0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VsaW5rW21zdGF0LndjaWQtXHUwMDNlbGlua19pZF0pO1xuK1x0XHRlbHNlXG4rXHRcdFx0Kmxpbmtfc3RhID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbms7XG4gXHR9XG4gXG4tXHQqc3RhID0gd2NpZF90b19zdGEobXN0YXQud2NpZCk7XG4gXHQqaHcgPSBtdDc2X3BoeV9odyhkZXYsIG1zdGF0LnBoeV9pZHgpO1xuIH1cbiBcbkBAIC0xNTMwLDcgKzE1MzQsNyBAQCBtdDc2X2NoZWNrX3N0YShzdHJ1Y3QgbXQ3Nl9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcbiBcdFx0ICAgICAgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuIHtcbi1cdHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3O1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDtcbiBcdExJU1RfSEVBRChsaXN0KTtcbkBAIC0xNTQxLDggKzE1NDUsOCBAQCB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcbiBcbiBcdFx0bXQ3Nl9jaGVja19jY21wX3BuKHNrYik7XG4gXHRcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2VmcmFnX2xpc3QgPSBOVUxMO1xuLVx0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZzdGEpO1xuLVx0XHRpZWVlODAyMTFfcnhfbGlzdChodywgc3RhLCBza2IsIFx1MDAyNmxpc3QpO1xuK1x0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZsaW5rX3N0YSk7XG4rXHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiBcbiBcdFx0Lyogc3Vic2VxdWVudCBhbXNkdSBmcmFtZXMgKi9cbiBcdFx0d2hpbGUgKG5za2IpIHtcbkBAIC0xNTUwLDggKzE1NTQsOCBAQCB2b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcbiBcdFx0XHRuc2tiID0gbnNrYi1cdTAwM2VuZXh0O1xuIFx0XHRcdHNrYi1cdTAwM2VuZXh0ID0gTlVMTDtcbiBcbi1cdFx0XHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFx1MDAyNmh3LCBcdTAwMjZzdGEpO1xuLVx0XHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4rXHRcdFx0bXQ3Nl9yeF9jb252ZXJ0KGRldiwgc2tiLCBcdTAwMjZodywgXHUwMDI2bGlua19zdGEpO1xuK1x0XHRcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcdTAwMjZsaXN0KTtcbiBcdFx0fVxuIFx0fVxuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZXJ4X2xvY2spO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcbmluZGV4IDM5N2ViYmZjYWMwOWEuLjQ1NGQ4NzZhZWI4ODYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmNcbkBAIC0zMDczLDEwICszMDczLDggQEAgc3RhdGljIHZvaWQgcnR3ODlfdmlmX3J4X3N0YXRzX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYyxcbiBcdHN0cnVjdCBydHc4OV92aWYgKnJ0d3ZpZiA9IHZpZl90b19ydHd2aWYodmlmKTtcbiBcdHN0cnVjdCBydHc4OV9yeF9kZXNjX2luZm8gKmRlc2NfaW5mbyA9IGl0ZXJfZGF0YS1cdTAwM2VkZXNjX2luZm87XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaXRlcl9kYXRhLVx1MDAzZXNrYjtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBydHc4OV9yeF9waHlfcHBkdSAqcGh5X3BwZHUgPSBpdGVyX2RhdGEtXHUwMDNlcGh5X3BwZHU7XG4tXHRib29sIGlzX21sZCA9IGllZWU4MDIxMV92aWZfaXNfbWxkKHZpZik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZjtcbiBcdHN0cnVjdCBydHc4OV92aWZfbGluayAqcnR3dmlmX2xpbms7XG4gXHRjb25zdCB1OCAqYnNzaWQgPSBpdGVyX2RhdGEtXHUwMDNlYnNzaWQ7XG5AQCAtMzExMCwxMSArMzEwOCw2IEBAIHN0YXRpYyB2b2lkIHJ0dzg5X3ZpZl9yeF9zdGF0c19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsXG4gXHRpZiAoIWV0aGVyX2FkZHJfZXF1YWwodGFyZ2V0X2Jzc2lkLCBic3NpZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0aWYgKGlzX21sZCkge1xuLVx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IHRydWU7XG4tXHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkID0gcnR3dmlmX2xpbmstXHUwMDNlbGlua19pZDtcbi1cdH1cbi1cbiBcdGJiID0gcnR3ODlfZ2V0X2JiX2N0eChydHdkZXYsIHJ0d3ZpZl9saW5rLVx1MDAzZXBoeV9pZHgpO1xuIFx0cGt0X3N0YXQgPSBcdTAwMjZiYi1cdTAwM2VjdXJfcGt0X3N0YXQ7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdmlydHVhbC9tYWM4MDIxMV9od3NpbV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuaW5kZXggMDJiNmQ4MWNjY2QxMS4uYTBkNTE5Y2Q5YzRmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ZpcnR1YWwvbWFjODAyMTFfaHdzaW1fbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy92aXJ0dWFsL21hYzgwMjExX2h3c2ltX21haW4uY1xuQEAgLTE4ODAsOSArMTg4MCw2IEBAIHN0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX3J4KHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLFxuIFx0XHRcdFx0c3AtXHUwMDNlYWN0aXZlX2xpbmtzX3J4IFx1MDAyNj0gfkJJVChsaW5rX2lkKTtcbiBcdFx0XHRlbHNlXG4gXHRcdFx0XHRzcC1cdTAwM2VhY3RpdmVfbGlua3NfcnggfD0gQklUKGxpbmtfaWQpO1xuLVxuLVx0XHRcdHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkID0gdHJ1ZTtcbi1cdFx0XHRyeF9zdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XG4gXHRcdH1cbiBcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmhcbmluZGV4IDk3YzE2ZDRmZjEyNzEuLjQzNjQ3OGRhZjU1OTYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oXG5AQCAtNDAwOSw2ICs0MDA5LDcgQEAgc3RydWN0IGNmZzgwMjExX3VwZGF0ZV9mdF9pZXNfcGFyYW1zIHtcbiAgKiBAbGlua19pZDogZm9yIE1MTywgdGhlIGxpbmsgSUQgdG8gdHJhbnNtaXQgb24sIC0xIGlmIG5vdCBnaXZlbjsgbm90ZVxuICAqXHR0aGF0IHRoZSBsaW5rIElEIGlzbid0IHZhbGlkYXRlZCAobXVjaCksIGl0J3MgaW4gcmFuZ2UgYnV0IHRoZVxuICAqXHRsaW5rIG1pZ2h0IG5vdCBleGlzdCAob3IgYmUgdXNlZCBieSB0aGUgcmVjZWl2ZXIgU1RBKVxuKyAqIEBub19zdGE6IHNldCBpZiB0aGUgZnJhbWUgc2hvdWxkIG5vdCBiZSB0cmFuc21pdHRlZCB1c2luZyBhbiBleGlzdGluZyBTVEFcbiAgKi9cbiBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMge1xuIFx0c3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuO1xuQEAgLTQwMjEsNiArNDAyMiw3IEBAIHN0cnVjdCBjZmc4MDIxMV9tZ210X3R4X3BhcmFtcyB7XG4gXHRpbnQgbl9jc2Ffb2Zmc2V0cztcbiBcdGNvbnN0IHUxNiAqY3NhX29mZnNldHM7XG4gXHRpbnQgbGlua19pZDtcbitcdGJvb2wgbm9fc3RhO1xuIH07XG4gXG4gLyoqXG5AQCAtOTUwMSw2ICs5NTAzLDcgQEAgdm9pZCBjZmc4MDIxMV9jb25uX2ZhaWxlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqbWFjX2FkZHIsXG4gICogQGZsYWdzOiBmbGFncywgYXMgZGVmaW5lZCBpbiBcdTAwMjZlbnVtIG5sODAyMTFfcnhtZ210X2ZsYWdzXG4gICogQHJ4X3RzdGFtcDogSGFyZHdhcmUgdGltZXN0YW1wIG9mIGZyYW1lIFJYIGluIG5hbm9zZWNvbmRzXG4gICogQGFja190c3RhbXA6IEhhcmR3YXJlIHRpbWVzdGFtcCBvZiBhY2sgVFggaW4gbmFub3NlY29uZHNcbisgKiBAbm9fc3RhOiBzZXQgaWYgbm8gc3RhdGlvbiBpcyBrbm93biBmb3IgdGhlIGZyYW1lIChyZWxldmFudCBmb3IgTUxEKVxuICAqL1xuIHN0cnVjdCBjZmc4MDIxMV9yeF9pbmZvIHtcbiBcdGludCBmcmVxO1xuQEAgLTk1MTIsNiArOTUxNSw3IEBAIHN0cnVjdCBjZmc4MDIxMV9yeF9pbmZvIHtcbiBcdHUzMiBmbGFncztcbiBcdHU2NCByeF90c3RhbXA7XG4gXHR1NjQgYWNrX3RzdGFtcDtcbitcdGJvb2wgbm9fc3RhO1xuIH07XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmhcbmluZGV4IDlkMWZhYzZlODA4MjkuLjdhYWU3MjhlOTZkODQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG4rKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oXG5AQCAtMTc3MCwxMCArMTc3MCw5IEBAIGVudW0gbWFjODAyMTFfcnhfZW5jb2Rpbmcge1xuICAqIEBhbXBkdV9yZWZlcmVuY2U6IEEtTVBEVSByZWZlcmVuY2UgbnVtYmVyLCBtdXN0IGJlIGEgZGlmZmVyZW50IHZhbHVlIGZvclxuICAqXHRlYWNoIEEtTVBEVSBidXQgdGhlIHNhbWUgZm9yIGVhY2ggc3ViZnJhbWUgd2l0aGluIG9uZSBBLU1QRFVcbiAgKiBAemVyb19sZW5ndGhfcHNkdV90eXBlOiByYWRpb3RhcCB0eXBlIG9mIHRoZSAwLWxlbmd0aCBQU0RVXG4tICogQGxpbmtfdmFsaWQ6IGlmIHRoZSBsaW5rIHdoaWNoIGlzIGlkZW50aWZpZWQgYnkgQGxpbmtfaWQgaXMgdmFsaWQuIFRoaXMgZmxhZ1xuLSAqXHRpcyBzZXQgb25seSB3aGVuIGNvbm5lY3Rpb24gaXMgTUxPLlxuLSAqIEBsaW5rX2lkOiBpZCBvZiB0aGUgbGluayB1c2VkIHRvIHJlY2VpdmUgdGhlIHBhY2tldC4gVGhpcyBpcyB1c2VkIGFsb25nIHdpdGhcbi0gKlx0QGxpbmtfdmFsaWQuXG4rICogQGxpbmtfaWQ6IGlkIG9mIHRoZSBsaW5rIHVzZWQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0LiBTZXQgYW5kIHVzZWQgYnlcbisgKlx0bWFjODAyMTEgaW50ZXJuYWxseSwgaXQgdXNlcyBAZnJlcSBzZXQgYnkgdGhlIGRyaXZlciB0byBpZGVudGlmeSB0aGVcbisgKlx0Y29ycmVjdCBsaW5rIHBlciB2aWYuXG4gICovXG4gc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMge1xuIFx0dTY0IG1hY3RpbWU7XG5AQCAtMTgxMyw3ICsxODEyLDcgQEAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMge1xuIFx0dTggY2hhaW5zO1xuIFx0czggY2hhaW5fc2lnbmFsW0lFRUU4MDIxMV9NQVhfQ0hBSU5TXTtcbiBcdHU4IHplcm9fbGVuZ3RoX3BzZHVfdHlwZTtcbi1cdHU4IGxpbmtfdmFsaWQ6MSwgbGlua19pZDo0O1xuK1x0dTggbGlua19pZDo0O1xuIH07XG4gXG4gc3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpIFx1MDAzYz0gc2l6ZW9mX2ZpZWxkKHN0cnVjdCBza19idWZmLCBjYikpO1xuQEAgLTUzODksMTQgKzUzODgsMTggQEAgdm9pZCBpZWVlODAyMTFfcmVzdGFydF9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7XG4gICogbWl4ZWQgZm9yIGEgc2luZ2xlIGhhcmR3YXJlLiBNdXN0IG5vdCBydW4gY29uY3VycmVudGx5IHdpdGhcbiAgKiBpZWVlODAyMTFfdHhfc3RhdHVzX3NrYigpIG9yIGllZWU4MDIxMV90eF9zdGF0dXNfbmkoKS5cbiAgKlxuKyAqIEZvciBkYXRhIGZyYW1lcywgd2hlbiBoYXJkd2FyZSBoYXMgZG9uZSBhZGRyZXNzIHRyYW5zbGF0aW9uLCBhIGxpbmsgc3RhdGlvblxuKyAqIGhhcyB0byBiZSBwcm92aWRlZCBhbmQgdGhlIGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBtYXkgYmUgc2tpcHBlZC5cbisgKlxuICAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBCSHMgZGlzYWJsZWQgYW5kIFJDVSByZWFkIGxvY2tcbiAgKlxuICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvblxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcbisgKiBAbGlua19zdGE6IHRoZSBsaW5rIHN0YXRpb24gdGhlIGRhdGEgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4gICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGxcbiAgKiBAbGlzdDogdGhlIGRlc3RpbmF0aW9uIGxpc3RcbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLFxuK3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4rXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuIFxuIC8qKlxuQEAgLTU0MTQsMTQgKzU0MTcsMTggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSxcbiAgKiBtaXhlZCBmb3IgYSBzaW5nbGUgaGFyZHdhcmUuIE11c3Qgbm90IHJ1biBjb25jdXJyZW50bHkgd2l0aFxuICAqIGllZWU4MDIxMV90eF9zdGF0dXNfc2tiKCkgb3IgaWVlZTgwMjExX3R4X3N0YXR1c19uaSgpLlxuICAqXG4rICogRm9yIGRhdGEgZnJhbWVzLCB3aGVuIGhhcmR3YXJlIGhhcyBkb25lIGFkZHJlc3MgdHJhbnNsYXRpb24sIGEgbGluayBzdGF0aW9uXG4rICogaGFzIHRvIGJlIHByb3ZpZGVkIGFuZCB0aGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uIG1heSBiZSBza2lwcGVkLlxuKyAqXG4gICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJIcyBkaXNhYmxlZC5cbiAgKlxuICAqIEBodzogdGhlIGhhcmR3YXJlIHRoaXMgZnJhbWUgY2FtZSBpbiBvblxuLSAqIEBzdGE6IHRoZSBzdGF0aW9uIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgZnJvbSwgb3IgJU5VTExcbisgKiBAbGlua19zdGE6IHRoZSBsaW5rIHN0YXRpb24gdGhlIGRhdGEgZnJhbWUgd2FzIHJlY2VpdmVkIGZyb20sIG9yICVOVUxMXG4gICogQHNrYjogdGhlIGJ1ZmZlciB0byByZWNlaXZlLCBvd25lZCBieSBtYWM4MDIxMSBhZnRlciB0aGlzIGNhbGxcbiAgKiBAbmFwaTogdGhlIE5BUEkgY29udGV4dFxuICAqL1xuLXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsXG4rdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbitcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfc3RhLFxuIFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaFxuaW5kZXggMDIwMzg3ZDc2NDEyMi4uNDY1M2Y4ZjI2ZWU3MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmhcbkBAIC0zMTg1LDYgKzMxODUsMTEgQEAgZW51bSBubDgwMjExX2NvbW1hbmRzIHtcbiAgKlx0VGhlIGFnZ3JlZ2F0ZWQgbWVzc2FnZSBhbHdheXMgcHJlY2VkZXMgdGhlIHBlci1saW5rIG1lc3NhZ2VzIGZvciB0aGVcbiAgKlx0c2FtZSBzdGF0aW9uIHdpdGhpbiBhIGR1bXAgc2VxdWVuY2UuXG4gICpcbisgKiBATkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEE6IFZhbGlkIGZvciBOTDgwMjExX0NNRF9GUkFNRSB0byBkZW5vdGUgdGhhdFxuKyAqXHR0aGUga2VybmVsIGhhZCBubyBzdGF0aW9uIGZvciBhIHJlY2VpdmVkIGZyYW1lIG9yIHNob3VsZCBub3QgdXNlIGFcbisgKlx0a25vd24gc3RhdGlvbiB0byB0cmFuc21pdCBhIGZyYW1lLiBUaGlzIGlzIHJlbGV2YW50IHRvIGtub3cgd2hldGhlclxuKyAqXHRNTEQgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXBwZW5lZCBvciB0byBkaXNhYmxlIGl0IHdoZW4gc2VuZGluZyBhIGZyYW1lLlxuKyAqXG4gICogQE5VTV9OTDgwMjExX0FUVFI6IHRvdGFsIG51bWJlciBvZiBubDgwMjExX2F0dHJzIGF2YWlsYWJsZVxuICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWRcbiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlXG5AQCAtMzc4NSw2ICszNzkwLDggQEAgZW51bSBubDgwMjExX2F0dHJzIHtcbiBcbiBcdE5MODAyMTFfQVRUUl9TVEFfRFVNUF9MSU5LX1NUQVRTLFxuIFxuK1x0Tkw4MDIxMV9BVFRSX0ZSQU1FX0NNRF9OT19TVEEsXG4rXG4gXHQvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi9cbiBcbiBcdF9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jXG5pbmRleCA0ODMzYjQ2NzcwYjYyLi5kZDhhMTFlZjZlNTJiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2FnZy10eC5jXG4rKysgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmNcbkBAIC05OCw3ICs5OCw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsXG4gXHRpZiAoc3RhLVx1MDAzZXN0YS5kZWZsaW5rLmhlX2NhcC5oYXNfaGUpXG4gXHRcdGllZWU4MDIxMV9hZGRfYWRkYmFleHQoc2tiLCAwLCBhZ2dfc2l6ZSk7XG4gXG4tXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCB0aWQsIC0xKTtcbitcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIHRpZCwgLTEpO1xuIH1cbiBcbiB2b2lkIGllZWU4MDIxMV9zZW5kX2JhcihzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pXG5AQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcbiBcbiBcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cdTAwM2VmbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUIHxcbiBcdFx0XHRcdFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgdGlkLCAtMSk7XG4rXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCB0aWQsIC0xKTtcbiB9XG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc2VuZF9iYXIpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hcC5jIGIvbmV0L21hYzgwMjExL2FwLmNcbmluZGV4IGU3YWM5OWM1YTIyZWIuLmZlMjU1ODkxYzM1ZjAgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvYXAuY1xuKysrIGIvbmV0L21hYzgwMjExL2FwLmNcbkBAIC04Miw5ICs4Miw2IEBAIGllZWU4MDIxMV9yeF9lbWxfb3BfbW9kZV9ub3RpZihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdGlmICghaWZ0X2V4dF9jYXBhKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVx1MDAzZXNhKTtcbiBcdGlmICghc3RhKVxuIFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2h0LmMgYi9uZXQvbWFjODAyMTEvaHQuY1xuaW5kZXggZTFlMWI3ZjgyZjNmZS4uYzVjMjExM2ZhNGY3OSAxMDA2NDRcbi0tLSBhL25ldC9tYWM4MDIxMS9odC5jXG4rKysgYi9uZXQvbWFjODAyMTEvaHQuY1xuQEAgLTU0NSw3ICs1NDUsNyBAQCBpbnQgaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpbmZvLVx1MDAzZXN0YXR1c19kYXRhID0gSUVFRTgwMjExX1NUQVRVU19UWVBFX1NNUFMgfFxuIFx0XHRcdCAgICB1MTZfZW5jb2RlX2JpdHMoc3RhdHVzX2xpbmtfaWQgXHUwMDNjXHUwMDNjIDIgfCBzbXBzLFxuIFx0XHRcdFx0XHQgICAgSUVFRTgwMjExX1NUQVRVU19TVUJEQVRBX01BU0spO1xuLVx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7XG4rXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCBsaW5rX2lkKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5pbmRleCA1NzYxZTk2MjE0OTE0Li4wZDhlYjA0Mjg4N2E5IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmhcbisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oXG5AQCAtMjQ2Myw3ICsyNDYzLDggQEAgdm9pZCBpZWVlODAyMTFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0ICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBcbiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbitcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbitcdFx0XHRcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbiBcdFx0XHRcdCBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JlcXVpcmVfZW5jcnlwdGVkX2Fzc29jKF9fbGUxNiBmYyxcbkBAIC0yNDgzLDE4ICsyNDg0LDIwIEBAIGllZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdFx0ICBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxuIHtcbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCB0aWQsIC0xLCBiYW5kKTtcbitcdF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzZGF0YSwgc2tiLCBFUlJfUFRSKC1FTk9FTlQpLFxuK1x0XHRcdFx0ICAgIHRpZCwgLTEsIGJhbmQpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4tXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCk7XG4rXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbitcdFx0XHQgIGludCB0aWQsIGludCBsaW5rX2lkKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbiBcdFx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXG4tXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCA3LCAtMSk7XG4rXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCAtMSk7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbmluZGV4IDQzNDYwYTcwNWE2YmQuLmEwYjIxNGRiYjhhZjggMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuY1xuKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmNcbkBAIC0xNjczLDExICsxNjczLDggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmYWNlX3Byb2Nlc3Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHRcdFx0YnJlYWs7XG4gXG4gXHRcdFx0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tXHRcdFx0aWYgKCFzdGF0dXMtXHUwMDNlbGlua192YWxpZClcbi1cdFx0XHRcdGxpbmtfc3RhID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbms7XG4tXHRcdFx0ZWxzZVxuLVx0XHRcdFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN0YS1cdTAwM2VsaW5rW3N0YXR1cy1cdTAwM2VsaW5rX2lkXSxcbi1cdFx0XHRcdFx0XHRcdGxvY2tkZXBfaXNfaGVsZChcdTAwMjZsb2NhbC1cdTAwM2Vody53aXBoeS1cdTAwM2VtdHgpKTtcbitcdFx0XHRsaW5rX3N0YSA9IHdpcGh5X2RlcmVmZXJlbmNlKGxvY2FsLVx1MDAzZWh3LndpcGh5LFxuK1x0XHRcdFx0XHRcdCAgICAgc3RhLVx1MDAzZWxpbmtbc3RhdHVzLVx1MDAzZWxpbmtfaWRdKTtcbiBcdFx0XHRpZiAobGlua19zdGEpXG4gXHRcdFx0XHRpZWVlODAyMTFfaHRfaGFuZGxlX2NoYW53aWR0aF9ub3RpZihsb2NhbCwgc2RhdGEsIHN0YSxcbiBcdFx0XHRcdFx0XHRcdFx0ICAgIGxpbmtfc3RhLCBjaGFud2lkdGgsXG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmNcbmluZGV4IGY1MTE2N2YwZmM0NmQuLjM2MTc3NWZiOTMxZWMgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jXG4rKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jXG5AQCAtMTE4MzEsMTIgKzExODMxLDEwIEBAIHZvaWQgaWVlZTgwMjExX3N0YV9yeF9xdWV1ZWRfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRyeF9zdGF0dXMgPSAoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKikgc2tiLVx1MDAzZWNiO1xuIFx0ZmMgPSBsZTE2X3RvX2NwdShtZ210LVx1MDAzZWZyYW1lX2NvbnRyb2wpO1xuIFxuLVx0aWYgKHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKSB7XG4tXHRcdGxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW3J4X3N0YXR1cy1cdTAwM2VsaW5rX2lkXSxcbi1cdFx0XHRcdFx0IHNkYXRhKTtcbi1cdFx0aWYgKCFsaW5rKVxuLVx0XHRcdHJldHVybjtcbi1cdH1cbitcdGxpbmsgPSBzZGF0YV9kZXJlZmVyZW5jZShzZGF0YS1cdTAwM2VsaW5rW3J4X3N0YXR1cy1cdTAwM2VsaW5rX2lkXSxcbitcdFx0XHRcdCBzZGF0YSk7XG4rXHRpZiAoIWxpbmspXG4rXHRcdHJldHVybjtcbiBcbiBcdHN3aXRjaCAoZmMgXHUwMDI2IElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7XG4gXHRjYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046XG5kaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmNcbmluZGV4IDdhY2VmODBkNWYxZmIuLjY1MzcxMDU3NjgzMTYgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG4rKysgYi9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jXG5AQCAtODU0LDggKzg1NCwxMCBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdFx0XHRuZWVkX29mZmNoYW4gPSB0cnVlO1xuIFxuIFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1nbXQtXHUwMDNlZGEpO1xuLVx0XHRtbG9fc3RhID0gc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLm1sbztcbitcdFx0aWYgKCFwYXJhbXMtXHUwMDNlbm9fc3RhKSB7XG4rXHRcdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWdtdC1cdTAwM2VkYSk7XG4rXHRcdFx0bWxvX3N0YSA9IHN0YSBcdTAwMjZcdTAwMjYgc3RhLVx1MDAzZXN0YS5tbG87XG4rXHRcdH1cbiBcbiBcdFx0aWYgKCFpZWVlODAyMTFfaXNfYWN0aW9uKG1nbXQtXHUwMDNlZnJhbWVfY29udHJvbCkgfHxcbiBcdFx0ICAgIG1nbXQtXHUwMDNldS5hY3Rpb24uY2F0ZWdvcnkgPT0gV0xBTl9DQVRFR09SWV9QVUJMSUMgfHxcbkBAIC04ODQsNyArODg2LDggQEAgaW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXG4gXHRcdCAgICAgbG9jYWwtXHUwMDNlb3BzLVx1MDAzZXJlbWFpbl9vbl9jaGFubmVsIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIG1lbWNtcChzZGF0YS1cdTAwM2V2aWYuY2ZnLmFwX2FkZHIsIG1nbXQtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKSkpIHtcbiBcdFx0XHRuZWVkX29mZmNoYW4gPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHNkYXRhLVx1MDAzZXUubWdkLmFzc29jaWF0ZWQgXHUwMDI2XHUwMDI2XG4rXHRcdH0gZWxzZSBpZiAoIXBhcmFtcy1cdTAwM2Vub19zdGEgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICAgc2RhdGEtXHUwMDNldS5tZ2QuYXNzb2NpYXRlZCBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICBldGhlcl9hZGRyX2VxdWFsKHNkYXRhLVx1MDAzZXZpZi5jZmcuYXBfYWRkciwgbWdtdC1cdTAwM2VkYSkpIHtcbiBcdFx0XHRzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtZ210LVx1MDAzZWRhKTtcbiBcdFx0XHRtbG9fc3RhID0gc3RhIFx1MDAyNlx1MDAyNiBzdGEtXHUwMDNlc3RhLm1sbztcbkBAIC0xMDIyLDcgKzEwMjUsOSBAQCBpbnQgaWVlZTgwMjExX21nbXRfdHgoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldixcbiBcdH1cbiBcbiBcdGlmICghbmVlZF9vZmZjaGFuKSB7XG4tXHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIDcsIGxpbmtfaWQpO1xuK1x0XHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLFxuK1x0XHRcdFx0ICAgICBwYXJhbXMtXHUwMDNlbm9fc3RhID8gc3RhIDogRVJSX1BUUigtRU5PRU5UKSxcbitcdFx0XHRcdCAgICAgNywgbGlua19pZCk7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbiBcdH1cbmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jXG5pbmRleCA1ZTI2YmU4ZTI3ZDhmLi5lZDVhMmUwNTkwNzU3IDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3J4LmNcbisrKyBiL25ldC9tYWM4MDIxMS9yeC5jXG5AQCAtMjIyLDQzICsyMjIsMjEgQEAgaWVlZTgwMjExX3J4X3JhZGlvdGFwX2hkcmxlbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCxcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdFx0XHQgICBpbnQgbGlua19pZCxcbi1cdFx0XHRcdFx0ICAgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSxcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4tXG4tXHRpZiAobGlua19pZCBcdTAwM2U9IDApIHtcbi1cdFx0c3RhdHVzLVx1MDAzZWxpbmtfdmFsaWQgPSAxO1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IGxpbmtfaWQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRzdGF0dXMtXHUwMDNlbGlua192YWxpZCA9IDA7XG4tXHR9XG4tXG4gXHRza2JfcXVldWVfdGFpbChcdTAwMjZzZGF0YS1cdTAwM2Vza2JfcXVldWUsIHNrYik7XG4gXHR3aXBoeV93b3JrX3F1ZXVlKHNkYXRhLVx1MDAzZWxvY2FsLVx1MDAzZWh3LndpcGh5LCBcdTAwMjZzZGF0YS1cdTAwM2V3b3JrKTtcbi1cdGlmIChzdGEpIHtcbi1cdFx0c3RydWN0IGxpbmtfc3RhX2luZm8gKmxpbmtfc3RhX2luZm87XG4tXG4tXHRcdGlmIChsaW5rX2lkIFx1MDAzZT0gMCkge1xuLVx0XHRcdGxpbmtfc3RhX2luZm8gPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxpbmtbbGlua19pZF0pO1xuLVx0XHRcdGlmICghbGlua19zdGFfaW5mbylcbi1cdFx0XHRcdHJldHVybjtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRsaW5rX3N0YV9pbmZvID0gXHUwMDI2c3RhLVx1MDAzZWRlZmxpbms7XG4tXHRcdH1cbi1cbi1cdFx0bGlua19zdGFfaW5mby1cdTAwM2VyeF9zdGF0cy5wYWNrZXRzKys7XG4tXHR9XG4rXHRpZiAobGlua19zdGEpXG4rXHRcdGxpbmtfc3RhLVx1MDAzZXJ4X3N0YXRzLnBhY2tldHMrKztcbiB9XG4gXG4gc3RhdGljIHZvaWQgaWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdFx0IGludCBsaW5rX2lkLFxuLVx0XHRcdFx0XHQgc3RydWN0IHN0YV9pbmZvICpzdGEsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IDA7XG4tXHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIGxpbmtfaWQsIHN0YSwgc2tiKTtcbitcdF9faWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgbGlua19zdGEsIHNrYik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9oYW5kbGVfbXVfbWltb19tb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG5AQCAtMzAxLDcgKzI3OSw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9oYW5kbGVfbXVfbWltb19tb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRpZiAoIXNrYilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgLTEsIE5VTEwsIHNrYik7XG4rXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCBOVUxMLCBza2IpO1xuIH1cbiBcbiAvKlxuQEAgLTE0OTgsNyArMTQ3Niw3IEBAIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9yZW9yZGVyX2FtcGR1KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHQvKiBpZiB0aGlzIG1wZHUgaXMgZnJhZ21lbnRlZCAtIHRlcm1pbmF0ZSByeCBhZ2dyZWdhdGlvbiBzZXNzaW9uICovXG4gXHRzYyA9IGxlMTZfdG9fY3B1KGhkci1cdTAwM2VzZXFfY3RybCk7XG4gXHRpZiAoc2MgXHUwMDI2IElFRUU4MDIxMV9TQ1RMX0ZSQUcpIHtcbi1cdFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShyeC1cdTAwM2VzZGF0YSwgcngtXHUwMDNlbGlua19pZCwgTlVMTCwgc2tiKTtcbitcdFx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShyeC1cdTAwM2VzZGF0YSwgTlVMTCwgc2tiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTI1MjQsNyArMjUwMiw3IEBAIGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcbiAgb3V0OlxuIFx0aWVlZTgwMjExX2xlZF9yeChyeC1cdTAwM2Vsb2NhbCk7XG4tXHRpZiAocngtXHUwMDNlc3RhKVxuK1x0aWYgKHJ4LVx1MDAzZWxpbmtfc3RhKVxuIFx0XHRyeC1cdTAwM2VsaW5rX3N0YS1cdTAwM2VyeF9zdGF0cy5wYWNrZXRzKys7XG4gXHRyZXR1cm4gUlhfQ09OVElOVUU7XG4gfVxuQEAgLTMzMzUsOCArMzMxMyw4IEBAIGllZWU4MDIxMV9yeF9oX2RhdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdFx0ICAgICh0Zi1cdTAwM2VhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfQ0hBTk5FTF9TV0lUQ0hfUkVRVUVTVCB8fFxuIFx0XHQgICAgIHRmLVx1MDAzZWFjdGlvbl9jb2RlID09IFdMQU5fVERMU19DSEFOTkVMX1NXSVRDSF9SRVNQT05TRSkpIHtcbiBcdFx0XHRyeC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9URExTKTtcbi1cdFx0XHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfaWQsXG4tXHRcdFx0XHRcdFx0ICAgICAgIHJ4LVx1MDAzZXN0YSwgcngtXHUwMDNlc2tiKTtcbitcdFx0XHRfX2llZWU4MDIxMV9xdWV1ZV9za2JfdG9faWZhY2Uoc2RhdGEsIHJ4LVx1MDAzZWxpbmtfc3RhLFxuK1x0XHRcdFx0XHRcdCAgICAgICByeC1cdTAwM2Vza2IpO1xuIFx0XHRcdHJldHVybiBSWF9RVUVVRUQ7XG4gXHRcdH1cbiBcdH1cbkBAIC0zOTkxLDcgKzM5NjksNyBAQCBpZWVlODAyMTFfcnhfaF9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gXG4gIHF1ZXVlOlxuLVx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19pZCwgcngtXHUwMDNlc3RhLCByeC1cdTAwM2Vza2IpO1xuK1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsIHJ4LVx1MDAzZXNrYik7XG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIH1cbiBcbkBAIC00MDA1LDYgKzM5ODMsNyBAQCBpZWVlODAyMTFfcnhfaF91c2Vyc3BhY2VfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHQubGVuID0gcngtXHUwMDNlc2tiLVx1MDAzZWxlbixcbiBcdFx0LmxpbmtfaWQgPSByeC1cdTAwM2VsaW5rX2lkLFxuIFx0XHQuaGF2ZV9saW5rX2lkID0gcngtXHUwMDNlbGlua19pZCBcdTAwM2U9IDAsXG4rXHRcdC5ub19zdGEgPSAhcngtXHUwMDNlc3RhLFxuIFx0fTtcbiBcbiBcdC8qIHNraXAga25vd24tYmFkIGFjdGlvbiBmcmFtZXMgYW5kIHJldHVybiB0aGVtIGluIHRoZSBuZXh0IGhhbmRsZXIgKi9cbkBAIC00MTI3LDcgKzQxMDYsNyBAQCBpZWVlODAyMTFfcnhfaF9hY3Rpb25fcmV0dXJuKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdFx0XHRcdGxvY2FsLVx1MDAzZWh3Lm9mZmNoYW5uZWxfdHhfaHdfcXVldWU7XG4gXHRcdH1cbiBcbi1cdFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LVx1MDAzZXNkYXRhLCBuc2tiLCA3LCAtMSxcbitcdFx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJ4LVx1MDAzZXNkYXRhLCBuc2tiLCByeC1cdTAwM2VzdGEsIDcsIC0xLFxuIFx0XHRcdFx0XHQgICAgc3RhdHVzLVx1MDAzZWJhbmQpO1xuIFx0fVxuIFxuQEAgLTQxNDcsNyArNDEyNiw3IEBAIGllZWU4MDIxMV9yeF9oX2V4dChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuIFx0XHRyZXR1cm4gUlhfRFJPUF9VX1VORVhQRUNURURfRVhUX0ZSQU1FO1xuIFxuIFx0LyogZm9yIG5vdyBvbmx5IGJlYWNvbnMgYXJlIGV4dCwgc28gcXVldWUgdGhlbSAqL1xuLVx0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19pZCwgcngtXHUwMDNlc3RhLCByeC1cdTAwM2Vza2IpO1xuK1x0aWVlZTgwMjExX3F1ZXVlX3NrYl90b19pZmFjZShzZGF0YSwgcngtXHUwMDNlbGlua19zdGEsIHJ4LVx1MDAzZXNrYik7XG4gXG4gXHRyZXR1cm4gUlhfUVVFVUVEO1xuIH1cbkBAIC00MjA0LDcgKzQxODMsNyBAQCBpZWVlODAyMTFfcnhfaF9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gXHRcdHJldHVybiBSWF9EUk9QX1VfVU5IQU5ETEVEX01HTVRfU1RZUEU7XG4gXHR9XG4gXG4tXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX2lkLCByeC1cdTAwM2VzdGEsIHJ4LVx1MDAzZXNrYik7XG4rXHRpZWVlODAyMTFfcXVldWVfc2tiX3RvX2lmYWNlKHNkYXRhLCByeC1cdTAwM2VsaW5rX3N0YSwgcngtXHUwMDNlc2tiKTtcbiBcbiBcdHJldHVybiBSWF9RVUVVRUQ7XG4gfVxuQEAgLTQyNDgsMTIgKzQyMjcsMjggQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2cngtXHUwMDNlbG9jYWwtXHUwMDNlcnhfcGF0aF9sb2NrKTtcbiBcbiBcdHdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZShmcmFtZXMpKSkge1xuK1x0XHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4rXG4gXHRcdC8qXG4tXHRcdCAqIGFsbCB0aGUgb3RoZXIgZmllbGRzIGFyZSB2YWxpZCBhY3Jvc3MgZnJhbWVzXG4tXHRcdCAqIHRoYXQgYmVsb25nIHRvIGFuIGFNUERVIHNpbmNlIHRoZXkgYXJlIG9uIHRoZVxuLVx0XHQgKiBzYW1lIFRJRCBmcm9tIHRoZSBzYW1lIHN0YXRpb25cbitcdFx0ICogTW9zdCBmaWVsZHMgYXJlIHZhbGlkIGFjcm9zcyBmcmFtZXMuIEhvd2V2ZXIsXG4rXHRcdCAqIGluIHRoZSBjYXNlIG9mIHJlb3JkZXJpbmcgZnJhbWVzIG1heSBoYXZlIGFycml2ZWRcbitcdFx0ICogb24gZGlmZmVyZW50IGxpbmtzLCBzbyBhZGp1c3QgdGhlIGxpbmtfaWQsIGxpbmtcbitcdFx0ICogYW5kIGxpbmtfc3RhIGFjY29yZGluZ2x5LlxuIFx0XHQgKi9cbiBcdFx0cngtXHUwMDNlc2tiID0gc2tiO1xuK1x0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNldmlmKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHVubGlrZWx5KHJ4LVx1MDAzZWxpbmtfaWQgIT0gc3RhdHVzLVx1MDAzZWxpbmtfaWQpKSB7XG4rXHRcdFx0aWYgKHJ4LVx1MDAzZXN0YSkge1xuK1x0XHRcdFx0cngtXHUwMDNlbGlua19zdGEgPVxuK1x0XHRcdFx0XHRyY3VfZGVyZWZlcmVuY2UocngtXHUwMDNlc3RhLVx1MDAzZWxpbmtbcngtXHUwMDNlbGlua19pZF0pO1xuK1xuK1x0XHRcdFx0LyogTGluayBnb3QgZGlzYWJsZWQsIGp1c3QgdXNlIGRlZmxpbmsgKi9cbitcdFx0XHRcdGlmICghcngtXHUwMDNlbGlua19zdGEpXG4rXHRcdFx0XHRcdHJ4LVx1MDAzZWxpbmtfc3RhID0gXHUwMDI2cngtXHUwMDNlc3RhLVx1MDAzZWRlZmxpbms7XG4rXHRcdFx0fVxuK1x0XHRcdHJ4LVx1MDAzZWxpbmtfaWQgPSBzdGF0dXMtXHUwMDNlbGlua19pZDtcbitcdFx0XHRyeC1cdTAwM2VsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHJ4LVx1MDAzZXNkYXRhLVx1MDAzZWxpbmtbc3RhdHVzLVx1MDAzZWxpbmtfaWRdKTtcbitcdFx0fVxuIFxuIFx0XHRpZiAoV0FSTl9PTl9PTkNFKCFyeC1cdTAwM2VsaW5rKSkge1xuIFx0XHRcdHJlcyA9IFJYX0RST1BfVV9OT19MSU5LO1xuQEAgLTQzMjMsNyArNDMxOCwzNCBAQCBzdGF0aWMgdm9pZCBpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXG4gc3RhdGljIGJvb2xcbiBpZWVlODAyMTFfcnhfaXNfdmFsaWRfc3RhX2xpbmtfaWQoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggbGlua19pZClcbiB7XG4tXHRyZXR1cm4gISEoc3RhLVx1MDAzZXZhbGlkX2xpbmtzIFx1MDAyNiBCSVQobGlua19pZCkpO1xuK1x0aWYgKHN0YS1cdTAwM2VtbG8pXG4rXHRcdHJldHVybiBzdGEtXHUwMDNldmFsaWRfbGlua3MgXHUwMDI2IEJJVChsaW5rX2lkKTtcbitcbitcdHJldHVybiBzdGEtXHUwMDNlZGVmbGluay5saW5rX2lkID09IGxpbmtfaWQ7XG4rfVxuK1xuK3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuK1x0XHRcdFx0XHQgICBzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGEpXG4re1xuK1x0c3RydWN0IHN0YV9pbmZvICpzdGE7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkgfHxcbitcdCAgICAhaWVlZTgwMjExX3J4X2lzX3ZhbGlkX3N0YV9saW5rX2lkKFx1MDAyNmxpbmtfc3RhLVx1MDAzZXN0YS1cdTAwM2VzdGEsXG4rXHRcdFx0XHRcdCAgICAgICBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuK1xuK1x0cngtXHUwMDNlc3RhID0gc3RhO1xuK1x0cngtXHUwMDNlbG9jYWwgPSBzdGEtXHUwMDNlc2RhdGEtXHUwMDNlbG9jYWw7XG4rXHRyeC1cdTAwM2VsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHN0YS1cdTAwM2VzZGF0YS1cdTAwM2VsaW5rW2xpbmtfc3RhLVx1MDAzZWxpbmtfaWRdKTtcbitcdGlmICghcngtXHUwMDNlbGluaylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cngtXHUwMDNlbGlua19pZCA9IHJ4LVx1MDAzZWxpbmstXHUwMDNlbGlua19pZDtcbitcdHJ4LVx1MDAzZWxpbmtfc3RhID0gbGlua19zdGE7XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4gc3RhdGljIGJvb2wgaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbkBAIC00MzYwLDExICs0MzgyLDEzIEBAIHN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcbiBcdGlmIChsaW5rX2lkIFx1MDAzYyAwKSB7XG4gXHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZyeC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgc3RhIFx1MDAyNlx1MDAyNiAhc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcylcbitcdFx0ICAgIHN0YSBcdTAwMjZcdTAwMjYgIXN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpIHtcbiBcdFx0XHRyeC1cdTAwM2VsaW5rID1cbiBcdFx0XHRcdHJjdV9kZXJlZmVyZW5jZShyeC1cdTAwM2VzZGF0YS1cdTAwM2VsaW5rW3N0YS1cdTAwM2VkZWZsaW5rLmxpbmtfaWRdKTtcbi1cdFx0ZWxzZVxuK1x0XHRcdHJ4LVx1MDAzZWxpbmtfc3RhID0gcmN1X2RlcmVmZXJlbmNlKHJ4LVx1MDAzZXN0YS1cdTAwM2VsaW5rW2xpbmtfaWRdKTtcbitcdFx0fSBlbHNlIHtcbiBcdFx0XHRyeC1cdTAwM2VsaW5rID0gXHUwMDI2cngtXHUwMDNlc2RhdGEtXHUwMDNlZGVmbGluaztcbitcdFx0fVxuIFx0fSBlbHNlIGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsocngsIGxpbmtfaWQpKSB7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC00Mzg3LDcgKzQ0MTEsNyBAQCB2b2lkIGllZWU4MDIxMV9yZWxlYXNlX3Jlb3JkZXJfdGltZW91dChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgaW50IHRpZClcbiBcdHN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7XG4gXHRpbnQgbGlua19pZCA9IC0xO1xuIFxuLVx0LyogRklYTUU6IHN0YXRpc3RpY3Mgd29uJ3QgYmUgcmlnaHQgd2l0aCB0aGlzICovXG4rXHQvKiBOT1RFOiB0aGUgY29ycmVjdCBsaW5rIFNUQSBmb3IgdGhlIGZyYW1lIGlzIHNldCBsYXRlciAqL1xuIFx0aWYgKHN0YS1cdTAwM2VzdGEudmFsaWRfbGlua3MpXG4gXHRcdGxpbmtfaWQgPSBmZnMoc3RhLVx1MDAzZXN0YS52YWxpZF9saW5rcykgLSAxO1xuIFxuQEAgLTQ5MTQsMjAgKzQ5MzgsMTQgQEAgc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4XzgwMjMoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N0YV9yeF9zdGF0cyAqc3RhdHM7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVx1MDAzZXNrYik7XG4tXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IHJ4LVx1MDAzZXN0YTtcbi1cdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YTtcbitcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LVx1MDAzZXNrYjtcbiBcdHZvaWQgKnNhID0gc2tiLVx1MDAzZWRhdGEgKyBFVEhfQUxFTjtcbiBcdHZvaWQgKmRhID0gc2tiLVx1MDAzZWRhdGE7XG4gXG4tXHRpZiAocngtXHUwMDNlbGlua19pZCBcdTAwM2U9IDApIHtcbi1cdFx0bGlua19zdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLVx1MDAzZWxpbmtbcngtXHUwMDNlbGlua19pZF0pO1xuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKCFsaW5rX3N0YSkpIHtcbi1cdFx0XHRkZXZfa2ZyZWVfc2tiKHJ4LVx1MDAzZXNrYik7XG4tXHRcdFx0cmV0dXJuO1xuLVx0XHR9XG4tXHR9IGVsc2Uge1xuLVx0XHRsaW5rX3N0YSA9IFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rO1xuK1x0aWYgKFdBUk5fT05fT05DRSghbGlua19zdGEpKSB7XG4rXHRcdGRldl9rZnJlZV9za2IocngtXHUwMDNlc2tiKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0c3RhdHMgPSBcdTAwMjZsaW5rX3N0YS1cdTAwM2VyeF9zdGF0cztcbkBAIC01MTU0LDYgKzUxNzIsOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfaW52b2tlX2Zhc3Rfcngoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCxcbiBcdFx0Z290byBkcm9wO1xuIFx0fVxuIFxuK1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4rXHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNjIDAgPyAwIDogcngtXHUwMDNlbGlua19pZDtcbitcbiBcdGllZWU4MDIxMV9yeF84MDIzKHJ4LCBmYXN0X3J4LCBvcmlnX2xlbik7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC01MTc4LDYgKzUxOTksNyBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbiBcdHN0cnVjdCBsaW5rX3N0YV9pbmZvICpsaW5rX3N0YSA9IHJ4LVx1MDAzZWxpbmtfc3RhO1xuIFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbmsgPSByeC1cdTAwM2VsaW5rO1xuK1x0c3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cztcbiBcbiBcdHJ4LVx1MDAzZXNrYiA9IHNrYjtcbiBcbkBAIC01MjIxLDYgKzUyNDMsOSBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4gXHRcdGhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LVx1MDAzZXNrYi1cdTAwM2VkYXRhO1xuIFx0fVxuIFxuK1x0c3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHJ4LVx1MDAzZXNrYik7XG4rXHRzdGF0dXMtXHUwMDNlbGlua19pZCA9IHJ4LVx1MDAzZWxpbmtfaWQgXHUwMDNjIDAgPyAwIDogcngtXHUwMDNlbGlua19pZDtcbitcbiBcdGlmIChpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbiBcdFx0aWVlZTgwMjExX2ludm9rZV9yeF9oYW5kbGVycyhyeCk7XG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTUyNTYsMjIgKzUyODEsMTkgQEAgc3RhdGljIGJvb2wgaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuIH1cbiBcbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbiB7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTtcbi1cdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfZmFzdF9yeCAqZmFzdF9yeDtcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeDtcbiBcdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuLVx0aW50IGxpbmtfaWQgPSAtMTtcbiBcbiBcdG1lbXNldChcdTAwMjZyeCwgMCwgc2l6ZW9mKHJ4KSk7XG4gXHRyeC5za2IgPSBza2I7XG4gXHRyeC5sb2NhbCA9IGxvY2FsO1xuIFx0cngubGlzdCA9IGxpc3Q7XG4tXHRyeC5saW5rX2lkID0gLTE7XG4gXG4gXHRJODAyX0RFQlVHX0lOQyhsb2NhbC1cdTAwM2Vkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudCk7XG4gXG5AQCAtNTI3OSwyMyArNTMwMSwxNSBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdGlmIChza2ItXHUwMDNlbGVuIFx1MDAzYyBzaXplb2Yoc3RydWN0IGV0aGhkcikpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbi1cdGlmICghcHVic3RhKVxuK1x0aWYgKCFsaW5rX3B1YnN0YSlcbiBcdFx0Z290byBkcm9wO1xuIFxuLVx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKVxuLVx0XHRsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4tXG4tXHQvKlxuLVx0ICogVE9ETzogU2hvdWxkIHRoZSBmcmFtZSBiZSBkcm9wcGVkIGlmIHRoZSByaWdodCBsaW5rX2lkIGlzIG5vdFxuLVx0ICogYXZhaWxhYmxlPyBPciBtYXkgYmUgaXQgaXMgZmluZSBpbiB0aGUgY3VycmVudCBmb3JtIHRvIHByb2NlZWQgd2l0aFxuLVx0ICogdGhlIGZyYW1lIHByb2Nlc3NpbmcgYmVjYXVzZSB3aXRoIGZyYW1lIGJlaW5nIGluIDgwMi4zIGZvcm1hdCxcbi1cdCAqIGxpbmtfaWQgaXMgdXNlZCBvbmx5IGZvciBzdGF0cyBwdXJwb3NlIGFuZCB1cGRhdGluZyB0aGUgc3RhdHMgb25cbi1cdCAqIHRoZSBkZWZsaW5rIGlzIGZpbmU/XG4tXHQgKi9cbi1cdHN0YSA9IGNvbnRhaW5lcl9vZihwdWJzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbi1cdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgc3RhLCBsaW5rX2lkKSlcbitcdHN0YSA9IGNvbnRhaW5lcl9vZihsaW5rX3B1YnN0YS1cdTAwM2VzdGEsIHN0cnVjdCBzdGFfaW5mbywgc3RhKTtcbitcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgc3RhLCBsaW5rX3B1YnN0YS1cdTAwM2VsaW5rX2lkKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuK1x0cngubGlua19pZCA9IGxpbmtfcHVic3RhLVx1MDAzZWxpbmtfaWQ7XG4rXG4gXHRmYXN0X3J4ID0gcmN1X2RlcmVmZXJlbmNlKHJ4LnN0YS1cdTAwM2VmYXN0X3J4KTtcbiBcdGlmICghZmFzdF9yeClcbiBcdFx0Z290byBkcm9wO1xuQEAgLTUzMDcsNTkgKzUzMjEsMTkgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlXzgwMjMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4gXHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4gfVxuIFxuLXN0YXRpYyBib29sIGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBjb25zdW1lKVxuK3N0YXRpYyBib29sIGllZWU4MDIxMV9yeF92YWxpZF9mcmVxKGludCBmcmVxLCBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaylcbiB7XG4tXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItXHUwMDNlZGF0YTtcbi1cdHN0cnVjdCBzdGFfaW5mbyAqc3RhO1xuLVx0aW50IGxpbmtfaWQgPSAtMTtcbi1cbi1cdGlmIChpZWVlODAyMTFfaXNfczFnX2JlYWNvbihoZHItXHUwMDNlZnJhbWVfY29udHJvbCkpIHtcbi1cdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKHJ4LCBOVUxMLCAtMSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuLVxuLVx0XHRyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTtcbi1cdH1cbitcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mO1xuIFxuLVx0Lypcbi1cdCAqIExvb2sgdXAgbGluayBzdGF0aW9uIGZpcnN0LCBpbiBjYXNlIHRoZXJlJ3MgYVxuLVx0ICogY2hhbmNlIHRoYXQgdGhleSBtaWdodCBoYXZlIGEgbGluayBhZGRyZXNzIHRoYXRcbi1cdCAqIGlzIGlkZW50aWNhbCB0byB0aGUgTUxEIGFkZHJlc3MsIHRoYXQgd2F5IHdlJ2xsXG4tXHQgKiBoYXZlIHRoZSBsaW5rIGluZm9ybWF0aW9uIGlmIG5lZWRlZC5cbi1cdCAqL1xuLVx0bGlua19zdGEgPSBsaW5rX3N0YV9pbmZvX2dldF9ic3MocngtXHUwMDNlc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4tXHRpZiAobGlua19zdGEpIHtcbi1cdFx0c3RhID0gbGlua19zdGEtXHUwMDNlc3RhO1xuLVx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbi1cdH0gZWxzZSB7XG4tXHRcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbi1cbi1cdFx0c3RhID0gc3RhX2luZm9fZ2V0X2JzcyhyeC1cdTAwM2VzZGF0YSwgaGRyLVx1MDAzZWFkZHIyKTtcbi1cdFx0aWYgKHN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKSB7XG4tXHRcdFx0bGlua19pZCA9IHN0YXR1cy1cdTAwM2VsaW5rX2lkO1xuLVx0XHR9IGVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnJ4LVx1MDAzZXNkYXRhLVx1MDAzZXZpZikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgc3RhdHVzLVx1MDAzZWZyZXEpIHtcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluaztcbi1cdFx0XHRzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZjtcbi1cbi1cdFx0XHRmb3JfZWFjaF9saW5rX2RhdGFfcmN1KHJ4LVx1MDAzZXNkYXRhLCBsaW5rKSB7XG4tXHRcdFx0XHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXHUwMDNlY29uZi1cdTAwM2VjaGFuY3R4X2NvbmYpO1xuLVx0XHRcdFx0aWYgKCFjb25mIHx8ICFjb25mLVx1MDAzZWRlZi5jaGFuKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0XHRcdGlmIChzdGF0dXMtXHUwMDNlZnJlcSA9PSBjb25mLVx1MDAzZWRlZi5jaGFuLVx1MDAzZWNlbnRlcl9mcmVxKSB7XG4tXHRcdFx0XHRcdGxpbmtfaWQgPSBsaW5rLVx1MDAzZWxpbmtfaWQ7XG4tXHRcdFx0XHRcdGJyZWFrO1xuLVx0XHRcdFx0fVxuLVx0XHRcdH1cbi1cdFx0fVxuLVx0fVxuK1x0aWYgKCFmcmVxIHx8IGxpbmstXHUwMDNlc2RhdGEtXHUwMDNldmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTkFOIHx8XG4rXHQgICAgbGluay1cdTAwM2VzZGF0YS1cdTAwM2V2aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9OQU5fREFUQSlcbitcdFx0cmV0dXJuIHRydWU7XG4gXG4tXHRpZiAoIWllZWU4MDIxMV9yeF9kYXRhX3NldF9zdGEocngsIHN0YSwgbGlua19pZCkpXG4rXHRjb25mID0gcmN1X2RlcmVmZXJlbmNlKGxpbmstXHUwMDNlY29uZi1cdTAwM2VjaGFuY3R4X2NvbmYpO1xuK1x0aWYgKCFjb25mIHx8ICFjb25mLVx1MDAzZWRlZi5jaGFuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gaWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShyeCwgc2tiLCBjb25zdW1lKTtcbitcdHJldHVybiBmcmVxID09IGNvbmYtXHUwMDNlZGVmLmNoYW4tXHUwMDNlY2VudGVyX2ZyZXE7XG4gfVxuIFxuIC8qXG5AQCAtNTM2NywxOCArNTM0MSwyMCBAQCBzdGF0aWMgYm9vbCBpZWVlODAyMTFfcnhfZm9yX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LFxuICAqIGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgcHJvdGVjdGlvbi5cbiAgKi9cbiBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuLVx0XHRcdFx0XHQgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbitcdFx0XHRcdFx0IHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxuIFx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG4tXHRzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gSUVFRTgwMjExX1NLQl9SWENCKHNrYik7XG4gXHRzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTtcbitcdHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTtcbiBcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7XG4rXHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4rXHRzdHJ1Y3Qgc3RhX2luZm8gKnN0YTtcbiBcdF9fbGUxNiBmYztcbiBcdHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSByeDtcbi1cdHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnByZXY7XG4gXHRzdHJ1Y3QgcmhsaXN0X2hlYWQgKnRtcDtcbitcdGJvb2wgcnhfZGF0YV9wZW5kaW5nO1xuIFx0aW50IGVyciA9IDA7XG4gXG4gXHRmYyA9ICgoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItXHUwMDNlZGF0YSktXHUwMDNlZnJhbWVfY29udHJvbDtcbkBAIC01Mzg2LDcgKzUzNjIsNiBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0cnguc2tiID0gc2tiO1xuIFx0cngubG9jYWwgPSBsb2NhbDtcbiBcdHJ4Lmxpc3QgPSBsaXN0O1xuLVx0cngubGlua19pZCA9IC0xO1xuIFxuIFx0aWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSB8fCBpZWVlODAyMTFfaXNfbWdtdChmYykpXG4gXHRcdEk4MDJfREVCVUdfSU5DKGxvY2FsLVx1MDAzZWRvdDExUmVjZWl2ZWRGcmFnbWVudENvdW50KTtcbkBAIC01NDI2LDk3ICs1NDAxLDEwMiBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuIFx0XHQgICAgIGllZWU4MDIxMV9pc19zMWdfYmVhY29uKGhkci1cdTAwM2VmcmFtZV9jb250cm9sKSkpXG4gXHRcdGllZWU4MDIxMV9zY2FuX3J4KGxvY2FsLCBza2IpO1xuIFxuK1x0LypcbitcdCAqIFJYIG9mIGEgZGF0YSBmcmFtZSBzaG91bGQgb25seSBoYXBwZW4gdG8gZXhpc3Rpbmcgc3RhdGlvbnMuXG4rXHQgKiBJdCBpcyB0aGVyZWZvcmUgbW9yZSBlZmZpY2llbnQgdG8gdXNlIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIGRyaXZlclxuK1x0ICogb3Igc2VhcmNoIGJhc2VkIG9uIHRoZSBzdGF0aW9uJ3MgYWRkcmVzcy5cbitcdCAqXG4rXHQgKiBOb3RlIHdlIHdpbGwgZmFsbCB0aHJvdWdoIGFuZCBoYW5kbGUgYSBzcHVyaW91cyBkYXRhIGZyYW1lIGluIHRoZVxuK1x0ICogc2FtZSB3YXkgYXMgYSBtYW5hZ2VtZW50IGZyYW1lLlxuK1x0ICovXG4gXHRpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7XG4tXHRcdHN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqcHJldl9zdGE7XG4tXHRcdGludCBsaW5rX2lkID0gLTE7XG4tXG4tXHRcdGlmIChzdGF0dXMtXHUwMDNlbGlua192YWxpZClcbi1cdFx0XHRsaW5rX2lkID0gc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4tXG4tXHRcdGlmIChwdWJzdGEpIHtcbi1cdFx0XHRzdGEgPSBjb250YWluZXJfb2YocHVic3RhLCBzdHJ1Y3Qgc3RhX2luZm8sIHN0YSk7XG4tXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfc3RhKFx1MDAyNnJ4LCBzdGEsIGxpbmtfaWQpKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXG4tXHRcdFx0Lypcbi1cdFx0XHQgKiBJbiBNTE8gY29ubmVjdGlvbiwgZmV0Y2ggdGhlIGxpbmtfaWQgdXNpbmcgYWRkcjJcbi1cdFx0XHQgKiB3aGVuIHRoZSBkcml2ZXIgZG9lcyBub3QgcGFzcyBsaW5rX2lkIGluIHN0YXR1cy5cbi1cdFx0XHQgKiBXaGVuIHRoZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGlzIGFscmVhZHkgcGVyZm9ybWVkIGJ5XG4tXHRcdFx0ICogZHJpdmVyL2h3LCB0aGUgdmFsaWQgbGlua19pZCBtdXN0IGJlIHBhc3NlZCBpblxuLVx0XHRcdCAqIHN0YXR1cy5cbi1cdFx0XHQgKi9cbi1cbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkIFx1MDAyNlx1MDAyNiBwdWJzdGEtXHUwMDNlbWxvKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4tXG4tXHRcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcbi1cdFx0XHRcdFx0XHRcdFx0IGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdFx0XHRpZiAoIWxpbmtfc3RhKVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbi1cbi1cdFx0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X2xpbmsoXHUwMDI2cngsXG4tXHRcdFx0XHRcdFx0XHRcdGxpbmtfc3RhLVx1MDAzZWxpbmtfaWQpKVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0aWYgKGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXG4rXHRcdGlmIChsaW5rX3B1YnN0YSkge1xuK1x0XHRcdHN0YSA9IGNvbnRhaW5lcl9vZihsaW5rX3B1YnN0YS1cdTAwM2VzdGEsIHN0cnVjdCBzdGFfaW5mbyxcbitcdFx0XHRcdFx0ICAgc3RhKTtcbitcdFx0XHRsaW5rX3N0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtXHUwMDNlbGlua1tsaW5rX3B1YnN0YS1cdTAwM2VsaW5rX2lkXSk7XG4rXG4rXHRcdFx0cnguc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4rXHRcdFx0aWYgKGllZWU4MDIxMV9yeF9kYXRhX3NldF9saW5rX3N0YShcdTAwMjZyeCwgbGlua19zdGEpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICBpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuIFx0XHRcdFx0cmV0dXJuO1xuK1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdHByZXZfc3RhID0gTlVMTDtcbitcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4gXG4rXHRcdC8qIFNlYXJjaCBmb3Igc3RhdGlvbnMgb24gbm9uLU1MRCBpbnRlcmZhY2VzICovXG4gXHRcdGZvcl9lYWNoX3N0YV9pbmZvKGxvY2FsLCBoZHItXHUwMDNlYWRkcjIsIHN0YSwgdG1wKSB7XG4tXHRcdFx0aWYgKCFwcmV2X3N0YSkge1xuLVx0XHRcdFx0cHJldl9zdGEgPSBzdGE7XG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHR9XG4rXHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XG4gXG4tXHRcdFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cdTAwM2VzZGF0YTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkIFx1MDAyNlx1MDAyNiBwcmV2X3N0YS1cdTAwM2VzdGEubWxvKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4rXHRcdFx0aWYgKGllZWU4MDIxMV92aWZfaXNfbWxkKFx1MDAyNnN0YS1cdTAwM2VzZGF0YS1cdTAwM2V2aWYpKVxuK1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcbi1cdFx0XHRcdFx0XHRcdFx0IGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdFx0XHRpZiAoIWxpbmtfc3RhKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRsaW5rID0gXHUwMDI2c3RhLVx1MDAzZXNkYXRhLVx1MDAzZWRlZmxpbms7XG4rXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpXG4rXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRcdGxpbmtfaWQgPSBsaW5rX3N0YS1cdTAwM2VsaW5rX2lkO1xuK1x0XHRcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcbitcdFx0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYixcbitcdFx0XHRcdFx0XHRcdFx0ZmFsc2UpO1xuK1x0XHRcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgcHJldl9zdGEsIGxpbmtfaWQpKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4tXG4tXHRcdFx0aWVlZTgwMjExX3ByZXBhcmVfYW5kX3J4X2hhbmRsZShcdTAwMjZyeCwgc2tiLCBmYWxzZSk7XG4rXHRcdFx0cnguc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4rXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIFx1MDAyNnN0YS1cdTAwM2VkZWZsaW5rKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdHByZXZfc3RhID0gc3RhO1xuK1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXHRcdH1cbiBcbi1cdFx0aWYgKHByZXZfc3RhKSB7XG4tXHRcdFx0cnguc2RhdGEgPSBwcmV2X3N0YS1cdTAwM2VzZGF0YTtcbi1cdFx0XHRpZiAoIXN0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkIFx1MDAyNlx1MDAyNiBwcmV2X3N0YS1cdTAwM2VzdGEubWxvKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgbGlua19zdGFfaW5mbyAqbGlua19zdGE7XG4rXHRcdC8qIEFuZCBzZWFyY2ggc3RhdGlvbnMgb24gTUxEIGludGVyZmFjZXMgKi9cbitcdFx0Zm9yX2VhY2hfbGlua19zdGFfaW5mbyhsb2NhbCwgaGRyLVx1MDAzZWFkZHIyLCBsaW5rX3N0YSwgdG1wKSB7XG4rXHRcdFx0c3RydWN0IGllZWU4MDIxMV9saW5rX2RhdGEgKmxpbms7XG4gXG4tXHRcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhyeC5zZGF0YSxcbi1cdFx0XHRcdFx0XHRcdFx0IGhkci1cdTAwM2VhZGRyMik7XG4tXHRcdFx0XHRpZiAoIWxpbmtfc3RhKVxuLVx0XHRcdFx0XHRnb3RvIG91dDtcbitcdFx0XHRzdGEgPSBsaW5rX3N0YS1cdTAwM2VzdGE7XG4rXHRcdFx0c2RhdGEgPVx0c3RhLVx1MDAzZXNkYXRhO1xuK1x0XHRcdGxpbmsgPSByY3VfZGVyZWZlcmVuY2Uoc2RhdGEtXHUwMDNlbGlua1tsaW5rX3N0YS1cdTAwM2VsaW5rX2lkXSk7XG4gXG4tXHRcdFx0XHRsaW5rX2lkID0gbGlua19zdGEtXHUwMDNlbGlua19pZDtcbitcdFx0XHRpZiAoIWllZWU4MDIxMV9yeF92YWxpZF9mcmVxKHN0YXR1cy1cdTAwM2VmcmVxLCBsaW5rKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGlmIChyeF9kYXRhX3BlbmRpbmcpIHtcbitcdFx0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYixcbitcdFx0XHRcdFx0XHRcdFx0ZmFsc2UpO1xuK1x0XHRcdFx0cnhfZGF0YV9wZW5kaW5nID0gZmFsc2U7XG4gXHRcdFx0fVxuIFxuLVx0XHRcdGlmICghaWVlZTgwMjExX3J4X2RhdGFfc2V0X3N0YShcdTAwMjZyeCwgcHJldl9zdGEsIGxpbmtfaWQpKVxuLVx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0cnguc2RhdGEgPSBzdGEtXHUwMDNlc2RhdGE7XG4rXHRcdFx0aWYgKCFpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIGxpbmtfc3RhKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4rXHRcdH1cbiBcbitcdFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xuIFx0XHRcdGlmIChpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuIFx0XHRcdFx0cmV0dXJuO1xuK1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4rXG4rXHRcdC8qIGZhbGwgdGhyb3VnaCwgZS5nLiBmb3Igc3B1cmlvdXMgZnJhbWUgbm90aWZpY2F0aW9uICovXG4gXHR9XG4gXG4tXHRwcmV2ID0gTlVMTDtcbitcdC8qXG4rXHQgKiBUaGlzIGlzIGEgbWFuYWdlbWVudCBmcmFtZSAob3IgYSBkYXRhIGZyYW1lIHdpdGhvdXQgYSBzdGF0aW9uKSBhbmRcbitcdCAqIGl0IHdpbGwgYmUgZGVsaXZlcmVkIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgYSBzdGF0aW9uIGV4aXN0cyxcbitcdCAqIHNvIGl0ZXJhdGUgdGhlIGludGVyZmFjZXMuXG4rXHQgKi9cbitcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuK1xuK1x0LyogV2UgZXhwZWN0IHRoZSBkcml2ZXIgdG8gcHJvdmlkZSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gKi9cbitcdGlmIChXQVJOX09OX09OQ0UoIWxvY2FsLVx1MDAzZWVtdWxhdGVfY2hhbmN0eCBcdTAwMjZcdTAwMjYgIXN0YXR1cy1cdTAwM2VmcmVxKSlcbitcdFx0Z290byBvdXQ7XG4gXG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgXHUwMDI2bG9jYWwtXHUwMDNlaW50ZXJmYWNlcywgbGlzdCkge1xuK1x0XHRzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfZGF0YSAqbGluayA9IE5VTEw7XG4rXG4gXHRcdGlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTU1MjQsMzAgKzU1MDQsODUgQEAgc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfaGFuZGxlX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcbiBcdFx0ICAgIHNkYXRhLVx1MDAzZXZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pXG4gXHRcdFx0Y29udGludWU7XG4gXG4rXHRcdGxpbmtfc3RhID0gTlVMTDtcbitcdFx0bGluayA9IE5VTEw7XG4rXG4rXHRcdC8qIFRyeSB0byByZXNvbHZlIHRoZSBzdGF0aW9uICovXG4rXHRcdGlmICghaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2c2RhdGEtXHUwMDNldmlmKSkge1xuK1x0XHRcdHN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIGhkci1cdTAwM2VhZGRyMik7XG4rXG4rXHRcdFx0aWYgKHN0YSkge1xuK1x0XHRcdFx0bGlua19zdGEgPSBcdTAwMjZzdGEtXHUwMDNlZGVmbGluaztcbitcdFx0XHRcdGxpbmsgPSBcdTAwMjZzZGF0YS1cdTAwM2VkZWZsaW5rO1xuK1x0XHRcdH1cbitcdFx0fSBlbHNlIHtcbitcdFx0XHRsaW5rX3N0YSA9IGxpbmtfc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgaGRyLVx1MDAzZWFkZHIyKTtcbitcbitcdFx0XHRpZiAobGlua19zdGEpXG4rXHRcdFx0XHRsaW5rID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLVx1MDAzZWxpbmtbbGlua19zdGEtXHUwMDNlbGlua19pZF0pO1xuK1x0XHR9XG4rXG4gXHRcdC8qXG4tXHRcdCAqIGZyYW1lIGlzIGRlc3RpbmVkIGZvciB0aGlzIGludGVyZmFjZSwgYnV0IGlmIGl0J3Ncbi1cdFx0ICogbm90IGFsc28gZm9yIHRoZSBwcmV2aW91cyBvbmUgd2UgaGFuZGxlIHRoYXQgYWZ0ZXJcbi1cdFx0ICogdGhlIGxvb3AgdG8gYXZvaWQgY29weWluZyB0aGUgU0tCIG9uY2UgdG9vIG11Y2hcbitcdFx0ICogSWYgd2UgZm91bmQgYSBTVEEgYW5kIGl0IGhhcyBhIHZhbGlkIGxpbmsgaW5mb3JtYXRpb24sIHRoZW5cbitcdFx0ICogUlggdXNpbmcgdGhlIHN0YXRpb24uXG4gXHRcdCAqL1xuK1x0XHRpZiAobGlua19zdGEgXHUwMDI2XHUwMDI2IGxpbmsgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpZWVlODAyMTFfcnhfdmFsaWRfZnJlcShzdGF0dXMtXHUwMDNlZnJlcSwgbGluaykpIHtcbitcdFx0XHRpZiAocnhfZGF0YV9wZW5kaW5nKSB7XG4rXHRcdFx0XHRpZWVlODAyMTFfcHJlcGFyZV9hbmRfcnhfaGFuZGxlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbitcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKiBObyB2YWxpZF9saW5rcyBjaGVjayBhcyB3ZSBuZWVkIHRvIFJYIGJlYWNvbnMgKi9cbitcbitcdFx0XHRyeC5zZGF0YSA9IHNkYXRhO1xuK1x0XHRcdGlmIChpZWVlODAyMTFfcnhfZGF0YV9zZXRfbGlua19zdGEoXHUwMDI2cngsIGxpbmtfc3RhKSlcbitcdFx0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXG4tXHRcdGlmICghcHJldikge1xuLVx0XHRcdHByZXYgPSBzZGF0YTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuLVx0XHRyeC5zZGF0YSA9IHByZXY7XG4tXHRcdGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKFx1MDAyNnJ4LCBza2IsIGZhbHNlKTtcbitcdFx0LyogTm8gc3RhdGlvbiwgdHJ5IHRvIHJlc29sdmUgdGhlIGxpbmsgYW5kIFJYICovXG4rXHRcdGlmIChpZWVlODAyMTFfdmlmX2lzX21sZChcdTAwMjZzZGF0YS1cdTAwM2V2aWYpKSB7XG4rXHRcdFx0c3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmY7XG4rXHRcdFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xuIFxuLVx0XHRwcmV2ID0gc2RhdGE7XG4tXHR9XG4rXHRcdFx0Zm9yX2VhY2hfbGlua19kYXRhX3JjdShzZGF0YSwgbGluaykge1xuK1x0XHRcdFx0Y29uZiA9IHJjdV9kZXJlZmVyZW5jZShsaW5rLVx1MDAzZWNvbmYtXHUwMDNlY2hhbmN0eF9jb25mKTtcbitcdFx0XHRcdGlmICghY29uZiB8fCAhY29uZi1cdTAwM2VkZWYuY2hhbilcbitcdFx0XHRcdFx0Y29udGludWU7XG4gXG4tXHRpZiAocHJldikge1xuLVx0XHRyeC5zZGF0YSA9IHByZXY7XG4rXHRcdFx0XHRpZiAoc3RhdHVzLVx1MDAzZWZyZXEgPT0gY29uZi1cdTAwM2VkZWYuY2hhbi1cdTAwM2VjZW50ZXJfZnJlcSkge1xuK1x0XHRcdFx0XHRmb3VuZCA9IHRydWU7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbiBcbi1cdFx0aWYgKGllZWU4MDIxMV9yeF9mb3JfaW50ZXJmYWNlKFx1MDAyNnJ4LCBza2IsIHRydWUpKVxuLVx0XHRcdHJldHVybjtcbitcdFx0XHRpZiAoIWZvdW5kKVxuK1x0XHRcdFx0bGluayA9IFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbms7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0bGluayA9IFx1MDAyNnNkYXRhLVx1MDAzZWRlZmxpbms7XG4rXHRcdH1cbitcbitcdFx0aWYgKHJ4X2RhdGFfcGVuZGluZykge1xuK1x0XHRcdGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgZmFsc2UpO1xuK1x0XHRcdHJ4X2RhdGFfcGVuZGluZyA9IGZhbHNlO1xuK1x0XHR9XG4rXG4rXHRcdHJ4LnNkYXRhID0gc2RhdGE7XG4rXHRcdHJ4LmxvY2FsID0gc2RhdGEtXHUwMDNlbG9jYWw7XG4rXHRcdHJ4LmxpbmsgPSBsaW5rO1xuK1x0XHRyeC5saW5rX2lkID0gbGluay1cdTAwM2VsaW5rX2lkO1xuK1x0XHRyeC5zdGEgPSBOVUxMO1xuK1x0XHRyeC5saW5rX3N0YSA9IE5VTEw7XG4rXG4rXHRcdHJ4X2RhdGFfcGVuZGluZyA9IHRydWU7XG4gXHR9XG4gXG4rXHRpZiAocnhfZGF0YV9wZW5kaW5nIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGllZWU4MDIxMV9wcmVwYXJlX2FuZF9yeF9oYW5kbGUoXHUwMDI2cngsIHNrYiwgdHJ1ZSkpXG4rXHRcdHJldHVybjtcbitcbiAgb3V0OlxuIFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIH1cbkBAIC01NTU2LDcgKzU1OTEsOCBAQCBzdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuICAqIFRoaXMgaXMgdGhlIHJlY2VpdmUgcGF0aCBoYW5kbGVyLiBJdCBpcyBjYWxsZWQgYnkgYSBsb3cgbGV2ZWwgZHJpdmVyIHdoZW4gYW5cbiAgKiA4MDIuMTEgTVBEVSBpcyByZWNlaXZlZCBmcm9tIHRoZSBoYXJkd2FyZS5cbiAgKi9cbi12b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuK3ZvaWQgaWVlZTgwMjExX3J4X2xpc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXG4rXHRcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcbiBcdFx0ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4ge1xuIFx0c3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7XG5AQCAtNTY5NCw5ICs1NzMwLDYgQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiBcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKFdBUk5fT05fT05DRShzdGF0dXMtXHUwMDNlbGlua19pZCBcdTAwM2U9IElFRUU4MDIxMV9MSU5LX1VOU1BFQ0lGSUVEKSlcbi1cdFx0Z290byBkcm9wO1xuLVxuIFx0c3RhdHVzLVx1MDAzZXJ4X2ZsYWdzID0gMDtcbiBcbiBcdGtjb3ZfcmVtb3RlX3N0YXJ0X2NvbW1vbihza2JfZ2V0X2tjb3ZfaGFuZGxlKHNrYikpO1xuQEAgLTU3MTUsOSArNTc0OCwxMCBAQCB2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuIFx0XHRcdGllZWU4MDIxMV90cHRfbGVkX3RyaWdfcngobG9jYWwsIHNrYi1cdTAwM2VsZW4pO1xuIFxuIFx0XHRpZiAoc3RhdHVzLVx1MDAzZWZsYWcgXHUwMDI2IFJYX0ZMQUdfODAyMylcbi1cdFx0XHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfODAyMyhodywgcHVic3RhLCBza2IsIGxpc3QpO1xuK1x0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV84MDIzKGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBsaXN0KTtcbiBcdFx0ZWxzZVxuLVx0XHRcdF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoaHcsIHB1YnN0YSwgc2tiLCBsaXN0KTtcbitcdFx0XHRfX2llZWU4MDIxMV9yeF9oYW5kbGVfcGFja2V0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLFxuK1x0XHRcdFx0XHRcdCAgICAgbGlzdCk7XG4gXHR9XG4gXG4gXHRrY292X3JlbW90ZV9zdG9wKCk7XG5AQCAtNTcyNyw3ICs1NzYxLDggQEAgdm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbiB9XG4gRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnhfbGlzdCk7XG4gXG4tdm9pZCBpZWVlODAyMTFfcnhfbmFwaShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnB1YnN0YSxcbit2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxuK1x0XHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19wdWJzdGEsXG4gXHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXG4ge1xuIFx0c3RydWN0IHNrX2J1ZmYgKnRtcDtcbkBAIC01NzQwLDcgKzU3NzUsNyBAQCB2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqcHVic3RhLFxuIFx0ICogcmVjZWl2ZSBwcm9jZXNzaW5nXG4gXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbi1cdGllZWU4MDIxMV9yeF9saXN0KGh3LCBwdWJzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4rXHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19wdWJzdGEsIHNrYiwgXHUwMDI2bGlzdCk7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdGlmICghbmFwaSkge1xuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zY2FuLmMgYi9uZXQvbWFjODAyMTEvc2Nhbi5jXG5pbmRleCBlZWZmMjMwYmQ5MDlmLi4zMjRjMmI2ZDdjZTFiIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uY1xuKysrIGIvbmV0L21hYzgwMjExL3NjYW4uY1xuQEAgLTksNyArOSw3IEBAXG4gICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgXHUwMDNjZmxhbWluZ2ljZUBzb3VybWlsay5uZXRcdTAwM2VcbiAgKiBDb3B5cmlnaHQgMjAxMy0yMDE1ICBJbnRlbCBNb2JpbGUgQ29tbXVuaWNhdGlvbnMgR21iSFxuICAqIENvcHlyaWdodCAyMDE2LTIwMTcgIEludGVsIERldXRzY2hsYW5kIEdtYkhcbi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyNSBJbnRlbCBDb3Jwb3JhdGlvblxuKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDI2IEludGVsIENvcnBvcmF0aW9uXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYXJwLmhcdTAwM2VcbkBAIC0yMDQsMTIgKzIwNCwxMCBAQCBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLFxuIFx0XHQgKiBhbiBpbmRpY2F0aW9uIG9uIHdoaWNoIG9mIHRoZSBsaW5rcyB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkXG4gXHRcdCAqL1xuIFx0XHRpZiAoaWVlZTgwMjExX3ZpZl9pc19tbGQoXHUwMDI2c2Nhbl9zZGF0YS1cdTAwM2V2aWYpKSB7XG4tXHRcdFx0aWYgKHJ4X3N0YXR1cy1cdTAwM2VsaW5rX3ZhbGlkKSB7XG4tXHRcdFx0XHRzOCBsaW5rX2lkID0gcnhfc3RhdHVzLVx1MDAzZWxpbmtfaWQ7XG4rXHRcdFx0czggbGlua19pZCA9IHJ4X3N0YXR1cy1cdTAwM2VsaW5rX2lkO1xuIFxuLVx0XHRcdFx0bGlua19jb25mID1cbi1cdFx0XHRcdFx0cmN1X2RlcmVmZXJlbmNlKHNjYW5fc2RhdGEtXHUwMDNldmlmLmxpbmtfY29uZltsaW5rX2lkXSk7XG4tXHRcdFx0fVxuK1x0XHRcdGxpbmtfY29uZiA9XG4rXHRcdFx0XHRyY3VfZGVyZWZlcmVuY2Uoc2Nhbl9zZGF0YS1cdTAwM2V2aWYubGlua19jb25mW2xpbmtfaWRdKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRsaW5rX2NvbmYgPSBcdTAwMjZzY2FuX3NkYXRhLVx1MDAzZXZpZi5ic3NfY29uZjtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90ZGxzLmMgYi9uZXQvbWFjODAyMTEvdGRscy5jXG5pbmRleCBkYzJmNjYyZmU0YzQ2Li5lMTdkNDkyYmU1OTAyIDEwMDY0NFxuLS0tIGEvbmV0L21hYzgwMjExL3RkbHMuY1xuKysrIGIvbmV0L21hYzgwMjExL3RkbHMuY1xuQEAgLTEwNjYsNyArMTA2Niw3IEBAIGllZWU4MDIxMV90ZGxzX3ByZXBfbWdtdF9wYWNrZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcbiBcdGlmIChhY3Rpb25fY29kZSA9PSBXTEFOX1BVQl9BQ1RJT05fVERMU19ESVNDT1ZFUl9SRVMpIHtcbi1cdFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgNywgbGlua19pZCk7XG4rXHRcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIHN0YSwgNywgbGlua19pZCk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmNcbmluZGV4IDNhMWUyYzllMTU2NWUuLjZmNTJlODg0MDIzNzEgMTAwNjQ0XG4tLS0gYS9uZXQvbWFjODAyMTEvdHguY1xuKysrIGIvbmV0L21hYzgwMjExL3R4LmNcbkBAIC02NDM2LDcgKzY0MzYsOCBAQCB2b2lkIGllZWU4MDIxMV91bnJlc2VydmVfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3RhICpwdWJzdGEsIHU4IHRpZClcbiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV91bnJlc2VydmVfdGlkKTtcbiBcbiB2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcbi1cdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbitcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbitcdFx0XHRcdCBpbnQgdGlkLCBpbnQgbGlua19pZCxcbiBcdFx0XHRcdCBlbnVtIG5sODAyMTFfYmFuZCBiYW5kKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKXNrYi1cdTAwM2VkYXRhO1xuQEAgLTY0ODgsMTIgKzY0ODksMTMgQEAgdm9pZCBfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHQgKi9cbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbiBcdElFRUU4MDIxMV9TS0JfQ0Ioc2tiKS1cdTAwM2ViYW5kID0gYmFuZDtcbi1cdGllZWU4MDIxMV94bWl0KHNkYXRhLCBOVUxMLCBza2IpO1xuK1x0aWVlZTgwMjExX3htaXQoc2RhdGEsIHN0YSwgc2tiKTtcbiBcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIH1cbiBcbiB2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxuLVx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRpZCwgaW50IGxpbmtfaWQpXG4rXHRcdFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcbitcdFx0XHQgIGludCB0aWQsIGludCBsaW5rX2lkKVxuIHtcbiBcdHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjaGFuY3R4X2NvbmY7XG4gXHRlbnVtIG5sODAyMTFfYmFuZCBiYW5kO1xuQEAgLTY1MTksNyArNjUyMSw3IEBAIHZvaWQgaWVlZTgwMjExX3R4X3NrYl90aWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXG4gXHRcdGJhbmQgPSAwO1xuIFx0fVxuIFxuLVx0X19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHNkYXRhLCBza2IsIHRpZCwgbGlua19pZCwgYmFuZCk7XG4rXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmMgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jXG5pbmRleCA0NGYyYmFkMDg2NzA1Li40MzdiZWJjYzAyNzQ4IDEwMDY0NFxuLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuY1xuQEAgLTEwOTYsNiArMTA5Niw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOVU1fTkw4MDIxMV9BVFRSXSA9IHtcbiBcdFtOTDgwMjExX0FUVFJfTlBDQV9QVU5DVF9CSVRNQVBdID1cbiBcdFx0TkxBX1BPTElDWV9GVUxMX1JBTkdFKE5MQV9VMzIsIFx1MDAyNm5sODAyMTFfcHVuY3RfYml0bWFwX3JhbmdlKSxcbiBcdFtOTDgwMjExX0FUVFJfU1RBX0RVTVBfTElOS19TVEFUU10gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbitcdFtOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQV0gPSB7IC50eXBlID0gTkxBX0ZMQUcgfSxcbiB9O1xuIFxuIC8qIHBvbGljeSBmb3IgdGhlIGtleSBhdHRyaWJ1dGVzICovXG5AQCAtMTQ4NjAsNiArMTQ4NjEsOSBAQCBzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuIFx0ICAgICEod2Rldi1cdTAwM2V2YWxpZF9saW5rcyBcdTAwMjYgQklUKHBhcmFtcy5saW5rX2lkKSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0cGFyYW1zLm5vX3N0YSA9XG4rXHRcdG5sYV9nZXRfZmxhZyhpbmZvLVx1MDAzZWF0dHJzW05MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBXSk7XG4rXG4gXHRwYXJhbXMuYnVmID0gbmxhX2RhdGEoaW5mby1cdTAwM2VhdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdKTtcbiBcdHBhcmFtcy5sZW4gPSBubGFfbGVuKGluZm8tXHUwMDNlYXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSk7XG4gXG5AQCAtMjIwMjQsNyArMjIwMjgsOSBAQCBpbnQgbmw4MDIxMV9zZW5kX21nbXQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LFxuIFx0ICAgIChpbmZvLVx1MDAzZWFja190c3RhbXAgXHUwMDI2XHUwMDI2IG5sYV9wdXRfdTY0XzY0Yml0KG1zZyxcbiBcdFx0XHRcdFx0XHQgICBOTDgwMjExX0FUVFJfVFhfSFdfVElNRVNUQU1QLFxuIFx0XHRcdFx0XHRcdCAgIGluZm8tXHUwMDNlYWNrX3RzdGFtcCxcbi1cdFx0XHRcdFx0XHQgICBOTDgwMjExX0FUVFJfUEFEKSkpXG4rXHRcdFx0XHRcdFx0ICAgTkw4MDIxMV9BVFRSX1BBRCkpIHx8XG4rXHQgICAgKGluZm8tXHUwMDNlbm9fc3RhIFx1MDAyNlx1MDAyNlxuK1x0ICAgICBubGFfcHV0X2ZsYWcobXNnLCBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQSkpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdGdlbmxtc2dfZW5kKG1zZywgaGRyKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI3OjU2LjY4MzY5NjUwN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDI3ODY1NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFNpZ25pZmljYW50IG1hYzgwMjExL2NmZzgwMjExIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZS4gSXQgc2VlbXMgY2VudGVyZWQgb24gdGhlIGNvcmUgbWFjODAyMTEgYW5kIGNmZzgwMjExIHN1YnN5c3RlbXMsIGRpcmVjdGx5IGltcGFjdGluZyBob3cgTXVsdGktTGluayBPcGVyYXRpb24gKE1MTykgYW5kIHN0YXRpb24gaGFuZGxpbmcgYXJlIG1hbmFnZWQuIFRoZSBicmVhZHRoIG9mIHRoZSBhZmZlY3RlZCBkcml2ZXJz4oCUYXRoMTFrLCBhdGgxMmssIGl3bHdpZmksIG10NzYsIHJ0dzg5LCBhbmQgZXZlbiBtYWM4MDIxMV9od3NpbeKAlHRlbGxzIG1lIHRoaXMgaXMgYSBmb3VuZGF0aW9uYWwgc2hpZnQsIG5vdCBqdXN0IGEgbWlub3IgdHdlYWsuIERlZmluaXRlbHkgd29ydGh5IG9mIGNsb3NlIHNjcnV0aW55IGFuZCBmdXp6aW5nLlxuXG5MZXQncyBicmVhayBkb3duIHdoYXQncyBoYXBwZW5pbmcuIFRoZSBrZXkgaXMgaW4gaG93IHJlY2VpdmUgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYW5kIGhvdyBpbmZvcm1hdGlvbiBpcyBwYXNzZWQuIFNwZWNpZmljYWxseSwgYGllZWU4MDIxMV9yeF9uYXBpYCBhbmQgYGllZWU4MDIxMV9yeF9saXN0YCBhcmUgY2hhbmdpbmcgdGhlaXIgc2lnbmF0dXJlLiAgSW5zdGVhZCBvZiB0aGUgZmFtaWxpYXIgYHN0cnVjdCBpZWVlODAyMTFfc3RhICpgLCB0aGV5J3JlIG5vdyBkZWFsaW5nIHdpdGggYHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmAuIFRoaXMgaW1wbGllcyBhIHJlLWFyY2hpdGVjdHVyZSBvZiBob3cgc3RhdGlvbiBhc3NvY2lhdGlvbiBhbmQgbGluayBtYW5hZ2VtZW50IGlzIGJlaW5nIGhhbmRsZWQgZHVyaW5nIHJlY2VpdmUgcHJvY2Vzc2luZy4gQWRkaXRpb25hbGx5LCB0aGUgYHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzYCBpcyBiZWluZyBzaW1wbGlmaWVkLiBUaGUgcmVtb3ZhbCBvZiBgbGlua192YWxpZGAgYW5kIHRoZSByZXRlbnRpb24gb2Ygb25seSBgbGlua19pZGAgaW5kaWNhdGVzIGEgbW9yZSBleHBsaWNpdCBhbmQgcG90ZW50aWFsbHkgc3RyZWFtbGluZWQgd2F5IG9mIGlkZW50aWZ5aW5nIHRoZSBhc3NvY2lhdGVkIGxpbmsgaW4gdGhlIHJ4IHBhdGguXG5cbk9uIHRoZSB0cmFuc21pdCBzaWRlLCB0aGUgYGNmZzgwMjExX21nbXRfdHhfcGFyYW1zYCBhbmQgYGNmZzgwMjExX3J4X2luZm9gIG5vdyBpbmNsdWRlIGEgYG5vX3N0YWAgZmllbGQuIFRoaXMsIGFsb25nIHdpdGggbW9kaWZpY2F0aW9ucyB0byBgbmw4MDIxMV90eF9tZ210YCBhbmQgYG5sODAyMTFfc2VuZF9tZ210YCB0byBoYW5kbGUgYE5MODAyMTFfQVRUUl9GUkFNRV9DTURfTk9fU1RBYCwgdGVsbHMgbWUgdGhpcyBtaWdodCBiZSByZWxhdGVkIHRvIG1nbXQgZnJhbWVzIHRoYXQgYXJlbid0IG5lY2Vzc2FyaWx5IHRpZWQgdG8gYSBzcGVjaWZpYyBzdGF0aW9uIChlLmcuLCBiZWFjb24gdHJhbnNtaXNzaW9ucywgcHJvYmUgcmVzcG9uc2VzLCBldGMuKSBvciBmcmFtZXMgd2hlcmUgc3RhdGlvbiBpbmZvcm1hdGlvbiBpcyBoYW5kbGVkIGRpZmZlcmVudGx5IHVuZGVyIE1MTy5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhvc2UgZm9jdXMgc3ltYm9sczogYG5sODAyMTFfdHhfbWdtdGAsIGBpZWVlODAyMTFfbWdtdF90eGAsIGBpZWVlODAyMTFfcnhfbGlzdGAsIGFuZCBgaWVlZTgwMjExX3J4X25hcGlgLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgaW50ZWdyYXRlIHdpdGggdGhlIG92ZXJhbGwgcmVjZWl2ZSBwYXRoLiBUaGVyZSBhcmUgYSBudW1iZXIgb2YgaW50ZXJuYWwgZnVuY3Rpb24gY2FsbHMgbW9kaWZpZWQgYW5kIEkgd2lsbCBpbnZlc3RpZ2F0ZSB0aGVtIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gXG5cbkFzIGZvciBjb25maWd1cmF0aW9ucywgSSdtIGV4cGVjdGluZyBgQ09ORklHX01BQzgwMjExYCwgYENPTkZJR19DRkc4MDIxMWAsIGFuZCBwb3NzaWJseSBgQ09ORklHX01BQzgwMjExX0hXU0lNYCB0byBiZSBlc3NlbnRpYWwuIFRpbWUgdG8gdmVyaWZ5IHRob3NlIHN5bWJvbHMsIGNyb3NzLXJlZmVyZW5jZSB0aGVtIHdpdGggdGhlIGNoYW5nZXMsIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZnVsbHkuIFRoaXMgY291bGQgYmUgYSBnYW1lLWNoYW5nZXIgZm9yIE1MTyBzdXBwb3J0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzE5OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI4OjA4LjExMTU2NDY4NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIxNjYxNTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5sODAyMTFfdHhfbWdtdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvd2lyZWxlc3Mvbmw4MDIxMS5jPTE0NzA3PXN0YXRpYyBpbnQgbmw4MDIxMV9yZWdpc3Rlcl9tZ210KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NzY0LVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MTQ3NjU6c3RhdGljIGludCBubDgwMjExX3R4X21nbXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTE0NzY2LXtcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ5MTMtXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYzoxNDkxNDpzdGF0aWMgaW50IG5sODAyMTFfdHhfbWdtdF9jYW5jZWxfd2FpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMTQ5MTUte1xcbi0tXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYz0xOTczNz1zdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfc21hbGxfb3BzIG5sODAyMTFfc21hbGxfb3BzW10gPSB7XFxuLS1cXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jLTIwMTI0LVxcdFxcdC52YWxpZGF0ZSA9IEdFTkxfRE9OVF9WQUxJREFURV9TVFJJQ1QgfCBHRU5MX0RPTlRfVkFMSURBVEVfRFVNUCxcXG5uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jOjIwMTI1OlxcdFxcdC5kb2l0ID0gbmw4MDIxMV90eF9tZ210LFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAxMjYtXFx0XFx0LmZsYWdzID0gR0VOTF9VTlNfQURNSU5fUEVSTSxcXG4tLVxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmMtMjAxMzEtXFx0XFx0LnZhbGlkYXRlID0gR0VOTF9ET05UX1ZBTElEQVRFX1NUUklDVCB8IEdFTkxfRE9OVF9WQUxJREFURV9EVU1QLFxcbm5ldC93aXJlbGVzcy9ubDgwMjExLmM6MjAxMzI6XFx0XFx0LmRvaXQgPSBubDgwMjExX3R4X21nbXRfY2FuY2VsX3dhaXQsXFxubmV0L3dpcmVsZXNzL25sODAyMTEuYy0yMDEzMy1cXHRcXHQuZmxhZ3MgPSBHRU5MX1VOU19BRE1JTl9QRVJNLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyODoxMC4xMzMyMzUxMjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTAxOTYzMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQW5hbHl6aW5nIHRoZSBgaWVlZTgwMjExX21nbXRfdHhgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byBgaWVlZTgwMjExX21nbXRfdHhgLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gdHJvdWJsZXNob290aW5nIGEgbWFuYWdlbWVudCBmcmFtZSB0cmFuc21pc3Npb24gaXNzdWUsIG9yIG1heWJlIEknbSByZXZpZXdpbmcgdGhlIGNvZGUgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gV2hhdCdzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8gSXMgaXQgdHJpZ2dlcmVkIGJ5IGEgc3BlY2lmaWMgZXZlbnQgbGlrZSBhbiBhc3NvY2lhdGlvbiByZXF1ZXN0LCBhIGJlYWNvbiB0cmFuc21pc3Npb24sIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIGNydWNpYWwgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgZmxvdy5cblxuSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgcHJvYmxlbSBhcmVhcy4gQXJlIHdlIGhhbmRsaW5nIGZyYW1lIGxpZmV0aW1lcyBjb3JyZWN0bHk/IElzIHRoZXJlIGFwcHJvcHJpYXRlIHJldHJ5IGxvZ2ljIGlmIHRoZSB0cmFuc21pc3Npb24gZmFpbHM/IFdoYXQgYXJlIHRoZSBwb3RlbnRpYWwgZXJyb3IgcGF0aHMsIGFuZCBob3cgYXJlIHRoZXkgaGFuZGxlZD8gSSdtIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGJ1ZmZlciBvdmVyZmxvd3MsIHJhY2UgY29uZGl0aW9ucywgb3IgaW5jb3JyZWN0IHBhcmFtZXRlciB2YWxpZGF0aW9uLiBNZW1vcnkgYWxsb2NhdGlvbiB3aXRoaW4gdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgYSBjb25jZXJuOyBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgbWFuYWdlbWVudCBmcmFtZSBidWZmZXIgaXMgbWFuYWdlZCwgaG93IGl0J3MgaW5pdGlhbGl6ZWQsIGFuZCB3aGVuIGl0J3MgZnJlZWQuXG5cbkknbGwgYWxzbyBiZSBmb2N1c2luZyBvbiB0aGUgc3BlY2lmaWNzIG9mIGhvdyB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24gb2NjdXJzLiBIb3cgaXMgdGhlIGZyYW1lIGZvcm1hdHRlZCBmb3IgdGhlIHJhZGlvPyBJcyB0aGUgY29ycmVjdCBtb2R1bGF0aW9uIGFuZCBjb2Rpbmcgc2NoZW1lIGJlaW5nIHVzZWQ/IEFyZSB3ZSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSB0cmFuc21pdCBwb3dlciBhbmQgY2hhbm5lbD8gQW55IGRldmlhdGlvbiBoZXJlIGNvdWxkIGxlYWQgdG8gdHJhbnNtaXNzaW9uIGZhaWx1cmVzIG9yIHBvb3IgcGVyZm9ybWFuY2UuXG5cbkZ1cnRoZXJtb3JlLCBJJ2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3Igc2VjdXJpdHktcmVsYXRlZCBhc3BlY3RzLiBJcyB0aGlzIGZ1bmN0aW9uIHZ1bG5lcmFibGUgdG8gYW55IGtpbmQgb2YgaW5qZWN0aW9uIGF0dGFjaz8gQ291bGQgYSBtYWxpY2lvdXMgYWN0b3IgY3JhZnQgYSBtYW5hZ2VtZW50IGZyYW1lIHRoYXQgY2F1c2VzIGEgZGVuaWFsLW9mLXNlcnZpY2Ugb3IgZXZlbiBjb2RlIGV4ZWN1dGlvbj8gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHBhcmFtZXRlciB2YWxpZGF0aW9uIGFuZCBhbnkgc2FuaXRpemF0aW9uIHN0ZXBzLiBBcmUgdGhlcmUgYW55IGtub3duIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIHRoaXMgZnVuY3Rpb24gaW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlIGZpcm13YXJlP1xuXG5CYXNpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgZW50aXJlIHRyYW5zbWlzc2lvbiBwcm9jZXNzLCBmcm9tIHRoZSBzb3VyY2UgZGF0YSB0byB0aGUgcGh5c2ljYWwgcmFkaW8gd2F2ZXMuIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiB3aGF0J3MgaGFwcGVuaW5nLiBBbmQgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB3aXJlbGVzcyBuZXR3b3JraW5nLCB0aW1pbmcgYW5kIGNvbmN1cnJlbmN5IGNvdWxkIGFsc28gYmUgYSBtYWpvciBjb25jZXJuLCBJJ2xsIGJlIHJlYWR5IHRvIGFuYWx5emUgdGhpcyBpZiBuZWNlc3NhcnkuIExldCdzIHN0YXJ0IGJ5IHdhbGtpbmcgdGhyb3VnaCB0aGUgY29kZSBsaW5lIGJ5IGxpbmUgYW5kIHNlZWluZyBob3cgdGhlc2UgdmFyaW91cyBhc3BlY3RzIGFyZSBoYW5kbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTA4OSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI4OjE2LjYzNTIwMTE3M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkzNjMxMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImllZWU4MDIxMV9tZ210X3R4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9tYWM4MDIxMS9jZmcuYz01OTc2PWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9vcHMgbWFjODAyMTFfY29uZmlnX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9jZmcuYy02MDM4LVxcdC5jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwgPSBpZWVlODAyMTFfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsLFxcbm5ldC9tYWM4MDIxMS9jZmcuYzo2MDM5OlxcdC5tZ210X3R4ID0gaWVlZTgwMjExX21nbXRfdHgsXFxubmV0L21hYzgwMjExL2NmZy5jOjYwNDA6XFx0Lm1nbXRfdHhfY2FuY2VsX3dhaXQgPSBpZWVlODAyMTFfbWdtdF90eF9jYW5jZWxfd2FpdCxcXG5uZXQvbWFjODAyMTEvY2ZnLmMtNjA0MS1cXHQuc2V0X2NxbV9yc3NpX2NvbmZpZyA9IGllZWU4MDIxMV9zZXRfY3FtX3Jzc2lfY29uZmlnLFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg9MjE1NT1pbnQgaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTIxNTYtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHU2NCBjb29raWUpO1xcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oOjIxNTc6aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjE1OC1cXHRcXHQgICAgICBzdHJ1Y3QgY2ZnODAyMTFfbWdtdF90eF9wYXJhbXMgKnBhcmFtcywgdTY0IGNvb2tpZSk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjE1OTppbnQgaWVlZTgwMjExX21nbXRfdHhfY2FuY2VsX3dhaXQoc3RydWN0IHdpcGh5ICp3aXBoeSxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yMTYwLVxcdFxcdFxcdFxcdCAgc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgdTY0IGNvb2tpZSk7XFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jPTgwMT1pbnQgaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy04MDktXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzo4MTA6aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy04MTEtXFx0XFx0ICAgICAgc3RydWN0IGNmZzgwMjExX21nbXRfdHhfcGFyYW1zICpwYXJhbXMsIHU2NCBjb29raWUpXFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTEwNTAtXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYzoxMDUxOmludCBpZWVlODAyMTFfbWdtdF90eF9jYW5jZWxfd2FpdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMTA1Mi1cXHRcXHRcXHRcXHQgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHU2NCBjb29raWUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI4OjE4LjMyODgzOTc5N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDc5ODQzMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSA4MDIuMTEgUlggUGF0aCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIHJlY2VpdmluZyBzaWRlIG9mIHRoaXMgODAyLjExIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBwYWNrZXRzIGFyZSBoYW5kbGVkIHdoZW4gdGhleSBhcnJpdmUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBjbG9zZWx5IGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBnZXR0aW5nIHRoZXNlIGZyYW1lcyBpbnRvIHRoZSBzeXN0ZW0uXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBhIGNvdXBsZSBvZiBrZXkgYXJlYXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyBgaWVlZTgwMjExX3J4X2xpc3RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgcGFja2V0cyBhcmUgaW5pdGlhbGx5IHF1ZXVlZCwgYW5kIGhvdyB0aGUgcmVjZWl2ZWQgZnJhbWVzIGFyZSBwcm9jZXNzZWQgd2l0aGluIHRoYXQgc3RydWN0dXJlLiBUaGVuLCBJIHNob3VsZCBjb21wYXJlIGFuZCBjb250cmFzdCBpdCB3aXRoIHRoZSBgaWVlZTgwMjExX3J4X25hcGlgIHBhdGguIE5BUEkgaXMgYSBjb3JlIHBhcnQgb2YgbW9kZXJuIG5ldHdvcmsgZHJpdmVyIGRlc2lnbiwgc28gdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgUlggcHJvY2VzcyBoZXJlIGlzIGNydWNpYWwuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHR3byBzeXN0ZW1zIGludGVyYWN0LCBhbmQgd2hhdCB0aGUgZmxvdyBpcyBmb3IgdGhlIGluY29taW5nIGZyYW1lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzODAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyODoyMi4zMzY4MjY3NTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjQ4MzEyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfcnhfbGlzdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmM9MTUzND12b2lkIG10NzZfcnhfY29tcGxldGUoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmX2hlYWQgKmZyYW1lcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYy0xNTQ4LVxcdFxcdG10NzZfcnhfY29udmVydChkZXYsIHNrYiwgXFx1MDAyNmh3LCBcXHUwMDI2bGlua19zdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYzoxNTQ5OlxcdFxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3N0YSwgc2tiLCBcXHUwMDI2bGlzdCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tYWM4MDIxMS5jLTE1NTAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmMtMTU1Ny1cXHRcXHRcXHRtdDc2X3J4X2NvbnZlcnQoZGV2LCBza2IsIFxcdTAwMjZodywgXFx1MDAyNmxpbmtfc3RhKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L21hYzgwMjExLmM6MTU1ODpcXHRcXHRcXHRpZWVlODAyMTFfcnhfbGlzdChodywgbGlua19zdGEsIHNrYiwgXFx1MDAyNmxpc3QpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbWFjODAyMTEuYy0xNTU5LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvZG1hLmM9NzY9c3RhdGljIHZvaWQgbXQ3NjAxdV9yeF9wcm9jZXNzX3NlZyhzdHJ1Y3QgbXQ3NjAxdV9kZXYgKmRldiwgdTggKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2RtYS5jLTExMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2MDF1L2RtYS5jOjExMTpcXHRpZWVlODAyMTFfcnhfbGlzdChkZXYtXFx1MDAzZWh3LCBOVUxMLCBza2IsIGxpc3QpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYwMXUvZG1hLmMtMTEyLVxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaD01Mzc0PXZvaWQgaWVlZTgwMjExX3Jlc3RhcnRfaHcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpO1xcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01Mzc2LS8qKlxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTM3NzogKiBpZWVlODAyMTFfcnhfbGlzdCAtIHJlY2VpdmUgZnJhbWUgYW5kIHN0b3JlIHByb2Nlc3NlZCBza2JzIGluIGEgbGlzdFxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTM3OC0gKlxcbi0tXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDAwLSAqL1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg6NTQwMTp2b2lkIGllZWU4MDIxMV9yeF9saXN0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQwMi1cXHRcXHQgICAgICAgc3RydWN0IGllZWU4MDIxMV9saW5rX3N0YSAqbGlua19zdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz01MzQzPXN0YXRpYyB2b2lkIF9faWVlZTgwMjExX3J4X2hhbmRsZV9wYWNrZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy01NTkzLSAqL1xcbm5ldC9tYWM4MDIxMS9yeC5jOjU1OTQ6dm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG5uZXQvbWFjODAyMTEvcnguYy01NTk1LVxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3B1YnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jLTU3NjEtfVxcbm5ldC9tYWM4MDIxMS9yeC5jOjU3NjI6RVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcnhfbGlzdCk7XFxubmV0L21hYzgwMjExL3J4LmMtNTc2My1cXG5uZXQvbWFjODAyMTEvcnguYz01NzY0PXZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy01Nzc3LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvbWFjODAyMTEvcnguYzo1Nzc4OlxcdGllZWU4MDIxMV9yeF9saXN0KGh3LCBsaW5rX3B1YnN0YSwgc2tiLCBcXHUwMDI2bGlzdCk7XFxubmV0L21hYzgwMjExL3J4LmMtNTc3OS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDNUMTU6Mjg6MjMuOTI5MzE2MzI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcwMzc1Mjg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyB0aG91Z2ggdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIGBpZWVlODAyMTFfcnhfbmFwaWAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgcmV2aXNpdCBgaWVlZTgwMjExX3J4X25hcGlgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24gaGFuZGxlcyBpbmNvbWluZyA4MDIuMTEgcGFja2V0cyB3aXRoaW4gdGhlIE5BUEkgY29udGV4dC4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIGludGVycnVwdCBoYW5kbGluZyBhbmQgZGF0YSBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgZHJpdmVyLiBJIHdpbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaGFyZHdhcmUgcmVjZWl2ZSBxdWV1ZXMgYW5kIGhvdyB0aGVzZSBwYWNrZXRzIGFyZSBwcm9jZXNzZWQgdG8gYXZvaWQgYW55IGxhdGVuY3kgaXNzdWVzLCBzdWNoIGFzIHRob3NlIHJlbGF0ZWQgdG8gRE1BIG9yIGJ1ZmZlciBtYW5hZ2VtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzc2NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI4OjMyLjYzMzA3MTA5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMzA4NTY1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZWVlODAyMTFfcnhfbmFwaVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jPTEzNjQ9c3RhdGljIHZvaWQgYXRoMTBrX3Byb2Nlc3Nfcngoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jLTE0MDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYzoxNDA3OlxcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVxcdTAwM2VodywgTlVMTCwgc2tiLCBcXHUwMDI2YXItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmMtMTQwOC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jPTI0NTQ9c3RhdGljIGJvb2wgYXRoMTBrX2h0dF9yeF9wcm9jX3J4X2luZF9obChzdHJ1Y3QgYXRoMTBrX2h0dCAqaHR0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYy0yNjcwLVxcdGlmIChhci1cXHUwMDNlbmFwaS5kZXYpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYzoyNjcxOlxcdFxcdGllZWU4MDIxMV9yeF9uYXBpKGFyLVxcdTAwM2VodywgTlVMTCwgc2tiLCBcXHUwMDI2YXItXFx1MDAzZW5hcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmMtMjY3Mi1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmM9MjQyNz1zdGF0aWMgdm9pZCBhdGgxMWtfZHBfcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMWsgKmFyLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMtMjUwMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmM6MjUwMzpcXHRpZWVlODAyMTFfcnhfbmFwaShhci1cXHUwMDNlaHcsIHB1YnN0YSA/IFxcdTAwMjZwdWJzdGEtXFx1MDAzZWRlZmxpbmsgOiBOVUxMLCBtc2R1LCBuYXBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL2RwX3J4LmMtMjUwNC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jPTQ5Mz12b2lkIGF0aDEya19kcF9tb25fcnhfZGVsaXZlcl9tc2R1KHN0cnVjdCBhdGgxMmtfcGRldl9kcCAqZHBfcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmMtNTE1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvZHBfbW9uLmM6NTE2OlxcdGllZWU4MDIxMV9yeF9uYXBpKGF0aDEya19wZGV2X2RwX3RvX2h3KGRwX3BkZXYpLCBOVUxMLCBtc2R1LCBuYXBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX21vbi5jLTUxNy19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmM9MTM3MT12b2lkIGF0aDEya19kcF9yeF9kZWxpdmVyX21zZHUoc3RydWN0IGF0aDEya19wZGV2X2RwICpkcF9wZGV2LCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmMtMTQzNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2RwX3J4LmM6MTQzNjpcXHRpZWVlODAyMTFfcnhfbmFwaShhdGgxMmtfcGRldl9kcF90b19odyhkcF9wZGV2KSwgbGlua19wdWJzdGEsIG1zZHUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9kcF9yeC5jLTE0MzctXFx0XFx0XFx0ICBuYXBpKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL3J4LmM9NjA0PXN0YXRpYyB2b2lkIGl3bGFnbl9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9yeC5jLTY3MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9yeC5jOjY3MTpcXHRpZWVlODAyMTFfcnhfbmFwaShwcml2LVxcdTAwM2VodywgTlVMTCwgc2tiLCBwcml2LVxcdTAwM2VuYXBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9yeC5jLTY3Mi19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9yeC5jPTEyMD12b2lkIGl3bF9tbGRfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMtMTMyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmM6MTMzOlxcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cXHUwMDNlaHcsIGxpbmtfc3RhLCBza2IsIG5hcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMtMTM0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmM9MjI4Mz1zdGF0aWMgdm9pZCBpd2xfbWxkX25vX2RhdGFfcngoc3RydWN0IGl3bF9tbGQgKm1sZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL3J4LmMtMjM1MC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYzoyMzUxOlxcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cXHUwMDNlaHcsIE5VTEwsIHNrYiwgbmFwaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvcnguYy0yMzUyLVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmM9MTcwPXZvaWQgaXdsX21sZF9oYW5kbGVfdGltZV9tc210X25vdGlmKHN0cnVjdCBpd2xfbWxkICptbGQsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC90aW1lX3N5bmMuYy0yMDEtXFx0XFx0ICAgICAgIGt0aW1lX3RvX25zKHJ4X3N0YXR1cy1cXHUwMDNlYWNrX3R4X2h3dHN0YW1wKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmM6MjAyOlxcdGllZWU4MDIxMV9yeF9uYXBpKG1sZC1cXHUwMDNlaHcsIE5VTEwsIHNrYiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvdGltZV9zeW5jLmMtMjAzLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM9MTY4Nz12b2lkIGl3bF9tdm1fcnhfc3RvcmVkX2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vbWFjLWN0eHQuYy0xNzQ0LVxcdC8qIHBhc3MgaXQgYXMgcmVndWxhciByeCB0byBtYWM4MDIxMSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmM6MTc0NTpcXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBOVUxMLCBza2IsIE5VTEwpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL21hYy1jdHh0LmMtMTc0Ni19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jPTQ1PXN0YXRpYyB2b2lkIGl3bF9tdm1fcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bF9tdm0gKm12bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4LmMtOTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnguYzo5MzpcXHRpZWVlODAyMTFfcnhfbmFwaShtdm0tXFx1MDAzZWh3LCBzdGEgPyBcXHUwMDI2c3RhLVxcdTAwM2VkZWZsaW5rIDogTlVMTCwgc2tiLCBuYXBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeC5jLTk0LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYz0yMzY9c3RhdGljIHZvaWQgaXdsX212bV9wYXNzX3BhY2tldF90b19tYWM4MDIxMShzdHJ1Y3QgaXdsX212bSAqbXZtLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jLTI0NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmM6MjQ2OlxcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIHN0YSA/IFxcdTAwMjZzdGEtXFx1MDAzZWRlZmxpbmsgOiBOVUxMLCBza2IsIG5hcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3J4bXEuYy0yNDctfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jPTI0MDk9dm9pZCBpd2xfbXZtX3J4X21vbml0b3Jfbm9fZGF0YShzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9yeG1xLmMtMjUzMC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jOjI1MzE6XFx0aWVlZTgwMjExX3J4X25hcGkobXZtLVxcdTAwM2Vodywgc3RhID8gXFx1MDAyNnN0YS1cXHUwMDNlZGVmbGluayA6IE5VTEwsIHNrYiwgbmFwaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vcnhtcS5jLTI1MzItXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS90aW1lLXN5bmMuYz01OD12b2lkIGl3bF9tdm1fdGltZV9zeW5jX21zbXRfZXZlbnQoc3RydWN0IGl3bF9tdm0gKm12bSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3RpbWUtc3luYy5jLTg5LVxcdFxcdCAgICAgICBrdGltZV90b19ucyhyeF9zdGF0dXMtXFx1MDAzZWFja190eF9od3RzdGFtcCkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL3RpbWUtc3luYy5jOjkwOlxcdGllZWU4MDIxMV9yeF9uYXBpKG12bS1cXHUwMDNlaHcsIE5VTEwsIHNrYiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vdGltZS1zeW5jLmMtOTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9wY2kuYz0xMDQyPXN0YXRpYyB1MzIgcnR3X3BjaV9yeF9uYXBpKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBydHdfcGNpICpydHdwY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3BjaS5jLTExMDQtXFx0XFx0XFx0bWVtY3B5KG5ldy1cXHUwMDNlY2IsIFxcdTAwMjZyeF9zdGF0dXMsIHNpemVvZihyeF9zdGF0dXMpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3BjaS5jOjExMDU6XFx0XFx0XFx0aWVlZTgwMjExX3J4X25hcGkocnR3ZGV2LVxcdTAwM2VodywgTlVMTCwgbmV3LCBuYXBpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3BjaS5jLTExMDYtXFx0XFx0XFx0cnhfZG9uZSsrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jb3JlLmM9NDAwMj1zdGF0aWMgdm9pZCBydHc4OV9jb3JlX3J4X3RvX21hYzgwMjExKHN0cnVjdCBydHc4OV9kZXYgKnJ0d2RldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQwMjMtXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jOjQwMjQ6XFx0aWVlZTgwMjExX3J4X25hcGkocnR3ZGV2LVxcdTAwM2VodywgTlVMTCwgc2tiX3BwZHUsIG5hcGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY29yZS5jLTQwMjUtXFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oPTU0MDE9dm9pZCBpZWVlODAyMTFfcnhfbGlzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyxcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQwNS0vKipcXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oOjU0MDY6ICogaWVlZTgwMjExX3J4X25hcGkgLSByZWNlaXZlIGZyYW1lIGZyb20gTkFQSSBjb250ZXh0XFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDA3LSAqXFxuLS1cXG5pbmNsdWRlL25ldC9tYWM4MDIxMS5oLTU0MjktICovXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NDMwOnZvaWQgaWVlZTgwMjExX3J4X25hcGkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsXFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaC01NDMxLVxcdFxcdCAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2xpbmtfc3RhICpsaW5rX3N0YSxcXG4tLVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmg9NTQ1ND1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQ1NS17XFxuaW5jbHVkZS9uZXQvbWFjODAyMTEuaDo1NDU2OlxcdGllZWU4MDIxMV9yeF9uYXBpKGh3LCBOVUxMLCBza2IsIE5VTEwpO1xcbmluY2x1ZGUvbmV0L21hYzgwMjExLmgtNTQ1Ny19XFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz01NzYyPUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3J4X2xpc3QpO1xcbm5ldC9tYWM4MDIxMS9yeC5jLTU3NjMtXFxubmV0L21hYzgwMjExL3J4LmM6NTc2NDp2b2lkIGllZWU4MDIxMV9yeF9uYXBpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LFxcbm5ldC9tYWM4MDIxMS9yeC5jLTU3NjUtXFx0XFx0ICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmxpbmtfcHVic3RhLFxcbi0tXFxubmV0L21hYzgwMjExL3J4LmMtNTc5MC19XFxubmV0L21hYzgwMjExL3J4LmM6NTc5MTpFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeF9uYXBpKTtcXG5uZXQvbWFjODAyMTEvcnguYy01NzkyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyODozNC4yMzYxNjQzNjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1NzAyMzcyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNQUM4MDIxMSBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBtYWtpbmcgc29tZSB0YXJnZXRlZCBjaGFuZ2VzIHdpdGhpbiB0aGUgTUFDODAyMTEgYW5kIENGRzgwMjExIGxheWVycy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBkZWFsaW5nIHdpdGggc29tZSBudWFuY2VkIGFzcGVjdHMgb2Ygc3RhdGlvbiAoU1RBKSBhc3NvY2lhdGlvbiBhbmQgbWFuYWdlbWVudCBmcmFtZSBoYW5kbGluZy4gSSBzZWUgaXQncyByZWZhY3RvcmluZyBzb21lIGZ1bmN0aW9uIHNpZ25hdHVyZXMsIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QgYXMgYSBwb3RlbnRpYWwgaW5kaWNhdG9yIG9mIGFyY2hpdGVjdHVyYWwgaW1wcm92ZW1lbnRzIG9yIG9wdGltaXphdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBJJ20gbm90aW5nIHRoYXQgYGllZWU4MDIxMV9yeF9saXN0YCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYCBhcmUgc2hpZnRpbmcgZnJvbSB1c2luZyBgc3RydWN0IGllZWU4MDIxMV9zdGEgKmAgdG8gYHN0cnVjdCBpZWVlODAyMTFfbGlua19zdGEgKmAuIFRoaXMgc3VnZ2VzdHMgdGhleSBhcmUgbm93IGRlYWxpbmcgd2l0aCBsaW5rLXNwZWNpZmljIFNUQSBpbmZvcm1hdGlvbiwgd2hpY2ggdGVsbHMgbWUgdGhlIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGVuaGFuY2VtZW50cyByZWxhdGVkIHRvIGxpbmstbGF5ZXIgbWFuYWdlbWVudCBhbmQgcGVyaGFwcyBtdWx0aS1saW5rIG9wZXJhdGlvbi5cblxuVGhlIG1vZGlmaWNhdGlvbnMgdG8gYG5sODAyMTFfdHhfbWdtdGAgYW5kIGBubDgwMjExX3NlbmRfbWdtdGAgdG8gaGFuZGxlIGBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQWAgYXJlIGFsc28gc2lnbmlmaWNhbnQuIFRoaXMgc3VnZ2VzdHMgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIG9yIHJlZmluaW5nIGEgbWVjaGFuaXNtIGZvciBzZW5kaW5nIG1hbmFnZW1lbnQgZnJhbWVzIHRoYXQgZG9uJ3QgbmVjZXNzYXJpbHkgdGFyZ2V0IGEgc3BlY2lmaWMgU1RBLiBJJ2QgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNlbWFudGljcyBvZiB0aGF0IGF0dHJpYnV0ZSwgYnV0IGl0J3MgbGlrZWx5IGludm9sdmVkIGluIGJyb2FkY2FzdCBvciBnZW5lcmFsLXB1cnBvc2UgbWFuYWdlbWVudCBmcmFtZSB0cmFuc21pc3Npb25zLCBtYXliZSByZWxhdGVkIHRvIGRpc2NvdmVyeSBvciBwcm9iaW5nLiBBbHNvLCB0aGUgYGllZWU4MDIxMV9tZ210X3R4YCBtb2RpZmljYXRpb24gdG8gaGFuZGxlIGBwYXJhbXMtXHUwMDNlbm9fc3RhYCBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhpcyBmb2N1cyBvbiBub24tU1RBLXNwZWNpZmljIG1hbmFnZW1lbnQgZnJhbWUgdHJhbnNtaXNzaW9uLlxuXG5GaW5hbGx5LCB0aGUgYWRkZWQgYHN0cnVjdCBzdGFfaW5mbyAqc3RhYCBhcmd1bWVudCB0byBgaWVlZTgwMjExX3R4X3NrYl90aWRgIGltcGxpZXMgYSBwb3RlbnRpYWwgY2hhbmdlIGluIGhvdyB0aGUgdHJhbnNtaXQgcGF0aCBhc3NvY2lhdGVzIFNLQnMgd2l0aCBTVEEgaW5mb3JtYXRpb24uIE1heWJlIHRoaXMgd2lsbCBoZWxwIHdpdGggYWR2YW5jZWQgc2NoZWR1bGluZyBhbmQgUW9TIGZlYXR1cmVzLCBidXQgSSB3b3VsZCBuZWVkIHRvIGZpbmQgb3V0IG1vcmUuXG5cbk15IGtleSBmb2N1cyBzeW1ib2xzIGhlcmUgYXJlOiBgbmw4MDIxMV90eF9tZ210YCwgYGllZWU4MDIxMV9tZ210X3R4YCwgYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCwgYW5kIGBpZWVlODAyMTFfdHhfc2tiX3RpZGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIHNpZ25hdHVyZSBjaGFuZ2VzIGFuZCBob3cgdGhlIGBOTDgwMjExX0FUVFJfRlJBTUVfQ01EX05PX1NUQWAgYXR0cmlidXRlIGlzIGJlaW5nIHVzZWQuIEFuZCwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSByZS1leHBvcnRlZCwgSSB3aWxsIGNoZWNrIHRvIHNlZSBpZiBgaWVlZTgwMjExX3R4X3NrYl90aWRgIGlzIGV4cG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM0MCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyODo0NC44MDY0MDQyNTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE4OTQ2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWVlZTgwMjExX3R4X3NrYl90aWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L21hYzgwMjExL2FnZy10eC5jPTYxPXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsXFxuLS1cXG5uZXQvbWFjODAyMTEvYWdnLXR4LmMtMTAwLVxcbm5ldC9tYWM4MDIxMS9hZ2ctdHguYzoxMDE6XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XFxubmV0L21hYzgwMjExL2FnZy10eC5jLTEwMi19XFxuLS1cXG5uZXQvbWFjODAyMTEvYWdnLXR4LmM9MTA0PXZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbilcXG4tLVxcbm5ldC9tYWM4MDIxMS9hZ2ctdHguYy0xMjktXFx0XFx0XFx0XFx0XFx0SUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTO1xcbm5ldC9tYWM4MDIxMS9hZ2ctdHguYzoxMzA6XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgTlVMTCwgdGlkLCAtMSk7XFxubmV0L21hYzgwMjExL2FnZy10eC5jLTEzMS19XFxuLS1cXG5uZXQvbWFjODAyMTEvaHQuYz00OTc9aW50IGllZWU4MDIxMV9zZW5kX3NtcHNfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbi0tXFxubmV0L21hYzgwMjExL2h0LmMtNTQ3LVxcdFxcdFxcdFxcdFxcdCAgICBJRUVFODAyMTFfU1RBVFVTX1NVQkRBVEFfTUFTSyk7XFxubmV0L21hYzgwMjExL2h0LmM6NTQ4OlxcdGllZWU4MDIxMV90eF9za2JfdGlkKHNkYXRhLCBza2IsIE5VTEwsIDcsIGxpbmtfaWQpO1xcbm5ldC9tYWM4MDIxMS9odC5jLTU0OS1cXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI0NjI9dm9pZCBpZWVlODAyMTFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI0NjQtXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ2NTp2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDY2LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI0ODE9c3RhdGljIGlubGluZSB2b2lkXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ4MjppZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI0ODMtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGlkLFxcbi0tXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjQ4Ni1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ4NzpcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgRVJSX1BUUigtRU5PRU5UKSxcXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDg4LVxcdFxcdFxcdFxcdCAgICB0aWQsIC0xLCBiYW5kKTtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI0OTEtXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjQ5Mjp2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oLTI0OTMtXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oPTI0OTY9c3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV90eF9za2Ioc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaC0yNDk5LVxcdC8qIFNlbmQgYWxsIGludGVybmFsIG1nbXQgZnJhbWVzIG9uIFZPLiBBY2NvcmRpbmdseSBzZXQgVElEIHRvIDcuICovXFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmg6MjUwMDpcXHRpZWVlODAyMTFfdHhfc2tiX3RpZChzZGF0YSwgc2tiLCBOVUxMLCA3LCAtMSk7XFxubmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgtMjUwMS19XFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jPTIzNz1zdGF0aWMgdm9pZCBpZWVlODAyMTFfaGFuZGxlX3JvY19zdGFydGVkKHN0cnVjdCBpZWVlODAyMTFfcm9jX3dvcmsgKnJvYyxcXG4tLVxcbm5ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMtMjQ3LVxcdFxcdGlmICghV0FSTl9PTighcm9jLVxcdTAwM2VmcmFtZSkpIHtcXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jOjI0ODpcXHRcXHRcXHRpZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kKHJvYy1cXHUwMDNlc2RhdGEsIHJvYy1cXHUwMDNlZnJhbWUsIDcsXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYy0yNDktXFx0XFx0XFx0XFx0XFx0XFx0ICByb2MtXFx1MDAzZWNoYW4tXFx1MDAzZWJhbmQpO1xcbi0tXFxubmV0L21hYzgwMjExL29mZmNoYW5uZWwuYz04MTA9aW50IGllZWU4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsXFxuLS1cXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTEwMjctXFx0aWYgKCFuZWVkX29mZmNoYW4pIHtcXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jOjEwMjg6XFx0XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYixcXG5uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jLTEwMjktXFx0XFx0XFx0XFx0ICAgICBwYXJhbXMtXFx1MDAzZW5vX3N0YSA/IHN0YSA6IEVSUl9QVFIoLUVOT0VOVCksXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz00MDU1PWllZWU4MDIxMV9yeF9oX2FjdGlvbl9yZXR1cm4oc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeClcXG4tLVxcbm5ldC9tYWM4MDIxMS9yeC5jLTQxMDgtXFxubmV0L21hYzgwMjExL3J4LmM6NDEwOTpcXHRcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQocngtXFx1MDAzZXNkYXRhLCBuc2tiLCByeC1cXHUwMDNlc3RhLCA3LCAtMSxcXG5uZXQvbWFjODAyMTEvcnguYy00MTEwLVxcdFxcdFxcdFxcdFxcdCAgICBzdGF0dXMtXFx1MDAzZWJhbmQpO1xcbi0tXFxubmV0L21hYzgwMjExL3NjYW4uYz02NTg9c3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfc2Nhbl9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsXFxuLS1cXG5uZXQvbWFjODAyMTEvc2Nhbi5jLTY4Mi1cXHRcXHRJRUVFODAyMTFfU0tCX0NCKHNrYiktXFx1MDAzZWNvbnRyb2wuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUUkxfRE9OVF9VU0VfUkFURV9NQVNLO1xcbm5ldC9tYWM4MDIxMS9zY2FuLmM6NjgzOlxcdFxcdGllZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgNywgY2hhbm5lbC1cXHUwMDNlYmFuZCk7XFxubmV0L21hYzgwMjExL3NjYW4uYy02ODQtXFx0fVxcbi0tXFxubmV0L21hYzgwMjExL3RkbHMuYz05OTc9aWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L21hYzgwMjExL3RkbHMuYy0xMDY4LVxcdGlmIChhY3Rpb25fY29kZSA9PSBXTEFOX1BVQl9BQ1RJT05fVERMU19ESVNDT1ZFUl9SRVMpIHtcXG5uZXQvbWFjODAyMTEvdGRscy5jOjEwNjk6XFx0XFx0aWVlZTgwMjExX3R4X3NrYl90aWQoc2RhdGEsIHNrYiwgc3RhLCA3LCBsaW5rX2lkKTtcXG5uZXQvbWFjODAyMTEvdGRscy5jLTEwNzAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvbWFjODAyMTEvdHguYz02NDM2PUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVzZXJ2ZV90aWQpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTY0MzctXFxubmV0L21hYzgwMjExL3R4LmM6NjQzODp2b2lkIF9faWVlZTgwMjExX3R4X3NrYl90aWRfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSxcXG5uZXQvbWFjODAyMTEvdHguYy02NDM5LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTY0OTUtXFxubmV0L21hYzgwMjExL3R4LmM6NjQ5Njp2b2lkIGllZWU4MDIxMV90eF9za2JfdGlkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLFxcbm5ldC9tYWM4MDIxMS90eC5jLTY0OTctXFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSxcXG4tLVxcbm5ldC9tYWM4MDIxMS90eC5jLTY1MjMtXFxubmV0L21hYzgwMjExL3R4LmM6NjUyNDpcXHRfX2llZWU4MDIxMV90eF9za2JfdGlkX2JhbmQoc2RhdGEsIHNrYiwgc3RhLCB0aWQsIGxpbmtfaWQsIGJhbmQpO1xcbm5ldC9tYWM4MDIxMS90eC5jLTY1MjUtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAzVDE1OjI4OjQ2LjQ1ODMwNDkxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjg2ODg0MzI2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBUaGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gdGhlIGBtYWM4MDIxMWAgYW5kIGBjZmc4MDIxMWAgc3Vic3lzdGVtcywgcGFydGljdWxhcmx5IGFyb3VuZCBob3cgZnJhbWVzIGdldCBoYW5kbGVkLCBlc3BlY2lhbGx5IHdpdGggdGhpcyBNdWx0aS1MaW5rIE9wZXJhdGlvbiBzdHVmZi4gVGhlIGtleSBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludHMuXG5cbkZpcnN0LCBsZXQncyBmaWx0ZXIgb3V0IHRoZSBub2lzZS4gVGhlIGZ1bmN0aW9ucyBgaWVlZTgwMjExX3R4X3NrYl90aWRgIGFuZCBgX19pZWVlODAyMTFfdHhfc2tiX3RpZF9iYW5kYCBhcmVuJ3QgZXhwb3J0ZWQsIHNvIHRoZXkncmUgbm90IGVudHJ5IHBvaW50cyBmb3IgdXMuIGBpZWVlODAyMTFfcnhfbGlzdGAgYW5kIGBpZWVlODAyMTFfcnhfbmFwaWAgYXJlIGV4cG9ydGVkLCBzbyB0aG9zZSBhcmUgZ29vZCBjYW5kaWRhdGVzLiBgaWVlZTgwMjExX21nbXRfdHhgIGlzIGEgY2FsbGJhY2sgd2l0aGluIGBtYWM4MDIxMV9jb25maWdfb3BzYCwgd2hpY2ggaXMgZGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0LCBldmVuIGlmIGl0J3Mgbm90IGV4cG9ydGVkIGRpcmVjdGx5LiBBbmQgYG5sODAyMTFfdHhfbWdtdGAgaXMgYSBuZXRsaW5rIGNhbGxiYWNrLCBzbyBpdCdzIGV4cG9zZWQgZXh0ZXJuYWxseSwgYW5kIHRoZXJlZm9yZSB2ZXJ5IGltcG9ydGFudC5cblxuU28sIEkgdGhpbmsgdGhlIGNyaXRpY2FsIHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlOlxuKiAgIGBubDgwMjExX3R4X21nbXRgIChuZXRsaW5rIGZvciBUWCBtYW5hZ2VtZW50KVxuKiAgIGBpZWVlODAyMTFfbWdtdF90eGAgKG1hYzgwMjExIGNhbGxiYWNrIGZvciBUWCBtYW5hZ2VtZW50KVxuKiAgIGBpZWVlODAyMTFfcnhfbGlzdGAgKG1haW4gUlggZW50cnlwb2ludClcbiogICBgaWVlZTgwMjExX3J4X25hcGlgIChtYWluIFJYIGVudHJ5cG9pbnQpXG5cbk5vdywgd2hhdCBhYm91dCBjb25maWd1cmF0aW9ucz8gV2VsbCwgdGhpcyBwYXRjaCBpcyBtZXNzaW5nIHdpdGggYG1hYzgwMjExX2h3c2ltX21haW4uY2AsIHNvIEknbGwgZGVmaW5pdGVseSBuZWVkIGBNQUM4MDIxMV9IV1NJTWAuIEknbGwgYWxzbyBuZWVkIHRoZSBnZW5lcmFsIGBNQUM4MDIxMWAgYW5kIGBDRkc4MDIxMWAgY29uZmlndXJhdGlvbnMsIG9idmlvdXNseS5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYGllZWU4MDIxMV9yeF9saXN0YCBhbmQgYGllZWU4MDIxMV9yeF9uYXBpYCAqYXJlKiBpbmRlZWQgdGhlIG1haW4gUlggZW50cnkgcG9pbnRzIGZvciBtYWM4MDIxMSwgYW5kIHRoZXkgYXJlLiBBbmQgdGhlIG90aGVyIHR3byBmdW5jdGlvbnMgYXJlIHRoZSByaWdodCBlbnRyeSBwb2ludHMgZm9yIG1nbXQgVFguXG5cbkFscmlnaHQsIHdpdGggdGhhdCBpbiBtaW5kLCBoZXJlJ3MgbXkgcGxhbjpcblxuKiAgIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cbiogICBNeSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOlxuICAgICogICBgbmw4MDIxMV90eF9tZ210YFxuICAgICogICBgaWVlZTgwMjExX21nbXRfdHhgXG4gICAgKiAgIGBpZWVlODAyMTFfcnhfbGlzdGBcbiAgICAqICAgYGllZWU4MDIxMV9yeF9uYXBpYFxuKiAgIEknbGwgc2V0IHRoZSBmb2xsb3dpbmcgYEVuYWJsZUNvbmZpZ3NgOlxuICAgICogICBgTUFDODAyMTFgXG4gICAgKiAgIGBDRkc4MDIxMWBcbiAgICAqICAgYE1BQzgwMjExX0hXU0lNYFxuXG5UaGUgcmF0aW9uYWxlPyBUaGlzIHBhdGNoJ3MgbW9kaWZpY2F0aW9ucywgZXNwZWNpYWxseSB0aGUgY2hhbmdlcyB0byB0aGUgUlggZnVuY3Rpb25zIGFuZCB0aGUgbmV3ICdub19zdGEnIGhhbmRsaW5nIGluIG1hbmFnZW1lbnQgZnJhbWUgdHJhbnNtaXNzaW9uLCBhcmUgY3JpdGljYWwgcGF0aHMgYW5kIGludHJvZHVjZSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gSXQncyB0b3VjaGluZyBjb3JlIGZ1bmN0aW9uYWxpdHkgaW4gYSBzaWduaWZpY2FudCB3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzAwLCJPdXRwdXRUb2tlbnMiOjIyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wM1QxNToyODo1OS4zMjcxNTA4NjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTkyMDM2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUFDODAyMTFcIixcbiAgICBcIkNGRzgwMjExXCIsXG4gICAgXCJNQUM4MDIxMV9IV1NJTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5sODAyMTFfdHhfbWdtdFwiLFxuICAgIFwiaWVlZTgwMjExX21nbXRfdHhcIixcbiAgICBcImllZWU4MDIxMV9yeF9saXN0XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbmFwaVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBtYWM4MDIxMSBhbmQgY2ZnODAyMTEgc3Vic3lzdGVtcywgc3BlY2lmaWNhbGx5IG1vZGlmeWluZyBob3cgcmVjZWl2ZWQgZnJhbWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggc3RhdGlvbnMgYW5kIGxpbmtzIChNdWx0aS1MaW5rIE9wZXJhdGlvbikuIEl0IGNoYW5nZXMgdGhlIHNpZ25hdHVyZSBvZiBjb3JlIFJYIGZ1bmN0aW9ucyAoYGllZWU4MDIxMV9yeF9saXN0YCwgYGllZWU4MDIxMV9yeF9uYXBpYCkgYW5kIG1vZGlmaWVzIHRoZSBtYW5hZ2VtZW50IGZyYW1lIHRyYW5zbWlzc2lvbiBwYXRoIHRvIGhhbmRsZSBhIG5ldyBgbm9fc3RhYCBmbGFnLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1BQzgwMjExXCIsXG4gICAgXCJDRkc4MDIxMVwiLFxuICAgIFwiTUFDODAyMTFfSFdTSU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJubDgwMjExX3R4X21nbXRcIixcbiAgICBcImllZWU4MDIxMV9tZ210X3R4XCIsXG4gICAgXCJpZWVlODAyMTFfcnhfbGlzdFwiLFxuICAgIFwiaWVlZTgwMjExX3J4X25hcGlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbWFjODAyMTEgYW5kIGNmZzgwMjExIHN1YnN5c3RlbXMsIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgaG93IHJlY2VpdmVkIGZyYW1lcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHN0YXRpb25zIGFuZCBsaW5rcyAoTXVsdGktTGluayBPcGVyYXRpb24pLiBJdCBjaGFuZ2VzIHRoZSBzaWduYXR1cmUgb2YgY29yZSBSWCBmdW5jdGlvbnMgKGBpZWVlODAyMTFfcnhfbGlzdGAsIGBpZWVlODAyMTFfcnhfbmFwaWApIGFuZCBtb2RpZmllcyB0aGUgbWFuYWdlbWVudCBmcmFtZSB0cmFuc21pc3Npb24gcGF0aCB0byBoYW5kbGUgYSBuZXcgYG5vX3N0YWAgZmxhZy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv7nn[1] Phase: Succeeded StartedAt: 2026-08-03 15:29:10 +0000 UTC FinishedAt: 2026-08-03 15:29:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv7nn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-03 15:29:10 +0000 UTC FinishedAt: 2026-08-03 15:29:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv7nn[2] Phase: Running StartedAt: 2026-08-03 15:29:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_tx_mgmt","ieee80211_mgmt_tx","ieee80211_rx_list","ieee80211_rx_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"e51900cc-ef8a-48e6-8976-5edabd4ad6e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-03 15:29:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_tx_mgmt","ieee80211_mgmt_tx","ieee80211_rx_list","ieee80211_rx_napi"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"e51900cc-ef8a-48e6-8976-5edabd4ad6e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfv7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_tx_mgmt","ieee80211_mgmt_tx","ieee80211_rx_list","ieee80211_rx_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"e51900cc-ef8a-48e6-8976-5edabd4ad6e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-03 15:29:10 +0000 UTC FinishedAt: 2026-08-03 15:29:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_tx_mgmt","ieee80211_mgmt_tx","ieee80211_rx_list","ieee80211_rx_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"e51900cc-ef8a-48e6-8976-5edabd4ad6e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-03 15:29:10 +0000 UTC FinishedAt: 2026-08-03 15:29:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfv7nn/series-workflowfv7nn-convert-artifact-2249897863/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfv7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_tx_mgmt","ieee80211_mgmt_tx","ieee80211_rx_list","ieee80211_rx_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"e51900cc-ef8a-48e6-8976-5edabd4ad6e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1] Phase: Running StartedAt: 2026-08-03 15:29:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfv7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_tx_mgmt","ieee80211_mgmt_tx","ieee80211_rx_list","ieee80211_rx_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"e51900cc-ef8a-48e6-8976-5edabd4ad6e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build Phase: Running StartedAt: 2026-08-03 15:29:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*ac618700-1ef0-4715-9447-d7bd7ff27d50,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-workflowfv7nn/series-workflowfv7nn-convert-artifact-2249897863/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfv7nn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nl80211_tx_mgmt","ieee80211_mgmt_tx","ieee80211_rx_list","ieee80211_rx_napi"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"6c5fc504d0d6934132637aa3db4b9b58148eaa78","config_name":"upstream-apparmor-kasan.config","enable_configs":["MAC80211","CFG80211","MAC80211_HWSIM"],"series_id":"e51900cc-ef8a-48e6-8976-5edabd4ad6e1","tree_name":"wireless-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/wireless/wireless-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Running StartedAt: 2026-08-03 15:29:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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:*ac618700-1ef0-4715-9447-d7bd7ff27d50,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-workflowfv7nn/series-workflowfv7nn-convert-artifact-2249897863/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,}