Name: series-workflowd96km Phase: Succeeded StartedAt: 2026-06-30 21:07:28 +0000 UTC FinishedAt: 2026-07-01 01:25:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[0] Phase: Succeeded StartedAt: 2026-06-30 21:07:28 +0000 UTC FinishedAt: 2026-06-30 21:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 21:07:28 +0000 UTC FinishedAt: 2026-06-30 21:21:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BATMAN_ADV", "BATMAN_ADV_BATMAN_V", "BATMAN_ADV_BLA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BATMAN_ADV", "BATMAN_ADV_BATMAN_V", "BATMAN_ADV_BLA" ], "series_id": "63159142-887d-4abd-b988-d4bab9cdb893" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "batadv_hardif_enable_interface", "batadv_hardif_disable_interface", "batadv_tp_handle_out_of_order", "batadv_tp_recv_msg", "batadv_tvlv_containers_process", "batadv_tvlv_containers_contain" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JBVE1BTl9BRFYmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9CQVRNQU5fViYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX0JMQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9yZWN2X21zZyYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIHJvdXRpbmcgcHJvdG9jb2wuIEl0IG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBoYXJkIGludGVyZmFjZXMgKGFkZGluZy9yZW1vdmluZyB0aGVtIGZyb20gdGhlIG1lc2gpLCB0aGUgcHJvY2Vzc2luZyBvZiBvdXQtb2Ytb3JkZXIgVFAgbWV0ZXIgcGFja2V0cywgYW5kIHRoZSBwYXJzaW5nIG9mIFRWTFYgY29udGFpbmVycy4gVGhlc2UgYXJlIGNvcmUgbG9naWMgY2hhbmdlcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rL3N5c2ZzIGFuZCBuZXR3b3JrIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYWEyZWY0MWRkMzNjYWQxNjU5ODYzNWQyMGUzNGQ1M2Y1OGRlNWMwYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDIxOjIwOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYyBiL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uY1xuaW5kZXggYmIyZjAxMmI0NTRlYTQuLjIyNjIyMjgzZjU5YjBjIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcbkBAIC00MDQsMjMgJiM0Mzs0MDQsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBiYXRhZHZfZm9yd19wYWNrZXQgKmZvcndfcGFja2V0LFxuIC8qIHNlbmQgYSBiYXRtYW4gb2dtIHBhY2tldCAqL1xuIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fZW1pdChzdHJ1Y3QgYmF0YWR2X2ZvcndfcGFja2V0ICpmb3J3X3BhY2tldClcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcbi1cbiBcdGlmICghZm9yd19wYWNrZXQtXHUwMDNlaWZfaW5jb21pbmcpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O0Vycm9yIC0gY2FuJiMzOTt0IGZvcndhcmQgcGFja2V0OiBpbmNvbWluZyBpZmFjZSBub3Qgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0bWVzaF9pZmFjZSA9IGZvcndfcGFja2V0LVx1MDAzZWlmX2luY29taW5nLVx1MDAzZW1lc2hfaWZhY2U7XG4tXG4gXHRpZiAoV0FSTl9PTighZm9yd19wYWNrZXQtXHUwMDNlaWZfb3V0Z29pbmcpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoZm9yd19wYWNrZXQtXHUwMDNlaWZfb3V0Z29pbmctXHUwMDNlbWVzaF9pZmFjZSAhPSBtZXNoX2lmYWNlKSB7XG4tXHRcdHByX3dhcm4oXCYjMzQ7JXM6IG1lc2ggaW50ZXJmYWNlIHN3aXRjaCBmb3IgcXVldWVkIE9HTVxcblwmIzM0OywgX19mdW5jX18pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4gXHRpZiAoZm9yd19wYWNrZXQtXHUwMDNlaWZfaW5jb21pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9BQ1RJVkUpXG4gXHRcdHJldHVybjtcbiBcbkBAIC05MTAsOCAmIzQzOzkwMSw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2NoZWR1bGVfYnVmZihzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4gXG4gc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zY2hlZHVsZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4ge1xuLVx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8XG4tXHQgICAgaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpXG4mIzQzO1x0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X2l2Lm9nbV9idWZmX211dGV4KTtcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYyBiL25ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jXG5pbmRleCA0ODQxZjBmMWE5YjEzOS4uMjYyZTQwMDQwMDA3Y2MgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmNcbkBAIC05MCwxMiAmIzQzOzkwLDYgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3ZfZWxwX2dldF90aHJvdWdocHV0KHN0cnVjdCBiYXRhZHZfaGFyZGlmX25laWdoX25vZGUgKm5laWdoLFxuIFx0dTMyIHRocm91Z2hwdXQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogZG9uJiMzOTt0IHF1ZXJ5IHRocm91Z2hwdXQgd2hlbiBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoIGFueVxuLVx0ICogYmF0bWFuLWFkdiBpbnRlcmZhY2Vcbi1cdCAqL1xuLVx0aWYgKCFtZXNoX2lmYWNlKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4gXHQvKiBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBjdXN0b21pc2VkIHZhbHVlIGZvciB0aGlzIGludGVyZmFjZSwgdGhlblxuIFx0ICogcmV0dXJuIGl0IGRpcmVjdGx5XG4gXHQgKi9cbkBAIC0zMTEsOCAmIzQzOzMwNSw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X2VscF9wZXJpb2RpY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKiB3ZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2Ygc2h1dHRpbmcgdGhpcyBpbnRlcmZhY2UgZG93biAqL1xuLVx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8XG4tXHQgICAgaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpXG4mIzQzO1x0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIHRoZSBpbnRlcmZhY2Ugd2FzIGVuYWJsZWQgYnV0IG1heSBub3QgYmUgcmVhZHkgeWV0ICovXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9vZ20uY1xuaW5kZXggMDM3OTIxYWFkMzVkNTguLmU5MjFkNDlmN2VjZWRkIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jXG5AQCAtMTE1LDE0ICYjNDM7MTE1LDE0IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zdGFydF90aW1lcihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxuIFxuIC8qKlxuICAqIGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKCkgLSBzZW5kIGEgYmF0bWFuIG9nbSB1c2luZyBhIGdpdmVuIGludGVyZmFjZVxuLSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuICAqIEBza2I6IHRoZSBPR00gdG8gc2VuZFxuICAqIEBoYXJkX2lmYWNlOiB0aGUgaW50ZXJmYWNlIHRvIHVzZSB0byBzZW5kIHRoZSBPR01cbiAgKi9cbi1zdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fc2VuZF90b19pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiYjNDM7XG4gXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0FDVElWRSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTE4OSw3ICYjNDM7MTg5LDYgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3JfbGlzdF9mcmVlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbiBcbiAvKipcbiAgKiBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKCkgLSBmbHVzaCBcdTAwMjYgc2VuZCBhZ2dyZWdhdGlvbiBxdWV1ZVxuLSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuICAqIEBoYXJkX2lmYWNlOiB0aGUgaW50ZXJmYWNlIHdpdGggdGhlIGFnZ3JlZ2F0aW9uIHF1ZXVlIHRvIGZsdXNoXG4gICpcbiAgKiBBZ2dyZWdhdGVzIGFsbCBPR012MiBwYWNrZXRzIGN1cnJlbnRseSBpbiB0aGUgYWdncmVnYXRpb24gcXVldWUgaW50byBhXG5AQCAtMTk5LDggJiM0MzsxOTgsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9saXN0X2ZyZWUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuICAqXG4gICogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9saXN0LmxvY2suXG4gICovXG4tc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLVx0XHRcdFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuJiM0MztzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgYWdncl9sZW4gPSBoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGVuO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9hZ2dyO1xuQEAgLTIzMCwyNiAmIzQzOzIyOCwyMSBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gXHR9XG4gXG4tXHRiYXRhZHZfdl9vZ21fc2VuZF90b19pZihiYXRfcHJpdiwgc2tiX2FnZ3IsIGhhcmRfaWZhY2UpO1xuJiM0MztcdGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHNrYl9hZ2dyLCBoYXJkX2lmYWNlKTtcbiB9XG4gXG4gLyoqXG4gICogYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKCkgLSBxdWV1ZSBhIGJhdG1hbiBvZ20gb24gYSBnaXZlbiBpbnRlcmZhY2Vcbi0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiAgKiBAc2tiOiB0aGUgT0dNIHRvIHF1ZXVlXG4gICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2UgdG8gcXVldWUgdGhlIE9HTSBvblxuICAqL1xuLXN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fcXVldWVfb25faWYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIHtcbi1cdGlmIChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UgIT0gYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuJiM0MztcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuIFxuIFx0aWYgKCFSRUFEX09OQ0UoYmF0X3ByaXYtXHUwMDNlYWdncmVnYXRlZF9vZ21zKSkge1xuLVx0XHRiYXRhZHZfdl9vZ21fc2VuZF90b19pZihiYXRfcHJpdiwgc2tiLCBoYXJkX2lmYWNlKTtcbiYjNDM7XHRcdGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHNrYiwgaGFyZF9pZmFjZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC0yNjAsNyAmIzQzOzI1Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0fVxuIFxuIFx0aWYgKCFiYXRhZHZfdl9vZ21fcXVldWVfbGVmdChza2IsIGhhcmRfaWZhY2UpKVxuLVx0XHRiYXRhZHZfdl9vZ21fYWdncl9zZW5kKGJhdF9wcml2LCBoYXJkX2lmYWNlKTtcbiYjNDM7XHRcdGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoaGFyZF9pZmFjZSk7XG4gXG4gXHRoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGVuICYjNDM7PSBiYXRhZHZfdl9vZ21fbGVuKHNrYik7XG4gXHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9saXN0LCBza2IpO1xuQEAgLTM1Nyw3ICYjNDM7MzUwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3NlbmRfbWVzaGlmKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0YmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKGJhdF9wcml2LCBza2JfdG1wLCBoYXJkX2lmYWNlKTtcbiYjNDM7XHRcdGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihza2JfdG1wLCBoYXJkX2lmYWNlKTtcbiBcdFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbkBAIC0zOTcsMTQgJiM0MzszOTAsMTIgQEAgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2VfYmF0X3YgKmJhdHY7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4tXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2O1xuIFxuIFx0YmF0diA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2VfYmF0X3YsIGFnZ3Jfd3Eud29yayk7XG4gXHRoYXJkX2lmYWNlID0gY29udGFpbmVyX29mKGJhdHYsIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSwgYmF0X3YpO1xuLVx0YmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9saXN0LmxvY2spO1xuLVx0YmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChiYXRfcHJpdiwgaGFyZF9pZmFjZSk7XG4mIzQzO1x0YmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChoYXJkX2lmYWNlKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9saXN0LmxvY2spO1xuIFxuIFx0YmF0YWR2X3Zfb2dtX3N0YXJ0X3F1ZXVlX3RpbWVyKGhhcmRfaWZhY2UpO1xuQEAgLTYwMSw3ICYjNDM7NTkyLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2ZvcndhcmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0ICAgaWZfb3V0Z29pbmctXHUwMDNlbmV0X2Rldi1cdTAwM2VuYW1lLCBudG9obChvZ21fZm9yd2FyZC1cdTAwM2V0aHJvdWdocHV0KSxcbiBcdFx0ICAgb2dtX2ZvcndhcmQtXHUwMDNldHRsLCBpZl9pbmNvbWluZy1cdTAwM2VuZXRfZGV2LVx1MDAzZW5hbWUpO1xuIFxuLVx0YmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKGJhdF9wcml2LCBza2IsIGlmX291dGdvaW5nKTtcbiYjNDM7XHRiYXRhZHZfdl9vZ21fcXVldWVfb25faWYoc2tiLCBpZl9vdXRnb2luZyk7XG4gXG4gb3V0OlxuIFx0YmF0YWR2X29yaWdfaWZpbmZvX3B1dChvcmlnX2lmaW5mbyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuY1xuaW5kZXggNWM3M2Y2YmExNmNmZjMuLmY5YTFmYWRmOGRlOWU0IDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jXG5AQCAtMzQ0LDcgJiM0MzszNDQsNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfY2xhaW0oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKm1hYyxcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgZXRoaGRyICpldGhoZHI7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcbiBcdHU4ICpod19zcmM7XG4gXHRzdHJ1Y3QgYmF0YWR2X2JsYV9jbGFpbV9kc3QgbG9jYWxfY2xhaW1fZGVzdDtcbiBcdF9fYmUzMiB6ZXJvaXAgPSAwO1xuQEAgLTM1NywxNCAmIzQzOzM1NiwxMCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfY2xhaW0oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKm1hYyxcbiBcdCAgICAgICBzaXplb2YobG9jYWxfY2xhaW1fZGVzdCkpO1xuIFx0bG9jYWxfY2xhaW1fZGVzdC50eXBlID0gY2xhaW10eXBlO1xuIFxuLVx0bWVzaF9pZmFjZSA9IFJFQURfT05DRShwcmltYXJ5X2lmLVx1MDAzZW1lc2hfaWZhY2UpO1xuLVx0aWYgKCFtZXNoX2lmYWNlKVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdHNrYiA9IGFycF9jcmVhdGUoQVJQT1BfUkVQTFksIEVUSF9QX0FSUCxcbiBcdFx0XHQgLyogSVAgRFNUOiAwLjAuMC4wICovXG4gXHRcdFx0IHplcm9pcCxcbi1cdFx0XHQgbWVzaF9pZmFjZSxcbiYjNDM7XHRcdFx0IHByaW1hcnlfaWYtXHUwMDNlbWVzaF9pZmFjZSxcbiBcdFx0XHQgLyogSVAgU1JDOiAwLjAuMC4wICovXG4gXHRcdFx0IHplcm9pcCxcbiBcdFx0XHQgLyogRXRoZXJuZXQgRFNUOiBCcm9hZGNhc3QgKi9cbkBAIC00NDIsNyAmIzQzOzQzNyw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLFxuIFx0fVxuIFxuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbWVzaF9pZmFjZSk7XG4mIzQzO1x0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwcmltYXJ5X2lmLVx1MDAzZW1lc2hfaWZhY2UpO1xuIFx0YmF0YWR2X2luY19jb3VudGVyKGJhdF9wcml2LCBCQVRBRFZfQ05UX1JYKTtcbiBcdGJhdGFkdl9hZGRfY291bnRlcihiYXRfcHJpdiwgQkFUQURWX0NOVF9SWF9CWVRFUyxcbiBcdFx0XHQgICBza2ItXHUwMDNlbGVuICYjNDM7IEVUSF9ITEVOKTtcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jIGIvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuY1xuaW5kZXggMDNkMDFjMjBhOTU0OGIuLmI2ODY3NTc2YmJhZmFlIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuY1xuQEAgLTYzLDYgJiM0Mzs2Myw3IEBAIHZvaWQgYmF0YWR2X2hhcmRpZl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4gXG4gXHRoYXJkX2lmYWNlID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlLCByZWZjb3VudCk7XG4mIzQzO1x0bmV0ZGV2X3B1dChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbWVzaGlmX2Rldl90cmFja2VyKTtcbiBcdG5ldGRldl9wdXQoaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2LCBcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWRldl90cmFja2VyKTtcbiBcbiBcdGtmcmVlX3JjdShoYXJkX2lmYWNlLCByY3UpO1xuQEAgLTc1LDIxICYjNDM7NzYsMjEgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbiAgKiBSZXR1cm46IGJhdGFkdl9oYXJkX2lmYWNlIG9mIG5ldF9kZXYgKHdpdGggaW5jcmVhc2VkIHJlZmNudCksIE5VTEwgb24gZXJyb3JzXG4gICovXG4gc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpcbi1iYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpXG4mIzQzO2JhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldilcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2U7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoYXJkX2lmYWNlLCBcdTAwMjZiYXRhZHZfaGFyZGlmX2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlbmV0X2RldiA9PSBuZXRfZGV2IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAga3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCkpXG4tXHRcdFx0Z290byBvdXQ7XG4tXHR9XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiBcbi1cdGhhcmRfaWZhY2UgPSBOVUxMO1xuJiM0MztcdG1lc2hfaWZhY2UgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobmV0X2Rldik7XG4mIzQzO1x0aWYgKCFtZXNoX2lmYWNlIHx8ICFiYXRhZHZfbWVzaGlmX2lzX3ZhbGlkKG1lc2hfaWZhY2UpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGhhcmRfaWZhY2UgPSBuZXRkZXZfbG93ZXJfZGV2X2dldF9wcml2YXRlKG1lc2hfaWZhY2UsIG5ldF9kZXYpO1xuJiM0MztcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiBcbi1vdXQ6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBoYXJkX2lmYWNlO1xuIH1cbiBcbkBAIC0yNDUsNyAmIzQzOzI0Niw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICpfX2JhdGFkdl9nZXRfcmVhbF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdH1cbiBcbiBcdGhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYobmV0ZGV2KTtcbi1cdGlmICghaGFyZF9pZmFjZSB8fCAhaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKVxuJiM0MztcdGlmICghaGFyZF9pZmFjZSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRuZXQgPSBkZXZfbmV0KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG5AQCAtNTM5LDE2ICYjNDM7NTQwLDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhXG4gXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnRtcF9oYXJkX2lmYWNlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiBcbi1cdGlmICghbWVzaF9pZmFjZSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX3ByaXZhdGUobWVzaF9pZmFjZSwgdG1wX2hhcmRfaWZhY2UsIGl0ZXIpIHtcbiBcdFx0aWYgKHRtcF9oYXJkX2lmYWNlID09IGhhcmRfaWZhY2UpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmICh0bXBfaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghYmF0YWR2X2NvbXBhcmVfZXRoKHRtcF9oYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYtXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdGhhcmRfaWZhY2UtXHUwMDNlbmV0X2Rldi1cdTAwM2VkZXZfYWRkcikpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtNTc0LDkgJiM0Mzs1NjksNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfaGFyZGlmX3JlY2FsY19leHRyYV9za2Jyb29tKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX3ByaXZhdGVfcmN1KG1lc2hfaWZhY2UsIGhhcmRfaWZhY2UsIGl0ZXIpIHtcbi1cdFx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuIFx0XHRsb3dlcl9oZWFkZXJfbGVuID0gbWF4X3QodW5zaWduZWQgc2hvcnQsIGxvd2VyX2hlYWRlcl9sZW4sXG4gXHRcdFx0XHRcdCBoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiBcbkBAIC03MjMsMzggJiM0Mzs3MTUsNjMgQEAgYmF0YWR2X2hhcmRpZl9kZWFjdGl2YXRlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4gfVxuIFxuIC8qKlxuLSAqIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSgpIC0gRW5zbGF2ZSBoYXJkIGludGVyZmFjZSB0byBtZXNoIGludGVyZmFjZVxuLSAqIEBoYXJkX2lmYWNlOiBoYXJkIGludGVyZmFjZSB0byBhZGQgdG8gbWVzaCBpbnRlcmZhY2VcbiYjNDM7ICogYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKCkgLSBFbnNsYXZlIGludGVyZmFjZSB0byBtZXNoIGludGVyZmFjZVxuJiM0MzsgKiBAbmV0X2RldjogbmV0ZGV2IHN0cnVjdCBvZiB0aGUgaW50ZXJmYWNlIHRvIGFkZCB0byBtZXNoIGludGVyZmFjZVxuICAqIEBtZXNoX2lmYWNlOiBuZXRkZXYgc3RydWN0IG9mIHRoZSBtZXNoIGludGVyZmFjZVxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIGluIGNhc2Ugb2YgZmFpbHVyZVxuICAqL1xuLWludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxuJiM0MztpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXG4ge1xuIFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdjtcbiBcdF9fYmUxNiBldGhlcnR5cGUgPSBodG9ucyhFVEhfUF9CQVRNQU4pO1xuIFx0aW50IG1heF9oZWFkZXJfbGVuID0gYmF0YWR2X21heF9oZWFkZXJfbGVuKCk7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xuIFx0dW5zaWduZWQgaW50IHJlcXVpcmVkX210dTtcbiBcdHVuc2lnbmVkIGludCBoYXJkaWZfbXR1O1xuIFx0Ym9vbCBmcmFnbWVudGF0aW9uO1xuIFx0aW50IHJldDtcbiBcbi1cdGhhcmRpZl9tdHUgPSBSRUFEX09OQ0UoaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2LVx1MDAzZW10dSk7XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFiYXRhZHZfaXNfdmFsaWRfaWZhY2UobmV0X2RldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aGFyZGlmX210dSA9IFJFQURfT05DRShuZXRfZGV2LVx1MDAzZW10dSk7XG4gXHRyZXF1aXJlZF9tdHUgPSBSRUFEX09OQ0UobWVzaF9pZmFjZS1cdTAwM2VtdHUpICYjNDM7IG1heF9oZWFkZXJfbGVuO1xuIFxuIFx0aWYgKGhhcmRpZl9tdHUgXHUwMDNjIEVUSF9NSU5fTVRVICYjNDM7IG1heF9oZWFkZXJfbGVuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSlcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0aGFyZF9pZmFjZSA9IGt6YWxsb2Nfb2JqKCpoYXJkX2lmYWNlLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIWhhcmRfaWZhY2UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGtyZWZfZ2V0KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlcmVmY291bnQpO1xuJiM0MztcdG5ldGRldl9ob2xkKG5ldF9kZXYsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdGhhcmRfaWZhY2UtXHUwMDNlbmV0X2RldiA9IG5ldF9kZXY7XG4mIzQzO1xuJiM0MztcdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX0lOQUNUSVZFO1xuJiM0MztcbiYjNDM7XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VuZWlnaF9saXN0KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdF9pdi5vZ21fYnVmZl9tdXRleCk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VuZWlnaF9saXN0X2xvY2spO1xuJiM0MztcdGtyZWZfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KTtcbiYjNDM7XG4mIzQzO1x0aGFyZF9pZmFjZS1cdTAwM2VudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfREVGQVVMVDtcbiYjNDM7XHRpZiAoYmF0YWR2X2lzX3dpZmlfaGFyZGlmKGhhcmRfaWZhY2UpKVxuJiM0MztcdFx0aGFyZF9pZmFjZS1cdTAwM2VudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfV0lSRUxFU1M7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoaGFyZF9pZmFjZS1cdTAwM2Vob3BfcGVuYWx0eSwgMCk7XG4mIzQzO1xuJiM0MztcdGJhdGFkdl92X2hhcmRpZl9pbml0KGhhcmRfaWZhY2UpO1xuIFxuIFx0bmV0ZGV2X2hvbGQobWVzaF9pZmFjZSwgXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoaWZfZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuIFx0aGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlID0gbWVzaF9pZmFjZTtcbiBcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiBcbiYjNDM7XHRiYXRfcHJpdi1cdTAwM2VoYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7XG4gXHRyZXQgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9saW5rKGhhcmRfaWZhY2UtXHUwMDNlbmV0X2RldixcbiBcdFx0XHRcdFx0ICAgbWVzaF9pZmFjZSwgaGFyZF9pZmFjZSwgTlVMTCwgTlVMTCk7XG4gXHRpZiAocmV0KVxuQEAgLTc2NCw5ICYjNDM7NzgxLDYgQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl91cHBlcjtcbiBcbi1cdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX0lOQUNUSVZFO1xuLVxuLVx0a3JlZl9nZXQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCk7XG4gXHRoYXJkX2lmYWNlLVx1MDAzZWJhdG1hbl9hZHZfcHR5cGUudHlwZSA9IGV0aGVydHlwZTtcbiBcdGhhcmRfaWZhY2UtXHUwMDNlYmF0bWFuX2Fkdl9wdHlwZS5mdW5jID0gYmF0YWR2X2JhdG1hbl9za2JfcmVjdjtcbiBcdGhhcmRfaWZhY2UtXHUwMDNlYmF0bWFuX2Fkdl9wdHlwZS5kZXYgPSBoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXY7XG5AQCAtODAyLDE0ICYjNDM7ODE2LDExIEBAIGludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxuIFx0aWYgKGJhdF9wcml2LVx1MDAzZWFsZ29fb3BzLVx1MDAzZWlmYWNlLmVuYWJsZWQpXG4gXHRcdGJhdF9wcml2LVx1MDAzZWFsZ29fb3BzLVx1MDAzZWlmYWNlLmVuYWJsZWQoaGFyZF9pZmFjZSk7XG4gXG4tb3V0OlxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3VwcGVyOlxuIFx0bmV0ZGV2X3VwcGVyX2Rldl91bmxpbmsoaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2LCBtZXNoX2lmYWNlKTtcbiBlcnJfZGV2OlxuLVx0aGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlID0gTlVMTDtcbi1cdG5ldGRldl9wdXQobWVzaF9pZmFjZSwgXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoaWZfZGV2X3RyYWNrZXIpO1xuIFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjEsMTcgJiM0Mzs4MzIsMTggQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXG4gdm9pZCBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbi1cdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZiA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuIFxuIFx0YmF0YWR2X2hhcmRpZl9kZWFjdGl2YXRlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbiBcbiBcdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfSU5BQ1RJVkUpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0YmF0YWR2X2luZm8oaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlLCBcJiMzNDtSZW1vdmluZyBpbnRlcmZhY2U6ICVzXFxuXCYjMzQ7LFxuIFx0XHQgICAgaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2LVx1MDAzZW5hbWUpO1xuIFx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0bWFuX2Fkdl9wdHlwZSk7XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbiBcbiBcdHByaW1hcnlfaWYgPSBiYXRhZHZfcHJpbWFyeV9pZl9nZXRfc2VsZWN0ZWQoYmF0X3ByaXYpO1xuIFx0aWYgKGhhcmRfaWZhY2UgPT0gcHJpbWFyeV9pZikge1xuQEAgLTg0MiwxNSAmIzQzOzg1NCwxNiBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIFxuIFx0XHRiYXRhZHZfaGFyZGlmX3B1dChuZXdfaWYpO1xuIFx0fVxuJiM0MztcdGJhdGFkdl9oYXJkaWZfcHV0KHByaW1hcnlfaWYpO1xuIFxuIFx0YmF0X3ByaXYtXHUwMDNlYWxnb19vcHMtXHUwMDNlaWZhY2UuZGlzYWJsZShoYXJkX2lmYWNlKTtcbi1cdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX05PVF9JTl9VU0U7XG4mIzQzO1x0aGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRDtcbiBcbiBcdC8qIGRlbGV0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIGhhcmRfaWZhY2UgKi9cbiBcdGJhdGFkdl9wdXJnZV9vcmlnX3JlZihiYXRfcHJpdik7XG4gXHRiYXRhZHZfcHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cyhiYXRfcHJpdiwgaGFyZF9pZmFjZSk7XG4tXHRuZXRkZXZfcHV0KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSwgXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoaWZfZGV2X3RyYWNrZXIpO1xuIFxuJiM0MztcdGJhdF9wcml2LVx1MDAzZWhhcmRpZl9nZW5lcmF0aW9uJiM0MzsmIzQzOztcbiBcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKGhhcmRfaWZhY2UtXHUwMDNlbmV0X2RldiwgaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiBcdGJhdGFkdl9oYXJkaWZfcmVjYWxjX2V4dHJhX3NrYnJvb20oaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiBcbkBAIC04NTgsNjcgJiM0Mzs4NzEsNiBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWFkal9saXN0Lmxvd2VyKSlcbiBcdFx0YmF0YWR2X2d3X2NoZWNrX2NsaWVudF9zdG9wKGJhdF9wcml2KTtcbiBcbi1cdGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSA9IE5VTEw7XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbi1cbi1vdXQ6XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChwcmltYXJ5X2lmKTtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqXG4tYmF0YWR2X2hhcmRpZl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxuLXtcbi1cdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcbi1cbi1cdEFTU0VSVF9SVE5MKCk7XG4tXG4tXHRpZiAoIWJhdGFkdl9pc192YWxpZF9pZmFjZShuZXRfZGV2KSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRoYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKCFoYXJkX2lmYWNlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdG5ldGRldl9ob2xkKG5ldF9kZXYsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuLVx0aGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2ID0gbmV0X2Rldjtcbi1cbi1cdGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSA9IE5VTEw7XG4tXHRoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyA9IEJBVEFEVl9JRl9OT1RfSU5fVVNFO1xuLVxuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VsaXN0KTtcbi1cdElOSVRfSExJU1RfSEVBRChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZW5laWdoX2xpc3QpO1xuLVxuLVx0bXV0ZXhfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdF9pdi5vZ21fYnVmZl9tdXRleCk7XG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZW5laWdoX2xpc3RfbG9jayk7XG4tXHRrcmVmX2luaXQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCk7XG4tXG4tXHRoYXJkX2lmYWNlLVx1MDAzZW51bV9iY2FzdHMgPSBCQVRBRFZfTlVNX0JDQVNUU19ERUZBVUxUO1xuLVx0aWYgKGJhdGFkdl9pc193aWZpX2hhcmRpZihoYXJkX2lmYWNlKSlcbi1cdFx0aGFyZF9pZmFjZS1cdTAwM2VudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfV0lSRUxFU1M7XG4tXG4tXHRXUklURV9PTkNFKGhhcmRfaWZhY2UtXHUwMDNlaG9wX3BlbmFsdHksIDApO1xuLVxuLVx0YmF0YWR2X3ZfaGFyZGlmX2luaXQoaGFyZF9pZmFjZSk7XG4tXG4tXHRrcmVmX2dldChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KTtcbi1cdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbGlzdCwgXHUwMDI2YmF0YWR2X2hhcmRpZl9saXN0KTtcbi1cdGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7XG4tXG4tXHRyZXR1cm4gaGFyZF9pZmFjZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmF0YWR2X2hhcmRpZl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbi17XG4tXHRBU1NFUlRfUlROTCgpO1xuLVxuLVx0LyogZmlyc3QgZGVhY3RpdmF0ZSBpbnRlcmZhY2UgKi9cbi1cdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSlcbi1cdFx0YmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbi1cbi1cdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0aGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRDtcbiBcdGJhdGFkdl9oYXJkaWZfcHV0KGhhcmRfaWZhY2UpO1xuIH1cbiBcbkBAIC0xMDgyLDEwICYjNDM7MTAzNCw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2hhcmRfaWZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuIFx0YmF0YWR2X3dpZmlfbmV0X2RldmljZV9ldmVudChldmVudCwgbmV0X2Rldik7XG4gXG4gXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KG5ldF9kZXYpO1xuLVx0aWYgKCFoYXJkX2lmYWNlIFx1MDAyNlx1MDAyNiAoZXZlbnQgPT0gTkVUREVWX1JFR0lTVEVSIHx8XG4tXHRcdFx0ICAgIGV2ZW50ID09IE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFKSlcbi1cdFx0aGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfYWRkX2ludGVyZmFjZShuZXRfZGV2KTtcbi1cbiBcdGlmICghaGFyZF9pZmFjZSlcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtMTA5OSwxOSAmIzQzOzEwNDcsMTIgQEAgc3RhdGljIGludCBiYXRhZHZfaGFyZF9pZl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcbiBcdGNhc2UgTkVUREVWX1BSRV9UWVBFX0NIQU5HRTpcbi1cdFx0bGlzdF9kZWxfcmN1KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbGlzdCk7XG4tXHRcdGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7XG4tXG4tXHRcdGJhdGFkdl9oYXJkaWZfcmVtb3ZlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbiYjNDM7XHRcdGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVRERVZfQ0hBTkdFTVRVOlxuLVx0XHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKVxuLVx0XHRcdGJhdGFkdl91cGRhdGVfbWluX210dShoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuJiM0MztcdFx0YmF0YWR2X3VwZGF0ZV9taW5fbXR1KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVRERVZfQ0hBTkdFQUREUjpcbi1cdFx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFKVxuLVx0XHRcdGdvdG8gaGFyZGlmX3B1dDtcbi1cbiBcdFx0YmF0YWR2X2NoZWNrX2tub3duX21hY19hZGRyKGhhcmRfaWZhY2UpO1xuIFxuIFx0XHRiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaCBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmhcbmluZGV4IGFmMzE2OTZjMzk3ODA4Li45MzVmNDdjYTlhNDhmZCAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmhcbkBAIC0yMSwxMiAmIzQzOzIxLDYgQEBcbiAgKiBlbnVtIGJhdGFkdl9oYXJkX2lmX3N0YXRlIC0gU3RhdGUgb2YgYSBoYXJkIGludGVyZmFjZVxuICAqL1xuIGVudW0gYmF0YWR2X2hhcmRfaWZfc3RhdGUge1xuLVx0LyoqXG4tXHQgKiBAQkFUQURWX0lGX05PVF9JTl9VU0U6IGludGVyZmFjZSBpcyBub3QgdXNlZCBhcyBzbGF2ZSBpbnRlcmZhY2Ugb2YgYVxuLVx0ICogYmF0bWFuLWFkdiBtZXNoIGludGVyZmFjZVxuLVx0ICovXG4tXHRCQVRBRFZfSUZfTk9UX0lOX1VTRSxcbi1cbiBcdC8qKlxuIFx0ICogQEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEOiBpbnRlcmZhY2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gbWVzaFxuIFx0ICogaW50ZXJmYWNlXG5AQCAtNzQsOCAmIzQzOzY4LDggQEAgdTMyIGJhdGFkdl9uZXRkZXZfZ2V0X3dpZmlfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpO1xuIHUzMiBiYXRhZHZfaGFyZGlmX2dldF93aWZpX2ZsYWdzKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSk7XG4gYm9vbCBiYXRhZHZfaXNfd2lmaV9oYXJkaWYoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKTtcbiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UqXG4tYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTtcbi1pbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSxcbiYjNDM7YmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTtcbiYjNDM7aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcbiB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKTtcbiBpbnQgYmF0YWR2X2hhcmRpZl9taW5fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmMgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmNcbmluZGV4IDNjNDU3MjI4NGI1MzJmLi4wNGJiMDMwZWYyOTlhYyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jXG5AQCAtNTksMTEgJiM0Mzs1OSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dHBfbWV0ZXIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3RyYW5zbGF0aW9uLXRhYmxlLmhcJiMzNDtcbiBcbi0vKiBMaXN0IG1hbmlwdWxhdGlvbnMgb24gaGFyZGlmX2xpc3QgaGF2ZSB0byBiZSBydG5sX2xvY2soKSYjMzk7ZWQsXG4tICogbGlzdCB0cmF2ZXJzYWxzIGp1c3QgcmN1LWxvY2tlZFxuLSAqL1xuLXN0cnVjdCBsaXN0X2hlYWQgYmF0YWR2X2hhcmRpZl9saXN0O1xuLXVuc2lnbmVkIGludCBiYXRhZHZfaGFyZGlmX2dlbmVyYXRpb247XG4gc3RhdGljIGludCAoKmJhdGFkdl9yeF9oYW5kbGVyWzI1Nl0pKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcmVjdl9pZik7XG4gXG5AQCAtOTUsNyAmIzQzOzkwLDYgQEAgc3RhdGljIGludCBfX2luaXQgYmF0YWR2X2luaXQodm9pZClcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZiYXRhZHZfaGFyZGlmX2xpc3QpO1xuIFx0YmF0YWR2X2FsZ29faW5pdCgpO1xuIFxuIFx0YmF0YWR2X3JlY3ZfaGFuZGxlcl9pbml0KCk7XG5AQCAtNDUwLDkgJiM0Mzs0NDQsNiBAQCBpbnQgYmF0YWR2X2JhdG1hbl9za2JfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VtYWNfbGVuICE9IEVUSF9ITEVOIHx8ICFza2JfbWFjX2hlYWRlcihza2IpKSlcbiBcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdGlmICghaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKVxuLVx0XHRnb3RvIGVycl9mcmVlO1xuLVxuIFx0YmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuIFxuIFx0aWYgKFJFQURfT05DRShiYXRfcHJpdi1cdTAwM2VtZXNoX3N0YXRlKSAhPSBCQVRBRFZfTUVTSF9BQ1RJVkUpXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5oIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5oXG5pbmRleCBmNjhmYzhiNzIzOWNkNS4uZTczODc1OGVlNGE3YWUgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L21haW4uaFxuQEAgLTIyNiw5ICYjNDM7MjI2LDYgQEAgc3RhdGljIGlubGluZSBpbnQgYmF0YWR2X3ByaW50X3ZpZCh1bnNpZ25lZCBzaG9ydCB2aWQpXG4gXHRcdHJldHVybiAtMTtcbiB9XG4gXG4tZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYmF0YWR2X2hhcmRpZl9saXN0O1xuLWV4dGVybiB1bnNpZ25lZCBpbnQgYmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uO1xuLVxuIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYmF0YWR2X2V2ZW50X3dvcmtxdWV1ZTtcbiBcbiBpbnQgYmF0YWR2X21lc2hfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbmluZGV4IDQ0MDI2ODEwYjk5Y2VhLi5hMzczNjhjMWY1YjU1YyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbkBAIC04MzYsMTggJiM0Mzs4MzYsNyBAQCBzdGF0aWMgaW50IGJhdGFkdl9tZXNoaWZfc2xhdmVfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0aGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihzbGF2ZV9kZXYpO1xuLVx0aWYgKCFoYXJkX2lmYWNlIHx8IGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRyZXQgPSBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSwgZGV2KTtcbi1cbi1vdXQ6XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzbGF2ZV9kZXYsIGRldik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L25ldGxpbmsuYyBiL25ldC9iYXRtYW4tYWR2L25ldGxpbmsuY1xuaW5kZXggNGNmOWUzYzU0YWQzYjIuLmQyYmM0OGM3MDcxNDM0IDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmNcbkBAIC05NjgsNyAmIzQzOzk2OCw3IEBAIGJhdGFkdl9uZXRsaW5rX2R1bXBfaGFyZGlmKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XG4gXG4gXHRydG5sX2xvY2soKTtcbi1cdGNiLVx1MDAzZXNlcSA9IGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiBcdTAwM2NcdTAwM2MgMSB8IDE7XG4mIzQzO1x0Y2ItXHUwMDNlc2VxID0gYmF0X3ByaXYtXHUwMDNlaGFyZGlmX2dlbmVyYXRpb24gXHUwMDNjXHUwMDNjIDEgfCAxO1xuIFxuIFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX3ByaXZhdGUobWVzaF9pZmFjZSwgaGFyZF9pZmFjZSwgaXRlcikge1xuIFx0XHRpZiAoaSYjNDM7JiM0MzsgXHUwMDNjIHNraXApXG5AQCAtMTIxMSw3ICYjNDM7MTIxMSw5IEBAIGJhdGFkdl9uZXRsaW5rX2dldF9oYXJkaWZfZnJvbV9pZmluZGV4KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRpZiAoIWhhcmRfZGV2KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbiBcbiYjNDM7XHRydG5sX2xvY2soKTtcbiBcdGhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoaGFyZF9kZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4gXHRpZiAoIWhhcmRfaWZhY2UpXG4gXHRcdGdvdG8gZXJyX3B1dF9oYXJkZGV2O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuY1xuaW5kZXggOWIzOGJkOWU4ZGE3ZWMuLjQ4ZjgzN2NmNjY1YTJhIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmNcbkBAIC0xMDMzLDcgJiM0MzsxMDMzLDYgQEAgYmF0YWR2X3B1cmdlX25laWdoX2lmaW5mbyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFxuIFx0XHQvKiBkb24mIzM5O3QgcHVyZ2UgaWYgdGhlIGludGVyZmFjZSBpcyBub3QgKGdvaW5nKSBkb3duICovXG4gXHRcdGlmIChpZl9vdXRnb2luZy1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9OT1RfSU5fVVNFIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTEwNzcsNyAmIzQzOzEwNzYsNiBAQCBiYXRhZHZfcHVyZ2Vfb3JpZ19pZmluZm8oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBcdFx0LyogZG9uJiMzOTt0IHB1cmdlIGlmIHRoZSBpbnRlcmZhY2UgaXMgbm90IChnb2luZykgZG93biAqL1xuIFx0XHRpZiAoaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9JTkFDVElWRSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGlmX291dGdvaW5nLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGlmX291dGdvaW5nLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0xMTI3LDEwICYjNDM7MTEyNSw4IEBAIGJhdGFkdl9wdXJnZV9vcmlnX25laWdoYm9ycyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFxuIFx0XHRpZiAoYmF0YWR2X2hhc190aW1lZF9vdXQobGFzdF9zZWVuLCBCQVRBRFZfUFVSR0VfVElNRU9VVCkgfHxcbiBcdFx0ICAgIGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfSU5BQ1RJVkUgfHxcbi1cdFx0ICAgIGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSB8fFxuIFx0XHQgICAgaWZfaW5jb21pbmctXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKSB7XG4gXHRcdFx0aWYgKGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfSU5BQ1RJVkUgfHxcbi1cdFx0XHQgICAgaWZfaW5jb21pbmctXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8XG4gXHRcdFx0ICAgIGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcbiBcdFx0XHRcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19CQVRNQU4sIGJhdF9wcml2LFxuIFx0XHRcdFx0XHQgICBcJiMzNDtuZWlnaGJvciBwdXJnZTogb3JpZ2luYXRvciAlcE0sIG5laWdoYm9yOiAlcE0sIGlmYWNlOiAlc1xcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jIGIvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuY1xuaW5kZXggYzJlZWE3ZGJjNDg4MzMuLjAwNDY3YWE3OWRlOWRjIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuY1xuQEAgLTM1OCwyOCAmIzQzOzM1OCwxNiBAQCBiYXRhZHZfdHBfbGlzdF9maW5kX3NlbmRlcl9zZXNzaW9uKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QsXG4gfVxuIFxuIC8qKlxuLSAqIGJhdGFkdl90cF92YXJzX2NvbW1vbl9yZWxlYXNlKCkgLSByZWxlYXNlIGJhdGFkdl90cF92YXJzX2NvbW1vbiBmcm9tIGxpc3RzXG4mIzQzOyAqIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZSgpIC0gcmVsZWFzZSBiYXRhZHZfdHBfc2VuZGVyXG4gICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kXG4tICogQHJlZjoga3JlZiBwb2ludGVyIG9mIHRoZSBiYXRhZHZfdHBfdmFyc19jb21tb25cbiYjNDM7ICogQHJlZjoga3JlZiBwb2ludGVyIG9mIHRoZSBiYXRhZHZfdHBfc2VuZGVyXG4gICovXG4tc3RhdGljIHZvaWQgYmF0YWR2X3RwX3ZhcnNfY29tbW9uX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbiYjNDM7c3RhdGljIHZvaWQgYmF0YWR2X3RwX3NlbmRlcl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4ge1xuLVx0c3RydWN0IGJhdGFkdl90cF92YXJzX2NvbW1vbiAqdHBfdmFycztcbi1cdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqdW4sICpzYWZlO1xuLVxuLVx0dHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfdmFyc19jb21tb24sIHJlZmNvdW50KTtcbi1cbi1cdC8qIGxvY2sgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYmVjYXVzZSB0aGlzIG9iamVjdCBpcyBub3cgb3V0IG9mIGFueVxuLVx0ICogY29udGV4dCFcbi1cdCAqL1xuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2dW4tXHUwMDNlbGlzdCk7XG4tXHRcdGtmcmVlKHVuKTtcbi1cdH1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9sb2NrKTtcbiYjNDM7XHRzdHJ1Y3QgYmF0YWR2X3RwX3NlbmRlciAqdHBfdmFycztcbiBcbi1cdGtmcmVlX3JjdSh0cF92YXJzLCByY3UpO1xuJiM0MztcdHRwX3ZhcnMgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X3RwX3NlbmRlciwgY29tbW9uLnJlZmNvdW50KTtcbiYjNDM7XHRrZnJlZV9yY3UodHBfdmFycywgY29tbW9uLnJjdSk7XG4gfVxuIFxuIC8qKlxuQEAgLTM5Miw3ICYjNDM7MzgwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3NlbmRlcl9wdXQoc3RydWN0IGJhdGFkdl90cF9zZW5kZXIgKnRwX3ZhcnMpXG4gXHRpZiAoIXRwX3ZhcnMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGtyZWZfcHV0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnJlZmNvdW50LCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZSk7XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZSk7XG4gfVxuIFxuIC8qKlxuQEAgLTExNDUsOSAmIzQzOzExMzMsNiBAQCB2b2lkIGJhdGFkdl90cF9zdGFydChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0LFxuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZ0cF92YXJzLVx1MDAzZW1vcmVfYnl0ZXMpO1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnRwX3ZhcnMtXHUwMDNlZmluaXNoZWQpO1xuIFxuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XG4tXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0cF92YXJzLVx1MDAzZWNjX2xvY2spO1xuIFxuIFx0dHBfdmFycy1cdTAwM2VwcmVyYW5kb21fb2Zmc2V0ID0gMDtcbkBAIC0xMjUxLDYgJiM0MzsxMjM2LDMzIEBAIGJhdGFkdl90cF9saXN0X2ZpbmRfcmVjZWl2ZXJfc2Vzc2lvbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0XG4gXHRyZXR1cm4gdHBfdmFycztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBiYXRhZHZfdHBfcmVjZWl2ZXJfcmVsZWFzZSgpIC0gcmVsZWFzZSBiYXRhZHZfdHBfcmVjZWl2ZXJcbiYjNDM7ICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kXG4mIzQzOyAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgYmF0YWR2X3RwX3JlY2VpdmVyXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjZWl2ZXJfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycztcbiYjNDM7XHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnNhZmU7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1bjtcbiYjNDM7XG4mIzQzO1x0dHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIsIGNvbW1vbi5yZWZjb3VudCk7XG4mIzQzO1xuJiM0MztcdC8qIGxvY2sgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYmVjYXVzZSB0aGlzIG9iamVjdCBpcyBub3cgb3V0IG9mIGFueVxuJiM0MztcdCAqIGNvbnRleHQhXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0a2ZyZWUodW4pO1xuJiM0MztcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuJiM0MztcbiYjNDM7XHRrZnJlZV9yY3UodHBfdmFycywgY29tbW9uLnJjdSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogYmF0YWR2X3RwX3JlY2VpdmVyX3B1dCgpIC0gZGVjcmVtZW50IHRoZSBiYXRhZHZfdHBfcmVjZWl2ZXJcbiAgKiAgcmVmY291bnRlciBhbmQgcG9zc2libHkgcmVsZWFzZSBpdFxuQEAgLTEyNjEsNyAmIzQzOzEyNzMsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjZWl2ZXJfcHV0KHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMpXG4gXHRpZiAoIXRwX3ZhcnMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGtyZWZfcHV0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnJlZmNvdW50LCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZSk7XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTMwNCwxMyAmIzQzOzEzMTYsMTMgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY2VpdmVyX3NodXRkb3duKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0aWYgKGJhdGFkdl90cF9saXN0X2RldGFjaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbikpXG4gXHRcdGJhdGFkdl90cF9yZWNlaXZlcl9wdXQodHBfdmFycyk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0LCBsaXN0KSB7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2dW4tXHUwMDNlbGlzdCk7XG4gXHRcdGtmcmVlKHVuKTtcbi1cdFx0dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudC0tO1xuJiM0MztcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4gXHR9XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuIFxuIFx0LyogZHJvcCByZWZlcmVuY2Ugb2YgdGltZXIgKi9cbiBcdGlmIChXQVJOX09OKGF0b21pY194Y2hnKFx1MDAyNnRwX3ZhcnMtXHUwMDNlcmVjZWl2aW5nLCAwKSAhPSAxKSlcbkBAIC0xNDAzLDY5ICYjNDM7MTQxNSwxMDYgQEAgc3RhdGljIGludCBiYXRhZHZfdHBfc2VuZF9hY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdCxcbiAgKi9cbiBzdGF0aWMgYm9vbCBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcihzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzLFxuIFx0XHRcdFx0XHQgIHUzMiBzZXFubywgdTMyIHBheWxvYWRfbGVuKVxuLVx0X19tdXN0X2hvbGQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKVxuJiM0MztcdF9fbXVzdF9ob2xkKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spXG4ge1xuLVx0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1biwgKm5ldztcbi1cdGJvb2wgYWRkZWQgPSBmYWxzZTtcbi1cbi1cdG5ldyA9IGttYWxsb2Nfb2JqKCpuZXcsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHVubGlrZWx5KCFuZXcpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRuZXctXHUwMDNlc2Vxbm8gPSBzZXFubztcbi1cdG5ldy1cdTAwM2VsZW4gPSBwYXlsb2FkX2xlbjtcbi1cbi1cdC8qIGlmIHRoZSBsaXN0IGlzIGVtcHR5IGltbWVkaWF0ZWx5IGF0dGFjaCB0aGlzIG5ldyBvYmplY3QgKi9cbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCkpIHtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWxpc3QsIFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQmIzQzOyYjNDM7O1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdH1cbi1cbi1cdC8qIG90aGVyd2lzZSBsb29wIG92ZXIgdGhlIGxpc3QgYW5kIGVpdGhlciBkcm9wIHRoZSBwYWNrZXQgYmVjYXVzZSB0aGlzXG4tXHQgKiBpcyBhIGR1cGxpY2F0ZSBvciBzdG9yZSBpdCBhdCB0aGUgcmlnaHQgcG9zaXRpb24uXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3Q7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICpuZXcgPSBOVUxMO1xuJiM0MztcdHUzMiBlbmRfc2Vxbm8gPSBzZXFubyAmIzQzOyBwYXlsb2FkX2xlbjtcbiYjNDM7XHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnNhZmU7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1bjtcbiYjNDM7XG4mIzQzO1x0LyogbG9vcCBvdmVyIHRoZSBsaXN0IHRvIGZpbmQgZWl0aGVyIGFuIGV4aXN0aW5nIGVudHJ5IHdoaWNoIHRoZSBuZXdcbiYjNDM7XHQgKiBzZXFubyByYW5nZSBjYW4gYmUgbWVyZ2VkIHdpdGggb3IgdGhlIHBvc2l0aW9uIGF0IHdoaWNoIGEgbmV3IGVudHJ5XG4mIzQzO1x0ICogaGFzIHRvIGJlIGluc2VydGVkLlxuIFx0ICpcbiBcdCAqIFRoZSBpdGVyYXRpb24gaXMgZG9uZSBpbiB0aGUgcmV2ZXJzZSB3YXkgYmVjYXVzZSBpdCBpcyBsaWtlbHkgdGhhdFxuIFx0ICogdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0ICh0aGUgb25lIGJlaW5nIHByb2Nlc3NlZCBub3cpIGhhcyBhIGJpZ2dlclxuIFx0ICogc2Vxbm8gdGhhbiBhbGwgdGhlIG90aGVycyBhbHJlYWR5IHN0b3JlZC5cbiBcdCAqL1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCBcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QsIGxpc3QpIHtcbi1cdFx0LyogY2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi9cbi1cdFx0aWYgKG5ldy1cdTAwM2VzZXFubyA9PSB1bi1cdTAwM2VzZXFubykge1xuLVx0XHRcdGlmIChuZXctXHUwMDNlbGVuIFx1MDAzZSB1bi1cdTAwM2VsZW4pXG4tXHRcdFx0XHR1bi1cdTAwM2VsZW4gPSBuZXctXHUwMDNlbGVuO1xuLVx0XHRcdGtmcmVlKG5ldyk7XG4tXHRcdFx0YWRkZWQgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXG4tXHRcdC8qIGxvb2sgZm9yIHRoZSByaWdodCBwb3NpdGlvbiAqL1xuLVx0XHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUobmV3LVx1MDAzZXNlcW5vLCB1bi1cdTAwM2VzZXFubykpXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCBcdTAwMjZ0cF92YXJzLVx1MDAzZXVuYWNrZWRfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0LyogbG9vayBmb3IgdGhlIHJpZ2h0IHBvc2l0aW9uIC0gYW4gdW4gd2hpY2ggaXMgc21hbGxlciAqL1xuJiM0MztcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKHNlcW5vLCB1bi1cdTAwM2VzZXFubykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qIGFzIHNvb24gYXMgYW4gZW50cnkgaGF2aW5nIGEgYmlnZ2VyIHNlcW5vIGlzIGZvdW5kLCB0aGUgbmV3XG4tXHRcdCAqIG9uZSBpcyBhdHRhY2hlZCBfYWZ0ZXJfIGl0LiBJbiB0aGlzIHdheSB0aGUgbGlzdCBpcyBrZXB0IGluXG4tXHRcdCAqIGFzY2VuZGluZyBvcmRlclxuJiM0MztcdFx0Lyogc21hbGxlci9lcXVhbCBzZXFubyB3YXMgZm91bmQgYnV0IHRoZXkgbWlnaHQgYmUgZGlyZWN0bHlcbiYjNDM7XHRcdCAqIGFmdGVyIGFub3RoZXIgb3Igb3ZlcmxhcHBpbmcuIGtlZXAgb25seSBhIHNpbmdsZSBlbnRyeVxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIEl0IGlzIGFscmVhZHkga25vd24gdGhhdDpcbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKlx0dW4tXHUwMDNlc2Vxbm8gXHUwMDNjPSBzZXFub1xuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIFdoZW4gZXN0YWJsaXNoaW5nIHRoYXQ6XG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICpcdHNlcW5vIFx1MDAzYz0gdW4tXHUwMDNlc2Vxbm8gJiM0MzsgdW4tXHUwMDNlbGVuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogVGhlbiBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBhIG5ldyBlbnRyeSBiZWNhdXNlIHRoZVxuJiM0MztcdFx0ICogc21hbGxlci9lcXVhbCBzZXFubyBvZiB1biBtaWdodCBhbHJlYWR5IGNvbnRhaW4gdGhlIG5ld1xuJiM0MztcdFx0ICogcmVjZWl2ZWQgcGFja2V0IG9yIHdlIG9ubHkgYWRkIG5ldyBkYXRhIGRpcmVjdGx5IGFmdGVyXG4mIzQzO1x0XHQgKiB0aGUgZW5kIG9mIHVuLiBUaGUgbGF0dGVyIGNhbiBiZSBpZGVudGlmaWVkIHVzaW5nOlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqXHR1bi1cdTAwM2VzZXFubyAmIzQzOyB1bi1cdTAwM2VsZW4gXHUwMDNjPSBlbmRfc2Vxbm9cbiBcdFx0ICovXG4tXHRcdGxpc3RfYWRkKFx1MDAyNm5ldy1cdTAwM2VsaXN0LCBcdTAwMjZ1bi1cdTAwM2VsaXN0KTtcbi1cdFx0YWRkZWQgPSB0cnVlO1xuLVx0XHR0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmICghYmF0YWR2X3NlcV9iZWZvcmUodW4tXHUwMDNlc2Vxbm8gJiM0MzsgdW4tXHUwMDNlbGVuLCBzZXFubykpIHtcbiYjNDM7XHRcdFx0LyogbmV3IGRhdGEgZGlyZWN0bHkgYWZ0ZXIgdW4/ICovXG4mIzQzO1x0XHRcdGlmICghYmF0YWR2X3NlcV9iZWZvcmUoZW5kX3NlcW5vLCB1bi1cdTAwM2VzZXFubyAmIzQzOyB1bi1cdTAwM2VsZW4pKVxuJiM0MztcdFx0XHRcdHVuLVx1MDAzZWxlbiA9IGVuZF9zZXFubyAtIHVuLVx1MDAzZXNlcW5vO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogdW4gbm93IHJlcHJlc2VudHMgYm90aCBvbGQgdW4gJiM0MzsgbmV3IHJhbmdlIGFuZCBoYXMgdG9cbiYjNDM7XHRcdFx0ICogYmUgdXNlZCB0byBjaGVjayBpZiB0aGUgZ2FwIHRvIHRoZSBuZXh0IHNlcW5vIHJhbmdlXG4mIzQzO1x0XHRcdCAqIHdhcyBjbG9zZWRcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG5ldyA9IHVuO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0LyogYXMgc29vbiBhcyBhbiBlbnRyeSBoYXZpbmcgYSBzbWFsbGVyIHNlcW5vIGlzIGZvdW5kLFxuJiM0MztcdFx0XHQgKiB0aGUgbmV3IG9uZSBpcyBhdHRhY2hlZCBfYWZ0ZXJfIGl0LiBJbiB0aGlzIHdheSB0aGVcbiYjNDM7XHRcdFx0ICogbGlzdCBpcyBrZXB0IGluIGFzY2VuZGluZyBvcmRlclxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cG9zID0gXHUwMDI2dW4tXHUwMDNlbGlzdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0LyogcmVjZWl2ZWQgcGFja2V0IHdpdGggc21hbGxlc3Qgc2Vxbm8gb3V0IG9mIG9yZGVyOyBhZGQgaXQgdG8gZnJvbnQgKi9cbi1cdGlmICghYWRkZWQpIHtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWxpc3QsIFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdC8qIG5vIGVudHJ5IHRvIG1lcmdlIHdpdGggd2FzIGZvdW5kOyBpbnNlcnQgYSBuZXcgb25lIGFmdGVyIHRoZSBlbnRyeVxuJiM0MztcdCAqIHdpdGggdGhlIG5leHQgc21hbGxlciBzZXFubyAob3IgYXQgdGhlIGZyb250IG9mIHRoZSBsaXN0IHdoZW4gdGhlXG4mIzQzO1x0ICogbmV3IHNlcW5vIGlzIHRoZSBzbWFsbGVzdCBvciB0aGUgbGlzdCBpcyBlbXB0eSlcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW5ldykge1xuJiM0MztcdFx0bmV3ID0ga21hbGxvY19vYmooKm5ldywgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIW5ldykpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRuZXctXHUwMDNlc2Vxbm8gPSBzZXFubztcbiYjNDM7XHRcdG5ldy1cdTAwM2VsZW4gPSBwYXlsb2FkX2xlbjtcbiYjNDM7XG4mIzQzO1x0XHRsaXN0X2FkZChcdTAwMjZuZXctXHUwMDNlbGlzdCwgcG9zKTtcbiYjNDM7XHRcdHRwX3ZhcnMtXHUwMDNldW5hY2tlZF9jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBjaGVjayBpZiBuZXcgZmlsbGVkIHRoZSBnYXAgdG8gdGhlIG5leHQgbGlzdCBlbnRyaWVzICovXG4mIzQzO1x0dW4gPSBuZXc7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVlKHVuLCBzYWZlLCBcdTAwMjZ0cF92YXJzLVx1MDAzZXVuYWNrZWRfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKGVuZF9zZXFubywgdW4tXHUwMDNlc2Vxbm8pKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBuZXh0IGVudHJ5IGlzIG92ZXJsYXBwaW5nIG9yIGFkamFjZW50IC0gY29tYmluZSBib3RoICovXG4mIzQzO1x0XHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUoZW5kX3NlcW5vLCB1bi1cdTAwM2VzZXFubyAmIzQzOyB1bi1cdTAwM2VsZW4pKSB7XG4mIzQzO1x0XHRcdGVuZF9zZXFubyA9IHVuLVx1MDAzZXNlcW5vICYjNDM7IHVuLVx1MDAzZWxlbjtcbiYjNDM7XHRcdFx0bmV3LVx1MDAzZWxlbiA9IGVuZF9zZXFubyAtIG5ldy1cdTAwM2VzZXFubztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZ1bi1cdTAwM2VsaXN0KTtcbiYjNDM7XHRcdGtmcmVlKHVuKTtcbiYjNDM7XHRcdHRwX3ZhcnMtXHUwMDNldW5hY2tlZF9jb3VudC0tO1xuIFx0fVxuIFxuIFx0LyogcmVtb3ZlIHRoZSBsYXN0IChiaWdnZXN0KSB1bmFja2VkIHNlcW5vIHdoZW4gbGlzdCBpcyB0b28gbGFyZ2UgKi9cbi1cdGlmICh0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2NvdW50IFx1MDAzZSBCQVRBRFZfVFBfTUFYX1VOQUNLRUQpIHtcbi1cdFx0dW4gPSBsaXN0X2xhc3RfZW50cnkoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0LFxuJiM0MztcdGlmICh0cF92YXJzLVx1MDAzZXVuYWNrZWRfY291bnQgXHUwMDNlIEJBVEFEVl9UUF9NQVhfVU5BQ0tFRCkge1xuJiM0MztcdFx0dW4gPSBsaXN0X2xhc3RfZW50cnkoXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCwgbGlzdCk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuIFx0XHRrZnJlZSh1bik7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQtLTtcbiYjNDM7XHRcdHRwX3ZhcnMtXHUwMDNldW5hY2tlZF9jb3VudC0tO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG5AQCAtMTQ3Nyw3ICYjNDM7MTUyNiw3IEBAIHN0YXRpYyBib29sIGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyKHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMsXG4gICogQHRwX3ZhcnM6IHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIGN1cnJlbnQgVFAgbWV0ZXIgc2Vzc2lvblxuICAqL1xuIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9hY2tfdW5vcmRlcmVkKHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMpXG4tXHRfX211c3RfaG9sZChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spXG4mIzQzO1x0X19tdXN0X2hvbGQoXHUwMDI2dHBfdmFycy1cdTAwM2VhY2tfc2Vxbm9fbG9jaylcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqc2FmZTtcbiBcdHUzMiB0b19hY2s7XG5AQCAtMTQ4NSw3ICYjNDM7MTUzNCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9hY2tfdW5vcmRlcmVkKHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMpXG4gXHQvKiBnbyB0aHJvdWdoIHRoZSB1bmFja2VkIHBhY2tldCBsaXN0IGFuZCBwb3NzaWJseSBBQ0sgdGhlbSBhc1xuIFx0ICogd2VsbFxuIFx0ICovXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCwgbGlzdCkge1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbiBcdFx0LyogdGhlIGxpc3QgaXMgb3JkZXJlZCwgdGhlcmVmb3JlIGl0IGlzIHBvc3NpYmxlIHRvIHN0b3AgYXMgc29vblxuIFx0XHQgKiB0aGVyZSBpcyBhIGdhcCBiZXR3ZWVuIHRoZSBsYXN0IGFja2VkIHNlcW5vIGFuZCB0aGUgc2Vxbm8gb2ZcbiBcdFx0ICogdGhlIHBhY2tldCB1bmRlciBpbnNwZWN0aW9uXG5AQCAtMTQ5MywxNCAmIzQzOzE1NDIsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX2Fja191bm9yZGVyZWQoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycylcbiBcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKHRwX3ZhcnMtXHUwMDNlbGFzdF9yZWN2LCB1bi1cdTAwM2VzZXFubykpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHRvX2FjayA9IHVuLVx1MDAzZXNlcW5vICYjNDM7IHVuLVx1MDAzZWxlbiAtIHRwX3ZhcnMtXHUwMDNlbGFzdF9yZWN2O1xuJiM0MztcdFx0dG9fYWNrID0gdW4tXHUwMDNlc2Vxbm8gJiM0MzsgdW4tXHUwMDNlbGVuO1xuIFxuLVx0XHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUodHBfdmFycy1cdTAwM2VsYXN0X3JlY3YsIHVuLVx1MDAzZXNlcW5vICYjNDM7IHVuLVx1MDAzZWxlbikpXG4tXHRcdFx0dHBfdmFycy1cdTAwM2VsYXN0X3JlY3YgJiM0Mzs9IHRvX2FjaztcbiYjNDM7XHRcdGlmIChiYXRhZHZfc2VxX2JlZm9yZSh0cF92YXJzLVx1MDAzZWxhc3RfcmVjdiwgdG9fYWNrKSlcbiYjNDM7XHRcdFx0dHBfdmFycy1cdTAwM2VsYXN0X3JlY3YgPSB0b19hY2s7XG4gXG4gXHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuIFx0XHRrZnJlZSh1bik7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQtLTtcbiYjNDM7XHRcdHRwX3ZhcnMtXHUwMDNldW5hY2tlZF9jb3VudC0tO1xuIFx0fVxuIH1cbiBcbkBAIC0xNTQ3LDkgJiM0MzsxNTk2LDkgQEAgYmF0YWR2X3RwX2luaXRfcmVjdihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0dHBfdmFycy1cdTAwM2Vjb21tb24uYmF0X3ByaXYgPSBiYXRfcHJpdjtcbiBcdGtyZWZfaW5pdChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG4gXG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0KTtcbi1cdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQgPSAwO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9saXN0KTtcbiYjNDM7XHR0cF92YXJzLVx1MDAzZXVuYWNrZWRfY291bnQgPSAwO1xuIFxuIFx0a3JlZl9nZXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udGltZXIsIGJhdGFkdl90cF9yZWNlaXZlcl9zaHV0ZG93biwgMCk7XG5AQCAtMTYwOSw3ICYjNDM7MTY1OCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWN2X21zZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRXUklURV9PTkNFKHRwX3ZhcnMtXHUwMDNlbGFzdF9yZWN2X3RpbWUsIGppZmZpZXMpO1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuIFxuIFx0LyogaWYgdGhlIHBhY2tldCBpcyBhIGR1cGxpY2F0ZSwgaXQgbWF5IGJlIHRoZSBjYXNlIHRoYXQgYW4gQUNLIGhhcyBiZWVuXG4gXHQgKiBsb3N0LiBSZXNlbmQgdGhlIEFDS1xuQEAgLTE2MjUsNyAmIzQzOzE2NzQsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjdl9tc2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0ICogbm90IGJlZW4gZW5xdWV1ZWQgY29ycmVjdGx5XG4gXHRcdCAqL1xuIFx0XHRpZiAoIWJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyKHRwX3ZhcnMsIHNlcW5vLCBwYXlsb2FkX2xlbikpIHtcbi1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuQEAgLTE2NDEsNyAmIzQzOzE2OTAsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjdl9tc2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBzZW5kX2FjazpcbiBcdHRvX2FjayA9IHRwX3ZhcnMtXHUwMDNlbGFzdF9yZWN2O1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbiBcbiBcdC8qIHNlbmQgdGhlIEFDSy4gSWYgdGhlIHJlY2VpdmVkIHBhY2tldCB3YXMgb3V0IG9mIG9yZGVyLCB0aGUgQUNLIHRoYXRcbiBcdCAqIGlzIGdvaW5nIHRvIGJlIHNlbnQgaXMgYSBkdXBsaWNhdGUgKHRoZSBzZW5kZXIgd2lsbCBjb3VudCB0aGVtIGFuZFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3R2bHYuYyBiL25ldC9iYXRtYW4tYWR2L3R2bHYuY1xuaW5kZXggMWM5ZmIyMTk4NWY2YTUuLjQ5YmYyZWQ5ZWNkYzM5IDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHZsdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi90dmx2LmNcbkBAIC00NDIsNiAmIzQzOzQ0Miw1NCBAQCBzdGF0aWMgaW50IGJhdGFkdl90dmx2X2NhbGxfaGFuZGxlcihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJhdGFkdl90dmx2X2hkcl9uZXh0KCkgLSBtb3ZlIGEgdHZsdiBidWZmZXIgY3Vyc29yIHRvIHRoZSBuZXh0IGNvbnRhaW5lclxuJiM0MzsgKiBAdHZsdl92YWx1ZTogY3Vyc29yIGludG8gdGhlIHR2bHYgYnVmZmVyLCBhZHZhbmNlZCBwYXN0IHRoZSByZXR1cm5lZFxuJiM0MzsgKiAgY29udGFpbmVyJiMzOTtzIGNvbnRlbnQgb24gc3VjY2Vzc1xuJiM0MzsgKiBAdHZsdl92YWx1ZV9sZW46IHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIHR2bHYgYnVmZmVyLCByZWR1Y2VkIGJ5IHRoZSByZXR1cm5lZFxuJiM0MzsgKiAgY29udGFpbmVyJiMzOTtzIHNpemUgb24gc3VjY2Vzc1xuJiM0MzsgKlxuJiM0MzsgKiBQYXJzZXMgYSBzaW5nbGUgY29udGFpbmVyIGhlYWRlciBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gYW5kLCBpZiBhXG4mIzQzOyAqIGNvbXBsZXRlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUsIGFkdmFuY2VzIHRoZSBjdXJzb3IgYW5kIHJlbWFpbmluZyBsZW5ndGhcbiYjNDM7ICogcGFzdCBpdC4gVGhlIHJldHVybmVkIGhlYWRlciBzdGF5cyB2YWxpZDsgaXRzIGNvbnRlbnQgaXMgbG9jYXRlZCBhdFxuJiM0MzsgKiAocmV0dXJuZWQgaGVhZGVyICYjNDM7IDEpIGFuZCBpcyBudG9ocyhoZHItXHUwMDNlbGVuKSBieXRlcyBsb25nLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIG5leHQgdHZsdiBjb250YWluZXIgaGVhZGVyLCBvciBOVUxMIGlmIG5vIGZ1cnRoZXJcbiYjNDM7ICogY29tcGxldGUgY29udGFpbmVyIGlzIHByZXNlbnQgaW4gdGhlIGJ1ZmZlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYmF0YWR2X3R2bHZfaGRyICpiYXRhZHZfdHZsdl9oZHJfbmV4dCh2b2lkICoqdHZsdl92YWx1ZSwgdTE2ICp0dmx2X3ZhbHVlX2xlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiYXRhZHZfdHZsdl9oZHIgKnR2bHZfaGRyO1xuJiM0MztcdHUxNiB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xuJiM0MztcdHZvaWQgKnR2bHZfdmFsdWVfY29udDtcbiYjNDM7XHR1MTYgdHZsdl9sZW47XG4mIzQzO1xuJiM0MztcdHR2bHZfdmFsdWVfY29udCA9ICp0dmx2X3ZhbHVlO1xuJiM0MztcdHR2bHZfbGVuID0gKnR2bHZfdmFsdWVfbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAodHZsdl9sZW4gXHUwMDNjIHNpemVvZigqdHZsdl9oZHIpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHR2bHZfaGRyID0gdHZsdl92YWx1ZV9jb250O1xuJiM0MztcdHR2bHZfdmFsdWVfY29udF9sZW4gPSBudG9ocyh0dmx2X2hkci1cdTAwM2VsZW4pO1xuJiM0MztcdHR2bHZfdmFsdWVfY29udCA9IHR2bHZfaGRyICYjNDM7IDE7XG4mIzQzO1x0dHZsdl9sZW4gLT0gc2l6ZW9mKCp0dmx2X2hkcik7XG4mIzQzO1xuJiM0MztcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFx1MDAzZSB0dmx2X2xlbilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZVxuJiM0MztcdCAqIGFsaWdubWVudCwgc28gaXQgbXVzdCBzdGFydCBhdCBhbiBldmVuIG9mZnNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcdTAwMjYgMSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHQqdHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWVfY29udCAmIzQzOyB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xuJiM0MztcdCp0dmx2X3ZhbHVlX2xlbiA9IHR2bHZfbGVuIC0gdHZsdl92YWx1ZV9jb250X2xlbjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHR2bHZfaGRyO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbigpIC0gY2hlY2sgaWYgYSB0dmx2IGJ1ZmZlciBob2xkcyBhIGNvbnRhaW5lclxuICAqIEB0dmx2X3ZhbHVlOiB0dmx2IGNvbnRlbnRcbkBAIC00NTcsMjggJiM0Mzs1MDUsMTAgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluKHZvaWQgKnR2bHZfdmFsdWUsXG4gXHRcdFx0XHRcdCAgIHU4IHZlcnNpb24pXG4ge1xuIFx0c3RydWN0IGJhdGFkdl90dmx2X2hkciAqdHZsdl9oZHI7XG4tXHR1MTYgdHZsdl92YWx1ZV9jb250X2xlbjtcbi1cbi1cdHdoaWxlICh0dmx2X3ZhbHVlX2xlbiBcdTAwM2U9IHNpemVvZigqdHZsdl9oZHIpKSB7XG4tXHRcdHR2bHZfaGRyID0gdHZsdl92YWx1ZTtcbi1cdFx0dHZsdl92YWx1ZV9jb250X2xlbiA9IG50b2hzKHR2bHZfaGRyLVx1MDAzZWxlbik7XG4tXHRcdHR2bHZfdmFsdWUgPSB0dmx2X2hkciAmIzQzOyAxO1xuLVx0XHR0dmx2X3ZhbHVlX2xlbiAtPSBzaXplb2YoKnR2bHZfaGRyKTtcbi1cbi1cdFx0aWYgKHR2bHZfdmFsdWVfY29udF9sZW4gXHUwMDNlIHR2bHZfdmFsdWVfbGVuKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHQvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZVxuLVx0XHQgKiBhbGlnbm1lbnQsIHNvIGl0IG11c3Qgc3RhcnQgYXQgYW4gZXZlbiBvZmZzZXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcdTAwMjYgMSlcbi1cdFx0XHRicmVhaztcbiBcbiYjNDM7XHR3aGlsZSAoKHR2bHZfaGRyID0gYmF0YWR2X3R2bHZfaGRyX25leHQoXHUwMDI2dHZsdl92YWx1ZSwgXHUwMDI2dHZsdl92YWx1ZV9sZW4pKSkge1xuIFx0XHRpZiAodHZsdl9oZHItXHUwMDNldHlwZSA9PSB0eXBlIFx1MDAyNlx1MDAyNiB0dmx2X2hkci1cdTAwM2V2ZXJzaW9uID09IHZlcnNpb24pXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdHR2bHZfdmFsdWUgPSAodTggKil0dmx2X3ZhbHVlICYjNDM7IHR2bHZfdmFsdWVfY29udF9sZW47XG4tXHRcdHR2bHZfdmFsdWVfbGVuIC09IHR2bHZfdmFsdWVfY29udF9sZW47XG4gXHR9XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG5AQCAtNTExLDIwICYjNDM7NTQxLDggQEAgaW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0dTggY2lmbm90Zm91bmQgPSBCQVRBRFZfVFZMVl9IQU5ETEVSX09HTV9DSUZOT1RGTkQ7XG4gXHRpbnQgcmV0ID0gTkVUX1JYX1NVQ0NFU1M7XG4gXG4tXHR3aGlsZSAodHZsdl92YWx1ZV9sZW4gXHUwMDNlPSBzaXplb2YoKnR2bHZfaGRyKSkge1xuLVx0XHR0dmx2X2hkciA9IHR2bHZfdmFsdWU7XG4mIzQzO1x0d2hpbGUgKCh0dmx2X2hkciA9IGJhdGFkdl90dmx2X2hkcl9uZXh0KFx1MDAyNnR2bHZfdmFsdWUsIFx1MDAyNnR2bHZfdmFsdWVfbGVuKSkpIHtcbiBcdFx0dHZsdl92YWx1ZV9jb250X2xlbiA9IG50b2hzKHR2bHZfaGRyLVx1MDAzZWxlbik7XG4tXHRcdHR2bHZfdmFsdWUgPSB0dmx2X2hkciAmIzQzOyAxO1xuLVx0XHR0dmx2X3ZhbHVlX2xlbiAtPSBzaXplb2YoKnR2bHZfaGRyKTtcbi1cbi1cdFx0aWYgKHR2bHZfdmFsdWVfY29udF9sZW4gXHUwMDNlIHR2bHZfdmFsdWVfbGVuKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHQvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZVxuLVx0XHQgKiBhbGlnbm1lbnQsIHNvIGl0IG11c3Qgc3RhcnQgYXQgYW4gZXZlbiBvZmZzZXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcdTAwMjYgMSlcbi1cdFx0XHRicmVhaztcbiBcbiBcdFx0dHZsdl9oYW5kbGVyID0gYmF0YWR2X3R2bHZfaGFuZGxlcl9nZXQoYmF0X3ByaXYsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHR2bHZfaGRyLVx1MDAzZXR5cGUsXG5AQCAtNTMyLDExICYjNDM7NTUwLDkgQEAgaW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFxuIFx0XHRyZXQgfD0gYmF0YWR2X3R2bHZfY2FsbF9oYW5kbGVyKGJhdF9wcml2LCB0dmx2X2hhbmRsZXIsXG4gXHRcdFx0XHRcdFx0cGFja2V0X3R5cGUsIG9yaWdfbm9kZSwgc2tiLFxuLVx0XHRcdFx0XHRcdHR2bHZfdmFsdWUsXG4mIzQzO1x0XHRcdFx0XHRcdHR2bHZfaGRyICYjNDM7IDEsXG4gXHRcdFx0XHRcdFx0dHZsdl92YWx1ZV9jb250X2xlbik7XG4gXHRcdGJhdGFkdl90dmx2X2hhbmRsZXJfcHV0KHR2bHZfaGFuZGxlcik7XG4tXHRcdHR2bHZfdmFsdWUgPSAodTggKil0dmx2X3ZhbHVlICYjNDM7IHR2bHZfdmFsdWVfY29udF9sZW47XG4tXHRcdHR2bHZfdmFsdWVfbGVuIC09IHR2bHZfdmFsdWVfY29udF9sZW47XG4gXHR9XG4gXG4gXHRpZiAocGFja2V0X3R5cGUgIT0gQkFUQURWX0lWX09HTSBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oIGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaFxuaW5kZXggYjFmOWY4OTY0YzNmZDIuLmNkMTI3NTVkMjFmMzU2IDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaFxuQEAgLTIxNCw5ICYjNDM7MjE0LDYgQEAgc3RydWN0IGJhdGFkdl93aWZpX25ldF9kZXZpY2Vfc3RhdGUge1xuICAqIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAtIG5ldHdvcmsgZGV2aWNlIGtub3duIHRvIGJhdG1hbi1hZHZcbiAgKi9cbiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2Uge1xuLVx0LyoqIEBsaXN0OiBsaXN0IG5vZGUgZm9yIGJhdGFkdl9oYXJkaWZfbGlzdCAqL1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVxuIFx0LyoqIEBpZl9zdGF0dXM6IHN0YXR1cyBvZiB0aGUgaW50ZXJmYWNlIGZvciBiYXRtYW4tYWR2ICovXG4gXHRjaGFyIGlmX3N0YXR1cztcbiBcbkBAIC0xMzM1LDkgJiM0MzsxMzMyLDkgQEAgc3RydWN0IGJhdGFkdl90cF91bmFja2VkIHtcbiBcdHUzMiBzZXFubztcbiBcbiBcdC8qKiBAbGVuOiBsZW5ndGggb2YgdGhlIHBhY2tldCAqL1xuLVx0dTE2IGxlbjtcbiYjNDM7XHR1MzIgbGVuO1xuIFxuLVx0LyoqIEBsaXN0OiBsaXN0IG5vZGUgZm9yIFx1MDAyNmJhdGFkdl90cF92YXJzX2NvbW1vbi51bmFja2VkX2xpc3QgKi9cbiYjNDM7XHQvKiogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgXHUwMDI2YmF0YWR2X3RwX3JlY2VpdmVyLnVuYWNrZWRfbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtMTM2MCwxNSAmIzQzOzEzNTcsNiBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3ZhcnNfY29tbW9uIHtcbiBcdC8qKiBAc2Vzc2lvbjogVFAgc2Vzc2lvbiBpZGVudGlmaWVyICovXG4gXHR1OCBzZXNzaW9uWzJdO1xuIFxuLVx0LyoqIEB1bmFja2VkX2xpc3Q6IGxpc3Qgb2YgdW5hY2tlZCBwYWNrZXRzIChtZXRhLWluZm8gb25seSkgKi9cbi1cdHN0cnVjdCBsaXN0X2hlYWQgdW5hY2tlZF9saXN0O1xuLVxuLVx0LyoqIEB1bmFja2VkX2xvY2s6IHByb3RlY3QgdW5hY2tlZF9saXN0ICYjNDM7IFx1MDAyNmJhdGFkdl90cF9yZWNlaXZlci5sYXN0X3JlY3YgKi9cbi1cdHNwaW5sb2NrX3QgdW5hY2tlZF9sb2NrO1xuLVxuLVx0LyoqIEB1bmFja2VkX2NvdW50OiBudW1iZXIgb2YgdW5hY2tlZCBlbnRyaWVzICovXG4tXHRzaXplX3QgdW5hY2tlZF9jb3VudDtcbi1cbiBcdC8qKiBAcmVmY291bnQ6IG51bWJlciBvZiBjb250ZXh0IHdoZXJlIHRoZSBvYmplY3QgaXMgdXNlZCAqL1xuIFx0c3RydWN0IGtyZWYgcmVmY291bnQ7XG4gXG5AQCAtMTQ4Miw2ICYjNDM7MTQ3MCwxNSBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyIHtcbiBcbiBcdC8qKiBAbGFzdF9yZWN2X3RpbWU6IHRpbWUgKGppZmZpZXMpIGEgbXNnIHdhcyByZWNlaXZlZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsYXN0X3JlY3ZfdGltZTtcbiYjNDM7XG4mIzQzO1x0LyoqIEB1bmFja2VkX2xpc3Q6IGxpc3Qgb2YgdW5hY2tlZCBwYWNrZXRzIChtZXRhLWluZm8gb25seSkgKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIHVuYWNrZWRfbGlzdDtcbiYjNDM7XG4mIzQzO1x0LyoqIEBhY2tfc2Vxbm9fbG9jazogcHJvdGVjdCB1bmFja2VkX2xpc3QgJiM0MzsgXHUwMDI2YmF0YWR2X3RwX3JlY2VpdmVyLmxhc3RfcmVjdiAqL1xuJiM0MztcdHNwaW5sb2NrX3QgYWNrX3NlcW5vX2xvY2s7XG4mIzQzO1xuJiM0MztcdC8qKiBAdW5hY2tlZF9jb3VudDogbnVtYmVyIG9mIHVuYWNrZWQgZW50cmllcyAqL1xuJiM0MztcdHNpemVfdCB1bmFja2VkX2NvdW50O1xuIH07XG4gXG4gLyoqXG5AQCAtMTY3OSw2ICYjNDM7MTY3Niw5IEBAIHN0cnVjdCBiYXRhZHZfcHJpdiB7XG4gXHQvKiogQHRwX251bTogbnVtYmVyIG9mIGN1cnJlbnRseSBhY3RpdmUgdHAgc2Vzc2lvbnMgKi9cbiBcdGF0b21pY190IHRwX251bTtcbiBcbiYjNDM7XHQvKiogQGhhcmRpZl9nZW5lcmF0aW9uOiBnZW5lcmF0aW9uIGNvdW50ZXIgYWRkZWQgdG8gbmV0bGluayBoYXJkaWYgZHVtcHMgKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGFyZGlmX2dlbmVyYXRpb247XG4mIzQzO1xuIFx0LyoqIEBvcmlnX3dvcms6IHdvcmsgcXVldWUgY2FsbGJhY2sgaXRlbSBmb3Igb3JpZyBub2RlIHB1cmdpbmcgKi9cbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgb3JpZ193b3JrO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JBVE1BTl9BRFYmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9CQVRNQU5fViYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX0JMQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9yZWN2X21zZyYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIHJvdXRpbmcgcHJvdG9jb2wuIEl0IG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBoYXJkIGludGVyZmFjZXMgKGFkZGluZy9yZW1vdmluZyB0aGVtIGZyb20gdGhlIG1lc2gpLCB0aGUgcHJvY2Vzc2luZyBvZiBvdXQtb2Ytb3JkZXIgVFAgbWV0ZXIgcGFja2V0cywgYW5kIHRoZSBwYXJzaW5nIG9mIFRWTFYgY29udGFpbmVycy4gVGhlc2UgYXJlIGNvcmUgbG9naWMgY2hhbmdlcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rL3N5c2ZzIGFuZCBuZXR3b3JrIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYTJlZjQxZGQzM2NhZDE2NTk4NjM1ZDIwZTM0ZDUzZjU4ZGU1YzBiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMjE6MjA6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMKaW5kZXggYmIyZjAxMmI0NTRlYTQuLjIyNjIyMjgzZjU5YjBjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jCkBAIC00MDQsMjMgJiM0Mzs0MDQsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBiYXRhZHZfZm9yd19wYWNrZXQgKmZvcndfcGFja2V0LAogLyogc2VuZCBhIGJhdG1hbiBvZ20gcGFja2V0ICovCiBzdGF0aWMgdm9pZCBiYXRhZHZfaXZfb2dtX2VtaXQoc3RydWN0IGJhdGFkdl9mb3J3X3BhY2tldCAqZm9yd19wYWNrZXQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2U7Ci0KIAlpZiAoIWZvcndfcGFja2V0LSZndDtpZl9pbmNvbWluZykgewogCQlwcl9lcnIoJiMzNDtFcnJvciAtIGNhbiYjMzk7dCBmb3J3YXJkIHBhY2tldDogaW5jb21pbmcgaWZhY2Ugbm90IHNwZWNpZmllZFxuJiMzNDspOwogCQlyZXR1cm47CiAJfQogCi0JbWVzaF9pZmFjZSA9IGZvcndfcGFja2V0LSZndDtpZl9pbmNvbWluZy0mZ3Q7bWVzaF9pZmFjZTsKLQogCWlmIChXQVJOX09OKCFmb3J3X3BhY2tldC0mZ3Q7aWZfb3V0Z29pbmcpKQogCQlyZXR1cm47CiAKLQlpZiAoZm9yd19wYWNrZXQtJmd0O2lmX291dGdvaW5nLSZndDttZXNoX2lmYWNlICE9IG1lc2hfaWZhY2UpIHsKLQkJcHJfd2FybigmIzM0OyVzOiBtZXNoIGludGVyZmFjZSBzd2l0Y2ggZm9yIHF1ZXVlZCBPR01cbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KIAlpZiAoZm9yd19wYWNrZXQtJmd0O2lmX2luY29taW5nLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0FDVElWRSkKIAkJcmV0dXJuOwogCkBAIC05MTAsOCAmIzQzOzkwMSw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2NoZWR1bGVfYnVmZihzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpCiAKIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2NoZWR1bGUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogewotCWlmIChoYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UgfHwKLQkgICAgaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKQomIzQzOwlpZiAoaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKQogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZhbXA7aGFyZF9pZmFjZS0mZ3Q7YmF0X2l2Lm9nbV9idWZmX211dGV4KTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmMKaW5kZXggNDg0MWYwZjFhOWIxMzkuLjI2MmU0MDA0MDAwN2NjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYwpAQCAtOTAsMTIgJiM0Mzs5MCw2IEBAIHN0YXRpYyBib29sIGJhdGFkdl92X2VscF9nZXRfdGhyb3VnaHB1dChzdHJ1Y3QgYmF0YWR2X2hhcmRpZl9uZWlnaF9ub2RlICpuZWlnaCwKIAl1MzIgdGhyb3VnaHB1dDsKIAlpbnQgcmV0OwogCi0JLyogZG9uJiMzOTt0IHF1ZXJ5IHRocm91Z2hwdXQgd2hlbiBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoIGFueQotCSAqIGJhdG1hbi1hZHYgaW50ZXJmYWNlCi0JICovCi0JaWYgKCFtZXNoX2lmYWNlKQotCQlyZXR1cm4gZmFsc2U7Ci0KIAkvKiBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBjdXN0b21pc2VkIHZhbHVlIGZvciB0aGlzIGludGVyZmFjZSwgdGhlbgogCSAqIHJldHVybiBpdCBkaXJlY3RseQogCSAqLwpAQCAtMzExLDggJiM0MzszMDUsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9lbHBfcGVyaW9kaWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWdvdG8gb3V0OwogCiAJLyogd2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHNodXR0aW5nIHRoaXMgaW50ZXJmYWNlIGRvd24gKi8KLQlpZiAoaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8Ci0JICAgIGhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRCkKJiM0MzsJaWYgKGhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRCkKIAkJZ290byBvdXQ7CiAKIAkvKiB0aGUgaW50ZXJmYWNlIHdhcyBlbmFibGVkIGJ1dCBtYXkgbm90IGJlIHJlYWR5IHlldCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9vZ20uYwppbmRleCAwMzc5MjFhYWQzNWQ1OC4uZTkyMWQ0OWY3ZWNlZGQgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jCkBAIC0xMTUsMTQgJiM0MzsxMTUsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3N0YXJ0X3RpbWVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpCiAKIC8qKgogICogYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoKSAtIHNlbmQgYSBiYXRtYW4gb2dtIHVzaW5nIGEgZ2l2ZW4gaW50ZXJmYWNlCi0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KICAqIEBza2I6IHRoZSBPR00gdG8gc2VuZAogICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2UgdG8gdXNlIHRvIHNlbmQgdGhlIE9HTQogICovCi1zdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fc2VuZF90b19pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAotCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzO3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSkKIHsKJiM0MzsJc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UpOwomIzQzOwogCWlmIChoYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0FDVElWRSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwpAQCAtMTg5LDcgJiM0MzsxODksNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9saXN0X2ZyZWUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogCiAvKioKICAqIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoKSAtIGZsdXNoICZhbXA7IHNlbmQgYWdncmVnYXRpb24gcXVldWUKLSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvbgogICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUgYWdncmVnYXRpb24gcXVldWUgdG8gZmx1c2gKICAqCiAgKiBBZ2dyZWdhdGVzIGFsbCBPR012MiBwYWNrZXRzIGN1cnJlbnRseSBpbiB0aGUgYWdncmVnYXRpb24gcXVldWUgaW50byBhCkBAIC0xOTksOCAmIzQzOzE5OCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX2xpc3RfZnJlZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpCiAgKgogICogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGhhcmRfaWZhY2UtJmd0O2JhdF92LmFnZ3JfbGlzdC5sb2NrLgogICovCi1zdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCi0JCQkJICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQomIzQzO3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogewogCXVuc2lnbmVkIGludCBhZ2dyX2xlbiA9IGhhcmRfaWZhY2UtJmd0O2JhdF92LmFnZ3JfbGVuOwogCXN0cnVjdCBza19idWZmICpza2JfYWdncjsKQEAgLTIzMCwyNiAmIzQzOzIyOCwyMSBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCWNvbnN1bWVfc2tiKHNrYik7CiAJfQogCi0JYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoYmF0X3ByaXYsIHNrYl9hZ2dyLCBoYXJkX2lmYWNlKTsKJiM0MzsJYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoc2tiX2FnZ3IsIGhhcmRfaWZhY2UpOwogfQogCiAvKioKICAqIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZigpIC0gcXVldWUgYSBiYXRtYW4gb2dtIG9uIGEgZ2l2ZW4gaW50ZXJmYWNlCi0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KICAqIEBza2I6IHRoZSBPR00gdG8gcXVldWUKICAqIEBoYXJkX2lmYWNlOiB0aGUgaW50ZXJmYWNlIHRvIHF1ZXVlIHRoZSBPR00gb24KICAqLwotc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCi0JCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzO3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogewotCWlmIChoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlICE9IGJhdF9wcml2LSZndDttZXNoX2lmYWNlKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQomIzQzOwlzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSk7CiAKIAlpZiAoIVJFQURfT05DRShiYXRfcHJpdi0mZ3Q7YWdncmVnYXRlZF9vZ21zKSkgewotCQliYXRhZHZfdl9vZ21fc2VuZF90b19pZihiYXRfcHJpdiwgc2tiLCBoYXJkX2lmYWNlKTsKJiM0MzsJCWJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHNrYiwgaGFyZF9pZmFjZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI2MCw3ICYjNDM7MjUzLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJfQogCiAJaWYgKCFiYXRhZHZfdl9vZ21fcXVldWVfbGVmdChza2IsIGhhcmRfaWZhY2UpKQotCQliYXRhZHZfdl9vZ21fYWdncl9zZW5kKGJhdF9wcml2LCBoYXJkX2lmYWNlKTsKJiM0MzsJCWJhdGFkdl92X29nbV9hZ2dyX3NlbmQoaGFyZF9pZmFjZSk7CiAKIAloYXJkX2lmYWNlLSZndDtiYXRfdi5hZ2dyX2xlbiAmIzQzOz0gYmF0YWR2X3Zfb2dtX2xlbihza2IpOwogCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtoYXJkX2lmYWNlLSZndDtiYXRfdi5hZ2dyX2xpc3QsIHNrYik7CkBAIC0zNTcsNyAmIzQzOzM1MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zZW5kX21lc2hpZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KQogCQkJYnJlYWs7CiAJCX0KIAotCQliYXRhZHZfdl9vZ21fcXVldWVfb25faWYoYmF0X3ByaXYsIHNrYl90bXAsIGhhcmRfaWZhY2UpOwomIzQzOwkJYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHNrYl90bXAsIGhhcmRfaWZhY2UpOwogCQliYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0zOTcsMTQgJiM0MzszOTAsMTIgQEAgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2VfYmF0X3YgKmJhdHY7CiAJc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlOwotCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7CiAKIAliYXR2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZV9iYXRfdiwgYWdncl93cS53b3JrKTsKIAloYXJkX2lmYWNlID0gY29udGFpbmVyX29mKGJhdHYsIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSwgYmF0X3YpOwotCWJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSk7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtoYXJkX2lmYWNlLSZndDtiYXRfdi5hZ2dyX2xpc3QubG9jayk7Ci0JYmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChiYXRfcHJpdiwgaGFyZF9pZmFjZSk7CiYjNDM7CWJhdGFkdl92X29nbV9hZ2dyX3NlbmQoaGFyZF9pZmFjZSk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtoYXJkX2lmYWNlLSZndDtiYXRfdi5hZ2dyX2xpc3QubG9jayk7CiAKIAliYXRhZHZfdl9vZ21fc3RhcnRfcXVldWVfdGltZXIoaGFyZF9pZmFjZSk7CkBAIC02MDEsNyAmIzQzOzU5Miw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9mb3J3YXJkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCSAgIGlmX291dGdvaW5nLSZndDtuZXRfZGV2LSZndDtuYW1lLCBudG9obChvZ21fZm9yd2FyZC0mZ3Q7dGhyb3VnaHB1dCksCiAJCSAgIG9nbV9mb3J3YXJkLSZndDt0dGwsIGlmX2luY29taW5nLSZndDtuZXRfZGV2LSZndDtuYW1lKTsKIAotCWJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihiYXRfcHJpdiwgc2tiLCBpZl9vdXRnb2luZyk7CiYjNDM7CWJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihza2IsIGlmX291dGdvaW5nKTsKIAogb3V0OgogCWJhdGFkdl9vcmlnX2lmaW5mb19wdXQob3JpZ19pZmluZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYwppbmRleCA1YzczZjZiYTE2Y2ZmMy4uZjlhMWZhZGY4ZGU5ZTQgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jCkBAIC0zNDQsNyAmIzQzOzM0NCw2IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwogCXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTsKIAl1OCAqaHdfc3JjOwogCXN0cnVjdCBiYXRhZHZfYmxhX2NsYWltX2RzdCBsb2NhbF9jbGFpbV9kZXN0OwogCV9fYmUzMiB6ZXJvaXAgPSAwOwpAQCAtMzU3LDE0ICYjNDM7MzU2LDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLAogCSAgICAgICBzaXplb2YobG9jYWxfY2xhaW1fZGVzdCkpOwogCWxvY2FsX2NsYWltX2Rlc3QudHlwZSA9IGNsYWltdHlwZTsKIAotCW1lc2hfaWZhY2UgPSBSRUFEX09OQ0UocHJpbWFyeV9pZi0mZ3Q7bWVzaF9pZmFjZSk7Ci0JaWYgKCFtZXNoX2lmYWNlKQotCQlnb3RvIG91dDsKLQogCXNrYiA9IGFycF9jcmVhdGUoQVJQT1BfUkVQTFksIEVUSF9QX0FSUCwKIAkJCSAvKiBJUCBEU1Q6IDAuMC4wLjAgKi8KIAkJCSB6ZXJvaXAsCi0JCQkgbWVzaF9pZmFjZSwKJiM0MzsJCQkgcHJpbWFyeV9pZi0mZ3Q7bWVzaF9pZmFjZSwKIAkJCSAvKiBJUCBTUkM6IDAuMC4wLjAgKi8KIAkJCSB6ZXJvaXAsCiAJCQkgLyogRXRoZXJuZXQgRFNUOiBCcm9hZGNhc3QgKi8KQEAgLTQ0Miw3ICYjNDM7NDM3LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsCiAJfQogCiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBtZXNoX2lmYWNlKTsKJiM0MzsJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcHJpbWFyeV9pZi0mZ3Q7bWVzaF9pZmFjZSk7CiAJYmF0YWR2X2luY19jb3VudGVyKGJhdF9wcml2LCBCQVRBRFZfQ05UX1JYKTsKIAliYXRhZHZfYWRkX2NvdW50ZXIoYmF0X3ByaXYsIEJBVEFEVl9DTlRfUlhfQllURVMsCiAJCQkgICBza2ItJmd0O2xlbiAmIzQzOyBFVEhfSExFTik7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jIGIvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYwppbmRleCAwM2QwMWMyMGE5NTQ4Yi4uYjY4Njc1NzZiYmFmYWUgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYwpAQCAtNjMsNiAmIzQzOzYzLDcgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKIAlzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7CiAKIAloYXJkX2lmYWNlID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlLCByZWZjb3VudCk7CiYjNDM7CW5ldGRldl9wdXQoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSwgJmFtcDtoYXJkX2lmYWNlLSZndDttZXNoaWZfZGV2X3RyYWNrZXIpOwogCW5ldGRldl9wdXQoaGFyZF9pZmFjZS0mZ3Q7bmV0X2RldiwgJmFtcDtoYXJkX2lmYWNlLSZndDtkZXZfdHJhY2tlcik7CiAKIAlrZnJlZV9yY3UoaGFyZF9pZmFjZSwgcmN1KTsKQEAgLTc1LDIxICYjNDM7NzYsMjEgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKICAqIFJldHVybjogYmF0YWR2X2hhcmRfaWZhY2Ugb2YgbmV0X2RldiAod2l0aCBpbmNyZWFzZWQgcmVmY250KSwgTlVMTCBvbiBlcnJvcnMKICAqLwogc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICoKLWJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKJiM0MztiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCiB7CiAJc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoYXJkX2lmYWNlLCAmYW1wO2JhdGFkdl9oYXJkaWZfbGlzdCwgbGlzdCkgewotCQlpZiAoaGFyZF9pZmFjZS0mZ3Q7bmV0X2RldiA9PSBuZXRfZGV2ICZhbXA7JmFtcDsKLQkJICAgIGtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7aGFyZF9pZmFjZS0mZ3Q7cmVmY291bnQpKQotCQkJZ290byBvdXQ7Ci0JfQomIzQzOwlBU1NFUlRfUlROTCgpOwogCi0JaGFyZF9pZmFjZSA9IE5VTEw7CiYjNDM7CW1lc2hfaWZhY2UgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobmV0X2Rldik7CiYjNDM7CWlmICghbWVzaF9pZmFjZSB8fCAhYmF0YWR2X21lc2hpZl9pc192YWxpZChtZXNoX2lmYWNlKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwloYXJkX2lmYWNlID0gbmV0ZGV2X2xvd2VyX2Rldl9nZXRfcHJpdmF0ZShtZXNoX2lmYWNlLCBuZXRfZGV2KTsKJiM0MzsJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmYW1wO2hhcmRfaWZhY2UtJmd0O3JlZmNvdW50KSkKJiM0MzsJCXJldHVybiBOVUxMOwogCi1vdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGhhcmRfaWZhY2U7CiB9CiAKQEAgLTI0NSw3ICYjNDM7MjQ2LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKl9fYmF0YWR2X2dldF9yZWFsX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCX0KIAogCWhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYobmV0ZGV2KTsKLQlpZiAoIWhhcmRfaWZhY2UgfHwgIWhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UpCiYjNDM7CWlmICghaGFyZF9pZmFjZSkKIAkJZ290byBvdXQ7CiAKIAluZXQgPSBkZXZfbmV0KGhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UpOwpAQCAtNTM5LDE2ICYjNDM7NTQwLDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhCiAJY29uc3Qgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICp0bXBfaGFyZF9pZmFjZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOwogCi0JaWYgKCFtZXNoX2lmYWNlKQotCQlyZXR1cm47Ci0KIAluZXRkZXZfZm9yX2VhY2hfbG93ZXJfcHJpdmF0ZShtZXNoX2lmYWNlLCB0bXBfaGFyZF9pZmFjZSwgaXRlcikgewogCQlpZiAodG1wX2hhcmRfaWZhY2UgPT0gaGFyZF9pZmFjZSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICh0bXBfaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFKQotCQkJY29udGludWU7Ci0KIAkJaWYgKCFiYXRhZHZfY29tcGFyZV9ldGgodG1wX2hhcmRfaWZhY2UtJmd0O25ldF9kZXYtJmd0O2Rldl9hZGRyLAogCQkJCQloYXJkX2lmYWNlLSZndDtuZXRfZGV2LSZndDtkZXZfYWRkcikpCiAJCQljb250aW51ZTsKQEAgLTU3NCw5ICYjNDM7NTY5LDYgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2hhcmRpZl9yZWNhbGNfZXh0cmFfc2ticm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSkKIAogCXJjdV9yZWFkX2xvY2soKTsKIAluZXRkZXZfZm9yX2VhY2hfbG93ZXJfcHJpdmF0ZV9yY3UobWVzaF9pZmFjZSwgaGFyZF9pZmFjZSwgaXRlcikgewotCQlpZiAoaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFKQotCQkJY29udGludWU7Ci0KIAkJbG93ZXJfaGVhZGVyX2xlbiA9IG1heF90KHVuc2lnbmVkIHNob3J0LCBsb3dlcl9oZWFkZXJfbGVuLAogCQkJCQkgaGFyZF9pZmFjZS0mZ3Q7bmV0X2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKIApAQCAtNzIzLDM4ICYjNDM7NzE1LDYzIEBAIGJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogfQogCiAvKioKLSAqIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSgpIC0gRW5zbGF2ZSBoYXJkIGludGVyZmFjZSB0byBtZXNoIGludGVyZmFjZQotICogQGhhcmRfaWZhY2U6IGhhcmQgaW50ZXJmYWNlIHRvIGFkZCB0byBtZXNoIGludGVyZmFjZQomIzQzOyAqIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSgpIC0gRW5zbGF2ZSBpbnRlcmZhY2UgdG8gbWVzaCBpbnRlcmZhY2UKJiM0MzsgKiBAbmV0X2RldjogbmV0ZGV2IHN0cnVjdCBvZiB0aGUgaW50ZXJmYWNlIHRvIGFkZCB0byBtZXNoIGludGVyZmFjZQogICogQG1lc2hfaWZhY2U6IG5ldGRldiBzdHJ1Y3Qgb2YgdGhlIG1lc2ggaW50ZXJmYWNlCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIGluIGNhc2Ugb2YgZmFpbHVyZQogICovCi1pbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSwKJiM0MztpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKQogewogCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7CiAJX19iZTE2IGV0aGVydHlwZSA9IGh0b25zKEVUSF9QX0JBVE1BTik7CiAJaW50IG1heF9oZWFkZXJfbGVuID0gYmF0YWR2X21heF9oZWFkZXJfbGVuKCk7CiYjNDM7CXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTsKIAl1bnNpZ25lZCBpbnQgcmVxdWlyZWRfbXR1OwogCXVuc2lnbmVkIGludCBoYXJkaWZfbXR1OwogCWJvb2wgZnJhZ21lbnRhdGlvbjsKIAlpbnQgcmV0OwogCi0JaGFyZGlmX210dSA9IFJFQURfT05DRShoYXJkX2lmYWNlLSZndDtuZXRfZGV2LSZndDttdHUpOwomIzQzOwlBU1NFUlRfUlROTCgpOwomIzQzOwomIzQzOwlpZiAoIWJhdGFkdl9pc192YWxpZF9pZmFjZShuZXRfZGV2KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwloYXJkaWZfbXR1ID0gUkVBRF9PTkNFKG5ldF9kZXYtJmd0O210dSk7CiAJcmVxdWlyZWRfbXR1ID0gUkVBRF9PTkNFKG1lc2hfaWZhY2UtJmd0O210dSkgJiM0MzsgbWF4X2hlYWRlcl9sZW47CiAKIAlpZiAoaGFyZGlmX210dSAmbHQ7IEVUSF9NSU5fTVRVICYjNDM7IG1heF9oZWFkZXJfbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChoYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpCi0JCWdvdG8gb3V0OwomIzQzOwloYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIWhhcmRfaWZhY2UpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAotCWtyZWZfZ2V0KCZhbXA7aGFyZF9pZmFjZS0mZ3Q7cmVmY291bnQpOwomIzQzOwluZXRkZXZfaG9sZChuZXRfZGV2LCAmYW1wO2hhcmRfaWZhY2UtJmd0O2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKJiM0MzsJaGFyZF9pZmFjZS0mZ3Q7bmV0X2RldiA9IG5ldF9kZXY7CiYjNDM7CiYjNDM7CWhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9IEJBVEFEVl9JRl9JTkFDVElWRTsKJiM0MzsKJiM0MzsJSU5JVF9ITElTVF9IRUFEKCZhbXA7aGFyZF9pZmFjZS0mZ3Q7bmVpZ2hfbGlzdCk7CiYjNDM7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtoYXJkX2lmYWNlLSZndDtiYXRfaXYub2dtX2J1ZmZfbXV0ZXgpOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2hhcmRfaWZhY2UtJmd0O25laWdoX2xpc3RfbG9jayk7CiYjNDM7CWtyZWZfaW5pdCgmYW1wO2hhcmRfaWZhY2UtJmd0O3JlZmNvdW50KTsKJiM0MzsKJiM0MzsJaGFyZF9pZmFjZS0mZ3Q7bnVtX2JjYXN0cyA9IEJBVEFEVl9OVU1fQkNBU1RTX0RFRkFVTFQ7CiYjNDM7CWlmIChiYXRhZHZfaXNfd2lmaV9oYXJkaWYoaGFyZF9pZmFjZSkpCiYjNDM7CQloYXJkX2lmYWNlLSZndDtudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfV0lSRUxFU1M7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoaGFyZF9pZmFjZS0mZ3Q7aG9wX3BlbmFsdHksIDApOwomIzQzOwomIzQzOwliYXRhZHZfdl9oYXJkaWZfaW5pdChoYXJkX2lmYWNlKTsKIAogCW5ldGRldl9ob2xkKG1lc2hfaWZhY2UsICZhbXA7aGFyZF9pZmFjZS0mZ3Q7bWVzaGlmX2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKIAloYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlID0gbWVzaF9pZmFjZTsKIAliYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UpOwogCiYjNDM7CWJhdF9wcml2LSZndDtoYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7CiAJcmV0ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGluayhoYXJkX2lmYWNlLSZndDtuZXRfZGV2LAogCQkJCQkgICBtZXNoX2lmYWNlLCBoYXJkX2lmYWNlLCBOVUxMLCBOVUxMKTsKIAlpZiAocmV0KQpAQCAtNzY0LDkgJiM0Mzs3ODEsNiBAQCBpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSwKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBlcnJfdXBwZXI7CiAKLQloYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgPSBCQVRBRFZfSUZfSU5BQ1RJVkU7Ci0KLQlrcmVmX2dldCgmYW1wO2hhcmRfaWZhY2UtJmd0O3JlZmNvdW50KTsKIAloYXJkX2lmYWNlLSZndDtiYXRtYW5fYWR2X3B0eXBlLnR5cGUgPSBldGhlcnR5cGU7CiAJaGFyZF9pZmFjZS0mZ3Q7YmF0bWFuX2Fkdl9wdHlwZS5mdW5jID0gYmF0YWR2X2JhdG1hbl9za2JfcmVjdjsKIAloYXJkX2lmYWNlLSZndDtiYXRtYW5fYWR2X3B0eXBlLmRldiA9IGhhcmRfaWZhY2UtJmd0O25ldF9kZXY7CkBAIC04MDIsMTQgJiM0Mzs4MTYsMTEgQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsCiAJaWYgKGJhdF9wcml2LSZndDthbGdvX29wcy0mZ3Q7aWZhY2UuZW5hYmxlZCkKIAkJYmF0X3ByaXYtJmd0O2FsZ29fb3BzLSZndDtpZmFjZS5lbmFibGVkKGhhcmRfaWZhY2UpOwogCi1vdXQ6CiAJcmV0dXJuIDA7CiAKIGVycl91cHBlcjoKIAluZXRkZXZfdXBwZXJfZGV2X3VubGluayhoYXJkX2lmYWNlLSZndDtuZXRfZGV2LCBtZXNoX2lmYWNlKTsKIGVycl9kZXY6Ci0JaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSA9IE5VTEw7Ci0JbmV0ZGV2X3B1dChtZXNoX2lmYWNlLCAmYW1wO2hhcmRfaWZhY2UtJmd0O21lc2hpZl9kZXZfdHJhY2tlcik7CiAJYmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgyMSwxNyAmIzQzOzgzMiwxOCBAQCBpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSwKIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpCiB7CiAJc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UpOwotCXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKIAogCWJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7CiAKIAlpZiAoaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzICE9IEJBVEFEVl9JRl9JTkFDVElWRSkKLQkJZ290byBvdXQ7CiYjNDM7CQlyZXR1cm47CiAKIAliYXRhZHZfaW5mbyhoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlLCAmIzM0O1JlbW92aW5nIGludGVyZmFjZTogJXNcbiYjMzQ7LAogCQkgICAgaGFyZF9pZmFjZS0mZ3Q7bmV0X2Rldi0mZ3Q7bmFtZSk7CiAJZGV2X3JlbW92ZV9wYWNrKCZhbXA7aGFyZF9pZmFjZS0mZ3Q7YmF0bWFuX2Fkdl9wdHlwZSk7Ci0JYmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7CiAKIAlwcmltYXJ5X2lmID0gYmF0YWR2X3ByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKIAlpZiAoaGFyZF9pZmFjZSA9PSBwcmltYXJ5X2lmKSB7CkBAIC04NDIsMTUgJiM0Mzs4NTQsMTYgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSkKIAogCQliYXRhZHZfaGFyZGlmX3B1dChuZXdfaWYpOwogCX0KJiM0MzsJYmF0YWR2X2hhcmRpZl9wdXQocHJpbWFyeV9pZik7CiAKIAliYXRfcHJpdi0mZ3Q7YWxnb19vcHMtJmd0O2lmYWNlLmRpc2FibGUoaGFyZF9pZmFjZSk7Ci0JaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID0gQkFUQURWX0lGX05PVF9JTl9VU0U7CiYjNDM7CWhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEOwogCiAJLyogZGVsZXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgaGFyZF9pZmFjZSAqLwogCWJhdGFkdl9wdXJnZV9vcmlnX3JlZihiYXRfcHJpdik7CiAJYmF0YWR2X3B1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoYmF0X3ByaXYsIGhhcmRfaWZhY2UpOwotCW5ldGRldl9wdXQoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSwgJmFtcDtoYXJkX2lmYWNlLSZndDttZXNoaWZfZGV2X3RyYWNrZXIpOwogCiYjNDM7CWJhdF9wcml2LSZndDtoYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7CiAJbmV0ZGV2X3VwcGVyX2Rldl91bmxpbmsoaGFyZF9pZmFjZS0mZ3Q7bmV0X2RldiwgaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSk7CiAJYmF0YWR2X2hhcmRpZl9yZWNhbGNfZXh0cmFfc2ticm9vbShoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlKTsKIApAQCAtODU4LDY3ICYjNDM7ODcxLDYgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSkKIAlpZiAobGlzdF9lbXB0eSgmYW1wO2hhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UtJmd0O2Fkal9saXN0Lmxvd2VyKSkKIAkJYmF0YWR2X2d3X2NoZWNrX2NsaWVudF9zdG9wKGJhdF9wcml2KTsKIAotCWhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UgPSBOVUxMOwotCWJhdGFkdl9oYXJkaWZfcHV0KGhhcmRfaWZhY2UpOwotCi1vdXQ6Ci0JYmF0YWR2X2hhcmRpZl9wdXQocHJpbWFyeV9pZik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKgotYmF0YWR2X2hhcmRpZl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQotewotCXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTsKLQotCUFTU0VSVF9SVE5MKCk7Ci0KLQlpZiAoIWJhdGFkdl9pc192YWxpZF9pZmFjZShuZXRfZGV2KSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQloYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpOwotCWlmICghaGFyZF9pZmFjZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQluZXRkZXZfaG9sZChuZXRfZGV2LCAmYW1wO2hhcmRfaWZhY2UtJmd0O2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKLQloYXJkX2lmYWNlLSZndDtuZXRfZGV2ID0gbmV0X2RldjsKLQotCWhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UgPSBOVUxMOwotCWhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9IEJBVEFEVl9JRl9OT1RfSU5fVVNFOwotCi0JSU5JVF9MSVNUX0hFQUQoJmFtcDtoYXJkX2lmYWNlLSZndDtsaXN0KTsKLQlJTklUX0hMSVNUX0hFQUQoJmFtcDtoYXJkX2lmYWNlLSZndDtuZWlnaF9saXN0KTsKLQotCW11dGV4X2luaXQoJmFtcDtoYXJkX2lmYWNlLSZndDtiYXRfaXYub2dtX2J1ZmZfbXV0ZXgpOwotCXNwaW5fbG9ja19pbml0KCZhbXA7aGFyZF9pZmFjZS0mZ3Q7bmVpZ2hfbGlzdF9sb2NrKTsKLQlrcmVmX2luaXQoJmFtcDtoYXJkX2lmYWNlLSZndDtyZWZjb3VudCk7Ci0KLQloYXJkX2lmYWNlLSZndDtudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfREVGQVVMVDsKLQlpZiAoYmF0YWR2X2lzX3dpZmlfaGFyZGlmKGhhcmRfaWZhY2UpKQotCQloYXJkX2lmYWNlLSZndDtudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfV0lSRUxFU1M7Ci0KLQlXUklURV9PTkNFKGhhcmRfaWZhY2UtJmd0O2hvcF9wZW5hbHR5LCAwKTsKLQotCWJhdGFkdl92X2hhcmRpZl9pbml0KGhhcmRfaWZhY2UpOwotCi0Ja3JlZl9nZXQoJmFtcDtoYXJkX2lmYWNlLSZndDtyZWZjb3VudCk7Ci0JbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtoYXJkX2lmYWNlLSZndDtsaXN0LCAmYW1wO2JhdGFkdl9oYXJkaWZfbGlzdCk7Ci0JYmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uJiM0MzsmIzQzOzsKLQotCXJldHVybiBoYXJkX2lmYWNlOwotfQotCi1zdGF0aWMgdm9pZCBiYXRhZHZfaGFyZGlmX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQotewotCUFTU0VSVF9SVE5MKCk7Ci0KLQkvKiBmaXJzdCBkZWFjdGl2YXRlIGludGVyZmFjZSAqLwotCWlmIChoYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpCi0JCWJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7Ci0KLQlpZiAoaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzICE9IEJBVEFEVl9JRl9OT1RfSU5fVVNFKQotCQlyZXR1cm47Ci0KLQloYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRDsKIAliYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTsKIH0KIApAQCAtMTA4MiwxMCAmIzQzOzEwMzQsNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9oYXJkX2lmX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKIAliYXRhZHZfd2lmaV9uZXRfZGV2aWNlX2V2ZW50KGV2ZW50LCBuZXRfZGV2KTsKIAogCWhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYobmV0X2Rldik7Ci0JaWYgKCFoYXJkX2lmYWNlICZhbXA7JmFtcDsgKGV2ZW50ID09IE5FVERFVl9SRUdJU1RFUiB8fAotCQkJICAgIGV2ZW50ID09IE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFKSkKLQkJaGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfYWRkX2ludGVyZmFjZShuZXRfZGV2KTsKLQogCWlmICghaGFyZF9pZmFjZSkKIAkJZ290byBvdXQ7CiAKQEAgLTEwOTksMTkgJiM0MzsxMDQ3LDEyIEBAIHN0YXRpYyBpbnQgYmF0YWR2X2hhcmRfaWZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAogCQlicmVhazsKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgogCWNhc2UgTkVUREVWX1BSRV9UWVBFX0NIQU5HRToKLQkJbGlzdF9kZWxfcmN1KCZhbXA7aGFyZF9pZmFjZS0mZ3Q7bGlzdCk7Ci0JCWJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7Ci0KLQkJYmF0YWR2X2hhcmRpZl9yZW1vdmVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpOwomIzQzOwkJYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfQ0hBTkdFTVRVOgotCQlpZiAoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSkKLQkJCWJhdGFkdl91cGRhdGVfbWluX210dShoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlKTsKJiM0MzsJCWJhdGFkdl91cGRhdGVfbWluX210dShoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfQ0hBTkdFQUREUjoKLQkJaWYgKGhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSkKLQkJCWdvdG8gaGFyZGlmX3B1dDsKLQogCQliYXRhZHZfY2hlY2tfa25vd25fbWFjX2FkZHIoaGFyZF9pZmFjZSk7CiAKIAkJYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlKTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmggYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oCmluZGV4IGFmMzE2OTZjMzk3ODA4Li45MzVmNDdjYTlhNDhmZCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oCkBAIC0yMSwxMiAmIzQzOzIxLDYgQEAKICAqIGVudW0gYmF0YWR2X2hhcmRfaWZfc3RhdGUgLSBTdGF0ZSBvZiBhIGhhcmQgaW50ZXJmYWNlCiAgKi8KIGVudW0gYmF0YWR2X2hhcmRfaWZfc3RhdGUgewotCS8qKgotCSAqIEBCQVRBRFZfSUZfTk9UX0lOX1VTRTogaW50ZXJmYWNlIGlzIG5vdCB1c2VkIGFzIHNsYXZlIGludGVyZmFjZSBvZiBhCi0JICogYmF0bWFuLWFkdiBtZXNoIGludGVyZmFjZQotCSAqLwotCUJBVEFEVl9JRl9OT1RfSU5fVVNFLAotCiAJLyoqCiAJICogQEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEOiBpbnRlcmZhY2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gbWVzaAogCSAqIGludGVyZmFjZQpAQCAtNzQsOCAmIzQzOzY4LDggQEAgdTMyIGJhdGFkdl9uZXRkZXZfZ2V0X3dpZmlfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwogdTMyIGJhdGFkdl9oYXJkaWZfZ2V0X3dpZmlfZmxhZ3Moc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKTsKIGJvb2wgYmF0YWR2X2lzX3dpZmlfaGFyZGlmKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSk7CiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UqCi1iYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwotaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsCiYjNDM7YmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKJiM0MztpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTsKIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpOwogaW50IGJhdGFkdl9oYXJkaWZfbWluX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmMgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmMKaW5kZXggM2M0NTcyMjg0YjUzMmYuLjA0YmIwMzBlZjI5OWFjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jCkBAIC01OSwxMSAmIzQzOzU5LDYgQEAKICNpbmNsdWRlICYjMzQ7dHBfbWV0ZXIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYW5zbGF0aW9uLXRhYmxlLmgmIzM0OwogCi0vKiBMaXN0IG1hbmlwdWxhdGlvbnMgb24gaGFyZGlmX2xpc3QgaGF2ZSB0byBiZSBydG5sX2xvY2soKSYjMzk7ZWQsCi0gKiBsaXN0IHRyYXZlcnNhbHMganVzdCByY3UtbG9ja2VkCi0gKi8KLXN0cnVjdCBsaXN0X2hlYWQgYmF0YWR2X2hhcmRpZl9saXN0OwotdW5zaWduZWQgaW50IGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbjsKIHN0YXRpYyBpbnQgKCpiYXRhZHZfcnhfaGFuZGxlclsyNTZdKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpyZWN2X2lmKTsKIApAQCAtOTUsNyAmIzQzOzkwLDYgQEAgc3RhdGljIGludCBfX2luaXQgYmF0YWR2X2luaXQodm9pZCkKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCUlOSVRfTElTVF9IRUFEKCZhbXA7YmF0YWR2X2hhcmRpZl9saXN0KTsKIAliYXRhZHZfYWxnb19pbml0KCk7CiAKIAliYXRhZHZfcmVjdl9oYW5kbGVyX2luaXQoKTsKQEAgLTQ1MCw5ICYjNDM7NDQ0LDYgQEAgaW50IGJhdGFkdl9iYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAodW5saWtlbHkoc2tiLSZndDttYWNfbGVuICE9IEVUSF9ITEVOIHx8ICFza2JfbWFjX2hlYWRlcihza2IpKSkKIAkJZ290byBlcnJfZnJlZTsKIAotCWlmICghaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSkKLQkJZ290byBlcnJfZnJlZTsKLQogCWJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSk7CiAKIAlpZiAoUkVBRF9PTkNFKGJhdF9wcml2LSZndDttZXNoX3N0YXRlKSAhPSBCQVRBRFZfTUVTSF9BQ1RJVkUpCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmggYi9uZXQvYmF0bWFuLWFkdi9tYWluLmgKaW5kZXggZjY4ZmM4YjcyMzljZDUuLmU3Mzg3NThlZTRhN2FlIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9tYWluLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5oCkBAIC0yMjYsOSAmIzQzOzIyNiw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJhdGFkdl9wcmludF92aWQodW5zaWduZWQgc2hvcnQgdmlkKQogCQlyZXR1cm4gLTE7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGJhdGFkdl9oYXJkaWZfbGlzdDsKLWV4dGVybiB1bnNpZ25lZCBpbnQgYmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uOwotCiBleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJhdGFkdl9ldmVudF93b3JrcXVldWU7CiAKIGludCBiYXRhZHZfbWVzaF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCmluZGV4IDQ0MDI2ODEwYjk5Y2VhLi5hMzczNjhjMWY1YjU1YyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCkBAIC04MzYsMTggJiM0Mzs4MzYsNyBAQCBzdGF0aWMgaW50IGJhdGFkdl9tZXNoaWZfc2xhdmVfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldiwKIAkJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7Ci0Jc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlOwotCWludCByZXQgPSAtRUlOVkFMOwotCi0JaGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihzbGF2ZV9kZXYpOwotCWlmICghaGFyZF9pZmFjZSB8fCBoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlKQotCQlnb3RvIG91dDsKLQotCXJldCA9IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlLCBkZXYpOwotCi1vdXQ6Ci0JYmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzbGF2ZV9kZXYsIGRldik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jIGIvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jCmluZGV4IDRjZjllM2M1NGFkM2IyLi5kMmJjNDhjNzA3MTQzNCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L25ldGxpbmsuYwpAQCAtOTY4LDcgJiM0Mzs5NjgsNyBAQCBiYXRhZHZfbmV0bGlua19kdW1wX2hhcmRpZihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTsKIAogCXJ0bmxfbG9jaygpOwotCWNiLSZndDtzZXEgPSBiYXRhZHZfaGFyZGlmX2dlbmVyYXRpb24gJmx0OyZsdDsgMSB8IDE7CiYjNDM7CWNiLSZndDtzZXEgPSBiYXRfcHJpdi0mZ3Q7aGFyZGlmX2dlbmVyYXRpb24gJmx0OyZsdDsgMSB8IDE7CiAKIAluZXRkZXZfZm9yX2VhY2hfbG93ZXJfcHJpdmF0ZShtZXNoX2lmYWNlLCBoYXJkX2lmYWNlLCBpdGVyKSB7CiAJCWlmIChpJiM0MzsmIzQzOyAmbHQ7IHNraXApCkBAIC0xMjExLDcgJiM0MzsxMjExLDkgQEAgYmF0YWR2X25ldGxpbmtfZ2V0X2hhcmRpZl9mcm9tX2lmaW5kZXgoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAlpZiAoIWhhcmRfZGV2KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIAomIzQzOwlydG5sX2xvY2soKTsKIAloYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGhhcmRfZGV2KTsKJiM0MzsJcnRubF91bmxvY2soKTsKIAlpZiAoIWhhcmRfaWZhY2UpCiAJCWdvdG8gZXJyX3B1dF9oYXJkZGV2OwogCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMgYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKaW5kZXggOWIzOGJkOWU4ZGE3ZWMuLjQ4ZjgzN2NmNjY1YTJhIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jCkBAIC0xMDMzLDcgJiM0MzsxMDMzLDYgQEAgYmF0YWR2X3B1cmdlX25laWdoX2lmaW5mbyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCiAJCS8qIGRvbiYjMzk7dCBwdXJnZSBpZiB0aGUgaW50ZXJmYWNlIGlzIG5vdCAoZ29pbmcpIGRvd24gKi8KIAkJaWYgKGlmX291dGdvaW5nLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFICZhbXA7JmFtcDsKLQkJICAgIGlmX291dGdvaW5nLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UgJmFtcDsmYW1wOwogCQkgICAgaWZfb3V0Z29pbmctJmd0O2lmX3N0YXR1cyAhPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRCkKIAkJCWNvbnRpbnVlOwogCkBAIC0xMDc3LDcgJiM0MzsxMDc2LDYgQEAgYmF0YWR2X3B1cmdlX29yaWdfaWZpbmZvKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIAkJLyogZG9uJiMzOTt0IHB1cmdlIGlmIHRoZSBpbnRlcmZhY2UgaXMgbm90IChnb2luZykgZG93biAqLwogCQlpZiAoaWZfb3V0Z29pbmctJmd0O2lmX3N0YXR1cyAhPSBCQVRBRFZfSUZfSU5BQ1RJVkUgJmFtcDsmYW1wOwotCQkgICAgaWZfb3V0Z29pbmctJmd0O2lmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSAmYW1wOyZhbXA7CiAJCSAgICBpZl9vdXRnb2luZy0mZ3Q7aWZfc3RhdHVzICE9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKQogCQkJY29udGludWU7CiAKQEAgLTExMjcsMTAgJiM0MzsxMTI1LDggQEAgYmF0YWR2X3B1cmdlX29yaWdfbmVpZ2hib3JzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIAkJaWYgKGJhdGFkdl9oYXNfdGltZWRfb3V0KGxhc3Rfc2VlbiwgQkFUQURWX1BVUkdFX1RJTUVPVVQpIHx8CiAJCSAgICBpZl9pbmNvbWluZy0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9JTkFDVElWRSB8fAotCQkgICAgaWZfaW5jb21pbmctJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSB8fAogCQkgICAgaWZfaW5jb21pbmctJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRCkgewogCQkJaWYgKGlmX2luY29taW5nLSZndDtpZl9zdGF0dXMgPT0gQkFUQURWX0lGX0lOQUNUSVZFIHx8Ci0JCQkgICAgaWZfaW5jb21pbmctJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSB8fAogCQkJICAgIGlmX2luY29taW5nLSZndDtpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpCiAJCQkJYmF0YWR2X2RiZyhCQVRBRFZfREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkJCSAgICYjMzQ7bmVpZ2hib3IgcHVyZ2U6IG9yaWdpbmF0b3IgJXBNLCBuZWlnaGJvcjogJXBNLCBpZmFjZTogJXNcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuYyBiL25ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMKaW5kZXggYzJlZWE3ZGJjNDg4MzMuLjAwNDY3YWE3OWRlOWRjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMKQEAgLTM1OCwyOCAmIzQzOzM1OCwxNiBAQCBiYXRhZHZfdHBfbGlzdF9maW5kX3NlbmRlcl9zZXNzaW9uKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QsCiB9CiAKIC8qKgotICogYmF0YWR2X3RwX3ZhcnNfY29tbW9uX3JlbGVhc2UoKSAtIHJlbGVhc2UgYmF0YWR2X3RwX3ZhcnNfY29tbW9uIGZyb20gbGlzdHMKJiM0MzsgKiBiYXRhZHZfdHBfc2VuZGVyX3JlbGVhc2UoKSAtIHJlbGVhc2UgYmF0YWR2X3RwX3NlbmRlcgogICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kCi0gKiBAcmVmOiBrcmVmIHBvaW50ZXIgb2YgdGhlIGJhdGFkdl90cF92YXJzX2NvbW1vbgomIzQzOyAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgYmF0YWR2X3RwX3NlbmRlcgogICovCi1zdGF0aWMgdm9pZCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQomIzQzO3N0YXRpYyB2b2lkIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQogewotCXN0cnVjdCBiYXRhZHZfdHBfdmFyc19jb21tb24gKnRwX3ZhcnM7Ci0Jc3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1biwgKnNhZmU7Ci0KLQl0cF92YXJzID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl90cF92YXJzX2NvbW1vbiwgcmVmY291bnQpOwotCi0JLyogbG9jayBzaG91bGQgbm90IGJlIG5lZWRlZCBiZWNhdXNlIHRoaXMgb2JqZWN0IGlzIG5vdyBvdXQgb2YgYW55Ci0JICogY29udGV4dCEKLQkgKi8KLQlzcGluX2xvY2tfYmgoJmFtcDt0cF92YXJzLSZndDt1bmFja2VkX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgJmFtcDt0cF92YXJzLSZndDt1bmFja2VkX2xpc3QsIGxpc3QpIHsKLQkJbGlzdF9kZWwoJmFtcDt1bi0mZ3Q7bGlzdCk7Ci0JCWtmcmVlKHVuKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDt0cF92YXJzLSZndDt1bmFja2VkX2xvY2spOwomIzQzOwlzdHJ1Y3QgYmF0YWR2X3RwX3NlbmRlciAqdHBfdmFyczsKIAotCWtmcmVlX3JjdSh0cF92YXJzLCByY3UpOwomIzQzOwl0cF92YXJzID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl90cF9zZW5kZXIsIGNvbW1vbi5yZWZjb3VudCk7CiYjNDM7CWtmcmVlX3JjdSh0cF92YXJzLCBjb21tb24ucmN1KTsKIH0KIAogLyoqCkBAIC0zOTIsNyAmIzQzOzM4MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9zZW5kZXJfcHV0KHN0cnVjdCBiYXRhZHZfdHBfc2VuZGVyICp0cF92YXJzKQogCWlmICghdHBfdmFycykKIAkJcmV0dXJuOwogCi0Ja3JlZl9wdXQoJmFtcDt0cF92YXJzLSZndDtjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF92YXJzX2NvbW1vbl9yZWxlYXNlKTsKJiM0MzsJa3JlZl9wdXQoJmFtcDt0cF92YXJzLSZndDtjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZSk7CiB9CiAKIC8qKgpAQCAtMTE0NSw5ICYjNDM7MTEzMyw2IEBAIHZvaWQgYmF0YWR2X3RwX3N0YXJ0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QsCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO3RwX3ZhcnMtJmd0O21vcmVfYnl0ZXMpOwogCWluaXRfY29tcGxldGlvbigmYW1wO3RwX3ZhcnMtJmd0O2ZpbmlzaGVkKTsKIAotCXNwaW5fbG9ja19pbml0KCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9saXN0KTsKLQogCXNwaW5fbG9ja19pbml0KCZhbXA7dHBfdmFycy0mZ3Q7Y2NfbG9jayk7CiAKIAl0cF92YXJzLSZndDtwcmVyYW5kb21fb2Zmc2V0ID0gMDsKQEAgLTEyNTEsNiAmIzQzOzEyMzYsMzMgQEAgYmF0YWR2X3RwX2xpc3RfZmluZF9yZWNlaXZlcl9zZXNzaW9uKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QKIAlyZXR1cm4gdHBfdmFyczsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKCkgLSByZWxlYXNlIGJhdGFkdl90cF9yZWNlaXZlcgomIzQzOyAqICBhbmQgcXVldWUgZm9yIGZyZWUgYWZ0ZXIgcmN1IGdyYWNlIHBlcmlvZAomIzQzOyAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgYmF0YWR2X3RwX3JlY2VpdmVyCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY2VpdmVyX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnM7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqc2FmZTsKJiM0MzsJc3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1bjsKJiM0MzsKJiM0MzsJdHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIsIGNvbW1vbi5yZWZjb3VudCk7CiYjNDM7CiYjNDM7CS8qIGxvY2sgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYmVjYXVzZSB0aGlzIG9iamVjdCBpcyBub3cgb3V0IG9mIGFueQomIzQzOwkgKiBjb250ZXh0IQomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dHBfdmFycy0mZ3Q7YWNrX3NlcW5vX2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsICZhbXA7dHBfdmFycy0mZ3Q7dW5hY2tlZF9saXN0LCBsaXN0KSB7CiYjNDM7CQlsaXN0X2RlbCgmYW1wO3VuLSZndDtsaXN0KTsKJiM0MzsJCWtmcmVlKHVuKTsKJiM0MzsJCXRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQtLTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3RwX3ZhcnMtJmd0O2Fja19zZXFub19sb2NrKTsKJiM0MzsKJiM0MzsJa2ZyZWVfcmN1KHRwX3ZhcnMsIGNvbW1vbi5yY3UpOwomIzQzO30KJiM0MzsKIC8qKgogICogYmF0YWR2X3RwX3JlY2VpdmVyX3B1dCgpIC0gZGVjcmVtZW50IHRoZSBiYXRhZHZfdHBfcmVjZWl2ZXIKICAqICByZWZjb3VudGVyIGFuZCBwb3NzaWJseSByZWxlYXNlIGl0CkBAIC0xMjYxLDcgJiM0MzsxMjczLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY2VpdmVyX3B1dChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKQogCWlmICghdHBfdmFycykKIAkJcmV0dXJuOwogCi0Ja3JlZl9wdXQoJmFtcDt0cF92YXJzLSZndDtjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF92YXJzX2NvbW1vbl9yZWxlYXNlKTsKJiM0MzsJa3JlZl9wdXQoJmFtcDt0cF92YXJzLSZndDtjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKTsKIH0KIAogLyoqCkBAIC0xMzA0LDEzICYjNDM7MTMxNiwxMyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjZWl2ZXJfc2h1dGRvd24oc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJaWYgKGJhdGFkdl90cF9saXN0X2RldGFjaCgmYW1wO3RwX3ZhcnMtJmd0O2NvbW1vbikpCiAJCWJhdGFkdl90cF9yZWNlaXZlcl9wdXQodHBfdmFycyk7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsICZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbGlzdCwgbGlzdCkgewomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt0cF92YXJzLSZndDthY2tfc2Vxbm9fbG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgJmFtcDt0cF92YXJzLSZndDt1bmFja2VkX2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJmFtcDt1bi0mZ3Q7bGlzdCk7CiAJCWtmcmVlKHVuKTsKLQkJdHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfY291bnQtLTsKJiM0MzsJCXRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQtLTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9sb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0cF92YXJzLSZndDthY2tfc2Vxbm9fbG9jayk7CiAKIAkvKiBkcm9wIHJlZmVyZW5jZSBvZiB0aW1lciAqLwogCWlmIChXQVJOX09OKGF0b21pY194Y2hnKCZhbXA7dHBfdmFycy0mZ3Q7cmVjZWl2aW5nLCAwKSAhPSAxKSkKQEAgLTE0MDMsNjkgJiM0MzsxNDE1LDEwNiBAQCBzdGF0aWMgaW50IGJhdGFkdl90cF9zZW5kX2FjayhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0LAogICovCiBzdGF0aWMgYm9vbCBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcihzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzLAogCQkJCQkgIHUzMiBzZXFubywgdTMyIHBheWxvYWRfbGVuKQotCV9fbXVzdF9ob2xkKCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbG9jaykKJiM0MzsJX19tdXN0X2hvbGQoJmFtcDt0cF92YXJzLSZndDthY2tfc2Vxbm9fbG9jaykKIHsKLQlzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqbmV3OwotCWJvb2wgYWRkZWQgPSBmYWxzZTsKLQotCW5ldyA9IGttYWxsb2Nfb2JqKCpuZXcsIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseSghbmV3KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JbmV3LSZndDtzZXFubyA9IHNlcW5vOwotCW5ldy0mZ3Q7bGVuID0gcGF5bG9hZF9sZW47Ci0KLQkvKiBpZiB0aGUgbGlzdCBpcyBlbXB0eSBpbW1lZGlhdGVseSBhdHRhY2ggdGhpcyBuZXcgb2JqZWN0ICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9saXN0KSkgewotCQlsaXN0X2FkZCgmYW1wO25ldy0mZ3Q7bGlzdCwgJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9saXN0KTsKLQkJdHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfY291bnQmIzQzOyYjNDM7OwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKiBvdGhlcndpc2UgbG9vcCBvdmVyIHRoZSBsaXN0IGFuZCBlaXRoZXIgZHJvcCB0aGUgcGFja2V0IGJlY2F1c2UgdGhpcwotCSAqIGlzIGEgZHVwbGljYXRlIG9yIHN0b3JlIGl0IGF0IHRoZSByaWdodCBwb3NpdGlvbi4KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqcG9zID0gJmFtcDt0cF92YXJzLSZndDt1bmFja2VkX2xpc3Q7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqbmV3ID0gTlVMTDsKJiM0MzsJdTMyIGVuZF9zZXFubyA9IHNlcW5vICYjNDM7IHBheWxvYWRfbGVuOwomIzQzOwlzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnNhZmU7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqdW47CiYjNDM7CiYjNDM7CS8qIGxvb3Agb3ZlciB0aGUgbGlzdCB0byBmaW5kIGVpdGhlciBhbiBleGlzdGluZyBlbnRyeSB3aGljaCB0aGUgbmV3CiYjNDM7CSAqIHNlcW5vIHJhbmdlIGNhbiBiZSBtZXJnZWQgd2l0aCBvciB0aGUgcG9zaXRpb24gYXQgd2hpY2ggYSBuZXcgZW50cnkKJiM0MzsJICogaGFzIHRvIGJlIGluc2VydGVkLgogCSAqCiAJICogVGhlIGl0ZXJhdGlvbiBpcyBkb25lIGluIHRoZSByZXZlcnNlIHdheSBiZWNhdXNlIGl0IGlzIGxpa2VseSB0aGF0CiAJICogdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0ICh0aGUgb25lIGJlaW5nIHByb2Nlc3NlZCBub3cpIGhhcyBhIGJpZ2dlcgogCSAqIHNlcW5vIHRoYW4gYWxsIHRoZSBvdGhlcnMgYWxyZWFkeSBzdG9yZWQuCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCAmYW1wO3RwX3ZhcnMtJmd0O2NvbW1vbi51bmFja2VkX2xpc3QsIGxpc3QpIHsKLQkJLyogY2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi8KLQkJaWYgKG5ldy0mZ3Q7c2Vxbm8gPT0gdW4tJmd0O3NlcW5vKSB7Ci0JCQlpZiAobmV3LSZndDtsZW4gJmd0OyB1bi0mZ3Q7bGVuKQotCQkJCXVuLSZndDtsZW4gPSBuZXctJmd0O2xlbjsKLQkJCWtmcmVlKG5ldyk7Ci0JCQlhZGRlZCA9IHRydWU7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIGxvb2sgZm9yIHRoZSByaWdodCBwb3NpdGlvbiAqLwotCQlpZiAoYmF0YWR2X3NlcV9iZWZvcmUobmV3LSZndDtzZXFubywgdW4tJmd0O3NlcW5vKSkKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCAmYW1wO3RwX3ZhcnMtJmd0O3VuYWNrZWRfbGlzdCwgbGlzdCkgewomIzQzOwkJLyogbG9vayBmb3IgdGhlIHJpZ2h0IHBvc2l0aW9uIC0gYW4gdW4gd2hpY2ggaXMgc21hbGxlciAqLwomIzQzOwkJaWYgKGJhdGFkdl9zZXFfYmVmb3JlKHNlcW5vLCB1bi0mZ3Q7c2Vxbm8pKQogCQkJY29udGludWU7CiAKLQkJLyogYXMgc29vbiBhcyBhbiBlbnRyeSBoYXZpbmcgYSBiaWdnZXIgc2Vxbm8gaXMgZm91bmQsIHRoZSBuZXcKLQkJICogb25lIGlzIGF0dGFjaGVkIF9hZnRlcl8gaXQuIEluIHRoaXMgd2F5IHRoZSBsaXN0IGlzIGtlcHQgaW4KLQkJICogYXNjZW5kaW5nIG9yZGVyCiYjNDM7CQkvKiBzbWFsbGVyL2VxdWFsIHNlcW5vIHdhcyBmb3VuZCBidXQgdGhleSBtaWdodCBiZSBkaXJlY3RseQomIzQzOwkJICogYWZ0ZXIgYW5vdGhlciBvciBvdmVybGFwcGluZy4ga2VlcCBvbmx5IGEgc2luZ2xlIGVudHJ5CiYjNDM7CQkgKgomIzQzOwkJICogSXQgaXMgYWxyZWFkeSBrbm93biB0aGF0OgomIzQzOwkJICoKJiM0MzsJCSAqCXVuLSZndDtzZXFubyAmbHQ7PSBzZXFubwomIzQzOwkJICoKJiM0MzsJCSAqIFdoZW4gZXN0YWJsaXNoaW5nIHRoYXQ6CiYjNDM7CQkgKgomIzQzOwkJICoJc2Vxbm8gJmx0Oz0gdW4tJmd0O3NlcW5vICYjNDM7IHVuLSZndDtsZW4KJiM0MzsJCSAqCiYjNDM7CQkgKiBUaGVuIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gYWRkIGEgbmV3IGVudHJ5IGJlY2F1c2UgdGhlCiYjNDM7CQkgKiBzbWFsbGVyL2VxdWFsIHNlcW5vIG9mIHVuIG1pZ2h0IGFscmVhZHkgY29udGFpbiB0aGUgbmV3CiYjNDM7CQkgKiByZWNlaXZlZCBwYWNrZXQgb3Igd2Ugb25seSBhZGQgbmV3IGRhdGEgZGlyZWN0bHkgYWZ0ZXIKJiM0MzsJCSAqIHRoZSBlbmQgb2YgdW4uIFRoZSBsYXR0ZXIgY2FuIGJlIGlkZW50aWZpZWQgdXNpbmc6CiYjNDM7CQkgKgomIzQzOwkJICoJdW4tJmd0O3NlcW5vICYjNDM7IHVuLSZndDtsZW4gJmx0Oz0gZW5kX3NlcW5vCiAJCSAqLwotCQlsaXN0X2FkZCgmYW1wO25ldy0mZ3Q7bGlzdCwgJmFtcDt1bi0mZ3Q7bGlzdCk7Ci0JCWFkZGVkID0gdHJ1ZTsKLQkJdHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJaWYgKCFiYXRhZHZfc2VxX2JlZm9yZSh1bi0mZ3Q7c2Vxbm8gJiM0MzsgdW4tJmd0O2xlbiwgc2Vxbm8pKSB7CiYjNDM7CQkJLyogbmV3IGRhdGEgZGlyZWN0bHkgYWZ0ZXIgdW4/ICovCiYjNDM7CQkJaWYgKCFiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLSZndDtzZXFubyAmIzQzOyB1bi0mZ3Q7bGVuKSkKJiM0MzsJCQkJdW4tJmd0O2xlbiA9IGVuZF9zZXFubyAtIHVuLSZndDtzZXFubzsKJiM0MzsKJiM0MzsJCQkvKiB1biBub3cgcmVwcmVzZW50cyBib3RoIG9sZCB1biAmIzQzOyBuZXcgcmFuZ2UgYW5kIGhhcyB0bwomIzQzOwkJCSAqIGJlIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGdhcCB0byB0aGUgbmV4dCBzZXFubyByYW5nZQomIzQzOwkJCSAqIHdhcyBjbG9zZWQKJiM0MzsJCQkgKi8KJiM0MzsJCQluZXcgPSB1bjsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogYXMgc29vbiBhcyBhbiBlbnRyeSBoYXZpbmcgYSBzbWFsbGVyIHNlcW5vIGlzIGZvdW5kLAomIzQzOwkJCSAqIHRoZSBuZXcgb25lIGlzIGF0dGFjaGVkIF9hZnRlcl8gaXQuIEluIHRoaXMgd2F5IHRoZQomIzQzOwkJCSAqIGxpc3QgaXMga2VwdCBpbiBhc2NlbmRpbmcgb3JkZXIKJiM0MzsJCQkgKi8KJiM0MzsJCQlwb3MgPSAmYW1wO3VuLSZndDtsaXN0OwomIzQzOwkJfQomIzQzOwogCQlicmVhazsKIAl9CiAKLQkvKiByZWNlaXZlZCBwYWNrZXQgd2l0aCBzbWFsbGVzdCBzZXFubyBvdXQgb2Ygb3JkZXI7IGFkZCBpdCB0byBmcm9udCAqLwotCWlmICghYWRkZWQpIHsKLQkJbGlzdF9hZGQoJmFtcDtuZXctJmd0O2xpc3QsICZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbGlzdCk7Ci0JCXRwX3ZhcnMtJmd0O2NvbW1vbi51bmFja2VkX2NvdW50JiM0MzsmIzQzOzsKJiM0MzsJLyogbm8gZW50cnkgdG8gbWVyZ2Ugd2l0aCB3YXMgZm91bmQ7IGluc2VydCBhIG5ldyBvbmUgYWZ0ZXIgdGhlIGVudHJ5CiYjNDM7CSAqIHdpdGggdGhlIG5leHQgc21hbGxlciBzZXFubyAob3IgYXQgdGhlIGZyb250IG9mIHRoZSBsaXN0IHdoZW4gdGhlCiYjNDM7CSAqIG5ldyBzZXFubyBpcyB0aGUgc21hbGxlc3Qgb3IgdGhlIGxpc3QgaXMgZW1wdHkpCiYjNDM7CSAqLwomIzQzOwlpZiAoIW5ldykgewomIzQzOwkJbmV3ID0ga21hbGxvY19vYmooKm5ldywgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAodW5saWtlbHkoIW5ldykpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJbmV3LSZndDtzZXFubyA9IHNlcW5vOwomIzQzOwkJbmV3LSZndDtsZW4gPSBwYXlsb2FkX2xlbjsKJiM0MzsKJiM0MzsJCWxpc3RfYWRkKCZhbXA7bmV3LSZndDtsaXN0LCBwb3MpOwomIzQzOwkJdHBfdmFycy0mZ3Q7dW5hY2tlZF9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogY2hlY2sgaWYgbmV3IGZpbGxlZCB0aGUgZ2FwIHRvIHRoZSBuZXh0IGxpc3QgZW50cmllcyAqLwomIzQzOwl1biA9IG5ldzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVlKHVuLCBzYWZlLCAmYW1wO3RwX3ZhcnMtJmd0O3VuYWNrZWRfbGlzdCwgbGlzdCkgewomIzQzOwkJaWYgKGJhdGFkdl9zZXFfYmVmb3JlKGVuZF9zZXFubywgdW4tJmd0O3NlcW5vKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIG5leHQgZW50cnkgaXMgb3ZlcmxhcHBpbmcgb3IgYWRqYWNlbnQgLSBjb21iaW5lIGJvdGggKi8KJiM0MzsJCWlmIChiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLSZndDtzZXFubyAmIzQzOyB1bi0mZ3Q7bGVuKSkgewomIzQzOwkJCWVuZF9zZXFubyA9IHVuLSZndDtzZXFubyAmIzQzOyB1bi0mZ3Q7bGVuOwomIzQzOwkJCW5ldy0mZ3Q7bGVuID0gZW5kX3NlcW5vIC0gbmV3LSZndDtzZXFubzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7dW4tJmd0O2xpc3QpOwomIzQzOwkJa2ZyZWUodW4pOwomIzQzOwkJdHBfdmFycy0mZ3Q7dW5hY2tlZF9jb3VudC0tOwogCX0KIAogCS8qIHJlbW92ZSB0aGUgbGFzdCAoYmlnZ2VzdCkgdW5hY2tlZCBzZXFubyB3aGVuIGxpc3QgaXMgdG9vIGxhcmdlICovCi0JaWYgKHRwX3ZhcnMtJmd0O2NvbW1vbi51bmFja2VkX2NvdW50ICZndDsgQkFUQURWX1RQX01BWF9VTkFDS0VEKSB7Ci0JCXVuID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbGlzdCwKJiM0MzsJaWYgKHRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQgJmd0OyBCQVRBRFZfVFBfTUFYX1VOQUNLRUQpIHsKJiM0MzsJCXVuID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7dHBfdmFycy0mZ3Q7dW5hY2tlZF9saXN0LAogCQkJCSAgICAgc3RydWN0IGJhdGFkdl90cF91bmFja2VkLCBsaXN0KTsKIAkJbGlzdF9kZWwoJmFtcDt1bi0mZ3Q7bGlzdCk7CiAJCWtmcmVlKHVuKTsKLQkJdHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfY291bnQtLTsKJiM0MzsJCXRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQtLTsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTE0NzcsNyAmIzQzOzE1MjYsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcihzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzLAogICogQHRwX3ZhcnM6IHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIGN1cnJlbnQgVFAgbWV0ZXIgc2Vzc2lvbgogICovCiBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfYWNrX3Vub3JkZXJlZChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKQotCV9fbXVzdF9ob2xkKCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbG9jaykKJiM0MzsJX19tdXN0X2hvbGQoJmFtcDt0cF92YXJzLSZndDthY2tfc2Vxbm9fbG9jaykKIHsKIAlzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqc2FmZTsKIAl1MzIgdG9fYWNrOwpAQCAtMTQ4NSw3ICYjNDM7MTUzNCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9hY2tfdW5vcmRlcmVkKHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMpCiAJLyogZ28gdGhyb3VnaCB0aGUgdW5hY2tlZCBwYWNrZXQgbGlzdCBhbmQgcG9zc2libHkgQUNLIHRoZW0gYXMKIAkgKiB3ZWxsCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuLCBzYWZlLCAmYW1wO3RwX3ZhcnMtJmd0O2NvbW1vbi51bmFja2VkX2xpc3QsIGxpc3QpIHsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuLCBzYWZlLCAmYW1wO3RwX3ZhcnMtJmd0O3VuYWNrZWRfbGlzdCwgbGlzdCkgewogCQkvKiB0aGUgbGlzdCBpcyBvcmRlcmVkLCB0aGVyZWZvcmUgaXQgaXMgcG9zc2libGUgdG8gc3RvcCBhcyBzb29uCiAJCSAqIHRoZXJlIGlzIGEgZ2FwIGJldHdlZW4gdGhlIGxhc3QgYWNrZWQgc2Vxbm8gYW5kIHRoZSBzZXFubyBvZgogCQkgKiB0aGUgcGFja2V0IHVuZGVyIGluc3BlY3Rpb24KQEAgLTE0OTMsMTQgJiM0MzsxNTQyLDE0IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9hY2tfdW5vcmRlcmVkKHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMpCiAJCWlmIChiYXRhZHZfc2VxX2JlZm9yZSh0cF92YXJzLSZndDtsYXN0X3JlY3YsIHVuLSZndDtzZXFubykpCiAJCQlicmVhazsKIAotCQl0b19hY2sgPSB1bi0mZ3Q7c2Vxbm8gJiM0MzsgdW4tJmd0O2xlbiAtIHRwX3ZhcnMtJmd0O2xhc3RfcmVjdjsKJiM0MzsJCXRvX2FjayA9IHVuLSZndDtzZXFubyAmIzQzOyB1bi0mZ3Q7bGVuOwogCi0JCWlmIChiYXRhZHZfc2VxX2JlZm9yZSh0cF92YXJzLSZndDtsYXN0X3JlY3YsIHVuLSZndDtzZXFubyAmIzQzOyB1bi0mZ3Q7bGVuKSkKLQkJCXRwX3ZhcnMtJmd0O2xhc3RfcmVjdiAmIzQzOz0gdG9fYWNrOwomIzQzOwkJaWYgKGJhdGFkdl9zZXFfYmVmb3JlKHRwX3ZhcnMtJmd0O2xhc3RfcmVjdiwgdG9fYWNrKSkKJiM0MzsJCQl0cF92YXJzLSZndDtsYXN0X3JlY3YgPSB0b19hY2s7CiAKIAkJbGlzdF9kZWwoJmFtcDt1bi0mZ3Q7bGlzdCk7CiAJCWtmcmVlKHVuKTsKLQkJdHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfY291bnQtLTsKJiM0MzsJCXRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQtLTsKIAl9CiB9CiAKQEAgLTE1NDcsOSAmIzQzOzE1OTYsOSBAQCBiYXRhZHZfdHBfaW5pdF9yZWN2KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJdHBfdmFycy0mZ3Q7Y29tbW9uLmJhdF9wcml2ID0gYmF0X3ByaXY7CiAJa3JlZl9pbml0KCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnJlZmNvdW50KTsKIAotCXNwaW5fbG9ja19pbml0KCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9saXN0KTsKLQl0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9jb3VudCA9IDA7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7dHBfdmFycy0mZ3Q7YWNrX3NlcW5vX2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3RwX3ZhcnMtJmd0O3VuYWNrZWRfbGlzdCk7CiYjNDM7CXRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQgPSAwOwogCiAJa3JlZl9nZXQoJmFtcDt0cF92YXJzLSZndDtjb21tb24ucmVmY291bnQpOwogCXRpbWVyX3NldHVwKCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnRpbWVyLCBiYXRhZHZfdHBfcmVjZWl2ZXJfc2h1dGRvd24sIDApOwpAQCAtMTYwOSw3ICYjNDM7MTY1OCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWN2X21zZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQlXUklURV9PTkNFKHRwX3ZhcnMtJmd0O2xhc3RfcmVjdl90aW1lLCBqaWZmaWVzKTsKIAl9CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dHBfdmFycy0mZ3Q7YWNrX3NlcW5vX2xvY2spOwogCiAJLyogaWYgdGhlIHBhY2tldCBpcyBhIGR1cGxpY2F0ZSwgaXQgbWF5IGJlIHRoZSBjYXNlIHRoYXQgYW4gQUNLIGhhcyBiZWVuCiAJICogbG9zdC4gUmVzZW5kIHRoZSBBQ0sKQEAgLTE2MjUsNyAmIzQzOzE2NzQsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjdl9tc2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJICogbm90IGJlZW4gZW5xdWV1ZWQgY29ycmVjdGx5CiAJCSAqLwogCQlpZiAoIWJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyKHRwX3ZhcnMsIHNlcW5vLCBwYXlsb2FkX2xlbikpIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbG9jayk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDt0cF92YXJzLSZndDthY2tfc2Vxbm9fbG9jayk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0xNjQxLDcgJiM0MzsxNjkwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY3ZfbXNnKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIHNlbmRfYWNrOgogCXRvX2FjayA9IHRwX3ZhcnMtJmd0O2xhc3RfcmVjdjsKLQlzcGluX3VubG9ja19iaCgmYW1wO3RwX3ZhcnMtJmd0O2NvbW1vbi51bmFja2VkX2xvY2spOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3RwX3ZhcnMtJmd0O2Fja19zZXFub19sb2NrKTsKIAogCS8qIHNlbmQgdGhlIEFDSy4gSWYgdGhlIHJlY2VpdmVkIHBhY2tldCB3YXMgb3V0IG9mIG9yZGVyLCB0aGUgQUNLIHRoYXQKIAkgKiBpcyBnb2luZyB0byBiZSBzZW50IGlzIGEgZHVwbGljYXRlICh0aGUgc2VuZGVyIHdpbGwgY291bnQgdGhlbSBhbmQKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3R2bHYuYyBiL25ldC9iYXRtYW4tYWR2L3R2bHYuYwppbmRleCAxYzlmYjIxOTg1ZjZhNS4uNDliZjJlZDllY2RjMzkgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3R2bHYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi90dmx2LmMKQEAgLTQ0Miw2ICYjNDM7NDQyLDU0IEBAIHN0YXRpYyBpbnQgYmF0YWR2X3R2bHZfY2FsbF9oYW5kbGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYmF0YWR2X3R2bHZfaGRyX25leHQoKSAtIG1vdmUgYSB0dmx2IGJ1ZmZlciBjdXJzb3IgdG8gdGhlIG5leHQgY29udGFpbmVyCiYjNDM7ICogQHR2bHZfdmFsdWU6IGN1cnNvciBpbnRvIHRoZSB0dmx2IGJ1ZmZlciwgYWR2YW5jZWQgcGFzdCB0aGUgcmV0dXJuZWQKJiM0MzsgKiAgY29udGFpbmVyJiMzOTtzIGNvbnRlbnQgb24gc3VjY2VzcwomIzQzOyAqIEB0dmx2X3ZhbHVlX2xlbjogcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgdHZsdiBidWZmZXIsIHJlZHVjZWQgYnkgdGhlIHJldHVybmVkCiYjNDM7ICogIGNvbnRhaW5lciYjMzk7cyBzaXplIG9uIHN1Y2Nlc3MKJiM0MzsgKgomIzQzOyAqIFBhcnNlcyBhIHNpbmdsZSBjb250YWluZXIgaGVhZGVyIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBhbmQsIGlmIGEKJiM0MzsgKiBjb21wbGV0ZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLCBhZHZhbmNlcyB0aGUgY3Vyc29yIGFuZCByZW1haW5pbmcgbGVuZ3RoCiYjNDM7ICogcGFzdCBpdC4gVGhlIHJldHVybmVkIGhlYWRlciBzdGF5cyB2YWxpZDsgaXRzIGNvbnRlbnQgaXMgbG9jYXRlZCBhdAomIzQzOyAqIChyZXR1cm5lZCBoZWFkZXIgJiM0MzsgMSkgYW5kIGlzIG50b2hzKGhkci0mZ3Q7bGVuKSBieXRlcyBsb25nLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBuZXh0IHR2bHYgY29udGFpbmVyIGhlYWRlciwgb3IgTlVMTCBpZiBubyBmdXJ0aGVyCiYjNDM7ICogY29tcGxldGUgY29udGFpbmVyIGlzIHByZXNlbnQgaW4gdGhlIGJ1ZmZlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IGJhdGFkdl90dmx2X2hkciAqYmF0YWR2X3R2bHZfaGRyX25leHQodm9pZCAqKnR2bHZfdmFsdWUsIHUxNiAqdHZsdl92YWx1ZV9sZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmF0YWR2X3R2bHZfaGRyICp0dmx2X2hkcjsKJiM0MzsJdTE2IHR2bHZfdmFsdWVfY29udF9sZW47CiYjNDM7CXZvaWQgKnR2bHZfdmFsdWVfY29udDsKJiM0MzsJdTE2IHR2bHZfbGVuOwomIzQzOwomIzQzOwl0dmx2X3ZhbHVlX2NvbnQgPSAqdHZsdl92YWx1ZTsKJiM0MzsJdHZsdl9sZW4gPSAqdHZsdl92YWx1ZV9sZW47CiYjNDM7CiYjNDM7CWlmICh0dmx2X2xlbiAmbHQ7IHNpemVvZigqdHZsdl9oZHIpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXR2bHZfaGRyID0gdHZsdl92YWx1ZV9jb250OwomIzQzOwl0dmx2X3ZhbHVlX2NvbnRfbGVuID0gbnRvaHModHZsdl9oZHItJmd0O2xlbik7CiYjNDM7CXR2bHZfdmFsdWVfY29udCA9IHR2bHZfaGRyICYjNDM7IDE7CiYjNDM7CXR2bHZfbGVuIC09IHNpemVvZigqdHZsdl9oZHIpOwomIzQzOwomIzQzOwlpZiAodHZsdl92YWx1ZV9jb250X2xlbiAmZ3Q7IHR2bHZfbGVuKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CS8qIHRoZSBuZXh0IHR2bHYgaGVhZGVyIGlzIGFjY2Vzc2VkIGFzc3VtaW5nIChhdCBsZWFzdCkgMi1ieXRlCiYjNDM7CSAqIGFsaWdubWVudCwgc28gaXQgbXVzdCBzdGFydCBhdCBhbiBldmVuIG9mZnNldC4KJiM0MzsJICovCiYjNDM7CWlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuICZhbXA7IDEpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJKnR2bHZfdmFsdWUgPSAodTggKil0dmx2X3ZhbHVlX2NvbnQgJiM0MzsgdHZsdl92YWx1ZV9jb250X2xlbjsKJiM0MzsJKnR2bHZfdmFsdWVfbGVuID0gdHZsdl9sZW4gLSB0dmx2X3ZhbHVlX2NvbnRfbGVuOwomIzQzOwomIzQzOwlyZXR1cm4gdHZsdl9oZHI7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW4oKSAtIGNoZWNrIGlmIGEgdHZsdiBidWZmZXIgaG9sZHMgYSBjb250YWluZXIKICAqIEB0dmx2X3ZhbHVlOiB0dmx2IGNvbnRlbnQKQEAgLTQ1NywyOCAmIzQzOzUwNSwxMCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW4odm9pZCAqdHZsdl92YWx1ZSwKIAkJCQkJICAgdTggdmVyc2lvbikKIHsKIAlzdHJ1Y3QgYmF0YWR2X3R2bHZfaGRyICp0dmx2X2hkcjsKLQl1MTYgdHZsdl92YWx1ZV9jb250X2xlbjsKLQotCXdoaWxlICh0dmx2X3ZhbHVlX2xlbiAmZ3Q7PSBzaXplb2YoKnR2bHZfaGRyKSkgewotCQl0dmx2X2hkciA9IHR2bHZfdmFsdWU7Ci0JCXR2bHZfdmFsdWVfY29udF9sZW4gPSBudG9ocyh0dmx2X2hkci0mZ3Q7bGVuKTsKLQkJdHZsdl92YWx1ZSA9IHR2bHZfaGRyICYjNDM7IDE7Ci0JCXR2bHZfdmFsdWVfbGVuIC09IHNpemVvZigqdHZsdl9oZHIpOwotCi0JCWlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuICZndDsgdHZsdl92YWx1ZV9sZW4pCi0JCQlicmVhazsKLQotCQkvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZQotCQkgKiBhbGlnbm1lbnQsIHNvIGl0IG11c3Qgc3RhcnQgYXQgYW4gZXZlbiBvZmZzZXQuCi0JCSAqLwotCQlpZiAodHZsdl92YWx1ZV9jb250X2xlbiAmYW1wOyAxKQotCQkJYnJlYWs7CiAKJiM0MzsJd2hpbGUgKCh0dmx2X2hkciA9IGJhdGFkdl90dmx2X2hkcl9uZXh0KCZhbXA7dHZsdl92YWx1ZSwgJmFtcDt0dmx2X3ZhbHVlX2xlbikpKSB7CiAJCWlmICh0dmx2X2hkci0mZ3Q7dHlwZSA9PSB0eXBlICZhbXA7JmFtcDsgdHZsdl9oZHItJmd0O3ZlcnNpb24gPT0gdmVyc2lvbikKIAkJCXJldHVybiB0cnVlOwotCi0JCXR2bHZfdmFsdWUgPSAodTggKil0dmx2X3ZhbHVlICYjNDM7IHR2bHZfdmFsdWVfY29udF9sZW47Ci0JCXR2bHZfdmFsdWVfbGVuIC09IHR2bHZfdmFsdWVfY29udF9sZW47CiAJfQogCiAJcmV0dXJuIGZhbHNlOwpAQCAtNTExLDIwICYjNDM7NTQxLDggQEAgaW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCXU4IGNpZm5vdGZvdW5kID0gQkFUQURWX1RWTFZfSEFORExFUl9PR01fQ0lGTk9URk5EOwogCWludCByZXQgPSBORVRfUlhfU1VDQ0VTUzsKIAotCXdoaWxlICh0dmx2X3ZhbHVlX2xlbiAmZ3Q7PSBzaXplb2YoKnR2bHZfaGRyKSkgewotCQl0dmx2X2hkciA9IHR2bHZfdmFsdWU7CiYjNDM7CXdoaWxlICgodHZsdl9oZHIgPSBiYXRhZHZfdHZsdl9oZHJfbmV4dCgmYW1wO3R2bHZfdmFsdWUsICZhbXA7dHZsdl92YWx1ZV9sZW4pKSkgewogCQl0dmx2X3ZhbHVlX2NvbnRfbGVuID0gbnRvaHModHZsdl9oZHItJmd0O2xlbik7Ci0JCXR2bHZfdmFsdWUgPSB0dmx2X2hkciAmIzQzOyAxOwotCQl0dmx2X3ZhbHVlX2xlbiAtPSBzaXplb2YoKnR2bHZfaGRyKTsKLQotCQlpZiAodHZsdl92YWx1ZV9jb250X2xlbiAmZ3Q7IHR2bHZfdmFsdWVfbGVuKQotCQkJYnJlYWs7Ci0KLQkJLyogdGhlIG5leHQgdHZsdiBoZWFkZXIgaXMgYWNjZXNzZWQgYXNzdW1pbmcgKGF0IGxlYXN0KSAyLWJ5dGUKLQkJICogYWxpZ25tZW50LCBzbyBpdCBtdXN0IHN0YXJ0IGF0IGFuIGV2ZW4gb2Zmc2V0LgotCQkgKi8KLQkJaWYgKHR2bHZfdmFsdWVfY29udF9sZW4gJmFtcDsgMSkKLQkJCWJyZWFrOwogCiAJCXR2bHZfaGFuZGxlciA9IGJhdGFkdl90dmx2X2hhbmRsZXJfZ2V0KGJhdF9wcml2LAogCQkJCQkJICAgICAgIHR2bHZfaGRyLSZndDt0eXBlLApAQCAtNTMyLDExICYjNDM7NTUwLDkgQEAgaW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCiAJCXJldCB8PSBiYXRhZHZfdHZsdl9jYWxsX2hhbmRsZXIoYmF0X3ByaXYsIHR2bHZfaGFuZGxlciwKIAkJCQkJCXBhY2tldF90eXBlLCBvcmlnX25vZGUsIHNrYiwKLQkJCQkJCXR2bHZfdmFsdWUsCiYjNDM7CQkJCQkJdHZsdl9oZHIgJiM0MzsgMSwKIAkJCQkJCXR2bHZfdmFsdWVfY29udF9sZW4pOwogCQliYXRhZHZfdHZsdl9oYW5kbGVyX3B1dCh0dmx2X2hhbmRsZXIpOwotCQl0dmx2X3ZhbHVlID0gKHU4ICopdHZsdl92YWx1ZSAmIzQzOyB0dmx2X3ZhbHVlX2NvbnRfbGVuOwotCQl0dmx2X3ZhbHVlX2xlbiAtPSB0dmx2X3ZhbHVlX2NvbnRfbGVuOwogCX0KIAogCWlmIChwYWNrZXRfdHlwZSAhPSBCQVRBRFZfSVZfT0dNICZhbXA7JmFtcDsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3R5cGVzLmggYi9uZXQvYmF0bWFuLWFkdi90eXBlcy5oCmluZGV4IGIxZjlmODk2NGMzZmQyLi5jZDEyNzU1ZDIxZjM1NiAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi90eXBlcy5oCkBAIC0yMTQsOSAmIzQzOzIxNCw2IEBAIHN0cnVjdCBiYXRhZHZfd2lmaV9uZXRfZGV2aWNlX3N0YXRlIHsKICAqIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAtIG5ldHdvcmsgZGV2aWNlIGtub3duIHRvIGJhdG1hbi1hZHYKICAqLwogc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlIHsKLQkvKiogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgYmF0YWR2X2hhcmRpZl9saXN0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCiAJLyoqIEBpZl9zdGF0dXM6IHN0YXR1cyBvZiB0aGUgaW50ZXJmYWNlIGZvciBiYXRtYW4tYWR2ICovCiAJY2hhciBpZl9zdGF0dXM7CiAKQEAgLTEzMzUsOSAmIzQzOzEzMzIsOSBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgewogCXUzMiBzZXFubzsKIAogCS8qKiBAbGVuOiBsZW5ndGggb2YgdGhlIHBhY2tldCAqLwotCXUxNiBsZW47CiYjNDM7CXUzMiBsZW47CiAKLQkvKiogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgJmFtcDtiYXRhZHZfdHBfdmFyc19jb21tb24udW5hY2tlZF9saXN0ICovCiYjNDM7CS8qKiBAbGlzdDogbGlzdCBub2RlIGZvciAmYW1wO2JhdGFkdl90cF9yZWNlaXZlci51bmFja2VkX2xpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCkBAIC0xMzYwLDE1ICYjNDM7MTM1Nyw2IEBAIHN0cnVjdCBiYXRhZHZfdHBfdmFyc19jb21tb24gewogCS8qKiBAc2Vzc2lvbjogVFAgc2Vzc2lvbiBpZGVudGlmaWVyICovCiAJdTggc2Vzc2lvblsyXTsKIAotCS8qKiBAdW5hY2tlZF9saXN0OiBsaXN0IG9mIHVuYWNrZWQgcGFja2V0cyAobWV0YS1pbmZvIG9ubHkpICovCi0Jc3RydWN0IGxpc3RfaGVhZCB1bmFja2VkX2xpc3Q7Ci0KLQkvKiogQHVuYWNrZWRfbG9jazogcHJvdGVjdCB1bmFja2VkX2xpc3QgJiM0MzsgJmFtcDtiYXRhZHZfdHBfcmVjZWl2ZXIubGFzdF9yZWN2ICovCi0Jc3BpbmxvY2tfdCB1bmFja2VkX2xvY2s7Ci0KLQkvKiogQHVuYWNrZWRfY291bnQ6IG51bWJlciBvZiB1bmFja2VkIGVudHJpZXMgKi8KLQlzaXplX3QgdW5hY2tlZF9jb3VudDsKLQogCS8qKiBAcmVmY291bnQ6IG51bWJlciBvZiBjb250ZXh0IHdoZXJlIHRoZSBvYmplY3QgaXMgdXNlZCAqLwogCXN0cnVjdCBrcmVmIHJlZmNvdW50OwogCkBAIC0xNDgyLDYgJiM0MzsxNDcwLDE1IEBAIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgewogCiAJLyoqIEBsYXN0X3JlY3ZfdGltZTogdGltZSAoamlmZmllcykgYSBtc2cgd2FzIHJlY2VpdmVkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3JlY3ZfdGltZTsKJiM0MzsKJiM0MzsJLyoqIEB1bmFja2VkX2xpc3Q6IGxpc3Qgb2YgdW5hY2tlZCBwYWNrZXRzIChtZXRhLWluZm8gb25seSkgKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCB1bmFja2VkX2xpc3Q7CiYjNDM7CiYjNDM7CS8qKiBAYWNrX3NlcW5vX2xvY2s6IHByb3RlY3QgdW5hY2tlZF9saXN0ICYjNDM7ICZhbXA7YmF0YWR2X3RwX3JlY2VpdmVyLmxhc3RfcmVjdiAqLwomIzQzOwlzcGlubG9ja190IGFja19zZXFub19sb2NrOwomIzQzOwomIzQzOwkvKiogQHVuYWNrZWRfY291bnQ6IG51bWJlciBvZiB1bmFja2VkIGVudHJpZXMgKi8KJiM0MzsJc2l6ZV90IHVuYWNrZWRfY291bnQ7CiB9OwogCiAvKioKQEAgLTE2NzksNiAmIzQzOzE2NzYsOSBAQCBzdHJ1Y3QgYmF0YWR2X3ByaXYgewogCS8qKiBAdHBfbnVtOiBudW1iZXIgb2YgY3VycmVudGx5IGFjdGl2ZSB0cCBzZXNzaW9ucyAqLwogCWF0b21pY190IHRwX251bTsKIAomIzQzOwkvKiogQGhhcmRpZl9nZW5lcmF0aW9uOiBnZW5lcmF0aW9uIGNvdW50ZXIgYWRkZWQgdG8gbmV0bGluayBoYXJkaWYgZHVtcHMgKi8KJiM0MzsJdW5zaWduZWQgaW50IGhhcmRpZl9nZW5lcmF0aW9uOwomIzQzOwogCS8qKiBAb3JpZ193b3JrOiB3b3JrIHF1ZXVlIGNhbGxiYWNrIGl0ZW0gZm9yIG9yaWcgbm9kZSBwdXJnaW5nICovCiAJc3RydWN0IGRlbGF5ZWRfd29yayBvcmlnX3dvcms7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgUGF0Y2ggZm9yIGJhdG1hbi1hZHYqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRhcmdldGluZyB0aGUgYG5ldC9iYXRtYW4tYWR2L2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwuICBSaWdodCBvZmYgdGhlIGJhdCwgaXQmIzM5O3MgcHJldHR5IGV4dGVuc2l2ZSwgdG91Y2hpbmcgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBjb2RlIOKAkyBhIGNsZWFyIGluZGljYXRpb24gb2Ygc29tZSBwcmV0dHkgc3Vic3RhbnRpYWwgYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzLiAgV2UmIzM5O3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGZpbGVzOiBgYmF0X2l2X29nbS5jYCwgYGJhdF92X2VscC5jYCwgYGJhdF92X29nbS5jYCwgYGJyaWRnZV9sb29wX2F2b2lkYW5jZS5jYCwgYGhhcmQtaW50ZXJmYWNlLmNgLCBgbWFpbi5jYCwgYG1lc2gtaW50ZXJmYWNlLmNgLCBgbmV0bGluay5jYCwgYG9yaWdpbmF0b3IuY2AsIGB0cF9tZXRlci5jYCwgYHR2bHYuY2AsIGFuZCBgdHlwZXMuaGAuICBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKRmlyc3QgcGFzcyBzZWVtcyB0byBiZSBjbGVhbnVwOgoKKiAgIEluIHRoZSBgYmF0X2l2X29nbS5jYCBhbmQgYGJhdF92X2VscC5jYCBmaWxlcywgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGRlYWQgY29kZSBiZWluZyByZW1vdmVkLCBwYXJ0aWN1bGFybHkgY2hlY2tzIHJlbGF0ZWQgdG8gaW50ZXJmYWNlIHN0YXRlcyBhbmQgb3V0Z29pbmcgcGFja2V0IGNvbmRpdGlvbnMuIExvb2tzIGxpa2UgYEJBVEFEVl9JRl9OT1RfSU5fVVNFYCBzdGF0ZSBpcyBub3cgZ29uZS4KCiogICBJbiBgYmF0X3Zfb2dtLmNgIGFuZCBgYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgLCBpdCBzZWVtcyB3ZSYjMzk7cmUgc3RyZWFtbGluaW5nIGFyZ3VtZW50IHBhc3NpbmcsIHNwZWNpZmljYWxseSByZW1vdmluZyBgYmF0X3ByaXZgIGFuZCByZWx5aW5nIG9uIHRoZSBgaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZWAgcmVsYXRpb25zaGlwIGZvciBjb250ZXh0LiBUaGlzIHN1Z2dlc3RzIGEgc2hpZnQgaW4gaG93IHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgb3JnYW5pemVkIGFuZCBhY2Nlc3NlZC4KCiogICBgaGFyZC1pbnRlcmZhY2UuY2AgaXMgd2hlcmUgdGhpbmdzIHN0YXJ0IHRvIGdldCBpbnRlcmVzdGluZy4gIFRoaXMgaXMgd2hlcmUgdGhlIGludGVyZmFjZSBoYW5kbGluZyBpcyB1bmRlcmdvaW5nIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3IuICBXZSBzZWUgY2hhbmdlcyB0byBgYmF0YWR2X2hhcmRpZl9yZWxlYXNlYCwgYGJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldmAsIGFuZCBhIHNpZ25pZmljYW50IHNpZ25hdHVyZSBjaGFuZ2UgZm9yIGBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VgLiAgSXQmIzM5O3MgY2xlYXIgdGhlIHdheSBoYXJkd2FyZSBpbnRlcmZhY2VzIGFyZSBtYW5hZ2VkIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaXMgYmVpbmcgcmV3b3JrZWQuIFRoZSByZW1vdmFsIG9mIHRoZSBhZGQvcmVtb3ZlIGludGVyZmFjZSBmdW5jdGlvbnMgKHdpdGggZXZlbnRzIGJlaW5nIGhhbmRsZWQgYSBkaWZmZXJlbnQgd2F5KSBpcyBhIHJlZCBmbGFnIC0gaXQgbWVhbnMgdGhlIGxpZmVjeWNsZSBvZiB0aGUgaW50ZXJmYWNlcyBoYXZlIGJlZW4gcmV3cml0dGVuLgoKKiAgIFRoZSBtb2RpZmljYXRpb25zIHRvIGB0cF9tZXRlci5jYCBhcmUgbm90YWJsZS4gIFNwbGl0dGluZyBgYmF0YWR2X3RwX3ZhcnNfY29tbW9uX3JlbGVhc2VgLCBtb3ZpbmcgdGhlIGB1bmFja2VkX2xpc3RgLCBhbmQgdGhlIGBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcmAgcmV3cml0ZSBhcmUgaW5kaWNhdGl2ZSBvZiBjaGFuZ2VzIHRvIGhvdyBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgaGFuZGxlcyB0aHJvdWdocHV0IGFuZCBzZXF1ZW5jZSBoYW5kbGluZy4gIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBzbyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGlzIG9uZS4KCiogICBGaW5hbGx5LCB0aGUgYWRkaXRpb24gb2YgYGJhdGFkdl90dmx2X2hkcl9uZXh0YCBpbiBgdHZsdi5jYCBzdWdnZXN0cyBhIG1vcmUgcm9idXN0IGFuZCBzYWZlciBtZXRob2QgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIFR5cGUtTGVuZ3RoLVZhbHVlIChUTFYpIGNvbnRhaW5lcnMuCgpPdmVyYWxsLCBJIHNlZSBhIGNsZWFyIGRpcmVjdGlvbiBoZXJlOgoKMS4gICoqUmVmYWN0b3JpbmcgYW5kIGNsZWFudXA6KiogUmVtb3ZhbCBvZiB1bm5lY2Vzc2FyeSBjaGVja3MsIGNvbnNvbGlkYXRpb24gb2YgZGF0YSBhY2Nlc3MuCjIuICAqKkludGVyZmFjZSBNYW5hZ2VtZW50IFJld29yazoqKiAgQSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaGFyZHdhcmUgaW50ZXJmYWNlcyBhcmUgaGFuZGxlZCwgbGlrZWx5IGZvciBiZXR0ZXIgaW50ZWdyYXRpb24gb3IgbW9yZSBmbGV4aWJsZSBjb25maWd1cmF0aW9uLgozLiAgKipUaHJvdWdocHV0ICZhbXA7IFNlcXVlbmNlIEhhbmRsaW5nOioqIEltcHJvdmVtZW50cyB0byB0aHJvdWdocHV0IG1lYXN1cmVtZW50IGFuZCBvdXQtb2Ytb3JkZXIgcGFja2V0IHByb2Nlc3NpbmcsIHdoaWNoIGltcGFjdHMgcmVsaWFiaWxpdHkgYW5kIGVmZmljaWVuY3kuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbGx5IGltcGFjdGZ1bCBjaGFuZ2UsIGNsZWFybHkuICBUaGVzZSBtb2RpZmljYXRpb25zIHJ1biBkZWVwIGludG8gdGhlIGNvcmUgbG9naWMsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBhYnNvbHV0ZWx5IGJlIHRob3JvdWdobHkgZnV6emVkLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgdGhlIGludGVyYWN0aW9ucyBpbiB0aGlzIGFyY2hpdGVjdHVyZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgYENPTkZJR19CQVRNQU5fQURWYCBpcyB0aGUgcHJpbWFyeSBvbmUsIG9idmlvdXNseS4gIGB0cF9tZXRlcmAgaXMgbGlrZWx5IGVuYWJsZWQgdGhyb3VnaCBhIGZldyBvcHRpb25zOiBJIHN1c3BlY3QgYENPTkZJR19CQVRNQU5fQURWX0RBVGAsIGBDT05GSUdfQkFUTUFOX0FEVl9OQ2AsIG9yIHBlcmhhcHMganVzdCBlbmFibGVkIGJ5IGRlZmF1bHQgd2l0aCBgQ09ORklHX0JBVE1BTl9BRFZgLiAgVGltZSB0byBjaGVjayB0aGUgYG5ldC9iYXRtYW4tYWR2L0tjb25maWdgIGZpbGUgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkFUTUFOX0FEViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvS2NvbmZpZy05LVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzoxMDpjb25maWcgQkFUTUFOX0FEVlxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O0IuQS5ULk0uQS5OLiBBZHZhbmNlZCBNZXNoaW5nIFByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0xOS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MjA6Y29uZmlnIEJBVE1BTl9BRFZfQkFUTUFOX1Zcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMjEtXHRib29sIFwmIzM0O0IuQS5ULk0uQS5OLiBWIHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0zMy1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MzQ6Y29uZmlnIEJBVE1BTl9BRFZfQkxBXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtCcmlkZ2UgTG9vcCBBdm9pZGFuY2VcJiMzNDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTQ2LVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo0Nzpjb25maWcgQkFUTUFOX0FEVl9EQVRcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNDgtXHRib29sIFwmIzM0O0Rpc3RyaWJ1dGVkIEFSUCBUYWJsZVwmIzM0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNTYtXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjU3OmNvbmZpZyBCQVRNQU5fQURWX01DQVNUXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTU4LVx0Ym9vbCBcJiMzNDtNdWx0aWNhc3Qgb3B0aW1pc2F0aW9uXCYjMzQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy02NS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6NjY6Y29uZmlnIEJBVE1BTl9BRFZfREVCVUdcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNjctXHRib29sIFwmIzM0O0IuQS5ULk0uQS5OLiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTc0LVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo3NTpjb25maWcgQkFUTUFOX0FEVl9UUkFDSU5HXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTc2LVx0Ym9vbCBcJiMzNDtCLkEuVC5NLkEuTi4gdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0OgoKKipQYXRjaCBJbXBhY3QgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZ29pbmcgdG8gYWZmZWN0IG91ciBCQVRNQU4gY29kZSwgbm8gcXVlc3Rpb24uIEkgc2VlIGl0IHRvdWNoaW5nIGBiYXRfdl9lbHAuY2AgYW5kIGBiYXRfdl9vZ20uY2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIEJBVE1BTl9WIGltcGxlbWVudGF0aW9uLCBzbyB3ZSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW1wYWN0IHRoZSBleGlzdGluZyBWIHByb3RvY29sIGxvZ2ljIGFuZCBwZXJmb3JtYW5jZS4KClRoZW4sIHRoZXJlJiMzOTtzIGBicmlkZ2VfbG9vcF9hdm9pZGFuY2UuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdGhlIGhlYXJ0IG9mIEJBVE1BTl9BRFYmIzM5O3MgQnJpZGdlIExvb3AgQXZvaWRhbmNlIChCTEEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaW1wYWN0IG9uIG91ciBsb29wIGRldGVjdGlvbiBhbmQgcHJldmVudGlvbiBtZWNoYW5pc21zLiBXZSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZXNlIGNoYW5nZXMgdGhvcm91Z2hseSB0byBlbnN1cmUgdGhleSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHRoZXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgdmFyaW91cyBCTEEgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKRmluYWxseSwgd2UgaGF2ZSBgdHBfbWV0ZXIuY2AuIE5vdywgdGhhdCBvbmUgaXMgbGVzcyBpbW1lZGlhdGVseSBvYnZpb3VzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhhdCBtb2R1bGUgbGl2ZXMuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L2JhdG1hbi1hZHYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgY29yZSB0byBiYXRtYW4tYWR2IG9yIGEgbW9kdWxlIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQuIEkgc3VzcGVjdCBpdCYjMzk7cyBjb3JlLCBidXQgYmVzdCB0byBiZSBzdXJlLiBUaGF0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhyb3VnaHB1dCBtZXRlcmluZyBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIGFmZmVjdCBhbnkgcmVsYXRlZCBwZXJmb3JtYW5jZSBtZXRyaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RwX21ldGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU9Mjk9YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX1RSQUNJTkcpICYjNDM7PSB0cmFjZS5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZTozMDpiYXRtYW4tYWR2LXkgJiM0Mzs9IHRwX21ldGVyLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlLTMxLWJhdG1hbi1hZHYteSAmIzQzOz0gdHJhbnNsYXRpb24tdGFibGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIGJ1aWxkIHByb2Nlc3MsIGZvY3VzaW5nIG9uIGB0cF9tZXRlci5jYCB3aXRoaW4gdGhlIEJBVE1BTi1BRFYgY29udGV4dDoKCioqQW5hbHl6aW5nIHRoZSBCQVRNQU4tQURWIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBrbm93IHRoYXQgYHRwX21ldGVyLmNgIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgaWYgYEJBVE1BTl9BRFZgIGlzIHR1cm5lZCBvbi4gVGhhdCYjMzk7cyBhIGdpdmVuLCBub3RoaW5nIG5ldyB0aGVyZS4gTWFrZXMgc2Vuc2UsIGl0JiMzOTtzIGEgY29yZSBjb21wb25lbnQuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgQkFUTUFOX0FEVl9CQVRNQU5fVmAgYW5kIGBCQVRNQU5fQURWX0JMQWAgYXJlIGFsc28gZW5hYmxlZCBhbG9uZ3NpZGUgaXQuIFRoYXQgY29uZmlndXJhdGlvbiBpcyBjcnVjaWFsOyBpdCBkcml2ZXMgdGhlIGZ1bmN0aW9uYWxpdHkuIEdvdHRhIHZlcmlmeSB0aG9zZSBhcmUgc2V0IGFwcHJvcHJpYXRlbHkuCgpUbyBjb25maXJtIGhvdyB0aGUgb2JqZWN0IGZpbGVzIGFyZSBtYW5hZ2VkLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZWAuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgc2VhcmNoIGZvciBgYmF0X3ZfZWxwLm9gIGFuZCBgYmF0X3Zfb2dtLm9gIHdpdGhpbiB0aGF0IE1ha2VmaWxlLiBUaGUgYnVpbGQgcHJvY2VzcyBkZXRhaWxzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIGxpbmtlZCBhbmQgYnVpbHQgcmVsYXRpdmUgdG8gYHRwX21ldGVyLmNgIHdoZW4gdGhlIHZhcmlvdXMgQkFUTUFOLUFEViBmZWF0dXJlcyBhcmUgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdF92JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU9OD1iYXRtYW4tYWR2LXkgJiM0Mzs9IGJhdF9pdl9vZ20ub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6OTpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1YpICYjNDM7PSBiYXRfdi5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxMDpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1YpICYjNDM7PSBiYXRfdl9lbHAub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTE6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WKSAmIzQzOz0gYmF0X3Zfb2dtLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlLTEyLWJhdG1hbi1hZHYteSAmIzQzOz0gYml0YXJyYXkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTkwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBc3Nlc3NtZW50IG9mIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBhZmZpcm1hdGlvbiBvZiBgQkFUTUFOX0FEVl9CQVRNQU5fVmAgaXMgc3BvdCBvbi4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG5lY2Vzc2l0eS4gTm93LCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcG90ZW50aWFsIHJlbGF0ZWQgYXJlYSB0aGF0IHdhcnJhbnRzIGNsb3NlciBzY3J1dGlueS4gV2hhdCBhYm91dCBgYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgPyBDb25zaWRlcmluZyB0aGUgbmVlZCBmb3IgQmF0bWFuLWFkdiBmdW5jdGlvbmFsaXR5LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBicmlkZ2UgbG9vcCBhdm9pZGFuY2UgbG9naWMgaXMgcm9idXN0IGFuZCBjb3JyZWN0bHkgaW50ZXJhY3RzIHdpdGggdGhlIG5ldyB2ZXJzaW9uLiBUaGUgaW50ZXJhY3Rpb24gb2YgdGhlIGJyaWRnZSBsb29wIGF2b2lkYW5jZSBjb2RlIHdpdGggdGhpcyB2ZXJzaW9uIGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHRob3JvdWdoIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyaWRnZV9sb29wX2F2b2lkYW5jZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L01ha2VmaWxlPTEyPWJhdG1hbi1hZHYteSAmIzQzOz0gYml0YXJyYXkub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTM6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0JMQSkgJiM0Mzs9IGJyaWRnZV9sb29wX2F2b2lkYW5jZS5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZS0xNC1iYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfREFUKSAmIzQzOz0gZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OTgKCQkJCQkJCW91dHB1dDogOTQKCQkJCQkJCXRob3VnaHRzOiA3NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgRnVuY3Rpb25zIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgY2xlYXI6IHdlJiMzOTtyZSB0YXJnZXRpbmcgYEJBVE1BTl9BRFZfQkxBYCBhbmQgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmdXp6LiBUaGUgaW5pdGlhbCBzdGVwIGlzIGFsd2F5cyB0byBwaW5wb2ludCB0aGUgY29yZSBtb2R1bGVzIHRoYXQgYXJlIHRvdWNoZWQgYnkgdGhlIHBhdGNoLiBJJiMzOTt2ZSBxdWlja2x5IHNjYW5uZWQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgaWRlbnRpZmllZCBhIHN1YnN0YW50aWFsIGxpc3QuCgpOb3cgY29tZXMgdGhlIGNydWNpYWwgcGFydCDigJMgZGlzdGlsbGluZyB0aGUgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gSSYjMzk7dmUgbmFycm93ZWQgZG93biB0aGUgbGlzdCBiYXNlZCBvbiBwb3RlbnRpYWwgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZW50cnkgcG9pbnRzIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuIEFmdGVyIGEgcXVpY2sgYXNzZXNzbWVudCwgdGhlIGluaXRpYWwgZnJvbnRydW5uZXJzIGFyZTogYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlYCwgYGJhdGFkdl9oYXJkX2lmX2V2ZW50YCwgYGJhdGFkdl9tZXNoaWZfc2xhdmVfYWRkYCwgYGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyYCwgYGJhdGFkdl90cF9yZWN2X21zZ2AsIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgLCBhbmQgYGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbmAuCgpJJiMzOTt2ZSB0YWtlbiBhIGRlZXBlciBkaXZlIG9uIGEgZmV3IG9mIHRoZXNlLCB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4gIGBiYXRhZHZfdHBfcmVjdl9tc2dgIGlzIHJlYWNoYWJsZSB2aWEgaW5jb21pbmcgVFAgbWV0ZXIgbWVzc2FnZXM7IGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgIHZpYSBpbmNvbWluZyBUVkxWIGNvbnRhaW5lcnM7IGBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VgIHZpYSBhZGRpbmcgYSBzbGF2ZSB0byBhIG1lc2ggaW50ZXJmYWNlLCB3aGljaCBjYW4gaGFwcGVuIHZpYSBuZXRsaW5rIG9yIHN5c2ZzOyBhbmQgZmluYWxseSwgYGJhdGFkdl9tZXNoaWZfc2xhdmVfYWRkYCBpcyB0aGUgbmV0ZGV2X29wcyBgbmRvX2FkZF9zbGF2ZWAgZnVuY3Rpb24gZm9yIHRoZSBtZXNoIGludGVyZmFjZS4KClVsdGltYXRlbHksIEkmIzM5O20gY29uZmlkZW50IGFib3V0IHByb2NlZWRpbmcgd2l0aCB0aGVzZSBzaXggZnVuY3Rpb25zIGZvciBvdXIgZm9jdXNlZCBmdXp6aW5nIGVmZm9ydDogYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlYCwgYGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyYCwgYGJhdGFkdl90cF9yZWN2X21zZ2AsIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgIGFuZCBgYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluYC4KCk5leHQsIEkmIzM5O2xsIHBlcmZvcm0gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IHN0YXRpYyBpbmxpbmUsIGVuc3VyaW5nIHdlIGNhbiBwcm9wZXJseSBpbnN0cnVtZW50IGFuZCB0YXJnZXQgdGhlbSB3aXRoIHRoZSBmdXp6ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KHZvaWR8aW50fGJvb2x8c3RydWN0IGJhdGFkdl90dmx2X2hkciBcXCopIGJhdGFkdl8oaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2V8aGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlfHRwX2hhbmRsZV9vdXRfb2Zfb3JkZXJ8dHBfcmVjdl9tc2d8dHZsdl9jb250YWluZXJzX3Byb2Nlc3N8dHZsdl9jb250YWluZXJzX2NvbnRhaW4pJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM9NzAzPWJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuLS1cbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtNzIzLSAqL1xubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYzo3MjQ6aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldixcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtNzI1LVx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXG4tLVxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy04MzEtICovXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jOjgzMjp2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy04MzMte1xuLS1cbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmg9NzE9YmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTtcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmg6NzI6aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldixcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgtNzMtXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7XG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oOjc0OnZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaC03NS1pbnQgYmF0YWR2X2hhcmRpZl9taW5fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jPTEzNDY9c3RhdGljIGludCBiYXRhZHZfdHBfc2VuZF9hY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdCxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jLTE0MTUtICovXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jOjE0MTY6c3RhdGljIGJvb2wgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXIoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycyxcbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMtMTQxNy1cdFx0XHRcdFx0ICB1MzIgc2Vxbm8sIHUzMiBwYXlsb2FkX2xlbilcbi0tXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jPTE1NjQ9YmF0YWR2X3RwX2luaXRfcmVjdihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMtMTYyNS0gKi9cbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmM6MTYyNjpzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjdl9tc2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMtMTYyNy1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYmF0bWFuLWFkdi90dmx2LmM9NDYwPXN0YXRpYyBzdHJ1Y3QgYmF0YWR2X3R2bHZfaGRyICpiYXRhZHZfdHZsdl9oZHJfbmV4dCh2b2lkICoqdHZsdl92YWx1ZSwgdTE2ICp0dmx2X3ZhbHVlX2xlbilcbi0tXG5uZXQvYmF0bWFuLWFkdi90dmx2LmMtNTAyLSAqL1xubmV0L2JhdG1hbi1hZHYvdHZsdi5jOjUwMzpzdGF0aWMgYm9vbCBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW4odm9pZCAqdHZsdl92YWx1ZSxcbm5ldC9iYXRtYW4tYWR2L3R2bHYuYy01MDQtXHRcdFx0XHRcdCAgIHUxNiB0dmx2X3ZhbHVlX2xlbiwgdTggdHlwZSxcbi0tXG5uZXQvYmF0bWFuLWFkdi90dmx2LmMtNTI5LSAqL1xubmV0L2JhdG1hbi1hZHYvdHZsdi5jOjUzMDppbnQgYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG5uZXQvYmF0bWFuLWFkdi90dmx2LmMtNTMxLVx0XHRcdFx0ICAgdTggcGFja2V0X3R5cGUsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHZsdi5oPTQwPXZvaWQgYmF0YWR2X3R2bHZfaGFuZGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG5uZXQvYmF0bWFuLWFkdi90dmx2LmgtNDEtXHRcdFx0XHQgICAgdTggdHlwZSwgdTggdmVyc2lvbik7XG5uZXQvYmF0bWFuLWFkdi90dmx2Lmg6NDI6aW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvdHZsdi5oLTQzLVx0XHRcdFx0ICAgdTggcGFja2V0X3R5cGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Mjc1CgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDY5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHNlZW0gdG8gYmU6IGBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VgLCBgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcmAsIGBiYXRhZHZfdHBfcmVjdl9tc2dgLCBgYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzYCwgYW5kIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW5gLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgc2FmZSB0byBpbmNsdWRlLCBhbmQgdGhlbiBJJiMzOTtsbCBtYXJrIHRob3NlIGFzIG15IGBGb2N1c1N5bWJvbHNgLgoKTmV4dCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZmlsZXMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIGBiYXRfdl9lbHAuY2AsIGBiYXRfdl9vZ20uY2AsIGFuZCBgYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgLiBGcm9tIHRoaXMsIEkgY2FuIGRlcml2ZSBgQkFUTUFOX0FEVmAsIGBCQVRNQU5fQURWX0JBVE1BTl9WYCwgYW5kIGBCQVRNQU5fQURWX0JMQWAgYXMgdGhlIG5lY2Vzc2FyeSBjb25maWdzLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlLWNoZWNrIHRoZWlyIGV4YWN0IG5hbWVzLCB3aGljaCBJIGRpZCBhZ2FpbnN0IHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRob3NlIGFyZSBpbmNsdWRlZCBpbiBteSBgRW5hYmxlQ29uZmlnc2AuCgpOb3csIGRvZXMgdGhpcyBwYXRjaCB3YXJyYW50IGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGNyaXRpY2FsIGFzcGVjdHMgb2YgQi5BLlQuTS5BLk4uIEFkdmFuY2VkOiBpbnRlcmZhY2UgaGFuZGxpbmcsIFRQIG1ldGVyIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgVFZMViBjb250YWluZXIgcGFyc2luZy4gVGhlc2UgYXJlIGFsbCBjb3JlIGxvZ2ljIHBhdGhzLCBhY2Nlc3NpYmxlIHZpYSB1c2VyIHNwYWNlIHRocm91Z2ggbmV0bGluaywgc3lzZnMsIGFuZCBuZXR3b3JrIHBhY2tldHMsIG1ha2luZyB0aGVtIGhpZ2gtdmFsdWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gSSBjYW4gZGVmaW5pdGl2ZWx5IHNldCBgV29ydGhGdXp6aW5nYCB0byB0cnVlLgoKVGhlcmVmb3JlLCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgc2V0dXA6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6CiAgICAqICAgYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAKICAgICogICBgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZWAKICAgICogICBgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXJgCiAgICAqICAgYGJhdGFkdl90cF9yZWN2X21zZ2AKICAgICogICBgYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzYAogICAgKiAgIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW5gCiogICBgRW5hYmxlQ29uZmlnc2A6CiAgICAqICAgYEJBVE1BTl9BRFZgCiAgICAqICAgYEJBVE1BTl9BRFZfQkFUTUFOX1ZgCiAgICAqICAgYEJBVE1BTl9BRFZfQkxBYAoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBzZXR1cC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkFUTUFOX0FEViYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX0JBVE1BTl9WJiMzNDssCiAgICAmIzM0O0JBVE1BTl9BRFZfQkxBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O2JhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7YmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXImIzM0OywKICAgICYjMzQ7YmF0YWR2X3RwX3JlY3ZfbXNnJiMzNDssCiAgICAmIzM0O2JhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgcm91dGluZyBwcm90b2NvbC4gSXQgbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGhhcmQgaW50ZXJmYWNlcyAoYWRkaW5nL3JlbW92aW5nIHRoZW0gZnJvbSB0aGUgbWVzaCksIHRoZSBwcm9jZXNzaW5nIG9mIG91dC1vZi1vcmRlciBUUCBtZXRlciBwYWNrZXRzLCBhbmQgdGhlIHBhcnNpbmcgb2YgVFZMViBjb250YWluZXJzLiBUaGVzZSBhcmUgY29yZSBsb2dpYyBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsvc3lzZnMgYW5kIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JBVE1BTl9BRFYmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9CQVRNQU5fViYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX0JMQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9yZWN2X21zZyYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIHJvdXRpbmcgcHJvdG9jb2wuIEl0IG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBoYXJkIGludGVyZmFjZXMgKGFkZGluZy9yZW1vdmluZyB0aGVtIGZyb20gdGhlIG1lc2gpLCB0aGUgcHJvY2Vzc2luZyBvZiBvdXQtb2Ytb3JkZXIgVFAgbWV0ZXIgcGFja2V0cywgYW5kIHRoZSBwYXJzaW5nIG9mIFRWTFYgY29udGFpbmVycy4gVGhlc2UgYXJlIGNvcmUgbG9naWMgY2hhbmdlcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rL3N5c2ZzIGFuZCBuZXR3b3JrIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjA6NTMuOTc1Nzc2ODA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MTYyNDM3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CQVRNQU5fVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CTEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyXCIsXG4gICAgXCJiYXRhZHZfdHBfcmVjdl9tc2dcIixcbiAgICBcImJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2Vzc1wiLFxuICAgIFwiYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgcm91dGluZyBwcm90b2NvbC4gSXQgbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGhhcmQgaW50ZXJmYWNlcyAoYWRkaW5nL3JlbW92aW5nIHRoZW0gZnJvbSB0aGUgbWVzaCksIHRoZSBwcm9jZXNzaW5nIG9mIG91dC1vZi1vcmRlciBUUCBtZXRlciBwYWNrZXRzLCBhbmQgdGhlIHBhcnNpbmcgb2YgVFZMViBjb250YWluZXJzLiBUaGVzZSBhcmUgY29yZSBsb2dpYyBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsvc3lzZnMgYW5kIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIwOjUzLjk3NTc4MDg4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1MjIwMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWEyZWY0MWRkMzNjYWQxNjU5ODYzNWQyMGUzNGQ1M2Y1OGRlNWMwYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAyMToyMDo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcXG5pbmRleCBiYjJmMDEyYjQ1NGVhNC4uMjI2MjIyODNmNTliMGMgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jXFxuQEAgLTQwNCwyMyArNDA0LDE0IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2VuZF90b19pZihzdHJ1Y3QgYmF0YWR2X2ZvcndfcGFja2V0ICpmb3J3X3BhY2tldCxcXG4gLyogc2VuZCBhIGJhdG1hbiBvZ20gcGFja2V0ICovXFxuIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fZW1pdChzdHJ1Y3QgYmF0YWR2X2ZvcndfcGFja2V0ICpmb3J3X3BhY2tldClcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcXG4tXFxuIFxcdGlmICghZm9yd19wYWNrZXQtXFx1MDAzZWlmX2luY29taW5nKSB7XFxuIFxcdFxcdHByX2VycihcXFwiRXJyb3IgLSBjYW4ndCBmb3J3YXJkIHBhY2tldDogaW5jb21pbmcgaWZhY2Ugbm90IHNwZWNpZmllZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0bWVzaF9pZmFjZSA9IGZvcndfcGFja2V0LVxcdTAwM2VpZl9pbmNvbWluZy1cXHUwMDNlbWVzaF9pZmFjZTtcXG4tXFxuIFxcdGlmIChXQVJOX09OKCFmb3J3X3BhY2tldC1cXHUwMDNlaWZfb3V0Z29pbmcpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAoZm9yd19wYWNrZXQtXFx1MDAzZWlmX291dGdvaW5nLVxcdTAwM2VtZXNoX2lmYWNlICE9IG1lc2hfaWZhY2UpIHtcXG4tXFx0XFx0cHJfd2FybihcXFwiJXM6IG1lc2ggaW50ZXJmYWNlIHN3aXRjaCBmb3IgcXVldWVkIE9HTVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuIFxcdGlmIChmb3J3X3BhY2tldC1cXHUwMDNlaWZfaW5jb21pbmctXFx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfQUNUSVZFKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC05MTAsOCArOTAxLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zY2hlZHVsZV9idWZmKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcXG4gXFxuIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2NoZWR1bGUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiB7XFxuLVxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UgfHxcXG4tXFx0ICAgIGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4rXFx0aWYgKGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlYmF0X2l2Lm9nbV9idWZmX211dGV4KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuY1xcbmluZGV4IDQ4NDFmMGYxYTliMTM5Li4yNjJlNDAwNDAwMDdjYyAxMDA2NDRcXG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jXFxuQEAgLTkwLDEyICs5MCw2IEBAIHN0YXRpYyBib29sIGJhdGFkdl92X2VscF9nZXRfdGhyb3VnaHB1dChzdHJ1Y3QgYmF0YWR2X2hhcmRpZl9uZWlnaF9ub2RlICpuZWlnaCxcXG4gXFx0dTMyIHRocm91Z2hwdXQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHQvKiBkb24ndCBxdWVyeSB0aHJvdWdocHV0IHdoZW4gbm8gbG9uZ2VyIGFzc29jaWF0ZWQgd2l0aCBhbnlcXG4tXFx0ICogYmF0bWFuLWFkdiBpbnRlcmZhY2VcXG4tXFx0ICovXFxuLVxcdGlmICghbWVzaF9pZmFjZSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4gXFx0LyogaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgY3VzdG9taXNlZCB2YWx1ZSBmb3IgdGhpcyBpbnRlcmZhY2UsIHRoZW5cXG4gXFx0ICogcmV0dXJuIGl0IGRpcmVjdGx5XFxuIFxcdCAqL1xcbkBAIC0zMTEsOCArMzA1LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3ZfZWxwX3BlcmlvZGljX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qIHdlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBzaHV0dGluZyB0aGlzIGludGVyZmFjZSBkb3duICovXFxuLVxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UgfHxcXG4tXFx0ICAgIGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4rXFx0aWYgKGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHQvKiB0aGUgaW50ZXJmYWNlIHdhcyBlbmFibGVkIGJ1dCBtYXkgbm90IGJlIHJlYWR5IHlldCAqL1xcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfdl9vZ20uYyBiL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jXFxuaW5kZXggMDM3OTIxYWFkMzVkNTguLmU5MjFkNDlmN2VjZWRkIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmNcXG5AQCAtMTE1LDE0ICsxMTUsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3N0YXJ0X3RpbWVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXFxuIFxcbiAvKipcXG4gICogYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoKSAtIHNlbmQgYSBiYXRtYW4gb2dtIHVzaW5nIGEgZ2l2ZW4gaW50ZXJmYWNlXFxuLSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiAgKiBAc2tiOiB0aGUgT0dNIHRvIHNlbmRcXG4gICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2UgdG8gdXNlIHRvIHNlbmQgdGhlIE9HTVxcbiAgKi9cXG4tc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuK3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXFxuIHtcXG4rXFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UpO1xcbitcXG4gXFx0aWYgKGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfQUNUSVZFKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTE4OSw3ICsxODksNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9saXN0X2ZyZWUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiBcXG4gLyoqXFxuICAqIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoKSAtIGZsdXNoIFxcdTAwMjYgc2VuZCBhZ2dyZWdhdGlvbiBxdWV1ZVxcbi0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4gICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUgYWdncmVnYXRpb24gcXVldWUgdG8gZmx1c2hcXG4gICpcXG4gICogQWdncmVnYXRlcyBhbGwgT0dNdjIgcGFja2V0cyBjdXJyZW50bHkgaW4gdGhlIGFnZ3JlZ2F0aW9uIHF1ZXVlIGludG8gYVxcbkBAIC0xOTksOCArMTk4LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3JfbGlzdF9mcmVlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcXG4gICpcXG4gICogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGhhcmRfaWZhY2UtXFx1MDAzZWJhdF92LmFnZ3JfbGlzdC5sb2NrLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXFxuK3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBhZ2dyX2xlbiA9IGhhcmRfaWZhY2UtXFx1MDAzZWJhdF92LmFnZ3JfbGVuO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2FnZ3I7XFxuQEAgLTIzMCwyNiArMjI4LDIxIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gXFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gXFx0fVxcbiBcXG4tXFx0YmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoYmF0X3ByaXYsIHNrYl9hZ2dyLCBoYXJkX2lmYWNlKTtcXG4rXFx0YmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoc2tiX2FnZ3IsIGhhcmRfaWZhY2UpO1xcbiB9XFxuIFxcbiAvKipcXG4gICogYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKCkgLSBxdWV1ZSBhIGJhdG1hbiBvZ20gb24gYSBnaXZlbiBpbnRlcmZhY2VcXG4tICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuICAqIEBza2I6IHRoZSBPR00gdG8gcXVldWVcXG4gICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2UgdG8gcXVldWUgdGhlIE9HTSBvblxcbiAgKi9cXG4tc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiB7XFxuLVxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlICE9IGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlKSB7XFxuLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UpO1xcbiBcXG4gXFx0aWYgKCFSRUFEX09OQ0UoYmF0X3ByaXYtXFx1MDAzZWFnZ3JlZ2F0ZWRfb2dtcykpIHtcXG4tXFx0XFx0YmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoYmF0X3ByaXYsIHNrYiwgaGFyZF9pZmFjZSk7XFxuK1xcdFxcdGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHNrYiwgaGFyZF9pZmFjZSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtMjYwLDcgKzI1Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWJhdGFkdl92X29nbV9xdWV1ZV9sZWZ0KHNrYiwgaGFyZF9pZmFjZSkpXFxuLVxcdFxcdGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoYmF0X3ByaXYsIGhhcmRfaWZhY2UpO1xcbitcXHRcXHRiYXRhZHZfdl9vZ21fYWdncl9zZW5kKGhhcmRfaWZhY2UpO1xcbiBcXG4gXFx0aGFyZF9pZmFjZS1cXHUwMDNlYmF0X3YuYWdncl9sZW4gKz0gYmF0YWR2X3Zfb2dtX2xlbihza2IpO1xcbiBcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2ViYXRfdi5hZ2dyX2xpc3QsIHNrYik7XFxuQEAgLTM1Nyw3ICszNTAsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fc2VuZF9tZXNoaWYoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihiYXRfcHJpdiwgc2tiX3RtcCwgaGFyZF9pZmFjZSk7XFxuK1xcdFxcdGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihza2JfdG1wLCBoYXJkX2lmYWNlKTtcXG4gXFx0XFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XFxuIFxcdH1cXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuQEAgLTM5NywxNCArMzkwLDEyIEBAIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlX2JhdF92ICpiYXR2O1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XFxuLVxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7XFxuIFxcbiBcXHRiYXR2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZV9iYXRfdiwgYWdncl93cS53b3JrKTtcXG4gXFx0aGFyZF9pZmFjZSA9IGNvbnRhaW5lcl9vZihiYXR2LCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UsIGJhdF92KTtcXG4tXFx0YmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlYmF0X3YuYWdncl9saXN0LmxvY2spO1xcbi1cXHRiYXRhZHZfdl9vZ21fYWdncl9zZW5kKGJhdF9wcml2LCBoYXJkX2lmYWNlKTtcXG4rXFx0YmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChoYXJkX2lmYWNlKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZWJhdF92LmFnZ3JfbGlzdC5sb2NrKTtcXG4gXFxuIFxcdGJhdGFkdl92X29nbV9zdGFydF9xdWV1ZV90aW1lcihoYXJkX2lmYWNlKTtcXG5AQCAtNjAxLDcgKzU5Miw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9mb3J3YXJkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdFxcdCAgIGlmX291dGdvaW5nLVxcdTAwM2VuZXRfZGV2LVxcdTAwM2VuYW1lLCBudG9obChvZ21fZm9yd2FyZC1cXHUwMDNldGhyb3VnaHB1dCksXFxuIFxcdFxcdCAgIG9nbV9mb3J3YXJkLVxcdTAwM2V0dGwsIGlmX2luY29taW5nLVxcdTAwM2VuZXRfZGV2LVxcdTAwM2VuYW1lKTtcXG4gXFxuLVxcdGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihiYXRfcHJpdiwgc2tiLCBpZl9vdXRnb2luZyk7XFxuK1xcdGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihza2IsIGlmX291dGdvaW5nKTtcXG4gXFxuIG91dDpcXG4gXFx0YmF0YWR2X29yaWdfaWZpbmZvX3B1dChvcmlnX2lmaW5mbyk7XFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jIGIvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcXG5pbmRleCA1YzczZjZiYTE2Y2ZmMy4uZjlhMWZhZGY4ZGU5ZTQgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuY1xcbkBAIC0zNDQsNyArMzQ0LDYgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsXFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aGhkcjtcXG4gXFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmO1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcXG4gXFx0dTggKmh3X3NyYztcXG4gXFx0c3RydWN0IGJhdGFkdl9ibGFfY2xhaW1fZHN0IGxvY2FsX2NsYWltX2Rlc3Q7XFxuIFxcdF9fYmUzMiB6ZXJvaXAgPSAwO1xcbkBAIC0zNTcsMTQgKzM1NiwxMCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfY2xhaW0oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKm1hYyxcXG4gXFx0ICAgICAgIHNpemVvZihsb2NhbF9jbGFpbV9kZXN0KSk7XFxuIFxcdGxvY2FsX2NsYWltX2Rlc3QudHlwZSA9IGNsYWltdHlwZTtcXG4gXFxuLVxcdG1lc2hfaWZhY2UgPSBSRUFEX09OQ0UocHJpbWFyeV9pZi1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuLVxcdGlmICghbWVzaF9pZmFjZSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbiBcXHRza2IgPSBhcnBfY3JlYXRlKEFSUE9QX1JFUExZLCBFVEhfUF9BUlAsXFxuIFxcdFxcdFxcdCAvKiBJUCBEU1Q6IDAuMC4wLjAgKi9cXG4gXFx0XFx0XFx0IHplcm9pcCxcXG4tXFx0XFx0XFx0IG1lc2hfaWZhY2UsXFxuK1xcdFxcdFxcdCBwcmltYXJ5X2lmLVxcdTAwM2VtZXNoX2lmYWNlLFxcbiBcXHRcXHRcXHQgLyogSVAgU1JDOiAwLjAuMC4wICovXFxuIFxcdFxcdFxcdCB6ZXJvaXAsXFxuIFxcdFxcdFxcdCAvKiBFdGhlcm5ldCBEU1Q6IEJyb2FkY2FzdCAqL1xcbkBAIC00NDIsNyArNDM3LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsXFxuIFxcdH1cXG4gXFxuIFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuLVxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG1lc2hfaWZhY2UpO1xcbitcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwcmltYXJ5X2lmLVxcdTAwM2VtZXNoX2lmYWNlKTtcXG4gXFx0YmF0YWR2X2luY19jb3VudGVyKGJhdF9wcml2LCBCQVRBRFZfQ05UX1JYKTtcXG4gXFx0YmF0YWR2X2FkZF9jb3VudGVyKGJhdF9wcml2LCBCQVRBRFZfQ05UX1JYX0JZVEVTLFxcbiBcXHRcXHRcXHQgICBza2ItXFx1MDAzZWxlbiArIEVUSF9ITEVOKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmNcXG5pbmRleCAwM2QwMWMyMGE5NTQ4Yi4uYjY4Njc1NzZiYmFmYWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmNcXG5AQCAtNjMsNiArNjMsNyBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbiBcXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XFxuIFxcbiBcXHRoYXJkX2lmYWNlID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlLCByZWZjb3VudCk7XFxuK1xcdG5ldGRldl9wdXQoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSwgXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZW1lc2hpZl9kZXZfdHJhY2tlcik7XFxuIFxcdG5ldGRldl9wdXQoaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldiwgXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZWRldl90cmFja2VyKTtcXG4gXFxuIFxcdGtmcmVlX3JjdShoYXJkX2lmYWNlLCByY3UpO1xcbkBAIC03NSwyMSArNzYsMjEgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcXG4gICogUmV0dXJuOiBiYXRhZHZfaGFyZF9pZmFjZSBvZiBuZXRfZGV2ICh3aXRoIGluY3JlYXNlZCByZWZjbnQpLCBOVUxMIG9uIGVycm9yc1xcbiAgKi9cXG4gc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpcXG4tYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxcbitiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpXFxuIHtcXG4gXFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaGFyZF9pZmFjZSwgXFx1MDAyNmJhdGFkdl9oYXJkaWZfbGlzdCwgbGlzdCkge1xcbi1cXHRcXHRpZiAoaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldiA9PSBuZXRfZGV2IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlcmVmY291bnQpKVxcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbitcXHRBU1NFUlRfUlROTCgpO1xcbiBcXG4tXFx0aGFyZF9pZmFjZSA9IE5VTEw7XFxuK1xcdG1lc2hfaWZhY2UgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobmV0X2Rldik7XFxuK1xcdGlmICghbWVzaF9pZmFjZSB8fCAhYmF0YWR2X21lc2hpZl9pc192YWxpZChtZXNoX2lmYWNlKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRoYXJkX2lmYWNlID0gbmV0ZGV2X2xvd2VyX2Rldl9nZXRfcHJpdmF0ZShtZXNoX2lmYWNlLCBuZXRfZGV2KTtcXG4rXFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlcmVmY291bnQpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLW91dDpcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBoYXJkX2lmYWNlO1xcbiB9XFxuIFxcbkBAIC0yNDUsNyArMjQ2LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKl9fYmF0YWR2X2dldF9yZWFsX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHR9XFxuIFxcbiBcXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KG5ldGRldik7XFxuLVxcdGlmICghaGFyZF9pZmFjZSB8fCAhaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSlcXG4rXFx0aWYgKCFoYXJkX2lmYWNlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdG5ldCA9IGRldl9uZXQoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuQEAgLTUzOSwxNiArNTQwLDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhXFxuIFxcdGNvbnN0IHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqdG1wX2hhcmRfaWZhY2U7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuIFxcbi1cXHRpZiAoIW1lc2hfaWZhY2UpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9wcml2YXRlKG1lc2hfaWZhY2UsIHRtcF9oYXJkX2lmYWNlLCBpdGVyKSB7XFxuIFxcdFxcdGlmICh0bXBfaGFyZF9pZmFjZSA9PSBoYXJkX2lmYWNlKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmICh0bXBfaGFyZF9pZmFjZS1cXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuIFxcdFxcdGlmICghYmF0YWR2X2NvbXBhcmVfZXRoKHRtcF9oYXJkX2lmYWNlLVxcdTAwM2VuZXRfZGV2LVxcdTAwM2VkZXZfYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0aGFyZF9pZmFjZS1cXHUwMDNlbmV0X2Rldi1cXHUwMDNlZGV2X2FkZHIpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtNTc0LDkgKzU2OSw2IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9oYXJkaWZfcmVjYWxjX2V4dHJhX3NrYnJvb20oc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9wcml2YXRlX3JjdShtZXNoX2lmYWNlLCBoYXJkX2lmYWNlLCBpdGVyKSB7XFxuLVxcdFxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4gXFx0XFx0bG93ZXJfaGVhZGVyX2xlbiA9IG1heF90KHVuc2lnbmVkIHNob3J0LCBsb3dlcl9oZWFkZXJfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHQgaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2Rldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4gXFxuQEAgLTcyMywzOCArNzE1LDYzIEBAIGJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiB9XFxuIFxcbiAvKipcXG4tICogYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKCkgLSBFbnNsYXZlIGhhcmQgaW50ZXJmYWNlIHRvIG1lc2ggaW50ZXJmYWNlXFxuLSAqIEBoYXJkX2lmYWNlOiBoYXJkIGludGVyZmFjZSB0byBhZGQgdG8gbWVzaCBpbnRlcmZhY2VcXG4rICogYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKCkgLSBFbnNsYXZlIGludGVyZmFjZSB0byBtZXNoIGludGVyZmFjZVxcbisgKiBAbmV0X2RldjogbmV0ZGV2IHN0cnVjdCBvZiB0aGUgaW50ZXJmYWNlIHRvIGFkZCB0byBtZXNoIGludGVyZmFjZVxcbiAgKiBAbWVzaF9pZmFjZTogbmV0ZGV2IHN0cnVjdCBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIGluIGNhc2Ugb2YgZmFpbHVyZVxcbiAgKi9cXG4taW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXFxuK2ludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKVxcbiB7XFxuIFxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7XFxuIFxcdF9fYmUxNiBldGhlcnR5cGUgPSBodG9ucyhFVEhfUF9CQVRNQU4pO1xcbiBcXHRpbnQgbWF4X2hlYWRlcl9sZW4gPSBiYXRhZHZfbWF4X2hlYWRlcl9sZW4oKTtcXG4rXFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xcbiBcXHR1bnNpZ25lZCBpbnQgcmVxdWlyZWRfbXR1O1xcbiBcXHR1bnNpZ25lZCBpbnQgaGFyZGlmX210dTtcXG4gXFx0Ym9vbCBmcmFnbWVudGF0aW9uO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aGFyZGlmX210dSA9IFJFQURfT05DRShoYXJkX2lmYWNlLVxcdTAwM2VuZXRfZGV2LVxcdTAwM2VtdHUpO1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0aWYgKCFiYXRhZHZfaXNfdmFsaWRfaWZhY2UobmV0X2RldikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aGFyZGlmX210dSA9IFJFQURfT05DRShuZXRfZGV2LVxcdTAwM2VtdHUpO1xcbiBcXHRyZXF1aXJlZF9tdHUgPSBSRUFEX09OQ0UobWVzaF9pZmFjZS1cXHUwMDNlbXR1KSArIG1heF9oZWFkZXJfbGVuO1xcbiBcXG4gXFx0aWYgKGhhcmRpZl9tdHUgXFx1MDAzYyBFVEhfTUlOX01UVSArIG1heF9oZWFkZXJfbGVuKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRoYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpO1xcbitcXHRpZiAoIWhhcmRfaWZhY2UpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0a3JlZl9nZXQoXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZXJlZmNvdW50KTtcXG4rXFx0bmV0ZGV2X2hvbGQobmV0X2RldiwgXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4rXFx0aGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldiA9IG5ldF9kZXY7XFxuK1xcbitcXHRoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPSBCQVRBRFZfSUZfSU5BQ1RJVkU7XFxuK1xcbitcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZW5laWdoX2xpc3QpO1xcbitcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlYmF0X2l2Lm9nbV9idWZmX211dGV4KTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZW5laWdoX2xpc3RfbG9jayk7XFxuK1xcdGtyZWZfaW5pdChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlcmVmY291bnQpO1xcbitcXG4rXFx0aGFyZF9pZmFjZS1cXHUwMDNlbnVtX2JjYXN0cyA9IEJBVEFEVl9OVU1fQkNBU1RTX0RFRkFVTFQ7XFxuK1xcdGlmIChiYXRhZHZfaXNfd2lmaV9oYXJkaWYoaGFyZF9pZmFjZSkpXFxuK1xcdFxcdGhhcmRfaWZhY2UtXFx1MDAzZW51bV9iY2FzdHMgPSBCQVRBRFZfTlVNX0JDQVNUU19XSVJFTEVTUztcXG4rXFxuK1xcdFdSSVRFX09OQ0UoaGFyZF9pZmFjZS1cXHUwMDNlaG9wX3BlbmFsdHksIDApO1xcbitcXG4rXFx0YmF0YWR2X3ZfaGFyZGlmX2luaXQoaGFyZF9pZmFjZSk7XFxuIFxcbiBcXHRuZXRkZXZfaG9sZChtZXNoX2lmYWNlLCBcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlbWVzaGlmX2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gXFx0aGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSA9IG1lc2hfaWZhY2U7XFxuIFxcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuIFxcbitcXHRiYXRfcHJpdi1cXHUwMDNlaGFyZGlmX2dlbmVyYXRpb24rKztcXG4gXFx0cmV0ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGluayhoYXJkX2lmYWNlLVxcdTAwM2VuZXRfZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBtZXNoX2lmYWNlLCBoYXJkX2lmYWNlLCBOVUxMLCBOVUxMKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtNzY0LDkgKzc4MSw2IEBAIGludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfdXBwZXI7XFxuIFxcbi1cXHRoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPSBCQVRBRFZfSUZfSU5BQ1RJVkU7XFxuLVxcbi1cXHRrcmVmX2dldChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlcmVmY291bnQpO1xcbiBcXHRoYXJkX2lmYWNlLVxcdTAwM2ViYXRtYW5fYWR2X3B0eXBlLnR5cGUgPSBldGhlcnR5cGU7XFxuIFxcdGhhcmRfaWZhY2UtXFx1MDAzZWJhdG1hbl9hZHZfcHR5cGUuZnVuYyA9IGJhdGFkdl9iYXRtYW5fc2tiX3JlY3Y7XFxuIFxcdGhhcmRfaWZhY2UtXFx1MDAzZWJhdG1hbl9hZHZfcHR5cGUuZGV2ID0gaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldjtcXG5AQCAtODAyLDE0ICs4MTYsMTEgQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXFxuIFxcdGlmIChiYXRfcHJpdi1cXHUwMDNlYWxnb19vcHMtXFx1MDAzZWlmYWNlLmVuYWJsZWQpXFxuIFxcdFxcdGJhdF9wcml2LVxcdTAwM2VhbGdvX29wcy1cXHUwMDNlaWZhY2UuZW5hYmxlZChoYXJkX2lmYWNlKTtcXG4gXFxuLW91dDpcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfdXBwZXI6XFxuIFxcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKGhhcmRfaWZhY2UtXFx1MDAzZW5ldF9kZXYsIG1lc2hfaWZhY2UpO1xcbiBlcnJfZGV2Olxcbi1cXHRoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlID0gTlVMTDtcXG4tXFx0bmV0ZGV2X3B1dChtZXNoX2lmYWNlLCBcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlbWVzaGlmX2Rldl90cmFja2VyKTtcXG4gXFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtODIxLDE3ICs4MzIsMTggQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXFxuIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXFxuIHtcXG4gXFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UpO1xcbi1cXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWY7XFxuK1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbiBcXG4gXFx0YmF0YWR2X2hhcmRpZl9kZWFjdGl2YXRlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcXG4gXFxuIFxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0YmF0YWR2X2luZm8oaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSwgXFxcIlJlbW92aW5nIGludGVyZmFjZTogJXNcXFxcblxcXCIsXFxuIFxcdFxcdCAgICBoYXJkX2lmYWNlLVxcdTAwM2VuZXRfZGV2LVxcdTAwM2VuYW1lKTtcXG4gXFx0ZGV2X3JlbW92ZV9wYWNrKFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2ViYXRtYW5fYWR2X3B0eXBlKTtcXG4tXFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XFxuIFxcbiBcXHRwcmltYXJ5X2lmID0gYmF0YWR2X3ByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTtcXG4gXFx0aWYgKGhhcmRfaWZhY2UgPT0gcHJpbWFyeV9pZikge1xcbkBAIC04NDIsMTUgKzg1NCwxNiBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiBcXG4gXFx0XFx0YmF0YWR2X2hhcmRpZl9wdXQobmV3X2lmKTtcXG4gXFx0fVxcbitcXHRiYXRhZHZfaGFyZGlmX3B1dChwcmltYXJ5X2lmKTtcXG4gXFxuIFxcdGJhdF9wcml2LVxcdTAwM2VhbGdvX29wcy1cXHUwMDNlaWZhY2UuZGlzYWJsZShoYXJkX2lmYWNlKTtcXG4tXFx0aGFyZF9pZmFjZS1cXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX05PVF9JTl9VU0U7XFxuK1xcdGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEO1xcbiBcXG4gXFx0LyogZGVsZXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgaGFyZF9pZmFjZSAqL1xcbiBcXHRiYXRhZHZfcHVyZ2Vfb3JpZ19yZWYoYmF0X3ByaXYpO1xcbiBcXHRiYXRhZHZfcHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cyhiYXRfcHJpdiwgaGFyZF9pZmFjZSk7XFxuLVxcdG5ldGRldl9wdXQoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSwgXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZW1lc2hpZl9kZXZfdHJhY2tlcik7XFxuIFxcbitcXHRiYXRfcHJpdi1cXHUwMDNlaGFyZGlmX2dlbmVyYXRpb24rKztcXG4gXFx0bmV0ZGV2X3VwcGVyX2Rldl91bmxpbmsoaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldiwgaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuIFxcdGJhdGFkdl9oYXJkaWZfcmVjYWxjX2V4dHJhX3NrYnJvb20oaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuIFxcbkBAIC04NTgsNjcgKzg3MSw2IEBAIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXFxuIFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VhZGpfbGlzdC5sb3dlcikpXFxuIFxcdFxcdGJhdGFkdl9nd19jaGVja19jbGllbnRfc3RvcChiYXRfcHJpdik7XFxuIFxcbi1cXHRoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlID0gTlVMTDtcXG4tXFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XFxuLVxcbi1vdXQ6XFxuLVxcdGJhdGFkdl9oYXJkaWZfcHV0KHByaW1hcnlfaWYpO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpcXG4tYmF0YWR2X2hhcmRpZl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxcbi17XFxuLVxcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcXG4tXFxuLVxcdEFTU0VSVF9SVE5MKCk7XFxuLVxcbi1cXHRpZiAoIWJhdGFkdl9pc192YWxpZF9pZmFjZShuZXRfZGV2KSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRoYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpO1xcbi1cXHRpZiAoIWhhcmRfaWZhY2UpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXG4tXFx0bmV0ZGV2X2hvbGQobmV0X2RldiwgXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4tXFx0aGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldiA9IG5ldF9kZXY7XFxuLVxcbi1cXHRoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlID0gTlVMTDtcXG4tXFx0aGFyZF9pZmFjZS1cXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX05PVF9JTl9VU0U7XFxuLVxcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlbGlzdCk7XFxuLVxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlbmVpZ2hfbGlzdCk7XFxuLVxcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2ViYXRfaXYub2dtX2J1ZmZfbXV0ZXgpO1xcbi1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlbmVpZ2hfbGlzdF9sb2NrKTtcXG4tXFx0a3JlZl9pbml0KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2VyZWZjb3VudCk7XFxuLVxcbi1cXHRoYXJkX2lmYWNlLVxcdTAwM2VudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfREVGQVVMVDtcXG4tXFx0aWYgKGJhdGFkdl9pc193aWZpX2hhcmRpZihoYXJkX2lmYWNlKSlcXG4tXFx0XFx0aGFyZF9pZmFjZS1cXHUwMDNlbnVtX2JjYXN0cyA9IEJBVEFEVl9OVU1fQkNBU1RTX1dJUkVMRVNTO1xcbi1cXG4tXFx0V1JJVEVfT05DRShoYXJkX2lmYWNlLVxcdTAwM2Vob3BfcGVuYWx0eSwgMCk7XFxuLVxcbi1cXHRiYXRhZHZfdl9oYXJkaWZfaW5pdChoYXJkX2lmYWNlKTtcXG4tXFxuLVxcdGtyZWZfZ2V0KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2VyZWZjb3VudCk7XFxuLVxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2VsaXN0LCBcXHUwMDI2YmF0YWR2X2hhcmRpZl9saXN0KTtcXG4tXFx0YmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uKys7XFxuLVxcbi1cXHRyZXR1cm4gaGFyZF9pZmFjZTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgYmF0YWR2X2hhcmRpZl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcXG4te1xcbi1cXHRBU1NFUlRfUlROTCgpO1xcbi1cXG4tXFx0LyogZmlyc3QgZGVhY3RpdmF0ZSBpbnRlcmZhY2UgKi9cXG4tXFx0aWYgKGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSlcXG4tXFx0XFx0YmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcXG4tXFxuLVxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEO1xcbiBcXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcXG4gfVxcbiBcXG5AQCAtMTA4MiwxMCArMTAzNCw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2hhcmRfaWZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbiBcXHRiYXRhZHZfd2lmaV9uZXRfZGV2aWNlX2V2ZW50KGV2ZW50LCBuZXRfZGV2KTtcXG4gXFxuIFxcdGhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYobmV0X2Rldik7XFxuLVxcdGlmICghaGFyZF9pZmFjZSBcXHUwMDI2XFx1MDAyNiAoZXZlbnQgPT0gTkVUREVWX1JFR0lTVEVSIHx8XFxuLVxcdFxcdFxcdCAgICBldmVudCA9PSBORVRERVZfUE9TVF9UWVBFX0NIQU5HRSkpXFxuLVxcdFxcdGhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2FkZF9pbnRlcmZhY2UobmV0X2Rldik7XFxuLVxcbiBcXHRpZiAoIWhhcmRfaWZhY2UpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtMTA5OSwxOSArMTA0NywxMiBAQCBzdGF0aWMgaW50IGJhdGFkdl9oYXJkX2lmX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxuIFxcdGNhc2UgTkVUREVWX1BSRV9UWVBFX0NIQU5HRTpcXG4tXFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2VsaXN0KTtcXG4tXFx0XFx0YmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uKys7XFxuLVxcbi1cXHRcXHRiYXRhZHZfaGFyZGlmX3JlbW92ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XFxuK1xcdFxcdGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE5FVERFVl9DSEFOR0VNVFU6XFxuLVxcdFxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlKVxcbi1cXHRcXHRcXHRiYXRhZHZfdXBkYXRlX21pbl9tdHUoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuK1xcdFxcdGJhdGFkdl91cGRhdGVfbWluX210dShoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTkVUREVWX0NIQU5HRUFERFI6XFxuLVxcdFxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXFxuLVxcdFxcdFxcdGdvdG8gaGFyZGlmX3B1dDtcXG4tXFxuIFxcdFxcdGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihoYXJkX2lmYWNlKTtcXG4gXFxuIFxcdFxcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmggYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oXFxuaW5kZXggYWYzMTY5NmMzOTc4MDguLjkzNWY0N2NhOWE0OGZkIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmhcXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oXFxuQEAgLTIxLDEyICsyMSw2IEBAXFxuICAqIGVudW0gYmF0YWR2X2hhcmRfaWZfc3RhdGUgLSBTdGF0ZSBvZiBhIGhhcmQgaW50ZXJmYWNlXFxuICAqL1xcbiBlbnVtIGJhdGFkdl9oYXJkX2lmX3N0YXRlIHtcXG4tXFx0LyoqXFxuLVxcdCAqIEBCQVRBRFZfSUZfTk9UX0lOX1VTRTogaW50ZXJmYWNlIGlzIG5vdCB1c2VkIGFzIHNsYXZlIGludGVyZmFjZSBvZiBhXFxuLVxcdCAqIGJhdG1hbi1hZHYgbWVzaCBpbnRlcmZhY2VcXG4tXFx0ICovXFxuLVxcdEJBVEFEVl9JRl9OT1RfSU5fVVNFLFxcbi1cXG4gXFx0LyoqXFxuIFxcdCAqIEBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRDogaW50ZXJmYWNlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG1lc2hcXG4gXFx0ICogaW50ZXJmYWNlXFxuQEAgLTc0LDggKzY4LDggQEAgdTMyIGJhdGFkdl9uZXRkZXZfZ2V0X3dpZmlfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpO1xcbiB1MzIgYmF0YWR2X2hhcmRpZl9nZXRfd2lmaV9mbGFncyhzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xcbiBib29sIGJhdGFkdl9pc193aWZpX2hhcmRpZihzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xcbiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UqXFxuLWJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7XFxuLWludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxcbitiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpO1xcbitpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7XFxuIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xcbiBpbnQgYmF0YWR2X2hhcmRpZl9taW5fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5jIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jXFxuaW5kZXggM2M0NTcyMjg0YjUzMmYuLjA0YmIwMzBlZjI5OWFjIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L21haW4uY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L21haW4uY1xcbkBAIC01OSwxMSArNTksNiBAQFxcbiAjaW5jbHVkZSBcXFwidHBfbWV0ZXIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYW5zbGF0aW9uLXRhYmxlLmhcXFwiXFxuIFxcbi0vKiBMaXN0IG1hbmlwdWxhdGlvbnMgb24gaGFyZGlmX2xpc3QgaGF2ZSB0byBiZSBydG5sX2xvY2soKSdlZCxcXG4tICogbGlzdCB0cmF2ZXJzYWxzIGp1c3QgcmN1LWxvY2tlZFxcbi0gKi9cXG4tc3RydWN0IGxpc3RfaGVhZCBiYXRhZHZfaGFyZGlmX2xpc3Q7XFxuLXVuc2lnbmVkIGludCBiYXRhZHZfaGFyZGlmX2dlbmVyYXRpb247XFxuIHN0YXRpYyBpbnQgKCpiYXRhZHZfcnhfaGFuZGxlclsyNTZdKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcmVjdl9pZik7XFxuIFxcbkBAIC05NSw3ICs5MCw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGJhdGFkdl9pbml0KHZvaWQpXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmJhdGFkdl9oYXJkaWZfbGlzdCk7XFxuIFxcdGJhdGFkdl9hbGdvX2luaXQoKTtcXG4gXFxuIFxcdGJhdGFkdl9yZWN2X2hhbmRsZXJfaW5pdCgpO1xcbkBAIC00NTAsOSArNDQ0LDYgQEAgaW50IGJhdGFkdl9iYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNlbWFjX2xlbiAhPSBFVEhfSExFTiB8fCAhc2tiX21hY19oZWFkZXIoc2tiKSkpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcbi1cXHRpZiAoIWhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UpXFxuLVxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuLVxcbiBcXHRiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UpO1xcbiBcXG4gXFx0aWYgKFJFQURfT05DRShiYXRfcHJpdi1cXHUwMDNlbWVzaF9zdGF0ZSkgIT0gQkFUQURWX01FU0hfQUNUSVZFKVxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmggYi9uZXQvYmF0bWFuLWFkdi9tYWluLmhcXG5pbmRleCBmNjhmYzhiNzIzOWNkNS4uZTczODc1OGVlNGE3YWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5oXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5oXFxuQEAgLTIyNiw5ICsyMjYsNiBAQCBzdGF0aWMgaW5saW5lIGludCBiYXRhZHZfcHJpbnRfdmlkKHVuc2lnbmVkIHNob3J0IHZpZClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBiYXRhZHZfaGFyZGlmX2xpc3Q7XFxuLWV4dGVybiB1bnNpZ25lZCBpbnQgYmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uO1xcbi1cXG4gZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpiYXRhZHZfZXZlbnRfd29ya3F1ZXVlO1xcbiBcXG4gaW50IGJhdGFkdl9tZXNoX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpO1xcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xcbmluZGV4IDQ0MDI2ODEwYjk5Y2VhLi5hMzczNjhjMWY1YjU1YyAxMDA2NDRcXG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xcbkBAIC04MzYsMTggKzgzNiw3IEBAIHN0YXRpYyBpbnQgYmF0YWR2X21lc2hpZl9zbGF2ZV9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuLVxcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcXG4tXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuLVxcbi1cXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KHNsYXZlX2Rldik7XFxuLVxcdGlmICghaGFyZF9pZmFjZSB8fCBoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdHJldCA9IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlLCBkZXYpO1xcbi1cXG4tb3V0Olxcbi1cXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzbGF2ZV9kZXYsIGRldik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMgYi9uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmNcXG5pbmRleCA0Y2Y5ZTNjNTRhZDNiMi4uZDJiYzQ4YzcwNzE0MzQgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jXFxuQEAgLTk2OCw3ICs5NjgsNyBAQCBiYXRhZHZfbmV0bGlua19kdW1wX2hhcmRpZihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XFxuIFxcbiBcXHRydG5sX2xvY2soKTtcXG4tXFx0Y2ItXFx1MDAzZXNlcSA9IGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiBcXHUwMDNjXFx1MDAzYyAxIHwgMTtcXG4rXFx0Y2ItXFx1MDAzZXNlcSA9IGJhdF9wcml2LVxcdTAwM2VoYXJkaWZfZ2VuZXJhdGlvbiBcXHUwMDNjXFx1MDAzYyAxIHwgMTtcXG4gXFxuIFxcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9wcml2YXRlKG1lc2hfaWZhY2UsIGhhcmRfaWZhY2UsIGl0ZXIpIHtcXG4gXFx0XFx0aWYgKGkrKyBcXHUwMDNjIHNraXApXFxuQEAgLTEyMTEsNyArMTIxMSw5IEBAIGJhdGFkdl9uZXRsaW5rX2dldF9oYXJkaWZfZnJvbV9pZmluZGV4KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdGlmICghaGFyZF9kZXYpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xcbiBcXG4rXFx0cnRubF9sb2NrKCk7XFxuIFxcdGhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoaGFyZF9kZXYpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbiBcXHRpZiAoIWhhcmRfaWZhY2UpXFxuIFxcdFxcdGdvdG8gZXJyX3B1dF9oYXJkZGV2O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jIGIvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jXFxuaW5kZXggOWIzOGJkOWU4ZGE3ZWMuLjQ4ZjgzN2NmNjY1YTJhIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuY1xcbkBAIC0xMDMzLDcgKzEwMzMsNiBAQCBiYXRhZHZfcHVyZ2VfbmVpZ2hfaWZpbmZvKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcbiBcXHRcXHQvKiBkb24ndCBwdXJnZSBpZiB0aGUgaW50ZXJmYWNlIGlzIG5vdCAoZ29pbmcpIGRvd24gKi9cXG4gXFx0XFx0aWYgKGlmX291dGdvaW5nLVxcdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBpZl9vdXRnb2luZy1cXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9OT1RfSU5fVVNFIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBpZl9vdXRnb2luZy1cXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuQEAgLTEwNzcsNyArMTA3Niw2IEBAIGJhdGFkdl9wdXJnZV9vcmlnX2lmaW5mbyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXG4gXFx0XFx0LyogZG9uJ3QgcHVyZ2UgaWYgdGhlIGludGVyZmFjZSBpcyBub3QgKGdvaW5nKSBkb3duICovXFxuIFxcdFxcdGlmIChpZl9vdXRnb2luZy1cXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9JTkFDVElWRSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgaWZfb3V0Z29pbmctXFx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgaWZfb3V0Z29pbmctXFx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbkBAIC0xMTI3LDEwICsxMTI1LDggQEAgYmF0YWR2X3B1cmdlX29yaWdfbmVpZ2hib3JzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcbiBcXHRcXHRpZiAoYmF0YWR2X2hhc190aW1lZF9vdXQobGFzdF9zZWVuLCBCQVRBRFZfUFVSR0VfVElNRU9VVCkgfHxcXG4gXFx0XFx0ICAgIGlmX2luY29taW5nLVxcdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX0lOQUNUSVZFIHx8XFxuLVxcdFxcdCAgICBpZl9pbmNvbWluZy1cXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8XFxuIFxcdFxcdCAgICBpZl9pbmNvbWluZy1cXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKSB7XFxuIFxcdFxcdFxcdGlmIChpZl9pbmNvbWluZy1cXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9JTkFDVElWRSB8fFxcbi1cXHRcXHRcXHQgICAgaWZfaW5jb21pbmctXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSB8fFxcbiBcXHRcXHRcXHQgICAgaWZfaW5jb21pbmctXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4gXFx0XFx0XFx0XFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX0JBVE1BTiwgYmF0X3ByaXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJuZWlnaGJvciBwdXJnZTogb3JpZ2luYXRvciAlcE0sIG5laWdoYm9yOiAlcE0sIGlmYWNlOiAlc1xcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuYyBiL25ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmNcXG5pbmRleCBjMmVlYTdkYmM0ODgzMy4uMDA0NjdhYTc5ZGU5ZGMgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmNcXG5AQCAtMzU4LDI4ICszNTgsMTYgQEAgYmF0YWR2X3RwX2xpc3RfZmluZF9zZW5kZXJfc2Vzc2lvbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0LFxcbiB9XFxuIFxcbiAvKipcXG4tICogYmF0YWR2X3RwX3ZhcnNfY29tbW9uX3JlbGVhc2UoKSAtIHJlbGVhc2UgYmF0YWR2X3RwX3ZhcnNfY29tbW9uIGZyb20gbGlzdHNcXG4rICogYmF0YWR2X3RwX3NlbmRlcl9yZWxlYXNlKCkgLSByZWxlYXNlIGJhdGFkdl90cF9zZW5kZXJcXG4gICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kXFxuLSAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgYmF0YWR2X3RwX3ZhcnNfY29tbW9uXFxuKyAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgYmF0YWR2X3RwX3NlbmRlclxcbiAgKi9cXG4tc3RhdGljIHZvaWQgYmF0YWR2X3RwX3ZhcnNfY29tbW9uX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcXG4rc3RhdGljIHZvaWQgYmF0YWR2X3RwX3NlbmRlcl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuIHtcXG4tXFx0c3RydWN0IGJhdGFkdl90cF92YXJzX2NvbW1vbiAqdHBfdmFycztcXG4tXFx0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1biwgKnNhZmU7XFxuLVxcbi1cXHR0cF92YXJzID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl90cF92YXJzX2NvbW1vbiwgcmVmY291bnQpO1xcbi1cXG4tXFx0LyogbG9jayBzaG91bGQgbm90IGJlIG5lZWRlZCBiZWNhdXNlIHRoaXMgb2JqZWN0IGlzIG5vdyBvdXQgb2YgYW55XFxuLVxcdCAqIGNvbnRleHQhXFxuLVxcdCAqL1xcbi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbGlzdCwgbGlzdCkge1xcbi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2dW4tXFx1MDAzZWxpc3QpO1xcbi1cXHRcXHRrZnJlZSh1bik7XFxuLVxcdH1cXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbG9jayk7XFxuK1xcdHN0cnVjdCBiYXRhZHZfdHBfc2VuZGVyICp0cF92YXJzO1xcbiBcXG4tXFx0a2ZyZWVfcmN1KHRwX3ZhcnMsIHJjdSk7XFxuK1xcdHRwX3ZhcnMgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X3RwX3NlbmRlciwgY29tbW9uLnJlZmNvdW50KTtcXG4rXFx0a2ZyZWVfcmN1KHRwX3ZhcnMsIGNvbW1vbi5yY3UpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzkyLDcgKzM4MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9zZW5kZXJfcHV0KHN0cnVjdCBiYXRhZHZfdHBfc2VuZGVyICp0cF92YXJzKVxcbiBcXHRpZiAoIXRwX3ZhcnMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGtyZWZfcHV0KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF92YXJzX2NvbW1vbl9yZWxlYXNlKTtcXG4rXFx0a3JlZl9wdXQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi5yZWZjb3VudCwgYmF0YWR2X3RwX3NlbmRlcl9yZWxlYXNlKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExNDUsOSArMTEzMyw2IEBAIHZvaWQgYmF0YWR2X3RwX3N0YXJ0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QsXFxuIFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZW1vcmVfYnl0ZXMpO1xcbiBcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWZpbmlzaGVkKTtcXG4gXFxuLVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QpO1xcbi1cXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNjX2xvY2spO1xcbiBcXG4gXFx0dHBfdmFycy1cXHUwMDNlcHJlcmFuZG9tX29mZnNldCA9IDA7XFxuQEAgLTEyNTEsNiArMTIzNiwzMyBAQCBiYXRhZHZfdHBfbGlzdF9maW5kX3JlY2VpdmVyX3Nlc3Npb24oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdFxcbiBcXHRyZXR1cm4gdHBfdmFycztcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKCkgLSByZWxlYXNlIGJhdGFkdl90cF9yZWNlaXZlclxcbisgKiAgYW5kIHF1ZXVlIGZvciBmcmVlIGFmdGVyIHJjdSBncmFjZSBwZXJpb2RcXG4rICogQHJlZjoga3JlZiBwb2ludGVyIG9mIHRoZSBiYXRhZHZfdHBfcmVjZWl2ZXJcXG4rICovXFxuK3N0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuK3tcXG4rXFx0c3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycztcXG4rXFx0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICpzYWZlO1xcbitcXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuO1xcbitcXG4rXFx0dHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIsIGNvbW1vbi5yZWZjb3VudCk7XFxuK1xcbitcXHQvKiBsb2NrIHNob3VsZCBub3QgYmUgbmVlZGVkIGJlY2F1c2UgdGhpcyBvYmplY3QgaXMgbm93IG91dCBvZiBhbnlcXG4rXFx0ICogY29udGV4dCFcXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2dHBfdmFycy1cXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFxcdTAwMjZ0cF92YXJzLVxcdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnVuLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0a2ZyZWUodW4pO1xcbitcXHRcXHR0cF92YXJzLVxcdTAwM2V1bmFja2VkX2NvdW50LS07XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKTtcXG4rXFxuK1xcdGtmcmVlX3JjdSh0cF92YXJzLCBjb21tb24ucmN1KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGJhdGFkdl90cF9yZWNlaXZlcl9wdXQoKSAtIGRlY3JlbWVudCB0aGUgYmF0YWR2X3RwX3JlY2VpdmVyXFxuICAqICByZWZjb3VudGVyIGFuZCBwb3NzaWJseSByZWxlYXNlIGl0XFxuQEAgLTEyNjEsNyArMTI3Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWNlaXZlcl9wdXQoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycylcXG4gXFx0aWYgKCF0cF92YXJzKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRrcmVmX3B1dChcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnJlZmNvdW50LCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZSk7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTEzMDQsMTMgKzEzMTYsMTMgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY2VpdmVyX3NodXRkb3duKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRpZiAoYmF0YWR2X3RwX2xpc3RfZGV0YWNoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24pKVxcbiBcXHRcXHRiYXRhZHZfdHBfcmVjZWl2ZXJfcHV0KHRwX3ZhcnMpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuLCBzYWZlLCBcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCwgbGlzdCkge1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuLCBzYWZlLCBcXHUwMDI2dHBfdmFycy1cXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZ1bi1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdGtmcmVlKHVuKTtcXG4tXFx0XFx0dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQtLTtcXG4rXFx0XFx0dHBfdmFycy1cXHUwMDNldW5hY2tlZF9jb3VudC0tO1xcbiBcXHR9XFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKTtcXG4gXFxuIFxcdC8qIGRyb3AgcmVmZXJlbmNlIG9mIHRpbWVyICovXFxuIFxcdGlmIChXQVJOX09OKGF0b21pY194Y2hnKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2VyZWNlaXZpbmcsIDApICE9IDEpKVxcbkBAIC0xNDAzLDY5ICsxNDE1LDEwNiBAQCBzdGF0aWMgaW50IGJhdGFkdl90cF9zZW5kX2FjayhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0LFxcbiAgKi9cXG4gc3RhdGljIGJvb2wgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXIoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycyxcXG4gXFx0XFx0XFx0XFx0XFx0ICB1MzIgc2Vxbm8sIHUzMiBwYXlsb2FkX2xlbilcXG4tXFx0X19tdXN0X2hvbGQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spXFxuK1xcdF9fbXVzdF9ob2xkKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2VhY2tfc2Vxbm9fbG9jaylcXG4ge1xcbi1cXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqbmV3O1xcbi1cXHRib29sIGFkZGVkID0gZmFsc2U7XFxuLVxcbi1cXHRuZXcgPSBrbWFsbG9jX29iaigqbmV3LCBHRlBfQVRPTUlDKTtcXG4tXFx0aWYgKHVubGlrZWx5KCFuZXcpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHRuZXctXFx1MDAzZXNlcW5vID0gc2Vxbm87XFxuLVxcdG5ldy1cXHUwMDNlbGVuID0gcGF5bG9hZF9sZW47XFxuLVxcbi1cXHQvKiBpZiB0aGUgbGlzdCBpcyBlbXB0eSBpbW1lZGlhdGVseSBhdHRhY2ggdGhpcyBuZXcgb2JqZWN0ICovXFxuLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9saXN0KSkge1xcbi1cXHRcXHRsaXN0X2FkZChcXHUwMDI2bmV3LVxcdTAwM2VsaXN0LCBcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XFxuLVxcdFxcdHRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2NvdW50Kys7XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBvdGhlcndpc2UgbG9vcCBvdmVyIHRoZSBsaXN0IGFuZCBlaXRoZXIgZHJvcCB0aGUgcGFja2V0IGJlY2F1c2UgdGhpc1xcbi1cXHQgKiBpcyBhIGR1cGxpY2F0ZSBvciBzdG9yZSBpdCBhdCB0aGUgcmlnaHQgcG9zaXRpb24uXFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IFxcdTAwMjZ0cF92YXJzLVxcdTAwM2V1bmFja2VkX2xpc3Q7XFxuK1xcdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqbmV3ID0gTlVMTDtcXG4rXFx0dTMyIGVuZF9zZXFubyA9IHNlcW5vICsgcGF5bG9hZF9sZW47XFxuK1xcdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqc2FmZTtcXG4rXFx0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1bjtcXG4rXFxuK1xcdC8qIGxvb3Agb3ZlciB0aGUgbGlzdCB0byBmaW5kIGVpdGhlciBhbiBleGlzdGluZyBlbnRyeSB3aGljaCB0aGUgbmV3XFxuK1xcdCAqIHNlcW5vIHJhbmdlIGNhbiBiZSBtZXJnZWQgd2l0aCBvciB0aGUgcG9zaXRpb24gYXQgd2hpY2ggYSBuZXcgZW50cnlcXG4rXFx0ICogaGFzIHRvIGJlIGluc2VydGVkLlxcbiBcXHQgKlxcbiBcXHQgKiBUaGUgaXRlcmF0aW9uIGlzIGRvbmUgaW4gdGhlIHJldmVyc2Ugd2F5IGJlY2F1c2UgaXQgaXMgbGlrZWx5IHRoYXRcXG4gXFx0ICogdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0ICh0aGUgb25lIGJlaW5nIHByb2Nlc3NlZCBub3cpIGhhcyBhIGJpZ2dlclxcbiBcXHQgKiBzZXFubyB0aGFuIGFsbCB0aGUgb3RoZXJzIGFscmVhZHkgc3RvcmVkLlxcbiBcXHQgKi9cXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCBcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCwgbGlzdCkge1xcbi1cXHRcXHQvKiBjaGVjayBmb3IgZHVwbGljYXRlcyAqL1xcbi1cXHRcXHRpZiAobmV3LVxcdTAwM2VzZXFubyA9PSB1bi1cXHUwMDNlc2Vxbm8pIHtcXG4tXFx0XFx0XFx0aWYgKG5ldy1cXHUwMDNlbGVuIFxcdTAwM2UgdW4tXFx1MDAzZWxlbilcXG4tXFx0XFx0XFx0XFx0dW4tXFx1MDAzZWxlbiA9IG5ldy1cXHUwMDNlbGVuO1xcbi1cXHRcXHRcXHRrZnJlZShuZXcpO1xcbi1cXHRcXHRcXHRhZGRlZCA9IHRydWU7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHQvKiBsb29rIGZvciB0aGUgcmlnaHQgcG9zaXRpb24gKi9cXG4tXFx0XFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKG5ldy1cXHUwMDNlc2Vxbm8sIHVuLVxcdTAwM2VzZXFubykpXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh1biwgXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbGlzdCwgbGlzdCkge1xcbitcXHRcXHQvKiBsb29rIGZvciB0aGUgcmlnaHQgcG9zaXRpb24gLSBhbiB1biB3aGljaCBpcyBzbWFsbGVyICovXFxuK1xcdFxcdGlmIChiYXRhZHZfc2VxX2JlZm9yZShzZXFubywgdW4tXFx1MDAzZXNlcW5vKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHQvKiBhcyBzb29uIGFzIGFuIGVudHJ5IGhhdmluZyBhIGJpZ2dlciBzZXFubyBpcyBmb3VuZCwgdGhlIG5ld1xcbi1cXHRcXHQgKiBvbmUgaXMgYXR0YWNoZWQgX2FmdGVyXyBpdC4gSW4gdGhpcyB3YXkgdGhlIGxpc3QgaXMga2VwdCBpblxcbi1cXHRcXHQgKiBhc2NlbmRpbmcgb3JkZXJcXG4rXFx0XFx0Lyogc21hbGxlci9lcXVhbCBzZXFubyB3YXMgZm91bmQgYnV0IHRoZXkgbWlnaHQgYmUgZGlyZWN0bHlcXG4rXFx0XFx0ICogYWZ0ZXIgYW5vdGhlciBvciBvdmVybGFwcGluZy4ga2VlcCBvbmx5IGEgc2luZ2xlIGVudHJ5XFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIEl0IGlzIGFscmVhZHkga25vd24gdGhhdDpcXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICpcXHR1bi1cXHUwMDNlc2Vxbm8gXFx1MDAzYz0gc2Vxbm9cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogV2hlbiBlc3RhYmxpc2hpbmcgdGhhdDpcXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICpcXHRzZXFubyBcXHUwMDNjPSB1bi1cXHUwMDNlc2Vxbm8gKyB1bi1cXHUwMDNlbGVuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIFRoZW4gaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBhZGQgYSBuZXcgZW50cnkgYmVjYXVzZSB0aGVcXG4rXFx0XFx0ICogc21hbGxlci9lcXVhbCBzZXFubyBvZiB1biBtaWdodCBhbHJlYWR5IGNvbnRhaW4gdGhlIG5ld1xcbitcXHRcXHQgKiByZWNlaXZlZCBwYWNrZXQgb3Igd2Ugb25seSBhZGQgbmV3IGRhdGEgZGlyZWN0bHkgYWZ0ZXJcXG4rXFx0XFx0ICogdGhlIGVuZCBvZiB1bi4gVGhlIGxhdHRlciBjYW4gYmUgaWRlbnRpZmllZCB1c2luZzpcXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICpcXHR1bi1cXHUwMDNlc2Vxbm8gKyB1bi1cXHUwMDNlbGVuIFxcdTAwM2M9IGVuZF9zZXFub1xcbiBcXHRcXHQgKi9cXG4tXFx0XFx0bGlzdF9hZGQoXFx1MDAyNm5ldy1cXHUwMDNlbGlzdCwgXFx1MDAyNnVuLVxcdTAwM2VsaXN0KTtcXG4tXFx0XFx0YWRkZWQgPSB0cnVlO1xcbi1cXHRcXHR0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudCsrO1xcbitcXHRcXHRpZiAoIWJhdGFkdl9zZXFfYmVmb3JlKHVuLVxcdTAwM2VzZXFubyArIHVuLVxcdTAwM2VsZW4sIHNlcW5vKSkge1xcbitcXHRcXHRcXHQvKiBuZXcgZGF0YSBkaXJlY3RseSBhZnRlciB1bj8gKi9cXG4rXFx0XFx0XFx0aWYgKCFiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLVxcdTAwM2VzZXFubyArIHVuLVxcdTAwM2VsZW4pKVxcbitcXHRcXHRcXHRcXHR1bi1cXHUwMDNlbGVuID0gZW5kX3NlcW5vIC0gdW4tXFx1MDAzZXNlcW5vO1xcbitcXG4rXFx0XFx0XFx0LyogdW4gbm93IHJlcHJlc2VudHMgYm90aCBvbGQgdW4gKyBuZXcgcmFuZ2UgYW5kIGhhcyB0b1xcbitcXHRcXHRcXHQgKiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBnYXAgdG8gdGhlIG5leHQgc2Vxbm8gcmFuZ2VcXG4rXFx0XFx0XFx0ICogd2FzIGNsb3NlZFxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bmV3ID0gdW47XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qIGFzIHNvb24gYXMgYW4gZW50cnkgaGF2aW5nIGEgc21hbGxlciBzZXFubyBpcyBmb3VuZCxcXG4rXFx0XFx0XFx0ICogdGhlIG5ldyBvbmUgaXMgYXR0YWNoZWQgX2FmdGVyXyBpdC4gSW4gdGhpcyB3YXkgdGhlXFxuK1xcdFxcdFxcdCAqIGxpc3QgaXMga2VwdCBpbiBhc2NlbmRpbmcgb3JkZXJcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHBvcyA9IFxcdTAwMjZ1bi1cXHUwMDNlbGlzdDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIHJlY2VpdmVkIHBhY2tldCB3aXRoIHNtYWxsZXN0IHNlcW5vIG91dCBvZiBvcmRlcjsgYWRkIGl0IHRvIGZyb250ICovXFxuLVxcdGlmICghYWRkZWQpIHtcXG4tXFx0XFx0bGlzdF9hZGQoXFx1MDAyNm5ldy1cXHUwMDNlbGlzdCwgXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QpO1xcbi1cXHRcXHR0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudCsrO1xcbitcXHQvKiBubyBlbnRyeSB0byBtZXJnZSB3aXRoIHdhcyBmb3VuZDsgaW5zZXJ0IGEgbmV3IG9uZSBhZnRlciB0aGUgZW50cnlcXG4rXFx0ICogd2l0aCB0aGUgbmV4dCBzbWFsbGVyIHNlcW5vIChvciBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qgd2hlbiB0aGVcXG4rXFx0ICogbmV3IHNlcW5vIGlzIHRoZSBzbWFsbGVzdCBvciB0aGUgbGlzdCBpcyBlbXB0eSlcXG4rXFx0ICovXFxuK1xcdGlmICghbmV3KSB7XFxuK1xcdFxcdG5ldyA9IGttYWxsb2Nfb2JqKCpuZXcsIEdGUF9BVE9NSUMpO1xcbitcXHRcXHRpZiAodW5saWtlbHkoIW5ldykpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdG5ldy1cXHUwMDNlc2Vxbm8gPSBzZXFubztcXG4rXFx0XFx0bmV3LVxcdTAwM2VsZW4gPSBwYXlsb2FkX2xlbjtcXG4rXFxuK1xcdFxcdGxpc3RfYWRkKFxcdTAwMjZuZXctXFx1MDAzZWxpc3QsIHBvcyk7XFxuK1xcdFxcdHRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfY291bnQrKztcXG4rXFx0fVxcbitcXG4rXFx0LyogY2hlY2sgaWYgbmV3IGZpbGxlZCB0aGUgZ2FwIHRvIHRoZSBuZXh0IGxpc3QgZW50cmllcyAqL1xcbitcXHR1biA9IG5ldztcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVlKHVuLCBzYWZlLCBcXHUwMDI2dHBfdmFycy1cXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XFxuK1xcdFxcdGlmIChiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLVxcdTAwM2VzZXFubykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogbmV4dCBlbnRyeSBpcyBvdmVybGFwcGluZyBvciBhZGphY2VudCAtIGNvbWJpbmUgYm90aCAqL1xcbitcXHRcXHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUoZW5kX3NlcW5vLCB1bi1cXHUwMDNlc2Vxbm8gKyB1bi1cXHUwMDNlbGVuKSkge1xcbitcXHRcXHRcXHRlbmRfc2Vxbm8gPSB1bi1cXHUwMDNlc2Vxbm8gKyB1bi1cXHUwMDNlbGVuO1xcbitcXHRcXHRcXHRuZXctXFx1MDAzZWxlbiA9IGVuZF9zZXFubyAtIG5ldy1cXHUwMDNlc2Vxbm87XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZ1bi1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdGtmcmVlKHVuKTtcXG4rXFx0XFx0dHBfdmFycy1cXHUwMDNldW5hY2tlZF9jb3VudC0tO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiByZW1vdmUgdGhlIGxhc3QgKGJpZ2dlc3QpIHVuYWNrZWQgc2Vxbm8gd2hlbiBsaXN0IGlzIHRvbyBsYXJnZSAqL1xcbi1cXHRpZiAodHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQgXFx1MDAzZSBCQVRBRFZfVFBfTUFYX1VOQUNLRUQpIHtcXG4tXFx0XFx0dW4gPSBsaXN0X2xhc3RfZW50cnkoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QsXFxuK1xcdGlmICh0cF92YXJzLVxcdTAwM2V1bmFja2VkX2NvdW50IFxcdTAwM2UgQkFUQURWX1RQX01BWF9VTkFDS0VEKSB7XFxuK1xcdFxcdHVuID0gbGlzdF9sYXN0X2VudHJ5KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2V1bmFja2VkX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJhdGFkdl90cF91bmFja2VkLCBsaXN0KTtcXG4gXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnVuLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0a2ZyZWUodW4pO1xcbi1cXHRcXHR0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudC0tO1xcbitcXHRcXHR0cF92YXJzLVxcdTAwM2V1bmFja2VkX2NvdW50LS07XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC0xNDc3LDcgKzE1MjYsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcihzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzLFxcbiAgKiBAdHBfdmFyczogdGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgY3VycmVudCBUUCBtZXRlciBzZXNzaW9uXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfYWNrX3Vub3JkZXJlZChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKVxcbi1cXHRfX211c3RfaG9sZChcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfbG9jaylcXG4rXFx0X19tdXN0X2hvbGQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKVxcbiB7XFxuIFxcdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqdW4sICpzYWZlO1xcbiBcXHR1MzIgdG9fYWNrO1xcbkBAIC0xNDg1LDcgKzE1MzQsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfYWNrX3Vub3JkZXJlZChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKVxcbiBcXHQvKiBnbyB0aHJvdWdoIHRoZSB1bmFja2VkIHBhY2tldCBsaXN0IGFuZCBwb3NzaWJseSBBQ0sgdGhlbSBhc1xcbiBcXHQgKiB3ZWxsXFxuIFxcdCAqL1xcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9saXN0LCBsaXN0KSB7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbGlzdCwgbGlzdCkge1xcbiBcXHRcXHQvKiB0aGUgbGlzdCBpcyBvcmRlcmVkLCB0aGVyZWZvcmUgaXQgaXMgcG9zc2libGUgdG8gc3RvcCBhcyBzb29uXFxuIFxcdFxcdCAqIHRoZXJlIGlzIGEgZ2FwIGJldHdlZW4gdGhlIGxhc3QgYWNrZWQgc2Vxbm8gYW5kIHRoZSBzZXFubyBvZlxcbiBcXHRcXHQgKiB0aGUgcGFja2V0IHVuZGVyIGluc3BlY3Rpb25cXG5AQCAtMTQ5MywxNCArMTU0MiwxNCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfYWNrX3Vub3JkZXJlZChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKVxcbiBcXHRcXHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUodHBfdmFycy1cXHUwMDNlbGFzdF9yZWN2LCB1bi1cXHUwMDNlc2Vxbm8pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdHRvX2FjayA9IHVuLVxcdTAwM2VzZXFubyArIHVuLVxcdTAwM2VsZW4gLSB0cF92YXJzLVxcdTAwM2VsYXN0X3JlY3Y7XFxuK1xcdFxcdHRvX2FjayA9IHVuLVxcdTAwM2VzZXFubyArIHVuLVxcdTAwM2VsZW47XFxuIFxcbi1cXHRcXHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUodHBfdmFycy1cXHUwMDNlbGFzdF9yZWN2LCB1bi1cXHUwMDNlc2Vxbm8gKyB1bi1cXHUwMDNlbGVuKSlcXG4tXFx0XFx0XFx0dHBfdmFycy1cXHUwMDNlbGFzdF9yZWN2ICs9IHRvX2FjaztcXG4rXFx0XFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKHRwX3ZhcnMtXFx1MDAzZWxhc3RfcmVjdiwgdG9fYWNrKSlcXG4rXFx0XFx0XFx0dHBfdmFycy1cXHUwMDNlbGFzdF9yZWN2ID0gdG9fYWNrO1xcbiBcXG4gXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnVuLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0a2ZyZWUodW4pO1xcbi1cXHRcXHR0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudC0tO1xcbitcXHRcXHR0cF92YXJzLVxcdTAwM2V1bmFja2VkX2NvdW50LS07XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMTU0Nyw5ICsxNTk2LDkgQEAgYmF0YWR2X3RwX2luaXRfcmVjdihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHR0cF92YXJzLVxcdTAwM2Vjb21tb24uYmF0X3ByaXYgPSBiYXRfcHJpdjtcXG4gXFx0a3JlZl9pbml0KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24ucmVmY291bnQpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XFxuLVxcdHRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2NvdW50ID0gMDtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbGlzdCk7XFxuK1xcdHRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfY291bnQgPSAwO1xcbiBcXG4gXFx0a3JlZl9nZXQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udGltZXIsIGJhdGFkdl90cF9yZWNlaXZlcl9zaHV0ZG93biwgMCk7XFxuQEAgLTE2MDksNyArMTY1OCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWN2X21zZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHRcXHRXUklURV9PTkNFKHRwX3ZhcnMtXFx1MDAzZWxhc3RfcmVjdl90aW1lLCBqaWZmaWVzKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2VhY2tfc2Vxbm9fbG9jayk7XFxuIFxcbiBcXHQvKiBpZiB0aGUgcGFja2V0IGlzIGEgZHVwbGljYXRlLCBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCBhbiBBQ0sgaGFzIGJlZW5cXG4gXFx0ICogbG9zdC4gUmVzZW5kIHRoZSBBQ0tcXG5AQCAtMTYyNSw3ICsxNjc0LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY3ZfbXNnKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdFxcdCAqIG5vdCBiZWVuIGVucXVldWVkIGNvcnJlY3RseVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKCFiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcih0cF92YXJzLCBzZXFubywgcGF5bG9hZF9sZW4pKSB7XFxuLVxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE2NDEsNyArMTY5MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWN2X21zZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXG4gc2VuZF9hY2s6XFxuIFxcdHRvX2FjayA9IHRwX3ZhcnMtXFx1MDAzZWxhc3RfcmVjdjtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dHBfdmFycy1cXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xcbiBcXG4gXFx0Lyogc2VuZCB0aGUgQUNLLiBJZiB0aGUgcmVjZWl2ZWQgcGFja2V0IHdhcyBvdXQgb2Ygb3JkZXIsIHRoZSBBQ0sgdGhhdFxcbiBcXHQgKiBpcyBnb2luZyB0byBiZSBzZW50IGlzIGEgZHVwbGljYXRlICh0aGUgc2VuZGVyIHdpbGwgY291bnQgdGhlbSBhbmRcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHZsdi5jIGIvbmV0L2JhdG1hbi1hZHYvdHZsdi5jXFxuaW5kZXggMWM5ZmIyMTk4NWY2YTUuLjQ5YmYyZWQ5ZWNkYzM5IDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L3R2bHYuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L3R2bHYuY1xcbkBAIC00NDIsNiArNDQyLDU0IEBAIHN0YXRpYyBpbnQgYmF0YWR2X3R2bHZfY2FsbF9oYW5kbGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJhdGFkdl90dmx2X2hkcl9uZXh0KCkgLSBtb3ZlIGEgdHZsdiBidWZmZXIgY3Vyc29yIHRvIHRoZSBuZXh0IGNvbnRhaW5lclxcbisgKiBAdHZsdl92YWx1ZTogY3Vyc29yIGludG8gdGhlIHR2bHYgYnVmZmVyLCBhZHZhbmNlZCBwYXN0IHRoZSByZXR1cm5lZFxcbisgKiAgY29udGFpbmVyJ3MgY29udGVudCBvbiBzdWNjZXNzXFxuKyAqIEB0dmx2X3ZhbHVlX2xlbjogcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgdHZsdiBidWZmZXIsIHJlZHVjZWQgYnkgdGhlIHJldHVybmVkXFxuKyAqICBjb250YWluZXIncyBzaXplIG9uIHN1Y2Nlc3NcXG4rICpcXG4rICogUGFyc2VzIGEgc2luZ2xlIGNvbnRhaW5lciBoZWFkZXIgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGFuZCwgaWYgYVxcbisgKiBjb21wbGV0ZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLCBhZHZhbmNlcyB0aGUgY3Vyc29yIGFuZCByZW1haW5pbmcgbGVuZ3RoXFxuKyAqIHBhc3QgaXQuIFRoZSByZXR1cm5lZCBoZWFkZXIgc3RheXMgdmFsaWQ7IGl0cyBjb250ZW50IGlzIGxvY2F0ZWQgYXRcXG4rICogKHJldHVybmVkIGhlYWRlciArIDEpIGFuZCBpcyBudG9ocyhoZHItXFx1MDAzZWxlbikgYnl0ZXMgbG9uZy5cXG4rICpcXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBuZXh0IHR2bHYgY29udGFpbmVyIGhlYWRlciwgb3IgTlVMTCBpZiBubyBmdXJ0aGVyXFxuKyAqIGNvbXBsZXRlIGNvbnRhaW5lciBpcyBwcmVzZW50IGluIHRoZSBidWZmZXIuXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IGJhdGFkdl90dmx2X2hkciAqYmF0YWR2X3R2bHZfaGRyX25leHQodm9pZCAqKnR2bHZfdmFsdWUsIHUxNiAqdHZsdl92YWx1ZV9sZW4pXFxuK3tcXG4rXFx0c3RydWN0IGJhdGFkdl90dmx2X2hkciAqdHZsdl9oZHI7XFxuK1xcdHUxNiB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xcbitcXHR2b2lkICp0dmx2X3ZhbHVlX2NvbnQ7XFxuK1xcdHUxNiB0dmx2X2xlbjtcXG4rXFxuK1xcdHR2bHZfdmFsdWVfY29udCA9ICp0dmx2X3ZhbHVlO1xcbitcXHR0dmx2X2xlbiA9ICp0dmx2X3ZhbHVlX2xlbjtcXG4rXFxuK1xcdGlmICh0dmx2X2xlbiBcXHUwMDNjIHNpemVvZigqdHZsdl9oZHIpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHR2bHZfaGRyID0gdHZsdl92YWx1ZV9jb250O1xcbitcXHR0dmx2X3ZhbHVlX2NvbnRfbGVuID0gbnRvaHModHZsdl9oZHItXFx1MDAzZWxlbik7XFxuK1xcdHR2bHZfdmFsdWVfY29udCA9IHR2bHZfaGRyICsgMTtcXG4rXFx0dHZsdl9sZW4gLT0gc2l6ZW9mKCp0dmx2X2hkcik7XFxuK1xcbitcXHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcXHUwMDNlIHR2bHZfbGVuKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdC8qIHRoZSBuZXh0IHR2bHYgaGVhZGVyIGlzIGFjY2Vzc2VkIGFzc3VtaW5nIChhdCBsZWFzdCkgMi1ieXRlXFxuK1xcdCAqIGFsaWdubWVudCwgc28gaXQgbXVzdCBzdGFydCBhdCBhbiBldmVuIG9mZnNldC5cXG4rXFx0ICovXFxuK1xcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFxcdTAwMjYgMSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHQqdHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWVfY29udCArIHR2bHZfdmFsdWVfY29udF9sZW47XFxuK1xcdCp0dmx2X3ZhbHVlX2xlbiA9IHR2bHZfbGVuIC0gdHZsdl92YWx1ZV9jb250X2xlbjtcXG4rXFxuK1xcdHJldHVybiB0dmx2X2hkcjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbigpIC0gY2hlY2sgaWYgYSB0dmx2IGJ1ZmZlciBob2xkcyBhIGNvbnRhaW5lclxcbiAgKiBAdHZsdl92YWx1ZTogdHZsdiBjb250ZW50XFxuQEAgLTQ1NywyOCArNTA1LDEwIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbih2b2lkICp0dmx2X3ZhbHVlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1OCB2ZXJzaW9uKVxcbiB7XFxuIFxcdHN0cnVjdCBiYXRhZHZfdHZsdl9oZHIgKnR2bHZfaGRyO1xcbi1cXHR1MTYgdHZsdl92YWx1ZV9jb250X2xlbjtcXG4tXFxuLVxcdHdoaWxlICh0dmx2X3ZhbHVlX2xlbiBcXHUwMDNlPSBzaXplb2YoKnR2bHZfaGRyKSkge1xcbi1cXHRcXHR0dmx2X2hkciA9IHR2bHZfdmFsdWU7XFxuLVxcdFxcdHR2bHZfdmFsdWVfY29udF9sZW4gPSBudG9ocyh0dmx2X2hkci1cXHUwMDNlbGVuKTtcXG4tXFx0XFx0dHZsdl92YWx1ZSA9IHR2bHZfaGRyICsgMTtcXG4tXFx0XFx0dHZsdl92YWx1ZV9sZW4gLT0gc2l6ZW9mKCp0dmx2X2hkcik7XFxuLVxcbi1cXHRcXHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcXHUwMDNlIHR2bHZfdmFsdWVfbGVuKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdC8qIHRoZSBuZXh0IHR2bHYgaGVhZGVyIGlzIGFjY2Vzc2VkIGFzc3VtaW5nIChhdCBsZWFzdCkgMi1ieXRlXFxuLVxcdFxcdCAqIGFsaWdubWVudCwgc28gaXQgbXVzdCBzdGFydCBhdCBhbiBldmVuIG9mZnNldC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFxcdTAwMjYgMSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcbitcXHR3aGlsZSAoKHR2bHZfaGRyID0gYmF0YWR2X3R2bHZfaGRyX25leHQoXFx1MDAyNnR2bHZfdmFsdWUsIFxcdTAwMjZ0dmx2X3ZhbHVlX2xlbikpKSB7XFxuIFxcdFxcdGlmICh0dmx2X2hkci1cXHUwMDNldHlwZSA9PSB0eXBlIFxcdTAwMjZcXHUwMDI2IHR2bHZfaGRyLVxcdTAwM2V2ZXJzaW9uID09IHZlcnNpb24pXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi1cXG4tXFx0XFx0dHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWUgKyB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xcbi1cXHRcXHR0dmx2X3ZhbHVlX2xlbiAtPSB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTUxMSwyMCArNTQxLDggQEAgaW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHR1OCBjaWZub3Rmb3VuZCA9IEJBVEFEVl9UVkxWX0hBTkRMRVJfT0dNX0NJRk5PVEZORDtcXG4gXFx0aW50IHJldCA9IE5FVF9SWF9TVUNDRVNTO1xcbiBcXG4tXFx0d2hpbGUgKHR2bHZfdmFsdWVfbGVuIFxcdTAwM2U9IHNpemVvZigqdHZsdl9oZHIpKSB7XFxuLVxcdFxcdHR2bHZfaGRyID0gdHZsdl92YWx1ZTtcXG4rXFx0d2hpbGUgKCh0dmx2X2hkciA9IGJhdGFkdl90dmx2X2hkcl9uZXh0KFxcdTAwMjZ0dmx2X3ZhbHVlLCBcXHUwMDI2dHZsdl92YWx1ZV9sZW4pKSkge1xcbiBcXHRcXHR0dmx2X3ZhbHVlX2NvbnRfbGVuID0gbnRvaHModHZsdl9oZHItXFx1MDAzZWxlbik7XFxuLVxcdFxcdHR2bHZfdmFsdWUgPSB0dmx2X2hkciArIDE7XFxuLVxcdFxcdHR2bHZfdmFsdWVfbGVuIC09IHNpemVvZigqdHZsdl9oZHIpO1xcbi1cXG4tXFx0XFx0aWYgKHR2bHZfdmFsdWVfY29udF9sZW4gXFx1MDAzZSB0dmx2X3ZhbHVlX2xlbilcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHQvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZVxcbi1cXHRcXHQgKiBhbGlnbm1lbnQsIHNvIGl0IG11c3Qgc3RhcnQgYXQgYW4gZXZlbiBvZmZzZXQuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcXHUwMDI2IDEpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0dHZsdl9oYW5kbGVyID0gYmF0YWR2X3R2bHZfaGFuZGxlcl9nZXQoYmF0X3ByaXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB0dmx2X2hkci1cXHUwMDNldHlwZSxcXG5AQCAtNTMyLDExICs1NTAsOSBAQCBpbnQgYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcbiBcXHRcXHRyZXQgfD0gYmF0YWR2X3R2bHZfY2FsbF9oYW5kbGVyKGJhdF9wcml2LCB0dmx2X2hhbmRsZXIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHBhY2tldF90eXBlLCBvcmlnX25vZGUsIHNrYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0dHZsdl92YWx1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dHZsdl9oZHIgKyAxLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR0dmx2X3ZhbHVlX2NvbnRfbGVuKTtcXG4gXFx0XFx0YmF0YWR2X3R2bHZfaGFuZGxlcl9wdXQodHZsdl9oYW5kbGVyKTtcXG4tXFx0XFx0dHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWUgKyB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xcbi1cXHRcXHR0dmx2X3ZhbHVlX2xlbiAtPSB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAocGFja2V0X3R5cGUgIT0gQkFUQURWX0lWX09HTSBcXHUwMDI2XFx1MDAyNlxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oIGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaFxcbmluZGV4IGIxZjlmODk2NGMzZmQyLi5jZDEyNzU1ZDIxZjM1NiAxMDA2NDRcXG4tLS0gYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaFxcbkBAIC0yMTQsOSArMjE0LDYgQEAgc3RydWN0IGJhdGFkdl93aWZpX25ldF9kZXZpY2Vfc3RhdGUge1xcbiAgKiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgLSBuZXR3b3JrIGRldmljZSBrbm93biB0byBiYXRtYW4tYWR2XFxuICAqL1xcbiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2Uge1xcbi1cXHQvKiogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgYmF0YWR2X2hhcmRpZl9saXN0ICovXFxuLVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4tXFxuIFxcdC8qKiBAaWZfc3RhdHVzOiBzdGF0dXMgb2YgdGhlIGludGVyZmFjZSBmb3IgYmF0bWFuLWFkdiAqL1xcbiBcXHRjaGFyIGlmX3N0YXR1cztcXG4gXFxuQEAgLTEzMzUsOSArMTMzMiw5IEBAIHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCB7XFxuIFxcdHUzMiBzZXFubztcXG4gXFxuIFxcdC8qKiBAbGVuOiBsZW5ndGggb2YgdGhlIHBhY2tldCAqL1xcbi1cXHR1MTYgbGVuO1xcbitcXHR1MzIgbGVuO1xcbiBcXG4tXFx0LyoqIEBsaXN0OiBsaXN0IG5vZGUgZm9yIFxcdTAwMjZiYXRhZHZfdHBfdmFyc19jb21tb24udW5hY2tlZF9saXN0ICovXFxuK1xcdC8qKiBAbGlzdDogbGlzdCBub2RlIGZvciBcXHUwMDI2YmF0YWR2X3RwX3JlY2VpdmVyLnVuYWNrZWRfbGlzdCAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIH07XFxuIFxcbkBAIC0xMzYwLDE1ICsxMzU3LDYgQEAgc3RydWN0IGJhdGFkdl90cF92YXJzX2NvbW1vbiB7XFxuIFxcdC8qKiBAc2Vzc2lvbjogVFAgc2Vzc2lvbiBpZGVudGlmaWVyICovXFxuIFxcdHU4IHNlc3Npb25bMl07XFxuIFxcbi1cXHQvKiogQHVuYWNrZWRfbGlzdDogbGlzdCBvZiB1bmFja2VkIHBhY2tldHMgKG1ldGEtaW5mbyBvbmx5KSAqL1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHVuYWNrZWRfbGlzdDtcXG4tXFxuLVxcdC8qKiBAdW5hY2tlZF9sb2NrOiBwcm90ZWN0IHVuYWNrZWRfbGlzdCArIFxcdTAwMjZiYXRhZHZfdHBfcmVjZWl2ZXIubGFzdF9yZWN2ICovXFxuLVxcdHNwaW5sb2NrX3QgdW5hY2tlZF9sb2NrO1xcbi1cXG4tXFx0LyoqIEB1bmFja2VkX2NvdW50OiBudW1iZXIgb2YgdW5hY2tlZCBlbnRyaWVzICovXFxuLVxcdHNpemVfdCB1bmFja2VkX2NvdW50O1xcbi1cXG4gXFx0LyoqIEByZWZjb3VudDogbnVtYmVyIG9mIGNvbnRleHQgd2hlcmUgdGhlIG9iamVjdCBpcyB1c2VkICovXFxuIFxcdHN0cnVjdCBrcmVmIHJlZmNvdW50O1xcbiBcXG5AQCAtMTQ4Miw2ICsxNDcwLDE1IEBAIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIge1xcbiBcXG4gXFx0LyoqIEBsYXN0X3JlY3ZfdGltZTogdGltZSAoamlmZmllcykgYSBtc2cgd2FzIHJlY2VpdmVkICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9yZWN2X3RpbWU7XFxuK1xcbitcXHQvKiogQHVuYWNrZWRfbGlzdDogbGlzdCBvZiB1bmFja2VkIHBhY2tldHMgKG1ldGEtaW5mbyBvbmx5KSAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHVuYWNrZWRfbGlzdDtcXG4rXFxuK1xcdC8qKiBAYWNrX3NlcW5vX2xvY2s6IHByb3RlY3QgdW5hY2tlZF9saXN0ICsgXFx1MDAyNmJhdGFkdl90cF9yZWNlaXZlci5sYXN0X3JlY3YgKi9cXG4rXFx0c3BpbmxvY2tfdCBhY2tfc2Vxbm9fbG9jaztcXG4rXFxuK1xcdC8qKiBAdW5hY2tlZF9jb3VudDogbnVtYmVyIG9mIHVuYWNrZWQgZW50cmllcyAqL1xcbitcXHRzaXplX3QgdW5hY2tlZF9jb3VudDtcXG4gfTtcXG4gXFxuIC8qKlxcbkBAIC0xNjc5LDYgKzE2NzYsOSBAQCBzdHJ1Y3QgYmF0YWR2X3ByaXYge1xcbiBcXHQvKiogQHRwX251bTogbnVtYmVyIG9mIGN1cnJlbnRseSBhY3RpdmUgdHAgc2Vzc2lvbnMgKi9cXG4gXFx0YXRvbWljX3QgdHBfbnVtO1xcbiBcXG4rXFx0LyoqIEBoYXJkaWZfZ2VuZXJhdGlvbjogZ2VuZXJhdGlvbiBjb3VudGVyIGFkZGVkIHRvIG5ldGxpbmsgaGFyZGlmIGR1bXBzICovXFxuK1xcdHVuc2lnbmVkIGludCBoYXJkaWZfZ2VuZXJhdGlvbjtcXG4rXFxuIFxcdC8qKiBAb3JpZ193b3JrOiB3b3JrIHF1ZXVlIGNhbGxiYWNrIGl0ZW0gZm9yIG9yaWcgbm9kZSBwdXJnaW5nICovXFxuIFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgb3JpZ193b3JrO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjA6NTQuODAxNzQ2NjQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDk5MDI2MDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCQVRNQU5fQURWXCIsXG4gICAgXCJCQVRNQU5fQURWX0JBVE1BTl9WXCIsXG4gICAgXCJCQVRNQU5fQURWX0JMQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZVwiLFxuICAgIFwiYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZVwiLFxuICAgIFwiYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXJcIixcbiAgICBcImJhdGFkdl90cF9yZWN2X21zZ1wiLFxuICAgIFwiYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzXCIsXG4gICAgXCJiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEIuQS5ULk0uQS5OLiBBZHZhbmNlZCByb3V0aW5nIHByb3RvY29sLiBJdCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgaGFyZCBpbnRlcmZhY2VzIChhZGRpbmcvcmVtb3ZpbmcgdGhlbSBmcm9tIHRoZSBtZXNoKSwgdGhlIHByb2Nlc3Npbmcgb2Ygb3V0LW9mLW9yZGVyIFRQIG1ldGVyIHBhY2tldHMsIGFuZCB0aGUgcGFyc2luZyBvZiBUVkxWIGNvbnRhaW5lcnMuIFRoZXNlIGFyZSBjb3JlIGxvZ2ljIGNoYW5nZXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluay9zeXNmcyBhbmQgbmV0d29yayBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYTJlZjQxZGQzM2NhZDE2NTk4NjM1ZDIwZTM0ZDUzZjU4ZGU1YzBiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMjE6MjA6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcbmluZGV4IGJiMmYwMTJiNDU0ZWE0Li4yMjYyMjI4M2Y1OWIwYyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jXG5AQCAtNDA0LDIzICs0MDQsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBiYXRhZHZfZm9yd19wYWNrZXQgKmZvcndfcGFja2V0LFxuIC8qIHNlbmQgYSBiYXRtYW4gb2dtIHBhY2tldCAqL1xuIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fZW1pdChzdHJ1Y3QgYmF0YWR2X2ZvcndfcGFja2V0ICpmb3J3X3BhY2tldClcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcbi1cbiBcdGlmICghZm9yd19wYWNrZXQtXHUwMDNlaWZfaW5jb21pbmcpIHtcbiBcdFx0cHJfZXJyKFwiRXJyb3IgLSBjYW4ndCBmb3J3YXJkIHBhY2tldDogaW5jb21pbmcgaWZhY2Ugbm90IHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0bWVzaF9pZmFjZSA9IGZvcndfcGFja2V0LVx1MDAzZWlmX2luY29taW5nLVx1MDAzZW1lc2hfaWZhY2U7XG4tXG4gXHRpZiAoV0FSTl9PTighZm9yd19wYWNrZXQtXHUwMDNlaWZfb3V0Z29pbmcpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoZm9yd19wYWNrZXQtXHUwMDNlaWZfb3V0Z29pbmctXHUwMDNlbWVzaF9pZmFjZSAhPSBtZXNoX2lmYWNlKSB7XG4tXHRcdHByX3dhcm4oXCIlczogbWVzaCBpbnRlcmZhY2Ugc3dpdGNoIGZvciBxdWV1ZWQgT0dNXFxuXCIsIF9fZnVuY19fKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuIFx0aWYgKGZvcndfcGFja2V0LVx1MDAzZWlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfQUNUSVZFKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtOTEwLDggKzkwMSw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2NoZWR1bGVfYnVmZihzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4gXG4gc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zY2hlZHVsZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4ge1xuLVx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8XG4tXHQgICAgaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpXG4rXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpXG4gXHRcdHJldHVybjtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2ViYXRfaXYub2dtX2J1ZmZfbXV0ZXgpO1xuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmNcbmluZGV4IDQ4NDFmMGYxYTliMTM5Li4yNjJlNDAwNDAwMDdjYyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuY1xuQEAgLTkwLDEyICs5MCw2IEBAIHN0YXRpYyBib29sIGJhdGFkdl92X2VscF9nZXRfdGhyb3VnaHB1dChzdHJ1Y3QgYmF0YWR2X2hhcmRpZl9uZWlnaF9ub2RlICpuZWlnaCxcbiBcdHUzMiB0aHJvdWdocHV0O1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIGRvbid0IHF1ZXJ5IHRocm91Z2hwdXQgd2hlbiBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoIGFueVxuLVx0ICogYmF0bWFuLWFkdiBpbnRlcmZhY2Vcbi1cdCAqL1xuLVx0aWYgKCFtZXNoX2lmYWNlKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4gXHQvKiBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBjdXN0b21pc2VkIHZhbHVlIGZvciB0aGlzIGludGVyZmFjZSwgdGhlblxuIFx0ICogcmV0dXJuIGl0IGRpcmVjdGx5XG4gXHQgKi9cbkBAIC0zMTEsOCArMzA1LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3ZfZWxwX3BlcmlvZGljX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIHdlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBzaHV0dGluZyB0aGlzIGludGVyZmFjZSBkb3duICovXG4tXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UgfHxcbi1cdCAgICBoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcbitcdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKiB0aGUgaW50ZXJmYWNlIHdhcyBlbmFibGVkIGJ1dCBtYXkgbm90IGJlIHJlYWR5IHlldCAqL1xuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmNcbmluZGV4IDAzNzkyMWFhZDM1ZDU4Li5lOTIxZDQ5ZjdlY2VkZCAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9vZ20uY1xuQEAgLTExNSwxNCArMTE1LDE0IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zdGFydF90aW1lcihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxuIFxuIC8qKlxuICAqIGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKCkgLSBzZW5kIGEgYmF0bWFuIG9nbSB1c2luZyBhIGdpdmVuIGludGVyZmFjZVxuLSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuICAqIEBza2I6IHRoZSBPR00gdG8gc2VuZFxuICAqIEBoYXJkX2lmYWNlOiB0aGUgaW50ZXJmYWNlIHRvIHVzZSB0byBzZW5kIHRoZSBPR01cbiAgKi9cbi1zdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fc2VuZF90b19pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4rc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4ge1xuK1x0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4rXG4gXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0FDVElWRSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTE4OSw3ICsxODksNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9saXN0X2ZyZWUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIFxuIC8qKlxuICAqIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoKSAtIGZsdXNoIFx1MDAyNiBzZW5kIGFnZ3JlZ2F0aW9uIHF1ZXVlXG4tICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4gICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUgYWdncmVnYXRpb24gcXVldWUgdG8gZmx1c2hcbiAgKlxuICAqIEFnZ3JlZ2F0ZXMgYWxsIE9HTXYyIHBhY2tldHMgY3VycmVudGx5IGluIHRoZSBhZ2dyZWdhdGlvbiBxdWV1ZSBpbnRvIGFcbkBAIC0xOTksOCArMTk4LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3JfbGlzdF9mcmVlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbiAgKlxuICAqIENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGlzdC5sb2NrLlxuICAqL1xuLXN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi1cdFx0XHRcdCAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbitzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgYWdncl9sZW4gPSBoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGVuO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9hZ2dyO1xuQEAgLTIzMCwyNiArMjI4LDIxIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdH1cbiBcbi1cdGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKGJhdF9wcml2LCBza2JfYWdnciwgaGFyZF9pZmFjZSk7XG4rXHRiYXRhZHZfdl9vZ21fc2VuZF90b19pZihza2JfYWdnciwgaGFyZF9pZmFjZSk7XG4gfVxuIFxuIC8qKlxuICAqIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZigpIC0gcXVldWUgYSBiYXRtYW4gb2dtIG9uIGEgZ2l2ZW4gaW50ZXJmYWNlXG4tICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4gICogQHNrYjogdGhlIE9HTSB0byBxdWV1ZVxuICAqIEBoYXJkX2lmYWNlOiB0aGUgaW50ZXJmYWNlIHRvIHF1ZXVlIHRoZSBPR00gb25cbiAgKi9cbi1zdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fcXVldWVfb25faWYoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fcXVldWVfb25faWYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIHtcbi1cdGlmIChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UgIT0gYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuK1x0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXG4gXHRpZiAoIVJFQURfT05DRShiYXRfcHJpdi1cdTAwM2VhZ2dyZWdhdGVkX29nbXMpKSB7XG4tXHRcdGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKGJhdF9wcml2LCBza2IsIGhhcmRfaWZhY2UpO1xuK1x0XHRiYXRhZHZfdl9vZ21fc2VuZF90b19pZihza2IsIGhhcmRfaWZhY2UpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMjYwLDcgKzI1Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0fVxuIFxuIFx0aWYgKCFiYXRhZHZfdl9vZ21fcXVldWVfbGVmdChza2IsIGhhcmRfaWZhY2UpKVxuLVx0XHRiYXRhZHZfdl9vZ21fYWdncl9zZW5kKGJhdF9wcml2LCBoYXJkX2lmYWNlKTtcbitcdFx0YmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChoYXJkX2lmYWNlKTtcbiBcbiBcdGhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9sZW4gKz0gYmF0YWR2X3Zfb2dtX2xlbihza2IpO1xuIFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGlzdCwgc2tiKTtcbkBAIC0zNTcsNyArMzUwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3NlbmRfbWVzaGlmKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0YmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKGJhdF9wcml2LCBza2JfdG1wLCBoYXJkX2lmYWNlKTtcbitcdFx0YmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHNrYl90bXAsIGhhcmRfaWZhY2UpO1xuIFx0XHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuQEAgLTM5NywxNCArMzkwLDEyIEBAIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlX2JhdF92ICpiYXR2O1xuIFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xuLVx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdjtcbiBcbiBcdGJhdHYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlX2JhdF92LCBhZ2dyX3dxLndvcmspO1xuIFx0aGFyZF9pZmFjZSA9IGNvbnRhaW5lcl9vZihiYXR2LCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UsIGJhdF92KTtcbi1cdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGlzdC5sb2NrKTtcbi1cdGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoYmF0X3ByaXYsIGhhcmRfaWZhY2UpO1xuK1x0YmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChoYXJkX2lmYWNlKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9saXN0LmxvY2spO1xuIFxuIFx0YmF0YWR2X3Zfb2dtX3N0YXJ0X3F1ZXVlX3RpbWVyKGhhcmRfaWZhY2UpO1xuQEAgLTYwMSw3ICs1OTIsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fZm9yd2FyZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHQgICBpZl9vdXRnb2luZy1cdTAwM2VuZXRfZGV2LVx1MDAzZW5hbWUsIG50b2hsKG9nbV9mb3J3YXJkLVx1MDAzZXRocm91Z2hwdXQpLFxuIFx0XHQgICBvZ21fZm9yd2FyZC1cdTAwM2V0dGwsIGlmX2luY29taW5nLVx1MDAzZW5ldF9kZXYtXHUwMDNlbmFtZSk7XG4gXG4tXHRiYXRhZHZfdl9vZ21fcXVldWVfb25faWYoYmF0X3ByaXYsIHNrYiwgaWZfb3V0Z29pbmcpO1xuK1x0YmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHNrYiwgaWZfb3V0Z29pbmcpO1xuIFxuIG91dDpcbiBcdGJhdGFkdl9vcmlnX2lmaW5mb19wdXQob3JpZ19pZmluZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jIGIvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcbmluZGV4IDVjNzNmNmJhMTZjZmYzLi5mOWExZmFkZjhkZTllNCAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuY1xuQEAgLTM0NCw3ICszNDQsNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfY2xhaW0oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKm1hYyxcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgZXRoaGRyICpldGhoZHI7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcbiBcdHU4ICpod19zcmM7XG4gXHRzdHJ1Y3QgYmF0YWR2X2JsYV9jbGFpbV9kc3QgbG9jYWxfY2xhaW1fZGVzdDtcbiBcdF9fYmUzMiB6ZXJvaXAgPSAwO1xuQEAgLTM1NywxNCArMzU2LDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLFxuIFx0ICAgICAgIHNpemVvZihsb2NhbF9jbGFpbV9kZXN0KSk7XG4gXHRsb2NhbF9jbGFpbV9kZXN0LnR5cGUgPSBjbGFpbXR5cGU7XG4gXG4tXHRtZXNoX2lmYWNlID0gUkVBRF9PTkNFKHByaW1hcnlfaWYtXHUwMDNlbWVzaF9pZmFjZSk7XG4tXHRpZiAoIW1lc2hfaWZhY2UpXG4tXHRcdGdvdG8gb3V0O1xuLVxuIFx0c2tiID0gYXJwX2NyZWF0ZShBUlBPUF9SRVBMWSwgRVRIX1BfQVJQLFxuIFx0XHRcdCAvKiBJUCBEU1Q6IDAuMC4wLjAgKi9cbiBcdFx0XHQgemVyb2lwLFxuLVx0XHRcdCBtZXNoX2lmYWNlLFxuK1x0XHRcdCBwcmltYXJ5X2lmLVx1MDAzZW1lc2hfaWZhY2UsXG4gXHRcdFx0IC8qIElQIFNSQzogMC4wLjAuMCAqL1xuIFx0XHRcdCB6ZXJvaXAsXG4gXHRcdFx0IC8qIEV0aGVybmV0IERTVDogQnJvYWRjYXN0ICovXG5AQCAtNDQyLDcgKzQzNyw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLFxuIFx0fVxuIFxuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbWVzaF9pZmFjZSk7XG4rXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHByaW1hcnlfaWYtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXHRiYXRhZHZfaW5jX2NvdW50ZXIoYmF0X3ByaXYsIEJBVEFEVl9DTlRfUlgpO1xuIFx0YmF0YWR2X2FkZF9jb3VudGVyKGJhdF9wcml2LCBCQVRBRFZfQ05UX1JYX0JZVEVTLFxuIFx0XHRcdCAgIHNrYi1cdTAwM2VsZW4gKyBFVEhfSExFTik7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmNcbmluZGV4IDAzZDAxYzIwYTk1NDhiLi5iNjg2NzU3NmJiYWZhZSAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmNcbisrKyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmNcbkBAIC02Myw2ICs2Myw3IEBAIHZvaWQgYmF0YWR2X2hhcmRpZl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4gXG4gXHRoYXJkX2lmYWNlID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlLCByZWZjb3VudCk7XG4rXHRuZXRkZXZfcHV0KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSwgXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoaWZfZGV2X3RyYWNrZXIpO1xuIFx0bmV0ZGV2X3B1dChoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIFxuIFx0a2ZyZWVfcmN1KGhhcmRfaWZhY2UsIHJjdSk7XG5AQCAtNzUsMjEgKzc2LDIxIEBAIHZvaWQgYmF0YWR2X2hhcmRpZl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4gICogUmV0dXJuOiBiYXRhZHZfaGFyZF9pZmFjZSBvZiBuZXRfZGV2ICh3aXRoIGluY3JlYXNlZCByZWZjbnQpLCBOVUxMIG9uIGVycm9yc1xuICAqL1xuIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqXG4tYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxuK2JhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldilcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGhhcmRfaWZhY2UsIFx1MDAyNmJhdGFkdl9oYXJkaWZfbGlzdCwgbGlzdCkge1xuLVx0XHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2ID09IG5ldF9kZXYgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KSlcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH1cbitcdEFTU0VSVF9SVE5MKCk7XG4gXG4tXHRoYXJkX2lmYWNlID0gTlVMTDtcbitcdG1lc2hfaWZhY2UgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobmV0X2Rldik7XG4rXHRpZiAoIW1lc2hfaWZhY2UgfHwgIWJhdGFkdl9tZXNoaWZfaXNfdmFsaWQobWVzaF9pZmFjZSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0aGFyZF9pZmFjZSA9IG5ldGRldl9sb3dlcl9kZXZfZ2V0X3ByaXZhdGUobWVzaF9pZmFjZSwgbmV0X2Rldik7XG4rXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlcmVmY291bnQpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbiBcbi1vdXQ6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBoYXJkX2lmYWNlO1xuIH1cbiBcbkBAIC0yNDUsNyArMjQ2LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKl9fYmF0YWR2X2dldF9yZWFsX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0fVxuIFxuIFx0aGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihuZXRkZXYpO1xuLVx0aWYgKCFoYXJkX2lmYWNlIHx8ICFoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpXG4rXHRpZiAoIWhhcmRfaWZhY2UpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0bmV0ID0gZGV2X25ldChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuQEAgLTUzOSwxNiArNTQwLDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhXG4gXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnRtcF9oYXJkX2lmYWNlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiBcbi1cdGlmICghbWVzaF9pZmFjZSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX3ByaXZhdGUobWVzaF9pZmFjZSwgdG1wX2hhcmRfaWZhY2UsIGl0ZXIpIHtcbiBcdFx0aWYgKHRtcF9oYXJkX2lmYWNlID09IGhhcmRfaWZhY2UpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmICh0bXBfaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghYmF0YWR2X2NvbXBhcmVfZXRoKHRtcF9oYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYtXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdGhhcmRfaWZhY2UtXHUwMDNlbmV0X2Rldi1cdTAwM2VkZXZfYWRkcikpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtNTc0LDkgKzU2OSw2IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9oYXJkaWZfcmVjYWxjX2V4dHJhX3NrYnJvb20oc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfcHJpdmF0ZV9yY3UobWVzaF9pZmFjZSwgaGFyZF9pZmFjZSwgaXRlcikge1xuLVx0XHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGxvd2VyX2hlYWRlcl9sZW4gPSBtYXhfdCh1bnNpZ25lZCBzaG9ydCwgbG93ZXJfaGVhZGVyX2xlbixcbiBcdFx0XHRcdFx0IGhhcmRfaWZhY2UtXHUwMDNlbmV0X2Rldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuIFxuQEAgLTcyMywzOCArNzE1LDYzIEBAIGJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIH1cbiBcbiAvKipcbi0gKiBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2UoKSAtIEVuc2xhdmUgaGFyZCBpbnRlcmZhY2UgdG8gbWVzaCBpbnRlcmZhY2Vcbi0gKiBAaGFyZF9pZmFjZTogaGFyZCBpbnRlcmZhY2UgdG8gYWRkIHRvIG1lc2ggaW50ZXJmYWNlXG4rICogYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKCkgLSBFbnNsYXZlIGludGVyZmFjZSB0byBtZXNoIGludGVyZmFjZVxuKyAqIEBuZXRfZGV2OiBuZXRkZXYgc3RydWN0IG9mIHRoZSBpbnRlcmZhY2UgdG8gYWRkIHRvIG1lc2ggaW50ZXJmYWNlXG4gICogQG1lc2hfaWZhY2U6IG5ldGRldiBzdHJ1Y3Qgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBudW1iZXIgaW4gY2FzZSBvZiBmYWlsdXJlXG4gICovXG4taW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXG4raW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKVxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7XG4gXHRfX2JlMTYgZXRoZXJ0eXBlID0gaHRvbnMoRVRIX1BfQkFUTUFOKTtcbiBcdGludCBtYXhfaGVhZGVyX2xlbiA9IGJhdGFkdl9tYXhfaGVhZGVyX2xlbigpO1xuK1x0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xuIFx0dW5zaWduZWQgaW50IHJlcXVpcmVkX210dTtcbiBcdHVuc2lnbmVkIGludCBoYXJkaWZfbXR1O1xuIFx0Ym9vbCBmcmFnbWVudGF0aW9uO1xuIFx0aW50IHJldDtcbiBcbi1cdGhhcmRpZl9tdHUgPSBSRUFEX09OQ0UoaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2LVx1MDAzZW10dSk7XG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0aWYgKCFiYXRhZHZfaXNfdmFsaWRfaWZhY2UobmV0X2RldikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aGFyZGlmX210dSA9IFJFQURfT05DRShuZXRfZGV2LVx1MDAzZW10dSk7XG4gXHRyZXF1aXJlZF9tdHUgPSBSRUFEX09OQ0UobWVzaF9pZmFjZS1cdTAwM2VtdHUpICsgbWF4X2hlYWRlcl9sZW47XG4gXG4gXHRpZiAoaGFyZGlmX210dSBcdTAwM2MgRVRIX01JTl9NVFUgKyBtYXhfaGVhZGVyX2xlbilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdGdvdG8gb3V0O1xuK1x0aGFyZF9pZmFjZSA9IGt6YWxsb2Nfb2JqKCpoYXJkX2lmYWNlLCBHRlBfQVRPTUlDKTtcbitcdGlmICghaGFyZF9pZmFjZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRrcmVmX2dldChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KTtcbitcdG5ldGRldl9ob2xkKG5ldF9kZXYsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuK1x0aGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2ID0gbmV0X2RldjtcbitcbitcdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX0lOQUNUSVZFO1xuK1xuK1x0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbmVpZ2hfbGlzdCk7XG4rXG4rXHRtdXRleF9pbml0KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X2l2Lm9nbV9idWZmX211dGV4KTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbmVpZ2hfbGlzdF9sb2NrKTtcbitcdGtyZWZfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KTtcbitcbitcdGhhcmRfaWZhY2UtXHUwMDNlbnVtX2JjYXN0cyA9IEJBVEFEVl9OVU1fQkNBU1RTX0RFRkFVTFQ7XG4rXHRpZiAoYmF0YWR2X2lzX3dpZmlfaGFyZGlmKGhhcmRfaWZhY2UpKVxuK1x0XHRoYXJkX2lmYWNlLVx1MDAzZW51bV9iY2FzdHMgPSBCQVRBRFZfTlVNX0JDQVNUU19XSVJFTEVTUztcbitcbitcdFdSSVRFX09OQ0UoaGFyZF9pZmFjZS1cdTAwM2Vob3BfcGVuYWx0eSwgMCk7XG4rXG4rXHRiYXRhZHZfdl9oYXJkaWZfaW5pdChoYXJkX2lmYWNlKTtcbiBcbiBcdG5ldGRldl9ob2xkKG1lc2hfaWZhY2UsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbWVzaGlmX2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbiBcdGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSA9IG1lc2hfaWZhY2U7XG4gXHRiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXG4rXHRiYXRfcHJpdi1cdTAwM2VoYXJkaWZfZ2VuZXJhdGlvbisrO1xuIFx0cmV0ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGluayhoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYsXG4gXHRcdFx0XHRcdCAgIG1lc2hfaWZhY2UsIGhhcmRfaWZhY2UsIE5VTEwsIE5VTEwpO1xuIFx0aWYgKHJldClcbkBAIC03NjQsOSArNzgxLDYgQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl91cHBlcjtcbiBcbi1cdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX0lOQUNUSVZFO1xuLVxuLVx0a3JlZl9nZXQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCk7XG4gXHRoYXJkX2lmYWNlLVx1MDAzZWJhdG1hbl9hZHZfcHR5cGUudHlwZSA9IGV0aGVydHlwZTtcbiBcdGhhcmRfaWZhY2UtXHUwMDNlYmF0bWFuX2Fkdl9wdHlwZS5mdW5jID0gYmF0YWR2X2JhdG1hbl9za2JfcmVjdjtcbiBcdGhhcmRfaWZhY2UtXHUwMDNlYmF0bWFuX2Fkdl9wdHlwZS5kZXYgPSBoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXY7XG5AQCAtODAyLDE0ICs4MTYsMTEgQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXG4gXHRpZiAoYmF0X3ByaXYtXHUwMDNlYWxnb19vcHMtXHUwMDNlaWZhY2UuZW5hYmxlZClcbiBcdFx0YmF0X3ByaXYtXHUwMDNlYWxnb19vcHMtXHUwMDNlaWZhY2UuZW5hYmxlZChoYXJkX2lmYWNlKTtcbiBcbi1vdXQ6XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfdXBwZXI6XG4gXHRuZXRkZXZfdXBwZXJfZGV2X3VubGluayhoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYsIG1lc2hfaWZhY2UpO1xuIGVycl9kZXY6XG4tXHRoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UgPSBOVUxMO1xuLVx0bmV0ZGV2X3B1dChtZXNoX2lmYWNlLCBcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZW1lc2hpZl9kZXZfdHJhY2tlcik7XG4gXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTgyMSwxNyArODMyLDE4IEBAIGludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxuIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4ge1xuIFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4tXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMO1xuK1x0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbiBcbiBcdGJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XG4gXG4gXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFKVxuLVx0XHRnb3RvIG91dDtcbitcdFx0cmV0dXJuO1xuIFxuIFx0YmF0YWR2X2luZm8oaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlLCBcIlJlbW92aW5nIGludGVyZmFjZTogJXNcXG5cIixcbiBcdFx0ICAgIGhhcmRfaWZhY2UtXHUwMDNlbmV0X2Rldi1cdTAwM2VuYW1lKTtcbiBcdGRldl9yZW1vdmVfcGFjayhcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdG1hbl9hZHZfcHR5cGUpO1xuLVx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XG4gXG4gXHRwcmltYXJ5X2lmID0gYmF0YWR2X3ByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTtcbiBcdGlmIChoYXJkX2lmYWNlID09IHByaW1hcnlfaWYpIHtcbkBAIC04NDIsMTUgKzg1NCwxNiBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIFxuIFx0XHRiYXRhZHZfaGFyZGlmX3B1dChuZXdfaWYpO1xuIFx0fVxuK1x0YmF0YWR2X2hhcmRpZl9wdXQocHJpbWFyeV9pZik7XG4gXG4gXHRiYXRfcHJpdi1cdTAwM2VhbGdvX29wcy1cdTAwM2VpZmFjZS5kaXNhYmxlKGhhcmRfaWZhY2UpO1xuLVx0aGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPSBCQVRBRFZfSUZfTk9UX0lOX1VTRTtcbitcdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQ7XG4gXG4gXHQvKiBkZWxldGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBoYXJkX2lmYWNlICovXG4gXHRiYXRhZHZfcHVyZ2Vfb3JpZ19yZWYoYmF0X3ByaXYpO1xuIFx0YmF0YWR2X3B1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoYmF0X3ByaXYsIGhhcmRfaWZhY2UpO1xuLVx0bmV0ZGV2X3B1dChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbWVzaGlmX2Rldl90cmFja2VyKTtcbiBcbitcdGJhdF9wcml2LVx1MDAzZWhhcmRpZl9nZW5lcmF0aW9uKys7XG4gXHRuZXRkZXZfdXBwZXJfZGV2X3VubGluayhoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYsIGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXHRiYXRhZHZfaGFyZGlmX3JlY2FsY19leHRyYV9za2Jyb29tKGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXG5AQCAtODU4LDY3ICs4NzEsNiBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWFkal9saXN0Lmxvd2VyKSlcbiBcdFx0YmF0YWR2X2d3X2NoZWNrX2NsaWVudF9zdG9wKGJhdF9wcml2KTtcbiBcbi1cdGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSA9IE5VTEw7XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbi1cbi1vdXQ6XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChwcmltYXJ5X2lmKTtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqXG4tYmF0YWR2X2hhcmRpZl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxuLXtcbi1cdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcbi1cbi1cdEFTU0VSVF9SVE5MKCk7XG4tXG4tXHRpZiAoIWJhdGFkdl9pc192YWxpZF9pZmFjZShuZXRfZGV2KSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRoYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKCFoYXJkX2lmYWNlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdG5ldGRldl9ob2xkKG5ldF9kZXYsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuLVx0aGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2ID0gbmV0X2Rldjtcbi1cbi1cdGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSA9IE5VTEw7XG4tXHRoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyA9IEJBVEFEVl9JRl9OT1RfSU5fVVNFO1xuLVxuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VsaXN0KTtcbi1cdElOSVRfSExJU1RfSEVBRChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZW5laWdoX2xpc3QpO1xuLVxuLVx0bXV0ZXhfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdF9pdi5vZ21fYnVmZl9tdXRleCk7XG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZW5laWdoX2xpc3RfbG9jayk7XG4tXHRrcmVmX2luaXQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCk7XG4tXG4tXHRoYXJkX2lmYWNlLVx1MDAzZW51bV9iY2FzdHMgPSBCQVRBRFZfTlVNX0JDQVNUU19ERUZBVUxUO1xuLVx0aWYgKGJhdGFkdl9pc193aWZpX2hhcmRpZihoYXJkX2lmYWNlKSlcbi1cdFx0aGFyZF9pZmFjZS1cdTAwM2VudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfV0lSRUxFU1M7XG4tXG4tXHRXUklURV9PTkNFKGhhcmRfaWZhY2UtXHUwMDNlaG9wX3BlbmFsdHksIDApO1xuLVxuLVx0YmF0YWR2X3ZfaGFyZGlmX2luaXQoaGFyZF9pZmFjZSk7XG4tXG4tXHRrcmVmX2dldChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KTtcbi1cdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbGlzdCwgXHUwMDI2YmF0YWR2X2hhcmRpZl9saXN0KTtcbi1cdGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbisrO1xuLVxuLVx0cmV0dXJuIGhhcmRfaWZhY2U7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGJhdGFkdl9oYXJkaWZfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4te1xuLVx0QVNTRVJUX1JUTkwoKTtcbi1cbi1cdC8qIGZpcnN0IGRlYWN0aXZhdGUgaW50ZXJmYWNlICovXG4tXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XG4tXG4tXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdHJldHVybjtcbi1cbi1cdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQ7XG4gXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbiB9XG4gXG5AQCAtMTA4MiwxMCArMTAzNCw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2hhcmRfaWZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuIFx0YmF0YWR2X3dpZmlfbmV0X2RldmljZV9ldmVudChldmVudCwgbmV0X2Rldik7XG4gXG4gXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KG5ldF9kZXYpO1xuLVx0aWYgKCFoYXJkX2lmYWNlIFx1MDAyNlx1MDAyNiAoZXZlbnQgPT0gTkVUREVWX1JFR0lTVEVSIHx8XG4tXHRcdFx0ICAgIGV2ZW50ID09IE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFKSlcbi1cdFx0aGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfYWRkX2ludGVyZmFjZShuZXRfZGV2KTtcbi1cbiBcdGlmICghaGFyZF9pZmFjZSlcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtMTA5OSwxOSArMTA0NywxMiBAQCBzdGF0aWMgaW50IGJhdGFkdl9oYXJkX2lmX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuIFx0Y2FzZSBORVRERVZfUFJFX1RZUEVfQ0hBTkdFOlxuLVx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VsaXN0KTtcbi1cdFx0YmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uKys7XG4tXG4tXHRcdGJhdGFkdl9oYXJkaWZfcmVtb3ZlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbitcdFx0YmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5FVERFVl9DSEFOR0VNVFU6XG4tXHRcdGlmIChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpXG4tXHRcdFx0YmF0YWR2X3VwZGF0ZV9taW5fbXR1KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4rXHRcdGJhdGFkdl91cGRhdGVfbWluX210dShoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX0NIQU5HRUFERFI6XG4tXHRcdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSlcbi1cdFx0XHRnb3RvIGhhcmRpZl9wdXQ7XG4tXG4gXHRcdGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihoYXJkX2lmYWNlKTtcbiBcbiBcdFx0YmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmggYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oXG5pbmRleCBhZjMxNjk2YzM5NzgwOC4uOTM1ZjQ3Y2E5YTQ4ZmQgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oXG5AQCAtMjEsMTIgKzIxLDYgQEBcbiAgKiBlbnVtIGJhdGFkdl9oYXJkX2lmX3N0YXRlIC0gU3RhdGUgb2YgYSBoYXJkIGludGVyZmFjZVxuICAqL1xuIGVudW0gYmF0YWR2X2hhcmRfaWZfc3RhdGUge1xuLVx0LyoqXG4tXHQgKiBAQkFUQURWX0lGX05PVF9JTl9VU0U6IGludGVyZmFjZSBpcyBub3QgdXNlZCBhcyBzbGF2ZSBpbnRlcmZhY2Ugb2YgYVxuLVx0ICogYmF0bWFuLWFkdiBtZXNoIGludGVyZmFjZVxuLVx0ICovXG4tXHRCQVRBRFZfSUZfTk9UX0lOX1VTRSxcbi1cbiBcdC8qKlxuIFx0ICogQEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEOiBpbnRlcmZhY2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gbWVzaFxuIFx0ICogaW50ZXJmYWNlXG5AQCAtNzQsOCArNjgsOCBAQCB1MzIgYmF0YWR2X25ldGRldl9nZXRfd2lmaV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7XG4gdTMyIGJhdGFkdl9oYXJkaWZfZ2V0X3dpZmlfZmxhZ3Moc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKTtcbiBib29sIGJhdGFkdl9pc193aWZpX2hhcmRpZihzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xuIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSpcbi1iYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpO1xuLWludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxuK2JhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7XG4raW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcbiB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKTtcbiBpbnQgYmF0YWR2X2hhcmRpZl9taW5fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmMgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmNcbmluZGV4IDNjNDU3MjI4NGI1MzJmLi4wNGJiMDMwZWYyOTlhYyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L21haW4uY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jXG5AQCAtNTksMTEgKzU5LDYgQEBcbiAjaW5jbHVkZSBcInRwX21ldGVyLmhcIlxuICNpbmNsdWRlIFwidHJhbnNsYXRpb24tdGFibGUuaFwiXG4gXG4tLyogTGlzdCBtYW5pcHVsYXRpb25zIG9uIGhhcmRpZl9saXN0IGhhdmUgdG8gYmUgcnRubF9sb2NrKCknZWQsXG4tICogbGlzdCB0cmF2ZXJzYWxzIGp1c3QgcmN1LWxvY2tlZFxuLSAqL1xuLXN0cnVjdCBsaXN0X2hlYWQgYmF0YWR2X2hhcmRpZl9saXN0O1xuLXVuc2lnbmVkIGludCBiYXRhZHZfaGFyZGlmX2dlbmVyYXRpb247XG4gc3RhdGljIGludCAoKmJhdGFkdl9yeF9oYW5kbGVyWzI1Nl0pKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcmVjdl9pZik7XG4gXG5AQCAtOTUsNyArOTAsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBiYXRhZHZfaW5pdCh2b2lkKVxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmJhdGFkdl9oYXJkaWZfbGlzdCk7XG4gXHRiYXRhZHZfYWxnb19pbml0KCk7XG4gXG4gXHRiYXRhZHZfcmVjdl9oYW5kbGVyX2luaXQoKTtcbkBAIC00NTAsOSArNDQ0LDYgQEAgaW50IGJhdGFkdl9iYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICh1bmxpa2VseShza2ItXHUwMDNlbWFjX2xlbiAhPSBFVEhfSExFTiB8fCAhc2tiX21hY19oZWFkZXIoc2tiKSkpXG4gXHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4tXHRpZiAoIWhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSlcbi1cdFx0Z290byBlcnJfZnJlZTtcbi1cbiBcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiBcbiBcdGlmIChSRUFEX09OQ0UoYmF0X3ByaXYtXHUwMDNlbWVzaF9zdGF0ZSkgIT0gQkFUQURWX01FU0hfQUNUSVZFKVxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L21haW4uaCBiL25ldC9iYXRtYW4tYWR2L21haW4uaFxuaW5kZXggZjY4ZmM4YjcyMzljZDUuLmU3Mzg3NThlZTRhN2FlIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5oXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmhcbkBAIC0yMjYsOSArMjI2LDYgQEAgc3RhdGljIGlubGluZSBpbnQgYmF0YWR2X3ByaW50X3ZpZCh1bnNpZ25lZCBzaG9ydCB2aWQpXG4gXHRcdHJldHVybiAtMTtcbiB9XG4gXG4tZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYmF0YWR2X2hhcmRpZl9saXN0O1xuLWV4dGVybiB1bnNpZ25lZCBpbnQgYmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uO1xuLVxuIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYmF0YWR2X2V2ZW50X3dvcmtxdWV1ZTtcbiBcbiBpbnQgYmF0YWR2X21lc2hfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbmluZGV4IDQ0MDI2ODEwYjk5Y2VhLi5hMzczNjhjMWY1YjU1YyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbisrKyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbkBAIC04MzYsMTggKzgzNiw3IEBAIHN0YXRpYyBpbnQgYmF0YWR2X21lc2hpZl9zbGF2ZV9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4tXG4tXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KHNsYXZlX2Rldik7XG4tXHRpZiAoIWhhcmRfaWZhY2UgfHwgaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdHJldCA9IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlLCBkZXYpO1xuLVxuLW91dDpcbi1cdGJhdGFkdl9oYXJkaWZfcHV0KGhhcmRfaWZhY2UpO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc2xhdmVfZGV2LCBkZXYpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMgYi9uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmNcbmluZGV4IDRjZjllM2M1NGFkM2IyLi5kMmJjNDhjNzA3MTQzNCAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L25ldGxpbmsuY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jXG5AQCAtOTY4LDcgKzk2OCw3IEBAIGJhdGFkdl9uZXRsaW5rX2R1bXBfaGFyZGlmKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XG4gXG4gXHRydG5sX2xvY2soKTtcbi1cdGNiLVx1MDAzZXNlcSA9IGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiBcdTAwM2NcdTAwM2MgMSB8IDE7XG4rXHRjYi1cdTAwM2VzZXEgPSBiYXRfcHJpdi1cdTAwM2VoYXJkaWZfZ2VuZXJhdGlvbiBcdTAwM2NcdTAwM2MgMSB8IDE7XG4gXG4gXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfcHJpdmF0ZShtZXNoX2lmYWNlLCBoYXJkX2lmYWNlLCBpdGVyKSB7XG4gXHRcdGlmIChpKysgXHUwMDNjIHNraXApXG5AQCAtMTIxMSw3ICsxMjExLDkgQEAgYmF0YWR2X25ldGxpbmtfZ2V0X2hhcmRpZl9mcm9tX2lmaW5kZXgoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdGlmICghaGFyZF9kZXYpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIFxuK1x0cnRubF9sb2NrKCk7XG4gXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGhhcmRfZGV2KTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4gXHRpZiAoIWhhcmRfaWZhY2UpXG4gXHRcdGdvdG8gZXJyX3B1dF9oYXJkZGV2O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuY1xuaW5kZXggOWIzOGJkOWU4ZGE3ZWMuLjQ4ZjgzN2NmNjY1YTJhIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmNcbkBAIC0xMDMzLDcgKzEwMzMsNiBAQCBiYXRhZHZfcHVyZ2VfbmVpZ2hfaWZpbmZvKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXG4gXHRcdC8qIGRvbid0IHB1cmdlIGlmIHRoZSBpbnRlcmZhY2UgaXMgbm90IChnb2luZykgZG93biAqL1xuIFx0XHRpZiAoaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9JTkFDVElWRSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGlmX291dGdvaW5nLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGlmX291dGdvaW5nLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0xMDc3LDcgKzEwNzYsNiBAQCBiYXRhZHZfcHVyZ2Vfb3JpZ19pZmluZm8oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBcdFx0LyogZG9uJ3QgcHVyZ2UgaWYgdGhlIGludGVyZmFjZSBpcyBub3QgKGdvaW5nKSBkb3duICovXG4gXHRcdGlmIChpZl9vdXRnb2luZy1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9OT1RfSU5fVVNFIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTExMjcsMTAgKzExMjUsOCBAQCBiYXRhZHZfcHVyZ2Vfb3JpZ19uZWlnaGJvcnMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBcdFx0aWYgKGJhdGFkdl9oYXNfdGltZWRfb3V0KGxhc3Rfc2VlbiwgQkFUQURWX1BVUkdFX1RJTUVPVVQpIHx8XG4gXHRcdCAgICBpZl9pbmNvbWluZy1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX0lOQUNUSVZFIHx8XG4tXHRcdCAgICBpZl9pbmNvbWluZy1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UgfHxcbiBcdFx0ICAgIGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRCkge1xuIFx0XHRcdGlmIChpZl9pbmNvbWluZy1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX0lOQUNUSVZFIHx8XG4tXHRcdFx0ICAgIGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSB8fFxuIFx0XHRcdCAgICBpZl9pbmNvbWluZy1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpXG4gXHRcdFx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfQkFUTUFOLCBiYXRfcHJpdixcbiBcdFx0XHRcdFx0ICAgXCJuZWlnaGJvciBwdXJnZTogb3JpZ2luYXRvciAlcE0sIG5laWdoYm9yOiAlcE0sIGlmYWNlOiAlc1xcblwiLFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMgYi9uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jXG5pbmRleCBjMmVlYTdkYmM0ODgzMy4uMDA0NjdhYTc5ZGU5ZGMgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jXG5AQCAtMzU4LDI4ICszNTgsMTYgQEAgYmF0YWR2X3RwX2xpc3RfZmluZF9zZW5kZXJfc2Vzc2lvbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0LFxuIH1cbiBcbiAvKipcbi0gKiBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZSgpIC0gcmVsZWFzZSBiYXRhZHZfdHBfdmFyc19jb21tb24gZnJvbSBsaXN0c1xuKyAqIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZSgpIC0gcmVsZWFzZSBiYXRhZHZfdHBfc2VuZGVyXG4gICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kXG4tICogQHJlZjoga3JlZiBwb2ludGVyIG9mIHRoZSBiYXRhZHZfdHBfdmFyc19jb21tb25cbisgKiBAcmVmOiBrcmVmIHBvaW50ZXIgb2YgdGhlIGJhdGFkdl90cF9zZW5kZXJcbiAgKi9cbi1zdGF0aWMgdm9pZCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuK3N0YXRpYyB2b2lkIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuIHtcbi1cdHN0cnVjdCBiYXRhZHZfdHBfdmFyc19jb21tb24gKnRwX3ZhcnM7XG4tXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqc2FmZTtcbi1cbi1cdHRwX3ZhcnMgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X3RwX3ZhcnNfY29tbW9uLCByZWZjb3VudCk7XG4tXG4tXHQvKiBsb2NrIHNob3VsZCBub3QgYmUgbmVlZGVkIGJlY2F1c2UgdGhpcyBvYmplY3QgaXMgbm93IG91dCBvZiBhbnlcbi1cdCAqIGNvbnRleHQhXG4tXHQgKi9cbi1cdHNwaW5fbG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZXVuYWNrZWRfbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuLVx0XHRrZnJlZSh1bik7XG4tXHR9XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZXVuYWNrZWRfbG9jayk7XG4rXHRzdHJ1Y3QgYmF0YWR2X3RwX3NlbmRlciAqdHBfdmFycztcbiBcbi1cdGtmcmVlX3JjdSh0cF92YXJzLCByY3UpO1xuK1x0dHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfc2VuZGVyLCBjb21tb24ucmVmY291bnQpO1xuK1x0a2ZyZWVfcmN1KHRwX3ZhcnMsIGNvbW1vbi5yY3UpO1xuIH1cbiBcbiAvKipcbkBAIC0zOTIsNyArMzgwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3NlbmRlcl9wdXQoc3RydWN0IGJhdGFkdl90cF9zZW5kZXIgKnRwX3ZhcnMpXG4gXHRpZiAoIXRwX3ZhcnMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGtyZWZfcHV0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnJlZmNvdW50LCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZSk7XG4rXHRrcmVmX3B1dChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi5yZWZjb3VudCwgYmF0YWR2X3RwX3NlbmRlcl9yZWxlYXNlKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTE0NSw5ICsxMTMzLDYgQEAgdm9pZCBiYXRhZHZfdHBfc3RhcnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdCxcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2dHBfdmFycy1cdTAwM2Vtb3JlX2J5dGVzKTtcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZ0cF92YXJzLVx1MDAzZWZpbmlzaGVkKTtcbiBcbi1cdHNwaW5fbG9ja19pbml0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QpO1xuLVxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dHBfdmFycy1cdTAwM2VjY19sb2NrKTtcbiBcbiBcdHRwX3ZhcnMtXHUwMDNlcHJlcmFuZG9tX29mZnNldCA9IDA7XG5AQCAtMTI1MSw2ICsxMjM2LDMzIEBAIGJhdGFkdl90cF9saXN0X2ZpbmRfcmVjZWl2ZXJfc2Vzc2lvbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0XG4gXHRyZXR1cm4gdHBfdmFycztcbiB9XG4gXG4rLyoqXG4rICogYmF0YWR2X3RwX3JlY2VpdmVyX3JlbGVhc2UoKSAtIHJlbGVhc2UgYmF0YWR2X3RwX3JlY2VpdmVyXG4rICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kXG4rICogQHJlZjoga3JlZiBwb2ludGVyIG9mIHRoZSBiYXRhZHZfdHBfcmVjZWl2ZXJcbisgKi9cbitzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjZWl2ZXJfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuK3tcbitcdHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnM7XG4rXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnNhZmU7XG4rXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuO1xuK1xuK1x0dHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIsIGNvbW1vbi5yZWZjb3VudCk7XG4rXG4rXHQvKiBsb2NrIHNob3VsZCBub3QgYmUgbmVlZGVkIGJlY2F1c2UgdGhpcyBvYmplY3QgaXMgbm93IG91dCBvZiBhbnlcbitcdCAqIGNvbnRleHQhXG4rXHQgKi9cbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbitcdFx0bGlzdF9kZWwoXHUwMDI2dW4tXHUwMDNlbGlzdCk7XG4rXHRcdGtmcmVlKHVuKTtcbitcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbitcbitcdGtmcmVlX3JjdSh0cF92YXJzLCBjb21tb24ucmN1KTtcbit9XG4rXG4gLyoqXG4gICogYmF0YWR2X3RwX3JlY2VpdmVyX3B1dCgpIC0gZGVjcmVtZW50IHRoZSBiYXRhZHZfdHBfcmVjZWl2ZXJcbiAgKiAgcmVmY291bnRlciBhbmQgcG9zc2libHkgcmVsZWFzZSBpdFxuQEAgLTEyNjEsNyArMTI3Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWNlaXZlcl9wdXQoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycylcbiBcdGlmICghdHBfdmFycylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0a3JlZl9wdXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF92YXJzX2NvbW1vbl9yZWxlYXNlKTtcbitcdGtyZWZfcHV0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnJlZmNvdW50LCBiYXRhZHZfdHBfcmVjZWl2ZXJfcmVsZWFzZSk7XG4gfVxuIFxuIC8qKlxuQEAgLTEzMDQsMTMgKzEzMTYsMTMgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY2VpdmVyX3NodXRkb3duKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0aWYgKGJhdGFkdl90cF9saXN0X2RldGFjaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbikpXG4gXHRcdGJhdGFkdl90cF9yZWNlaXZlcl9wdXQodHBfdmFycyk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0LCBsaXN0KSB7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2VhY2tfc2Vxbm9fbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuIFx0XHRrZnJlZSh1bik7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQtLTtcbitcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4gXHR9XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2VhY2tfc2Vxbm9fbG9jayk7XG4gXG4gXHQvKiBkcm9wIHJlZmVyZW5jZSBvZiB0aW1lciAqL1xuIFx0aWYgKFdBUk5fT04oYXRvbWljX3hjaGcoXHUwMDI2dHBfdmFycy1cdTAwM2VyZWNlaXZpbmcsIDApICE9IDEpKVxuQEAgLTE0MDMsNjkgKzE0MTUsMTA2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X3RwX3NlbmRfYWNrKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QsXG4gICovXG4gc3RhdGljIGJvb2wgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXIoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycyxcbiBcdFx0XHRcdFx0ICB1MzIgc2Vxbm8sIHUzMiBwYXlsb2FkX2xlbilcbi1cdF9fbXVzdF9ob2xkKFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbG9jaylcbitcdF9fbXVzdF9ob2xkKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spXG4ge1xuLVx0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1biwgKm5ldztcbi1cdGJvb2wgYWRkZWQgPSBmYWxzZTtcbi1cbi1cdG5ldyA9IGttYWxsb2Nfb2JqKCpuZXcsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHVubGlrZWx5KCFuZXcpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRuZXctXHUwMDNlc2Vxbm8gPSBzZXFubztcbi1cdG5ldy1cdTAwM2VsZW4gPSBwYXlsb2FkX2xlbjtcbi1cbi1cdC8qIGlmIHRoZSBsaXN0IGlzIGVtcHR5IGltbWVkaWF0ZWx5IGF0dGFjaCB0aGlzIG5ldyBvYmplY3QgKi9cbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCkpIHtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWxpc3QsIFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQrKztcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHQvKiBvdGhlcndpc2UgbG9vcCBvdmVyIHRoZSBsaXN0IGFuZCBlaXRoZXIgZHJvcCB0aGUgcGFja2V0IGJlY2F1c2UgdGhpc1xuLVx0ICogaXMgYSBkdXBsaWNhdGUgb3Igc3RvcmUgaXQgYXQgdGhlIHJpZ2h0IHBvc2l0aW9uLlxuK1x0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3Q7XG4rXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKm5ldyA9IE5VTEw7XG4rXHR1MzIgZW5kX3NlcW5vID0gc2Vxbm8gKyBwYXlsb2FkX2xlbjtcbitcdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqc2FmZTtcbitcdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqdW47XG4rXG4rXHQvKiBsb29wIG92ZXIgdGhlIGxpc3QgdG8gZmluZCBlaXRoZXIgYW4gZXhpc3RpbmcgZW50cnkgd2hpY2ggdGhlIG5ld1xuK1x0ICogc2Vxbm8gcmFuZ2UgY2FuIGJlIG1lcmdlZCB3aXRoIG9yIHRoZSBwb3NpdGlvbiBhdCB3aGljaCBhIG5ldyBlbnRyeVxuK1x0ICogaGFzIHRvIGJlIGluc2VydGVkLlxuIFx0ICpcbiBcdCAqIFRoZSBpdGVyYXRpb24gaXMgZG9uZSBpbiB0aGUgcmV2ZXJzZSB3YXkgYmVjYXVzZSBpdCBpcyBsaWtlbHkgdGhhdFxuIFx0ICogdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0ICh0aGUgb25lIGJlaW5nIHByb2Nlc3NlZCBub3cpIGhhcyBhIGJpZ2dlclxuIFx0ICogc2Vxbm8gdGhhbiBhbGwgdGhlIG90aGVycyBhbHJlYWR5IHN0b3JlZC5cbiBcdCAqL1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCBcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QsIGxpc3QpIHtcbi1cdFx0LyogY2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi9cbi1cdFx0aWYgKG5ldy1cdTAwM2VzZXFubyA9PSB1bi1cdTAwM2VzZXFubykge1xuLVx0XHRcdGlmIChuZXctXHUwMDNlbGVuIFx1MDAzZSB1bi1cdTAwM2VsZW4pXG4tXHRcdFx0XHR1bi1cdTAwM2VsZW4gPSBuZXctXHUwMDNlbGVuO1xuLVx0XHRcdGtmcmVlKG5ldyk7XG4tXHRcdFx0YWRkZWQgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXG4tXHRcdC8qIGxvb2sgZm9yIHRoZSByaWdodCBwb3NpdGlvbiAqL1xuLVx0XHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUobmV3LVx1MDAzZXNlcW5vLCB1bi1cdTAwM2VzZXFubykpXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodW4sIFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XG4rXHRcdC8qIGxvb2sgZm9yIHRoZSByaWdodCBwb3NpdGlvbiAtIGFuIHVuIHdoaWNoIGlzIHNtYWxsZXIgKi9cbitcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKHNlcW5vLCB1bi1cdTAwM2VzZXFubykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qIGFzIHNvb24gYXMgYW4gZW50cnkgaGF2aW5nIGEgYmlnZ2VyIHNlcW5vIGlzIGZvdW5kLCB0aGUgbmV3XG4tXHRcdCAqIG9uZSBpcyBhdHRhY2hlZCBfYWZ0ZXJfIGl0LiBJbiB0aGlzIHdheSB0aGUgbGlzdCBpcyBrZXB0IGluXG4tXHRcdCAqIGFzY2VuZGluZyBvcmRlclxuK1x0XHQvKiBzbWFsbGVyL2VxdWFsIHNlcW5vIHdhcyBmb3VuZCBidXQgdGhleSBtaWdodCBiZSBkaXJlY3RseVxuK1x0XHQgKiBhZnRlciBhbm90aGVyIG9yIG92ZXJsYXBwaW5nLiBrZWVwIG9ubHkgYSBzaW5nbGUgZW50cnlcbitcdFx0ICpcbitcdFx0ICogSXQgaXMgYWxyZWFkeSBrbm93biB0aGF0OlxuK1x0XHQgKlxuK1x0XHQgKlx0dW4tXHUwMDNlc2Vxbm8gXHUwMDNjPSBzZXFub1xuK1x0XHQgKlxuK1x0XHQgKiBXaGVuIGVzdGFibGlzaGluZyB0aGF0OlxuK1x0XHQgKlxuK1x0XHQgKlx0c2Vxbm8gXHUwMDNjPSB1bi1cdTAwM2VzZXFubyArIHVuLVx1MDAzZWxlblxuK1x0XHQgKlxuK1x0XHQgKiBUaGVuIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gYWRkIGEgbmV3IGVudHJ5IGJlY2F1c2UgdGhlXG4rXHRcdCAqIHNtYWxsZXIvZXF1YWwgc2Vxbm8gb2YgdW4gbWlnaHQgYWxyZWFkeSBjb250YWluIHRoZSBuZXdcbitcdFx0ICogcmVjZWl2ZWQgcGFja2V0IG9yIHdlIG9ubHkgYWRkIG5ldyBkYXRhIGRpcmVjdGx5IGFmdGVyXG4rXHRcdCAqIHRoZSBlbmQgb2YgdW4uIFRoZSBsYXR0ZXIgY2FuIGJlIGlkZW50aWZpZWQgdXNpbmc6XG4rXHRcdCAqXG4rXHRcdCAqXHR1bi1cdTAwM2VzZXFubyArIHVuLVx1MDAzZWxlbiBcdTAwM2M9IGVuZF9zZXFub1xuIFx0XHQgKi9cbi1cdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWxpc3QsIFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuLVx0XHRhZGRlZCA9IHRydWU7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQrKztcbitcdFx0aWYgKCFiYXRhZHZfc2VxX2JlZm9yZSh1bi1cdTAwM2VzZXFubyArIHVuLVx1MDAzZWxlbiwgc2Vxbm8pKSB7XG4rXHRcdFx0LyogbmV3IGRhdGEgZGlyZWN0bHkgYWZ0ZXIgdW4/ICovXG4rXHRcdFx0aWYgKCFiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuKSlcbitcdFx0XHRcdHVuLVx1MDAzZWxlbiA9IGVuZF9zZXFubyAtIHVuLVx1MDAzZXNlcW5vO1xuK1xuK1x0XHRcdC8qIHVuIG5vdyByZXByZXNlbnRzIGJvdGggb2xkIHVuICsgbmV3IHJhbmdlIGFuZCBoYXMgdG9cbitcdFx0XHQgKiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBnYXAgdG8gdGhlIG5leHQgc2Vxbm8gcmFuZ2VcbitcdFx0XHQgKiB3YXMgY2xvc2VkXG4rXHRcdFx0ICovXG4rXHRcdFx0bmV3ID0gdW47XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0LyogYXMgc29vbiBhcyBhbiBlbnRyeSBoYXZpbmcgYSBzbWFsbGVyIHNlcW5vIGlzIGZvdW5kLFxuK1x0XHRcdCAqIHRoZSBuZXcgb25lIGlzIGF0dGFjaGVkIF9hZnRlcl8gaXQuIEluIHRoaXMgd2F5IHRoZVxuK1x0XHRcdCAqIGxpc3QgaXMga2VwdCBpbiBhc2NlbmRpbmcgb3JkZXJcbitcdFx0XHQgKi9cbitcdFx0XHRwb3MgPSBcdTAwMjZ1bi1cdTAwM2VsaXN0O1xuK1x0XHR9XG4rXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0LyogcmVjZWl2ZWQgcGFja2V0IHdpdGggc21hbGxlc3Qgc2Vxbm8gb3V0IG9mIG9yZGVyOyBhZGQgaXQgdG8gZnJvbnQgKi9cbi1cdGlmICghYWRkZWQpIHtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWxpc3QsIFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQrKztcbitcdC8qIG5vIGVudHJ5IHRvIG1lcmdlIHdpdGggd2FzIGZvdW5kOyBpbnNlcnQgYSBuZXcgb25lIGFmdGVyIHRoZSBlbnRyeVxuK1x0ICogd2l0aCB0aGUgbmV4dCBzbWFsbGVyIHNlcW5vIChvciBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qgd2hlbiB0aGVcbitcdCAqIG5ldyBzZXFubyBpcyB0aGUgc21hbGxlc3Qgb3IgdGhlIGxpc3QgaXMgZW1wdHkpXG4rXHQgKi9cbitcdGlmICghbmV3KSB7XG4rXHRcdG5ldyA9IGttYWxsb2Nfb2JqKCpuZXcsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAodW5saWtlbHkoIW5ldykpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRuZXctXHUwMDNlc2Vxbm8gPSBzZXFubztcbitcdFx0bmV3LVx1MDAzZWxlbiA9IHBheWxvYWRfbGVuO1xuK1xuK1x0XHRsaXN0X2FkZChcdTAwMjZuZXctXHUwMDNlbGlzdCwgcG9zKTtcbitcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50Kys7XG4rXHR9XG4rXG4rXHQvKiBjaGVjayBpZiBuZXcgZmlsbGVkIHRoZSBnYXAgdG8gdGhlIG5leHQgbGlzdCBlbnRyaWVzICovXG4rXHR1biA9IG5ldztcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9jb250aW51ZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKGVuZF9zZXFubywgdW4tXHUwMDNlc2Vxbm8pKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBuZXh0IGVudHJ5IGlzIG92ZXJsYXBwaW5nIG9yIGFkamFjZW50IC0gY29tYmluZSBib3RoICovXG4rXHRcdGlmIChiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuKSkge1xuK1x0XHRcdGVuZF9zZXFubyA9IHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuO1xuK1x0XHRcdG5ldy1cdTAwM2VsZW4gPSBlbmRfc2Vxbm8gLSBuZXctXHUwMDNlc2Vxbm87XG4rXHRcdH1cbitcbitcdFx0bGlzdF9kZWwoXHUwMDI2dW4tXHUwMDNlbGlzdCk7XG4rXHRcdGtmcmVlKHVuKTtcbitcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4gXHR9XG4gXG4gXHQvKiByZW1vdmUgdGhlIGxhc3QgKGJpZ2dlc3QpIHVuYWNrZWQgc2Vxbm8gd2hlbiBsaXN0IGlzIHRvbyBsYXJnZSAqL1xuLVx0aWYgKHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQgXHUwMDNlIEJBVEFEVl9UUF9NQVhfVU5BQ0tFRCkge1xuLVx0XHR1biA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QsXG4rXHRpZiAodHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50IFx1MDAzZSBCQVRBRFZfVFBfTUFYX1VOQUNLRUQpIHtcbitcdFx0dW4gPSBsaXN0X2xhc3RfZW50cnkoXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCwgbGlzdCk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuIFx0XHRrZnJlZSh1bik7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQtLTtcbitcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4gXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC0xNDc3LDcgKzE1MjYsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcihzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzLFxuICAqIEB0cF92YXJzOiB0aGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBjdXJyZW50IFRQIG1ldGVyIHNlc3Npb25cbiAgKi9cbiBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfYWNrX3Vub3JkZXJlZChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKVxuLVx0X19tdXN0X2hvbGQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKVxuK1x0X19tdXN0X2hvbGQoXHUwMDI2dHBfdmFycy1cdTAwM2VhY2tfc2Vxbm9fbG9jaylcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqc2FmZTtcbiBcdHUzMiB0b19hY2s7XG5AQCAtMTQ4NSw3ICsxNTM0LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX2Fja191bm9yZGVyZWQoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycylcbiBcdC8qIGdvIHRocm91Z2ggdGhlIHVuYWNrZWQgcGFja2V0IGxpc3QgYW5kIHBvc3NpYmx5IEFDSyB0aGVtIGFzXG4gXHQgKiB3ZWxsXG4gXHQgKi9cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0LCBsaXN0KSB7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XG4gXHRcdC8qIHRoZSBsaXN0IGlzIG9yZGVyZWQsIHRoZXJlZm9yZSBpdCBpcyBwb3NzaWJsZSB0byBzdG9wIGFzIHNvb25cbiBcdFx0ICogdGhlcmUgaXMgYSBnYXAgYmV0d2VlbiB0aGUgbGFzdCBhY2tlZCBzZXFubyBhbmQgdGhlIHNlcW5vIG9mXG4gXHRcdCAqIHRoZSBwYWNrZXQgdW5kZXIgaW5zcGVjdGlvblxuQEAgLTE0OTMsMTQgKzE1NDIsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX2Fja191bm9yZGVyZWQoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycylcbiBcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKHRwX3ZhcnMtXHUwMDNlbGFzdF9yZWN2LCB1bi1cdTAwM2VzZXFubykpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHRvX2FjayA9IHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuIC0gdHBfdmFycy1cdTAwM2VsYXN0X3JlY3Y7XG4rXHRcdHRvX2FjayA9IHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuO1xuIFxuLVx0XHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUodHBfdmFycy1cdTAwM2VsYXN0X3JlY3YsIHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuKSlcbi1cdFx0XHR0cF92YXJzLVx1MDAzZWxhc3RfcmVjdiArPSB0b19hY2s7XG4rXHRcdGlmIChiYXRhZHZfc2VxX2JlZm9yZSh0cF92YXJzLVx1MDAzZWxhc3RfcmVjdiwgdG9fYWNrKSlcbitcdFx0XHR0cF92YXJzLVx1MDAzZWxhc3RfcmVjdiA9IHRvX2FjaztcbiBcbiBcdFx0bGlzdF9kZWwoXHUwMDI2dW4tXHUwMDNlbGlzdCk7XG4gXHRcdGtmcmVlKHVuKTtcbi1cdFx0dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudC0tO1xuK1x0XHR0cF92YXJzLVx1MDAzZXVuYWNrZWRfY291bnQtLTtcbiBcdH1cbiB9XG4gXG5AQCAtMTU0Nyw5ICsxNTk2LDkgQEAgYmF0YWR2X3RwX2luaXRfcmVjdihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0dHBfdmFycy1cdTAwM2Vjb21tb24uYmF0X3ByaXYgPSBiYXRfcHJpdjtcbiBcdGtyZWZfaW5pdChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG4gXG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0KTtcbi1cdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQgPSAwO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dHBfdmFycy1cdTAwM2VhY2tfc2Vxbm9fbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0cF92YXJzLVx1MDAzZXVuYWNrZWRfbGlzdCk7XG4rXHR0cF92YXJzLVx1MDAzZXVuYWNrZWRfY291bnQgPSAwO1xuIFxuIFx0a3JlZl9nZXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udGltZXIsIGJhdGFkdl90cF9yZWNlaXZlcl9zaHV0ZG93biwgMCk7XG5AQCAtMTYwOSw3ICsxNjU4LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY3ZfbXNnKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFdSSVRFX09OQ0UodHBfdmFycy1cdTAwM2VsYXN0X3JlY3ZfdGltZSwgamlmZmllcyk7XG4gXHR9XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbiBcbiBcdC8qIGlmIHRoZSBwYWNrZXQgaXMgYSBkdXBsaWNhdGUsIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IGFuIEFDSyBoYXMgYmVlblxuIFx0ICogbG9zdC4gUmVzZW5kIHRoZSBBQ0tcbkBAIC0xNjI1LDcgKzE2NzQsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjdl9tc2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0ICogbm90IGJlZW4gZW5xdWV1ZWQgY29ycmVjdGx5XG4gXHRcdCAqL1xuIFx0XHRpZiAoIWJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyKHRwX3ZhcnMsIHNlcW5vLCBwYXlsb2FkX2xlbikpIHtcbi1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG5AQCAtMTY0MSw3ICsxNjkwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY3ZfbXNnKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXG4gc2VuZF9hY2s6XG4gXHR0b19hY2sgPSB0cF92YXJzLVx1MDAzZWxhc3RfcmVjdjtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbG9jayk7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbiBcbiBcdC8qIHNlbmQgdGhlIEFDSy4gSWYgdGhlIHJlY2VpdmVkIHBhY2tldCB3YXMgb3V0IG9mIG9yZGVyLCB0aGUgQUNLIHRoYXRcbiBcdCAqIGlzIGdvaW5nIHRvIGJlIHNlbnQgaXMgYSBkdXBsaWNhdGUgKHRoZSBzZW5kZXIgd2lsbCBjb3VudCB0aGVtIGFuZFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3R2bHYuYyBiL25ldC9iYXRtYW4tYWR2L3R2bHYuY1xuaW5kZXggMWM5ZmIyMTk4NWY2YTUuLjQ5YmYyZWQ5ZWNkYzM5IDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHZsdi5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi90dmx2LmNcbkBAIC00NDIsNiArNDQyLDU0IEBAIHN0YXRpYyBpbnQgYmF0YWR2X3R2bHZfY2FsbF9oYW5kbGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XG4gfVxuIFxuKy8qKlxuKyAqIGJhdGFkdl90dmx2X2hkcl9uZXh0KCkgLSBtb3ZlIGEgdHZsdiBidWZmZXIgY3Vyc29yIHRvIHRoZSBuZXh0IGNvbnRhaW5lclxuKyAqIEB0dmx2X3ZhbHVlOiBjdXJzb3IgaW50byB0aGUgdHZsdiBidWZmZXIsIGFkdmFuY2VkIHBhc3QgdGhlIHJldHVybmVkXG4rICogIGNvbnRhaW5lcidzIGNvbnRlbnQgb24gc3VjY2Vzc1xuKyAqIEB0dmx2X3ZhbHVlX2xlbjogcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgdHZsdiBidWZmZXIsIHJlZHVjZWQgYnkgdGhlIHJldHVybmVkXG4rICogIGNvbnRhaW5lcidzIHNpemUgb24gc3VjY2Vzc1xuKyAqXG4rICogUGFyc2VzIGEgc2luZ2xlIGNvbnRhaW5lciBoZWFkZXIgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGFuZCwgaWYgYVxuKyAqIGNvbXBsZXRlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUsIGFkdmFuY2VzIHRoZSBjdXJzb3IgYW5kIHJlbWFpbmluZyBsZW5ndGhcbisgKiBwYXN0IGl0LiBUaGUgcmV0dXJuZWQgaGVhZGVyIHN0YXlzIHZhbGlkOyBpdHMgY29udGVudCBpcyBsb2NhdGVkIGF0XG4rICogKHJldHVybmVkIGhlYWRlciArIDEpIGFuZCBpcyBudG9ocyhoZHItXHUwMDNlbGVuKSBieXRlcyBsb25nLlxuKyAqXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBuZXh0IHR2bHYgY29udGFpbmVyIGhlYWRlciwgb3IgTlVMTCBpZiBubyBmdXJ0aGVyXG4rICogY29tcGxldGUgY29udGFpbmVyIGlzIHByZXNlbnQgaW4gdGhlIGJ1ZmZlci5cbisgKi9cbitzdGF0aWMgc3RydWN0IGJhdGFkdl90dmx2X2hkciAqYmF0YWR2X3R2bHZfaGRyX25leHQodm9pZCAqKnR2bHZfdmFsdWUsIHUxNiAqdHZsdl92YWx1ZV9sZW4pXG4re1xuK1x0c3RydWN0IGJhdGFkdl90dmx2X2hkciAqdHZsdl9oZHI7XG4rXHR1MTYgdHZsdl92YWx1ZV9jb250X2xlbjtcbitcdHZvaWQgKnR2bHZfdmFsdWVfY29udDtcbitcdHUxNiB0dmx2X2xlbjtcbitcbitcdHR2bHZfdmFsdWVfY29udCA9ICp0dmx2X3ZhbHVlO1xuK1x0dHZsdl9sZW4gPSAqdHZsdl92YWx1ZV9sZW47XG4rXG4rXHRpZiAodHZsdl9sZW4gXHUwMDNjIHNpemVvZigqdHZsdl9oZHIpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHR2bHZfaGRyID0gdHZsdl92YWx1ZV9jb250O1xuK1x0dHZsdl92YWx1ZV9jb250X2xlbiA9IG50b2hzKHR2bHZfaGRyLVx1MDAzZWxlbik7XG4rXHR0dmx2X3ZhbHVlX2NvbnQgPSB0dmx2X2hkciArIDE7XG4rXHR0dmx2X2xlbiAtPSBzaXplb2YoKnR2bHZfaGRyKTtcbitcbitcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFx1MDAzZSB0dmx2X2xlbilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHQvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZVxuK1x0ICogYWxpZ25tZW50LCBzbyBpdCBtdXN0IHN0YXJ0IGF0IGFuIGV2ZW4gb2Zmc2V0LlxuK1x0ICovXG4rXHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcdTAwMjYgMSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHQqdHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWVfY29udCArIHR2bHZfdmFsdWVfY29udF9sZW47XG4rXHQqdHZsdl92YWx1ZV9sZW4gPSB0dmx2X2xlbiAtIHR2bHZfdmFsdWVfY29udF9sZW47XG4rXG4rXHRyZXR1cm4gdHZsdl9oZHI7XG4rfVxuK1xuIC8qKlxuICAqIGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbigpIC0gY2hlY2sgaWYgYSB0dmx2IGJ1ZmZlciBob2xkcyBhIGNvbnRhaW5lclxuICAqIEB0dmx2X3ZhbHVlOiB0dmx2IGNvbnRlbnRcbkBAIC00NTcsMjggKzUwNSwxMCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW4odm9pZCAqdHZsdl92YWx1ZSxcbiBcdFx0XHRcdFx0ICAgdTggdmVyc2lvbilcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R2bHZfaGRyICp0dmx2X2hkcjtcbi1cdHUxNiB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xuLVxuLVx0d2hpbGUgKHR2bHZfdmFsdWVfbGVuIFx1MDAzZT0gc2l6ZW9mKCp0dmx2X2hkcikpIHtcbi1cdFx0dHZsdl9oZHIgPSB0dmx2X3ZhbHVlO1xuLVx0XHR0dmx2X3ZhbHVlX2NvbnRfbGVuID0gbnRvaHModHZsdl9oZHItXHUwMDNlbGVuKTtcbi1cdFx0dHZsdl92YWx1ZSA9IHR2bHZfaGRyICsgMTtcbi1cdFx0dHZsdl92YWx1ZV9sZW4gLT0gc2l6ZW9mKCp0dmx2X2hkcik7XG4tXG4tXHRcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFx1MDAzZSB0dmx2X3ZhbHVlX2xlbilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0LyogdGhlIG5leHQgdHZsdiBoZWFkZXIgaXMgYWNjZXNzZWQgYXNzdW1pbmcgKGF0IGxlYXN0KSAyLWJ5dGVcbi1cdFx0ICogYWxpZ25tZW50LCBzbyBpdCBtdXN0IHN0YXJ0IGF0IGFuIGV2ZW4gb2Zmc2V0LlxuLVx0XHQgKi9cbi1cdFx0aWYgKHR2bHZfdmFsdWVfY29udF9sZW4gXHUwMDI2IDEpXG4tXHRcdFx0YnJlYWs7XG4gXG4rXHR3aGlsZSAoKHR2bHZfaGRyID0gYmF0YWR2X3R2bHZfaGRyX25leHQoXHUwMDI2dHZsdl92YWx1ZSwgXHUwMDI2dHZsdl92YWx1ZV9sZW4pKSkge1xuIFx0XHRpZiAodHZsdl9oZHItXHUwMDNldHlwZSA9PSB0eXBlIFx1MDAyNlx1MDAyNiB0dmx2X2hkci1cdTAwM2V2ZXJzaW9uID09IHZlcnNpb24pXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdHR2bHZfdmFsdWUgPSAodTggKil0dmx2X3ZhbHVlICsgdHZsdl92YWx1ZV9jb250X2xlbjtcbi1cdFx0dHZsdl92YWx1ZV9sZW4gLT0gdHZsdl92YWx1ZV9jb250X2xlbjtcbiBcdH1cbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC01MTEsMjAgKzU0MSw4IEBAIGludCBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3Moc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdHU4IGNpZm5vdGZvdW5kID0gQkFUQURWX1RWTFZfSEFORExFUl9PR01fQ0lGTk9URk5EO1xuIFx0aW50IHJldCA9IE5FVF9SWF9TVUNDRVNTO1xuIFxuLVx0d2hpbGUgKHR2bHZfdmFsdWVfbGVuIFx1MDAzZT0gc2l6ZW9mKCp0dmx2X2hkcikpIHtcbi1cdFx0dHZsdl9oZHIgPSB0dmx2X3ZhbHVlO1xuK1x0d2hpbGUgKCh0dmx2X2hkciA9IGJhdGFkdl90dmx2X2hkcl9uZXh0KFx1MDAyNnR2bHZfdmFsdWUsIFx1MDAyNnR2bHZfdmFsdWVfbGVuKSkpIHtcbiBcdFx0dHZsdl92YWx1ZV9jb250X2xlbiA9IG50b2hzKHR2bHZfaGRyLVx1MDAzZWxlbik7XG4tXHRcdHR2bHZfdmFsdWUgPSB0dmx2X2hkciArIDE7XG4tXHRcdHR2bHZfdmFsdWVfbGVuIC09IHNpemVvZigqdHZsdl9oZHIpO1xuLVxuLVx0XHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcdTAwM2UgdHZsdl92YWx1ZV9sZW4pXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdC8qIHRoZSBuZXh0IHR2bHYgaGVhZGVyIGlzIGFjY2Vzc2VkIGFzc3VtaW5nIChhdCBsZWFzdCkgMi1ieXRlXG4tXHRcdCAqIGFsaWdubWVudCwgc28gaXQgbXVzdCBzdGFydCBhdCBhbiBldmVuIG9mZnNldC5cbi1cdFx0ICovXG4tXHRcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFx1MDAyNiAxKVxuLVx0XHRcdGJyZWFrO1xuIFxuIFx0XHR0dmx2X2hhbmRsZXIgPSBiYXRhZHZfdHZsdl9oYW5kbGVyX2dldChiYXRfcHJpdixcbiBcdFx0XHRcdFx0XHQgICAgICAgdHZsdl9oZHItXHUwMDNldHlwZSxcbkBAIC01MzIsMTEgKzU1MCw5IEBAIGludCBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3Moc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBcdFx0cmV0IHw9IGJhdGFkdl90dmx2X2NhbGxfaGFuZGxlcihiYXRfcHJpdiwgdHZsdl9oYW5kbGVyLFxuIFx0XHRcdFx0XHRcdHBhY2tldF90eXBlLCBvcmlnX25vZGUsIHNrYixcbi1cdFx0XHRcdFx0XHR0dmx2X3ZhbHVlLFxuK1x0XHRcdFx0XHRcdHR2bHZfaGRyICsgMSxcbiBcdFx0XHRcdFx0XHR0dmx2X3ZhbHVlX2NvbnRfbGVuKTtcbiBcdFx0YmF0YWR2X3R2bHZfaGFuZGxlcl9wdXQodHZsdl9oYW5kbGVyKTtcbi1cdFx0dHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWUgKyB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xuLVx0XHR0dmx2X3ZhbHVlX2xlbiAtPSB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xuIFx0fVxuIFxuIFx0aWYgKHBhY2tldF90eXBlICE9IEJBVEFEVl9JVl9PR00gXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaCBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcbmluZGV4IGIxZjlmODk2NGMzZmQyLi5jZDEyNzU1ZDIxZjM1NiAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcbisrKyBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcbkBAIC0yMTQsOSArMjE0LDYgQEAgc3RydWN0IGJhdGFkdl93aWZpX25ldF9kZXZpY2Vfc3RhdGUge1xuICAqIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAtIG5ldHdvcmsgZGV2aWNlIGtub3duIHRvIGJhdG1hbi1hZHZcbiAgKi9cbiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2Uge1xuLVx0LyoqIEBsaXN0OiBsaXN0IG5vZGUgZm9yIGJhdGFkdl9oYXJkaWZfbGlzdCAqL1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVxuIFx0LyoqIEBpZl9zdGF0dXM6IHN0YXR1cyBvZiB0aGUgaW50ZXJmYWNlIGZvciBiYXRtYW4tYWR2ICovXG4gXHRjaGFyIGlmX3N0YXR1cztcbiBcbkBAIC0xMzM1LDkgKzEzMzIsOSBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQge1xuIFx0dTMyIHNlcW5vO1xuIFxuIFx0LyoqIEBsZW46IGxlbmd0aCBvZiB0aGUgcGFja2V0ICovXG4tXHR1MTYgbGVuO1xuK1x0dTMyIGxlbjtcbiBcbi1cdC8qKiBAbGlzdDogbGlzdCBub2RlIGZvciBcdTAwMjZiYXRhZHZfdHBfdmFyc19jb21tb24udW5hY2tlZF9saXN0ICovXG4rXHQvKiogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgXHUwMDI2YmF0YWR2X3RwX3JlY2VpdmVyLnVuYWNrZWRfbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtMTM2MCwxNSArMTM1Nyw2IEBAIHN0cnVjdCBiYXRhZHZfdHBfdmFyc19jb21tb24ge1xuIFx0LyoqIEBzZXNzaW9uOiBUUCBzZXNzaW9uIGlkZW50aWZpZXIgKi9cbiBcdHU4IHNlc3Npb25bMl07XG4gXG4tXHQvKiogQHVuYWNrZWRfbGlzdDogbGlzdCBvZiB1bmFja2VkIHBhY2tldHMgKG1ldGEtaW5mbyBvbmx5KSAqL1xuLVx0c3RydWN0IGxpc3RfaGVhZCB1bmFja2VkX2xpc3Q7XG4tXG4tXHQvKiogQHVuYWNrZWRfbG9jazogcHJvdGVjdCB1bmFja2VkX2xpc3QgKyBcdTAwMjZiYXRhZHZfdHBfcmVjZWl2ZXIubGFzdF9yZWN2ICovXG4tXHRzcGlubG9ja190IHVuYWNrZWRfbG9jaztcbi1cbi1cdC8qKiBAdW5hY2tlZF9jb3VudDogbnVtYmVyIG9mIHVuYWNrZWQgZW50cmllcyAqL1xuLVx0c2l6ZV90IHVuYWNrZWRfY291bnQ7XG4tXG4gXHQvKiogQHJlZmNvdW50OiBudW1iZXIgb2YgY29udGV4dCB3aGVyZSB0aGUgb2JqZWN0IGlzIHVzZWQgKi9cbiBcdHN0cnVjdCBrcmVmIHJlZmNvdW50O1xuIFxuQEAgLTE0ODIsNiArMTQ3MCwxNSBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyIHtcbiBcbiBcdC8qKiBAbGFzdF9yZWN2X3RpbWU6IHRpbWUgKGppZmZpZXMpIGEgbXNnIHdhcyByZWNlaXZlZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsYXN0X3JlY3ZfdGltZTtcbitcbitcdC8qKiBAdW5hY2tlZF9saXN0OiBsaXN0IG9mIHVuYWNrZWQgcGFja2V0cyAobWV0YS1pbmZvIG9ubHkpICovXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIHVuYWNrZWRfbGlzdDtcbitcbitcdC8qKiBAYWNrX3NlcW5vX2xvY2s6IHByb3RlY3QgdW5hY2tlZF9saXN0ICsgXHUwMDI2YmF0YWR2X3RwX3JlY2VpdmVyLmxhc3RfcmVjdiAqL1xuK1x0c3BpbmxvY2tfdCBhY2tfc2Vxbm9fbG9jaztcbitcbitcdC8qKiBAdW5hY2tlZF9jb3VudDogbnVtYmVyIG9mIHVuYWNrZWQgZW50cmllcyAqL1xuK1x0c2l6ZV90IHVuYWNrZWRfY291bnQ7XG4gfTtcbiBcbiAvKipcbkBAIC0xNjc5LDYgKzE2NzYsOSBAQCBzdHJ1Y3QgYmF0YWR2X3ByaXYge1xuIFx0LyoqIEB0cF9udW06IG51bWJlciBvZiBjdXJyZW50bHkgYWN0aXZlIHRwIHNlc3Npb25zICovXG4gXHRhdG9taWNfdCB0cF9udW07XG4gXG4rXHQvKiogQGhhcmRpZl9nZW5lcmF0aW9uOiBnZW5lcmF0aW9uIGNvdW50ZXIgYWRkZWQgdG8gbmV0bGluayBoYXJkaWYgZHVtcHMgKi9cbitcdHVuc2lnbmVkIGludCBoYXJkaWZfZ2VuZXJhdGlvbjtcbitcbiBcdC8qKiBAb3JpZ193b3JrOiB3b3JrIHF1ZXVlIGNhbGxiYWNrIGl0ZW0gZm9yIG9yaWcgbm9kZSBwdXJnaW5nICovXG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG9yaWdfd29yaztcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIwOjU0LjgwMTc0ODExN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNDk0ODQ4MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgUGF0Y2ggZm9yIGJhdG1hbi1hZHYqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0YXJnZXRpbmcgdGhlIGBuZXQvYmF0bWFuLWFkdi9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsLiAgUmlnaHQgb2ZmIHRoZSBiYXQsIGl0J3MgcHJldHR5IGV4dGVuc2l2ZSwgdG91Y2hpbmcgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBjb2RlIOKAkyBhIGNsZWFyIGluZGljYXRpb24gb2Ygc29tZSBwcmV0dHkgc3Vic3RhbnRpYWwgYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzLiAgV2UncmUgbG9va2luZyBhdCBtb2RpZmljYXRpb25zIGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2YgZmlsZXM6IGBiYXRfaXZfb2dtLmNgLCBgYmF0X3ZfZWxwLmNgLCBgYmF0X3Zfb2dtLmNgLCBgYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgLCBgaGFyZC1pbnRlcmZhY2UuY2AsIGBtYWluLmNgLCBgbWVzaC1pbnRlcmZhY2UuY2AsIGBuZXRsaW5rLmNgLCBgb3JpZ2luYXRvci5jYCwgYHRwX21ldGVyLmNgLCBgdHZsdi5jYCwgYW5kIGB0eXBlcy5oYC4gIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0IHBhc3Mgc2VlbXMgdG8gYmUgY2xlYW51cDpcblxuKiAgIEluIHRoZSBgYmF0X2l2X29nbS5jYCBhbmQgYGJhdF92X2VscC5jYCBmaWxlcywgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgZGVhZCBjb2RlIGJlaW5nIHJlbW92ZWQsIHBhcnRpY3VsYXJseSBjaGVja3MgcmVsYXRlZCB0byBpbnRlcmZhY2Ugc3RhdGVzIGFuZCBvdXRnb2luZyBwYWNrZXQgY29uZGl0aW9ucy4gTG9va3MgbGlrZSBgQkFUQURWX0lGX05PVF9JTl9VU0VgIHN0YXRlIGlzIG5vdyBnb25lLlxuXG4qICAgSW4gYGJhdF92X29nbS5jYCBhbmQgYGJyaWRnZV9sb29wX2F2b2lkYW5jZS5jYCwgaXQgc2VlbXMgd2UncmUgc3RyZWFtbGluaW5nIGFyZ3VtZW50IHBhc3NpbmcsIHNwZWNpZmljYWxseSByZW1vdmluZyBgYmF0X3ByaXZgIGFuZCByZWx5aW5nIG9uIHRoZSBgaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlYCByZWxhdGlvbnNoaXAgZm9yIGNvbnRleHQuIFRoaXMgc3VnZ2VzdHMgYSBzaGlmdCBpbiBob3cgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBvcmdhbml6ZWQgYW5kIGFjY2Vzc2VkLlxuXG4qICAgYGhhcmQtaW50ZXJmYWNlLmNgIGlzIHdoZXJlIHRoaW5ncyBzdGFydCB0byBnZXQgaW50ZXJlc3RpbmcuICBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmZhY2UgaGFuZGxpbmcgaXMgdW5kZXJnb2luZyBhIHNpZ25pZmljYW50IHJlZmFjdG9yLiAgV2Ugc2VlIGNoYW5nZXMgdG8gYGJhdGFkdl9oYXJkaWZfcmVsZWFzZWAsIGBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXZgLCBhbmQgYSBzaWduaWZpY2FudCBzaWduYXR1cmUgY2hhbmdlIGZvciBgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlYC4gIEl0J3MgY2xlYXIgdGhlIHdheSBoYXJkd2FyZSBpbnRlcmZhY2VzIGFyZSBtYW5hZ2VkIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaXMgYmVpbmcgcmV3b3JrZWQuIFRoZSByZW1vdmFsIG9mIHRoZSBhZGQvcmVtb3ZlIGludGVyZmFjZSBmdW5jdGlvbnMgKHdpdGggZXZlbnRzIGJlaW5nIGhhbmRsZWQgYSBkaWZmZXJlbnQgd2F5KSBpcyBhIHJlZCBmbGFnIC0gaXQgbWVhbnMgdGhlIGxpZmVjeWNsZSBvZiB0aGUgaW50ZXJmYWNlcyBoYXZlIGJlZW4gcmV3cml0dGVuLlxuXG4qICAgVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHRwX21ldGVyLmNgIGFyZSBub3RhYmxlLiAgU3BsaXR0aW5nIGBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZWAsIG1vdmluZyB0aGUgYHVuYWNrZWRfbGlzdGAsIGFuZCB0aGUgYGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyYCByZXdyaXRlIGFyZSBpbmRpY2F0aXZlIG9mIGNoYW5nZXMgdG8gaG93IEIuQS5ULk0uQS5OLiBBZHZhbmNlZCBoYW5kbGVzIHRocm91Z2hwdXQgYW5kIHNlcXVlbmNlIGhhbmRsaW5nLiAgVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIHNvIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoaXMgb25lLlxuXG4qICAgRmluYWxseSwgdGhlIGFkZGl0aW9uIG9mIGBiYXRhZHZfdHZsdl9oZHJfbmV4dGAgaW4gYHR2bHYuY2Agc3VnZ2VzdHMgYSBtb3JlIHJvYnVzdCBhbmQgc2FmZXIgbWV0aG9kIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBUeXBlLUxlbmd0aC1WYWx1ZSAoVExWKSBjb250YWluZXJzLlxuXG5PdmVyYWxsLCBJIHNlZSBhIGNsZWFyIGRpcmVjdGlvbiBoZXJlOlxuXG4xLiAgKipSZWZhY3RvcmluZyBhbmQgY2xlYW51cDoqKiBSZW1vdmFsIG9mIHVubmVjZXNzYXJ5IGNoZWNrcywgY29uc29saWRhdGlvbiBvZiBkYXRhIGFjY2Vzcy5cbjIuICAqKkludGVyZmFjZSBNYW5hZ2VtZW50IFJld29yazoqKiAgQSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaGFyZHdhcmUgaW50ZXJmYWNlcyBhcmUgaGFuZGxlZCwgbGlrZWx5IGZvciBiZXR0ZXIgaW50ZWdyYXRpb24gb3IgbW9yZSBmbGV4aWJsZSBjb25maWd1cmF0aW9uLlxuMy4gICoqVGhyb3VnaHB1dCBcdTAwMjYgU2VxdWVuY2UgSGFuZGxpbmc6KiogSW1wcm92ZW1lbnRzIHRvIHRocm91Z2hwdXQgbWVhc3VyZW1lbnQgYW5kIG91dC1vZi1vcmRlciBwYWNrZXQgcHJvY2Vzc2luZywgd2hpY2ggaW1wYWN0cyByZWxpYWJpbGl0eSBhbmQgZWZmaWNpZW5jeS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWxseSBpbXBhY3RmdWwgY2hhbmdlLCBjbGVhcmx5LiAgVGhlc2UgbW9kaWZpY2F0aW9ucyBydW4gZGVlcCBpbnRvIHRoZSBjb3JlIGxvZ2ljLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYWJzb2x1dGVseSBiZSB0aG9yb3VnaGx5IGZ1enplZC4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3ZlIGNvdmVyZWQgdGhlIGludGVyYWN0aW9ucyBpbiB0aGlzIGFyY2hpdGVjdHVyZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIGBDT05GSUdfQkFUTUFOX0FEVmAgaXMgdGhlIHByaW1hcnkgb25lLCBvYnZpb3VzbHkuICBgdHBfbWV0ZXJgIGlzIGxpa2VseSBlbmFibGVkIHRocm91Z2ggYSBmZXcgb3B0aW9uczogSSBzdXNwZWN0IGBDT05GSUdfQkFUTUFOX0FEVl9EQVRgLCBgQ09ORklHX0JBVE1BTl9BRFZfTkNgLCBvciBwZXJoYXBzIGp1c3QgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGggYENPTkZJR19CQVRNQU5fQURWYC4gIFRpbWUgdG8gY2hlY2sgdGhlIGBuZXQvYmF0bWFuLWFkdi9LY29uZmlnYCBmaWxlIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTg1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIxOjA3LjI5NjU5OTE2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAzNDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkFUTUFOX0FEVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L0tjb25maWctOS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjEwOmNvbmZpZyBCQVRNQU5fQURWXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiQi5BLlQuTS5BLk4uIEFkdmFuY2VkIE1lc2hpbmcgUHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTE5LVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MjA6Y29uZmlnIEJBVE1BTl9BRFZfQkFUTUFOX1ZcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIkIuQS5ULk0uQS5OLiBWIHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0zMy1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjM0OmNvbmZpZyBCQVRNQU5fQURWX0JMQVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMzUtXFx0Ym9vbCBcXFwiQnJpZGdlIExvb3AgQXZvaWRhbmNlXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy00Ni1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjQ3OmNvbmZpZyBCQVRNQU5fQURWX0RBVFxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGlzdHJpYnV0ZWQgQVJQIFRhYmxlXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01Ni1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjU3OmNvbmZpZyBCQVRNQU5fQURWX01DQVNUXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01OC1cXHRib29sIFxcXCJNdWx0aWNhc3Qgb3B0aW1pc2F0aW9uXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy02NS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjY2OmNvbmZpZyBCQVRNQU5fQURWX0RFQlVHXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy02Ny1cXHRib29sIFxcXCJCLkEuVC5NLkEuTi4gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03NC1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjc1OmNvbmZpZyBCQVRNQU5fQURWX1RSQUNJTkdcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTc2LVxcdGJvb2wgXFxcIkIuQS5ULk0uQS5OLiB0cmFjaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIxOjA3LjM5MzY0MDEyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTAzNDg1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcGF0Y2gncyBpbXBhY3Q6XG5cbioqUGF0Y2ggSW1wYWN0IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZ29pbmcgdG8gYWZmZWN0IG91ciBCQVRNQU4gY29kZSwgbm8gcXVlc3Rpb24uIEkgc2VlIGl0IHRvdWNoaW5nIGBiYXRfdl9lbHAuY2AgYW5kIGBiYXRfdl9vZ20uY2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIEJBVE1BTl9WIGltcGxlbWVudGF0aW9uLCBzbyB3ZSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW1wYWN0IHRoZSBleGlzdGluZyBWIHByb3RvY29sIGxvZ2ljIGFuZCBwZXJmb3JtYW5jZS5cblxuVGhlbiwgdGhlcmUncyBgYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIHRoZSBoZWFydCBvZiBCQVRNQU5fQURWJ3MgQnJpZGdlIExvb3AgQXZvaWRhbmNlIChCTEEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaW1wYWN0IG9uIG91ciBsb29wIGRldGVjdGlvbiBhbmQgcHJldmVudGlvbiBtZWNoYW5pc21zLiBXZSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlc2UgY2hhbmdlcyB0aG9yb3VnaGx5IHRvIGVuc3VyZSB0aGV5IGRvbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB0aGVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgdmFyaW91cyBCTEEgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5GaW5hbGx5LCB3ZSBoYXZlIGB0cF9tZXRlci5jYC4gTm93LCB0aGF0IG9uZSBpcyBsZXNzIGltbWVkaWF0ZWx5IG9idmlvdXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGF0IG1vZHVsZSBsaXZlcy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZWAgdG8gY29uZmlybSBpZiBpdCdzIGNvcmUgdG8gYmF0bWFuLWFkdiBvciBhIG1vZHVsZSB0aGF0IGNhbiBiZSBjb25maWd1cmVkLiBJIHN1c3BlY3QgaXQncyBjb3JlLCBidXQgYmVzdCB0byBiZSBzdXJlLiBUaGF0J3MgcHJvYmFibHkgcmVsYXRlZCB0byB0aHJvdWdocHV0IG1ldGVyaW5nIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgYWZmZWN0IGFueSByZWxhdGVkIHBlcmZvcm1hbmNlIG1ldHJpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTUwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MTEuODQzOTkxMTI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTUzNDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cF9tZXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZT0yOT1iYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfVFJBQ0lORykgKz0gdHJhY2Uub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjMwOmJhdG1hbi1hZHYteSArPSB0cF9tZXRlci5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMzEtYmF0bWFuLWFkdi15ICs9IHRyYW5zbGF0aW9uLXRhYmxlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MTEuOTk5NTMyNTU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNTI1NTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBidWlsZCBwcm9jZXNzLCBmb2N1c2luZyBvbiBgdHBfbWV0ZXIuY2Agd2l0aGluIHRoZSBCQVRNQU4tQURWIGNvbnRleHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBCQVRNQU4tQURWIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIGtub3cgdGhhdCBgdHBfbWV0ZXIuY2AgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidWlsZCBpZiBgQkFUTUFOX0FEVmAgaXMgdHVybmVkIG9uLiBUaGF0J3MgYSBnaXZlbiwgbm90aGluZyBuZXcgdGhlcmUuIE1ha2VzIHNlbnNlLCBpdCdzIGEgY29yZSBjb21wb25lbnQuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHRoYXQgYEJBVE1BTl9BRFZfQkFUTUFOX1ZgIGFuZCBgQkFUTUFOX0FEVl9CTEFgIGFyZSBhbHNvIGVuYWJsZWQgYWxvbmdzaWRlIGl0LiBUaGF0IGNvbmZpZ3VyYXRpb24gaXMgY3J1Y2lhbDsgaXQgZHJpdmVzIHRoZSBmdW5jdGlvbmFsaXR5LiBHb3R0YSB2ZXJpZnkgdGhvc2UgYXJlIHNldCBhcHByb3ByaWF0ZWx5LlxuXG5UbyBjb25maXJtIGhvdyB0aGUgb2JqZWN0IGZpbGVzIGFyZSBtYW5hZ2VkLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZWAuIFNwZWNpZmljYWxseSwgSSdsbCBzZWFyY2ggZm9yIGBiYXRfdl9lbHAub2AgYW5kIGBiYXRfdl9vZ20ub2Agd2l0aGluIHRoYXQgTWFrZWZpbGUuIFRoZSBidWlsZCBwcm9jZXNzIGRldGFpbHMgd2lsbCBpbGx1bWluYXRlIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbW9kdWxlcyBhcmUgbGlua2VkIGFuZCBidWlsdCByZWxhdGl2ZSB0byBgdHBfbWV0ZXIuY2Agd2hlbiB0aGUgdmFyaW91cyBCQVRNQU4tQURWIGZlYXR1cmVzIGFyZSBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDU5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MTYuMTM0NzkwMzQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzUzNTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYXRfdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZT04PWJhdG1hbi1hZHYteSArPSBiYXRfaXZfb2dtLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZTo5OmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVikgKz0gYmF0X3Yub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjEwOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVikgKz0gYmF0X3ZfZWxwLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxMTpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1YpICs9IGJhdF92X29nbS5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMTItYmF0bWFuLWFkdi15ICs9IGJpdGFycmF5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MTYuMjUyMzMyODkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxMTA3ODQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBc3Nlc3NtZW50IG9mIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIGFmZmlybWF0aW9uIG9mIGBCQVRNQU5fQURWX0JBVE1BTl9WYCBpcyBzcG90IG9uLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBuZWNlc3NpdHkuIE5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHBvdGVudGlhbCByZWxhdGVkIGFyZWEgdGhhdCB3YXJyYW50cyBjbG9zZXIgc2NydXRpbnkuIFdoYXQgYWJvdXQgYGJyaWRnZV9sb29wX2F2b2lkYW5jZS5jYD8gQ29uc2lkZXJpbmcgdGhlIG5lZWQgZm9yIEJhdG1hbi1hZHYgZnVuY3Rpb25hbGl0eSwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgYnJpZGdlIGxvb3AgYXZvaWRhbmNlIGxvZ2ljIGlzIHJvYnVzdCBhbmQgY29ycmVjdGx5IGludGVyYWN0cyB3aXRoIHRoZSBuZXcgdmVyc2lvbi4gVGhlIGludGVyYWN0aW9uIG9mIHRoZSBicmlkZ2UgbG9vcCBhdm9pZGFuY2UgY29kZSB3aXRoIHRoaXMgdmVyc2lvbiBpcyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyB0aG9yb3VnaCBpbnNwZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU5MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIxOjE5LjQ2MzQxNDAxN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMzM0OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyaWRnZV9sb29wX2F2b2lkYW5jZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZT0xMj1iYXRtYW4tYWR2LXkgKz0gYml0YXJyYXkub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjEzOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CTEEpICs9IGJyaWRnZV9sb29wX2F2b2lkYW5jZS5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMTQtYmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0RBVCkgKz0gZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MTkuNjA1NzU3MDIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NjY1NTYwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgRnVuY3Rpb25zIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBjbGVhcjogd2UncmUgdGFyZ2V0aW5nIGBCQVRNQU5fQURWX0JMQWAgYW5kIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZnV6ei4gVGhlIGluaXRpYWwgc3RlcCBpcyBhbHdheXMgdG8gcGlucG9pbnQgdGhlIGNvcmUgbW9kdWxlcyB0aGF0IGFyZSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gSSd2ZSBxdWlja2x5IHNjYW5uZWQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgaWRlbnRpZmllZCBhIHN1YnN0YW50aWFsIGxpc3QuXG5cbk5vdyBjb21lcyB0aGUgY3J1Y2lhbCBwYXJ0IOKAkyBkaXN0aWxsaW5nIHRoZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBJJ3ZlIG5hcnJvd2VkIGRvd24gdGhlIGxpc3QgYmFzZWQgb24gcG90ZW50aWFsIGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGVudHJ5IHBvaW50cyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UsIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiBBZnRlciBhIHF1aWNrIGFzc2Vzc21lbnQsIHRoZSBpbml0aWFsIGZyb250cnVubmVycyBhcmU6IGBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VgLCBgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfaGFyZF9pZl9ldmVudGAsIGBiYXRhZHZfbWVzaGlmX3NsYXZlX2FkZGAsIGBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcmAsIGBiYXRhZHZfdHBfcmVjdl9tc2dgLCBgYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzYCwgYW5kIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW5gLlxuXG5JJ3ZlIHRha2VuIGEgZGVlcGVyIGRpdmUgb24gYSBmZXcgb2YgdGhlc2UsIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiAgYGJhdGFkdl90cF9yZWN2X21zZ2AgaXMgcmVhY2hhYmxlIHZpYSBpbmNvbWluZyBUUCBtZXRlciBtZXNzYWdlczsgYGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2Vzc2AgdmlhIGluY29taW5nIFRWTFYgY29udGFpbmVyczsgYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAgdmlhIGFkZGluZyBhIHNsYXZlIHRvIGEgbWVzaCBpbnRlcmZhY2UsIHdoaWNoIGNhbiBoYXBwZW4gdmlhIG5ldGxpbmsgb3Igc3lzZnM7IGFuZCBmaW5hbGx5LCBgYmF0YWR2X21lc2hpZl9zbGF2ZV9hZGRgIGlzIHRoZSBuZXRkZXZfb3BzIGBuZG9fYWRkX3NsYXZlYCBmdW5jdGlvbiBmb3IgdGhlIG1lc2ggaW50ZXJmYWNlLlxuXG5VbHRpbWF0ZWx5LCBJJ20gY29uZmlkZW50IGFib3V0IHByb2NlZWRpbmcgd2l0aCB0aGVzZSBzaXggZnVuY3Rpb25zIGZvciBvdXIgZm9jdXNlZCBmdXp6aW5nIGVmZm9ydDogYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlYCwgYGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyYCwgYGJhdGFkdl90cF9yZWN2X21zZ2AsIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgIGFuZCBgYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluYC5cblxuTmV4dCwgSSdsbCBwZXJmb3JtIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IHN0YXRpYyBpbmxpbmUsIGVuc3VyaW5nIHdlIGNhbiBwcm9wZXJseSBpbnN0cnVtZW50IGFuZCB0YXJnZXQgdGhlbSB3aXRoIHRoZSBmdXp6ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODk4LCJPdXRwdXRUb2tlbnMiOjk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIxOjI5LjQ3MjMyNDIzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1ODg1NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KHZvaWR8aW50fGJvb2x8c3RydWN0IGJhdGFkdl90dmx2X2hkciBcXFxcKikgYmF0YWR2XyhoYXJkaWZfZW5hYmxlX2ludGVyZmFjZXxoYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2V8dHBfaGFuZGxlX291dF9vZl9vcmRlcnx0cF9yZWN2X21zZ3x0dmx2X2NvbnRhaW5lcnNfcHJvY2Vzc3x0dmx2X2NvbnRhaW5lcnNfY29udGFpbilcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM9NzAzPWJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy03MjMtICovXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYzo3MjQ6aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTcyNS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSlcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtODMxLSAqL1xcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM6ODMyOnZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy04MzMte1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaD03MT1iYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpO1xcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmg6NzI6aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oLTczLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oOjc0OnZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgtNzUtaW50IGJhdGFkdl9oYXJkaWZfbWluX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jPTEzNDY9c3RhdGljIGludCBiYXRhZHZfdHBfc2VuZF9hY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMtMTQxNS0gKi9cXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jOjE0MTY6c3RhdGljIGJvb2wgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXIoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycyxcXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jLTE0MTctXFx0XFx0XFx0XFx0XFx0ICB1MzIgc2Vxbm8sIHUzMiBwYXlsb2FkX2xlbilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmM9MTU2ND1iYXRhZHZfdHBfaW5pdF9yZWN2KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jLTE2MjUtICovXFxubmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuYzoxNjI2OnN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWN2X21zZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMtMTYyNy1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3R2bHYuYz00NjA9c3RhdGljIHN0cnVjdCBiYXRhZHZfdHZsdl9oZHIgKmJhdGFkdl90dmx2X2hkcl9uZXh0KHZvaWQgKip0dmx2X3ZhbHVlLCB1MTYgKnR2bHZfdmFsdWVfbGVuKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHZsdi5jLTUwMi0gKi9cXG5uZXQvYmF0bWFuLWFkdi90dmx2LmM6NTAzOnN0YXRpYyBib29sIGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbih2b2lkICp0dmx2X3ZhbHVlLFxcbm5ldC9iYXRtYW4tYWR2L3R2bHYuYy01MDQtXFx0XFx0XFx0XFx0XFx0ICAgdTE2IHR2bHZfdmFsdWVfbGVuLCB1OCB0eXBlLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHZsdi5jLTUyOS0gKi9cXG5uZXQvYmF0bWFuLWFkdi90dmx2LmM6NTMwOmludCBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3Moc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG5uZXQvYmF0bWFuLWFkdi90dmx2LmMtNTMxLVxcdFxcdFxcdFxcdCAgIHU4IHBhY2tldF90eXBlLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHZsdi5oPTQwPXZvaWQgYmF0YWR2X3R2bHZfaGFuZGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxubmV0L2JhdG1hbi1hZHYvdHZsdi5oLTQxLVxcdFxcdFxcdFxcdCAgICB1OCB0eXBlLCB1OCB2ZXJzaW9uKTtcXG5uZXQvYmF0bWFuLWFkdi90dmx2Lmg6NDI6aW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L3R2bHYuaC00My1cXHRcXHRcXHRcXHQgICB1OCBwYWNrZXRfdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MjkuNzE4MjIwNzgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NDk5NzcwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEIuQS5ULk0uQS5OLiBBZHZhbmNlZCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3Nlcy4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZC4gQmFzZWQgb24gdGhlIGNoYW5nZXMsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgc2VlbSB0byBiZTogYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlYCwgYGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyYCwgYGJhdGFkdl90cF9yZWN2X21zZ2AsIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgLCBhbmQgYGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbmAuIEknbGwgY29uZmlybSB0aGF0IHRob3NlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHNhZmUgdG8gaW5jbHVkZSwgYW5kIHRoZW4gSSdsbCBtYXJrIHRob3NlIGFzIG15IGBGb2N1c1N5bWJvbHNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBmaWxlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgYGJhdF92X2VscC5jYCwgYGJhdF92X29nbS5jYCwgYW5kIGBicmlkZ2VfbG9vcF9hdm9pZGFuY2UuY2AuIEZyb20gdGhpcywgSSBjYW4gZGVyaXZlIGBCQVRNQU5fQURWYCwgYEJBVE1BTl9BRFZfQkFUTUFOX1ZgLCBhbmQgYEJBVE1BTl9BRFZfQkxBYCBhcyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MuIEl0J3MgYSBnb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjayB0aGVpciBleGFjdCBuYW1lcywgd2hpY2ggSSBkaWQgYWdhaW5zdCB0aGUgYEtjb25maWdgIGZpbGUuIEknbGwgbWFrZSBzdXJlIHRob3NlIGFyZSBpbmNsdWRlZCBpbiBteSBgRW5hYmxlQ29uZmlnc2AuXG5cbk5vdywgZG9lcyB0aGlzIHBhdGNoIHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIHBhdGNoIGRlYWxzIHdpdGggY3JpdGljYWwgYXNwZWN0cyBvZiBCLkEuVC5NLkEuTi4gQWR2YW5jZWQ6IGludGVyZmFjZSBoYW5kbGluZywgVFAgbWV0ZXIgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBUVkxWIGNvbnRhaW5lciBwYXJzaW5nLiBUaGVzZSBhcmUgYWxsIGNvcmUgbG9naWMgcGF0aHMsIGFjY2Vzc2libGUgdmlhIHVzZXIgc3BhY2UgdGhyb3VnaCBuZXRsaW5rLCBzeXNmcywgYW5kIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gaGlnaC12YWx1ZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBJIGNhbiBkZWZpbml0aXZlbHkgc2V0IGBXb3J0aEZ1enppbmdgIHRvIHRydWUuXG5cblRoZXJlZm9yZSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgc2V0dXA6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYEZvY3VzU3ltYm9sc2A6XG4gICAgKiAgIGBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VgXG4gICAgKiAgIGBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlYFxuICAgICogICBgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXJgXG4gICAgKiAgIGBiYXRhZHZfdHBfcmVjdl9tc2dgXG4gICAgKiAgIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgXG4gICAgKiAgIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW5gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOlxuICAgICogICBgQkFUTUFOX0FEVmBcbiAgICAqICAgYEJBVE1BTl9BRFZfQkFUTUFOX1ZgXG4gICAgKiAgIGBCQVRNQU5fQURWX0JMQWBcblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIHNldHVwLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyNzUsIk91dHB1dFRva2VucyI6MjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIxOjM5LjU2ODIwMjc4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzc5NTYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CQVRNQU5fVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CTEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyXCIsXG4gICAgXCJiYXRhZHZfdHBfcmVjdl9tc2dcIixcbiAgICBcImJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2Vzc1wiLFxuICAgIFwiYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgcm91dGluZyBwcm90b2NvbC4gSXQgbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGhhcmQgaW50ZXJmYWNlcyAoYWRkaW5nL3JlbW92aW5nIHRoZW0gZnJvbSB0aGUgbWVzaCksIHRoZSBwcm9jZXNzaW5nIG9mIG91dC1vZi1vcmRlciBUUCBtZXRlciBwYWNrZXRzLCBhbmQgdGhlIHBhcnNpbmcgb2YgVFZMViBjb250YWluZXJzLiBUaGVzZSBhcmUgY29yZSBsb2dpYyBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsvc3lzZnMgYW5kIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CQVRNQU5fVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CTEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyXCIsXG4gICAgXCJiYXRhZHZfdHBfcmVjdl9tc2dcIixcbiAgICBcImJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2Vzc1wiLFxuICAgIFwiYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgcm91dGluZyBwcm90b2NvbC4gSXQgbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGhhcmQgaW50ZXJmYWNlcyAoYWRkaW5nL3JlbW92aW5nIHRoZW0gZnJvbSB0aGUgbWVzaCksIHRoZSBwcm9jZXNzaW5nIG9mIG91dC1vZi1vcmRlciBUUCBtZXRlciBwYWNrZXRzLCBhbmQgdGhlIHBhcnNpbmcgb2YgVFZMViBjb250YWluZXJzLiBUaGVzZSBhcmUgY29yZSBsb2dpYyBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsvc3lzZnMgYW5kIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96km[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 21:07:28 +0000 UTC FinishedAt: 2026-06-30 21:21:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BATMAN_ADV", "BATMAN_ADV_BATMAN_V", "BATMAN_ADV_BLA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BATMAN_ADV", "BATMAN_ADV_BATMAN_V", "BATMAN_ADV_BLA" ], "series_id": "63159142-887d-4abd-b988-d4bab9cdb893" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "batadv_hardif_enable_interface", "batadv_hardif_disable_interface", "batadv_tp_handle_out_of_order", "batadv_tp_recv_msg", "batadv_tvlv_containers_process", "batadv_tvlv_containers_contain" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JBVE1BTl9BRFYmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9CQVRNQU5fViYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX0JMQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9yZWN2X21zZyYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIHJvdXRpbmcgcHJvdG9jb2wuIEl0IG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBoYXJkIGludGVyZmFjZXMgKGFkZGluZy9yZW1vdmluZyB0aGVtIGZyb20gdGhlIG1lc2gpLCB0aGUgcHJvY2Vzc2luZyBvZiBvdXQtb2Ytb3JkZXIgVFAgbWV0ZXIgcGFja2V0cywgYW5kIHRoZSBwYXJzaW5nIG9mIFRWTFYgY29udGFpbmVycy4gVGhlc2UgYXJlIGNvcmUgbG9naWMgY2hhbmdlcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rL3N5c2ZzIGFuZCBuZXR3b3JrIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYWEyZWY0MWRkMzNjYWQxNjU5ODYzNWQyMGUzNGQ1M2Y1OGRlNWMwYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDIxOjIwOjUyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYyBiL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uY1xuaW5kZXggYmIyZjAxMmI0NTRlYTQuLjIyNjIyMjgzZjU5YjBjIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcbkBAIC00MDQsMjMgJiM0Mzs0MDQsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBiYXRhZHZfZm9yd19wYWNrZXQgKmZvcndfcGFja2V0LFxuIC8qIHNlbmQgYSBiYXRtYW4gb2dtIHBhY2tldCAqL1xuIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fZW1pdChzdHJ1Y3QgYmF0YWR2X2ZvcndfcGFja2V0ICpmb3J3X3BhY2tldClcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcbi1cbiBcdGlmICghZm9yd19wYWNrZXQtXHUwMDNlaWZfaW5jb21pbmcpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O0Vycm9yIC0gY2FuJiMzOTt0IGZvcndhcmQgcGFja2V0OiBpbmNvbWluZyBpZmFjZSBub3Qgc3BlY2lmaWVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0bWVzaF9pZmFjZSA9IGZvcndfcGFja2V0LVx1MDAzZWlmX2luY29taW5nLVx1MDAzZW1lc2hfaWZhY2U7XG4tXG4gXHRpZiAoV0FSTl9PTighZm9yd19wYWNrZXQtXHUwMDNlaWZfb3V0Z29pbmcpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoZm9yd19wYWNrZXQtXHUwMDNlaWZfb3V0Z29pbmctXHUwMDNlbWVzaF9pZmFjZSAhPSBtZXNoX2lmYWNlKSB7XG4tXHRcdHByX3dhcm4oXCYjMzQ7JXM6IG1lc2ggaW50ZXJmYWNlIHN3aXRjaCBmb3IgcXVldWVkIE9HTVxcblwmIzM0OywgX19mdW5jX18pO1xuLVx0XHRyZXR1cm47XG4tXHR9XG4tXG4gXHRpZiAoZm9yd19wYWNrZXQtXHUwMDNlaWZfaW5jb21pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9BQ1RJVkUpXG4gXHRcdHJldHVybjtcbiBcbkBAIC05MTAsOCAmIzQzOzkwMSw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2NoZWR1bGVfYnVmZihzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4gXG4gc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zY2hlZHVsZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4ge1xuLVx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8XG4tXHQgICAgaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpXG4mIzQzO1x0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X2l2Lm9nbV9idWZmX211dGV4KTtcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYyBiL25ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jXG5pbmRleCA0ODQxZjBmMWE5YjEzOS4uMjYyZTQwMDQwMDA3Y2MgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmNcbkBAIC05MCwxMiAmIzQzOzkwLDYgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3ZfZWxwX2dldF90aHJvdWdocHV0KHN0cnVjdCBiYXRhZHZfaGFyZGlmX25laWdoX25vZGUgKm5laWdoLFxuIFx0dTMyIHRocm91Z2hwdXQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogZG9uJiMzOTt0IHF1ZXJ5IHRocm91Z2hwdXQgd2hlbiBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoIGFueVxuLVx0ICogYmF0bWFuLWFkdiBpbnRlcmZhY2Vcbi1cdCAqL1xuLVx0aWYgKCFtZXNoX2lmYWNlKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4gXHQvKiBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBjdXN0b21pc2VkIHZhbHVlIGZvciB0aGlzIGludGVyZmFjZSwgdGhlblxuIFx0ICogcmV0dXJuIGl0IGRpcmVjdGx5XG4gXHQgKi9cbkBAIC0zMTEsOCAmIzQzOzMwNSw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X2VscF9wZXJpb2RpY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKiB3ZSBhcmUgaW4gdGhlIHByb2Nlc3Mgb2Ygc2h1dHRpbmcgdGhpcyBpbnRlcmZhY2UgZG93biAqL1xuLVx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8XG4tXHQgICAgaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpXG4mIzQzO1x0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIHRoZSBpbnRlcmZhY2Ugd2FzIGVuYWJsZWQgYnV0IG1heSBub3QgYmUgcmVhZHkgeWV0ICovXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9vZ20uY1xuaW5kZXggMDM3OTIxYWFkMzVkNTguLmU5MjFkNDlmN2VjZWRkIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jXG5AQCAtMTE1LDE0ICYjNDM7MTE1LDE0IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zdGFydF90aW1lcihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxuIFxuIC8qKlxuICAqIGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKCkgLSBzZW5kIGEgYmF0bWFuIG9nbSB1c2luZyBhIGdpdmVuIGludGVyZmFjZVxuLSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuICAqIEBza2I6IHRoZSBPR00gdG8gc2VuZFxuICAqIEBoYXJkX2lmYWNlOiB0aGUgaW50ZXJmYWNlIHRvIHVzZSB0byBzZW5kIHRoZSBPR01cbiAgKi9cbi1zdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fc2VuZF90b19pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiYjNDM7XG4gXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0FDVElWRSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTE4OSw3ICYjNDM7MTg5LDYgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3JfbGlzdF9mcmVlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbiBcbiAvKipcbiAgKiBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKCkgLSBmbHVzaCBcdTAwMjYgc2VuZCBhZ2dyZWdhdGlvbiBxdWV1ZVxuLSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuICAqIEBoYXJkX2lmYWNlOiB0aGUgaW50ZXJmYWNlIHdpdGggdGhlIGFnZ3JlZ2F0aW9uIHF1ZXVlIHRvIGZsdXNoXG4gICpcbiAgKiBBZ2dyZWdhdGVzIGFsbCBPR012MiBwYWNrZXRzIGN1cnJlbnRseSBpbiB0aGUgYWdncmVnYXRpb24gcXVldWUgaW50byBhXG5AQCAtMTk5LDggJiM0MzsxOTgsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9saXN0X2ZyZWUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuICAqXG4gICogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9saXN0LmxvY2suXG4gICovXG4tc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLVx0XHRcdFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuJiM0MztzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgYWdncl9sZW4gPSBoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGVuO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9hZ2dyO1xuQEAgLTIzMCwyNiAmIzQzOzIyOCwyMSBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdGNvbnN1bWVfc2tiKHNrYik7XG4gXHR9XG4gXG4tXHRiYXRhZHZfdl9vZ21fc2VuZF90b19pZihiYXRfcHJpdiwgc2tiX2FnZ3IsIGhhcmRfaWZhY2UpO1xuJiM0MztcdGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHNrYl9hZ2dyLCBoYXJkX2lmYWNlKTtcbiB9XG4gXG4gLyoqXG4gICogYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKCkgLSBxdWV1ZSBhIGJhdG1hbiBvZ20gb24gYSBnaXZlbiBpbnRlcmZhY2Vcbi0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiAgKiBAc2tiOiB0aGUgT0dNIHRvIHF1ZXVlXG4gICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2UgdG8gcXVldWUgdGhlIE9HTSBvblxuICAqL1xuLXN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuJiM0MztzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fcXVldWVfb25faWYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIHtcbi1cdGlmIChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UgIT0gYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuJiM0MztcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuIFxuIFx0aWYgKCFSRUFEX09OQ0UoYmF0X3ByaXYtXHUwMDNlYWdncmVnYXRlZF9vZ21zKSkge1xuLVx0XHRiYXRhZHZfdl9vZ21fc2VuZF90b19pZihiYXRfcHJpdiwgc2tiLCBoYXJkX2lmYWNlKTtcbiYjNDM7XHRcdGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHNrYiwgaGFyZF9pZmFjZSk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbkBAIC0yNjAsNyAmIzQzOzI1Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0fVxuIFxuIFx0aWYgKCFiYXRhZHZfdl9vZ21fcXVldWVfbGVmdChza2IsIGhhcmRfaWZhY2UpKVxuLVx0XHRiYXRhZHZfdl9vZ21fYWdncl9zZW5kKGJhdF9wcml2LCBoYXJkX2lmYWNlKTtcbiYjNDM7XHRcdGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoaGFyZF9pZmFjZSk7XG4gXG4gXHRoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGVuICYjNDM7PSBiYXRhZHZfdl9vZ21fbGVuKHNrYik7XG4gXHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9saXN0LCBza2IpO1xuQEAgLTM1Nyw3ICYjNDM7MzUwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3NlbmRfbWVzaGlmKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0YmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKGJhdF9wcml2LCBza2JfdG1wLCBoYXJkX2lmYWNlKTtcbiYjNDM7XHRcdGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihza2JfdG1wLCBoYXJkX2lmYWNlKTtcbiBcdFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XG4gXHR9XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbkBAIC0zOTcsMTQgJiM0MzszOTAsMTIgQEAgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2VfYmF0X3YgKmJhdHY7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4tXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2O1xuIFxuIFx0YmF0diA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2VfYmF0X3YsIGFnZ3Jfd3Eud29yayk7XG4gXHRoYXJkX2lmYWNlID0gY29udGFpbmVyX29mKGJhdHYsIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSwgYmF0X3YpO1xuLVx0YmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuIFxuIFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9saXN0LmxvY2spO1xuLVx0YmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChiYXRfcHJpdiwgaGFyZF9pZmFjZSk7XG4mIzQzO1x0YmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChoYXJkX2lmYWNlKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9saXN0LmxvY2spO1xuIFxuIFx0YmF0YWR2X3Zfb2dtX3N0YXJ0X3F1ZXVlX3RpbWVyKGhhcmRfaWZhY2UpO1xuQEAgLTYwMSw3ICYjNDM7NTkyLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2ZvcndhcmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0ICAgaWZfb3V0Z29pbmctXHUwMDNlbmV0X2Rldi1cdTAwM2VuYW1lLCBudG9obChvZ21fZm9yd2FyZC1cdTAwM2V0aHJvdWdocHV0KSxcbiBcdFx0ICAgb2dtX2ZvcndhcmQtXHUwMDNldHRsLCBpZl9pbmNvbWluZy1cdTAwM2VuZXRfZGV2LVx1MDAzZW5hbWUpO1xuIFxuLVx0YmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKGJhdF9wcml2LCBza2IsIGlmX291dGdvaW5nKTtcbiYjNDM7XHRiYXRhZHZfdl9vZ21fcXVldWVfb25faWYoc2tiLCBpZl9vdXRnb2luZyk7XG4gXG4gb3V0OlxuIFx0YmF0YWR2X29yaWdfaWZpbmZvX3B1dChvcmlnX2lmaW5mbyk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuY1xuaW5kZXggNWM3M2Y2YmExNmNmZjMuLmY5YTFmYWRmOGRlOWU0IDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jXG5AQCAtMzQ0LDcgJiM0MzszNDQsNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfY2xhaW0oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKm1hYyxcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgZXRoaGRyICpldGhoZHI7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcbiBcdHU4ICpod19zcmM7XG4gXHRzdHJ1Y3QgYmF0YWR2X2JsYV9jbGFpbV9kc3QgbG9jYWxfY2xhaW1fZGVzdDtcbiBcdF9fYmUzMiB6ZXJvaXAgPSAwO1xuQEAgLTM1NywxNCAmIzQzOzM1NiwxMCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfY2xhaW0oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKm1hYyxcbiBcdCAgICAgICBzaXplb2YobG9jYWxfY2xhaW1fZGVzdCkpO1xuIFx0bG9jYWxfY2xhaW1fZGVzdC50eXBlID0gY2xhaW10eXBlO1xuIFxuLVx0bWVzaF9pZmFjZSA9IFJFQURfT05DRShwcmltYXJ5X2lmLVx1MDAzZW1lc2hfaWZhY2UpO1xuLVx0aWYgKCFtZXNoX2lmYWNlKVxuLVx0XHRnb3RvIG91dDtcbi1cbiBcdHNrYiA9IGFycF9jcmVhdGUoQVJQT1BfUkVQTFksIEVUSF9QX0FSUCxcbiBcdFx0XHQgLyogSVAgRFNUOiAwLjAuMC4wICovXG4gXHRcdFx0IHplcm9pcCxcbi1cdFx0XHQgbWVzaF9pZmFjZSxcbiYjNDM7XHRcdFx0IHByaW1hcnlfaWYtXHUwMDNlbWVzaF9pZmFjZSxcbiBcdFx0XHQgLyogSVAgU1JDOiAwLjAuMC4wICovXG4gXHRcdFx0IHplcm9pcCxcbiBcdFx0XHQgLyogRXRoZXJuZXQgRFNUOiBCcm9hZGNhc3QgKi9cbkBAIC00NDIsNyAmIzQzOzQzNyw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLFxuIFx0fVxuIFxuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbWVzaF9pZmFjZSk7XG4mIzQzO1x0c2tiLVx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwcmltYXJ5X2lmLVx1MDAzZW1lc2hfaWZhY2UpO1xuIFx0YmF0YWR2X2luY19jb3VudGVyKGJhdF9wcml2LCBCQVRBRFZfQ05UX1JYKTtcbiBcdGJhdGFkdl9hZGRfY291bnRlcihiYXRfcHJpdiwgQkFUQURWX0NOVF9SWF9CWVRFUyxcbiBcdFx0XHQgICBza2ItXHUwMDNlbGVuICYjNDM7IEVUSF9ITEVOKTtcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jIGIvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuY1xuaW5kZXggMDNkMDFjMjBhOTU0OGIuLmI2ODY3NTc2YmJhZmFlIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuY1xuQEAgLTYzLDYgJiM0Mzs2Myw3IEBAIHZvaWQgYmF0YWR2X2hhcmRpZl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4gXG4gXHRoYXJkX2lmYWNlID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlLCByZWZjb3VudCk7XG4mIzQzO1x0bmV0ZGV2X3B1dChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbWVzaGlmX2Rldl90cmFja2VyKTtcbiBcdG5ldGRldl9wdXQoaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2LCBcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWRldl90cmFja2VyKTtcbiBcbiBcdGtmcmVlX3JjdShoYXJkX2lmYWNlLCByY3UpO1xuQEAgLTc1LDIxICYjNDM7NzYsMjEgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbiAgKiBSZXR1cm46IGJhdGFkdl9oYXJkX2lmYWNlIG9mIG5ldF9kZXYgKHdpdGggaW5jcmVhc2VkIHJlZmNudCksIE5VTEwgb24gZXJyb3JzXG4gICovXG4gc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpcbi1iYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpXG4mIzQzO2JhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldilcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2U7XG4gXG4tXHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoYXJkX2lmYWNlLCBcdTAwMjZiYXRhZHZfaGFyZGlmX2xpc3QsIGxpc3QpIHtcbi1cdFx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlbmV0X2RldiA9PSBuZXRfZGV2IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAga3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCkpXG4tXHRcdFx0Z290byBvdXQ7XG4tXHR9XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiBcbi1cdGhhcmRfaWZhY2UgPSBOVUxMO1xuJiM0MztcdG1lc2hfaWZhY2UgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobmV0X2Rldik7XG4mIzQzO1x0aWYgKCFtZXNoX2lmYWNlIHx8ICFiYXRhZHZfbWVzaGlmX2lzX3ZhbGlkKG1lc2hfaWZhY2UpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGhhcmRfaWZhY2UgPSBuZXRkZXZfbG93ZXJfZGV2X2dldF9wcml2YXRlKG1lc2hfaWZhY2UsIG5ldF9kZXYpO1xuJiM0MztcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiBcbi1vdXQ6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBoYXJkX2lmYWNlO1xuIH1cbiBcbkBAIC0yNDUsNyAmIzQzOzI0Niw3IEBAIHN0cnVjdCBuZXRfZGV2aWNlICpfX2JhdGFkdl9nZXRfcmVhbF9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdH1cbiBcbiBcdGhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYobmV0ZGV2KTtcbi1cdGlmICghaGFyZF9pZmFjZSB8fCAhaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKVxuJiM0MztcdGlmICghaGFyZF9pZmFjZSlcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRuZXQgPSBkZXZfbmV0KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG5AQCAtNTM5LDE2ICYjNDM7NTQwLDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhXG4gXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnRtcF9oYXJkX2lmYWNlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiBcbi1cdGlmICghbWVzaF9pZmFjZSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX3ByaXZhdGUobWVzaF9pZmFjZSwgdG1wX2hhcmRfaWZhY2UsIGl0ZXIpIHtcbiBcdFx0aWYgKHRtcF9oYXJkX2lmYWNlID09IGhhcmRfaWZhY2UpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmICh0bXBfaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghYmF0YWR2X2NvbXBhcmVfZXRoKHRtcF9oYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYtXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdGhhcmRfaWZhY2UtXHUwMDNlbmV0X2Rldi1cdTAwM2VkZXZfYWRkcikpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtNTc0LDkgJiM0Mzs1NjksNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfaGFyZGlmX3JlY2FsY19leHRyYV9za2Jyb29tKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKVxuIFxuIFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX3ByaXZhdGVfcmN1KG1lc2hfaWZhY2UsIGhhcmRfaWZhY2UsIGl0ZXIpIHtcbi1cdFx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuIFx0XHRsb3dlcl9oZWFkZXJfbGVuID0gbWF4X3QodW5zaWduZWQgc2hvcnQsIGxvd2VyX2hlYWRlcl9sZW4sXG4gXHRcdFx0XHRcdCBoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcbiBcbkBAIC03MjMsMzggJiM0Mzs3MTUsNjMgQEAgYmF0YWR2X2hhcmRpZl9kZWFjdGl2YXRlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4gfVxuIFxuIC8qKlxuLSAqIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSgpIC0gRW5zbGF2ZSBoYXJkIGludGVyZmFjZSB0byBtZXNoIGludGVyZmFjZVxuLSAqIEBoYXJkX2lmYWNlOiBoYXJkIGludGVyZmFjZSB0byBhZGQgdG8gbWVzaCBpbnRlcmZhY2VcbiYjNDM7ICogYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKCkgLSBFbnNsYXZlIGludGVyZmFjZSB0byBtZXNoIGludGVyZmFjZVxuJiM0MzsgKiBAbmV0X2RldjogbmV0ZGV2IHN0cnVjdCBvZiB0aGUgaW50ZXJmYWNlIHRvIGFkZCB0byBtZXNoIGludGVyZmFjZVxuICAqIEBtZXNoX2lmYWNlOiBuZXRkZXYgc3RydWN0IG9mIHRoZSBtZXNoIGludGVyZmFjZVxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIGluIGNhc2Ugb2YgZmFpbHVyZVxuICAqL1xuLWludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxuJiM0MztpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXG4ge1xuIFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdjtcbiBcdF9fYmUxNiBldGhlcnR5cGUgPSBodG9ucyhFVEhfUF9CQVRNQU4pO1xuIFx0aW50IG1heF9oZWFkZXJfbGVuID0gYmF0YWR2X21heF9oZWFkZXJfbGVuKCk7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xuIFx0dW5zaWduZWQgaW50IHJlcXVpcmVkX210dTtcbiBcdHVuc2lnbmVkIGludCBoYXJkaWZfbXR1O1xuIFx0Ym9vbCBmcmFnbWVudGF0aW9uO1xuIFx0aW50IHJldDtcbiBcbi1cdGhhcmRpZl9tdHUgPSBSRUFEX09OQ0UoaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2LVx1MDAzZW10dSk7XG4mIzQzO1x0QVNTRVJUX1JUTkwoKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFiYXRhZHZfaXNfdmFsaWRfaWZhY2UobmV0X2RldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aGFyZGlmX210dSA9IFJFQURfT05DRShuZXRfZGV2LVx1MDAzZW10dSk7XG4gXHRyZXF1aXJlZF9tdHUgPSBSRUFEX09OQ0UobWVzaF9pZmFjZS1cdTAwM2VtdHUpICYjNDM7IG1heF9oZWFkZXJfbGVuO1xuIFxuIFx0aWYgKGhhcmRpZl9tdHUgXHUwMDNjIEVUSF9NSU5fTVRVICYjNDM7IG1heF9oZWFkZXJfbGVuKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSlcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0aGFyZF9pZmFjZSA9IGt6YWxsb2Nfb2JqKCpoYXJkX2lmYWNlLCBHRlBfQVRPTUlDKTtcbiYjNDM7XHRpZiAoIWhhcmRfaWZhY2UpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGtyZWZfZ2V0KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlcmVmY291bnQpO1xuJiM0MztcdG5ldGRldl9ob2xkKG5ldF9kZXYsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdGhhcmRfaWZhY2UtXHUwMDNlbmV0X2RldiA9IG5ldF9kZXY7XG4mIzQzO1xuJiM0MztcdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX0lOQUNUSVZFO1xuJiM0MztcbiYjNDM7XHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VuZWlnaF9saXN0KTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdF9pdi5vZ21fYnVmZl9tdXRleCk7XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VuZWlnaF9saXN0X2xvY2spO1xuJiM0MztcdGtyZWZfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KTtcbiYjNDM7XG4mIzQzO1x0aGFyZF9pZmFjZS1cdTAwM2VudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfREVGQVVMVDtcbiYjNDM7XHRpZiAoYmF0YWR2X2lzX3dpZmlfaGFyZGlmKGhhcmRfaWZhY2UpKVxuJiM0MztcdFx0aGFyZF9pZmFjZS1cdTAwM2VudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfV0lSRUxFU1M7XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UoaGFyZF9pZmFjZS1cdTAwM2Vob3BfcGVuYWx0eSwgMCk7XG4mIzQzO1xuJiM0MztcdGJhdGFkdl92X2hhcmRpZl9pbml0KGhhcmRfaWZhY2UpO1xuIFxuIFx0bmV0ZGV2X2hvbGQobWVzaF9pZmFjZSwgXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoaWZfZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuIFx0aGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlID0gbWVzaF9pZmFjZTtcbiBcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiBcbiYjNDM7XHRiYXRfcHJpdi1cdTAwM2VoYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7XG4gXHRyZXQgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9saW5rKGhhcmRfaWZhY2UtXHUwMDNlbmV0X2RldixcbiBcdFx0XHRcdFx0ICAgbWVzaF9pZmFjZSwgaGFyZF9pZmFjZSwgTlVMTCwgTlVMTCk7XG4gXHRpZiAocmV0KVxuQEAgLTc2NCw5ICYjNDM7NzgxLDYgQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl91cHBlcjtcbiBcbi1cdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX0lOQUNUSVZFO1xuLVxuLVx0a3JlZl9nZXQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCk7XG4gXHRoYXJkX2lmYWNlLVx1MDAzZWJhdG1hbl9hZHZfcHR5cGUudHlwZSA9IGV0aGVydHlwZTtcbiBcdGhhcmRfaWZhY2UtXHUwMDNlYmF0bWFuX2Fkdl9wdHlwZS5mdW5jID0gYmF0YWR2X2JhdG1hbl9za2JfcmVjdjtcbiBcdGhhcmRfaWZhY2UtXHUwMDNlYmF0bWFuX2Fkdl9wdHlwZS5kZXYgPSBoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXY7XG5AQCAtODAyLDE0ICYjNDM7ODE2LDExIEBAIGludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxuIFx0aWYgKGJhdF9wcml2LVx1MDAzZWFsZ29fb3BzLVx1MDAzZWlmYWNlLmVuYWJsZWQpXG4gXHRcdGJhdF9wcml2LVx1MDAzZWFsZ29fb3BzLVx1MDAzZWlmYWNlLmVuYWJsZWQoaGFyZF9pZmFjZSk7XG4gXG4tb3V0OlxuIFx0cmV0dXJuIDA7XG4gXG4gZXJyX3VwcGVyOlxuIFx0bmV0ZGV2X3VwcGVyX2Rldl91bmxpbmsoaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2LCBtZXNoX2lmYWNlKTtcbiBlcnJfZGV2OlxuLVx0aGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlID0gTlVMTDtcbi1cdG5ldGRldl9wdXQobWVzaF9pZmFjZSwgXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoaWZfZGV2X3RyYWNrZXIpO1xuIFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC04MjEsMTcgJiM0Mzs4MzIsMTggQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXG4gdm9pZCBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbi1cdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZiA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuIFxuIFx0YmF0YWR2X2hhcmRpZl9kZWFjdGl2YXRlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbiBcbiBcdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfSU5BQ1RJVkUpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0cmV0dXJuO1xuIFxuIFx0YmF0YWR2X2luZm8oaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlLCBcJiMzNDtSZW1vdmluZyBpbnRlcmZhY2U6ICVzXFxuXCYjMzQ7LFxuIFx0XHQgICAgaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2LVx1MDAzZW5hbWUpO1xuIFx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0bWFuX2Fkdl9wdHlwZSk7XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbiBcbiBcdHByaW1hcnlfaWYgPSBiYXRhZHZfcHJpbWFyeV9pZl9nZXRfc2VsZWN0ZWQoYmF0X3ByaXYpO1xuIFx0aWYgKGhhcmRfaWZhY2UgPT0gcHJpbWFyeV9pZikge1xuQEAgLTg0MiwxNSAmIzQzOzg1NCwxNiBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIFxuIFx0XHRiYXRhZHZfaGFyZGlmX3B1dChuZXdfaWYpO1xuIFx0fVxuJiM0MztcdGJhdGFkdl9oYXJkaWZfcHV0KHByaW1hcnlfaWYpO1xuIFxuIFx0YmF0X3ByaXYtXHUwMDNlYWxnb19vcHMtXHUwMDNlaWZhY2UuZGlzYWJsZShoYXJkX2lmYWNlKTtcbi1cdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX05PVF9JTl9VU0U7XG4mIzQzO1x0aGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRDtcbiBcbiBcdC8qIGRlbGV0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIGhhcmRfaWZhY2UgKi9cbiBcdGJhdGFkdl9wdXJnZV9vcmlnX3JlZihiYXRfcHJpdik7XG4gXHRiYXRhZHZfcHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cyhiYXRfcHJpdiwgaGFyZF9pZmFjZSk7XG4tXHRuZXRkZXZfcHV0KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSwgXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoaWZfZGV2X3RyYWNrZXIpO1xuIFxuJiM0MztcdGJhdF9wcml2LVx1MDAzZWhhcmRpZl9nZW5lcmF0aW9uJiM0MzsmIzQzOztcbiBcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKGhhcmRfaWZhY2UtXHUwMDNlbmV0X2RldiwgaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiBcdGJhdGFkdl9oYXJkaWZfcmVjYWxjX2V4dHJhX3NrYnJvb20oaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiBcbkBAIC04NTgsNjcgJiM0Mzs4NzEsNiBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWFkal9saXN0Lmxvd2VyKSlcbiBcdFx0YmF0YWR2X2d3X2NoZWNrX2NsaWVudF9zdG9wKGJhdF9wcml2KTtcbiBcbi1cdGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSA9IE5VTEw7XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbi1cbi1vdXQ6XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChwcmltYXJ5X2lmKTtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqXG4tYmF0YWR2X2hhcmRpZl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxuLXtcbi1cdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcbi1cbi1cdEFTU0VSVF9SVE5MKCk7XG4tXG4tXHRpZiAoIWJhdGFkdl9pc192YWxpZF9pZmFjZShuZXRfZGV2KSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRoYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKCFoYXJkX2lmYWNlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdG5ldGRldl9ob2xkKG5ldF9kZXYsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuLVx0aGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2ID0gbmV0X2Rldjtcbi1cbi1cdGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSA9IE5VTEw7XG4tXHRoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyA9IEJBVEFEVl9JRl9OT1RfSU5fVVNFO1xuLVxuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VsaXN0KTtcbi1cdElOSVRfSExJU1RfSEVBRChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZW5laWdoX2xpc3QpO1xuLVxuLVx0bXV0ZXhfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdF9pdi5vZ21fYnVmZl9tdXRleCk7XG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZW5laWdoX2xpc3RfbG9jayk7XG4tXHRrcmVmX2luaXQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCk7XG4tXG4tXHRoYXJkX2lmYWNlLVx1MDAzZW51bV9iY2FzdHMgPSBCQVRBRFZfTlVNX0JDQVNUU19ERUZBVUxUO1xuLVx0aWYgKGJhdGFkdl9pc193aWZpX2hhcmRpZihoYXJkX2lmYWNlKSlcbi1cdFx0aGFyZF9pZmFjZS1cdTAwM2VudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfV0lSRUxFU1M7XG4tXG4tXHRXUklURV9PTkNFKGhhcmRfaWZhY2UtXHUwMDNlaG9wX3BlbmFsdHksIDApO1xuLVxuLVx0YmF0YWR2X3ZfaGFyZGlmX2luaXQoaGFyZF9pZmFjZSk7XG4tXG4tXHRrcmVmX2dldChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KTtcbi1cdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbGlzdCwgXHUwMDI2YmF0YWR2X2hhcmRpZl9saXN0KTtcbi1cdGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7XG4tXG4tXHRyZXR1cm4gaGFyZF9pZmFjZTtcbi19XG4tXG4tc3RhdGljIHZvaWQgYmF0YWR2X2hhcmRpZl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbi17XG4tXHRBU1NFUlRfUlROTCgpO1xuLVxuLVx0LyogZmlyc3QgZGVhY3RpdmF0ZSBpbnRlcmZhY2UgKi9cbi1cdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSlcbi1cdFx0YmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbi1cbi1cdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0aGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRDtcbiBcdGJhdGFkdl9oYXJkaWZfcHV0KGhhcmRfaWZhY2UpO1xuIH1cbiBcbkBAIC0xMDgyLDEwICYjNDM7MTAzNCw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2hhcmRfaWZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuIFx0YmF0YWR2X3dpZmlfbmV0X2RldmljZV9ldmVudChldmVudCwgbmV0X2Rldik7XG4gXG4gXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KG5ldF9kZXYpO1xuLVx0aWYgKCFoYXJkX2lmYWNlIFx1MDAyNlx1MDAyNiAoZXZlbnQgPT0gTkVUREVWX1JFR0lTVEVSIHx8XG4tXHRcdFx0ICAgIGV2ZW50ID09IE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFKSlcbi1cdFx0aGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfYWRkX2ludGVyZmFjZShuZXRfZGV2KTtcbi1cbiBcdGlmICghaGFyZF9pZmFjZSlcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtMTA5OSwxOSAmIzQzOzEwNDcsMTIgQEAgc3RhdGljIGludCBiYXRhZHZfaGFyZF9pZl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVRERVZfVU5SRUdJU1RFUjpcbiBcdGNhc2UgTkVUREVWX1BSRV9UWVBFX0NIQU5HRTpcbi1cdFx0bGlzdF9kZWxfcmN1KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbGlzdCk7XG4tXHRcdGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7XG4tXG4tXHRcdGJhdGFkdl9oYXJkaWZfcmVtb3ZlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbiYjNDM7XHRcdGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVRERVZfQ0hBTkdFTVRVOlxuLVx0XHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKVxuLVx0XHRcdGJhdGFkdl91cGRhdGVfbWluX210dShoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuJiM0MztcdFx0YmF0YWR2X3VwZGF0ZV9taW5fbXR1KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBORVRERVZfQ0hBTkdFQUREUjpcbi1cdFx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFKVxuLVx0XHRcdGdvdG8gaGFyZGlmX3B1dDtcbi1cbiBcdFx0YmF0YWR2X2NoZWNrX2tub3duX21hY19hZGRyKGhhcmRfaWZhY2UpO1xuIFxuIFx0XHRiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaCBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmhcbmluZGV4IGFmMzE2OTZjMzk3ODA4Li45MzVmNDdjYTlhNDhmZCAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmhcbkBAIC0yMSwxMiAmIzQzOzIxLDYgQEBcbiAgKiBlbnVtIGJhdGFkdl9oYXJkX2lmX3N0YXRlIC0gU3RhdGUgb2YgYSBoYXJkIGludGVyZmFjZVxuICAqL1xuIGVudW0gYmF0YWR2X2hhcmRfaWZfc3RhdGUge1xuLVx0LyoqXG4tXHQgKiBAQkFUQURWX0lGX05PVF9JTl9VU0U6IGludGVyZmFjZSBpcyBub3QgdXNlZCBhcyBzbGF2ZSBpbnRlcmZhY2Ugb2YgYVxuLVx0ICogYmF0bWFuLWFkdiBtZXNoIGludGVyZmFjZVxuLVx0ICovXG4tXHRCQVRBRFZfSUZfTk9UX0lOX1VTRSxcbi1cbiBcdC8qKlxuIFx0ICogQEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEOiBpbnRlcmZhY2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gbWVzaFxuIFx0ICogaW50ZXJmYWNlXG5AQCAtNzQsOCAmIzQzOzY4LDggQEAgdTMyIGJhdGFkdl9uZXRkZXZfZ2V0X3dpZmlfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpO1xuIHUzMiBiYXRhZHZfaGFyZGlmX2dldF93aWZpX2ZsYWdzKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSk7XG4gYm9vbCBiYXRhZHZfaXNfd2lmaV9oYXJkaWYoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKTtcbiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UqXG4tYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTtcbi1pbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSxcbiYjNDM7YmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTtcbiYjNDM7aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcbiB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKTtcbiBpbnQgYmF0YWR2X2hhcmRpZl9taW5fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmMgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmNcbmluZGV4IDNjNDU3MjI4NGI1MzJmLi4wNGJiMDMwZWYyOTlhYyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jXG5AQCAtNTksMTEgJiM0Mzs1OSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dHBfbWV0ZXIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3RyYW5zbGF0aW9uLXRhYmxlLmhcJiMzNDtcbiBcbi0vKiBMaXN0IG1hbmlwdWxhdGlvbnMgb24gaGFyZGlmX2xpc3QgaGF2ZSB0byBiZSBydG5sX2xvY2soKSYjMzk7ZWQsXG4tICogbGlzdCB0cmF2ZXJzYWxzIGp1c3QgcmN1LWxvY2tlZFxuLSAqL1xuLXN0cnVjdCBsaXN0X2hlYWQgYmF0YWR2X2hhcmRpZl9saXN0O1xuLXVuc2lnbmVkIGludCBiYXRhZHZfaGFyZGlmX2dlbmVyYXRpb247XG4gc3RhdGljIGludCAoKmJhdGFkdl9yeF9oYW5kbGVyWzI1Nl0pKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcmVjdl9pZik7XG4gXG5AQCAtOTUsNyAmIzQzOzkwLDYgQEAgc3RhdGljIGludCBfX2luaXQgYmF0YWR2X2luaXQodm9pZClcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZiYXRhZHZfaGFyZGlmX2xpc3QpO1xuIFx0YmF0YWR2X2FsZ29faW5pdCgpO1xuIFxuIFx0YmF0YWR2X3JlY3ZfaGFuZGxlcl9pbml0KCk7XG5AQCAtNDUwLDkgJiM0Mzs0NDQsNiBAQCBpbnQgYmF0YWR2X2JhdG1hbl9za2JfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHVubGlrZWx5KHNrYi1cdTAwM2VtYWNfbGVuICE9IEVUSF9ITEVOIHx8ICFza2JfbWFjX2hlYWRlcihza2IpKSlcbiBcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdGlmICghaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKVxuLVx0XHRnb3RvIGVycl9mcmVlO1xuLVxuIFx0YmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuIFxuIFx0aWYgKFJFQURfT05DRShiYXRfcHJpdi1cdTAwM2VtZXNoX3N0YXRlKSAhPSBCQVRBRFZfTUVTSF9BQ1RJVkUpXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5oIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5oXG5pbmRleCBmNjhmYzhiNzIzOWNkNS4uZTczODc1OGVlNGE3YWUgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9tYWluLmhcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L21haW4uaFxuQEAgLTIyNiw5ICYjNDM7MjI2LDYgQEAgc3RhdGljIGlubGluZSBpbnQgYmF0YWR2X3ByaW50X3ZpZCh1bnNpZ25lZCBzaG9ydCB2aWQpXG4gXHRcdHJldHVybiAtMTtcbiB9XG4gXG4tZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYmF0YWR2X2hhcmRpZl9saXN0O1xuLWV4dGVybiB1bnNpZ25lZCBpbnQgYmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uO1xuLVxuIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYmF0YWR2X2V2ZW50X3dvcmtxdWV1ZTtcbiBcbiBpbnQgYmF0YWR2X21lc2hfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbmluZGV4IDQ0MDI2ODEwYjk5Y2VhLi5hMzczNjhjMWY1YjU1YyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbkBAIC04MzYsMTggJiM0Mzs4MzYsNyBAQCBzdGF0aWMgaW50IGJhdGFkdl9tZXNoaWZfc2xhdmVfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbi1cdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcbi1cdGludCByZXQgPSAtRUlOVkFMO1xuLVxuLVx0aGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihzbGF2ZV9kZXYpO1xuLVx0aWYgKCFoYXJkX2lmYWNlIHx8IGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSlcbi1cdFx0Z290byBvdXQ7XG4tXG4tXHRyZXQgPSBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSwgZGV2KTtcbi1cbi1vdXQ6XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzbGF2ZV9kZXYsIGRldik7XG4gfVxuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L25ldGxpbmsuYyBiL25ldC9iYXRtYW4tYWR2L25ldGxpbmsuY1xuaW5kZXggNGNmOWUzYzU0YWQzYjIuLmQyYmM0OGM3MDcxNDM0IDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmNcbkBAIC05NjgsNyAmIzQzOzk2OCw3IEBAIGJhdGFkdl9uZXRsaW5rX2R1bXBfaGFyZGlmKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XG4gXG4gXHRydG5sX2xvY2soKTtcbi1cdGNiLVx1MDAzZXNlcSA9IGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiBcdTAwM2NcdTAwM2MgMSB8IDE7XG4mIzQzO1x0Y2ItXHUwMDNlc2VxID0gYmF0X3ByaXYtXHUwMDNlaGFyZGlmX2dlbmVyYXRpb24gXHUwMDNjXHUwMDNjIDEgfCAxO1xuIFxuIFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX3ByaXZhdGUobWVzaF9pZmFjZSwgaGFyZF9pZmFjZSwgaXRlcikge1xuIFx0XHRpZiAoaSYjNDM7JiM0MzsgXHUwMDNjIHNraXApXG5AQCAtMTIxMSw3ICYjNDM7MTIxMSw5IEBAIGJhdGFkdl9uZXRsaW5rX2dldF9oYXJkaWZfZnJvbV9pZmluZGV4KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRpZiAoIWhhcmRfZGV2KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PREVWKTtcbiBcbiYjNDM7XHRydG5sX2xvY2soKTtcbiBcdGhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoaGFyZF9kZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4gXHRpZiAoIWhhcmRfaWZhY2UpXG4gXHRcdGdvdG8gZXJyX3B1dF9oYXJkZGV2O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuY1xuaW5kZXggOWIzOGJkOWU4ZGE3ZWMuLjQ4ZjgzN2NmNjY1YTJhIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmNcbkBAIC0xMDMzLDcgJiM0MzsxMDMzLDYgQEAgYmF0YWR2X3B1cmdlX25laWdoX2lmaW5mbyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFxuIFx0XHQvKiBkb24mIzM5O3QgcHVyZ2UgaWYgdGhlIGludGVyZmFjZSBpcyBub3QgKGdvaW5nKSBkb3duICovXG4gXHRcdGlmIChpZl9vdXRnb2luZy1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9OT1RfSU5fVVNFIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTEwNzcsNyAmIzQzOzEwNzYsNiBAQCBiYXRhZHZfcHVyZ2Vfb3JpZ19pZmluZm8oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBcdFx0LyogZG9uJiMzOTt0IHB1cmdlIGlmIHRoZSBpbnRlcmZhY2UgaXMgbm90IChnb2luZykgZG93biAqL1xuIFx0XHRpZiAoaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9JTkFDVElWRSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGlmX291dGdvaW5nLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGlmX291dGdvaW5nLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0xMTI3LDEwICYjNDM7MTEyNSw4IEBAIGJhdGFkdl9wdXJnZV9vcmlnX25laWdoYm9ycyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFxuIFx0XHRpZiAoYmF0YWR2X2hhc190aW1lZF9vdXQobGFzdF9zZWVuLCBCQVRBRFZfUFVSR0VfVElNRU9VVCkgfHxcbiBcdFx0ICAgIGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfSU5BQ1RJVkUgfHxcbi1cdFx0ICAgIGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSB8fFxuIFx0XHQgICAgaWZfaW5jb21pbmctXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKSB7XG4gXHRcdFx0aWYgKGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfSU5BQ1RJVkUgfHxcbi1cdFx0XHQgICAgaWZfaW5jb21pbmctXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8XG4gXHRcdFx0ICAgIGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcbiBcdFx0XHRcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19CQVRNQU4sIGJhdF9wcml2LFxuIFx0XHRcdFx0XHQgICBcJiMzNDtuZWlnaGJvciBwdXJnZTogb3JpZ2luYXRvciAlcE0sIG5laWdoYm9yOiAlcE0sIGlmYWNlOiAlc1xcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jIGIvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuY1xuaW5kZXggYzJlZWE3ZGJjNDg4MzMuLjAwNDY3YWE3OWRlOWRjIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuY1xuQEAgLTM1OCwyOCAmIzQzOzM1OCwxNiBAQCBiYXRhZHZfdHBfbGlzdF9maW5kX3NlbmRlcl9zZXNzaW9uKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QsXG4gfVxuIFxuIC8qKlxuLSAqIGJhdGFkdl90cF92YXJzX2NvbW1vbl9yZWxlYXNlKCkgLSByZWxlYXNlIGJhdGFkdl90cF92YXJzX2NvbW1vbiBmcm9tIGxpc3RzXG4mIzQzOyAqIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZSgpIC0gcmVsZWFzZSBiYXRhZHZfdHBfc2VuZGVyXG4gICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kXG4tICogQHJlZjoga3JlZiBwb2ludGVyIG9mIHRoZSBiYXRhZHZfdHBfdmFyc19jb21tb25cbiYjNDM7ICogQHJlZjoga3JlZiBwb2ludGVyIG9mIHRoZSBiYXRhZHZfdHBfc2VuZGVyXG4gICovXG4tc3RhdGljIHZvaWQgYmF0YWR2X3RwX3ZhcnNfY29tbW9uX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcbiYjNDM7c3RhdGljIHZvaWQgYmF0YWR2X3RwX3NlbmRlcl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4ge1xuLVx0c3RydWN0IGJhdGFkdl90cF92YXJzX2NvbW1vbiAqdHBfdmFycztcbi1cdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqdW4sICpzYWZlO1xuLVxuLVx0dHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfdmFyc19jb21tb24sIHJlZmNvdW50KTtcbi1cbi1cdC8qIGxvY2sgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYmVjYXVzZSB0aGlzIG9iamVjdCBpcyBub3cgb3V0IG9mIGFueVxuLVx0ICogY29udGV4dCFcbi1cdCAqL1xuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbi1cdFx0bGlzdF9kZWwoXHUwMDI2dW4tXHUwMDNlbGlzdCk7XG4tXHRcdGtmcmVlKHVuKTtcbi1cdH1cbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9sb2NrKTtcbiYjNDM7XHRzdHJ1Y3QgYmF0YWR2X3RwX3NlbmRlciAqdHBfdmFycztcbiBcbi1cdGtmcmVlX3JjdSh0cF92YXJzLCByY3UpO1xuJiM0MztcdHRwX3ZhcnMgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X3RwX3NlbmRlciwgY29tbW9uLnJlZmNvdW50KTtcbiYjNDM7XHRrZnJlZV9yY3UodHBfdmFycywgY29tbW9uLnJjdSk7XG4gfVxuIFxuIC8qKlxuQEAgLTM5Miw3ICYjNDM7MzgwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3NlbmRlcl9wdXQoc3RydWN0IGJhdGFkdl90cF9zZW5kZXIgKnRwX3ZhcnMpXG4gXHRpZiAoIXRwX3ZhcnMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGtyZWZfcHV0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnJlZmNvdW50LCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZSk7XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZSk7XG4gfVxuIFxuIC8qKlxuQEAgLTExNDUsOSAmIzQzOzExMzMsNiBAQCB2b2lkIGJhdGFkdl90cF9zdGFydChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0LFxuIFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZ0cF92YXJzLVx1MDAzZW1vcmVfYnl0ZXMpO1xuIFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnRwX3ZhcnMtXHUwMDNlZmluaXNoZWQpO1xuIFxuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XG4tXG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0cF92YXJzLVx1MDAzZWNjX2xvY2spO1xuIFxuIFx0dHBfdmFycy1cdTAwM2VwcmVyYW5kb21fb2Zmc2V0ID0gMDtcbkBAIC0xMjUxLDYgJiM0MzsxMjM2LDMzIEBAIGJhdGFkdl90cF9saXN0X2ZpbmRfcmVjZWl2ZXJfc2Vzc2lvbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0XG4gXHRyZXR1cm4gdHBfdmFycztcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBiYXRhZHZfdHBfcmVjZWl2ZXJfcmVsZWFzZSgpIC0gcmVsZWFzZSBiYXRhZHZfdHBfcmVjZWl2ZXJcbiYjNDM7ICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kXG4mIzQzOyAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgYmF0YWR2X3RwX3JlY2VpdmVyXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjZWl2ZXJfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycztcbiYjNDM7XHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnNhZmU7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1bjtcbiYjNDM7XG4mIzQzO1x0dHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIsIGNvbW1vbi5yZWZjb3VudCk7XG4mIzQzO1xuJiM0MztcdC8qIGxvY2sgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYmVjYXVzZSB0aGlzIG9iamVjdCBpcyBub3cgb3V0IG9mIGFueVxuJiM0MztcdCAqIGNvbnRleHQhXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuJiM0MztcdFx0a2ZyZWUodW4pO1xuJiM0MztcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuJiM0MztcbiYjNDM7XHRrZnJlZV9yY3UodHBfdmFycywgY29tbW9uLnJjdSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogYmF0YWR2X3RwX3JlY2VpdmVyX3B1dCgpIC0gZGVjcmVtZW50IHRoZSBiYXRhZHZfdHBfcmVjZWl2ZXJcbiAgKiAgcmVmY291bnRlciBhbmQgcG9zc2libHkgcmVsZWFzZSBpdFxuQEAgLTEyNjEsNyAmIzQzOzEyNzMsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjZWl2ZXJfcHV0KHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMpXG4gXHRpZiAoIXRwX3ZhcnMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGtyZWZfcHV0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnJlZmNvdW50LCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZSk7XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTMwNCwxMyAmIzQzOzEzMTYsMTMgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY2VpdmVyX3NodXRkb3duKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0aWYgKGJhdGFkdl90cF9saXN0X2RldGFjaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbikpXG4gXHRcdGJhdGFkdl90cF9yZWNlaXZlcl9wdXQodHBfdmFycyk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0LCBsaXN0KSB7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbiBcdFx0bGlzdF9kZWwoXHUwMDI2dW4tXHUwMDNlbGlzdCk7XG4gXHRcdGtmcmVlKHVuKTtcbi1cdFx0dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudC0tO1xuJiM0MztcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4gXHR9XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuIFxuIFx0LyogZHJvcCByZWZlcmVuY2Ugb2YgdGltZXIgKi9cbiBcdGlmIChXQVJOX09OKGF0b21pY194Y2hnKFx1MDAyNnRwX3ZhcnMtXHUwMDNlcmVjZWl2aW5nLCAwKSAhPSAxKSlcbkBAIC0xNDAzLDY5ICYjNDM7MTQxNSwxMDYgQEAgc3RhdGljIGludCBiYXRhZHZfdHBfc2VuZF9hY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdCxcbiAgKi9cbiBzdGF0aWMgYm9vbCBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcihzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzLFxuIFx0XHRcdFx0XHQgIHUzMiBzZXFubywgdTMyIHBheWxvYWRfbGVuKVxuLVx0X19tdXN0X2hvbGQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKVxuJiM0MztcdF9fbXVzdF9ob2xkKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spXG4ge1xuLVx0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1biwgKm5ldztcbi1cdGJvb2wgYWRkZWQgPSBmYWxzZTtcbi1cbi1cdG5ldyA9IGttYWxsb2Nfb2JqKCpuZXcsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHVubGlrZWx5KCFuZXcpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRuZXctXHUwMDNlc2Vxbm8gPSBzZXFubztcbi1cdG5ldy1cdTAwM2VsZW4gPSBwYXlsb2FkX2xlbjtcbi1cbi1cdC8qIGlmIHRoZSBsaXN0IGlzIGVtcHR5IGltbWVkaWF0ZWx5IGF0dGFjaCB0aGlzIG5ldyBvYmplY3QgKi9cbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCkpIHtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWxpc3QsIFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQmIzQzOyYjNDM7O1xuLVx0XHRyZXR1cm4gdHJ1ZTtcbi1cdH1cbi1cbi1cdC8qIG90aGVyd2lzZSBsb29wIG92ZXIgdGhlIGxpc3QgYW5kIGVpdGhlciBkcm9wIHRoZSBwYWNrZXQgYmVjYXVzZSB0aGlzXG4tXHQgKiBpcyBhIGR1cGxpY2F0ZSBvciBzdG9yZSBpdCBhdCB0aGUgcmlnaHQgcG9zaXRpb24uXG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3Q7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICpuZXcgPSBOVUxMO1xuJiM0MztcdHUzMiBlbmRfc2Vxbm8gPSBzZXFubyAmIzQzOyBwYXlsb2FkX2xlbjtcbiYjNDM7XHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnNhZmU7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1bjtcbiYjNDM7XG4mIzQzO1x0LyogbG9vcCBvdmVyIHRoZSBsaXN0IHRvIGZpbmQgZWl0aGVyIGFuIGV4aXN0aW5nIGVudHJ5IHdoaWNoIHRoZSBuZXdcbiYjNDM7XHQgKiBzZXFubyByYW5nZSBjYW4gYmUgbWVyZ2VkIHdpdGggb3IgdGhlIHBvc2l0aW9uIGF0IHdoaWNoIGEgbmV3IGVudHJ5XG4mIzQzO1x0ICogaGFzIHRvIGJlIGluc2VydGVkLlxuIFx0ICpcbiBcdCAqIFRoZSBpdGVyYXRpb24gaXMgZG9uZSBpbiB0aGUgcmV2ZXJzZSB3YXkgYmVjYXVzZSBpdCBpcyBsaWtlbHkgdGhhdFxuIFx0ICogdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0ICh0aGUgb25lIGJlaW5nIHByb2Nlc3NlZCBub3cpIGhhcyBhIGJpZ2dlclxuIFx0ICogc2Vxbm8gdGhhbiBhbGwgdGhlIG90aGVycyBhbHJlYWR5IHN0b3JlZC5cbiBcdCAqL1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCBcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QsIGxpc3QpIHtcbi1cdFx0LyogY2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi9cbi1cdFx0aWYgKG5ldy1cdTAwM2VzZXFubyA9PSB1bi1cdTAwM2VzZXFubykge1xuLVx0XHRcdGlmIChuZXctXHUwMDNlbGVuIFx1MDAzZSB1bi1cdTAwM2VsZW4pXG4tXHRcdFx0XHR1bi1cdTAwM2VsZW4gPSBuZXctXHUwMDNlbGVuO1xuLVx0XHRcdGtmcmVlKG5ldyk7XG4tXHRcdFx0YWRkZWQgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXG4tXHRcdC8qIGxvb2sgZm9yIHRoZSByaWdodCBwb3NpdGlvbiAqL1xuLVx0XHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUobmV3LVx1MDAzZXNlcW5vLCB1bi1cdTAwM2VzZXFubykpXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCBcdTAwMjZ0cF92YXJzLVx1MDAzZXVuYWNrZWRfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0LyogbG9vayBmb3IgdGhlIHJpZ2h0IHBvc2l0aW9uIC0gYW4gdW4gd2hpY2ggaXMgc21hbGxlciAqL1xuJiM0MztcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKHNlcW5vLCB1bi1cdTAwM2VzZXFubykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qIGFzIHNvb24gYXMgYW4gZW50cnkgaGF2aW5nIGEgYmlnZ2VyIHNlcW5vIGlzIGZvdW5kLCB0aGUgbmV3XG4tXHRcdCAqIG9uZSBpcyBhdHRhY2hlZCBfYWZ0ZXJfIGl0LiBJbiB0aGlzIHdheSB0aGUgbGlzdCBpcyBrZXB0IGluXG4tXHRcdCAqIGFzY2VuZGluZyBvcmRlclxuJiM0MztcdFx0Lyogc21hbGxlci9lcXVhbCBzZXFubyB3YXMgZm91bmQgYnV0IHRoZXkgbWlnaHQgYmUgZGlyZWN0bHlcbiYjNDM7XHRcdCAqIGFmdGVyIGFub3RoZXIgb3Igb3ZlcmxhcHBpbmcuIGtlZXAgb25seSBhIHNpbmdsZSBlbnRyeVxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIEl0IGlzIGFscmVhZHkga25vd24gdGhhdDpcbiYjNDM7XHRcdCAqXG4mIzQzO1x0XHQgKlx0dW4tXHUwMDNlc2Vxbm8gXHUwMDNjPSBzZXFub1xuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIFdoZW4gZXN0YWJsaXNoaW5nIHRoYXQ6XG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICpcdHNlcW5vIFx1MDAzYz0gdW4tXHUwMDNlc2Vxbm8gJiM0MzsgdW4tXHUwMDNlbGVuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogVGhlbiBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBhIG5ldyBlbnRyeSBiZWNhdXNlIHRoZVxuJiM0MztcdFx0ICogc21hbGxlci9lcXVhbCBzZXFubyBvZiB1biBtaWdodCBhbHJlYWR5IGNvbnRhaW4gdGhlIG5ld1xuJiM0MztcdFx0ICogcmVjZWl2ZWQgcGFja2V0IG9yIHdlIG9ubHkgYWRkIG5ldyBkYXRhIGRpcmVjdGx5IGFmdGVyXG4mIzQzO1x0XHQgKiB0aGUgZW5kIG9mIHVuLiBUaGUgbGF0dGVyIGNhbiBiZSBpZGVudGlmaWVkIHVzaW5nOlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqXHR1bi1cdTAwM2VzZXFubyAmIzQzOyB1bi1cdTAwM2VsZW4gXHUwMDNjPSBlbmRfc2Vxbm9cbiBcdFx0ICovXG4tXHRcdGxpc3RfYWRkKFx1MDAyNm5ldy1cdTAwM2VsaXN0LCBcdTAwMjZ1bi1cdTAwM2VsaXN0KTtcbi1cdFx0YWRkZWQgPSB0cnVlO1xuLVx0XHR0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2NvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdGlmICghYmF0YWR2X3NlcV9iZWZvcmUodW4tXHUwMDNlc2Vxbm8gJiM0MzsgdW4tXHUwMDNlbGVuLCBzZXFubykpIHtcbiYjNDM7XHRcdFx0LyogbmV3IGRhdGEgZGlyZWN0bHkgYWZ0ZXIgdW4/ICovXG4mIzQzO1x0XHRcdGlmICghYmF0YWR2X3NlcV9iZWZvcmUoZW5kX3NlcW5vLCB1bi1cdTAwM2VzZXFubyAmIzQzOyB1bi1cdTAwM2VsZW4pKVxuJiM0MztcdFx0XHRcdHVuLVx1MDAzZWxlbiA9IGVuZF9zZXFubyAtIHVuLVx1MDAzZXNlcW5vO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogdW4gbm93IHJlcHJlc2VudHMgYm90aCBvbGQgdW4gJiM0MzsgbmV3IHJhbmdlIGFuZCBoYXMgdG9cbiYjNDM7XHRcdFx0ICogYmUgdXNlZCB0byBjaGVjayBpZiB0aGUgZ2FwIHRvIHRoZSBuZXh0IHNlcW5vIHJhbmdlXG4mIzQzO1x0XHRcdCAqIHdhcyBjbG9zZWRcbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdG5ldyA9IHVuO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0LyogYXMgc29vbiBhcyBhbiBlbnRyeSBoYXZpbmcgYSBzbWFsbGVyIHNlcW5vIGlzIGZvdW5kLFxuJiM0MztcdFx0XHQgKiB0aGUgbmV3IG9uZSBpcyBhdHRhY2hlZCBfYWZ0ZXJfIGl0LiBJbiB0aGlzIHdheSB0aGVcbiYjNDM7XHRcdFx0ICogbGlzdCBpcyBrZXB0IGluIGFzY2VuZGluZyBvcmRlclxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0cG9zID0gXHUwMDI2dW4tXHUwMDNlbGlzdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0LyogcmVjZWl2ZWQgcGFja2V0IHdpdGggc21hbGxlc3Qgc2Vxbm8gb3V0IG9mIG9yZGVyOyBhZGQgaXQgdG8gZnJvbnQgKi9cbi1cdGlmICghYWRkZWQpIHtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWxpc3QsIFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQmIzQzOyYjNDM7O1xuJiM0MztcdC8qIG5vIGVudHJ5IHRvIG1lcmdlIHdpdGggd2FzIGZvdW5kOyBpbnNlcnQgYSBuZXcgb25lIGFmdGVyIHRoZSBlbnRyeVxuJiM0MztcdCAqIHdpdGggdGhlIG5leHQgc21hbGxlciBzZXFubyAob3IgYXQgdGhlIGZyb250IG9mIHRoZSBsaXN0IHdoZW4gdGhlXG4mIzQzO1x0ICogbmV3IHNlcW5vIGlzIHRoZSBzbWFsbGVzdCBvciB0aGUgbGlzdCBpcyBlbXB0eSlcbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW5ldykge1xuJiM0MztcdFx0bmV3ID0ga21hbGxvY19vYmooKm5ldywgR0ZQX0FUT01JQyk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIW5ldykpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRuZXctXHUwMDNlc2Vxbm8gPSBzZXFubztcbiYjNDM7XHRcdG5ldy1cdTAwM2VsZW4gPSBwYXlsb2FkX2xlbjtcbiYjNDM7XG4mIzQzO1x0XHRsaXN0X2FkZChcdTAwMjZuZXctXHUwMDNlbGlzdCwgcG9zKTtcbiYjNDM7XHRcdHRwX3ZhcnMtXHUwMDNldW5hY2tlZF9jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBjaGVjayBpZiBuZXcgZmlsbGVkIHRoZSBnYXAgdG8gdGhlIG5leHQgbGlzdCBlbnRyaWVzICovXG4mIzQzO1x0dW4gPSBuZXc7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVlKHVuLCBzYWZlLCBcdTAwMjZ0cF92YXJzLVx1MDAzZXVuYWNrZWRfbGlzdCwgbGlzdCkge1xuJiM0MztcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKGVuZF9zZXFubywgdW4tXHUwMDNlc2Vxbm8pKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiBuZXh0IGVudHJ5IGlzIG92ZXJsYXBwaW5nIG9yIGFkamFjZW50IC0gY29tYmluZSBib3RoICovXG4mIzQzO1x0XHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUoZW5kX3NlcW5vLCB1bi1cdTAwM2VzZXFubyAmIzQzOyB1bi1cdTAwM2VsZW4pKSB7XG4mIzQzO1x0XHRcdGVuZF9zZXFubyA9IHVuLVx1MDAzZXNlcW5vICYjNDM7IHVuLVx1MDAzZWxlbjtcbiYjNDM7XHRcdFx0bmV3LVx1MDAzZWxlbiA9IGVuZF9zZXFubyAtIG5ldy1cdTAwM2VzZXFubztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRsaXN0X2RlbChcdTAwMjZ1bi1cdTAwM2VsaXN0KTtcbiYjNDM7XHRcdGtmcmVlKHVuKTtcbiYjNDM7XHRcdHRwX3ZhcnMtXHUwMDNldW5hY2tlZF9jb3VudC0tO1xuIFx0fVxuIFxuIFx0LyogcmVtb3ZlIHRoZSBsYXN0IChiaWdnZXN0KSB1bmFja2VkIHNlcW5vIHdoZW4gbGlzdCBpcyB0b28gbGFyZ2UgKi9cbi1cdGlmICh0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2NvdW50IFx1MDAzZSBCQVRBRFZfVFBfTUFYX1VOQUNLRUQpIHtcbi1cdFx0dW4gPSBsaXN0X2xhc3RfZW50cnkoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0LFxuJiM0MztcdGlmICh0cF92YXJzLVx1MDAzZXVuYWNrZWRfY291bnQgXHUwMDNlIEJBVEFEVl9UUF9NQVhfVU5BQ0tFRCkge1xuJiM0MztcdFx0dW4gPSBsaXN0X2xhc3RfZW50cnkoXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCwgbGlzdCk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuIFx0XHRrZnJlZSh1bik7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQtLTtcbiYjNDM7XHRcdHRwX3ZhcnMtXHUwMDNldW5hY2tlZF9jb3VudC0tO1xuIFx0fVxuIFxuIFx0cmV0dXJuIHRydWU7XG5AQCAtMTQ3Nyw3ICYjNDM7MTUyNiw3IEBAIHN0YXRpYyBib29sIGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyKHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMsXG4gICogQHRwX3ZhcnM6IHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIGN1cnJlbnQgVFAgbWV0ZXIgc2Vzc2lvblxuICAqL1xuIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9hY2tfdW5vcmRlcmVkKHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMpXG4tXHRfX211c3RfaG9sZChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spXG4mIzQzO1x0X19tdXN0X2hvbGQoXHUwMDI2dHBfdmFycy1cdTAwM2VhY2tfc2Vxbm9fbG9jaylcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqc2FmZTtcbiBcdHUzMiB0b19hY2s7XG5AQCAtMTQ4NSw3ICYjNDM7MTUzNCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9hY2tfdW5vcmRlcmVkKHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMpXG4gXHQvKiBnbyB0aHJvdWdoIHRoZSB1bmFja2VkIHBhY2tldCBsaXN0IGFuZCBwb3NzaWJseSBBQ0sgdGhlbSBhc1xuIFx0ICogd2VsbFxuIFx0ICovXG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCwgbGlzdCkge1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbiBcdFx0LyogdGhlIGxpc3QgaXMgb3JkZXJlZCwgdGhlcmVmb3JlIGl0IGlzIHBvc3NpYmxlIHRvIHN0b3AgYXMgc29vblxuIFx0XHQgKiB0aGVyZSBpcyBhIGdhcCBiZXR3ZWVuIHRoZSBsYXN0IGFja2VkIHNlcW5vIGFuZCB0aGUgc2Vxbm8gb2ZcbiBcdFx0ICogdGhlIHBhY2tldCB1bmRlciBpbnNwZWN0aW9uXG5AQCAtMTQ5MywxNCAmIzQzOzE1NDIsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX2Fja191bm9yZGVyZWQoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycylcbiBcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKHRwX3ZhcnMtXHUwMDNlbGFzdF9yZWN2LCB1bi1cdTAwM2VzZXFubykpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHRvX2FjayA9IHVuLVx1MDAzZXNlcW5vICYjNDM7IHVuLVx1MDAzZWxlbiAtIHRwX3ZhcnMtXHUwMDNlbGFzdF9yZWN2O1xuJiM0MztcdFx0dG9fYWNrID0gdW4tXHUwMDNlc2Vxbm8gJiM0MzsgdW4tXHUwMDNlbGVuO1xuIFxuLVx0XHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUodHBfdmFycy1cdTAwM2VsYXN0X3JlY3YsIHVuLVx1MDAzZXNlcW5vICYjNDM7IHVuLVx1MDAzZWxlbikpXG4tXHRcdFx0dHBfdmFycy1cdTAwM2VsYXN0X3JlY3YgJiM0Mzs9IHRvX2FjaztcbiYjNDM7XHRcdGlmIChiYXRhZHZfc2VxX2JlZm9yZSh0cF92YXJzLVx1MDAzZWxhc3RfcmVjdiwgdG9fYWNrKSlcbiYjNDM7XHRcdFx0dHBfdmFycy1cdTAwM2VsYXN0X3JlY3YgPSB0b19hY2s7XG4gXG4gXHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuIFx0XHRrZnJlZSh1bik7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQtLTtcbiYjNDM7XHRcdHRwX3ZhcnMtXHUwMDNldW5hY2tlZF9jb3VudC0tO1xuIFx0fVxuIH1cbiBcbkBAIC0xNTQ3LDkgJiM0MzsxNTk2LDkgQEAgYmF0YWR2X3RwX2luaXRfcmVjdihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0dHBfdmFycy1cdTAwM2Vjb21tb24uYmF0X3ByaXYgPSBiYXRfcHJpdjtcbiBcdGtyZWZfaW5pdChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG4gXG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0KTtcbi1cdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQgPSAwO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9saXN0KTtcbiYjNDM7XHR0cF92YXJzLVx1MDAzZXVuYWNrZWRfY291bnQgPSAwO1xuIFxuIFx0a3JlZl9nZXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udGltZXIsIGJhdGFkdl90cF9yZWNlaXZlcl9zaHV0ZG93biwgMCk7XG5AQCAtMTYwOSw3ICYjNDM7MTY1OCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWN2X21zZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRXUklURV9PTkNFKHRwX3ZhcnMtXHUwMDNlbGFzdF9yZWN2X3RpbWUsIGppZmZpZXMpO1xuIFx0fVxuIFxuLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbG9jayk7XG4mIzQzO1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuIFxuIFx0LyogaWYgdGhlIHBhY2tldCBpcyBhIGR1cGxpY2F0ZSwgaXQgbWF5IGJlIHRoZSBjYXNlIHRoYXQgYW4gQUNLIGhhcyBiZWVuXG4gXHQgKiBsb3N0LiBSZXNlbmQgdGhlIEFDS1xuQEAgLTE2MjUsNyAmIzQzOzE2NzQsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjdl9tc2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0ICogbm90IGJlZW4gZW5xdWV1ZWQgY29ycmVjdGx5XG4gXHRcdCAqL1xuIFx0XHRpZiAoIWJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyKHRwX3ZhcnMsIHNlcW5vLCBwYXlsb2FkX2xlbikpIHtcbi1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuQEAgLTE2NDEsNyAmIzQzOzE2OTAsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjdl9tc2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBzZW5kX2FjazpcbiBcdHRvX2FjayA9IHRwX3ZhcnMtXHUwMDNlbGFzdF9yZWN2O1xuLVx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbiBcbiBcdC8qIHNlbmQgdGhlIEFDSy4gSWYgdGhlIHJlY2VpdmVkIHBhY2tldCB3YXMgb3V0IG9mIG9yZGVyLCB0aGUgQUNLIHRoYXRcbiBcdCAqIGlzIGdvaW5nIHRvIGJlIHNlbnQgaXMgYSBkdXBsaWNhdGUgKHRoZSBzZW5kZXIgd2lsbCBjb3VudCB0aGVtIGFuZFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3R2bHYuYyBiL25ldC9iYXRtYW4tYWR2L3R2bHYuY1xuaW5kZXggMWM5ZmIyMTk4NWY2YTUuLjQ5YmYyZWQ5ZWNkYzM5IDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHZsdi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi90dmx2LmNcbkBAIC00NDIsNiAmIzQzOzQ0Miw1NCBAQCBzdGF0aWMgaW50IGJhdGFkdl90dmx2X2NhbGxfaGFuZGxlcihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJhdGFkdl90dmx2X2hkcl9uZXh0KCkgLSBtb3ZlIGEgdHZsdiBidWZmZXIgY3Vyc29yIHRvIHRoZSBuZXh0IGNvbnRhaW5lclxuJiM0MzsgKiBAdHZsdl92YWx1ZTogY3Vyc29yIGludG8gdGhlIHR2bHYgYnVmZmVyLCBhZHZhbmNlZCBwYXN0IHRoZSByZXR1cm5lZFxuJiM0MzsgKiAgY29udGFpbmVyJiMzOTtzIGNvbnRlbnQgb24gc3VjY2Vzc1xuJiM0MzsgKiBAdHZsdl92YWx1ZV9sZW46IHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIHR2bHYgYnVmZmVyLCByZWR1Y2VkIGJ5IHRoZSByZXR1cm5lZFxuJiM0MzsgKiAgY29udGFpbmVyJiMzOTtzIHNpemUgb24gc3VjY2Vzc1xuJiM0MzsgKlxuJiM0MzsgKiBQYXJzZXMgYSBzaW5nbGUgY29udGFpbmVyIGhlYWRlciBhdCB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gYW5kLCBpZiBhXG4mIzQzOyAqIGNvbXBsZXRlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUsIGFkdmFuY2VzIHRoZSBjdXJzb3IgYW5kIHJlbWFpbmluZyBsZW5ndGhcbiYjNDM7ICogcGFzdCBpdC4gVGhlIHJldHVybmVkIGhlYWRlciBzdGF5cyB2YWxpZDsgaXRzIGNvbnRlbnQgaXMgbG9jYXRlZCBhdFxuJiM0MzsgKiAocmV0dXJuZWQgaGVhZGVyICYjNDM7IDEpIGFuZCBpcyBudG9ocyhoZHItXHUwMDNlbGVuKSBieXRlcyBsb25nLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHBvaW50ZXIgdG8gdGhlIG5leHQgdHZsdiBjb250YWluZXIgaGVhZGVyLCBvciBOVUxMIGlmIG5vIGZ1cnRoZXJcbiYjNDM7ICogY29tcGxldGUgY29udGFpbmVyIGlzIHByZXNlbnQgaW4gdGhlIGJ1ZmZlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgYmF0YWR2X3R2bHZfaGRyICpiYXRhZHZfdHZsdl9oZHJfbmV4dCh2b2lkICoqdHZsdl92YWx1ZSwgdTE2ICp0dmx2X3ZhbHVlX2xlbilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBiYXRhZHZfdHZsdl9oZHIgKnR2bHZfaGRyO1xuJiM0MztcdHUxNiB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xuJiM0MztcdHZvaWQgKnR2bHZfdmFsdWVfY29udDtcbiYjNDM7XHR1MTYgdHZsdl9sZW47XG4mIzQzO1xuJiM0MztcdHR2bHZfdmFsdWVfY29udCA9ICp0dmx2X3ZhbHVlO1xuJiM0MztcdHR2bHZfbGVuID0gKnR2bHZfdmFsdWVfbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAodHZsdl9sZW4gXHUwMDNjIHNpemVvZigqdHZsdl9oZHIpKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdHR2bHZfaGRyID0gdHZsdl92YWx1ZV9jb250O1xuJiM0MztcdHR2bHZfdmFsdWVfY29udF9sZW4gPSBudG9ocyh0dmx2X2hkci1cdTAwM2VsZW4pO1xuJiM0MztcdHR2bHZfdmFsdWVfY29udCA9IHR2bHZfaGRyICYjNDM7IDE7XG4mIzQzO1x0dHZsdl9sZW4gLT0gc2l6ZW9mKCp0dmx2X2hkcik7XG4mIzQzO1xuJiM0MztcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFx1MDAzZSB0dmx2X2xlbilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZVxuJiM0MztcdCAqIGFsaWdubWVudCwgc28gaXQgbXVzdCBzdGFydCBhdCBhbiBldmVuIG9mZnNldC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcdTAwMjYgMSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHQqdHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWVfY29udCAmIzQzOyB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xuJiM0MztcdCp0dmx2X3ZhbHVlX2xlbiA9IHR2bHZfbGVuIC0gdHZsdl92YWx1ZV9jb250X2xlbjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHR2bHZfaGRyO1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbigpIC0gY2hlY2sgaWYgYSB0dmx2IGJ1ZmZlciBob2xkcyBhIGNvbnRhaW5lclxuICAqIEB0dmx2X3ZhbHVlOiB0dmx2IGNvbnRlbnRcbkBAIC00NTcsMjggJiM0Mzs1MDUsMTAgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluKHZvaWQgKnR2bHZfdmFsdWUsXG4gXHRcdFx0XHRcdCAgIHU4IHZlcnNpb24pXG4ge1xuIFx0c3RydWN0IGJhdGFkdl90dmx2X2hkciAqdHZsdl9oZHI7XG4tXHR1MTYgdHZsdl92YWx1ZV9jb250X2xlbjtcbi1cbi1cdHdoaWxlICh0dmx2X3ZhbHVlX2xlbiBcdTAwM2U9IHNpemVvZigqdHZsdl9oZHIpKSB7XG4tXHRcdHR2bHZfaGRyID0gdHZsdl92YWx1ZTtcbi1cdFx0dHZsdl92YWx1ZV9jb250X2xlbiA9IG50b2hzKHR2bHZfaGRyLVx1MDAzZWxlbik7XG4tXHRcdHR2bHZfdmFsdWUgPSB0dmx2X2hkciAmIzQzOyAxO1xuLVx0XHR0dmx2X3ZhbHVlX2xlbiAtPSBzaXplb2YoKnR2bHZfaGRyKTtcbi1cbi1cdFx0aWYgKHR2bHZfdmFsdWVfY29udF9sZW4gXHUwMDNlIHR2bHZfdmFsdWVfbGVuKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHQvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZVxuLVx0XHQgKiBhbGlnbm1lbnQsIHNvIGl0IG11c3Qgc3RhcnQgYXQgYW4gZXZlbiBvZmZzZXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcdTAwMjYgMSlcbi1cdFx0XHRicmVhaztcbiBcbiYjNDM7XHR3aGlsZSAoKHR2bHZfaGRyID0gYmF0YWR2X3R2bHZfaGRyX25leHQoXHUwMDI2dHZsdl92YWx1ZSwgXHUwMDI2dHZsdl92YWx1ZV9sZW4pKSkge1xuIFx0XHRpZiAodHZsdl9oZHItXHUwMDNldHlwZSA9PSB0eXBlIFx1MDAyNlx1MDAyNiB0dmx2X2hkci1cdTAwM2V2ZXJzaW9uID09IHZlcnNpb24pXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdHR2bHZfdmFsdWUgPSAodTggKil0dmx2X3ZhbHVlICYjNDM7IHR2bHZfdmFsdWVfY29udF9sZW47XG4tXHRcdHR2bHZfdmFsdWVfbGVuIC09IHR2bHZfdmFsdWVfY29udF9sZW47XG4gXHR9XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG5AQCAtNTExLDIwICYjNDM7NTQxLDggQEAgaW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0dTggY2lmbm90Zm91bmQgPSBCQVRBRFZfVFZMVl9IQU5ETEVSX09HTV9DSUZOT1RGTkQ7XG4gXHRpbnQgcmV0ID0gTkVUX1JYX1NVQ0NFU1M7XG4gXG4tXHR3aGlsZSAodHZsdl92YWx1ZV9sZW4gXHUwMDNlPSBzaXplb2YoKnR2bHZfaGRyKSkge1xuLVx0XHR0dmx2X2hkciA9IHR2bHZfdmFsdWU7XG4mIzQzO1x0d2hpbGUgKCh0dmx2X2hkciA9IGJhdGFkdl90dmx2X2hkcl9uZXh0KFx1MDAyNnR2bHZfdmFsdWUsIFx1MDAyNnR2bHZfdmFsdWVfbGVuKSkpIHtcbiBcdFx0dHZsdl92YWx1ZV9jb250X2xlbiA9IG50b2hzKHR2bHZfaGRyLVx1MDAzZWxlbik7XG4tXHRcdHR2bHZfdmFsdWUgPSB0dmx2X2hkciAmIzQzOyAxO1xuLVx0XHR0dmx2X3ZhbHVlX2xlbiAtPSBzaXplb2YoKnR2bHZfaGRyKTtcbi1cbi1cdFx0aWYgKHR2bHZfdmFsdWVfY29udF9sZW4gXHUwMDNlIHR2bHZfdmFsdWVfbGVuKVxuLVx0XHRcdGJyZWFrO1xuLVxuLVx0XHQvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZVxuLVx0XHQgKiBhbGlnbm1lbnQsIHNvIGl0IG11c3Qgc3RhcnQgYXQgYW4gZXZlbiBvZmZzZXQuXG4tXHRcdCAqL1xuLVx0XHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcdTAwMjYgMSlcbi1cdFx0XHRicmVhaztcbiBcbiBcdFx0dHZsdl9oYW5kbGVyID0gYmF0YWR2X3R2bHZfaGFuZGxlcl9nZXQoYmF0X3ByaXYsXG4gXHRcdFx0XHRcdFx0ICAgICAgIHR2bHZfaGRyLVx1MDAzZXR5cGUsXG5AQCAtNTMyLDExICYjNDM7NTUwLDkgQEAgaW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFxuIFx0XHRyZXQgfD0gYmF0YWR2X3R2bHZfY2FsbF9oYW5kbGVyKGJhdF9wcml2LCB0dmx2X2hhbmRsZXIsXG4gXHRcdFx0XHRcdFx0cGFja2V0X3R5cGUsIG9yaWdfbm9kZSwgc2tiLFxuLVx0XHRcdFx0XHRcdHR2bHZfdmFsdWUsXG4mIzQzO1x0XHRcdFx0XHRcdHR2bHZfaGRyICYjNDM7IDEsXG4gXHRcdFx0XHRcdFx0dHZsdl92YWx1ZV9jb250X2xlbik7XG4gXHRcdGJhdGFkdl90dmx2X2hhbmRsZXJfcHV0KHR2bHZfaGFuZGxlcik7XG4tXHRcdHR2bHZfdmFsdWUgPSAodTggKil0dmx2X3ZhbHVlICYjNDM7IHR2bHZfdmFsdWVfY29udF9sZW47XG4tXHRcdHR2bHZfdmFsdWVfbGVuIC09IHR2bHZfdmFsdWVfY29udF9sZW47XG4gXHR9XG4gXG4gXHRpZiAocGFja2V0X3R5cGUgIT0gQkFUQURWX0lWX09HTSBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oIGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaFxuaW5kZXggYjFmOWY4OTY0YzNmZDIuLmNkMTI3NTVkMjFmMzU2IDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaFxuQEAgLTIxNCw5ICYjNDM7MjE0LDYgQEAgc3RydWN0IGJhdGFkdl93aWZpX25ldF9kZXZpY2Vfc3RhdGUge1xuICAqIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAtIG5ldHdvcmsgZGV2aWNlIGtub3duIHRvIGJhdG1hbi1hZHZcbiAgKi9cbiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2Uge1xuLVx0LyoqIEBsaXN0OiBsaXN0IG5vZGUgZm9yIGJhdGFkdl9oYXJkaWZfbGlzdCAqL1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVxuIFx0LyoqIEBpZl9zdGF0dXM6IHN0YXR1cyBvZiB0aGUgaW50ZXJmYWNlIGZvciBiYXRtYW4tYWR2ICovXG4gXHRjaGFyIGlmX3N0YXR1cztcbiBcbkBAIC0xMzM1LDkgJiM0MzsxMzMyLDkgQEAgc3RydWN0IGJhdGFkdl90cF91bmFja2VkIHtcbiBcdHUzMiBzZXFubztcbiBcbiBcdC8qKiBAbGVuOiBsZW5ndGggb2YgdGhlIHBhY2tldCAqL1xuLVx0dTE2IGxlbjtcbiYjNDM7XHR1MzIgbGVuO1xuIFxuLVx0LyoqIEBsaXN0OiBsaXN0IG5vZGUgZm9yIFx1MDAyNmJhdGFkdl90cF92YXJzX2NvbW1vbi51bmFja2VkX2xpc3QgKi9cbiYjNDM7XHQvKiogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgXHUwMDI2YmF0YWR2X3RwX3JlY2VpdmVyLnVuYWNrZWRfbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtMTM2MCwxNSAmIzQzOzEzNTcsNiBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3ZhcnNfY29tbW9uIHtcbiBcdC8qKiBAc2Vzc2lvbjogVFAgc2Vzc2lvbiBpZGVudGlmaWVyICovXG4gXHR1OCBzZXNzaW9uWzJdO1xuIFxuLVx0LyoqIEB1bmFja2VkX2xpc3Q6IGxpc3Qgb2YgdW5hY2tlZCBwYWNrZXRzIChtZXRhLWluZm8gb25seSkgKi9cbi1cdHN0cnVjdCBsaXN0X2hlYWQgdW5hY2tlZF9saXN0O1xuLVxuLVx0LyoqIEB1bmFja2VkX2xvY2s6IHByb3RlY3QgdW5hY2tlZF9saXN0ICYjNDM7IFx1MDAyNmJhdGFkdl90cF9yZWNlaXZlci5sYXN0X3JlY3YgKi9cbi1cdHNwaW5sb2NrX3QgdW5hY2tlZF9sb2NrO1xuLVxuLVx0LyoqIEB1bmFja2VkX2NvdW50OiBudW1iZXIgb2YgdW5hY2tlZCBlbnRyaWVzICovXG4tXHRzaXplX3QgdW5hY2tlZF9jb3VudDtcbi1cbiBcdC8qKiBAcmVmY291bnQ6IG51bWJlciBvZiBjb250ZXh0IHdoZXJlIHRoZSBvYmplY3QgaXMgdXNlZCAqL1xuIFx0c3RydWN0IGtyZWYgcmVmY291bnQ7XG4gXG5AQCAtMTQ4Miw2ICYjNDM7MTQ3MCwxNSBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyIHtcbiBcbiBcdC8qKiBAbGFzdF9yZWN2X3RpbWU6IHRpbWUgKGppZmZpZXMpIGEgbXNnIHdhcyByZWNlaXZlZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsYXN0X3JlY3ZfdGltZTtcbiYjNDM7XG4mIzQzO1x0LyoqIEB1bmFja2VkX2xpc3Q6IGxpc3Qgb2YgdW5hY2tlZCBwYWNrZXRzIChtZXRhLWluZm8gb25seSkgKi9cbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIHVuYWNrZWRfbGlzdDtcbiYjNDM7XG4mIzQzO1x0LyoqIEBhY2tfc2Vxbm9fbG9jazogcHJvdGVjdCB1bmFja2VkX2xpc3QgJiM0MzsgXHUwMDI2YmF0YWR2X3RwX3JlY2VpdmVyLmxhc3RfcmVjdiAqL1xuJiM0MztcdHNwaW5sb2NrX3QgYWNrX3NlcW5vX2xvY2s7XG4mIzQzO1xuJiM0MztcdC8qKiBAdW5hY2tlZF9jb3VudDogbnVtYmVyIG9mIHVuYWNrZWQgZW50cmllcyAqL1xuJiM0MztcdHNpemVfdCB1bmFja2VkX2NvdW50O1xuIH07XG4gXG4gLyoqXG5AQCAtMTY3OSw2ICYjNDM7MTY3Niw5IEBAIHN0cnVjdCBiYXRhZHZfcHJpdiB7XG4gXHQvKiogQHRwX251bTogbnVtYmVyIG9mIGN1cnJlbnRseSBhY3RpdmUgdHAgc2Vzc2lvbnMgKi9cbiBcdGF0b21pY190IHRwX251bTtcbiBcbiYjNDM7XHQvKiogQGhhcmRpZl9nZW5lcmF0aW9uOiBnZW5lcmF0aW9uIGNvdW50ZXIgYWRkZWQgdG8gbmV0bGluayBoYXJkaWYgZHVtcHMgKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgaGFyZGlmX2dlbmVyYXRpb247XG4mIzQzO1xuIFx0LyoqIEBvcmlnX3dvcms6IHdvcmsgcXVldWUgY2FsbGJhY2sgaXRlbSBmb3Igb3JpZyBub2RlIHB1cmdpbmcgKi9cbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgb3JpZ193b3JrO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JBVE1BTl9BRFYmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9CQVRNQU5fViYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX0JMQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9yZWN2X21zZyYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIHJvdXRpbmcgcHJvdG9jb2wuIEl0IG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBoYXJkIGludGVyZmFjZXMgKGFkZGluZy9yZW1vdmluZyB0aGVtIGZyb20gdGhlIG1lc2gpLCB0aGUgcHJvY2Vzc2luZyBvZiBvdXQtb2Ytb3JkZXIgVFAgbWV0ZXIgcGFja2V0cywgYW5kIHRoZSBwYXJzaW5nIG9mIFRWTFYgY29udGFpbmVycy4gVGhlc2UgYXJlIGNvcmUgbG9naWMgY2hhbmdlcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rL3N5c2ZzIGFuZCBuZXR3b3JrIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYTJlZjQxZGQzM2NhZDE2NTk4NjM1ZDIwZTM0ZDUzZjU4ZGU1YzBiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMjE6MjA6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMKaW5kZXggYmIyZjAxMmI0NTRlYTQuLjIyNjIyMjgzZjU5YjBjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jCkBAIC00MDQsMjMgJiM0Mzs0MDQsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBiYXRhZHZfZm9yd19wYWNrZXQgKmZvcndfcGFja2V0LAogLyogc2VuZCBhIGJhdG1hbiBvZ20gcGFja2V0ICovCiBzdGF0aWMgdm9pZCBiYXRhZHZfaXZfb2dtX2VtaXQoc3RydWN0IGJhdGFkdl9mb3J3X3BhY2tldCAqZm9yd19wYWNrZXQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2U7Ci0KIAlpZiAoIWZvcndfcGFja2V0LSZndDtpZl9pbmNvbWluZykgewogCQlwcl9lcnIoJiMzNDtFcnJvciAtIGNhbiYjMzk7dCBmb3J3YXJkIHBhY2tldDogaW5jb21pbmcgaWZhY2Ugbm90IHNwZWNpZmllZFxuJiMzNDspOwogCQlyZXR1cm47CiAJfQogCi0JbWVzaF9pZmFjZSA9IGZvcndfcGFja2V0LSZndDtpZl9pbmNvbWluZy0mZ3Q7bWVzaF9pZmFjZTsKLQogCWlmIChXQVJOX09OKCFmb3J3X3BhY2tldC0mZ3Q7aWZfb3V0Z29pbmcpKQogCQlyZXR1cm47CiAKLQlpZiAoZm9yd19wYWNrZXQtJmd0O2lmX291dGdvaW5nLSZndDttZXNoX2lmYWNlICE9IG1lc2hfaWZhY2UpIHsKLQkJcHJfd2FybigmIzM0OyVzOiBtZXNoIGludGVyZmFjZSBzd2l0Y2ggZm9yIHF1ZXVlZCBPR01cbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0KIAlpZiAoZm9yd19wYWNrZXQtJmd0O2lmX2luY29taW5nLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0FDVElWRSkKIAkJcmV0dXJuOwogCkBAIC05MTAsOCAmIzQzOzkwMSw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2NoZWR1bGVfYnVmZihzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpCiAKIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2NoZWR1bGUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogewotCWlmIChoYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UgfHwKLQkgICAgaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKQomIzQzOwlpZiAoaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKQogCQlyZXR1cm47CiAKIAltdXRleF9sb2NrKCZhbXA7aGFyZF9pZmFjZS0mZ3Q7YmF0X2l2Lm9nbV9idWZmX211dGV4KTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmMKaW5kZXggNDg0MWYwZjFhOWIxMzkuLjI2MmU0MDA0MDAwN2NjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYwpAQCAtOTAsMTIgJiM0Mzs5MCw2IEBAIHN0YXRpYyBib29sIGJhdGFkdl92X2VscF9nZXRfdGhyb3VnaHB1dChzdHJ1Y3QgYmF0YWR2X2hhcmRpZl9uZWlnaF9ub2RlICpuZWlnaCwKIAl1MzIgdGhyb3VnaHB1dDsKIAlpbnQgcmV0OwogCi0JLyogZG9uJiMzOTt0IHF1ZXJ5IHRocm91Z2hwdXQgd2hlbiBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoIGFueQotCSAqIGJhdG1hbi1hZHYgaW50ZXJmYWNlCi0JICovCi0JaWYgKCFtZXNoX2lmYWNlKQotCQlyZXR1cm4gZmFsc2U7Ci0KIAkvKiBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBjdXN0b21pc2VkIHZhbHVlIGZvciB0aGlzIGludGVyZmFjZSwgdGhlbgogCSAqIHJldHVybiBpdCBkaXJlY3RseQogCSAqLwpAQCAtMzExLDggJiM0MzszMDUsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9lbHBfcGVyaW9kaWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWdvdG8gb3V0OwogCiAJLyogd2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHNodXR0aW5nIHRoaXMgaW50ZXJmYWNlIGRvd24gKi8KLQlpZiAoaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8Ci0JICAgIGhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRCkKJiM0MzsJaWYgKGhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRCkKIAkJZ290byBvdXQ7CiAKIAkvKiB0aGUgaW50ZXJmYWNlIHdhcyBlbmFibGVkIGJ1dCBtYXkgbm90IGJlIHJlYWR5IHlldCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9vZ20uYwppbmRleCAwMzc5MjFhYWQzNWQ1OC4uZTkyMWQ0OWY3ZWNlZGQgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jCkBAIC0xMTUsMTQgJiM0MzsxMTUsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3N0YXJ0X3RpbWVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpCiAKIC8qKgogICogYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoKSAtIHNlbmQgYSBiYXRtYW4gb2dtIHVzaW5nIGEgZ2l2ZW4gaW50ZXJmYWNlCi0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KICAqIEBza2I6IHRoZSBPR00gdG8gc2VuZAogICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2UgdG8gdXNlIHRvIHNlbmQgdGhlIE9HTQogICovCi1zdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fc2VuZF90b19pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAotCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzO3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSkKIHsKJiM0MzsJc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UpOwomIzQzOwogCWlmIChoYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0FDVElWRSkgewogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuOwpAQCAtMTg5LDcgJiM0MzsxODksNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9saXN0X2ZyZWUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogCiAvKioKICAqIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoKSAtIGZsdXNoICZhbXA7IHNlbmQgYWdncmVnYXRpb24gcXVldWUKLSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvbgogICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUgYWdncmVnYXRpb24gcXVldWUgdG8gZmx1c2gKICAqCiAgKiBBZ2dyZWdhdGVzIGFsbCBPR012MiBwYWNrZXRzIGN1cnJlbnRseSBpbiB0aGUgYWdncmVnYXRpb24gcXVldWUgaW50byBhCkBAIC0xOTksOCAmIzQzOzE5OCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX2xpc3RfZnJlZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpCiAgKgogICogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGhhcmRfaWZhY2UtJmd0O2JhdF92LmFnZ3JfbGlzdC5sb2NrLgogICovCi1zdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCi0JCQkJICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQomIzQzO3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogewogCXVuc2lnbmVkIGludCBhZ2dyX2xlbiA9IGhhcmRfaWZhY2UtJmd0O2JhdF92LmFnZ3JfbGVuOwogCXN0cnVjdCBza19idWZmICpza2JfYWdncjsKQEAgLTIzMCwyNiAmIzQzOzIyOCwyMSBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCWNvbnN1bWVfc2tiKHNrYik7CiAJfQogCi0JYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoYmF0X3ByaXYsIHNrYl9hZ2dyLCBoYXJkX2lmYWNlKTsKJiM0MzsJYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoc2tiX2FnZ3IsIGhhcmRfaWZhY2UpOwogfQogCiAvKioKICAqIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZigpIC0gcXVldWUgYSBiYXRtYW4gb2dtIG9uIGEgZ2l2ZW4gaW50ZXJmYWNlCi0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KICAqIEBza2I6IHRoZSBPR00gdG8gcXVldWUKICAqIEBoYXJkX2lmYWNlOiB0aGUgaW50ZXJmYWNlIHRvIHF1ZXVlIHRoZSBPR00gb24KICAqLwotc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCi0JCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzO3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogewotCWlmIChoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlICE9IGJhdF9wcml2LSZndDttZXNoX2lmYWNlKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm47Ci0JfQomIzQzOwlzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSk7CiAKIAlpZiAoIVJFQURfT05DRShiYXRfcHJpdi0mZ3Q7YWdncmVnYXRlZF9vZ21zKSkgewotCQliYXRhZHZfdl9vZ21fc2VuZF90b19pZihiYXRfcHJpdiwgc2tiLCBoYXJkX2lmYWNlKTsKJiM0MzsJCWJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHNrYiwgaGFyZF9pZmFjZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI2MCw3ICYjNDM7MjUzLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJfQogCiAJaWYgKCFiYXRhZHZfdl9vZ21fcXVldWVfbGVmdChza2IsIGhhcmRfaWZhY2UpKQotCQliYXRhZHZfdl9vZ21fYWdncl9zZW5kKGJhdF9wcml2LCBoYXJkX2lmYWNlKTsKJiM0MzsJCWJhdGFkdl92X29nbV9hZ2dyX3NlbmQoaGFyZF9pZmFjZSk7CiAKIAloYXJkX2lmYWNlLSZndDtiYXRfdi5hZ2dyX2xlbiAmIzQzOz0gYmF0YWR2X3Zfb2dtX2xlbihza2IpOwogCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDtoYXJkX2lmYWNlLSZndDtiYXRfdi5hZ2dyX2xpc3QsIHNrYik7CkBAIC0zNTcsNyAmIzQzOzM1MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zZW5kX21lc2hpZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KQogCQkJYnJlYWs7CiAJCX0KIAotCQliYXRhZHZfdl9vZ21fcXVldWVfb25faWYoYmF0X3ByaXYsIHNrYl90bXAsIGhhcmRfaWZhY2UpOwomIzQzOwkJYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHNrYl90bXAsIGhhcmRfaWZhY2UpOwogCQliYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0zOTcsMTQgJiM0MzszOTAsMTIgQEAgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2VfYmF0X3YgKmJhdHY7CiAJc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlOwotCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7CiAKIAliYXR2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZV9iYXRfdiwgYWdncl93cS53b3JrKTsKIAloYXJkX2lmYWNlID0gY29udGFpbmVyX29mKGJhdHYsIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSwgYmF0X3YpOwotCWJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSk7CiAKIAlzcGluX2xvY2tfYmgoJmFtcDtoYXJkX2lmYWNlLSZndDtiYXRfdi5hZ2dyX2xpc3QubG9jayk7Ci0JYmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChiYXRfcHJpdiwgaGFyZF9pZmFjZSk7CiYjNDM7CWJhdGFkdl92X29nbV9hZ2dyX3NlbmQoaGFyZF9pZmFjZSk7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDtoYXJkX2lmYWNlLSZndDtiYXRfdi5hZ2dyX2xpc3QubG9jayk7CiAKIAliYXRhZHZfdl9vZ21fc3RhcnRfcXVldWVfdGltZXIoaGFyZF9pZmFjZSk7CkBAIC02MDEsNyAmIzQzOzU5Miw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9mb3J3YXJkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCSAgIGlmX291dGdvaW5nLSZndDtuZXRfZGV2LSZndDtuYW1lLCBudG9obChvZ21fZm9yd2FyZC0mZ3Q7dGhyb3VnaHB1dCksCiAJCSAgIG9nbV9mb3J3YXJkLSZndDt0dGwsIGlmX2luY29taW5nLSZndDtuZXRfZGV2LSZndDtuYW1lKTsKIAotCWJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihiYXRfcHJpdiwgc2tiLCBpZl9vdXRnb2luZyk7CiYjNDM7CWJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihza2IsIGlmX291dGdvaW5nKTsKIAogb3V0OgogCWJhdGFkdl9vcmlnX2lmaW5mb19wdXQob3JpZ19pZmluZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYwppbmRleCA1YzczZjZiYTE2Y2ZmMy4uZjlhMWZhZGY4ZGU5ZTQgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jCkBAIC0zNDQsNyAmIzQzOzM0NCw2IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwogCXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTsKIAl1OCAqaHdfc3JjOwogCXN0cnVjdCBiYXRhZHZfYmxhX2NsYWltX2RzdCBsb2NhbF9jbGFpbV9kZXN0OwogCV9fYmUzMiB6ZXJvaXAgPSAwOwpAQCAtMzU3LDE0ICYjNDM7MzU2LDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLAogCSAgICAgICBzaXplb2YobG9jYWxfY2xhaW1fZGVzdCkpOwogCWxvY2FsX2NsYWltX2Rlc3QudHlwZSA9IGNsYWltdHlwZTsKIAotCW1lc2hfaWZhY2UgPSBSRUFEX09OQ0UocHJpbWFyeV9pZi0mZ3Q7bWVzaF9pZmFjZSk7Ci0JaWYgKCFtZXNoX2lmYWNlKQotCQlnb3RvIG91dDsKLQogCXNrYiA9IGFycF9jcmVhdGUoQVJQT1BfUkVQTFksIEVUSF9QX0FSUCwKIAkJCSAvKiBJUCBEU1Q6IDAuMC4wLjAgKi8KIAkJCSB6ZXJvaXAsCi0JCQkgbWVzaF9pZmFjZSwKJiM0MzsJCQkgcHJpbWFyeV9pZi0mZ3Q7bWVzaF9pZmFjZSwKIAkJCSAvKiBJUCBTUkM6IDAuMC4wLjAgKi8KIAkJCSB6ZXJvaXAsCiAJCQkgLyogRXRoZXJuZXQgRFNUOiBCcm9hZGNhc3QgKi8KQEAgLTQ0Miw3ICYjNDM7NDM3LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsCiAJfQogCiAJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlza2ItJmd0O3Byb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBtZXNoX2lmYWNlKTsKJiM0MzsJc2tiLSZndDtwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcHJpbWFyeV9pZi0mZ3Q7bWVzaF9pZmFjZSk7CiAJYmF0YWR2X2luY19jb3VudGVyKGJhdF9wcml2LCBCQVRBRFZfQ05UX1JYKTsKIAliYXRhZHZfYWRkX2NvdW50ZXIoYmF0X3ByaXYsIEJBVEFEVl9DTlRfUlhfQllURVMsCiAJCQkgICBza2ItJmd0O2xlbiAmIzQzOyBFVEhfSExFTik7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jIGIvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYwppbmRleCAwM2QwMWMyMGE5NTQ4Yi4uYjY4Njc1NzZiYmFmYWUgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYwpAQCAtNjMsNiAmIzQzOzYzLDcgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKIAlzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7CiAKIAloYXJkX2lmYWNlID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlLCByZWZjb3VudCk7CiYjNDM7CW5ldGRldl9wdXQoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSwgJmFtcDtoYXJkX2lmYWNlLSZndDttZXNoaWZfZGV2X3RyYWNrZXIpOwogCW5ldGRldl9wdXQoaGFyZF9pZmFjZS0mZ3Q7bmV0X2RldiwgJmFtcDtoYXJkX2lmYWNlLSZndDtkZXZfdHJhY2tlcik7CiAKIAlrZnJlZV9yY3UoaGFyZF9pZmFjZSwgcmN1KTsKQEAgLTc1LDIxICYjNDM7NzYsMjEgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKICAqIFJldHVybjogYmF0YWR2X2hhcmRfaWZhY2Ugb2YgbmV0X2RldiAod2l0aCBpbmNyZWFzZWQgcmVmY250KSwgTlVMTCBvbiBlcnJvcnMKICAqLwogc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICoKLWJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKJiM0MztiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCiB7CiAJc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoYXJkX2lmYWNlLCAmYW1wO2JhdGFkdl9oYXJkaWZfbGlzdCwgbGlzdCkgewotCQlpZiAoaGFyZF9pZmFjZS0mZ3Q7bmV0X2RldiA9PSBuZXRfZGV2ICZhbXA7JmFtcDsKLQkJICAgIGtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7aGFyZF9pZmFjZS0mZ3Q7cmVmY291bnQpKQotCQkJZ290byBvdXQ7Ci0JfQomIzQzOwlBU1NFUlRfUlROTCgpOwogCi0JaGFyZF9pZmFjZSA9IE5VTEw7CiYjNDM7CW1lc2hfaWZhY2UgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobmV0X2Rldik7CiYjNDM7CWlmICghbWVzaF9pZmFjZSB8fCAhYmF0YWR2X21lc2hpZl9pc192YWxpZChtZXNoX2lmYWNlKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwloYXJkX2lmYWNlID0gbmV0ZGV2X2xvd2VyX2Rldl9nZXRfcHJpdmF0ZShtZXNoX2lmYWNlLCBuZXRfZGV2KTsKJiM0MzsJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmYW1wO2hhcmRfaWZhY2UtJmd0O3JlZmNvdW50KSkKJiM0MzsJCXJldHVybiBOVUxMOwogCi1vdXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGhhcmRfaWZhY2U7CiB9CiAKQEAgLTI0NSw3ICYjNDM7MjQ2LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKl9fYmF0YWR2X2dldF9yZWFsX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCX0KIAogCWhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYobmV0ZGV2KTsKLQlpZiAoIWhhcmRfaWZhY2UgfHwgIWhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UpCiYjNDM7CWlmICghaGFyZF9pZmFjZSkKIAkJZ290byBvdXQ7CiAKIAluZXQgPSBkZXZfbmV0KGhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UpOwpAQCAtNTM5LDE2ICYjNDM7NTQwLDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhCiAJY29uc3Qgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICp0bXBfaGFyZF9pZmFjZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOwogCi0JaWYgKCFtZXNoX2lmYWNlKQotCQlyZXR1cm47Ci0KIAluZXRkZXZfZm9yX2VhY2hfbG93ZXJfcHJpdmF0ZShtZXNoX2lmYWNlLCB0bXBfaGFyZF9pZmFjZSwgaXRlcikgewogCQlpZiAodG1wX2hhcmRfaWZhY2UgPT0gaGFyZF9pZmFjZSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICh0bXBfaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFKQotCQkJY29udGludWU7Ci0KIAkJaWYgKCFiYXRhZHZfY29tcGFyZV9ldGgodG1wX2hhcmRfaWZhY2UtJmd0O25ldF9kZXYtJmd0O2Rldl9hZGRyLAogCQkJCQloYXJkX2lmYWNlLSZndDtuZXRfZGV2LSZndDtkZXZfYWRkcikpCiAJCQljb250aW51ZTsKQEAgLTU3NCw5ICYjNDM7NTY5LDYgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2hhcmRpZl9yZWNhbGNfZXh0cmFfc2ticm9vbShzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSkKIAogCXJjdV9yZWFkX2xvY2soKTsKIAluZXRkZXZfZm9yX2VhY2hfbG93ZXJfcHJpdmF0ZV9yY3UobWVzaF9pZmFjZSwgaGFyZF9pZmFjZSwgaXRlcikgewotCQlpZiAoaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFKQotCQkJY29udGludWU7Ci0KIAkJbG93ZXJfaGVhZGVyX2xlbiA9IG1heF90KHVuc2lnbmVkIHNob3J0LCBsb3dlcl9oZWFkZXJfbGVuLAogCQkJCQkgaGFyZF9pZmFjZS0mZ3Q7bmV0X2Rldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuKTsKIApAQCAtNzIzLDM4ICYjNDM7NzE1LDYzIEBAIGJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQogfQogCiAvKioKLSAqIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSgpIC0gRW5zbGF2ZSBoYXJkIGludGVyZmFjZSB0byBtZXNoIGludGVyZmFjZQotICogQGhhcmRfaWZhY2U6IGhhcmQgaW50ZXJmYWNlIHRvIGFkZCB0byBtZXNoIGludGVyZmFjZQomIzQzOyAqIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSgpIC0gRW5zbGF2ZSBpbnRlcmZhY2UgdG8gbWVzaCBpbnRlcmZhY2UKJiM0MzsgKiBAbmV0X2RldjogbmV0ZGV2IHN0cnVjdCBvZiB0aGUgaW50ZXJmYWNlIHRvIGFkZCB0byBtZXNoIGludGVyZmFjZQogICogQG1lc2hfaWZhY2U6IG5ldGRldiBzdHJ1Y3Qgb2YgdGhlIG1lc2ggaW50ZXJmYWNlCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIGluIGNhc2Ugb2YgZmFpbHVyZQogICovCi1pbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSwKJiM0MztpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKQogewogCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7CiAJX19iZTE2IGV0aGVydHlwZSA9IGh0b25zKEVUSF9QX0JBVE1BTik7CiAJaW50IG1heF9oZWFkZXJfbGVuID0gYmF0YWR2X21heF9oZWFkZXJfbGVuKCk7CiYjNDM7CXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTsKIAl1bnNpZ25lZCBpbnQgcmVxdWlyZWRfbXR1OwogCXVuc2lnbmVkIGludCBoYXJkaWZfbXR1OwogCWJvb2wgZnJhZ21lbnRhdGlvbjsKIAlpbnQgcmV0OwogCi0JaGFyZGlmX210dSA9IFJFQURfT05DRShoYXJkX2lmYWNlLSZndDtuZXRfZGV2LSZndDttdHUpOwomIzQzOwlBU1NFUlRfUlROTCgpOwomIzQzOwomIzQzOwlpZiAoIWJhdGFkdl9pc192YWxpZF9pZmFjZShuZXRfZGV2KSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwloYXJkaWZfbXR1ID0gUkVBRF9PTkNFKG5ldF9kZXYtJmd0O210dSk7CiAJcmVxdWlyZWRfbXR1ID0gUkVBRF9PTkNFKG1lc2hfaWZhY2UtJmd0O210dSkgJiM0MzsgbWF4X2hlYWRlcl9sZW47CiAKIAlpZiAoaGFyZGlmX210dSAmbHQ7IEVUSF9NSU5fTVRVICYjNDM7IG1heF9oZWFkZXJfbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChoYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpCi0JCWdvdG8gb3V0OwomIzQzOwloYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpOwomIzQzOwlpZiAoIWhhcmRfaWZhY2UpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKIAotCWtyZWZfZ2V0KCZhbXA7aGFyZF9pZmFjZS0mZ3Q7cmVmY291bnQpOwomIzQzOwluZXRkZXZfaG9sZChuZXRfZGV2LCAmYW1wO2hhcmRfaWZhY2UtJmd0O2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKJiM0MzsJaGFyZF9pZmFjZS0mZ3Q7bmV0X2RldiA9IG5ldF9kZXY7CiYjNDM7CiYjNDM7CWhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9IEJBVEFEVl9JRl9JTkFDVElWRTsKJiM0MzsKJiM0MzsJSU5JVF9ITElTVF9IRUFEKCZhbXA7aGFyZF9pZmFjZS0mZ3Q7bmVpZ2hfbGlzdCk7CiYjNDM7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtoYXJkX2lmYWNlLSZndDtiYXRfaXYub2dtX2J1ZmZfbXV0ZXgpOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO2hhcmRfaWZhY2UtJmd0O25laWdoX2xpc3RfbG9jayk7CiYjNDM7CWtyZWZfaW5pdCgmYW1wO2hhcmRfaWZhY2UtJmd0O3JlZmNvdW50KTsKJiM0MzsKJiM0MzsJaGFyZF9pZmFjZS0mZ3Q7bnVtX2JjYXN0cyA9IEJBVEFEVl9OVU1fQkNBU1RTX0RFRkFVTFQ7CiYjNDM7CWlmIChiYXRhZHZfaXNfd2lmaV9oYXJkaWYoaGFyZF9pZmFjZSkpCiYjNDM7CQloYXJkX2lmYWNlLSZndDtudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfV0lSRUxFU1M7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoaGFyZF9pZmFjZS0mZ3Q7aG9wX3BlbmFsdHksIDApOwomIzQzOwomIzQzOwliYXRhZHZfdl9oYXJkaWZfaW5pdChoYXJkX2lmYWNlKTsKIAogCW5ldGRldl9ob2xkKG1lc2hfaWZhY2UsICZhbXA7aGFyZF9pZmFjZS0mZ3Q7bWVzaGlmX2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKIAloYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlID0gbWVzaF9pZmFjZTsKIAliYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UpOwogCiYjNDM7CWJhdF9wcml2LSZndDtoYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7CiAJcmV0ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGluayhoYXJkX2lmYWNlLSZndDtuZXRfZGV2LAogCQkJCQkgICBtZXNoX2lmYWNlLCBoYXJkX2lmYWNlLCBOVUxMLCBOVUxMKTsKIAlpZiAocmV0KQpAQCAtNzY0LDkgJiM0Mzs3ODEsNiBAQCBpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSwKIAlpZiAocmV0ICZsdDsgMCkKIAkJZ290byBlcnJfdXBwZXI7CiAKLQloYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgPSBCQVRBRFZfSUZfSU5BQ1RJVkU7Ci0KLQlrcmVmX2dldCgmYW1wO2hhcmRfaWZhY2UtJmd0O3JlZmNvdW50KTsKIAloYXJkX2lmYWNlLSZndDtiYXRtYW5fYWR2X3B0eXBlLnR5cGUgPSBldGhlcnR5cGU7CiAJaGFyZF9pZmFjZS0mZ3Q7YmF0bWFuX2Fkdl9wdHlwZS5mdW5jID0gYmF0YWR2X2JhdG1hbl9za2JfcmVjdjsKIAloYXJkX2lmYWNlLSZndDtiYXRtYW5fYWR2X3B0eXBlLmRldiA9IGhhcmRfaWZhY2UtJmd0O25ldF9kZXY7CkBAIC04MDIsMTQgJiM0Mzs4MTYsMTEgQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsCiAJaWYgKGJhdF9wcml2LSZndDthbGdvX29wcy0mZ3Q7aWZhY2UuZW5hYmxlZCkKIAkJYmF0X3ByaXYtJmd0O2FsZ29fb3BzLSZndDtpZmFjZS5lbmFibGVkKGhhcmRfaWZhY2UpOwogCi1vdXQ6CiAJcmV0dXJuIDA7CiAKIGVycl91cHBlcjoKIAluZXRkZXZfdXBwZXJfZGV2X3VubGluayhoYXJkX2lmYWNlLSZndDtuZXRfZGV2LCBtZXNoX2lmYWNlKTsKIGVycl9kZXY6Ci0JaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSA9IE5VTEw7Ci0JbmV0ZGV2X3B1dChtZXNoX2lmYWNlLCAmYW1wO2hhcmRfaWZhY2UtJmd0O21lc2hpZl9kZXZfdHJhY2tlcik7CiAJYmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgyMSwxNyAmIzQzOzgzMiwxOCBAQCBpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSwKIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpCiB7CiAJc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UpOwotCXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZiA9IE5VTEw7CiYjNDM7CXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKIAogCWJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7CiAKIAlpZiAoaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzICE9IEJBVEFEVl9JRl9JTkFDVElWRSkKLQkJZ290byBvdXQ7CiYjNDM7CQlyZXR1cm47CiAKIAliYXRhZHZfaW5mbyhoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlLCAmIzM0O1JlbW92aW5nIGludGVyZmFjZTogJXNcbiYjMzQ7LAogCQkgICAgaGFyZF9pZmFjZS0mZ3Q7bmV0X2Rldi0mZ3Q7bmFtZSk7CiAJZGV2X3JlbW92ZV9wYWNrKCZhbXA7aGFyZF9pZmFjZS0mZ3Q7YmF0bWFuX2Fkdl9wdHlwZSk7Ci0JYmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7CiAKIAlwcmltYXJ5X2lmID0gYmF0YWR2X3ByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTsKIAlpZiAoaGFyZF9pZmFjZSA9PSBwcmltYXJ5X2lmKSB7CkBAIC04NDIsMTUgJiM0Mzs4NTQsMTYgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSkKIAogCQliYXRhZHZfaGFyZGlmX3B1dChuZXdfaWYpOwogCX0KJiM0MzsJYmF0YWR2X2hhcmRpZl9wdXQocHJpbWFyeV9pZik7CiAKIAliYXRfcHJpdi0mZ3Q7YWxnb19vcHMtJmd0O2lmYWNlLmRpc2FibGUoaGFyZF9pZmFjZSk7Ci0JaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzID0gQkFUQURWX0lGX05PVF9JTl9VU0U7CiYjNDM7CWhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEOwogCiAJLyogZGVsZXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgaGFyZF9pZmFjZSAqLwogCWJhdGFkdl9wdXJnZV9vcmlnX3JlZihiYXRfcHJpdik7CiAJYmF0YWR2X3B1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoYmF0X3ByaXYsIGhhcmRfaWZhY2UpOwotCW5ldGRldl9wdXQoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSwgJmFtcDtoYXJkX2lmYWNlLSZndDttZXNoaWZfZGV2X3RyYWNrZXIpOwogCiYjNDM7CWJhdF9wcml2LSZndDtoYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7CiAJbmV0ZGV2X3VwcGVyX2Rldl91bmxpbmsoaGFyZF9pZmFjZS0mZ3Q7bmV0X2RldiwgaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSk7CiAJYmF0YWR2X2hhcmRpZl9yZWNhbGNfZXh0cmFfc2ticm9vbShoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlKTsKIApAQCAtODU4LDY3ICYjNDM7ODcxLDYgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSkKIAlpZiAobGlzdF9lbXB0eSgmYW1wO2hhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UtJmd0O2Fkal9saXN0Lmxvd2VyKSkKIAkJYmF0YWR2X2d3X2NoZWNrX2NsaWVudF9zdG9wKGJhdF9wcml2KTsKIAotCWhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UgPSBOVUxMOwotCWJhdGFkdl9oYXJkaWZfcHV0KGhhcmRfaWZhY2UpOwotCi1vdXQ6Ci0JYmF0YWR2X2hhcmRpZl9wdXQocHJpbWFyeV9pZik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKgotYmF0YWR2X2hhcmRpZl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQotewotCXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTsKLQotCUFTU0VSVF9SVE5MKCk7Ci0KLQlpZiAoIWJhdGFkdl9pc192YWxpZF9pZmFjZShuZXRfZGV2KSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQloYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpOwotCWlmICghaGFyZF9pZmFjZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQluZXRkZXZfaG9sZChuZXRfZGV2LCAmYW1wO2hhcmRfaWZhY2UtJmd0O2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTsKLQloYXJkX2lmYWNlLSZndDtuZXRfZGV2ID0gbmV0X2RldjsKLQotCWhhcmRfaWZhY2UtJmd0O21lc2hfaWZhY2UgPSBOVUxMOwotCWhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9IEJBVEFEVl9JRl9OT1RfSU5fVVNFOwotCi0JSU5JVF9MSVNUX0hFQUQoJmFtcDtoYXJkX2lmYWNlLSZndDtsaXN0KTsKLQlJTklUX0hMSVNUX0hFQUQoJmFtcDtoYXJkX2lmYWNlLSZndDtuZWlnaF9saXN0KTsKLQotCW11dGV4X2luaXQoJmFtcDtoYXJkX2lmYWNlLSZndDtiYXRfaXYub2dtX2J1ZmZfbXV0ZXgpOwotCXNwaW5fbG9ja19pbml0KCZhbXA7aGFyZF9pZmFjZS0mZ3Q7bmVpZ2hfbGlzdF9sb2NrKTsKLQlrcmVmX2luaXQoJmFtcDtoYXJkX2lmYWNlLSZndDtyZWZjb3VudCk7Ci0KLQloYXJkX2lmYWNlLSZndDtudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfREVGQVVMVDsKLQlpZiAoYmF0YWR2X2lzX3dpZmlfaGFyZGlmKGhhcmRfaWZhY2UpKQotCQloYXJkX2lmYWNlLSZndDtudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfV0lSRUxFU1M7Ci0KLQlXUklURV9PTkNFKGhhcmRfaWZhY2UtJmd0O2hvcF9wZW5hbHR5LCAwKTsKLQotCWJhdGFkdl92X2hhcmRpZl9pbml0KGhhcmRfaWZhY2UpOwotCi0Ja3JlZl9nZXQoJmFtcDtoYXJkX2lmYWNlLSZndDtyZWZjb3VudCk7Ci0JbGlzdF9hZGRfdGFpbF9yY3UoJmFtcDtoYXJkX2lmYWNlLSZndDtsaXN0LCAmYW1wO2JhdGFkdl9oYXJkaWZfbGlzdCk7Ci0JYmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uJiM0MzsmIzQzOzsKLQotCXJldHVybiBoYXJkX2lmYWNlOwotfQotCi1zdGF0aWMgdm9pZCBiYXRhZHZfaGFyZGlmX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKQotewotCUFTU0VSVF9SVE5MKCk7Ci0KLQkvKiBmaXJzdCBkZWFjdGl2YXRlIGludGVyZmFjZSAqLwotCWlmIChoYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpCi0JCWJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7Ci0KLQlpZiAoaGFyZF9pZmFjZS0mZ3Q7aWZfc3RhdHVzICE9IEJBVEFEVl9JRl9OT1RfSU5fVVNFKQotCQlyZXR1cm47Ci0KLQloYXJkX2lmYWNlLSZndDtpZl9zdGF0dXMgPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRDsKIAliYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTsKIH0KIApAQCAtMTA4MiwxMCAmIzQzOzEwMzQsNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9oYXJkX2lmX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKIAliYXRhZHZfd2lmaV9uZXRfZGV2aWNlX2V2ZW50KGV2ZW50LCBuZXRfZGV2KTsKIAogCWhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYobmV0X2Rldik7Ci0JaWYgKCFoYXJkX2lmYWNlICZhbXA7JmFtcDsgKGV2ZW50ID09IE5FVERFVl9SRUdJU1RFUiB8fAotCQkJICAgIGV2ZW50ID09IE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFKSkKLQkJaGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfYWRkX2ludGVyZmFjZShuZXRfZGV2KTsKLQogCWlmICghaGFyZF9pZmFjZSkKIAkJZ290byBvdXQ7CiAKQEAgLTEwOTksMTkgJiM0MzsxMDQ3LDEyIEBAIHN0YXRpYyBpbnQgYmF0YWR2X2hhcmRfaWZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAogCQlicmVhazsKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgogCWNhc2UgTkVUREVWX1BSRV9UWVBFX0NIQU5HRToKLQkJbGlzdF9kZWxfcmN1KCZhbXA7aGFyZF9pZmFjZS0mZ3Q7bGlzdCk7Ci0JCWJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiYjNDM7JiM0Mzs7Ci0KLQkJYmF0YWR2X2hhcmRpZl9yZW1vdmVfaW50ZXJmYWNlKGhhcmRfaWZhY2UpOwomIzQzOwkJYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfQ0hBTkdFTVRVOgotCQlpZiAoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSkKLQkJCWJhdGFkdl91cGRhdGVfbWluX210dShoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlKTsKJiM0MzsJCWJhdGFkdl91cGRhdGVfbWluX210dShoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfQ0hBTkdFQUREUjoKLQkJaWYgKGhhcmRfaWZhY2UtJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSkKLQkJCWdvdG8gaGFyZGlmX3B1dDsKLQogCQliYXRhZHZfY2hlY2tfa25vd25fbWFjX2FkZHIoaGFyZF9pZmFjZSk7CiAKIAkJYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlKTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmggYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oCmluZGV4IGFmMzE2OTZjMzk3ODA4Li45MzVmNDdjYTlhNDhmZCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oCkBAIC0yMSwxMiAmIzQzOzIxLDYgQEAKICAqIGVudW0gYmF0YWR2X2hhcmRfaWZfc3RhdGUgLSBTdGF0ZSBvZiBhIGhhcmQgaW50ZXJmYWNlCiAgKi8KIGVudW0gYmF0YWR2X2hhcmRfaWZfc3RhdGUgewotCS8qKgotCSAqIEBCQVRBRFZfSUZfTk9UX0lOX1VTRTogaW50ZXJmYWNlIGlzIG5vdCB1c2VkIGFzIHNsYXZlIGludGVyZmFjZSBvZiBhCi0JICogYmF0bWFuLWFkdiBtZXNoIGludGVyZmFjZQotCSAqLwotCUJBVEFEVl9JRl9OT1RfSU5fVVNFLAotCiAJLyoqCiAJICogQEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEOiBpbnRlcmZhY2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gbWVzaAogCSAqIGludGVyZmFjZQpAQCAtNzQsOCAmIzQzOzY4LDggQEAgdTMyIGJhdGFkdl9uZXRkZXZfZ2V0X3dpZmlfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwogdTMyIGJhdGFkdl9oYXJkaWZfZ2V0X3dpZmlfZmxhZ3Moc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKTsKIGJvb2wgYmF0YWR2X2lzX3dpZmlfaGFyZGlmKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSk7CiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UqCi1iYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwotaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsCiYjNDM7YmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKJiM0MztpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTsKIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpOwogaW50IGJhdGFkdl9oYXJkaWZfbWluX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmMgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmMKaW5kZXggM2M0NTcyMjg0YjUzMmYuLjA0YmIwMzBlZjI5OWFjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jCkBAIC01OSwxMSAmIzQzOzU5LDYgQEAKICNpbmNsdWRlICYjMzQ7dHBfbWV0ZXIuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3RyYW5zbGF0aW9uLXRhYmxlLmgmIzM0OwogCi0vKiBMaXN0IG1hbmlwdWxhdGlvbnMgb24gaGFyZGlmX2xpc3QgaGF2ZSB0byBiZSBydG5sX2xvY2soKSYjMzk7ZWQsCi0gKiBsaXN0IHRyYXZlcnNhbHMganVzdCByY3UtbG9ja2VkCi0gKi8KLXN0cnVjdCBsaXN0X2hlYWQgYmF0YWR2X2hhcmRpZl9saXN0OwotdW5zaWduZWQgaW50IGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbjsKIHN0YXRpYyBpbnQgKCpiYXRhZHZfcnhfaGFuZGxlclsyNTZdKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpyZWN2X2lmKTsKIApAQCAtOTUsNyAmIzQzOzkwLDYgQEAgc3RhdGljIGludCBfX2luaXQgYmF0YWR2X2luaXQodm9pZCkKIAlpZiAocmV0ICZsdDsgMCkKIAkJcmV0dXJuIHJldDsKIAotCUlOSVRfTElTVF9IRUFEKCZhbXA7YmF0YWR2X2hhcmRpZl9saXN0KTsKIAliYXRhZHZfYWxnb19pbml0KCk7CiAKIAliYXRhZHZfcmVjdl9oYW5kbGVyX2luaXQoKTsKQEAgLTQ1MCw5ICYjNDM7NDQ0LDYgQEAgaW50IGJhdGFkdl9iYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAodW5saWtlbHkoc2tiLSZndDttYWNfbGVuICE9IEVUSF9ITEVOIHx8ICFza2JfbWFjX2hlYWRlcihza2IpKSkKIAkJZ290byBlcnJfZnJlZTsKIAotCWlmICghaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSkKLQkJZ290byBlcnJfZnJlZTsKLQogCWJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZSk7CiAKIAlpZiAoUkVBRF9PTkNFKGJhdF9wcml2LSZndDttZXNoX3N0YXRlKSAhPSBCQVRBRFZfTUVTSF9BQ1RJVkUpCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmggYi9uZXQvYmF0bWFuLWFkdi9tYWluLmgKaW5kZXggZjY4ZmM4YjcyMzljZDUuLmU3Mzg3NThlZTRhN2FlIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9tYWluLmgKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5oCkBAIC0yMjYsOSAmIzQzOzIyNiw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJhdGFkdl9wcmludF92aWQodW5zaWduZWQgc2hvcnQgdmlkKQogCQlyZXR1cm4gLTE7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGJhdGFkdl9oYXJkaWZfbGlzdDsKLWV4dGVybiB1bnNpZ25lZCBpbnQgYmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uOwotCiBleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJhdGFkdl9ldmVudF93b3JrcXVldWU7CiAKIGludCBiYXRhZHZfbWVzaF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCmluZGV4IDQ0MDI2ODEwYjk5Y2VhLi5hMzczNjhjMWY1YjU1YyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCkBAIC04MzYsMTggJiM0Mzs4MzYsNyBAQCBzdGF0aWMgaW50IGJhdGFkdl9tZXNoaWZfc2xhdmVfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldiwKIAkJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spCiB7Ci0Jc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlOwotCWludCByZXQgPSAtRUlOVkFMOwotCi0JaGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihzbGF2ZV9kZXYpOwotCWlmICghaGFyZF9pZmFjZSB8fCBoYXJkX2lmYWNlLSZndDttZXNoX2lmYWNlKQotCQlnb3RvIG91dDsKLQotCXJldCA9IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlLCBkZXYpOwotCi1vdXQ6Ci0JYmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7Ci0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzbGF2ZV9kZXYsIGRldik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jIGIvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jCmluZGV4IDRjZjllM2M1NGFkM2IyLi5kMmJjNDhjNzA3MTQzNCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L25ldGxpbmsuYwpAQCAtOTY4LDcgJiM0Mzs5NjgsNyBAQCBiYXRhZHZfbmV0bGlua19kdW1wX2hhcmRpZihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiAJYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTsKIAogCXJ0bmxfbG9jaygpOwotCWNiLSZndDtzZXEgPSBiYXRhZHZfaGFyZGlmX2dlbmVyYXRpb24gJmx0OyZsdDsgMSB8IDE7CiYjNDM7CWNiLSZndDtzZXEgPSBiYXRfcHJpdi0mZ3Q7aGFyZGlmX2dlbmVyYXRpb24gJmx0OyZsdDsgMSB8IDE7CiAKIAluZXRkZXZfZm9yX2VhY2hfbG93ZXJfcHJpdmF0ZShtZXNoX2lmYWNlLCBoYXJkX2lmYWNlLCBpdGVyKSB7CiAJCWlmIChpJiM0MzsmIzQzOyAmbHQ7IHNraXApCkBAIC0xMjExLDcgJiM0MzsxMjExLDkgQEAgYmF0YWR2X25ldGxpbmtfZ2V0X2hhcmRpZl9mcm9tX2lmaW5kZXgoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAlpZiAoIWhhcmRfZGV2KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIAomIzQzOwlydG5sX2xvY2soKTsKIAloYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGhhcmRfZGV2KTsKJiM0MzsJcnRubF91bmxvY2soKTsKIAlpZiAoIWhhcmRfaWZhY2UpCiAJCWdvdG8gZXJyX3B1dF9oYXJkZGV2OwogCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMgYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKaW5kZXggOWIzOGJkOWU4ZGE3ZWMuLjQ4ZjgzN2NmNjY1YTJhIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jCkBAIC0xMDMzLDcgJiM0MzsxMDMzLDYgQEAgYmF0YWR2X3B1cmdlX25laWdoX2lmaW5mbyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCiAJCS8qIGRvbiYjMzk7dCBwdXJnZSBpZiB0aGUgaW50ZXJmYWNlIGlzIG5vdCAoZ29pbmcpIGRvd24gKi8KIAkJaWYgKGlmX291dGdvaW5nLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFICZhbXA7JmFtcDsKLQkJICAgIGlmX291dGdvaW5nLSZndDtpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UgJmFtcDsmYW1wOwogCQkgICAgaWZfb3V0Z29pbmctJmd0O2lmX3N0YXR1cyAhPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRCkKIAkJCWNvbnRpbnVlOwogCkBAIC0xMDc3LDcgJiM0MzsxMDc2LDYgQEAgYmF0YWR2X3B1cmdlX29yaWdfaWZpbmZvKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIAkJLyogZG9uJiMzOTt0IHB1cmdlIGlmIHRoZSBpbnRlcmZhY2UgaXMgbm90IChnb2luZykgZG93biAqLwogCQlpZiAoaWZfb3V0Z29pbmctJmd0O2lmX3N0YXR1cyAhPSBCQVRBRFZfSUZfSU5BQ1RJVkUgJmFtcDsmYW1wOwotCQkgICAgaWZfb3V0Z29pbmctJmd0O2lmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSAmYW1wOyZhbXA7CiAJCSAgICBpZl9vdXRnb2luZy0mZ3Q7aWZfc3RhdHVzICE9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKQogCQkJY29udGludWU7CiAKQEAgLTExMjcsMTAgJiM0MzsxMTI1LDggQEAgYmF0YWR2X3B1cmdlX29yaWdfbmVpZ2hib3JzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIAkJaWYgKGJhdGFkdl9oYXNfdGltZWRfb3V0KGxhc3Rfc2VlbiwgQkFUQURWX1BVUkdFX1RJTUVPVVQpIHx8CiAJCSAgICBpZl9pbmNvbWluZy0mZ3Q7aWZfc3RhdHVzID09IEJBVEFEVl9JRl9JTkFDVElWRSB8fAotCQkgICAgaWZfaW5jb21pbmctJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSB8fAogCQkgICAgaWZfaW5jb21pbmctJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRCkgewogCQkJaWYgKGlmX2luY29taW5nLSZndDtpZl9zdGF0dXMgPT0gQkFUQURWX0lGX0lOQUNUSVZFIHx8Ci0JCQkgICAgaWZfaW5jb21pbmctJmd0O2lmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSB8fAogCQkJICAgIGlmX2luY29taW5nLSZndDtpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpCiAJCQkJYmF0YWR2X2RiZyhCQVRBRFZfREJHX0JBVE1BTiwgYmF0X3ByaXYsCiAJCQkJCSAgICYjMzQ7bmVpZ2hib3IgcHVyZ2U6IG9yaWdpbmF0b3IgJXBNLCBuZWlnaGJvcjogJXBNLCBpZmFjZTogJXNcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuYyBiL25ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMKaW5kZXggYzJlZWE3ZGJjNDg4MzMuLjAwNDY3YWE3OWRlOWRjIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMKQEAgLTM1OCwyOCAmIzQzOzM1OCwxNiBAQCBiYXRhZHZfdHBfbGlzdF9maW5kX3NlbmRlcl9zZXNzaW9uKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QsCiB9CiAKIC8qKgotICogYmF0YWR2X3RwX3ZhcnNfY29tbW9uX3JlbGVhc2UoKSAtIHJlbGVhc2UgYmF0YWR2X3RwX3ZhcnNfY29tbW9uIGZyb20gbGlzdHMKJiM0MzsgKiBiYXRhZHZfdHBfc2VuZGVyX3JlbGVhc2UoKSAtIHJlbGVhc2UgYmF0YWR2X3RwX3NlbmRlcgogICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kCi0gKiBAcmVmOiBrcmVmIHBvaW50ZXIgb2YgdGhlIGJhdGFkdl90cF92YXJzX2NvbW1vbgomIzQzOyAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgYmF0YWR2X3RwX3NlbmRlcgogICovCi1zdGF0aWMgdm9pZCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQomIzQzO3N0YXRpYyB2b2lkIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQogewotCXN0cnVjdCBiYXRhZHZfdHBfdmFyc19jb21tb24gKnRwX3ZhcnM7Ci0Jc3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1biwgKnNhZmU7Ci0KLQl0cF92YXJzID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl90cF92YXJzX2NvbW1vbiwgcmVmY291bnQpOwotCi0JLyogbG9jayBzaG91bGQgbm90IGJlIG5lZWRlZCBiZWNhdXNlIHRoaXMgb2JqZWN0IGlzIG5vdyBvdXQgb2YgYW55Ci0JICogY29udGV4dCEKLQkgKi8KLQlzcGluX2xvY2tfYmgoJmFtcDt0cF92YXJzLSZndDt1bmFja2VkX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgJmFtcDt0cF92YXJzLSZndDt1bmFja2VkX2xpc3QsIGxpc3QpIHsKLQkJbGlzdF9kZWwoJmFtcDt1bi0mZ3Q7bGlzdCk7Ci0JCWtmcmVlKHVuKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDt0cF92YXJzLSZndDt1bmFja2VkX2xvY2spOwomIzQzOwlzdHJ1Y3QgYmF0YWR2X3RwX3NlbmRlciAqdHBfdmFyczsKIAotCWtmcmVlX3JjdSh0cF92YXJzLCByY3UpOwomIzQzOwl0cF92YXJzID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl90cF9zZW5kZXIsIGNvbW1vbi5yZWZjb3VudCk7CiYjNDM7CWtmcmVlX3JjdSh0cF92YXJzLCBjb21tb24ucmN1KTsKIH0KIAogLyoqCkBAIC0zOTIsNyAmIzQzOzM4MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9zZW5kZXJfcHV0KHN0cnVjdCBiYXRhZHZfdHBfc2VuZGVyICp0cF92YXJzKQogCWlmICghdHBfdmFycykKIAkJcmV0dXJuOwogCi0Ja3JlZl9wdXQoJmFtcDt0cF92YXJzLSZndDtjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF92YXJzX2NvbW1vbl9yZWxlYXNlKTsKJiM0MzsJa3JlZl9wdXQoJmFtcDt0cF92YXJzLSZndDtjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZSk7CiB9CiAKIC8qKgpAQCAtMTE0NSw5ICYjNDM7MTEzMyw2IEBAIHZvaWQgYmF0YWR2X3RwX3N0YXJ0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QsCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYW1wO3RwX3ZhcnMtJmd0O21vcmVfYnl0ZXMpOwogCWluaXRfY29tcGxldGlvbigmYW1wO3RwX3ZhcnMtJmd0O2ZpbmlzaGVkKTsKIAotCXNwaW5fbG9ja19pbml0KCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9saXN0KTsKLQogCXNwaW5fbG9ja19pbml0KCZhbXA7dHBfdmFycy0mZ3Q7Y2NfbG9jayk7CiAKIAl0cF92YXJzLSZndDtwcmVyYW5kb21fb2Zmc2V0ID0gMDsKQEAgLTEyNTEsNiAmIzQzOzEyMzYsMzMgQEAgYmF0YWR2X3RwX2xpc3RfZmluZF9yZWNlaXZlcl9zZXNzaW9uKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QKIAlyZXR1cm4gdHBfdmFyczsKIH0KIAomIzQzOy8qKgomIzQzOyAqIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKCkgLSByZWxlYXNlIGJhdGFkdl90cF9yZWNlaXZlcgomIzQzOyAqICBhbmQgcXVldWUgZm9yIGZyZWUgYWZ0ZXIgcmN1IGdyYWNlIHBlcmlvZAomIzQzOyAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgYmF0YWR2X3RwX3JlY2VpdmVyCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY2VpdmVyX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnM7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqc2FmZTsKJiM0MzsJc3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1bjsKJiM0MzsKJiM0MzsJdHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIsIGNvbW1vbi5yZWZjb3VudCk7CiYjNDM7CiYjNDM7CS8qIGxvY2sgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYmVjYXVzZSB0aGlzIG9iamVjdCBpcyBub3cgb3V0IG9mIGFueQomIzQzOwkgKiBjb250ZXh0IQomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dHBfdmFycy0mZ3Q7YWNrX3NlcW5vX2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsICZhbXA7dHBfdmFycy0mZ3Q7dW5hY2tlZF9saXN0LCBsaXN0KSB7CiYjNDM7CQlsaXN0X2RlbCgmYW1wO3VuLSZndDtsaXN0KTsKJiM0MzsJCWtmcmVlKHVuKTsKJiM0MzsJCXRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQtLTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3RwX3ZhcnMtJmd0O2Fja19zZXFub19sb2NrKTsKJiM0MzsKJiM0MzsJa2ZyZWVfcmN1KHRwX3ZhcnMsIGNvbW1vbi5yY3UpOwomIzQzO30KJiM0MzsKIC8qKgogICogYmF0YWR2X3RwX3JlY2VpdmVyX3B1dCgpIC0gZGVjcmVtZW50IHRoZSBiYXRhZHZfdHBfcmVjZWl2ZXIKICAqICByZWZjb3VudGVyIGFuZCBwb3NzaWJseSByZWxlYXNlIGl0CkBAIC0xMjYxLDcgJiM0MzsxMjczLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY2VpdmVyX3B1dChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKQogCWlmICghdHBfdmFycykKIAkJcmV0dXJuOwogCi0Ja3JlZl9wdXQoJmFtcDt0cF92YXJzLSZndDtjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF92YXJzX2NvbW1vbl9yZWxlYXNlKTsKJiM0MzsJa3JlZl9wdXQoJmFtcDt0cF92YXJzLSZndDtjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKTsKIH0KIAogLyoqCkBAIC0xMzA0LDEzICYjNDM7MTMxNiwxMyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjZWl2ZXJfc2h1dGRvd24oc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJaWYgKGJhdGFkdl90cF9saXN0X2RldGFjaCgmYW1wO3RwX3ZhcnMtJmd0O2NvbW1vbikpCiAJCWJhdGFkdl90cF9yZWNlaXZlcl9wdXQodHBfdmFycyk7CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsICZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbGlzdCwgbGlzdCkgewomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt0cF92YXJzLSZndDthY2tfc2Vxbm9fbG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgJmFtcDt0cF92YXJzLSZndDt1bmFja2VkX2xpc3QsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJmFtcDt1bi0mZ3Q7bGlzdCk7CiAJCWtmcmVlKHVuKTsKLQkJdHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfY291bnQtLTsKJiM0MzsJCXRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQtLTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9sb2NrKTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0cF92YXJzLSZndDthY2tfc2Vxbm9fbG9jayk7CiAKIAkvKiBkcm9wIHJlZmVyZW5jZSBvZiB0aW1lciAqLwogCWlmIChXQVJOX09OKGF0b21pY194Y2hnKCZhbXA7dHBfdmFycy0mZ3Q7cmVjZWl2aW5nLCAwKSAhPSAxKSkKQEAgLTE0MDMsNjkgJiM0MzsxNDE1LDEwNiBAQCBzdGF0aWMgaW50IGJhdGFkdl90cF9zZW5kX2FjayhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0LAogICovCiBzdGF0aWMgYm9vbCBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcihzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzLAogCQkJCQkgIHUzMiBzZXFubywgdTMyIHBheWxvYWRfbGVuKQotCV9fbXVzdF9ob2xkKCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbG9jaykKJiM0MzsJX19tdXN0X2hvbGQoJmFtcDt0cF92YXJzLSZndDthY2tfc2Vxbm9fbG9jaykKIHsKLQlzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqbmV3OwotCWJvb2wgYWRkZWQgPSBmYWxzZTsKLQotCW5ldyA9IGttYWxsb2Nfb2JqKCpuZXcsIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseSghbmV3KSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JbmV3LSZndDtzZXFubyA9IHNlcW5vOwotCW5ldy0mZ3Q7bGVuID0gcGF5bG9hZF9sZW47Ci0KLQkvKiBpZiB0aGUgbGlzdCBpcyBlbXB0eSBpbW1lZGlhdGVseSBhdHRhY2ggdGhpcyBuZXcgb2JqZWN0ICovCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9saXN0KSkgewotCQlsaXN0X2FkZCgmYW1wO25ldy0mZ3Q7bGlzdCwgJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9saXN0KTsKLQkJdHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfY291bnQmIzQzOyYjNDM7OwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKiBvdGhlcndpc2UgbG9vcCBvdmVyIHRoZSBsaXN0IGFuZCBlaXRoZXIgZHJvcCB0aGUgcGFja2V0IGJlY2F1c2UgdGhpcwotCSAqIGlzIGEgZHVwbGljYXRlIG9yIHN0b3JlIGl0IGF0IHRoZSByaWdodCBwb3NpdGlvbi4KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqcG9zID0gJmFtcDt0cF92YXJzLSZndDt1bmFja2VkX2xpc3Q7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqbmV3ID0gTlVMTDsKJiM0MzsJdTMyIGVuZF9zZXFubyA9IHNlcW5vICYjNDM7IHBheWxvYWRfbGVuOwomIzQzOwlzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnNhZmU7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqdW47CiYjNDM7CiYjNDM7CS8qIGxvb3Agb3ZlciB0aGUgbGlzdCB0byBmaW5kIGVpdGhlciBhbiBleGlzdGluZyBlbnRyeSB3aGljaCB0aGUgbmV3CiYjNDM7CSAqIHNlcW5vIHJhbmdlIGNhbiBiZSBtZXJnZWQgd2l0aCBvciB0aGUgcG9zaXRpb24gYXQgd2hpY2ggYSBuZXcgZW50cnkKJiM0MzsJICogaGFzIHRvIGJlIGluc2VydGVkLgogCSAqCiAJICogVGhlIGl0ZXJhdGlvbiBpcyBkb25lIGluIHRoZSByZXZlcnNlIHdheSBiZWNhdXNlIGl0IGlzIGxpa2VseSB0aGF0CiAJICogdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0ICh0aGUgb25lIGJlaW5nIHByb2Nlc3NlZCBub3cpIGhhcyBhIGJpZ2dlcgogCSAqIHNlcW5vIHRoYW4gYWxsIHRoZSBvdGhlcnMgYWxyZWFkeSBzdG9yZWQuCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCAmYW1wO3RwX3ZhcnMtJmd0O2NvbW1vbi51bmFja2VkX2xpc3QsIGxpc3QpIHsKLQkJLyogY2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi8KLQkJaWYgKG5ldy0mZ3Q7c2Vxbm8gPT0gdW4tJmd0O3NlcW5vKSB7Ci0JCQlpZiAobmV3LSZndDtsZW4gJmd0OyB1bi0mZ3Q7bGVuKQotCQkJCXVuLSZndDtsZW4gPSBuZXctJmd0O2xlbjsKLQkJCWtmcmVlKG5ldyk7Ci0JCQlhZGRlZCA9IHRydWU7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIGxvb2sgZm9yIHRoZSByaWdodCBwb3NpdGlvbiAqLwotCQlpZiAoYmF0YWR2X3NlcV9iZWZvcmUobmV3LSZndDtzZXFubywgdW4tJmd0O3NlcW5vKSkKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCAmYW1wO3RwX3ZhcnMtJmd0O3VuYWNrZWRfbGlzdCwgbGlzdCkgewomIzQzOwkJLyogbG9vayBmb3IgdGhlIHJpZ2h0IHBvc2l0aW9uIC0gYW4gdW4gd2hpY2ggaXMgc21hbGxlciAqLwomIzQzOwkJaWYgKGJhdGFkdl9zZXFfYmVmb3JlKHNlcW5vLCB1bi0mZ3Q7c2Vxbm8pKQogCQkJY29udGludWU7CiAKLQkJLyogYXMgc29vbiBhcyBhbiBlbnRyeSBoYXZpbmcgYSBiaWdnZXIgc2Vxbm8gaXMgZm91bmQsIHRoZSBuZXcKLQkJICogb25lIGlzIGF0dGFjaGVkIF9hZnRlcl8gaXQuIEluIHRoaXMgd2F5IHRoZSBsaXN0IGlzIGtlcHQgaW4KLQkJICogYXNjZW5kaW5nIG9yZGVyCiYjNDM7CQkvKiBzbWFsbGVyL2VxdWFsIHNlcW5vIHdhcyBmb3VuZCBidXQgdGhleSBtaWdodCBiZSBkaXJlY3RseQomIzQzOwkJICogYWZ0ZXIgYW5vdGhlciBvciBvdmVybGFwcGluZy4ga2VlcCBvbmx5IGEgc2luZ2xlIGVudHJ5CiYjNDM7CQkgKgomIzQzOwkJICogSXQgaXMgYWxyZWFkeSBrbm93biB0aGF0OgomIzQzOwkJICoKJiM0MzsJCSAqCXVuLSZndDtzZXFubyAmbHQ7PSBzZXFubwomIzQzOwkJICoKJiM0MzsJCSAqIFdoZW4gZXN0YWJsaXNoaW5nIHRoYXQ6CiYjNDM7CQkgKgomIzQzOwkJICoJc2Vxbm8gJmx0Oz0gdW4tJmd0O3NlcW5vICYjNDM7IHVuLSZndDtsZW4KJiM0MzsJCSAqCiYjNDM7CQkgKiBUaGVuIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gYWRkIGEgbmV3IGVudHJ5IGJlY2F1c2UgdGhlCiYjNDM7CQkgKiBzbWFsbGVyL2VxdWFsIHNlcW5vIG9mIHVuIG1pZ2h0IGFscmVhZHkgY29udGFpbiB0aGUgbmV3CiYjNDM7CQkgKiByZWNlaXZlZCBwYWNrZXQgb3Igd2Ugb25seSBhZGQgbmV3IGRhdGEgZGlyZWN0bHkgYWZ0ZXIKJiM0MzsJCSAqIHRoZSBlbmQgb2YgdW4uIFRoZSBsYXR0ZXIgY2FuIGJlIGlkZW50aWZpZWQgdXNpbmc6CiYjNDM7CQkgKgomIzQzOwkJICoJdW4tJmd0O3NlcW5vICYjNDM7IHVuLSZndDtsZW4gJmx0Oz0gZW5kX3NlcW5vCiAJCSAqLwotCQlsaXN0X2FkZCgmYW1wO25ldy0mZ3Q7bGlzdCwgJmFtcDt1bi0mZ3Q7bGlzdCk7Ci0JCWFkZGVkID0gdHJ1ZTsKLQkJdHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfY291bnQmIzQzOyYjNDM7OwomIzQzOwkJaWYgKCFiYXRhZHZfc2VxX2JlZm9yZSh1bi0mZ3Q7c2Vxbm8gJiM0MzsgdW4tJmd0O2xlbiwgc2Vxbm8pKSB7CiYjNDM7CQkJLyogbmV3IGRhdGEgZGlyZWN0bHkgYWZ0ZXIgdW4/ICovCiYjNDM7CQkJaWYgKCFiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLSZndDtzZXFubyAmIzQzOyB1bi0mZ3Q7bGVuKSkKJiM0MzsJCQkJdW4tJmd0O2xlbiA9IGVuZF9zZXFubyAtIHVuLSZndDtzZXFubzsKJiM0MzsKJiM0MzsJCQkvKiB1biBub3cgcmVwcmVzZW50cyBib3RoIG9sZCB1biAmIzQzOyBuZXcgcmFuZ2UgYW5kIGhhcyB0bwomIzQzOwkJCSAqIGJlIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGdhcCB0byB0aGUgbmV4dCBzZXFubyByYW5nZQomIzQzOwkJCSAqIHdhcyBjbG9zZWQKJiM0MzsJCQkgKi8KJiM0MzsJCQluZXcgPSB1bjsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogYXMgc29vbiBhcyBhbiBlbnRyeSBoYXZpbmcgYSBzbWFsbGVyIHNlcW5vIGlzIGZvdW5kLAomIzQzOwkJCSAqIHRoZSBuZXcgb25lIGlzIGF0dGFjaGVkIF9hZnRlcl8gaXQuIEluIHRoaXMgd2F5IHRoZQomIzQzOwkJCSAqIGxpc3QgaXMga2VwdCBpbiBhc2NlbmRpbmcgb3JkZXIKJiM0MzsJCQkgKi8KJiM0MzsJCQlwb3MgPSAmYW1wO3VuLSZndDtsaXN0OwomIzQzOwkJfQomIzQzOwogCQlicmVhazsKIAl9CiAKLQkvKiByZWNlaXZlZCBwYWNrZXQgd2l0aCBzbWFsbGVzdCBzZXFubyBvdXQgb2Ygb3JkZXI7IGFkZCBpdCB0byBmcm9udCAqLwotCWlmICghYWRkZWQpIHsKLQkJbGlzdF9hZGQoJmFtcDtuZXctJmd0O2xpc3QsICZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbGlzdCk7Ci0JCXRwX3ZhcnMtJmd0O2NvbW1vbi51bmFja2VkX2NvdW50JiM0MzsmIzQzOzsKJiM0MzsJLyogbm8gZW50cnkgdG8gbWVyZ2Ugd2l0aCB3YXMgZm91bmQ7IGluc2VydCBhIG5ldyBvbmUgYWZ0ZXIgdGhlIGVudHJ5CiYjNDM7CSAqIHdpdGggdGhlIG5leHQgc21hbGxlciBzZXFubyAob3IgYXQgdGhlIGZyb250IG9mIHRoZSBsaXN0IHdoZW4gdGhlCiYjNDM7CSAqIG5ldyBzZXFubyBpcyB0aGUgc21hbGxlc3Qgb3IgdGhlIGxpc3QgaXMgZW1wdHkpCiYjNDM7CSAqLwomIzQzOwlpZiAoIW5ldykgewomIzQzOwkJbmV3ID0ga21hbGxvY19vYmooKm5ldywgR0ZQX0FUT01JQyk7CiYjNDM7CQlpZiAodW5saWtlbHkoIW5ldykpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJbmV3LSZndDtzZXFubyA9IHNlcW5vOwomIzQzOwkJbmV3LSZndDtsZW4gPSBwYXlsb2FkX2xlbjsKJiM0MzsKJiM0MzsJCWxpc3RfYWRkKCZhbXA7bmV3LSZndDtsaXN0LCBwb3MpOwomIzQzOwkJdHBfdmFycy0mZ3Q7dW5hY2tlZF9jb3VudCYjNDM7JiM0Mzs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogY2hlY2sgaWYgbmV3IGZpbGxlZCB0aGUgZ2FwIHRvIHRoZSBuZXh0IGxpc3QgZW50cmllcyAqLwomIzQzOwl1biA9IG5ldzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVlKHVuLCBzYWZlLCAmYW1wO3RwX3ZhcnMtJmd0O3VuYWNrZWRfbGlzdCwgbGlzdCkgewomIzQzOwkJaWYgKGJhdGFkdl9zZXFfYmVmb3JlKGVuZF9zZXFubywgdW4tJmd0O3NlcW5vKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIG5leHQgZW50cnkgaXMgb3ZlcmxhcHBpbmcgb3IgYWRqYWNlbnQgLSBjb21iaW5lIGJvdGggKi8KJiM0MzsJCWlmIChiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLSZndDtzZXFubyAmIzQzOyB1bi0mZ3Q7bGVuKSkgewomIzQzOwkJCWVuZF9zZXFubyA9IHVuLSZndDtzZXFubyAmIzQzOyB1bi0mZ3Q7bGVuOwomIzQzOwkJCW5ldy0mZ3Q7bGVuID0gZW5kX3NlcW5vIC0gbmV3LSZndDtzZXFubzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWxpc3RfZGVsKCZhbXA7dW4tJmd0O2xpc3QpOwomIzQzOwkJa2ZyZWUodW4pOwomIzQzOwkJdHBfdmFycy0mZ3Q7dW5hY2tlZF9jb3VudC0tOwogCX0KIAogCS8qIHJlbW92ZSB0aGUgbGFzdCAoYmlnZ2VzdCkgdW5hY2tlZCBzZXFubyB3aGVuIGxpc3QgaXMgdG9vIGxhcmdlICovCi0JaWYgKHRwX3ZhcnMtJmd0O2NvbW1vbi51bmFja2VkX2NvdW50ICZndDsgQkFUQURWX1RQX01BWF9VTkFDS0VEKSB7Ci0JCXVuID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbGlzdCwKJiM0MzsJaWYgKHRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQgJmd0OyBCQVRBRFZfVFBfTUFYX1VOQUNLRUQpIHsKJiM0MzsJCXVuID0gbGlzdF9sYXN0X2VudHJ5KCZhbXA7dHBfdmFycy0mZ3Q7dW5hY2tlZF9saXN0LAogCQkJCSAgICAgc3RydWN0IGJhdGFkdl90cF91bmFja2VkLCBsaXN0KTsKIAkJbGlzdF9kZWwoJmFtcDt1bi0mZ3Q7bGlzdCk7CiAJCWtmcmVlKHVuKTsKLQkJdHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfY291bnQtLTsKJiM0MzsJCXRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQtLTsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTE0NzcsNyAmIzQzOzE1MjYsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcihzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzLAogICogQHRwX3ZhcnM6IHRoZSBwcml2YXRlIGRhdGEgb2YgdGhlIGN1cnJlbnQgVFAgbWV0ZXIgc2Vzc2lvbgogICovCiBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfYWNrX3Vub3JkZXJlZChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKQotCV9fbXVzdF9ob2xkKCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbG9jaykKJiM0MzsJX19tdXN0X2hvbGQoJmFtcDt0cF92YXJzLSZndDthY2tfc2Vxbm9fbG9jaykKIHsKIAlzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqc2FmZTsKIAl1MzIgdG9fYWNrOwpAQCAtMTQ4NSw3ICYjNDM7MTUzNCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9hY2tfdW5vcmRlcmVkKHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMpCiAJLyogZ28gdGhyb3VnaCB0aGUgdW5hY2tlZCBwYWNrZXQgbGlzdCBhbmQgcG9zc2libHkgQUNLIHRoZW0gYXMKIAkgKiB3ZWxsCiAJICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuLCBzYWZlLCAmYW1wO3RwX3ZhcnMtJmd0O2NvbW1vbi51bmFja2VkX2xpc3QsIGxpc3QpIHsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuLCBzYWZlLCAmYW1wO3RwX3ZhcnMtJmd0O3VuYWNrZWRfbGlzdCwgbGlzdCkgewogCQkvKiB0aGUgbGlzdCBpcyBvcmRlcmVkLCB0aGVyZWZvcmUgaXQgaXMgcG9zc2libGUgdG8gc3RvcCBhcyBzb29uCiAJCSAqIHRoZXJlIGlzIGEgZ2FwIGJldHdlZW4gdGhlIGxhc3QgYWNrZWQgc2Vxbm8gYW5kIHRoZSBzZXFubyBvZgogCQkgKiB0aGUgcGFja2V0IHVuZGVyIGluc3BlY3Rpb24KQEAgLTE0OTMsMTQgJiM0MzsxNTQyLDE0IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9hY2tfdW5vcmRlcmVkKHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnMpCiAJCWlmIChiYXRhZHZfc2VxX2JlZm9yZSh0cF92YXJzLSZndDtsYXN0X3JlY3YsIHVuLSZndDtzZXFubykpCiAJCQlicmVhazsKIAotCQl0b19hY2sgPSB1bi0mZ3Q7c2Vxbm8gJiM0MzsgdW4tJmd0O2xlbiAtIHRwX3ZhcnMtJmd0O2xhc3RfcmVjdjsKJiM0MzsJCXRvX2FjayA9IHVuLSZndDtzZXFubyAmIzQzOyB1bi0mZ3Q7bGVuOwogCi0JCWlmIChiYXRhZHZfc2VxX2JlZm9yZSh0cF92YXJzLSZndDtsYXN0X3JlY3YsIHVuLSZndDtzZXFubyAmIzQzOyB1bi0mZ3Q7bGVuKSkKLQkJCXRwX3ZhcnMtJmd0O2xhc3RfcmVjdiAmIzQzOz0gdG9fYWNrOwomIzQzOwkJaWYgKGJhdGFkdl9zZXFfYmVmb3JlKHRwX3ZhcnMtJmd0O2xhc3RfcmVjdiwgdG9fYWNrKSkKJiM0MzsJCQl0cF92YXJzLSZndDtsYXN0X3JlY3YgPSB0b19hY2s7CiAKIAkJbGlzdF9kZWwoJmFtcDt1bi0mZ3Q7bGlzdCk7CiAJCWtmcmVlKHVuKTsKLQkJdHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfY291bnQtLTsKJiM0MzsJCXRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQtLTsKIAl9CiB9CiAKQEAgLTE1NDcsOSAmIzQzOzE1OTYsOSBAQCBiYXRhZHZfdHBfaW5pdF9yZWN2KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJdHBfdmFycy0mZ3Q7Y29tbW9uLmJhdF9wcml2ID0gYmF0X3ByaXY7CiAJa3JlZl9pbml0KCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnJlZmNvdW50KTsKIAotCXNwaW5fbG9ja19pbml0KCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9saXN0KTsKLQl0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9jb3VudCA9IDA7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7dHBfdmFycy0mZ3Q7YWNrX3NlcW5vX2xvY2spOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3RwX3ZhcnMtJmd0O3VuYWNrZWRfbGlzdCk7CiYjNDM7CXRwX3ZhcnMtJmd0O3VuYWNrZWRfY291bnQgPSAwOwogCiAJa3JlZl9nZXQoJmFtcDt0cF92YXJzLSZndDtjb21tb24ucmVmY291bnQpOwogCXRpbWVyX3NldHVwKCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnRpbWVyLCBiYXRhZHZfdHBfcmVjZWl2ZXJfc2h1dGRvd24sIDApOwpAQCAtMTYwOSw3ICYjNDM7MTY1OCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWN2X21zZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQlXUklURV9PTkNFKHRwX3ZhcnMtJmd0O2xhc3RfcmVjdl90aW1lLCBqaWZmaWVzKTsKIAl9CiAKLQlzcGluX2xvY2tfYmgoJmFtcDt0cF92YXJzLSZndDtjb21tb24udW5hY2tlZF9sb2NrKTsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dHBfdmFycy0mZ3Q7YWNrX3NlcW5vX2xvY2spOwogCiAJLyogaWYgdGhlIHBhY2tldCBpcyBhIGR1cGxpY2F0ZSwgaXQgbWF5IGJlIHRoZSBjYXNlIHRoYXQgYW4gQUNLIGhhcyBiZWVuCiAJICogbG9zdC4gUmVzZW5kIHRoZSBBQ0sKQEAgLTE2MjUsNyAmIzQzOzE2NzQsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjdl9tc2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJICogbm90IGJlZW4gZW5xdWV1ZWQgY29ycmVjdGx5CiAJCSAqLwogCQlpZiAoIWJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyKHRwX3ZhcnMsIHNlcW5vLCBwYXlsb2FkX2xlbikpIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZhbXA7dHBfdmFycy0mZ3Q7Y29tbW9uLnVuYWNrZWRfbG9jayk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDt0cF92YXJzLSZndDthY2tfc2Vxbm9fbG9jayk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC0xNjQxLDcgJiM0MzsxNjkwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY3ZfbXNnKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIHNlbmRfYWNrOgogCXRvX2FjayA9IHRwX3ZhcnMtJmd0O2xhc3RfcmVjdjsKLQlzcGluX3VubG9ja19iaCgmYW1wO3RwX3ZhcnMtJmd0O2NvbW1vbi51bmFja2VkX2xvY2spOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3RwX3ZhcnMtJmd0O2Fja19zZXFub19sb2NrKTsKIAogCS8qIHNlbmQgdGhlIEFDSy4gSWYgdGhlIHJlY2VpdmVkIHBhY2tldCB3YXMgb3V0IG9mIG9yZGVyLCB0aGUgQUNLIHRoYXQKIAkgKiBpcyBnb2luZyB0byBiZSBzZW50IGlzIGEgZHVwbGljYXRlICh0aGUgc2VuZGVyIHdpbGwgY291bnQgdGhlbSBhbmQKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3R2bHYuYyBiL25ldC9iYXRtYW4tYWR2L3R2bHYuYwppbmRleCAxYzlmYjIxOTg1ZjZhNS4uNDliZjJlZDllY2RjMzkgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L3R2bHYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi90dmx2LmMKQEAgLTQ0Miw2ICYjNDM7NDQyLDU0IEBAIHN0YXRpYyBpbnQgYmF0YWR2X3R2bHZfY2FsbF9oYW5kbGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYmF0YWR2X3R2bHZfaGRyX25leHQoKSAtIG1vdmUgYSB0dmx2IGJ1ZmZlciBjdXJzb3IgdG8gdGhlIG5leHQgY29udGFpbmVyCiYjNDM7ICogQHR2bHZfdmFsdWU6IGN1cnNvciBpbnRvIHRoZSB0dmx2IGJ1ZmZlciwgYWR2YW5jZWQgcGFzdCB0aGUgcmV0dXJuZWQKJiM0MzsgKiAgY29udGFpbmVyJiMzOTtzIGNvbnRlbnQgb24gc3VjY2VzcwomIzQzOyAqIEB0dmx2X3ZhbHVlX2xlbjogcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgdHZsdiBidWZmZXIsIHJlZHVjZWQgYnkgdGhlIHJldHVybmVkCiYjNDM7ICogIGNvbnRhaW5lciYjMzk7cyBzaXplIG9uIHN1Y2Nlc3MKJiM0MzsgKgomIzQzOyAqIFBhcnNlcyBhIHNpbmdsZSBjb250YWluZXIgaGVhZGVyIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBhbmQsIGlmIGEKJiM0MzsgKiBjb21wbGV0ZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLCBhZHZhbmNlcyB0aGUgY3Vyc29yIGFuZCByZW1haW5pbmcgbGVuZ3RoCiYjNDM7ICogcGFzdCBpdC4gVGhlIHJldHVybmVkIGhlYWRlciBzdGF5cyB2YWxpZDsgaXRzIGNvbnRlbnQgaXMgbG9jYXRlZCBhdAomIzQzOyAqIChyZXR1cm5lZCBoZWFkZXIgJiM0MzsgMSkgYW5kIGlzIG50b2hzKGhkci0mZ3Q7bGVuKSBieXRlcyBsb25nLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBuZXh0IHR2bHYgY29udGFpbmVyIGhlYWRlciwgb3IgTlVMTCBpZiBubyBmdXJ0aGVyCiYjNDM7ICogY29tcGxldGUgY29udGFpbmVyIGlzIHByZXNlbnQgaW4gdGhlIGJ1ZmZlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgc3RydWN0IGJhdGFkdl90dmx2X2hkciAqYmF0YWR2X3R2bHZfaGRyX25leHQodm9pZCAqKnR2bHZfdmFsdWUsIHUxNiAqdHZsdl92YWx1ZV9sZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmF0YWR2X3R2bHZfaGRyICp0dmx2X2hkcjsKJiM0MzsJdTE2IHR2bHZfdmFsdWVfY29udF9sZW47CiYjNDM7CXZvaWQgKnR2bHZfdmFsdWVfY29udDsKJiM0MzsJdTE2IHR2bHZfbGVuOwomIzQzOwomIzQzOwl0dmx2X3ZhbHVlX2NvbnQgPSAqdHZsdl92YWx1ZTsKJiM0MzsJdHZsdl9sZW4gPSAqdHZsdl92YWx1ZV9sZW47CiYjNDM7CiYjNDM7CWlmICh0dmx2X2xlbiAmbHQ7IHNpemVvZigqdHZsdl9oZHIpKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXR2bHZfaGRyID0gdHZsdl92YWx1ZV9jb250OwomIzQzOwl0dmx2X3ZhbHVlX2NvbnRfbGVuID0gbnRvaHModHZsdl9oZHItJmd0O2xlbik7CiYjNDM7CXR2bHZfdmFsdWVfY29udCA9IHR2bHZfaGRyICYjNDM7IDE7CiYjNDM7CXR2bHZfbGVuIC09IHNpemVvZigqdHZsdl9oZHIpOwomIzQzOwomIzQzOwlpZiAodHZsdl92YWx1ZV9jb250X2xlbiAmZ3Q7IHR2bHZfbGVuKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CS8qIHRoZSBuZXh0IHR2bHYgaGVhZGVyIGlzIGFjY2Vzc2VkIGFzc3VtaW5nIChhdCBsZWFzdCkgMi1ieXRlCiYjNDM7CSAqIGFsaWdubWVudCwgc28gaXQgbXVzdCBzdGFydCBhdCBhbiBldmVuIG9mZnNldC4KJiM0MzsJICovCiYjNDM7CWlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuICZhbXA7IDEpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJKnR2bHZfdmFsdWUgPSAodTggKil0dmx2X3ZhbHVlX2NvbnQgJiM0MzsgdHZsdl92YWx1ZV9jb250X2xlbjsKJiM0MzsJKnR2bHZfdmFsdWVfbGVuID0gdHZsdl9sZW4gLSB0dmx2X3ZhbHVlX2NvbnRfbGVuOwomIzQzOwomIzQzOwlyZXR1cm4gdHZsdl9oZHI7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW4oKSAtIGNoZWNrIGlmIGEgdHZsdiBidWZmZXIgaG9sZHMgYSBjb250YWluZXIKICAqIEB0dmx2X3ZhbHVlOiB0dmx2IGNvbnRlbnQKQEAgLTQ1NywyOCAmIzQzOzUwNSwxMCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW4odm9pZCAqdHZsdl92YWx1ZSwKIAkJCQkJICAgdTggdmVyc2lvbikKIHsKIAlzdHJ1Y3QgYmF0YWR2X3R2bHZfaGRyICp0dmx2X2hkcjsKLQl1MTYgdHZsdl92YWx1ZV9jb250X2xlbjsKLQotCXdoaWxlICh0dmx2X3ZhbHVlX2xlbiAmZ3Q7PSBzaXplb2YoKnR2bHZfaGRyKSkgewotCQl0dmx2X2hkciA9IHR2bHZfdmFsdWU7Ci0JCXR2bHZfdmFsdWVfY29udF9sZW4gPSBudG9ocyh0dmx2X2hkci0mZ3Q7bGVuKTsKLQkJdHZsdl92YWx1ZSA9IHR2bHZfaGRyICYjNDM7IDE7Ci0JCXR2bHZfdmFsdWVfbGVuIC09IHNpemVvZigqdHZsdl9oZHIpOwotCi0JCWlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuICZndDsgdHZsdl92YWx1ZV9sZW4pCi0JCQlicmVhazsKLQotCQkvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZQotCQkgKiBhbGlnbm1lbnQsIHNvIGl0IG11c3Qgc3RhcnQgYXQgYW4gZXZlbiBvZmZzZXQuCi0JCSAqLwotCQlpZiAodHZsdl92YWx1ZV9jb250X2xlbiAmYW1wOyAxKQotCQkJYnJlYWs7CiAKJiM0MzsJd2hpbGUgKCh0dmx2X2hkciA9IGJhdGFkdl90dmx2X2hkcl9uZXh0KCZhbXA7dHZsdl92YWx1ZSwgJmFtcDt0dmx2X3ZhbHVlX2xlbikpKSB7CiAJCWlmICh0dmx2X2hkci0mZ3Q7dHlwZSA9PSB0eXBlICZhbXA7JmFtcDsgdHZsdl9oZHItJmd0O3ZlcnNpb24gPT0gdmVyc2lvbikKIAkJCXJldHVybiB0cnVlOwotCi0JCXR2bHZfdmFsdWUgPSAodTggKil0dmx2X3ZhbHVlICYjNDM7IHR2bHZfdmFsdWVfY29udF9sZW47Ci0JCXR2bHZfdmFsdWVfbGVuIC09IHR2bHZfdmFsdWVfY29udF9sZW47CiAJfQogCiAJcmV0dXJuIGZhbHNlOwpAQCAtNTExLDIwICYjNDM7NTQxLDggQEAgaW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCXU4IGNpZm5vdGZvdW5kID0gQkFUQURWX1RWTFZfSEFORExFUl9PR01fQ0lGTk9URk5EOwogCWludCByZXQgPSBORVRfUlhfU1VDQ0VTUzsKIAotCXdoaWxlICh0dmx2X3ZhbHVlX2xlbiAmZ3Q7PSBzaXplb2YoKnR2bHZfaGRyKSkgewotCQl0dmx2X2hkciA9IHR2bHZfdmFsdWU7CiYjNDM7CXdoaWxlICgodHZsdl9oZHIgPSBiYXRhZHZfdHZsdl9oZHJfbmV4dCgmYW1wO3R2bHZfdmFsdWUsICZhbXA7dHZsdl92YWx1ZV9sZW4pKSkgewogCQl0dmx2X3ZhbHVlX2NvbnRfbGVuID0gbnRvaHModHZsdl9oZHItJmd0O2xlbik7Ci0JCXR2bHZfdmFsdWUgPSB0dmx2X2hkciAmIzQzOyAxOwotCQl0dmx2X3ZhbHVlX2xlbiAtPSBzaXplb2YoKnR2bHZfaGRyKTsKLQotCQlpZiAodHZsdl92YWx1ZV9jb250X2xlbiAmZ3Q7IHR2bHZfdmFsdWVfbGVuKQotCQkJYnJlYWs7Ci0KLQkJLyogdGhlIG5leHQgdHZsdiBoZWFkZXIgaXMgYWNjZXNzZWQgYXNzdW1pbmcgKGF0IGxlYXN0KSAyLWJ5dGUKLQkJICogYWxpZ25tZW50LCBzbyBpdCBtdXN0IHN0YXJ0IGF0IGFuIGV2ZW4gb2Zmc2V0LgotCQkgKi8KLQkJaWYgKHR2bHZfdmFsdWVfY29udF9sZW4gJmFtcDsgMSkKLQkJCWJyZWFrOwogCiAJCXR2bHZfaGFuZGxlciA9IGJhdGFkdl90dmx2X2hhbmRsZXJfZ2V0KGJhdF9wcml2LAogCQkJCQkJICAgICAgIHR2bHZfaGRyLSZndDt0eXBlLApAQCAtNTMyLDExICYjNDM7NTUwLDkgQEAgaW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCiAJCXJldCB8PSBiYXRhZHZfdHZsdl9jYWxsX2hhbmRsZXIoYmF0X3ByaXYsIHR2bHZfaGFuZGxlciwKIAkJCQkJCXBhY2tldF90eXBlLCBvcmlnX25vZGUsIHNrYiwKLQkJCQkJCXR2bHZfdmFsdWUsCiYjNDM7CQkJCQkJdHZsdl9oZHIgJiM0MzsgMSwKIAkJCQkJCXR2bHZfdmFsdWVfY29udF9sZW4pOwogCQliYXRhZHZfdHZsdl9oYW5kbGVyX3B1dCh0dmx2X2hhbmRsZXIpOwotCQl0dmx2X3ZhbHVlID0gKHU4ICopdHZsdl92YWx1ZSAmIzQzOyB0dmx2X3ZhbHVlX2NvbnRfbGVuOwotCQl0dmx2X3ZhbHVlX2xlbiAtPSB0dmx2X3ZhbHVlX2NvbnRfbGVuOwogCX0KIAogCWlmIChwYWNrZXRfdHlwZSAhPSBCQVRBRFZfSVZfT0dNICZhbXA7JmFtcDsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3R5cGVzLmggYi9uZXQvYmF0bWFuLWFkdi90eXBlcy5oCmluZGV4IGIxZjlmODk2NGMzZmQyLi5jZDEyNzU1ZDIxZjM1NiAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi90eXBlcy5oCkBAIC0yMTQsOSAmIzQzOzIxNCw2IEBAIHN0cnVjdCBiYXRhZHZfd2lmaV9uZXRfZGV2aWNlX3N0YXRlIHsKICAqIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAtIG5ldHdvcmsgZGV2aWNlIGtub3duIHRvIGJhdG1hbi1hZHYKICAqLwogc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlIHsKLQkvKiogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgYmF0YWR2X2hhcmRpZl9saXN0ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCiAJLyoqIEBpZl9zdGF0dXM6IHN0YXR1cyBvZiB0aGUgaW50ZXJmYWNlIGZvciBiYXRtYW4tYWR2ICovCiAJY2hhciBpZl9zdGF0dXM7CiAKQEAgLTEzMzUsOSAmIzQzOzEzMzIsOSBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgewogCXUzMiBzZXFubzsKIAogCS8qKiBAbGVuOiBsZW5ndGggb2YgdGhlIHBhY2tldCAqLwotCXUxNiBsZW47CiYjNDM7CXUzMiBsZW47CiAKLQkvKiogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgJmFtcDtiYXRhZHZfdHBfdmFyc19jb21tb24udW5hY2tlZF9saXN0ICovCiYjNDM7CS8qKiBAbGlzdDogbGlzdCBub2RlIGZvciAmYW1wO2JhdGFkdl90cF9yZWNlaXZlci51bmFja2VkX2xpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCkBAIC0xMzYwLDE1ICYjNDM7MTM1Nyw2IEBAIHN0cnVjdCBiYXRhZHZfdHBfdmFyc19jb21tb24gewogCS8qKiBAc2Vzc2lvbjogVFAgc2Vzc2lvbiBpZGVudGlmaWVyICovCiAJdTggc2Vzc2lvblsyXTsKIAotCS8qKiBAdW5hY2tlZF9saXN0OiBsaXN0IG9mIHVuYWNrZWQgcGFja2V0cyAobWV0YS1pbmZvIG9ubHkpICovCi0Jc3RydWN0IGxpc3RfaGVhZCB1bmFja2VkX2xpc3Q7Ci0KLQkvKiogQHVuYWNrZWRfbG9jazogcHJvdGVjdCB1bmFja2VkX2xpc3QgJiM0MzsgJmFtcDtiYXRhZHZfdHBfcmVjZWl2ZXIubGFzdF9yZWN2ICovCi0Jc3BpbmxvY2tfdCB1bmFja2VkX2xvY2s7Ci0KLQkvKiogQHVuYWNrZWRfY291bnQ6IG51bWJlciBvZiB1bmFja2VkIGVudHJpZXMgKi8KLQlzaXplX3QgdW5hY2tlZF9jb3VudDsKLQogCS8qKiBAcmVmY291bnQ6IG51bWJlciBvZiBjb250ZXh0IHdoZXJlIHRoZSBvYmplY3QgaXMgdXNlZCAqLwogCXN0cnVjdCBrcmVmIHJlZmNvdW50OwogCkBAIC0xNDgyLDYgJiM0MzsxNDcwLDE1IEBAIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgewogCiAJLyoqIEBsYXN0X3JlY3ZfdGltZTogdGltZSAoamlmZmllcykgYSBtc2cgd2FzIHJlY2VpdmVkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3JlY3ZfdGltZTsKJiM0MzsKJiM0MzsJLyoqIEB1bmFja2VkX2xpc3Q6IGxpc3Qgb2YgdW5hY2tlZCBwYWNrZXRzIChtZXRhLWluZm8gb25seSkgKi8KJiM0MzsJc3RydWN0IGxpc3RfaGVhZCB1bmFja2VkX2xpc3Q7CiYjNDM7CiYjNDM7CS8qKiBAYWNrX3NlcW5vX2xvY2s6IHByb3RlY3QgdW5hY2tlZF9saXN0ICYjNDM7ICZhbXA7YmF0YWR2X3RwX3JlY2VpdmVyLmxhc3RfcmVjdiAqLwomIzQzOwlzcGlubG9ja190IGFja19zZXFub19sb2NrOwomIzQzOwomIzQzOwkvKiogQHVuYWNrZWRfY291bnQ6IG51bWJlciBvZiB1bmFja2VkIGVudHJpZXMgKi8KJiM0MzsJc2l6ZV90IHVuYWNrZWRfY291bnQ7CiB9OwogCiAvKioKQEAgLTE2NzksNiAmIzQzOzE2NzYsOSBAQCBzdHJ1Y3QgYmF0YWR2X3ByaXYgewogCS8qKiBAdHBfbnVtOiBudW1iZXIgb2YgY3VycmVudGx5IGFjdGl2ZSB0cCBzZXNzaW9ucyAqLwogCWF0b21pY190IHRwX251bTsKIAomIzQzOwkvKiogQGhhcmRpZl9nZW5lcmF0aW9uOiBnZW5lcmF0aW9uIGNvdW50ZXIgYWRkZWQgdG8gbmV0bGluayBoYXJkaWYgZHVtcHMgKi8KJiM0MzsJdW5zaWduZWQgaW50IGhhcmRpZl9nZW5lcmF0aW9uOwomIzQzOwogCS8qKiBAb3JpZ193b3JrOiB3b3JrIHF1ZXVlIGNhbGxiYWNrIGl0ZW0gZm9yIG9yaWcgbm9kZSBwdXJnaW5nICovCiAJc3RydWN0IGRlbGF5ZWRfd29yayBvcmlnX3dvcms7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgUGF0Y2ggZm9yIGJhdG1hbi1hZHYqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRhcmdldGluZyB0aGUgYG5ldC9iYXRtYW4tYWR2L2AgZGlyZWN0b3J5IGluIHRoZSBrZXJuZWwuICBSaWdodCBvZmYgdGhlIGJhdCwgaXQmIzM5O3MgcHJldHR5IGV4dGVuc2l2ZSwgdG91Y2hpbmcgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBjb2RlIOKAkyBhIGNsZWFyIGluZGljYXRpb24gb2Ygc29tZSBwcmV0dHkgc3Vic3RhbnRpYWwgYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzLiAgV2UmIzM5O3JlIGxvb2tpbmcgYXQgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGZpbGVzOiBgYmF0X2l2X29nbS5jYCwgYGJhdF92X2VscC5jYCwgYGJhdF92X29nbS5jYCwgYGJyaWRnZV9sb29wX2F2b2lkYW5jZS5jYCwgYGhhcmQtaW50ZXJmYWNlLmNgLCBgbWFpbi5jYCwgYG1lc2gtaW50ZXJmYWNlLmNgLCBgbmV0bGluay5jYCwgYG9yaWdpbmF0b3IuY2AsIGB0cF9tZXRlci5jYCwgYHR2bHYuY2AsIGFuZCBgdHlwZXMuaGAuICBUaW1lIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKRmlyc3QgcGFzcyBzZWVtcyB0byBiZSBjbGVhbnVwOgoKKiAgIEluIHRoZSBgYmF0X2l2X29nbS5jYCBhbmQgYGJhdF92X2VscC5jYCBmaWxlcywgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBzb21lIGRlYWQgY29kZSBiZWluZyByZW1vdmVkLCBwYXJ0aWN1bGFybHkgY2hlY2tzIHJlbGF0ZWQgdG8gaW50ZXJmYWNlIHN0YXRlcyBhbmQgb3V0Z29pbmcgcGFja2V0IGNvbmRpdGlvbnMuIExvb2tzIGxpa2UgYEJBVEFEVl9JRl9OT1RfSU5fVVNFYCBzdGF0ZSBpcyBub3cgZ29uZS4KCiogICBJbiBgYmF0X3Zfb2dtLmNgIGFuZCBgYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgLCBpdCBzZWVtcyB3ZSYjMzk7cmUgc3RyZWFtbGluaW5nIGFyZ3VtZW50IHBhc3NpbmcsIHNwZWNpZmljYWxseSByZW1vdmluZyBgYmF0X3ByaXZgIGFuZCByZWx5aW5nIG9uIHRoZSBgaGFyZF9pZmFjZS0mZ3Q7bWVzaF9pZmFjZWAgcmVsYXRpb25zaGlwIGZvciBjb250ZXh0LiBUaGlzIHN1Z2dlc3RzIGEgc2hpZnQgaW4gaG93IHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhcmUgYmVpbmcgb3JnYW5pemVkIGFuZCBhY2Nlc3NlZC4KCiogICBgaGFyZC1pbnRlcmZhY2UuY2AgaXMgd2hlcmUgdGhpbmdzIHN0YXJ0IHRvIGdldCBpbnRlcmVzdGluZy4gIFRoaXMgaXMgd2hlcmUgdGhlIGludGVyZmFjZSBoYW5kbGluZyBpcyB1bmRlcmdvaW5nIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3IuICBXZSBzZWUgY2hhbmdlcyB0byBgYmF0YWR2X2hhcmRpZl9yZWxlYXNlYCwgYGJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldmAsIGFuZCBhIHNpZ25pZmljYW50IHNpZ25hdHVyZSBjaGFuZ2UgZm9yIGBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VgLiAgSXQmIzM5O3MgY2xlYXIgdGhlIHdheSBoYXJkd2FyZSBpbnRlcmZhY2VzIGFyZSBtYW5hZ2VkIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaXMgYmVpbmcgcmV3b3JrZWQuIFRoZSByZW1vdmFsIG9mIHRoZSBhZGQvcmVtb3ZlIGludGVyZmFjZSBmdW5jdGlvbnMgKHdpdGggZXZlbnRzIGJlaW5nIGhhbmRsZWQgYSBkaWZmZXJlbnQgd2F5KSBpcyBhIHJlZCBmbGFnIC0gaXQgbWVhbnMgdGhlIGxpZmVjeWNsZSBvZiB0aGUgaW50ZXJmYWNlcyBoYXZlIGJlZW4gcmV3cml0dGVuLgoKKiAgIFRoZSBtb2RpZmljYXRpb25zIHRvIGB0cF9tZXRlci5jYCBhcmUgbm90YWJsZS4gIFNwbGl0dGluZyBgYmF0YWR2X3RwX3ZhcnNfY29tbW9uX3JlbGVhc2VgLCBtb3ZpbmcgdGhlIGB1bmFja2VkX2xpc3RgLCBhbmQgdGhlIGBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcmAgcmV3cml0ZSBhcmUgaW5kaWNhdGl2ZSBvZiBjaGFuZ2VzIHRvIGhvdyBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgaGFuZGxlcyB0aHJvdWdocHV0IGFuZCBzZXF1ZW5jZSBoYW5kbGluZy4gIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhLCBzbyBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGlzIG9uZS4KCiogICBGaW5hbGx5LCB0aGUgYWRkaXRpb24gb2YgYGJhdGFkdl90dmx2X2hkcl9uZXh0YCBpbiBgdHZsdi5jYCBzdWdnZXN0cyBhIG1vcmUgcm9idXN0IGFuZCBzYWZlciBtZXRob2QgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIFR5cGUtTGVuZ3RoLVZhbHVlIChUTFYpIGNvbnRhaW5lcnMuCgpPdmVyYWxsLCBJIHNlZSBhIGNsZWFyIGRpcmVjdGlvbiBoZXJlOgoKMS4gICoqUmVmYWN0b3JpbmcgYW5kIGNsZWFudXA6KiogUmVtb3ZhbCBvZiB1bm5lY2Vzc2FyeSBjaGVja3MsIGNvbnNvbGlkYXRpb24gb2YgZGF0YSBhY2Nlc3MuCjIuICAqKkludGVyZmFjZSBNYW5hZ2VtZW50IFJld29yazoqKiAgQSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaGFyZHdhcmUgaW50ZXJmYWNlcyBhcmUgaGFuZGxlZCwgbGlrZWx5IGZvciBiZXR0ZXIgaW50ZWdyYXRpb24gb3IgbW9yZSBmbGV4aWJsZSBjb25maWd1cmF0aW9uLgozLiAgKipUaHJvdWdocHV0ICZhbXA7IFNlcXVlbmNlIEhhbmRsaW5nOioqIEltcHJvdmVtZW50cyB0byB0aHJvdWdocHV0IG1lYXN1cmVtZW50IGFuZCBvdXQtb2Ytb3JkZXIgcGFja2V0IHByb2Nlc3NpbmcsIHdoaWNoIGltcGFjdHMgcmVsaWFiaWxpdHkgYW5kIGVmZmljaWVuY3kuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbGx5IGltcGFjdGZ1bCBjaGFuZ2UsIGNsZWFybHkuICBUaGVzZSBtb2RpZmljYXRpb25zIHJ1biBkZWVwIGludG8gdGhlIGNvcmUgbG9naWMsIHdoaWNoIG1lYW5zIGl0IHNob3VsZCBhYnNvbHV0ZWx5IGJlIHRob3JvdWdobHkgZnV6emVkLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UmIzM5O3ZlIGNvdmVyZWQgdGhlIGludGVyYWN0aW9ucyBpbiB0aGlzIGFyY2hpdGVjdHVyZS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiAgYENPTkZJR19CQVRNQU5fQURWYCBpcyB0aGUgcHJpbWFyeSBvbmUsIG9idmlvdXNseS4gIGB0cF9tZXRlcmAgaXMgbGlrZWx5IGVuYWJsZWQgdGhyb3VnaCBhIGZldyBvcHRpb25zOiBJIHN1c3BlY3QgYENPTkZJR19CQVRNQU5fQURWX0RBVGAsIGBDT05GSUdfQkFUTUFOX0FEVl9OQ2AsIG9yIHBlcmhhcHMganVzdCBlbmFibGVkIGJ5IGRlZmF1bHQgd2l0aCBgQ09ORklHX0JBVE1BTl9BRFZgLiAgVGltZSB0byBjaGVjayB0aGUgYG5ldC9iYXRtYW4tYWR2L0tjb25maWdgIGZpbGUgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQkFUTUFOX0FEViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvS2NvbmZpZy05LVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzoxMDpjb25maWcgQkFUTUFOX0FEVlxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0xMS1cdHRyaXN0YXRlIFwmIzM0O0IuQS5ULk0uQS5OLiBBZHZhbmNlZCBNZXNoaW5nIFByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0xOS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MjA6Y29uZmlnIEJBVE1BTl9BRFZfQkFUTUFOX1Zcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMjEtXHRib29sIFwmIzM0O0IuQS5ULk0uQS5OLiBWIHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0zMy1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MzQ6Y29uZmlnIEJBVE1BTl9BRFZfQkxBXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtCcmlkZ2UgTG9vcCBBdm9pZGFuY2VcJiMzNDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTQ2LVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo0Nzpjb25maWcgQkFUTUFOX0FEVl9EQVRcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNDgtXHRib29sIFwmIzM0O0Rpc3RyaWJ1dGVkIEFSUCBUYWJsZVwmIzM0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNTYtXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjU3OmNvbmZpZyBCQVRNQU5fQURWX01DQVNUXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTU4LVx0Ym9vbCBcJiMzNDtNdWx0aWNhc3Qgb3B0aW1pc2F0aW9uXCYjMzQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy02NS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6NjY6Y29uZmlnIEJBVE1BTl9BRFZfREVCVUdcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNjctXHRib29sIFwmIzM0O0IuQS5ULk0uQS5OLiBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTc0LVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo3NTpjb25maWcgQkFUTUFOX0FEVl9UUkFDSU5HXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTc2LVx0Ym9vbCBcJiMzNDtCLkEuVC5NLkEuTi4gdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NTAKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0OgoKKipQYXRjaCBJbXBhY3QgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZ29pbmcgdG8gYWZmZWN0IG91ciBCQVRNQU4gY29kZSwgbm8gcXVlc3Rpb24uIEkgc2VlIGl0IHRvdWNoaW5nIGBiYXRfdl9lbHAuY2AgYW5kIGBiYXRfdl9vZ20uY2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIEJBVE1BTl9WIGltcGxlbWVudGF0aW9uLCBzbyB3ZSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW1wYWN0IHRoZSBleGlzdGluZyBWIHByb3RvY29sIGxvZ2ljIGFuZCBwZXJmb3JtYW5jZS4KClRoZW4sIHRoZXJlJiMzOTtzIGBicmlkZ2VfbG9vcF9hdm9pZGFuY2UuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgdGhlIGhlYXJ0IG9mIEJBVE1BTl9BRFYmIzM5O3MgQnJpZGdlIExvb3AgQXZvaWRhbmNlIChCTEEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaW1wYWN0IG9uIG91ciBsb29wIGRldGVjdGlvbiBhbmQgcHJldmVudGlvbiBtZWNoYW5pc21zLiBXZSYjMzk7bGwgbmVlZCB0byBzY3J1dGluaXplIHRoZXNlIGNoYW5nZXMgdGhvcm91Z2hseSB0byBlbnN1cmUgdGhleSBkb24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHRoZXJlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgdmFyaW91cyBCTEEgY29uZmlndXJhdGlvbiBvcHRpb25zLgoKRmluYWxseSwgd2UgaGF2ZSBgdHBfbWV0ZXIuY2AuIE5vdywgdGhhdCBvbmUgaXMgbGVzcyBpbW1lZGlhdGVseSBvYnZpb3VzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhhdCBtb2R1bGUgbGl2ZXMuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBgbmV0L2JhdG1hbi1hZHYvTWFrZWZpbGVgIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgY29yZSB0byBiYXRtYW4tYWR2IG9yIGEgbW9kdWxlIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWQuIEkgc3VzcGVjdCBpdCYjMzk7cyBjb3JlLCBidXQgYmVzdCB0byBiZSBzdXJlLiBUaGF0JiMzOTtzIHByb2JhYmx5IHJlbGF0ZWQgdG8gdGhyb3VnaHB1dCBtZXRlcmluZyBzbyB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIGFmZmVjdCBhbnkgcmVsYXRlZCBwZXJmb3JtYW5jZSBtZXRyaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RwX21ldGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU9Mjk9YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX1RSQUNJTkcpICYjNDM7PSB0cmFjZS5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZTozMDpiYXRtYW4tYWR2LXkgJiM0Mzs9IHRwX21ldGVyLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlLTMxLWJhdG1hbi1hZHYteSAmIzQzOz0gdHJhbnNsYXRpb24tdGFibGUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMDU5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIGJ1aWxkIHByb2Nlc3MsIGZvY3VzaW5nIG9uIGB0cF9tZXRlci5jYCB3aXRoaW4gdGhlIEJBVE1BTi1BRFYgY29udGV4dDoKCioqQW5hbHl6aW5nIHRoZSBCQVRNQU4tQURWIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBrbm93IHRoYXQgYHRwX21ldGVyLmNgIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgaWYgYEJBVE1BTl9BRFZgIGlzIHR1cm5lZCBvbi4gVGhhdCYjMzk7cyBhIGdpdmVuLCBub3RoaW5nIG5ldyB0aGVyZS4gTWFrZXMgc2Vuc2UsIGl0JiMzOTtzIGEgY29yZSBjb21wb25lbnQuCgpOb3csIGxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgQkFUTUFOX0FEVl9CQVRNQU5fVmAgYW5kIGBCQVRNQU5fQURWX0JMQWAgYXJlIGFsc28gZW5hYmxlZCBhbG9uZ3NpZGUgaXQuIFRoYXQgY29uZmlndXJhdGlvbiBpcyBjcnVjaWFsOyBpdCBkcml2ZXMgdGhlIGZ1bmN0aW9uYWxpdHkuIEdvdHRhIHZlcmlmeSB0aG9zZSBhcmUgc2V0IGFwcHJvcHJpYXRlbHkuCgpUbyBjb25maXJtIGhvdyB0aGUgb2JqZWN0IGZpbGVzIGFyZSBtYW5hZ2VkLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZWAuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgc2VhcmNoIGZvciBgYmF0X3ZfZWxwLm9gIGFuZCBgYmF0X3Zfb2dtLm9gIHdpdGhpbiB0aGF0IE1ha2VmaWxlLiBUaGUgYnVpbGQgcHJvY2VzcyBkZXRhaWxzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgZGVwZW5kZW5jeSBjaGFpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1vZHVsZXMgYXJlIGxpbmtlZCBhbmQgYnVpbHQgcmVsYXRpdmUgdG8gYHRwX21ldGVyLmNgIHdoZW4gdGhlIHZhcmlvdXMgQkFUTUFOLUFEViBmZWF0dXJlcyBhcmUgYWN0aXZlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdF92JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU9OD1iYXRtYW4tYWR2LXkgJiM0Mzs9IGJhdF9pdl9vZ20ub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6OTpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1YpICYjNDM7PSBiYXRfdi5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxMDpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1YpICYjNDM7PSBiYXRfdl9lbHAub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTE6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WKSAmIzQzOz0gYmF0X3Zfb2dtLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlLTEyLWJhdG1hbi1hZHYteSAmIzQzOz0gYml0YXJyYXkub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTkwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBc3Nlc3NtZW50IG9mIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCB0aGUgaW5pdGlhbCBhZmZpcm1hdGlvbiBvZiBgQkFUTUFOX0FEVl9CQVRNQU5fVmAgaXMgc3BvdCBvbi4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG5lY2Vzc2l0eS4gTm93LCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgcG90ZW50aWFsIHJlbGF0ZWQgYXJlYSB0aGF0IHdhcnJhbnRzIGNsb3NlciBzY3J1dGlueS4gV2hhdCBhYm91dCBgYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgPyBDb25zaWRlcmluZyB0aGUgbmVlZCBmb3IgQmF0bWFuLWFkdiBmdW5jdGlvbmFsaXR5LCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBicmlkZ2UgbG9vcCBhdm9pZGFuY2UgbG9naWMgaXMgcm9idXN0IGFuZCBjb3JyZWN0bHkgaW50ZXJhY3RzIHdpdGggdGhlIG5ldyB2ZXJzaW9uLiBUaGUgaW50ZXJhY3Rpb24gb2YgdGhlIGJyaWRnZSBsb29wIGF2b2lkYW5jZSBjb2RlIHdpdGggdGhpcyB2ZXJzaW9uIGlzIHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIHRob3JvdWdoIGluc3BlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyaWRnZV9sb29wX2F2b2lkYW5jZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L01ha2VmaWxlPTEyPWJhdG1hbi1hZHYteSAmIzQzOz0gYml0YXJyYXkub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTM6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0JMQSkgJiM0Mzs9IGJyaWRnZV9sb29wX2F2b2lkYW5jZS5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZS0xNC1iYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfREFUKSAmIzQzOz0gZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMjE6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4OTgKCQkJCQkJCW91dHB1dDogOTQKCQkJCQkJCXRob3VnaHRzOiA3NzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgRnVuY3Rpb25zIGZvciBGdXp6aW5nKioKCkFscmlnaHQsIHRoZSBvYmplY3RpdmUgaXMgY2xlYXI6IHdlJiMzOTtyZSB0YXJnZXRpbmcgYEJBVE1BTl9BRFZfQkxBYCBhbmQgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmdXp6LiBUaGUgaW5pdGlhbCBzdGVwIGlzIGFsd2F5cyB0byBwaW5wb2ludCB0aGUgY29yZSBtb2R1bGVzIHRoYXQgYXJlIHRvdWNoZWQgYnkgdGhlIHBhdGNoLiBJJiMzOTt2ZSBxdWlja2x5IHNjYW5uZWQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgaWRlbnRpZmllZCBhIHN1YnN0YW50aWFsIGxpc3QuCgpOb3cgY29tZXMgdGhlIGNydWNpYWwgcGFydCDigJMgZGlzdGlsbGluZyB0aGUgY2FuZGlkYXRlcyBmb3IgZnV6emluZy4gSSYjMzk7dmUgbmFycm93ZWQgZG93biB0aGUgbGlzdCBiYXNlZCBvbiBwb3RlbnRpYWwgZm9yIGV4dGVybmFsIGludGVyYWN0aW9uLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgZW50cnkgcG9pbnRzIHRoYXQgY2FuIGJlIHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuIEFmdGVyIGEgcXVpY2sgYXNzZXNzbWVudCwgdGhlIGluaXRpYWwgZnJvbnRydW5uZXJzIGFyZTogYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlYCwgYGJhdGFkdl9oYXJkX2lmX2V2ZW50YCwgYGJhdGFkdl9tZXNoaWZfc2xhdmVfYWRkYCwgYGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyYCwgYGJhdGFkdl90cF9yZWN2X21zZ2AsIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgLCBhbmQgYGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbmAuCgpJJiMzOTt2ZSB0YWtlbiBhIGRlZXBlciBkaXZlIG9uIGEgZmV3IG9mIHRoZXNlLCB0byBjb25maXJtIHJlYWNoYWJpbGl0eS4gIGBiYXRhZHZfdHBfcmVjdl9tc2dgIGlzIHJlYWNoYWJsZSB2aWEgaW5jb21pbmcgVFAgbWV0ZXIgbWVzc2FnZXM7IGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgIHZpYSBpbmNvbWluZyBUVkxWIGNvbnRhaW5lcnM7IGBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VgIHZpYSBhZGRpbmcgYSBzbGF2ZSB0byBhIG1lc2ggaW50ZXJmYWNlLCB3aGljaCBjYW4gaGFwcGVuIHZpYSBuZXRsaW5rIG9yIHN5c2ZzOyBhbmQgZmluYWxseSwgYGJhdGFkdl9tZXNoaWZfc2xhdmVfYWRkYCBpcyB0aGUgbmV0ZGV2X29wcyBgbmRvX2FkZF9zbGF2ZWAgZnVuY3Rpb24gZm9yIHRoZSBtZXNoIGludGVyZmFjZS4KClVsdGltYXRlbHksIEkmIzM5O20gY29uZmlkZW50IGFib3V0IHByb2NlZWRpbmcgd2l0aCB0aGVzZSBzaXggZnVuY3Rpb25zIGZvciBvdXIgZm9jdXNlZCBmdXp6aW5nIGVmZm9ydDogYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlYCwgYGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyYCwgYGJhdGFkdl90cF9yZWN2X21zZ2AsIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgIGFuZCBgYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluYC4KCk5leHQsIEkmIzM5O2xsIHBlcmZvcm0gYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmVuJiMzOTt0IHN0YXRpYyBpbmxpbmUsIGVuc3VyaW5nIHdlIGNhbiBwcm9wZXJseSBpbnN0cnVtZW50IGFuZCB0YXJnZXQgdGhlbSB3aXRoIHRoZSBmdXp6ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oc3RhdGljICk/KHZvaWR8aW50fGJvb2x8c3RydWN0IGJhdGFkdl90dmx2X2hkciBcXCopIGJhdGFkdl8oaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2V8aGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlfHRwX2hhbmRsZV9vdXRfb2Zfb3JkZXJ8dHBfcmVjdl9tc2d8dHZsdl9jb250YWluZXJzX3Byb2Nlc3N8dHZsdl9jb250YWluZXJzX2NvbnRhaW4pJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM9NzAzPWJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuLS1cbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtNzIzLSAqL1xubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYzo3MjQ6aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldixcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtNzI1LVx0XHRcdFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXG4tLVxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy04MzEtICovXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jOjgzMjp2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy04MzMte1xuLS1cbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmg9NzE9YmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTtcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmg6NzI6aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldixcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgtNzMtXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7XG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oOjc0OnZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaC03NS1pbnQgYmF0YWR2X2hhcmRpZl9taW5fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jPTEzNDY9c3RhdGljIGludCBiYXRhZHZfdHBfc2VuZF9hY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdCxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jLTE0MTUtICovXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jOjE0MTY6c3RhdGljIGJvb2wgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXIoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycyxcbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMtMTQxNy1cdFx0XHRcdFx0ICB1MzIgc2Vxbm8sIHUzMiBwYXlsb2FkX2xlbilcbi0tXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jPTE1NjQ9YmF0YWR2X3RwX2luaXRfcmVjdihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMtMTYyNS0gKi9cbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmM6MTYyNjpzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjdl9tc2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMtMTYyNy1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvYmF0bWFuLWFkdi90dmx2LmM9NDYwPXN0YXRpYyBzdHJ1Y3QgYmF0YWR2X3R2bHZfaGRyICpiYXRhZHZfdHZsdl9oZHJfbmV4dCh2b2lkICoqdHZsdl92YWx1ZSwgdTE2ICp0dmx2X3ZhbHVlX2xlbilcbi0tXG5uZXQvYmF0bWFuLWFkdi90dmx2LmMtNTAyLSAqL1xubmV0L2JhdG1hbi1hZHYvdHZsdi5jOjUwMzpzdGF0aWMgYm9vbCBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW4odm9pZCAqdHZsdl92YWx1ZSxcbm5ldC9iYXRtYW4tYWR2L3R2bHYuYy01MDQtXHRcdFx0XHRcdCAgIHUxNiB0dmx2X3ZhbHVlX2xlbiwgdTggdHlwZSxcbi0tXG5uZXQvYmF0bWFuLWFkdi90dmx2LmMtNTI5LSAqL1xubmV0L2JhdG1hbi1hZHYvdHZsdi5jOjUzMDppbnQgYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG5uZXQvYmF0bWFuLWFkdi90dmx2LmMtNTMxLVx0XHRcdFx0ICAgdTggcGFja2V0X3R5cGUsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHZsdi5oPTQwPXZvaWQgYmF0YWR2X3R2bHZfaGFuZGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG5uZXQvYmF0bWFuLWFkdi90dmx2LmgtNDEtXHRcdFx0XHQgICAgdTggdHlwZSwgdTggdmVyc2lvbik7XG5uZXQvYmF0bWFuLWFkdi90dmx2Lmg6NDI6aW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvdHZsdi5oLTQzLVx0XHRcdFx0ICAgdTggcGFja2V0X3R5cGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDIxOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1Mjc1CgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDY5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZm9yIGZ1enppbmcgcHVycG9zZXMuIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQuIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIHNlZW0gdG8gYmU6IGBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VgLCBgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcmAsIGBiYXRhZHZfdHBfcmVjdl9tc2dgLCBgYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzYCwgYW5kIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW5gLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgdGhvc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgc2FmZSB0byBpbmNsdWRlLCBhbmQgdGhlbiBJJiMzOTtsbCBtYXJrIHRob3NlIGFzIG15IGBGb2N1c1N5bWJvbHNgLgoKTmV4dCwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZmlsZXMgdG91Y2hlZCBieSB0aGUgcGF0Y2ggYXJlIGBiYXRfdl9lbHAuY2AsIGBiYXRfdl9vZ20uY2AsIGFuZCBgYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgLiBGcm9tIHRoaXMsIEkgY2FuIGRlcml2ZSBgQkFUTUFOX0FEVmAsIGBCQVRNQU5fQURWX0JBVE1BTl9WYCwgYW5kIGBCQVRNQU5fQURWX0JMQWAgYXMgdGhlIG5lY2Vzc2FyeSBjb25maWdzLiBJdCYjMzk7cyBhIGdvb2QgcHJhY3RpY2UgdG8gZG91YmxlLWNoZWNrIHRoZWlyIGV4YWN0IG5hbWVzLCB3aGljaCBJIGRpZCBhZ2FpbnN0IHRoZSBgS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bGwgbWFrZSBzdXJlIHRob3NlIGFyZSBpbmNsdWRlZCBpbiBteSBgRW5hYmxlQ29uZmlnc2AuCgpOb3csIGRvZXMgdGhpcyBwYXRjaCB3YXJyYW50IGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBwYXRjaCBkZWFscyB3aXRoIGNyaXRpY2FsIGFzcGVjdHMgb2YgQi5BLlQuTS5BLk4uIEFkdmFuY2VkOiBpbnRlcmZhY2UgaGFuZGxpbmcsIFRQIG1ldGVyIHBhY2tldCBwcm9jZXNzaW5nLCBhbmQgVFZMViBjb250YWluZXIgcGFyc2luZy4gVGhlc2UgYXJlIGFsbCBjb3JlIGxvZ2ljIHBhdGhzLCBhY2Nlc3NpYmxlIHZpYSB1c2VyIHNwYWNlIHRocm91Z2ggbmV0bGluaywgc3lzZnMsIGFuZCBuZXR3b3JrIHBhY2tldHMsIG1ha2luZyB0aGVtIGhpZ2gtdmFsdWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gSSBjYW4gZGVmaW5pdGl2ZWx5IHNldCBgV29ydGhGdXp6aW5nYCB0byB0cnVlLgoKVGhlcmVmb3JlLCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgc2V0dXA6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6CiAgICAqICAgYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAKICAgICogICBgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZWAKICAgICogICBgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXJgCiAgICAqICAgYGJhdGFkdl90cF9yZWN2X21zZ2AKICAgICogICBgYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzYAogICAgKiAgIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW5gCiogICBgRW5hYmxlQ29uZmlnc2A6CiAgICAqICAgYEJBVE1BTl9BRFZgCiAgICAqICAgYEJBVE1BTl9BRFZfQkFUTUFOX1ZgCiAgICAqICAgYEJBVE1BTl9BRFZfQkxBYAoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBzZXR1cC4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAyMToyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkFUTUFOX0FEViYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX0JBVE1BTl9WJiMzNDssCiAgICAmIzM0O0JBVE1BTl9BRFZfQkxBJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O2JhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UmIzM0OywKICAgICYjMzQ7YmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXImIzM0OywKICAgICYjMzQ7YmF0YWR2X3RwX3JlY3ZfbXNnJiMzNDssCiAgICAmIzM0O2JhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgcm91dGluZyBwcm90b2NvbC4gSXQgbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGhhcmQgaW50ZXJmYWNlcyAoYWRkaW5nL3JlbW92aW5nIHRoZW0gZnJvbSB0aGUgbWVzaCksIHRoZSBwcm9jZXNzaW5nIG9mIG91dC1vZi1vcmRlciBUUCBtZXRlciBwYWNrZXRzLCBhbmQgdGhlIHBhcnNpbmcgb2YgVFZMViBjb250YWluZXJzLiBUaGVzZSBhcmUgY29yZSBsb2dpYyBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsvc3lzZnMgYW5kIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JBVE1BTl9BRFYmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9CQVRNQU5fViYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX0JMQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZSYjMzQ7LAogICAgJiMzNDtiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cF9yZWN2X21zZyYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3MmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIHJvdXRpbmcgcHJvdG9jb2wuIEl0IG1vZGlmaWVzIHRoZSBoYW5kbGluZyBvZiBoYXJkIGludGVyZmFjZXMgKGFkZGluZy9yZW1vdmluZyB0aGVtIGZyb20gdGhlIG1lc2gpLCB0aGUgcHJvY2Vzc2luZyBvZiBvdXQtb2Ytb3JkZXIgVFAgbWV0ZXIgcGFja2V0cywgYW5kIHRoZSBwYXJzaW5nIG9mIFRWTFYgY29udGFpbmVycy4gVGhlc2UgYXJlIGNvcmUgbG9naWMgY2hhbmdlcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rL3N5c2ZzIGFuZCBuZXR3b3JrIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjA6NTMuOTc1Nzc2ODA4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4MTYyNDM3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CQVRNQU5fVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CTEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyXCIsXG4gICAgXCJiYXRhZHZfdHBfcmVjdl9tc2dcIixcbiAgICBcImJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2Vzc1wiLFxuICAgIFwiYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgcm91dGluZyBwcm90b2NvbC4gSXQgbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGhhcmQgaW50ZXJmYWNlcyAoYWRkaW5nL3JlbW92aW5nIHRoZW0gZnJvbSB0aGUgbWVzaCksIHRoZSBwcm9jZXNzaW5nIG9mIG91dC1vZi1vcmRlciBUUCBtZXRlciBwYWNrZXRzLCBhbmQgdGhlIHBhcnNpbmcgb2YgVFZMViBjb250YWluZXJzLiBUaGVzZSBhcmUgY29yZSBsb2dpYyBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsvc3lzZnMgYW5kIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIwOjUzLjk3NTc4MDg4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1MjIwMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWEyZWY0MWRkMzNjYWQxNjU5ODYzNWQyMGUzNGQ1M2Y1OGRlNWMwYlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAyMToyMDo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcXG5pbmRleCBiYjJmMDEyYjQ1NGVhNC4uMjI2MjIyODNmNTliMGMgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jXFxuQEAgLTQwNCwyMyArNDA0LDE0IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2VuZF90b19pZihzdHJ1Y3QgYmF0YWR2X2ZvcndfcGFja2V0ICpmb3J3X3BhY2tldCxcXG4gLyogc2VuZCBhIGJhdG1hbiBvZ20gcGFja2V0ICovXFxuIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fZW1pdChzdHJ1Y3QgYmF0YWR2X2ZvcndfcGFja2V0ICpmb3J3X3BhY2tldClcXG4ge1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcXG4tXFxuIFxcdGlmICghZm9yd19wYWNrZXQtXFx1MDAzZWlmX2luY29taW5nKSB7XFxuIFxcdFxcdHByX2VycihcXFwiRXJyb3IgLSBjYW4ndCBmb3J3YXJkIHBhY2tldDogaW5jb21pbmcgaWZhY2Ugbm90IHNwZWNpZmllZFxcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0bWVzaF9pZmFjZSA9IGZvcndfcGFja2V0LVxcdTAwM2VpZl9pbmNvbWluZy1cXHUwMDNlbWVzaF9pZmFjZTtcXG4tXFxuIFxcdGlmIChXQVJOX09OKCFmb3J3X3BhY2tldC1cXHUwMDNlaWZfb3V0Z29pbmcpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRpZiAoZm9yd19wYWNrZXQtXFx1MDAzZWlmX291dGdvaW5nLVxcdTAwM2VtZXNoX2lmYWNlICE9IG1lc2hfaWZhY2UpIHtcXG4tXFx0XFx0cHJfd2FybihcXFwiJXM6IG1lc2ggaW50ZXJmYWNlIHN3aXRjaCBmb3IgcXVldWVkIE9HTVxcXFxuXFxcIiwgX19mdW5jX18pO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4tXFxuIFxcdGlmIChmb3J3X3BhY2tldC1cXHUwMDNlaWZfaW5jb21pbmctXFx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfQUNUSVZFKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC05MTAsOCArOTAxLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zY2hlZHVsZV9idWZmKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcXG4gXFxuIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2NoZWR1bGUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiB7XFxuLVxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UgfHxcXG4tXFx0ICAgIGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4rXFx0aWYgKGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlYmF0X2l2Lm9nbV9idWZmX211dGV4KTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuY1xcbmluZGV4IDQ4NDFmMGYxYTliMTM5Li4yNjJlNDAwNDAwMDdjYyAxMDA2NDRcXG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jXFxuQEAgLTkwLDEyICs5MCw2IEBAIHN0YXRpYyBib29sIGJhdGFkdl92X2VscF9nZXRfdGhyb3VnaHB1dChzdHJ1Y3QgYmF0YWR2X2hhcmRpZl9uZWlnaF9ub2RlICpuZWlnaCxcXG4gXFx0dTMyIHRocm91Z2hwdXQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHQvKiBkb24ndCBxdWVyeSB0aHJvdWdocHV0IHdoZW4gbm8gbG9uZ2VyIGFzc29jaWF0ZWQgd2l0aCBhbnlcXG4tXFx0ICogYmF0bWFuLWFkdiBpbnRlcmZhY2VcXG4tXFx0ICovXFxuLVxcdGlmICghbWVzaF9pZmFjZSlcXG4tXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXG4gXFx0LyogaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGEgY3VzdG9taXNlZCB2YWx1ZSBmb3IgdGhpcyBpbnRlcmZhY2UsIHRoZW5cXG4gXFx0ICogcmV0dXJuIGl0IGRpcmVjdGx5XFxuIFxcdCAqL1xcbkBAIC0zMTEsOCArMzA1LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3ZfZWxwX3BlcmlvZGljX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qIHdlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBzaHV0dGluZyB0aGlzIGludGVyZmFjZSBkb3duICovXFxuLVxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UgfHxcXG4tXFx0ICAgIGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4rXFx0aWYgKGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbiBcXHQvKiB0aGUgaW50ZXJmYWNlIHdhcyBlbmFibGVkIGJ1dCBtYXkgbm90IGJlIHJlYWR5IHlldCAqL1xcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfdl9vZ20uYyBiL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jXFxuaW5kZXggMDM3OTIxYWFkMzVkNTguLmU5MjFkNDlmN2VjZWRkIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmNcXG5AQCAtMTE1LDE0ICsxMTUsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3N0YXJ0X3RpbWVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXFxuIFxcbiAvKipcXG4gICogYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoKSAtIHNlbmQgYSBiYXRtYW4gb2dtIHVzaW5nIGEgZ2l2ZW4gaW50ZXJmYWNlXFxuLSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiAgKiBAc2tiOiB0aGUgT0dNIHRvIHNlbmRcXG4gICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2UgdG8gdXNlIHRvIHNlbmQgdGhlIE9HTVxcbiAgKi9cXG4tc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXFxuK3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXFxuIHtcXG4rXFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UpO1xcbitcXG4gXFx0aWYgKGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfQUNUSVZFKSB7XFxuIFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTE4OSw3ICsxODksNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9saXN0X2ZyZWUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiBcXG4gLyoqXFxuICAqIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoKSAtIGZsdXNoIFxcdTAwMjYgc2VuZCBhZ2dyZWdhdGlvbiBxdWV1ZVxcbi0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4gICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUgYWdncmVnYXRpb24gcXVldWUgdG8gZmx1c2hcXG4gICpcXG4gICogQWdncmVnYXRlcyBhbGwgT0dNdjIgcGFja2V0cyBjdXJyZW50bHkgaW4gdGhlIGFnZ3JlZ2F0aW9uIHF1ZXVlIGludG8gYVxcbkBAIC0xOTksOCArMTk4LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3JfbGlzdF9mcmVlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcXG4gICpcXG4gICogQ2FsbGVyIG5lZWRzIHRvIGhvbGQgdGhlIGhhcmRfaWZhY2UtXFx1MDAzZWJhdF92LmFnZ3JfbGlzdC5sb2NrLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXFxuK3N0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBhZ2dyX2xlbiA9IGhhcmRfaWZhY2UtXFx1MDAzZWJhdF92LmFnZ3JfbGVuO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2FnZ3I7XFxuQEAgLTIzMCwyNiArMjI4LDIxIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gXFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4gXFx0fVxcbiBcXG4tXFx0YmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoYmF0X3ByaXYsIHNrYl9hZ2dyLCBoYXJkX2lmYWNlKTtcXG4rXFx0YmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoc2tiX2FnZ3IsIGhhcmRfaWZhY2UpO1xcbiB9XFxuIFxcbiAvKipcXG4gICogYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKCkgLSBxdWV1ZSBhIGJhdG1hbiBvZ20gb24gYSBnaXZlbiBpbnRlcmZhY2VcXG4tICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuICAqIEBza2I6IHRoZSBPR00gdG8gcXVldWVcXG4gICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2UgdG8gcXVldWUgdGhlIE9HTSBvblxcbiAgKi9cXG4tc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiB7XFxuLVxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlICE9IGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlKSB7XFxuLVxcdFxcdGtmcmVlX3NrYihza2IpO1xcbi1cXHRcXHRyZXR1cm47XFxuLVxcdH1cXG4rXFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UpO1xcbiBcXG4gXFx0aWYgKCFSRUFEX09OQ0UoYmF0X3ByaXYtXFx1MDAzZWFnZ3JlZ2F0ZWRfb2dtcykpIHtcXG4tXFx0XFx0YmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoYmF0X3ByaXYsIHNrYiwgaGFyZF9pZmFjZSk7XFxuK1xcdFxcdGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKHNrYiwgaGFyZF9pZmFjZSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtMjYwLDcgKzI1Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIWJhdGFkdl92X29nbV9xdWV1ZV9sZWZ0KHNrYiwgaGFyZF9pZmFjZSkpXFxuLVxcdFxcdGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoYmF0X3ByaXYsIGhhcmRfaWZhY2UpO1xcbitcXHRcXHRiYXRhZHZfdl9vZ21fYWdncl9zZW5kKGhhcmRfaWZhY2UpO1xcbiBcXG4gXFx0aGFyZF9pZmFjZS1cXHUwMDNlYmF0X3YuYWdncl9sZW4gKz0gYmF0YWR2X3Zfb2dtX2xlbihza2IpO1xcbiBcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2ViYXRfdi5hZ2dyX2xpc3QsIHNrYik7XFxuQEAgLTM1Nyw3ICszNTAsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fc2VuZF9tZXNoaWYoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihiYXRfcHJpdiwgc2tiX3RtcCwgaGFyZF9pZmFjZSk7XFxuK1xcdFxcdGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihza2JfdG1wLCBoYXJkX2lmYWNlKTtcXG4gXFx0XFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XFxuIFxcdH1cXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuQEAgLTM5NywxNCArMzkwLDEyIEBAIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4gXFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlX2JhdF92ICpiYXR2O1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XFxuLVxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7XFxuIFxcbiBcXHRiYXR2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZV9iYXRfdiwgYWdncl93cS53b3JrKTtcXG4gXFx0aGFyZF9pZmFjZSA9IGNvbnRhaW5lcl9vZihiYXR2LCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UsIGJhdF92KTtcXG4tXFx0YmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlKTtcXG4gXFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlYmF0X3YuYWdncl9saXN0LmxvY2spO1xcbi1cXHRiYXRhZHZfdl9vZ21fYWdncl9zZW5kKGJhdF9wcml2LCBoYXJkX2lmYWNlKTtcXG4rXFx0YmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChoYXJkX2lmYWNlKTtcXG4gXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZWJhdF92LmFnZ3JfbGlzdC5sb2NrKTtcXG4gXFxuIFxcdGJhdGFkdl92X29nbV9zdGFydF9xdWV1ZV90aW1lcihoYXJkX2lmYWNlKTtcXG5AQCAtNjAxLDcgKzU5Miw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9mb3J3YXJkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdFxcdCAgIGlmX291dGdvaW5nLVxcdTAwM2VuZXRfZGV2LVxcdTAwM2VuYW1lLCBudG9obChvZ21fZm9yd2FyZC1cXHUwMDNldGhyb3VnaHB1dCksXFxuIFxcdFxcdCAgIG9nbV9mb3J3YXJkLVxcdTAwM2V0dGwsIGlmX2luY29taW5nLVxcdTAwM2VuZXRfZGV2LVxcdTAwM2VuYW1lKTtcXG4gXFxuLVxcdGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihiYXRfcHJpdiwgc2tiLCBpZl9vdXRnb2luZyk7XFxuK1xcdGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihza2IsIGlmX291dGdvaW5nKTtcXG4gXFxuIG91dDpcXG4gXFx0YmF0YWR2X29yaWdfaWZpbmZvX3B1dChvcmlnX2lmaW5mbyk7XFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jIGIvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcXG5pbmRleCA1YzczZjZiYTE2Y2ZmMy4uZjlhMWZhZGY4ZGU5ZTQgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuY1xcbkBAIC0zNDQsNyArMzQ0LDYgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsXFxuIFxcdHN0cnVjdCBza19idWZmICpza2I7XFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aGhkcjtcXG4gXFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmO1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcXG4gXFx0dTggKmh3X3NyYztcXG4gXFx0c3RydWN0IGJhdGFkdl9ibGFfY2xhaW1fZHN0IGxvY2FsX2NsYWltX2Rlc3Q7XFxuIFxcdF9fYmUzMiB6ZXJvaXAgPSAwO1xcbkBAIC0zNTcsMTQgKzM1NiwxMCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfY2xhaW0oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKm1hYyxcXG4gXFx0ICAgICAgIHNpemVvZihsb2NhbF9jbGFpbV9kZXN0KSk7XFxuIFxcdGxvY2FsX2NsYWltX2Rlc3QudHlwZSA9IGNsYWltdHlwZTtcXG4gXFxuLVxcdG1lc2hfaWZhY2UgPSBSRUFEX09OQ0UocHJpbWFyeV9pZi1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuLVxcdGlmICghbWVzaF9pZmFjZSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcbiBcXHRza2IgPSBhcnBfY3JlYXRlKEFSUE9QX1JFUExZLCBFVEhfUF9BUlAsXFxuIFxcdFxcdFxcdCAvKiBJUCBEU1Q6IDAuMC4wLjAgKi9cXG4gXFx0XFx0XFx0IHplcm9pcCxcXG4tXFx0XFx0XFx0IG1lc2hfaWZhY2UsXFxuK1xcdFxcdFxcdCBwcmltYXJ5X2lmLVxcdTAwM2VtZXNoX2lmYWNlLFxcbiBcXHRcXHRcXHQgLyogSVAgU1JDOiAwLjAuMC4wICovXFxuIFxcdFxcdFxcdCB6ZXJvaXAsXFxuIFxcdFxcdFxcdCAvKiBFdGhlcm5ldCBEU1Q6IEJyb2FkY2FzdCAqL1xcbkBAIC00NDIsNyArNDM3LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICptYWMsXFxuIFxcdH1cXG4gXFxuIFxcdHNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7XFxuLVxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG1lc2hfaWZhY2UpO1xcbitcXHRza2ItXFx1MDAzZXByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwcmltYXJ5X2lmLVxcdTAwM2VtZXNoX2lmYWNlKTtcXG4gXFx0YmF0YWR2X2luY19jb3VudGVyKGJhdF9wcml2LCBCQVRBRFZfQ05UX1JYKTtcXG4gXFx0YmF0YWR2X2FkZF9jb3VudGVyKGJhdF9wcml2LCBCQVRBRFZfQ05UX1JYX0JZVEVTLFxcbiBcXHRcXHRcXHQgICBza2ItXFx1MDAzZWxlbiArIEVUSF9ITEVOKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmNcXG5pbmRleCAwM2QwMWMyMGE5NTQ4Yi4uYjY4Njc1NzZiYmFmYWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmNcXG5AQCAtNjMsNiArNjMsNyBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbiBcXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XFxuIFxcbiBcXHRoYXJkX2lmYWNlID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlLCByZWZjb3VudCk7XFxuK1xcdG5ldGRldl9wdXQoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSwgXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZW1lc2hpZl9kZXZfdHJhY2tlcik7XFxuIFxcdG5ldGRldl9wdXQoaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldiwgXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZWRldl90cmFja2VyKTtcXG4gXFxuIFxcdGtmcmVlX3JjdShoYXJkX2lmYWNlLCByY3UpO1xcbkBAIC03NSwyMSArNzYsMjEgQEAgdm9pZCBiYXRhZHZfaGFyZGlmX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcXG4gICogUmV0dXJuOiBiYXRhZHZfaGFyZF9pZmFjZSBvZiBuZXRfZGV2ICh3aXRoIGluY3JlYXNlZCByZWZjbnQpLCBOVUxMIG9uIGVycm9yc1xcbiAgKi9cXG4gc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpcXG4tYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxcbitiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpXFxuIHtcXG4gXFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcXG4gXFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaGFyZF9pZmFjZSwgXFx1MDAyNmJhdGFkdl9oYXJkaWZfbGlzdCwgbGlzdCkge1xcbi1cXHRcXHRpZiAoaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldiA9PSBuZXRfZGV2IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlcmVmY291bnQpKVxcbi1cXHRcXHRcXHRnb3RvIG91dDtcXG4tXFx0fVxcbitcXHRBU1NFUlRfUlROTCgpO1xcbiBcXG4tXFx0aGFyZF9pZmFjZSA9IE5VTEw7XFxuK1xcdG1lc2hfaWZhY2UgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobmV0X2Rldik7XFxuK1xcdGlmICghbWVzaF9pZmFjZSB8fCAhYmF0YWR2X21lc2hpZl9pc192YWxpZChtZXNoX2lmYWNlKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRoYXJkX2lmYWNlID0gbmV0ZGV2X2xvd2VyX2Rldl9nZXRfcHJpdmF0ZShtZXNoX2lmYWNlLCBuZXRfZGV2KTtcXG4rXFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlcmVmY291bnQpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuLW91dDpcXG4tXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdHJldHVybiBoYXJkX2lmYWNlO1xcbiB9XFxuIFxcbkBAIC0yNDUsNyArMjQ2LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKl9fYmF0YWR2X2dldF9yZWFsX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHR9XFxuIFxcbiBcXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KG5ldGRldik7XFxuLVxcdGlmICghaGFyZF9pZmFjZSB8fCAhaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSlcXG4rXFx0aWYgKCFoYXJkX2lmYWNlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdG5ldCA9IGRldl9uZXQoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuQEAgLTUzOSwxNiArNTQwLDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhXFxuIFxcdGNvbnN0IHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqdG1wX2hhcmRfaWZhY2U7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuIFxcbi1cXHRpZiAoIW1lc2hfaWZhY2UpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9wcml2YXRlKG1lc2hfaWZhY2UsIHRtcF9oYXJkX2lmYWNlLCBpdGVyKSB7XFxuIFxcdFxcdGlmICh0bXBfaGFyZF9pZmFjZSA9PSBoYXJkX2lmYWNlKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdGlmICh0bXBfaGFyZF9pZmFjZS1cXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuIFxcdFxcdGlmICghYmF0YWR2X2NvbXBhcmVfZXRoKHRtcF9oYXJkX2lmYWNlLVxcdTAwM2VuZXRfZGV2LVxcdTAwM2VkZXZfYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0aGFyZF9pZmFjZS1cXHUwMDNlbmV0X2Rldi1cXHUwMDNlZGV2X2FkZHIpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtNTc0LDkgKzU2OSw2IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9oYXJkaWZfcmVjYWxjX2V4dHJhX3NrYnJvb20oc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXFxuIFxcbiBcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9wcml2YXRlX3JjdShtZXNoX2lmYWNlLCBoYXJkX2lmYWNlLCBpdGVyKSB7XFxuLVxcdFxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4gXFx0XFx0bG93ZXJfaGVhZGVyX2xlbiA9IG1heF90KHVuc2lnbmVkIHNob3J0LCBsb3dlcl9oZWFkZXJfbGVuLFxcbiBcXHRcXHRcXHRcXHRcXHQgaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2Rldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKTtcXG4gXFxuQEAgLTcyMywzOCArNzE1LDYzIEBAIGJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiB9XFxuIFxcbiAvKipcXG4tICogYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKCkgLSBFbnNsYXZlIGhhcmQgaW50ZXJmYWNlIHRvIG1lc2ggaW50ZXJmYWNlXFxuLSAqIEBoYXJkX2lmYWNlOiBoYXJkIGludGVyZmFjZSB0byBhZGQgdG8gbWVzaCBpbnRlcmZhY2VcXG4rICogYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKCkgLSBFbnNsYXZlIGludGVyZmFjZSB0byBtZXNoIGludGVyZmFjZVxcbisgKiBAbmV0X2RldjogbmV0ZGV2IHN0cnVjdCBvZiB0aGUgaW50ZXJmYWNlIHRvIGFkZCB0byBtZXNoIGludGVyZmFjZVxcbiAgKiBAbWVzaF9pZmFjZTogbmV0ZGV2IHN0cnVjdCBvZiB0aGUgbWVzaCBpbnRlcmZhY2VcXG4gICpcXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgbnVtYmVyIGluIGNhc2Ugb2YgZmFpbHVyZVxcbiAgKi9cXG4taW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXFxuK2ludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKVxcbiB7XFxuIFxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7XFxuIFxcdF9fYmUxNiBldGhlcnR5cGUgPSBodG9ucyhFVEhfUF9CQVRNQU4pO1xcbiBcXHRpbnQgbWF4X2hlYWRlcl9sZW4gPSBiYXRhZHZfbWF4X2hlYWRlcl9sZW4oKTtcXG4rXFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xcbiBcXHR1bnNpZ25lZCBpbnQgcmVxdWlyZWRfbXR1O1xcbiBcXHR1bnNpZ25lZCBpbnQgaGFyZGlmX210dTtcXG4gXFx0Ym9vbCBmcmFnbWVudGF0aW9uO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0aGFyZGlmX210dSA9IFJFQURfT05DRShoYXJkX2lmYWNlLVxcdTAwM2VuZXRfZGV2LVxcdTAwM2VtdHUpO1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0aWYgKCFiYXRhZHZfaXNfdmFsaWRfaWZhY2UobmV0X2RldikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aGFyZGlmX210dSA9IFJFQURfT05DRShuZXRfZGV2LVxcdTAwM2VtdHUpO1xcbiBcXHRyZXF1aXJlZF9tdHUgPSBSRUFEX09OQ0UobWVzaF9pZmFjZS1cXHUwMDNlbXR1KSArIG1heF9oZWFkZXJfbGVuO1xcbiBcXG4gXFx0aWYgKGhhcmRpZl9tdHUgXFx1MDAzYyBFVEhfTUlOX01UVSArIG1heF9oZWFkZXJfbGVuKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRoYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpO1xcbitcXHRpZiAoIWhhcmRfaWZhY2UpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4tXFx0a3JlZl9nZXQoXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZXJlZmNvdW50KTtcXG4rXFx0bmV0ZGV2X2hvbGQobmV0X2RldiwgXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4rXFx0aGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldiA9IG5ldF9kZXY7XFxuK1xcbitcXHRoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPSBCQVRBRFZfSUZfSU5BQ1RJVkU7XFxuK1xcbitcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZW5laWdoX2xpc3QpO1xcbitcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlYmF0X2l2Lm9nbV9idWZmX211dGV4KTtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZW5laWdoX2xpc3RfbG9jayk7XFxuK1xcdGtyZWZfaW5pdChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlcmVmY291bnQpO1xcbitcXG4rXFx0aGFyZF9pZmFjZS1cXHUwMDNlbnVtX2JjYXN0cyA9IEJBVEFEVl9OVU1fQkNBU1RTX0RFRkFVTFQ7XFxuK1xcdGlmIChiYXRhZHZfaXNfd2lmaV9oYXJkaWYoaGFyZF9pZmFjZSkpXFxuK1xcdFxcdGhhcmRfaWZhY2UtXFx1MDAzZW51bV9iY2FzdHMgPSBCQVRBRFZfTlVNX0JDQVNUU19XSVJFTEVTUztcXG4rXFxuK1xcdFdSSVRFX09OQ0UoaGFyZF9pZmFjZS1cXHUwMDNlaG9wX3BlbmFsdHksIDApO1xcbitcXG4rXFx0YmF0YWR2X3ZfaGFyZGlmX2luaXQoaGFyZF9pZmFjZSk7XFxuIFxcbiBcXHRuZXRkZXZfaG9sZChtZXNoX2lmYWNlLCBcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlbWVzaGlmX2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4gXFx0aGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSA9IG1lc2hfaWZhY2U7XFxuIFxcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuIFxcbitcXHRiYXRfcHJpdi1cXHUwMDNlaGFyZGlmX2dlbmVyYXRpb24rKztcXG4gXFx0cmV0ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGluayhoYXJkX2lmYWNlLVxcdTAwM2VuZXRfZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHQgICBtZXNoX2lmYWNlLCBoYXJkX2lmYWNlLCBOVUxMLCBOVUxMKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtNzY0LDkgKzc4MSw2IEBAIGludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfdXBwZXI7XFxuIFxcbi1cXHRoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPSBCQVRBRFZfSUZfSU5BQ1RJVkU7XFxuLVxcbi1cXHRrcmVmX2dldChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlcmVmY291bnQpO1xcbiBcXHRoYXJkX2lmYWNlLVxcdTAwM2ViYXRtYW5fYWR2X3B0eXBlLnR5cGUgPSBldGhlcnR5cGU7XFxuIFxcdGhhcmRfaWZhY2UtXFx1MDAzZWJhdG1hbl9hZHZfcHR5cGUuZnVuYyA9IGJhdGFkdl9iYXRtYW5fc2tiX3JlY3Y7XFxuIFxcdGhhcmRfaWZhY2UtXFx1MDAzZWJhdG1hbl9hZHZfcHR5cGUuZGV2ID0gaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldjtcXG5AQCAtODAyLDE0ICs4MTYsMTEgQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXFxuIFxcdGlmIChiYXRfcHJpdi1cXHUwMDNlYWxnb19vcHMtXFx1MDAzZWlmYWNlLmVuYWJsZWQpXFxuIFxcdFxcdGJhdF9wcml2LVxcdTAwM2VhbGdvX29wcy1cXHUwMDNlaWZhY2UuZW5hYmxlZChoYXJkX2lmYWNlKTtcXG4gXFxuLW91dDpcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfdXBwZXI6XFxuIFxcdG5ldGRldl91cHBlcl9kZXZfdW5saW5rKGhhcmRfaWZhY2UtXFx1MDAzZW5ldF9kZXYsIG1lc2hfaWZhY2UpO1xcbiBlcnJfZGV2Olxcbi1cXHRoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlID0gTlVMTDtcXG4tXFx0bmV0ZGV2X3B1dChtZXNoX2lmYWNlLCBcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlbWVzaGlmX2Rldl90cmFja2VyKTtcXG4gXFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtODIxLDE3ICs4MzIsMTggQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXFxuIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXFxuIHtcXG4gXFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UpO1xcbi1cXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMO1xcbitcXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWY7XFxuK1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbiBcXG4gXFx0YmF0YWR2X2hhcmRpZl9kZWFjdGl2YXRlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcXG4gXFxuIFxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0YmF0YWR2X2luZm8oaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSwgXFxcIlJlbW92aW5nIGludGVyZmFjZTogJXNcXFxcblxcXCIsXFxuIFxcdFxcdCAgICBoYXJkX2lmYWNlLVxcdTAwM2VuZXRfZGV2LVxcdTAwM2VuYW1lKTtcXG4gXFx0ZGV2X3JlbW92ZV9wYWNrKFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2ViYXRtYW5fYWR2X3B0eXBlKTtcXG4tXFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XFxuIFxcbiBcXHRwcmltYXJ5X2lmID0gYmF0YWR2X3ByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTtcXG4gXFx0aWYgKGhhcmRfaWZhY2UgPT0gcHJpbWFyeV9pZikge1xcbkBAIC04NDIsMTUgKzg1NCwxNiBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbiBcXG4gXFx0XFx0YmF0YWR2X2hhcmRpZl9wdXQobmV3X2lmKTtcXG4gXFx0fVxcbitcXHRiYXRhZHZfaGFyZGlmX3B1dChwcmltYXJ5X2lmKTtcXG4gXFxuIFxcdGJhdF9wcml2LVxcdTAwM2VhbGdvX29wcy1cXHUwMDNlaWZhY2UuZGlzYWJsZShoYXJkX2lmYWNlKTtcXG4tXFx0aGFyZF9pZmFjZS1cXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX05PVF9JTl9VU0U7XFxuK1xcdGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEO1xcbiBcXG4gXFx0LyogZGVsZXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgaGFyZF9pZmFjZSAqL1xcbiBcXHRiYXRhZHZfcHVyZ2Vfb3JpZ19yZWYoYmF0X3ByaXYpO1xcbiBcXHRiYXRhZHZfcHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cyhiYXRfcHJpdiwgaGFyZF9pZmFjZSk7XFxuLVxcdG5ldGRldl9wdXQoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSwgXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZW1lc2hpZl9kZXZfdHJhY2tlcik7XFxuIFxcbitcXHRiYXRfcHJpdi1cXHUwMDNlaGFyZGlmX2dlbmVyYXRpb24rKztcXG4gXFx0bmV0ZGV2X3VwcGVyX2Rldl91bmxpbmsoaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldiwgaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuIFxcdGJhdGFkdl9oYXJkaWZfcmVjYWxjX2V4dHJhX3NrYnJvb20oaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuIFxcbkBAIC04NTgsNjcgKzg3MSw2IEBAIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXFxuIFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlLVxcdTAwM2VhZGpfbGlzdC5sb3dlcikpXFxuIFxcdFxcdGJhdGFkdl9nd19jaGVja19jbGllbnRfc3RvcChiYXRfcHJpdik7XFxuIFxcbi1cXHRoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlID0gTlVMTDtcXG4tXFx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XFxuLVxcbi1vdXQ6XFxuLVxcdGJhdGFkdl9oYXJkaWZfcHV0KHByaW1hcnlfaWYpO1xcbi19XFxuLVxcbi1zdGF0aWMgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpcXG4tYmF0YWR2X2hhcmRpZl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxcbi17XFxuLVxcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcXG4tXFxuLVxcdEFTU0VSVF9SVE5MKCk7XFxuLVxcbi1cXHRpZiAoIWJhdGFkdl9pc192YWxpZF9pZmFjZShuZXRfZGV2KSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRoYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpO1xcbi1cXHRpZiAoIWhhcmRfaWZhY2UpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbi1cXG4tXFx0bmV0ZGV2X2hvbGQobmV0X2RldiwgXFx1MDAyNmhhcmRfaWZhY2UtXFx1MDAzZWRldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcXG4tXFx0aGFyZF9pZmFjZS1cXHUwMDNlbmV0X2RldiA9IG5ldF9kZXY7XFxuLVxcbi1cXHRoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlID0gTlVMTDtcXG4tXFx0aGFyZF9pZmFjZS1cXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX05PVF9JTl9VU0U7XFxuLVxcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlbGlzdCk7XFxuLVxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlbmVpZ2hfbGlzdCk7XFxuLVxcbi1cXHRtdXRleF9pbml0KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2ViYXRfaXYub2dtX2J1ZmZfbXV0ZXgpO1xcbi1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2aGFyZF9pZmFjZS1cXHUwMDNlbmVpZ2hfbGlzdF9sb2NrKTtcXG4tXFx0a3JlZl9pbml0KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2VyZWZjb3VudCk7XFxuLVxcbi1cXHRoYXJkX2lmYWNlLVxcdTAwM2VudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfREVGQVVMVDtcXG4tXFx0aWYgKGJhdGFkdl9pc193aWZpX2hhcmRpZihoYXJkX2lmYWNlKSlcXG4tXFx0XFx0aGFyZF9pZmFjZS1cXHUwMDNlbnVtX2JjYXN0cyA9IEJBVEFEVl9OVU1fQkNBU1RTX1dJUkVMRVNTO1xcbi1cXG4tXFx0V1JJVEVfT05DRShoYXJkX2lmYWNlLVxcdTAwM2Vob3BfcGVuYWx0eSwgMCk7XFxuLVxcbi1cXHRiYXRhZHZfdl9oYXJkaWZfaW5pdChoYXJkX2lmYWNlKTtcXG4tXFxuLVxcdGtyZWZfZ2V0KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2VyZWZjb3VudCk7XFxuLVxcdGxpc3RfYWRkX3RhaWxfcmN1KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2VsaXN0LCBcXHUwMDI2YmF0YWR2X2hhcmRpZl9saXN0KTtcXG4tXFx0YmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uKys7XFxuLVxcbi1cXHRyZXR1cm4gaGFyZF9pZmFjZTtcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgYmF0YWR2X2hhcmRpZl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcXG4te1xcbi1cXHRBU1NFUlRfUlROTCgpO1xcbi1cXG4tXFx0LyogZmlyc3QgZGVhY3RpdmF0ZSBpbnRlcmZhY2UgKi9cXG4tXFx0aWYgKGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSlcXG4tXFx0XFx0YmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcXG4tXFxuLVxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdGhhcmRfaWZhY2UtXFx1MDAzZWlmX3N0YXR1cyA9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEO1xcbiBcXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcXG4gfVxcbiBcXG5AQCAtMTA4MiwxMCArMTAzNCw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2hhcmRfaWZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxcbiBcXHRiYXRhZHZfd2lmaV9uZXRfZGV2aWNlX2V2ZW50KGV2ZW50LCBuZXRfZGV2KTtcXG4gXFxuIFxcdGhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYobmV0X2Rldik7XFxuLVxcdGlmICghaGFyZF9pZmFjZSBcXHUwMDI2XFx1MDAyNiAoZXZlbnQgPT0gTkVUREVWX1JFR0lTVEVSIHx8XFxuLVxcdFxcdFxcdCAgICBldmVudCA9PSBORVRERVZfUE9TVF9UWVBFX0NIQU5HRSkpXFxuLVxcdFxcdGhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2FkZF9pbnRlcmZhY2UobmV0X2Rldik7XFxuLVxcbiBcXHRpZiAoIWhhcmRfaWZhY2UpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtMTA5OSwxOSArMTA0NywxMiBAQCBzdGF0aWMgaW50IGJhdGFkdl9oYXJkX2lmX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTkVUREVWX1VOUkVHSVNURVI6XFxuIFxcdGNhc2UgTkVUREVWX1BSRV9UWVBFX0NIQU5HRTpcXG4tXFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZoYXJkX2lmYWNlLVxcdTAwM2VsaXN0KTtcXG4tXFx0XFx0YmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uKys7XFxuLVxcbi1cXHRcXHRiYXRhZHZfaGFyZGlmX3JlbW92ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XFxuK1xcdFxcdGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRjYXNlIE5FVERFVl9DSEFOR0VNVFU6XFxuLVxcdFxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlKVxcbi1cXHRcXHRcXHRiYXRhZHZfdXBkYXRlX21pbl9tdHUoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuK1xcdFxcdGJhdGFkdl91cGRhdGVfbWluX210dShoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlKTtcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgTkVUREVWX0NIQU5HRUFERFI6XFxuLVxcdFxcdGlmIChoYXJkX2lmYWNlLVxcdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXFxuLVxcdFxcdFxcdGdvdG8gaGFyZGlmX3B1dDtcXG4tXFxuIFxcdFxcdGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihoYXJkX2lmYWNlKTtcXG4gXFxuIFxcdFxcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cXHUwMDNlbWVzaF9pZmFjZSk7XFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmggYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oXFxuaW5kZXggYWYzMTY5NmMzOTc4MDguLjkzNWY0N2NhOWE0OGZkIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmhcXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oXFxuQEAgLTIxLDEyICsyMSw2IEBAXFxuICAqIGVudW0gYmF0YWR2X2hhcmRfaWZfc3RhdGUgLSBTdGF0ZSBvZiBhIGhhcmQgaW50ZXJmYWNlXFxuICAqL1xcbiBlbnVtIGJhdGFkdl9oYXJkX2lmX3N0YXRlIHtcXG4tXFx0LyoqXFxuLVxcdCAqIEBCQVRBRFZfSUZfTk9UX0lOX1VTRTogaW50ZXJmYWNlIGlzIG5vdCB1c2VkIGFzIHNsYXZlIGludGVyZmFjZSBvZiBhXFxuLVxcdCAqIGJhdG1hbi1hZHYgbWVzaCBpbnRlcmZhY2VcXG4tXFx0ICovXFxuLVxcdEJBVEFEVl9JRl9OT1RfSU5fVVNFLFxcbi1cXG4gXFx0LyoqXFxuIFxcdCAqIEBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRDogaW50ZXJmYWNlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG1lc2hcXG4gXFx0ICogaW50ZXJmYWNlXFxuQEAgLTc0LDggKzY4LDggQEAgdTMyIGJhdGFkdl9uZXRkZXZfZ2V0X3dpZmlfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpO1xcbiB1MzIgYmF0YWR2X2hhcmRpZl9nZXRfd2lmaV9mbGFncyhzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xcbiBib29sIGJhdGFkdl9pc193aWZpX2hhcmRpZihzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xcbiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UqXFxuLWJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7XFxuLWludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxcbitiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpO1xcbitpbnQgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7XFxuIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xcbiBpbnQgYmF0YWR2X2hhcmRpZl9taW5fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5jIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jXFxuaW5kZXggM2M0NTcyMjg0YjUzMmYuLjA0YmIwMzBlZjI5OWFjIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L21haW4uY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L21haW4uY1xcbkBAIC01OSwxMSArNTksNiBAQFxcbiAjaW5jbHVkZSBcXFwidHBfbWV0ZXIuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInRyYW5zbGF0aW9uLXRhYmxlLmhcXFwiXFxuIFxcbi0vKiBMaXN0IG1hbmlwdWxhdGlvbnMgb24gaGFyZGlmX2xpc3QgaGF2ZSB0byBiZSBydG5sX2xvY2soKSdlZCxcXG4tICogbGlzdCB0cmF2ZXJzYWxzIGp1c3QgcmN1LWxvY2tlZFxcbi0gKi9cXG4tc3RydWN0IGxpc3RfaGVhZCBiYXRhZHZfaGFyZGlmX2xpc3Q7XFxuLXVuc2lnbmVkIGludCBiYXRhZHZfaGFyZGlmX2dlbmVyYXRpb247XFxuIHN0YXRpYyBpbnQgKCpiYXRhZHZfcnhfaGFuZGxlclsyNTZdKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcmVjdl9pZik7XFxuIFxcbkBAIC05NSw3ICs5MCw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGJhdGFkdl9pbml0KHZvaWQpXFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmJhdGFkdl9oYXJkaWZfbGlzdCk7XFxuIFxcdGJhdGFkdl9hbGdvX2luaXQoKTtcXG4gXFxuIFxcdGJhdGFkdl9yZWN2X2hhbmRsZXJfaW5pdCgpO1xcbkBAIC00NTAsOSArNDQ0LDYgQEAgaW50IGJhdGFkdl9iYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHVubGlrZWx5KHNrYi1cXHUwMDNlbWFjX2xlbiAhPSBFVEhfSExFTiB8fCAhc2tiX21hY19oZWFkZXIoc2tiKSkpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcbi1cXHRpZiAoIWhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UpXFxuLVxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuLVxcbiBcXHRiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UpO1xcbiBcXG4gXFx0aWYgKFJFQURfT05DRShiYXRfcHJpdi1cXHUwMDNlbWVzaF9zdGF0ZSkgIT0gQkFUQURWX01FU0hfQUNUSVZFKVxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmggYi9uZXQvYmF0bWFuLWFkdi9tYWluLmhcXG5pbmRleCBmNjhmYzhiNzIzOWNkNS4uZTczODc1OGVlNGE3YWUgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5oXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5oXFxuQEAgLTIyNiw5ICsyMjYsNiBAQCBzdGF0aWMgaW5saW5lIGludCBiYXRhZHZfcHJpbnRfdmlkKHVuc2lnbmVkIHNob3J0IHZpZClcXG4gXFx0XFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCBiYXRhZHZfaGFyZGlmX2xpc3Q7XFxuLWV4dGVybiB1bnNpZ25lZCBpbnQgYmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uO1xcbi1cXG4gZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpiYXRhZHZfZXZlbnRfd29ya3F1ZXVlO1xcbiBcXG4gaW50IGJhdGFkdl9tZXNoX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpO1xcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xcbmluZGV4IDQ0MDI2ODEwYjk5Y2VhLi5hMzczNjhjMWY1YjU1YyAxMDA2NDRcXG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xcbkBAIC04MzYsMTggKzgzNiw3IEBAIHN0YXRpYyBpbnQgYmF0YWR2X21lc2hpZl9zbGF2ZV9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuLVxcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcXG4tXFx0aW50IHJldCA9IC1FSU5WQUw7XFxuLVxcbi1cXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KHNsYXZlX2Rldik7XFxuLVxcdGlmICghaGFyZF9pZmFjZSB8fCBoYXJkX2lmYWNlLVxcdTAwM2VtZXNoX2lmYWNlKVxcbi1cXHRcXHRnb3RvIG91dDtcXG4tXFxuLVxcdHJldCA9IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlLCBkZXYpO1xcbi1cXG4tb3V0Olxcbi1cXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzbGF2ZV9kZXYsIGRldik7XFxuIH1cXG4gXFxuIC8qKlxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMgYi9uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmNcXG5pbmRleCA0Y2Y5ZTNjNTRhZDNiMi4uZDJiYzQ4YzcwNzE0MzQgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jXFxuQEAgLTk2OCw3ICs5NjgsNyBAQCBiYXRhZHZfbmV0bGlua19kdW1wX2hhcmRpZihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIFxcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XFxuIFxcbiBcXHRydG5sX2xvY2soKTtcXG4tXFx0Y2ItXFx1MDAzZXNlcSA9IGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiBcXHUwMDNjXFx1MDAzYyAxIHwgMTtcXG4rXFx0Y2ItXFx1MDAzZXNlcSA9IGJhdF9wcml2LVxcdTAwM2VoYXJkaWZfZ2VuZXJhdGlvbiBcXHUwMDNjXFx1MDAzYyAxIHwgMTtcXG4gXFxuIFxcdG5ldGRldl9mb3JfZWFjaF9sb3dlcl9wcml2YXRlKG1lc2hfaWZhY2UsIGhhcmRfaWZhY2UsIGl0ZXIpIHtcXG4gXFx0XFx0aWYgKGkrKyBcXHUwMDNjIHNraXApXFxuQEAgLTEyMTEsNyArMTIxMSw5IEBAIGJhdGFkdl9uZXRsaW5rX2dldF9oYXJkaWZfZnJvbV9pZmluZGV4KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdGlmICghaGFyZF9kZXYpXFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xcbiBcXG4rXFx0cnRubF9sb2NrKCk7XFxuIFxcdGhhcmRfaWZhY2UgPSBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoaGFyZF9kZXYpO1xcbitcXHRydG5sX3VubG9jaygpO1xcbiBcXHRpZiAoIWhhcmRfaWZhY2UpXFxuIFxcdFxcdGdvdG8gZXJyX3B1dF9oYXJkZGV2O1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jIGIvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jXFxuaW5kZXggOWIzOGJkOWU4ZGE3ZWMuLjQ4ZjgzN2NmNjY1YTJhIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuY1xcbkBAIC0xMDMzLDcgKzEwMzMsNiBAQCBiYXRhZHZfcHVyZ2VfbmVpZ2hfaWZpbmZvKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcbiBcXHRcXHQvKiBkb24ndCBwdXJnZSBpZiB0aGUgaW50ZXJmYWNlIGlzIG5vdCAoZ29pbmcpIGRvd24gKi9cXG4gXFx0XFx0aWYgKGlmX291dGdvaW5nLVxcdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBpZl9vdXRnb2luZy1cXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9OT1RfSU5fVVNFIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBpZl9vdXRnb2luZy1cXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuQEAgLTEwNzcsNyArMTA3Niw2IEBAIGJhdGFkdl9wdXJnZV9vcmlnX2lmaW5mbyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXG4gXFx0XFx0LyogZG9uJ3QgcHVyZ2UgaWYgdGhlIGludGVyZmFjZSBpcyBub3QgKGdvaW5nKSBkb3duICovXFxuIFxcdFxcdGlmIChpZl9vdXRnb2luZy1cXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9JTkFDVElWRSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgaWZfb3V0Z29pbmctXFx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgaWZfb3V0Z29pbmctXFx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbkBAIC0xMTI3LDEwICsxMTI1LDggQEAgYmF0YWR2X3B1cmdlX29yaWdfbmVpZ2hib3JzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcbiBcXHRcXHRpZiAoYmF0YWR2X2hhc190aW1lZF9vdXQobGFzdF9zZWVuLCBCQVRBRFZfUFVSR0VfVElNRU9VVCkgfHxcXG4gXFx0XFx0ICAgIGlmX2luY29taW5nLVxcdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX0lOQUNUSVZFIHx8XFxuLVxcdFxcdCAgICBpZl9pbmNvbWluZy1cXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8XFxuIFxcdFxcdCAgICBpZl9pbmNvbWluZy1cXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKSB7XFxuIFxcdFxcdFxcdGlmIChpZl9pbmNvbWluZy1cXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9JTkFDVElWRSB8fFxcbi1cXHRcXHRcXHQgICAgaWZfaW5jb21pbmctXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSB8fFxcbiBcXHRcXHRcXHQgICAgaWZfaW5jb21pbmctXFx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcXG4gXFx0XFx0XFx0XFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX0JBVE1BTiwgYmF0X3ByaXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJuZWlnaGJvciBwdXJnZTogb3JpZ2luYXRvciAlcE0sIG5laWdoYm9yOiAlcE0sIGlmYWNlOiAlc1xcXFxuXFxcIixcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuYyBiL25ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmNcXG5pbmRleCBjMmVlYTdkYmM0ODgzMy4uMDA0NjdhYTc5ZGU5ZGMgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmNcXG5AQCAtMzU4LDI4ICszNTgsMTYgQEAgYmF0YWR2X3RwX2xpc3RfZmluZF9zZW5kZXJfc2Vzc2lvbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0LFxcbiB9XFxuIFxcbiAvKipcXG4tICogYmF0YWR2X3RwX3ZhcnNfY29tbW9uX3JlbGVhc2UoKSAtIHJlbGVhc2UgYmF0YWR2X3RwX3ZhcnNfY29tbW9uIGZyb20gbGlzdHNcXG4rICogYmF0YWR2X3RwX3NlbmRlcl9yZWxlYXNlKCkgLSByZWxlYXNlIGJhdGFkdl90cF9zZW5kZXJcXG4gICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kXFxuLSAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgYmF0YWR2X3RwX3ZhcnNfY29tbW9uXFxuKyAqIEByZWY6IGtyZWYgcG9pbnRlciBvZiB0aGUgYmF0YWR2X3RwX3NlbmRlclxcbiAgKi9cXG4tc3RhdGljIHZvaWQgYmF0YWR2X3RwX3ZhcnNfY29tbW9uX3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZilcXG4rc3RhdGljIHZvaWQgYmF0YWR2X3RwX3NlbmRlcl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuIHtcXG4tXFx0c3RydWN0IGJhdGFkdl90cF92YXJzX2NvbW1vbiAqdHBfdmFycztcXG4tXFx0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1biwgKnNhZmU7XFxuLVxcbi1cXHR0cF92YXJzID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl90cF92YXJzX2NvbW1vbiwgcmVmY291bnQpO1xcbi1cXG4tXFx0LyogbG9jayBzaG91bGQgbm90IGJlIG5lZWRlZCBiZWNhdXNlIHRoaXMgb2JqZWN0IGlzIG5vdyBvdXQgb2YgYW55XFxuLVxcdCAqIGNvbnRleHQhXFxuLVxcdCAqL1xcbi1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbGlzdCwgbGlzdCkge1xcbi1cXHRcXHRsaXN0X2RlbChcXHUwMDI2dW4tXFx1MDAzZWxpc3QpO1xcbi1cXHRcXHRrZnJlZSh1bik7XFxuLVxcdH1cXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbG9jayk7XFxuK1xcdHN0cnVjdCBiYXRhZHZfdHBfc2VuZGVyICp0cF92YXJzO1xcbiBcXG4tXFx0a2ZyZWVfcmN1KHRwX3ZhcnMsIHJjdSk7XFxuK1xcdHRwX3ZhcnMgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X3RwX3NlbmRlciwgY29tbW9uLnJlZmNvdW50KTtcXG4rXFx0a2ZyZWVfcmN1KHRwX3ZhcnMsIGNvbW1vbi5yY3UpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzkyLDcgKzM4MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9zZW5kZXJfcHV0KHN0cnVjdCBiYXRhZHZfdHBfc2VuZGVyICp0cF92YXJzKVxcbiBcXHRpZiAoIXRwX3ZhcnMpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGtyZWZfcHV0KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF92YXJzX2NvbW1vbl9yZWxlYXNlKTtcXG4rXFx0a3JlZl9wdXQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi5yZWZjb3VudCwgYmF0YWR2X3RwX3NlbmRlcl9yZWxlYXNlKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTExNDUsOSArMTEzMyw2IEBAIHZvaWQgYmF0YWR2X3RwX3N0YXJ0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QsXFxuIFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZW1vcmVfYnl0ZXMpO1xcbiBcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWZpbmlzaGVkKTtcXG4gXFxuLVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QpO1xcbi1cXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNjX2xvY2spO1xcbiBcXG4gXFx0dHBfdmFycy1cXHUwMDNlcHJlcmFuZG9tX29mZnNldCA9IDA7XFxuQEAgLTEyNTEsNiArMTIzNiwzMyBAQCBiYXRhZHZfdHBfbGlzdF9maW5kX3JlY2VpdmVyX3Nlc3Npb24oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdFxcbiBcXHRyZXR1cm4gdHBfdmFycztcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKCkgLSByZWxlYXNlIGJhdGFkdl90cF9yZWNlaXZlclxcbisgKiAgYW5kIHF1ZXVlIGZvciBmcmVlIGFmdGVyIHJjdSBncmFjZSBwZXJpb2RcXG4rICogQHJlZjoga3JlZiBwb2ludGVyIG9mIHRoZSBiYXRhZHZfdHBfcmVjZWl2ZXJcXG4rICovXFxuK3N0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXFxuK3tcXG4rXFx0c3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycztcXG4rXFx0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICpzYWZlO1xcbitcXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuO1xcbitcXG4rXFx0dHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIsIGNvbW1vbi5yZWZjb3VudCk7XFxuK1xcbitcXHQvKiBsb2NrIHNob3VsZCBub3QgYmUgbmVlZGVkIGJlY2F1c2UgdGhpcyBvYmplY3QgaXMgbm93IG91dCBvZiBhbnlcXG4rXFx0ICogY29udGV4dCFcXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2dHBfdmFycy1cXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFxcdTAwMjZ0cF92YXJzLVxcdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnVuLVxcdTAwM2VsaXN0KTtcXG4rXFx0XFx0a2ZyZWUodW4pO1xcbitcXHRcXHR0cF92YXJzLVxcdTAwM2V1bmFja2VkX2NvdW50LS07XFxuK1xcdH1cXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKTtcXG4rXFxuK1xcdGtmcmVlX3JjdSh0cF92YXJzLCBjb21tb24ucmN1KTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGJhdGFkdl90cF9yZWNlaXZlcl9wdXQoKSAtIGRlY3JlbWVudCB0aGUgYmF0YWR2X3RwX3JlY2VpdmVyXFxuICAqICByZWZjb3VudGVyIGFuZCBwb3NzaWJseSByZWxlYXNlIGl0XFxuQEAgLTEyNjEsNyArMTI3Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWNlaXZlcl9wdXQoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycylcXG4gXFx0aWYgKCF0cF92YXJzKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRrcmVmX3B1dChcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnJlZmNvdW50LCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZSk7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF9yZWNlaXZlcl9yZWxlYXNlKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTEzMDQsMTMgKzEzMTYsMTMgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY2VpdmVyX3NodXRkb3duKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbiBcXHRpZiAoYmF0YWR2X3RwX2xpc3RfZGV0YWNoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24pKVxcbiBcXHRcXHRiYXRhZHZfdHBfcmVjZWl2ZXJfcHV0KHRwX3ZhcnMpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuLCBzYWZlLCBcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCwgbGlzdCkge1xcbitcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHVuLCBzYWZlLCBcXHUwMDI2dHBfdmFycy1cXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XFxuIFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZ1bi1cXHUwMDNlbGlzdCk7XFxuIFxcdFxcdGtmcmVlKHVuKTtcXG4tXFx0XFx0dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQtLTtcXG4rXFx0XFx0dHBfdmFycy1cXHUwMDNldW5hY2tlZF9jb3VudC0tO1xcbiBcXHR9XFxuLVxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKTtcXG4gXFxuIFxcdC8qIGRyb3AgcmVmZXJlbmNlIG9mIHRpbWVyICovXFxuIFxcdGlmIChXQVJOX09OKGF0b21pY194Y2hnKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2VyZWNlaXZpbmcsIDApICE9IDEpKVxcbkBAIC0xNDAzLDY5ICsxNDE1LDEwNiBAQCBzdGF0aWMgaW50IGJhdGFkdl90cF9zZW5kX2FjayhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0LFxcbiAgKi9cXG4gc3RhdGljIGJvb2wgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXIoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycyxcXG4gXFx0XFx0XFx0XFx0XFx0ICB1MzIgc2Vxbm8sIHUzMiBwYXlsb2FkX2xlbilcXG4tXFx0X19tdXN0X2hvbGQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spXFxuK1xcdF9fbXVzdF9ob2xkKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2VhY2tfc2Vxbm9fbG9jaylcXG4ge1xcbi1cXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqbmV3O1xcbi1cXHRib29sIGFkZGVkID0gZmFsc2U7XFxuLVxcbi1cXHRuZXcgPSBrbWFsbG9jX29iaigqbmV3LCBHRlBfQVRPTUlDKTtcXG4tXFx0aWYgKHVubGlrZWx5KCFuZXcpKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLVxcbi1cXHRuZXctXFx1MDAzZXNlcW5vID0gc2Vxbm87XFxuLVxcdG5ldy1cXHUwMDNlbGVuID0gcGF5bG9hZF9sZW47XFxuLVxcbi1cXHQvKiBpZiB0aGUgbGlzdCBpcyBlbXB0eSBpbW1lZGlhdGVseSBhdHRhY2ggdGhpcyBuZXcgb2JqZWN0ICovXFxuLVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9saXN0KSkge1xcbi1cXHRcXHRsaXN0X2FkZChcXHUwMDI2bmV3LVxcdTAwM2VsaXN0LCBcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XFxuLVxcdFxcdHRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2NvdW50Kys7XFxuLVxcdFxcdHJldHVybiB0cnVlO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBvdGhlcndpc2UgbG9vcCBvdmVyIHRoZSBsaXN0IGFuZCBlaXRoZXIgZHJvcCB0aGUgcGFja2V0IGJlY2F1c2UgdGhpc1xcbi1cXHQgKiBpcyBhIGR1cGxpY2F0ZSBvciBzdG9yZSBpdCBhdCB0aGUgcmlnaHQgcG9zaXRpb24uXFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IFxcdTAwMjZ0cF92YXJzLVxcdTAwM2V1bmFja2VkX2xpc3Q7XFxuK1xcdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqbmV3ID0gTlVMTDtcXG4rXFx0dTMyIGVuZF9zZXFubyA9IHNlcW5vICsgcGF5bG9hZF9sZW47XFxuK1xcdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqc2FmZTtcXG4rXFx0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1bjtcXG4rXFxuK1xcdC8qIGxvb3Agb3ZlciB0aGUgbGlzdCB0byBmaW5kIGVpdGhlciBhbiBleGlzdGluZyBlbnRyeSB3aGljaCB0aGUgbmV3XFxuK1xcdCAqIHNlcW5vIHJhbmdlIGNhbiBiZSBtZXJnZWQgd2l0aCBvciB0aGUgcG9zaXRpb24gYXQgd2hpY2ggYSBuZXcgZW50cnlcXG4rXFx0ICogaGFzIHRvIGJlIGluc2VydGVkLlxcbiBcXHQgKlxcbiBcXHQgKiBUaGUgaXRlcmF0aW9uIGlzIGRvbmUgaW4gdGhlIHJldmVyc2Ugd2F5IGJlY2F1c2UgaXQgaXMgbGlrZWx5IHRoYXRcXG4gXFx0ICogdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0ICh0aGUgb25lIGJlaW5nIHByb2Nlc3NlZCBub3cpIGhhcyBhIGJpZ2dlclxcbiBcXHQgKiBzZXFubyB0aGFuIGFsbCB0aGUgb3RoZXJzIGFscmVhZHkgc3RvcmVkLlxcbiBcXHQgKi9cXG4tXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCBcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCwgbGlzdCkge1xcbi1cXHRcXHQvKiBjaGVjayBmb3IgZHVwbGljYXRlcyAqL1xcbi1cXHRcXHRpZiAobmV3LVxcdTAwM2VzZXFubyA9PSB1bi1cXHUwMDNlc2Vxbm8pIHtcXG4tXFx0XFx0XFx0aWYgKG5ldy1cXHUwMDNlbGVuIFxcdTAwM2UgdW4tXFx1MDAzZWxlbilcXG4tXFx0XFx0XFx0XFx0dW4tXFx1MDAzZWxlbiA9IG5ldy1cXHUwMDNlbGVuO1xcbi1cXHRcXHRcXHRrZnJlZShuZXcpO1xcbi1cXHRcXHRcXHRhZGRlZCA9IHRydWU7XFxuLVxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHR9XFxuLVxcbi1cXHRcXHQvKiBsb29rIGZvciB0aGUgcmlnaHQgcG9zaXRpb24gKi9cXG4tXFx0XFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKG5ldy1cXHUwMDNlc2Vxbm8sIHVuLVxcdTAwM2VzZXFubykpXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZSh1biwgXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbGlzdCwgbGlzdCkge1xcbitcXHRcXHQvKiBsb29rIGZvciB0aGUgcmlnaHQgcG9zaXRpb24gLSBhbiB1biB3aGljaCBpcyBzbWFsbGVyICovXFxuK1xcdFxcdGlmIChiYXRhZHZfc2VxX2JlZm9yZShzZXFubywgdW4tXFx1MDAzZXNlcW5vKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHQvKiBhcyBzb29uIGFzIGFuIGVudHJ5IGhhdmluZyBhIGJpZ2dlciBzZXFubyBpcyBmb3VuZCwgdGhlIG5ld1xcbi1cXHRcXHQgKiBvbmUgaXMgYXR0YWNoZWQgX2FmdGVyXyBpdC4gSW4gdGhpcyB3YXkgdGhlIGxpc3QgaXMga2VwdCBpblxcbi1cXHRcXHQgKiBhc2NlbmRpbmcgb3JkZXJcXG4rXFx0XFx0Lyogc21hbGxlci9lcXVhbCBzZXFubyB3YXMgZm91bmQgYnV0IHRoZXkgbWlnaHQgYmUgZGlyZWN0bHlcXG4rXFx0XFx0ICogYWZ0ZXIgYW5vdGhlciBvciBvdmVybGFwcGluZy4ga2VlcCBvbmx5IGEgc2luZ2xlIGVudHJ5XFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIEl0IGlzIGFscmVhZHkga25vd24gdGhhdDpcXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICpcXHR1bi1cXHUwMDNlc2Vxbm8gXFx1MDAzYz0gc2Vxbm9cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogV2hlbiBlc3RhYmxpc2hpbmcgdGhhdDpcXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICpcXHRzZXFubyBcXHUwMDNjPSB1bi1cXHUwMDNlc2Vxbm8gKyB1bi1cXHUwMDNlbGVuXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIFRoZW4gaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBhZGQgYSBuZXcgZW50cnkgYmVjYXVzZSB0aGVcXG4rXFx0XFx0ICogc21hbGxlci9lcXVhbCBzZXFubyBvZiB1biBtaWdodCBhbHJlYWR5IGNvbnRhaW4gdGhlIG5ld1xcbitcXHRcXHQgKiByZWNlaXZlZCBwYWNrZXQgb3Igd2Ugb25seSBhZGQgbmV3IGRhdGEgZGlyZWN0bHkgYWZ0ZXJcXG4rXFx0XFx0ICogdGhlIGVuZCBvZiB1bi4gVGhlIGxhdHRlciBjYW4gYmUgaWRlbnRpZmllZCB1c2luZzpcXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICpcXHR1bi1cXHUwMDNlc2Vxbm8gKyB1bi1cXHUwMDNlbGVuIFxcdTAwM2M9IGVuZF9zZXFub1xcbiBcXHRcXHQgKi9cXG4tXFx0XFx0bGlzdF9hZGQoXFx1MDAyNm5ldy1cXHUwMDNlbGlzdCwgXFx1MDAyNnVuLVxcdTAwM2VsaXN0KTtcXG4tXFx0XFx0YWRkZWQgPSB0cnVlO1xcbi1cXHRcXHR0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudCsrO1xcbitcXHRcXHRpZiAoIWJhdGFkdl9zZXFfYmVmb3JlKHVuLVxcdTAwM2VzZXFubyArIHVuLVxcdTAwM2VsZW4sIHNlcW5vKSkge1xcbitcXHRcXHRcXHQvKiBuZXcgZGF0YSBkaXJlY3RseSBhZnRlciB1bj8gKi9cXG4rXFx0XFx0XFx0aWYgKCFiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLVxcdTAwM2VzZXFubyArIHVuLVxcdTAwM2VsZW4pKVxcbitcXHRcXHRcXHRcXHR1bi1cXHUwMDNlbGVuID0gZW5kX3NlcW5vIC0gdW4tXFx1MDAzZXNlcW5vO1xcbitcXG4rXFx0XFx0XFx0LyogdW4gbm93IHJlcHJlc2VudHMgYm90aCBvbGQgdW4gKyBuZXcgcmFuZ2UgYW5kIGhhcyB0b1xcbitcXHRcXHRcXHQgKiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBnYXAgdG8gdGhlIG5leHQgc2Vxbm8gcmFuZ2VcXG4rXFx0XFx0XFx0ICogd2FzIGNsb3NlZFxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0bmV3ID0gdW47XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qIGFzIHNvb24gYXMgYW4gZW50cnkgaGF2aW5nIGEgc21hbGxlciBzZXFubyBpcyBmb3VuZCxcXG4rXFx0XFx0XFx0ICogdGhlIG5ldyBvbmUgaXMgYXR0YWNoZWQgX2FmdGVyXyBpdC4gSW4gdGhpcyB3YXkgdGhlXFxuK1xcdFxcdFxcdCAqIGxpc3QgaXMga2VwdCBpbiBhc2NlbmRpbmcgb3JkZXJcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHBvcyA9IFxcdTAwMjZ1bi1cXHUwMDNlbGlzdDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdH1cXG4gXFxuLVxcdC8qIHJlY2VpdmVkIHBhY2tldCB3aXRoIHNtYWxsZXN0IHNlcW5vIG91dCBvZiBvcmRlcjsgYWRkIGl0IHRvIGZyb250ICovXFxuLVxcdGlmICghYWRkZWQpIHtcXG4tXFx0XFx0bGlzdF9hZGQoXFx1MDAyNm5ldy1cXHUwMDNlbGlzdCwgXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QpO1xcbi1cXHRcXHR0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudCsrO1xcbitcXHQvKiBubyBlbnRyeSB0byBtZXJnZSB3aXRoIHdhcyBmb3VuZDsgaW5zZXJ0IGEgbmV3IG9uZSBhZnRlciB0aGUgZW50cnlcXG4rXFx0ICogd2l0aCB0aGUgbmV4dCBzbWFsbGVyIHNlcW5vIChvciBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qgd2hlbiB0aGVcXG4rXFx0ICogbmV3IHNlcW5vIGlzIHRoZSBzbWFsbGVzdCBvciB0aGUgbGlzdCBpcyBlbXB0eSlcXG4rXFx0ICovXFxuK1xcdGlmICghbmV3KSB7XFxuK1xcdFxcdG5ldyA9IGttYWxsb2Nfb2JqKCpuZXcsIEdGUF9BVE9NSUMpO1xcbitcXHRcXHRpZiAodW5saWtlbHkoIW5ldykpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdG5ldy1cXHUwMDNlc2Vxbm8gPSBzZXFubztcXG4rXFx0XFx0bmV3LVxcdTAwM2VsZW4gPSBwYXlsb2FkX2xlbjtcXG4rXFxuK1xcdFxcdGxpc3RfYWRkKFxcdTAwMjZuZXctXFx1MDAzZWxpc3QsIHBvcyk7XFxuK1xcdFxcdHRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfY291bnQrKztcXG4rXFx0fVxcbitcXG4rXFx0LyogY2hlY2sgaWYgbmV3IGZpbGxlZCB0aGUgZ2FwIHRvIHRoZSBuZXh0IGxpc3QgZW50cmllcyAqL1xcbitcXHR1biA9IG5ldztcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVlKHVuLCBzYWZlLCBcXHUwMDI2dHBfdmFycy1cXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XFxuK1xcdFxcdGlmIChiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLVxcdTAwM2VzZXFubykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogbmV4dCBlbnRyeSBpcyBvdmVybGFwcGluZyBvciBhZGphY2VudCAtIGNvbWJpbmUgYm90aCAqL1xcbitcXHRcXHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUoZW5kX3NlcW5vLCB1bi1cXHUwMDNlc2Vxbm8gKyB1bi1cXHUwMDNlbGVuKSkge1xcbitcXHRcXHRcXHRlbmRfc2Vxbm8gPSB1bi1cXHUwMDNlc2Vxbm8gKyB1bi1cXHUwMDNlbGVuO1xcbitcXHRcXHRcXHRuZXctXFx1MDAzZWxlbiA9IGVuZF9zZXFubyAtIG5ldy1cXHUwMDNlc2Vxbm87XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZ1bi1cXHUwMDNlbGlzdCk7XFxuK1xcdFxcdGtmcmVlKHVuKTtcXG4rXFx0XFx0dHBfdmFycy1cXHUwMDNldW5hY2tlZF9jb3VudC0tO1xcbiBcXHR9XFxuIFxcbiBcXHQvKiByZW1vdmUgdGhlIGxhc3QgKGJpZ2dlc3QpIHVuYWNrZWQgc2Vxbm8gd2hlbiBsaXN0IGlzIHRvbyBsYXJnZSAqL1xcbi1cXHRpZiAodHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQgXFx1MDAzZSBCQVRBRFZfVFBfTUFYX1VOQUNLRUQpIHtcXG4tXFx0XFx0dW4gPSBsaXN0X2xhc3RfZW50cnkoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QsXFxuK1xcdGlmICh0cF92YXJzLVxcdTAwM2V1bmFja2VkX2NvdW50IFxcdTAwM2UgQkFUQURWX1RQX01BWF9VTkFDS0VEKSB7XFxuK1xcdFxcdHVuID0gbGlzdF9sYXN0X2VudHJ5KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2V1bmFja2VkX2xpc3QsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJhdGFkdl90cF91bmFja2VkLCBsaXN0KTtcXG4gXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnVuLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0a2ZyZWUodW4pO1xcbi1cXHRcXHR0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudC0tO1xcbitcXHRcXHR0cF92YXJzLVxcdTAwM2V1bmFja2VkX2NvdW50LS07XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcbkBAIC0xNDc3LDcgKzE1MjYsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcihzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzLFxcbiAgKiBAdHBfdmFyczogdGhlIHByaXZhdGUgZGF0YSBvZiB0aGUgY3VycmVudCBUUCBtZXRlciBzZXNzaW9uXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfYWNrX3Vub3JkZXJlZChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKVxcbi1cXHRfX211c3RfaG9sZChcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfbG9jaylcXG4rXFx0X19tdXN0X2hvbGQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKVxcbiB7XFxuIFxcdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqdW4sICpzYWZlO1xcbiBcXHR1MzIgdG9fYWNrO1xcbkBAIC0xNDg1LDcgKzE1MzQsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfYWNrX3Vub3JkZXJlZChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKVxcbiBcXHQvKiBnbyB0aHJvdWdoIHRoZSB1bmFja2VkIHBhY2tldCBsaXN0IGFuZCBwb3NzaWJseSBBQ0sgdGhlbSBhc1xcbiBcXHQgKiB3ZWxsXFxuIFxcdCAqL1xcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9saXN0LCBsaXN0KSB7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbGlzdCwgbGlzdCkge1xcbiBcXHRcXHQvKiB0aGUgbGlzdCBpcyBvcmRlcmVkLCB0aGVyZWZvcmUgaXQgaXMgcG9zc2libGUgdG8gc3RvcCBhcyBzb29uXFxuIFxcdFxcdCAqIHRoZXJlIGlzIGEgZ2FwIGJldHdlZW4gdGhlIGxhc3QgYWNrZWQgc2Vxbm8gYW5kIHRoZSBzZXFubyBvZlxcbiBcXHRcXHQgKiB0aGUgcGFja2V0IHVuZGVyIGluc3BlY3Rpb25cXG5AQCAtMTQ5MywxNCArMTU0MiwxNCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfYWNrX3Vub3JkZXJlZChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKVxcbiBcXHRcXHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUodHBfdmFycy1cXHUwMDNlbGFzdF9yZWN2LCB1bi1cXHUwMDNlc2Vxbm8pKVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuLVxcdFxcdHRvX2FjayA9IHVuLVxcdTAwM2VzZXFubyArIHVuLVxcdTAwM2VsZW4gLSB0cF92YXJzLVxcdTAwM2VsYXN0X3JlY3Y7XFxuK1xcdFxcdHRvX2FjayA9IHVuLVxcdTAwM2VzZXFubyArIHVuLVxcdTAwM2VsZW47XFxuIFxcbi1cXHRcXHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUodHBfdmFycy1cXHUwMDNlbGFzdF9yZWN2LCB1bi1cXHUwMDNlc2Vxbm8gKyB1bi1cXHUwMDNlbGVuKSlcXG4tXFx0XFx0XFx0dHBfdmFycy1cXHUwMDNlbGFzdF9yZWN2ICs9IHRvX2FjaztcXG4rXFx0XFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKHRwX3ZhcnMtXFx1MDAzZWxhc3RfcmVjdiwgdG9fYWNrKSlcXG4rXFx0XFx0XFx0dHBfdmFycy1cXHUwMDNlbGFzdF9yZWN2ID0gdG9fYWNrO1xcbiBcXG4gXFx0XFx0bGlzdF9kZWwoXFx1MDAyNnVuLVxcdTAwM2VsaXN0KTtcXG4gXFx0XFx0a2ZyZWUodW4pO1xcbi1cXHRcXHR0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudC0tO1xcbitcXHRcXHR0cF92YXJzLVxcdTAwM2V1bmFja2VkX2NvdW50LS07XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMTU0Nyw5ICsxNTk2LDkgQEAgYmF0YWR2X3RwX2luaXRfcmVjdihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHR0cF92YXJzLVxcdTAwM2Vjb21tb24uYmF0X3ByaXYgPSBiYXRfcHJpdjtcXG4gXFx0a3JlZl9pbml0KFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24ucmVmY291bnQpO1xcbiBcXG4tXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xcbi1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2dHBfdmFycy1cXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XFxuLVxcdHRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2NvdW50ID0gMDtcXG4rXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfbGlzdCk7XFxuK1xcdHRwX3ZhcnMtXFx1MDAzZXVuYWNrZWRfY291bnQgPSAwO1xcbiBcXG4gXFx0a3JlZl9nZXQoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XFxuIFxcdHRpbWVyX3NldHVwKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udGltZXIsIGJhdGFkdl90cF9yZWNlaXZlcl9zaHV0ZG93biwgMCk7XFxuQEAgLTE2MDksNyArMTY1OCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWN2X21zZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHRcXHRXUklURV9PTkNFKHRwX3ZhcnMtXFx1MDAzZWxhc3RfcmVjdl90aW1lLCBqaWZmaWVzKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2VhY2tfc2Vxbm9fbG9jayk7XFxuIFxcbiBcXHQvKiBpZiB0aGUgcGFja2V0IGlzIGEgZHVwbGljYXRlLCBpdCBtYXkgYmUgdGhlIGNhc2UgdGhhdCBhbiBBQ0sgaGFzIGJlZW5cXG4gXFx0ICogbG9zdC4gUmVzZW5kIHRoZSBBQ0tcXG5AQCAtMTYyNSw3ICsxNjc0LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY3ZfbXNnKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdFxcdCAqIG5vdCBiZWVuIGVucXVldWVkIGNvcnJlY3RseVxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKCFiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcih0cF92YXJzLCBzZXFubywgcGF5bG9hZF9sZW4pKSB7XFxuLVxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0cF92YXJzLVxcdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWFja19zZXFub19sb2NrKTtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE2NDEsNyArMTY5MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWN2X21zZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXG4gc2VuZF9hY2s6XFxuIFxcdHRvX2FjayA9IHRwX3ZhcnMtXFx1MDAzZWxhc3RfcmVjdjtcXG4tXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnRwX3ZhcnMtXFx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dHBfdmFycy1cXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xcbiBcXG4gXFx0Lyogc2VuZCB0aGUgQUNLLiBJZiB0aGUgcmVjZWl2ZWQgcGFja2V0IHdhcyBvdXQgb2Ygb3JkZXIsIHRoZSBBQ0sgdGhhdFxcbiBcXHQgKiBpcyBnb2luZyB0byBiZSBzZW50IGlzIGEgZHVwbGljYXRlICh0aGUgc2VuZGVyIHdpbGwgY291bnQgdGhlbSBhbmRcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHZsdi5jIGIvbmV0L2JhdG1hbi1hZHYvdHZsdi5jXFxuaW5kZXggMWM5ZmIyMTk4NWY2YTUuLjQ5YmYyZWQ5ZWNkYzM5IDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L3R2bHYuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L3R2bHYuY1xcbkBAIC00NDIsNiArNDQyLDU0IEBAIHN0YXRpYyBpbnQgYmF0YWR2X3R2bHZfY2FsbF9oYW5kbGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdHJldHVybiBORVRfUlhfU1VDQ0VTUztcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJhdGFkdl90dmx2X2hkcl9uZXh0KCkgLSBtb3ZlIGEgdHZsdiBidWZmZXIgY3Vyc29yIHRvIHRoZSBuZXh0IGNvbnRhaW5lclxcbisgKiBAdHZsdl92YWx1ZTogY3Vyc29yIGludG8gdGhlIHR2bHYgYnVmZmVyLCBhZHZhbmNlZCBwYXN0IHRoZSByZXR1cm5lZFxcbisgKiAgY29udGFpbmVyJ3MgY29udGVudCBvbiBzdWNjZXNzXFxuKyAqIEB0dmx2X3ZhbHVlX2xlbjogcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgdHZsdiBidWZmZXIsIHJlZHVjZWQgYnkgdGhlIHJldHVybmVkXFxuKyAqICBjb250YWluZXIncyBzaXplIG9uIHN1Y2Nlc3NcXG4rICpcXG4rICogUGFyc2VzIGEgc2luZ2xlIGNvbnRhaW5lciBoZWFkZXIgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGFuZCwgaWYgYVxcbisgKiBjb21wbGV0ZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLCBhZHZhbmNlcyB0aGUgY3Vyc29yIGFuZCByZW1haW5pbmcgbGVuZ3RoXFxuKyAqIHBhc3QgaXQuIFRoZSByZXR1cm5lZCBoZWFkZXIgc3RheXMgdmFsaWQ7IGl0cyBjb250ZW50IGlzIGxvY2F0ZWQgYXRcXG4rICogKHJldHVybmVkIGhlYWRlciArIDEpIGFuZCBpcyBudG9ocyhoZHItXFx1MDAzZWxlbikgYnl0ZXMgbG9uZy5cXG4rICpcXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBuZXh0IHR2bHYgY29udGFpbmVyIGhlYWRlciwgb3IgTlVMTCBpZiBubyBmdXJ0aGVyXFxuKyAqIGNvbXBsZXRlIGNvbnRhaW5lciBpcyBwcmVzZW50IGluIHRoZSBidWZmZXIuXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IGJhdGFkdl90dmx2X2hkciAqYmF0YWR2X3R2bHZfaGRyX25leHQodm9pZCAqKnR2bHZfdmFsdWUsIHUxNiAqdHZsdl92YWx1ZV9sZW4pXFxuK3tcXG4rXFx0c3RydWN0IGJhdGFkdl90dmx2X2hkciAqdHZsdl9oZHI7XFxuK1xcdHUxNiB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xcbitcXHR2b2lkICp0dmx2X3ZhbHVlX2NvbnQ7XFxuK1xcdHUxNiB0dmx2X2xlbjtcXG4rXFxuK1xcdHR2bHZfdmFsdWVfY29udCA9ICp0dmx2X3ZhbHVlO1xcbitcXHR0dmx2X2xlbiA9ICp0dmx2X3ZhbHVlX2xlbjtcXG4rXFxuK1xcdGlmICh0dmx2X2xlbiBcXHUwMDNjIHNpemVvZigqdHZsdl9oZHIpKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdHR2bHZfaGRyID0gdHZsdl92YWx1ZV9jb250O1xcbitcXHR0dmx2X3ZhbHVlX2NvbnRfbGVuID0gbnRvaHModHZsdl9oZHItXFx1MDAzZWxlbik7XFxuK1xcdHR2bHZfdmFsdWVfY29udCA9IHR2bHZfaGRyICsgMTtcXG4rXFx0dHZsdl9sZW4gLT0gc2l6ZW9mKCp0dmx2X2hkcik7XFxuK1xcbitcXHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcXHUwMDNlIHR2bHZfbGVuKVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdC8qIHRoZSBuZXh0IHR2bHYgaGVhZGVyIGlzIGFjY2Vzc2VkIGFzc3VtaW5nIChhdCBsZWFzdCkgMi1ieXRlXFxuK1xcdCAqIGFsaWdubWVudCwgc28gaXQgbXVzdCBzdGFydCBhdCBhbiBldmVuIG9mZnNldC5cXG4rXFx0ICovXFxuK1xcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFxcdTAwMjYgMSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHQqdHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWVfY29udCArIHR2bHZfdmFsdWVfY29udF9sZW47XFxuK1xcdCp0dmx2X3ZhbHVlX2xlbiA9IHR2bHZfbGVuIC0gdHZsdl92YWx1ZV9jb250X2xlbjtcXG4rXFxuK1xcdHJldHVybiB0dmx2X2hkcjtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbigpIC0gY2hlY2sgaWYgYSB0dmx2IGJ1ZmZlciBob2xkcyBhIGNvbnRhaW5lclxcbiAgKiBAdHZsdl92YWx1ZTogdHZsdiBjb250ZW50XFxuQEAgLTQ1NywyOCArNTA1LDEwIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbih2b2lkICp0dmx2X3ZhbHVlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICB1OCB2ZXJzaW9uKVxcbiB7XFxuIFxcdHN0cnVjdCBiYXRhZHZfdHZsdl9oZHIgKnR2bHZfaGRyO1xcbi1cXHR1MTYgdHZsdl92YWx1ZV9jb250X2xlbjtcXG4tXFxuLVxcdHdoaWxlICh0dmx2X3ZhbHVlX2xlbiBcXHUwMDNlPSBzaXplb2YoKnR2bHZfaGRyKSkge1xcbi1cXHRcXHR0dmx2X2hkciA9IHR2bHZfdmFsdWU7XFxuLVxcdFxcdHR2bHZfdmFsdWVfY29udF9sZW4gPSBudG9ocyh0dmx2X2hkci1cXHUwMDNlbGVuKTtcXG4tXFx0XFx0dHZsdl92YWx1ZSA9IHR2bHZfaGRyICsgMTtcXG4tXFx0XFx0dHZsdl92YWx1ZV9sZW4gLT0gc2l6ZW9mKCp0dmx2X2hkcik7XFxuLVxcbi1cXHRcXHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcXHUwMDNlIHR2bHZfdmFsdWVfbGVuKVxcbi1cXHRcXHRcXHRicmVhaztcXG4tXFxuLVxcdFxcdC8qIHRoZSBuZXh0IHR2bHYgaGVhZGVyIGlzIGFjY2Vzc2VkIGFzc3VtaW5nIChhdCBsZWFzdCkgMi1ieXRlXFxuLVxcdFxcdCAqIGFsaWdubWVudCwgc28gaXQgbXVzdCBzdGFydCBhdCBhbiBldmVuIG9mZnNldC5cXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFxcdTAwMjYgMSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuIFxcbitcXHR3aGlsZSAoKHR2bHZfaGRyID0gYmF0YWR2X3R2bHZfaGRyX25leHQoXFx1MDAyNnR2bHZfdmFsdWUsIFxcdTAwMjZ0dmx2X3ZhbHVlX2xlbikpKSB7XFxuIFxcdFxcdGlmICh0dmx2X2hkci1cXHUwMDNldHlwZSA9PSB0eXBlIFxcdTAwMjZcXHUwMDI2IHR2bHZfaGRyLVxcdTAwM2V2ZXJzaW9uID09IHZlcnNpb24pXFxuIFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbi1cXG4tXFx0XFx0dHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWUgKyB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xcbi1cXHRcXHR0dmx2X3ZhbHVlX2xlbiAtPSB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTUxMSwyMCArNTQxLDggQEAgaW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHR1OCBjaWZub3Rmb3VuZCA9IEJBVEFEVl9UVkxWX0hBTkRMRVJfT0dNX0NJRk5PVEZORDtcXG4gXFx0aW50IHJldCA9IE5FVF9SWF9TVUNDRVNTO1xcbiBcXG4tXFx0d2hpbGUgKHR2bHZfdmFsdWVfbGVuIFxcdTAwM2U9IHNpemVvZigqdHZsdl9oZHIpKSB7XFxuLVxcdFxcdHR2bHZfaGRyID0gdHZsdl92YWx1ZTtcXG4rXFx0d2hpbGUgKCh0dmx2X2hkciA9IGJhdGFkdl90dmx2X2hkcl9uZXh0KFxcdTAwMjZ0dmx2X3ZhbHVlLCBcXHUwMDI2dHZsdl92YWx1ZV9sZW4pKSkge1xcbiBcXHRcXHR0dmx2X3ZhbHVlX2NvbnRfbGVuID0gbnRvaHModHZsdl9oZHItXFx1MDAzZWxlbik7XFxuLVxcdFxcdHR2bHZfdmFsdWUgPSB0dmx2X2hkciArIDE7XFxuLVxcdFxcdHR2bHZfdmFsdWVfbGVuIC09IHNpemVvZigqdHZsdl9oZHIpO1xcbi1cXG4tXFx0XFx0aWYgKHR2bHZfdmFsdWVfY29udF9sZW4gXFx1MDAzZSB0dmx2X3ZhbHVlX2xlbilcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcbi1cXHRcXHQvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZVxcbi1cXHRcXHQgKiBhbGlnbm1lbnQsIHNvIGl0IG11c3Qgc3RhcnQgYXQgYW4gZXZlbiBvZmZzZXQuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcXHUwMDI2IDEpXFxuLVxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0dHZsdl9oYW5kbGVyID0gYmF0YWR2X3R2bHZfaGFuZGxlcl9nZXQoYmF0X3ByaXYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICB0dmx2X2hkci1cXHUwMDNldHlwZSxcXG5AQCAtNTMyLDExICs1NTAsOSBAQCBpbnQgYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcbiBcXHRcXHRyZXQgfD0gYmF0YWR2X3R2bHZfY2FsbF9oYW5kbGVyKGJhdF9wcml2LCB0dmx2X2hhbmRsZXIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHBhY2tldF90eXBlLCBvcmlnX25vZGUsIHNrYixcXG4tXFx0XFx0XFx0XFx0XFx0XFx0dHZsdl92YWx1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0dHZsdl9oZHIgKyAxLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR0dmx2X3ZhbHVlX2NvbnRfbGVuKTtcXG4gXFx0XFx0YmF0YWR2X3R2bHZfaGFuZGxlcl9wdXQodHZsdl9oYW5kbGVyKTtcXG4tXFx0XFx0dHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWUgKyB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xcbi1cXHRcXHR0dmx2X3ZhbHVlX2xlbiAtPSB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAocGFja2V0X3R5cGUgIT0gQkFUQURWX0lWX09HTSBcXHUwMDI2XFx1MDAyNlxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oIGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaFxcbmluZGV4IGIxZjlmODk2NGMzZmQyLi5jZDEyNzU1ZDIxZjM1NiAxMDA2NDRcXG4tLS0gYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaFxcbkBAIC0yMTQsOSArMjE0LDYgQEAgc3RydWN0IGJhdGFkdl93aWZpX25ldF9kZXZpY2Vfc3RhdGUge1xcbiAgKiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgLSBuZXR3b3JrIGRldmljZSBrbm93biB0byBiYXRtYW4tYWR2XFxuICAqL1xcbiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2Uge1xcbi1cXHQvKiogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgYmF0YWR2X2hhcmRpZl9saXN0ICovXFxuLVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4tXFxuIFxcdC8qKiBAaWZfc3RhdHVzOiBzdGF0dXMgb2YgdGhlIGludGVyZmFjZSBmb3IgYmF0bWFuLWFkdiAqL1xcbiBcXHRjaGFyIGlmX3N0YXR1cztcXG4gXFxuQEAgLTEzMzUsOSArMTMzMiw5IEBAIHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCB7XFxuIFxcdHUzMiBzZXFubztcXG4gXFxuIFxcdC8qKiBAbGVuOiBsZW5ndGggb2YgdGhlIHBhY2tldCAqL1xcbi1cXHR1MTYgbGVuO1xcbitcXHR1MzIgbGVuO1xcbiBcXG4tXFx0LyoqIEBsaXN0OiBsaXN0IG5vZGUgZm9yIFxcdTAwMjZiYXRhZHZfdHBfdmFyc19jb21tb24udW5hY2tlZF9saXN0ICovXFxuK1xcdC8qKiBAbGlzdDogbGlzdCBub2RlIGZvciBcXHUwMDI2YmF0YWR2X3RwX3JlY2VpdmVyLnVuYWNrZWRfbGlzdCAqL1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIH07XFxuIFxcbkBAIC0xMzYwLDE1ICsxMzU3LDYgQEAgc3RydWN0IGJhdGFkdl90cF92YXJzX2NvbW1vbiB7XFxuIFxcdC8qKiBAc2Vzc2lvbjogVFAgc2Vzc2lvbiBpZGVudGlmaWVyICovXFxuIFxcdHU4IHNlc3Npb25bMl07XFxuIFxcbi1cXHQvKiogQHVuYWNrZWRfbGlzdDogbGlzdCBvZiB1bmFja2VkIHBhY2tldHMgKG1ldGEtaW5mbyBvbmx5KSAqL1xcbi1cXHRzdHJ1Y3QgbGlzdF9oZWFkIHVuYWNrZWRfbGlzdDtcXG4tXFxuLVxcdC8qKiBAdW5hY2tlZF9sb2NrOiBwcm90ZWN0IHVuYWNrZWRfbGlzdCArIFxcdTAwMjZiYXRhZHZfdHBfcmVjZWl2ZXIubGFzdF9yZWN2ICovXFxuLVxcdHNwaW5sb2NrX3QgdW5hY2tlZF9sb2NrO1xcbi1cXG4tXFx0LyoqIEB1bmFja2VkX2NvdW50OiBudW1iZXIgb2YgdW5hY2tlZCBlbnRyaWVzICovXFxuLVxcdHNpemVfdCB1bmFja2VkX2NvdW50O1xcbi1cXG4gXFx0LyoqIEByZWZjb3VudDogbnVtYmVyIG9mIGNvbnRleHQgd2hlcmUgdGhlIG9iamVjdCBpcyB1c2VkICovXFxuIFxcdHN0cnVjdCBrcmVmIHJlZmNvdW50O1xcbiBcXG5AQCAtMTQ4Miw2ICsxNDcwLDE1IEBAIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIge1xcbiBcXG4gXFx0LyoqIEBsYXN0X3JlY3ZfdGltZTogdGltZSAoamlmZmllcykgYSBtc2cgd2FzIHJlY2VpdmVkICovXFxuIFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9yZWN2X3RpbWU7XFxuK1xcbitcXHQvKiogQHVuYWNrZWRfbGlzdDogbGlzdCBvZiB1bmFja2VkIHBhY2tldHMgKG1ldGEtaW5mbyBvbmx5KSAqL1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHVuYWNrZWRfbGlzdDtcXG4rXFxuK1xcdC8qKiBAYWNrX3NlcW5vX2xvY2s6IHByb3RlY3QgdW5hY2tlZF9saXN0ICsgXFx1MDAyNmJhdGFkdl90cF9yZWNlaXZlci5sYXN0X3JlY3YgKi9cXG4rXFx0c3BpbmxvY2tfdCBhY2tfc2Vxbm9fbG9jaztcXG4rXFxuK1xcdC8qKiBAdW5hY2tlZF9jb3VudDogbnVtYmVyIG9mIHVuYWNrZWQgZW50cmllcyAqL1xcbitcXHRzaXplX3QgdW5hY2tlZF9jb3VudDtcXG4gfTtcXG4gXFxuIC8qKlxcbkBAIC0xNjc5LDYgKzE2NzYsOSBAQCBzdHJ1Y3QgYmF0YWR2X3ByaXYge1xcbiBcXHQvKiogQHRwX251bTogbnVtYmVyIG9mIGN1cnJlbnRseSBhY3RpdmUgdHAgc2Vzc2lvbnMgKi9cXG4gXFx0YXRvbWljX3QgdHBfbnVtO1xcbiBcXG4rXFx0LyoqIEBoYXJkaWZfZ2VuZXJhdGlvbjogZ2VuZXJhdGlvbiBjb3VudGVyIGFkZGVkIHRvIG5ldGxpbmsgaGFyZGlmIGR1bXBzICovXFxuK1xcdHVuc2lnbmVkIGludCBoYXJkaWZfZ2VuZXJhdGlvbjtcXG4rXFxuIFxcdC8qKiBAb3JpZ193b3JrOiB3b3JrIHF1ZXVlIGNhbGxiYWNrIGl0ZW0gZm9yIG9yaWcgbm9kZSBwdXJnaW5nICovXFxuIFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgb3JpZ193b3JrO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjA6NTQuODAxNzQ2NjQ3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDk5MDI2MDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCQVRNQU5fQURWXCIsXG4gICAgXCJCQVRNQU5fQURWX0JBVE1BTl9WXCIsXG4gICAgXCJCQVRNQU5fQURWX0JMQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZVwiLFxuICAgIFwiYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZVwiLFxuICAgIFwiYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXJcIixcbiAgICBcImJhdGFkdl90cF9yZWN2X21zZ1wiLFxuICAgIFwiYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzXCIsXG4gICAgXCJiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIEIuQS5ULk0uQS5OLiBBZHZhbmNlZCByb3V0aW5nIHByb3RvY29sLiBJdCBtb2RpZmllcyB0aGUgaGFuZGxpbmcgb2YgaGFyZCBpbnRlcmZhY2VzIChhZGRpbmcvcmVtb3ZpbmcgdGhlbSBmcm9tIHRoZSBtZXNoKSwgdGhlIHByb2Nlc3Npbmcgb2Ygb3V0LW9mLW9yZGVyIFRQIG1ldGVyIHBhY2tldHMsIGFuZCB0aGUgcGFyc2luZyBvZiBUVkxWIGNvbnRhaW5lcnMuIFRoZXNlIGFyZSBjb3JlIGxvZ2ljIGNoYW5nZXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluay9zeXNmcyBhbmQgbmV0d29yayBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYTJlZjQxZGQzM2NhZDE2NTk4NjM1ZDIwZTM0ZDUzZjU4ZGU1YzBiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMjE6MjA6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcbmluZGV4IGJiMmYwMTJiNDU0ZWE0Li4yMjYyMjI4M2Y1OWIwYyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jXG5AQCAtNDA0LDIzICs0MDQsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zZW5kX3RvX2lmKHN0cnVjdCBiYXRhZHZfZm9yd19wYWNrZXQgKmZvcndfcGFja2V0LFxuIC8qIHNlbmQgYSBiYXRtYW4gb2dtIHBhY2tldCAqL1xuIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fZW1pdChzdHJ1Y3QgYmF0YWR2X2ZvcndfcGFja2V0ICpmb3J3X3BhY2tldClcbiB7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcbi1cbiBcdGlmICghZm9yd19wYWNrZXQtXHUwMDNlaWZfaW5jb21pbmcpIHtcbiBcdFx0cHJfZXJyKFwiRXJyb3IgLSBjYW4ndCBmb3J3YXJkIHBhY2tldDogaW5jb21pbmcgaWZhY2Ugbm90IHNwZWNpZmllZFxcblwiKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0bWVzaF9pZmFjZSA9IGZvcndfcGFja2V0LVx1MDAzZWlmX2luY29taW5nLVx1MDAzZW1lc2hfaWZhY2U7XG4tXG4gXHRpZiAoV0FSTl9PTighZm9yd19wYWNrZXQtXHUwMDNlaWZfb3V0Z29pbmcpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoZm9yd19wYWNrZXQtXHUwMDNlaWZfb3V0Z29pbmctXHUwMDNlbWVzaF9pZmFjZSAhPSBtZXNoX2lmYWNlKSB7XG4tXHRcdHByX3dhcm4oXCIlczogbWVzaCBpbnRlcmZhY2Ugc3dpdGNoIGZvciBxdWV1ZWQgT0dNXFxuXCIsIF9fZnVuY19fKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuLVxuIFx0aWYgKGZvcndfcGFja2V0LVx1MDAzZWlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfQUNUSVZFKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtOTEwLDggKzkwMSw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9pdl9vZ21fc2NoZWR1bGVfYnVmZihzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4gXG4gc3RhdGljIHZvaWQgYmF0YWR2X2l2X29nbV9zY2hlZHVsZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4ge1xuLVx0aWYgKGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID09IEJBVEFEVl9JRl9OT1RfSU5fVVNFIHx8XG4tXHQgICAgaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpXG4rXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpXG4gXHRcdHJldHVybjtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2ViYXRfaXYub2dtX2J1ZmZfbXV0ZXgpO1xuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmNcbmluZGV4IDQ4NDFmMGYxYTliMTM5Li4yNjJlNDAwNDAwMDdjYyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuY1xuQEAgLTkwLDEyICs5MCw2IEBAIHN0YXRpYyBib29sIGJhdGFkdl92X2VscF9nZXRfdGhyb3VnaHB1dChzdHJ1Y3QgYmF0YWR2X2hhcmRpZl9uZWlnaF9ub2RlICpuZWlnaCxcbiBcdHUzMiB0aHJvdWdocHV0O1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIGRvbid0IHF1ZXJ5IHRocm91Z2hwdXQgd2hlbiBubyBsb25nZXIgYXNzb2NpYXRlZCB3aXRoIGFueVxuLVx0ICogYmF0bWFuLWFkdiBpbnRlcmZhY2Vcbi1cdCAqL1xuLVx0aWYgKCFtZXNoX2lmYWNlKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4gXHQvKiBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBjdXN0b21pc2VkIHZhbHVlIGZvciB0aGlzIGludGVyZmFjZSwgdGhlblxuIFx0ICogcmV0dXJuIGl0IGRpcmVjdGx5XG4gXHQgKi9cbkBAIC0zMTEsOCArMzA1LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3ZfZWxwX3BlcmlvZGljX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRnb3RvIG91dDtcbiBcbiBcdC8qIHdlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBzaHV0dGluZyB0aGlzIGludGVyZmFjZSBkb3duICovXG4tXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UgfHxcbi1cdCAgICBoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcbitcdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHQvKiB0aGUgaW50ZXJmYWNlIHdhcyBlbmFibGVkIGJ1dCBtYXkgbm90IGJlIHJlYWR5IHlldCAqL1xuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmNcbmluZGV4IDAzNzkyMWFhZDM1ZDU4Li5lOTIxZDQ5ZjdlY2VkZCAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdl9vZ20uY1xuQEAgLTExNSwxNCArMTE1LDE0IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9zdGFydF90aW1lcihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxuIFxuIC8qKlxuICAqIGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKCkgLSBzZW5kIGEgYmF0bWFuIG9nbSB1c2luZyBhIGdpdmVuIGludGVyZmFjZVxuLSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuICAqIEBza2I6IHRoZSBPR00gdG8gc2VuZFxuICAqIEBoYXJkX2lmYWNlOiB0aGUgaW50ZXJmYWNlIHRvIHVzZSB0byBzZW5kIHRoZSBPR01cbiAgKi9cbi1zdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fc2VuZF90b19pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IsXG4rc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3NlbmRfdG9faWYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4ge1xuK1x0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4rXG4gXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0FDVElWRSkge1xuIFx0XHRrZnJlZV9za2Ioc2tiKTtcbiBcdFx0cmV0dXJuO1xuQEAgLTE4OSw3ICsxODksNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9saXN0X2ZyZWUoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIFxuIC8qKlxuICAqIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoKSAtIGZsdXNoIFx1MDAyNiBzZW5kIGFnZ3JlZ2F0aW9uIHF1ZXVlXG4tICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4gICogQGhhcmRfaWZhY2U6IHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUgYWdncmVnYXRpb24gcXVldWUgdG8gZmx1c2hcbiAgKlxuICAqIEFnZ3JlZ2F0ZXMgYWxsIE9HTXYyIHBhY2tldHMgY3VycmVudGx5IGluIHRoZSBhZ2dyZWdhdGlvbiBxdWV1ZSBpbnRvIGFcbkBAIC0xOTksOCArMTk4LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3JfbGlzdF9mcmVlKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbiAgKlxuICAqIENhbGxlciBuZWVkcyB0byBob2xkIHRoZSBoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGlzdC5sb2NrLlxuICAqL1xuLXN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi1cdFx0XHRcdCAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbitzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fYWdncl9zZW5kKHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZSlcbiB7XG4gXHR1bnNpZ25lZCBpbnQgYWdncl9sZW4gPSBoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGVuO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9hZ2dyO1xuQEAgLTIzMCwyNiArMjI4LDIxIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0Y29uc3VtZV9za2Ioc2tiKTtcbiBcdH1cbiBcbi1cdGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKGJhdF9wcml2LCBza2JfYWdnciwgaGFyZF9pZmFjZSk7XG4rXHRiYXRhZHZfdl9vZ21fc2VuZF90b19pZihza2JfYWdnciwgaGFyZF9pZmFjZSk7XG4gfVxuIFxuIC8qKlxuICAqIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZigpIC0gcXVldWUgYSBiYXRtYW4gb2dtIG9uIGEgZ2l2ZW4gaW50ZXJmYWNlXG4tICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4gICogQHNrYjogdGhlIE9HTSB0byBxdWV1ZVxuICAqIEBoYXJkX2lmYWNlOiB0aGUgaW50ZXJmYWNlIHRvIHF1ZXVlIHRoZSBPR00gb25cbiAgKi9cbi1zdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fcXVldWVfb25faWYoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi1cdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fcXVldWVfb25faWYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIHtcbi1cdGlmIChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UgIT0gYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZSkge1xuLVx0XHRrZnJlZV9za2Ioc2tiKTtcbi1cdFx0cmV0dXJuO1xuLVx0fVxuK1x0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXG4gXHRpZiAoIVJFQURfT05DRShiYXRfcHJpdi1cdTAwM2VhZ2dyZWdhdGVkX29nbXMpKSB7XG4tXHRcdGJhdGFkdl92X29nbV9zZW5kX3RvX2lmKGJhdF9wcml2LCBza2IsIGhhcmRfaWZhY2UpO1xuK1x0XHRiYXRhZHZfdl9vZ21fc2VuZF90b19pZihza2IsIGhhcmRfaWZhY2UpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMjYwLDcgKzI1Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl92X29nbV9xdWV1ZV9vbl9pZihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0fVxuIFxuIFx0aWYgKCFiYXRhZHZfdl9vZ21fcXVldWVfbGVmdChza2IsIGhhcmRfaWZhY2UpKVxuLVx0XHRiYXRhZHZfdl9vZ21fYWdncl9zZW5kKGJhdF9wcml2LCBoYXJkX2lmYWNlKTtcbitcdFx0YmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChoYXJkX2lmYWNlKTtcbiBcbiBcdGhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9sZW4gKz0gYmF0YWR2X3Zfb2dtX2xlbihza2IpO1xuIFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGlzdCwgc2tiKTtcbkBAIC0zNTcsNyArMzUwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3Zfb2dtX3NlbmRfbWVzaGlmKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0YmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKGJhdF9wcml2LCBza2JfdG1wLCBoYXJkX2lmYWNlKTtcbitcdFx0YmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHNrYl90bXAsIGhhcmRfaWZhY2UpO1xuIFx0XHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuQEAgLTM5NywxNCArMzkwLDEyIEBAIHZvaWQgYmF0YWR2X3Zfb2dtX2FnZ3Jfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlX2JhdF92ICpiYXR2O1xuIFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xuLVx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdjtcbiBcbiBcdGJhdHYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlX2JhdF92LCBhZ2dyX3dxLndvcmspO1xuIFx0aGFyZF9pZmFjZSA9IGNvbnRhaW5lcl9vZihiYXR2LCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UsIGJhdF92KTtcbi1cdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiBcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdF92LmFnZ3JfbGlzdC5sb2NrKTtcbi1cdGJhdGFkdl92X29nbV9hZ2dyX3NlbmQoYmF0X3ByaXYsIGhhcmRfaWZhY2UpO1xuK1x0YmF0YWR2X3Zfb2dtX2FnZ3Jfc2VuZChoYXJkX2lmYWNlKTtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X3YuYWdncl9saXN0LmxvY2spO1xuIFxuIFx0YmF0YWR2X3Zfb2dtX3N0YXJ0X3F1ZXVlX3RpbWVyKGhhcmRfaWZhY2UpO1xuQEAgLTYwMSw3ICs1OTIsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdl9vZ21fZm9yd2FyZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHQgICBpZl9vdXRnb2luZy1cdTAwM2VuZXRfZGV2LVx1MDAzZW5hbWUsIG50b2hsKG9nbV9mb3J3YXJkLVx1MDAzZXRocm91Z2hwdXQpLFxuIFx0XHQgICBvZ21fZm9yd2FyZC1cdTAwM2V0dGwsIGlmX2luY29taW5nLVx1MDAzZW5ldF9kZXYtXHUwMDNlbmFtZSk7XG4gXG4tXHRiYXRhZHZfdl9vZ21fcXVldWVfb25faWYoYmF0X3ByaXYsIHNrYiwgaWZfb3V0Z29pbmcpO1xuK1x0YmF0YWR2X3Zfb2dtX3F1ZXVlX29uX2lmKHNrYiwgaWZfb3V0Z29pbmcpO1xuIFxuIG91dDpcbiBcdGJhdGFkdl9vcmlnX2lmaW5mb19wdXQob3JpZ19pZmluZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jIGIvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcbmluZGV4IDVjNzNmNmJhMTZjZmYzLi5mOWExZmFkZjhkZTllNCAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuY1xuQEAgLTM0NCw3ICszNDQsNiBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfY2xhaW0oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKm1hYyxcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4gXHRzdHJ1Y3QgZXRoaGRyICpldGhoZHI7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcbiBcdHU4ICpod19zcmM7XG4gXHRzdHJ1Y3QgYmF0YWR2X2JsYV9jbGFpbV9kc3QgbG9jYWxfY2xhaW1fZGVzdDtcbiBcdF9fYmUzMiB6ZXJvaXAgPSAwO1xuQEAgLTM1NywxNCArMzU2LDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLFxuIFx0ICAgICAgIHNpemVvZihsb2NhbF9jbGFpbV9kZXN0KSk7XG4gXHRsb2NhbF9jbGFpbV9kZXN0LnR5cGUgPSBjbGFpbXR5cGU7XG4gXG4tXHRtZXNoX2lmYWNlID0gUkVBRF9PTkNFKHByaW1hcnlfaWYtXHUwMDNlbWVzaF9pZmFjZSk7XG4tXHRpZiAoIW1lc2hfaWZhY2UpXG4tXHRcdGdvdG8gb3V0O1xuLVxuIFx0c2tiID0gYXJwX2NyZWF0ZShBUlBPUF9SRVBMWSwgRVRIX1BfQVJQLFxuIFx0XHRcdCAvKiBJUCBEU1Q6IDAuMC4wLjAgKi9cbiBcdFx0XHQgemVyb2lwLFxuLVx0XHRcdCBtZXNoX2lmYWNlLFxuK1x0XHRcdCBwcmltYXJ5X2lmLVx1MDAzZW1lc2hfaWZhY2UsXG4gXHRcdFx0IC8qIElQIFNSQzogMC4wLjAuMCAqL1xuIFx0XHRcdCB6ZXJvaXAsXG4gXHRcdFx0IC8qIEV0aGVybmV0IERTVDogQnJvYWRjYXN0ICovXG5AQCAtNDQyLDcgKzQzNyw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqbWFjLFxuIFx0fVxuIFxuIFx0c2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTtcbi1cdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbWVzaF9pZmFjZSk7XG4rXHRza2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHByaW1hcnlfaWYtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXHRiYXRhZHZfaW5jX2NvdW50ZXIoYmF0X3ByaXYsIEJBVEFEVl9DTlRfUlgpO1xuIFx0YmF0YWR2X2FkZF9jb3VudGVyKGJhdF9wcml2LCBCQVRBRFZfQ05UX1JYX0JZVEVTLFxuIFx0XHRcdCAgIHNrYi1cdTAwM2VsZW4gKyBFVEhfSExFTik7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmNcbmluZGV4IDAzZDAxYzIwYTk1NDhiLi5iNjg2NzU3NmJiYWZhZSAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmNcbisrKyBiL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmNcbkBAIC02Myw2ICs2Myw3IEBAIHZvaWQgYmF0YWR2X2hhcmRpZl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4gXG4gXHRoYXJkX2lmYWNlID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlLCByZWZjb3VudCk7XG4rXHRuZXRkZXZfcHV0KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSwgXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoaWZfZGV2X3RyYWNrZXIpO1xuIFx0bmV0ZGV2X3B1dChoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlZGV2X3RyYWNrZXIpO1xuIFxuIFx0a2ZyZWVfcmN1KGhhcmRfaWZhY2UsIHJjdSk7XG5AQCAtNzUsMjEgKzc2LDIxIEBAIHZvaWQgYmF0YWR2X2hhcmRpZl9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpXG4gICogUmV0dXJuOiBiYXRhZHZfaGFyZF9pZmFjZSBvZiBuZXRfZGV2ICh3aXRoIGluY3JlYXNlZCByZWZjbnQpLCBOVUxMIG9uIGVycm9yc1xuICAqL1xuIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqXG4tYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxuK2JhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldilcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2U7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZTtcbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGhhcmRfaWZhY2UsIFx1MDAyNmJhdGFkdl9oYXJkaWZfbGlzdCwgbGlzdCkge1xuLVx0XHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2ID09IG5ldF9kZXYgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KSlcbi1cdFx0XHRnb3RvIG91dDtcbi1cdH1cbitcdEFTU0VSVF9SVE5MKCk7XG4gXG4tXHRoYXJkX2lmYWNlID0gTlVMTDtcbitcdG1lc2hfaWZhY2UgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobmV0X2Rldik7XG4rXHRpZiAoIW1lc2hfaWZhY2UgfHwgIWJhdGFkdl9tZXNoaWZfaXNfdmFsaWQobWVzaF9pZmFjZSkpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0aGFyZF9pZmFjZSA9IG5ldGRldl9sb3dlcl9kZXZfZ2V0X3ByaXZhdGUobWVzaF9pZmFjZSwgbmV0X2Rldik7XG4rXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlcmVmY291bnQpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbiBcbi1vdXQ6XG4tXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcdHJldHVybiBoYXJkX2lmYWNlO1xuIH1cbiBcbkBAIC0yNDUsNyArMjQ2LDcgQEAgc3RydWN0IG5ldF9kZXZpY2UgKl9fYmF0YWR2X2dldF9yZWFsX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0fVxuIFxuIFx0aGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihuZXRkZXYpO1xuLVx0aWYgKCFoYXJkX2lmYWNlIHx8ICFoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpXG4rXHRpZiAoIWhhcmRfaWZhY2UpXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0bmV0ID0gZGV2X25ldChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuQEAgLTUzOSwxNiArNTQwLDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhXG4gXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnRtcF9oYXJkX2lmYWNlO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcbiBcbi1cdGlmICghbWVzaF9pZmFjZSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0bmV0ZGV2X2Zvcl9lYWNoX2xvd2VyX3ByaXZhdGUobWVzaF9pZmFjZSwgdG1wX2hhcmRfaWZhY2UsIGl0ZXIpIHtcbiBcdFx0aWYgKHRtcF9oYXJkX2lmYWNlID09IGhhcmRfaWZhY2UpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGlmICh0bXBfaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGlmICghYmF0YWR2X2NvbXBhcmVfZXRoKHRtcF9oYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYtXHUwMDNlZGV2X2FkZHIsXG4gXHRcdFx0XHRcdGhhcmRfaWZhY2UtXHUwMDNlbmV0X2Rldi1cdTAwM2VkZXZfYWRkcikpXG4gXHRcdFx0Y29udGludWU7XG5AQCAtNTc0LDkgKzU2OSw2IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9oYXJkaWZfcmVjYWxjX2V4dHJhX3NrYnJvb20oc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXG4gXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfcHJpdmF0ZV9yY3UobWVzaF9pZmFjZSwgaGFyZF9pZmFjZSwgaXRlcikge1xuLVx0XHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdFx0Y29udGludWU7XG4tXG4gXHRcdGxvd2VyX2hlYWRlcl9sZW4gPSBtYXhfdCh1bnNpZ25lZCBzaG9ydCwgbG93ZXJfaGVhZGVyX2xlbixcbiBcdFx0XHRcdFx0IGhhcmRfaWZhY2UtXHUwMDNlbmV0X2Rldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pO1xuIFxuQEAgLTcyMywzOCArNzE1LDYzIEBAIGJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIH1cbiBcbiAvKipcbi0gKiBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2UoKSAtIEVuc2xhdmUgaGFyZCBpbnRlcmZhY2UgdG8gbWVzaCBpbnRlcmZhY2Vcbi0gKiBAaGFyZF9pZmFjZTogaGFyZCBpbnRlcmZhY2UgdG8gYWRkIHRvIG1lc2ggaW50ZXJmYWNlXG4rICogYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlKCkgLSBFbnNsYXZlIGludGVyZmFjZSB0byBtZXNoIGludGVyZmFjZVxuKyAqIEBuZXRfZGV2OiBuZXRkZXYgc3RydWN0IG9mIHRoZSBpbnRlcmZhY2UgdG8gYWRkIHRvIG1lc2ggaW50ZXJmYWNlXG4gICogQG1lc2hfaWZhY2U6IG5ldGRldiBzdHJ1Y3Qgb2YgdGhlIG1lc2ggaW50ZXJmYWNlXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBudW1iZXIgaW4gY2FzZSBvZiBmYWlsdXJlXG4gICovXG4taW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXG4raW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKVxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7XG4gXHRfX2JlMTYgZXRoZXJ0eXBlID0gaHRvbnMoRVRIX1BfQkFUTUFOKTtcbiBcdGludCBtYXhfaGVhZGVyX2xlbiA9IGJhdGFkdl9tYXhfaGVhZGVyX2xlbigpO1xuK1x0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xuIFx0dW5zaWduZWQgaW50IHJlcXVpcmVkX210dTtcbiBcdHVuc2lnbmVkIGludCBoYXJkaWZfbXR1O1xuIFx0Ym9vbCBmcmFnbWVudGF0aW9uO1xuIFx0aW50IHJldDtcbiBcbi1cdGhhcmRpZl9tdHUgPSBSRUFEX09OQ0UoaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2LVx1MDAzZW10dSk7XG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0aWYgKCFiYXRhZHZfaXNfdmFsaWRfaWZhY2UobmV0X2RldikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aGFyZGlmX210dSA9IFJFQURfT05DRShuZXRfZGV2LVx1MDAzZW10dSk7XG4gXHRyZXF1aXJlZF9tdHUgPSBSRUFEX09OQ0UobWVzaF9pZmFjZS1cdTAwM2VtdHUpICsgbWF4X2hlYWRlcl9sZW47XG4gXG4gXHRpZiAoaGFyZGlmX210dSBcdTAwM2MgRVRIX01JTl9NVFUgKyBtYXhfaGVhZGVyX2xlbilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdGdvdG8gb3V0O1xuK1x0aGFyZF9pZmFjZSA9IGt6YWxsb2Nfb2JqKCpoYXJkX2lmYWNlLCBHRlBfQVRPTUlDKTtcbitcdGlmICghaGFyZF9pZmFjZSlcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRrcmVmX2dldChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KTtcbitcdG5ldGRldl9ob2xkKG5ldF9kZXYsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuK1x0aGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2ID0gbmV0X2RldjtcbitcbitcdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX0lOQUNUSVZFO1xuK1xuK1x0SU5JVF9ITElTVF9IRUFEKFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbmVpZ2hfbGlzdCk7XG4rXG4rXHRtdXRleF9pbml0KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlYmF0X2l2Lm9nbV9idWZmX211dGV4KTtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbmVpZ2hfbGlzdF9sb2NrKTtcbitcdGtyZWZfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KTtcbitcbitcdGhhcmRfaWZhY2UtXHUwMDNlbnVtX2JjYXN0cyA9IEJBVEFEVl9OVU1fQkNBU1RTX0RFRkFVTFQ7XG4rXHRpZiAoYmF0YWR2X2lzX3dpZmlfaGFyZGlmKGhhcmRfaWZhY2UpKVxuK1x0XHRoYXJkX2lmYWNlLVx1MDAzZW51bV9iY2FzdHMgPSBCQVRBRFZfTlVNX0JDQVNUU19XSVJFTEVTUztcbitcbitcdFdSSVRFX09OQ0UoaGFyZF9pZmFjZS1cdTAwM2Vob3BfcGVuYWx0eSwgMCk7XG4rXG4rXHRiYXRhZHZfdl9oYXJkaWZfaW5pdChoYXJkX2lmYWNlKTtcbiBcbiBcdG5ldGRldl9ob2xkKG1lc2hfaWZhY2UsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbWVzaGlmX2Rldl90cmFja2VyLCBHRlBfQVRPTUlDKTtcbiBcdGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSA9IG1lc2hfaWZhY2U7XG4gXHRiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXG4rXHRiYXRfcHJpdi1cdTAwM2VoYXJkaWZfZ2VuZXJhdGlvbisrO1xuIFx0cmV0ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfbGluayhoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYsXG4gXHRcdFx0XHRcdCAgIG1lc2hfaWZhY2UsIGhhcmRfaWZhY2UsIE5VTEwsIE5VTEwpO1xuIFx0aWYgKHJldClcbkBAIC03NjQsOSArNzgxLDYgQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl91cHBlcjtcbiBcbi1cdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX0lOQUNUSVZFO1xuLVxuLVx0a3JlZl9nZXQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCk7XG4gXHRoYXJkX2lmYWNlLVx1MDAzZWJhdG1hbl9hZHZfcHR5cGUudHlwZSA9IGV0aGVydHlwZTtcbiBcdGhhcmRfaWZhY2UtXHUwMDNlYmF0bWFuX2Fkdl9wdHlwZS5mdW5jID0gYmF0YWR2X2JhdG1hbl9za2JfcmVjdjtcbiBcdGhhcmRfaWZhY2UtXHUwMDNlYmF0bWFuX2Fkdl9wdHlwZS5kZXYgPSBoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXY7XG5AQCAtODAyLDE0ICs4MTYsMTEgQEAgaW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UsXG4gXHRpZiAoYmF0X3ByaXYtXHUwMDNlYWxnb19vcHMtXHUwMDNlaWZhY2UuZW5hYmxlZClcbiBcdFx0YmF0X3ByaXYtXHUwMDNlYWxnb19vcHMtXHUwMDNlaWZhY2UuZW5hYmxlZChoYXJkX2lmYWNlKTtcbiBcbi1vdXQ6XG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfdXBwZXI6XG4gXHRuZXRkZXZfdXBwZXJfZGV2X3VubGluayhoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYsIG1lc2hfaWZhY2UpO1xuIGVycl9kZXY6XG4tXHRoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UgPSBOVUxMO1xuLVx0bmV0ZGV2X3B1dChtZXNoX2lmYWNlLCBcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZW1lc2hpZl9kZXZfdHJhY2tlcik7XG4gXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTgyMSwxNyArODMyLDE4IEBAIGludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxuIHZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4ge1xuIFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4tXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMO1xuK1x0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbiBcbiBcdGJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XG4gXG4gXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFKVxuLVx0XHRnb3RvIG91dDtcbitcdFx0cmV0dXJuO1xuIFxuIFx0YmF0YWR2X2luZm8oaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlLCBcIlJlbW92aW5nIGludGVyZmFjZTogJXNcXG5cIixcbiBcdFx0ICAgIGhhcmRfaWZhY2UtXHUwMDNlbmV0X2Rldi1cdTAwM2VuYW1lKTtcbiBcdGRldl9yZW1vdmVfcGFjayhcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdG1hbl9hZHZfcHR5cGUpO1xuLVx0YmF0YWR2X2hhcmRpZl9wdXQoaGFyZF9pZmFjZSk7XG4gXG4gXHRwcmltYXJ5X2lmID0gYmF0YWR2X3ByaW1hcnlfaWZfZ2V0X3NlbGVjdGVkKGJhdF9wcml2KTtcbiBcdGlmIChoYXJkX2lmYWNlID09IHByaW1hcnlfaWYpIHtcbkBAIC04NDIsMTUgKzg1NCwxNiBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIFxuIFx0XHRiYXRhZHZfaGFyZGlmX3B1dChuZXdfaWYpO1xuIFx0fVxuK1x0YmF0YWR2X2hhcmRpZl9wdXQocHJpbWFyeV9pZik7XG4gXG4gXHRiYXRfcHJpdi1cdTAwM2VhbGdvX29wcy1cdTAwM2VpZmFjZS5kaXNhYmxlKGhhcmRfaWZhY2UpO1xuLVx0aGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgPSBCQVRBRFZfSUZfTk9UX0lOX1VTRTtcbitcdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQ7XG4gXG4gXHQvKiBkZWxldGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBoYXJkX2lmYWNlICovXG4gXHRiYXRhZHZfcHVyZ2Vfb3JpZ19yZWYoYmF0X3ByaXYpO1xuIFx0YmF0YWR2X3B1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoYmF0X3ByaXYsIGhhcmRfaWZhY2UpO1xuLVx0bmV0ZGV2X3B1dChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbWVzaGlmX2Rldl90cmFja2VyKTtcbiBcbitcdGJhdF9wcml2LVx1MDAzZWhhcmRpZl9nZW5lcmF0aW9uKys7XG4gXHRuZXRkZXZfdXBwZXJfZGV2X3VubGluayhoYXJkX2lmYWNlLVx1MDAzZW5ldF9kZXYsIGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXHRiYXRhZHZfaGFyZGlmX3JlY2FsY19leHRyYV9za2Jyb29tKGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4gXG5AQCAtODU4LDY3ICs4NzEsNiBAQCB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxuIFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlLVx1MDAzZWFkal9saXN0Lmxvd2VyKSlcbiBcdFx0YmF0YWR2X2d3X2NoZWNrX2NsaWVudF9zdG9wKGJhdF9wcml2KTtcbiBcbi1cdGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSA9IE5VTEw7XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbi1cbi1vdXQ6XG4tXHRiYXRhZHZfaGFyZGlmX3B1dChwcmltYXJ5X2lmKTtcbi19XG4tXG4tc3RhdGljIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqXG4tYmF0YWR2X2hhcmRpZl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KVxuLXtcbi1cdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaGFyZF9pZmFjZTtcbi1cbi1cdEFTU0VSVF9SVE5MKCk7XG4tXG4tXHRpZiAoIWJhdGFkdl9pc192YWxpZF9pZmFjZShuZXRfZGV2KSlcbi1cdFx0cmV0dXJuIE5VTEw7XG4tXG4tXHRoYXJkX2lmYWNlID0ga3phbGxvY19vYmooKmhhcmRfaWZhY2UsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKCFoYXJkX2lmYWNlKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdG5ldGRldl9ob2xkKG5ldF9kZXYsIFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuLVx0aGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2ID0gbmV0X2Rldjtcbi1cbi1cdGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSA9IE5VTEw7XG4tXHRoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyA9IEJBVEFEVl9JRl9OT1RfSU5fVVNFO1xuLVxuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VsaXN0KTtcbi1cdElOSVRfSExJU1RfSEVBRChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZW5laWdoX2xpc3QpO1xuLVxuLVx0bXV0ZXhfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZWJhdF9pdi5vZ21fYnVmZl9tdXRleCk7XG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZW5laWdoX2xpc3RfbG9jayk7XG4tXHRrcmVmX2luaXQoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VyZWZjb3VudCk7XG4tXG4tXHRoYXJkX2lmYWNlLVx1MDAzZW51bV9iY2FzdHMgPSBCQVRBRFZfTlVNX0JDQVNUU19ERUZBVUxUO1xuLVx0aWYgKGJhdGFkdl9pc193aWZpX2hhcmRpZihoYXJkX2lmYWNlKSlcbi1cdFx0aGFyZF9pZmFjZS1cdTAwM2VudW1fYmNhc3RzID0gQkFUQURWX05VTV9CQ0FTVFNfV0lSRUxFU1M7XG4tXG4tXHRXUklURV9PTkNFKGhhcmRfaWZhY2UtXHUwMDNlaG9wX3BlbmFsdHksIDApO1xuLVxuLVx0YmF0YWR2X3ZfaGFyZGlmX2luaXQoaGFyZF9pZmFjZSk7XG4tXG4tXHRrcmVmX2dldChcdTAwMjZoYXJkX2lmYWNlLVx1MDAzZXJlZmNvdW50KTtcbi1cdGxpc3RfYWRkX3RhaWxfcmN1KFx1MDAyNmhhcmRfaWZhY2UtXHUwMDNlbGlzdCwgXHUwMDI2YmF0YWR2X2hhcmRpZl9saXN0KTtcbi1cdGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbisrO1xuLVxuLVx0cmV0dXJuIGhhcmRfaWZhY2U7XG4tfVxuLVxuLXN0YXRpYyB2b2lkIGJhdGFkdl9oYXJkaWZfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXG4te1xuLVx0QVNTRVJUX1JUTkwoKTtcbi1cbi1cdC8qIGZpcnN0IGRlYWN0aXZhdGUgaW50ZXJmYWNlICovXG4tXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2UoaGFyZF9pZmFjZSk7XG4tXG4tXHRpZiAoaGFyZF9pZmFjZS1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX05PVF9JTl9VU0UpXG4tXHRcdHJldHVybjtcbi1cbi1cdGhhcmRfaWZhY2UtXHUwMDNlaWZfc3RhdHVzID0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQ7XG4gXHRiYXRhZHZfaGFyZGlmX3B1dChoYXJkX2lmYWNlKTtcbiB9XG4gXG5AQCAtMTA4MiwxMCArMTAzNCw2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2hhcmRfaWZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLFxuIFx0YmF0YWR2X3dpZmlfbmV0X2RldmljZV9ldmVudChldmVudCwgbmV0X2Rldik7XG4gXG4gXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KG5ldF9kZXYpO1xuLVx0aWYgKCFoYXJkX2lmYWNlIFx1MDAyNlx1MDAyNiAoZXZlbnQgPT0gTkVUREVWX1JFR0lTVEVSIHx8XG4tXHRcdFx0ICAgIGV2ZW50ID09IE5FVERFVl9QT1NUX1RZUEVfQ0hBTkdFKSlcbi1cdFx0aGFyZF9pZmFjZSA9IGJhdGFkdl9oYXJkaWZfYWRkX2ludGVyZmFjZShuZXRfZGV2KTtcbi1cbiBcdGlmICghaGFyZF9pZmFjZSlcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtMTA5OSwxOSArMTA0NywxMiBAQCBzdGF0aWMgaW50IGJhdGFkdl9oYXJkX2lmX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5FVERFVl9VTlJFR0lTVEVSOlxuIFx0Y2FzZSBORVRERVZfUFJFX1RZUEVfQ0hBTkdFOlxuLVx0XHRsaXN0X2RlbF9yY3UoXHUwMDI2aGFyZF9pZmFjZS1cdTAwM2VsaXN0KTtcbi1cdFx0YmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uKys7XG4tXG4tXHRcdGJhdGFkdl9oYXJkaWZfcmVtb3ZlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbitcdFx0YmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE5FVERFVl9DSEFOR0VNVFU6XG4tXHRcdGlmIChoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpXG4tXHRcdFx0YmF0YWR2X3VwZGF0ZV9taW5fbXR1KGhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSk7XG4rXHRcdGJhdGFkdl91cGRhdGVfbWluX210dShoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgTkVUREVWX0NIQU5HRUFERFI6XG4tXHRcdGlmIChoYXJkX2lmYWNlLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSlcbi1cdFx0XHRnb3RvIGhhcmRpZl9wdXQ7XG4tXG4gXHRcdGJhdGFkdl9jaGVja19rbm93bl9tYWNfYWRkcihoYXJkX2lmYWNlKTtcbiBcbiBcdFx0YmF0X3ByaXYgPSBuZXRkZXZfcHJpdihoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UpO1xuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmggYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oXG5pbmRleCBhZjMxNjk2YzM5NzgwOC4uOTM1ZjQ3Y2E5YTQ4ZmQgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oXG5AQCAtMjEsMTIgKzIxLDYgQEBcbiAgKiBlbnVtIGJhdGFkdl9oYXJkX2lmX3N0YXRlIC0gU3RhdGUgb2YgYSBoYXJkIGludGVyZmFjZVxuICAqL1xuIGVudW0gYmF0YWR2X2hhcmRfaWZfc3RhdGUge1xuLVx0LyoqXG4tXHQgKiBAQkFUQURWX0lGX05PVF9JTl9VU0U6IGludGVyZmFjZSBpcyBub3QgdXNlZCBhcyBzbGF2ZSBpbnRlcmZhY2Ugb2YgYVxuLVx0ICogYmF0bWFuLWFkdiBtZXNoIGludGVyZmFjZVxuLVx0ICovXG4tXHRCQVRBRFZfSUZfTk9UX0lOX1VTRSxcbi1cbiBcdC8qKlxuIFx0ICogQEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEOiBpbnRlcmZhY2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gbWVzaFxuIFx0ICogaW50ZXJmYWNlXG5AQCAtNzQsOCArNjgsOCBAQCB1MzIgYmF0YWR2X25ldGRldl9nZXRfd2lmaV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7XG4gdTMyIGJhdGFkdl9oYXJkaWZfZ2V0X3dpZmlfZmxhZ3Moc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKTtcbiBib29sIGJhdGFkdl9pc193aWZpX2hhcmRpZihzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xuIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSpcbi1iYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpO1xuLWludCBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlLFxuK2JhdGFkdl9oYXJkaWZfZ2V0X2J5X25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7XG4raW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcbiB2b2lkIGJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKTtcbiBpbnQgYmF0YWR2X2hhcmRpZl9taW5fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmMgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmNcbmluZGV4IDNjNDU3MjI4NGI1MzJmLi4wNGJiMDMwZWYyOTlhYyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L21haW4uY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jXG5AQCAtNTksMTEgKzU5LDYgQEBcbiAjaW5jbHVkZSBcInRwX21ldGVyLmhcIlxuICNpbmNsdWRlIFwidHJhbnNsYXRpb24tdGFibGUuaFwiXG4gXG4tLyogTGlzdCBtYW5pcHVsYXRpb25zIG9uIGhhcmRpZl9saXN0IGhhdmUgdG8gYmUgcnRubF9sb2NrKCknZWQsXG4tICogbGlzdCB0cmF2ZXJzYWxzIGp1c3QgcmN1LWxvY2tlZFxuLSAqL1xuLXN0cnVjdCBsaXN0X2hlYWQgYmF0YWR2X2hhcmRpZl9saXN0O1xuLXVuc2lnbmVkIGludCBiYXRhZHZfaGFyZGlmX2dlbmVyYXRpb247XG4gc3RhdGljIGludCAoKmJhdGFkdl9yeF9oYW5kbGVyWzI1Nl0pKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcmVjdl9pZik7XG4gXG5AQCAtOTUsNyArOTAsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBiYXRhZHZfaW5pdCh2b2lkKVxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmJhdGFkdl9oYXJkaWZfbGlzdCk7XG4gXHRiYXRhZHZfYWxnb19pbml0KCk7XG4gXG4gXHRiYXRhZHZfcmVjdl9oYW5kbGVyX2luaXQoKTtcbkBAIC00NTAsOSArNDQ0LDYgQEAgaW50IGJhdGFkdl9iYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmICh1bmxpa2VseShza2ItXHUwMDNlbWFjX2xlbiAhPSBFVEhfSExFTiB8fCAhc2tiX21hY19oZWFkZXIoc2tiKSkpXG4gXHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4tXHRpZiAoIWhhcmRfaWZhY2UtXHUwMDNlbWVzaF9pZmFjZSlcbi1cdFx0Z290byBlcnJfZnJlZTtcbi1cbiBcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKTtcbiBcbiBcdGlmIChSRUFEX09OQ0UoYmF0X3ByaXYtXHUwMDNlbWVzaF9zdGF0ZSkgIT0gQkFUQURWX01FU0hfQUNUSVZFKVxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L21haW4uaCBiL25ldC9iYXRtYW4tYWR2L21haW4uaFxuaW5kZXggZjY4ZmM4YjcyMzljZDUuLmU3Mzg3NThlZTRhN2FlIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5oXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9tYWluLmhcbkBAIC0yMjYsOSArMjI2LDYgQEAgc3RhdGljIGlubGluZSBpbnQgYmF0YWR2X3ByaW50X3ZpZCh1bnNpZ25lZCBzaG9ydCB2aWQpXG4gXHRcdHJldHVybiAtMTtcbiB9XG4gXG4tZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYmF0YWR2X2hhcmRpZl9saXN0O1xuLWV4dGVybiB1bnNpZ25lZCBpbnQgYmF0YWR2X2hhcmRpZl9nZW5lcmF0aW9uO1xuLVxuIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYmF0YWR2X2V2ZW50X3dvcmtxdWV1ZTtcbiBcbiBpbnQgYmF0YWR2X21lc2hfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbmluZGV4IDQ0MDI2ODEwYjk5Y2VhLi5hMzczNjhjMWY1YjU1YyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbisrKyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbkBAIC04MzYsMTggKzgzNiw3IEBAIHN0YXRpYyBpbnQgYmF0YWR2X21lc2hpZl9zbGF2ZV9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuLVx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlO1xuLVx0aW50IHJldCA9IC1FSU5WQUw7XG4tXG4tXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KHNsYXZlX2Rldik7XG4tXHRpZiAoIWhhcmRfaWZhY2UgfHwgaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlKVxuLVx0XHRnb3RvIG91dDtcbi1cbi1cdHJldCA9IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShoYXJkX2lmYWNlLCBkZXYpO1xuLVxuLW91dDpcbi1cdGJhdGFkdl9oYXJkaWZfcHV0KGhhcmRfaWZhY2UpO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2Uoc2xhdmVfZGV2LCBkZXYpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMgYi9uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmNcbmluZGV4IDRjZjllM2M1NGFkM2IyLi5kMmJjNDhjNzA3MTQzNCAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L25ldGxpbmsuY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvbmV0bGluay5jXG5AQCAtOTY4LDcgKzk2OCw3IEBAIGJhdGFkdl9uZXRsaW5rX2R1bXBfaGFyZGlmKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiBcdGJhdF9wcml2ID0gbmV0ZGV2X3ByaXYobWVzaF9pZmFjZSk7XG4gXG4gXHRydG5sX2xvY2soKTtcbi1cdGNiLVx1MDAzZXNlcSA9IGJhdGFkdl9oYXJkaWZfZ2VuZXJhdGlvbiBcdTAwM2NcdTAwM2MgMSB8IDE7XG4rXHRjYi1cdTAwM2VzZXEgPSBiYXRfcHJpdi1cdTAwM2VoYXJkaWZfZ2VuZXJhdGlvbiBcdTAwM2NcdTAwM2MgMSB8IDE7XG4gXG4gXHRuZXRkZXZfZm9yX2VhY2hfbG93ZXJfcHJpdmF0ZShtZXNoX2lmYWNlLCBoYXJkX2lmYWNlLCBpdGVyKSB7XG4gXHRcdGlmIChpKysgXHUwMDNjIHNraXApXG5AQCAtMTIxMSw3ICsxMjExLDkgQEAgYmF0YWR2X25ldGxpbmtfZ2V0X2hhcmRpZl9mcm9tX2lmaW5kZXgoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdGlmICghaGFyZF9kZXYpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIFxuK1x0cnRubF9sb2NrKCk7XG4gXHRoYXJkX2lmYWNlID0gYmF0YWR2X2hhcmRpZl9nZXRfYnlfbmV0ZGV2KGhhcmRfZGV2KTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4gXHRpZiAoIWhhcmRfaWZhY2UpXG4gXHRcdGdvdG8gZXJyX3B1dF9oYXJkZGV2O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYyBiL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuY1xuaW5kZXggOWIzOGJkOWU4ZGE3ZWMuLjQ4ZjgzN2NmNjY1YTJhIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmNcbkBAIC0xMDMzLDcgKzEwMzMsNiBAQCBiYXRhZHZfcHVyZ2VfbmVpZ2hfaWZpbmZvKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXG4gXHRcdC8qIGRvbid0IHB1cmdlIGlmIHRoZSBpbnRlcmZhY2UgaXMgbm90IChnb2luZykgZG93biAqL1xuIFx0XHRpZiAoaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9JTkFDVElWRSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGlmX291dGdvaW5nLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfTk9UX0lOX1VTRSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGlmX291dGdvaW5nLVx1MDAzZWlmX3N0YXR1cyAhPSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRClcbiBcdFx0XHRjb250aW51ZTtcbiBcbkBAIC0xMDc3LDcgKzEwNzYsNiBAQCBiYXRhZHZfcHVyZ2Vfb3JpZ19pZmluZm8oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBcdFx0LyogZG9uJ3QgcHVyZ2UgaWYgdGhlIGludGVyZmFjZSBpcyBub3QgKGdvaW5nKSBkb3duICovXG4gXHRcdGlmIChpZl9vdXRnb2luZy1cdTAwM2VpZl9zdGF0dXMgIT0gQkFUQURWX0lGX0lOQUNUSVZFIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9OT1RfSU5fVVNFIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgaWZfb3V0Z29pbmctXHUwMDNlaWZfc3RhdHVzICE9IEJBVEFEVl9JRl9UT19CRV9SRU1PVkVEKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuQEAgLTExMjcsMTAgKzExMjUsOCBAQCBiYXRhZHZfcHVyZ2Vfb3JpZ19uZWlnaGJvcnMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBcdFx0aWYgKGJhdGFkdl9oYXNfdGltZWRfb3V0KGxhc3Rfc2VlbiwgQkFUQURWX1BVUkdFX1RJTUVPVVQpIHx8XG4gXHRcdCAgICBpZl9pbmNvbWluZy1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX0lOQUNUSVZFIHx8XG4tXHRcdCAgICBpZl9pbmNvbWluZy1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX05PVF9JTl9VU0UgfHxcbiBcdFx0ICAgIGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfVE9fQkVfUkVNT1ZFRCkge1xuIFx0XHRcdGlmIChpZl9pbmNvbWluZy1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX0lOQUNUSVZFIHx8XG4tXHRcdFx0ICAgIGlmX2luY29taW5nLVx1MDAzZWlmX3N0YXR1cyA9PSBCQVRBRFZfSUZfTk9UX0lOX1VTRSB8fFxuIFx0XHRcdCAgICBpZl9pbmNvbWluZy1cdTAwM2VpZl9zdGF0dXMgPT0gQkFUQURWX0lGX1RPX0JFX1JFTU9WRUQpXG4gXHRcdFx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfQkFUTUFOLCBiYXRfcHJpdixcbiBcdFx0XHRcdFx0ICAgXCJuZWlnaGJvciBwdXJnZTogb3JpZ2luYXRvciAlcE0sIG5laWdoYm9yOiAlcE0sIGlmYWNlOiAlc1xcblwiLFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMgYi9uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jXG5pbmRleCBjMmVlYTdkYmM0ODgzMy4uMDA0NjdhYTc5ZGU5ZGMgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jXG5AQCAtMzU4LDI4ICszNTgsMTYgQEAgYmF0YWR2X3RwX2xpc3RfZmluZF9zZW5kZXJfc2Vzc2lvbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0LFxuIH1cbiBcbiAvKipcbi0gKiBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZSgpIC0gcmVsZWFzZSBiYXRhZHZfdHBfdmFyc19jb21tb24gZnJvbSBsaXN0c1xuKyAqIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZSgpIC0gcmVsZWFzZSBiYXRhZHZfdHBfc2VuZGVyXG4gICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kXG4tICogQHJlZjoga3JlZiBwb2ludGVyIG9mIHRoZSBiYXRhZHZfdHBfdmFyc19jb21tb25cbisgKiBAcmVmOiBrcmVmIHBvaW50ZXIgb2YgdGhlIGJhdGFkdl90cF9zZW5kZXJcbiAgKi9cbi1zdGF0aWMgdm9pZCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuK3N0YXRpYyB2b2lkIGJhdGFkdl90cF9zZW5kZXJfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuIHtcbi1cdHN0cnVjdCBiYXRhZHZfdHBfdmFyc19jb21tb24gKnRwX3ZhcnM7XG4tXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqc2FmZTtcbi1cbi1cdHRwX3ZhcnMgPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgYmF0YWR2X3RwX3ZhcnNfY29tbW9uLCByZWZjb3VudCk7XG4tXG4tXHQvKiBsb2NrIHNob3VsZCBub3QgYmUgbmVlZGVkIGJlY2F1c2UgdGhpcyBvYmplY3QgaXMgbm93IG91dCBvZiBhbnlcbi1cdCAqIGNvbnRleHQhXG4tXHQgKi9cbi1cdHNwaW5fbG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZXVuYWNrZWRfbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XG4tXHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuLVx0XHRrZnJlZSh1bik7XG4tXHR9XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZXVuYWNrZWRfbG9jayk7XG4rXHRzdHJ1Y3QgYmF0YWR2X3RwX3NlbmRlciAqdHBfdmFycztcbiBcbi1cdGtmcmVlX3JjdSh0cF92YXJzLCByY3UpO1xuK1x0dHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfc2VuZGVyLCBjb21tb24ucmVmY291bnQpO1xuK1x0a2ZyZWVfcmN1KHRwX3ZhcnMsIGNvbW1vbi5yY3UpO1xuIH1cbiBcbiAvKipcbkBAIC0zOTIsNyArMzgwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3NlbmRlcl9wdXQoc3RydWN0IGJhdGFkdl90cF9zZW5kZXIgKnRwX3ZhcnMpXG4gXHRpZiAoIXRwX3ZhcnMpXG4gXHRcdHJldHVybjtcbiBcbi1cdGtyZWZfcHV0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnJlZmNvdW50LCBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZSk7XG4rXHRrcmVmX3B1dChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi5yZWZjb3VudCwgYmF0YWR2X3RwX3NlbmRlcl9yZWxlYXNlKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTE0NSw5ICsxMTMzLDYgQEAgdm9pZCBiYXRhZHZfdHBfc3RhcnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdCxcbiBcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2dHBfdmFycy1cdTAwM2Vtb3JlX2J5dGVzKTtcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZ0cF92YXJzLVx1MDAzZWZpbmlzaGVkKTtcbiBcbi1cdHNwaW5fbG9ja19pbml0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QpO1xuLVxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dHBfdmFycy1cdTAwM2VjY19sb2NrKTtcbiBcbiBcdHRwX3ZhcnMtXHUwMDNlcHJlcmFuZG9tX29mZnNldCA9IDA7XG5AQCAtMTI1MSw2ICsxMjM2LDMzIEBAIGJhdGFkdl90cF9saXN0X2ZpbmRfcmVjZWl2ZXJfc2Vzc2lvbihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqZHN0XG4gXHRyZXR1cm4gdHBfdmFycztcbiB9XG4gXG4rLyoqXG4rICogYmF0YWR2X3RwX3JlY2VpdmVyX3JlbGVhc2UoKSAtIHJlbGVhc2UgYmF0YWR2X3RwX3JlY2VpdmVyXG4rICogIGFuZCBxdWV1ZSBmb3IgZnJlZSBhZnRlciByY3UgZ3JhY2UgcGVyaW9kXG4rICogQHJlZjoga3JlZiBwb2ludGVyIG9mIHRoZSBiYXRhZHZfdHBfcmVjZWl2ZXJcbisgKi9cbitzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjZWl2ZXJfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxuK3tcbitcdHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIgKnRwX3ZhcnM7XG4rXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnNhZmU7XG4rXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuO1xuK1xuK1x0dHBfdmFycyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHBfcmVjZWl2ZXIsIGNvbW1vbi5yZWZjb3VudCk7XG4rXG4rXHQvKiBsb2NrIHNob3VsZCBub3QgYmUgbmVlZGVkIGJlY2F1c2UgdGhpcyBvYmplY3QgaXMgbm93IG91dCBvZiBhbnlcbitcdCAqIGNvbnRleHQhXG4rXHQgKi9cbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbitcdFx0bGlzdF9kZWwoXHUwMDI2dW4tXHUwMDNlbGlzdCk7XG4rXHRcdGtmcmVlKHVuKTtcbitcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4rXHR9XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbitcbitcdGtmcmVlX3JjdSh0cF92YXJzLCBjb21tb24ucmN1KTtcbit9XG4rXG4gLyoqXG4gICogYmF0YWR2X3RwX3JlY2VpdmVyX3B1dCgpIC0gZGVjcmVtZW50IHRoZSBiYXRhZHZfdHBfcmVjZWl2ZXJcbiAgKiAgcmVmY291bnRlciBhbmQgcG9zc2libHkgcmVsZWFzZSBpdFxuQEAgLTEyNjEsNyArMTI3Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWNlaXZlcl9wdXQoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycylcbiBcdGlmICghdHBfdmFycylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0a3JlZl9wdXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24ucmVmY291bnQsIGJhdGFkdl90cF92YXJzX2NvbW1vbl9yZWxlYXNlKTtcbitcdGtyZWZfcHV0KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnJlZmNvdW50LCBiYXRhZHZfdHBfcmVjZWl2ZXJfcmVsZWFzZSk7XG4gfVxuIFxuIC8qKlxuQEAgLTEzMDQsMTMgKzEzMTYsMTMgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY2VpdmVyX3NodXRkb3duKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFx0aWYgKGJhdGFkdl90cF9saXN0X2RldGFjaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbikpXG4gXHRcdGJhdGFkdl90cF9yZWNlaXZlcl9wdXQodHBfdmFycyk7XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0LCBsaXN0KSB7XG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2VhY2tfc2Vxbm9fbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuIFx0XHRrZnJlZSh1bik7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQtLTtcbitcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4gXHR9XG4tXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2VhY2tfc2Vxbm9fbG9jayk7XG4gXG4gXHQvKiBkcm9wIHJlZmVyZW5jZSBvZiB0aW1lciAqL1xuIFx0aWYgKFdBUk5fT04oYXRvbWljX3hjaGcoXHUwMDI2dHBfdmFycy1cdTAwM2VyZWNlaXZpbmcsIDApICE9IDEpKVxuQEAgLTE0MDMsNjkgKzE0MTUsMTA2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X3RwX3NlbmRfYWNrKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICpkc3QsXG4gICovXG4gc3RhdGljIGJvb2wgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXIoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycyxcbiBcdFx0XHRcdFx0ICB1MzIgc2Vxbm8sIHUzMiBwYXlsb2FkX2xlbilcbi1cdF9fbXVzdF9ob2xkKFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbG9jaylcbitcdF9fbXVzdF9ob2xkKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spXG4ge1xuLVx0c3RydWN0IGJhdGFkdl90cF91bmFja2VkICp1biwgKm5ldztcbi1cdGJvb2wgYWRkZWQgPSBmYWxzZTtcbi1cbi1cdG5ldyA9IGttYWxsb2Nfb2JqKCpuZXcsIEdGUF9BVE9NSUMpO1xuLVx0aWYgKHVubGlrZWx5KCFuZXcpKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4tXG4tXHRuZXctXHUwMDNlc2Vxbm8gPSBzZXFubztcbi1cdG5ldy1cdTAwM2VsZW4gPSBwYXlsb2FkX2xlbjtcbi1cbi1cdC8qIGlmIHRoZSBsaXN0IGlzIGVtcHR5IGltbWVkaWF0ZWx5IGF0dGFjaCB0aGlzIG5ldyBvYmplY3QgKi9cbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCkpIHtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWxpc3QsIFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQrKztcbi1cdFx0cmV0dXJuIHRydWU7XG4tXHR9XG4tXG4tXHQvKiBvdGhlcndpc2UgbG9vcCBvdmVyIHRoZSBsaXN0IGFuZCBlaXRoZXIgZHJvcCB0aGUgcGFja2V0IGJlY2F1c2UgdGhpc1xuLVx0ICogaXMgYSBkdXBsaWNhdGUgb3Igc3RvcmUgaXQgYXQgdGhlIHJpZ2h0IHBvc2l0aW9uLlxuK1x0c3RydWN0IGxpc3RfaGVhZCAqcG9zID0gXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3Q7XG4rXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKm5ldyA9IE5VTEw7XG4rXHR1MzIgZW5kX3NlcW5vID0gc2Vxbm8gKyBwYXlsb2FkX2xlbjtcbitcdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqc2FmZTtcbitcdHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCAqdW47XG4rXG4rXHQvKiBsb29wIG92ZXIgdGhlIGxpc3QgdG8gZmluZCBlaXRoZXIgYW4gZXhpc3RpbmcgZW50cnkgd2hpY2ggdGhlIG5ld1xuK1x0ICogc2Vxbm8gcmFuZ2UgY2FuIGJlIG1lcmdlZCB3aXRoIG9yIHRoZSBwb3NpdGlvbiBhdCB3aGljaCBhIG5ldyBlbnRyeVxuK1x0ICogaGFzIHRvIGJlIGluc2VydGVkLlxuIFx0ICpcbiBcdCAqIFRoZSBpdGVyYXRpb24gaXMgZG9uZSBpbiB0aGUgcmV2ZXJzZSB3YXkgYmVjYXVzZSBpdCBpcyBsaWtlbHkgdGhhdFxuIFx0ICogdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0ICh0aGUgb25lIGJlaW5nIHByb2Nlc3NlZCBub3cpIGhhcyBhIGJpZ2dlclxuIFx0ICogc2Vxbm8gdGhhbiBhbGwgdGhlIG90aGVycyBhbHJlYWR5IHN0b3JlZC5cbiBcdCAqL1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHVuLCBcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QsIGxpc3QpIHtcbi1cdFx0LyogY2hlY2sgZm9yIGR1cGxpY2F0ZXMgKi9cbi1cdFx0aWYgKG5ldy1cdTAwM2VzZXFubyA9PSB1bi1cdTAwM2VzZXFubykge1xuLVx0XHRcdGlmIChuZXctXHUwMDNlbGVuIFx1MDAzZSB1bi1cdTAwM2VsZW4pXG4tXHRcdFx0XHR1bi1cdTAwM2VsZW4gPSBuZXctXHUwMDNlbGVuO1xuLVx0XHRcdGtmcmVlKG5ldyk7XG4tXHRcdFx0YWRkZWQgPSB0cnVlO1xuLVx0XHRcdGJyZWFrO1xuLVx0XHR9XG4tXG4tXHRcdC8qIGxvb2sgZm9yIHRoZSByaWdodCBwb3NpdGlvbiAqL1xuLVx0XHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUobmV3LVx1MDAzZXNlcW5vLCB1bi1cdTAwM2VzZXFubykpXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UodW4sIFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XG4rXHRcdC8qIGxvb2sgZm9yIHRoZSByaWdodCBwb3NpdGlvbiAtIGFuIHVuIHdoaWNoIGlzIHNtYWxsZXIgKi9cbitcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKHNlcW5vLCB1bi1cdTAwM2VzZXFubykpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qIGFzIHNvb24gYXMgYW4gZW50cnkgaGF2aW5nIGEgYmlnZ2VyIHNlcW5vIGlzIGZvdW5kLCB0aGUgbmV3XG4tXHRcdCAqIG9uZSBpcyBhdHRhY2hlZCBfYWZ0ZXJfIGl0LiBJbiB0aGlzIHdheSB0aGUgbGlzdCBpcyBrZXB0IGluXG4tXHRcdCAqIGFzY2VuZGluZyBvcmRlclxuK1x0XHQvKiBzbWFsbGVyL2VxdWFsIHNlcW5vIHdhcyBmb3VuZCBidXQgdGhleSBtaWdodCBiZSBkaXJlY3RseVxuK1x0XHQgKiBhZnRlciBhbm90aGVyIG9yIG92ZXJsYXBwaW5nLiBrZWVwIG9ubHkgYSBzaW5nbGUgZW50cnlcbitcdFx0ICpcbitcdFx0ICogSXQgaXMgYWxyZWFkeSBrbm93biB0aGF0OlxuK1x0XHQgKlxuK1x0XHQgKlx0dW4tXHUwMDNlc2Vxbm8gXHUwMDNjPSBzZXFub1xuK1x0XHQgKlxuK1x0XHQgKiBXaGVuIGVzdGFibGlzaGluZyB0aGF0OlxuK1x0XHQgKlxuK1x0XHQgKlx0c2Vxbm8gXHUwMDNjPSB1bi1cdTAwM2VzZXFubyArIHVuLVx1MDAzZWxlblxuK1x0XHQgKlxuK1x0XHQgKiBUaGVuIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gYWRkIGEgbmV3IGVudHJ5IGJlY2F1c2UgdGhlXG4rXHRcdCAqIHNtYWxsZXIvZXF1YWwgc2Vxbm8gb2YgdW4gbWlnaHQgYWxyZWFkeSBjb250YWluIHRoZSBuZXdcbitcdFx0ICogcmVjZWl2ZWQgcGFja2V0IG9yIHdlIG9ubHkgYWRkIG5ldyBkYXRhIGRpcmVjdGx5IGFmdGVyXG4rXHRcdCAqIHRoZSBlbmQgb2YgdW4uIFRoZSBsYXR0ZXIgY2FuIGJlIGlkZW50aWZpZWQgdXNpbmc6XG4rXHRcdCAqXG4rXHRcdCAqXHR1bi1cdTAwM2VzZXFubyArIHVuLVx1MDAzZWxlbiBcdTAwM2M9IGVuZF9zZXFub1xuIFx0XHQgKi9cbi1cdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWxpc3QsIFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuLVx0XHRhZGRlZCA9IHRydWU7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQrKztcbitcdFx0aWYgKCFiYXRhZHZfc2VxX2JlZm9yZSh1bi1cdTAwM2VzZXFubyArIHVuLVx1MDAzZWxlbiwgc2Vxbm8pKSB7XG4rXHRcdFx0LyogbmV3IGRhdGEgZGlyZWN0bHkgYWZ0ZXIgdW4/ICovXG4rXHRcdFx0aWYgKCFiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuKSlcbitcdFx0XHRcdHVuLVx1MDAzZWxlbiA9IGVuZF9zZXFubyAtIHVuLVx1MDAzZXNlcW5vO1xuK1xuK1x0XHRcdC8qIHVuIG5vdyByZXByZXNlbnRzIGJvdGggb2xkIHVuICsgbmV3IHJhbmdlIGFuZCBoYXMgdG9cbitcdFx0XHQgKiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBnYXAgdG8gdGhlIG5leHQgc2Vxbm8gcmFuZ2VcbitcdFx0XHQgKiB3YXMgY2xvc2VkXG4rXHRcdFx0ICovXG4rXHRcdFx0bmV3ID0gdW47XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0LyogYXMgc29vbiBhcyBhbiBlbnRyeSBoYXZpbmcgYSBzbWFsbGVyIHNlcW5vIGlzIGZvdW5kLFxuK1x0XHRcdCAqIHRoZSBuZXcgb25lIGlzIGF0dGFjaGVkIF9hZnRlcl8gaXQuIEluIHRoaXMgd2F5IHRoZVxuK1x0XHRcdCAqIGxpc3QgaXMga2VwdCBpbiBhc2NlbmRpbmcgb3JkZXJcbitcdFx0XHQgKi9cbitcdFx0XHRwb3MgPSBcdTAwMjZ1bi1cdTAwM2VsaXN0O1xuK1x0XHR9XG4rXG4gXHRcdGJyZWFrO1xuIFx0fVxuIFxuLVx0LyogcmVjZWl2ZWQgcGFja2V0IHdpdGggc21hbGxlc3Qgc2Vxbm8gb3V0IG9mIG9yZGVyOyBhZGQgaXQgdG8gZnJvbnQgKi9cbi1cdGlmICghYWRkZWQpIHtcbi1cdFx0bGlzdF9hZGQoXHUwMDI2bmV3LVx1MDAzZWxpc3QsIFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbGlzdCk7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQrKztcbitcdC8qIG5vIGVudHJ5IHRvIG1lcmdlIHdpdGggd2FzIGZvdW5kOyBpbnNlcnQgYSBuZXcgb25lIGFmdGVyIHRoZSBlbnRyeVxuK1x0ICogd2l0aCB0aGUgbmV4dCBzbWFsbGVyIHNlcW5vIChvciBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qgd2hlbiB0aGVcbitcdCAqIG5ldyBzZXFubyBpcyB0aGUgc21hbGxlc3Qgb3IgdGhlIGxpc3QgaXMgZW1wdHkpXG4rXHQgKi9cbitcdGlmICghbmV3KSB7XG4rXHRcdG5ldyA9IGttYWxsb2Nfb2JqKCpuZXcsIEdGUF9BVE9NSUMpO1xuK1x0XHRpZiAodW5saWtlbHkoIW5ldykpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRuZXctXHUwMDNlc2Vxbm8gPSBzZXFubztcbitcdFx0bmV3LVx1MDAzZWxlbiA9IHBheWxvYWRfbGVuO1xuK1xuK1x0XHRsaXN0X2FkZChcdTAwMjZuZXctXHUwMDNlbGlzdCwgcG9zKTtcbitcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50Kys7XG4rXHR9XG4rXG4rXHQvKiBjaGVjayBpZiBuZXcgZmlsbGVkIHRoZSBnYXAgdG8gdGhlIG5leHQgbGlzdCBlbnRyaWVzICovXG4rXHR1biA9IG5ldztcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9jb250aW51ZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKGVuZF9zZXFubywgdW4tXHUwMDNlc2Vxbm8pKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBuZXh0IGVudHJ5IGlzIG92ZXJsYXBwaW5nIG9yIGFkamFjZW50IC0gY29tYmluZSBib3RoICovXG4rXHRcdGlmIChiYXRhZHZfc2VxX2JlZm9yZShlbmRfc2Vxbm8sIHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuKSkge1xuK1x0XHRcdGVuZF9zZXFubyA9IHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuO1xuK1x0XHRcdG5ldy1cdTAwM2VsZW4gPSBlbmRfc2Vxbm8gLSBuZXctXHUwMDNlc2Vxbm87XG4rXHRcdH1cbitcbitcdFx0bGlzdF9kZWwoXHUwMDI2dW4tXHUwMDNlbGlzdCk7XG4rXHRcdGtmcmVlKHVuKTtcbitcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4gXHR9XG4gXG4gXHQvKiByZW1vdmUgdGhlIGxhc3QgKGJpZ2dlc3QpIHVuYWNrZWQgc2Vxbm8gd2hlbiBsaXN0IGlzIHRvbyBsYXJnZSAqL1xuLVx0aWYgKHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQgXHUwMDNlIEJBVEFEVl9UUF9NQVhfVU5BQ0tFRCkge1xuLVx0XHR1biA9IGxpc3RfbGFzdF9lbnRyeShcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xpc3QsXG4rXHRpZiAodHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50IFx1MDAzZSBCQVRBRFZfVFBfTUFYX1VOQUNLRUQpIHtcbitcdFx0dW4gPSBsaXN0X2xhc3RfZW50cnkoXHUwMDI2dHBfdmFycy1cdTAwM2V1bmFja2VkX2xpc3QsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfdHBfdW5hY2tlZCwgbGlzdCk7XG4gXHRcdGxpc3RfZGVsKFx1MDAyNnVuLVx1MDAzZWxpc3QpO1xuIFx0XHRrZnJlZSh1bik7XG4tXHRcdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQtLTtcbitcdFx0dHBfdmFycy1cdTAwM2V1bmFja2VkX2NvdW50LS07XG4gXHR9XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbkBAIC0xNDc3LDcgKzE1MjYsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcihzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzLFxuICAqIEB0cF92YXJzOiB0aGUgcHJpdmF0ZSBkYXRhIG9mIHRoZSBjdXJyZW50IFRQIG1ldGVyIHNlc3Npb25cbiAgKi9cbiBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfYWNrX3Vub3JkZXJlZChzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyICp0cF92YXJzKVxuLVx0X19tdXN0X2hvbGQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKVxuK1x0X19tdXN0X2hvbGQoXHUwMDI2dHBfdmFycy1cdTAwM2VhY2tfc2Vxbm9fbG9jaylcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQgKnVuLCAqc2FmZTtcbiBcdHUzMiB0b19hY2s7XG5AQCAtMTQ4NSw3ICsxNTM0LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX2Fja191bm9yZGVyZWQoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycylcbiBcdC8qIGdvIHRocm91Z2ggdGhlIHVuYWNrZWQgcGFja2V0IGxpc3QgYW5kIHBvc3NpYmx5IEFDSyB0aGVtIGFzXG4gXHQgKiB3ZWxsXG4gXHQgKi9cbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1biwgc2FmZSwgXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0LCBsaXN0KSB7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW4sIHNhZmUsIFx1MDAyNnRwX3ZhcnMtXHUwMDNldW5hY2tlZF9saXN0LCBsaXN0KSB7XG4gXHRcdC8qIHRoZSBsaXN0IGlzIG9yZGVyZWQsIHRoZXJlZm9yZSBpdCBpcyBwb3NzaWJsZSB0byBzdG9wIGFzIHNvb25cbiBcdFx0ICogdGhlcmUgaXMgYSBnYXAgYmV0d2VlbiB0aGUgbGFzdCBhY2tlZCBzZXFubyBhbmQgdGhlIHNlcW5vIG9mXG4gXHRcdCAqIHRoZSBwYWNrZXQgdW5kZXIgaW5zcGVjdGlvblxuQEAgLTE0OTMsMTQgKzE1NDIsMTQgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX2Fja191bm9yZGVyZWQoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycylcbiBcdFx0aWYgKGJhdGFkdl9zZXFfYmVmb3JlKHRwX3ZhcnMtXHUwMDNlbGFzdF9yZWN2LCB1bi1cdTAwM2VzZXFubykpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdHRvX2FjayA9IHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuIC0gdHBfdmFycy1cdTAwM2VsYXN0X3JlY3Y7XG4rXHRcdHRvX2FjayA9IHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuO1xuIFxuLVx0XHRpZiAoYmF0YWR2X3NlcV9iZWZvcmUodHBfdmFycy1cdTAwM2VsYXN0X3JlY3YsIHVuLVx1MDAzZXNlcW5vICsgdW4tXHUwMDNlbGVuKSlcbi1cdFx0XHR0cF92YXJzLVx1MDAzZWxhc3RfcmVjdiArPSB0b19hY2s7XG4rXHRcdGlmIChiYXRhZHZfc2VxX2JlZm9yZSh0cF92YXJzLVx1MDAzZWxhc3RfcmVjdiwgdG9fYWNrKSlcbitcdFx0XHR0cF92YXJzLVx1MDAzZWxhc3RfcmVjdiA9IHRvX2FjaztcbiBcbiBcdFx0bGlzdF9kZWwoXHUwMDI2dW4tXHUwMDNlbGlzdCk7XG4gXHRcdGtmcmVlKHVuKTtcbi1cdFx0dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9jb3VudC0tO1xuK1x0XHR0cF92YXJzLVx1MDAzZXVuYWNrZWRfY291bnQtLTtcbiBcdH1cbiB9XG4gXG5AQCAtMTU0Nyw5ICsxNTk2LDkgQEAgYmF0YWR2X3RwX2luaXRfcmVjdihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0dHBfdmFycy1cdTAwM2Vjb21tb24uYmF0X3ByaXYgPSBiYXRfcHJpdjtcbiBcdGtyZWZfaW5pdChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG4gXG4tXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuLVx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9saXN0KTtcbi1cdHRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfY291bnQgPSAwO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dHBfdmFycy1cdTAwM2VhY2tfc2Vxbm9fbG9jayk7XG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZ0cF92YXJzLVx1MDAzZXVuYWNrZWRfbGlzdCk7XG4rXHR0cF92YXJzLVx1MDAzZXVuYWNrZWRfY291bnQgPSAwO1xuIFxuIFx0a3JlZl9nZXQoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuIFx0dGltZXJfc2V0dXAoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udGltZXIsIGJhdGFkdl90cF9yZWNlaXZlcl9zaHV0ZG93biwgMCk7XG5AQCAtMTYwOSw3ICsxNjU4LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY3ZfbXNnKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFdSSVRFX09OQ0UodHBfdmFycy1cdTAwM2VsYXN0X3JlY3ZfdGltZSwgamlmZmllcyk7XG4gXHR9XG4gXG4tXHRzcGluX2xvY2tfYmgoXHUwMDI2dHBfdmFycy1cdTAwM2Vjb21tb24udW5hY2tlZF9sb2NrKTtcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbiBcbiBcdC8qIGlmIHRoZSBwYWNrZXQgaXMgYSBkdXBsaWNhdGUsIGl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IGFuIEFDSyBoYXMgYmVlblxuIFx0ICogbG9zdC4gUmVzZW5kIHRoZSBBQ0tcbkBAIC0xNjI1LDcgKzE2NzQsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHBfcmVjdl9tc2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0ICogbm90IGJlZW4gZW5xdWV1ZWQgY29ycmVjdGx5XG4gXHRcdCAqL1xuIFx0XHRpZiAoIWJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyKHRwX3ZhcnMsIHNlcW5vLCBwYXlsb2FkX2xlbikpIHtcbi1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWNvbW1vbi51bmFja2VkX2xvY2spO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlYWNrX3NlcW5vX2xvY2spO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG5AQCAtMTY0MSw3ICsxNjkwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3RwX3JlY3ZfbXNnKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXG4gc2VuZF9hY2s6XG4gXHR0b19hY2sgPSB0cF92YXJzLVx1MDAzZWxhc3RfcmVjdjtcbi1cdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRwX3ZhcnMtXHUwMDNlY29tbW9uLnVuYWNrZWRfbG9jayk7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0cF92YXJzLVx1MDAzZWFja19zZXFub19sb2NrKTtcbiBcbiBcdC8qIHNlbmQgdGhlIEFDSy4gSWYgdGhlIHJlY2VpdmVkIHBhY2tldCB3YXMgb3V0IG9mIG9yZGVyLCB0aGUgQUNLIHRoYXRcbiBcdCAqIGlzIGdvaW5nIHRvIGJlIHNlbnQgaXMgYSBkdXBsaWNhdGUgKHRoZSBzZW5kZXIgd2lsbCBjb3VudCB0aGVtIGFuZFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3R2bHYuYyBiL25ldC9iYXRtYW4tYWR2L3R2bHYuY1xuaW5kZXggMWM5ZmIyMTk4NWY2YTUuLjQ5YmYyZWQ5ZWNkYzM5IDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHZsdi5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi90dmx2LmNcbkBAIC00NDIsNiArNDQyLDU0IEBAIHN0YXRpYyBpbnQgYmF0YWR2X3R2bHZfY2FsbF9oYW5kbGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7XG4gfVxuIFxuKy8qKlxuKyAqIGJhdGFkdl90dmx2X2hkcl9uZXh0KCkgLSBtb3ZlIGEgdHZsdiBidWZmZXIgY3Vyc29yIHRvIHRoZSBuZXh0IGNvbnRhaW5lclxuKyAqIEB0dmx2X3ZhbHVlOiBjdXJzb3IgaW50byB0aGUgdHZsdiBidWZmZXIsIGFkdmFuY2VkIHBhc3QgdGhlIHJldHVybmVkXG4rICogIGNvbnRhaW5lcidzIGNvbnRlbnQgb24gc3VjY2Vzc1xuKyAqIEB0dmx2X3ZhbHVlX2xlbjogcmVtYWluaW5nIGxlbmd0aCBvZiB0aGUgdHZsdiBidWZmZXIsIHJlZHVjZWQgYnkgdGhlIHJldHVybmVkXG4rICogIGNvbnRhaW5lcidzIHNpemUgb24gc3VjY2Vzc1xuKyAqXG4rICogUGFyc2VzIGEgc2luZ2xlIGNvbnRhaW5lciBoZWFkZXIgYXQgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGFuZCwgaWYgYVxuKyAqIGNvbXBsZXRlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUsIGFkdmFuY2VzIHRoZSBjdXJzb3IgYW5kIHJlbWFpbmluZyBsZW5ndGhcbisgKiBwYXN0IGl0LiBUaGUgcmV0dXJuZWQgaGVhZGVyIHN0YXlzIHZhbGlkOyBpdHMgY29udGVudCBpcyBsb2NhdGVkIGF0XG4rICogKHJldHVybmVkIGhlYWRlciArIDEpIGFuZCBpcyBudG9ocyhoZHItXHUwMDNlbGVuKSBieXRlcyBsb25nLlxuKyAqXG4rICogUmV0dXJuOiBwb2ludGVyIHRvIHRoZSBuZXh0IHR2bHYgY29udGFpbmVyIGhlYWRlciwgb3IgTlVMTCBpZiBubyBmdXJ0aGVyXG4rICogY29tcGxldGUgY29udGFpbmVyIGlzIHByZXNlbnQgaW4gdGhlIGJ1ZmZlci5cbisgKi9cbitzdGF0aWMgc3RydWN0IGJhdGFkdl90dmx2X2hkciAqYmF0YWR2X3R2bHZfaGRyX25leHQodm9pZCAqKnR2bHZfdmFsdWUsIHUxNiAqdHZsdl92YWx1ZV9sZW4pXG4re1xuK1x0c3RydWN0IGJhdGFkdl90dmx2X2hkciAqdHZsdl9oZHI7XG4rXHR1MTYgdHZsdl92YWx1ZV9jb250X2xlbjtcbitcdHZvaWQgKnR2bHZfdmFsdWVfY29udDtcbitcdHUxNiB0dmx2X2xlbjtcbitcbitcdHR2bHZfdmFsdWVfY29udCA9ICp0dmx2X3ZhbHVlO1xuK1x0dHZsdl9sZW4gPSAqdHZsdl92YWx1ZV9sZW47XG4rXG4rXHRpZiAodHZsdl9sZW4gXHUwMDNjIHNpemVvZigqdHZsdl9oZHIpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHR2bHZfaGRyID0gdHZsdl92YWx1ZV9jb250O1xuK1x0dHZsdl92YWx1ZV9jb250X2xlbiA9IG50b2hzKHR2bHZfaGRyLVx1MDAzZWxlbik7XG4rXHR0dmx2X3ZhbHVlX2NvbnQgPSB0dmx2X2hkciArIDE7XG4rXHR0dmx2X2xlbiAtPSBzaXplb2YoKnR2bHZfaGRyKTtcbitcbitcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFx1MDAzZSB0dmx2X2xlbilcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHQvKiB0aGUgbmV4dCB0dmx2IGhlYWRlciBpcyBhY2Nlc3NlZCBhc3N1bWluZyAoYXQgbGVhc3QpIDItYnl0ZVxuK1x0ICogYWxpZ25tZW50LCBzbyBpdCBtdXN0IHN0YXJ0IGF0IGFuIGV2ZW4gb2Zmc2V0LlxuK1x0ICovXG4rXHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcdTAwMjYgMSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHQqdHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWVfY29udCArIHR2bHZfdmFsdWVfY29udF9sZW47XG4rXHQqdHZsdl92YWx1ZV9sZW4gPSB0dmx2X2xlbiAtIHR2bHZfdmFsdWVfY29udF9sZW47XG4rXG4rXHRyZXR1cm4gdHZsdl9oZHI7XG4rfVxuK1xuIC8qKlxuICAqIGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbigpIC0gY2hlY2sgaWYgYSB0dmx2IGJ1ZmZlciBob2xkcyBhIGNvbnRhaW5lclxuICAqIEB0dmx2X3ZhbHVlOiB0dmx2IGNvbnRlbnRcbkBAIC00NTcsMjggKzUwNSwxMCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW4odm9pZCAqdHZsdl92YWx1ZSxcbiBcdFx0XHRcdFx0ICAgdTggdmVyc2lvbilcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R2bHZfaGRyICp0dmx2X2hkcjtcbi1cdHUxNiB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xuLVxuLVx0d2hpbGUgKHR2bHZfdmFsdWVfbGVuIFx1MDAzZT0gc2l6ZW9mKCp0dmx2X2hkcikpIHtcbi1cdFx0dHZsdl9oZHIgPSB0dmx2X3ZhbHVlO1xuLVx0XHR0dmx2X3ZhbHVlX2NvbnRfbGVuID0gbnRvaHModHZsdl9oZHItXHUwMDNlbGVuKTtcbi1cdFx0dHZsdl92YWx1ZSA9IHR2bHZfaGRyICsgMTtcbi1cdFx0dHZsdl92YWx1ZV9sZW4gLT0gc2l6ZW9mKCp0dmx2X2hkcik7XG4tXG4tXHRcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFx1MDAzZSB0dmx2X3ZhbHVlX2xlbilcbi1cdFx0XHRicmVhaztcbi1cbi1cdFx0LyogdGhlIG5leHQgdHZsdiBoZWFkZXIgaXMgYWNjZXNzZWQgYXNzdW1pbmcgKGF0IGxlYXN0KSAyLWJ5dGVcbi1cdFx0ICogYWxpZ25tZW50LCBzbyBpdCBtdXN0IHN0YXJ0IGF0IGFuIGV2ZW4gb2Zmc2V0LlxuLVx0XHQgKi9cbi1cdFx0aWYgKHR2bHZfdmFsdWVfY29udF9sZW4gXHUwMDI2IDEpXG4tXHRcdFx0YnJlYWs7XG4gXG4rXHR3aGlsZSAoKHR2bHZfaGRyID0gYmF0YWR2X3R2bHZfaGRyX25leHQoXHUwMDI2dHZsdl92YWx1ZSwgXHUwMDI2dHZsdl92YWx1ZV9sZW4pKSkge1xuIFx0XHRpZiAodHZsdl9oZHItXHUwMDNldHlwZSA9PSB0eXBlIFx1MDAyNlx1MDAyNiB0dmx2X2hkci1cdTAwM2V2ZXJzaW9uID09IHZlcnNpb24pXG4gXHRcdFx0cmV0dXJuIHRydWU7XG4tXG4tXHRcdHR2bHZfdmFsdWUgPSAodTggKil0dmx2X3ZhbHVlICsgdHZsdl92YWx1ZV9jb250X2xlbjtcbi1cdFx0dHZsdl92YWx1ZV9sZW4gLT0gdHZsdl92YWx1ZV9jb250X2xlbjtcbiBcdH1cbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC01MTEsMjAgKzU0MSw4IEBAIGludCBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3Moc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdHU4IGNpZm5vdGZvdW5kID0gQkFUQURWX1RWTFZfSEFORExFUl9PR01fQ0lGTk9URk5EO1xuIFx0aW50IHJldCA9IE5FVF9SWF9TVUNDRVNTO1xuIFxuLVx0d2hpbGUgKHR2bHZfdmFsdWVfbGVuIFx1MDAzZT0gc2l6ZW9mKCp0dmx2X2hkcikpIHtcbi1cdFx0dHZsdl9oZHIgPSB0dmx2X3ZhbHVlO1xuK1x0d2hpbGUgKCh0dmx2X2hkciA9IGJhdGFkdl90dmx2X2hkcl9uZXh0KFx1MDAyNnR2bHZfdmFsdWUsIFx1MDAyNnR2bHZfdmFsdWVfbGVuKSkpIHtcbiBcdFx0dHZsdl92YWx1ZV9jb250X2xlbiA9IG50b2hzKHR2bHZfaGRyLVx1MDAzZWxlbik7XG4tXHRcdHR2bHZfdmFsdWUgPSB0dmx2X2hkciArIDE7XG4tXHRcdHR2bHZfdmFsdWVfbGVuIC09IHNpemVvZigqdHZsdl9oZHIpO1xuLVxuLVx0XHRpZiAodHZsdl92YWx1ZV9jb250X2xlbiBcdTAwM2UgdHZsdl92YWx1ZV9sZW4pXG4tXHRcdFx0YnJlYWs7XG4tXG4tXHRcdC8qIHRoZSBuZXh0IHR2bHYgaGVhZGVyIGlzIGFjY2Vzc2VkIGFzc3VtaW5nIChhdCBsZWFzdCkgMi1ieXRlXG4tXHRcdCAqIGFsaWdubWVudCwgc28gaXQgbXVzdCBzdGFydCBhdCBhbiBldmVuIG9mZnNldC5cbi1cdFx0ICovXG4tXHRcdGlmICh0dmx2X3ZhbHVlX2NvbnRfbGVuIFx1MDAyNiAxKVxuLVx0XHRcdGJyZWFrO1xuIFxuIFx0XHR0dmx2X2hhbmRsZXIgPSBiYXRhZHZfdHZsdl9oYW5kbGVyX2dldChiYXRfcHJpdixcbiBcdFx0XHRcdFx0XHQgICAgICAgdHZsdl9oZHItXHUwMDNldHlwZSxcbkBAIC01MzIsMTEgKzU1MCw5IEBAIGludCBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3Moc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBcdFx0cmV0IHw9IGJhdGFkdl90dmx2X2NhbGxfaGFuZGxlcihiYXRfcHJpdiwgdHZsdl9oYW5kbGVyLFxuIFx0XHRcdFx0XHRcdHBhY2tldF90eXBlLCBvcmlnX25vZGUsIHNrYixcbi1cdFx0XHRcdFx0XHR0dmx2X3ZhbHVlLFxuK1x0XHRcdFx0XHRcdHR2bHZfaGRyICsgMSxcbiBcdFx0XHRcdFx0XHR0dmx2X3ZhbHVlX2NvbnRfbGVuKTtcbiBcdFx0YmF0YWR2X3R2bHZfaGFuZGxlcl9wdXQodHZsdl9oYW5kbGVyKTtcbi1cdFx0dHZsdl92YWx1ZSA9ICh1OCAqKXR2bHZfdmFsdWUgKyB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xuLVx0XHR0dmx2X3ZhbHVlX2xlbiAtPSB0dmx2X3ZhbHVlX2NvbnRfbGVuO1xuIFx0fVxuIFxuIFx0aWYgKHBhY2tldF90eXBlICE9IEJBVEFEVl9JVl9PR00gXHUwMDI2XHUwMDI2XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaCBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcbmluZGV4IGIxZjlmODk2NGMzZmQyLi5jZDEyNzU1ZDIxZjM1NiAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcbisrKyBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcbkBAIC0yMTQsOSArMjE0LDYgQEAgc3RydWN0IGJhdGFkdl93aWZpX25ldF9kZXZpY2Vfc3RhdGUge1xuICAqIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAtIG5ldHdvcmsgZGV2aWNlIGtub3duIHRvIGJhdG1hbi1hZHZcbiAgKi9cbiBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2Uge1xuLVx0LyoqIEBsaXN0OiBsaXN0IG5vZGUgZm9yIGJhdGFkdl9oYXJkaWZfbGlzdCAqL1xuLVx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuLVxuIFx0LyoqIEBpZl9zdGF0dXM6IHN0YXR1cyBvZiB0aGUgaW50ZXJmYWNlIGZvciBiYXRtYW4tYWR2ICovXG4gXHRjaGFyIGlmX3N0YXR1cztcbiBcbkBAIC0xMzM1LDkgKzEzMzIsOSBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3VuYWNrZWQge1xuIFx0dTMyIHNlcW5vO1xuIFxuIFx0LyoqIEBsZW46IGxlbmd0aCBvZiB0aGUgcGFja2V0ICovXG4tXHR1MTYgbGVuO1xuK1x0dTMyIGxlbjtcbiBcbi1cdC8qKiBAbGlzdDogbGlzdCBub2RlIGZvciBcdTAwMjZiYXRhZHZfdHBfdmFyc19jb21tb24udW5hY2tlZF9saXN0ICovXG4rXHQvKiogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgXHUwMDI2YmF0YWR2X3RwX3JlY2VpdmVyLnVuYWNrZWRfbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIH07XG4gXG5AQCAtMTM2MCwxNSArMTM1Nyw2IEBAIHN0cnVjdCBiYXRhZHZfdHBfdmFyc19jb21tb24ge1xuIFx0LyoqIEBzZXNzaW9uOiBUUCBzZXNzaW9uIGlkZW50aWZpZXIgKi9cbiBcdHU4IHNlc3Npb25bMl07XG4gXG4tXHQvKiogQHVuYWNrZWRfbGlzdDogbGlzdCBvZiB1bmFja2VkIHBhY2tldHMgKG1ldGEtaW5mbyBvbmx5KSAqL1xuLVx0c3RydWN0IGxpc3RfaGVhZCB1bmFja2VkX2xpc3Q7XG4tXG4tXHQvKiogQHVuYWNrZWRfbG9jazogcHJvdGVjdCB1bmFja2VkX2xpc3QgKyBcdTAwMjZiYXRhZHZfdHBfcmVjZWl2ZXIubGFzdF9yZWN2ICovXG4tXHRzcGlubG9ja190IHVuYWNrZWRfbG9jaztcbi1cbi1cdC8qKiBAdW5hY2tlZF9jb3VudDogbnVtYmVyIG9mIHVuYWNrZWQgZW50cmllcyAqL1xuLVx0c2l6ZV90IHVuYWNrZWRfY291bnQ7XG4tXG4gXHQvKiogQHJlZmNvdW50OiBudW1iZXIgb2YgY29udGV4dCB3aGVyZSB0aGUgb2JqZWN0IGlzIHVzZWQgKi9cbiBcdHN0cnVjdCBrcmVmIHJlZmNvdW50O1xuIFxuQEAgLTE0ODIsNiArMTQ3MCwxNSBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3JlY2VpdmVyIHtcbiBcbiBcdC8qKiBAbGFzdF9yZWN2X3RpbWU6IHRpbWUgKGppZmZpZXMpIGEgbXNnIHdhcyByZWNlaXZlZCAqL1xuIFx0dW5zaWduZWQgbG9uZyBsYXN0X3JlY3ZfdGltZTtcbitcbitcdC8qKiBAdW5hY2tlZF9saXN0OiBsaXN0IG9mIHVuYWNrZWQgcGFja2V0cyAobWV0YS1pbmZvIG9ubHkpICovXG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIHVuYWNrZWRfbGlzdDtcbitcbitcdC8qKiBAYWNrX3NlcW5vX2xvY2s6IHByb3RlY3QgdW5hY2tlZF9saXN0ICsgXHUwMDI2YmF0YWR2X3RwX3JlY2VpdmVyLmxhc3RfcmVjdiAqL1xuK1x0c3BpbmxvY2tfdCBhY2tfc2Vxbm9fbG9jaztcbitcbitcdC8qKiBAdW5hY2tlZF9jb3VudDogbnVtYmVyIG9mIHVuYWNrZWQgZW50cmllcyAqL1xuK1x0c2l6ZV90IHVuYWNrZWRfY291bnQ7XG4gfTtcbiBcbiAvKipcbkBAIC0xNjc5LDYgKzE2NzYsOSBAQCBzdHJ1Y3QgYmF0YWR2X3ByaXYge1xuIFx0LyoqIEB0cF9udW06IG51bWJlciBvZiBjdXJyZW50bHkgYWN0aXZlIHRwIHNlc3Npb25zICovXG4gXHRhdG9taWNfdCB0cF9udW07XG4gXG4rXHQvKiogQGhhcmRpZl9nZW5lcmF0aW9uOiBnZW5lcmF0aW9uIGNvdW50ZXIgYWRkZWQgdG8gbmV0bGluayBoYXJkaWYgZHVtcHMgKi9cbitcdHVuc2lnbmVkIGludCBoYXJkaWZfZ2VuZXJhdGlvbjtcbitcbiBcdC8qKiBAb3JpZ193b3JrOiB3b3JrIHF1ZXVlIGNhbGxiYWNrIGl0ZW0gZm9yIG9yaWcgbm9kZSBwdXJnaW5nICovXG4gXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG9yaWdfd29yaztcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIwOjU0LjgwMTc0ODExN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNDk0ODQ4MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgUGF0Y2ggZm9yIGJhdG1hbi1hZHYqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHNlcmllcyB0YXJnZXRpbmcgdGhlIGBuZXQvYmF0bWFuLWFkdi9gIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsLiAgUmlnaHQgb2ZmIHRoZSBiYXQsIGl0J3MgcHJldHR5IGV4dGVuc2l2ZSwgdG91Y2hpbmcgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBjb2RlIOKAkyBhIGNsZWFyIGluZGljYXRpb24gb2Ygc29tZSBwcmV0dHkgc3Vic3RhbnRpYWwgYXJjaGl0ZWN0dXJhbCBjaGFuZ2VzLiAgV2UncmUgbG9va2luZyBhdCBtb2RpZmljYXRpb25zIGFjcm9zcyBhIHdpZGUgcmFuZ2Ugb2YgZmlsZXM6IGBiYXRfaXZfb2dtLmNgLCBgYmF0X3ZfZWxwLmNgLCBgYmF0X3Zfb2dtLmNgLCBgYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgLCBgaGFyZC1pbnRlcmZhY2UuY2AsIGBtYWluLmNgLCBgbWVzaC1pbnRlcmZhY2UuY2AsIGBuZXRsaW5rLmNgLCBgb3JpZ2luYXRvci5jYCwgYHRwX21ldGVyLmNgLCBgdHZsdi5jYCwgYW5kIGB0eXBlcy5oYC4gIFRpbWUgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0IHBhc3Mgc2VlbXMgdG8gYmUgY2xlYW51cDpcblxuKiAgIEluIHRoZSBgYmF0X2l2X29nbS5jYCBhbmQgYGJhdF92X2VscC5jYCBmaWxlcywgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgZGVhZCBjb2RlIGJlaW5nIHJlbW92ZWQsIHBhcnRpY3VsYXJseSBjaGVja3MgcmVsYXRlZCB0byBpbnRlcmZhY2Ugc3RhdGVzIGFuZCBvdXRnb2luZyBwYWNrZXQgY29uZGl0aW9ucy4gTG9va3MgbGlrZSBgQkFUQURWX0lGX05PVF9JTl9VU0VgIHN0YXRlIGlzIG5vdyBnb25lLlxuXG4qICAgSW4gYGJhdF92X29nbS5jYCBhbmQgYGJyaWRnZV9sb29wX2F2b2lkYW5jZS5jYCwgaXQgc2VlbXMgd2UncmUgc3RyZWFtbGluaW5nIGFyZ3VtZW50IHBhc3NpbmcsIHNwZWNpZmljYWxseSByZW1vdmluZyBgYmF0X3ByaXZgIGFuZCByZWx5aW5nIG9uIHRoZSBgaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlYCByZWxhdGlvbnNoaXAgZm9yIGNvbnRleHQuIFRoaXMgc3VnZ2VzdHMgYSBzaGlmdCBpbiBob3cgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBvcmdhbml6ZWQgYW5kIGFjY2Vzc2VkLlxuXG4qICAgYGhhcmQtaW50ZXJmYWNlLmNgIGlzIHdoZXJlIHRoaW5ncyBzdGFydCB0byBnZXQgaW50ZXJlc3RpbmcuICBUaGlzIGlzIHdoZXJlIHRoZSBpbnRlcmZhY2UgaGFuZGxpbmcgaXMgdW5kZXJnb2luZyBhIHNpZ25pZmljYW50IHJlZmFjdG9yLiAgV2Ugc2VlIGNoYW5nZXMgdG8gYGJhdGFkdl9oYXJkaWZfcmVsZWFzZWAsIGBiYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXZgLCBhbmQgYSBzaWduaWZpY2FudCBzaWduYXR1cmUgY2hhbmdlIGZvciBgYmF0YWR2X2hhcmRpZl9lbmFibGVfaW50ZXJmYWNlYC4gIEl0J3MgY2xlYXIgdGhlIHdheSBoYXJkd2FyZSBpbnRlcmZhY2VzIGFyZSBtYW5hZ2VkIGluIHRoZSBiYXRtYW4tYWR2IG1lc2ggaXMgYmVpbmcgcmV3b3JrZWQuIFRoZSByZW1vdmFsIG9mIHRoZSBhZGQvcmVtb3ZlIGludGVyZmFjZSBmdW5jdGlvbnMgKHdpdGggZXZlbnRzIGJlaW5nIGhhbmRsZWQgYSBkaWZmZXJlbnQgd2F5KSBpcyBhIHJlZCBmbGFnIC0gaXQgbWVhbnMgdGhlIGxpZmVjeWNsZSBvZiB0aGUgaW50ZXJmYWNlcyBoYXZlIGJlZW4gcmV3cml0dGVuLlxuXG4qICAgVGhlIG1vZGlmaWNhdGlvbnMgdG8gYHRwX21ldGVyLmNgIGFyZSBub3RhYmxlLiAgU3BsaXR0aW5nIGBiYXRhZHZfdHBfdmFyc19jb21tb25fcmVsZWFzZWAsIG1vdmluZyB0aGUgYHVuYWNrZWRfbGlzdGAsIGFuZCB0aGUgYGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyYCByZXdyaXRlIGFyZSBpbmRpY2F0aXZlIG9mIGNoYW5nZXMgdG8gaG93IEIuQS5ULk0uQS5OLiBBZHZhbmNlZCBoYW5kbGVzIHRocm91Z2hwdXQgYW5kIHNlcXVlbmNlIGhhbmRsaW5nLiAgVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWEsIHNvIEkgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoaXMgb25lLlxuXG4qICAgRmluYWxseSwgdGhlIGFkZGl0aW9uIG9mIGBiYXRhZHZfdHZsdl9oZHJfbmV4dGAgaW4gYHR2bHYuY2Agc3VnZ2VzdHMgYSBtb3JlIHJvYnVzdCBhbmQgc2FmZXIgbWV0aG9kIGZvciBpdGVyYXRpbmcgdGhyb3VnaCBUeXBlLUxlbmd0aC1WYWx1ZSAoVExWKSBjb250YWluZXJzLlxuXG5PdmVyYWxsLCBJIHNlZSBhIGNsZWFyIGRpcmVjdGlvbiBoZXJlOlxuXG4xLiAgKipSZWZhY3RvcmluZyBhbmQgY2xlYW51cDoqKiBSZW1vdmFsIG9mIHVubmVjZXNzYXJ5IGNoZWNrcywgY29uc29saWRhdGlvbiBvZiBkYXRhIGFjY2Vzcy5cbjIuICAqKkludGVyZmFjZSBNYW5hZ2VtZW50IFJld29yazoqKiAgQSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgaGFyZHdhcmUgaW50ZXJmYWNlcyBhcmUgaGFuZGxlZCwgbGlrZWx5IGZvciBiZXR0ZXIgaW50ZWdyYXRpb24gb3IgbW9yZSBmbGV4aWJsZSBjb25maWd1cmF0aW9uLlxuMy4gICoqVGhyb3VnaHB1dCBcdTAwMjYgU2VxdWVuY2UgSGFuZGxpbmc6KiogSW1wcm92ZW1lbnRzIHRvIHRocm91Z2hwdXQgbWVhc3VyZW1lbnQgYW5kIG91dC1vZi1vcmRlciBwYWNrZXQgcHJvY2Vzc2luZywgd2hpY2ggaW1wYWN0cyByZWxpYWJpbGl0eSBhbmQgZWZmaWNpZW5jeS5cblxuVGhpcyBpcyBhIGZ1bmN0aW9uYWxseSBpbXBhY3RmdWwgY2hhbmdlLCBjbGVhcmx5LiAgVGhlc2UgbW9kaWZpY2F0aW9ucyBydW4gZGVlcCBpbnRvIHRoZSBjb3JlIGxvZ2ljLCB3aGljaCBtZWFucyBpdCBzaG91bGQgYWJzb2x1dGVseSBiZSB0aG9yb3VnaGx5IGZ1enplZC4gIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlJ3ZlIGNvdmVyZWQgdGhlIGludGVyYWN0aW9ucyBpbiB0aGlzIGFyY2hpdGVjdHVyZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gIGBDT05GSUdfQkFUTUFOX0FEVmAgaXMgdGhlIHByaW1hcnkgb25lLCBvYnZpb3VzbHkuICBgdHBfbWV0ZXJgIGlzIGxpa2VseSBlbmFibGVkIHRocm91Z2ggYSBmZXcgb3B0aW9uczogSSBzdXNwZWN0IGBDT05GSUdfQkFUTUFOX0FEVl9EQVRgLCBgQ09ORklHX0JBVE1BTl9BRFZfTkNgLCBvciBwZXJoYXBzIGp1c3QgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGggYENPTkZJR19CQVRNQU5fQURWYC4gIFRpbWUgdG8gY2hlY2sgdGhlIGBuZXQvYmF0bWFuLWFkdi9LY29uZmlnYCBmaWxlIHRvIGJlIGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTg1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIxOjA3LjI5NjU5OTE2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzAzNDc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkFUTUFOX0FEVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L0tjb25maWctOS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjEwOmNvbmZpZyBCQVRNQU5fQURWXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiQi5BLlQuTS5BLk4uIEFkdmFuY2VkIE1lc2hpbmcgUHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTE5LVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MjA6Y29uZmlnIEJBVE1BTl9BRFZfQkFUTUFOX1ZcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIkIuQS5ULk0uQS5OLiBWIHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0zMy1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjM0OmNvbmZpZyBCQVRNQU5fQURWX0JMQVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMzUtXFx0Ym9vbCBcXFwiQnJpZGdlIExvb3AgQXZvaWRhbmNlXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy00Ni1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjQ3OmNvbmZpZyBCQVRNQU5fQURWX0RBVFxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGlzdHJpYnV0ZWQgQVJQIFRhYmxlXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01Ni1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjU3OmNvbmZpZyBCQVRNQU5fQURWX01DQVNUXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01OC1cXHRib29sIFxcXCJNdWx0aWNhc3Qgb3B0aW1pc2F0aW9uXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy02NS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjY2OmNvbmZpZyBCQVRNQU5fQURWX0RFQlVHXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy02Ny1cXHRib29sIFxcXCJCLkEuVC5NLkEuTi4gZGVidWdnaW5nXFxcIlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03NC1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjc1OmNvbmZpZyBCQVRNQU5fQURWX1RSQUNJTkdcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTc2LVxcdGJvb2wgXFxcIkIuQS5ULk0uQS5OLiB0cmFjaW5nIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIxOjA3LjM5MzY0MDEyMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTAzNDg1NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcGF0Y2gncyBpbXBhY3Q6XG5cbioqUGF0Y2ggSW1wYWN0IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgZ29pbmcgdG8gYWZmZWN0IG91ciBCQVRNQU4gY29kZSwgbm8gcXVlc3Rpb24uIEkgc2VlIGl0IHRvdWNoaW5nIGBiYXRfdl9lbHAuY2AgYW5kIGBiYXRfdl9vZ20uY2AuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHBhcnQgb2YgdGhlIEJBVE1BTl9WIGltcGxlbWVudGF0aW9uLCBzbyB3ZSBuZWVkIHRvIGNhcmVmdWxseSByZXZpZXcgaG93IHRoZXNlIGNoYW5nZXMgbWlnaHQgaW1wYWN0IHRoZSBleGlzdGluZyBWIHByb3RvY29sIGxvZ2ljIGFuZCBwZXJmb3JtYW5jZS5cblxuVGhlbiwgdGhlcmUncyBgYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgLCB3aGljaCwgYXMgSSByZWNhbGwsIGlzIHRoZSBoZWFydCBvZiBCQVRNQU5fQURWJ3MgQnJpZGdlIExvb3AgQXZvaWRhbmNlIChCTEEpIGZ1bmN0aW9uYWxpdHkuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgaW1wYWN0IG9uIG91ciBsb29wIGRldGVjdGlvbiBhbmQgcHJldmVudGlvbiBtZWNoYW5pc21zLiBXZSdsbCBuZWVkIHRvIHNjcnV0aW5pemUgdGhlc2UgY2hhbmdlcyB0aG9yb3VnaGx5IHRvIGVuc3VyZSB0aGV5IGRvbid0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdW5leHBlY3RlZCBiZWhhdmlvciB0aGVyZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgdmFyaW91cyBCTEEgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuXG5GaW5hbGx5LCB3ZSBoYXZlIGB0cF9tZXRlci5jYC4gTm93LCB0aGF0IG9uZSBpcyBsZXNzIGltbWVkaWF0ZWx5IG9idmlvdXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGVyZSB0aGF0IG1vZHVsZSBsaXZlcy4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGBuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZWAgdG8gY29uZmlybSBpZiBpdCdzIGNvcmUgdG8gYmF0bWFuLWFkdiBvciBhIG1vZHVsZSB0aGF0IGNhbiBiZSBjb25maWd1cmVkLiBJIHN1c3BlY3QgaXQncyBjb3JlLCBidXQgYmVzdCB0byBiZSBzdXJlLiBUaGF0J3MgcHJvYmFibHkgcmVsYXRlZCB0byB0aHJvdWdocHV0IG1ldGVyaW5nIHNvIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5nZXMgYWZmZWN0IGFueSByZWxhdGVkIHBlcmZvcm1hbmNlIG1ldHJpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTUwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MTEuODQzOTkxMTI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTUzNDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0cF9tZXRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZT0yOT1iYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfVFJBQ0lORykgKz0gdHJhY2Uub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjMwOmJhdG1hbi1hZHYteSArPSB0cF9tZXRlci5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMzEtYmF0bWFuLWFkdi15ICs9IHRyYW5zbGF0aW9uLXRhYmxlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MTEuOTk5NTMyNTU5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNTI1NTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBidWlsZCBwcm9jZXNzLCBmb2N1c2luZyBvbiBgdHBfbWV0ZXIuY2Agd2l0aGluIHRoZSBCQVRNQU4tQURWIGNvbnRleHQ6XG5cbioqQW5hbHl6aW5nIHRoZSBCQVRNQU4tQURWIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIGtub3cgdGhhdCBgdHBfbWV0ZXIuY2AgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidWlsZCBpZiBgQkFUTUFOX0FEVmAgaXMgdHVybmVkIG9uLiBUaGF0J3MgYSBnaXZlbiwgbm90aGluZyBuZXcgdGhlcmUuIE1ha2VzIHNlbnNlLCBpdCdzIGEgY29yZSBjb21wb25lbnQuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHRoYXQgYEJBVE1BTl9BRFZfQkFUTUFOX1ZgIGFuZCBgQkFUTUFOX0FEVl9CTEFgIGFyZSBhbHNvIGVuYWJsZWQgYWxvbmdzaWRlIGl0LiBUaGF0IGNvbmZpZ3VyYXRpb24gaXMgY3J1Y2lhbDsgaXQgZHJpdmVzIHRoZSBmdW5jdGlvbmFsaXR5LiBHb3R0YSB2ZXJpZnkgdGhvc2UgYXJlIHNldCBhcHByb3ByaWF0ZWx5LlxuXG5UbyBjb25maXJtIGhvdyB0aGUgb2JqZWN0IGZpbGVzIGFyZSBtYW5hZ2VkLCBJIG5lZWQgdG8gZGl2ZSBpbnRvIGBuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZWAuIFNwZWNpZmljYWxseSwgSSdsbCBzZWFyY2ggZm9yIGBiYXRfdl9lbHAub2AgYW5kIGBiYXRfdl9vZ20ub2Agd2l0aGluIHRoYXQgTWFrZWZpbGUuIFRoZSBidWlsZCBwcm9jZXNzIGRldGFpbHMgd2lsbCBpbGx1bWluYXRlIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgbW9kdWxlcyBhcmUgbGlua2VkIGFuZCBidWlsdCByZWxhdGl2ZSB0byBgdHBfbWV0ZXIuY2Agd2hlbiB0aGUgdmFyaW91cyBCQVRNQU4tQURWIGZlYXR1cmVzIGFyZSBhY3RpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMDU5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MTYuMTM0NzkwMzQ0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzUzNTAyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYXRfdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZT04PWJhdG1hbi1hZHYteSArPSBiYXRfaXZfb2dtLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZTo5OmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVikgKz0gYmF0X3Yub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjEwOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVikgKz0gYmF0X3ZfZWxwLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxMTpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1YpICs9IGJhdF92X29nbS5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMTItYmF0bWFuLWFkdi15ICs9IGJpdGFycmF5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MTYuMjUyMzMyODkyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxMTA3ODQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBc3Nlc3NtZW50IG9mIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIGFmZmlybWF0aW9uIG9mIGBCQVRNQU5fQURWX0JBVE1BTl9WYCBpcyBzcG90IG9uLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBuZWNlc3NpdHkuIE5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHBvdGVudGlhbCByZWxhdGVkIGFyZWEgdGhhdCB3YXJyYW50cyBjbG9zZXIgc2NydXRpbnkuIFdoYXQgYWJvdXQgYGJyaWRnZV9sb29wX2F2b2lkYW5jZS5jYD8gQ29uc2lkZXJpbmcgdGhlIG5lZWQgZm9yIEJhdG1hbi1hZHYgZnVuY3Rpb25hbGl0eSwgSSBoYXZlIHRvIGVuc3VyZSB0aGUgYnJpZGdlIGxvb3AgYXZvaWRhbmNlIGxvZ2ljIGlzIHJvYnVzdCBhbmQgY29ycmVjdGx5IGludGVyYWN0cyB3aXRoIHRoZSBuZXcgdmVyc2lvbi4gVGhlIGludGVyYWN0aW9uIG9mIHRoZSBicmlkZ2UgbG9vcCBhdm9pZGFuY2UgY29kZSB3aXRoIHRoaXMgdmVyc2lvbiBpcyBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyB0aG9yb3VnaCBpbnNwZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjU5MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIxOjE5LjQ2MzQxNDAxN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMzM0OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyaWRnZV9sb29wX2F2b2lkYW5jZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi9NYWtlZmlsZT0xMj1iYXRtYW4tYWR2LXkgKz0gYml0YXJyYXkub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjEzOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CTEEpICs9IGJyaWRnZV9sb29wX2F2b2lkYW5jZS5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMTQtYmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0RBVCkgKz0gZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MTkuNjA1NzU3MDIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NjY1NTYwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgRnVuY3Rpb25zIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBjbGVhcjogd2UncmUgdGFyZ2V0aW5nIGBCQVRNQU5fQURWX0JMQWAgYW5kIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZnV6ei4gVGhlIGluaXRpYWwgc3RlcCBpcyBhbHdheXMgdG8gcGlucG9pbnQgdGhlIGNvcmUgbW9kdWxlcyB0aGF0IGFyZSB0b3VjaGVkIGJ5IHRoZSBwYXRjaC4gSSd2ZSBxdWlja2x5IHNjYW5uZWQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgaWRlbnRpZmllZCBhIHN1YnN0YW50aWFsIGxpc3QuXG5cbk5vdyBjb21lcyB0aGUgY3J1Y2lhbCBwYXJ0IOKAkyBkaXN0aWxsaW5nIHRoZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBJJ3ZlIG5hcnJvd2VkIGRvd24gdGhlIGxpc3QgYmFzZWQgb24gcG90ZW50aWFsIGZvciBleHRlcm5hbCBpbnRlcmFjdGlvbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGVudHJ5IHBvaW50cyB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSB1c2Vyc3BhY2UsIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiBBZnRlciBhIHF1aWNrIGFzc2Vzc21lbnQsIHRoZSBpbml0aWFsIGZyb250cnVubmVycyBhcmU6IGBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VgLCBgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfaGFyZF9pZl9ldmVudGAsIGBiYXRhZHZfbWVzaGlmX3NsYXZlX2FkZGAsIGBiYXRhZHZfdHBfaGFuZGxlX291dF9vZl9vcmRlcmAsIGBiYXRhZHZfdHBfcmVjdl9tc2dgLCBgYmF0YWR2X3R2bHZfY29udGFpbmVyc19wcm9jZXNzYCwgYW5kIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW5gLlxuXG5JJ3ZlIHRha2VuIGEgZGVlcGVyIGRpdmUgb24gYSBmZXcgb2YgdGhlc2UsIHRvIGNvbmZpcm0gcmVhY2hhYmlsaXR5LiAgYGJhdGFkdl90cF9yZWN2X21zZ2AgaXMgcmVhY2hhYmxlIHZpYSBpbmNvbWluZyBUUCBtZXRlciBtZXNzYWdlczsgYGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2Vzc2AgdmlhIGluY29taW5nIFRWTFYgY29udGFpbmVyczsgYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAgdmlhIGFkZGluZyBhIHNsYXZlIHRvIGEgbWVzaCBpbnRlcmZhY2UsIHdoaWNoIGNhbiBoYXBwZW4gdmlhIG5ldGxpbmsgb3Igc3lzZnM7IGFuZCBmaW5hbGx5LCBgYmF0YWR2X21lc2hpZl9zbGF2ZV9hZGRgIGlzIHRoZSBuZXRkZXZfb3BzIGBuZG9fYWRkX3NsYXZlYCBmdW5jdGlvbiBmb3IgdGhlIG1lc2ggaW50ZXJmYWNlLlxuXG5VbHRpbWF0ZWx5LCBJJ20gY29uZmlkZW50IGFib3V0IHByb2NlZWRpbmcgd2l0aCB0aGVzZSBzaXggZnVuY3Rpb25zIGZvciBvdXIgZm9jdXNlZCBmdXp6aW5nIGVmZm9ydDogYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlYCwgYGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyYCwgYGJhdGFkdl90cF9yZWN2X21zZ2AsIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgIGFuZCBgYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluYC5cblxuTmV4dCwgSSdsbCBwZXJmb3JtIGEgcXVpY2sgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZSB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IHN0YXRpYyBpbmxpbmUsIGVuc3VyaW5nIHdlIGNhbiBwcm9wZXJseSBpbnN0cnVtZW50IGFuZCB0YXJnZXQgdGhlbSB3aXRoIHRoZSBmdXp6ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODk4LCJPdXRwdXRUb2tlbnMiOjk0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIxOjI5LjQ3MjMyNDIzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1ODg1NzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KHZvaWR8aW50fGJvb2x8c3RydWN0IGJhdGFkdl90dmx2X2hkciBcXFxcKikgYmF0YWR2XyhoYXJkaWZfZW5hYmxlX2ludGVyZmFjZXxoYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2V8dHBfaGFuZGxlX291dF9vZl9vcmRlcnx0cF9yZWN2X21zZ3x0dmx2X2NvbnRhaW5lcnNfcHJvY2Vzc3x0dmx2X2NvbnRhaW5lcnNfY29udGFpbilcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM9NzAzPWJhdGFkdl9oYXJkaWZfZGVhY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpoYXJkX2lmYWNlKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy03MjMtICovXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYzo3MjQ6aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTcyNS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSlcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtODMxLSAqL1xcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM6ODMyOnZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy04MzMte1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaD03MT1iYXRhZHZfaGFyZGlmX2dldF9ieV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpO1xcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmg6NzI6aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oLTczLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oOjc0OnZvaWQgYmF0YWR2X2hhcmRpZl9kaXNhYmxlX2ludGVyZmFjZShzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmhhcmRfaWZhY2UpO1xcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgtNzUtaW50IGJhdGFkdl9oYXJkaWZfbWluX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jPTEzNDY9c3RhdGljIGludCBiYXRhZHZfdHBfc2VuZF9hY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMtMTQxNS0gKi9cXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jOjE0MTY6c3RhdGljIGJvb2wgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXIoc3RydWN0IGJhdGFkdl90cF9yZWNlaXZlciAqdHBfdmFycyxcXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jLTE0MTctXFx0XFx0XFx0XFx0XFx0ICB1MzIgc2Vxbm8sIHUzMiBwYXlsb2FkX2xlbilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmM9MTU2ND1iYXRhZHZfdHBfaW5pdF9yZWN2KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jLTE2MjUtICovXFxubmV0L2JhdG1hbi1hZHYvdHBfbWV0ZXIuYzoxNjI2OnN0YXRpYyB2b2lkIGJhdGFkdl90cF9yZWN2X21zZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMtMTYyNy1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3R2bHYuYz00NjA9c3RhdGljIHN0cnVjdCBiYXRhZHZfdHZsdl9oZHIgKmJhdGFkdl90dmx2X2hkcl9uZXh0KHZvaWQgKip0dmx2X3ZhbHVlLCB1MTYgKnR2bHZfdmFsdWVfbGVuKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHZsdi5jLTUwMi0gKi9cXG5uZXQvYmF0bWFuLWFkdi90dmx2LmM6NTAzOnN0YXRpYyBib29sIGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbih2b2lkICp0dmx2X3ZhbHVlLFxcbm5ldC9iYXRtYW4tYWR2L3R2bHYuYy01MDQtXFx0XFx0XFx0XFx0XFx0ICAgdTE2IHR2bHZfdmFsdWVfbGVuLCB1OCB0eXBlLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHZsdi5jLTUyOS0gKi9cXG5uZXQvYmF0bWFuLWFkdi90dmx2LmM6NTMwOmludCBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3Moc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG5uZXQvYmF0bWFuLWFkdi90dmx2LmMtNTMxLVxcdFxcdFxcdFxcdCAgIHU4IHBhY2tldF90eXBlLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHZsdi5oPTQwPXZvaWQgYmF0YWR2X3R2bHZfaGFuZGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxubmV0L2JhdG1hbi1hZHYvdHZsdi5oLTQxLVxcdFxcdFxcdFxcdCAgICB1OCB0eXBlLCB1OCB2ZXJzaW9uKTtcXG5uZXQvYmF0bWFuLWFkdi90dmx2Lmg6NDI6aW50IGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2VzcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L3R2bHYuaC00My1cXHRcXHRcXHRcXHQgICB1OCBwYWNrZXRfdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMjE6MjE6MjkuNzE4MjIwNzgxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NDk5NzcwOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEIuQS5ULk0uQS5OLiBBZHZhbmNlZCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBmb3IgZnV6emluZyBwdXJwb3Nlcy4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZC4gQmFzZWQgb24gdGhlIGNoYW5nZXMsIHRoZSByZWxldmFudCBmdW5jdGlvbnMgc2VlbSB0byBiZTogYGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZWAsIGBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlYCwgYGJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyYCwgYGJhdGFkdl90cF9yZWN2X21zZ2AsIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgLCBhbmQgYGJhdGFkdl90dmx2X2NvbnRhaW5lcnNfY29udGFpbmAuIEknbGwgY29uZmlybSB0aGF0IHRob3NlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIHNhZmUgdG8gaW5jbHVkZSwgYW5kIHRoZW4gSSdsbCBtYXJrIHRob3NlIGFzIG15IGBGb2N1c1N5bWJvbHNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFRoZSBmaWxlcyB0b3VjaGVkIGJ5IHRoZSBwYXRjaCBhcmUgYGJhdF92X2VscC5jYCwgYGJhdF92X29nbS5jYCwgYW5kIGBicmlkZ2VfbG9vcF9hdm9pZGFuY2UuY2AuIEZyb20gdGhpcywgSSBjYW4gZGVyaXZlIGBCQVRNQU5fQURWYCwgYEJBVE1BTl9BRFZfQkFUTUFOX1ZgLCBhbmQgYEJBVE1BTl9BRFZfQkxBYCBhcyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MuIEl0J3MgYSBnb29kIHByYWN0aWNlIHRvIGRvdWJsZS1jaGVjayB0aGVpciBleGFjdCBuYW1lcywgd2hpY2ggSSBkaWQgYWdhaW5zdCB0aGUgYEtjb25maWdgIGZpbGUuIEknbGwgbWFrZSBzdXJlIHRob3NlIGFyZSBpbmNsdWRlZCBpbiBteSBgRW5hYmxlQ29uZmlnc2AuXG5cbk5vdywgZG9lcyB0aGlzIHBhdGNoIHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseS4gVGhlIHBhdGNoIGRlYWxzIHdpdGggY3JpdGljYWwgYXNwZWN0cyBvZiBCLkEuVC5NLkEuTi4gQWR2YW5jZWQ6IGludGVyZmFjZSBoYW5kbGluZywgVFAgbWV0ZXIgcGFja2V0IHByb2Nlc3NpbmcsIGFuZCBUVkxWIGNvbnRhaW5lciBwYXJzaW5nLiBUaGVzZSBhcmUgYWxsIGNvcmUgbG9naWMgcGF0aHMsIGFjY2Vzc2libGUgdmlhIHVzZXIgc3BhY2UgdGhyb3VnaCBuZXRsaW5rLCBzeXNmcywgYW5kIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gaGlnaC12YWx1ZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBJIGNhbiBkZWZpbml0aXZlbHkgc2V0IGBXb3J0aEZ1enppbmdgIHRvIHRydWUuXG5cblRoZXJlZm9yZSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgc2V0dXA6XG5cbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYEZvY3VzU3ltYm9sc2A6XG4gICAgKiAgIGBiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VgXG4gICAgKiAgIGBiYXRhZHZfaGFyZGlmX2Rpc2FibGVfaW50ZXJmYWNlYFxuICAgICogICBgYmF0YWR2X3RwX2hhbmRsZV9vdXRfb2Zfb3JkZXJgXG4gICAgKiAgIGBiYXRhZHZfdHBfcmVjdl9tc2dgXG4gICAgKiAgIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX3Byb2Nlc3NgXG4gICAgKiAgIGBiYXRhZHZfdHZsdl9jb250YWluZXJzX2NvbnRhaW5gXG4qICAgYEVuYWJsZUNvbmZpZ3NgOlxuICAgICogICBgQkFUTUFOX0FEVmBcbiAgICAqICAgYEJBVE1BTl9BRFZfQkFUTUFOX1ZgXG4gICAgKiAgIGBCQVRNQU5fQURWX0JMQWBcblxuSSdtIGNvbmZpZGVudCBpbiB0aGlzIHNldHVwLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUyNzUsIk91dHB1dFRva2VucyI6MjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDIxOjIxOjM5LjU2ODIwMjc4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzc5NTYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CQVRNQU5fVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CTEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyXCIsXG4gICAgXCJiYXRhZHZfdHBfcmVjdl9tc2dcIixcbiAgICBcImJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2Vzc1wiLFxuICAgIFwiYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgcm91dGluZyBwcm90b2NvbC4gSXQgbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGhhcmQgaW50ZXJmYWNlcyAoYWRkaW5nL3JlbW92aW5nIHRoZW0gZnJvbSB0aGUgbWVzaCksIHRoZSBwcm9jZXNzaW5nIG9mIG91dC1vZi1vcmRlciBUUCBtZXRlciBwYWNrZXRzLCBhbmQgdGhlIHBhcnNpbmcgb2YgVFZMViBjb250YWluZXJzLiBUaGVzZSBhcmUgY29yZSBsb2dpYyBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsvc3lzZnMgYW5kIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CQVRNQU5fVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CTEFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYXRhZHZfaGFyZGlmX2VuYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl9oYXJkaWZfZGlzYWJsZV9pbnRlcmZhY2VcIixcbiAgICBcImJhdGFkdl90cF9oYW5kbGVfb3V0X29mX29yZGVyXCIsXG4gICAgXCJiYXRhZHZfdHBfcmVjdl9tc2dcIixcbiAgICBcImJhdGFkdl90dmx2X2NvbnRhaW5lcnNfcHJvY2Vzc1wiLFxuICAgIFwiYmF0YWR2X3R2bHZfY29udGFpbmVyc19jb250YWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgcm91dGluZyBwcm90b2NvbC4gSXQgbW9kaWZpZXMgdGhlIGhhbmRsaW5nIG9mIGhhcmQgaW50ZXJmYWNlcyAoYWRkaW5nL3JlbW92aW5nIHRoZW0gZnJvbSB0aGUgbWVzaCksIHRoZSBwcm9jZXNzaW5nIG9mIG91dC1vZi1vcmRlciBUUCBtZXRlciBwYWNrZXRzLCBhbmQgdGhlIHBhcnNpbmcgb2YgVFZMViBjb250YWluZXJzLiBUaGVzZSBhcmUgY29yZSBsb2dpYyBjaGFuZ2VzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsvc3lzZnMgYW5kIG5ldHdvcmsgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96km[1] Phase: Succeeded StartedAt: 2026-06-30 21:21:52 +0000 UTC FinishedAt: 2026-06-30 21:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 21:21:52 +0000 UTC FinishedAt: 2026-06-30 21:21:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2] Phase: Succeeded StartedAt: 2026-06-30 21:21:52 +0000 UTC FinishedAt: 2026-07-01 01:25:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-30 21:21:52 +0000 UTC FinishedAt: 2026-07-01 01:25:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-30 21:21:52 +0000 UTC FinishedAt: 2026-06-30 21:22:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-30 21:21:52 +0000 UTC FinishedAt: 2026-06-30 21:22:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowd96km/series-workflowd96km-convert-artifact-2118460297/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-30 21:22:33 +0000 UTC FinishedAt: 2026-06-30 21:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-30 21:22:33 +0000 UTC FinishedAt: 2026-06-30 21:49:46 +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:*e3bb8bb9-aa0b-4c74-95f4-a28d2fd6a8e5,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-workflowd96km/series-workflowd96km-convert-artifact-2118460297/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "61cef4a5-7dca-49aa-ade4-00f5fbf708de", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-build-action-2195577959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-30 21:22:33 +0000 UTC FinishedAt: 2026-06-30 21:48:39 +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:*e3bb8bb9-aa0b-4c74-95f4-a28d2fd6a8e5,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-workflowd96km/series-workflowd96km-convert-artifact-2118460297/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "61cef4a5-7dca-49aa-ade4-00f5fbf708de", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-build-action-2195577959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-30 21:49:46 +0000 UTC FinishedAt: 2026-06-30 21:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-30 21:49:46 +0000 UTC FinishedAt: 2026-06-30 21:49:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-30 21:49:46 +0000 UTC FinishedAt: 2026-06-30 21:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-30 21:49:46 +0000 UTC FinishedAt: 2026-06-30 21:50:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflowd96km/series-workflowd96km-convert-artifact-3174901404/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-30 21:50:17 +0000 UTC FinishedAt: 2026-06-30 21:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-30 21:50:17 +0000 UTC FinishedAt: 2026-06-30 21:52:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*61cef4a5-7dca-49aa-ade4-00f5fbf708de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-build-action-2195577959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-30 21:52:28 +0000 UTC FinishedAt: 2026-06-30 21:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-30 21:52:28 +0000 UTC FinishedAt: 2026-06-30 21:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-30 21:52:28 +0000 UTC FinishedAt: 2026-06-30 22:21:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-30 21:52:28 +0000 UTC FinishedAt: 2026-06-30 22:21:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e3bb8bb9-aa0b-4c74-95f4-a28d2fd6a8e5,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-workflowd96km/series-workflowd96km-convert-artifact-3174901404/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "68f54950-26f8-464d-a997-c298dad0e871", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-build-action-758303224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-30 21:52:29 +0000 UTC FinishedAt: 2026-06-30 22:21:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e3bb8bb9-aa0b-4c74-95f4-a28d2fd6a8e5,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-workflowd96km/series-workflowd96km-convert-artifact-3174901404/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "68f54950-26f8-464d-a997-c298dad0e871", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-build-action-758303224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-30 22:21:26 +0000 UTC FinishedAt: 2026-06-30 22:21:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-30 22:21:26 +0000 UTC FinishedAt: 2026-06-30 22:21:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-30 22:21:26 +0000 UTC FinishedAt: 2026-06-30 22:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-30 22:21:26 +0000 UTC FinishedAt: 2026-06-30 22:23:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*68f54950-26f8-464d-a997-c298dad0e871,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-build-action-758303224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-30 22:23:23 +0000 UTC FinishedAt: 2026-07-01 01:25:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-30 22:23:23 +0000 UTC FinishedAt: 2026-07-01 01:25:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*61cef4a5-7dca-49aa-ade4-00f5fbf708de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*68f54950-26f8-464d-a997-c298dad0e871,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-build-action-2195577959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-build-action-758303224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-30 22:23:23 +0000 UTC FinishedAt: 2026-06-30 22:23:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-30 22:23:23 +0000 UTC FinishedAt: 2026-06-30 22:23:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-convert-artifact-1138959973/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-30 22:23:23 +0000 UTC FinishedAt: 2026-06-30 22:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-30 22:23:23 +0000 UTC FinishedAt: 2026-06-30 22:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-30 22:23:23 +0000 UTC FinishedAt: 2026-06-30 22:23:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-30 22:23:33 +0000 UTC FinishedAt: 2026-07-01 01:25:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd96km[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["batadv_hardif_enable_interface","batadv_hardif_disable_interface","batadv_tp_handle_out_of_order","batadv_tp_recv_msg","batadv_tvlv_containers_process","batadv_tvlv_containers_contain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["BATMAN_ADV","BATMAN_ADV_BATMAN_V","BATMAN_ADV_BLA"],"series_id":"63159142-887d-4abd-b988-d4bab9cdb893","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-30 22:23:33 +0000 UTC FinishedAt: 2026-07-01 01:25:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*61cef4a5-7dca-49aa-ade4-00f5fbf708de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*68f54950-26f8-464d-a997-c298dad0e871,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-build-action-2195577959/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-build-action-758303224/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd96km/series-workflowd96km-convert-artifact-1138959973/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,}