Name: series-workflow8x56t Phase: Succeeded StartedAt: 2026-06-30 01:42:42 +0000 UTC FinishedAt: 2026-06-30 05:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[0] Phase: Succeeded StartedAt: 2026-06-30 01:42:42 +0000 UTC FinishedAt: 2026-06-30 01:54:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 01:42:42 +0000 UTC FinishedAt: 2026-06-30 01:54:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "f6a4ce46-a170-4bac-81dd-b3a042619c3f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_resize_max", "mem_cgroup_force_empty", "memory_high_write", "memory_max_write", "user_proactive_reclaim" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9yZXNpemVfbWF4JiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZm9yY2VfZW1wdHkmIzM0OywKICAgICYjMzQ7bWVtb3J5X2hpZ2hfd3JpdGUmIzM0OywKICAgICYjMzQ7bWVtb3J5X21heF93cml0ZSYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciBkeWluZyBtZW1vcnkgY2dyb3VwcyBpbiBzZXZlcmFsIGNncm91cCB3cml0ZSBoYW5kbGVycyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aHMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBvciBzdGFsbHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVhcmx5LWV4aXQgcGF0aHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWM1YjRjMjRjNmZmMDc4MDE0Y2NlNmMxZDhhZmM3MzMyYWQxZGIwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDAxOjUyOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuY1xuaW5kZXggNzY1MDY5MjExNTY3OGMuLmFkMjNkZTk4NWQ5YWYxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC0xNTEzLDYgJiM0MzsxNTEzLDkgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRpZiAoIXJldClcbiBcdFx0XHRicmVhaztcbiBcbiYjNDM7XHRcdGlmIChtZW1jZ19pc19keWluZyhtZW1jZykpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0aWYgKCFkcmFpbmVkKSB7XG4gXHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbiBcdFx0XHRkcmFpbmVkID0gdHJ1ZTtcbkBAIC0xNTUxLDYgJiM0MzsxNTU0LDkgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4gXG4mIzQzO1x0XHRpZiAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdGlmICghdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgMSwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxuIFx0XHRcdG5yX3JldHJpZXMtLTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IGQyMGZmYzgyNzMwNmU5Li5hZDVmNmRmZGMwMjE0MyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNDc5NCw2ICYjNDM7NDc5NCw5IEBAIHN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdGJyZWFrO1xuIFxuJiM0MztcdFx0aWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRpZiAoIWRyYWluZWQpIHtcbiBcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuIFx0XHRcdGRyYWluZWQgPSB0cnVlO1xuQEAgLTQ4NDUsNiAmIzQzOzQ4NDgsOSBAQCBzdGF0aWMgc3NpemVfdCBtZW1vcnlfbWF4X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdGJyZWFrO1xuIFxuJiM0MztcdFx0aWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRpZiAoIWRyYWluZWQpIHtcbiBcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuIFx0XHRcdGRyYWluZWQgPSB0cnVlO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDc1NGM1ZjVkNzE2YWFkLi4wOTFiNjA5Y2YxYjFlYiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTc5MTIsNiAmIzQzOzc5MTIsOSBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFxuJiM0MztcdFx0aWYgKG1lbWNnIFx1MDAyNlx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpXG4mIzQzO1x0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXG4gXHRcdCAqIGhvcGUgb2YgaW50cm9kdWNpbmcgbW9yZSBldmljdGFibGUgcGFnZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3Jlc2l6ZV9tYXgmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mb3JjZV9lbXB0eSYjMzQ7LAogICAgJiMzNDttZW1vcnlfaGlnaF93cml0ZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfbWF4X3dyaXRlJiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjaGVja3MgZm9yIGR5aW5nIG1lbW9yeSBjZ3JvdXBzIGluIHNldmVyYWwgY2dyb3VwIHdyaXRlIGhhbmRsZXJzIGFuZCBwcm9hY3RpdmUgcmVjbGFpbSBwYXRocyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIG9yIHN0YWxscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZWFybHktZXhpdCBwYXRocyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFjNWI0YzI0YzZmZjA3ODAxNGNjZTZjMWQ4YWZjNzMzMmFkMWRiMGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAwMTo1MjowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuYwppbmRleCA3NjUwNjkyMTE1Njc4Yy4uYWQyM2RlOTg1ZDlhZjEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmMKQEAgLTE1MTMsNiAmIzQzOzE1MTMsOSBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCWlmICghcmV0KQogCQkJYnJlYWs7CiAKJiM0MzsJCWlmIChtZW1jZ19pc19keWluZyhtZW1jZykpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWlmICghZHJhaW5lZCkgewogCQkJZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTsKIAkJCWRyYWluZWQgPSB0cnVlOwpAQCAtMTU1MSw2ICYjNDM7MTU1NCw5IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRUlOVFI7CiAKJiM0MzsJCWlmIChtZW1jZ19pc19keWluZyhtZW1jZykpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWlmICghdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgMSwgR0ZQX0tFUk5FTCwKIAkJCQkJCSAgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpCiAJCQlucl9yZXRyaWVzLS07CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggZDIwZmZjODI3MzA2ZTkuLmFkNWY2ZGZkYzAyMTQzIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00Nzk0LDYgJiM0Mzs0Nzk0LDkgQEAgc3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLAogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlicmVhazsKIAomIzQzOwkJaWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJaWYgKCFkcmFpbmVkKSB7CiAJCQlkcmFpbl9hbGxfc3RvY2sobWVtY2cpOwogCQkJZHJhaW5lZCA9IHRydWU7CkBAIC00ODQ1LDYgJiM0Mzs0ODQ4LDkgQEAgc3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwogCiYjNDM7CQlpZiAobWVtY2dfaXNfZHlpbmcobWVtY2cpKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQlpZiAoIWRyYWluZWQpIHsKIAkJCWRyYWluX2FsbF9zdG9jayhtZW1jZyk7CiAJCQlkcmFpbmVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNzU0YzVmNWQ3MTZhYWQuLjA5MWI2MDljZjFiMWViIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNzkxMiw2ICYjNDM7NzkxMiw5IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZiwKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FSU5UUjsKIAomIzQzOwkJaWYgKG1lbWNnICZhbXA7JmFtcDsgbWVtY2dfaXNfZHlpbmcobWVtY2cpKQomIzQzOwkJCXJldHVybiAtRUFHQUlOOwomIzQzOwogCQkvKgogCQkgKiBUaGlzIGlzIHRoZSBmaW5hbCBhdHRlbXB0LCBkcmFpbiBwZXJjcHUgbHJ1IGNhY2hlcyBpbiB0aGUKIAkJICogaG9wZSBvZiBpbnRyb2R1Y2luZyBtb3JlIGV2aWN0YWJsZSBwYWdlcy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbWNnIER5aW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZSDigJMgdGhleSYjMzk7cmUgcHV0dGluZyBpbiBgbWVtY2dfaXNfZHlpbmcobWVtY2cpYCBjaGVja3MgaW4gYSBmZXcga2V5IHNwb3RzLiBNYWtlcyBzZW5zZTsgaWYgYSBtZW1jZyBpcyBiZWluZyB0b3JuIGRvd24sIHdlIGRvbiYjMzk7dCB3YW50IHRvIGtlZXAgdGhyYXNoaW5nIGFyb3VuZCB0cnlpbmcgdG8gZG8gdGhpbmdzIHRoYXQgYXJlIG5vdyBwb2ludGxlc3MsIG9yIHBvdGVudGlhbGx5IGV2ZW4gaGFybWZ1bC4gVGhleSYjMzk7dmUgdGFyZ2V0ZWQgc2V2ZXJhbCBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAgKGJvdGggaW4gYG1tL21lbWNvbnRyb2wtdjEuY2ApLCBgbWVtb3J5X2hpZ2hfd3JpdGVgLCBgbWVtb3J5X21heF93cml0ZWAgKGluIGBtbS9tZW1jb250cm9sLmNgKSwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCB3aGljaCBpcyBpbiBgbW0vdm1zY2FuLmNgLiAgQWxsIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGNncm91cC4gVGhlIGlkZWEgaXMgdG8gYmFpbCBlYXJseSBpbiB0aGVzZSBsb29wcyBvciBlYXJseSByZXR1cm5zIGlmIHRoZSB0YXJnZXQgbWVtY2cgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgZHlpbmcuCgpHaXZlbiB0aGUgc2NvcGUsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGNvcnJlY3RseSBtYW5hZ2VkLiBUaGlzIHNlZW1zIHRvIGJlIHByZXR0eSBzdGFuZGFyZCBtZW1jZyBzdHVmZiwgc28gSSYjMzk7bSBleHBlY3RpbmcgYENPTkZJR19NRU1DR2AgYW5kLCBzaW5jZSB0aGV5JiMzOTtyZSB0b3VjaGluZyBgbWVtY29udHJvbC12MS5jYCwgcHJvYmFibHkgYENPTkZJR19NRU1DR19WMWAuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlLiBJdCB3aWxsIGxpa2VseSByZXNpZGUgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgLiBJJiMzOTtsbCBydW4gdGhyb3VnaCB0aG9zZSBxdWlja2x5IGFuZCBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTU1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA0Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBicGZfbWVtY29udHJvbC5vXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA4LXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTAtXHRjZ3JvdXBfcGF0aChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExMi1cdFx0cmV0dXJuIHRydWU7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTM6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE0LVx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RlYnVnLmM9NzA9c3RhdGljIHZvaWQgX19kdW1wX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL2RlYnVnLmMtOTYtXG5tbS9kZWJ1Zy5jOjk3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2RlYnVnLmMtOTgtXHRpZiAoZm9saW8tXHUwMDNlbWVtY2dfZGF0YSlcbi0tXG5tbS9kZWJ1Zy5jPTE3NT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vZGVidWcuYy0xODgtI2VuZGlmXG5tbS9kZWJ1Zy5jOjE4OTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kZWJ1Zy5jLTE5MC1cdFx0XCYjMzQ7b3duZXIgJXB4IFwmIzM0O1xuLS1cbm1tL2RlYnVnLmMtMjE3LSNlbmRpZlxubW0vZGVidWcuYzoyMTg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vZGVidWcuYy0yMTktXHRcdG1tLVx1MDAzZW93bmVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzUyNz1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNjE4LVx0XHRcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jOjM2MTk6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vaHVnZV9tZW1vcnkuYy0zNjIwLVx0XHRuZXdfZm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IGZvbGlvLVx1MDAzZW1lbWNnX2RhdGE7XG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmM9NDU9c3RhdGljIGludCBod3BvaXNvbl9maWx0ZXJfZmxhZ3Moc3RydWN0IHBhZ2UgKnApXG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmMtNjYtICovXG5tbS9od3BvaXNvbi1pbmplY3QuYzo2NzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9od3BvaXNvbi1pbmplY3QuYy02OC1zdGF0aWMgdTY0IGh3cG9pc29uX2ZpbHRlcl9tZW1jZztcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYz0xNjI9c3RhdGljIGludCBfX2luaXQgcGZuX2luamVjdF9pbml0KHZvaWQpXG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmMtMTkxLVxubW0vaHdwb2lzb24taW5qZWN0LmM6MTkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5My1cdGRlYnVnZnNfY3JlYXRlX3U2NChcJiMzNDtjb3JydXB0LWZpbHRlci1tZW1jZ1wmIzM0OywgMDYwMCwgaHdwb2lzb25fZGlyLFxuLS1cbm1tL2tmZW5jZS9jb3JlLmM9NjExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTYzOC1cdFx0X19TZXRQYWdlU2xhYihwYWdlKTtcbm1tL2tmZW5jZS9jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2tmZW5jZS9jb3JlLmMtNjQwLVx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTcwNi1cdFx0cGFnZSA9IHBmbl90b19wYWdlKHN0YXJ0X3BmbiAmIzQzOyBpKTtcbm1tL2tmZW5jZS9jb3JlLmM6NzA3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2tmZW5jZS9jb3JlLmMtNzA4LVx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbi0tXG5tbS9rZmVuY2UvY29yZS5jPTEyNDc9dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMjUwLVxubW0va2ZlbmNlL2NvcmUuYzoxMjUxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2tmZW5jZS9jb3JlLmMtMTI1Mi1cdEtGRU5DRV9XQVJOX09OKG1ldGEtXHUwMDNlb2JqX2V4dHMub2JqY2cpO1xuLS1cbm1tL2tmZW5jZS9rZmVuY2UuaD01OT1zdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHtcbi0tXG5tbS9rZmVuY2Uva2ZlbmNlLmgtMTA0LVx0dTMyIGFsbG9jX3N0YWNrX2hhc2ggX19ndWFyZGVkX2J5KFx1MDAyNmxvY2spO1xubW0va2ZlbmNlL2tmZW5jZS5oOjEwNTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9rZmVuY2Uva2ZlbmNlLmgtMTA2LVx0c3RydWN0IHNsYWJvYmpfZXh0IG9ial9leHRzO1xuLS1cbm1tL2xpc3RfbHJ1LmM9Mjk9c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycV9vZmYsXG4tLVxubW0vbGlzdF9scnUuYy0zOS1cbm1tL2xpc3RfbHJ1LmM6NDA6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYy00MS1zdGF0aWMgTElTVF9IRUFEKG1lbWNnX2xpc3RfbHJ1cyk7XG4tLVxubW0vbGlzdF9scnUuYz0xNDE9bG9ja19saXN0X2xydV9vZl9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTE1MC19XG5tbS9saXN0X2xydS5jOjE1MTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9saXN0X2xydS5jLTE1Mi1cbi0tXG5tbS9saXN0X2xydS5jPTQxMz11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTQyMS1cbm1tL2xpc3RfbHJ1LmM6NDIyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDIzLVx0aWYgKCpucl90b193YWxrIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKSB7XG4tLVxubW0vbGlzdF9scnUuYz00NTE9c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNDYxLVxubW0vbGlzdF9scnUuYzo0NjI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYy00NjMtc3RhdGljIHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWVtY2dfaW5pdF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcbi0tXG5tbS9saXN0X2xydS5jPTY1OT1zdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjYxLX1cbm1tL2xpc3RfbHJ1LmM6NjYyOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL2xpc3RfbHJ1LmMtNjYzLVxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jLTY2Ny1cbm1tL2xpc3RfbHJ1LmM6NjY4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNjY5LVx0aWYgKHNocmlua2VyKVxuLS1cbm1tL2xpc3RfbHJ1LmM9NjkyPXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5tbS9saXN0X2xydS5jLTcwMy1cbm1tL2xpc3RfbHJ1LmM6NzA0OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNzA1LVx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4tLVxubW0vbWVtY29udHJvbC12MS5oPTI0PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5oLTI3LS8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cbm1tL21lbWNvbnRyb2wtdjEuaDoyODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLXYxLmgtMjktXG4tLVxubW0vbWVtY29udHJvbC12MS5oPTkxPWV4dGVybiBzdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW107XG5tbS9tZW1jb250cm9sLXYxLmgtOTItXG5tbS9tZW1jb250cm9sLXYxLmg6OTM6I2Vsc2VcdC8qIENPTkZJR19NRU1DR19WMSAqL1xubW0vbWVtY29udHJvbC12MS5oLTk0LVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0xMjE9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykge31cbm1tL21lbWNvbnRyb2wtdjEuaC0xMjItXG5tbS9tZW1jb250cm9sLXYxLmg6MTIzOiNlbmRpZlx0LyogQ09ORklHX01FTUNHX1YxICovXG5tbS9tZW1jb250cm9sLXYxLmgtMTI0LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMDk9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMjgtXG5tbS9tZW1jb250cm9sLmM6MjI5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0yMzAtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUwNT11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI3LVxubW0vbWVtY29udHJvbC5jOjUyODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTI5LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4tLVxubW0vbWVtY29udHJvbC5jPTU1Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbm1tL21lbWNvbnRyb2wuYzo1NTQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTU1NS1cdFBHUEdJTixcbi0tXG5tbS9tZW1jb250cm9sLmM9Nzg3PXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtODAyLVxubW0vbWVtY29udHJvbC5jOjgwMzojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODA0LS8qXG4tLVxubW0vbWVtY29udHJvbC5jPTg3MT12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtODgzLVxubW0vbWVtY29udHJvbC5jOjg4NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODg1LS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9MTA1OT1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTA2Ni1cbm1tL21lbWNvbnRyb2wuYzoxMDY3OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xMDY4LXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNjY3PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTY3Mi1cbm1tL21lbWNvbnRyb2wuYzoxNjczOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xNjc0LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmM9MTY5Mz1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzM5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSYjNDM7JiM0MzspIHtcbm1tL21lbWNvbnRyb2wuYzoxNzQwOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xNzQxLVx0XHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcbi0tXG5tbS9tZW1jb250cm9sLmM9MTc5MT12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODEyLVx0XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcbm1tL21lbWNvbnRyb2wuYzoxODEzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xODE0LVx0ZWxzZSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTI4MDA9c3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4MTItXG5tbS9tZW1jb250cm9sLmM6MjgxMzojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtMjgxNC1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjk4Nj1fX2Fsd2F5c19pbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKmN1cnJlbnRfb2JqX2Nncm91cCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yOTkxLVxubW0vbWVtY29udHJvbC5jOjI5OTI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0dfTk1JX1VOU0FGRSkgXHUwMDI2XHUwMDI2IGluX25taSgpKVxubW0vbWVtY29udHJvbC5jLTI5OTMtXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zMDMyPXN0cnVjdCBvYmpfY2dyb3VwICpnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtY29udHJvbC5jLTMwNDItXG5tbS9tZW1jb250cm9sLmM6MzA0MzojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtMzA0NC1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9rbWVtX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDE1Nz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDE4MC1cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgXHUwMDI2cGFyZW50LVx1MDAzZXN3YXAsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0MTgxOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00MTgyLVx0XHRtZW1jZy1cdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG4tLVxubW0vbWVtY29udHJvbC5jLTQxOTEtXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0MTkyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00MTkzLVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQzNTk9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDM2NC1cdHBhZ2VfY291bnRlcl9zZXRfbWF4KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xubW0vbWVtY29udHJvbC5jOjQzNjU6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQzNjYtXHRwYWdlX2NvdW50ZXJfc2V0X21heChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBQQUdFX0NPVU5URVJfTUFYKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM5ND1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ0MjktXG5tbS9tZW1jb250cm9sLmM6NDQzMDojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtNDQzMS1zdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxuLS1cbm1tL21lbWNvbnRyb2wuYz01MDgyPXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA5My1cdC5kZmxfY2Z0eXBlcyA9IG1lbW9yeV9maWxlcyxcbm1tL21lbWNvbnRyb2wuYzo1MDk0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy01MDk1LVx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXG4tLVxubW0vbWVtY29udHJvbC5jPTYwMjg9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAzMy1cdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcbm1tL21lbWNvbnRyb2wuYzo2MDM0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MDM1LVx0V0FSTl9PTihjZ3JvdXBfYWRkX2xlZ2FjeV9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgbWVtc3dfZmlsZXMpKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTAzMT1zdGF0aWMgaW5saW5lIGJvb2wgcGFnZV9leHBlY3RlZF9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTAzOC1cdFx0XHRwYWdlX3JlZl9jb3VudChwYWdlKSB8XG5tbS9wYWdlX2FsbG9jLmM6MTAzOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9wYWdlX2FsbG9jLmMtMTA0MC1cdFx0XHRwYWdlLVx1MDAzZW1lbWNnX2RhdGEgfFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xMDQ5PXN0YXRpYyBjb25zdCBjaGFyICpwYWdlX2JhZF9yZWFzb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTEwNjQtXHR9XG5tbS9wYWdlX2FsbG9jLmM6MTA2NTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9wYWdlX2FsbG9jLmMtMTA2Ni1cdGlmICh1bmxpa2VseShwYWdlLVx1MDAzZW1lbWNnX2RhdGEpKVxuLS1cbm1tL3BhZ2VfY291bnRlci5jPTI3Mj1pbnQgcGFnZV9jb3VudGVyX21lbXBhcnNlKGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqbWF4LFxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTI5Mi1cbm1tL3BhZ2VfY291bnRlci5jOjI5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIHx8IElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ETUVNKVxubW0vcGFnZV9jb3VudGVyLmMtMjk0LS8qXG4tLVxubW0vcGFnZV9jb3VudGVyLmM9NDI0PXZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDY0LX1cbm1tL3BhZ2VfY291bnRlci5jOjQ2NTojZW5kaWYgLyogQ09ORklHX01FTUNHIHx8IENPTkZJR19DR1JPVVBfRE1FTSAqL1xuLS1cbm1tL3BhZ2VfaW8uYz0zMDU9c3RhdGljIGlubGluZSB2b2lkIGNvdW50X3N3cG91dF92bV9ldmVudChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy0zMTctXG5tbS9wYWdlX2lvLmM6MzE4OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG5tbS9wYWdlX2lvLmMtMzE5LXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy0zMzktI2RlZmluZSBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pXHRcdGRvIHsgfSB3aGlsZSAoMClcbm1tL3BhZ2VfaW8uYzozNDA6I2VuZGlmIC8qIENPTkZJR19NRU1DRyBcdTAwMjZcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cbm1tL3BhZ2VfaW8uYy0zNDEtXG4tLVxubW0vcGFnZV9vd25lci5jPTQ4ND12b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4tLVxubW0vcGFnZV9vd25lci5jLTU2MC1cbm1tL3BhZ2Vfb3duZXIuYzo1NjE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vcGFnZV9vd25lci5jLTU2Mi0vKlxuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oPTM1PXN0cnVjdCBwY3B1b2JqX2V4dCB7XG5tbS9wZXJjcHUtaW50ZXJuYWwuaDozNjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0zNy1cdHN0cnVjdCBvYmpfY2dyb3VwXHQqY2dyb3VwO1xuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTQzLVxubW0vcGVyY3B1LWludGVybmFsLmg6NDQ6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSB8fCBkZWZpbmVkKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKVxubW0vcGVyY3B1LWludGVybmFsLmgtNDUtI2RlZmluZSBORUVEX1BDUFVPQkpfRVhUXG4tLVxubW0vcGVyY3B1LWludGVybmFsLmg9MTUzPXN0YXRpYyBpbmxpbmUgc2l6ZV90IHBjcHVfb2JqX2Z1bGxfc2l6ZShzaXplX3Qgc2l6ZSlcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNTYtXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDoxNTc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vcGVyY3B1LWludGVybmFsLmgtMTU4LVx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbi0tXG5tbS9wZXJjcHUuYz0xNTk0PXN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqcGNwdV9jaHVua19hZGRyX3NlYXJjaCh2b2lkICphZGRyKVxuLS1cbm1tL3BlcmNwdS5jLTE2MTQtXG5tbS9wZXJjcHUuYzoxNjE1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3BlcmNwdS5jLTE2MTYtc3RhdGljIGJvb2wgcGNwdV9tZW1jZ19wcmVfYWxsb2NfaG9vayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3BlcmNwdS5jPTE2NTU9c3RhdGljIHZvaWQgcGNwdV9tZW1jZ19mcmVlX2hvb2soc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgb2ZmLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9wZXJjcHUuYy0xNjc2LVxubW0vcGVyY3B1LmM6MTY3NzojZWxzZSAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3BlcmNwdS5jLTE2Nzgtc3RhdGljIGJvb2xcbi0tXG5tbS9wZXJjcHUuYz0xNjkwPXN0YXRpYyB2b2lkIHBjcHVfbWVtY2dfZnJlZV9ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZiwgc2l6ZV90IHNpemUpXG4tLVxubW0vcGVyY3B1LmMtMTY5Mi19XG5tbS9wZXJjcHUuYzoxNjkzOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3BlcmNwdS5jLTE2OTQtXG4tLVxubW0vc2hyaW5rZXIuYz0xMT1ERUZJTkVfTVVURVgoc2hyaW5rZXJfbXV0ZXgpO1xubW0vc2hyaW5rZXIuYy0xMi1cbm1tL3Nocmlua2VyLmM6MTM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2hyaW5rZXIuYy0xNC1zdGF0aWMgaW50IHNocmlua2VyX25yX21heDtcbi0tXG5tbS9zaHJpbmtlci5jPTMzND1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS9zaHJpbmtlci5jLTMzOC19XG5tbS9zaHJpbmtlci5jOjMzOTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9zaHJpbmtlci5jLTM0MC1cbi0tXG5tbS9zaHJpbmtlci5jPTM3Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb19zaHJpbmtfc2xhYihzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNocmlua2N0bCxcbi0tXG5tbS9zaHJpbmtlci5jLTQ3NC1cbm1tL3Nocmlua2VyLmM6NDc1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Nocmlua2VyLmMtNDc2LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxuLS1cbm1tL3Nocmlua2VyLmMtNTk1LX1cbm1tL3Nocmlua2VyLmM6NTk2OiNlbHNlIC8qICFDT05GSUdfTUVNQ0cgKi9cbm1tL3Nocmlua2VyLmMtNTk3LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxuLS1cbm1tL3Nocmlua2VyLmMtNjAxLX1cbm1tL3Nocmlua2VyLmM6NjAyOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3Nocmlua2VyLmMtNjAzLVxuLS1cbm1tL3Nocmlua2VyLmM9Njg4PXN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXJfYWxsb2ModW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbi0tXG5tbS9zaHJpbmtlci5jLTcyNi1cdCAqICAtIG5vbi1tZW1jZy1hd2FyZSBzaHJpbmtlcnNcbm1tL3Nocmlua2VyLmM6NzI3Olx0ICogIC0gIUNPTkZJR19NRU1DR1xubW0vc2hyaW5rZXIuYy03MjgtXHQgKiAgLSBtZW1jZyBpcyBkaXNhYmxlZCBieSBrZXJuZWwgY29tbWFuZCBsaW5lXG4tLVxubW0vc2xhYi5oPTEyMj1TTEFCX01BVENIKF9yZWZjb3VudCwgX19wYWdlX3JlZmNvdW50KTtcbm1tL3NsYWIuaDoxMjM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2xhYi5oLTEyNC1TTEFCX01BVENIKG1lbWNnX2RhdGEsIG9ial9leHRzKTtcbi0tXG5tbS9zbGFiLmg9NTU4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsYWIuaC01NjEtXG5tbS9zbGFiLmg6NTYyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3NsYWIuaC01NjMtXHQvKlxuLS1cbm1tL3NsYWIuaD02NTI9c3RhdGljIGlubGluZSBlbnVtIG5vZGVfc3RhdF9pdGVtIGNhY2hlX3Ztc3RhdF9pZHgoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2xhYi5oLTY1Ny1cbm1tL3NsYWIuaDo2NTg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2xhYi5oLTY1OS1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuLS1cbm1tL3NsYWJfY29tbW9uLmM9ODA0PUVYUE9SVF9TWU1CT0woa21hbGxvY19zaXplX3JvdW5kdXApO1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtODExLVxubW0vc2xhYl9jb21tb24uYzo4MTI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2xhYl9jb21tb24uYy04MTMtI2RlZmluZSBLTUFMTE9DX0NHUk9VUF9OQU1FKHN6KVx0Lm5hbWVbS01BTExPQ19DR1JPVVBdID0gXCYjMzQ7a21hbGxvYy1jZy1cJiMzNDsgI3N6LFxuLS1cbm1tL3NsYWJfY29tbW9uLmM9OTQ1PW5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpXG4tLVxubW0vc2xhYl9jb21tb24uYy05NTMtXHRcdGZsYWdzIHw9IFNMQUJfUkVDTEFJTV9BQ0NPVU5UO1xubW0vc2xhYl9jb21tb24uYzo5NTQ6XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19DR1JPVVApKSB7XG5tbS9zbGFiX2NvbW1vbi5jLTk1NS1cdFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XG4tLVxubW0vc2xhYl9jb21tb24uYy05NjktXHQvKlxubW0vc2xhYl9jb21tb24uYzo5NzA6XHQgKiBJZiBDT05GSUdfTUVNQ0cgaXMgZW5hYmxlZCwgZGlzYWJsZSBjYWNoZSBtZXJnaW5nIGZvclxubW0vc2xhYl9jb21tb24uYy05NzEtXHQgKiBLTUFMTE9DX05PUk1BTCBjYWNoZXMuXG5tbS9zbGFiX2NvbW1vbi5jLTk3Mi1cdCAqL1xubW0vc2xhYl9jb21tb24uYzo5NzM6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCkpXG5tbS9zbGFiX2NvbW1vbi5jLTk3NC1cdFx0ZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTk5ND12b2lkIF9faW5pdCBjcmVhdGVfa21hbGxvY19jYWNoZXModm9pZClcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTk5OS1cdC8qXG5tbS9zbGFiX2NvbW1vbi5jOjEwMDA6XHQgKiBJbmNsdWRpbmcgS01BTExPQ19DR1JPVVAgaWYgQ09ORklHX01FTUNHIGRlZmluZWRcbm1tL3NsYWJfY29tbW9uLmMtMTAwMS1cdCAqL1xuLS1cbm1tL3NsdWIuYz0yMTYyPWludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjE5OS1cdG5ld19leHRzID0gKHVuc2lnbmVkIGxvbmcpdmVjO1xubW0vc2x1Yi5jOjIyMDA6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIyMDEtXHRuZXdfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XG4tLVxubW0vc2x1Yi5jPTIyNzY9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIyOTUtXG5tbS9zbHViLmM6MjI5NjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtMjI5Ny1cdFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xuLS1cbm1tL3NsdWIuYy0yMzEyLVxubW0vc2x1Yi5jOjIzMTM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIzMTQtXHRcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcbi0tXG5tbS9zbHViLmM9MjQ1Mj1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXG4tLVxubW0vc2x1Yi5jLTI0NTktXG5tbS9zbHViLmM6MjQ2MDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtMjQ2MS1cbi0tXG5tbS9zbHViLmM9MjUwOD1ib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTI1NjctXG5tbS9zbHViLmM6MjU2ODojZWxzZSAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3NsdWIuYy0yNTY5LXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmM9MjU4Mj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbi0tXG5tbS9zbHViLmMtMjU4NS19XG5tbS9zbHViLmM6MjU4NjojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9zbHViLmMtMjU4Ny1cbi0tXG5tbS9zbHViLmM9NjM5OT12b2lkIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iamVjdCxcbi0tXG5tbS9zbHViLmMtNjQxNC1cbm1tL3NsdWIuYzo2NDE1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3NsdWIuYy02NDE2LS8qIERvIG5vdCBpbmxpbmUgdGhlIHJhcmUgbWVtY2cgY2hhcmdpbmcgZmFpbGVkIHBhdGggaW50byB0aGUgYWxsb2NhdGlvbiBwYXRoICovXG4tLVxubW0vc3dhcC5jPTExMzU9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxuLS1cbm1tL3N3YXAuYy0xMTQ2LVxubW0vc3dhcC5jOjExNDc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc3dhcC5jLTExNDgtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4tLVxubW0vc3dhcC5oPTQ4PXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyB7XG4tLVxubW0vc3dhcC5oLTU4LVx0dW5zaWduZWQgaW50ICpleHRlbmRfdGFibGU7XHQvKiBGb3IgbGFyZ2Ugc3dhcCBjb3VudCwgcHJvdGVjdGVkIGJ5IGNpLVx1MDAzZWxvY2sgKi9cbm1tL3N3YXAuaDo1OTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zd2FwLmgtNjAtXHRzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSAqbWVtY2dfdGFibGU7XHQvKiBTd2FwIHRhYmxlIGVudHJpZXMmIzM5OyBjZ3JvdXAgcmVjb3JkICovXG4tLVxubW0vc3dhcF90YWJsZS5oPTI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX3RhYmxlX2NsZWFyX3plcm8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3RhYmxlLmgtMzEwLVxubW0vc3dhcF90YWJsZS5oOjMxMTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zd2FwX3RhYmxlLmgtMzEyLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2dyb3VwX3NldChzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBmaWxlLmM9NDIxPXN0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vc3dhcGZpbGUuYy00MjQtXG5tbS9zd2FwZmlsZS5jOjQyNTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zd2FwZmlsZS5jLTQyNi1cdGtmcmVlKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTQ0OT1zdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG4tLVxubW0vc3dhcGZpbGUuYy00NzAtXG5tbS9zd2FwZmlsZS5jOjQ3MTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zd2FwZmlsZS5jLTQ3Mi1cdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG4tLVxubW0vc3dhcGZpbGUuYz0zOTE1PWludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcGZpbGUuYy0zOTM0LVxubW0vc3dhcGZpbGUuYzozOTM1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG5tbS9zd2FwZmlsZS5jLTM5MzYtc3RhdGljIGJvb2wgX19oYXNfdXNhYmxlX3N3YXAodm9pZClcbi0tXG5tbS92bXNjYW4uYz0xOTk9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcbm1tL3Ztc2Nhbi5jLTIwMC1cbm1tL3Ztc2Nhbi5jOjIwMTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yMDItXG4tLVxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtMjY4MC1cbm1tL3Ztc2Nhbi5jOjI2ODE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjY4Mi1cdGlmIChtZW1jZykge1xuLS1cbm1tL3Ztc2Nhbi5jPTI4MzE9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0yODM3LVxubW0vdm1zY2FuLmM6MjgzODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODM5LVx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTI4NzE9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yODc3LVx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZWxydV9nZW4ubGlzdCkpO1xubW0vdm1zY2FuLmM6Mjg3ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODc5LVx0Vk1fV0FSTl9PTl9PTkNFKG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4OTg9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTA2LVxubW0vdm1zY2FuLmM6MjkwNzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTA4LVx0bWVtY2cgPSBtbS1cdTAwM2VscnVfZ2VuLm1lbWNnO1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MzAtXG5tbS92bXNjYW4uYzoyOTMxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MzItXHRtZW1fY2dyb3VwX3B1dChtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy0yOTM2LVxubW0vdm1zY2FuLmM6MjkzNzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTM4LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jPTQzMDc9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDM1Mi1cbm1tL3Ztc2Nhbi5jOjQzNTM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNDM1NC1cbi0tXG5tbS92bXNjYW4uYz00NTQ1PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDU2Ny1cbm1tL3Ztc2Nhbi5jOjQ1Njg6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZXNzZW50aWFsIGZvciB0aG9zZSBzcGVjaWZpYyBtZW1vcnkgY29udHJvbCBmdW5jdGlvbnMsIG5hbWVseSBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCBhbmQgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgLiBBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXJlIGluZGVlZCBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC12MS5jYC4gU28sIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRlZmluaXRlbHkgYSBkZXBlbmRlbmN5LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgIGFyZSBsb2NhdGVkLiBJIHJlbWVtYmVyIHRoZXNlIGZyb20gdGhlIGdlbmVyYWwgbWVtb3J5IGNvbnRyb2wgc3BhY2UuIEEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgdGhleSYjMzk7cmUgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCB0aGF0IGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoIGp1c3QgYENPTkZJR19NRU1DR2AuIE1ha2VzIHNlbnNlLgoKRmluYWxseSwgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHdoZXJlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBkZWZpbmVkLCBhbmQgaXQgc2VlbXMgdGhhdCBpcyBpbiBgbW0vdm1zY2FuLmNgLgoKVG8gY29uZmlybSB0aGUgY29ubmVjdGlvbnMsIEkmIzM5O20gbm93IGdvaW5nIHRvIGRyaWxsIGRvd24gYW5kIGRvdWJsZS1jaGVjayBgbW0vbWVtY29udHJvbC12MS5jYCBhbmQgYG1tL21lbWNvbnRyb2wuY2AgZm9yIHRob3NlIGZ1bmN0aW9ucywgdG8gZWxpbWluYXRlIGFueSBwb3RlbnRpYWwgc3VycHJpc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfcmVzaXplX21heCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9MTQ3OT1zdGF0aWMgREVGSU5FX01VVEVYKG1lbWNnX21heF9tdXRleCk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTQ4MC1cbm1tL21lbWNvbnRyb2wtdjEuYzoxNDgxOnN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDgyLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbWF4LCBib29sIG1lbXN3KVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNjkwPXN0YXRpYyBzc2l6ZV90IG1lbV9jZ3JvdXBfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNzA5LVx0XHRjYXNlIF9NRU06XG5tbS9tZW1jb250cm9sLXYxLmM6MTcxMDpcdFx0XHRyZXQgPSBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgobWVtY2csIG5yX3BhZ2VzLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTcxMS1cdFx0XHRicmVhaztcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzEyLVx0XHRjYXNlIF9NRU1TV0FQOlxubW0vbWVtY29udHJvbC12MS5jOjE3MTM6XHRcdFx0cmV0ID0gbWVtX2Nncm91cF9yZXNpemVfbWF4KG1lbWNnLCBucl9wYWdlcywgdHJ1ZSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTcxNC1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IENncm91cCBSZXNpemluZyoqCgpPa2F5LCBzbyBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCBpcyB0cmlnZ2VyZWQgYnkgYG1lbV9jZ3JvdXBfd3JpdGVgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIHRoaW5nIHRoYXQgc2lnbmFscyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBsaW1pdHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgd2UgZ28gZnVydGhlciwgd2UgKmFic29sdXRlbHkqIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YC4gVGhlIGxvZ2ljIGFyb3VuZCBmb3JjZWQgZW1wdGluZyBpcyBjcnVjaWFsIHdoZW4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcmVzaXppbmcgbWVtb3J5IGNncm91cHMuIEFueSBwb3RlbnRpYWwgY29uZmxpY3QgbXVzdCBiZSBjYXJlZnVsbHkgaGFuZGxlZCBoZXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB3ZSBuZWVkIHRvIHJlbGVhc2UgcGFnZXMsIG9yIHJlY2xhaW0gbWVtb3J5LCBiZWZvcmUgd2Ugc3RhcnQgdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIG1lbW9yeSBsaW1pdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9mb3JjZV9lbXB0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9MTQ4MT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE1NDItICovXG5tbS9tZW1jb250cm9sLXYxLmM6MTU0MzpzdGF0aWMgaW50IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC12MS5jLTE1NDQte1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNTY3LVxubW0vbWVtY29udHJvbC12MS5jOjE1Njg6c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF9mb3JjZV9lbXB0eV93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5tbS9tZW1jb250cm9sLXYxLmMtMTU2OS1cdFx0XHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTU3NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG5tbS9tZW1jb250cm9sLXYxLmM6MTU3NjpcdHJldHVybiBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KG1lbWNnKSA/OiBuYnl0ZXM7XG5tbS9tZW1jb250cm9sLXYxLmMtMTU3Ny19XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIwNzQ9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTA5LVx0XHQubmFtZSA9IFwmIzM0O2ZvcmNlX2VtcHR5XCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjIxMTA6XHRcdC53cml0ZSA9IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfd3JpdGUsXG5tbS9tZW1jb250cm9sLXYxLmMtMjExMS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbWVtb3J5IGNncm91cHMgYW5kIGtlcm5lbCBpbnRlcm5hbHM6CgoqKkFuYWx5emluZyB0aGUgTWVtb3J5IENncm91cCBGb3JjZSBFbXB0eSBGbG93KioKClJpZ2h0LCBzbyBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAgaXMgY2FsbGVkIGJ5IGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5X3dyaXRlYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHRoZSB0cmlnZ2VyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiB0aGUgZmFjdG9ycyB0aGF0IGluZmx1ZW5jZSB0aGlzIGVtcHR5aW5nIHByb2Nlc3MsIGFuZCB0aGF0IG1lYW5zIGxvb2tpbmcgYXQgdGhlIG1lbW9yeSBsaW1pdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzIGFjdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgIGNvbWUgaW50byBwbGF5IGluIHRoaXMgY29udGV4dC4gVGhlc2UgYXJlIHRoZSBrZXkgbGV2ZXJzLCB0aGUgdXBwZXIgYm91bmRzLCB0aGUgY29uc3RyYWludHMgdGhhdCBhcmUgbGlrZWx5IGluc3RpZ2F0aW5nIHRoZSBmb3JjZWQgZW1wdHlpbmcsIG9yIHBlcmhhcHMgaW5mbHVlbmNpbmcgaG93IGl0IGJlaGF2ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSBsaW1pdCB3cml0ZXMgYW5kIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9oaWdoX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00NzYyPXN0YXRpYyBpbnQgbWVtb3J5X2hpZ2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ3NjctXG5tbS9tZW1jb250cm9sLmM6NDc2ODpzdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5tbS9tZW1jb250cm9sLmMtNDc2OS1cdFx0XHRcdCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC5jPTUwMDg9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUwMzctXHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9oaWdoX3Nob3csXG5tbS9tZW1jb250cm9sLmM6NTAzODpcdFx0LndyaXRlID0gbWVtb3J5X2hpZ2hfd3JpdGUsXG5tbS9tZW1jb250cm9sLmMtNTAzOS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDEzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnJvbSBhIHN5c3RlbSBtZW1vcnkgZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipNZW1vcnkgV3JpdGUgUGF0aCBCcmVha2Rvd24qKgoKT2theSwgc28gSSBzZWUgYSBjbGVhciByZWxhdGlvbnNoaXAgaGVyZS4gV2UmIzM5O3ZlIGdvdCB0aHJlZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBob3cgdGhleSBsaW5rIHVwLCBlc3BlY2lhbGx5IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBhIG1lbW9yeSBzdWJzeXN0ZW0gb3BlcmF0ZXMuIGBtZW1vcnlfaGlnaF93cml0ZWAgaXMgY2FsbGVkLCBhbmQgdGhlIGxpa2VseSBjb250ZXh0IGlzIHdpdGhpbiB0aGUgY2dyb3VwIHYyIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYG1lbW9yeV9maWxlc2AuIFRoaXMgcG9pbnRzIHRvIHRoZSBtZWNoYW5pc21zIHVzZWQgdG8gY29udHJvbCB3cml0ZSBvcGVyYXRpb25zIGluIHRoZSBtZW1vcnkgc3Vic3lzdGVtLiBUaGlzIHN1Z2dlc3RzIGFuIGFjdGl2ZSByb2xlIGluIGhvdyB3cml0ZXMgYXJlIGhhbmRsZWQgcmVsYXRpdmUgdG8gYSBjZ3JvdXAmIzM5O3MgbWVtb3J5IGxpbWl0cy4gSSYjMzk7bSBpbWFnaW5pbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWRqdXN0aW5nIHRocmVzaG9sZHMsIHBlcmhhcHMgdHJpZ2dlcmluZyBzb21lIGFjdGlvbiBhcyBhIGxpbWl0IGlzIGFwcHJvYWNoZWQuCgpTaW1pbGFybHksIHdlIGhhdmUgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbHNvIG9yaWdpbmF0aW5nIGZyb20gYG1lbW9yeV9maWxlc2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgc3VzcGVjdCB0aGF0IHRoZXNlIHR3byBmdW5jdGlvbnMgd29yayBpbiBjb25jZXJ0LiBgbWVtb3J5X21heF93cml0ZWAgaXMgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyB0aGUgYWJzb2x1dGUgbWF4aW11bSB3cml0ZSBsaW1pdC4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpcyBwcm9iYWJseSBjb3JlIHRvIGhvdyBjZ3JvdXBzIGVuZm9yY2UgbWVtb3J5IGxpbWl0cy4KClRoZSB0aGlyZCBwaWVjZSBvZiB0aGlzIHB1enpsZSBpcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoaXMgb25lJiMzOTtzIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgd2l0aGluIHRoZSBgbW0vbWVtY29udHJvbC5jYCBmaWxlLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWx2aW5nIGludG8gdGhlIGhlYXJ0IG9mIG1lbW9yeSByZWNsYWltIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGlzIGFzIHRoZSBzeXN0ZW0gYmVpbmcgcHJvYWN0aXZlIGluIHJlY2xhaW1pbmcgbWVtb3J5IGZyb20gdXNlcnNwYWNlIHByb2Nlc3Nlcy4gRnJvbSB3aGVyZSBJIHNpdCwgdGhpcyBsaWtlbHkgbWVhbnMgdGhlIHN5c3RlbSBoYXMgc29tZSBmdW5jdGlvbiB3aGljaCBpbml0aWF0ZXMgcmVjbGFpbWluZyBtZW1vcnkgcHJvYWN0aXZlbHkuIEVzc2VudGlhbGx5LCBpdCBhcHBlYXJzIHRoYXQgdGhpcyBmdW5jdGlvbiBpbml0aWF0ZXMgcmVjbGFpbSBldmVudHMgdGhhdCBhcmUgZGVzaWduZWQgdG8gYXZvaWQgdGhlIHN5c3RlbSBiZWluZyBvdmVybG9hZGVkLCB3aXRoIHRoZSBpbnRlbnRpb24gb2YgcHJlZW1wdGl2ZWx5IGZyZWVpbmcgdXAgbWVtb3J5LgoKU28sIGluIGVzc2VuY2UsIHdlIGhhdmUgYSBjbGVhciBwaWN0dXJlLiBXcml0ZXMsIHBhcnRpY3VsYXJseSB1bmRlciBjZ3JvdXAgdjIsIGFyZSBjb250cm9sbGVkLCBhbmQgbWVtb3J5IHJlY2xhaW0gaXMgYmVpbmcgYWN0aXZlbHkgbWFuYWdlZCB0byB0cnkgYW5kIGtlZXAgdGhlIHN5c3RlbSB1bmRlciBjb250cm9sLiBBIHNpbXBsZSB2aWV3LCB0aGF0IGlzIGZ1bmRhbWVudGFsIHRvIG1vc3QgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCB3ZWxsIHVuZGVyc3Rvb2QgYnkgYSBzZWFzb25lZCBleHBlcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD02MzE9ZXh0ZXJuIHZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pO1xubW0vaW50ZXJuYWwuaDo2MzI6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vaW50ZXJuYWwuaC02MzMtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDk5NT1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5tbS9tZW1jb250cm9sLmMtNTAwMC1cbm1tL21lbWNvbnRyb2wuYzo1MDAxOlx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcbm1tL21lbWNvbnRyb2wuYy01MDAyLVx0aWYgKHJldClcbi0tXG5tbS92bXNjYW4uYz03ODYwPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03ODY1LVxubW0vdm1zY2FuLmM6Nzg2NjppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03ODY3LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYz04MDEyPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMTctXG5tbS92bXNjYW4uYzo4MDE4Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtODAxOS1cdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzI5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBDb250cm9sIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAsIGBtZW1vcnlfaGlnaF93cml0ZWAsIGBtZW1vcnlfbWF4X3dyaXRlYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gUmlnaHQsIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZC4gQWgsIGhlcmUmIzM5O3MgdGhlIGxheW91dDogYG1lbV9jZ3JvdXBfcmVzaXplX21heGAgYW5kIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCBhcmUgc3RhdGljIHdpdGhpbiBgbW0vbWVtY29udHJvbC12MS5jYCwgd2hpbGUgYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgIGFyZSBzdGF0aWMgdG8gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgZ2xvYmFsIGluIGBtbS92bXNjYW4uY2AuIEdvdCBpdC4KCk5vdywgbGV0IG1lIGNvbmZpcm0gaWYgYG1lbWNnX2lzX2R5aW5nYCBpcyBhY3R1YWxseSByZWFjaGFibGUuIEdvb2QsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5pdGVseSBjYWxsZWQgd2hlbiBoYW5kbGluZyB3cml0ZXMgdG8gdGhlIGNncm91cCBmaWxlcyBJJiMzOTttIGNvbmNlcm5lZCB3aXRoIOKAkyBgbWVtb3J5LmhpZ2hgLCBgbWVtb3J5Lm1heGAsIGBtZW1vcnkucmVjbGFpbWAsIGBtZW1vcnkuZm9yY2VfZW1wdHlgLCBhbmQgYG1lbW9yeS5saW1pdF9pbl9ieXRlc2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBjb25maXJtcyB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgdGhlIGNncm91cGZzIGludGVyZmFjZS4gSSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggd3JpdGluZyB0byB0aG9zZSBmaWxlcy4KCkFscmlnaHQsIGZpbmFsbHksIHRoZSBwcmVyZXF1aXNpdGUgY29uZmlncyBmb3IgdGhpcyBhcmUgY2xlYXJseSBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgTUVNQ0dfVjFgIGlzIGEgdmFsaWQgY29uZmlnIG9wdGlvbiB0byBlbnN1cmUgSSYjMzk7bSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dfVjEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwODk9Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4tLVxuaW5pdC9LY29uZmlnLTEwOTUtXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMDk3LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDM1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gYE1FTUNHX1YxYCBpcyBkZWZpbml0ZWx5IGEgY29uY3JldGUgY29uZmlndXJhdGlvbiBvcHRpb24g4oCTIG5vIHN1cnByaXNlcyB0aGVyZS4gQW5kLCBvZiBjb3Vyc2UsIGBNRU1DR2AgaXRzZWxmIGlzIGEgdmFsaWQgY29uZmlndXJhdGlvbiB0b28uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGFyZSBsZXZlcmFnZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQuCgpUaW1lIHRvIGRpdmUgaW50byB0aGUgY29yZS4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGNoZWNrIG91dCBob3cgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGltcGxlbWVudGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgcmVjbGFpbSBtZWNoYW5pc21zLiBUaGF0IGFyZWEgd2FycmFudHMgYSBkZWVwIGxvb2ssIGdpdmVuIHRoZSBjb250ZXh0LiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgZmluZXIgcG9pbnRzIG9mIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aG9zZSBjb25maWd1cmF0aW9uIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg2MD1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2NS1cbm1tL3Ztc2Nhbi5jOjc4NjY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg2Ny1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ5MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRm9jdXMgU3ltYm9scyBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZvY3VzIHN5bWJvbHMgdGhhdCBhcmUgZ3VpZGluZyBTeXprYWxsZXI6IGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAsIGBtZW1vcnlfaGlnaF93cml0ZWAsIGBtZW1vcnlfbWF4X3dyaXRlYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcywgd2FpdCwgYG1lbV9jZ3JvdXBfcmVzaXplX21heGAgaXMgc3RhdGljISBJIGtub3cgU3l6a2FsbGVyIGlzIHByaW1hcmlseSBhIHN5c2NhbGwgZnV6emVyLCBidXQgY2FuIGl0IGFjdHVhbGx5ICpmdXp6KiBzdGF0aWMgZnVuY3Rpb25zPyBJdCYjMzk7cyBtb3JlIGFib3V0IGNvZGUgY292ZXJhZ2UsIHJpZ2h0PyBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdXNlZCB0byBkaXJlY3QgdGhlIGZ1enplciB0byBzcGVjaWZpYyBjb2RlIHBhdGhzLCB0byBnZXQgdGhlIGZ1enplciBpbnRvIHRoZXNlIHNwZWNpZmljIGFyZWFzLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBzeXotbWFuYWdlcmAgdXNlcyB0aGVzZSBzeW1ib2xzIGZvciBmb2N1cywgYW5kIHRoYXQgU3l6a2FsbGVyICpjYW4qIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zLCBwcm92aWRlZCB0aGV5JiMzOTtyZSBwcmVzZW50IGluIHRoZSBzeW1ib2wgdGFibGUsIHRoaW5ncyBsaWtlIGBrYWxsc3ltc2AuIEdlbmVyYWxseSwgdGhhdCBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbSBmb3Igc3RhdGljIGZ1bmN0aW9ucywgdGhvdWdoIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHZlcmlmeS4KCk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBhIGNvdXBsZSBvZiB0aGluZ3MsIHNwZWNpZmljYWxseSB0aGUgY29uZmlncy4gV2UgbmVlZCB0byBtYWtlIHN1cmUgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCBhcmUgZW5hYmxlZC4gVGhlbiwgdGhlIG5leHQgaW1wb3J0YW50IHRoaW5nIGlzIHRvIGNvbmZpcm0gdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdW5kZXIgYENPTkZJR19NRU1DR2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEluIGBtbS92bXNjYW4uY2AsIEkgbmVlZCB0byBzZWUgaWYgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgb3IgdW5jb25kaXRpb25hbGx5LiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg2MD1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2NS1cbm1tL3Ztc2Nhbi5jOjc4NjY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg2Ny1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIGZvciBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3QgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgY29kZSBibG9jayBpcyB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBvciBzb21ldGhpbmcgc2ltaWxhci4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIHZhcmlhYmlsaXR5IG9mIHRoaXMgdmFyaWFibGUmIzM5O3MgaW5jbHVzaW9uLiBEZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50IG9yIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCB0aGlzIGNvZGUgbWlnaHQgYmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQuIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSB3aXRoaW4gYW55IGNvbmRpdGlvbmFsIGJsb2NrcyBiZWZvcmUgSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggYW55IGFuYWx5c2lzIG9yIGZ1cnRoZXIgaW1wbGVtZW50YXRpb24gc3RlcHMgdGhhdCByZWx5IG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ND1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy0xODEtXG5tbS92bXNjYW4uYzoxODI6I2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xubW0vdm1zY2FuLmMtMTgzLSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcdFx0XHRcXFxuLS1cbm1tL3Ztc2Nhbi5jPTE5OT1pbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xubW0vdm1zY2FuLmMtMjAwLVxubW0vdm1zY2FuLmM6MjAxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIwMi1cbi0tXG5tbS92bXNjYW4uYz0yMzE9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yMzQtXHRcdHJldHVybiB0cnVlO1xubW0vdm1zY2FuLmM6MjM1OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vdm1zY2FuLmMtMjM2LVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4tLVxubW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMwLVxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODMyLS8qXG4tLVxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTI4NS1cdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG5tbS92bXNjYW4uYzoxMjg2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3Ztc2Nhbi5jLTEyODctXHRcdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIpIHtcbi0tXG5tbS92bXNjYW4uYz0yNjEzPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjYyNC1cbm1tL3Ztc2Nhbi5jOjI2MjU6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjI2LVxubW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2MjktREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtMjY4MC1cbm1tL3Ztc2Nhbi5jOjI2ODE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjY4Mi1cdGlmIChtZW1jZykge1xuLS1cbm1tL3Ztc2Nhbi5jPTI4MDk9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjgyOC1cbm1tL3Ztc2Nhbi5jOjI4Mjk6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjgzMC1cbm1tL3Ztc2Nhbi5jPTI4MzE9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0yODM3LVxubW0vdm1zY2FuLmM6MjgzODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODM5LVx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTI4NzE9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yODc3LVx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZWxydV9nZW4ubGlzdCkpO1xubW0vdm1zY2FuLmM6Mjg3ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODc5LVx0Vk1fV0FSTl9PTl9PTkNFKG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4OTg9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTA2LVxubW0vdm1zY2FuLmM6MjkwNzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTA4LVx0bWVtY2cgPSBtbS1cdTAwM2VscnVfZ2VuLm1lbWNnO1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MzAtXG5tbS92bXNjYW4uYzoyOTMxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MzItXHRtZW1fY2dyb3VwX3B1dChtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy0yOTM2LVxubW0vdm1zY2FuLmM6MjkzNzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTM4LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jPTQzMDc9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDM1Mi1cbm1tL3Ztc2Nhbi5jOjQzNTM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNDM1NC1cbi0tXG5tbS92bXNjYW4uYz01NTEyPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTUyNS1cbm1tL3Ztc2Nhbi5jOjU1MjY6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNTUyNy1cdFx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTU3Nzg9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01Nzk3LVxubW0vdm1zY2FuLmM6NTc5ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01Nzk5LVxuLS1cbm1tL3Ztc2Nhbi5jPTY2NzY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjcxOC1cbm1tL3Ztc2Nhbi5jOjY3MTk6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNjcyMC1cbi0tXG5tbS92bXNjYW4uYz03NTQ2PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03NTUwLVxubW0vdm1zY2FuLmM6NzU1MTojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXG5tbS92bXNjYW4uYy03NTUyLS8qXG4tLVxubW0vdm1zY2FuLmM9NzYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzY0MC1cdH0sXG5tbS92bXNjYW4uYzo3NjQxOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzY0Mi1cdHtcbi0tXG5tbS92bXNjYW4uYz03NjY0PW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxubW0vdm1zY2FuLmMtNzY2NS1cbm1tL3Ztc2Nhbi5jOjc2NjY6I2lmZGVmIENPTkZJR19OVU1BXG5tbS92bXNjYW4uYy03NjY3LS8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjkxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXNuJiMzOTt0IGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gQnV0IGhvbGQgb24sIGl0IHRha2VzIGEgYHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZ2AgYXMgYW4gYXJndW1lbnQuIEhtbSwgaXMgYHN0cnVjdCBtZW1fY2dyb3VwYCBldmVuICpkZWZpbmVkKiB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkPyBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGlzLCBlaXRoZXIgYXMgYW4gb3BhcXVlIG9yIGVtcHR5IHN0cnVjdCwgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBhbmQgaW1wbGVtZW50YXRpb24uCgpCdXQgd2FpdCwgdGhpcyBmdW5jdGlvbiAqY2FsbHMqIGBtZW1jZ19pc19keWluZyhtZW1jZylgLiBOb3cgdGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBwb2ludC4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBiZWhhdmVzIGFzIGV4cGVjdGVkIHdoZW4gbWVtY2cgaXMgZWl0aGVyIGVtcHR5IG9yIHVuYXZhaWxhYmxlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBtZW1jZ19pc19keWluZ2AgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZSBtZW1vcnkgY2dyb3VwIGluZnJhc3RydWN0dXJlIGlzbiYjMzk7dCBmdWxseSBlbmFibGVkLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBwb3RlbnRpYWwgZ290Y2hhIGxpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNnX2lzX2R5aW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc2Mz12b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzY0LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTc2NTpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2Ni17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgzNz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4NDAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODQxOnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgbWVtY2dfaXNfZHlpbmdgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbWVtY2dfaXNfZHlpbmdgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBmb3IgbWUgaXMgd2hldGhlciBgQ09ORklHX01FTUNHYCBoYXMgdG8gYmUgZW5hYmxlZCBmb3IgYG1lbWNnX2lzX2R5aW5nYCB0byBhY3R1YWxseSBiZSAqZnVuY3Rpb25hbCouIEkmIzM5O20gYmV0dGluZyB0aGF0IGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBkaXNhYmxlZCB2aWEgY29uZmlndXJhdGlvbiwgdGhpcyBmdW5jdGlvbiB3aWxsIHNpbXBseSByZXR1cm4gYGZhbHNlYC4gSXQgd291bGQgbWFrZSBzZW5zZSBhcyB0aGUgbWVjaGFuaXNtIGlzIG5vdCBzZXQuIFRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLCBJIHNob3VsZCBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBhbmQgc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSB0aGUgZGV0YWlscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfaXNfZHlpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNzYzPXZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzY1OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzY2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODM3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg0MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4NDE6c3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4NDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM2NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBtZW1jb250cm9sLmgqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiBsaW5lcyAxNzY1IGFuZCAxODQxLiBCYXNlZCBvbiBteSBleGlzdGluZyB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc3Vic3lzdGVtLCB0aGVzZSBsb2NhdGlvbnMgYXJlIGxpa2VseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFyZSBpbXBsZW1lbnRlZCwgcGVyaGFwcyBob3cgcmVzb3VyY2VzIGFyZSBhY2NvdW50ZWQgb3IgaG93IGxpbWl0YXRpb25zIGFyZSBlbmZvcmNlZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNvZGVkIGluIHRoZXNlIHNwZWNpZmljIGxvY2F0aW9ucy4gSSBhbnRpY2lwYXRlIEkmIzM5O2xsIHByb2JhYmx5IGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBjb3JlIGxvZ2ljIGludGVyc2VjdHMgd2l0aCBhIHNwZWNpZmljIGZlYXR1cmUgb3IgZnVuY3Rpb24uIEkmIzM5O20ga2VlbiB0byBkZWNpcGhlciB0aGUgbnVhbmNlcyBoaWRkZW4gd2l0aGluIHRoaXMgY3J1Y2lhbCBoZWFkZXIgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NjA6XHRcbjE3NjE6XHR2b2lkIG1lbV9jZ3JvdXBfbm9kZV9maWx0ZXJfYWxsb3dlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIG5vZGVtYXNrX3QgKm1hc2spO1xuMTc2MjpcdFxuMTc2MzpcdHZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbjE3NjQ6XHRcbjE3NjU6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuMTc2NjpcdHtcbjE3Njc6XHRcdHJldHVybiBtZW1jZyA/IGNzc19pc19keWluZyhcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpIDogZmFsc2U7XG4xNzY4Olx0fVxuMTc2OTpcdFxuMTc3MDpcdCNlbHNlXG4xNzcxOlx0c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKVxuMTc3MjpcdHtcbjE3NzM6XHRcdHJldHVybiB0cnVlO1xuMTc3NDpcdH1cbjE3NzU6XHRcbjE3NzY6XHRzdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXG4xNzc3Olx0XHRcdFx0XHRcdCBpbnQgb3JkZXIpXG4xNzc4Olx0e1xuMTc3OTpcdFx0cmV0dXJuIDA7XG4xNzgwOlx0fVxuMTc4MTpcdFxuMTc4MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcbjE3ODM6XHR7XG4xNzg0Olx0fVxuMTc4NTpcdFxuMTc4NjpcdHN0YXRpYyBpbmxpbmUgaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxuMTc4NzpcdFx0XHRcdFx0XHQgICBpbnQgb3JkZXIpXG4xNzg4Olx0e1xuMTc4OTpcdFx0cmV0dXJuIDA7XG4xNzkwOlx0fVxuMTc5MTpcdFxuMTc5MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuMTc5MzpcdHtcbjE3OTQ6XHR9XG4xNzk1Olx0XG4xNzk2Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTc5NzpcdHtcbjE3OTg6XHRcdHJldHVybiBOVUxMO1xuMTc5OTpcdH1cbjE4MDA6XHRcbjE4MDE6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfYnBmX2VuYWJsZWQodm9pZClcbjE4MDI6XHR7XG4xODAzOlx0XHRyZXR1cm4gZmFsc2U7XG4xODA0Olx0fVxuMTgwNTpcdFxuMTgwNjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKVxuMTgwNzpcdHtcbjE4MDg6XHRcdHJldHVybiBmYWxzZTtcbjE4MDk6XHR9XG4xODEwOlx0XG4xODExOlx0c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4xODEyOlx0e1xuMTgxMzpcdFx0cmV0dXJuIC0xO1xuMTgxNDpcdH1cbjE4MTU6XHRcbjE4MTY6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKVxuMTgxNzpcdHtcbjE4MTg6XHRcdHJldHVybiBOVUxMO1xuMTgxOTpcdH1cbjE4MjA6XHRcbjE4MjE6XHRzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfb2JqY2dfZXZlbnRzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbjE4MjI6XHRcdFx0XHRcdCAgICAgIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXG4xODIzOlx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGNvdW50KVxuMTgyNDpcdHtcbjE4MjU6XHR9XG4xODI2Olx0XG4xODI3Olx0c3RhdGljIGlubGluZSBpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG4xODI4Olx0e1xuMTgyOTpcdFx0cmV0dXJuIDA7XG4xODMwOlx0fVxuMTgzMTpcdFxuMTgzMjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX25vZGVfZmlsdGVyX2FsbG93ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuMTgzMzpcdFx0XHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbWFzaylcbjE4MzQ6XHR7XG4xODM1Olx0fVxuMTgzNjpcdFxuMTgzNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4xODM4Olx0e1xuMTgzOTpcdH1cbjE4NDA6XHRcbjE4NDE6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuMTg0MjpcdHtcbjE4NDM6XHRcdHJldHVybiBmYWxzZTtcbjE4NDQ6XHR9XG4xODQ1Olx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuMTg0NjpcdFxuMTg0NzpcdCNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1pTV0FQKVxuMTg0ODpcdGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbjE4NDk6XHR2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xuMTg1MDpcdHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbjE4NTE6XHRib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbjE4NTI6XHQjZWxzZVxuMTg1MzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4xODU0Olx0e1xuMTg1NTpcdFx0cmV0dXJuIHRydWU7XG4xODU2Olx0fVxuMTg1NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4xODU4Olx0XHRcdFx0XHRcdCAgIHNpemVfdCBzaXplKVxuMTg1OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1jZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGllZCB0byBgQ09ORklHX01FTUNHYC4gVGhhdCYjMzk7cyBhIGdpdmVuLiBBbmQgc2luY2UgaXQmIzM5O3MgdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wtdjEuY2AsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCBgQ09ORklHX01FTUNHX1YxYCBlbmFibGVkIGFzIHdlbGwgdG8gZnVsbHkgdGVzdCB0aGUgY2hhbmdlcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyBjb21waWxlZCB1bmRlciBgQ09ORklHX01FTUNHX1YxYC4gU28gYm90aCBhcmUgcmVxdWlyZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSByZWFjaGFiaWxpdHkgb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaGFuZGxlcyBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGVYL3JlY2xhaW1gLCBhbmQgYWxzbyBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIGZvciB0aGUgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlLiBHb29kLCBib3RoIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkZWQgdG8ga25vdy4KCkZ1bmN0aW9uYWxseSwgdGhlIHBhdGNoIHNlZW1zIHNvdW5kLiBJdCYjMzk7cyBhZGRpbmcgY3J1Y2lhbCBjaGVja3MgdG8gaGFuZGxlIG1lbWNnIGRlc3RydWN0aW9uIGdyYWNlZnVsbHksIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzIG9yIHN0YWxscyB3aGVuIHRob3NlIG9wZXJhdGlvbnMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LiBUaGF0JiMzOTtzIGEgY29tbW9uIGlzc3VlIHdpdGggY29uY3VycmVudCBvcGVyYXRpb25zIG9uIHNoYXJlZCByZXNvdXJjZXMuIFNtYXJ0LCB0aGlzIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QuCgpJIG5lZWQgdG8ga2VlcCB0aGVzZSBzeW1ib2xzIGluIG1pbmQgYXMgSSBkaXZlIGRlZXBlcjogYG1lbV9jZ3JvdXBfcmVzaXplX21heGAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbmQgb2YgY291cnNlLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGx1cmtpbmc/IExvb2tzIGxpa2UganVzdCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1DR19WMWAsIHdoaWNoIGlzIHdoYXQgSSB0aG91Z2h0LgoKUXVpY2sgc2FuaXR5IGNoZWNrOiBJcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBhbnl0aGluZyBlbHNlPyBJbiBgbW0vdm1zY2FuLmNgLCBgcmVjbGFpbV9zdG9yZWAgaXMgdW5kZXIgYENPTkZJR19OVU1BYCwgSSB3b25kZXIgaWYgdGhhdCBhZmZlY3RzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlY2xhaW1fc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MDA5PUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcbi0tXG5tbS92bXNjYW4uYy04MDExLSNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG5tbS92bXNjYW4uYzo4MDEyOnN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxubW0vdm1zY2FuLmMtODAxMy1cdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNZW1vcnkgUmVjbGFpbSBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGludGVyYWN0cyB3aXRoIHZhcmlvdXMga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSB0aGF0IGByZWNsYWltX3N0b3JlYCByZWxpZXMgb24gYm90aCBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IE5VTUEgc3lzdGVtcyBvZnRlbiBiZW5lZml0IGZyb20gcHJvYWN0aXZlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgc3lzZnMgcHJvdmlkZXMgdGhlIGludGVyZmFjZS4KCkJ1dCBoZXJlJiMzOTtzIGEgd3JpbmtsZTogSSYjMzk7bSBhbHNvIGZpbmRpbmcgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCAqdGhhdCogaXMgZ292ZXJuZWQgYnkgYENPTkZJR19NRU1DR2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBldmVuIGlmIGBDT05GSUdfU1lTRlNgIG9yIGBDT05GSUdfTlVNQWAgYXJlbiYjMzk7dCBlbmFibGVkLCBpZiBgQ09ORklHX01FTUNHYCBpcywgSSBjYW4gc3RpbGwgdHJpZ2dlciBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBJZiBgQ09ORklHX01FTUNHYCAqaXNuJiMzOTt0KiBlbmFibGVkLCBpcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZXZlbiBjb21waWxlZCBpbj8gSXQmIzM5O3MgYSBjcml0aWNhbCBkZXBlbmRlbmN5IEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBtbS92bXNjYW4uY2AgYXJvdW5kIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZGVmaW5pdGlvbiB0byBjb25maXJtIHRoaXMuIEdvdHRhIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgcHJlcHJvY2Vzc29yIGxvZ2ljIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBpbmNsdWRlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODU1Olx0ZW51bSB7XG43ODU2Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcbjc4NTc6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxuNzg1ODpcdFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbjc4NTk6XHR9O1xuNzg2MDpcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbjc4NjE6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG43ODYyOlx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcJiMzNDtzd2FwcGluZXNzPW1heFwmIzM0O30sXG43ODYzOlx0XHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcbjc4NjQ6XHR9O1xuNzg2NTpcdFxuNzg2NjpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbjc4Njc6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG43ODY4Olx0e1xuNzg2OTpcdFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuNzg3MDpcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuNzg3MTpcdFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbjc4NzI6XHRcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbjc4NzM6XHRcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbjc4NzQ6XHRcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbjc4NzU6XHRcbjc4NzY6XHRcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG43ODc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg3ODpcdFxuNzg3OTpcdFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcbjc4ODA6XHRcbjc4ODE6XHRcdG9sZF9idWYgPSBidWY7XG43ODgyOlx0XHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xuNzg4MzpcdFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuNzg4NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4ODU6XHRcbjc4ODY6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODg3Olx0XG43ODg4Olx0XHR3aGlsZSAoKHN0YXJ0ID0gc3Ryc2VwKFx1MDAyNmJ1ZiwgXCYjMzQ7IFwmIzM0OykpICE9IE5VTEwpIHtcbjc4ODk6XHRcdFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxuNzg5MDpcdFx0XHRcdGNvbnRpbnVlO1xuNzg5MTpcdFx0XHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XG43ODkyOlx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcbjc4OTM6XHRcdFx0XHRpZiAobWF0Y2hfaW50KFx1MDAyNmFyZ3NbMF0sIFx1MDAyNnN3YXBwaW5lc3MpKVxuNzg5NDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODk1Olx0XHRcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTIHx8XG43ODk2Olx0XHRcdFx0ICAgIHN3YXBwaW5lc3MgXHUwMDNlIE1BWF9TV0FQUElORVNTKVxuNzg5NzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODk4Olx0XHRcdFx0YnJlYWs7XG43ODk5Olx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XG43OTAwOlx0XHRcdFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuNzkwMTpcdFx0XHRcdGJyZWFrO1xuNzkwMjpcdFx0XHRkZWZhdWx0OlxuNzkwMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkwNDpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTE0CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDQxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNvbXBpbGVkIHJlZ2FyZGxlc3MuIFRoYXQmIzM5O3MgYSBnaXZlbi4gSG93ZXZlciwgdGhlIHBhdGNoIGl0c2VsZiBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgYGlmIChtZW1jZyAmYW1wOyZhbXA7IG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlgIHdoaWNoIHJlbGllcyBvbiBgbWVtY2dfaXNfZHlpbmdgIGV2YWx1YXRpbmcgdG8gdHJ1ZS4gQW5kIGBtZW1jZ19pc19keWluZ2AmIzM5O3MgcmV0dXJuIGRlcGVuZHMgb24gYENPTkZJR19NRU1DR2AgYmVpbmcgZW5hYmxlZC4KClRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGRlZmluaXRpdmVseSBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgLgoKTm93LCByZWdhcmRpbmcgdGhlIGZvY3VzIHN5bWJvbHMsIEkmIzM5O3ZlIGdvdDogYG1lbV9jZ3JvdXBfcmVzaXplX21heGAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLgoKSSYjMzk7dmUgY2hlY2tlZCwgYW5kIHRob3NlIGFyZSBhbGwgdGhlIGNvcnJlY3Qgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgcGF0Y2guCgpUaGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC12MS5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGVzZSBhcmUgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQsIGNydWNpYWxseSwgYXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBjZ3JvdXBmcy4gVGhpcyBtYWtlcyB0aGVtIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGlzOgoKV29ydGhGdXp6aW5nOiB0cnVlCkZvY3VzU3ltYm9sczogWyYjMzQ7bWVtX2Nncm91cF9yZXNpemVfbWF4JiMzNDssICYjMzQ7bWVtX2Nncm91cF9mb3JjZV9lbXB0eSYjMzQ7LCAmIzM0O21lbW9yeV9oaWdoX3dyaXRlJiMzNDssICYjMzQ7bWVtb3J5X21heF93cml0ZSYjMzQ7LCAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0O10KRW5hYmxlQ29uZmlnczogWyYjMzQ7TUVNQ0cmIzM0OywgJiMzNDtNRU1DR19WMSYjMzQ7XQpSZWFzb25pbmc6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciBkeWluZyBtZW1vcnkgY2dyb3VwcyBpbiBzZXZlcmFsIGNncm91cCB3cml0ZSBoYW5kbGVycyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aHMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBvciBzdGFsbHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVhcmx5LWV4aXQgcGF0aHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfcmVzaXplX21heCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2ZvcmNlX2VtcHR5JiMzNDssCiAgICAmIzM0O21lbW9yeV9oaWdoX3dyaXRlJiMzNDssCiAgICAmIzM0O21lbW9yeV9tYXhfd3JpdGUmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGNoZWNrcyBmb3IgZHlpbmcgbWVtb3J5IGNncm91cHMgaW4gc2V2ZXJhbCBjZ3JvdXAgd3JpdGUgaGFuZGxlcnMgYW5kIHByb2FjdGl2ZSByZWNsYWltIHBhdGhzIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgb3Igc3RhbGxzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlYXJseS1leGl0IHBhdGhzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3Jlc2l6ZV9tYXgmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mb3JjZV9lbXB0eSYjMzQ7LAogICAgJiMzNDttZW1vcnlfaGlnaF93cml0ZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfbWF4X3dyaXRlJiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjaGVja3MgZm9yIGR5aW5nIG1lbW9yeSBjZ3JvdXBzIGluIHNldmVyYWwgY2dyb3VwIHdyaXRlIGhhbmRsZXJzIGFuZCBwcm9hY3RpdmUgcmVjbGFpbSBwYXRocyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIG9yIHN0YWxscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZWFybHktZXhpdCBwYXRocyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MjoxMC4zOTIzODE3MzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDg2MTk0MjY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhcIixcbiAgICBcIm1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlcIixcbiAgICBcIm1lbW9yeV9oaWdoX3dyaXRlXCIsXG4gICAgXCJtZW1vcnlfbWF4X3dyaXRlXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjaGVja3MgZm9yIGR5aW5nIG1lbW9yeSBjZ3JvdXBzIGluIHNldmVyYWwgY2dyb3VwIHdyaXRlIGhhbmRsZXJzIGFuZCBwcm9hY3RpdmUgcmVjbGFpbSBwYXRocyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIG9yIHN0YWxscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZWFybHktZXhpdCBwYXRocyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjEwLjM5MjM4NjY0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1MjE1MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWM1YjRjMjRjNmZmMDc4MDE0Y2NlNmMxZDhhZmM3MzMyYWQxZGIwZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAwMTo1MjowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmMgYi9tbS9tZW1jb250cm9sLXYxLmNcXG5pbmRleCA3NjUwNjkyMTE1Njc4Yy4uYWQyM2RlOTg1ZDlhZjEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXFxuKysrIGIvbW0vbWVtY29udHJvbC12MS5jXFxuQEAgLTE1MTMsNiArMTUxMyw5IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0aWYgKCFyZXQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0aWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAoIWRyYWluZWQpIHtcXG4gXFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG4gXFx0XFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuQEAgLTE1NTEsNiArMTU1NCw5IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gXFxuK1xcdFxcdGlmIChtZW1jZ19pc19keWluZyhtZW1jZykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxcbiBcXHRcXHRcXHRucl9yZXRyaWVzLS07XFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IGQyMGZmYzgyNzMwNmU5Li5hZDVmNmRmZGMwMjE0MyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNDc5NCw2ICs0Nzk0LDkgQEAgc3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0aWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAoIWRyYWluZWQpIHtcXG4gXFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG4gXFx0XFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuQEAgLTQ4NDUsNiArNDg0OCw5IEBAIHN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0aWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAoIWRyYWluZWQpIHtcXG4gXFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG4gXFx0XFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA3NTRjNWY1ZDcxNmFhZC4uMDkxYjYwOWNmMWIxZWIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC03OTEyLDYgKzc5MTIsOSBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuIFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gXFxuK1xcdFxcdGlmIChtZW1jZyBcXHUwMDI2XFx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXFxuIFxcdFxcdCAqIGhvcGUgb2YgaW50cm9kdWNpbmcgbW9yZSBldmljdGFibGUgcGFnZXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjEwLjgwODExNDQ5M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0NDYyMDEzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9yZXNpemVfbWF4XCIsXG4gICAgXCJtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5XCIsXG4gICAgXCJtZW1vcnlfaGlnaF93cml0ZVwiLFxuICAgIFwibWVtb3J5X21heF93cml0ZVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciBkeWluZyBtZW1vcnkgY2dyb3VwcyBpbiBzZXZlcmFsIGNncm91cCB3cml0ZSBoYW5kbGVycyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aHMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBvciBzdGFsbHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVhcmx5LWV4aXQgcGF0aHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFjNWI0YzI0YzZmZjA3ODAxNGNjZTZjMWQ4YWZjNzMzMmFkMWRiMGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwMTo1MjowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuY1xuaW5kZXggNzY1MDY5MjExNTY3OGMuLmFkMjNkZTk4NWQ5YWYxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC0xNTEzLDYgKzE1MTMsOSBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdGlmICghcmV0KVxuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRpZiAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAoIWRyYWluZWQpIHtcbiBcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuIFx0XHRcdGRyYWluZWQgPSB0cnVlO1xuQEAgLTE1NTEsNiArMTU1NCw5IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFxuK1x0XHRpZiAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG4gXHRcdFx0XHRcdFx0ICBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcbiBcdFx0XHRucl9yZXRyaWVzLS07XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCBkMjBmZmM4MjczMDZlOS4uYWQ1ZjZkZmRjMDIxNDMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTQ3OTQsNiArNDc5NCw5IEBAIHN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRpZiAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAoIWRyYWluZWQpIHtcbiBcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuIFx0XHRcdGRyYWluZWQgPSB0cnVlO1xuQEAgLTQ4NDUsNiArNDg0OCw5IEBAIHN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0YnJlYWs7XG4gXG4rXHRcdGlmIChtZW1jZ19pc19keWluZyhtZW1jZykpXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdGlmICghZHJhaW5lZCkge1xuIFx0XHRcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG4gXHRcdFx0ZHJhaW5lZCA9IHRydWU7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNzU0YzVmNWQ3MTZhYWQuLjA5MWI2MDljZjFiMWViIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzkxMiw2ICs3OTEyLDkgQEAgaW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbiBcbitcdFx0aWYgKG1lbWNnIFx1MDAyNlx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpXG4rXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgaXMgdGhlIGZpbmFsIGF0dGVtcHQsIGRyYWluIHBlcmNwdSBscnUgY2FjaGVzIGluIHRoZVxuIFx0XHQgKiBob3BlIG9mIGludHJvZHVjaW5nIG1vcmUgZXZpY3RhYmxlIHBhZ2VzLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MTAuODA4MTE1ODUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMDUzNjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIER5aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHRoZXkncmUgcHV0dGluZyBpbiBgbWVtY2dfaXNfZHlpbmcobWVtY2cpYCBjaGVja3MgaW4gYSBmZXcga2V5IHNwb3RzLiBNYWtlcyBzZW5zZTsgaWYgYSBtZW1jZyBpcyBiZWluZyB0b3JuIGRvd24sIHdlIGRvbid0IHdhbnQgdG8ga2VlcCB0aHJhc2hpbmcgYXJvdW5kIHRyeWluZyB0byBkbyB0aGluZ3MgdGhhdCBhcmUgbm93IHBvaW50bGVzcywgb3IgcG90ZW50aWFsbHkgZXZlbiBoYXJtZnVsLiBUaGV5J3ZlIHRhcmdldGVkIHNldmVyYWwgZnVuY3Rpb25zOiBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCwgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgIChib3RoIGluIGBtbS9tZW1jb250cm9sLXYxLmNgKSwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgIChpbiBgbW0vbWVtY29udHJvbC5jYCksIGFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgd2hpY2ggaXMgaW4gYG1tL3Ztc2Nhbi5jYC4gIEFsbCBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBjZ3JvdXAuIFRoZSBpZGVhIGlzIHRvIGJhaWwgZWFybHkgaW4gdGhlc2UgbG9vcHMgb3IgZWFybHkgcmV0dXJucyBpZiB0aGUgdGFyZ2V0IG1lbWNnIGlzIGluIHRoZSBwcm9jZXNzIG9mIGR5aW5nLlxuXG5HaXZlbiB0aGUgc2NvcGUsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGNvcnJlY3RseSBtYW5hZ2VkLiBUaGlzIHNlZW1zIHRvIGJlIHByZXR0eSBzdGFuZGFyZCBtZW1jZyBzdHVmZiwgc28gSSdtIGV4cGVjdGluZyBgQ09ORklHX01FTUNHYCBhbmQsIHNpbmNlIHRoZXkncmUgdG91Y2hpbmcgYG1lbWNvbnRyb2wtdjEuY2AsIHByb2JhYmx5IGBDT05GSUdfTUVNQ0dfVjFgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlLiBJdCB3aWxsIGxpa2VseSByZXNpZGUgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgLiBJJ2xsIHJ1biB0aHJvdWdoIHRob3NlIHF1aWNrbHkgYW5kIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MjoxNS44MDg2NTM5MThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0ODg0NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU1NSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTA2PXN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA4LXtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMDk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExMC1cXHRjZ3JvdXBfcGF0aChtZW1jZy1cXHUwMDNlY3NzLmNncm91cCwgbWVtY2dfcGF0aF9idWYsIFBBVEhfTUFYKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExMi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTM6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExNC1cXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9kZWJ1Zy5jPTcwPXN0YXRpYyB2b2lkIF9fZHVtcF9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL2RlYnVnLmMtOTYtXFxubW0vZGVidWcuYzo5NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy05OC1cXHRpZiAoZm9saW8tXFx1MDAzZW1lbWNnX2RhdGEpXFxuLS1cXG5tbS9kZWJ1Zy5jPTE3NT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9kZWJ1Zy5jLTE4OC0jZW5kaWZcXG5tbS9kZWJ1Zy5jOjE4OTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy0xOTAtXFx0XFx0XFxcIm93bmVyICVweCBcXFwiXFxuLS1cXG5tbS9kZWJ1Zy5jLTIxNy0jZW5kaWZcXG5tbS9kZWJ1Zy5jOjIxODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy0yMTktXFx0XFx0bW0tXFx1MDAzZW93bmVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNTI3PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzYxOC1cXHRcXHRcXHRmb2xpb19zZXRfaWRsZShuZXdfZm9saW8pO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzYxOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vaHVnZV9tZW1vcnkuYy0zNjIwLVxcdFxcdG5ld19mb2xpby1cXHUwMDNlbWVtY2dfZGF0YSA9IGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhO1xcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmM9NDU9c3RhdGljIGludCBod3BvaXNvbl9maWx0ZXJfZmxhZ3Moc3RydWN0IHBhZ2UgKnApXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYy02Ni0gKi9cXG5tbS9od3BvaXNvbi1pbmplY3QuYzo2NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNjgtc3RhdGljIHU2NCBod3BvaXNvbl9maWx0ZXJfbWVtY2c7XFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYz0xNjI9c3RhdGljIGludCBfX2luaXQgcGZuX2luamVjdF9pbml0KHZvaWQpXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xOTEtXFxubW0vaHdwb2lzb24taW5qZWN0LmM6MTkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xOTMtXFx0ZGVidWdmc19jcmVhdGVfdTY0KFxcXCJjb3JydXB0LWZpbHRlci1tZW1jZ1xcXCIsIDA2MDAsIGh3cG9pc29uX2RpcixcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmM9NjExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtNjM4LVxcdFxcdF9fU2V0UGFnZVNsYWIocGFnZSk7XFxubW0va2ZlbmNlL2NvcmUuYzo2Mzk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2tmZW5jZS9jb3JlLmMtNjQwLVxcdFxcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xcbi0tXFxubW0va2ZlbmNlL2NvcmUuYy03MDYtXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHN0YXJ0X3BmbiArIGkpO1xcbm1tL2tmZW5jZS9jb3JlLmM6NzA3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9rZmVuY2UvY29yZS5jLTcwOC1cXHRcXHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmM9MTI0Nz12b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcilcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTI1MC1cXG5tbS9rZmVuY2UvY29yZS5jOjEyNTE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2tmZW5jZS9jb3JlLmMtMTI1Mi1cXHRLRkVOQ0VfV0FSTl9PTihtZXRhLVxcdTAwM2VvYmpfZXh0cy5vYmpjZyk7XFxuLS1cXG5tbS9rZmVuY2Uva2ZlbmNlLmg9NTk9c3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7XFxuLS1cXG5tbS9rZmVuY2Uva2ZlbmNlLmgtMTA0LVxcdHUzMiBhbGxvY19zdGFja19oYXNoIF9fZ3VhcmRlZF9ieShcXHUwMDI2bG9jayk7XFxubW0va2ZlbmNlL2tmZW5jZS5oOjEwNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0va2ZlbmNlL2tmZW5jZS5oLTEwNi1cXHRzdHJ1Y3Qgc2xhYm9ial9leHQgb2JqX2V4dHM7XFxuLS1cXG5tbS9saXN0X2xydS5jPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxcbi0tXFxubW0vbGlzdF9scnUuYy0zOS1cXG5tbS9saXN0X2xydS5jOjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jLTQxLXN0YXRpYyBMSVNUX0hFQUQobWVtY2dfbGlzdF9scnVzKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9MTQxPWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTE1MC19XFxubW0vbGlzdF9scnUuYzoxNTE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL2xpc3RfbHJ1LmMtMTUyLVxcbi0tXFxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTQyMS1cXG5tbS9saXN0X2xydS5jOjQyMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00MjMtXFx0aWYgKCpucl90b193YWxrIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKSB7XFxuLS1cXG5tbS9saXN0X2xydS5jPTQ1MT1zdGF0aWMgdm9pZCBpbml0X29uZV9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxuLS1cXG5tbS9saXN0X2xydS5jLTQ2MS1cXG5tbS9saXN0X2xydS5jOjQ2MjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00NjMtc3RhdGljIHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWVtY2dfaW5pdF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjU5PXN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY2MS19XFxubW0vbGlzdF9scnUuYzo2NjI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL2xpc3RfbHJ1LmMtNjYzLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY2Ny1cXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy02NjktXFx0aWYgKHNocmlua2VyKVxcbi0tXFxubW0vbGlzdF9scnUuYz02OTI9dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy03MDMtXFxubW0vbGlzdF9scnUuYzo3MDQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNzA1LVxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0yND1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTI3LS8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cXG5tbS9tZW1jb250cm9sLXYxLmg6Mjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wtdjEuaC0yOS1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD05MT1leHRlcm4gc3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdO1xcbm1tL21lbWNvbnRyb2wtdjEuaC05Mi1cXG5tbS9tZW1jb250cm9sLXYxLmg6OTM6I2Vsc2VcXHQvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5tbS9tZW1jb250cm9sLXYxLmgtOTQtXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9MTIxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHt9XFxubW0vbWVtY29udHJvbC12MS5oLTEyMi1cXG5tbS9tZW1jb250cm9sLXYxLmg6MTIzOiNlbmRpZlxcdC8qIENPTkZJR19NRU1DR19WMSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaC0xMjQtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjA5PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMjgtXFxubW0vbWVtY29udHJvbC5jOjIyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTIzMC1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDU9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI3LVxcbm1tL21lbWNvbnRyb2wuYzo1Mjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01Mjktc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxubW0vbWVtY29udHJvbC5jOjU1NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTU1NS1cXHRQR1BHSU4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Nzg3PXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04MDItXFxubW0vbWVtY29udHJvbC5jOjgwMzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTgwNC0vKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTg3MT12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04ODMtXFxubW0vbWVtY29udHJvbC5jOjg4NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTg4NS0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTA1OT1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMDY2LVxcbm1tL21lbWNvbnRyb2wuYzoxMDY3OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTA2OC11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNjY3PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjcyLVxcbm1tL21lbWNvbnRyb2wuYzoxNjczOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTY3NC11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTY5Mz1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3MzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkrKykge1xcbm1tL21lbWNvbnRyb2wuYzoxNzQwOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTc0MS1cXHRcXHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzkxPXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTgxMi1cXHRcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcXG5tbS9tZW1jb250cm9sLmM6MTgxMzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE4MTQtXFx0ZWxzZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjgwMD1zdGF0aWMgdm9pZCBjb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODEyLVxcbm1tL21lbWNvbnRyb2wuYzoyODEzOiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5tbS9tZW1jb250cm9sLmMtMjgxNC1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yOTg2PV9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqY3VycmVudF9vYmpfY2dyb3VwKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjk5MS1cXG5tbS9tZW1jb250cm9sLmM6Mjk5MjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0dfTk1JX1VOU0FGRSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpXFxubW0vbWVtY29udHJvbC5jLTI5OTMtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzAzMj1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwNDItXFxubW0vbWVtY29udHJvbC5jOjMwNDM6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy0zMDQ0LXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQxNTc9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDE4MC1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIFxcdTAwMjZwYXJlbnQtXFx1MDAzZXN3YXAsIGZhbHNlKTtcXG5tbS9tZW1jb250cm9sLmM6NDE4MTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQxODItXFx0XFx0bWVtY2ctXFx1MDAzZW1lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MTkxLVxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgTlVMTCwgZmFsc2UpO1xcbm1tL21lbWNvbnRyb2wuYzo0MTkyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNDE5My1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzU5PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM2NC1cXHRwYWdlX2NvdW50ZXJfc2V0X21heChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xcbm1tL21lbWNvbnRyb2wuYzo0MzY1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNDM2Ni1cXHRwYWdlX2NvdW50ZXJfc2V0X21heChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIFBBR0VfQ09VTlRFUl9NQVgpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQzOTQ9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0MjktXFxubW0vbWVtY29udHJvbC5jOjQ0MzA6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy00NDMxLXN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTA4Mj1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA5My1cXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXFxubW0vbWVtY29udHJvbC5jOjUwOTQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01MDk1LVxcdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYwMjg9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDMzLVxcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XFxubW0vbWVtY29udHJvbC5jOjYwMzQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy02MDM1LVxcdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBtZW1zd19maWxlcykpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEwMzE9c3RhdGljIGlubGluZSBib29sIHBhZ2VfZXhwZWN0ZWRfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTAzOC1cXHRcXHRcXHRwYWdlX3JlZl9jb3VudChwYWdlKSB8XFxubW0vcGFnZV9hbGxvYy5jOjEwMzk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3BhZ2VfYWxsb2MuYy0xMDQwLVxcdFxcdFxcdHBhZ2UtXFx1MDAzZW1lbWNnX2RhdGEgfFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEwNDk9c3RhdGljIGNvbnN0IGNoYXIgKnBhZ2VfYmFkX3JlYXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMDY0LVxcdH1cXG5tbS9wYWdlX2FsbG9jLmM6MTA2NTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vcGFnZV9hbGxvYy5jLTEwNjYtXFx0aWYgKHVubGlrZWx5KHBhZ2UtXFx1MDAzZW1lbWNnX2RhdGEpKVxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmM9MjcyPWludCBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICptYXgsXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYy0yOTItXFxubW0vcGFnZV9jb3VudGVyLmM6MjkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NRU1DRykgfHwgSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX0RNRU0pXFxubW0vcGFnZV9jb3VudGVyLmMtMjk0LS8qXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYz00MjQ9dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTQ2NC19XFxubW0vcGFnZV9jb3VudGVyLmM6NDY1OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgfHwgQ09ORklHX0NHUk9VUF9ETUVNICovXFxuLS1cXG5tbS9wYWdlX2lvLmM9MzA1PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9zd3BvdXRfdm1fZXZlbnQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0zMTctXFxubW0vcGFnZV9pby5jOjMxODojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXFxubW0vcGFnZV9pby5jLTMxOS1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0zMzktI2RlZmluZSBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pXFx0XFx0ZG8geyB9IHdoaWxlICgwKVxcbm1tL3BhZ2VfaW8uYzozNDA6I2VuZGlmIC8qIENPTkZJR19NRU1DRyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfQkxLX0NHUk9VUCAqL1xcbm1tL3BhZ2VfaW8uYy0zNDEtXFxuLS1cXG5tbS9wYWdlX293bmVyLmM9NDg0PXZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy01NjAtXFxubW0vcGFnZV9vd25lci5jOjU2MTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vcGFnZV9vd25lci5jLTU2Mi0vKlxcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmg9MzU9c3RydWN0IHBjcHVvYmpfZXh0IHtcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDozNjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vcGVyY3B1LWludGVybmFsLmgtMzctXFx0c3RydWN0IG9ial9jZ3JvdXBcXHQqY2dyb3VwO1xcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmgtNDMtXFxubW0vcGVyY3B1LWludGVybmFsLmg6NDQ6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSB8fCBkZWZpbmVkKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTQ1LSNkZWZpbmUgTkVFRF9QQ1BVT0JKX0VYVFxcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmg9MTUzPXN0YXRpYyBpbmxpbmUgc2l6ZV90IHBjcHVfb2JqX2Z1bGxfc2l6ZShzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTE1Ni1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDoxNTc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTE1OC1cXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbi0tXFxubW0vcGVyY3B1LmM9MTU5ND1zdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY2h1bmtfYWRkcl9zZWFyY2godm9pZCAqYWRkcilcXG4tLVxcbm1tL3BlcmNwdS5jLTE2MTQtXFxubW0vcGVyY3B1LmM6MTYxNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vcGVyY3B1LmMtMTYxNi1zdGF0aWMgYm9vbCBwY3B1X21lbWNnX3ByZV9hbGxvY19ob29rKHNpemVfdCBzaXplLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9wZXJjcHUuYz0xNjU1PXN0YXRpYyB2b2lkIHBjcHVfbWVtY2dfZnJlZV9ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZiwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9wZXJjcHUuYy0xNjc2LVxcbm1tL3BlcmNwdS5jOjE2Nzc6I2Vsc2UgLyogQ09ORklHX01FTUNHICovXFxubW0vcGVyY3B1LmMtMTY3OC1zdGF0aWMgYm9vbFxcbi0tXFxubW0vcGVyY3B1LmM9MTY5MD1zdGF0aWMgdm9pZCBwY3B1X21lbWNnX2ZyZWVfaG9vayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsIHNpemVfdCBzaXplKVxcbi0tXFxubW0vcGVyY3B1LmMtMTY5Mi19XFxubW0vcGVyY3B1LmM6MTY5MzojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxubW0vcGVyY3B1LmMtMTY5NC1cXG4tLVxcbm1tL3Nocmlua2VyLmM9MTE9REVGSU5FX01VVEVYKHNocmlua2VyX211dGV4KTtcXG5tbS9zaHJpbmtlci5jLTEyLVxcbm1tL3Nocmlua2VyLmM6MTM6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Nocmlua2VyLmMtMTQtc3RhdGljIGludCBzaHJpbmtlcl9ucl9tYXg7XFxuLS1cXG5tbS9zaHJpbmtlci5jPTMzND1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3Nocmlua2VyLmMtMzM4LX1cXG5tbS9zaHJpbmtlci5jOjMzOTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxubW0vc2hyaW5rZXIuYy0zNDAtXFxuLS1cXG5tbS9zaHJpbmtlci5jPTM3Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb19zaHJpbmtfc2xhYihzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNocmlua2N0bCxcXG4tLVxcbm1tL3Nocmlua2VyLmMtNDc0LVxcbm1tL3Nocmlua2VyLmM6NDc1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zaHJpbmtlci5jLTQ3Ni1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfc2xhYl9tZW1jZyhnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG4tLVxcbm1tL3Nocmlua2VyLmMtNTk1LX1cXG5tbS9zaHJpbmtlci5jOjU5NjojZWxzZSAvKiAhQ09ORklHX01FTUNHICovXFxubW0vc2hyaW5rZXIuYy01OTctc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWJfbWVtY2coZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXFxuLS1cXG5tbS9zaHJpbmtlci5jLTYwMS19XFxubW0vc2hyaW5rZXIuYzo2MDI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3Nocmlua2VyLmMtNjAzLVxcbi0tXFxubW0vc2hyaW5rZXIuYz02ODg9c3RydWN0IHNocmlua2VyICpzaHJpbmtlcl9hbGxvYyh1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbi0tXFxubW0vc2hyaW5rZXIuYy03MjYtXFx0ICogIC0gbm9uLW1lbWNnLWF3YXJlIHNocmlua2Vyc1xcbm1tL3Nocmlua2VyLmM6NzI3OlxcdCAqICAtICFDT05GSUdfTUVNQ0dcXG5tbS9zaHJpbmtlci5jLTcyOC1cXHQgKiAgLSBtZW1jZyBpcyBkaXNhYmxlZCBieSBrZXJuZWwgY29tbWFuZCBsaW5lXFxuLS1cXG5tbS9zbGFiLmg9MTIyPVNMQUJfTUFUQ0goX3JlZmNvdW50LCBfX3BhZ2VfcmVmY291bnQpO1xcbm1tL3NsYWIuaDoxMjM6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsYWIuaC0xMjQtU0xBQl9NQVRDSChtZW1jZ19kYXRhLCBvYmpfZXh0cyk7XFxuLS1cXG5tbS9zbGFiLmg9NTU4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2xhYi5oLTU2MS1cXG5tbS9zbGFiLmg6NTYyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbGFiLmgtNTYzLVxcdC8qXFxuLS1cXG5tbS9zbGFiLmg9NjUyPXN0YXRpYyBpbmxpbmUgZW51bSBub2RlX3N0YXRfaXRlbSBjYWNoZV92bXN0YXRfaWR4KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYi5oLTY1Ny1cXG5tbS9zbGFiLmg6NjU4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbGFiLmgtNjU5LWJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTgwND1FWFBPUlRfU1lNQk9MKGttYWxsb2Nfc2l6ZV9yb3VuZHVwKTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtODExLVxcbm1tL3NsYWJfY29tbW9uLmM6ODEyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbGFiX2NvbW1vbi5jLTgxMy0jZGVmaW5lIEtNQUxMT0NfQ0dST1VQX05BTUUoc3opXFx0Lm5hbWVbS01BTExPQ19DR1JPVVBdID0gXFxcImttYWxsb2MtY2ctXFxcIiAjc3osXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTk0NT1uZXdfa21hbGxvY19jYWNoZShpbnQgaWR4LCBlbnVtIGttYWxsb2NfY2FjaGVfdHlwZSB0eXBlKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy05NTMtXFx0XFx0ZmxhZ3MgfD0gU0xBQl9SRUNMQUlNX0FDQ09VTlQ7XFxubW0vc2xhYl9jb21tb24uYzo5NTQ6XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19DR1JPVVApKSB7XFxubW0vc2xhYl9jb21tb24uYy05NTUtXFx0XFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTk2OS1cXHQvKlxcbm1tL3NsYWJfY29tbW9uLmM6OTcwOlxcdCAqIElmIENPTkZJR19NRU1DRyBpcyBlbmFibGVkLCBkaXNhYmxlIGNhY2hlIG1lcmdpbmcgZm9yXFxubW0vc2xhYl9jb21tb24uYy05NzEtXFx0ICogS01BTExPQ19OT1JNQUwgY2FjaGVzLlxcbm1tL3NsYWJfY29tbW9uLmMtOTcyLVxcdCAqL1xcbm1tL3NsYWJfY29tbW9uLmM6OTczOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwpKVxcbm1tL3NsYWJfY29tbW9uLmMtOTc0LVxcdFxcdGZsYWdzIHw9IFNMQUJfTk9fTUVSR0U7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTk5ND12b2lkIF9faW5pdCBjcmVhdGVfa21hbGxvY19jYWNoZXModm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtOTk5LVxcdC8qXFxubW0vc2xhYl9jb21tb24uYzoxMDAwOlxcdCAqIEluY2x1ZGluZyBLTUFMTE9DX0NHUk9VUCBpZiBDT05GSUdfTUVNQ0cgZGVmaW5lZFxcbm1tL3NsYWJfY29tbW9uLmMtMTAwMS1cXHQgKi9cXG4tLVxcbm1tL3NsdWIuYz0yMTYyPWludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0yMTk5LVxcdG5ld19leHRzID0gKHVuc2lnbmVkIGxvbmcpdmVjO1xcbm1tL3NsdWIuYzoyMjAwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbHViLmMtMjIwMS1cXHRuZXdfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XFxuLS1cXG5tbS9zbHViLmM9MjI3Nj1zdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMjk1LVxcbm1tL3NsdWIuYzoyMjk2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbHViLmMtMjI5Ny1cXHRcXHRvYmpfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XFxuLS1cXG5tbS9zbHViLmMtMjMxMi1cXG5tbS9zbHViLmM6MjMxMzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2x1Yi5jLTIzMTQtXFx0XFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xcbi0tXFxubW0vc2x1Yi5jPTI0NTI9YWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbi0tXFxubW0vc2x1Yi5jLTI0NTktXFxubW0vc2x1Yi5jOjI0NjA6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsdWIuYy0yNDYxLVxcbi0tXFxubW0vc2x1Yi5jPTI1MDg9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI1NjctXFxubW0vc2x1Yi5jOjI1Njg6I2Vsc2UgLyogQ09ORklHX01FTUNHICovXFxubW0vc2x1Yi5jLTI1Njktc3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jPTI1ODI9c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtMjU4NS19XFxubW0vc2x1Yi5jOjI1ODY6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3NsdWIuYy0yNTg3LVxcbi0tXFxubW0vc2x1Yi5jPTYzOTk9dm9pZCBzbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpvYmplY3QsXFxuLS1cXG5tbS9zbHViLmMtNjQxNC1cXG5tbS9zbHViLmM6NjQxNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2x1Yi5jLTY0MTYtLyogRG8gbm90IGlubGluZSB0aGUgcmFyZSBtZW1jZyBjaGFyZ2luZyBmYWlsZWQgcGF0aCBpbnRvIHRoZSBhbGxvY2F0aW9uIHBhdGggKi9cXG4tLVxcbm1tL3N3YXAuYz0xMTM1PXZvaWQgZm9saW9fYmF0Y2hfcmVtb3ZlX2V4Y2VwdGlvbmFscyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaClcXG4tLVxcbm1tL3N3YXAuYy0xMTQ2LVxcbm1tL3N3YXAuYzoxMTQ3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zd2FwLmMtMTE0OC1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG4tLVxcbm1tL3N3YXAuaD00OD1zdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8ge1xcbi0tXFxubW0vc3dhcC5oLTU4LVxcdHVuc2lnbmVkIGludCAqZXh0ZW5kX3RhYmxlO1xcdC8qIEZvciBsYXJnZSBzd2FwIGNvdW50LCBwcm90ZWN0ZWQgYnkgY2ktXFx1MDAzZWxvY2sgKi9cXG5tbS9zd2FwLmg6NTk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3N3YXAuaC02MC1cXHRzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSAqbWVtY2dfdGFibGU7XFx0LyogU3dhcCB0YWJsZSBlbnRyaWVzJyBjZ3JvdXAgcmVjb3JkICovXFxuLS1cXG5tbS9zd2FwX3RhYmxlLmg9Mjk2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfdGFibGVfY2xlYXJfemVybyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF90YWJsZS5oLTMxMC1cXG5tbS9zd2FwX3RhYmxlLmg6MzExOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zd2FwX3RhYmxlLmgtMzEyLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2dyb3VwX3NldChzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYz00MjE9c3RhdGljIHZvaWQgc3dhcF9jbHVzdGVyX2ZyZWVfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtNDI0LVxcbm1tL3N3YXBmaWxlLmM6NDI1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zd2FwZmlsZS5jLTQyNi1cXHRrZnJlZShjaS1cXHUwMDNlbWVtY2dfdGFibGUpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz00NDk9c3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vc3dhcGZpbGUuYy00NzAtXFxubW0vc3dhcGZpbGUuYzo0NzE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3N3YXBmaWxlLmMtNDcyLVxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTM5MTU9aW50IHN3YXBfZHVwX2VudHJ5X2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzkzNC1cXG5tbS9zd2FwZmlsZS5jOjM5MzU6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQKVxcbm1tL3N3YXBmaWxlLmMtMzkzNi1zdGF0aWMgYm9vbCBfX2hhc191c2FibGVfc3dhcCh2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmM9MTk5PWludCB2bV9zd2FwcGluZXNzID0gNjA7XFxubW0vdm1zY2FuLmMtMjAwLVxcbm1tL3Ztc2Nhbi5jOjIwMTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjAyLVxcbi0tXFxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy0yNjgwLVxcbm1tL3Ztc2Nhbi5jOjI2ODE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI2ODItXFx0aWYgKG1lbWNnKSB7XFxuLS1cXG5tbS92bXNjYW4uYz0yODMxPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yODM3LVxcbm1tL3Ztc2Nhbi5jOjI4Mzg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4MzktXFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9Mjg3MT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg3Ny1cXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VscnVfZ2VuLmxpc3QpKTtcXG5tbS92bXNjYW4uYzoyODc4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODc5LVxcdFZNX1dBUk5fT05fT05DRShtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODk4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTA2LVxcbm1tL3Ztc2Nhbi5jOjI5MDc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5MDgtXFx0bWVtY2cgPSBtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzAtXFxubW0vdm1zY2FuLmM6MjkzMTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkzMi1cXHRtZW1fY2dyb3VwX3B1dChtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yOTM2LVxcbm1tL3Ztc2Nhbi5jOjI5Mzc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5Mzgtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYz00MzA3PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDM1Mi1cXG5tbS92bXNjYW4uYzo0MzUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy00MzU0LVxcbi0tXFxubW0vdm1zY2FuLmM9NDU0NT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDU2Ny1cXG5tbS92bXNjYW4uYzo0NTY4OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MTUuODY2MTQ2NjYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4NjM0ODk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZXNzZW50aWFsIGZvciB0aG9zZSBzcGVjaWZpYyBtZW1vcnkgY29udHJvbCBmdW5jdGlvbnMsIG5hbWVseSBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCBhbmQgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgLiBBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXJlIGluZGVlZCBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC12MS5jYC4gU28sIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRlZmluaXRlbHkgYSBkZXBlbmRlbmN5LlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbWVtb3J5X2hpZ2hfd3JpdGVgIGFuZCBgbWVtb3J5X21heF93cml0ZWAgYXJlIGxvY2F0ZWQuIEkgcmVtZW1iZXIgdGhlc2UgZnJvbSB0aGUgZ2VuZXJhbCBtZW1vcnkgY29udHJvbCBzcGFjZS4gQSBxdWljayBjaGVjayB0ZWxscyBtZSB0aGV5J3JlIGluIGBtbS9tZW1jb250cm9sLmNgLiBBbmQgdGhhdCBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBqdXN0IGBDT05GSUdfTUVNQ0dgLiBNYWtlcyBzZW5zZS5cblxuRmluYWxseSwgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHdoZXJlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBkZWZpbmVkLCBhbmQgaXQgc2VlbXMgdGhhdCBpcyBpbiBgbW0vdm1zY2FuLmNgLlxuXG5UbyBjb25maXJtIHRoZSBjb25uZWN0aW9ucywgSSdtIG5vdyBnb2luZyB0byBkcmlsbCBkb3duIGFuZCBkb3VibGUtY2hlY2sgYG1tL21lbWNvbnRyb2wtdjEuY2AgYW5kIGBtbS9tZW1jb250cm9sLmNgIGZvciB0aG9zZSBmdW5jdGlvbnMsIHRvIGVsaW1pbmF0ZSBhbnkgcG90ZW50aWFsIHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MjEuMjUyNDk3NTE5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODY1NzgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xNDc5PXN0YXRpYyBERUZJTkVfTVVURVgobWVtY2dfbWF4X211dGV4KTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTQ4MC1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTQ4MTpzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC12MS5jLTE0ODItXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgbWF4LCBib29sIG1lbXN3KVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE2OTA9c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTcwOS1cXHRcXHRjYXNlIF9NRU06XFxubW0vbWVtY29udHJvbC12MS5jOjE3MTA6XFx0XFx0XFx0cmV0ID0gbWVtX2Nncm91cF9yZXNpemVfbWF4KG1lbWNnLCBucl9wYWdlcywgZmFsc2UpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzExLVxcdFxcdFxcdGJyZWFrO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzEyLVxcdFxcdGNhc2UgX01FTVNXQVA6XFxubW0vbWVtY29udHJvbC12MS5jOjE3MTM6XFx0XFx0XFx0cmV0ID0gbWVtX2Nncm91cF9yZXNpemVfbWF4KG1lbWNnLCBucl9wYWdlcywgdHJ1ZSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE3MTQtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjIxLjQ5MTE1OTU3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzY1MDAxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IENncm91cCBSZXNpemluZyoqXG5cbk9rYXksIHNvIGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgIGlzIHRyaWdnZXJlZCBieSBgbWVtX2Nncm91cF93cml0ZWAuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSB0aGluZyB0aGF0IHNpZ25hbHMgYSBwb3RlbnRpYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbGltaXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmVmb3JlIHdlIGdvIGZ1cnRoZXIsIHdlICphYnNvbHV0ZWx5KiBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAuIFRoZSBsb2dpYyBhcm91bmQgZm9yY2VkIGVtcHRpbmcgaXMgY3J1Y2lhbCB3aGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVzaXppbmcgbWVtb3J5IGNncm91cHMuIEFueSBwb3RlbnRpYWwgY29uZmxpY3QgbXVzdCBiZSBjYXJlZnVsbHkgaGFuZGxlZCBoZXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB3ZSBuZWVkIHRvIHJlbGVhc2UgcGFnZXMsIG9yIHJlY2xhaW0gbWVtb3J5LCBiZWZvcmUgd2Ugc3RhcnQgdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIG1lbW9yeSBsaW1pdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MjQuNjY3NjYxNzY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MzgzNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xNDgxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQyLSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxNTQzOnN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC12MS5jLTE1NDQte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE1NjctXFxubW0vbWVtY29udHJvbC12MS5jOjE1Njg6c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF9mb3JjZV9lbXB0eV93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxubW0vbWVtY29udHJvbC12MS5jLTE1NjktXFx0XFx0XFx0XFx0XFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTc1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxNTc2OlxcdHJldHVybiBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KG1lbWNnKSA/OiBuYnl0ZXM7XFxubW0vbWVtY29udHJvbC12MS5jLTE1NzctfVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIwNzQ9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTIxMDktXFx0XFx0Lm5hbWUgPSBcXFwiZm9yY2VfZW1wdHlcXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTEwOlxcdFxcdC53cml0ZSA9IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfd3JpdGUsXFxubW0vbWVtY29udHJvbC12MS5jLTIxMTEtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MjQuNzY1MDQ5ODk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzMyMzgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIG1lbW9yeSBjZ3JvdXBzIGFuZCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENncm91cCBGb3JjZSBFbXB0eSBGbG93KipcblxuUmlnaHQsIHNvIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCBpcyBjYWxsZWQgYnkgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfd3JpdGVgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgdHJpZ2dlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHpvb20gaW4gb24gdGhlIGZhY3RvcnMgdGhhdCBpbmZsdWVuY2UgdGhpcyBlbXB0eWluZyBwcm9jZXNzLCBhbmQgdGhhdCBtZWFucyBsb29raW5nIGF0IHRoZSBtZW1vcnkgbGltaXRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZHJpdmluZyB0aGlzIGFjdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgIGNvbWUgaW50byBwbGF5IGluIHRoaXMgY29udGV4dC4gVGhlc2UgYXJlIHRoZSBrZXkgbGV2ZXJzLCB0aGUgdXBwZXIgYm91bmRzLCB0aGUgY29uc3RyYWludHMgdGhhdCBhcmUgbGlrZWx5IGluc3RpZ2F0aW5nIHRoZSBmb3JjZWQgZW1wdHlpbmcsIG9yIHBlcmhhcHMgaW5mbHVlbmNpbmcgaG93IGl0IGJlaGF2ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSBsaW1pdCB3cml0ZXMgYW5kIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTQ1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MjcuOTkyMzc1NzQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDA1NDk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnlfaGlnaF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQ3NjI9c3RhdGljIGludCBtZW1vcnlfaGlnaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NzY3LVxcbm1tL21lbWNvbnRyb2wuYzo0NzY4OnN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG5tbS9tZW1jb250cm9sLmMtNDc2OS1cXHRcXHRcXHRcXHQgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwMDg9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTAzNy1cXHRcXHQuc2VxX3Nob3cgPSBtZW1vcnlfaGlnaF9zaG93LFxcbm1tL21lbWNvbnRyb2wuYzo1MDM4OlxcdFxcdC53cml0ZSA9IG1lbW9yeV9oaWdoX3dyaXRlLFxcbm1tL21lbWNvbnRyb2wuYy01MDM5LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjI4LjA3MjQzODY5MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODk5Njc0NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSdtIGxvb2tpbmcgYXQgdGhpcyBmcm9tIGEgc3lzdGVtIG1lbW9yeSBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipNZW1vcnkgV3JpdGUgUGF0aCBCcmVha2Rvd24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGNsZWFyIHJlbGF0aW9uc2hpcCBoZXJlLiBXZSd2ZSBnb3QgdGhyZWUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBob3cgdGhleSBsaW5rIHVwLCBlc3BlY2lhbGx5IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBhIG1lbW9yeSBzdWJzeXN0ZW0gb3BlcmF0ZXMuIGBtZW1vcnlfaGlnaF93cml0ZWAgaXMgY2FsbGVkLCBhbmQgdGhlIGxpa2VseSBjb250ZXh0IGlzIHdpdGhpbiB0aGUgY2dyb3VwIHYyIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYG1lbW9yeV9maWxlc2AuIFRoaXMgcG9pbnRzIHRvIHRoZSBtZWNoYW5pc21zIHVzZWQgdG8gY29udHJvbCB3cml0ZSBvcGVyYXRpb25zIGluIHRoZSBtZW1vcnkgc3Vic3lzdGVtLiBUaGlzIHN1Z2dlc3RzIGFuIGFjdGl2ZSByb2xlIGluIGhvdyB3cml0ZXMgYXJlIGhhbmRsZWQgcmVsYXRpdmUgdG8gYSBjZ3JvdXAncyBtZW1vcnkgbGltaXRzLiBJJ20gaW1hZ2luaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFkanVzdGluZyB0aHJlc2hvbGRzLCBwZXJoYXBzIHRyaWdnZXJpbmcgc29tZSBhY3Rpb24gYXMgYSBsaW1pdCBpcyBhcHByb2FjaGVkLlxuXG5TaW1pbGFybHksIHdlIGhhdmUgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbHNvIG9yaWdpbmF0aW5nIGZyb20gYG1lbW9yeV9maWxlc2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgc3VzcGVjdCB0aGF0IHRoZXNlIHR3byBmdW5jdGlvbnMgd29yayBpbiBjb25jZXJ0LiBgbWVtb3J5X21heF93cml0ZWAgaXMgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyB0aGUgYWJzb2x1dGUgbWF4aW11bSB3cml0ZSBsaW1pdC4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpcyBwcm9iYWJseSBjb3JlIHRvIGhvdyBjZ3JvdXBzIGVuZm9yY2UgbWVtb3J5IGxpbWl0cy5cblxuVGhlIHRoaXJkIHBpZWNlIG9mIHRoaXMgcHV6emxlIGlzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhpcyBvbmUncyBjYWxsZWQgZnJvbSBgbWVtb3J5X3JlY2xhaW1gIHdpdGhpbiB0aGUgYG1tL21lbWNvbnRyb2wuY2AgZmlsZS4gVGhpcyBtZWFucyB3ZSdyZSBkZWx2aW5nIGludG8gdGhlIGhlYXJ0IG9mIG1lbW9yeSByZWNsYWltIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGlzIGFzIHRoZSBzeXN0ZW0gYmVpbmcgcHJvYWN0aXZlIGluIHJlY2xhaW1pbmcgbWVtb3J5IGZyb20gdXNlcnNwYWNlIHByb2Nlc3Nlcy4gRnJvbSB3aGVyZSBJIHNpdCwgdGhpcyBsaWtlbHkgbWVhbnMgdGhlIHN5c3RlbSBoYXMgc29tZSBmdW5jdGlvbiB3aGljaCBpbml0aWF0ZXMgcmVjbGFpbWluZyBtZW1vcnkgcHJvYWN0aXZlbHkuIEVzc2VudGlhbGx5LCBpdCBhcHBlYXJzIHRoYXQgdGhpcyBmdW5jdGlvbiBpbml0aWF0ZXMgcmVjbGFpbSBldmVudHMgdGhhdCBhcmUgZGVzaWduZWQgdG8gYXZvaWQgdGhlIHN5c3RlbSBiZWluZyBvdmVybG9hZGVkLCB3aXRoIHRoZSBpbnRlbnRpb24gb2YgcHJlZW1wdGl2ZWx5IGZyZWVpbmcgdXAgbWVtb3J5LlxuXG5TbywgaW4gZXNzZW5jZSwgd2UgaGF2ZSBhIGNsZWFyIHBpY3R1cmUuIFdyaXRlcywgcGFydGljdWxhcmx5IHVuZGVyIGNncm91cCB2MiwgYXJlIGNvbnRyb2xsZWQsIGFuZCBtZW1vcnkgcmVjbGFpbSBpcyBiZWluZyBhY3RpdmVseSBtYW5hZ2VkIHRvIHRyeSBhbmQga2VlcCB0aGUgc3lzdGVtIHVuZGVyIGNvbnRyb2wuIEEgc2ltcGxlIHZpZXcsIHRoYXQgaXMgZnVuZGFtZW50YWwgdG8gbW9zdCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHdlbGwgdW5kZXJzdG9vZCBieSBhIHNlYXNvbmVkIGV4cGVydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MjozMi45NzIxMTYxNjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzM4MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9NjMxPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcXG5tbS9pbnRlcm5hbC5oOjYzMjppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vaW50ZXJuYWwuaC02MzMtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00OTk1PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwMDAtXFxubW0vbWVtY29udHJvbC5jOjUwMDE6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcXG5tbS9tZW1jb250cm9sLmMtNTAwMi1cXHRpZiAocmV0KVxcbi0tXFxubW0vdm1zY2FuLmM9Nzg2MD1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY1LVxcbm1tL3Ztc2Nhbi5jOjc4NjY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NjctXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MjozMy4wNTg4NjA2MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0Mzg2OTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgQ29udHJvbCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAsIGBtZW1vcnlfaGlnaF93cml0ZWAsIGBtZW1vcnlfbWF4X3dyaXRlYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gUmlnaHQsIGxldCdzIHNlZSB3aGVyZSB0aGV5J3JlIGRlZmluZWQuIEFoLCBoZXJlJ3MgdGhlIGxheW91dDogYG1lbV9jZ3JvdXBfcmVzaXplX21heGAgYW5kIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCBhcmUgc3RhdGljIHdpdGhpbiBgbW0vbWVtY29udHJvbC12MS5jYCwgd2hpbGUgYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgIGFyZSBzdGF0aWMgdG8gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgZ2xvYmFsIGluIGBtbS92bXNjYW4uY2AuIEdvdCBpdC5cblxuTm93LCBsZXQgbWUgY29uZmlybSBpZiBgbWVtY2dfaXNfZHlpbmdgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gR29vZCwgaXQgbG9va3MgbGlrZSBpdCdzIGRlZmluaXRlbHkgY2FsbGVkIHdoZW4gaGFuZGxpbmcgd3JpdGVzIHRvIHRoZSBjZ3JvdXAgZmlsZXMgSSdtIGNvbmNlcm5lZCB3aXRoIOKAkyBgbWVtb3J5LmhpZ2hgLCBgbWVtb3J5Lm1heGAsIGBtZW1vcnkucmVjbGFpbWAsIGBtZW1vcnkuZm9yY2VfZW1wdHlgLCBhbmQgYG1lbW9yeS5saW1pdF9pbl9ieXRlc2AuIFRoYXQncyBpbXBvcnRhbnQuIEl0IGNvbmZpcm1zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwZnMgaW50ZXJmYWNlLiBJIGNhbiB0cmlnZ2VyIHRoaXMgdGhyb3VnaCB3cml0aW5nIHRvIHRob3NlIGZpbGVzLlxuXG5BbHJpZ2h0LCBmaW5hbGx5LCB0aGUgcHJlcmVxdWlzaXRlIGNvbmZpZ3MgZm9yIHRoaXMgYXJlIGNsZWFybHkgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYE1FTUNHX1YxYCBpcyBhIHZhbGlkIGNvbmZpZyBvcHRpb24gdG8gZW5zdXJlIEknbSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMyOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MjozOC40MDI3MzI2MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDY4OTE2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHX1YxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA4OT1jb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMDk3LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjQwLjYwOTYzMjU0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI2OTc4ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHNvIGBNRU1DR19WMWAgaXMgZGVmaW5pdGVseSBhIGNvbmNyZXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgb2YgY291cnNlLCBgTUVNQ0dgIGl0c2VsZiBpcyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gdG9vLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBhcmUgbGV2ZXJhZ2VkIGluIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5UaW1lIHRvIGRpdmUgaW50byB0aGUgY29yZS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgY2hlY2sgb3V0IGhvdyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciByZWNsYWltIG1lY2hhbmlzbXMuIFRoYXQgYXJlYSB3YXJyYW50cyBhIGRlZXAgbG9vaywgZ2l2ZW4gdGhlIGNvbnRleHQuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGZpbmVyIHBvaW50cyBvZiBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhvc2UgY29uZmlndXJhdGlvbiBmbGFncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1Mjo0My45MzY2MTQzODlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDYwMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Nzg2MD1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY1LVxcbm1tL3Ztc2Nhbi5jOjc4NjY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NjctXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1Mjo0My45OTY2ODE0NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczNjgxMTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRm9jdXMgU3ltYm9scyBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmb2N1cyBzeW1ib2xzIHRoYXQgYXJlIGd1aWRpbmcgU3l6a2FsbGVyOiBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCwgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgLCBgbWVtb3J5X2hpZ2hfd3JpdGVgLCBgbWVtb3J5X21heF93cml0ZWAsIGFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMsIHdhaXQsIGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgIGlzIHN0YXRpYyEgSSBrbm93IFN5emthbGxlciBpcyBwcmltYXJpbHkgYSBzeXNjYWxsIGZ1enplciwgYnV0IGNhbiBpdCBhY3R1YWxseSAqZnV6eiogc3RhdGljIGZ1bmN0aW9ucz8gSXQncyBtb3JlIGFib3V0IGNvZGUgY292ZXJhZ2UsIHJpZ2h0PyBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdXNlZCB0byBkaXJlY3QgdGhlIGZ1enplciB0byBzcGVjaWZpYyBjb2RlIHBhdGhzLCB0byBnZXQgdGhlIGZ1enplciBpbnRvIHRoZXNlIHNwZWNpZmljIGFyZWFzLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBzeXotbWFuYWdlcmAgdXNlcyB0aGVzZSBzeW1ib2xzIGZvciBmb2N1cywgYW5kIHRoYXQgU3l6a2FsbGVyICpjYW4qIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zLCBwcm92aWRlZCB0aGV5J3JlIHByZXNlbnQgaW4gdGhlIHN5bWJvbCB0YWJsZSwgdGhpbmdzIGxpa2UgYGthbGxzeW1zYC4gR2VuZXJhbGx5LCB0aGF0IHNob3VsZG4ndCBiZSBhIHByb2JsZW0gZm9yIHN0YXRpYyBmdW5jdGlvbnMsIHRob3VnaCBpdCdzIGFsd2F5cyBnb29kIHRvIHZlcmlmeS5cblxuTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGEgY291cGxlIG9mIHRoaW5ncywgc3BlY2lmaWNhbGx5IHRoZSBjb25maWdzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgIGFyZSBlbmFibGVkLiBUaGVuLCB0aGUgbmV4dCBpbXBvcnRhbnQgdGhpbmcgaXMgdG8gY29uZmlybSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB1bmRlciBgQ09ORklHX01FTUNHYC4gVGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSW4gYG1tL3Ztc2Nhbi5jYCwgSSBuZWVkIHRvIHNlZSBpZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBvciB1bmNvbmRpdGlvbmFsbHkuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0OTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6NDkuNzMzNDk0ODg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTIxNDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc4NjA9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg2NS1cXG5tbS92bXNjYW4uYzo3ODY2OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODY3LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMTI9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDE3LVxcbm1tL3Ztc2Nhbi5jOjgwMTg6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwMTktXFx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6NDkuNzkyNzE2ODQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDEwODY0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBjb2RlIGJsb2NrIGlzIHdyYXBwZWQgd2l0aGluIGFuIGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJdCdzIGNydWNpYWwgZm9yIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCB2YXJpYWJpbGl0eSBvZiB0aGlzIHZhcmlhYmxlJ3MgaW5jbHVzaW9uLiBEZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50IG9yIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCB0aGlzIGNvZGUgbWlnaHQgYmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQuIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSB3aXRoaW4gYW55IGNvbmRpdGlvbmFsIGJsb2NrcyBiZWZvcmUgSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggYW55IGFuYWx5c2lzIG9yIGZ1cnRoZXIgaW1wbGVtZW50YXRpb24gc3RlcHMgdGhhdCByZWx5IG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjUyLjczMzgwNTM4MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxMjcxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc0PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbi0tXFxubW0vdm1zY2FuLmMtMTgxLVxcbm1tL3Ztc2Nhbi5jOjE4MjojaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXFxubW0vdm1zY2FuLmMtMTgzLSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS92bXNjYW4uYz0xOTk9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcXG5tbS92bXNjYW4uYy0yMDAtXFxubW0vdm1zY2FuLmM6MjAxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMDItXFxuLS1cXG5tbS92bXNjYW4uYz0yMzE9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzNC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS92bXNjYW4uYzoyMzU6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vdm1zY2FuLmMtMjM2LVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbi0tXFxubW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzAtXFxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzMi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMjg1LVxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbm1tL3Ztc2Nhbi5jOjEyODY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3Ztc2Nhbi5jLTEyODctXFx0XFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikge1xcbi0tXFxubW0vdm1zY2FuLmM9MjYxMz1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjYyNC1cXG5tbS92bXNjYW4uYzoyNjI1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2MjYtXFxubW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjI4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjYyOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2Nzc9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtMjY4MC1cXG5tbS92bXNjYW4uYzoyNjgxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yNjgyLVxcdGlmIChtZW1jZykge1xcbi0tXFxubW0vdm1zY2FuLmM9MjgwOT1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MjgtXFxubW0vdm1zY2FuLmM6MjgyOTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjgzMC1cXG5tbS92bXNjYW4uYz0yODMxPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yODM3LVxcbm1tL3Ztc2Nhbi5jOjI4Mzg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4MzktXFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9Mjg3MT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg3Ny1cXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VscnVfZ2VuLmxpc3QpKTtcXG5tbS92bXNjYW4uYzoyODc4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODc5LVxcdFZNX1dBUk5fT05fT05DRShtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODk4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTA2LVxcbm1tL3Ztc2Nhbi5jOjI5MDc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5MDgtXFx0bWVtY2cgPSBtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzAtXFxubW0vdm1zY2FuLmM6MjkzMTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkzMi1cXHRtZW1fY2dyb3VwX3B1dChtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yOTM2LVxcbm1tL3Ztc2Nhbi5jOjI5Mzc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5Mzgtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYz00MzA3PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDM1Mi1cXG5tbS92bXNjYW4uYzo0MzUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy00MzU0LVxcbi0tXFxubW0vdm1zY2FuLmM9NTUxMj1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vdm1zY2FuLmMtNTUyNS1cXG5tbS92bXNjYW4uYzo1NTI2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01NTI3LVxcdFxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3Nzg9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3OTctXFxubW0vdm1zY2FuLmM6NTc5ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNTc5OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2NzY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02NzE4LVxcbm1tL3Ztc2Nhbi5jOjY3MTk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTY3MjAtXFxuLS1cXG5tbS92bXNjYW4uYz03NTQ2PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NTAtXFxubW0vdm1zY2FuLmM6NzU1MTojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXFxubW0vdm1zY2FuLmMtNzU1Mi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9NzYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03NjQwLVxcdH0sXFxubW0vdm1zY2FuLmM6NzY0MTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03NjQyLVxcdHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc2NjQ9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxubW0vdm1zY2FuLmMtNzY2NS1cXG5tbS92bXNjYW4uYzo3NjY2OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3Ztc2Nhbi5jLTc2NjctLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6NTIuNzg3OTM2NjU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDY1NDAxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzbid0IGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLiBUaGF0J3MgYSBiaXQgb2RkLiBCdXQgaG9sZCBvbiwgaXQgdGFrZXMgYSBgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnYCBhcyBhbiBhcmd1bWVudC4gSG1tLCBpcyBgc3RydWN0IG1lbV9jZ3JvdXBgIGV2ZW4gKmRlZmluZWQqIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQ/IEknbSBwcmV0dHkgc3VyZSBpdCBpcywgZWl0aGVyIGFzIGFuIG9wYXF1ZSBvciBlbXB0eSBzdHJ1Y3QsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gYW5kIGltcGxlbWVudGF0aW9uLlxuXG5CdXQgd2FpdCwgdGhpcyBmdW5jdGlvbiAqY2FsbHMqIGBtZW1jZ19pc19keWluZyhtZW1jZylgLiBOb3cgdGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50LiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGJlaGF2ZXMgYXMgZXhwZWN0ZWQgd2hlbiBtZW1jZyBpcyBlaXRoZXIgZW1wdHkgb3IgdW5hdmFpbGFibGUuIExldCdzIGRpZyBpbnRvIHRoZSBgbWVtY2dfaXNfZHlpbmdgIGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUgbWVtb3J5IGNncm91cCBpbmZyYXN0cnVjdHVyZSBpc24ndCBmdWxseSBlbmFibGVkLiBUaGF0J3Mgd2hlcmUgdGhlIHBvdGVudGlhbCBnb3RjaGEgbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyOTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6NTYuNTM0NDc4OTA3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzNjMyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2dfaXNfZHlpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc2Mz12b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzY1OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODM3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODQwLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4NDE6c3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6NTYuNjg0ODQ2NDUyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDUyODMyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYG1lbWNnX2lzX2R5aW5nYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBtZW1jZ19pc19keWluZ2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gZm9yIG1lIGlzIHdoZXRoZXIgYENPTkZJR19NRU1DR2AgaGFzIHRvIGJlIGVuYWJsZWQgZm9yIGBtZW1jZ19pc19keWluZ2AgdG8gYWN0dWFsbHkgYmUgKmZ1bmN0aW9uYWwqLiBJJ20gYmV0dGluZyB0aGF0IGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBkaXNhYmxlZCB2aWEgY29uZmlndXJhdGlvbiwgdGhpcyBmdW5jdGlvbiB3aWxsIHNpbXBseSByZXR1cm4gYGZhbHNlYC4gSXQgd291bGQgbWFrZSBzZW5zZSBhcyB0aGUgbWVjaGFuaXNtIGlzIG5vdCBzZXQuIFRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLCBJIHNob3VsZCBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBhbmQgc2VlIGhvdyBpdCdzIGRlZmluZWQgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGluIGFuZCBjb25maXJtIHRoZSBkZXRhaWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg1OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUzOjAwLjA5MDEzMTc2OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0Njk1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2dfaXNfZHlpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc2Mz12b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzY1OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODM3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODQwLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4NDE6c3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTM6MDAuMTQzNjA2NTAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDgzNDQ5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgY3VycmVudCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBtZW1jb250cm9sLmgqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIGluIG9uIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMTc2NSBhbmQgMTg0MS4gQmFzZWQgb24gbXkgZXhpc3RpbmcgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHN1YnN5c3RlbSwgdGhlc2UgbG9jYXRpb25zIGFyZSBsaWtlbHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgaW1wbGVtZW50ZWQsIHBlcmhhcHMgaG93IHJlc291cmNlcyBhcmUgYWNjb3VudGVkIG9yIGhvdyBsaW1pdGF0aW9ucyBhcmUgZW5mb3JjZWQuIExldCdzIHNlZSB3aGF0J3MgY29kZWQgaW4gdGhlc2Ugc3BlY2lmaWMgbG9jYXRpb25zLiBJIGFudGljaXBhdGUgSSdsbCBwcm9iYWJseSBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgY29yZSBsb2dpYyBpbnRlcnNlY3RzIHdpdGggYSBzcGVjaWZpYyBmZWF0dXJlIG9yIGZ1bmN0aW9uLiBJJ20ga2VlbiB0byBkZWNpcGhlciB0aGUgbnVhbmNlcyBoaWRkZW4gd2l0aGluIHRoaXMgY3J1Y2lhbCBoZWFkZXIgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MzowMy4yNTE5NTMzOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTc2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0XFxuMTc2MTpcXHR2b2lkIG1lbV9jZ3JvdXBfbm9kZV9maWx0ZXJfYWxsb3dlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIG5vZGVtYXNrX3QgKm1hc2spO1xcbjE3NjI6XFx0XFxuMTc2MzpcXHR2b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuMTc2NDpcXHRcXG4xNzY1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuMTc2NjpcXHR7XFxuMTc2NzpcXHRcXHRyZXR1cm4gbWVtY2cgPyBjc3NfaXNfZHlpbmcoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpIDogZmFsc2U7XFxuMTc2ODpcXHR9XFxuMTc2OTpcXHRcXG4xNzcwOlxcdCNlbHNlXFxuMTc3MTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKHZvaWQpXFxuMTc3MjpcXHR7XFxuMTc3MzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNzc0OlxcdH1cXG4xNzc1OlxcdFxcbjE3NzY6XFx0c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxcbjE3Nzc6XFx0XFx0XFx0XFx0XFx0XFx0IGludCBvcmRlcilcXG4xNzc4OlxcdHtcXG4xNzc5OlxcdFxcdHJldHVybiAwO1xcbjE3ODA6XFx0fVxcbjE3ODE6XFx0XFxuMTc4MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxuMTc4MzpcXHR7XFxuMTc4NDpcXHR9XFxuMTc4NTpcXHRcXG4xNzg2OlxcdHN0YXRpYyBpbmxpbmUgaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxcbjE3ODc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50IG9yZGVyKVxcbjE3ODg6XFx0e1xcbjE3ODk6XFx0XFx0cmV0dXJuIDA7XFxuMTc5MDpcXHR9XFxuMTc5MTpcXHRcXG4xNzkyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxcbjE3OTM6XFx0e1xcbjE3OTQ6XFx0fVxcbjE3OTU6XFx0XFxuMTc5NjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTc5NzpcXHR7XFxuMTc5ODpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNzk5OlxcdH1cXG4xODAwOlxcdFxcbjE4MDE6XFx0c3RhdGljIGlubGluZSBib29sIG1lbWNnX2JwZl9lbmFibGVkKHZvaWQpXFxuMTgwMjpcXHR7XFxuMTgwMzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTgwNDpcXHR9XFxuMTgwNTpcXHRcXG4xODA2OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKVxcbjE4MDc6XFx0e1xcbjE4MDg6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE4MDk6XFx0fVxcbjE4MTA6XFx0XFxuMTgxMTpcXHRzdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4xODEyOlxcdHtcXG4xODEzOlxcdFxcdHJldHVybiAtMTtcXG4xODE0OlxcdH1cXG4xODE1OlxcdFxcbjE4MTY6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcXG4xODE3OlxcdHtcXG4xODE4OlxcdFxcdHJldHVybiBOVUxMO1xcbjE4MTk6XFx0fVxcbjE4MjA6XFx0XFxuMTgyMTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfb2JqY2dfZXZlbnRzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4xODIyOlxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXFxuMTgyMzpcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGNvdW50KVxcbjE4MjQ6XFx0e1xcbjE4MjU6XFx0fVxcbjE4MjY6XFx0XFxuMTgyNzpcXHRzdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4xODI4OlxcdHtcXG4xODI5OlxcdFxcdHJldHVybiAwO1xcbjE4MzA6XFx0fVxcbjE4MzE6XFx0XFxuMTgzMjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9ub2RlX2ZpbHRlcl9hbGxvd2VkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4xODMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbWFzaylcXG4xODM0OlxcdHtcXG4xODM1OlxcdH1cXG4xODM2OlxcdFxcbjE4Mzc6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4xODM4OlxcdHtcXG4xODM5OlxcdH1cXG4xODQwOlxcdFxcbjE4NDE6XFx0c3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4xODQyOlxcdHtcXG4xODQzOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xODQ0OlxcdH1cXG4xODQ1OlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG4xODQ2OlxcdFxcbjE4NDc6XFx0I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcXG4xODQ4OlxcdGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcXG4xODQ5OlxcdHZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSk7XFxuMTg1MDpcXHR2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSk7XFxuMTg1MTpcXHRib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4xODUyOlxcdCNlbHNlXFxuMTg1MzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbjE4NTQ6XFx0e1xcbjE4NTU6XFx0XFx0cmV0dXJuIHRydWU7XFxuMTg1NjpcXHR9XFxuMTg1NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbjE4NTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZV90IHNpemUpXFxuMTg1OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUzOjAzLjI1MjA3Mjk0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzA5NjYzNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtY2cgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGllZCB0byBgQ09ORklHX01FTUNHYC4gVGhhdCdzIGEgZ2l2ZW4uIEFuZCBzaW5jZSBpdCdzIHRvdWNoaW5nIGBtbS9tZW1jb250cm9sLXYxLmNgLCBJJ20gZ29pbmcgdG8gbmVlZCBgQ09ORklHX01FTUNHX1YxYCBlbmFibGVkIGFzIHdlbGwgdG8gZnVsbHkgdGVzdCB0aGUgY2hhbmdlcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyBjb21waWxlZCB1bmRlciBgQ09ORklHX01FTUNHX1YxYC4gU28gYm90aCBhcmUgcmVxdWlyZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcmVhY2hhYmlsaXR5IG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gSXQncyBjYWxsZWQgZnJvbSBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaGFuZGxlcyBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGVYL3JlY2xhaW1gLCBhbmQgYWxzbyBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIGZvciB0aGUgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlLiBHb29kLCBib3RoIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBUaGF0J3Mgd2hhdCBJIG5lZWRlZCB0byBrbm93LlxuXG5GdW5jdGlvbmFsbHksIHRoZSBwYXRjaCBzZWVtcyBzb3VuZC4gSXQncyBhZGRpbmcgY3J1Y2lhbCBjaGVja3MgdG8gaGFuZGxlIG1lbWNnIGRlc3RydWN0aW9uIGdyYWNlZnVsbHksIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzIG9yIHN0YWxscyB3aGVuIHRob3NlIG9wZXJhdGlvbnMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LiBUaGF0J3MgYSBjb21tb24gaXNzdWUgd2l0aCBjb25jdXJyZW50IG9wZXJhdGlvbnMgb24gc2hhcmVkIHJlc291cmNlcy4gU21hcnQsIHRoaXMgaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC5cblxuSSBuZWVkIHRvIGtlZXAgdGhlc2Ugc3ltYm9scyBpbiBtaW5kIGFzIEkgZGl2ZSBkZWVwZXI6IGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAsIGBtZW1vcnlfaGlnaF93cml0ZWAsIGBtZW1vcnlfbWF4X3dyaXRlYCwgYW5kIG9mIGNvdXJzZSwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZz8gTG9va3MgbGlrZSBqdXN0IGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYCwgd2hpY2ggaXMgd2hhdCBJIHRob3VnaHQuXG5cblF1aWNrIHNhbml0eSBjaGVjazogSXMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYW55dGhpbmcgZWxzZT8gSW4gYG1tL3Ztc2Nhbi5jYCwgYHJlY2xhaW1fc3RvcmVgIGlzIHVuZGVyIGBDT05GSUdfTlVNQWAsIEkgd29uZGVyIGlmIHRoYXQgYWZmZWN0cyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUzOjA5Ljk2MTczOTM0MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzExMzA2MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjbGFpbV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MDA5PUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTEtI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbm1tL3Ztc2Nhbi5jOjgwMTI6c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxubW0vdm1zY2FuLmMtODAxMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MzoxMC4wMzI4NzQ5MjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMDE5MDMwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgUmVjbGFpbSBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpbnRlcmFjdHMgd2l0aCB2YXJpb3VzIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCBgcmVjbGFpbV9zdG9yZWAgcmVsaWVzIG9uIGJvdGggYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAsIHdoaWNoIG1ha2VzIHNlbnNlOyBOVU1BIHN5c3RlbXMgb2Z0ZW4gYmVuZWZpdCBmcm9tIHByb2FjdGl2ZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHN5c2ZzIHByb3ZpZGVzIHRoZSBpbnRlcmZhY2UuXG5cbkJ1dCBoZXJlJ3MgYSB3cmlua2xlOiBJJ20gYWxzbyBmaW5kaW5nIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBBbmQgKnRoYXQqIGlzIGdvdmVybmVkIGJ5IGBDT05GSUdfTUVNQ0dgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgZXZlbiBpZiBgQ09ORklHX1NZU0ZTYCBvciBgQ09ORklHX05VTUFgIGFyZW4ndCBlbmFibGVkLCBpZiBgQ09ORklHX01FTUNHYCBpcywgSSBjYW4gc3RpbGwgdHJpZ2dlciBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24uIElmIGBDT05GSUdfTUVNQ0dgICppc24ndCogZW5hYmxlZCwgaXMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGV2ZW4gY29tcGlsZWQgaW4/IEl0J3MgYSBjcml0aWNhbCBkZXBlbmRlbmN5IEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBtbS92bXNjYW4uY2AgYXJvdW5kIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZGVmaW5pdGlvbiB0byBjb25maXJtIHRoaXMuIEdvdHRhIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBwcmVwcm9jZXNzb3IgbG9naWMgdGhhdCBtaWdodCBjb25kaXRpb25hbGx5IGluY2x1ZGUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUzOjE0LjE1MzA2NzExOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjYyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg1NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg1NTpcXHRlbnVtIHtcXG43ODU2OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxcbjc4NTc6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuNzg1ODpcXHRcXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxcbjc4NTk6XFx0fTtcXG43ODYwOlxcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG43ODYxOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXFxcInN3YXBwaW5lc3M9JWRcXFwifSxcXG43ODYyOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFxcXCJzd2FwcGluZXNzPW1heFxcXCJ9LFxcbjc4NjM6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXFxuNzg2NDpcXHR9O1xcbjc4NjU6XFx0XFxuNzg2NjpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzg2NzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuNzg2ODpcXHR7XFxuNzg2OTpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuNzg3MDpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7XFxuNzg3MTpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbjc4NzI6XFx0XFx0Y2hhciAqb2xkX2J1ZiwgKnN0YXJ0O1xcbjc4NzM6XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjc4NzQ6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xcbjc4NzU6XFx0XFxuNzg3NjpcXHRcXHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IHBnZGF0KSlcXG43ODc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4Nzg6XFx0XFxuNzg3OTpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc4ODA6XFx0XFxuNzg4MTpcXHRcXHRvbGRfYnVmID0gYnVmO1xcbjc4ODI6XFx0XFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XFxuNzg4MzpcXHRcXHRpZiAoYnVmID09IG9sZF9idWYpXFxuNzg4NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43ODg1OlxcdFxcbjc4ODY6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG43ODg3OlxcdFxcbjc4ODg6XFx0XFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcXHUwMDI2YnVmLCBcXFwiIFxcXCIpKSAhPSBOVUxMKSB7XFxuNzg4OTpcXHRcXHRcXHRpZiAoIXN0cmxlbihzdGFydCkpXFxuNzg5MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43ODkxOlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4oc3RhcnQsIHRva2VucywgYXJncykpIHtcXG43ODkyOlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcXG43ODkzOlxcdFxcdFxcdFxcdGlmIChtYXRjaF9pbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZzd2FwcGluZXNzKSlcXG43ODk0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4OTU6XFx0XFx0XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxcbjc4OTY6XFx0XFx0XFx0XFx0ICAgIHN3YXBwaW5lc3MgXFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcXG43ODk3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4OTg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzg5OTpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxcbjc5MDA6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbjc5MDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzkwMjpcXHRcXHRcXHRkZWZhdWx0Olxcbjc5MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzkwNDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUzOjE0LjE1MzMzNDY3OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDI0NTc0ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNvbXBpbGVkIHJlZ2FyZGxlc3MuIFRoYXQncyBhIGdpdmVuLiBIb3dldmVyLCB0aGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBgaWYgKG1lbWNnIFx1MDAyNlx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpYCB3aGljaCByZWxpZXMgb24gYG1lbWNnX2lzX2R5aW5nYCBldmFsdWF0aW5nIHRvIHRydWUuIEFuZCBgbWVtY2dfaXNfZHlpbmdgJ3MgcmV0dXJuIGRlcGVuZHMgb24gYENPTkZJR19NRU1DR2AgYmVpbmcgZW5hYmxlZC5cblxuVGhlcmVmb3JlLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgZGVmaW5pdGl2ZWx5IGBNRU1DR2AgYW5kIGBNRU1DR19WMWAuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBmb2N1cyBzeW1ib2xzLCBJJ3ZlIGdvdDogYG1lbV9jZ3JvdXBfcmVzaXplX21heGAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLlxuXG5JJ3ZlIGNoZWNrZWQsIGFuZCB0aG9zZSBhcmUgYWxsIHRoZSBjb3JyZWN0IHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC12MS5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGVzZSBhcmUgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQsIGNydWNpYWxseSwgYXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBjZ3JvdXBmcy4gVGhpcyBtYWtlcyB0aGVtIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24gaXM6XG5cbldvcnRoRnV6emluZzogdHJ1ZVxuRm9jdXNTeW1ib2xzOiBbXCJtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhcIiwgXCJtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5XCIsIFwibWVtb3J5X2hpZ2hfd3JpdGVcIiwgXCJtZW1vcnlfbWF4X3dyaXRlXCIsIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiXVxuRW5hYmxlQ29uZmlnczogW1wiTUVNQ0dcIiwgXCJNRU1DR19WMVwiXVxuUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBhZGRzIGNoZWNrcyBmb3IgZHlpbmcgbWVtb3J5IGNncm91cHMgaW4gc2V2ZXJhbCBjZ3JvdXAgd3JpdGUgaGFuZGxlcnMgYW5kIHByb2FjdGl2ZSByZWNsYWltIHBhdGhzIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgb3Igc3RhbGxzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlYXJseS1leGl0IHBhdGhzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzExNCwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MzoyMS4xNzc5MTE2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDAwMzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhcIixcbiAgICBcIm1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlcIixcbiAgICBcIm1lbW9yeV9oaWdoX3dyaXRlXCIsXG4gICAgXCJtZW1vcnlfbWF4X3dyaXRlXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjaGVja3MgZm9yIGR5aW5nIG1lbW9yeSBjZ3JvdXBzIGluIHNldmVyYWwgY2dyb3VwIHdyaXRlIGhhbmRsZXJzIGFuZCBwcm9hY3RpdmUgcmVjbGFpbSBwYXRocyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIG9yIHN0YWxscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZWFybHktZXhpdCBwYXRocyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9yZXNpemVfbWF4XCIsXG4gICAgXCJtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5XCIsXG4gICAgXCJtZW1vcnlfaGlnaF93cml0ZVwiLFxuICAgIFwibWVtb3J5X21heF93cml0ZVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciBkeWluZyBtZW1vcnkgY2dyb3VwcyBpbiBzZXZlcmFsIGNncm91cCB3cml0ZSBoYW5kbGVycyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aHMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBvciBzdGFsbHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVhcmx5LWV4aXQgcGF0aHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8x56t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 01:42:42 +0000 UTC FinishedAt: 2026-06-30 01:53:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "f6a4ce46-a170-4bac-81dd-b3a042619c3f" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "mem_cgroup_resize_max", "mem_cgroup_force_empty", "memory_high_write", "memory_max_write", "user_proactive_reclaim" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtX2Nncm91cF9yZXNpemVfbWF4JiMzNDssCiAgICAmIzM0O21lbV9jZ3JvdXBfZm9yY2VfZW1wdHkmIzM0OywKICAgICYjMzQ7bWVtb3J5X2hpZ2hfd3JpdGUmIzM0OywKICAgICYjMzQ7bWVtb3J5X21heF93cml0ZSYjMzQ7LAogICAgJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciBkeWluZyBtZW1vcnkgY2dyb3VwcyBpbiBzZXZlcmFsIGNncm91cCB3cml0ZSBoYW5kbGVycyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aHMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBvciBzdGFsbHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVhcmx5LWV4aXQgcGF0aHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWM1YjRjMjRjNmZmMDc4MDE0Y2NlNmMxZDhhZmM3MzMyYWQxZGIwZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDAxOjUyOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuY1xuaW5kZXggNzY1MDY5MjExNTY3OGMuLmFkMjNkZTk4NWQ5YWYxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC0xNTEzLDYgJiM0MzsxNTEzLDkgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRpZiAoIXJldClcbiBcdFx0XHRicmVhaztcbiBcbiYjNDM7XHRcdGlmIChtZW1jZ19pc19keWluZyhtZW1jZykpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0aWYgKCFkcmFpbmVkKSB7XG4gXHRcdFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcbiBcdFx0XHRkcmFpbmVkID0gdHJ1ZTtcbkBAIC0xNTUxLDYgJiM0MzsxNTU0LDkgQEAgc3RhdGljIGludCBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdHJldHVybiAtRUlOVFI7XG4gXG4mIzQzO1x0XHRpZiAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4gXHRcdGlmICghdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgMSwgR0ZQX0tFUk5FTCxcbiBcdFx0XHRcdFx0XHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxuIFx0XHRcdG5yX3JldHJpZXMtLTtcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IGQyMGZmYzgyNzMwNmU5Li5hZDVmNmRmZGMwMjE0MyAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jXG5AQCAtNDc5NCw2ICYjNDM7NDc5NCw5IEBAIHN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdGJyZWFrO1xuIFxuJiM0MztcdFx0aWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRpZiAoIWRyYWluZWQpIHtcbiBcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuIFx0XHRcdGRyYWluZWQgPSB0cnVlO1xuQEAgLTQ4NDUsNiAmIzQzOzQ4NDgsOSBAQCBzdGF0aWMgc3NpemVfdCBtZW1vcnlfbWF4X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdGJyZWFrO1xuIFxuJiM0MztcdFx0aWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRpZiAoIWRyYWluZWQpIHtcbiBcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuIFx0XHRcdGRyYWluZWQgPSB0cnVlO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDc1NGM1ZjVkNzE2YWFkLi4wOTFiNjA5Y2YxYjFlYiAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTc5MTIsNiAmIzQzOzc5MTIsOSBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFxuJiM0MztcdFx0aWYgKG1lbWNnIFx1MDAyNlx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpXG4mIzQzO1x0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXG4gXHRcdCAqIGhvcGUgb2YgaW50cm9kdWNpbmcgbW9yZSBldmljdGFibGUgcGFnZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3Jlc2l6ZV9tYXgmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mb3JjZV9lbXB0eSYjMzQ7LAogICAgJiMzNDttZW1vcnlfaGlnaF93cml0ZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfbWF4X3dyaXRlJiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjaGVja3MgZm9yIGR5aW5nIG1lbW9yeSBjZ3JvdXBzIGluIHNldmVyYWwgY2dyb3VwIHdyaXRlIGhhbmRsZXJzIGFuZCBwcm9hY3RpdmUgcmVjbGFpbSBwYXRocyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIG9yIHN0YWxscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZWFybHktZXhpdCBwYXRocyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDFjNWI0YzI0YzZmZjA3ODAxNGNjZTZjMWQ4YWZjNzMzMmFkMWRiMGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1biAzMCAwMTo1MjowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuYwppbmRleCA3NjUwNjkyMTE1Njc4Yy4uYWQyM2RlOTg1ZDlhZjEgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmMKQEAgLTE1MTMsNiAmIzQzOzE1MTMsOSBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCWlmICghcmV0KQogCQkJYnJlYWs7CiAKJiM0MzsJCWlmIChtZW1jZ19pc19keWluZyhtZW1jZykpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWlmICghZHJhaW5lZCkgewogCQkJZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTsKIAkJCWRyYWluZWQgPSB0cnVlOwpAQCAtMTU1MSw2ICYjNDM7MTU1NCw5IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCXJldHVybiAtRUlOVFI7CiAKJiM0MzsJCWlmIChtZW1jZ19pc19keWluZyhtZW1jZykpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiAJCWlmICghdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZywgMSwgR0ZQX0tFUk5FTCwKIAkJCQkJCSAgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCwgTlVMTCkpCiAJCQlucl9yZXRyaWVzLS07CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggZDIwZmZjODI3MzA2ZTkuLmFkNWY2ZGZkYzAyMTQzIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC00Nzk0LDYgJiM0Mzs0Nzk0LDkgQEAgc3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLAogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlicmVhazsKIAomIzQzOwkJaWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJaWYgKCFkcmFpbmVkKSB7CiAJCQlkcmFpbl9hbGxfc3RvY2sobWVtY2cpOwogCQkJZHJhaW5lZCA9IHRydWU7CkBAIC00ODQ1LDYgJiM0Mzs0ODQ4LDkgQEAgc3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwogCiYjNDM7CQlpZiAobWVtY2dfaXNfZHlpbmcobWVtY2cpKQomIzQzOwkJCWJyZWFrOwomIzQzOwogCQlpZiAoIWRyYWluZWQpIHsKIAkJCWRyYWluX2FsbF9zdG9jayhtZW1jZyk7CiAJCQlkcmFpbmVkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggNzU0YzVmNWQ3MTZhYWQuLjA5MWI2MDljZjFiMWViIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNzkxMiw2ICYjNDM7NzkxMiw5IEBAIGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZiwKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FSU5UUjsKIAomIzQzOwkJaWYgKG1lbWNnICZhbXA7JmFtcDsgbWVtY2dfaXNfZHlpbmcobWVtY2cpKQomIzQzOwkJCXJldHVybiAtRUFHQUlOOwomIzQzOwogCQkvKgogCQkgKiBUaGlzIGlzIHRoZSBmaW5hbCBhdHRlbXB0LCBkcmFpbiBwZXJjcHUgbHJ1IGNhY2hlcyBpbiB0aGUKIAkJICogaG9wZSBvZiBpbnRyb2R1Y2luZyBtb3JlIGV2aWN0YWJsZSBwYWdlcy4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQyNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbWNnIER5aW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBmdW5jdGlvbmFsIGNoYW5nZSDigJMgdGhleSYjMzk7cmUgcHV0dGluZyBpbiBgbWVtY2dfaXNfZHlpbmcobWVtY2cpYCBjaGVja3MgaW4gYSBmZXcga2V5IHNwb3RzLiBNYWtlcyBzZW5zZTsgaWYgYSBtZW1jZyBpcyBiZWluZyB0b3JuIGRvd24sIHdlIGRvbiYjMzk7dCB3YW50IHRvIGtlZXAgdGhyYXNoaW5nIGFyb3VuZCB0cnlpbmcgdG8gZG8gdGhpbmdzIHRoYXQgYXJlIG5vdyBwb2ludGxlc3MsIG9yIHBvdGVudGlhbGx5IGV2ZW4gaGFybWZ1bC4gVGhleSYjMzk7dmUgdGFyZ2V0ZWQgc2V2ZXJhbCBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAgKGJvdGggaW4gYG1tL21lbWNvbnRyb2wtdjEuY2ApLCBgbWVtb3J5X2hpZ2hfd3JpdGVgLCBgbWVtb3J5X21heF93cml0ZWAgKGluIGBtbS9tZW1jb250cm9sLmNgKSwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCB3aGljaCBpcyBpbiBgbW0vdm1zY2FuLmNgLiAgQWxsIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCB3aXRoaW4gdGhlIGNncm91cC4gVGhlIGlkZWEgaXMgdG8gYmFpbCBlYXJseSBpbiB0aGVzZSBsb29wcyBvciBlYXJseSByZXR1cm5zIGlmIHRoZSB0YXJnZXQgbWVtY2cgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgZHlpbmcuCgpHaXZlbiB0aGUgc2NvcGUsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGNvcnJlY3RseSBtYW5hZ2VkLiBUaGlzIHNlZW1zIHRvIGJlIHByZXR0eSBzdGFuZGFyZCBtZW1jZyBzdHVmZiwgc28gSSYjMzk7bSBleHBlY3RpbmcgYENPTkZJR19NRU1DR2AgYW5kLCBzaW5jZSB0aGV5JiMzOTtyZSB0b3VjaGluZyBgbWVtY29udHJvbC12MS5jYCwgcHJvYmFibHkgYENPTkZJR19NRU1DR19WMWAuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlLiBJdCB3aWxsIGxpa2VseSByZXNpZGUgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgLiBJJiMzOTtsbCBydW4gdGhyb3VnaCB0aG9zZSBxdWlja2x5IGFuZCBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19NRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTU1IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5tbS9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA0Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBicGZfbWVtY29udHJvbC5vXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcbi0tXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYz0xMDY9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfbWVtY2dfcGF0aF9lcShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA4LXtcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jOjEwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYy0xMTAtXHRjZ3JvdXBfcGF0aChtZW1jZy1cdTAwM2Vjc3MuY2dyb3VwLCBtZW1jZ19wYXRoX2J1ZiwgUEFUSF9NQVgpO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExMi1cdFx0cmV0dXJuIHRydWU7XG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTM6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTE0LVx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL2RlYnVnLmM9NzA9c3RhdGljIHZvaWQgX19kdW1wX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL2RlYnVnLmMtOTYtXG5tbS9kZWJ1Zy5jOjk3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2RlYnVnLmMtOTgtXHRpZiAoZm9saW8tXHUwMDNlbWVtY2dfZGF0YSlcbi0tXG5tbS9kZWJ1Zy5jPTE3NT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vZGVidWcuYy0xODgtI2VuZGlmXG5tbS9kZWJ1Zy5jOjE4OTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9kZWJ1Zy5jLTE5MC1cdFx0XCYjMzQ7b3duZXIgJXB4IFwmIzM0O1xuLS1cbm1tL2RlYnVnLmMtMjE3LSNlbmRpZlxubW0vZGVidWcuYzoyMTg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vZGVidWcuYy0yMTktXHRcdG1tLVx1MDAzZW93bmVyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzUyNz1zdGF0aWMgdm9pZCBfX3NwbGl0X2ZvbGlvX3RvX29yZGVyKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zNjE4LVx0XHRcdGZvbGlvX3NldF9pZGxlKG5ld19mb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jOjM2MTk6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vaHVnZV9tZW1vcnkuYy0zNjIwLVx0XHRuZXdfZm9saW8tXHUwMDNlbWVtY2dfZGF0YSA9IGZvbGlvLVx1MDAzZW1lbWNnX2RhdGE7XG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmM9NDU9c3RhdGljIGludCBod3BvaXNvbl9maWx0ZXJfZmxhZ3Moc3RydWN0IHBhZ2UgKnApXG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmMtNjYtICovXG5tbS9od3BvaXNvbi1pbmplY3QuYzo2NzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9od3BvaXNvbi1pbmplY3QuYy02OC1zdGF0aWMgdTY0IGh3cG9pc29uX2ZpbHRlcl9tZW1jZztcbi0tXG5tbS9od3BvaXNvbi1pbmplY3QuYz0xNjI9c3RhdGljIGludCBfX2luaXQgcGZuX2luamVjdF9pbml0KHZvaWQpXG4tLVxubW0vaHdwb2lzb24taW5qZWN0LmMtMTkxLVxubW0vaHdwb2lzb24taW5qZWN0LmM6MTkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2h3cG9pc29uLWluamVjdC5jLTE5My1cdGRlYnVnZnNfY3JlYXRlX3U2NChcJiMzNDtjb3JydXB0LWZpbHRlci1tZW1jZ1wmIzM0OywgMDYwMCwgaHdwb2lzb25fZGlyLFxuLS1cbm1tL2tmZW5jZS9jb3JlLmM9NjExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTYzOC1cdFx0X19TZXRQYWdlU2xhYihwYWdlKTtcbm1tL2tmZW5jZS9jb3JlLmM6NjM5OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2tmZW5jZS9jb3JlLmMtNjQwLVx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbi0tXG5tbS9rZmVuY2UvY29yZS5jLTcwNi1cdFx0cGFnZSA9IHBmbl90b19wYWdlKHN0YXJ0X3BmbiAmIzQzOyBpKTtcbm1tL2tmZW5jZS9jb3JlLmM6NzA3OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2tmZW5jZS9jb3JlLmMtNzA4LVx0XHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcbi0tXG5tbS9rZmVuY2UvY29yZS5jPTEyNDc9dm9pZCBfX2tmZW5jZV9mcmVlKHZvaWQgKmFkZHIpXG4tLVxubW0va2ZlbmNlL2NvcmUuYy0xMjUwLVxubW0va2ZlbmNlL2NvcmUuYzoxMjUxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2tmZW5jZS9jb3JlLmMtMTI1Mi1cdEtGRU5DRV9XQVJOX09OKG1ldGEtXHUwMDNlb2JqX2V4dHMub2JqY2cpO1xuLS1cbm1tL2tmZW5jZS9rZmVuY2UuaD01OT1zdHJ1Y3Qga2ZlbmNlX21ldGFkYXRhIHtcbi0tXG5tbS9rZmVuY2Uva2ZlbmNlLmgtMTA0LVx0dTMyIGFsbG9jX3N0YWNrX2hhc2ggX19ndWFyZGVkX2J5KFx1MDAyNmxvY2spO1xubW0va2ZlbmNlL2tmZW5jZS5oOjEwNTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9rZmVuY2Uva2ZlbmNlLmgtMTA2LVx0c3RydWN0IHNsYWJvYmpfZXh0IG9ial9leHRzO1xuLS1cbm1tL2xpc3RfbHJ1LmM9Mjk9c3RhdGljIGlubGluZSB2b2lkIHVubG9ja19saXN0X2xydShzdHJ1Y3QgbGlzdF9scnVfb25lICpsLCBib29sIGlycV9vZmYsXG4tLVxubW0vbGlzdF9scnUuYy0zOS1cbm1tL2xpc3RfbHJ1LmM6NDA6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYy00MS1zdGF0aWMgTElTVF9IRUFEKG1lbWNnX2xpc3RfbHJ1cyk7XG4tLVxubW0vbGlzdF9scnUuYz0xNDE9bG9ja19saXN0X2xydV9vZl9tZW1jZyhzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTE1MC19XG5tbS9saXN0X2xydS5jOjE1MTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9saXN0X2xydS5jLTE1Mi1cbi0tXG5tbS9saXN0X2xydS5jPTQxMz11bnNpZ25lZCBsb25nIGxpc3RfbHJ1X3dhbGtfbm9kZShzdHJ1Y3QgbGlzdF9scnUgKmxydSwgaW50IG5pZCxcbi0tXG5tbS9saXN0X2xydS5jLTQyMS1cbm1tL2xpc3RfbHJ1LmM6NDIyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNDIzLVx0aWYgKCpucl90b193YWxrIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKSB7XG4tLVxubW0vbGlzdF9scnUuYz00NTE9c3RhdGljIHZvaWQgaW5pdF9vbmVfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1LCBzdHJ1Y3QgbGlzdF9scnVfb25lICpsKVxuLS1cbm1tL2xpc3RfbHJ1LmMtNDYxLVxubW0vbGlzdF9scnUuYzo0NjI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vbGlzdF9scnUuYy00NjMtc3RhdGljIHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWVtY2dfaW5pdF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcbi0tXG5tbS9saXN0X2xydS5jPTY1OT1zdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2xpc3RfbHJ1KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxuLS1cbm1tL2xpc3RfbHJ1LmMtNjYxLX1cbm1tL2xpc3RfbHJ1LmM6NjYyOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL2xpc3RfbHJ1LmMtNjYzLVxubW0vbGlzdF9scnUuYz02NjQ9aW50IF9fbGlzdF9scnVfaW5pdChzdHJ1Y3QgbGlzdF9scnUgKmxydSwgYm9vbCBtZW1jZ19hd2FyZSwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcilcbi0tXG5tbS9saXN0X2xydS5jLTY2Ny1cbm1tL2xpc3RfbHJ1LmM6NjY4OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNjY5LVx0aWYgKHNocmlua2VyKVxuLS1cbm1tL2xpc3RfbHJ1LmM9NjkyPXZvaWQgbGlzdF9scnVfZGVzdHJveShzdHJ1Y3QgbGlzdF9scnUgKmxydSlcbi0tXG5tbS9saXN0X2xydS5jLTcwMy1cbm1tL2xpc3RfbHJ1LmM6NzA0OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL2xpc3RfbHJ1LmMtNzA1LVx0bHJ1LVx1MDAzZXNocmlua2VyX2lkID0gLTE7XG4tLVxubW0vbWVtY29udHJvbC12MS5oPTI0PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5oLTI3LS8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cbm1tL21lbWNvbnRyb2wtdjEuaDoyODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLXYxLmgtMjktXG4tLVxubW0vbWVtY29udHJvbC12MS5oPTkxPWV4dGVybiBzdHJ1Y3QgY2Z0eXBlIG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzW107XG5tbS9tZW1jb250cm9sLXYxLmgtOTItXG5tbS9tZW1jb250cm9sLXYxLmg6OTM6I2Vsc2VcdC8qIENPTkZJR19NRU1DR19WMSAqL1xubW0vbWVtY29udHJvbC12MS5oLTk0LVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0xMjE9c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcykge31cbm1tL21lbWNvbnRyb2wtdjEuaC0xMjItXG5tbS9tZW1jb250cm9sLXYxLmg6MTIzOiNlbmRpZlx0LyogQ09ORklHX01FTUNHX1YxICovXG5tbS9tZW1jb250cm9sLXYxLmgtMTI0LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0yMDk9c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wuYy0yMjgtXG5tbS9tZW1jb250cm9sLmM6MjI5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0yMzAtc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTUwNT11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI3LVxubW0vbWVtY29udHJvbC5jOjUyODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNTI5LXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4tLVxubW0vbWVtY29udHJvbC5jPTU1Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbm1tL21lbWNvbnRyb2wuYzo1NTQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTU1NS1cdFBHUEdJTixcbi0tXG5tbS9tZW1jb250cm9sLmM9Nzg3PXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmMtODAyLVxubW0vbWVtY29udHJvbC5jOjgwMzojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODA0LS8qXG4tLVxubW0vbWVtY29udHJvbC5jPTg3MT12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtODgzLVxubW0vbWVtY29udHJvbC5jOjg4NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtODg1LS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9MTA1OT1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTA2Ni1cbm1tL21lbWNvbnRyb2wuYzoxMDY3OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xMDY4LXVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNjY3PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTY3Mi1cbm1tL21lbWNvbnRyb2wuYzoxNjczOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xNjc0LXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmM9MTY5Mz1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xNzM5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShtZW1jZ192bV9ldmVudF9zdGF0KTsgaSYjNDM7JiM0MzspIHtcbm1tL21lbWNvbnRyb2wuYzoxNzQwOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xNzQxLVx0XHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcbi0tXG5tbS9tZW1jb250cm9sLmM9MTc5MT12b2lkIG1lbV9jZ3JvdXBfcHJpbnRfb29tX21lbWluZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xODEyLVx0XHRcdGF0b21pY19sb25nX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcbm1tL21lbWNvbnRyb2wuYzoxODEzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy0xODE0LVx0ZWxzZSB7XG4tLVxubW0vbWVtY29udHJvbC5jPTI4MDA9c3RhdGljIHZvaWQgY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4MTItXG5tbS9tZW1jb250cm9sLmM6MjgxMzojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtMjgxNC1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjk4Nj1fX2Fsd2F5c19pbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKmN1cnJlbnRfb2JqX2Nncm91cCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yOTkxLVxubW0vbWVtY29udHJvbC5jOjI5OTI6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0dfTk1JX1VOU0FGRSkgXHUwMDI2XHUwMDI2IGluX25taSgpKVxubW0vbWVtY29udHJvbC5jLTI5OTMtXHRcdHJldHVybiBOVUxMO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0zMDMyPXN0cnVjdCBvYmpfY2dyb3VwICpnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vbWVtY29udHJvbC5jLTMwNDItXG5tbS9tZW1jb250cm9sLmM6MzA0MzojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtMzA0NC1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9rbWVtX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHZhbClcbi0tXG5tbS9tZW1jb250cm9sLmM9NDE1Nz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDE4MC1cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNlc3dhcCwgXHUwMDI2cGFyZW50LVx1MDAzZXN3YXAsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0MTgxOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00MTgyLVx0XHRtZW1jZy1cdTAwM2VtZW1vcnkudHJhY2tfZmFpbGNudCA9ICFtZW1jZ19vbl9kZmw7XG4tLVxubW0vbWVtY29udHJvbC5jLTQxOTEtXHRcdHBhZ2VfY291bnRlcl9pbml0KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcbm1tL21lbWNvbnRyb2wuYzo0MTkyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy00MTkzLVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTQzNTk9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDM2NC1cdHBhZ2VfY291bnRlcl9zZXRfbWF4KFx1MDAyNm1lbWNnLVx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xubW0vbWVtY29udHJvbC5jOjQzNjU6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQzNjYtXHRwYWdlX2NvdW50ZXJfc2V0X21heChcdTAwMjZtZW1jZy1cdTAwM2VrbWVtLCBQQUdFX0NPVU5URVJfTUFYKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDM5ND1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ0MjktXG5tbS9tZW1jb250cm9sLmM6NDQzMDojaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5tbS9tZW1jb250cm9sLmMtNDQzMS1zdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxuLS1cbm1tL21lbWNvbnRyb2wuYz01MDgyPXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA5My1cdC5kZmxfY2Z0eXBlcyA9IG1lbW9yeV9maWxlcyxcbm1tL21lbWNvbnRyb2wuYzo1MDk0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy01MDk1LVx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXG4tLVxubW0vbWVtY29udHJvbC5jPTYwMjg9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjAzMy1cdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcbm1tL21lbWNvbnRyb2wuYzo2MDM0OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MDM1LVx0V0FSTl9PTihjZ3JvdXBfYWRkX2xlZ2FjeV9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgbWVtc3dfZmlsZXMpKTtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9MTAzMT1zdGF0aWMgaW5saW5lIGJvb2wgcGFnZV9leHBlY3RlZF9zdGF0ZShzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMTAzOC1cdFx0XHRwYWdlX3JlZl9jb3VudChwYWdlKSB8XG5tbS9wYWdlX2FsbG9jLmM6MTAzOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9wYWdlX2FsbG9jLmMtMTA0MC1cdFx0XHRwYWdlLVx1MDAzZW1lbWNnX2RhdGEgfFxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0xMDQ5PXN0YXRpYyBjb25zdCBjaGFyICpwYWdlX2JhZF9yZWFzb24oc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpXG4tLVxubW0vcGFnZV9hbGxvYy5jLTEwNjQtXHR9XG5tbS9wYWdlX2FsbG9jLmM6MTA2NTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9wYWdlX2FsbG9jLmMtMTA2Ni1cdGlmICh1bmxpa2VseShwYWdlLVx1MDAzZW1lbWNnX2RhdGEpKVxuLS1cbm1tL3BhZ2VfY291bnRlci5jPTI3Mj1pbnQgcGFnZV9jb3VudGVyX21lbXBhcnNlKGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqbWF4LFxuLS1cbm1tL3BhZ2VfY291bnRlci5jLTI5Mi1cbm1tL3BhZ2VfY291bnRlci5jOjI5MzojaWYgSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIHx8IElTX0VOQUJMRUQoQ09ORklHX0NHUk9VUF9ETUVNKVxubW0vcGFnZV9jb3VudGVyLmMtMjk0LS8qXG4tLVxubW0vcGFnZV9jb3VudGVyLmM9NDI0PXZvaWQgcGFnZV9jb3VudGVyX2NhbGN1bGF0ZV9wcm90ZWN0aW9uKHN0cnVjdCBwYWdlX2NvdW50ZXIgKnJvb3QsXG4tLVxubW0vcGFnZV9jb3VudGVyLmMtNDY0LX1cbm1tL3BhZ2VfY291bnRlci5jOjQ2NTojZW5kaWYgLyogQ09ORklHX01FTUNHIHx8IENPTkZJR19DR1JPVVBfRE1FTSAqL1xuLS1cbm1tL3BhZ2VfaW8uYz0zMDU9c3RhdGljIGlubGluZSB2b2lkIGNvdW50X3N3cG91dF92bV9ldmVudChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy0zMTctXG5tbS9wYWdlX2lvLmM6MzE4OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG5tbS9wYWdlX2lvLmMtMzE5LXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy0zMzktI2RlZmluZSBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pXHRcdGRvIHsgfSB3aGlsZSAoMClcbm1tL3BhZ2VfaW8uYzozNDA6I2VuZGlmIC8qIENPTkZJR19NRU1DRyBcdTAwMjZcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cbm1tL3BhZ2VfaW8uYy0zNDEtXG4tLVxubW0vcGFnZV9vd25lci5jPTQ4ND12b2lkIHBhZ2V0eXBlaW5mb19zaG93bWl4ZWRjb3VudF9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4tLVxubW0vcGFnZV9vd25lci5jLTU2MC1cbm1tL3BhZ2Vfb3duZXIuYzo1NjE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vcGFnZV9vd25lci5jLTU2Mi0vKlxuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oPTM1PXN0cnVjdCBwY3B1b2JqX2V4dCB7XG5tbS9wZXJjcHUtaW50ZXJuYWwuaDozNjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0zNy1cdHN0cnVjdCBvYmpfY2dyb3VwXHQqY2dyb3VwO1xuLS1cbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTQzLVxubW0vcGVyY3B1LWludGVybmFsLmg6NDQ6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSB8fCBkZWZpbmVkKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKVxubW0vcGVyY3B1LWludGVybmFsLmgtNDUtI2RlZmluZSBORUVEX1BDUFVPQkpfRVhUXG4tLVxubW0vcGVyY3B1LWludGVybmFsLmg9MTUzPXN0YXRpYyBpbmxpbmUgc2l6ZV90IHBjcHVfb2JqX2Z1bGxfc2l6ZShzaXplX3Qgc2l6ZSlcbi0tXG5tbS9wZXJjcHUtaW50ZXJuYWwuaC0xNTYtXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDoxNTc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vcGVyY3B1LWludGVybmFsLmgtMTU4LVx0aWYgKCFtZW1fY2dyb3VwX2ttZW1fZGlzYWJsZWQoKSlcbi0tXG5tbS9wZXJjcHUuYz0xNTk0PXN0YXRpYyBzdHJ1Y3QgcGNwdV9jaHVuayAqcGNwdV9jaHVua19hZGRyX3NlYXJjaCh2b2lkICphZGRyKVxuLS1cbm1tL3BlcmNwdS5jLTE2MTQtXG5tbS9wZXJjcHUuYzoxNjE1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3BlcmNwdS5jLTE2MTYtc3RhdGljIGJvb2wgcGNwdV9tZW1jZ19wcmVfYWxsb2NfaG9vayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxuLS1cbm1tL3BlcmNwdS5jPTE2NTU9c3RhdGljIHZvaWQgcGNwdV9tZW1jZ19mcmVlX2hvb2soc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rLCBpbnQgb2ZmLCBzaXplX3Qgc2l6ZSlcbi0tXG5tbS9wZXJjcHUuYy0xNjc2LVxubW0vcGVyY3B1LmM6MTY3NzojZWxzZSAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3BlcmNwdS5jLTE2Nzgtc3RhdGljIGJvb2xcbi0tXG5tbS9wZXJjcHUuYz0xNjkwPXN0YXRpYyB2b2lkIHBjcHVfbWVtY2dfZnJlZV9ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZiwgc2l6ZV90IHNpemUpXG4tLVxubW0vcGVyY3B1LmMtMTY5Mi19XG5tbS9wZXJjcHUuYzoxNjkzOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3BlcmNwdS5jLTE2OTQtXG4tLVxubW0vc2hyaW5rZXIuYz0xMT1ERUZJTkVfTVVURVgoc2hyaW5rZXJfbXV0ZXgpO1xubW0vc2hyaW5rZXIuYy0xMi1cbm1tL3Nocmlua2VyLmM6MTM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2hyaW5rZXIuYy0xNC1zdGF0aWMgaW50IHNocmlua2VyX25yX21heDtcbi0tXG5tbS9zaHJpbmtlci5jPTMzND1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbi0tXG5tbS9zaHJpbmtlci5jLTMzOC19XG5tbS9zaHJpbmtlci5jOjMzOTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9zaHJpbmtlci5jLTM0MC1cbi0tXG5tbS9zaHJpbmtlci5jPTM3Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb19zaHJpbmtfc2xhYihzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNocmlua2N0bCxcbi0tXG5tbS9zaHJpbmtlci5jLTQ3NC1cbm1tL3Nocmlua2VyLmM6NDc1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Nocmlua2VyLmMtNDc2LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxuLS1cbm1tL3Nocmlua2VyLmMtNTk1LX1cbm1tL3Nocmlua2VyLmM6NTk2OiNlbHNlIC8qICFDT05GSUdfTUVNQ0cgKi9cbm1tL3Nocmlua2VyLmMtNTk3LXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19zbGFiX21lbWNnKGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxuLS1cbm1tL3Nocmlua2VyLmMtNjAxLX1cbm1tL3Nocmlua2VyLmM6NjAyOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3Nocmlua2VyLmMtNjAzLVxuLS1cbm1tL3Nocmlua2VyLmM9Njg4PXN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXJfYWxsb2ModW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICpmbXQsIC4uLilcbi0tXG5tbS9zaHJpbmtlci5jLTcyNi1cdCAqICAtIG5vbi1tZW1jZy1hd2FyZSBzaHJpbmtlcnNcbm1tL3Nocmlua2VyLmM6NzI3Olx0ICogIC0gIUNPTkZJR19NRU1DR1xubW0vc2hyaW5rZXIuYy03MjgtXHQgKiAgLSBtZW1jZyBpcyBkaXNhYmxlZCBieSBrZXJuZWwgY29tbWFuZCBsaW5lXG4tLVxubW0vc2xhYi5oPTEyMj1TTEFCX01BVENIKF9yZWZjb3VudCwgX19wYWdlX3JlZmNvdW50KTtcbm1tL3NsYWIuaDoxMjM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2xhYi5oLTEyNC1TTEFCX01BVENIKG1lbWNnX2RhdGEsIG9ial9leHRzKTtcbi0tXG5tbS9zbGFiLmg9NTU4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsYWIuaC01NjEtXG5tbS9zbGFiLmg6NTYyOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3NsYWIuaC01NjMtXHQvKlxuLS1cbm1tL3NsYWIuaD02NTI9c3RhdGljIGlubGluZSBlbnVtIG5vZGVfc3RhdF9pdGVtIGNhY2hlX3Ztc3RhdF9pZHgoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2xhYi5oLTY1Ny1cbm1tL3NsYWIuaDo2NTg6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2xhYi5oLTY1OS1ib29sIF9fbWVtY2dfc2xhYl9wb3N0X2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBsaXN0X2xydSAqbHJ1LFxuLS1cbm1tL3NsYWJfY29tbW9uLmM9ODA0PUVYUE9SVF9TWU1CT0woa21hbGxvY19zaXplX3JvdW5kdXApO1xuLS1cbm1tL3NsYWJfY29tbW9uLmMtODExLVxubW0vc2xhYl9jb21tb24uYzo4MTI6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2xhYl9jb21tb24uYy04MTMtI2RlZmluZSBLTUFMTE9DX0NHUk9VUF9OQU1FKHN6KVx0Lm5hbWVbS01BTExPQ19DR1JPVVBdID0gXCYjMzQ7a21hbGxvYy1jZy1cJiMzNDsgI3N6LFxuLS1cbm1tL3NsYWJfY29tbW9uLmM9OTQ1PW5ld19rbWFsbG9jX2NhY2hlKGludCBpZHgsIGVudW0ga21hbGxvY19jYWNoZV90eXBlIHR5cGUpXG4tLVxubW0vc2xhYl9jb21tb24uYy05NTMtXHRcdGZsYWdzIHw9IFNMQUJfUkVDTEFJTV9BQ0NPVU5UO1xubW0vc2xhYl9jb21tb24uYzo5NTQ6XHR9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX01FTUNHKSBcdTAwMjZcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19DR1JPVVApKSB7XG5tbS9zbGFiX2NvbW1vbi5jLTk1NS1cdFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XG4tLVxubW0vc2xhYl9jb21tb24uYy05NjktXHQvKlxubW0vc2xhYl9jb21tb24uYzo5NzA6XHQgKiBJZiBDT05GSUdfTUVNQ0cgaXMgZW5hYmxlZCwgZGlzYWJsZSBjYWNoZSBtZXJnaW5nIGZvclxubW0vc2xhYl9jb21tb24uYy05NzEtXHQgKiBLTUFMTE9DX05PUk1BTCBjYWNoZXMuXG5tbS9zbGFiX2NvbW1vbi5jLTk3Mi1cdCAqL1xubW0vc2xhYl9jb21tb24uYzo5NzM6XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpIFx1MDAyNlx1MDAyNiAodHlwZSA9PSBLTUFMTE9DX05PUk1BTCkpXG5tbS9zbGFiX2NvbW1vbi5jLTk3NC1cdFx0ZmxhZ3MgfD0gU0xBQl9OT19NRVJHRTtcbi0tXG5tbS9zbGFiX2NvbW1vbi5jPTk5ND12b2lkIF9faW5pdCBjcmVhdGVfa21hbGxvY19jYWNoZXModm9pZClcbi0tXG5tbS9zbGFiX2NvbW1vbi5jLTk5OS1cdC8qXG5tbS9zbGFiX2NvbW1vbi5jOjEwMDA6XHQgKiBJbmNsdWRpbmcgS01BTExPQ19DR1JPVVAgaWYgQ09ORklHX01FTUNHIGRlZmluZWRcbm1tL3NsYWJfY29tbW9uLmMtMTAwMS1cdCAqL1xuLS1cbm1tL3NsdWIuYz0yMTYyPWludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjE5OS1cdG5ld19leHRzID0gKHVuc2lnbmVkIGxvbmcpdmVjO1xubW0vc2x1Yi5jOjIyMDA6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIyMDEtXHRuZXdfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XG4tLVxubW0vc2x1Yi5jPTIyNzY9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIyOTUtXG5tbS9zbHViLmM6MjI5NjojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtMjI5Ny1cdFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xuLS1cbm1tL3NsdWIuYy0yMzEyLVxubW0vc2x1Yi5jOjIzMTM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIzMTQtXHRcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcbi0tXG5tbS9zbHViLmM9MjQ1Mj1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXG4tLVxubW0vc2x1Yi5jLTI0NTktXG5tbS9zbHViLmM6MjQ2MDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtMjQ2MS1cbi0tXG5tbS9zbHViLmM9MjUwOD1ib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTI1NjctXG5tbS9zbHViLmM6MjU2ODojZWxzZSAvKiBDT05GSUdfTUVNQ0cgKi9cbm1tL3NsdWIuYy0yNTY5LXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmM9MjU4Mj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcbi0tXG5tbS9zbHViLmMtMjU4NS19XG5tbS9zbHViLmM6MjU4NjojZW5kaWYgLyogQ09ORklHX01FTUNHICovXG5tbS9zbHViLmMtMjU4Ny1cbi0tXG5tbS9zbHViLmM9NjM5OT12b2lkIHNsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKm9iamVjdCxcbi0tXG5tbS9zbHViLmMtNjQxNC1cbm1tL3NsdWIuYzo2NDE1OiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3NsdWIuYy02NDE2LS8qIERvIG5vdCBpbmxpbmUgdGhlIHJhcmUgbWVtY2cgY2hhcmdpbmcgZmFpbGVkIHBhdGggaW50byB0aGUgYWxsb2NhdGlvbiBwYXRoICovXG4tLVxubW0vc3dhcC5jPTExMzU9dm9pZCBmb2xpb19iYXRjaF9yZW1vdmVfZXhjZXB0aW9uYWxzKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKVxuLS1cbm1tL3N3YXAuYy0xMTQ2LVxubW0vc3dhcC5jOjExNDc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc3dhcC5jLTExNDgtc3RhdGljIHZvaWQgbHJ1dmVjX3JlcGFyZW50X2xydShzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsXG4tLVxubW0vc3dhcC5oPTQ4PXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyB7XG4tLVxubW0vc3dhcC5oLTU4LVx0dW5zaWduZWQgaW50ICpleHRlbmRfdGFibGU7XHQvKiBGb3IgbGFyZ2Ugc3dhcCBjb3VudCwgcHJvdGVjdGVkIGJ5IGNpLVx1MDAzZWxvY2sgKi9cbm1tL3N3YXAuaDo1OTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zd2FwLmgtNjAtXHRzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSAqbWVtY2dfdGFibGU7XHQvKiBTd2FwIHRhYmxlIGVudHJpZXMmIzM5OyBjZ3JvdXAgcmVjb3JkICovXG4tLVxubW0vc3dhcF90YWJsZS5oPTI5Nj1zdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX3RhYmxlX2NsZWFyX3plcm8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3RhYmxlLmgtMzEwLVxubW0vc3dhcF90YWJsZS5oOjMxMTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zd2FwX3RhYmxlLmgtMzEyLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2dyb3VwX3NldChzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBmaWxlLmM9NDIxPXN0YXRpYyB2b2lkIHN3YXBfY2x1c3Rlcl9mcmVlX3RhYmxlKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vc3dhcGZpbGUuYy00MjQtXG5tbS9zd2FwZmlsZS5jOjQyNTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zd2FwZmlsZS5jLTQyNi1cdGtmcmVlKGNpLVx1MDAzZW1lbWNnX3RhYmxlKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTQ0OT1zdGF0aWMgaW50IHN3YXBfY2x1c3Rlcl9hbGxvY190YWJsZShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBnZnBfdCBnZnApXG4tLVxubW0vc3dhcGZpbGUuYy00NzAtXG5tbS9zd2FwZmlsZS5jOjQ3MTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zd2FwZmlsZS5jLTQ3Mi1cdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XG4tLVxubW0vc3dhcGZpbGUuYz0zOTE1PWludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcGZpbGUuYy0zOTM0LVxubW0vc3dhcGZpbGUuYzozOTM1OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXG5tbS9zd2FwZmlsZS5jLTM5MzYtc3RhdGljIGJvb2wgX19oYXNfdXNhYmxlX3N3YXAodm9pZClcbi0tXG5tbS92bXNjYW4uYz0xOTk9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcbm1tL3Ztc2Nhbi5jLTIwMC1cbm1tL3Ztc2Nhbi5jOjIwMTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yMDItXG4tLVxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtMjY4MC1cbm1tL3Ztc2Nhbi5jOjI2ODE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjY4Mi1cdGlmIChtZW1jZykge1xuLS1cbm1tL3Ztc2Nhbi5jPTI4MzE9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0yODM3LVxubW0vdm1zY2FuLmM6MjgzODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODM5LVx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTI4NzE9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yODc3LVx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZWxydV9nZW4ubGlzdCkpO1xubW0vdm1zY2FuLmM6Mjg3ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODc5LVx0Vk1fV0FSTl9PTl9PTkNFKG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4OTg9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTA2LVxubW0vdm1zY2FuLmM6MjkwNzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTA4LVx0bWVtY2cgPSBtbS1cdTAwM2VscnVfZ2VuLm1lbWNnO1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MzAtXG5tbS92bXNjYW4uYzoyOTMxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MzItXHRtZW1fY2dyb3VwX3B1dChtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy0yOTM2LVxubW0vdm1zY2FuLmM6MjkzNzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTM4LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jPTQzMDc9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDM1Mi1cbm1tL3Ztc2Nhbi5jOjQzNTM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNDM1NC1cbi0tXG5tbS92bXNjYW4uYz00NTQ1PXZvaWQgbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtNDU2Ny1cbm1tL3Ztc2Nhbi5jOjQ1Njg6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb250cm9sIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZXNzZW50aWFsIGZvciB0aG9zZSBzcGVjaWZpYyBtZW1vcnkgY29udHJvbCBmdW5jdGlvbnMsIG5hbWVseSBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCBhbmQgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgLiBBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXJlIGluZGVlZCBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC12MS5jYC4gU28sIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRlZmluaXRlbHkgYSBkZXBlbmRlbmN5LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgIGFyZSBsb2NhdGVkLiBJIHJlbWVtYmVyIHRoZXNlIGZyb20gdGhlIGdlbmVyYWwgbWVtb3J5IGNvbnRyb2wgc3BhY2UuIEEgcXVpY2sgY2hlY2sgdGVsbHMgbWUgdGhleSYjMzk7cmUgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCB0aGF0IGNvZGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoIGp1c3QgYENPTkZJR19NRU1DR2AuIE1ha2VzIHNlbnNlLgoKRmluYWxseSwgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHdoZXJlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBkZWZpbmVkLCBhbmQgaXQgc2VlbXMgdGhhdCBpcyBpbiBgbW0vdm1zY2FuLmNgLgoKVG8gY29uZmlybSB0aGUgY29ubmVjdGlvbnMsIEkmIzM5O20gbm93IGdvaW5nIHRvIGRyaWxsIGRvd24gYW5kIGRvdWJsZS1jaGVjayBgbW0vbWVtY29udHJvbC12MS5jYCBhbmQgYG1tL21lbWNvbnRyb2wuY2AgZm9yIHRob3NlIGZ1bmN0aW9ucywgdG8gZWxpbWluYXRlIGFueSBwb3RlbnRpYWwgc3VycHJpc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbV9jZ3JvdXBfcmVzaXplX21heCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9MTQ3OT1zdGF0aWMgREVGSU5FX01VVEVYKG1lbWNnX21heF9tdXRleCk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTQ4MC1cbm1tL21lbWNvbnRyb2wtdjEuYzoxNDgxOnN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNDgyLVx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbWF4LCBib29sIG1lbXN3KVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNjkwPXN0YXRpYyBzc2l6ZV90IG1lbV9jZ3JvdXBfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNzA5LVx0XHRjYXNlIF9NRU06XG5tbS9tZW1jb250cm9sLXYxLmM6MTcxMDpcdFx0XHRyZXQgPSBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXgobWVtY2csIG5yX3BhZ2VzLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTcxMS1cdFx0XHRicmVhaztcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzEyLVx0XHRjYXNlIF9NRU1TV0FQOlxubW0vbWVtY29udHJvbC12MS5jOjE3MTM6XHRcdFx0cmV0ID0gbWVtX2Nncm91cF9yZXNpemVfbWF4KG1lbWNnLCBucl9wYWdlcywgdHJ1ZSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTcxNC1cdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjMzMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IENncm91cCBSZXNpemluZyoqCgpPa2F5LCBzbyBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCBpcyB0cmlnZ2VyZWQgYnkgYG1lbV9jZ3JvdXBfd3JpdGVgLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludCwgdGhlIHRoaW5nIHRoYXQgc2lnbmFscyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBsaW1pdHMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgd2UgZ28gZnVydGhlciwgd2UgKmFic29sdXRlbHkqIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YC4gVGhlIGxvZ2ljIGFyb3VuZCBmb3JjZWQgZW1wdGluZyBpcyBjcnVjaWFsIHdoZW4gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcmVzaXppbmcgbWVtb3J5IGNncm91cHMuIEFueSBwb3RlbnRpYWwgY29uZmxpY3QgbXVzdCBiZSBjYXJlZnVsbHkgaGFuZGxlZCBoZXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB3ZSBuZWVkIHRvIHJlbGVhc2UgcGFnZXMsIG9yIHJlY2xhaW0gbWVtb3J5LCBiZWZvcmUgd2Ugc3RhcnQgdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIG1lbW9yeSBsaW1pdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9mb3JjZV9lbXB0eSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmM9MTQ4MT1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE1NDItICovXG5tbS9tZW1jb250cm9sLXYxLmM6MTU0MzpzdGF0aWMgaW50IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC12MS5jLTE1NDQte1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xNTY3LVxubW0vbWVtY29udHJvbC12MS5jOjE1Njg6c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF9mb3JjZV9lbXB0eV93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5tbS9tZW1jb250cm9sLXYxLmMtMTU2OS1cdFx0XHRcdFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTU3NS1cdFx0cmV0dXJuIC1FSU5WQUw7XG5tbS9tZW1jb250cm9sLXYxLmM6MTU3NjpcdHJldHVybiBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KG1lbWNnKSA/OiBuYnl0ZXM7XG5tbS9tZW1jb250cm9sLXYxLmMtMTU3Ny19XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTIwNzQ9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMTA5LVx0XHQubmFtZSA9IFwmIzM0O2ZvcmNlX2VtcHR5XCYjMzQ7LFxubW0vbWVtY29udHJvbC12MS5jOjIxMTA6XHRcdC53cml0ZSA9IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfd3JpdGUsXG5tbS9tZW1jb250cm9sLXYxLmMtMjExMS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI5NDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gbWVtb3J5IGNncm91cHMgYW5kIGtlcm5lbCBpbnRlcm5hbHM6CgoqKkFuYWx5emluZyB0aGUgTWVtb3J5IENncm91cCBGb3JjZSBFbXB0eSBGbG93KioKClJpZ2h0LCBzbyBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAgaXMgY2FsbGVkIGJ5IGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5X3dyaXRlYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQsIHRoZSB0cmlnZ2VyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiB0aGUgZmFjdG9ycyB0aGF0IGluZmx1ZW5jZSB0aGlzIGVtcHR5aW5nIHByb2Nlc3MsIGFuZCB0aGF0IG1lYW5zIGxvb2tpbmcgYXQgdGhlIG1lbW9yeSBsaW1pdHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzIGFjdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgIGNvbWUgaW50byBwbGF5IGluIHRoaXMgY29udGV4dC4gVGhlc2UgYXJlIHRoZSBrZXkgbGV2ZXJzLCB0aGUgdXBwZXIgYm91bmRzLCB0aGUgY29uc3RyYWludHMgdGhhdCBhcmUgbGlrZWx5IGluc3RpZ2F0aW5nIHRoZSBmb3JjZWQgZW1wdHlpbmcsIG9yIHBlcmhhcHMgaW5mbHVlbmNpbmcgaG93IGl0IGJlaGF2ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSBsaW1pdCB3cml0ZXMgYW5kIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9oaWdoX3dyaXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz00NzYyPXN0YXRpYyBpbnQgbWVtb3J5X2hpZ2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ3NjctXG5tbS9tZW1jb250cm9sLmM6NDc2ODpzdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXG5tbS9tZW1jb250cm9sLmMtNDc2OS1cdFx0XHRcdCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpXG4tLVxubW0vbWVtY29udHJvbC5jPTUwMDg9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUwMzctXHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9oaWdoX3Nob3csXG5tbS9tZW1jb250cm9sLmM6NTAzODpcdFx0LndyaXRlID0gbWVtb3J5X2hpZ2hfd3JpdGUsXG5tbS9tZW1jb250cm9sLmMtNTAzOS1cdH0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDEzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZnJvbSBhIHN5c3RlbSBtZW1vcnkgZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipNZW1vcnkgV3JpdGUgUGF0aCBCcmVha2Rvd24qKgoKT2theSwgc28gSSBzZWUgYSBjbGVhciByZWxhdGlvbnNoaXAgaGVyZS4gV2UmIzM5O3ZlIGdvdCB0aHJlZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkIGluIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBob3cgdGhleSBsaW5rIHVwLCBlc3BlY2lhbGx5IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBhIG1lbW9yeSBzdWJzeXN0ZW0gb3BlcmF0ZXMuIGBtZW1vcnlfaGlnaF93cml0ZWAgaXMgY2FsbGVkLCBhbmQgdGhlIGxpa2VseSBjb250ZXh0IGlzIHdpdGhpbiB0aGUgY2dyb3VwIHYyIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYG1lbW9yeV9maWxlc2AuIFRoaXMgcG9pbnRzIHRvIHRoZSBtZWNoYW5pc21zIHVzZWQgdG8gY29udHJvbCB3cml0ZSBvcGVyYXRpb25zIGluIHRoZSBtZW1vcnkgc3Vic3lzdGVtLiBUaGlzIHN1Z2dlc3RzIGFuIGFjdGl2ZSByb2xlIGluIGhvdyB3cml0ZXMgYXJlIGhhbmRsZWQgcmVsYXRpdmUgdG8gYSBjZ3JvdXAmIzM5O3MgbWVtb3J5IGxpbWl0cy4gSSYjMzk7bSBpbWFnaW5pbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWRqdXN0aW5nIHRocmVzaG9sZHMsIHBlcmhhcHMgdHJpZ2dlcmluZyBzb21lIGFjdGlvbiBhcyBhIGxpbWl0IGlzIGFwcHJvYWNoZWQuCgpTaW1pbGFybHksIHdlIGhhdmUgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbHNvIG9yaWdpbmF0aW5nIGZyb20gYG1lbW9yeV9maWxlc2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgc3VzcGVjdCB0aGF0IHRoZXNlIHR3byBmdW5jdGlvbnMgd29yayBpbiBjb25jZXJ0LiBgbWVtb3J5X21heF93cml0ZWAgaXMgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyB0aGUgYWJzb2x1dGUgbWF4aW11bSB3cml0ZSBsaW1pdC4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpcyBwcm9iYWJseSBjb3JlIHRvIGhvdyBjZ3JvdXBzIGVuZm9yY2UgbWVtb3J5IGxpbWl0cy4KClRoZSB0aGlyZCBwaWVjZSBvZiB0aGlzIHB1enpsZSBpcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoaXMgb25lJiMzOTtzIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgd2l0aGluIHRoZSBgbW0vbWVtY29udHJvbC5jYCBmaWxlLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWx2aW5nIGludG8gdGhlIGhlYXJ0IG9mIG1lbW9yeSByZWNsYWltIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGlzIGFzIHRoZSBzeXN0ZW0gYmVpbmcgcHJvYWN0aXZlIGluIHJlY2xhaW1pbmcgbWVtb3J5IGZyb20gdXNlcnNwYWNlIHByb2Nlc3Nlcy4gRnJvbSB3aGVyZSBJIHNpdCwgdGhpcyBsaWtlbHkgbWVhbnMgdGhlIHN5c3RlbSBoYXMgc29tZSBmdW5jdGlvbiB3aGljaCBpbml0aWF0ZXMgcmVjbGFpbWluZyBtZW1vcnkgcHJvYWN0aXZlbHkuIEVzc2VudGlhbGx5LCBpdCBhcHBlYXJzIHRoYXQgdGhpcyBmdW5jdGlvbiBpbml0aWF0ZXMgcmVjbGFpbSBldmVudHMgdGhhdCBhcmUgZGVzaWduZWQgdG8gYXZvaWQgdGhlIHN5c3RlbSBiZWluZyBvdmVybG9hZGVkLCB3aXRoIHRoZSBpbnRlbnRpb24gb2YgcHJlZW1wdGl2ZWx5IGZyZWVpbmcgdXAgbWVtb3J5LgoKU28sIGluIGVzc2VuY2UsIHdlIGhhdmUgYSBjbGVhciBwaWN0dXJlLiBXcml0ZXMsIHBhcnRpY3VsYXJseSB1bmRlciBjZ3JvdXAgdjIsIGFyZSBjb250cm9sbGVkLCBhbmQgbWVtb3J5IHJlY2xhaW0gaXMgYmVpbmcgYWN0aXZlbHkgbWFuYWdlZCB0byB0cnkgYW5kIGtlZXAgdGhlIHN5c3RlbSB1bmRlciBjb250cm9sLiBBIHNpbXBsZSB2aWV3LCB0aGF0IGlzIGZ1bmRhbWVudGFsIHRvIG1vc3QgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCB3ZWxsIHVuZGVyc3Rvb2QgYnkgYSBzZWFzb25lZCBleHBlcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD02MzE9ZXh0ZXJuIHZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pO1xubW0vaW50ZXJuYWwuaDo2MzI6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vaW50ZXJuYWwuaC02MzMtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NDk5NT1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5tbS9tZW1jb250cm9sLmMtNTAwMC1cbm1tL21lbWNvbnRyb2wuYzo1MDAxOlx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcbm1tL21lbWNvbnRyb2wuYy01MDAyLVx0aWYgKHJldClcbi0tXG5tbS92bXNjYW4uYz03ODYwPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03ODY1LVxubW0vdm1zY2FuLmM6Nzg2NjppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03ODY3LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYz04MDEyPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm1tL3Ztc2Nhbi5jLTgwMTctXG5tbS92bXNjYW4uYzo4MDE4Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtODAxOS1cdHJldHVybiByZXQgPyAtRUFHQUlOIDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzI5CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE1lbW9yeSBDb250cm9sIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAsIGBtZW1vcnlfaGlnaF93cml0ZWAsIGBtZW1vcnlfbWF4X3dyaXRlYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gUmlnaHQsIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhleSYjMzk7cmUgZGVmaW5lZC4gQWgsIGhlcmUmIzM5O3MgdGhlIGxheW91dDogYG1lbV9jZ3JvdXBfcmVzaXplX21heGAgYW5kIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCBhcmUgc3RhdGljIHdpdGhpbiBgbW0vbWVtY29udHJvbC12MS5jYCwgd2hpbGUgYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgIGFyZSBzdGF0aWMgdG8gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgZ2xvYmFsIGluIGBtbS92bXNjYW4uY2AuIEdvdCBpdC4KCk5vdywgbGV0IG1lIGNvbmZpcm0gaWYgYG1lbWNnX2lzX2R5aW5nYCBpcyBhY3R1YWxseSByZWFjaGFibGUuIEdvb2QsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgZGVmaW5pdGVseSBjYWxsZWQgd2hlbiBoYW5kbGluZyB3cml0ZXMgdG8gdGhlIGNncm91cCBmaWxlcyBJJiMzOTttIGNvbmNlcm5lZCB3aXRoIOKAkyBgbWVtb3J5LmhpZ2hgLCBgbWVtb3J5Lm1heGAsIGBtZW1vcnkucmVjbGFpbWAsIGBtZW1vcnkuZm9yY2VfZW1wdHlgLCBhbmQgYG1lbW9yeS5saW1pdF9pbl9ieXRlc2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBjb25maXJtcyB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCBleHBvc2VkIHRvIHVzZXJzcGFjZSB2aWEgdGhlIGNncm91cGZzIGludGVyZmFjZS4gSSBjYW4gdHJpZ2dlciB0aGlzIHRocm91Z2ggd3JpdGluZyB0byB0aG9zZSBmaWxlcy4KCkFscmlnaHQsIGZpbmFsbHksIHRoZSBwcmVyZXF1aXNpdGUgY29uZmlncyBmb3IgdGhpcyBhcmUgY2xlYXJseSBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdCBgTUVNQ0dfVjFgIGlzIGEgdmFsaWQgY29uZmlnIG9wdGlvbiB0byBlbnN1cmUgSSYjMzk7bSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0dfVjEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwODk9Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4tLVxuaW5pdC9LY29uZmlnLTEwOTUtXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMDk3LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDM1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgc28gYE1FTUNHX1YxYCBpcyBkZWZpbml0ZWx5IGEgY29uY3JldGUgY29uZmlndXJhdGlvbiBvcHRpb24g4oCTIG5vIHN1cnByaXNlcyB0aGVyZS4gQW5kLCBvZiBjb3Vyc2UsIGBNRU1DR2AgaXRzZWxmIGlzIGEgdmFsaWQgY29uZmlndXJhdGlvbiB0b28uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRob3NlIGFyZSBsZXZlcmFnZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQuCgpUaW1lIHRvIGRpdmUgaW50byB0aGUgY29yZS4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0byBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gc3BlY2lmaWNhbGx5IGNoZWNrIG91dCBob3cgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGltcGxlbWVudGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgcmVjbGFpbSBtZWNoYW5pc21zLiBUaGF0IGFyZWEgd2FycmFudHMgYSBkZWVwIGxvb2ssIGdpdmVuIHRoZSBjb250ZXh0LiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCB0aGUgZmluZXIgcG9pbnRzIG9mIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aG9zZSBjb25maWd1cmF0aW9uIGZsYWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg2MD1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2NS1cbm1tL3Ztc2Nhbi5jOjc4NjY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg2Ny1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ5MAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRm9jdXMgU3ltYm9scyBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZvY3VzIHN5bWJvbHMgdGhhdCBhcmUgZ3VpZGluZyBTeXprYWxsZXI6IGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAsIGBtZW1vcnlfaGlnaF93cml0ZWAsIGBtZW1vcnlfbWF4X3dyaXRlYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhlIGluaXRpYWwgdGhvdWdodCBpcywgd2FpdCwgYG1lbV9jZ3JvdXBfcmVzaXplX21heGAgaXMgc3RhdGljISBJIGtub3cgU3l6a2FsbGVyIGlzIHByaW1hcmlseSBhIHN5c2NhbGwgZnV6emVyLCBidXQgY2FuIGl0IGFjdHVhbGx5ICpmdXp6KiBzdGF0aWMgZnVuY3Rpb25zPyBJdCYjMzk7cyBtb3JlIGFib3V0IGNvZGUgY292ZXJhZ2UsIHJpZ2h0PyBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdXNlZCB0byBkaXJlY3QgdGhlIGZ1enplciB0byBzcGVjaWZpYyBjb2RlIHBhdGhzLCB0byBnZXQgdGhlIGZ1enplciBpbnRvIHRoZXNlIHNwZWNpZmljIGFyZWFzLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBzeXotbWFuYWdlcmAgdXNlcyB0aGVzZSBzeW1ib2xzIGZvciBmb2N1cywgYW5kIHRoYXQgU3l6a2FsbGVyICpjYW4qIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zLCBwcm92aWRlZCB0aGV5JiMzOTtyZSBwcmVzZW50IGluIHRoZSBzeW1ib2wgdGFibGUsIHRoaW5ncyBsaWtlIGBrYWxsc3ltc2AuIEdlbmVyYWxseSwgdGhhdCBzaG91bGRuJiMzOTt0IGJlIGEgcHJvYmxlbSBmb3Igc3RhdGljIGZ1bmN0aW9ucywgdGhvdWdoIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIHZlcmlmeS4KCk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBhIGNvdXBsZSBvZiB0aGluZ3MsIHNwZWNpZmljYWxseSB0aGUgY29uZmlncy4gV2UgbmVlZCB0byBtYWtlIHN1cmUgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYCBhcmUgZW5hYmxlZC4gVGhlbiwgdGhlIG5leHQgaW1wb3J0YW50IHRoaW5nIGlzIHRvIGNvbmZpcm0gdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdW5kZXIgYENPTkZJR19NRU1DR2AuIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCBzb3VyY2UuIEluIGBtbS92bXNjYW4uY2AsIEkgbmVlZCB0byBzZWUgaWYgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNvbXBpbGVkIGNvbmRpdGlvbmFsbHkgb3IgdW5jb25kaXRpb25hbGx5LiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzg2MD1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzg2NS1cbm1tL3Ztc2Nhbi5jOjc4NjY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzg2Ny1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MDE3LVxubW0vdm1zY2FuLmM6ODAxODpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgwMTktXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjMwMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIGZvciBDb25kaXRpb25hbCBDb21waWxhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseS4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3QgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgY29kZSBibG9jayBpcyB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmZGVmYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLCBvciBzb21ldGhpbmcgc2ltaWxhci4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgbWUgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIHZhcmlhYmlsaXR5IG9mIHRoaXMgdmFyaWFibGUmIzM5O3MgaW5jbHVzaW9uLiBEZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50IG9yIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCB0aGlzIGNvZGUgbWlnaHQgYmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQuIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSB3aXRoaW4gYW55IGNvbmRpdGlvbmFsIGJsb2NrcyBiZWZvcmUgSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggYW55IGFuYWx5c2lzIG9yIGZ1cnRoZXIgaW1wbGVtZW50YXRpb24gc3RlcHMgdGhhdCByZWx5IG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjaWZkZWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ND1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbi0tXG5tbS92bXNjYW4uYy0xODEtXG5tbS92bXNjYW4uYzoxODI6I2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xubW0vdm1zY2FuLmMtMTgzLSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcdFx0XHRcXFxuLS1cbm1tL3Ztc2Nhbi5jPTE5OT1pbnQgdm1fc3dhcHBpbmVzcyA9IDYwO1xubW0vdm1zY2FuLmMtMjAwLVxubW0vdm1zY2FuLmM6MjAxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTIwMi1cbi0tXG5tbS92bXNjYW4uYz0yMzE9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy0yMzQtXHRcdHJldHVybiB0cnVlO1xubW0vdm1zY2FuLmM6MjM1OiNpZmRlZiBDT05GSUdfQ0dST1VQX1dSSVRFQkFDS1xubW0vdm1zY2FuLmMtMjM2LVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4tLVxubW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODMwLVxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtODMyLS8qXG4tLVxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMTI4NS1cdFx0XHRcdFx0Z290byBhY3RpdmF0ZV9sb2NrZWQ7XG5tbS92bXNjYW4uYzoxMjg2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3Ztc2Nhbi5jLTEyODctXHRcdFx0XHRpZiAobnJfcGFnZXMgXHUwMDNlPSBIUEFHRV9QTURfTlIpIHtcbi0tXG5tbS92bXNjYW4uYz0yNjEzPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjYyNC1cbm1tL3Ztc2Nhbi5jOjI2MjU6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjI2LVxubW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2Mjg6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2MjktREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG4tLVxubW0vdm1zY2FuLmMtMjY4MC1cbm1tL3Ztc2Nhbi5jOjI2ODE6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtMjY4Mi1cdGlmIChtZW1jZykge1xuLS1cbm1tL3Ztc2Nhbi5jPTI4MDk9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjgyOC1cbm1tL3Ztc2Nhbi5jOjI4Mjk6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjgzMC1cbm1tL3Ztc2Nhbi5jPTI4MzE9c3RhdGljIHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKmdldF9tbV9saXN0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS92bXNjYW4uYy0yODM3LVxubW0vdm1zY2FuLmM6MjgzODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODM5LVx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTI4NzE9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yODc3LVx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZWxydV9nZW4ubGlzdCkpO1xubW0vdm1zY2FuLmM6Mjg3ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yODc5LVx0Vk1fV0FSTl9PTl9PTkNFKG1tLVx1MDAzZWxydV9nZW4ubWVtY2cpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4OTg9dm9pZCBscnVfZ2VuX2RlbF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTA2LVxubW0vdm1zY2FuLmM6MjkwNzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTA4LVx0bWVtY2cgPSBtbS1cdTAwM2VscnVfZ2VuLm1lbWNnO1xuLS1cbm1tL3Ztc2Nhbi5jLTI5MzAtXG5tbS92bXNjYW4uYzoyOTMxOiNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jLTI5MzItXHRtZW1fY2dyb3VwX3B1dChtbS1cdTAwM2VscnVfZ2VuLm1lbWNnKTtcbi0tXG5tbS92bXNjYW4uYy0yOTM2LVxubW0vdm1zY2FuLmM6MjkzNzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy0yOTM4LXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jPTQzMDc9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXG4tLVxubW0vdm1zY2FuLmMtNDM1Mi1cbm1tL3Ztc2Nhbi5jOjQzNTM6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNDM1NC1cbi0tXG5tbS92bXNjYW4uYz01NTEyPXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTUyNS1cbm1tL3Ztc2Nhbi5jOjU1MjY6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNTUyNy1cdFx0aWYgKG1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jPTU3Nzg9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01Nzk3LVxubW0vdm1zY2FuLmM6NTc5ODojaWZkZWYgQ09ORklHX01FTUNHXG5tbS92bXNjYW4uYy01Nzk5LVxuLS1cbm1tL3Ztc2Nhbi5jPTY2NzY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNjcxOC1cbm1tL3Ztc2Nhbi5jOjY3MTk6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vdm1zY2FuLmMtNjcyMC1cbi0tXG5tbS92bXNjYW4uYz03NTQ2PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03NTUwLVxubW0vdm1zY2FuLmM6NzU1MTojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXG5tbS92bXNjYW4uYy03NTUyLS8qXG4tLVxubW0vdm1zY2FuLmM9NzYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzY0MC1cdH0sXG5tbS92bXNjYW4uYzo3NjQxOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vdm1zY2FuLmMtNzY0Mi1cdHtcbi0tXG5tbS92bXNjYW4uYz03NjY0PW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxubW0vdm1zY2FuLmMtNzY2NS1cbm1tL3Ztc2Nhbi5jOjc2NjY6I2lmZGVmIENPTkZJR19OVU1BXG5tbS92bXNjYW4uYy03NjY3LS8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjkxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXNuJiMzOTt0IGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLiBUaGF0JiMzOTtzIGEgYml0IG9kZC4gQnV0IGhvbGQgb24sIGl0IHRha2VzIGEgYHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZ2AgYXMgYW4gYXJndW1lbnQuIEhtbSwgaXMgYHN0cnVjdCBtZW1fY2dyb3VwYCBldmVuICpkZWZpbmVkKiB3aGVuIGBDT05GSUdfTUVNQ0dgIGlzIGRpc2FibGVkPyBJJiMzOTttIHByZXR0eSBzdXJlIGl0IGlzLCBlaXRoZXIgYXMgYW4gb3BhcXVlIG9yIGVtcHR5IHN0cnVjdCwgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBhbmQgaW1wbGVtZW50YXRpb24uCgpCdXQgd2FpdCwgdGhpcyBmdW5jdGlvbiAqY2FsbHMqIGBtZW1jZ19pc19keWluZyhtZW1jZylgLiBOb3cgdGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBwb2ludC4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCBiZWhhdmVzIGFzIGV4cGVjdGVkIHdoZW4gbWVtY2cgaXMgZWl0aGVyIGVtcHR5IG9yIHVuYXZhaWxhYmxlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBtZW1jZ19pc19keWluZ2AgZnVuY3Rpb24gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZSBtZW1vcnkgY2dyb3VwIGluZnJhc3RydWN0dXJlIGlzbiYjMzk7dCBmdWxseSBlbmFibGVkLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBwb3RlbnRpYWwgZ290Y2hhIGxpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNnX2lzX2R5aW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc2Mz12b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzY0LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTc2NTpzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2Ni17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTgzNz1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4NDAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxODQxOnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODQyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4NTkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgbWVtY2dfaXNfZHlpbmdgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgbWVtY2dfaXNfZHlpbmdgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIE5vdywgdGhlIGtleSBxdWVzdGlvbiBmb3IgbWUgaXMgd2hldGhlciBgQ09ORklHX01FTUNHYCBoYXMgdG8gYmUgZW5hYmxlZCBmb3IgYG1lbWNnX2lzX2R5aW5nYCB0byBhY3R1YWxseSBiZSAqZnVuY3Rpb25hbCouIEkmIzM5O20gYmV0dGluZyB0aGF0IGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBkaXNhYmxlZCB2aWEgY29uZmlndXJhdGlvbiwgdGhpcyBmdW5jdGlvbiB3aWxsIHNpbXBseSByZXR1cm4gYGZhbHNlYC4gSXQgd291bGQgbWFrZSBzZW5zZSBhcyB0aGUgbWVjaGFuaXNtIGlzIG5vdCBzZXQuIFRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLCBJIHNob3VsZCBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBhbmQgc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIHVuZGVyIHRoZSBob29kLiBUaW1lIHRvIGRpZyBpbiBhbmQgY29uZmlybSB0aGUgZGV0YWlscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfaXNfZHlpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNzYzPXZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE3NjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzY1OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNzY2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODM3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTg0MC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4NDE6c3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE4NDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM2NwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBjdXJyZW50IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byBtZW1jb250cm9sLmgqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiBsaW5lcyAxNzY1IGFuZCAxODQxLiBCYXNlZCBvbiBteSBleGlzdGluZyB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgc3Vic3lzdGVtLCB0aGVzZSBsb2NhdGlvbnMgYXJlIGxpa2VseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFyZSBpbXBsZW1lbnRlZCwgcGVyaGFwcyBob3cgcmVzb3VyY2VzIGFyZSBhY2NvdW50ZWQgb3IgaG93IGxpbWl0YXRpb25zIGFyZSBlbmZvcmNlZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGNvZGVkIGluIHRoZXNlIHNwZWNpZmljIGxvY2F0aW9ucy4gSSBhbnRpY2lwYXRlIEkmIzM5O2xsIHByb2JhYmx5IGJlIGludGVyZXN0ZWQgaW4gaG93IHRoZSBjb3JlIGxvZ2ljIGludGVyc2VjdHMgd2l0aCBhIHNwZWNpZmljIGZlYXR1cmUgb3IgZnVuY3Rpb24uIEkmIzM5O20ga2VlbiB0byBkZWNpcGhlciB0aGUgbnVhbmNlcyBoaWRkZW4gd2l0aGluIHRoaXMgY3J1Y2lhbCBoZWFkZXIgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3NjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3NjA6XHRcbjE3NjE6XHR2b2lkIG1lbV9jZ3JvdXBfbm9kZV9maWx0ZXJfYWxsb3dlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIG5vZGVtYXNrX3QgKm1hc2spO1xuMTc2MjpcdFxuMTc2MzpcdHZvaWQgbWVtX2Nncm91cF9zaG93X3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbjE3NjQ6XHRcbjE3NjU6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuMTc2NjpcdHtcbjE3Njc6XHRcdHJldHVybiBtZW1jZyA/IGNzc19pc19keWluZyhcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpIDogZmFsc2U7XG4xNzY4Olx0fVxuMTc2OTpcdFxuMTc3MDpcdCNlbHNlXG4xNzcxOlx0c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCh2b2lkKVxuMTc3MjpcdHtcbjE3NzM6XHRcdHJldHVybiB0cnVlO1xuMTc3NDpcdH1cbjE3NzU6XHRcbjE3NzY6XHRzdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2NoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnAsXG4xNzc3Olx0XHRcdFx0XHRcdCBpbnQgb3JkZXIpXG4xNzc4Olx0e1xuMTc3OTpcdFx0cmV0dXJuIDA7XG4xNzgwOlx0fVxuMTc4MTpcdFxuMTc4MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZ19rbWVtX3VuY2hhcmdlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvcmRlcilcbjE3ODM6XHR7XG4xNzg0Olx0fVxuMTc4NTpcdFxuMTc4NjpcdHN0YXRpYyBpbmxpbmUgaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxuMTc4NzpcdFx0XHRcdFx0XHQgICBpbnQgb3JkZXIpXG4xNzg4Olx0e1xuMTc4OTpcdFx0cmV0dXJuIDA7XG4xNzkwOlx0fVxuMTc5MTpcdFxuMTc5MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxuMTc5MzpcdHtcbjE3OTQ6XHR9XG4xNzk1Olx0XG4xNzk2Olx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuMTc5NzpcdHtcbjE3OTg6XHRcdHJldHVybiBOVUxMO1xuMTc5OTpcdH1cbjE4MDA6XHRcbjE4MDE6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfYnBmX2VuYWJsZWQodm9pZClcbjE4MDI6XHR7XG4xODAzOlx0XHRyZXR1cm4gZmFsc2U7XG4xODA0Olx0fVxuMTgwNTpcdFxuMTgwNjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKVxuMTgwNzpcdHtcbjE4MDg6XHRcdHJldHVybiBmYWxzZTtcbjE4MDk6XHR9XG4xODEwOlx0XG4xODExOlx0c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9pZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4xODEyOlx0e1xuMTgxMzpcdFx0cmV0dXJuIC0xO1xuMTgxNDpcdH1cbjE4MTU6XHRcbjE4MTY6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdmlydCh2b2lkICpwKVxuMTgxNzpcdHtcbjE4MTg6XHRcdHJldHVybiBOVUxMO1xuMTgxOTpcdH1cbjE4MjA6XHRcbjE4MjE6XHRzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfb2JqY2dfZXZlbnRzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcbjE4MjI6XHRcdFx0XHRcdCAgICAgIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXG4xODIzOlx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGNvdW50KVxuMTgyNDpcdHtcbjE4MjU6XHR9XG4xODI2Olx0XG4xODI3Olx0c3RhdGljIGlubGluZSBpbm9fdCBwYWdlX2Nncm91cF9pbm8oc3RydWN0IHBhZ2UgKnBhZ2UpXG4xODI4Olx0e1xuMTgyOTpcdFx0cmV0dXJuIDA7XG4xODMwOlx0fVxuMTgzMTpcdFxuMTgzMjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX25vZGVfZmlsdGVyX2FsbG93ZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuMTgzMzpcdFx0XHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbWFzaylcbjE4MzQ6XHR7XG4xODM1Olx0fVxuMTgzNjpcdFxuMTgzNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4xODM4Olx0e1xuMTgzOTpcdH1cbjE4NDA6XHRcbjE4NDE6XHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfaXNfZHlpbmcoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuMTg0MjpcdHtcbjE4NDM6XHRcdHJldHVybiBmYWxzZTtcbjE4NDQ6XHR9XG4xODQ1Olx0I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xuMTg0NjpcdFxuMTg0NzpcdCNpZiBkZWZpbmVkKENPTkZJR19NRU1DRykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1pTV0FQKVxuMTg0ODpcdGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcbjE4NDk6XHR2b2lkIG9ial9jZ3JvdXBfY2hhcmdlX3pzd2FwKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZywgc2l6ZV90IHNpemUpO1xuMTg1MDpcdHZvaWQgb2JqX2Nncm91cF91bmNoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csIHNpemVfdCBzaXplKTtcbjE4NTE6XHRib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbjE4NTI6XHQjZWxzZVxuMTg1MzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX21heV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4xODU0Olx0e1xuMTg1NTpcdFx0cmV0dXJuIHRydWU7XG4xODU2Olx0fVxuMTg1NzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBvYmpfY2dyb3VwX2NoYXJnZV96c3dhcChzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2csXG4xODU4Olx0XHRcdFx0XHRcdCAgIHNpemVfdCBzaXplKVxuMTg1OTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMDE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NzQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1jZyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGllZCB0byBgQ09ORklHX01FTUNHYC4gVGhhdCYjMzk7cyBhIGdpdmVuLiBBbmQgc2luY2UgaXQmIzM5O3MgdG91Y2hpbmcgYG1tL21lbWNvbnRyb2wtdjEuY2AsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCBgQ09ORklHX01FTUNHX1YxYCBlbmFibGVkIGFzIHdlbGwgdG8gZnVsbHkgdGVzdCB0aGUgY2hhbmdlcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyBjb21waWxlZCB1bmRlciBgQ09ORklHX01FTUNHX1YxYC4gU28gYm90aCBhcmUgcmVxdWlyZWQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSByZWFjaGFiaWxpdHkgb2YgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaGFuZGxlcyBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGVYL3JlY2xhaW1gLCBhbmQgYWxzbyBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIGZvciB0aGUgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlLiBHb29kLCBib3RoIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkZWQgdG8ga25vdy4KCkZ1bmN0aW9uYWxseSwgdGhlIHBhdGNoIHNlZW1zIHNvdW5kLiBJdCYjMzk7cyBhZGRpbmcgY3J1Y2lhbCBjaGVja3MgdG8gaGFuZGxlIG1lbWNnIGRlc3RydWN0aW9uIGdyYWNlZnVsbHksIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzIG9yIHN0YWxscyB3aGVuIHRob3NlIG9wZXJhdGlvbnMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LiBUaGF0JiMzOTtzIGEgY29tbW9uIGlzc3VlIHdpdGggY29uY3VycmVudCBvcGVyYXRpb25zIG9uIHNoYXJlZCByZXNvdXJjZXMuIFNtYXJ0LCB0aGlzIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QuCgpJIG5lZWQgdG8ga2VlcCB0aGVzZSBzeW1ib2xzIGluIG1pbmQgYXMgSSBkaXZlIGRlZXBlcjogYG1lbV9jZ3JvdXBfcmVzaXplX21heGAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbmQgb2YgY291cnNlLCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBhcmUgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGx1cmtpbmc/IExvb2tzIGxpa2UganVzdCBgQ09ORklHX01FTUNHYCBhbmQgYENPTkZJR19NRU1DR19WMWAsIHdoaWNoIGlzIHdoYXQgSSB0aG91Z2h0LgoKUXVpY2sgc2FuaXR5IGNoZWNrOiBJcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBhbnl0aGluZyBlbHNlPyBJbiBgbW0vdm1zY2FuLmNgLCBgcmVjbGFpbV9zdG9yZWAgaXMgdW5kZXIgYENPTkZJR19OVU1BYCwgSSB3b25kZXIgaWYgdGhhdCBhZmZlY3RzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGF0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlY2xhaW1fc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MDA5PUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcbi0tXG5tbS92bXNjYW4uYy04MDExLSNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG5tbS92bXNjYW4uYzo4MDEyOnN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxubW0vdm1zY2FuLmMtODAxMy1cdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNZW1vcnkgUmVjbGFpbSBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGludGVyYWN0cyB3aXRoIHZhcmlvdXMga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSB0aGF0IGByZWNsYWltX3N0b3JlYCByZWxpZXMgb24gYm90aCBgQ09ORklHX1NZU0ZTYCBhbmQgYENPTkZJR19OVU1BYCwgd2hpY2ggbWFrZXMgc2Vuc2U7IE5VTUEgc3lzdGVtcyBvZnRlbiBiZW5lZml0IGZyb20gcHJvYWN0aXZlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgc3lzZnMgcHJvdmlkZXMgdGhlIGludGVyZmFjZS4KCkJ1dCBoZXJlJiMzOTtzIGEgd3JpbmtsZTogSSYjMzk7bSBhbHNvIGZpbmRpbmcgdGhhdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgY2FsbGVkIGZyb20gYG1lbW9yeV9yZWNsYWltYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCAqdGhhdCogaXMgZ292ZXJuZWQgYnkgYENPTkZJR19NRU1DR2AuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBldmVuIGlmIGBDT05GSUdfU1lTRlNgIG9yIGBDT05GSUdfTlVNQWAgYXJlbiYjMzk7dCBlbmFibGVkLCBpZiBgQ09ORklHX01FTUNHYCBpcywgSSBjYW4gc3RpbGwgdHJpZ2dlciBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uLiBJZiBgQ09ORklHX01FTUNHYCAqaXNuJiMzOTt0KiBlbmFibGVkLCBpcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZXZlbiBjb21waWxlZCBpbj8gSXQmIzM5O3MgYSBjcml0aWNhbCBkZXBlbmRlbmN5IEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBtbS92bXNjYW4uY2AgYXJvdW5kIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZGVmaW5pdGlvbiB0byBjb25maXJtIHRoaXMuIEdvdHRhIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgcHJlcHJvY2Vzc29yIGxvZ2ljIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBpbmNsdWRlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODU1Olx0ZW51bSB7XG43ODU2Olx0XHRNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTID0gMCxcbjc4NTc6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLFxuNzg1ODpcdFx0TUVNT1JZX1JFQ0xBSU1fTlVMTCxcbjc4NTk6XHR9O1xuNzg2MDpcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbjc4NjE6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXCYjMzQ7c3dhcHBpbmVzcz0lZFwmIzM0O30sXG43ODYyOlx0XHR7IE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYLCBcJiMzNDtzd2FwcGluZXNzPW1heFwmIzM0O30sXG43ODYzOlx0XHR7IE1FTU9SWV9SRUNMQUlNX05VTEwsIE5VTEwgfSxcbjc4NjQ6XHR9O1xuNzg2NTpcdFxuNzg2NjpcdGludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbjc4Njc6XHRcdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG43ODY4Olx0e1xuNzg2OTpcdFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xuNzg3MDpcdFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xuNzg3MTpcdFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcbjc4NzI6XHRcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcbjc4NzM6XHRcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcbjc4NzQ6XHRcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcbjc4NzU6XHRcbjc4NzY6XHRcdGlmICghYnVmIHx8ICghbWVtY2cgXHUwMDI2XHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFx1MDAyNlx1MDAyNiBwZ2RhdCkpXG43ODc3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzg3ODpcdFxuNzg3OTpcdFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcbjc4ODA6XHRcbjc4ODE6XHRcdG9sZF9idWYgPSBidWY7XG43ODgyOlx0XHRucl90b19yZWNsYWltID0gbWVtcGFyc2UoYnVmLCBcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xuNzg4MzpcdFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxuNzg4NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjc4ODU6XHRcbjc4ODY6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG43ODg3Olx0XG43ODg4Olx0XHR3aGlsZSAoKHN0YXJ0ID0gc3Ryc2VwKFx1MDAyNmJ1ZiwgXCYjMzQ7IFwmIzM0OykpICE9IE5VTEwpIHtcbjc4ODk6XHRcdFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxuNzg5MDpcdFx0XHRcdGNvbnRpbnVlO1xuNzg5MTpcdFx0XHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XG43ODkyOlx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcbjc4OTM6XHRcdFx0XHRpZiAobWF0Y2hfaW50KFx1MDAyNmFyZ3NbMF0sIFx1MDAyNnN3YXBwaW5lc3MpKVxuNzg5NDpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODk1Olx0XHRcdFx0aWYgKHN3YXBwaW5lc3MgXHUwMDNjIE1JTl9TV0FQUElORVNTIHx8XG43ODk2Olx0XHRcdFx0ICAgIHN3YXBwaW5lc3MgXHUwMDNlIE1BWF9TV0FQUElORVNTKVxuNzg5NzpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43ODk4Olx0XHRcdFx0YnJlYWs7XG43ODk5Olx0XHRcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVg6XG43OTAwOlx0XHRcdFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xuNzkwMTpcdFx0XHRcdGJyZWFrO1xuNzkwMjpcdFx0XHRkZWZhdWx0OlxuNzkwMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuNzkwNDpcdFx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTE0CgkJCQkJCQlvdXRwdXQ6IDE0NAoJCQkJCQkJdGhvdWdodHM6IDQxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFdvcnRoaW5lc3MqKgoKT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNvbXBpbGVkIHJlZ2FyZGxlc3MuIFRoYXQmIzM5O3MgYSBnaXZlbi4gSG93ZXZlciwgdGhlIHBhdGNoIGl0c2VsZiBpbnRyb2R1Y2VzIGEgY29uZGl0aW9uYWwgYGlmIChtZW1jZyAmYW1wOyZhbXA7IG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlgIHdoaWNoIHJlbGllcyBvbiBgbWVtY2dfaXNfZHlpbmdgIGV2YWx1YXRpbmcgdG8gdHJ1ZS4gQW5kIGBtZW1jZ19pc19keWluZ2AmIzM5O3MgcmV0dXJuIGRlcGVuZHMgb24gYENPTkZJR19NRU1DR2AgYmVpbmcgZW5hYmxlZC4KClRoZXJlZm9yZSwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGhlcmUgYXJlIGRlZmluaXRpdmVseSBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgLgoKTm93LCByZWdhcmRpbmcgdGhlIGZvY3VzIHN5bWJvbHMsIEkmIzM5O3ZlIGdvdDogYG1lbV9jZ3JvdXBfcmVzaXplX21heGAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLgoKSSYjMzk7dmUgY2hlY2tlZCwgYW5kIHRob3NlIGFyZSBhbGwgdGhlIGNvcnJlY3Qgc3ltYm9scyByZWxhdGVkIHRvIHRoaXMgcGF0Y2guCgpUaGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC12MS5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGVzZSBhcmUgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQsIGNydWNpYWxseSwgYXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBjZ3JvdXBmcy4gVGhpcyBtYWtlcyB0aGVtIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuCgpNeSBjb25jbHVzaW9uIGlzOgoKV29ydGhGdXp6aW5nOiB0cnVlCkZvY3VzU3ltYm9sczogWyYjMzQ7bWVtX2Nncm91cF9yZXNpemVfbWF4JiMzNDssICYjMzQ7bWVtX2Nncm91cF9mb3JjZV9lbXB0eSYjMzQ7LCAmIzM0O21lbW9yeV9oaWdoX3dyaXRlJiMzNDssICYjMzQ7bWVtb3J5X21heF93cml0ZSYjMzQ7LCAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0O10KRW5hYmxlQ29uZmlnczogWyYjMzQ7TUVNQ0cmIzM0OywgJiMzNDtNRU1DR19WMSYjMzQ7XQpSZWFzb25pbmc6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciBkeWluZyBtZW1vcnkgY2dyb3VwcyBpbiBzZXZlcmFsIGNncm91cCB3cml0ZSBoYW5kbGVycyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aHMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBvciBzdGFsbHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVhcmx5LWV4aXQgcGF0aHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LiYjMzQ7CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21lbV9jZ3JvdXBfcmVzaXplX21heCYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2ZvcmNlX2VtcHR5JiMzNDssCiAgICAmIzM0O21lbW9yeV9oaWdoX3dyaXRlJiMzNDssCiAgICAmIzM0O21lbW9yeV9tYXhfd3JpdGUmIzM0OywKICAgICYjMzQ7dXNlcl9wcm9hY3RpdmVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGNoZWNrcyBmb3IgZHlpbmcgbWVtb3J5IGNncm91cHMgaW4gc2V2ZXJhbCBjZ3JvdXAgd3JpdGUgaGFuZGxlcnMgYW5kIHByb2FjdGl2ZSByZWNsYWltIHBhdGhzIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgb3Igc3RhbGxzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlYXJseS1leGl0IHBhdGhzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1fY2dyb3VwX3Jlc2l6ZV9tYXgmIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9mb3JjZV9lbXB0eSYjMzQ7LAogICAgJiMzNDttZW1vcnlfaGlnaF93cml0ZSYjMzQ7LAogICAgJiMzNDttZW1vcnlfbWF4X3dyaXRlJiMzNDssCiAgICAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBjaGVja3MgZm9yIGR5aW5nIG1lbW9yeSBjZ3JvdXBzIGluIHNldmVyYWwgY2dyb3VwIHdyaXRlIGhhbmRsZXJzIGFuZCBwcm9hY3RpdmUgcmVjbGFpbSBwYXRocyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIG9yIHN0YWxscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZWFybHktZXhpdCBwYXRocyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MjoxMC4zOTIzODE3MzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDg2MTk0MjY2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhcIixcbiAgICBcIm1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlcIixcbiAgICBcIm1lbW9yeV9oaWdoX3dyaXRlXCIsXG4gICAgXCJtZW1vcnlfbWF4X3dyaXRlXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjaGVja3MgZm9yIGR5aW5nIG1lbW9yeSBjZ3JvdXBzIGluIHNldmVyYWwgY2dyb3VwIHdyaXRlIGhhbmRsZXJzIGFuZCBwcm9hY3RpdmUgcmVjbGFpbSBwYXRocyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIG9yIHN0YWxscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZWFybHktZXhpdCBwYXRocyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjEwLjM5MjM4NjY0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE1MjE1MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWM1YjRjMjRjNmZmMDc4MDE0Y2NlNmMxZDhhZmM3MzMyYWQxZGIwZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAzMCAwMTo1MjowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmMgYi9tbS9tZW1jb250cm9sLXYxLmNcXG5pbmRleCA3NjUwNjkyMTE1Njc4Yy4uYWQyM2RlOTg1ZDlhZjEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXFxuKysrIGIvbW0vbWVtY29udHJvbC12MS5jXFxuQEAgLTE1MTMsNiArMTUxMyw5IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gXFx0XFx0aWYgKCFyZXQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0aWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAoIWRyYWluZWQpIHtcXG4gXFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG4gXFx0XFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuQEAgLTE1NTEsNiArMTU1NCw5IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gXFxuK1xcdFxcdGlmIChtZW1jZ19pc19keWluZyhtZW1jZykpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4gXFx0XFx0aWYgKCF0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCAxLCBHRlBfS0VSTkVMLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAsIE5VTEwpKVxcbiBcXHRcXHRcXHRucl9yZXRyaWVzLS07XFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IGQyMGZmYzgyNzMwNmU5Li5hZDVmNmRmZGMwMjE0MyAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNDc5NCw2ICs0Nzk0LDkgQEAgc3RhdGljIHNzaXplX3QgbWVtb3J5X2hpZ2hfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0aWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAoIWRyYWluZWQpIHtcXG4gXFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG4gXFx0XFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuQEAgLTQ4NDUsNiArNDg0OCw5IEBAIHN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxcbiBcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4rXFx0XFx0aWYgKG1lbWNnX2lzX2R5aW5nKG1lbWNnKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHRpZiAoIWRyYWluZWQpIHtcXG4gXFx0XFx0XFx0ZHJhaW5fYWxsX3N0b2NrKG1lbWNnKTtcXG4gXFx0XFx0XFx0ZHJhaW5lZCA9IHRydWU7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA3NTRjNWY1ZDcxNmFhZC4uMDkxYjYwOWNmMWIxZWIgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC03OTEyLDYgKzc5MTIsOSBAQCBpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuIFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5UUjtcXG4gXFxuK1xcdFxcdGlmIChtZW1jZyBcXHUwMDI2XFx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbitcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogVGhpcyBpcyB0aGUgZmluYWwgYXR0ZW1wdCwgZHJhaW4gcGVyY3B1IGxydSBjYWNoZXMgaW4gdGhlXFxuIFxcdFxcdCAqIGhvcGUgb2YgaW50cm9kdWNpbmcgbW9yZSBldmljdGFibGUgcGFnZXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjEwLjgwODExNDQ5M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA0NDYyMDEzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9yZXNpemVfbWF4XCIsXG4gICAgXCJtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5XCIsXG4gICAgXCJtZW1vcnlfaGlnaF93cml0ZVwiLFxuICAgIFwibWVtb3J5X21heF93cml0ZVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciBkeWluZyBtZW1vcnkgY2dyb3VwcyBpbiBzZXZlcmFsIGNncm91cCB3cml0ZSBoYW5kbGVycyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aHMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBvciBzdGFsbHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVhcmx5LWV4aXQgcGF0aHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFjNWI0YzI0YzZmZjA3ODAxNGNjZTZjMWQ4YWZjNzMzMmFkMWRiMGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAwMTo1MjowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuYyBiL21tL21lbWNvbnRyb2wtdjEuY1xuaW5kZXggNzY1MDY5MjExNTY3OGMuLmFkMjNkZTk4NWQ5YWYxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5jXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmNcbkBAIC0xNTEzLDYgKzE1MTMsOSBAQCBzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdGlmICghcmV0KVxuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRpZiAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAoIWRyYWluZWQpIHtcbiBcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuIFx0XHRcdGRyYWluZWQgPSB0cnVlO1xuQEAgLTE1NTEsNiArMTU1NCw5IEBAIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gXHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbiBcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIFxuK1x0XHRpZiAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAoIXRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMobWVtY2csIDEsIEdGUF9LRVJORUwsXG4gXHRcdFx0XHRcdFx0ICBNRU1DR19SRUNMQUlNX01BWV9TV0FQLCBOVUxMKSlcbiBcdFx0XHRucl9yZXRyaWVzLS07XG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCBkMjBmZmM4MjczMDZlOS4uYWQ1ZjZkZmRjMDIxNDMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTQ3OTQsNiArNDc5NCw5IEBAIHN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcbiBcdFx0aWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIFx0XHRcdGJyZWFrO1xuIFxuK1x0XHRpZiAobWVtY2dfaXNfZHlpbmcobWVtY2cpKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHRpZiAoIWRyYWluZWQpIHtcbiBcdFx0XHRkcmFpbl9hbGxfc3RvY2sobWVtY2cpO1xuIFx0XHRcdGRyYWluZWQgPSB0cnVlO1xuQEAgLTQ4NDUsNiArNDg0OCw5IEBAIHN0YXRpYyBzc2l6ZV90IG1lbW9yeV9tYXhfd3JpdGUoc3RydWN0IGtlcm5mc19vcGVuX2ZpbGUgKm9mLFxuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0YnJlYWs7XG4gXG4rXHRcdGlmIChtZW1jZ19pc19keWluZyhtZW1jZykpXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdGlmICghZHJhaW5lZCkge1xuIFx0XHRcdGRyYWluX2FsbF9zdG9jayhtZW1jZyk7XG4gXHRcdFx0ZHJhaW5lZCA9IHRydWU7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNzU0YzVmNWQ3MTZhYWQuLjA5MWI2MDljZjFiMWViIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzkxMiw2ICs3OTEyLDkgQEAgaW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuIFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXG4gXHRcdFx0cmV0dXJuIC1FSU5UUjtcbiBcbitcdFx0aWYgKG1lbWNnIFx1MDAyNlx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpXG4rXHRcdFx0cmV0dXJuIC1FQUdBSU47XG4rXG4gXHRcdC8qXG4gXHRcdCAqIFRoaXMgaXMgdGhlIGZpbmFsIGF0dGVtcHQsIGRyYWluIHBlcmNwdSBscnUgY2FjaGVzIGluIHRoZVxuIFx0XHQgKiBob3BlIG9mIGludHJvZHVjaW5nIG1vcmUgZXZpY3RhYmxlIHBhZ2VzLlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MTAuODA4MTE1ODUzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAwMDUzNjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIER5aW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgbGlrZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIHRoZXkncmUgcHV0dGluZyBpbiBgbWVtY2dfaXNfZHlpbmcobWVtY2cpYCBjaGVja3MgaW4gYSBmZXcga2V5IHNwb3RzLiBNYWtlcyBzZW5zZTsgaWYgYSBtZW1jZyBpcyBiZWluZyB0b3JuIGRvd24sIHdlIGRvbid0IHdhbnQgdG8ga2VlcCB0aHJhc2hpbmcgYXJvdW5kIHRyeWluZyB0byBkbyB0aGluZ3MgdGhhdCBhcmUgbm93IHBvaW50bGVzcywgb3IgcG90ZW50aWFsbHkgZXZlbiBoYXJtZnVsLiBUaGV5J3ZlIHRhcmdldGVkIHNldmVyYWwgZnVuY3Rpb25zOiBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCwgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgIChib3RoIGluIGBtbS9tZW1jb250cm9sLXYxLmNgKSwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgIChpbiBgbW0vbWVtY29udHJvbC5jYCksIGFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgd2hpY2ggaXMgaW4gYG1tL3Ztc2Nhbi5jYC4gIEFsbCBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBjZ3JvdXAuIFRoZSBpZGVhIGlzIHRvIGJhaWwgZWFybHkgaW4gdGhlc2UgbG9vcHMgb3IgZWFybHkgcmV0dXJucyBpZiB0aGUgdGFyZ2V0IG1lbWNnIGlzIGluIHRoZSBwcm9jZXNzIG9mIGR5aW5nLlxuXG5HaXZlbiB0aGUgc2NvcGUsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGNvcnJlY3RseSBtYW5hZ2VkLiBUaGlzIHNlZW1zIHRvIGJlIHByZXR0eSBzdGFuZGFyZCBtZW1jZyBzdHVmZiwgc28gSSdtIGV4cGVjdGluZyBgQ09ORklHX01FTUNHYCBhbmQsIHNpbmNlIHRoZXkncmUgdG91Y2hpbmcgYG1lbWNvbnRyb2wtdjEuY2AsIHByb2JhYmx5IGBDT05GSUdfTUVNQ0dfVjFgLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRob3NlLiBJdCB3aWxsIGxpa2VseSByZXNpZGUgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgLiBJJ2xsIHJ1biB0aHJvdWdoIHRob3NlIHF1aWNrbHkgYW5kIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MjoxNS44MDg2NTM5MThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0ODg0NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX01FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU1NSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmM9MTA2PXN0YXRpYyBib29sIGRhbW9uX3N5c2ZzX21lbWNnX3BhdGhfZXEoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtY29tbW9uLmMtMTA4LXtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMDk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExMC1cXHRjZ3JvdXBfcGF0aChtZW1jZy1cXHUwMDNlY3NzLmNncm91cCwgbWVtY2dfcGF0aF9idWYsIFBBVEhfTUFYKTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExMi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9kYW1vbi9zeXNmcy1jb21tb24uYzoxMTM6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL2RhbW9uL3N5c2ZzLWNvbW1vbi5jLTExNC1cXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9kZWJ1Zy5jPTcwPXN0YXRpYyB2b2lkIF9fZHVtcF9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL2RlYnVnLmMtOTYtXFxubW0vZGVidWcuYzo5NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy05OC1cXHRpZiAoZm9saW8tXFx1MDAzZW1lbWNnX2RhdGEpXFxuLS1cXG5tbS9kZWJ1Zy5jPTE3NT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9kZWJ1Zy5jLTE4OC0jZW5kaWZcXG5tbS9kZWJ1Zy5jOjE4OTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy0xOTAtXFx0XFx0XFxcIm93bmVyICVweCBcXFwiXFxuLS1cXG5tbS9kZWJ1Zy5jLTIxNy0jZW5kaWZcXG5tbS9kZWJ1Zy5jOjIxODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vZGVidWcuYy0yMTktXFx0XFx0bW0tXFx1MDAzZW93bmVyLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zNTI3PXN0YXRpYyB2b2lkIF9fc3BsaXRfZm9saW9fdG9fb3JkZXIoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IG9sZF9vcmRlcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzYxOC1cXHRcXHRcXHRmb2xpb19zZXRfaWRsZShuZXdfZm9saW8pO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MzYxOTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vaHVnZV9tZW1vcnkuYy0zNjIwLVxcdFxcdG5ld19mb2xpby1cXHUwMDNlbWVtY2dfZGF0YSA9IGZvbGlvLVxcdTAwM2VtZW1jZ19kYXRhO1xcbi0tXFxubW0vaHdwb2lzb24taW5qZWN0LmM9NDU9c3RhdGljIGludCBod3BvaXNvbl9maWx0ZXJfZmxhZ3Moc3RydWN0IHBhZ2UgKnApXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYy02Ni0gKi9cXG5tbS9od3BvaXNvbi1pbmplY3QuYzo2NzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vaHdwb2lzb24taW5qZWN0LmMtNjgtc3RhdGljIHU2NCBod3BvaXNvbl9maWx0ZXJfbWVtY2c7XFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYz0xNjI9c3RhdGljIGludCBfX2luaXQgcGZuX2luamVjdF9pbml0KHZvaWQpXFxuLS1cXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xOTEtXFxubW0vaHdwb2lzb24taW5qZWN0LmM6MTkyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9od3BvaXNvbi1pbmplY3QuYy0xOTMtXFx0ZGVidWdmc19jcmVhdGVfdTY0KFxcXCJjb3JydXB0LWZpbHRlci1tZW1jZ1xcXCIsIDA2MDAsIGh3cG9pc29uX2RpcixcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmM9NjExPXN0YXRpYyB1bnNpZ25lZCBsb25nIGtmZW5jZV9pbml0X3Bvb2wodm9pZClcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtNjM4LVxcdFxcdF9fU2V0UGFnZVNsYWIocGFnZSk7XFxubW0va2ZlbmNlL2NvcmUuYzo2Mzk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2tmZW5jZS9jb3JlLmMtNjQwLVxcdFxcdHN0cnVjdCBzbGFiICpzbGFiID0gcGFnZV9zbGFiKHBhZ2UpO1xcbi0tXFxubW0va2ZlbmNlL2NvcmUuYy03MDYtXFx0XFx0cGFnZSA9IHBmbl90b19wYWdlKHN0YXJ0X3BmbiArIGkpO1xcbm1tL2tmZW5jZS9jb3JlLmM6NzA3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9rZmVuY2UvY29yZS5jLTcwOC1cXHRcXHRzdHJ1Y3Qgc2xhYiAqc2xhYiA9IHBhZ2Vfc2xhYihwYWdlKTtcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmM9MTI0Nz12b2lkIF9fa2ZlbmNlX2ZyZWUodm9pZCAqYWRkcilcXG4tLVxcbm1tL2tmZW5jZS9jb3JlLmMtMTI1MC1cXG5tbS9rZmVuY2UvY29yZS5jOjEyNTE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2tmZW5jZS9jb3JlLmMtMTI1Mi1cXHRLRkVOQ0VfV0FSTl9PTihtZXRhLVxcdTAwM2VvYmpfZXh0cy5vYmpjZyk7XFxuLS1cXG5tbS9rZmVuY2Uva2ZlbmNlLmg9NTk9c3RydWN0IGtmZW5jZV9tZXRhZGF0YSB7XFxuLS1cXG5tbS9rZmVuY2Uva2ZlbmNlLmgtMTA0LVxcdHUzMiBhbGxvY19zdGFja19oYXNoIF9fZ3VhcmRlZF9ieShcXHUwMDI2bG9jayk7XFxubW0va2ZlbmNlL2tmZW5jZS5oOjEwNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0va2ZlbmNlL2tmZW5jZS5oLTEwNi1cXHRzdHJ1Y3Qgc2xhYm9ial9leHQgb2JqX2V4dHM7XFxuLS1cXG5tbS9saXN0X2xydS5jPTI5PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1X29uZSAqbCwgYm9vbCBpcnFfb2ZmLFxcbi0tXFxubW0vbGlzdF9scnUuYy0zOS1cXG5tbS9saXN0X2xydS5jOjQwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9saXN0X2xydS5jLTQxLXN0YXRpYyBMSVNUX0hFQUQobWVtY2dfbGlzdF9scnVzKTtcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9MTQxPWxvY2tfbGlzdF9scnVfb2ZfbWVtY2coc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTE1MC19XFxubW0vbGlzdF9scnUuYzoxNTE6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL2xpc3RfbHJ1LmMtMTUyLVxcbi0tXFxubW0vbGlzdF9scnUuYz00MTM9dW5zaWduZWQgbG9uZyBsaXN0X2xydV93YWxrX25vZGUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGludCBuaWQsXFxuLS1cXG5tbS9saXN0X2xydS5jLTQyMS1cXG5tbS9saXN0X2xydS5jOjQyMjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00MjMtXFx0aWYgKCpucl90b193YWxrIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiBsaXN0X2xydV9tZW1jZ19hd2FyZShscnUpKSB7XFxuLS1cXG5tbS9saXN0X2xydS5jPTQ1MT1zdGF0aWMgdm9pZCBpbml0X29uZV9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwpXFxuLS1cXG5tbS9saXN0X2xydS5jLTQ2MS1cXG5tbS9saXN0X2xydS5jOjQ2MjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy00NjMtc3RhdGljIHN0cnVjdCBsaXN0X2xydV9tZW1jZyAqbWVtY2dfaW5pdF9saXN0X2xydV9vbmUoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGdmcF90IGdmcClcXG4tLVxcbm1tL2xpc3RfbHJ1LmM9NjU5PXN0YXRpYyB2b2lkIG1lbWNnX2Rlc3Ryb3lfbGlzdF9scnUoc3RydWN0IGxpc3RfbHJ1ICpscnUpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY2MS19XFxubW0vbGlzdF9scnUuYzo2NjI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL2xpc3RfbHJ1LmMtNjYzLVxcbm1tL2xpc3RfbHJ1LmM9NjY0PWludCBfX2xpc3RfbHJ1X2luaXQoc3RydWN0IGxpc3RfbHJ1ICpscnUsIGJvb2wgbWVtY2dfYXdhcmUsIHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIpXFxuLS1cXG5tbS9saXN0X2xydS5jLTY2Ny1cXG5tbS9saXN0X2xydS5jOjY2ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vbGlzdF9scnUuYy02NjktXFx0aWYgKHNocmlua2VyKVxcbi0tXFxubW0vbGlzdF9scnUuYz02OTI9dm9pZCBsaXN0X2xydV9kZXN0cm95KHN0cnVjdCBsaXN0X2xydSAqbHJ1KVxcbi0tXFxubW0vbGlzdF9scnUuYy03MDMtXFxubW0vbGlzdF9scnUuYzo3MDQ6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL2xpc3RfbHJ1LmMtNzA1LVxcdGxydS1cXHUwMDNlc2hyaW5rZXJfaWQgPSAtMTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0yND1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTI3LS8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cXG5tbS9tZW1jb250cm9sLXYxLmg6Mjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wtdjEuaC0yOS1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD05MT1leHRlcm4gc3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdO1xcbm1tL21lbWNvbnRyb2wtdjEuaC05Mi1cXG5tbS9tZW1jb250cm9sLXYxLmg6OTM6I2Vsc2VcXHQvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5tbS9tZW1jb250cm9sLXYxLmgtOTQtXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9MTIxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHt9XFxubW0vbWVtY29udHJvbC12MS5oLTEyMi1cXG5tbS9tZW1jb250cm9sLXYxLmg6MTIzOiNlbmRpZlxcdC8qIENPTkZJR19NRU1DR19WMSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaC0xMjQtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjA5PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMjgtXFxubW0vbWVtY29udHJvbC5jOjIyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTIzMC1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDU9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI3LVxcbm1tL21lbWNvbnRyb2wuYzo1Mjg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01Mjktc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxubW0vbWVtY29udHJvbC5jOjU1NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTU1NS1cXHRQR1BHSU4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Nzg3PXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04MDItXFxubW0vbWVtY29udHJvbC5jOjgwMzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTgwNC0vKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTg3MT12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04ODMtXFxubW0vbWVtY29udHJvbC5jOjg4NDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTg4NS0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTA1OT1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMDY2LVxcbm1tL21lbWNvbnRyb2wuYzoxMDY3OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTA2OC11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNjY3PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNjcyLVxcbm1tL21lbWNvbnRyb2wuYzoxNjczOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTY3NC11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTY5Mz1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3MzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkrKykge1xcbm1tL21lbWNvbnRyb2wuYzoxNzQwOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTc0MS1cXHRcXHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzkxPXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTgxMi1cXHRcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcXG5tbS9tZW1jb250cm9sLmM6MTgxMzojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE4MTQtXFx0ZWxzZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjgwMD1zdGF0aWMgdm9pZCBjb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yODEyLVxcbm1tL21lbWNvbnRyb2wuYzoyODEzOiNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5tbS9tZW1jb250cm9sLmMtMjgxNC1zdGF0aWMgaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiX25taV9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yOTg2PV9fYWx3YXlzX2lubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqY3VycmVudF9vYmpfY2dyb3VwKHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjk5MS1cXG5tbS9tZW1jb250cm9sLmM6Mjk5MjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTUVNQ0dfTk1JX1VOU0FGRSkgXFx1MDAyNlxcdTAwMjYgaW5fbm1pKCkpXFxubW0vbWVtY29udHJvbC5jLTI5OTMtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzAzMj1zdHJ1Y3Qgb2JqX2Nncm91cCAqZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwNDItXFxubW0vbWVtY29udHJvbC5jOjMwNDM6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy0zMDQ0LXN0YXRpYyBpbmxpbmUgdm9pZCBhY2NvdW50X2ttZW1fbm1pX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQxNTc9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDE4MC1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIFxcdTAwMjZwYXJlbnQtXFx1MDAzZXN3YXAsIGZhbHNlKTtcXG5tbS9tZW1jb250cm9sLmM6NDE4MTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQxODItXFx0XFx0bWVtY2ctXFx1MDAzZW1lbW9yeS50cmFja19mYWlsY250ID0gIW1lbWNnX29uX2RmbDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MTkxLVxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgTlVMTCwgZmFsc2UpO1xcbm1tL21lbWNvbnRyb2wuYzo0MTkyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNDE5My1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIE5VTEwsIGZhbHNlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00MzU5PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM2NC1cXHRwYWdlX2NvdW50ZXJfc2V0X21heChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIFBBR0VfQ09VTlRFUl9NQVgpO1xcbm1tL21lbWNvbnRyb2wuYzo0MzY1OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNDM2Ni1cXHRwYWdlX2NvdW50ZXJfc2V0X21heChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW0sIFBBR0VfQ09VTlRFUl9NQVgpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQzOTQ9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0MjktXFxubW0vbWVtY29udHJvbC5jOjQ0MzA6I2lmZGVmIENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbm1tL21lbWNvbnRyb2wuYy00NDMxLXN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTA4Mj1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA5My1cXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXFxubW0vbWVtY29udHJvbC5jOjUwOTQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01MDk1LVxcdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYwMjg9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDMzLVxcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XFxubW0vbWVtY29udHJvbC5jOjYwMzQ6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy02MDM1LVxcdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBtZW1zd19maWxlcykpO1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEwMzE9c3RhdGljIGlubGluZSBib29sIHBhZ2VfZXhwZWN0ZWRfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMTAzOC1cXHRcXHRcXHRwYWdlX3JlZl9jb3VudChwYWdlKSB8XFxubW0vcGFnZV9hbGxvYy5jOjEwMzk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3BhZ2VfYWxsb2MuYy0xMDQwLVxcdFxcdFxcdHBhZ2UtXFx1MDAzZW1lbWNnX2RhdGEgfFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTEwNDk9c3RhdGljIGNvbnN0IGNoYXIgKnBhZ2VfYmFkX3JlYXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBmbGFncylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy0xMDY0LVxcdH1cXG5tbS9wYWdlX2FsbG9jLmM6MTA2NTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vcGFnZV9hbGxvYy5jLTEwNjYtXFx0aWYgKHVubGlrZWx5KHBhZ2UtXFx1MDAzZW1lbWNnX2RhdGEpKVxcbi0tXFxubW0vcGFnZV9jb3VudGVyLmM9MjcyPWludCBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICptYXgsXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYy0yOTItXFxubW0vcGFnZV9jb3VudGVyLmM6MjkzOiNpZiBJU19FTkFCTEVEKENPTkZJR19NRU1DRykgfHwgSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX0RNRU0pXFxubW0vcGFnZV9jb3VudGVyLmMtMjk0LS8qXFxuLS1cXG5tbS9wYWdlX2NvdW50ZXIuYz00MjQ9dm9pZCBwYWdlX2NvdW50ZXJfY2FsY3VsYXRlX3Byb3RlY3Rpb24oc3RydWN0IHBhZ2VfY291bnRlciAqcm9vdCxcXG4tLVxcbm1tL3BhZ2VfY291bnRlci5jLTQ2NC19XFxubW0vcGFnZV9jb3VudGVyLmM6NDY1OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgfHwgQ09ORklHX0NHUk9VUF9ETUVNICovXFxuLS1cXG5tbS9wYWdlX2lvLmM9MzA1PXN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9zd3BvdXRfdm1fZXZlbnQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0zMTctXFxubW0vcGFnZV9pby5jOjMxODojaWYgZGVmaW5lZChDT05GSUdfTUVNQ0cpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApXFxubW0vcGFnZV9pby5jLTMxOS1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0zMzktI2RlZmluZSBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pXFx0XFx0ZG8geyB9IHdoaWxlICgwKVxcbm1tL3BhZ2VfaW8uYzozNDA6I2VuZGlmIC8qIENPTkZJR19NRU1DRyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfQkxLX0NHUk9VUCAqL1xcbm1tL3BhZ2VfaW8uYy0zNDEtXFxuLS1cXG5tbS9wYWdlX293bmVyLmM9NDg0PXZvaWQgcGFnZXR5cGVpbmZvX3Nob3dtaXhlZGNvdW50X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4tLVxcbm1tL3BhZ2Vfb3duZXIuYy01NjAtXFxubW0vcGFnZV9vd25lci5jOjU2MTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vcGFnZV9vd25lci5jLTU2Mi0vKlxcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmg9MzU9c3RydWN0IHBjcHVvYmpfZXh0IHtcXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDozNjojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vcGVyY3B1LWludGVybmFsLmgtMzctXFx0c3RydWN0IG9ial9jZ3JvdXBcXHQqY2dyb3VwO1xcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmgtNDMtXFxubW0vcGVyY3B1LWludGVybmFsLmg6NDQ6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSB8fCBkZWZpbmVkKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTQ1LSNkZWZpbmUgTkVFRF9QQ1BVT0JKX0VYVFxcbi0tXFxubW0vcGVyY3B1LWludGVybmFsLmg9MTUzPXN0YXRpYyBpbmxpbmUgc2l6ZV90IHBjcHVfb2JqX2Z1bGxfc2l6ZShzaXplX3Qgc2l6ZSlcXG4tLVxcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTE1Ni1cXG5tbS9wZXJjcHUtaW50ZXJuYWwuaDoxNTc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3BlcmNwdS1pbnRlcm5hbC5oLTE1OC1cXHRpZiAoIW1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKVxcbi0tXFxubW0vcGVyY3B1LmM9MTU5ND1zdGF0aWMgc3RydWN0IHBjcHVfY2h1bmsgKnBjcHVfY2h1bmtfYWRkcl9zZWFyY2godm9pZCAqYWRkcilcXG4tLVxcbm1tL3BlcmNwdS5jLTE2MTQtXFxubW0vcGVyY3B1LmM6MTYxNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vcGVyY3B1LmMtMTYxNi1zdGF0aWMgYm9vbCBwY3B1X21lbWNnX3ByZV9hbGxvY19ob29rKHNpemVfdCBzaXplLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9wZXJjcHUuYz0xNjU1PXN0YXRpYyB2b2lkIHBjcHVfbWVtY2dfZnJlZV9ob29rKHN0cnVjdCBwY3B1X2NodW5rICpjaHVuaywgaW50IG9mZiwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9wZXJjcHUuYy0xNjc2LVxcbm1tL3BlcmNwdS5jOjE2Nzc6I2Vsc2UgLyogQ09ORklHX01FTUNHICovXFxubW0vcGVyY3B1LmMtMTY3OC1zdGF0aWMgYm9vbFxcbi0tXFxubW0vcGVyY3B1LmM9MTY5MD1zdGF0aWMgdm9pZCBwY3B1X21lbWNnX2ZyZWVfaG9vayhzdHJ1Y3QgcGNwdV9jaHVuayAqY2h1bmssIGludCBvZmYsIHNpemVfdCBzaXplKVxcbi0tXFxubW0vcGVyY3B1LmMtMTY5Mi19XFxubW0vcGVyY3B1LmM6MTY5MzojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxubW0vcGVyY3B1LmMtMTY5NC1cXG4tLVxcbm1tL3Nocmlua2VyLmM9MTE9REVGSU5FX01VVEVYKHNocmlua2VyX211dGV4KTtcXG5tbS9zaHJpbmtlci5jLTEyLVxcbm1tL3Nocmlua2VyLmM6MTM6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Nocmlua2VyLmMtMTQtc3RhdGljIGludCBzaHJpbmtlcl9ucl9tYXg7XFxuLS1cXG5tbS9zaHJpbmtlci5jPTMzND1zdGF0aWMgbG9uZyBhZGRfbnJfZGVmZXJyZWRfbWVtY2cobG9uZyBuciwgaW50IG5pZCwgc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcXG4tLVxcbm1tL3Nocmlua2VyLmMtMzM4LX1cXG5tbS9zaHJpbmtlci5jOjMzOTojZW5kaWYgLyogQ09ORklHX01FTUNHICovXFxubW0vc2hyaW5rZXIuYy0zNDAtXFxuLS1cXG5tbS9zaHJpbmtlci5jPTM3Nj1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb19zaHJpbmtfc2xhYihzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNocmlua2N0bCxcXG4tLVxcbm1tL3Nocmlua2VyLmMtNDc0LVxcbm1tL3Nocmlua2VyLmM6NDc1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zaHJpbmtlci5jLTQ3Ni1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfc2xhYl9tZW1jZyhnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG4tLVxcbm1tL3Nocmlua2VyLmMtNTk1LX1cXG5tbS9zaHJpbmtlci5jOjU5NjojZWxzZSAvKiAhQ09ORklHX01FTUNHICovXFxubW0vc2hyaW5rZXIuYy01OTctc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX3NsYWJfbWVtY2coZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXFxuLS1cXG5tbS9zaHJpbmtlci5jLTYwMS19XFxubW0vc2hyaW5rZXIuYzo2MDI6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3Nocmlua2VyLmMtNjAzLVxcbi0tXFxubW0vc2hyaW5rZXIuYz02ODg9c3RydWN0IHNocmlua2VyICpzaHJpbmtlcl9hbGxvYyh1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbi0tXFxubW0vc2hyaW5rZXIuYy03MjYtXFx0ICogIC0gbm9uLW1lbWNnLWF3YXJlIHNocmlua2Vyc1xcbm1tL3Nocmlua2VyLmM6NzI3OlxcdCAqICAtICFDT05GSUdfTUVNQ0dcXG5tbS9zaHJpbmtlci5jLTcyOC1cXHQgKiAgLSBtZW1jZyBpcyBkaXNhYmxlZCBieSBrZXJuZWwgY29tbWFuZCBsaW5lXFxuLS1cXG5tbS9zbGFiLmg9MTIyPVNMQUJfTUFUQ0goX3JlZmNvdW50LCBfX3BhZ2VfcmVmY291bnQpO1xcbm1tL3NsYWIuaDoxMjM6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsYWIuaC0xMjQtU0xBQl9NQVRDSChtZW1jZ19kYXRhLCBvYmpfZXh0cyk7XFxuLS1cXG5tbS9zbGFiLmg9NTU4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2xhYi5oLTU2MS1cXG5tbS9zbGFiLmg6NTYyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbGFiLmgtNTYzLVxcdC8qXFxuLS1cXG5tbS9zbGFiLmg9NjUyPXN0YXRpYyBpbmxpbmUgZW51bSBub2RlX3N0YXRfaXRlbSBjYWNoZV92bXN0YXRfaWR4KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2xhYi5oLTY1Ny1cXG5tbS9zbGFiLmg6NjU4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbGFiLmgtNjU5LWJvb2wgX19tZW1jZ19zbGFiX3Bvc3RfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IGxpc3RfbHJ1ICpscnUsXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTgwND1FWFBPUlRfU1lNQk9MKGttYWxsb2Nfc2l6ZV9yb3VuZHVwKTtcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtODExLVxcbm1tL3NsYWJfY29tbW9uLmM6ODEyOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbGFiX2NvbW1vbi5jLTgxMy0jZGVmaW5lIEtNQUxMT0NfQ0dST1VQX05BTUUoc3opXFx0Lm5hbWVbS01BTExPQ19DR1JPVVBdID0gXFxcImttYWxsb2MtY2ctXFxcIiAjc3osXFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTk0NT1uZXdfa21hbGxvY19jYWNoZShpbnQgaWR4LCBlbnVtIGttYWxsb2NfY2FjaGVfdHlwZSB0eXBlKVxcbi0tXFxubW0vc2xhYl9jb21tb24uYy05NTMtXFx0XFx0ZmxhZ3MgfD0gU0xBQl9SRUNMQUlNX0FDQ09VTlQ7XFxubW0vc2xhYl9jb21tb24uYzo5NTQ6XFx0fSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19DR1JPVVApKSB7XFxubW0vc2xhYl9jb21tb24uYy05NTUtXFx0XFx0aWYgKG1lbV9jZ3JvdXBfa21lbV9kaXNhYmxlZCgpKSB7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jLTk2OS1cXHQvKlxcbm1tL3NsYWJfY29tbW9uLmM6OTcwOlxcdCAqIElmIENPTkZJR19NRU1DRyBpcyBlbmFibGVkLCBkaXNhYmxlIGNhY2hlIG1lcmdpbmcgZm9yXFxubW0vc2xhYl9jb21tb24uYy05NzEtXFx0ICogS01BTExPQ19OT1JNQUwgY2FjaGVzLlxcbm1tL3NsYWJfY29tbW9uLmMtOTcyLVxcdCAqL1xcbm1tL3NsYWJfY29tbW9uLmM6OTczOlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19NRU1DRykgXFx1MDAyNlxcdTAwMjYgKHR5cGUgPT0gS01BTExPQ19OT1JNQUwpKVxcbm1tL3NsYWJfY29tbW9uLmMtOTc0LVxcdFxcdGZsYWdzIHw9IFNMQUJfTk9fTUVSR0U7XFxuLS1cXG5tbS9zbGFiX2NvbW1vbi5jPTk5ND12b2lkIF9faW5pdCBjcmVhdGVfa21hbGxvY19jYWNoZXModm9pZClcXG4tLVxcbm1tL3NsYWJfY29tbW9uLmMtOTk5LVxcdC8qXFxubW0vc2xhYl9jb21tb24uYzoxMDAwOlxcdCAqIEluY2x1ZGluZyBLTUFMTE9DX0NHUk9VUCBpZiBDT05GSUdfTUVNQ0cgZGVmaW5lZFxcbm1tL3NsYWJfY29tbW9uLmMtMTAwMS1cXHQgKi9cXG4tLVxcbm1tL3NsdWIuYz0yMTYyPWludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0yMTk5LVxcdG5ld19leHRzID0gKHVuc2lnbmVkIGxvbmcpdmVjO1xcbm1tL3NsdWIuYzoyMjAwOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbHViLmMtMjIwMS1cXHRuZXdfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XFxuLS1cXG5tbS9zbHViLmM9MjI3Nj1zdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMjk1LVxcbm1tL3NsdWIuYzoyMjk2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zbHViLmMtMjI5Ny1cXHRcXHRvYmpfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XFxuLS1cXG5tbS9zbHViLmMtMjMxMi1cXG5tbS9zbHViLmM6MjMxMzojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2x1Yi5jLTIzMTQtXFx0XFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xcbi0tXFxubW0vc2x1Yi5jPTI0NTI9YWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbi0tXFxubW0vc2x1Yi5jLTI0NTktXFxubW0vc2x1Yi5jOjI0NjA6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsdWIuYy0yNDYxLVxcbi0tXFxubW0vc2x1Yi5jPTI1MDg9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI1NjctXFxubW0vc2x1Yi5jOjI1Njg6I2Vsc2UgLyogQ09ORklHX01FTUNHICovXFxubW0vc2x1Yi5jLTI1Njktc3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jPTI1ODI9c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmMtMjU4NS19XFxubW0vc2x1Yi5jOjI1ODY6I2VuZGlmIC8qIENPTkZJR19NRU1DRyAqL1xcbm1tL3NsdWIuYy0yNTg3LVxcbi0tXFxubW0vc2x1Yi5jPTYzOTk9dm9pZCBzbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpvYmplY3QsXFxuLS1cXG5tbS9zbHViLmMtNjQxNC1cXG5tbS9zbHViLmM6NjQxNTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2x1Yi5jLTY0MTYtLyogRG8gbm90IGlubGluZSB0aGUgcmFyZSBtZW1jZyBjaGFyZ2luZyBmYWlsZWQgcGF0aCBpbnRvIHRoZSBhbGxvY2F0aW9uIHBhdGggKi9cXG4tLVxcbm1tL3N3YXAuYz0xMTM1PXZvaWQgZm9saW9fYmF0Y2hfcmVtb3ZlX2V4Y2VwdGlvbmFscyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaClcXG4tLVxcbm1tL3N3YXAuYy0xMTQ2LVxcbm1tL3N3YXAuYzoxMTQ3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zd2FwLmMtMTE0OC1zdGF0aWMgdm9pZCBscnV2ZWNfcmVwYXJlbnRfbHJ1KHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYyxcXG4tLVxcbm1tL3N3YXAuaD00OD1zdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8ge1xcbi0tXFxubW0vc3dhcC5oLTU4LVxcdHVuc2lnbmVkIGludCAqZXh0ZW5kX3RhYmxlO1xcdC8qIEZvciBsYXJnZSBzd2FwIGNvdW50LCBwcm90ZWN0ZWQgYnkgY2ktXFx1MDAzZWxvY2sgKi9cXG5tbS9zd2FwLmg6NTk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3N3YXAuaC02MC1cXHRzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSAqbWVtY2dfdGFibGU7XFx0LyogU3dhcCB0YWJsZSBlbnRyaWVzJyBjZ3JvdXAgcmVjb3JkICovXFxuLS1cXG5tbS9zd2FwX3RhYmxlLmg9Mjk2PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfdGFibGVfY2xlYXJfemVybyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF90YWJsZS5oLTMxMC1cXG5tbS9zd2FwX3RhYmxlLmg6MzExOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zd2FwX3RhYmxlLmgtMzEyLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2dyb3VwX3NldChzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYz00MjE9c3RhdGljIHZvaWQgc3dhcF9jbHVzdGVyX2ZyZWVfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtNDI0LVxcbm1tL3N3YXBmaWxlLmM6NDI1OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zd2FwZmlsZS5jLTQyNi1cXHRrZnJlZShjaS1cXHUwMDNlbWVtY2dfdGFibGUpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz00NDk9c3RhdGljIGludCBzd2FwX2NsdXN0ZXJfYWxsb2NfdGFibGUoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vc3dhcGZpbGUuYy00NzAtXFxubW0vc3dhcGZpbGUuYzo0NzE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3N3YXBmaWxlLmMtNDcyLVxcdGlmICghbWVtX2Nncm91cF9kaXNhYmxlZCgpKSB7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTM5MTU9aW50IHN3YXBfZHVwX2VudHJ5X2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzkzNC1cXG5tbS9zd2FwZmlsZS5jOjM5MzU6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQKVxcbm1tL3N3YXBmaWxlLmMtMzkzNi1zdGF0aWMgYm9vbCBfX2hhc191c2FibGVfc3dhcCh2b2lkKVxcbi0tXFxubW0vdm1zY2FuLmM9MTk5PWludCB2bV9zd2FwcGluZXNzID0gNjA7XFxubW0vdm1zY2FuLmMtMjAwLVxcbm1tL3Ztc2Nhbi5jOjIwMTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjAyLVxcbi0tXFxubW0vdm1zY2FuLmM9MjY3Nz1zdGF0aWMgc3RydWN0IGxydXZlYyAqZ2V0X2xydXZlYyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXFxuLS1cXG5tbS92bXNjYW4uYy0yNjgwLVxcbm1tL3Ztc2Nhbi5jOjI2ODE6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI2ODItXFx0aWYgKG1lbWNnKSB7XFxuLS1cXG5tbS92bXNjYW4uYz0yODMxPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yODM3LVxcbm1tL3Ztc2Nhbi5jOjI4Mzg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4MzktXFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9Mjg3MT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg3Ny1cXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VscnVfZ2VuLmxpc3QpKTtcXG5tbS92bXNjYW4uYzoyODc4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODc5LVxcdFZNX1dBUk5fT05fT05DRShtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODk4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTA2LVxcbm1tL3Ztc2Nhbi5jOjI5MDc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5MDgtXFx0bWVtY2cgPSBtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzAtXFxubW0vdm1zY2FuLmM6MjkzMTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkzMi1cXHRtZW1fY2dyb3VwX3B1dChtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yOTM2LVxcbm1tL3Ztc2Nhbi5jOjI5Mzc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5Mzgtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYz00MzA3PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDM1Mi1cXG5tbS92bXNjYW4uYzo0MzUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy00MzU0LVxcbi0tXFxubW0vdm1zY2FuLmM9NDU0NT12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDU2Ny1cXG5tbS92bXNjYW4uYzo0NTY4OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MTUuODY2MTQ2NjYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4NjM0ODk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjb25maWd1cmF0aW9uczogYENPTkZJR19NRU1DR2AgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgYENPTkZJR19NRU1DR19WMWAgaXMgZXNzZW50aWFsIGZvciB0aG9zZSBzcGVjaWZpYyBtZW1vcnkgY29udHJvbCBmdW5jdGlvbnMsIG5hbWVseSBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCBhbmQgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgLiBBIHF1aWNrIGNoZWNrIGNvbmZpcm1zIHRoYXQgdGhlc2UgYXJlIGluZGVlZCBkZWZpbmVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC12MS5jYC4gU28sIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRlZmluaXRlbHkgYSBkZXBlbmRlbmN5LlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgbWVtb3J5X2hpZ2hfd3JpdGVgIGFuZCBgbWVtb3J5X21heF93cml0ZWAgYXJlIGxvY2F0ZWQuIEkgcmVtZW1iZXIgdGhlc2UgZnJvbSB0aGUgZ2VuZXJhbCBtZW1vcnkgY29udHJvbCBzcGFjZS4gQSBxdWljayBjaGVjayB0ZWxscyBtZSB0aGV5J3JlIGluIGBtbS9tZW1jb250cm9sLmNgLiBBbmQgdGhhdCBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aCBqdXN0IGBDT05GSUdfTUVNQ0dgLiBNYWtlcyBzZW5zZS5cblxuRmluYWxseSwgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHdoZXJlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBkZWZpbmVkLCBhbmQgaXQgc2VlbXMgdGhhdCBpcyBpbiBgbW0vdm1zY2FuLmNgLlxuXG5UbyBjb25maXJtIHRoZSBjb25uZWN0aW9ucywgSSdtIG5vdyBnb2luZyB0byBkcmlsbCBkb3duIGFuZCBkb3VibGUtY2hlY2sgYG1tL21lbWNvbnRyb2wtdjEuY2AgYW5kIGBtbS9tZW1jb250cm9sLmNgIGZvciB0aG9zZSBmdW5jdGlvbnMsIHRvIGVsaW1pbmF0ZSBhbnkgcG90ZW50aWFsIHN1cnByaXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MjEuMjUyNDk3NTE5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzODY1NzgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xNDc5PXN0YXRpYyBERUZJTkVfTVVURVgobWVtY2dfbWF4X211dGV4KTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTQ4MC1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTQ4MTpzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcmVzaXplX21heChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC12MS5jLTE0ODItXFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgbWF4LCBib29sIG1lbXN3KVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE2OTA9c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTcwOS1cXHRcXHRjYXNlIF9NRU06XFxubW0vbWVtY29udHJvbC12MS5jOjE3MTA6XFx0XFx0XFx0cmV0ID0gbWVtX2Nncm91cF9yZXNpemVfbWF4KG1lbWNnLCBucl9wYWdlcywgZmFsc2UpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzExLVxcdFxcdFxcdGJyZWFrO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzEyLVxcdFxcdGNhc2UgX01FTVNXQVA6XFxubW0vbWVtY29udHJvbC12MS5jOjE3MTM6XFx0XFx0XFx0cmV0ID0gbWVtX2Nncm91cF9yZXNpemVfbWF4KG1lbWNnLCBucl9wYWdlcywgdHJ1ZSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE3MTQtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjIxLjQ5MTE1OTU3NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzY1MDAxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgc25pcHBldCwgZnJhbWVkIGFzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IENncm91cCBSZXNpemluZyoqXG5cbk9rYXksIHNvIGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgIGlzIHRyaWdnZXJlZCBieSBgbWVtX2Nncm91cF93cml0ZWAuIFRoYXQncyB0aGUgZW50cnkgcG9pbnQsIHRoZSB0aGluZyB0aGF0IHNpZ25hbHMgYSBwb3RlbnRpYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbGltaXRzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYmVmb3JlIHdlIGdvIGZ1cnRoZXIsIHdlICphYnNvbHV0ZWx5KiBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAuIFRoZSBsb2dpYyBhcm91bmQgZm9yY2VkIGVtcHRpbmcgaXMgY3J1Y2lhbCB3aGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgcmVzaXppbmcgbWVtb3J5IGNncm91cHMuIEFueSBwb3RlbnRpYWwgY29uZmxpY3QgbXVzdCBiZSBjYXJlZnVsbHkgaGFuZGxlZCBoZXJlLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB3ZSBuZWVkIHRvIHJlbGVhc2UgcGFnZXMsIG9yIHJlY2xhaW0gbWVtb3J5LCBiZWZvcmUgd2Ugc3RhcnQgdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIG1lbW9yeSBsaW1pdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMzMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MjQuNjY3NjYxNzY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MzgzNTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0xNDgxPXN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWF4KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTQyLSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxNTQzOnN0YXRpYyBpbnQgbWVtX2Nncm91cF9mb3JjZV9lbXB0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC12MS5jLTE1NDQte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE1NjctXFxubW0vbWVtY29udHJvbC12MS5jOjE1Njg6c3RhdGljIHNzaXplX3QgbWVtX2Nncm91cF9mb3JjZV9lbXB0eV93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsXFxubW0vbWVtY29udHJvbC12MS5jLTE1NjktXFx0XFx0XFx0XFx0XFx0ICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNTc1LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxNTc2OlxcdHJldHVybiBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KG1lbWNnKSA/OiBuYnl0ZXM7XFxubW0vbWVtY29udHJvbC12MS5jLTE1NzctfVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTIwNzQ9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTIxMDktXFx0XFx0Lm5hbWUgPSBcXFwiZm9yY2VfZW1wdHlcXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMTEwOlxcdFxcdC53cml0ZSA9IG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfd3JpdGUsXFxubW0vbWVtY29udHJvbC12MS5jLTIxMTEtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MjQuNzY1MDQ5ODk0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIyNzMyMzgxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIG1lbW9yeSBjZ3JvdXBzIGFuZCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkFuYWx5emluZyB0aGUgTWVtb3J5IENncm91cCBGb3JjZSBFbXB0eSBGbG93KipcblxuUmlnaHQsIHNvIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCBpcyBjYWxsZWQgYnkgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlfd3JpdGVgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50LCB0aGUgdHJpZ2dlci4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IHpvb20gaW4gb24gdGhlIGZhY3RvcnMgdGhhdCBpbmZsdWVuY2UgdGhpcyBlbXB0eWluZyBwcm9jZXNzLCBhbmQgdGhhdCBtZWFucyBsb29raW5nIGF0IHRoZSBtZW1vcnkgbGltaXRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZHJpdmluZyB0aGlzIGFjdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgIGNvbWUgaW50byBwbGF5IGluIHRoaXMgY29udGV4dC4gVGhlc2UgYXJlIHRoZSBrZXkgbGV2ZXJzLCB0aGUgdXBwZXIgYm91bmRzLCB0aGUgY29uc3RyYWludHMgdGhhdCBhcmUgbGlrZWx5IGluc3RpZ2F0aW5nIHRoZSBmb3JjZWQgZW1wdHlpbmcsIG9yIHBlcmhhcHMgaW5mbHVlbmNpbmcgaG93IGl0IGJlaGF2ZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aG9zZSBsaW1pdCB3cml0ZXMgYW5kIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTQ1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6MjcuOTkyMzc1NzQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDA1NDk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnlfaGlnaF93cml0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQ3NjI9c3RhdGljIGludCBtZW1vcnlfaGlnaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NzY3LVxcbm1tL21lbWNvbnRyb2wuYzo0NzY4OnN0YXRpYyBzc2l6ZV90IG1lbW9yeV9oaWdoX3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZixcXG5tbS9tZW1jb250cm9sLmMtNDc2OS1cXHRcXHRcXHRcXHQgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUwMDg9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTAzNy1cXHRcXHQuc2VxX3Nob3cgPSBtZW1vcnlfaGlnaF9zaG93LFxcbm1tL21lbWNvbnRyb2wuYzo1MDM4OlxcdFxcdC53cml0ZSA9IG1lbW9yeV9oaWdoX3dyaXRlLFxcbm1tL21lbWNvbnRyb2wuYy01MDM5LVxcdH0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjI4LjA3MjQzODY5MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODk5Njc0NTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgY29uc2lkZXJpbmcgSSdtIGxvb2tpbmcgYXQgdGhpcyBmcm9tIGEgc3lzdGVtIG1lbW9yeSBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipNZW1vcnkgV3JpdGUgUGF0aCBCcmVha2Rvd24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGNsZWFyIHJlbGF0aW9uc2hpcCBoZXJlLiBXZSd2ZSBnb3QgdGhyZWUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBob3cgdGhleSBsaW5rIHVwLCBlc3BlY2lhbGx5IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBhIG1lbW9yeSBzdWJzeXN0ZW0gb3BlcmF0ZXMuIGBtZW1vcnlfaGlnaF93cml0ZWAgaXMgY2FsbGVkLCBhbmQgdGhlIGxpa2VseSBjb250ZXh0IGlzIHdpdGhpbiB0aGUgY2dyb3VwIHYyIGZyYW1ld29yaywgc3BlY2lmaWNhbGx5IHRocm91Z2ggYG1lbW9yeV9maWxlc2AuIFRoaXMgcG9pbnRzIHRvIHRoZSBtZWNoYW5pc21zIHVzZWQgdG8gY29udHJvbCB3cml0ZSBvcGVyYXRpb25zIGluIHRoZSBtZW1vcnkgc3Vic3lzdGVtLiBUaGlzIHN1Z2dlc3RzIGFuIGFjdGl2ZSByb2xlIGluIGhvdyB3cml0ZXMgYXJlIGhhbmRsZWQgcmVsYXRpdmUgdG8gYSBjZ3JvdXAncyBtZW1vcnkgbGltaXRzLiBJJ20gaW1hZ2luaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFkanVzdGluZyB0aHJlc2hvbGRzLCBwZXJoYXBzIHRyaWdnZXJpbmcgc29tZSBhY3Rpb24gYXMgYSBsaW1pdCBpcyBhcHByb2FjaGVkLlxuXG5TaW1pbGFybHksIHdlIGhhdmUgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbHNvIG9yaWdpbmF0aW5nIGZyb20gYG1lbW9yeV9maWxlc2AuIFRoaXMgaXMgaW50ZXJlc3Rpbmc7IEkgc3VzcGVjdCB0aGF0IHRoZXNlIHR3byBmdW5jdGlvbnMgd29yayBpbiBjb25jZXJ0LiBgbWVtb3J5X21heF93cml0ZWAgaXMgcHJvYmFibHkgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyB0aGUgYWJzb2x1dGUgbWF4aW11bSB3cml0ZSBsaW1pdC4gVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpcyBwcm9iYWJseSBjb3JlIHRvIGhvdyBjZ3JvdXBzIGVuZm9yY2UgbWVtb3J5IGxpbWl0cy5cblxuVGhlIHRoaXJkIHBpZWNlIG9mIHRoaXMgcHV6emxlIGlzIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhpcyBvbmUncyBjYWxsZWQgZnJvbSBgbWVtb3J5X3JlY2xhaW1gIHdpdGhpbiB0aGUgYG1tL21lbWNvbnRyb2wuY2AgZmlsZS4gVGhpcyBtZWFucyB3ZSdyZSBkZWx2aW5nIGludG8gdGhlIGhlYXJ0IG9mIG1lbW9yeSByZWNsYWltIG9wZXJhdGlvbnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIHNlZSB0aGlzIGFzIHRoZSBzeXN0ZW0gYmVpbmcgcHJvYWN0aXZlIGluIHJlY2xhaW1pbmcgbWVtb3J5IGZyb20gdXNlcnNwYWNlIHByb2Nlc3Nlcy4gRnJvbSB3aGVyZSBJIHNpdCwgdGhpcyBsaWtlbHkgbWVhbnMgdGhlIHN5c3RlbSBoYXMgc29tZSBmdW5jdGlvbiB3aGljaCBpbml0aWF0ZXMgcmVjbGFpbWluZyBtZW1vcnkgcHJvYWN0aXZlbHkuIEVzc2VudGlhbGx5LCBpdCBhcHBlYXJzIHRoYXQgdGhpcyBmdW5jdGlvbiBpbml0aWF0ZXMgcmVjbGFpbSBldmVudHMgdGhhdCBhcmUgZGVzaWduZWQgdG8gYXZvaWQgdGhlIHN5c3RlbSBiZWluZyBvdmVybG9hZGVkLCB3aXRoIHRoZSBpbnRlbnRpb24gb2YgcHJlZW1wdGl2ZWx5IGZyZWVpbmcgdXAgbWVtb3J5LlxuXG5TbywgaW4gZXNzZW5jZSwgd2UgaGF2ZSBhIGNsZWFyIHBpY3R1cmUuIFdyaXRlcywgcGFydGljdWxhcmx5IHVuZGVyIGNncm91cCB2MiwgYXJlIGNvbnRyb2xsZWQsIGFuZCBtZW1vcnkgcmVjbGFpbSBpcyBiZWluZyBhY3RpdmVseSBtYW5hZ2VkIHRvIHRyeSBhbmQga2VlcCB0aGUgc3lzdGVtIHVuZGVyIGNvbnRyb2wuIEEgc2ltcGxlIHZpZXcsIHRoYXQgaXMgZnVuZGFtZW50YWwgdG8gbW9zdCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHdlbGwgdW5kZXJzdG9vZCBieSBhIHNlYXNvbmVkIGV4cGVydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MjozMi45NzIxMTYxNjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzM4MzYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9NjMxPWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcXG5tbS9pbnRlcm5hbC5oOjYzMjppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vaW50ZXJuYWwuaC02MzMtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00OTk1PXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwMDAtXFxubW0vbWVtY29udHJvbC5jOjUwMDE6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcXG5tbS9tZW1jb250cm9sLmMtNTAwMi1cXHRpZiAocmV0KVxcbi0tXFxubW0vdm1zY2FuLmM9Nzg2MD1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY1LVxcbm1tL3Ztc2Nhbi5jOjc4NjY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NjctXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MjozMy4wNTg4NjA2MzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM0Mzg2OTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgQ29udHJvbCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAsIGBtZW1vcnlfaGlnaF93cml0ZWAsIGBtZW1vcnlfbWF4X3dyaXRlYCwgYW5kIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gUmlnaHQsIGxldCdzIHNlZSB3aGVyZSB0aGV5J3JlIGRlZmluZWQuIEFoLCBoZXJlJ3MgdGhlIGxheW91dDogYG1lbV9jZ3JvdXBfcmVzaXplX21heGAgYW5kIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCBhcmUgc3RhdGljIHdpdGhpbiBgbW0vbWVtY29udHJvbC12MS5jYCwgd2hpbGUgYG1lbW9yeV9oaWdoX3dyaXRlYCBhbmQgYG1lbW9yeV9tYXhfd3JpdGVgIGFyZSBzdGF0aWMgdG8gYG1tL21lbWNvbnRyb2wuY2AuIEFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgZ2xvYmFsIGluIGBtbS92bXNjYW4uY2AuIEdvdCBpdC5cblxuTm93LCBsZXQgbWUgY29uZmlybSBpZiBgbWVtY2dfaXNfZHlpbmdgIGlzIGFjdHVhbGx5IHJlYWNoYWJsZS4gR29vZCwgaXQgbG9va3MgbGlrZSBpdCdzIGRlZmluaXRlbHkgY2FsbGVkIHdoZW4gaGFuZGxpbmcgd3JpdGVzIHRvIHRoZSBjZ3JvdXAgZmlsZXMgSSdtIGNvbmNlcm5lZCB3aXRoIOKAkyBgbWVtb3J5LmhpZ2hgLCBgbWVtb3J5Lm1heGAsIGBtZW1vcnkucmVjbGFpbWAsIGBtZW1vcnkuZm9yY2VfZW1wdHlgLCBhbmQgYG1lbW9yeS5saW1pdF9pbl9ieXRlc2AuIFRoYXQncyBpbXBvcnRhbnQuIEl0IGNvbmZpcm1zIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHZpYSB0aGUgY2dyb3VwZnMgaW50ZXJmYWNlLiBJIGNhbiB0cmlnZ2VyIHRoaXMgdGhyb3VnaCB3cml0aW5nIHRvIHRob3NlIGZpbGVzLlxuXG5BbHJpZ2h0LCBmaW5hbGx5LCB0aGUgcHJlcmVxdWlzaXRlIGNvbmZpZ3MgZm9yIHRoaXMgYXJlIGNsZWFybHkgYE1FTUNHYCBhbmQgYE1FTUNHX1YxYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYE1FTUNHX1YxYCBpcyBhIHZhbGlkIGNvbmZpZyBvcHRpb24gdG8gZW5zdXJlIEknbSBhY2NvdW50aW5nIGZvciBldmVyeXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDMyOSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MjozOC40MDI3MzI2MjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDY4OTE2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHX1YxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA4OT1jb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcbmluaXQvS2NvbmZpZzoxMDk2OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMDk3LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjQwLjYwOTYzMjU0NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI2OTc4ODQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHNvIGBNRU1DR19WMWAgaXMgZGVmaW5pdGVseSBhIGNvbmNyZXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIOKAkyBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCwgb2YgY291cnNlLCBgTUVNQ0dgIGl0c2VsZiBpcyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gdG9vLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBhcmUgbGV2ZXJhZ2VkIGluIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5UaW1lIHRvIGRpdmUgaW50byB0aGUgY29yZS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgY2hlY2sgb3V0IGhvdyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYnJvYWRlciByZWNsYWltIG1lY2hhbmlzbXMuIFRoYXQgYXJlYSB3YXJyYW50cyBhIGRlZXAgbG9vaywgZ2l2ZW4gdGhlIGNvbnRleHQuIEknbSBrZWVuIHRvIHVuZGVyc3RhbmQgdGhlIGZpbmVyIHBvaW50cyBvZiBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhvc2UgY29uZmlndXJhdGlvbiBmbGFncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMzUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1Mjo0My45MzY2MTQzODlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDYwMjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Nzg2MD1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY1LVxcbm1tL3Ztc2Nhbi5jOjc4NjY6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc4NjctXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODAxMj1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTctXFxubW0vdm1zY2FuLmM6ODAxODpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODAxOS1cXHRyZXR1cm4gcmV0ID8gLUVBR0FJTiA6IGNvdW50O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1Mjo0My45OTY2ODE0NzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczNjgxMTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRm9jdXMgU3ltYm9scyBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBmb2N1cyBzeW1ib2xzIHRoYXQgYXJlIGd1aWRpbmcgU3l6a2FsbGVyOiBgbWVtX2Nncm91cF9yZXNpemVfbWF4YCwgYG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlgLCBgbWVtb3J5X2hpZ2hfd3JpdGVgLCBgbWVtb3J5X21heF93cml0ZWAsIGFuZCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoZSBpbml0aWFsIHRob3VnaHQgaXMsIHdhaXQsIGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgIGlzIHN0YXRpYyEgSSBrbm93IFN5emthbGxlciBpcyBwcmltYXJpbHkgYSBzeXNjYWxsIGZ1enplciwgYnV0IGNhbiBpdCBhY3R1YWxseSAqZnV6eiogc3RhdGljIGZ1bmN0aW9ucz8gSXQncyBtb3JlIGFib3V0IGNvZGUgY292ZXJhZ2UsIHJpZ2h0PyBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdXNlZCB0byBkaXJlY3QgdGhlIGZ1enplciB0byBzcGVjaWZpYyBjb2RlIHBhdGhzLCB0byBnZXQgdGhlIGZ1enplciBpbnRvIHRoZXNlIHNwZWNpZmljIGFyZWFzLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIGBzeXotbWFuYWdlcmAgdXNlcyB0aGVzZSBzeW1ib2xzIGZvciBmb2N1cywgYW5kIHRoYXQgU3l6a2FsbGVyICpjYW4qIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zLCBwcm92aWRlZCB0aGV5J3JlIHByZXNlbnQgaW4gdGhlIHN5bWJvbCB0YWJsZSwgdGhpbmdzIGxpa2UgYGthbGxzeW1zYC4gR2VuZXJhbGx5LCB0aGF0IHNob3VsZG4ndCBiZSBhIHByb2JsZW0gZm9yIHN0YXRpYyBmdW5jdGlvbnMsIHRob3VnaCBpdCdzIGFsd2F5cyBnb29kIHRvIHZlcmlmeS5cblxuTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGEgY291cGxlIG9mIHRoaW5ncywgc3BlY2lmaWNhbGx5IHRoZSBjb25maWdzLiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSBgTUVNQ0dgIGFuZCBgTUVNQ0dfVjFgIGFyZSBlbmFibGVkLiBUaGVuLCB0aGUgbmV4dCBpbXBvcnRhbnQgdGhpbmcgaXMgdG8gY29uZmlybSB0aGF0IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyB1bmRlciBgQ09ORklHX01FTUNHYC4gVGltZSB0byBkaWcgaW50byB0aGUga2VybmVsIHNvdXJjZS4gSW4gYG1tL3Ztc2Nhbi5jYCwgSSBuZWVkIHRvIHNlZSBpZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgY29tcGlsZWQgY29uZGl0aW9uYWxseSBvciB1bmNvbmRpdGlvbmFsbHkuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0OTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6NDkuNzMzNDk0ODg0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTIxNDI2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc4NjA9c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNzg2NS1cXG5tbS92bXNjYW4uYzo3ODY2OmludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG5tbS92bXNjYW4uYy03ODY3LVxcdFxcdFxcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jPTgwMTI9c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDE3LVxcbm1tL3Ztc2Nhbi5jOjgwMTg6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xcbm1tL3Ztc2Nhbi5jLTgwMTktXFx0cmV0dXJuIHJldCA/IC1FQUdBSU4gOiBjb3VudDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6NDkuNzkyNzE2ODQ4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDEwODY0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgZm9yIENvbmRpdGlvbmFsIENvbXBpbGF0aW9uKipcblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZC4gSSBuZWVkIHRvIGtub3cgaWYgdGhpcyBjb2RlIGJsb2NrIGlzIHdyYXBwZWQgd2l0aGluIGFuIGAjaWZkZWZgIHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJdCdzIGNydWNpYWwgZm9yIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCB2YXJpYWJpbGl0eSBvZiB0aGlzIHZhcmlhYmxlJ3MgaW5jbHVzaW9uLiBEZXBlbmRpbmcgb24gdGhlIGVudmlyb25tZW50IG9yIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCB0aGlzIGNvZGUgbWlnaHQgYmUgaW5jbHVkZWQgb3IgZXhjbHVkZWQuIEkgbmVlZCB0byBhY2NvdW50IGZvciB0aGF0LiBUaGVyZWZvcmUsIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGV4aXN0ZW5jZSB3aXRoaW4gYW55IGNvbmRpdGlvbmFsIGJsb2NrcyBiZWZvcmUgSSBjYW4gbW92ZSBmb3J3YXJkIHdpdGggYW55IGFuYWx5c2lzIG9yIGZ1cnRoZXIgaW1wbGVtZW50YXRpb24gc3RlcHMgdGhhdCByZWx5IG9uIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwMywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUyOjUyLjczMzgwNTM4MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxMjcxOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2lmZGVmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc0PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xcbi0tXFxubW0vdm1zY2FuLmMtMTgxLVxcbm1tL3Ztc2Nhbi5jOjE4MjojaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXXFxubW0vdm1zY2FuLmMtMTgzLSNkZWZpbmUgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKF9mb2xpbywgX2Jhc2UsIF9maWVsZClcXHRcXHRcXHRcXFxcXFxuLS1cXG5tbS92bXNjYW4uYz0xOTk9aW50IHZtX3N3YXBwaW5lc3MgPSA2MDtcXG5tbS92bXNjYW4uYy0yMDAtXFxubW0vdm1zY2FuLmM6MjAxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yMDItXFxuLS1cXG5tbS92bXNjYW4uYz0yMzE9c3RhdGljIGJvb2wgd3JpdGViYWNrX3Rocm90dGxpbmdfc2FuZShzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzNC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS92bXNjYW4uYzoyMzU6I2lmZGVmIENPTkZJR19DR1JPVVBfV1JJVEVCQUNLXFxubW0vdm1zY2FuLmMtMjM2LVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbi0tXFxubW0vdm1zY2FuLmM9ODI0PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzAtXFxubW0vdm1zY2FuLmM6ODMxOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzMi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9MTA1NT1zdGF0aWMgdW5zaWduZWQgaW50IHNocmlua19mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0xMjg1LVxcdFxcdFxcdFxcdFxcdGdvdG8gYWN0aXZhdGVfbG9ja2VkO1xcbm1tL3Ztc2Nhbi5jOjEyODY6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3Ztc2Nhbi5jLTEyODctXFx0XFx0XFx0XFx0aWYgKG5yX3BhZ2VzIFxcdTAwM2U9IEhQQUdFX1BNRF9OUikge1xcbi0tXFxubW0vdm1zY2FuLmM9MjYxMz1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjYyNC1cXG5tbS92bXNjYW4uYzoyNjI1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2MjYtXFxubW0vdm1zY2FuLmM9MjYyNz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjI4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjYyOS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2Nzc9c3RhdGljIHN0cnVjdCBscnV2ZWMgKmdldF9scnV2ZWMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtMjY4MC1cXG5tbS92bXNjYW4uYzoyNjgxOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yNjgyLVxcdGlmIChtZW1jZykge1xcbi0tXFxubW0vdm1zY2FuLmM9MjgwOT1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MjgtXFxubW0vdm1zY2FuLmM6MjgyOTojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXFxubW0vdm1zY2FuLmMtMjgzMC1cXG5tbS92bXNjYW4uYz0yODMxPXN0YXRpYyBzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICpnZXRfbW1fbGlzdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy0yODM3LVxcbm1tL3Ztc2Nhbi5jOjI4Mzg6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI4MzktXFx0aWYgKG1lbWNnKVxcbi0tXFxubW0vdm1zY2FuLmM9Mjg3MT12b2lkIGxydV9nZW5fYWRkX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg3Ny1cXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VscnVfZ2VuLmxpc3QpKTtcXG5tbS92bXNjYW4uYzoyODc4OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy0yODc5LVxcdFZNX1dBUk5fT05fT05DRShtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODk4PXZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTA2LVxcbm1tL3Ztc2Nhbi5jOjI5MDc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5MDgtXFx0bWVtY2cgPSBtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZztcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5MzAtXFxubW0vdm1zY2FuLmM6MjkzMTojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtMjkzMi1cXHRtZW1fY2dyb3VwX3B1dChtbS1cXHUwMDNlbHJ1X2dlbi5tZW1jZyk7XFxuLS1cXG5tbS92bXNjYW4uYy0yOTM2LVxcbm1tL3Ztc2Nhbi5jOjI5Mzc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTI5Mzgtdm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYz00MzA3PXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxcbi0tXFxubW0vdm1zY2FuLmMtNDM1Mi1cXG5tbS92bXNjYW4uYzo0MzUzOiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy00MzU0LVxcbi0tXFxubW0vdm1zY2FuLmM9NTUxMj1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vdm1zY2FuLmMtNTUyNS1cXG5tbS92bXNjYW4uYzo1NTI2OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS92bXNjYW4uYy01NTI3LVxcdFxcdGlmIChtZW1jZylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3Nzg9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3OTctXFxubW0vdm1zY2FuLmM6NTc5ODojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmMtNTc5OS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2NzY9dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy02NzE4LVxcbm1tL3Ztc2Nhbi5jOjY3MTk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3Ztc2Nhbi5jLTY3MjAtXFxuLS1cXG5tbS92bXNjYW4uYz03NTQ2PWJvb2wga3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1NTAtXFxubW0vdm1zY2FuLmM6NzU1MTojaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OXFxubW0vdm1zY2FuLmMtNzU1Mi0vKlxcbi0tXFxubW0vdm1zY2FuLmM9NzYzMT1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03NjQwLVxcdH0sXFxubW0vdm1zY2FuLmM6NzY0MTojaWZkZWYgQ09ORklHX05VTUFcXG5tbS92bXNjYW4uYy03NjQyLVxcdHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc2NjQ9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxubW0vdm1zY2FuLmMtNzY2NS1cXG5tbS92bXNjYW4uYzo3NjY2OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3Ztc2Nhbi5jLTc2NjctLypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6NTIuNzg3OTM2NjU2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDY1NDAxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzbid0IGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTUVNQ0dgLiBUaGF0J3MgYSBiaXQgb2RkLiBCdXQgaG9sZCBvbiwgaXQgdGFrZXMgYSBgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnYCBhcyBhbiBhcmd1bWVudC4gSG1tLCBpcyBgc3RydWN0IG1lbV9jZ3JvdXBgIGV2ZW4gKmRlZmluZWQqIHdoZW4gYENPTkZJR19NRU1DR2AgaXMgZGlzYWJsZWQ/IEknbSBwcmV0dHkgc3VyZSBpdCBpcywgZWl0aGVyIGFzIGFuIG9wYXF1ZSBvciBlbXB0eSBzdHJ1Y3QsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gYW5kIGltcGxlbWVudGF0aW9uLlxuXG5CdXQgd2FpdCwgdGhpcyBmdW5jdGlvbiAqY2FsbHMqIGBtZW1jZ19pc19keWluZyhtZW1jZylgLiBOb3cgdGhhdCdzIHRoZSBjcnVjaWFsIHBvaW50LiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGF0IGJlaGF2ZXMgYXMgZXhwZWN0ZWQgd2hlbiBtZW1jZyBpcyBlaXRoZXIgZW1wdHkgb3IgdW5hdmFpbGFibGUuIExldCdzIGRpZyBpbnRvIHRoZSBgbWVtY2dfaXNfZHlpbmdgIGZ1bmN0aW9uIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUgbWVtb3J5IGNncm91cCBpbmZyYXN0cnVjdHVyZSBpc24ndCBmdWxseSBlbmFibGVkLiBUaGF0J3Mgd2hlcmUgdGhlIHBvdGVudGlhbCBnb3RjaGEgbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyOTEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6NTYuNTM0NDc4OTA3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAzNjMyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2dfaXNfZHlpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc2Mz12b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzY1OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODM3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODQwLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4NDE6c3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTI6NTYuNjg0ODQ2NDUyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDUyODMyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYG1lbWNnX2lzX2R5aW5nYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBtZW1jZ19pc19keWluZ2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gZm9yIG1lIGlzIHdoZXRoZXIgYENPTkZJR19NRU1DR2AgaGFzIHRvIGJlIGVuYWJsZWQgZm9yIGBtZW1jZ19pc19keWluZ2AgdG8gYWN0dWFsbHkgYmUgKmZ1bmN0aW9uYWwqLiBJJ20gYmV0dGluZyB0aGF0IGlmIG1lbW9yeSBjZ3JvdXBzIGFyZSBkaXNhYmxlZCB2aWEgY29uZmlndXJhdGlvbiwgdGhpcyBmdW5jdGlvbiB3aWxsIHNpbXBseSByZXR1cm4gYGZhbHNlYC4gSXQgd291bGQgbWFrZSBzZW5zZSBhcyB0aGUgbWVjaGFuaXNtIGlzIG5vdCBzZXQuIFRvIGNvbmZpcm0gdGhpcyBoeXBvdGhlc2lzLCBJIHNob3VsZCBqdW1wIGludG8gYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCBhbmQgc2VlIGhvdyBpdCdzIGRlZmluZWQgdW5kZXIgdGhlIGhvb2QuIFRpbWUgdG8gZGlnIGluIGFuZCBjb25maXJtIHRoZSBkZXRhaWxzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg1OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUzOjAwLjA5MDEzMTc2OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0Njk1MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY2dfaXNfZHlpbmdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTc2Mz12b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNzY1OnN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTc2Ni17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODM3PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX3Nob3dfcHJvdGVjdGVkX21lbW9yeShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODQwLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE4NDE6c3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xODQyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6NTM6MDAuMTQzNjA2NTAzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMDgzNDQ5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgY3VycmVudCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byBtZW1jb250cm9sLmgqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSdtIGZvY3VzaW5nIGluIG9uIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gbGluZXMgMTc2NSBhbmQgMTg0MS4gQmFzZWQgb24gbXkgZXhpc3RpbmcgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHN1YnN5c3RlbSwgdGhlc2UgbG9jYXRpb25zIGFyZSBsaWtlbHkgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IG1lbW9yeSBjb250cm9sIGdyb3VwcyBhcmUgaW1wbGVtZW50ZWQsIHBlcmhhcHMgaG93IHJlc291cmNlcyBhcmUgYWNjb3VudGVkIG9yIGhvdyBsaW1pdGF0aW9ucyBhcmUgZW5mb3JjZWQuIExldCdzIHNlZSB3aGF0J3MgY29kZWQgaW4gdGhlc2Ugc3BlY2lmaWMgbG9jYXRpb25zLiBJIGFudGljaXBhdGUgSSdsbCBwcm9iYWJseSBiZSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgY29yZSBsb2dpYyBpbnRlcnNlY3RzIHdpdGggYSBzcGVjaWZpYyBmZWF0dXJlIG9yIGZ1bmN0aW9uLiBJJ20ga2VlbiB0byBkZWNpcGhlciB0aGUgbnVhbmNlcyBoaWRkZW4gd2l0aGluIHRoaXMgY3J1Y2lhbCBoZWFkZXIgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MzowMy4yNTE5NTMzOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTc2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE3NjA6XFx0XFxuMTc2MTpcXHR2b2lkIG1lbV9jZ3JvdXBfbm9kZV9maWx0ZXJfYWxsb3dlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIG5vZGVtYXNrX3QgKm1hc2spO1xcbjE3NjI6XFx0XFxuMTc2MzpcXHR2b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuMTc2NDpcXHRcXG4xNzY1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19pc19keWluZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuMTc2NjpcXHR7XFxuMTc2NzpcXHRcXHRyZXR1cm4gbWVtY2cgPyBjc3NfaXNfZHlpbmcoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpIDogZmFsc2U7XFxuMTc2ODpcXHR9XFxuMTc2OTpcXHRcXG4xNzcwOlxcdCNlbHNlXFxuMTc3MTpcXHRzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9rbWVtX2Rpc2FibGVkKHZvaWQpXFxuMTc3MjpcXHR7XFxuMTc3MzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xNzc0OlxcdH1cXG4xNzc1OlxcdFxcbjE3NzY6XFx0c3RhdGljIGlubGluZSBpbnQgbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxcbjE3Nzc6XFx0XFx0XFx0XFx0XFx0XFx0IGludCBvcmRlcilcXG4xNzc4OlxcdHtcXG4xNzc5OlxcdFxcdHJldHVybiAwO1xcbjE3ODA6XFx0fVxcbjE3ODE6XFx0XFxuMTc4MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfa21lbV91bmNoYXJnZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgb3JkZXIpXFxuMTc4MzpcXHR7XFxuMTc4NDpcXHR9XFxuMTc4NTpcXHRcXG4xNzg2OlxcdHN0YXRpYyBpbmxpbmUgaW50IF9fbWVtY2dfa21lbV9jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwLFxcbjE3ODc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgaW50IG9yZGVyKVxcbjE3ODg6XFx0e1xcbjE3ODk6XFx0XFx0cmV0dXJuIDA7XFxuMTc5MDpcXHR9XFxuMTc5MTpcXHRcXG4xNzkyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBfX21lbWNnX2ttZW1fdW5jaGFyZ2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9yZGVyKVxcbjE3OTM6XFx0e1xcbjE3OTQ6XFx0fVxcbjE3OTU6XFx0XFxuMTc5NjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuMTc5NzpcXHR7XFxuMTc5ODpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNzk5OlxcdH1cXG4xODAwOlxcdFxcbjE4MDE6XFx0c3RhdGljIGlubGluZSBib29sIG1lbWNnX2JwZl9lbmFibGVkKHZvaWQpXFxuMTgwMjpcXHR7XFxuMTgwMzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTgwNDpcXHR9XFxuMTgwNTpcXHRcXG4xODA2OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZ19rbWVtX29ubGluZSh2b2lkKVxcbjE4MDc6XFx0e1xcbjE4MDg6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjE4MDk6XFx0fVxcbjE4MTA6XFx0XFxuMTgxMTpcXHRzdGF0aWMgaW5saW5lIGludCBtZW1jZ19rbWVtX2lkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4xODEyOlxcdHtcXG4xODEzOlxcdFxcdHJldHVybiAtMTtcXG4xODE0OlxcdH1cXG4xODE1OlxcdFxcbjE4MTY6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3ZpcnQodm9pZCAqcClcXG4xODE3OlxcdHtcXG4xODE4OlxcdFxcdHJldHVybiBOVUxMO1xcbjE4MTk6XFx0fVxcbjE4MjA6XFx0XFxuMTgyMTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfb2JqY2dfZXZlbnRzKHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyxcXG4xODIyOlxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gdm1fZXZlbnRfaXRlbSBpZHgsXFxuMTgyMzpcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGNvdW50KVxcbjE4MjQ6XFx0e1xcbjE4MjU6XFx0fVxcbjE4MjY6XFx0XFxuMTgyNzpcXHRzdGF0aWMgaW5saW5lIGlub190IHBhZ2VfY2dyb3VwX2lubyhzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4xODI4OlxcdHtcXG4xODI5OlxcdFxcdHJldHVybiAwO1xcbjE4MzA6XFx0fVxcbjE4MzE6XFx0XFxuMTgzMjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9ub2RlX2ZpbHRlcl9hbGxvd2VkKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4xODMzOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbm9kZW1hc2tfdCAqbWFzaylcXG4xODM0OlxcdHtcXG4xODM1OlxcdH1cXG4xODM2OlxcdFxcbjE4Mzc6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfc2hvd19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4xODM4OlxcdHtcXG4xODM5OlxcdH1cXG4xODQwOlxcdFxcbjE4NDE6XFx0c3RhdGljIGlubGluZSBib29sIG1lbWNnX2lzX2R5aW5nKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4xODQyOlxcdHtcXG4xODQzOlxcdFxcdHJldHVybiBmYWxzZTtcXG4xODQ0OlxcdH1cXG4xODQ1OlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgKi9cXG4xODQ2OlxcdFxcbjE4NDc6XFx0I2lmIGRlZmluZWQoQ09ORklHX01FTUNHKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19aU1dBUClcXG4xODQ4OlxcdGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKTtcXG4xODQ5OlxcdHZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSk7XFxuMTg1MDpcXHR2b2lkIG9ial9jZ3JvdXBfdW5jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLCBzaXplX3Qgc2l6ZSk7XFxuMTg1MTpcXHRib29sIG1lbV9jZ3JvdXBfenN3YXBfd3JpdGViYWNrX2VuYWJsZWQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4xODUyOlxcdCNlbHNlXFxuMTg1MzpcXHRzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9tYXlfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxcbjE4NTQ6XFx0e1xcbjE4NTU6XFx0XFx0cmV0dXJuIHRydWU7XFxuMTg1NjpcXHR9XFxuMTg1NzpcXHRzdGF0aWMgaW5saW5lIHZvaWQgb2JqX2Nncm91cF9jaGFyZ2VfenN3YXAoc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnLFxcbjE4NTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgc2l6ZV90IHNpemUpXFxuMTg1OTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUzOjAzLjI1MjA3Mjk0OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzA5NjYzNDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtY2cgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGllZCB0byBgQ09ORklHX01FTUNHYC4gVGhhdCdzIGEgZ2l2ZW4uIEFuZCBzaW5jZSBpdCdzIHRvdWNoaW5nIGBtbS9tZW1jb250cm9sLXYxLmNgLCBJJ20gZ29pbmcgdG8gbmVlZCBgQ09ORklHX01FTUNHX1YxYCBlbmFibGVkIGFzIHdlbGwgdG8gZnVsbHkgdGVzdCB0aGUgY2hhbmdlcy4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gVGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyBjb21waWxlZCB1bmRlciBgQ09ORklHX01FTUNHX1YxYC4gU28gYm90aCBhcmUgcmVxdWlyZWQuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgcmVhY2hhYmlsaXR5IG9mIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gSXQncyBjYWxsZWQgZnJvbSBgcmVjbGFpbV9zdG9yZWAgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaGFuZGxlcyBgL3N5cy9kZXZpY2VzL3N5c3RlbS9ub2RlL25vZGVYL3JlY2xhaW1gLCBhbmQgYWxzbyBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgaW4gYG1tL21lbWNvbnRyb2wuY2AsIGZvciB0aGUgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlLiBHb29kLCBib3RoIGFyZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLiBUaGF0J3Mgd2hhdCBJIG5lZWRlZCB0byBrbm93LlxuXG5GdW5jdGlvbmFsbHksIHRoZSBwYXRjaCBzZWVtcyBzb3VuZC4gSXQncyBhZGRpbmcgY3J1Y2lhbCBjaGVja3MgdG8gaGFuZGxlIG1lbWNnIGRlc3RydWN0aW9uIGdyYWNlZnVsbHksIHByZXZlbnRpbmcgcG90ZW50aWFsIGluZmluaXRlIGxvb3BzIG9yIHN0YWxscyB3aGVuIHRob3NlIG9wZXJhdGlvbnMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LiBUaGF0J3MgYSBjb21tb24gaXNzdWUgd2l0aCBjb25jdXJyZW50IG9wZXJhdGlvbnMgb24gc2hhcmVkIHJlc291cmNlcy4gU21hcnQsIHRoaXMgaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC5cblxuSSBuZWVkIHRvIGtlZXAgdGhlc2Ugc3ltYm9scyBpbiBtaW5kIGFzIEkgZGl2ZSBkZWVwZXI6IGBtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhgLCBgbWVtX2Nncm91cF9mb3JjZV9lbXB0eWAsIGBtZW1vcnlfaGlnaF93cml0ZWAsIGBtZW1vcnlfbWF4X3dyaXRlYCwgYW5kIG9mIGNvdXJzZSwgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZz8gTG9va3MgbGlrZSBqdXN0IGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX01FTUNHX1YxYCwgd2hpY2ggaXMgd2hhdCBJIHRob3VnaHQuXG5cblF1aWNrIHNhbml0eSBjaGVjazogSXMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYW55dGhpbmcgZWxzZT8gSW4gYG1tL3Ztc2Nhbi5jYCwgYHJlY2xhaW1fc3RvcmVgIGlzIHVuZGVyIGBDT05GSUdfTlVNQWAsIEkgd29uZGVyIGlmIHRoYXQgYWZmZWN0cyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUzOjA5Ljk2MTczOTM0MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzExMzA2MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjbGFpbV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MDA5PUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwMTEtI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbm1tL3Ztc2Nhbi5jOjgwMTI6c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxubW0vdm1zY2FuLmMtODAxMy1cXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MzoxMC4wMzI4NzQ5MjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMDE5MDMwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBNZW1vcnkgUmVjbGFpbSBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpbnRlcmFjdHMgd2l0aCB2YXJpb3VzIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSBzZWUgdGhhdCBgcmVjbGFpbV9zdG9yZWAgcmVsaWVzIG9uIGJvdGggYENPTkZJR19TWVNGU2AgYW5kIGBDT05GSUdfTlVNQWAsIHdoaWNoIG1ha2VzIHNlbnNlOyBOVU1BIHN5c3RlbXMgb2Z0ZW4gYmVuZWZpdCBmcm9tIHByb2FjdGl2ZSBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHN5c2ZzIHByb3ZpZGVzIHRoZSBpbnRlcmZhY2UuXG5cbkJ1dCBoZXJlJ3MgYSB3cmlua2xlOiBJJ20gYWxzbyBmaW5kaW5nIHRoYXQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNhbGxlZCBmcm9tIGBtZW1vcnlfcmVjbGFpbWAgd2l0aGluIGBtbS9tZW1jb250cm9sLmNgLiBBbmQgKnRoYXQqIGlzIGdvdmVybmVkIGJ5IGBDT05GSUdfTUVNQ0dgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgZXZlbiBpZiBgQ09ORklHX1NZU0ZTYCBvciBgQ09ORklHX05VTUFgIGFyZW4ndCBlbmFibGVkLCBpZiBgQ09ORklHX01FTUNHYCBpcywgSSBjYW4gc3RpbGwgdHJpZ2dlciBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuXG5cbk5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24uIElmIGBDT05GSUdfTUVNQ0dgICppc24ndCogZW5hYmxlZCwgaXMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGV2ZW4gY29tcGlsZWQgaW4/IEl0J3MgYSBjcml0aWNhbCBkZXBlbmRlbmN5IEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIGBtbS92bXNjYW4uY2AgYXJvdW5kIHRoZSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgZGVmaW5pdGlvbiB0byBjb25maXJtIHRoaXMuIEdvdHRhIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBwcmVwcm9jZXNzb3IgbG9naWMgdGhhdCBtaWdodCBjb25kaXRpb25hbGx5IGluY2x1ZGUgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUzOjE0LjE1MzA2NzExOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjYyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzg1NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzg1NTpcXHRlbnVtIHtcXG43ODU2OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxcbjc4NTc6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuNzg1ODpcXHRcXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxcbjc4NTk6XFx0fTtcXG43ODYwOlxcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG43ODYxOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXFxcInN3YXBwaW5lc3M9JWRcXFwifSxcXG43ODYyOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFxcXCJzd2FwcGluZXNzPW1heFxcXCJ9LFxcbjc4NjM6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXFxuNzg2NDpcXHR9O1xcbjc4NjU6XFx0XFxuNzg2NjpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzg2NzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuNzg2ODpcXHR7XFxuNzg2OTpcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmV0cmllcyA9IE1BWF9SRUNMQUlNX1JFVFJJRVM7XFxuNzg3MDpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0sIG5yX3JlY2xhaW1lZCA9IDA7XFxuNzg3MTpcXHRcXHRpbnQgc3dhcHBpbmVzcyA9IC0xO1xcbjc4NzI6XFx0XFx0Y2hhciAqb2xkX2J1ZiwgKnN0YXJ0O1xcbjc4NzM6XFx0XFx0c3Vic3RyaW5nX3QgYXJnc1tNQVhfT1BUX0FSR1NdO1xcbjc4NzQ6XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBHRlBfS0VSTkVMO1xcbjc4NzU6XFx0XFxuNzg3NjpcXHRcXHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFxcdTAwMjZcXHUwMDI2ICFwZ2RhdCkgfHwgKG1lbWNnIFxcdTAwMjZcXHUwMDI2IHBnZGF0KSlcXG43ODc3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4Nzg6XFx0XFxuNzg3OTpcXHRcXHRidWYgPSBzdHJzdHJpcChidWYpO1xcbjc4ODA6XFx0XFxuNzg4MTpcXHRcXHRvbGRfYnVmID0gYnVmO1xcbjc4ODI6XFx0XFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXFx1MDAyNmJ1ZikgLyBQQUdFX1NJWkU7XFxuNzg4MzpcXHRcXHRpZiAoYnVmID09IG9sZF9idWYpXFxuNzg4NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43ODg1OlxcdFxcbjc4ODY6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG43ODg3OlxcdFxcbjc4ODg6XFx0XFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcXHUwMDI2YnVmLCBcXFwiIFxcXCIpKSAhPSBOVUxMKSB7XFxuNzg4OTpcXHRcXHRcXHRpZiAoIXN0cmxlbihzdGFydCkpXFxuNzg5MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG43ODkxOlxcdFxcdFxcdHN3aXRjaCAobWF0Y2hfdG9rZW4oc3RhcnQsIHRva2VucywgYXJncykpIHtcXG43ODkyOlxcdFxcdFxcdGNhc2UgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUzpcXG43ODkzOlxcdFxcdFxcdFxcdGlmIChtYXRjaF9pbnQoXFx1MDAyNmFyZ3NbMF0sIFxcdTAwMjZzd2FwcGluZXNzKSlcXG43ODk0OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4OTU6XFx0XFx0XFx0XFx0aWYgKHN3YXBwaW5lc3MgXFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxcbjc4OTY6XFx0XFx0XFx0XFx0ICAgIHN3YXBwaW5lc3MgXFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcXG43ODk3OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjc4OTg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzg5OTpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxcbjc5MDA6XFx0XFx0XFx0XFx0c3dhcHBpbmVzcyA9IFNXQVBQSU5FU1NfQU5PTl9PTkxZO1xcbjc5MDE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzkwMjpcXHRcXHRcXHRkZWZhdWx0Olxcbjc5MDM6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNzkwNDpcXHRcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjUzOjE0LjE1MzMzNDY3OVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDI0NTc0ODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgRnV6emluZyBXb3J0aGluZXNzKipcblxuT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNvbXBpbGVkIHJlZ2FyZGxlc3MuIFRoYXQncyBhIGdpdmVuLiBIb3dldmVyLCB0aGUgcGF0Y2ggaXRzZWxmIGludHJvZHVjZXMgYSBjb25kaXRpb25hbCBgaWYgKG1lbWNnIFx1MDAyNlx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpYCB3aGljaCByZWxpZXMgb24gYG1lbWNnX2lzX2R5aW5nYCBldmFsdWF0aW5nIHRvIHRydWUuIEFuZCBgbWVtY2dfaXNfZHlpbmdgJ3MgcmV0dXJuIGRlcGVuZHMgb24gYENPTkZJR19NRU1DR2AgYmVpbmcgZW5hYmxlZC5cblxuVGhlcmVmb3JlLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgZGVmaW5pdGl2ZWx5IGBNRU1DR2AgYW5kIGBNRU1DR19WMWAuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBmb2N1cyBzeW1ib2xzLCBJJ3ZlIGdvdDogYG1lbV9jZ3JvdXBfcmVzaXplX21heGAsIGBtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5YCwgYG1lbW9yeV9oaWdoX3dyaXRlYCwgYG1lbW9yeV9tYXhfd3JpdGVgLCBhbmQgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLlxuXG5JJ3ZlIGNoZWNrZWQsIGFuZCB0aG9zZSBhcmUgYWxsIHRoZSBjb3JyZWN0IHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzIHBhdGNoLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBgbW0vbWVtY29udHJvbC12MS5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCBgbW0vdm1zY2FuLmNgLiBUaGVzZSBhcmUgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQsIGNydWNpYWxseSwgYXJlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBjZ3JvdXBmcy4gVGhpcyBtYWtlcyB0aGVtIHByaW1lIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuXG5cbk15IGNvbmNsdXNpb24gaXM6XG5cbldvcnRoRnV6emluZzogdHJ1ZVxuRm9jdXNTeW1ib2xzOiBbXCJtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhcIiwgXCJtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5XCIsIFwibWVtb3J5X2hpZ2hfd3JpdGVcIiwgXCJtZW1vcnlfbWF4X3dyaXRlXCIsIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiXVxuRW5hYmxlQ29uZmlnczogW1wiTUVNQ0dcIiwgXCJNRU1DR19WMVwiXVxuUmVhc29uaW5nOiBcIlRoZSBwYXRjaCBhZGRzIGNoZWNrcyBmb3IgZHlpbmcgbWVtb3J5IGNncm91cHMgaW4gc2V2ZXJhbCBjZ3JvdXAgd3JpdGUgaGFuZGxlcnMgYW5kIHByb2FjdGl2ZSByZWNsYWltIHBhdGhzIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgb3Igc3RhbGxzLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBjZ3JvdXBmcyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBlYXJseS1leGl0IHBhdGhzIGFyZSBoYW5kbGVkIGNvcnJlY3RseS5cIlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzExNCwiT3V0cHV0VG9rZW5zIjoxNDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMTo1MzoyMS4xNzc5MTE2MVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDAwMzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1fY2dyb3VwX3Jlc2l6ZV9tYXhcIixcbiAgICBcIm1lbV9jZ3JvdXBfZm9yY2VfZW1wdHlcIixcbiAgICBcIm1lbW9yeV9oaWdoX3dyaXRlXCIsXG4gICAgXCJtZW1vcnlfbWF4X3dyaXRlXCIsXG4gICAgXCJ1c2VyX3Byb2FjdGl2ZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBjaGVja3MgZm9yIGR5aW5nIG1lbW9yeSBjZ3JvdXBzIGluIHNldmVyYWwgY2dyb3VwIHdyaXRlIGhhbmRsZXJzIGFuZCBwcm9hY3RpdmUgcmVjbGFpbSBwYXRocyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIG9yIHN0YWxscy4gVGhlc2UgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgY2dyb3VwZnMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZWFybHktZXhpdCBwYXRocyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtX2Nncm91cF9yZXNpemVfbWF4XCIsXG4gICAgXCJtZW1fY2dyb3VwX2ZvcmNlX2VtcHR5XCIsXG4gICAgXCJtZW1vcnlfaGlnaF93cml0ZVwiLFxuICAgIFwibWVtb3J5X21heF93cml0ZVwiLFxuICAgIFwidXNlcl9wcm9hY3RpdmVfcmVjbGFpbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgY2hlY2tzIGZvciBkeWluZyBtZW1vcnkgY2dyb3VwcyBpbiBzZXZlcmFsIGNncm91cCB3cml0ZSBoYW5kbGVycyBhbmQgcHJvYWN0aXZlIHJlY2xhaW0gcGF0aHMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyBvciBzdGFsbHMuIFRoZXNlIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGNncm91cGZzIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGVhcmx5LWV4aXQgcGF0aHMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8x56t[1] Phase: Succeeded StartedAt: 2026-06-30 01:54:10 +0000 UTC FinishedAt: 2026-06-30 01:54:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 01:54:10 +0000 UTC FinishedAt: 2026-06-30 01:54:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2] Phase: Succeeded StartedAt: 2026-06-30 01:54:10 +0000 UTC FinishedAt: 2026-06-30 05:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-30 01:54:10 +0000 UTC FinishedAt: 2026-06-30 05:51:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-30 01:54:10 +0000 UTC FinishedAt: 2026-06-30 01:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-30 01:54:10 +0000 UTC FinishedAt: 2026-06-30 01:54:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow8x56t/series-workflow8x56t-convert-artifact-1686537672/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-30 01:54:31 +0000 UTC FinishedAt: 2026-06-30 02:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-30 01:54:31 +0000 UTC FinishedAt: 2026-06-30 02:19:18 +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:*2bd7cb92-87f8-44ae-b0b4-d7cced8878ae,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-workflow8x56t/series-workflow8x56t-convert-artifact-1686537672/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": "252a376f-c537-4f6b-b6ba-9d9122425b88", "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-workflow8x56t/series-workflow8x56t-build-action-3110367806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-30 01:54:31 +0000 UTC FinishedAt: 2026-06-30 02:19:07 +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:*2bd7cb92-87f8-44ae-b0b4-d7cced8878ae,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-workflow8x56t/series-workflow8x56t-convert-artifact-1686537672/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": "252a376f-c537-4f6b-b6ba-9d9122425b88", "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-workflow8x56t/series-workflow8x56t-build-action-3110367806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-30 02:19:18 +0000 UTC FinishedAt: 2026-06-30 02:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-30 02:19:18 +0000 UTC FinishedAt: 2026-06-30 02:19:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-30 02:19:18 +0000 UTC FinishedAt: 2026-06-30 02:19:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-30 02:19:18 +0000 UTC FinishedAt: 2026-06-30 02:19:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow8x56t/series-workflow8x56t-convert-artifact-288183983/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-30 02:19:38 +0000 UTC FinishedAt: 2026-06-30 02:21:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-30 02:19:38 +0000 UTC FinishedAt: 2026-06-30 02:21:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*252a376f-c537-4f6b-b6ba-9d9122425b88,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-workflow8x56t/series-workflow8x56t-build-action-3110367806/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-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-30 02:21:49 +0000 UTC FinishedAt: 2026-06-30 02:21:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-30 02:21:49 +0000 UTC FinishedAt: 2026-06-30 02:21:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-30 02:21:49 +0000 UTC FinishedAt: 2026-06-30 02:44:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-30 02:21:49 +0000 UTC FinishedAt: 2026-06-30 02:44:49 +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:*2bd7cb92-87f8-44ae-b0b4-d7cced8878ae,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-workflow8x56t/series-workflow8x56t-convert-artifact-288183983/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": "e5b90eda-9e83-4c02-acdb-bc8cf361209f", "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-workflow8x56t/series-workflow8x56t-build-action-725426755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-30 02:21:49 +0000 UTC FinishedAt: 2026-06-30 02:44:39 +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:*2bd7cb92-87f8-44ae-b0b4-d7cced8878ae,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-workflow8x56t/series-workflow8x56t-convert-artifact-288183983/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": "e5b90eda-9e83-4c02-acdb-bc8cf361209f", "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-workflow8x56t/series-workflow8x56t-build-action-725426755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-30 02:44:49 +0000 UTC FinishedAt: 2026-06-30 02:44:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-30 02:44:49 +0000 UTC FinishedAt: 2026-06-30 02:44:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-30 02:44:49 +0000 UTC FinishedAt: 2026-06-30 02:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-30 02:44:49 +0000 UTC FinishedAt: 2026-06-30 02:46:47 +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:*e5b90eda-9e83-4c02-acdb-bc8cf361209f,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-workflow8x56t/series-workflow8x56t-build-action-725426755/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-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-30 02:46:54 +0000 UTC FinishedAt: 2026-06-30 05:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-30 02:46:54 +0000 UTC FinishedAt: 2026-06-30 05:51:02 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},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:*252a376f-c537-4f6b-b6ba-9d9122425b88,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5b90eda-9e83-4c02-acdb-bc8cf361209f,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-workflow8x56t/series-workflow8x56t-build-action-3110367806/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-workflow8x56t/series-workflow8x56t-build-action-725426755/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-30 02:46:54 +0000 UTC FinishedAt: 2026-06-30 02:47:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-30 02:46:54 +0000 UTC FinishedAt: 2026-06-30 02:47:44 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},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-workflow8x56t/series-workflow8x56t-convert-artifact-1868480872/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-30 02:46:54 +0000 UTC FinishedAt: 2026-06-30 02:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-30 02:46:54 +0000 UTC FinishedAt: 2026-06-30 02:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-30 02:46:54 +0000 UTC FinishedAt: 2026-06-30 02:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-30 02:47:52 +0000 UTC FinishedAt: 2026-06-30 05:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8x56t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["mem_cgroup_resize_max","mem_cgroup_force_empty","memory_high_write","memory_max_write","user_proactive_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"f6a4ce46-a170-4bac-81dd-b3a042619c3f","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-30 02:47:52 +0000 UTC FinishedAt: 2026-06-30 05:50:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*252a376f-c537-4f6b-b6ba-9d9122425b88,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5b90eda-9e83-4c02-acdb-bc8cf361209f,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-workflow8x56t/series-workflow8x56t-build-action-3110367806/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-workflow8x56t/series-workflow8x56t-build-action-725426755/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-workflow8x56t/series-workflow8x56t-convert-artifact-1868480872/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,}