Name: series-workflowdlbn4 Phase: Succeeded StartedAt: 2026-07-21 00:35:16 +0000 UTC FinishedAt: 2026-07-21 05:21:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[0] Phase: Succeeded StartedAt: 2026-07-21 00:35:16 +0000 UTC FinishedAt: 2026-07-21 00:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 00:35:16 +0000 UTC FinishedAt: 2026-07-21 00:52:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SFP", "PHYLIB", "PHYLINK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SFP", "PHYLIB", "PHYLINK" ], "series_id": "0fe81d85-974c-49f2-b796-9a7c0334310e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ethnl_port_dump_start", "ethnl_port_dumpit", "ethnl_port_dump_done", "port_parse_request", "port_prepare_data", "port_reply_size", "port_fill_reply", "port_dump_one_dev", "port_dump_all_dev", "phy_link_topo_add_port", "phy_link_topo_del_port", "phylink_create_sfp_cage_port", "phylink_add_sfp_mod_port", "phy_add_sfp_mod_port", "phy_setup_sfp_port", "phy_caps_linkmode_filter_ifaces", "phy_set_upstream_port" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7UEhZTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBpdCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBfZG9uZSYjMzQ7LAogICAgJiMzNDtwb3J0X3BhcnNlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7cG9ydF9wcmVwYXJlX2RhdGEmIzM0OywKICAgICYjMzQ7cG9ydF9yZXBseV9zaXplJiMzNDssCiAgICAmIzM0O3BvcnRfZmlsbF9yZXBseSYjMzQ7LAogICAgJiMzNDtwb3J0X2R1bXBfb25lX2RldiYjMzQ7LAogICAgJiMzNDtwb3J0X2R1bXBfYWxsX2RldiYjMzQ7LAogICAgJiMzNDtwaHlfbGlua190b3BvX2FkZF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fZGVsX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2FkZF9zZnBfbW9kX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X3NldHVwX3NmcF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMmIzM0OywKICAgICYjMzQ7cGh5X3NldF91cHN0cmVhbV9wb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIChFVEhUT09MX01TR19QT1JUX0dFVCkgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgcGh5c2ljYWwgY29ubmVjdGlvbiBwb2ludHMgb2YgYSBuZXR3b3JrIGRldmljZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgUEhZIGFuZCBwaHlsaW5rIHN1YnN5c3RlbXMgdG8gdHJhY2sgYW5kIGV4cG9zZSB0aGVzZSBwb3J0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIHRoZW0gaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjQ1YThiYWMwM2NkODE2NDdiN2JlYzFlOGI5OWMxODFkMmE0OTZhMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDAwOjUyOjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiYi4uZDExNTFhZjMzNWNhMTAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5AQCAtMjEwLDYgJiM0MzsyMTAsMTAgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogZGlzY2FyZFxuICAgICAgICAgdmFsdWU6IDMxXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogcG9ydC10eXBlXG4mIzQzOyAgICB0eXBlOiBlbnVtXG4mIzQzOyAgICBlbnRyaWVzOiBbbWRpLCBzZnBdXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTkwNSw2ICYjNDM7MTkwOSwzMiBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IGxpbmtcbiAgICAgICAgIHR5cGU6IG5lc3RcbiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBtc2Utc25hcHNob3RcbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBwb3J0XG4mIzQzOyAgICBhdHRyLWNudC1uYW1lOiAtLWV0aHRvb2wtYS1wb3J0LWNudFxuJiM0MzsgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGhlYWRlclxuJiM0MzsgICAgICAgIHR5cGU6IG5lc3RcbiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBpZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogc3VwcG9ydGVkLW1vZGVzXG4mIzQzOyAgICAgICAgdHlwZTogbmVzdFxuJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXRcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1pbnRlcmZhY2VzXG4mIzQzOyAgICAgICAgdHlwZTogbmVzdFxuJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXRcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHR5cGVcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBlbnVtOiBwb3J0LXR5cGVcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHVwc3RyZWFtLXBvcnRcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiBcbiBvcGVyYXRpb25zOlxuICAgZW51bS1tb2RlbDogZGlyZWN0aW9uYWxcbkBAIC0yODU5LDYgJiM0MzsyODg5LDI2IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSB3b3JzdC1jaGFubmVsXG4gICAgICAgICAgICAgLSBsaW5rXG4gICAgICAgZHVtcDogKm1zZS1nZXQtb3BcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogcG9ydC1nZXRcbiYjNDM7ICAgICAgZG9jOiBHZXQgcG9ydHMgYXR0YWNoZWQgdG8gYW4gaW50ZXJmYWNlXG4mIzQzO1xuJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBwb3J0XG4mIzQzO1xuJiM0MzsgICAgICBkbzogXHUwMDI2cG9ydC1nZXQtb3BcbiYjNDM7ICAgICAgICByZXF1ZXN0OlxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXJcbiYjNDM7ICAgICAgICAgICAgLSBpZFxuJiM0MzsgICAgICAgIHJlcGx5OlxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXJcbiYjNDM7ICAgICAgICAgICAgLSBpZFxuJiM0MzsgICAgICAgICAgICAtIHN1cHBvcnRlZC1tb2Rlc1xuJiM0MzsgICAgICAgICAgICAtIHN1cHBvcnRlZC1pbnRlcmZhY2VzXG4mIzQzOyAgICAgICAgICAgIC0gdHlwZVxuJiM0MzsgICAgICAgICAgICAtIHVwc3RyZWFtLXBvcnRcbiYjNDM7ICAgICAgZHVtcDogKnBvcnQtZ2V0LW9wXG4gXG4gbWNhc3QtZ3JvdXBzOlxuICAgbGlzdDpcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XG5pbmRleCBlOTJhYmY0NWZhZjUwZC4uYjQzMjZjODliMDc1MWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcbkBAIC0yNTM3LDYgJiM0MzsyNTM3LDM5IEBAIFdpdGhpbiBlYWNoIGNoYW5uZWwgbmVzdCwgb25seSB0aGUgbWV0cmljcyBzdXBwb3J0ZWQgYnkgdGhlIFBIWSB3aWxsIGJlIHByZXNlbnQuXG4gU2VlIGBgc3RydWN0IHBoeV9tc2Vfc25hcHNob3RgYCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBpblxuIGBgaW5jbHVkZS9saW51eC9waHkuaGBgLlxuIFxuJiM0MztQT1JUX0dFVFxuJiM0Mzs9PT09PT09PVxuJiM0MztcbiYjNDM7UmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsXG4mIzQzO3JlZmVycmVkIHRvIGFzIFwmIzM0O3BvcnRzXCYjMzQ7LiBVc2VyIG5lZWRzIHRvIHNwZWNpZnkgYSBQT1JUX0lEIGZvciB0aGUgRE8gb3BlcmF0aW9uLFxuJiM0MztpbiB3aGljaCBjYXNlIHRoZSBETyByZXF1ZXN0IHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBzcGVjaWZpYyBwb3J0LlxuJiM0MztcbiYjNDM7QXMgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgcG9ydCwgdGhlIERVTVAgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIGxpc3QgdGhlXG4mIzQzO3BvcnRzIHByZXNlbnQgb24gYSBnaXZlbiBpbnRlcmZhY2UsIGJ5IHBhc3NpbmcgYW4gaW50ZXJmYWNlIGluZGV4IG9yIG5hbWUgaW5cbiYjNDM7dGhlIGR1bXAgcmVxdWVzdC5cbiYjNDM7XG4mIzQzO1JlcXVlc3QgY29udGVudHM6XG4mIzQzO1xuJiM0MzsgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9IRUFERVJgYCAgICAgICAgICAgICBuZXN0ZWQgIHJlcXVlc3QgaGVhZGVyXG4mIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9JRGBgICAgICAgICAgICAgICAgICB1MzIgICAgIHBvcnQgaWRcbiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7S2VybmVsIHJlc3BvbnNlIGNvbnRlbnRzOlxuJiM0MztcbiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSEVBREVSYGAgICAgICAgICAgICAgICBuZXN0ZWQgIHJlcXVlc3QgaGVhZGVyXG4mIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9JRGBgICAgICAgICAgICAgICAgICAgIHUzMiAgICAgdGhlIHBvcnQmIzM5O3MgdW5pcXVlIGlkZW50aWZpZXIsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyIG5ldGRldmljZS5cbiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFU2BgICAgICAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIGxpbmttb2Rlc1xuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVNgYCBiaXRzZXQgIGJpdHNldCBvZiBzdXBwb3J0ZWQgTUlJXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlc1xuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfVFlQRWBgICAgICAgICAgICAgICAgICB1MzIgICAgIHRoZSBwb3J0IHR5cGVcbiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlRgYCAgICAgICAgdTMyICAgICBJZiBhbnksIHRoZSBpbmRleCBvZiB0aGUgTUlJXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCB0aGF0IGZlZWRzIGludG8gdGhpc1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuXG4mIzQzOyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4gUmVxdWVzdCB0cmFuc2xhdGlvblxuID09PT09PT09PT09PT09PT09PT1cbiBcbkBAIC0yNjQ3LDQgJiM0MzsyNjgwLDUgQEAgYXJlIG5ldGxpbmsgb25seS5cbiAgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUEhZX0dFVGBgXG4gICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgXG4gICBgYFNJT0NTSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX1NFVGBgXG4mIzQzOyAgbi9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19QT1JUX0dFVGBgXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbmluZGV4IDZlMjhkOTA5NGJjZTNmLi4yYTliMWVjOTNiNzBmOSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbkBAIC05OSwxMyAmIzQzOzk5LDI5IEBAIHdpbGwgZXZlbnR1YWxseSBiZSBhYmxlIHRvIHJlcG9ydCBpdHMgb3duIGtzZXR0aW5nczo6XG4gICAgICAgICAgICAgKF9fX19fKS0tLS0tfCBQb3J0IHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAmIzQzOy0tLS0tLSYjNDM7XG4gXG4mIzQzO1NGUCBwb3J0c1xuJiM0Mzs9PT09PT09PT1cbiYjNDM7XG4mIzQzO1NGUCBpbnRlcmZhY2VzIGludm9sdmUgMiBkaXN0aW5jdCBjb21wb25lbnRzLCBlYWNoIHJlcHJlc2VudGVkIGJ5XG4mIzQzO2EgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCBpbnN0YW5jZSA6XG4mIzQzO1xuJiM0MzsgLSBUaGUgU0ZQIGNhZ2UgaXRzZWxmIGlzIGEgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYC4gSXQmIzM5O3Mgc3BlY2lhbFxuJiM0MzsgICBpbiB0aGF0IGl0JiMzOTtzIG5vdCBhbiBNREkgaW50ZXJmYWNlLCBidXQgcmF0aGVyIGEgaG90LXBsdWdnYWJsZSBNSUkuXG4mIzQzOyAgIFRoZSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgIGFzc29jaWF0ZWQgdG8gaXQgbGlzdHMgdGhlIGRpZmZlcmVudFxuJiM0MzsgICBNSUkgaW50ZXJmYWNlcyB3ZSBjYW4gdXNlIG9uIHRoZSBjYWdlLlxuJiM0MztcbiYjNDM7IC0gVGhlIFNGUCBtb2R1bGUsIHdoZW4gaW5zZXJ0ZWQsIHdpbGwgYWxzbyBiZSBhc3NvY2lhdGVkIHRvIGFcbiYjNDM7ICAgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCwgdGhhdCByZXByZXNlbnRzIHRoZSB2YXJpb3VzIGxpbmttb2Rlc1xuJiM0MzsgICB0aGF0IGl0IGdpdmVzIGFjY2VzcyB0by4gVGhlIG1vZHVsZSYjMzk7cyA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgXG4mIzQzOyAgIGRvZXNuJiMzOTt0IHN1cGVyc2VkZSB0aGUgY2FnZSYjMzk7cyBwb3J0LCBpdCByZWZlcmVuY2VzIGl0IHRocm91Z2hcbiYjNDM7ICAgdGhlIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWAgOmM6bWVtYmVyOmB1cHN0cmVhbV9wb3J0YCBmaWVsZC5cbiYjNDM7XG4gTmV4dCBzdGVwc1xuID09PT09PT09PT1cbiBcbi1BcyBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgb25seSBwb3J0cyBjb250cm9sbGVkIGJ5IFBIWSBkZXZpY2VzIGFyZVxuLXN1cHBvcnRlZC4gVGhlIG5leHQgc3RlcHMgd2lsbCBiZSB0byBhZGQgdGhlIE5ldGxpbmsgQVBJIHRvIGV4cG9zZSB0aGVzZVxuLXRvIHVzZXJzcGFjZSBhbmQgYWRkIHN1cHBvcnQgZm9yIHJhdyBwb3J0cyAoY29udHJvbGxlZCBieSBzb21lIGZpcm13YXJlLCBhbmQgZGlyZWN0bHlcbi1tYW5hZ2VkIGJ5IHRoZSBOSUMgZHJpdmVyKS5cbiYjNDM7QXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50YXRpb24sIHRoZSBwb3J0JiMzOTtzIHByZXNlbmNlIGFuZCBpbmZvcm1hdGlvbiBjYW4gb25seVxuJiM0MztiZSBxdWVyaWVkLCBhbmQgaXQmIzM5O3Mgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgb2YgdGhlIHBvcnQmIzM5O3Mgc2V0dGluZ3Mgb3Igc2VsZWN0XG4mIzQzO3doaWNoIG9uZSBzaG91bGQgYmUgdXNlZC5cbiBcbiBBbm90aGVyIHBhcmFsbGVsIHRhc2sgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIE1JSSBtdXhpbmcgZnJhbWV3b3JrIHRvIGFsbG93IHRoZVxuLWNvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZXIgbXVsdGktcG9ydCBzZXR1cHMuXG4mIzQzO2NvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZW4gbXVsdGktcG9ydCBzZXR1cHMuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMDBlN2IyNmUwYTIzZmEuLmQzMzg4MWVjMWY2MjU1IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTg3OTIsNiAmIzQzOzE4NzkyLDcgQEAgRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZXRoZXJuZXQtY29ubmVjdG9yLnlhbWxcbiBGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuIEY6XHRkcml2ZXJzL25ldC9waHkvcGh5X3BvcnQuY1xuIEY6XHRpbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbiYjNDM7RjpcdG5ldC9ldGh0b29sL3BvcnQuY1xuIEs6XHRzdHJ1Y3RcXHMmIzQzO3BoeV9wb3J0fHBoeV9wb3J0X1xuIFxuIE5FVFdPUktJTkcgW0dFTkVSQUxdXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxuaW5kZXggNDIxMDg4ZTZmNmU4ZjEuLmVjM2QzOWEwYWUwNmJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXG5AQCAtNjYsNSAmIzQzOzY2LDcgQEAgdm9pZCBwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXG4gXHRcdFx0XHQgICBlbnVtIGV0aHRvb2xfbGlua19tZWRpdW0gbWVkaXVtLFxuIFx0XHRcdFx0ICAgaW50IGxhbmVzKTtcbiB1MzIgcGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpO1xuJiM0Mzt2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTtcbiBcbiAjZW5kaWYgLyogX19QSFlfQ0FQU19IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xuaW5kZXggOTQyZDQzMTkxNTYxZTIuLjU1OGU0ZGY0ZDYzYzA4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jXG5AQCAtNDQ1LDMgJiM0Mzs0NDUsMjkgQEAgdTMyIHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxuIFx0cmV0dXJuIG1lZGl1bXM7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXMpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMoKSAtIEZpbHRlciBsaW5rbW9kZXMgd2l0aCBhbiBpbnRlcmZhY2UgbGlzdFxuJiM0MzsgKiBAdG86IFN0b3JlcyB0aGUgZmlsdGVyZWQgbGlua21vZGVzXG4mIzQzOyAqIEBmcm9tOiBMaW5rbW9kZXMgdG8gZmlsdGVyXG4mIzQzOyAqIEBpbnRlcmZhY2VzOiBCaXRmaWVsZCBvZiBwaHlfaW50ZXJmYWNlX3QgdGhhdCB3ZSB1c2UgZm9yIGZpbHRlcmluZ1xuJiM0MzsgKlxuJiM0MzsgKiBGaWx0ZXIgdGhlIHByb3ZpZGVkIGxpbmttb2Rlcywgb25seSB0byBrZWVwIHRoZSBvbmVzIHdlIGNhbiBwb3NzaWJseSBhY2hpZXZlXG4mIzQzOyAqIHdoZW4gdXNpbmcgYW55IG9mIHRoZSBwcm92aWRlZCBNSUkgaW50ZXJmYWNlcy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyh1bnNpZ25lZCBsb25nICp0byxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKVxuJiM0Mzt7XG4mIzQzO1x0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soaWZhY2VzX3N1cHBvcnRlZCkgPSB7fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaWZhY2VzX2NhcHMgPSAwO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX3NldF9iaXQoaW50ZXJmYWNlLCBpbnRlcmZhY2VzLCBQSFlfSU5URVJGQUNFX01PREVfTUFYKVxuJiM0MztcdFx0aWZhY2VzX2NhcHMgfD0gcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UoaW50ZXJmYWNlKTtcbiYjNDM7XG4mIzQzO1x0cGh5X2NhcHNfbGlua21vZGVzKGlmYWNlc19jYXBzLCBpZmFjZXNfc3VwcG9ydGVkKTtcbiYjNDM7XG4mIzQzO1x0bGlua21vZGVfYW5kKHRvLCBmcm9tLCBpZmFjZXNfc3VwcG9ydGVkKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggMDYxNTIyODQ1OWVmNDIuLmQ1MjUxNWU3ZTMwMzAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE0OTAsMTEgJiM0MzsxNDkwLDIyIEBAIHN0YXRpYyBpbnQgcGh5X3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbiB7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0aWYgKGRldilcbi1cdFx0cmV0dXJuIHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gdHJ1ZTtcbiYjNDM7XHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHQvKiBJZiB3ZSBhcmVuJiMzOTt0IGF0dGFjaGVkIHRvIGEgbmV0ZGV2LCB3ZSBjYW4mIzM5O3QgYWRkIHRoZSBTRlAgUEhZIHRvIGl0c1xuJiM0MztcdCAqIHRvcG9sb2d5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZGV2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWhhc19zZnBfbW9kX3BoeSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC0xNTEyLDggJiM0MzsxNTIzLDEyIEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfZGlzY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbiBcbiYjNDM7XHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGRldilcbiBcdFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTtcbiYjNDM7XG4mIzQzO1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgTlVMTCk7XG4gfVxuIFxuIC8qKlxuQEAgLTE2MTcsNiAmIzQzOzE2MzIsNzcgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9saW5rX2Rvd24odm9pZCAqdXBzdHJlYW0pXG4gXHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWxpbmtfZG93bihwb3J0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGh5X2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgbW9kIHBvcnQgKi9cbiYjNDM7XHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcbiYjNDM7XHRpZiAoIXBvcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cG9ydC1cdTAwM2VhY3RpdmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRjYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwaHlkZXYtXHUwMDNlc2ZwX2J1cyk7XG4mIzQzO1xuJiM0MztcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXHUwMDNlbGlua19tb2RlcyxcbiYjNDM7XHRcdFx0XHRcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldikge1xuJiM0MztcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LCBwb3J0KTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHdlIGRvbiYjMzk7dCB1c2UgcGh5X2FkZF9wb3J0KCkgaGVyZSBhcyB0aGUgbW9kdWxlIHBvcnQgaXNuJiMzOTt0IGEgZGlyZWN0XG4mIzQzO1x0ICogaW50ZXJmYWNlIGZyb20gdGhlIFBIWSwgYnV0IHJhdGhlciBhbiBleHRlbnNpb24gdG8gdGhlIHNmcC1idXMsIHRoYXRcbiYjNDM7XHQgKiBpcyBhbHJlYWR5IHJlcHJlc2VudGVkIGJ5IGl0cyBvd24gcGh5X3BvcnRcbiYjNDM7XHQgKi9cbiYjNDM7XHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBwb3J0O1xuJiM0MztcbiYjNDM7XHRwb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydC1cdTAwM2VpZDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBoeV9kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4mIzQzO1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1xuJiM0MztcdHBoeV9wb3J0X2Rlc3Ryb3kocGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV9zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuJiM0MztcbiYjNDM7XHQvKiBJZiB0aGVyZSYjMzk7cyBhIGRvd25zdHJlYW0gU0ZQIG1vZHVsZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGNvbnRhaW4gYSBQSFlcbiYjNDM7XHQgKiBkZXZpY2UsIGxldCYjMzk7cyBjcmVhdGUgYSBwaHlfcG9ydCB0byByZXByZXNlbnQgdGhhdCBtb2R1bGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxuJiM0MztcdFx0cmV0dXJuIHBoeV9hZGRfc2ZwX21vZF9wb3J0KHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwaHlfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuJiM0MztcbiYjNDM7XHQvKiBDYWxsZWQgdXBvbiBtb2R1bGUgcmVtb3ZhbCBvciB1cHN0cmVhbSByZW1vdmFsICovXG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxuJiM0MztcdFx0cGh5X2RlbF9zZnBfbW9kX3BvcnQocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG4gXHQuYXR0YWNoID0gcGh5X3NmcF9hdHRhY2gsXG4gXHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXG5AQCAtMTYyNiw2ICYjNDM7MTcxMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcbiBcdC5saW5rX2Rvd24gPSBwaHlfc2ZwX2xpbmtfZG93bixcbiBcdC5jb25uZWN0X3BoeSA9IHBoeV9zZnBfY29ubmVjdF9waHksXG4gXHQuZGlzY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Rpc2Nvbm5lY3RfcGh5LFxuJiM0MztcdC5tb2R1bGVfc3RhcnQgPSBwaHlfc2ZwX21vZHVsZV9zdGFydCxcbiYjNDM7XHQubW9kdWxlX3N0b3AgPSBwaHlfc2ZwX21vZHVsZV9zdG9wLFxuIH07XG4gXG4gc3RhdGljIGludCBwaHlfYWRkX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuQEAgLTE2NzMsMTMgJiM0MzsxNzYxLDEzIEBAIHN0YXRpYyB2b2lkIHBoeV9kZWxfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4gXHRwaHlkZXYtXHUwMDNlbl9wb3J0cy0tO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0MztzdGF0aWMgc3RydWN0IHBoeV9wb3J0ICpwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghcG9ydClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdHBvcnQtXHUwMDNlcGFyZW50X3R5cGUgPSBQSFlfUE9SVF9QSFk7XG4gXHRwb3J0LVx1MDAzZXBoeSA9IHBoeWRldjtcbkBAIC0xNjk0LDEwICYjNDM7MTc4MiwxMiBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0ICogd2hlbiBhdHRhY2hpbmcgdGhlIHBvcnQgdG8gdGhlIHBoeWRldi5cbiBcdCAqL1xuIFx0cmV0ID0gcGh5X2FkZF9wb3J0KHBoeWRldiwgcG9ydCk7XG4tXHRpZiAocmV0KVxuJiM0MztcdGlmIChyZXQpIHtcbiBcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcG9ydDtcbiB9XG4gXG4gLyoqXG5AQCAtMTcwNiwyNSAmIzQzOzE3OTYsNDkgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiAgKi9cbiBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBzZnBfYnVzICpidXM7XG4tXHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpIHtcbi1cdFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKTtcbi1cdFx0aWYgKElTX0VSUihidXMpKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKGJ1cyk7XG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4tXHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gYnVzO1xuJiM0MztcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XG4mIzQzO1x0aWYgKElTX0VSUihidXMpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYnVzKTtcbiBcbi1cdFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcbi1cdFx0c2ZwX2J1c19wdXQoYnVzKTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbiBcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XG4mIzQzO1x0aWYgKGJ1cykge1xuJiM0MztcdFx0cG9ydCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKElTX0VSUihwb3J0KSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHBvcnQpO1xuJiM0MztcdFx0XHRwb3J0ID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfc2ZwO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKVxuLVx0XHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgXHUwMDI2c2ZwX3BoeWRldl9vcHMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wb3J0O1xuJiM0MztcbiYjNDM7XHQvKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIGdyYWJzIGEgcmVmIHRvIHRoZSBzZnAgYnVzIG9uIHN1Y2Nlc3MsIGl0JiMzOTtzXG4mIzQzO1x0ICogc2FmZSB0byByZWxlYXNlIGl0IG5vdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZnBfYnVzX3B1dChidXMpO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztvdXRfcG9ydDpcbiYjNDM7XHRpZiAocG9ydCkge1xuJiM0MztcdFx0cGh5X2RlbF9wb3J0KHBoeWRldiwgcG9ydCk7XG4mIzQzO1x0XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuJiM0MztcdH1cbiYjNDM7b3V0X3NmcDpcbiYjNDM7XHRzZnBfYnVzX3B1dChidXMpO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE4MTUsNiAmIzQzOzE5MjksMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdGVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeWRldiwgUEhZX1VQU1RSRUFNX01BQywgZGV2KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwaHlkZXYtXHUwMDNlbW9kX3BvcnQpIHtcbiYjNDM7XHRcdFx0ZXJyID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdC8qIFNvbWUgRXRoZXJuZXQgZHJpdmVycyB0cnkgdG8gY29ubmVjdCB0byBhIFBIWSBkZXZpY2UgYmVmb3JlXG5AQCAtMTk1MSw2ICYjNDM7MjA3MSw4IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LVx1MDAzZXBoeWRldiA9IE5VTEw7XG4gXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xuIFx0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbiYjNDM7XHRcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4gXHR9XG4gXG4gXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gTlVMTDtcbkBAIC0zNTc5LDYgJiM0MzszNzAxLDI4IEBAIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeV9zZXRfdXBzdHJlYW1fcG9ydCgpIC0gU2V0cyB0aGUgcGh5X3BvcnQgY29udHJvbGxpbmcgdGhlIE1JSSB0aGlzIFBIWSBpc1xuJiM0MzsgKlx0XHRcdCAgICAgYXR0YWNoZWQgdG8uXG4mIzQzOyAqIEBwaHlkZXY6IHBvaW50ZXIgdG8gdGhlIFBIWSBkZXZpY2Ugd2Ugc2V0IHRoZSB1cHN0cmVhbSBvZi5cbiYjNDM7ICogQHBvcnQ6IFRoZSBwaHlfcG9ydCB1cHN0cmVhbSBvZiB0aGlzIFBIWSwgY2FuIGJlIE5VTEwuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcbiYjNDM7XG4mIzQzO1x0cGh5X2Zvcl9lYWNoX3BvcnQocGh5ZGV2LCBsb2NhbF9wb3J0KVxuJiM0MztcdFx0aWYgKHBvcnQpXG4mIzQzO1x0XHRcdGxvY2FsX3BvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXHUwMDNlaWQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGxvY2FsX3BvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA9IDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X3NldF91cHN0cmVhbV9wb3J0KTtcbiYjNDM7XG4gLyoqXG4gICogZndub2RlX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGZ3bm9kZSwgZmluZCB0aGUgbWRpb19kZXZpY2VcbiAgKiBAZndub2RlOiBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSYjMzk7cyBmd25vZGVcbkBAIC0zODE3LDYgJiM0MzszOTYxLDcgQEAgc3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbiBcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IE5VTEw7XG4gXG4gXHRwaHlfY2xlYW51cF9wb3J0cyhwaHlkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmNcbmluZGV4IDQxMzRkZTdhZTMxM2QyLi41ZTEzNWFiNjM2YzBiNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuQEAgLTcsNiAmIzQzOzcsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X3BvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuQEAgLTIzLDE3ICYjNDM7MjQsODEgQEAgc3RhdGljIGludCBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHhhX2luaXRfZmxhZ3MoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBYQV9GTEFHU19BTExPQzEpO1xuIFx0dG9wby1cdTAwM2VuZXh0X3BoeV9pbmRleCA9IDE7XG4gXG4mIzQzO1x0eGFfaW5pdF9mbGFncyhcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzLCBYQV9GTEFHU19BTExPQzEpO1xuJiM0MztcdHRvcG8tXHUwMDNlbmV4dF9wb3J0X2luZGV4ID0gMTtcbiYjNDM7XG4gXHRkZXYtXHUwMDNlbGlua190b3BvID0gdG9wbztcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlbGlua190b3BvKVxuJiM0MztcdFx0cmV0dXJuIGRldi1cdTAwM2VsaW5rX3RvcG87XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB0b3BvbG9neSBpcyBhbGxvY2F0ZWQgdGhlIGZpcnN0IHRpbWUgd2UgYWRkIGFuIG9iamVjdCB0byBpdC5cbiYjNDM7XHQgKiBJdCBpcyBmcmVlZCBhbG9uZ3NpZGUgdGhlIG5ldGRldi4gSXQgY2FuIGJlIGNhbGxlZCBvbiBtdWx0aXBsZVxuJiM0MztcdCAqIGNvbnRleHRzOlxuJiM0MztcdCAqICAtIEl0IGNhbiBiZSBjYWxsZWQgZnJvbSAucHJvYmUoKSA6IE5vIHJ0bmwsIG5vIG5ldGRldl9sb2NrXG4mIzQzO1x0ICogIC0gLm5kb19vcGVuKCkgOiBydG5sIGFuZCBwb3NzaWJseSBuZXRkZXZfbG9ja1xuJiM0MztcdCAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdFxuJiM0MztcdCAqXG4mIzQzO1x0ICogIEhvd2V2ZXIsIHdlIGNhbiYjMzk7dCByZWFsbHkgaGF2ZSByYWNlcyA6XG4mIzQzO1x0ICogIC0gSWYgd2UgaGF2ZSBhIFBIWSwgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkgd2lsbCBhbHdheXMgcnVuIGZpcnN0XG4mIzQzO1x0ICogICAgYW5kIHRyaWdnZXIgdGhlIGFsbG9jLiBPbmx5IHRoZW4gdGhlIHBvcnRzIGNhbiBiZSBhZGRlZCB0aHJvdWdoXG4mIzQzO1x0ICogICAgcGh5bGliIG9mIHNmcC5cbiYjNDM7XHQgKiAgLSBJZiB3ZSBkb24mIzM5O3QsIHRoZSBTRlAgcG9ydCBmb3IgdGhlIGNhZ2UgaXMgcmVnaXN0ZXJlZCBmaXJzdCwgYW5kXG4mIzQzO1x0ICogICAgb25seSB0aGVuIG90aGVyIHBvcnRzL1BIWXMgY2FuIGJlIHJlZ2lzdGVyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXYtXHUwMDNlbGlua190b3BvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7XG4mIzQzO1x0aWYgKElTX0VSUih0b3BvKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xuJiM0MztcbiYjNDM7XHQvKiBBdHRlbXB0IHRvIHJlLXVzZSBhIHByZXZpb3VzbHkgYWxsb2NhdGVkIHBvcnRfaWQgKi9cbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZClcbiYjNDM7XHRcdHJldCA9IHhhX2luc2VydChcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzLCBwb3J0LVx1MDAzZWlkLCBwb3J0LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXQgPSB4YV9hbGxvY19jeWNsaWMoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgXHUwMDI2cG9ydC1cdTAwM2VpZCwgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgICB4YV9saW1pdF8zMmIsIFx1MDAyNnRvcG8tXHUwMDNlbmV4dF9wb3J0X2luZGV4LFxuJiM0MztcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fYWRkX3BvcnQpO1xuJiM0MztcbiYjNDM7dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cdTAwM2VsaW5rX3RvcG87XG4mIzQzO1xuJiM0MztcdGlmICghdG9wbylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgcG9ydC1cdTAwM2VpZCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19kZWxfcG9ydCk7XG4mIzQzO1xuIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4gXHRcdFx0ICBlbnVtIHBoeV91cHN0cmVhbSB1cHQsIHZvaWQgKnVwc3RyZWFtKVxuIHtcbi1cdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cdTAwM2VsaW5rX3RvcG87XG4mIzQzO1x0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvO1xuIFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiBcdGludCByZXQ7XG4gXG4gXHQvKiBldGh0b29sIG9wcyBtYXkgcnVuIHdpdGhvdXQgcnRubF9sb2NrLCBhbmQgcnRubF9sb2NrIGlzIHdoYXRcbkBAIC00NSwxMyAmIzQzOzExMCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChXQVJOX09OX09OQ0UobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghdG9wbykge1xuLVx0XHRyZXQgPSBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koZGV2KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHR0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbi1cdH1cbiYjNDM7XHR0b3BvID0gcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2MoZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHRvcG8pKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIodG9wbyk7XG4gXG4gXHRwZG4gPSBremFsbG9jX29iaigqcGRuKTtcbiBcdGlmICghcGRuKVxuQEAgLTg2LDggJiM0MzsxNDcsMjAgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnI7XG4gXG4mIzQzO1x0LyogQWRkIGFsbCB0aGUgUEhZJiMzOTtzIHBvcnRzIHRvIHRoZSB0b3BvbG9neSAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGh5LVx1MDAzZXBvcnRzLCBoZWFkKSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KGRldiwgcG9ydCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIGRlbF9wb3J0cztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2RlbF9wb3J0czpcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2UocG9ydCwgXHUwMDI2cGh5LVx1MDAzZXBvcnRzLCBoZWFkKVxuJiM0MztcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHR4YV9lcmFzZShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMsIHBoeS1cdTAwM2VwaHlpbmRleCk7XG4gZXJyOlxuIFx0a2ZyZWUocGRuKTtcbiBcdHJldHVybiByZXQ7XG5AQCAtOTksMTAgJiM0MzsxNzIsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuIFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiBcbiBcdGlmICghdG9wbylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGh5LVx1MDAzZXBvcnRzLCBoZWFkKVxuJiM0MztcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuJiM0MztcbiBcdHBkbiA9IHhhX2VyYXNlKFx1MDAyNnRvcG8tXHUwMDNlcGh5cywgcGh5LVx1MDAzZXBoeWluZGV4KTtcbiBcbiBcdC8qIFdlIGRlbGV0ZSB0aGUgUEhZIGZyb20gdGhlIHRvcG9sb2d5LCBob3dldmVyIHdlIGRvbiYjMzk7dCByZS1zZXQgdGhlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbmluZGV4IDU5ZGZlMzVhZmE1NGZjLi41Y2ZiZmNjMTA3OWFkMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbkBAIC0xNCw2ICYjNDM7MTQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2ZpeGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG5AQCAtOTMsNiAmIzQzOzk1LDggQEAgc3RydWN0IHBoeWxpbmsge1xuIFx0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soc2ZwX2ludGVyZmFjZXMpO1xuIFx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc2ZwX3N1cHBvcnQpO1xuIFx0dTggc2ZwX3BvcnQ7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqbW9kX3BvcnQ7XG4gXG4gXHRzdHJ1Y3QgZWVlX2NvbmZpZyBlZWVfY2ZnO1xuIFxuQEAgLTE3NjQsNiAmIzQzOzE3NjgsNTEgQEAgc3RhdGljIHZvaWQgcGh5bGlua19maXhlZF9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHM7XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGwtXHUwMDNlbmV0ZGV2IHx8ICFwbC1cdTAwM2VzZnBfYnVzKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuJiM0MztcdGlmICghcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwb3J0LVx1MDAzZWlzX3NmcCA9IHRydWU7XG4mIzQzO1x0cG9ydC1cdTAwM2Vpc19taWkgPSB0cnVlO1xuJiM0MztcdHBvcnQtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV9hbmQocG9ydC1cdTAwM2VpbnRlcmZhY2VzLCBwbC1cdTAwM2Vjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMsXG4mIzQzO1x0XHRcdCAgcGh5bGlua19zZnBfaW50ZXJmYWNlcyk7XG4mIzQzO1x0cGh5X3BvcnRfdXBkYXRlX3N1cHBvcnRlZChwb3J0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBvcnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95X3BvcnQ7XG4mIzQzO1xuJiM0MztcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBwb3J0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF9kZXN0cm95X3BvcnQ6XG4mIzQzO1x0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRwbC1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAocGwtXHUwMDNlbmV0ZGV2IFx1MDAyNlx1MDAyNiBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KVxuJiM0MztcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpO1xuJiM0MztcbiYjNDM7XHRpZiAocGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydClcbiYjNDM7XHRcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4mIzQzO1xuJiM0MztcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbiB7XG5AQCAtMTc4MSw5ICYjNDM7MTgzMCwxOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcbiBcdHBsLVx1MDAzZXNmcF9idXMgPSBidXM7XG4gXG4mIzQzO1x0cmV0ID0gcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydChwbCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0c2ZwX2J1c19wdXQoYnVzKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGwsIFx1MDAyNnNmcF9waHlsaW5rX29wcyk7XG4gXHRzZnBfYnVzX3B1dChidXMpO1xuIFxuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChwbCk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTk0NSw2ICYjNDM7MjAwMyw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY3JlYXRlKTtcbiB2b2lkIHBoeWxpbmtfZGVzdHJveShzdHJ1Y3QgcGh5bGluayAqcGwpXG4ge1xuIFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGwtXHUwMDNlc2ZwX2J1cyk7XG4mIzQzO1x0cGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpO1xuIFx0aWYgKHBsLVx1MDAzZWxpbmtfZ3BpbylcbiBcdFx0Z3Bpb2RfcHV0KHBsLVx1MDAzZWxpbmtfZ3Bpbyk7XG4gXG5AQCAtMzg3MCwxNCAmIzQzOzM5MjksNjcgQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3JlbW92ZSh2b2lkICp1cHN0cmVhbSlcbiBcdHBoeV9pbnRlcmZhY2VfemVybyhwbC1cdTAwM2VzZnBfaW50ZXJmYWNlcyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIENyZWF0ZSBtb2QgcG9ydCAqL1xuJiM0MztcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuJiM0MztcdGlmICghcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwb3J0LVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBsLVx1MDAzZXNmcF9idXMpO1xuJiM0MztcbiYjNDM7XHRwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHBvcnQtXHUwMDNlc3VwcG9ydGVkLCBjYXBzLVx1MDAzZWxpbmtfbW9kZXMsXG4mIzQzO1x0XHRcdFx0XHRwbC1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuJiM0MztcbiYjNDM7XHRpZiAocGwtXHUwMDNlbmV0ZGV2KSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcG9ydCk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWlkO1xuJiM0MztcbiYjNDM7XHRwbC1cdTAwM2Vtb2RfcG9ydCA9IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwaHlsaW5rX2RlbF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwbC1cdTAwM2Vtb2RfcG9ydClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBsLVx1MDAzZW5ldGRldilcbiYjNDM7XHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtXHUwMDNlbmV0ZGV2LCBwbC1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1xuJiM0MztcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXHUwMDNlbW9kX3BvcnQpO1xuJiM0MztcdHBsLVx1MDAzZW1vZF9wb3J0ID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcbiB7XG4gXHRzdHJ1Y3QgcGh5bGluayAqcGwgPSB1cHN0cmVhbTtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0LyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RhcnQgdGhlIFBIWSBub3cuICovXG4gXHRpZiAocGwtXHUwMDNlcGh5ZGV2KSB7XG4gXHRcdHBoeV9zdGFydChwbC1cdTAwM2VwaHlkZXYpO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0ID0gcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHBsKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHQvKiBJZiB0aGUgbW9kdWxlIG1heSBoYXZlIGEgUEhZIGJ1dCB3ZSBkaWRuJiMzOTt0IGRldGVjdCBvbmUgd2VcbkBAIC0zODg2LDcgJiM0MzszOTk4LDE2IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuIFx0aWYgKCFwbC1cdTAwM2VzZnBfbWF5X2hhdmVfcGh5KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XG4mIzQzO1x0cmV0ID0gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGRlbF9tb2RfcG9ydDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztkZWxfbW9kX3BvcnQ6XG4mIzQzO1x0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXG5AQCAtMzg5Niw2ICYjNDM7NDAxNyw4IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxuIFx0LyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi9cbiBcdGlmIChwbC1cdTAwM2VwaHlkZXYpXG4gXHRcdHBoeV9zdG9wKHBsLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbGlua19kb3duKHZvaWQgKnVwc3RyZWFtKVxuQEAgLTM5NDAsNiAmIzQzOzQwNjMsOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxuIFx0cGh5X2ludGVyZmFjZV9hbmQocGh5LVx1MDAzZWhvc3RfaW50ZXJmYWNlcywgcGh5bGlua19zZnBfaW50ZXJmYWNlcyxcbiBcdFx0XHQgIHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXG4mIzQzO1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4mIzQzO1xuIFx0LyogRG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiAqL1xuIFx0cmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19waHkocGwsIHBoeSk7XG4gfVxuQEAgLTM5NDgsNiAmIzQzOzQwNzMsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkodXBzdHJlYW0pO1xuJiM0MztcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHlkZXYsIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzID0ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCBiZWZmMWQ2ZmNjN2NkYS4uODI5NmY0ZjU5Y2UzYjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtNTgyLDYgJiM0Mzs1ODIsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHdvbF9lbmFibGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGUgUEhZIG9yIHRoZSBhdHRhY2hlZCBNQUMgaGF2ZSBXYWtlLW9uLUxBTlxuICAqIFx0XHQgZW5hYmxlZC5cbiAgKiBAaXNfZ2VucGh5X2RyaXZlbjogUEhZIGlzIGRyaXZlbiBieSBvbmUgb2YgdGhlIGdlbmVyaWMgUEhZIGRyaXZlcnNcbiYjNDM7ICogQGhhc19zZnBfbW9kX3BoeTogU2V0IHRydWUgaWYgZG93bnN0cmVhbSBTRlAgYnVzJiMzOTtzIG1vZHVsZSBjb250YWlucyBhIFBIWVxuICAqIEBzdGF0ZTogU3RhdGUgb2YgdGhlIFBIWSBmb3IgbWFuYWdlbWVudCBwdXJwb3Nlc1xuICAqIEBkZXZfZmxhZ3M6IERldmljZS1zcGVjaWZpYyBmbGFncyB1c2VkIGJ5IHRoZSBQSFkgZHJpdmVyLlxuICAqXG5AQCAtNTk0LDYgJiM0Mzs1OTUsOSBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHBoeWxpbms6IFBvaW50ZXIgdG8gcGh5bGluayBpbnN0YW5jZSBmb3IgdGhpcyBQSFlcbiAgKiBAc2ZwX2J1c19hdHRhY2hlZDogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFNGUCBidXMgaGFzIGJlZW4gYXR0YWNoZWRcbiAgKiBAc2ZwX2J1czogU0ZQIGJ1cyBhdHRhY2hlZCB0byB0aGlzIFBIWSYjMzk7cyBmaWJlciBwb3J0XG4mIzQzOyAqIEBzZnBfY2FnZV9wb3J0OiBUaGUgcGh5X3BvcnQgY29ubmVjdGVkIHRvIHRoZSBkb3duc3RyZWFtIFNGUCBjYWdlXG4mIzQzOyAqIEBtb2RfcG9ydDogcGh5X3BvcnQgcmVwcmVzZW50aW5nIHRoZSBTRlAgbW9kdWxlLCBpZiBpdCBpcyBwaHktbGVzc1xuJiM0MzsgKiBAdXBzdHJlYW1fcG9ydDogcGh5X3BvcnQgdGhpcyBQSFkmIzM5O3MgTUlJIGF0dGFjaGVzIHRvLCBpZiBhbnlcbiAgKiBAYXR0YWNoZWRfZGV2OiBUaGUgYXR0YWNoZWQgZW5ldCBkcml2ZXImIzM5O3MgZGV2aWNlIGluc3RhbmNlIHB0clxuICAqIEBhZGp1c3RfbGluazogQ2FsbGJhY2sgZm9yIHRoZSBlbmV0IGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBjaGFuZ2VzOiBpbiB0aGVcbiAgKiAgICAgICAgICAgICAgIGxpbmsgc3RhdGUuXG5AQCAtNzA2LDYgJiM0Mzs3MTAsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XG4gXHR1bnNpZ25lZCBpcnFfcmVydW46MTtcbiBcbiBcdHVuc2lnbmVkIGRlZmF1bHRfdGltZXN0YW1wOjE7XG4mIzQzO1x0dW5zaWduZWQgaGFzX3NmcF9tb2RfcGh5OjE7XG4gXG4gXHRpbnQgcmF0ZV9tYXRjaGluZztcbiBcbkBAIC03ODUsNiAmIzQzOzc5MCw5IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcbiBcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cbiBcdGJvb2wgc2ZwX2J1c19hdHRhY2hlZDtcbiBcdHN0cnVjdCBzZnBfYnVzICpzZnBfYnVzO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqc2ZwX2NhZ2VfcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcbiBcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmF0dGFjaGVkX2RldjtcbiBcdHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cztcbkBAIC0yNDY1LDYgJiM0MzsyNDczLDggQEAgaW50IF9fcGh5X2h3dHN0YW1wX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFxuIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBcbiYjNDM7dm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcbiYjNDM7XG4gLyoqXG4gICogcGh5X21vZHVsZV9kcml2ZXIoKSAtIEhlbHBlciBtYWNybyBmb3IgcmVnaXN0ZXJpbmcgUEhZIGRyaXZlcnNcbiAgKiBAX19waHlfZHJpdmVyczogYXJyYXkgb2YgUEhZIGRyaXZlcnMgdG8gcmVnaXN0ZXJcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcbmluZGV4IDk1NTc1ZjY4ZDViYzcxLi45NTYyOTExMjIwNGVhOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXG5AQCAtMTMsMTQgJiM0MzsxMywxOSBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gXG4gc3RydWN0IHhhcnJheTtcbiBzdHJ1Y3QgcGh5X2RldmljZTtcbiYjNDM7c3RydWN0IHBoeV9wb3J0O1xuIHN0cnVjdCBzZnBfYnVzO1xuIFxuIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSB7XG4gXHRzdHJ1Y3QgeGFycmF5IHBoeXM7XG4gXHR1MzIgbmV4dF9waHlfaW5kZXg7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCB4YXJyYXkgcG9ydHM7XG4mIzQzO1x0dTMyIG5leHRfcG9ydF9pbmRleDtcbiB9O1xuIFxuIHN0cnVjdCBwaHlfZGV2aWNlX25vZGUge1xuQEAgLTQ4LDYgJiM0Mzs1Myw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcbiBcbiYjNDM7aW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcbiYjNDM7dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKlxuIHBoeV9saW5rX3RvcG9fZ2V0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcGh5aW5kZXgpXG4ge1xuQEAgLTY0LDYgJiM0Mzs3MiwyMCBAQCBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXG4mIzQzO3BoeV9saW5rX3RvcG9fZ2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBvcnRfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRvcG8pXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0LyogQ2FsbGVyIG11c3QgaG9sZCBSVE5MIHdoaWxlIGhhbmRsaW5nIHRoZSBwaHlfcG9ydCAqL1xuJiM0MztcdHJldHVybiB4YV9sb2FkKFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIHBvcnRfaWQpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG5AQCAtNzcsMTEgJiM0Mzs5OSwyOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcbiBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9wb3J0ICpcbiYjNDM7cGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9fUEhZX0xJTktfVE9QT0xPR1lfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaCBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuaW5kZXggMGVmMGY1Y2U0NzA5MjYuLmUzYTQxY2VkZWJkY2ZhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbkBAIC0zNiw5ICYjNDM7MzYsMTIgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7XG4gLyoqXG4gICogc3RydWN0IHBoeV9wb3J0IC0gQSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldHdvcmsgZGV2aWNlIHBoeXNpY2FsIGludGVyZmFjZVxuICAqXG4mIzQzOyAqIEBpZDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwb3J0IHdpdGhpbiB0aGUgdG9wb2xvZ3lcbiAgKiBAaGVhZDogVXNlZCBieSB0aGUgcG9ydCYjMzk7cyBwYXJlbnQgdG8gbGlzdCBwb3J0c1xuICAqIEBwYXJlbnRfdHlwZTogVGhlIHR5cGUgb2YgZGV2aWNlIHRoaXMgcG9ydCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG9cbiAgKiBAcGh5OiBJZiB0aGUgcGFyZW50IGlzIFBIWV9QT1JUX1BIWURFViwgdGhlIFBIWSBjb250cm9sbGluZyB0aGF0IHBvcnRcbiYjNDM7ICogQHVwc3RyZWFtX3BvcnQ6IEZvciBub24tTUlJIHBvcnRzLCBpbmRpY2F0ZXMgdGhlIE1JSSBwb3J0IHRoYXQgZmVlZHMgdGhpc1xuJiM0MzsgKlx0XHQgICBwb3J0LCBlLmcuIHRoZSBTRlAgY2FnZSBwb3J0IGZvciBhIFNGUCBtb2R1bGUgcG9ydC5cbiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlclxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxuICAqIEBtZWRpdW1zOiBCaXRtYXNrIG9mIHRoZSBwaHlzaWNhbCBtZWRpdW1zIHRoaXMgcG9ydCBwcm92aWRlcyBhY2Nlc3MgdG9cbkBAIC01MiwxMSAmIzQzOzU1LDEzIEBAIHN0cnVjdCBwaHlfcG9ydF9vcHMge1xuICAqIEBpc19zZnA6IEluZGljYXRlcyBpZiB0aGlzIHBvcnQgZHJpdmVzIGFuIFNGUCBjYWdlLlxuICAqL1xuIHN0cnVjdCBwaHlfcG9ydCB7XG4mIzQzO1x0dTMyIGlkO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBoZWFkO1xuIFx0ZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XG4gXHR9O1xuJiM0MztcdHUzMiB1cHN0cmVhbV9wb3J0O1xuIFxuIFx0Y29uc3Qgc3RydWN0IHBoeV9wb3J0X29wcyAqb3BzO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5pbmRleCA4MTM0YmFmNzg2MGYzYy4uZjlkODc5NGVhYmMxOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5AQCAtNzgsNiAmIzQzOzc4LDExIEBAIGVudW0gZXRodG9vbF9wc2VfZXZlbnQge1xuIFx0RVRIVE9PTF9QU0VfRVZFTlRfU1dfUFdfQ09OVFJPTF9FUlJPUiA9IDY0LFxuIH07XG4gXG4mIzQzO2VudW0gZXRodG9vbF9wb3J0X3R5cGUge1xuJiM0MztcdEVUSFRPT0xfUE9SVF9UWVBFX01ESSxcbiYjNDM7XHRFVEhUT09MX1BPUlRfVFlQRV9TRlAsXG4mIzQzO307XG4mIzQzO1xuIGVudW0ge1xuIFx0RVRIVE9PTF9BX0hFQURFUl9VTlNQRUMsXG4gXHRFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWCxcbkBAIC04NDAsNiAmIzQzOzg0NSwxOCBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfQV9NU0VfTUFYID0gKF9fRVRIVE9PTF9BX01TRV9DTlQgLSAxKVxuIH07XG4gXG4mIzQzO2VudW0ge1xuJiM0MztcdEVUSFRPT0xfQV9QT1JUX0hFQURFUiA9IDEsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfSUQsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxuJiM0MztcdEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTLFxuJiM0MztcdEVUSFRPT0xfQV9QT1JUX1RZUEUsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCxcbiYjNDM7XG4mIzQzO1x0X19FVEhUT09MX0FfUE9SVF9DTlQsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfTUFYID0gKF9fRVRIVE9PTF9BX1BPUlRfQ05UIC0gMSlcbiYjNDM7fTtcbiYjNDM7XG4gZW51bSB7XG4gXHRFVEhUT09MX01TR19VU0VSX05PTkUgPSAwLFxuIFx0RVRIVE9PTF9NU0dfU1RSU0VUX0dFVCA9IDEsXG5AQCAtODkzLDYgJiM0Mzs5MTAsNyBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfQUNULFxuIFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9BQ1QsXG4gXHRFVEhUT09MX01TR19NU0VfR0VULFxuJiM0MztcdEVUSFRPT0xfTVNHX1BPUlRfR0VULFxuIFxuIFx0X19FVEhUT09MX01TR19VU0VSX0NOVCxcbiBcdEVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKVxuQEAgLTk1NCw2ICYjNDM7OTcyLDcgQEAgZW51bSB7XG4gXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX05URixcbiBcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfTlRGLFxuIFx0RVRIVE9PTF9NU0dfTVNFX0dFVF9SRVBMWSxcbiYjNDM7XHRFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSxcbiBcbiBcdF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCxcbiBcdEVUSFRPT0xfTVNHX0tFUk5FTF9NQVggPSAoX19FVEhUT09MX01TR19LRVJORUxfQ05UIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBjMWMxYmUxYTY5NjJmZS4uYjM2Y2M1YzQ3ODE2YTQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xMTMxNSw2ICYjNDM7MTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXHUwMDI2XHUwMDI2IHRvcG8pIHtcbiBcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMpO1xuJiM0MztcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzKTtcbiBcdFx0a2ZyZWUodG9wbyk7XG4gXHRcdGRldi1cdTAwM2VsaW5rX3RvcG8gPSBOVUxMO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL01ha2VmaWxlIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbmluZGV4IDYyOWMxMDkxNjY3MGVjLi45YjViMDk2NzAwMDgxMSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuQEAgLTksNCAmIzQzOzksNCBAQCBldGh0b29sX25sLXlcdDo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFxcXG4gXHRcdCAgIGNoYW5uZWxzLm8gY29hbGVzY2UubyBwYXVzZS5vIGVlZS5vIHRzaW5mby5vIGNhYmxldGVzdC5vIFxcXG4gXHRcdCAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcXFxuIFx0XHQgICBtb2R1bGUubyBjbWlzX2Z3X3VwZGF0ZS5vIGNtaXNfY2RiLm8gcHNlLXBkLm8gcGxjYS5vIFxcXG4tXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm9cbiYjNDM7XHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gcG9ydC5vXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5pbmRleCAxYWYzOTViNTQzMzBlMi4uYzA3NmMwN2QwYTA4MGMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xuQEAgLTI2LDYgJiM0MzsyNiw4IEBAIHN0YXRpYyB1MzIgZXRobmxfYmNhc3Rfc2VxO1xuIFx0XHRcdCAgICAgRVRIVE9PTF9GTEFHX09NSVRfUkVQTFkpXG4gI2RlZmluZSBFVEhUT09MX0ZMQUdTX1NUQVRTIChFVEhUT09MX0ZMQUdTX0JBU0lDIHwgRVRIVE9PTF9GTEFHX1NUQVRTKVxuIFxuJiM0MztjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXSBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO1xuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lbXSA9IHtcbiBcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9OQU1FXVx0PSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsXG5AQCAtNDMxLDYgJiM0Mzs0MzMsNyBAQCBldGhubF9kZWZhdWx0X3JlcXVlc3RzW19fRVRIVE9PTF9NU0dfVVNFUl9DTlRdID0ge1xuIFx0W0VUSFRPT0xfTVNHX1RTQ09ORklHX1NFVF1cdD0gXHUwMDI2ZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHMsXG4gXHRbRVRIVE9PTF9NU0dfUEhZX0dFVF1cdFx0PSBcdTAwMjZldGhubF9waHlfcmVxdWVzdF9vcHMsXG4gXHRbRVRIVE9PTF9NU0dfTVNFX0dFVF1cdFx0PSBcdTAwMjZldGhubF9tc2VfcmVxdWVzdF9vcHMsXG4mIzQzO1x0W0VUSFRPT0xfTVNHX1BPUlRfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX3BvcnRfcmVxdWVzdF9vcHMsXG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuQEAgLTE1NzIsNiAmIzQzOzE1NzUsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7XG4gXHRcdC5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSxcbiBcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5jbWRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4mIzQzO1x0XHQuZG9pdFx0PSBldGhubF9kZWZhdWx0X2RvaXQsXG4mIzQzO1x0XHQuc3RhcnRcdD0gZXRobmxfcG9ydF9kdW1wX3N0YXJ0LFxuJiM0MztcdFx0LmR1bXBpdFx0PSBldGhubF9wb3J0X2R1bXBpdCxcbiYjNDM7XHRcdC5kb25lXHQ9IGV0aG5sX3BvcnRfZHVtcF9kb25lLFxuJiM0MztcdFx0LnBvbGljeSA9IGV0aG5sX3BvcnRfZ2V0X3BvbGljeSxcbiYjNDM7XHRcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9wb3J0X2dldF9wb2xpY3kpIC0gMSxcbiYjNDM7XHR9LFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0ge1xuQEAgLTE1OTQsMTAgJiM0MzsxNjA2LDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZXRodG9vbF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXG4gLyogbW9kdWxlIHNldHVwICovXG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBldGhubF9waHlfbmFtZXNfcG9wdWxhdGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRuYW1lID0gcGh5X21vZGVzKGkpO1xuJiM0MztcdFx0c3Ryc2NweShwaHlfaW50ZXJmYWNlX25hbWVzW2ldLCBuYW1lLCBFVEhfR1NUUklOR19MRU4pO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IF9faW5pdCBldGhubF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRldGhubF9waHlfbmFtZXNfcG9wdWxhdGUoKTtcbiYjNDM7XG4gXHRyZXQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseShcdTAwMjZldGh0b29sX2dlbmxfZmFtaWx5KTtcbiBcdGlmIChXQVJOKHJldCBcdTAwM2MgMCwgXCYjMzQ7ZXRodG9vbDogZ2VuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24gZmFpbGVkXCYjMzQ7KSlcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbmluZGV4IDNlOTY5YTA3MGY5ZmU0Li5iMjUwZThiNWM0ZDQ3NSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5AQCAtNSwxMSAmIzQzOzUsMTUgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuIFxuIHN0cnVjdCBldGhubF9yZXFfaW5mbztcbiBcbiYjNDM7ZXh0ZXJuIGNoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dO1xuJiM0MztcbiYjNDM7dTMyIGV0aG5sX2JjYXN0X3NlcV9uZXh0KHZvaWQpO1xuIGludCBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpuZXN0LCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbkBAIC00NzQsNiAmIzQzOzQ3OCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbW1fcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21zZV9yZXF1ZXN0X29wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9wb3J0X3JlcXVlc3Rfb3BzO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyAmIzQzOyAxXTtcbkBAIC01MzAsNiAmIzQzOzUzNSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX0hFQURFUiAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX21zZV9nZXRfcG9saWN5W0VUSFRPT0xfQV9NU0VfSEVBREVSICYjNDM7IDFdO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcG9ydF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QT1JUX0lEICYjNDM7IDFdO1xuIFxuIGludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuQEAgLTU0NSw2ICYjNDM7NTUxLDkgQEAgaW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBpbnQgZXRobmxfdHNpbmZvX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBpbnQgZXRobmxfcnNzX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4mIzQzO2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuIFxuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX3N0ZF9uYW1lc1tfX0VUSFRPT0xfU1RBVFNfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX2V0aF9waHlfbmFtZXNbX19FVEhUT09MX0FfU1RBVFNfRVRIX1BIWV9DTlRdW0VUSF9HU1RSSU5HX0xFTl07XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcG9ydC5jIGIvbmV0L2V0aHRvb2wvcG9ydC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFiMmNjMDVkZjlmOTBhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9wb3J0LmNcbkBAIC0wLDAgJiM0MzsxLDM3NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAyMDI2IEJvb3RsaW5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X3BvcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Yml0c2V0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y29tbW9uLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0bGluay5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcG9ydF9yZXFfaW5mbyB7XG4mIzQzO1x0c3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7XG4mIzQzO1x0dTMyIHBvcnRfaWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhIHtcbiYjNDM7XHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YVx0YmFzZTtcbiYjNDM7XHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpO1xuJiM0MztcdERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLKGludGVyZmFjZXMpO1xuJiM0MztcdHUzMiBwb3J0X2lkO1xuJiM0MztcdGJvb2wgbWlpO1xuJiM0MztcdGJvb2wgc2ZwO1xuJiM0MztcdHUzMiB1cHN0cmVhbV9wb3J0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBQT1JUX1JFUUlORk8oX19yZXFfYmFzZSkgXFxcbiYjNDM7XHRjb250YWluZXJfb2YoX19yZXFfYmFzZSwgc3RydWN0IHBvcnRfcmVxX2luZm8sIGJhc2UpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBPUlRfUkVQREFUQShfX3JlcGx5X2Jhc2UpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBvcnRfcmVwbHlfZGF0YSwgYmFzZSlcbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BvcnRfZ2V0X3BvbGljeVtFVEhUT09MX0FfUE9SVF9JRCAmIzQzOyAxXSA9IHtcbiYjNDM7XHRbRVRIVE9PTF9BX1BPUlRfSEVBREVSXSA9IE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxuJiM0MztcdFtFVEhUT09MX0FfUE9SVF9JRF0gPSBOTEFfUE9MSUNZX01JTihOTEFfVTMyLCAxKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcG9ydF9wYXJzZV9yZXF1ZXN0KHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0YixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pO1xuJiM0MztcbiYjNDM7XHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBFVEhUT09MX0FfUE9SVF9JRCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2Vwb3J0X2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BPUlRfSURdKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcG9ydF9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSxcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiYjNDM7XG4mIzQzO1x0LyogUlROTCBtdXN0IGJlIGhlbGQgd2hpbGUgaG9sZGluZyBhIHJlZiB0byB0aGUgcGh5X3BvcnQuIEhlcmUsIGNhbGxlclxuJiM0MztcdCAqIGhvbGRzIFJUTkwuXG4mIzQzO1x0ICovXG4mIzQzO1x0cG9ydCA9IHBoeV9saW5rX3RvcG9fZ2V0X3BvcnQocmVxX2luZm8tXHUwMDNlZGV2LCByZXF1ZXN0LVx1MDAzZXBvcnRfaWQpO1xuJiM0MztcdGlmICghcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRsaW5rbW9kZV9jb3B5KHJlcGx5LVx1MDAzZXN1cHBvcnRlZCwgcG9ydC1cdTAwM2VzdXBwb3J0ZWQpO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfY29weShyZXBseS1cdTAwM2VpbnRlcmZhY2VzLCBwb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuJiM0MztcdHJlcGx5LVx1MDAzZXBvcnRfaWQgPSBwb3J0LVx1MDAzZWlkO1xuJiM0MztcdHJlcGx5LVx1MDAzZW1paSA9IHBvcnQtXHUwMDNlaXNfbWlpO1xuJiM0MztcdHJlcGx5LVx1MDAzZXNmcCA9IHBvcnQtXHUwMDNlaXNfc2ZwO1xuJiM0MztcdHJlcGx5LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBvcnRfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSlcbiYjNDM7e1xuJiM0MztcdGJvb2wgY29tcGFjdCA9IHJlcV9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBFVEhUT09MX0ZMQUdfQ09NUEFDVF9CSVRTRVRTO1xuJiM0MztcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpO1xuJiM0MztcdHNpemVfdCBzaXplID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBFVEhUT09MX0FfUE9SVF9JRCAqL1xuJiM0MztcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXBseS1cdTAwM2VtaWkpIHtcbiYjNDM7XHRcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyAqL1xuJiM0MztcdFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXHUwMDNlc3VwcG9ydGVkLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0X19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLFxuJiM0MztcdFx0XHRcdFx0bGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyAqL1xuJiM0MztcdFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsXG4mIzQzO1x0XHRcdFx0XHRwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqL1xuJiM0MztcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbiYjNDM7XG4mIzQzO1x0LyogRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCAqL1xuJiM0MztcdGlmIChyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KVxuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNvbXBhY3QgPSByZXFfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRVRIVE9PTF9GTEFHX0NPTVBBQ1RfQklUU0VUUztcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcbiYjNDM7XHRpbnQgcmV0LCBwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9NREk7XG4mIzQzO1xuJiM0MztcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS1cdTAwM2Vwb3J0X2lkKSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdGlmICghcmVwbHktXHUwMDNlbWlpKSB7XG4mIzQzO1x0XHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxuJiM0MztcdFx0XHRcdCAgICAgICByZXBseS1cdTAwM2VzdXBwb3J0ZWQsIE5VTEwsXG4mIzQzO1x0XHRcdFx0ICAgICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IGV0aG5sX3B1dF9iaXRzZXQoc2tiLCBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyxcbiYjNDM7XHRcdFx0XHQgICAgICAgcmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbiYjNDM7XHRcdFx0XHQgICAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX01BWCxcbiYjNDM7XHRcdFx0XHQgICAgICAgcGh5X2ludGVyZmFjZV9uYW1lcywgY29tcGFjdCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJlcGx5LVx1MDAzZW1paSB8fCByZXBseS1cdTAwM2VzZnApXG4mIzQzO1x0XHRwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9TRlA7XG4mIzQzO1xuJiM0MztcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1RZUEUsIHBvcnRfdHlwZSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JULFxuJiM0MztcdFx0XHRyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcG9ydF9kdW1wX2N0eCB7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVxX2luZm9cdCpyZXFfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhXHQqcmVwbHlfZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGlmaW5kZXg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRwb3NfaWZpbmRleDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdHBvc19wb3J0aWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBvcnRfZHVtcF9jdHggKlxuJiM0Mztwb3J0X2R1bXBfY3R4X2dldChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBwb3J0X2R1bXBfY3R4ICopY2ItXHUwMDNlY3R4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XG4mIzQzO1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbiYjNDM7XHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWluZm8uYXR0cnM7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxX2luZm87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKHNpemVvZigqY3R4KSBcdTAwM2Ugc2l6ZW9mKGNiLVx1MDAzZWN0eCkpO1xuJiM0MztcbiYjNDM7XHRyZXFfaW5mbyA9IGt6YWxsb2Nfb2JqKCpyZXFfaW5mbyk7XG4mIzQzO1x0aWYgKCFyZXFfaW5mbylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xuJiM0MztcdGlmICghcmVwbHlfZGF0YSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9yZXFfaW5mbztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KFx1MDAyNnJlcV9pbmZvLVx1MDAzZWJhc2UsIHRiW0VUSFRPT0xfQV9QT1JUX0hFQURFUl0sXG4mIzQzO1x0XHRcdFx0XHQgZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuJiM0MztcdFx0XHRcdFx0IGluZm8tXHUwMDNlaW5mby5leHRhY2ssIGZhbHNlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBmcmVlX3JlcF9kYXRhO1xuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlaWZpbmRleCA9IDA7XG4mIzQzO1x0Y3R4LVx1MDAzZXBvc19pZmluZGV4ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogRm9yIGZpbHRlcmVkIERVTVAgcmVxdWVzdHMsIGxldCYjMzk7cyBqdXN0IHN0b3JlIHRoZSBpZmluZGV4LiBXZSYjMzk7bGwgY2hlY2tcbiYjNDM7XHQgKiBhZ2FpbiBpZiB0aGUgbmV0ZGV2IGlzIHN0aWxsIHRoZXJlIHdoZW4gbG9vcGluZyBvdmVyIHRoZSBuZXRkZXYgbGlzdFxuJiM0MztcdCAqIGluIHRoZSBEVU1QIGxvb3AuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2KSB7XG4mIzQzO1x0XHRjdHgtXHUwMDNlaWZpbmRleCA9IHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHRuZXRkZXZfcHV0KHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LCBcdTAwMjZyZXFfaW5mby1cdTAwM2ViYXNlLmRldl90cmFja2VyKTtcbiYjNDM7XHRcdHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VyZXFfaW5mbyA9IHJlcV9pbmZvO1xuJiM0MztcdGN0eC1cdTAwM2VyZXBseV9kYXRhID0gcmVwbHlfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmcmVlX3JlcF9kYXRhOlxuJiM0MztcdGtmcmVlKHJlcGx5X2RhdGEpO1xuJiM0MztmcmVlX3JlcV9pbmZvOlxuJiM0MztcdGtmcmVlKHJlcV9pbmZvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuJiM0MztcdHZvaWQgKmVoZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTtcbiYjNDM7XHRpZiAoIWVoZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoY3R4LVx1MDAzZXJlcGx5X2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhKSk7XG4mIzQzO1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBkZXY7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwb3J0X3ByZXBhcmVfZGF0YShcdTAwMjZjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZSwgXHUwMDI2Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZSxcbiYjNDM7XHRcdFx0XHRnZW5sX2luZm9fZHVtcChjYikpO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc2tiLCBkZXYsIEVUSFRPT0xfQV9QT1JUX0hFQURFUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwb3J0X2ZpbGxfcmVwbHkoc2tiLCBcdTAwMjZjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZSwgXHUwMDI2Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZSk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGdlbmxtc2dfZW5kKHNrYiwgZWhkcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcG9ydF9kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXYgPSBjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZS5kZXY7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZWxpbmtfdG9wbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR4YV9mb3JfZWFjaF9zdGFydChcdTAwMjZkZXYtXHUwMDNlbGlua190b3BvLVx1MDAzZXBvcnRzLCBjdHgtXHUwMDNlcG9zX3BvcnRpZCwgcG9ydCxcbiYjNDM7XHRcdFx0ICBjdHgtXHUwMDNlcG9zX3BvcnRpZCkge1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZXBvcnRfaWQgPSBjdHgtXHUwMDNlcG9zX3BvcnRpZDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwb3J0X2R1bXBfb25lKHNrYiwgZGV2LCBjYik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZXBvc19wb3J0aWQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4mIzQzO1x0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlcG9zX2lmaW5kZXgpIHtcbiYjNDM7XHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gZGV2O1xuJiM0MztcdFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xuJiM0MztcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChjdHgtXHUwMDNlaWZpbmRleCkge1xuJiM0MztcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcbiYjNDM7XHRcdGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuJiM0MztcdFx0XHRcdFx0ICBjdHgtXHUwMDNlaWZpbmRleCwgXHUwMDI2ZGV2X3RyYWNrZXIsXG4mIzQzO1x0XHRcdFx0XHQgIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFkZXYpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IGRldjtcbiYjNDM7XHRcdHJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpO1xuJiM0MztcbiYjNDM7XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IHBvcnRfZHVtcF9hbGxfZGV2KHNrYiwgY2IpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4mIzQzO1xuJiM0MztcdGtmcmVlKGN0eC1cdTAwM2VyZXFfaW5mbyk7XG4mIzQzO1x0a2ZyZWUoY3R4LVx1MDAzZXJlcGx5X2RhdGEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHMgPSB7XG4mIzQzO1x0LnJlcXVlc3RfY21kXHRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4mIzQzO1x0LnJlcGx5X2NtZFx0XHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLFxuJiM0MztcdC5oZHJfYXR0clx0XHQ9IEVUSFRPT0xfQV9QT1JUX0hFQURFUixcbiYjNDM7XHQucmVxX2luZm9fc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXFfaW5mbyksXG4mIzQzO1x0LnJlcGx5X2RhdGFfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHBvcnRfcmVwbHlfZGF0YSksXG4mIzQzO1xuJiM0MztcdC5wYXJzZV9yZXF1ZXN0XHRcdD0gcG9ydF9wYXJzZV9yZXF1ZXN0LFxuJiM0MztcdC5wcmVwYXJlX2RhdGFcdFx0PSBwb3J0X3ByZXBhcmVfZGF0YSxcbiYjNDM7XHQucmVwbHlfc2l6ZVx0XHQ9IHBvcnRfcmVwbHlfc2l6ZSxcbiYjNDM7XHQuZmlsbF9yZXBseVx0XHQ9IHBvcnRfZmlsbF9yZXBseSxcbiYjNDM7fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtQSFlMSU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O3BvcnRfcGFyc2VfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDtwb3J0X3ByZXBhcmVfZGF0YSYjMzQ7LAogICAgJiMzNDtwb3J0X3JlcGx5X3NpemUmIzM0OywKICAgICYjMzQ7cG9ydF9maWxsX3JlcGx5JiMzNDssCiAgICAmIzM0O3BvcnRfZHVtcF9vbmVfZGV2JiMzNDssCiAgICAmIzM0O3BvcnRfZHVtcF9hbGxfZGV2JiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb19kZWxfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0JiMzNDssCiAgICAmIzM0O3BoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfYWRkX3NmcF9tb2RfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfc2V0dXBfc2ZwX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyYjMzQ7LAogICAgJiMzNDtwaHlfc2V0X3Vwc3RyZWFtX3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQgKEVUSFRPT0xfTVNHX1BPUlRfR0VUKSB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBQSFkgYW5kIHBoeWxpbmsgc3Vic3lzdGVtcyB0byB0cmFjayBhbmQgZXhwb3NlIHRoZXNlIHBvcnRzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0NWE4YmFjMDNjZDgxNjQ3YjdiZWMxZThiOTljMTgxZDJhNDk2YTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyMSAwMDo1MjoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCmluZGV4IDVkZDRkMWI1ZDk0YmJiLi5kMTE1MWFmMzM1Y2ExMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCkBAIC0yMTAsNiAmIzQzOzIxMCwxMCBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogZGlzY2FyZAogICAgICAgICB2YWx1ZTogMzEKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogcG9ydC10eXBlCiYjNDM7ICAgIHR5cGU6IGVudW0KJiM0MzsgICAgZW50cmllczogW21kaSwgc2ZwXQogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTkwNSw2ICYjNDM7MTkwOSwzMiBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgbmFtZTogbGluawogICAgICAgICB0eXBlOiBuZXN0CiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBtc2Utc25hcHNob3QKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogcG9ydAomIzQzOyAgICBhdHRyLWNudC1uYW1lOiAtLWV0aHRvb2wtYS1wb3J0LWNudAomIzQzOyAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGhlYWRlcgomIzQzOyAgICAgICAgdHlwZTogbmVzdAomIzQzOyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlcgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGlkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtbW9kZXMKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXQKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtaW50ZXJmYWNlcwomIzQzOyAgICAgICAgdHlwZTogbmVzdAomIzQzOyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGJpdHNldAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHR5cGUKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogcG9ydC10eXBlCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogdXBzdHJlYW0tcG9ydAomIzQzOyAgICAgICAgdHlwZTogdTMyCiAKIG9wZXJhdGlvbnM6CiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsCkBAIC0yODU5LDYgJiM0MzsyODg5LDI2IEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIHdvcnN0LWNoYW5uZWwKICAgICAgICAgICAgIC0gbGluawogICAgICAgZHVtcDogKm1zZS1nZXQtb3AKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHBvcnQtZ2V0CiYjNDM7ICAgICAgZG9jOiBHZXQgcG9ydHMgYXR0YWNoZWQgdG8gYW4gaW50ZXJmYWNlCiYjNDM7CiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogcG9ydAomIzQzOwomIzQzOyAgICAgIGRvOiAmYW1wO3BvcnQtZ2V0LW9wCiYjNDM7ICAgICAgICByZXF1ZXN0OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICAgICAgLSBpZAomIzQzOyAgICAgICAgcmVwbHk6CiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXIKJiM0MzsgICAgICAgICAgICAtIGlkCiYjNDM7ICAgICAgICAgICAgLSBzdXBwb3J0ZWQtbW9kZXMKJiM0MzsgICAgICAgICAgICAtIHN1cHBvcnRlZC1pbnRlcmZhY2VzCiYjNDM7ICAgICAgICAgICAgLSB0eXBlCiYjNDM7ICAgICAgICAgICAgLSB1cHN0cmVhbS1wb3J0CiYjNDM7ICAgICAgZHVtcDogKnBvcnQtZ2V0LW9wCiAKIG1jYXN0LWdyb3VwczoKICAgbGlzdDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QKaW5kZXggZTkyYWJmNDVmYWY1MGQuLmI0MzI2Yzg5YjA3NTFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdApAQCAtMjUzNyw2ICYjNDM7MjUzNywzOSBAQCBXaXRoaW4gZWFjaCBjaGFubmVsIG5lc3QsIG9ubHkgdGhlIG1ldHJpY3Mgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgd2lsbCBiZSBwcmVzZW50LgogU2VlIGBgc3RydWN0IHBoeV9tc2Vfc25hcHNob3RgYCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBpbgogYGBpbmNsdWRlL2xpbnV4L3BoeS5oYGAuCiAKJiM0MztQT1JUX0dFVAomIzQzOz09PT09PT09CiYjNDM7CiYjNDM7UmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsCiYjNDM7cmVmZXJyZWQgdG8gYXMgJiMzNDtwb3J0cyYjMzQ7LiBVc2VyIG5lZWRzIHRvIHNwZWNpZnkgYSBQT1JUX0lEIGZvciB0aGUgRE8gb3BlcmF0aW9uLAomIzQzO2luIHdoaWNoIGNhc2UgdGhlIERPIHJlcXVlc3QgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNwZWNpZmljIHBvcnQuCiYjNDM7CiYjNDM7QXMgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgcG9ydCwgdGhlIERVTVAgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIGxpc3QgdGhlCiYjNDM7cG9ydHMgcHJlc2VudCBvbiBhIGdpdmVuIGludGVyZmFjZSwgYnkgcGFzc2luZyBhbiBpbnRlcmZhY2UgaW5kZXggb3IgbmFtZSBpbgomIzQzO3RoZSBkdW1wIHJlcXVlc3QuCiYjNDM7CiYjNDM7UmVxdWVzdCBjb250ZW50czoKJiM0MzsKJiM0MzsgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXIKJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgdTMyICAgICBwb3J0IGlkCiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0tlcm5lbCByZXNwb25zZSBjb250ZW50czoKJiM0MzsKJiM0MzsgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgICAgbmVzdGVkICByZXF1ZXN0IGhlYWRlcgomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9JRGBgICAgICAgICAgICAgICAgICAgIHUzMiAgICAgdGhlIHBvcnQmIzM5O3MgdW5pcXVlIGlkZW50aWZpZXIsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXIgbmV0ZGV2aWNlLgomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVNgYCAgICAgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBsaW5rbW9kZXMKJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVNgYCBiaXRzZXQgIGJpdHNldCBvZiBzdXBwb3J0ZWQgTUlJCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VzCiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1RZUEVgYCAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCB0eXBlCiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlRgYCAgICAgICAgdTMyICAgICBJZiBhbnksIHRoZSBpbmRleCBvZiB0aGUgTUlJCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0IHRoYXQgZmVlZHMgaW50byB0aGlzCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LgomIzQzOyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKIFJlcXVlc3QgdHJhbnNsYXRpb24KID09PT09PT09PT09PT09PT09PT0KIApAQCAtMjY0Nyw0ICYjNDM7MjY4MCw1IEBAIGFyZSBuZXRsaW5rIG9ubHkuCiAgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUEhZX0dFVGBgCiAgIGBgU0lPQ0dIV1RTVEFNUGBgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfVFNDT05GSUdfR0VUYGAKICAgYGBTSU9DU0hXVFNUQU1QYGAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19UU0NPTkZJR19TRVRgYAomIzQzOyAgbi9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19QT1JUX0dFVGBgCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0CmluZGV4IDZlMjhkOTA5NGJjZTNmLi4yYTliMWVjOTNiNzBmOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0CkBAIC05OSwxMyAmIzQzOzk5LDI5IEBAIHdpbGwgZXZlbnR1YWxseSBiZSBhYmxlIHRvIHJlcG9ydCBpdHMgb3duIGtzZXR0aW5nczo6CiAgICAgICAgICAgICAoX19fX18pLS0tLS18IFBvcnQgfAogICAgICAgICAgICAgICAgICAgICAgICAgJiM0MzstLS0tLS0mIzQzOwogCiYjNDM7U0ZQIHBvcnRzCiYjNDM7PT09PT09PT09CiYjNDM7CiYjNDM7U0ZQIGludGVyZmFjZXMgaW52b2x2ZSAyIGRpc3RpbmN0IGNvbXBvbmVudHMsIGVhY2ggcmVwcmVzZW50ZWQgYnkKJiM0MzthIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCAmbHQ7cGh5X3BvcnQmZ3Q7YCBpbnN0YW5jZSA6CiYjNDM7CiYjNDM7IC0gVGhlIFNGUCBjYWdlIGl0c2VsZiBpcyBhIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCAmbHQ7cGh5X3BvcnQmZ3Q7YC4gSXQmIzM5O3Mgc3BlY2lhbAomIzQzOyAgIGluIHRoYXQgaXQmIzM5O3Mgbm90IGFuIE1ESSBpbnRlcmZhY2UsIGJ1dCByYXRoZXIgYSBob3QtcGx1Z2dhYmxlIE1JSS4KJiM0MzsgICBUaGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0ICZsdDtwaHlfcG9ydCZndDtgIGFzc29jaWF0ZWQgdG8gaXQgbGlzdHMgdGhlIGRpZmZlcmVudAomIzQzOyAgIE1JSSBpbnRlcmZhY2VzIHdlIGNhbiB1c2Ugb24gdGhlIGNhZ2UuCiYjNDM7CiYjNDM7IC0gVGhlIFNGUCBtb2R1bGUsIHdoZW4gaW5zZXJ0ZWQsIHdpbGwgYWxzbyBiZSBhc3NvY2lhdGVkIHRvIGEKJiM0MzsgICA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgJmx0O3BoeV9wb3J0Jmd0O2AsIHRoYXQgcmVwcmVzZW50cyB0aGUgdmFyaW91cyBsaW5rbW9kZXMKJiM0MzsgICB0aGF0IGl0IGdpdmVzIGFjY2VzcyB0by4gVGhlIG1vZHVsZSYjMzk7cyA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgJmx0O3BoeV9wb3J0Jmd0O2AKJiM0MzsgICBkb2VzbiYjMzk7dCBzdXBlcnNlZGUgdGhlIGNhZ2UmIzM5O3MgcG9ydCwgaXQgcmVmZXJlbmNlcyBpdCB0aHJvdWdoCiYjNDM7ICAgdGhlIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCAmbHQ7cGh5X3BvcnQmZ3Q7YCA6YzptZW1iZXI6YHVwc3RyZWFtX3BvcnRgIGZpZWxkLgomIzQzOwogTmV4dCBzdGVwcwogPT09PT09PT09PQogCi1BcyBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgb25seSBwb3J0cyBjb250cm9sbGVkIGJ5IFBIWSBkZXZpY2VzIGFyZQotc3VwcG9ydGVkLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGFkZCB0aGUgTmV0bGluayBBUEkgdG8gZXhwb3NlIHRoZXNlCi10byB1c2Vyc3BhY2UgYW5kIGFkZCBzdXBwb3J0IGZvciByYXcgcG9ydHMgKGNvbnRyb2xsZWQgYnkgc29tZSBmaXJtd2FyZSwgYW5kIGRpcmVjdGx5Ci1tYW5hZ2VkIGJ5IHRoZSBOSUMgZHJpdmVyKS4KJiM0MztBcyBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgdGhlIHBvcnQmIzM5O3MgcHJlc2VuY2UgYW5kIGluZm9ybWF0aW9uIGNhbiBvbmx5CiYjNDM7YmUgcXVlcmllZCwgYW5kIGl0JiMzOTtzIG5vdCBwb3NzaWJsZSB0byBjaGFuZ2UgYW55IG9mIHRoZSBwb3J0JiMzOTtzIHNldHRpbmdzIG9yIHNlbGVjdAomIzQzO3doaWNoIG9uZSBzaG91bGQgYmUgdXNlZC4KIAogQW5vdGhlciBwYXJhbGxlbCB0YXNrIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBNSUkgbXV4aW5nIGZyYW1ld29yayB0byBhbGxvdyB0aGUKLWNvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZXIgbXVsdGktcG9ydCBzZXR1cHMuCiYjNDM7Y29udHJvbCBvZiBub24tUEhZIGRyaXZlbiBtdWx0aS1wb3J0IHNldHVwcy4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMDBlN2IyNmUwYTIzZmEuLmQzMzg4MWVjMWY2MjU1IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTg3OTIsNiAmIzQzOzE4NzkyLDcgQEAgRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ldGhlcm5ldC1jb25uZWN0b3IueWFtbAogRjoJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdAogRjoJZHJpdmVycy9uZXQvcGh5L3BoeV9wb3J0LmMKIEY6CWluY2x1ZGUvbGludXgvcGh5X3BvcnQuaAomIzQzO0Y6CW5ldC9ldGh0b29sL3BvcnQuYwogSzoJc3RydWN0XHMmIzQzO3BoeV9wb3J0fHBoeV9wb3J0XwogCiBORVRXT1JLSU5HIFtHRU5FUkFMXQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaAppbmRleCA0MjEwODhlNmY2ZThmMS4uZWMzZDM5YTBhZTA2YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oCkBAIC02Niw1ICYjNDM7NjYsNyBAQCB2b2lkIHBoeV9jYXBzX21lZGl1bV9nZXRfc3VwcG9ydGVkKHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCwKIAkJCQkgICBlbnVtIGV0aHRvb2xfbGlua19tZWRpdW0gbWVkaXVtLAogCQkJCSAgIGludCBsYW5lcyk7CiB1MzIgcGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpOwomIzQzO3ZvaWQgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyh1bnNpZ25lZCBsb25nICp0bywgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSwKJiM0MzsJCQkJICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTsKIAogI2VuZGlmIC8qIF9fUEhZX0NBUFNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYwppbmRleCA5NDJkNDMxOTE1NjFlMi4uNTU4ZTRkZjRkNjNjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jCkBAIC00NDUsMyAmIzQzOzQ0NSwyOSBAQCB1MzIgcGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpCiAJcmV0dXJuIG1lZGl1bXM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKCkgLSBGaWx0ZXIgbGlua21vZGVzIHdpdGggYW4gaW50ZXJmYWNlIGxpc3QKJiM0MzsgKiBAdG86IFN0b3JlcyB0aGUgZmlsdGVyZWQgbGlua21vZGVzCiYjNDM7ICogQGZyb206IExpbmttb2RlcyB0byBmaWx0ZXIKJiM0MzsgKiBAaW50ZXJmYWNlczogQml0ZmllbGQgb2YgcGh5X2ludGVyZmFjZV90IHRoYXQgd2UgdXNlIGZvciBmaWx0ZXJpbmcKJiM0MzsgKgomIzQzOyAqIEZpbHRlciB0aGUgcHJvdmlkZWQgbGlua21vZGVzLCBvbmx5IHRvIGtlZXAgdGhlIG9uZXMgd2UgY2FuIHBvc3NpYmx5IGFjaGlldmUKJiM0MzsgKiB3aGVuIHVzaW5nIGFueSBvZiB0aGUgcHJvdmlkZWQgTUlJIGludGVyZmFjZXMuCiYjNDM7ICovCiYjNDM7dm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLAomIzQzOwkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sCiYjNDM7CQkJCSAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaW50ZXJmYWNlcykKJiM0Mzt7CiYjNDM7CV9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKGlmYWNlc19zdXBwb3J0ZWQpID0ge307CiYjNDM7CXVuc2lnbmVkIGludCBpZmFjZXNfY2FwcyA9IDA7CiYjNDM7CXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3NldF9iaXQoaW50ZXJmYWNlLCBpbnRlcmZhY2VzLCBQSFlfSU5URVJGQUNFX01PREVfTUFYKQomIzQzOwkJaWZhY2VzX2NhcHMgfD0gcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UoaW50ZXJmYWNlKTsKJiM0MzsKJiM0MzsJcGh5X2NhcHNfbGlua21vZGVzKGlmYWNlc19jYXBzLCBpZmFjZXNfc3VwcG9ydGVkKTsKJiM0MzsKJiM0MzsJbGlua21vZGVfYW5kKHRvLCBmcm9tLCBpZmFjZXNfc3VwcG9ydGVkKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCAwNjE1MjI4NDU5ZWY0Mi4uZDUyNTE1ZTdlMzAzMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMTQ5MCwxMSAmIzQzOzE0OTAsMjIgQEAgc3RhdGljIGludCBwaHlfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQogewogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LSZndDthdHRhY2hlZF9kZXY7CiYjNDM7CWludCByZXQ7CiAKLQlpZiAoZGV2KQotCQlyZXR1cm4gcGh5X2xpbmtfdG9wb19hZGRfcGh5KGRldiwgcGh5LCBQSFlfVVBTVFJFQU1fUEhZLCBwaHlkZXYpOwomIzQzOwlwaHlkZXYtJmd0O2hhc19zZnBfbW9kX3BoeSA9IHRydWU7CiYjNDM7CXBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIHBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydCk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJLyogSWYgd2UgYXJlbiYjMzk7dCBhdHRhY2hlZCB0byBhIG5ldGRldiwgd2UgY2FuJiMzOTt0IGFkZCB0aGUgU0ZQIFBIWSB0byBpdHMKJiM0MzsJICogdG9wb2xvZ3kuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRldikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlwaHlkZXYtJmd0O2hhc19zZnBfbW9kX3BoeSA9IGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTE1MTIsOCAmIzQzOzE1MjMsMTIgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSkKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2OwogCiYjNDM7CXBoeWRldi0mZ3Q7aGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7CiYjNDM7CiAJaWYgKGRldikKIAkJcGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTsKJiM0MzsKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgTlVMTCk7CiB9CiAKIC8qKgpAQCAtMTYxNyw2ICYjNDM7MTYzMiw3NyBAQCBzdGF0aWMgdm9pZCBwaHlfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSkKIAkJcG9ydC0mZ3Q7b3BzLSZndDtsaW5rX2Rvd24ocG9ydCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBoeV9hZGRfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzOwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwkvKiBDcmVhdGUgbW9kIHBvcnQgKi8KJiM0MzsJcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7CiYjNDM7CWlmICghcG9ydCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwb3J0LSZndDthY3RpdmUgPSB0cnVlOwomIzQzOwomIzQzOwljYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwaHlkZXYtJmd0O3NmcF9idXMpOwomIzQzOwomIzQzOwlwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHBvcnQtJmd0O3N1cHBvcnRlZCwgY2Fwcy0mZ3Q7bGlua19tb2RlcywKJiM0MzsJCQkJCXBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydC0mZ3Q7aW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2F0dGFjaGVkX2RldikgewomIzQzOwkJcmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiwgcG9ydCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcGh5X3BvcnRfZGVzdHJveShwb3J0KTsKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHdlIGRvbiYjMzk7dCB1c2UgcGh5X2FkZF9wb3J0KCkgaGVyZSBhcyB0aGUgbW9kdWxlIHBvcnQgaXNuJiMzOTt0IGEgZGlyZWN0CiYjNDM7CSAqIGludGVyZmFjZSBmcm9tIHRoZSBQSFksIGJ1dCByYXRoZXIgYW4gZXh0ZW5zaW9uIHRvIHRoZSBzZnAtYnVzLCB0aGF0CiYjNDM7CSAqIGlzIGFscmVhZHkgcmVwcmVzZW50ZWQgYnkgaXRzIG93biBwaHlfcG9ydAomIzQzOwkgKi8KJiM0MzsJcGh5ZGV2LSZndDttb2RfcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXBvcnQtJmd0O3Vwc3RyZWFtX3BvcnQgPSBwaHlkZXYtJmd0O3NmcF9jYWdlX3BvcnQtJmd0O2lkOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5X2RlbF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWlmICghcGh5ZGV2LSZndDttb2RfcG9ydCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2KQomIzQzOwkJcGh5X2xpbmtfdG9wb19kZWxfcG9ydChwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiwgcGh5ZGV2LSZndDttb2RfcG9ydCk7CiYjNDM7CiYjNDM7CXBoeV9wb3J0X2Rlc3Ryb3kocGh5ZGV2LSZndDttb2RfcG9ydCk7CiYjNDM7CXBoeWRldi0mZ3Q7bW9kX3BvcnQgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtOwomIzQzOwomIzQzOwkvKiBJZiB0aGVyZSYjMzk7cyBhIGRvd25zdHJlYW0gU0ZQIG1vZHVsZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGNvbnRhaW4gYSBQSFkKJiM0MzsJICogZGV2aWNlLCBsZXQmIzM5O3MgY3JlYXRlIGEgcGh5X3BvcnQgdG8gcmVwcmVzZW50IHRoYXQgbW9kdWxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFwaHlkZXYtJmd0O2hhc19zZnBfbW9kX3BoeSkKJiM0MzsJCXJldHVybiBwaHlfYWRkX3NmcF9tb2RfcG9ydChwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5X3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTsKJiM0MzsKJiM0MzsJLyogQ2FsbGVkIHVwb24gbW9kdWxlIHJlbW92YWwgb3IgdXBzdHJlYW0gcmVtb3ZhbCAqLwomIzQzOwlpZiAoIXBoeWRldi0mZ3Q7aGFzX3NmcF9tb2RfcGh5KQomIzQzOwkJcGh5X2RlbF9zZnBfbW9kX3BvcnQocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7CiAJLmF0dGFjaCA9IHBoeV9zZnBfYXR0YWNoLAogCS5kZXRhY2ggPSBwaHlfc2ZwX2RldGFjaCwKQEAgLTE2MjYsNiAmIzQzOzE3MTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7CiAJLmxpbmtfZG93biA9IHBoeV9zZnBfbGlua19kb3duLAogCS5jb25uZWN0X3BoeSA9IHBoeV9zZnBfY29ubmVjdF9waHksCiAJLmRpc2Nvbm5lY3RfcGh5ID0gcGh5X3NmcF9kaXNjb25uZWN0X3BoeSwKJiM0MzsJLm1vZHVsZV9zdGFydCA9IHBoeV9zZnBfbW9kdWxlX3N0YXJ0LAomIzQzOwkubW9kdWxlX3N0b3AgPSBwaHlfc2ZwX21vZHVsZV9zdG9wLAogfTsKIAogc3RhdGljIGludCBwaHlfYWRkX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KQpAQCAtMTY3MywxMyAmIzQzOzE3NjEsMTMgQEAgc3RhdGljIHZvaWQgcGh5X2RlbF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKIAlwaHlkZXYtJmd0O25fcG9ydHMtLTsKIH0KIAotc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9wb3J0ICpwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpOwogCWludCByZXQ7CiAKIAlpZiAoIXBvcnQpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlwb3J0LSZndDtwYXJlbnRfdHlwZSA9IFBIWV9QT1JUX1BIWTsKIAlwb3J0LSZndDtwaHkgPSBwaHlkZXY7CkBAIC0xNjk0LDEwICYjNDM7MTc4MiwxMiBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCSAqIHdoZW4gYXR0YWNoaW5nIHRoZSBwb3J0IHRvIHRoZSBwaHlkZXYuCiAJICovCiAJcmV0ID0gcGh5X2FkZF9wb3J0KHBoeWRldiwgcG9ydCk7Ci0JaWYgKHJldCkKJiM0MzsJaWYgKHJldCkgewogCQlwaHlfcG9ydF9kZXN0cm95KHBvcnQpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsJfQogCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIHBvcnQ7CiB9CiAKIC8qKgpAQCAtMTcwNiwyNSAmIzQzOzE3OTYsNDkgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKICAqLwogc3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IE5VTEw7CiAJc3RydWN0IHNmcF9idXMgKmJ1czsKLQlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHJldDsKIAotCWlmIChwaHlkZXYtJmd0O21kaW8uZGV2LmZ3bm9kZSkgewotCQlidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi0mZ3Q7bWRpby5kZXYuZndub2RlKTsKLQkJaWYgKElTX0VSUihidXMpKQotCQkJcmV0dXJuIFBUUl9FUlIoYnVzKTsKJiM0MzsJaWYgKCFwaHlkZXYtJmd0O21kaW8uZGV2LmZ3bm9kZSkKJiM0MzsJCXJldHVybiAwOwogCi0JCXBoeWRldi0mZ3Q7c2ZwX2J1cyA9IGJ1czsKJiM0MzsJYnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtJmd0O21kaW8uZGV2LmZ3bm9kZSk7CiYjNDM7CWlmIChJU19FUlIoYnVzKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGJ1cyk7CiAKLQkJcmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsICZhbXA7c2ZwX3BoeWRldl9vcHMpOwotCQlzZnBfYnVzX3B1dChidXMpOwomIzQzOwlwaHlkZXYtJmd0O3NmcF9idXMgPSBidXM7CiAKLQkJaWYgKHJldCkKLQkJCXBoeWRldi0mZ3Q7c2ZwX2J1cyA9IE5VTEw7CiYjNDM7CWlmIChidXMpIHsKJiM0MzsJCXBvcnQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTsKJiM0MzsJCWlmIChJU19FUlIocG9ydCkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHBvcnQpOwomIzQzOwkJCXBvcnQgPSBOVUxMOwomIzQzOwkJCWdvdG8gb3V0X3NmcDsKJiM0MzsJCX0KIAl9CiAKLQlpZiAoIXJldCAmYW1wOyZhbXA7IHBoeWRldi0mZ3Q7c2ZwX2J1cykKLQkJcmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7CiYjNDM7CXJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCAmYW1wO3NmcF9waHlkZXZfb3BzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3BvcnQ7CiYjNDM7CiYjNDM7CS8qIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgZ3JhYnMgYSByZWYgdG8gdGhlIHNmcCBidXMgb24gc3VjY2VzcywgaXQmIzM5O3MKJiM0MzsJICogc2FmZSB0byByZWxlYXNlIGl0IG5vdy4KJiM0MzsJICovCiYjNDM7CXNmcF9idXNfcHV0KGJ1cyk7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7CiYjNDM7b3V0X3BvcnQ6CiYjNDM7CWlmIChwb3J0KSB7CiYjNDM7CQlwaHlfZGVsX3BvcnQocGh5ZGV2LCBwb3J0KTsKJiM0MzsJCXBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7CiYjNDM7CX0KJiM0MztvdXRfc2ZwOgomIzQzOwlzZnBfYnVzX3B1dChidXMpOwomIzQzOwlwaHlkZXYtJmd0O3NmcF9idXMgPSBOVUxMOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MTUsNiAmIzQzOzE5MjksMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJCWVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeWRldiwgUEhZX1VQU1RSRUFNX01BQywgZGV2KTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDttb2RfcG9ydCkgewomIzQzOwkJCWVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoZGV2LCBwaHlkZXYtJmd0O21vZF9wb3J0KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIGVycm9yOwomIzQzOwkJfQogCX0KIAogCS8qIFNvbWUgRXRoZXJuZXQgZHJpdmVycyB0cnkgdG8gY29ubmVjdCB0byBhIFBIWSBkZXZpY2UgYmVmb3JlCkBAIC0xOTUxLDYgJiM0MzsyMDcxLDggQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LSZndDtwaHlkZXYgPSBOVUxMOwogCQlwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiA9IE5VTEw7CiAJCXBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDttb2RfcG9ydCkKJiM0MzsJCQlwaHlfbGlua190b3BvX2RlbF9wb3J0KGRldiwgcGh5ZGV2LSZndDttb2RfcG9ydCk7CiAJfQogCiAJcGh5ZGV2LSZndDtwaHlfbGlua19jaGFuZ2UgPSBOVUxMOwpAQCAtMzU3OSw2ICYjNDM7MzcwMSwyOCBAQCBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfc2ZwX3BvcnQpOwogCiYjNDM7LyoqCiYjNDM7ICogcGh5X3NldF91cHN0cmVhbV9wb3J0KCkgLSBTZXRzIHRoZSBwaHlfcG9ydCBjb250cm9sbGluZyB0aGUgTUlJIHRoaXMgUEhZIGlzCiYjNDM7ICoJCQkgICAgIGF0dGFjaGVkIHRvLgomIzQzOyAqIEBwaHlkZXY6IHBvaW50ZXIgdG8gdGhlIFBIWSBkZXZpY2Ugd2Ugc2V0IHRoZSB1cHN0cmVhbSBvZi4KJiM0MzsgKiBAcG9ydDogVGhlIHBoeV9wb3J0IHVwc3RyZWFtIG9mIHRoaXMgUEhZLCBjYW4gYmUgTlVMTC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7dXBzdHJlYW1fcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXBoeV9mb3JfZWFjaF9wb3J0KHBoeWRldiwgbG9jYWxfcG9ydCkKJiM0MzsJCWlmIChwb3J0KQomIzQzOwkJCWxvY2FsX3BvcnQtJmd0O3Vwc3RyZWFtX3BvcnQgPSBwb3J0LSZndDtpZDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlsb2NhbF9wb3J0LSZndDt1cHN0cmVhbV9wb3J0ID0gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X3NldF91cHN0cmVhbV9wb3J0KTsKJiM0MzsKIC8qKgogICogZndub2RlX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGZ3bm9kZSwgZmluZCB0aGUgbWRpb19kZXZpY2UKICAqIEBmd25vZGU6IHBvaW50ZXIgdG8gdGhlIG1kaW9fZGV2aWNlJiMzOTtzIGZ3bm9kZQpAQCAtMzgxNyw2ICYjNDM7Mzk2MSw3IEBAIHN0YXRpYyBpbnQgcGh5X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAlzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtJmd0O3NmcF9idXMpOwogCXBoeWRldi0mZ3Q7c2ZwX2J1cyA9IE5VTEw7CiYjNDM7CXBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydCA9IE5VTEw7CiAKIAlwaHlfY2xlYW51cF9wb3J0cyhwaHlkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jCmluZGV4IDQxMzRkZTdhZTMxM2QyLi41ZTEzNWFiNjM2YzBiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMKQEAgLTcsNiAmIzQzOzcsNyBAQAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9waHlfbGlua190b3BvbG9neS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHlfcG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwpAQCAtMjMsMTcgJiM0MzsyNCw4MSBAQCBzdGF0aWMgaW50IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXhhX2luaXRfZmxhZ3MoJmFtcDt0b3BvLSZndDtwaHlzLCBYQV9GTEFHU19BTExPQzEpOwogCXRvcG8tJmd0O25leHRfcGh5X2luZGV4ID0gMTsKIAomIzQzOwl4YV9pbml0X2ZsYWdzKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIFhBX0ZMQUdTX0FMTE9DMSk7CiYjNDM7CXRvcG8tJmd0O25leHRfcG9ydF9pbmRleCA9IDE7CiYjNDM7CiAJZGV2LSZndDtsaW5rX3RvcG8gPSB0b3BvOwogCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICpwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7bGlua190b3BvKQomIzQzOwkJcmV0dXJuIGRldi0mZ3Q7bGlua190b3BvOwomIzQzOwomIzQzOwkvKiBUaGUgdG9wb2xvZ3kgaXMgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIHdlIGFkZCBhbiBvYmplY3QgdG8gaXQuCiYjNDM7CSAqIEl0IGlzIGZyZWVkIGFsb25nc2lkZSB0aGUgbmV0ZGV2LiBJdCBjYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlCiYjNDM7CSAqIGNvbnRleHRzOgomIzQzOwkgKiAgLSBJdCBjYW4gYmUgY2FsbGVkIGZyb20gLnByb2JlKCkgOiBObyBydG5sLCBubyBuZXRkZXZfbG9jawomIzQzOwkgKiAgLSAubmRvX29wZW4oKSA6IHJ0bmwgYW5kIHBvc3NpYmx5IG5ldGRldl9sb2NrCiYjNDM7CSAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdAomIzQzOwkgKgomIzQzOwkgKiAgSG93ZXZlciwgd2UgY2FuJiMzOTt0IHJlYWxseSBoYXZlIHJhY2VzIDoKJiM0MzsJICogIC0gSWYgd2UgaGF2ZSBhIFBIWSwgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkgd2lsbCBhbHdheXMgcnVuIGZpcnN0CiYjNDM7CSAqICAgIGFuZCB0cmlnZ2VyIHRoZSBhbGxvYy4gT25seSB0aGVuIHRoZSBwb3J0cyBjYW4gYmUgYWRkZWQgdGhyb3VnaAomIzQzOwkgKiAgICBwaHlsaWIgb2Ygc2ZwLgomIzQzOwkgKiAgLSBJZiB3ZSBkb24mIzM5O3QsIHRoZSBTRlAgcG9ydCBmb3IgdGhlIGNhZ2UgaXMgcmVnaXN0ZXJlZCBmaXJzdCwgYW5kCiYjNDM7CSAqICAgIG9ubHkgdGhlbiBvdGhlciBwb3J0cy9QSFlzIGNhbiBiZSByZWdpc3RlcmVkLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2LSZndDtsaW5rX3RvcG87CiYjNDM7fQomIzQzOwomIzQzO2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJdG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7CiYjNDM7CWlmIChJU19FUlIodG9wbykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUih0b3BvKTsKJiM0MzsKJiM0MzsJLyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovCiYjNDM7CWlmIChwb3J0LSZndDtpZCkKJiM0MzsJCXJldCA9IHhhX2luc2VydCgmYW1wO3RvcG8tJmd0O3BvcnRzLCBwb3J0LSZndDtpZCwgcG9ydCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IHhhX2FsbG9jX2N5Y2xpYygmYW1wO3RvcG8tJmd0O3BvcnRzLCAmYW1wO3BvcnQtJmd0O2lkLCBwb3J0LAomIzQzOwkJCQkgICAgICB4YV9saW1pdF8zMmIsICZhbXA7dG9wby0mZ3Q7bmV4dF9wb3J0X2luZGV4LAomIzQzOwkJCQkgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19hZGRfcG9ydCk7CiYjNDM7CiYjNDM7dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi0mZ3Q7bGlua190b3BvOwomIzQzOwomIzQzOwlpZiAoIXRvcG8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIHBvcnQtJmd0O2lkKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19kZWxfcG9ydCk7CiYjNDM7CiBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksCiAJCQkgIGVudW0gcGh5X3Vwc3RyZWFtIHVwdCwgdm9pZCAqdXBzdHJlYW0pCiB7Ci0Jc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LSZndDtsaW5rX3RvcG87CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbzsKIAlzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKIAlpbnQgcmV0OwogCiAJLyogZXRodG9vbCBvcHMgbWF5IHJ1biB3aXRob3V0IHJ0bmxfbG9jaywgYW5kIHJ0bmxfbG9jayBpcyB3aGF0CkBAIC00NSwxMyAmIzQzOzExMCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIXRvcG8pIHsKLQkJcmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXRvcG8gPSBkZXYtJmd0O2xpbmtfdG9wbzsKLQl9CiYjNDM7CXRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHRvcG8pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIodG9wbyk7CiAKIAlwZG4gPSBremFsbG9jX29iaigqcGRuKTsKIAlpZiAoIXBkbikKQEAgLTg2LDggJiM0MzsxNDcsMjAgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycjsKIAomIzQzOwkvKiBBZGQgYWxsIHRoZSBQSFkmIzM5O3MgcG9ydHMgdG8gdGhlIHRvcG9sb2d5ICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwaHktJmd0O3BvcnRzLCBoZWFkKSB7CiYjNDM7CQlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KGRldiwgcG9ydCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZGVsX3BvcnRzOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiAKJiM0MztkZWxfcG9ydHM6CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShwb3J0LCAmYW1wO3BoeS0mZ3Q7cG9ydHMsIGhlYWQpCiYjNDM7CQlwaHlfbGlua190b3BvX2RlbF9wb3J0KGRldiwgcG9ydCk7CiYjNDM7CiYjNDM7CXhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cGh5cywgcGh5LSZndDtwaHlpbmRleCk7CiBlcnI6CiAJa2ZyZWUocGRuKTsKIAlyZXR1cm4gcmV0OwpAQCAtOTksMTAgJiM0MzsxNzIsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIAlzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtJmd0O2xpbmtfdG9wbzsKIAlzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKIAogCWlmICghdG9wbykKIAkJcmV0dXJuOwogCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwaHktJmd0O3BvcnRzLCBoZWFkKQomIzQzOwkJcGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpOwomIzQzOwogCXBkbiA9IHhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cGh5cywgcGh5LSZndDtwaHlpbmRleCk7CiAKIAkvKiBXZSBkZWxldGUgdGhlIFBIWSBmcm9tIHRoZSB0b3BvbG9neSwgaG93ZXZlciB3ZSBkb24mIzM5O3QgcmUtc2V0IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKaW5kZXggNTlkZmUzNWFmYTU0ZmMuLjVjZmJmY2MxMDc5YWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKQEAgLTE0LDYgJiM0MzsxNCw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvb2ZfbWRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeV9maXhlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHlfbGlua190b3BvbG9neS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHlfcG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeWxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwpAQCAtOTMsNiAmIzQzOzk1LDggQEAgc3RydWN0IHBoeWxpbmsgewogCURFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLKHNmcF9pbnRlcmZhY2VzKTsKIAlfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzZnBfc3VwcG9ydCk7CiAJdTggc2ZwX3BvcnQ7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqc2ZwX2NhZ2VfcG9ydDsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICptb2RfcG9ydDsKIAogCXN0cnVjdCBlZWVfY29uZmlnIGVlZV9jZmc7CiAKQEAgLTE3NjQsNiAmIzQzOzE3NjgsNTEgQEAgc3RhdGljIHZvaWQgcGh5bGlua19maXhlZF9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzOwogCiYjNDM7c3RhdGljIGludCBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmICghcGwtJmd0O25ldGRldiB8fCAhcGwtJmd0O3NmcF9idXMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7CiYjNDM7CWlmICghcG9ydCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwb3J0LSZndDtpc19zZnAgPSB0cnVlOwomIzQzOwlwb3J0LSZndDtpc19taWkgPSB0cnVlOwomIzQzOwlwb3J0LSZndDthY3RpdmUgPSB0cnVlOwomIzQzOwomIzQzOwlwaHlfaW50ZXJmYWNlX2FuZChwb3J0LSZndDtpbnRlcmZhY2VzLCBwbC0mZ3Q7Y29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcywKJiM0MzsJCQkgIHBoeWxpbmtfc2ZwX2ludGVyZmFjZXMpOwomIzQzOwlwaHlfcG9ydF91cGRhdGVfc3VwcG9ydGVkKHBvcnQpOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLSZndDtuZXRkZXYsIHBvcnQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfZGVzdHJveV9wb3J0OwomIzQzOwomIzQzOwlwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9kZXN0cm95X3BvcnQ6CiYjNDM7CXBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7CiYjNDM7CXBsLSZndDtzZnBfY2FnZV9wb3J0ID0gTlVMTDsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKQomIzQzO3sKJiM0MzsJaWYgKHBsLSZndDtuZXRkZXYgJmFtcDsmYW1wOyBwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydCkKJiM0MzsJCXBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtJmd0O25ldGRldiwgcGwtJmd0O3NmcF9jYWdlX3BvcnQpOwomIzQzOwomIzQzOwlpZiAocGwtJmd0O3NmcF9jYWdlX3BvcnQpCiYjNDM7CQlwaHlfcG9ydF9kZXN0cm95KHBsLSZndDtzZnBfY2FnZV9wb3J0KTsKJiM0MzsKJiM0MzsJcGwtJmd0O3NmcF9jYWdlX3BvcnQgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLAogCQkJCWNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCiB7CkBAIC0xNzgxLDkgJiM0MzsxODMwLDE4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLAogCiAJcGwtJmd0O3NmcF9idXMgPSBidXM7CiAKJiM0MzsJcmV0ID0gcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydChwbCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXNmcF9idXNfcHV0KGJ1cyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiAJcmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwbCwgJmFtcDtzZnBfcGh5bGlua19vcHMpOwogCXNmcF9idXNfcHV0KGJ1cyk7CiAKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHBsKTsKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTQ1LDYgJiM0MzsyMDAzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpOwogdm9pZCBwaHlsaW5rX2Rlc3Ryb3koc3RydWN0IHBoeWxpbmsgKnBsKQogewogCXNmcF9idXNfZGVsX3Vwc3RyZWFtKHBsLSZndDtzZnBfYnVzKTsKJiM0MzsJcGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpOwogCWlmIChwbC0mZ3Q7bGlua19ncGlvKQogCQlncGlvZF9wdXQocGwtJmd0O2xpbmtfZ3Bpbyk7CiAKQEAgLTM4NzAsMTQgJiM0MzszOTI5LDY3IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9yZW1vdmUodm9pZCAqdXBzdHJlYW0pCiAJcGh5X2ludGVyZmFjZV96ZXJvKHBsLSZndDtzZnBfaW50ZXJmYWNlcyk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzOwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBsLSZndDtzZnBfY2FnZV9wb3J0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBtb2QgcG9ydCAqLwomIzQzOwlwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTsKJiM0MzsJaWYgKCFwb3J0KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBvcnQtJmd0O2FjdGl2ZSA9IHRydWU7CiYjNDM7CiYjNDM7CWNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBsLSZndDtzZnBfYnVzKTsKJiM0MzsKJiM0MzsJcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyhwb3J0LSZndDtzdXBwb3J0ZWQsIGNhcHMtJmd0O2xpbmtfbW9kZXMsCiYjNDM7CQkJCQlwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydC0mZ3Q7aW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CWlmIChwbC0mZ3Q7bmV0ZGV2KSB7CiYjNDM7CQlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLSZndDtuZXRkZXYsIHBvcnQpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7CiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlwb3J0LSZndDt1cHN0cmVhbV9wb3J0ID0gcGwtJmd0O3NmcF9jYWdlX3BvcnQtJmd0O2lkOwomIzQzOwomIzQzOwlwbC0mZ3Q7bW9kX3BvcnQgPSBwb3J0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbCkKJiM0Mzt7CiYjNDM7CWlmICghcGwtJmd0O21vZF9wb3J0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocGwtJmd0O25ldGRldikKJiM0MzsJCXBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtJmd0O25ldGRldiwgcGwtJmd0O21vZF9wb3J0KTsKJiM0MzsKJiM0MzsJcGh5X3BvcnRfZGVzdHJveShwbC0mZ3Q7bW9kX3BvcnQpOwomIzQzOwlwbC0mZ3Q7bW9kX3BvcnQgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKQogewogCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOwomIzQzOwlpbnQgcmV0OwogCiAJLyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RhcnQgdGhlIFBIWSBub3cuICovCiAJaWYgKHBsLSZndDtwaHlkZXYpIHsKIAkJcGh5X3N0YXJ0KHBsLSZndDtwaHlkZXYpOwogCQlyZXR1cm4gMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydChwbCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiAJfQogCiAJLyogSWYgdGhlIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWSBidXQgd2UgZGlkbiYjMzk7dCBkZXRlY3Qgb25lIHdlCkBAIC0zODg2LDcgJiM0MzszOTk4LDE2IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKQogCWlmICghcGwtJmd0O3NmcF9tYXlfaGF2ZV9waHkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTsKJiM0MzsJcmV0ID0gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBkZWxfbW9kX3BvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2RlbF9tb2RfcG9ydDoKJiM0MzsJcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pCkBAIC0zODk2LDYgJiM0Mzs0MDE3LDggQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pCiAJLyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi8KIAlpZiAocGwtJmd0O3BoeWRldikKIAkJcGh5X3N0b3AocGwtJmd0O3BoeWRldik7CiYjNDM7CWVsc2UKJiM0MzsJCXBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChwbCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSkKQEAgLTM5NDAsNiAmIzQzOzQwNjMsOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQogCXBoeV9pbnRlcmZhY2VfYW5kKHBoeS0mZ3Q7aG9zdF9pbnRlcmZhY2VzLCBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzLAogCQkJICBwbC0mZ3Q7Y29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiAKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGwtJmd0O3NmcF9jYWdlX3BvcnQpOwomIzQzOwogCS8qIERvIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gKi8KIAlyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX3BoeShwbCwgcGh5KTsKIH0KQEAgLTM5NDgsNiAmIzQzOzQwNzMsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwKIAkJCQkgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHVwc3RyZWFtKTsKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeWRldiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHMgPSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCBiZWZmMWQ2ZmNjN2NkYS4uODI5NmY0ZjU5Y2UzYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtNTgyLDYgJiM0Mzs1ODIsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7CiAgKiBAd29sX2VuYWJsZWQ6IFNldCB0byB0cnVlIGlmIHRoZSBQSFkgb3IgdGhlIGF0dGFjaGVkIE1BQyBoYXZlIFdha2Utb24tTEFOCiAgKiAJCSBlbmFibGVkLgogICogQGlzX2dlbnBoeV9kcml2ZW46IFBIWSBpcyBkcml2ZW4gYnkgb25lIG9mIHRoZSBnZW5lcmljIFBIWSBkcml2ZXJzCiYjNDM7ICogQGhhc19zZnBfbW9kX3BoeTogU2V0IHRydWUgaWYgZG93bnN0cmVhbSBTRlAgYnVzJiMzOTtzIG1vZHVsZSBjb250YWlucyBhIFBIWQogICogQHN0YXRlOiBTdGF0ZSBvZiB0aGUgUEhZIGZvciBtYW5hZ2VtZW50IHB1cnBvc2VzCiAgKiBAZGV2X2ZsYWdzOiBEZXZpY2Utc3BlY2lmaWMgZmxhZ3MgdXNlZCBieSB0aGUgUEhZIGRyaXZlci4KICAqCkBAIC01OTQsNiAmIzQzOzU5NSw5IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHsKICAqIEBwaHlsaW5rOiBQb2ludGVyIHRvIHBoeWxpbmsgaW5zdGFuY2UgZm9yIHRoaXMgUEhZCiAgKiBAc2ZwX2J1c19hdHRhY2hlZDogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFNGUCBidXMgaGFzIGJlZW4gYXR0YWNoZWQKICAqIEBzZnBfYnVzOiBTRlAgYnVzIGF0dGFjaGVkIHRvIHRoaXMgUEhZJiMzOTtzIGZpYmVyIHBvcnQKJiM0MzsgKiBAc2ZwX2NhZ2VfcG9ydDogVGhlIHBoeV9wb3J0IGNvbm5lY3RlZCB0byB0aGUgZG93bnN0cmVhbSBTRlAgY2FnZQomIzQzOyAqIEBtb2RfcG9ydDogcGh5X3BvcnQgcmVwcmVzZW50aW5nIHRoZSBTRlAgbW9kdWxlLCBpZiBpdCBpcyBwaHktbGVzcwomIzQzOyAqIEB1cHN0cmVhbV9wb3J0OiBwaHlfcG9ydCB0aGlzIFBIWSYjMzk7cyBNSUkgYXR0YWNoZXMgdG8sIGlmIGFueQogICogQGF0dGFjaGVkX2RldjogVGhlIGF0dGFjaGVkIGVuZXQgZHJpdmVyJiMzOTtzIGRldmljZSBpbnN0YW5jZSBwdHIKICAqIEBhZGp1c3RfbGluazogQ2FsbGJhY2sgZm9yIHRoZSBlbmV0IGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBjaGFuZ2VzOiBpbiB0aGUKICAqICAgICAgICAgICAgICAgbGluayBzdGF0ZS4KQEAgLTcwNiw2ICYjNDM7NzEwLDcgQEAgc3RydWN0IHBoeV9kZXZpY2UgewogCXVuc2lnbmVkIGlycV9yZXJ1bjoxOwogCiAJdW5zaWduZWQgZGVmYXVsdF90aW1lc3RhbXA6MTsKJiM0MzsJdW5zaWduZWQgaGFzX3NmcF9tb2RfcGh5OjE7CiAKIAlpbnQgcmF0ZV9tYXRjaGluZzsKIApAQCAtNzg1LDYgJiM0Mzs3OTAsOSBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7CiAJLyogVGhpcyBtYXkgYmUgbW9kaWZpZWQgdW5kZXIgdGhlIHJ0bmwgbG9jayAqLwogCWJvb2wgc2ZwX2J1c19hdHRhY2hlZDsKIAlzdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX2J1czsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0OwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0OwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnVwc3RyZWFtX3BvcnQ7CiAJc3RydWN0IHBoeWxpbmsgKnBoeWxpbms7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmF0dGFjaGVkX2RldjsKIAlzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHM7CkBAIC0yNDY1LDYgJiM0MzsyNDczLDggQEAgaW50IF9fcGh5X2h3dHN0YW1wX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCiBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiAKJiM0Mzt2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpOwomIzQzOwogLyoqCiAgKiBwaHlfbW9kdWxlX2RyaXZlcigpIC0gSGVscGVyIG1hY3JvIGZvciByZWdpc3RlcmluZyBQSFkgZHJpdmVycwogICogQF9fcGh5X2RyaXZlcnM6IGFycmF5IG9mIFBIWSBkcml2ZXJzIHRvIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmgKaW5kZXggOTU1NzVmNjhkNWJjNzEuLjk1NjI5MTEyMjA0ZWE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oCkBAIC0xMywxNCAmIzQzOzEzLDE5IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogCiBzdHJ1Y3QgeGFycmF5Owogc3RydWN0IHBoeV9kZXZpY2U7CiYjNDM7c3RydWN0IHBoeV9wb3J0Owogc3RydWN0IHNmcF9idXM7CiAKIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSB7CiAJc3RydWN0IHhhcnJheSBwaHlzOwogCXUzMiBuZXh0X3BoeV9pbmRleDsKJiM0MzsKJiM0MzsJc3RydWN0IHhhcnJheSBwb3J0czsKJiM0MzsJdTMyIG5leHRfcG9ydF9pbmRleDsKIH07CiAKIHN0cnVjdCBwaHlfZGV2aWNlX25vZGUgewpAQCAtNDgsNiAmIzQzOzUzLDkgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCiB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTsKIAomIzQzO2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7CiYjNDM7dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7CiYjNDM7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICoKIHBoeV9saW5rX3RvcG9fZ2V0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcGh5aW5kZXgpCiB7CkBAIC02NCw2ICYjNDM7NzIsMjAgQEAgcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleCkKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9wb3J0ICoKJiM0MztwaHlfbGlua190b3BvX2dldF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwb3J0X2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LSZndDtsaW5rX3RvcG87CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CWlmICghdG9wbykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkvKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwgd2hpbGUgaGFuZGxpbmcgdGhlIHBoeV9wb3J0ICovCiYjNDM7CXJldHVybiB4YV9sb2FkKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIHBvcnRfaWQpOwomIzQzO30KJiM0MzsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSwKQEAgLTc3LDExICYjNDM7OTksMjggQEAgc3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKgogcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleCkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqCiYjNDM7cGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KICNlbmRpZgogCiAjZW5kaWYgLyogX19QSFlfTElOS19UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmgKaW5kZXggMGVmMGY1Y2U0NzA5MjYuLmUzYTQxY2VkZWJkY2ZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oCkBAIC0zNiw5ICYjNDM7MzYsMTIgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7CiAvKioKICAqIHN0cnVjdCBwaHlfcG9ydCAtIEEgcmVwcmVzZW50YXRpb24gb2YgYSBuZXR3b3JrIGRldmljZSBwaHlzaWNhbCBpbnRlcmZhY2UKICAqCiYjNDM7ICogQGlkOiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBvcnQgd2l0aGluIHRoZSB0b3BvbG9neQogICogQGhlYWQ6IFVzZWQgYnkgdGhlIHBvcnQmIzM5O3MgcGFyZW50IHRvIGxpc3QgcG9ydHMKICAqIEBwYXJlbnRfdHlwZTogVGhlIHR5cGUgb2YgZGV2aWNlIHRoaXMgcG9ydCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8KICAqIEBwaHk6IElmIHRoZSBwYXJlbnQgaXMgUEhZX1BPUlRfUEhZREVWLCB0aGUgUEhZIGNvbnRyb2xsaW5nIHRoYXQgcG9ydAomIzQzOyAqIEB1cHN0cmVhbV9wb3J0OiBGb3Igbm9uLU1JSSBwb3J0cywgaW5kaWNhdGVzIHRoZSBNSUkgcG9ydCB0aGF0IGZlZWRzIHRoaXMKJiM0MzsgKgkJICAgcG9ydCwgZS5nLiB0aGUgU0ZQIGNhZ2UgcG9ydCBmb3IgYSBTRlAgbW9kdWxlIHBvcnQuCiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlcgogICogQHBhaXJzOiBUaGUgbnVtYmVyIG9mICBwYWlycyB0aGlzIHBvcnQgaGFzLCAwIGlmIG5vdCBhcHBsaWNhYmxlCiAgKiBAbWVkaXVtczogQml0bWFzayBvZiB0aGUgcGh5c2ljYWwgbWVkaXVtcyB0aGlzIHBvcnQgcHJvdmlkZXMgYWNjZXNzIHRvCkBAIC01MiwxMSAmIzQzOzU1LDEzIEBAIHN0cnVjdCBwaHlfcG9ydF9vcHMgewogICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuCiAgKi8KIHN0cnVjdCBwaHlfcG9ydCB7CiYjNDM7CXUzMiBpZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CiAJZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7CiAJdW5pb24gewogCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwogCX07CiYjNDM7CXUzMiB1cHN0cmVhbV9wb3J0OwogCiAJY29uc3Qgc3RydWN0IHBoeV9wb3J0X29wcyAqb3BzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaAppbmRleCA4MTM0YmFmNzg2MGYzYy4uZjlkODc5NGVhYmMxOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaApAQCAtNzgsNiAmIzQzOzc4LDExIEBAIGVudW0gZXRodG9vbF9wc2VfZXZlbnQgewogCUVUSFRPT0xfUFNFX0VWRU5UX1NXX1BXX0NPTlRST0xfRVJST1IgPSA2NCwKIH07CiAKJiM0MztlbnVtIGV0aHRvb2xfcG9ydF90eXBlIHsKJiM0MzsJRVRIVE9PTF9QT1JUX1RZUEVfTURJLAomIzQzOwlFVEhUT09MX1BPUlRfVFlQRV9TRlAsCiYjNDM7fTsKJiM0MzsKIGVudW0gewogCUVUSFRPT0xfQV9IRUFERVJfVU5TUEVDLAogCUVUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYLApAQCAtODQwLDYgJiM0Mzs4NDUsMTggQEAgZW51bSB7CiAJRVRIVE9PTF9BX01TRV9NQVggPSAoX19FVEhUT09MX0FfTVNFX0NOVCAtIDEpCiB9OwogCiYjNDM7ZW51bSB7CiYjNDM7CUVUSFRPT0xfQV9QT1JUX0hFQURFUiA9IDEsCiYjNDM7CUVUSFRPT0xfQV9QT1JUX0lELAomIzQzOwlFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMsCiYjNDM7CUVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTLAomIzQzOwlFVEhUT09MX0FfUE9SVF9UWVBFLAomIzQzOwlFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JULAomIzQzOwomIzQzOwlfX0VUSFRPT0xfQV9QT1JUX0NOVCwKJiM0MzsJRVRIVE9PTF9BX1BPUlRfTUFYID0gKF9fRVRIVE9PTF9BX1BPUlRfQ05UIC0gMSkKJiM0Mzt9OwomIzQzOwogZW51bSB7CiAJRVRIVE9PTF9NU0dfVVNFUl9OT05FID0gMCwKIAlFVEhUT09MX01TR19TVFJTRVRfR0VUID0gMSwKQEAgLTg5Myw2ICYjNDM7OTEwLDcgQEAgZW51bSB7CiAJRVRIVE9PTF9NU0dfUlNTX0NSRUFURV9BQ1QsCiAJRVRIVE9PTF9NU0dfUlNTX0RFTEVURV9BQ1QsCiAJRVRIVE9PTF9NU0dfTVNFX0dFVCwKJiM0MzsJRVRIVE9PTF9NU0dfUE9SVF9HRVQsCiAKIAlfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULAogCUVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKQpAQCAtOTU0LDYgJiM0Mzs5NzIsNyBAQCBlbnVtIHsKIAlFVEhUT09MX01TR19SU1NfQ1JFQVRFX05URiwKIAlFVEhUT09MX01TR19SU1NfREVMRVRFX05URiwKIAlFVEhUT09MX01TR19NU0VfR0VUX1JFUExZLAomIzQzOwlFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSwKIAogCV9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCwKIAlFVEhUT09MX01TR19LRVJORUxfTUFYID0gKF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCAtIDEpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGMxYzFiZTFhNjk2MmZlLi5iMzZjYzVjNDc4MTZhNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExMzE1LDYgJiM0MzsxMTMxNSw3IEBAIHN0YXRpYyB2b2lkIG5ldGRldl9mcmVlX3BoeV9saW5rX3RvcG9sb2d5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUEhZTElCKSAmYW1wOyZhbXA7IHRvcG8pIHsKIAkJeGFfZGVzdHJveSgmYW1wO3RvcG8tJmd0O3BoeXMpOwomIzQzOwkJeGFfZGVzdHJveSgmYW1wO3RvcG8tJmd0O3BvcnRzKTsKIAkJa2ZyZWUodG9wbyk7CiAJCWRldi0mZ3Q7bGlua190b3BvID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9NYWtlZmlsZSBiL25ldC9ldGh0b29sL01ha2VmaWxlCmluZGV4IDYyOWMxMDkxNjY3MGVjLi45YjViMDk2NzAwMDgxMSAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvTWFrZWZpbGUKQEAgLTksNCAmIzQzOzksNCBAQCBldGh0b29sX25sLXkJOj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXAogCQkgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcCiAJCSAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcCiAJCSAgIG1vZHVsZS5vIGNtaXNfZndfdXBkYXRlLm8gY21pc19jZGIubyBwc2UtcGQubyBwbGNhLm8gXAotCQkgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vCiYjNDM7CQkgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vIHBvcnQubwpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jCmluZGV4IDFhZjM5NWI1NDMzMGUyLi5jMDc2YzA3ZDBhMDgwYyAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuYwpAQCAtMjYsNiAmIzQzOzI2LDggQEAgc3RhdGljIHUzMiBldGhubF9iY2FzdF9zZXE7CiAJCQkgICAgIEVUSFRPT0xfRkxBR19PTUlUX1JFUExZKQogI2RlZmluZSBFVEhUT09MX0ZMQUdTX1NUQVRTIChFVEhUT09MX0ZMQUdTX0JBU0lDIHwgRVRIVE9PTF9GTEFHX1NUQVRTKQogCiYjNDM7Y2hhciBwaHlfaW50ZXJmYWNlX25hbWVzW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdW0VUSF9HU1RSSU5HX0xFTl0gX19yb19hZnRlcl9pbml0OwomIzQzOwogY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtdID0gewogCVtFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWF0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtFVEhUT09MX0FfSEVBREVSX0RFVl9OQU1FXQk9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORywKQEAgLTQzMSw2ICYjNDM7NDMzLDcgQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHsKIAlbRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUXQk9ICZhbXA7ZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHMsCiAJW0VUSFRPT0xfTVNHX1BIWV9HRVRdCQk9ICZhbXA7ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLAogCVtFVEhUT09MX01TR19NU0VfR0VUXQkJPSAmYW1wO2V0aG5sX21zZV9yZXF1ZXN0X29wcywKJiM0MzsJW0VUSFRPT0xfTVNHX1BPUlRfR0VUXQkJPSAmYW1wO2V0aG5sX3BvcnRfcmVxdWVzdF9vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQpAQCAtMTU3Miw2ICYjNDM7MTU3NSwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIGV0aHRvb2xfZ2VubF9vcHNbXSA9IHsKIAkJLnBvbGljeSA9IGV0aG5sX21zZV9nZXRfcG9saWN5LAogCQkubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfbXNlX2dldF9wb2xpY3kpIC0gMSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuY21kCT0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsCiYjNDM7CQkuZG9pdAk9IGV0aG5sX2RlZmF1bHRfZG9pdCwKJiM0MzsJCS5zdGFydAk9IGV0aG5sX3BvcnRfZHVtcF9zdGFydCwKJiM0MzsJCS5kdW1waXQJPSBldGhubF9wb3J0X2R1bXBpdCwKJiM0MzsJCS5kb25lCT0gZXRobmxfcG9ydF9kdW1wX2RvbmUsCiYjNDM7CQkucG9saWN5ID0gZXRobmxfcG9ydF9nZXRfcG9saWN5LAomIzQzOwkJLm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX3BvcnRfZ2V0X3BvbGljeSkgLSAxLAomIzQzOwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0gewpAQCAtMTU5NCwxMCAmIzQzOzE2MDYsMjMgQEAgc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBldGh0b29sX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAogLyogbW9kdWxlIHNldHVwICovCiAKJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgZXRobmxfcGh5X25hbWVzX3BvcHVsYXRlKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQluYW1lID0gcGh5X21vZGVzKGkpOwomIzQzOwkJc3Ryc2NweShwaHlfaW50ZXJmYWNlX25hbWVzW2ldLCBuYW1lLCBFVEhfR1NUUklOR19MRU4pOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2luaXQgZXRobmxfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKJiM0MzsJZXRobmxfcGh5X25hbWVzX3BvcHVsYXRlKCk7CiYjNDM7CiAJcmV0ID0gZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJmFtcDtldGh0b29sX2dlbmxfZmFtaWx5KTsKIAlpZiAoV0FSTihyZXQgJmx0OyAwLCAmIzM0O2V0aHRvb2w6IGdlbmV0bGluayBmYW1pbHkgcmVnaXN0cmF0aW9uIGZhaWxlZCYjMzQ7KSkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaAppbmRleCAzZTk2OWEwNzBmOWZlNC4uYjI1MGU4YjVjNGQ0NzUgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKQEAgLTUsMTEgJiM0Mzs1LDE1IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sX25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2dlbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAKIHN0cnVjdCBldGhubF9yZXFfaW5mbzsKIAomIzQzO2V4dGVybiBjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXTsKJiM0MzsKJiM0Mzt1MzIgZXRobmxfYmNhc3Rfc2VxX25leHQodm9pZCk7CiBpbnQgZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpuZXN0LCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLApAQCAtNDc0LDYgJiM0Mzs0NzgsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9wb3J0X3JlcXVlc3Rfb3BzOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyAmIzQzOyAxXTsKQEAgLTUzMCw2ICYjNDM7NTM1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgJiM0MzsgMV07CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BvcnRfZ2V0X3BvbGljeVtFVEhUT09MX0FfUE9SVF9JRCAmIzQzOyAxXTsKIAogaW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIGludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKQEAgLTU0NSw2ICYjNDM7NTUxLDkgQEAgaW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKIGludCBldGhubF90c2luZm9fZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogaW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIGludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogCiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19zdGRfbmFtZXNbX19FVEhUT09MX1NUQVRTX0NOVF1bRVRIX0dTVFJJTkdfTEVOXTsKIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX2V0aF9waHlfbmFtZXNbX19FVEhUT09MX0FfU1RBVFNfRVRIX1BIWV9DTlRdW0VUSF9HU1RSSU5HX0xFTl07CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9wb3J0LmMgYi9uZXQvZXRodG9vbC9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFiMmNjMDVkZjlmOTBhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcG9ydC5jCkBAIC0wLDAgJiM0MzsxLDM3NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAyMDI2IEJvb3RsaW4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeV9wb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbG9jay5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Yml0c2V0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0bGluay5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgcG9ydF9yZXFfaW5mbyB7CiYjNDM7CXN0cnVjdCBldGhubF9yZXFfaW5mbyBiYXNlOwomIzQzOwl1MzIgcG9ydF9pZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEgewomIzQzOwlzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YQliYXNlOwomIzQzOwlfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpOwomIzQzOwlERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhpbnRlcmZhY2VzKTsKJiM0MzsJdTMyIHBvcnRfaWQ7CiYjNDM7CWJvb2wgbWlpOwomIzQzOwlib29sIHNmcDsKJiM0MzsJdTMyIHVwc3RyZWFtX3BvcnQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFBPUlRfUkVRSU5GTyhfX3JlcV9iYXNlKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfX3JlcV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXFfaW5mbywgYmFzZSkKJiM0MzsKJiM0MzsjZGVmaW5lIFBPUlRfUkVQREFUQShfX3JlcGx5X2Jhc2UpIFwKJiM0MzsJY29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBvcnRfcmVwbHlfZGF0YSwgYmFzZSkKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgJiM0MzsgMV0gPSB7CiYjNDM7CVtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksCiYjNDM7CVtFVEhUT09MX0FfUE9SVF9JRF0gPSBOTEFfUE9MSUNZX01JTihOTEFfVTMyLCAxKSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcG9ydF9wYXJzZV9yZXF1ZXN0KHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pOwomIzQzOwomIzQzOwlpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBFVEhUT09MX0FfUE9SVF9JRCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVxdWVzdC0mZ3Q7cG9ydF9pZCA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QT1JUX0lEXSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiYjNDM7CQkJICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSwKJiM0MzsJCQkgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pOwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CiYjNDM7CS8qIFJUTkwgbXVzdCBiZSBoZWxkIHdoaWxlIGhvbGRpbmcgYSByZWYgdG8gdGhlIHBoeV9wb3J0LiBIZXJlLCBjYWxsZXIKJiM0MzsJICogaG9sZHMgUlROTC4KJiM0MzsJICovCiYjNDM7CXBvcnQgPSBwaHlfbGlua190b3BvX2dldF9wb3J0KHJlcV9pbmZvLSZndDtkZXYsIHJlcXVlc3QtJmd0O3BvcnRfaWQpOwomIzQzOwlpZiAoIXBvcnQpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJbGlua21vZGVfY29weShyZXBseS0mZ3Q7c3VwcG9ydGVkLCBwb3J0LSZndDtzdXBwb3J0ZWQpOwomIzQzOwlwaHlfaW50ZXJmYWNlX2NvcHkocmVwbHktJmd0O2ludGVyZmFjZXMsIHBvcnQtJmd0O2ludGVyZmFjZXMpOwomIzQzOwlyZXBseS0mZ3Q7cG9ydF9pZCA9IHBvcnQtJmd0O2lkOwomIzQzOwlyZXBseS0mZ3Q7bWlpID0gcG9ydC0mZ3Q7aXNfbWlpOwomIzQzOwlyZXBseS0mZ3Q7c2ZwID0gcG9ydC0mZ3Q7aXNfc2ZwOwomIzQzOwlyZXBseS0mZ3Q7dXBzdHJlYW1fcG9ydCA9IHBvcnQtJmd0O3Vwc3RyZWFtX3BvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKQomIzQzO3sKJiM0MzsJYm9vbCBjb21wYWN0ID0gcmVxX2luZm8tJmd0O2ZsYWdzICZhbXA7IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7CiYjNDM7CXN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpOwomIzQzOwlzaXplX3Qgc2l6ZSA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEVUSFRPT0xfQV9QT1JUX0lEICovCiYjNDM7CXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsKJiM0MzsKJiM0MzsJaWYgKCFyZXBseS0mZ3Q7bWlpKSB7CiYjNDM7CQkvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMgKi8KJiM0MzsJCXJldCA9IGV0aG5sX2JpdHNldF9zaXplKHJlcGx5LSZndDtzdXBwb3J0ZWQsIE5VTEwsCiYjNDM7CQkJCQlfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsCiYjNDM7CQkJCQlsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXNpemUgJiM0Mzs9IHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTICovCiYjNDM7CQlyZXQgPSBldGhubF9iaXRzZXRfc2l6ZShyZXBseS0mZ3Q7aW50ZXJmYWNlcywgTlVMTCwKJiM0MzsJCQkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsCiYjNDM7CQkJCQlwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlzaXplICYjNDM7PSByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqLwomIzQzOwlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CiYjNDM7CiYjNDM7CS8qIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQgKi8KJiM0MzsJaWYgKHJlcGx5LSZndDt1cHN0cmVhbV9wb3J0KQomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKQomIzQzO3sKJiM0MzsJYm9vbCBjb21wYWN0ID0gcmVxX2luZm8tJmd0O2ZsYWdzICZhbXA7IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7CiYjNDM7CXN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpOwomIzQzOwlpbnQgcmV0LCBwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9NREk7CiYjNDM7CiYjNDM7CWlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS0mZ3Q7cG9ydF9pZCkpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlpZiAoIXJlcGx5LSZndDttaWkpIHsKJiM0MzsJCXJldCA9IGV0aG5sX3B1dF9iaXRzZXQoc2tiLCBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMsCiYjNDM7CQkJCSAgICAgICByZXBseS0mZ3Q7c3VwcG9ydGVkLCBOVUxMLAomIzQzOwkJCQkgICAgICAgX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLAomIzQzOwkJCQkgICAgICAgbGlua19tb2RlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsCiYjNDM7CQkJCSAgICAgICByZXBseS0mZ3Q7aW50ZXJmYWNlcywgTlVMTCwKJiM0MzsJCQkJICAgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsCiYjNDM7CQkJCSAgICAgICBwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJlcGx5LSZndDttaWkgfHwgcmVwbHktJmd0O3NmcCkKJiM0MzsJCXBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX1NGUDsKJiM0MzsKJiM0MzsJaWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfVFlQRSwgcG9ydF90eXBlKSkKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiYjNDM7CiYjNDM7CWlmIChyZXBseS0mZ3Q7dXBzdHJlYW1fcG9ydCAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsCiYjNDM7CQkJcmVwbHktJmd0O3Vwc3RyZWFtX3BvcnQpKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBwb3J0X2R1bXBfY3R4IHsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8JKnJlcV9pbmZvOwomIzQzOwlzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhCSpyZXBseV9kYXRhOwomIzQzOwl1bnNpZ25lZCBsb25nCQlpZmluZGV4OwomIzQzOwl1bnNpZ25lZCBsb25nCQlwb3NfaWZpbmRleDsKJiM0MzsJdW5zaWduZWQgbG9uZwkJcG9zX3BvcnRpZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqCiYjNDM7cG9ydF9kdW1wX2N0eF9nZXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqKWNiLSZndDtjdHg7CiYjNDM7fQomIzQzOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTsKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsJc3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby0mZ3Q7aW5mby5hdHRyczsKJiM0MzsJc3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YTsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcV9pbmZvOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpICZndDsgc2l6ZW9mKGNiLSZndDtjdHgpKTsKJiM0MzsKJiM0MzsJcmVxX2luZm8gPSBremFsbG9jX29iaigqcmVxX2luZm8pOwomIzQzOwlpZiAoIXJlcV9pbmZvKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJlcGx5X2RhdGEgPSBrbWFsbG9jX29iaigqcmVwbHlfZGF0YSk7CiYjNDM7CWlmICghcmVwbHlfZGF0YSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZnJlZV9yZXFfaW5mbzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldCgmYW1wO3JlcV9pbmZvLSZndDtiYXNlLCB0YltFVEhUT09MX0FfUE9SVF9IRUFERVJdLAomIzQzOwkJCQkJIGdlbmxfaW5mb19uZXQoJmFtcDtpbmZvLSZndDtpbmZvKSwKJiM0MzsJCQkJCSBpbmZvLSZndDtpbmZvLmV4dGFjaywgZmFsc2UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZnJlZV9yZXBfZGF0YTsKJiM0MzsKJiM0MzsJY3R4LSZndDtpZmluZGV4ID0gMDsKJiM0MzsJY3R4LSZndDtwb3NfaWZpbmRleCA9IDA7CiYjNDM7CiYjNDM7CS8qIEZvciBmaWx0ZXJlZCBEVU1QIHJlcXVlc3RzLCBsZXQmIzM5O3MganVzdCBzdG9yZSB0aGUgaWZpbmRleC4gV2UmIzM5O2xsIGNoZWNrCiYjNDM7CSAqIGFnYWluIGlmIHRoZSBuZXRkZXYgaXMgc3RpbGwgdGhlcmUgd2hlbiBsb29waW5nIG92ZXIgdGhlIG5ldGRldiBsaXN0CiYjNDM7CSAqIGluIHRoZSBEVU1QIGxvb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAocmVxX2luZm8tJmd0O2Jhc2UuZGV2KSB7CiYjNDM7CQljdHgtJmd0O2lmaW5kZXggPSByZXFfaW5mby0mZ3Q7YmFzZS5kZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQluZXRkZXZfcHV0KHJlcV9pbmZvLSZndDtiYXNlLmRldiwgJmFtcDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXZfdHJhY2tlcik7CiYjNDM7CQlyZXFfaW5mby0mZ3Q7YmFzZS5kZXYgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7cmVxX2luZm8gPSByZXFfaW5mbzsKJiM0MzsJY3R4LSZndDtyZXBseV9kYXRhID0gcmVwbHlfZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZnJlZV9yZXBfZGF0YToKJiM0MzsJa2ZyZWUocmVwbHlfZGF0YSk7CiYjNDM7ZnJlZV9yZXFfaW5mbzoKJiM0MzsJa2ZyZWUocmVxX2luZm8pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsJdm9pZCAqZWhkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTsKJiM0MzsJaWYgKCFlaGRyKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJbWVtc2V0KGN0eC0mZ3Q7cmVwbHlfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpKTsKJiM0MzsJY3R4LSZndDtyZXBseV9kYXRhLSZndDtiYXNlLmRldiA9IGRldjsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGRldl9sb2NrX29wcyhkZXYpOwomIzQzOwomIzQzOwlyZXQgPSBwb3J0X3ByZXBhcmVfZGF0YSgmYW1wO2N0eC0mZ3Q7cmVxX2luZm8tJmd0O2Jhc2UsICZhbXA7Y3R4LSZndDtyZXBseV9kYXRhLSZndDtiYXNlLAomIzQzOwkJCQlnZW5sX2luZm9fZHVtcChjYikpOwomIzQzOwomIzQzOwluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBldGhubF9maWxsX3JlcGx5X2hlYWRlcihza2IsIGRldiwgRVRIVE9PTF9BX1BPUlRfSEVBREVSKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gcG9ydF9maWxsX3JlcGx5KHNrYiwgJmFtcDtjdHgtJmd0O3JlcV9pbmZvLSZndDtiYXNlLCAmYW1wO2N0eC0mZ3Q7cmVwbHlfZGF0YS0mZ3Q7YmFzZSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljdHgtJmd0O3JlcGx5X2RhdGEtJmd0O2Jhc2UuZGV2ID0gTlVMTDsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpOwomIzQzOwllbHNlCiYjNDM7CQlnZW5sbXNnX2VuZChza2IsIGVoZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmVfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZGV2ID0gY3R4LSZndDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXY7CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtsaW5rX3RvcG8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJeGFfZm9yX2VhY2hfc3RhcnQoJmFtcDtkZXYtJmd0O2xpbmtfdG9wby0mZ3Q7cG9ydHMsIGN0eC0mZ3Q7cG9zX3BvcnRpZCwgcG9ydCwKJiM0MzsJCQkgIGN0eC0mZ3Q7cG9zX3BvcnRpZCkgewomIzQzOwkJY3R4LSZndDtyZXFfaW5mby0mZ3Q7cG9ydF9pZCA9IGN0eC0mZ3Q7cG9zX3BvcnRpZDsKJiM0MzsKJiM0MzsJCXJldCA9IHBvcnRfZHVtcF9vbmUoc2tiLCBkZXYsIGNiKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwljdHgtJmd0O3Bvc19wb3J0aWQgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKJiM0MzsJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtJmd0O3Bvc19pZmluZGV4KSB7CiYjNDM7CQluZXRkZXZfaG9sZChkZXYsICZhbXA7ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CQljdHgtJmd0O3JlcV9pbmZvLSZndDtiYXNlLmRldiA9IGRldjsKJiM0MzsJCXJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpOwomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJbmV0ZGV2X3B1dChkZXYsICZhbXA7ZGV2X3RyYWNrZXIpOwomIzQzOwkJY3R4LSZndDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXYgPSBOVUxMOwomIzQzOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXJldCA9IDA7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpOwomIzQzOwlzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGN0eC0mZ3Q7aWZpbmRleCkgewomIzQzOwkJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwomIzQzOwomIzQzOwkJZGV2ID0gbmV0ZGV2X2dldF9ieV9pbmRleChnZW5sX2luZm9fbmV0KCZhbXA7aW5mby0mZ3Q7aW5mbyksCiYjNDM7CQkJCQkgIGN0eC0mZ3Q7aWZpbmRleCwgJmFtcDtkZXZfdHJhY2tlciwKJiM0MzsJCQkJCSAgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJCWN0eC0mZ3Q7cmVxX2luZm8tJmd0O2Jhc2UuZGV2ID0gZGV2OwomIzQzOwkJcmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7CiYjNDM7CiYjNDM7CQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXZfdHJhY2tlcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBwb3J0X2R1bXBfYWxsX2Rldihza2IsIGNiKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsKJiM0MzsJa2ZyZWUoY3R4LSZndDtyZXFfaW5mbyk7CiYjNDM7CWtmcmVlKGN0eC0mZ3Q7cmVwbHlfZGF0YSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcG9ydF9yZXF1ZXN0X29wcyA9IHsKJiM0MzsJLnJlcXVlc3RfY21kCQk9IEVUSFRPT0xfTVNHX1BPUlRfR0VULAomIzQzOwkucmVwbHlfY21kCQk9IEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLAomIzQzOwkuaGRyX2F0dHIJCT0gRVRIVE9PTF9BX1BPUlRfSEVBREVSLAomIzQzOwkucmVxX2luZm9fc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBvcnRfcmVxX2luZm8pLAomIzQzOwkucmVwbHlfZGF0YV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpLAomIzQzOwomIzQzOwkucGFyc2VfcmVxdWVzdAkJPSBwb3J0X3BhcnNlX3JlcXVlc3QsCiYjNDM7CS5wcmVwYXJlX2RhdGEJCT0gcG9ydF9wcmVwYXJlX2RhdGEsCiYjNDM7CS5yZXBseV9zaXplCQk9IHBvcnRfcmVwbHlfc2l6ZSwKJiM0MzsJLmZpbGxfcmVwbHkJCT0gcG9ydF9maWxsX3JlcGx5LAomIzQzO307CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDE1CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQ2FuZGlkYXRlIERldGVybWluYXRpb246IGV0aHRvb2wgTmV0bGluayBQb3J0IEluZm9ybWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIHNlcmllcyBoZXJlIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZCwgYEVUSFRPT0xfTVNHX1BPUlRfR0VUYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O2RvZXMgdGhpcyBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nPyYjMzQ7IFRoZSBhbnN3ZXIgaXMgbGVhbmluZyB0b3dhcmRzIHllcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZ2V0dGluZyBuZXcgZnVuY3Rpb25hbGl0eSB0byByZXRyaWV2ZSBwb3J0IGluZm9ybWF0aW9uIGZvciBuZXR3b3JrIGRldmljZXMsIHNwZWNpZmljYWxseSwgcGh5c2ljYWwgY29ubmVjdGlvbiBwb2ludHMuIEl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciBgcGh5X3BvcnRgIGluIGBwaHlfbGlua190b3BvbG9neWAuIFRoaXMgdG91Y2hlcyBhIGdvb2QgbnVtYmVyIG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCwgYG5ldC9ldGh0b29sL3BvcnQuY2AsIGFuZCBgbmV0L2V0aHRvb2wvbmV0bGluay5jYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc3VyZmFjZSBhcmVhLiBUaGlzIG5ldyBuZXRsaW5rIEFQSSBtZWFucyB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IHRyaWdnZXIgdGhlc2UgY2hhbmdlcy4gU28geWVzLCBpdCYjMzk7cyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHdoaWNoIHBvaW50cyB0b3dhcmRzIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQ09ORklHX0VUSFRPT0xfTkVUTElOS2AgaXMgcHJldHR5IHN0YW5kYXJkLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBlbmFibGVkLiBUaGVuLCB0aGVyZSYjMzk7cyBgQ09ORklHX1BIWUxJQmAgZm9yIGBwaHlfbGlua190b3BvbG9neS5jYCBhbmQgYHBoeV9kZXZpY2UuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBgQ09ORklHX1BIWUxJTktgIGlzIG9idmlvdXNseSBuZWVkZWQgZm9yIGBwaHlsaW5rLmNgLiBgQ09ORklHX01ESU9fREVWSUNFYCBpcyBsaWtlbHkgYWxzbyBkZWZhdWx0LCBhbmQgYENPTkZJR19TRlBgICptaWdodCogYmUgcmVsZXZhbnQgc2luY2UgYHBoeWxpbmsuY2AgYW5kIGBwaHlfZGV2aWNlLmNgIHVzZSBgc2ZwX2J1c2AsIGJ1dCB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBzZWVtcyBicm9hZGVyIHRoYW4ganVzdCBTRlAuCgpJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gVGhlIG5ldGxpbmsgY29tbWFuZCBpcyBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgIHNvIHRoYXQmIzM5O3MgYSBnb29kIHNlYXJjaCB0ZXJtLiBUaGUgZXRodG9vbCBjb2RlIGlzIHRoZSBmb2N1cywgYW5kIHRoZW4gSSYjMzk7bGwgbG9vayBhdCBhbGwgdGhlIHBoeSBjb2RlLiBUaGUgZnVuY3Rpb25zIHRoYXQgc3RhbmQgb3V0IGFyZTogYGV0aG5sX3BvcnRfZHVtcF9zdGFydGAsIGBldGhubF9wb3J0X2R1bXBpdGAsIGBldGhubF9wb3J0X2R1bXBfZG9uZWAsIGBwb3J0X3BhcnNlX3JlcXVlc3RgLCBgcG9ydF9wcmVwYXJlX2RhdGFgLCBgcG9ydF9yZXBseV9zaXplYCwgYHBvcnRfZmlsbF9yZXBseWAsIGFuZCB0aGVuIHRoZSBwb3J0IGFkZGluZy9yZW1vdmluZyBmdW5jdGlvbnMsIGBwaHlfbGlua190b3BvX2FkZF9wb3J0YCwgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgLCBgcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydGAsIGBwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydGAsIGBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnRgLCBgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0YCwgYHBoeV9hZGRfc2ZwX21vZF9wb3J0YCwgYHBoeV9kZWxfc2ZwX21vZF9wb3J0YCwgYHBoeV9zZXR1cF9zZnBfcG9ydGAuIFRoYXQgY292ZXJzIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgdG9wb2xvZ3kgdXBkYXRlcywgYW5kIFNGUCBpbnRlcmFjdGlvbnMuCgpJJiMzOTtsbCBjaGVjayB0aGUgYnVpbGQgcnVsZXMgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuICBgbmV0L2V0aHRvb2wvcG9ydC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCBpcyBlbmFibGVkLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gYGRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jYCwgYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCBhbGwgYnVpbGQgd2l0aCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZyBvcHRpb25zIChgQ09ORklHX1BIWUxJQmAgYW5kIGBDT05GSUdfUEhZTElOS2ApLgoKTGV0JiMzOTtzIGRvIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSBjb25maWdzLiBgQ09ORklHX0VUSFRPT0xfTkVUTElOS2AsIGBDT05GSUdfUEhZTElCYCwgYW5kIGBDT05GSUdfUEhZTElOS2AgYXJlIHVzdWFsbHkgZW5hYmxlZC4gV2UgbWlnaHQgbmVlZCBhIHNwZWNpZmljIGRyaXZlciwgbGlrZSBgQ09ORklHX01BQ0JgLCB0byBleGVyY2lzZSBgcGh5bGlua2AgZnVsbHksIGJ1dCB3ZSBjYW4gbGlzdCB0aGUgUEhZTElCIGFuZCBQSFlMSU5LIGNvbmZpZ3MgZm9yIG5vdy4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBTRlAgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBBIHF1aWNrIGdyZXAgZm9yIGBDT05GSUdfU0ZQYCBvciBgc2ZwX2J1c2Agc2hvdWxkIGZsYWcgYW55dGhpbmcgaW1wb3J0YW50IGluIHRoYXQgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU0ZQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnPTI4ND1DT05GSUdfWElMSU5YX0VNQUNMSVRFPXlcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnOjI4NTpDT05GSUdfU0ZQPW1cbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTI4Ni1DT05GSUdfQlJPQURDT01fUEhZPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZz02ND1DT05GSUdfTVZQUDI9eVxuYXJjaC9hcm0vY29uZmlncy9tdmVidV92N19kZWZjb25maWc6NjU6Q09ORklHX1NGUD15XG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZy02Ni1DT05GSUdfTUFSVkVMTF9QSFk9eVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSAmIzQzOz0gbWlpX3RpbWVzdGFtcGVyLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfU0ZQKVx0XHQmIzQzOz0gc2ZwLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcdFx0JiM0Mzs9IHNmcC1idXMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI4LW9iai15XHRcdFx0XHQmIzQzOz0gJChzZnAtb2JqLXkpICQoc2ZwLW9iai1tKVxuLS1cbmluY2x1ZGUvbGludXgvc2ZwLmg9NTY1PXN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3Ny1cbmluY2x1ZGUvbGludXgvc2ZwLmg6NTc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19TRlApXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3OS1jb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpzZnBfZ2V0X21vZHVsZV9jYXBzKHN0cnVjdCBzZnBfYnVzICpidXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTk4CgkJCQkJCQlvdXRwdXQ6IDMwMAoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU0ZQIENvbmZpZ3VyYXRpb24gYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYENPTkZJR19TRlBgIHRoaW5nLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwcmV0dHkgc3BlY2lmaWMgc2V0IG9mIGhhcmR3YXJlIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgU0ZQYCwgYFBIWUxJQmAsIGFuZCBgUEhZTElOS2Agd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhvc2UgYXJlIHRoZSBrZXkgcGllY2VzIHRvIHN0YXJ0IHdpdGguCgpJJiMzOTttIGdvaW5nIHRvIHB1bGwgb3V0IHRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIG1vc3QgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBhcmVhLiBCYXNlZCBvbiBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIGZvY3VzIG9uOiBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgYGV0aG5sX3BvcnRfZHVtcGl0YCwgYGV0aG5sX3BvcnRfZHVtcF9kb25lYCwgYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBgcG9ydF9maWxsX3JlcGx5YCwgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgLCBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGAsIGBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0YCwgYHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlfc2V0dXBfc2ZwX3BvcnRgLCBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AsIGFuZCBgcGh5X3NldF91cHN0cmVhbV9wb3J0YC4gVGhlc2UgZnVuY3Rpb25zIHNlZW0gdG8gY292ZXIgdGhlIGNvcmUgYXNwZWN0cyBvZiBwb3J0IG1hbmFnZW1lbnQsIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3RlbnRpYWxseSBkZXZpY2UgZGlzY292ZXJ5IHJlbGF0ZWQgdG8gU0ZQcy4KCkkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgcG9ydF9kdW1wX29uZV9kZXZgIGFuZCBgcG9ydF9kdW1wX2FsbF9kZXZgIGFyZSBhbHNvIHJlbGV2YW50IHRvIHdoYXQgSSYjMzk7bSBkb2luZy4gWWVwLCB0aGV5IGFwcGVhciB0byBiZSB2YWx1YWJsZSBpbiB0aGlzIGNvbnRleHQgYXMgd2VsbC4KCk5vdyB0aGF0IEkgaGF2ZSBhIGNsZWFyIHNldCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIEkmIzM5O20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkIGFuZCBmaW5hbGl6ZSBteSBhc3Nlc3NtZW50LCBsaWtlbHkgYnkgY2FsbGluZyBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtQSFlMSU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O3BvcnRfcGFyc2VfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDtwb3J0X3ByZXBhcmVfZGF0YSYjMzQ7LAogICAgJiMzNDtwb3J0X3JlcGx5X3NpemUmIzM0OywKICAgICYjMzQ7cG9ydF9maWxsX3JlcGx5JiMzNDssCiAgICAmIzM0O3BvcnRfZHVtcF9vbmVfZGV2JiMzNDssCiAgICAmIzM0O3BvcnRfZHVtcF9hbGxfZGV2JiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb19kZWxfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0JiMzNDssCiAgICAmIzM0O3BoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfYWRkX3NmcF9tb2RfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfc2V0dXBfc2ZwX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyYjMzQ7LAogICAgJiMzNDtwaHlfc2V0X3Vwc3RyZWFtX3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQgKEVUSFRPT0xfTVNHX1BPUlRfR0VUKSB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBQSFkgYW5kIHBoeWxpbmsgc3Vic3lzdGVtcyB0byB0cmFjayBhbmQgZXhwb3NlIHRoZXNlIHBvcnRzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7UEhZTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBpdCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBfZG9uZSYjMzQ7LAogICAgJiMzNDtwb3J0X3BhcnNlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7cG9ydF9wcmVwYXJlX2RhdGEmIzM0OywKICAgICYjMzQ7cG9ydF9yZXBseV9zaXplJiMzNDssCiAgICAmIzM0O3BvcnRfZmlsbF9yZXBseSYjMzQ7LAogICAgJiMzNDtwb3J0X2R1bXBfb25lX2RldiYjMzQ7LAogICAgJiMzNDtwb3J0X2R1bXBfYWxsX2RldiYjMzQ7LAogICAgJiMzNDtwaHlfbGlua190b3BvX2FkZF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fZGVsX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2FkZF9zZnBfbW9kX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X3NldHVwX3NmcF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMmIzM0OywKICAgICYjMzQ7cGh5X3NldF91cHN0cmVhbV9wb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIChFVEhUT09MX01TR19QT1JUX0dFVCkgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgcGh5c2ljYWwgY29ubmVjdGlvbiBwb2ludHMgb2YgYSBuZXR3b3JrIGRldmljZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgUEhZIGFuZCBwaHlsaW5rIHN1YnN5c3RlbXMgdG8gdHJhY2sgYW5kIGV4cG9zZSB0aGVzZSBwb3J0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIHRoZW0gaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6NTI6MTIuODIzNjUyMzAzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyODQ1ODAzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0ZQXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlBIWUxJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldGhubF9wb3J0X2R1bXBfc3RhcnRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcGl0XCIsXG4gICAgXCJldGhubF9wb3J0X2R1bXBfZG9uZVwiLFxuICAgIFwicG9ydF9wYXJzZV9yZXF1ZXN0XCIsXG4gICAgXCJwb3J0X3ByZXBhcmVfZGF0YVwiLFxuICAgIFwicG9ydF9yZXBseV9zaXplXCIsXG4gICAgXCJwb3J0X2ZpbGxfcmVwbHlcIixcbiAgICBcInBvcnRfZHVtcF9vbmVfZGV2XCIsXG4gICAgXCJwb3J0X2R1bXBfYWxsX2RldlwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19hZGRfcG9ydFwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19kZWxfcG9ydFwiLFxuICAgIFwicGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydFwiLFxuICAgIFwicGh5bGlua19hZGRfc2ZwX21vZF9wb3J0XCIsXG4gICAgXCJwaHlfYWRkX3NmcF9tb2RfcG9ydFwiLFxuICAgIFwicGh5X3NldHVwX3NmcF9wb3J0XCIsXG4gICAgXCJwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzXCIsXG4gICAgXCJwaHlfc2V0X3Vwc3RyZWFtX3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZCAoRVRIVE9PTF9NU0dfUE9SVF9HRVQpIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIFBIWSBhbmQgcGh5bGluayBzdWJzeXN0ZW1zIHRvIHRyYWNrIGFuZCBleHBvc2UgdGhlc2UgcG9ydHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6NTI6MTIuODIzNjU5NzQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzMzg2NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjQ1YThiYWMwM2NkODE2NDdiN2JlYzFlOGI5OWMxODFkMmE0OTZhMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAwMDo1MjoxMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxcbmluZGV4IDVkZDRkMWI1ZDk0YmJiLi5kMTE1MWFmMzM1Y2ExMCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxcbkBAIC0yMTAsNiArMjEwLDEwIEBAIGRlZmluaXRpb25zOlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogZGlzY2FyZFxcbiAgICAgICAgIHZhbHVlOiAzMVxcbisgIC1cXG4rICAgIG5hbWU6IHBvcnQtdHlwZVxcbisgICAgdHlwZTogZW51bVxcbisgICAgZW50cmllczogW21kaSwgc2ZwXVxcbiBcXG4gYXR0cmlidXRlLXNldHM6XFxuICAgLVxcbkBAIC0xOTA1LDYgKzE5MDksMzIgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgbmFtZTogbGlua1xcbiAgICAgICAgIHR5cGU6IG5lc3RcXG4gICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90XFxuKyAgLVxcbisgICAgbmFtZTogcG9ydFxcbisgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnRcXG4rICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBoZWFkZXJcXG4rICAgICAgICB0eXBlOiBuZXN0XFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlclxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogaWRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1tb2Rlc1xcbisgICAgICAgIHR5cGU6IG5lc3RcXG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtaW50ZXJmYWNlc1xcbisgICAgICAgIHR5cGU6IG5lc3RcXG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiB0eXBlXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZW51bTogcG9ydC10eXBlXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiB1cHN0cmVhbS1wb3J0XFxuKyAgICAgICAgdHlwZTogdTMyXFxuIFxcbiBvcGVyYXRpb25zOlxcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXFxuQEAgLTI4NTksNiArMjg4OSwyNiBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIHdvcnN0LWNoYW5uZWxcXG4gICAgICAgICAgICAgLSBsaW5rXFxuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHBvcnQtZ2V0XFxuKyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZVxcbitcXG4rICAgICAgYXR0cmlidXRlLXNldDogcG9ydFxcbitcXG4rICAgICAgZG86IFxcdTAwMjZwb3J0LWdldC1vcFxcbisgICAgICAgIHJlcXVlc3Q6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGlkXFxuKyAgICAgICAgcmVwbHk6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGlkXFxuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLW1vZGVzXFxuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLWludGVyZmFjZXNcXG4rICAgICAgICAgICAgLSB0eXBlXFxuKyAgICAgICAgICAgIC0gdXBzdHJlYW0tcG9ydFxcbisgICAgICBkdW1wOiAqcG9ydC1nZXQtb3BcXG4gXFxuIG1jYXN0LWdyb3VwczpcXG4gICBsaXN0OlxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XFxuaW5kZXggZTkyYWJmNDVmYWY1MGQuLmI0MzI2Yzg5YjA3NTFmIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcXG5AQCAtMjUzNyw2ICsyNTM3LDM5IEBAIFdpdGhpbiBlYWNoIGNoYW5uZWwgbmVzdCwgb25seSB0aGUgbWV0cmljcyBzdXBwb3J0ZWQgYnkgdGhlIFBIWSB3aWxsIGJlIHByZXNlbnQuXFxuIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW5cXG4gYGBpbmNsdWRlL2xpbnV4L3BoeS5oYGAuXFxuIFxcbitQT1JUX0dFVFxcbis9PT09PT09PVxcbitcXG4rUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsXFxuK3JlZmVycmVkIHRvIGFzIFxcXCJwb3J0c1xcXCIuIFVzZXIgbmVlZHMgdG8gc3BlY2lmeSBhIFBPUlRfSUQgZm9yIHRoZSBETyBvcGVyYXRpb24sXFxuK2luIHdoaWNoIGNhc2UgdGhlIERPIHJlcXVlc3QgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNwZWNpZmljIHBvcnQuXFxuK1xcbitBcyB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBwb3J0LCB0aGUgRFVNUCBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gbGlzdCB0aGVcXG4rcG9ydHMgcHJlc2VudCBvbiBhIGdpdmVuIGludGVyZmFjZSwgYnkgcGFzc2luZyBhbiBpbnRlcmZhY2UgaW5kZXggb3IgbmFtZSBpblxcbit0aGUgZHVtcCByZXF1ZXN0LlxcbitcXG4rUmVxdWVzdCBjb250ZW50czpcXG4rXFxuKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcXG4rICBgYEVUSFRPT0xfQV9QT1JUX0lEYGAgICAgICAgICAgICAgICAgIHUzMiAgICAgcG9ydCBpZFxcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitLZXJuZWwgcmVzcG9uc2UgY29udGVudHM6XFxuK1xcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAgYGBFVEhUT09MX0FfUE9SVF9IRUFERVJgYCAgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcXG4rICBgYEVUSFRPT0xfQV9QT1JUX0lEYGAgICAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCdzIHVuaXF1ZSBpZGVudGlmaWVyLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBuZXRkZXZpY2UuXFxuKyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVNgYCAgICAgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBsaW5rbW9kZXNcXG4rICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTYGAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIE1JSVxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXNcXG4rICBgYEVUSFRPT0xfQV9QT1JUX1RZUEVgYCAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCB0eXBlXFxuKyAgYGBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUYGAgICAgICAgIHUzMiAgICAgSWYgYW55LCB0aGUgaW5kZXggb2YgdGhlIE1JSVxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgdGhhdCBmZWVkcyBpbnRvIHRoaXNcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LlxcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbiBSZXF1ZXN0IHRyYW5zbGF0aW9uXFxuID09PT09PT09PT09PT09PT09PT1cXG4gXFxuQEAgLTI2NDcsNCArMjY4MCw1IEBAIGFyZSBuZXRsaW5rIG9ubHkuXFxuICAgbi9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19QSFlfR0VUYGBcXG4gICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgXFxuICAgYGBTSU9DU0hXVFNUQU1QYGAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19UU0NPTkZJR19TRVRgYFxcbisgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgYFxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcXG5pbmRleCA2ZTI4ZDkwOTRiY2UzZi4uMmE5YjFlYzkzYjcwZjkgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcXG5AQCAtOTksMTMgKzk5LDI5IEBAIHdpbGwgZXZlbnR1YWxseSBiZSBhYmxlIHRvIHJlcG9ydCBpdHMgb3duIGtzZXR0aW5nczo6XFxuICAgICAgICAgICAgIChfX19fXyktLS0tLXwgUG9ydCB8XFxuICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0rXFxuIFxcbitTRlAgcG9ydHNcXG4rPT09PT09PT09XFxuK1xcbitTRlAgaW50ZXJmYWNlcyBpbnZvbHZlIDIgZGlzdGluY3QgY29tcG9uZW50cywgZWFjaCByZXByZXNlbnRlZCBieVxcbithIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcXHUwMDNjcGh5X3BvcnRcXHUwMDNlYCBpbnN0YW5jZSA6XFxuK1xcbisgLSBUaGUgU0ZQIGNhZ2UgaXRzZWxmIGlzIGEgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFxcdTAwM2NwaHlfcG9ydFxcdTAwM2VgLiBJdCdzIHNwZWNpYWxcXG4rICAgaW4gdGhhdCBpdCdzIG5vdCBhbiBNREkgaW50ZXJmYWNlLCBidXQgcmF0aGVyIGEgaG90LXBsdWdnYWJsZSBNSUkuXFxuKyAgIFRoZSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXFx1MDAzY3BoeV9wb3J0XFx1MDAzZWAgYXNzb2NpYXRlZCB0byBpdCBsaXN0cyB0aGUgZGlmZmVyZW50XFxuKyAgIE1JSSBpbnRlcmZhY2VzIHdlIGNhbiB1c2Ugb24gdGhlIGNhZ2UuXFxuK1xcbisgLSBUaGUgU0ZQIG1vZHVsZSwgd2hlbiBpbnNlcnRlZCwgd2lsbCBhbHNvIGJlIGFzc29jaWF0ZWQgdG8gYVxcbisgICA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXFx1MDAzY3BoeV9wb3J0XFx1MDAzZWAsIHRoYXQgcmVwcmVzZW50cyB0aGUgdmFyaW91cyBsaW5rbW9kZXNcXG4rICAgdGhhdCBpdCBnaXZlcyBhY2Nlc3MgdG8uIFRoZSBtb2R1bGUncyA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXFx1MDAzY3BoeV9wb3J0XFx1MDAzZWBcXG4rICAgZG9lc24ndCBzdXBlcnNlZGUgdGhlIGNhZ2UncyBwb3J0LCBpdCByZWZlcmVuY2VzIGl0IHRocm91Z2hcXG4rICAgdGhlIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcXHUwMDNjcGh5X3BvcnRcXHUwMDNlYCA6YzptZW1iZXI6YHVwc3RyZWFtX3BvcnRgIGZpZWxkLlxcbitcXG4gTmV4dCBzdGVwc1xcbiA9PT09PT09PT09XFxuIFxcbi1BcyBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgb25seSBwb3J0cyBjb250cm9sbGVkIGJ5IFBIWSBkZXZpY2VzIGFyZVxcbi1zdXBwb3J0ZWQuIFRoZSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gYWRkIHRoZSBOZXRsaW5rIEFQSSB0byBleHBvc2UgdGhlc2VcXG4tdG8gdXNlcnNwYWNlIGFuZCBhZGQgc3VwcG9ydCBmb3IgcmF3IHBvcnRzIChjb250cm9sbGVkIGJ5IHNvbWUgZmlybXdhcmUsIGFuZCBkaXJlY3RseVxcbi1tYW5hZ2VkIGJ5IHRoZSBOSUMgZHJpdmVyKS5cXG4rQXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50YXRpb24sIHRoZSBwb3J0J3MgcHJlc2VuY2UgYW5kIGluZm9ybWF0aW9uIGNhbiBvbmx5XFxuK2JlIHF1ZXJpZWQsIGFuZCBpdCdzIG5vdCBwb3NzaWJsZSB0byBjaGFuZ2UgYW55IG9mIHRoZSBwb3J0J3Mgc2V0dGluZ3Mgb3Igc2VsZWN0XFxuK3doaWNoIG9uZSBzaG91bGQgYmUgdXNlZC5cXG4gXFxuIEFub3RoZXIgcGFyYWxsZWwgdGFzayBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgTUlJIG11eGluZyBmcmFtZXdvcmsgdG8gYWxsb3cgdGhlXFxuLWNvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZXIgbXVsdGktcG9ydCBzZXR1cHMuXFxuK2NvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZW4gbXVsdGktcG9ydCBzZXR1cHMuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAwMGU3YjI2ZTBhMjNmYS4uZDMzODgxZWMxZjYyNTUgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xODc5Miw2ICsxODc5Miw3IEBAIEY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ldGhlcm5ldC1jb25uZWN0b3IueWFtbFxcbiBGOlxcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcXG4gRjpcXHRkcml2ZXJzL25ldC9waHkvcGh5X3BvcnQuY1xcbiBGOlxcdGluY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxcbitGOlxcdG5ldC9ldGh0b29sL3BvcnQuY1xcbiBLOlxcdHN0cnVjdFxcXFxzK3BoeV9wb3J0fHBoeV9wb3J0X1xcbiBcXG4gTkVUV09SS0lORyBbR0VORVJBTF1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxcbmluZGV4IDQyMTA4OGU2ZjZlOGYxLi5lYzNkMzlhMGFlMDZiZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXFxuQEAgLTY2LDUgKzY2LDcgQEAgdm9pZCBwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXFxuIFxcdFxcdFxcdFxcdCAgIGVudW0gZXRodG9vbF9saW5rX21lZGl1bSBtZWRpdW0sXFxuIFxcdFxcdFxcdFxcdCAgIGludCBsYW5lcyk7XFxuIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2Rlcyk7XFxuK3ZvaWQgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyh1bnNpZ25lZCBsb25nICp0bywgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTtcXG4gXFxuICNlbmRpZiAvKiBfX1BIWV9DQVBTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xcbmluZGV4IDk0MmQ0MzE5MTU2MWUyLi41NThlNGRmNGQ2M2MwOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jXFxuQEAgLTQ0NSwzICs0NDUsMjkgQEAgdTMyIHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxcbiBcXHRyZXR1cm4gbWVkaXVtcztcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKTtcXG4rXFxuKy8qKlxcbisgKiBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKCkgLSBGaWx0ZXIgbGlua21vZGVzIHdpdGggYW4gaW50ZXJmYWNlIGxpc3RcXG4rICogQHRvOiBTdG9yZXMgdGhlIGZpbHRlcmVkIGxpbmttb2Rlc1xcbisgKiBAZnJvbTogTGlua21vZGVzIHRvIGZpbHRlclxcbisgKiBAaW50ZXJmYWNlczogQml0ZmllbGQgb2YgcGh5X2ludGVyZmFjZV90IHRoYXQgd2UgdXNlIGZvciBmaWx0ZXJpbmdcXG4rICpcXG4rICogRmlsdGVyIHRoZSBwcm92aWRlZCBsaW5rbW9kZXMsIG9ubHkgdG8ga2VlcCB0aGUgb25lcyB3ZSBjYW4gcG9zc2libHkgYWNoaWV2ZVxcbisgKiB3aGVuIHVzaW5nIGFueSBvZiB0aGUgcHJvdmlkZWQgTUlJIGludGVyZmFjZXMuXFxuKyAqL1xcbit2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKVxcbit7XFxuK1xcdF9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKGlmYWNlc19zdXBwb3J0ZWQpID0ge307XFxuK1xcdHVuc2lnbmVkIGludCBpZmFjZXNfY2FwcyA9IDA7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcbitcXHRmb3JfZWFjaF9zZXRfYml0KGludGVyZmFjZSwgaW50ZXJmYWNlcywgUEhZX0lOVEVSRkFDRV9NT0RFX01BWClcXG4rXFx0XFx0aWZhY2VzX2NhcHMgfD0gcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UoaW50ZXJmYWNlKTtcXG4rXFxuK1xcdHBoeV9jYXBzX2xpbmttb2RlcyhpZmFjZXNfY2FwcywgaWZhY2VzX3N1cHBvcnRlZCk7XFxuK1xcbitcXHRsaW5rbW9kZV9hbmQodG8sIGZyb20sIGlmYWNlc19zdXBwb3J0ZWQpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDA2MTUyMjg0NTllZjQyLi5kNTI1MTVlN2UzMDMwMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbkBAIC0xNDkwLDExICsxNDkwLDIyIEBAIHN0YXRpYyBpbnQgcGh5X3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldjtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmIChkZXYpXFxuLVxcdFxcdHJldHVybiBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7XFxuK1xcdHBoeWRldi1cXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gdHJ1ZTtcXG4rXFx0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0KTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHQvKiBJZiB3ZSBhcmVuJ3QgYXR0YWNoZWQgdG8gYSBuZXRkZXYsIHdlIGNhbid0IGFkZCB0aGUgU0ZQIFBIWSB0byBpdHNcXG4rXFx0ICogdG9wb2xvZ3kuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWRldilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTUxMiw4ICsxNTIzLDEyIEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfZGlzY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXFxuIFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2O1xcbiBcXG4rXFx0cGh5ZGV2LVxcdTAwM2VoYXNfc2ZwX21vZF9waHkgPSBmYWxzZTtcXG4rXFxuIFxcdGlmIChkZXYpXFxuIFxcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeSk7XFxuK1xcbitcXHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBOVUxMKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE2MTcsNiArMTYzMiw3NyBAQCBzdGF0aWMgdm9pZCBwaHlfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSlcXG4gXFx0XFx0cG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VsaW5rX2Rvd24ocG9ydCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcGh5X2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0LyogQ3JlYXRlIG1vZCBwb3J0ICovXFxuK1xcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xcbitcXHRpZiAoIXBvcnQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cG9ydC1cXHUwMDNlYWN0aXZlID0gdHJ1ZTtcXG4rXFxuK1xcdGNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyk7XFxuK1xcbitcXHRwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHBvcnQtXFx1MDAzZXN1cHBvcnRlZCwgY2Fwcy1cXHUwMDNlbGlua19tb2RlcyxcXG4rXFx0XFx0XFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0LVxcdTAwM2VpbnRlcmZhY2VzKTtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldikge1xcbitcXHRcXHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2LCBwb3J0KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHdlIGRvbid0IHVzZSBwaHlfYWRkX3BvcnQoKSBoZXJlIGFzIHRoZSBtb2R1bGUgcG9ydCBpc24ndCBhIGRpcmVjdFxcbitcXHQgKiBpbnRlcmZhY2UgZnJvbSB0aGUgUEhZLCBidXQgcmF0aGVyIGFuIGV4dGVuc2lvbiB0byB0aGUgc2ZwLWJ1cywgdGhhdFxcbitcXHQgKiBpcyBhbHJlYWR5IHJlcHJlc2VudGVkIGJ5IGl0cyBvd24gcGh5X3BvcnRcXG4rXFx0ICovXFxuK1xcdHBoeWRldi1cXHUwMDNlbW9kX3BvcnQgPSBwb3J0O1xcbitcXG4rXFx0cG9ydC1cXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBoeWRldi1cXHUwMDNlc2ZwX2NhZ2VfcG9ydC1cXHUwMDNlaWQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGh5X2RlbF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpZiAoIXBoeWRldi1cXHUwMDNlbW9kX3BvcnQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldilcXG4rXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldiwgcGh5ZGV2LVxcdTAwM2Vtb2RfcG9ydCk7XFxuK1xcbitcXHRwaHlfcG9ydF9kZXN0cm95KHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpO1xcbitcXHRwaHlkZXYtXFx1MDAzZW1vZF9wb3J0ID0gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwaHlfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcXG4re1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XFxuK1xcbitcXHQvKiBJZiB0aGVyZSdzIGEgZG93bnN0cmVhbSBTRlAgbW9kdWxlLCBhbmQgaXQgZG9lc24ndCBjb250YWluIGEgUEhZXFxuK1xcdCAqIGRldmljZSwgbGV0J3MgY3JlYXRlIGEgcGh5X3BvcnQgdG8gcmVwcmVzZW50IHRoYXQgbW9kdWxlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFwaHlkZXYtXFx1MDAzZWhhc19zZnBfbW9kX3BoeSlcXG4rXFx0XFx0cmV0dXJuIHBoeV9hZGRfc2ZwX21vZF9wb3J0KHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGh5X3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSlcXG4re1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XFxuK1xcbitcXHQvKiBDYWxsZWQgdXBvbiBtb2R1bGUgcmVtb3ZhbCBvciB1cHN0cmVhbSByZW1vdmFsICovXFxuK1xcdGlmICghcGh5ZGV2LVxcdTAwM2VoYXNfc2ZwX21vZF9waHkpXFxuK1xcdFxcdHBoeV9kZWxfc2ZwX21vZF9wb3J0KHBoeWRldik7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcXG4gXFx0LmF0dGFjaCA9IHBoeV9zZnBfYXR0YWNoLFxcbiBcXHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXFxuQEAgLTE2MjYsNiArMTcxMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcXG4gXFx0LmxpbmtfZG93biA9IHBoeV9zZnBfbGlua19kb3duLFxcbiBcXHQuY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Nvbm5lY3RfcGh5LFxcbiBcXHQuZGlzY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Rpc2Nvbm5lY3RfcGh5LFxcbitcXHQubW9kdWxlX3N0YXJ0ID0gcGh5X3NmcF9tb2R1bGVfc3RhcnQsXFxuK1xcdC5tb2R1bGVfc3RvcCA9IHBoeV9zZnBfbW9kdWxlX3N0b3AsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHBoeV9hZGRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuQEAgLTE2NzMsMTMgKzE3NjEsMTMgQEAgc3RhdGljIHZvaWQgcGh5X2RlbF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcXG4gXFx0cGh5ZGV2LVxcdTAwM2VuX3BvcnRzLS07XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIXBvcnQpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuIFxcdHBvcnQtXFx1MDAzZXBhcmVudF90eXBlID0gUEhZX1BPUlRfUEhZO1xcbiBcXHRwb3J0LVxcdTAwM2VwaHkgPSBwaHlkZXY7XFxuQEAgLTE2OTQsMTAgKzE3ODIsMTIgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0ICogd2hlbiBhdHRhY2hpbmcgdGhlIHBvcnQgdG8gdGhlIHBoeWRldi5cXG4gXFx0ICovXFxuIFxcdHJldCA9IHBoeV9hZGRfcG9ydChwaHlkZXYsIHBvcnQpO1xcbi1cXHRpZiAocmV0KVxcbitcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcdH1cXG4gXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiBwb3J0O1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTcwNiwyNSArMTc5Niw0OSBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiAgKi9cXG4gc3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gTlVMTDtcXG4gXFx0c3RydWN0IHNmcF9idXMgKmJ1cztcXG4tXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5md25vZGUpIHtcXG4tXFx0XFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XFxuLVxcdFxcdGlmIChJU19FUlIoYnVzKSlcXG4tXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYnVzKTtcXG4rXFx0aWYgKCFwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LmZ3bm9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBidXM7XFxuK1xcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5md25vZGUpO1xcbitcXHRpZiAoSVNfRVJSKGJ1cykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGJ1cyk7XFxuIFxcbi1cXHRcXHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgXFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcXG4tXFx0XFx0c2ZwX2J1c19wdXQoYnVzKTtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gYnVzO1xcbiBcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gTlVMTDtcXG4rXFx0aWYgKGJ1cykge1xcbitcXHRcXHRwb3J0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XFxuK1xcdFxcdGlmIChJU19FUlIocG9ydCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihwb3J0KTtcXG4rXFx0XFx0XFx0cG9ydCA9IE5VTEw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3NmcDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZXNmcF9idXMpXFxuLVxcdFxcdHJldCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xcbitcXHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgXFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcG9ydDtcXG4rXFxuK1xcdC8qIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgZ3JhYnMgYSByZWYgdG8gdGhlIHNmcCBidXMgb24gc3VjY2VzcywgaXQnc1xcbitcXHQgKiBzYWZlIHRvIHJlbGVhc2UgaXQgbm93LlxcbitcXHQgKi9cXG4rXFx0c2ZwX2J1c19wdXQoYnVzKTtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbitcXG4rb3V0X3BvcnQ6XFxuK1xcdGlmIChwb3J0KSB7XFxuK1xcdFxcdHBoeV9kZWxfcG9ydChwaHlkZXYsIHBvcnQpO1xcbitcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbitcXHR9XFxuK291dF9zZnA6XFxuK1xcdHNmcF9idXNfcHV0KGJ1cyk7XFxuK1xcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTE4MTUsNiArMTkyOSwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0XFx0ZXJyID0gcGh5X2xpbmtfdG9wb19hZGRfcGh5KGRldiwgcGh5ZGV2LCBQSFlfVVBTVFJFQU1fTUFDLCBkZXYpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpIHtcXG4rXFx0XFx0XFx0ZXJyID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFNvbWUgRXRoZXJuZXQgZHJpdmVycyB0cnkgdG8gY29ubmVjdCB0byBhIFBIWSBkZXZpY2UgYmVmb3JlXFxuQEAgLTE5NTEsNiArMjA3MSw4IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRcXHRwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldi1cXHUwMDNlcGh5ZGV2ID0gTlVMTDtcXG4gXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xcbiBcXHRcXHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xcbitcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2Vtb2RfcG9ydClcXG4rXFx0XFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpO1xcbiBcXHR9XFxuIFxcbiBcXHRwaHlkZXYtXFx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XFxuQEAgLTM1NzksNiArMzcwMSwyOCBAQCBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcXG4gXFxuKy8qKlxcbisgKiBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoKSAtIFNldHMgdGhlIHBoeV9wb3J0IGNvbnRyb2xsaW5nIHRoZSBNSUkgdGhpcyBQSFkgaXNcXG4rICpcXHRcXHRcXHQgICAgIGF0dGFjaGVkIHRvLlxcbisgKiBAcGh5ZGV2OiBwb2ludGVyIHRvIHRoZSBQSFkgZGV2aWNlIHdlIHNldCB0aGUgdXBzdHJlYW0gb2YuXFxuKyAqIEBwb3J0OiBUaGUgcGh5X3BvcnQgdXBzdHJlYW0gb2YgdGhpcyBQSFksIGNhbiBiZSBOVUxMLlxcbisgKi9cXG4rdm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqbG9jYWxfcG9ydDtcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwb3J0O1xcbitcXG4rXFx0cGh5X2Zvcl9lYWNoX3BvcnQocGh5ZGV2LCBsb2NhbF9wb3J0KVxcbitcXHRcXHRpZiAocG9ydClcXG4rXFx0XFx0XFx0bG9jYWxfcG9ydC1cXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXFx1MDAzZWlkO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGxvY2FsX3BvcnQtXFx1MDAzZXVwc3RyZWFtX3BvcnQgPSAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9zZXRfdXBzdHJlYW1fcG9ydCk7XFxuK1xcbiAvKipcXG4gICogZndub2RlX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGZ3bm9kZSwgZmluZCB0aGUgbWRpb19kZXZpY2VcXG4gICogQGZ3bm9kZTogcG9pbnRlciB0byB0aGUgbWRpb19kZXZpY2UncyBmd25vZGVcXG5AQCAtMzgxNyw2ICszOTYxLDcgQEAgc3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFxuIFxcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyk7XFxuIFxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XFxuK1xcdHBoeWRldi1cXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IE5VTEw7XFxuIFxcbiBcXHRwaHlfY2xlYW51cF9wb3J0cyhwaHlkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xcbmluZGV4IDQxMzRkZTdhZTMxM2QyLi41ZTEzNWFiNjM2YzBiNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXFxuQEAgLTcsNiArNyw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfcG9ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbkBAIC0yMywxNyArMjQsODEgQEAgc3RhdGljIGludCBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2dG9wby1cXHUwMDNlcGh5cywgWEFfRkxBR1NfQUxMT0MxKTtcXG4gXFx0dG9wby1cXHUwMDNlbmV4dF9waHlfaW5kZXggPSAxO1xcbiBcXG4rXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIFhBX0ZMQUdTX0FMTE9DMSk7XFxuK1xcdHRvcG8tXFx1MDAzZW5leHRfcG9ydF9pbmRleCA9IDE7XFxuK1xcbiBcXHRkZXYtXFx1MDAzZWxpbmtfdG9wbyA9IHRvcG87XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlbGlua190b3BvKVxcbitcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VsaW5rX3RvcG87XFxuK1xcbitcXHQvKiBUaGUgdG9wb2xvZ3kgaXMgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIHdlIGFkZCBhbiBvYmplY3QgdG8gaXQuXFxuK1xcdCAqIEl0IGlzIGZyZWVkIGFsb25nc2lkZSB0aGUgbmV0ZGV2LiBJdCBjYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlXFxuK1xcdCAqIGNvbnRleHRzOlxcbitcXHQgKiAgLSBJdCBjYW4gYmUgY2FsbGVkIGZyb20gLnByb2JlKCkgOiBObyBydG5sLCBubyBuZXRkZXZfbG9ja1xcbitcXHQgKiAgLSAubmRvX29wZW4oKSA6IHJ0bmwgYW5kIHBvc3NpYmx5IG5ldGRldl9sb2NrXFxuK1xcdCAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdFxcbitcXHQgKlxcbitcXHQgKiAgSG93ZXZlciwgd2UgY2FuJ3QgcmVhbGx5IGhhdmUgcmFjZXMgOlxcbitcXHQgKiAgLSBJZiB3ZSBoYXZlIGEgUEhZLCBwaHlfbGlua190b3BvX2FkZF9waHkoKSB3aWxsIGFsd2F5cyBydW4gZmlyc3RcXG4rXFx0ICogICAgYW5kIHRyaWdnZXIgdGhlIGFsbG9jLiBPbmx5IHRoZW4gdGhlIHBvcnRzIGNhbiBiZSBhZGRlZCB0aHJvdWdoXFxuK1xcdCAqICAgIHBoeWxpYiBvZiBzZnAuXFxuK1xcdCAqICAtIElmIHdlIGRvbid0LCB0aGUgU0ZQIHBvcnQgZm9yIHRoZSBjYWdlIGlzIHJlZ2lzdGVyZWQgZmlyc3QsIGFuZFxcbitcXHQgKiAgICBvbmx5IHRoZW4gb3RoZXIgcG9ydHMvUEhZcyBjYW4gYmUgcmVnaXN0ZXJlZC5cXG4rXFx0ICovXFxuK1xcdHJldCA9IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXG4rXFx0cmV0dXJuIGRldi1cXHUwMDNlbGlua190b3BvO1xcbit9XFxuK1xcbitpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7XFxuK1xcdGlmIChJU19FUlIodG9wbykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xcbitcXG4rXFx0LyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovXFxuK1xcdGlmIChwb3J0LVxcdTAwM2VpZClcXG4rXFx0XFx0cmV0ID0geGFfaW5zZXJ0KFxcdTAwMjZ0b3BvLVxcdTAwM2Vwb3J0cywgcG9ydC1cXHUwMDNlaWQsIHBvcnQsIEdGUF9LRVJORUwpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldCA9IHhhX2FsbG9jX2N5Y2xpYyhcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIFxcdTAwMjZwb3J0LVxcdTAwM2VpZCwgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgeGFfbGltaXRfMzJiLCBcXHUwMDI2dG9wby1cXHUwMDNlbmV4dF9wb3J0X2luZGV4LFxcbitcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19hZGRfcG9ydCk7XFxuK1xcbit2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cXHUwMDNlbGlua190b3BvO1xcbitcXG4rXFx0aWYgKCF0b3BvKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR4YV9lcmFzZShcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIHBvcnQtXFx1MDAzZWlkKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2RlbF9wb3J0KTtcXG4rXFxuIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbiBcXHRcXHRcXHQgIGVudW0gcGh5X3Vwc3RyZWFtIHVwdCwgdm9pZCAqdXBzdHJlYW0pXFxuIHtcXG4tXFx0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVxcdTAwM2VsaW5rX3RvcG87XFxuK1xcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbztcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBldGh0b29sIG9wcyBtYXkgcnVuIHdpdGhvdXQgcnRubF9sb2NrLCBhbmQgcnRubF9sb2NrIGlzIHdoYXRcXG5AQCAtNDUsMTMgKzExMCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKFdBUk5fT05fT05DRShuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0aWYgKCF0b3BvKSB7XFxuLVxcdFxcdHJldCA9IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShkZXYpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0XFx0dG9wbyA9IGRldi1cXHUwMDNlbGlua190b3BvO1xcbi1cXHR9XFxuK1xcdHRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpO1xcbitcXHRpZiAoSVNfRVJSKHRvcG8pKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUih0b3BvKTtcXG4gXFxuIFxcdHBkbiA9IGt6YWxsb2Nfb2JqKCpwZG4pO1xcbiBcXHRpZiAoIXBkbilcXG5AQCAtODYsOCArMTQ3LDIwIEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4rXFx0LyogQWRkIGFsbCB0aGUgUEhZJ3MgcG9ydHMgdG8gdGhlIHRvcG9sb2d5ICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeS1cXHUwMDNlcG9ydHMsIGhlYWQpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBvcnQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGRlbF9wb3J0cztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbitkZWxfcG9ydHM6XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShwb3J0LCBcXHUwMDI2cGh5LVxcdTAwM2Vwb3J0cywgaGVhZClcXG4rXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xcbitcXG4rXFx0eGFfZXJhc2UoXFx1MDAyNnRvcG8tXFx1MDAzZXBoeXMsIHBoeS1cXHUwMDNlcGh5aW5kZXgpO1xcbiBlcnI6XFxuIFxcdGtmcmVlKHBkbik7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTk5LDEwICsxNzIsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiBcXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXFx1MDAzZWxpbmtfdG9wbztcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuIFxcbiBcXHRpZiAoIXRvcG8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeS1cXHUwMDNlcG9ydHMsIGhlYWQpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwb3J0KTtcXG4rXFxuIFxcdHBkbiA9IHhhX2VyYXNlKFxcdTAwMjZ0b3BvLVxcdTAwM2VwaHlzLCBwaHktXFx1MDAzZXBoeWluZGV4KTtcXG4gXFxuIFxcdC8qIFdlIGRlbGV0ZSB0aGUgUEhZIGZyb20gdGhlIHRvcG9sb2d5LCBob3dldmVyIHdlIGRvbid0IHJlLXNldCB0aGVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG5pbmRleCA1OWRmZTM1YWZhNTRmYy4uNWNmYmZjYzEwNzlhZDMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG5AQCAtMTQsNiArMTQsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfZml4ZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfcG9ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbkBAIC05Myw2ICs5NSw4IEBAIHN0cnVjdCBwaHlsaW5rIHtcXG4gXFx0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soc2ZwX2ludGVyZmFjZXMpO1xcbiBcXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzZnBfc3VwcG9ydCk7XFxuIFxcdHU4IHNmcF9wb3J0O1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqbW9kX3BvcnQ7XFxuIFxcbiBcXHRzdHJ1Y3QgZWVlX2NvbmZpZyBlZWVfY2ZnO1xcbiBcXG5AQCAtMTc2NCw2ICsxNzY4LDUxIEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfZml4ZWRfcG9sbChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHM7XFxuIFxcbitzdGF0aWMgaW50IHBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoIXBsLVxcdTAwM2VuZXRkZXYgfHwgIXBsLVxcdTAwM2VzZnBfYnVzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xcbitcXHRpZiAoIXBvcnQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cG9ydC1cXHUwMDNlaXNfc2ZwID0gdHJ1ZTtcXG4rXFx0cG9ydC1cXHUwMDNlaXNfbWlpID0gdHJ1ZTtcXG4rXFx0cG9ydC1cXHUwMDNlYWN0aXZlID0gdHJ1ZTtcXG4rXFxuK1xcdHBoeV9pbnRlcmZhY2VfYW5kKHBvcnQtXFx1MDAzZWludGVyZmFjZXMsIHBsLVxcdTAwM2Vjb25maWctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzLFxcbitcXHRcXHRcXHQgIHBoeWxpbmtfc2ZwX2ludGVyZmFjZXMpO1xcbitcXHRwaHlfcG9ydF91cGRhdGVfc3VwcG9ydGVkKHBvcnQpO1xcbitcXG4rXFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC1cXHUwMDNlbmV0ZGV2LCBwb3J0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveV9wb3J0O1xcbitcXG4rXFx0cGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQgPSBwb3J0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfZGVzdHJveV9wb3J0OlxcbitcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbitcXHRwbC1cXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IE5VTEw7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4re1xcbitcXHRpZiAocGwtXFx1MDAzZW5ldGRldiBcXHUwMDI2XFx1MDAyNiBwbC1cXHUwMDNlc2ZwX2NhZ2VfcG9ydClcXG4rXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChwbC1cXHUwMDNlbmV0ZGV2LCBwbC1cXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XFxuK1xcbitcXHRpZiAocGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpXFxuK1xcdFxcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpO1xcbitcXG4rXFx0cGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcXG4ge1xcbkBAIC0xNzgxLDkgKzE4MzAsMTggQEAgc3RhdGljIGludCBwaHlsaW5rX3JlZ2lzdGVyX3NmcChzdHJ1Y3QgcGh5bGluayAqcGwsXFxuIFxcbiBcXHRwbC1cXHUwMDNlc2ZwX2J1cyA9IGJ1cztcXG4gXFxuK1xcdHJldCA9IHBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnQocGwpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHNmcF9idXNfcHV0KGJ1cyk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuIFxcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGwsIFxcdTAwMjZzZnBfcGh5bGlua19vcHMpO1xcbiBcXHRzZnBfYnVzX3B1dChidXMpO1xcbiBcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpO1xcbitcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTk0NSw2ICsyMDAzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpO1xcbiB2b2lkIHBoeWxpbmtfZGVzdHJveShzdHJ1Y3QgcGh5bGluayAqcGwpXFxuIHtcXG4gXFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGwtXFx1MDAzZXNmcF9idXMpO1xcbitcXHRwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChwbCk7XFxuIFxcdGlmIChwbC1cXHUwMDNlbGlua19ncGlvKVxcbiBcXHRcXHRncGlvZF9wdXQocGwtXFx1MDAzZWxpbmtfZ3Bpbyk7XFxuIFxcbkBAIC0zODcwLDE0ICszOTI5LDY3IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9yZW1vdmUodm9pZCAqdXBzdHJlYW0pXFxuIFxcdHBoeV9pbnRlcmZhY2VfemVybyhwbC1cXHUwMDNlc2ZwX2ludGVyZmFjZXMpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHNmcF9tb2R1bGVfY2FwcyAqY2FwcztcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghcGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogQ3JlYXRlIG1vZCBwb3J0ICovXFxuK1xcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xcbitcXHRpZiAoIXBvcnQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cG9ydC1cXHUwMDNlYWN0aXZlID0gdHJ1ZTtcXG4rXFxuK1xcdGNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBsLVxcdTAwM2VzZnBfYnVzKTtcXG4rXFxuK1xcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cXHUwMDNlc3VwcG9ydGVkLCBjYXBzLVxcdTAwM2VsaW5rX21vZGVzLFxcbitcXHRcXHRcXHRcXHRcXHRwbC1cXHUwMDNlc2ZwX2NhZ2VfcG9ydC1cXHUwMDNlaW50ZXJmYWNlcyk7XFxuK1xcbitcXHRpZiAocGwtXFx1MDAzZW5ldGRldikge1xcbitcXHRcXHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLVxcdTAwM2VuZXRkZXYsIHBvcnQpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cG9ydC1cXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0LVxcdTAwM2VpZDtcXG4rXFxuK1xcdHBsLVxcdTAwM2Vtb2RfcG9ydCA9IHBvcnQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4re1xcbitcXHRpZiAoIXBsLVxcdTAwM2Vtb2RfcG9ydClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHBsLVxcdTAwM2VuZXRkZXYpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtXFx1MDAzZW5ldGRldiwgcGwtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFxuK1xcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFx0cGwtXFx1MDAzZW1vZF9wb3J0ID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXFxuIHtcXG4gXFx0c3RydWN0IHBoeWxpbmsgKnBsID0gdXBzdHJlYW07XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdGFydCB0aGUgUEhZIG5vdy4gKi9cXG4gXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpIHtcXG4gXFx0XFx0cGh5X3N0YXJ0KHBsLVxcdTAwM2VwaHlkZXYpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHBsKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogSWYgdGhlIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWSBidXQgd2UgZGlkbid0IGRldGVjdCBvbmUgd2VcXG5AQCAtMzg4Niw3ICszOTk4LDE2IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxcbiBcXHRpZiAoIXBsLVxcdTAwM2VzZnBfbWF5X2hhdmVfcGh5KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XFxuK1xcdHJldCA9IHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBkZWxfbW9kX3BvcnQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2RlbF9tb2RfcG9ydDpcXG4rXFx0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxcbkBAIC0zODk2LDYgKzQwMTcsOCBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSlcXG4gXFx0LyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi9cXG4gXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpXFxuIFxcdFxcdHBoeV9zdG9wKHBsLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChwbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSlcXG5AQCAtMzk0MCw2ICs0MDYzLDggQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG4gXFx0cGh5X2ludGVyZmFjZV9hbmQocGh5LVxcdTAwM2Vob3N0X2ludGVyZmFjZXMsIHBoeWxpbmtfc2ZwX2ludGVyZmFjZXMsXFxuIFxcdFxcdFxcdCAgcGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbiBcXG4rXFx0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpO1xcbitcXG4gXFx0LyogRG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiAqL1xcbiBcXHRyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX3BoeShwbCwgcGh5KTtcXG4gfVxcbkBAIC0zOTQ4LDYgKzQwNzMsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh1cHN0cmVhbSk7XFxuK1xcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHlkZXYsIE5VTEwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzID0ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IGJlZmYxZDZmY2M3Y2RhLi44Mjk2ZjRmNTljZTNiMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbkBAIC01ODIsNiArNTgyLDcgQEAgc3RydWN0IHBoeV9vYXRjMTRfc3FpX2NhcGFiaWxpdHkge1xcbiAgKiBAd29sX2VuYWJsZWQ6IFNldCB0byB0cnVlIGlmIHRoZSBQSFkgb3IgdGhlIGF0dGFjaGVkIE1BQyBoYXZlIFdha2Utb24tTEFOXFxuICAqIFxcdFxcdCBlbmFibGVkLlxcbiAgKiBAaXNfZ2VucGh5X2RyaXZlbjogUEhZIGlzIGRyaXZlbiBieSBvbmUgb2YgdGhlIGdlbmVyaWMgUEhZIGRyaXZlcnNcXG4rICogQGhhc19zZnBfbW9kX3BoeTogU2V0IHRydWUgaWYgZG93bnN0cmVhbSBTRlAgYnVzJ3MgbW9kdWxlIGNvbnRhaW5zIGEgUEhZXFxuICAqIEBzdGF0ZTogU3RhdGUgb2YgdGhlIFBIWSBmb3IgbWFuYWdlbWVudCBwdXJwb3Nlc1xcbiAgKiBAZGV2X2ZsYWdzOiBEZXZpY2Utc3BlY2lmaWMgZmxhZ3MgdXNlZCBieSB0aGUgUEhZIGRyaXZlci5cXG4gICpcXG5AQCAtNTk0LDYgKzU5NSw5IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcXG4gICogQHBoeWxpbms6IFBvaW50ZXIgdG8gcGh5bGluayBpbnN0YW5jZSBmb3IgdGhpcyBQSFlcXG4gICogQHNmcF9idXNfYXR0YWNoZWQ6IEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBTRlAgYnVzIGhhcyBiZWVuIGF0dGFjaGVkXFxuICAqIEBzZnBfYnVzOiBTRlAgYnVzIGF0dGFjaGVkIHRvIHRoaXMgUEhZJ3MgZmliZXIgcG9ydFxcbisgKiBAc2ZwX2NhZ2VfcG9ydDogVGhlIHBoeV9wb3J0IGNvbm5lY3RlZCB0byB0aGUgZG93bnN0cmVhbSBTRlAgY2FnZVxcbisgKiBAbW9kX3BvcnQ6IHBoeV9wb3J0IHJlcHJlc2VudGluZyB0aGUgU0ZQIG1vZHVsZSwgaWYgaXQgaXMgcGh5LWxlc3NcXG4rICogQHVwc3RyZWFtX3BvcnQ6IHBoeV9wb3J0IHRoaXMgUEhZJ3MgTUlJIGF0dGFjaGVzIHRvLCBpZiBhbnlcXG4gICogQGF0dGFjaGVkX2RldjogVGhlIGF0dGFjaGVkIGVuZXQgZHJpdmVyJ3MgZGV2aWNlIGluc3RhbmNlIHB0clxcbiAgKiBAYWRqdXN0X2xpbms6IENhbGxiYWNrIGZvciB0aGUgZW5ldCBjb250cm9sbGVyIHRvIHJlc3BvbmQgdG8gY2hhbmdlczogaW4gdGhlXFxuICAqICAgICAgICAgICAgICAgbGluayBzdGF0ZS5cXG5AQCAtNzA2LDYgKzcxMCw3IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcXG4gXFx0dW5zaWduZWQgaXJxX3JlcnVuOjE7XFxuIFxcbiBcXHR1bnNpZ25lZCBkZWZhdWx0X3RpbWVzdGFtcDoxO1xcbitcXHR1bnNpZ25lZCBoYXNfc2ZwX21vZF9waHk6MTtcXG4gXFxuIFxcdGludCByYXRlX21hdGNoaW5nO1xcbiBcXG5AQCAtNzg1LDYgKzc5MCw5IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcXG4gXFx0LyogVGhpcyBtYXkgYmUgbW9kaWZpZWQgdW5kZXIgdGhlIHJ0bmwgbG9jayAqL1xcbiBcXHRib29sIHNmcF9idXNfYXR0YWNoZWQ7XFxuIFxcdHN0cnVjdCBzZnBfYnVzICpzZnBfYnVzO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqbW9kX3BvcnQ7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcXG4gXFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICphdHRhY2hlZF9kZXY7XFxuIFxcdHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cztcXG5AQCAtMjQ2NSw2ICsyNDczLDggQEAgaW50IF9fcGh5X2h3dHN0YW1wX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXG4gc3RydWN0IHBoeV9wb3J0ICpwaHlfZ2V0X3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBcXG4rdm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcXG4rXFxuIC8qKlxcbiAgKiBwaHlfbW9kdWxlX2RyaXZlcigpIC0gSGVscGVyIG1hY3JvIGZvciByZWdpc3RlcmluZyBQSFkgZHJpdmVyc1xcbiAgKiBAX19waHlfZHJpdmVyczogYXJyYXkgb2YgUEhZIGRyaXZlcnMgdG8gcmVnaXN0ZXJcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oIGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXFxuaW5kZXggOTU1NzVmNjhkNWJjNzEuLjk1NjI5MTEyMjA0ZWE5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxcbkBAIC0xMywxNCArMTMsMTkgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IHhhcnJheTtcXG4gc3RydWN0IHBoeV9kZXZpY2U7XFxuK3N0cnVjdCBwaHlfcG9ydDtcXG4gc3RydWN0IHNmcF9idXM7XFxuIFxcbiBzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kge1xcbiBcXHRzdHJ1Y3QgeGFycmF5IHBoeXM7XFxuIFxcdHUzMiBuZXh0X3BoeV9pbmRleDtcXG4rXFxuK1xcdHN0cnVjdCB4YXJyYXkgcG9ydHM7XFxuK1xcdHUzMiBuZXh0X3BvcnRfaW5kZXg7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgcGh5X2RldmljZV9ub2RlIHtcXG5AQCAtNDgsNiArNTMsOSBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcXG4gXFxuK2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XFxuK3ZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpO1xcbitcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqXFxuIHBoeV9saW5rX3RvcG9fZ2V0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcGh5aW5kZXgpXFxuIHtcXG5AQCAtNjQsNiArNzIsMjAgQEAgcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9wb3J0ICpcXG4rcGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXFx1MDAzZWxpbmtfdG9wbztcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAoIXRvcG8pXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0LyogQ2FsbGVyIG11c3QgaG9sZCBSVE5MIHdoaWxlIGhhbmRsaW5nIHRoZSBwaHlfcG9ydCAqL1xcbitcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIHBvcnRfaWQpO1xcbit9XFxuK1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG5AQCAtNzcsMTEgKzk5LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbit7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKlxcbiBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXFxuK3BoeV9saW5rX3RvcG9fZ2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBvcnRfaWQpXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogX19QSFlfTElOS19UT1BPTE9HWV9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaCBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxcbmluZGV4IDBlZjBmNWNlNDcwOTI2Li5lM2E0MWNlZGViZGNmYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcXG5AQCAtMzYsOSArMzYsMTIgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7XFxuIC8qKlxcbiAgKiBzdHJ1Y3QgcGh5X3BvcnQgLSBBIHJlcHJlc2VudGF0aW9uIG9mIGEgbmV0d29yayBkZXZpY2UgcGh5c2ljYWwgaW50ZXJmYWNlXFxuICAqXFxuKyAqIEBpZDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwb3J0IHdpdGhpbiB0aGUgdG9wb2xvZ3lcXG4gICogQGhlYWQ6IFVzZWQgYnkgdGhlIHBvcnQncyBwYXJlbnQgdG8gbGlzdCBwb3J0c1xcbiAgKiBAcGFyZW50X3R5cGU6IFRoZSB0eXBlIG9mIGRldmljZSB0aGlzIHBvcnQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvXFxuICAqIEBwaHk6IElmIHRoZSBwYXJlbnQgaXMgUEhZX1BPUlRfUEhZREVWLCB0aGUgUEhZIGNvbnRyb2xsaW5nIHRoYXQgcG9ydFxcbisgKiBAdXBzdHJlYW1fcG9ydDogRm9yIG5vbi1NSUkgcG9ydHMsIGluZGljYXRlcyB0aGUgTUlJIHBvcnQgdGhhdCBmZWVkcyB0aGlzXFxuKyAqXFx0XFx0ICAgcG9ydCwgZS5nLiB0aGUgU0ZQIGNhZ2UgcG9ydCBmb3IgYSBTRlAgbW9kdWxlIHBvcnQuXFxuICAqIEBvcHM6IENhbGxiYWNrIG9wcyBpbXBsZW1lbnRlZCBieSB0aGUgcG9ydCBjb250cm9sbGVyXFxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxcbiAgKiBAbWVkaXVtczogQml0bWFzayBvZiB0aGUgcGh5c2ljYWwgbWVkaXVtcyB0aGlzIHBvcnQgcHJvdmlkZXMgYWNjZXNzIHRvXFxuQEAgLTUyLDExICs1NSwxMyBAQCBzdHJ1Y3QgcGh5X3BvcnRfb3BzIHtcXG4gICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuXFxuICAqL1xcbiBzdHJ1Y3QgcGh5X3BvcnQge1xcbitcXHR1MzIgaWQ7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgaGVhZDtcXG4gXFx0ZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeTtcXG4gXFx0fTtcXG4rXFx0dTMyIHVwc3RyZWFtX3BvcnQ7XFxuIFxcbiBcXHRjb25zdCBzdHJ1Y3QgcGh5X3BvcnRfb3BzICpvcHM7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxcbmluZGV4IDgxMzRiYWY3ODYwZjNjLi5mOWQ4Nzk0ZWFiYzE5MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxcbkBAIC03OCw2ICs3OCwxMSBAQCBlbnVtIGV0aHRvb2xfcHNlX2V2ZW50IHtcXG4gXFx0RVRIVE9PTF9QU0VfRVZFTlRfU1dfUFdfQ09OVFJPTF9FUlJPUiA9IDY0LFxcbiB9O1xcbiBcXG4rZW51bSBldGh0b29sX3BvcnRfdHlwZSB7XFxuK1xcdEVUSFRPT0xfUE9SVF9UWVBFX01ESSxcXG4rXFx0RVRIVE9PTF9QT1JUX1RZUEVfU0ZQLFxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdEVUSFRPT0xfQV9IRUFERVJfVU5TUEVDLFxcbiBcXHRFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWCxcXG5AQCAtODQwLDYgKzg0NSwxOCBAQCBlbnVtIHtcXG4gXFx0RVRIVE9PTF9BX01TRV9NQVggPSAoX19FVEhUT09MX0FfTVNFX0NOVCAtIDEpXFxuIH07XFxuIFxcbitlbnVtIHtcXG4rXFx0RVRIVE9PTF9BX1BPUlRfSEVBREVSID0gMSxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfSUQsXFxuK1xcdEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsXFxuK1xcdEVUSFRPT0xfQV9QT1JUX1RZUEUsXFxuK1xcdEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsXFxuK1xcbitcXHRfX0VUSFRPT0xfQV9QT1JUX0NOVCxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfTUFYID0gKF9fRVRIVE9PTF9BX1BPUlRfQ05UIC0gMSlcXG4rfTtcXG4rXFxuIGVudW0ge1xcbiBcXHRFVEhUT09MX01TR19VU0VSX05PTkUgPSAwLFxcbiBcXHRFVEhUT09MX01TR19TVFJTRVRfR0VUID0gMSxcXG5AQCAtODkzLDYgKzkxMCw3IEBAIGVudW0ge1xcbiBcXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCxcXG4gXFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9BQ1QsXFxuIFxcdEVUSFRPT0xfTVNHX01TRV9HRVQsXFxuK1xcdEVUSFRPT0xfTVNHX1BPUlRfR0VULFxcbiBcXG4gXFx0X19FVEhUT09MX01TR19VU0VSX0NOVCxcXG4gXFx0RVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpXFxuQEAgLTk1NCw2ICs5NzIsNyBAQCBlbnVtIHtcXG4gXFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9OVEYsXFxuIFxcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfTlRGLFxcbiBcXHRFVEhUT09MX01TR19NU0VfR0VUX1JFUExZLFxcbitcXHRFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSxcXG4gXFxuIFxcdF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCxcXG4gXFx0RVRIVE9PTF9NU0dfS0VSTkVMX01BWCA9IChfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQgLSAxKVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggYzFjMWJlMWE2OTYyZmUuLmIzNmNjNWM0NzgxNmE0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTEzMTUsNiArMTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXFx1MDAyNlxcdTAwMjYgdG9wbykge1xcbiBcXHRcXHR4YV9kZXN0cm95KFxcdTAwMjZ0b3BvLVxcdTAwM2VwaHlzKTtcXG4rXFx0XFx0eGFfZGVzdHJveShcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMpO1xcbiBcXHRcXHRrZnJlZSh0b3BvKTtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VsaW5rX3RvcG8gPSBOVUxMO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL01ha2VmaWxlIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcXG5pbmRleCA2MjljMTA5MTY2NzBlYy4uOWI1YjA5NjcwMDA4MTEgMTAwNjQ0XFxuLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGVcXG4rKysgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxcbkBAIC05LDQgKzksNCBAQCBldGh0b29sX25sLXlcXHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxcXFxuIFxcdFxcdCAgIGNoYW5uZWxzLm8gY29hbGVzY2UubyBwYXVzZS5vIGVlZS5vIHRzaW5mby5vIGNhYmxldGVzdC5vIFxcXFxcXG4gXFx0XFx0ICAgdHVubmVscy5vIGZlYy5vIGVlcHJvbS5vIHN0YXRzLm8gcGhjX3ZjbG9ja3MubyBtbS5vIFxcXFxcXG4gXFx0XFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxcXFxuLVxcdFxcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm9cXG4rXFx0XFx0ICAgcGh5Lm8gdHNjb25maWcubyBtc2UubyBwb3J0Lm9cXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXFxuaW5kZXggMWFmMzk1YjU0MzMwZTIuLmMwNzZjMDdkMGEwODBjIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuY1xcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xcbkBAIC0yNiw2ICsyNiw4IEBAIHN0YXRpYyB1MzIgZXRobmxfYmNhc3Rfc2VxO1xcbiBcXHRcXHRcXHQgICAgIEVUSFRPT0xfRkxBR19PTUlUX1JFUExZKVxcbiAjZGVmaW5lIEVUSFRPT0xfRkxBR1NfU1RBVFMgKEVUSFRPT0xfRkxBR1NfQkFTSUMgfCBFVEhUT09MX0ZMQUdfU1RBVFMpXFxuIFxcbitjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXSBfX3JvX2FmdGVyX2luaXQ7XFxuK1xcbiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W10gPSB7XFxuIFxcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIFxcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9OQU1FXVxcdD0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLFxcbkBAIC00MzEsNiArNDMzLDcgQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHtcXG4gXFx0W0VUSFRPT0xfTVNHX1RTQ09ORklHX1NFVF1cXHQ9IFxcdTAwMjZldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcyxcXG4gXFx0W0VUSFRPT0xfTVNHX1BIWV9HRVRdXFx0XFx0PSBcXHUwMDI2ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLFxcbiBcXHRbRVRIVE9PTF9NU0dfTVNFX0dFVF1cXHRcXHQ9IFxcdTAwMjZldGhubF9tc2VfcmVxdWVzdF9vcHMsXFxuK1xcdFtFVEhUT09MX01TR19QT1JUX0dFVF1cXHRcXHQ9IFxcdTAwMjZldGhubF9wb3J0X3JlcXVlc3Rfb3BzLFxcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5AQCAtMTU3Miw2ICsxNTc1LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9vcHMgZXRodG9vbF9nZW5sX29wc1tdID0ge1xcbiBcXHRcXHQucG9saWN5ID0gZXRobmxfbXNlX2dldF9wb2xpY3ksXFxuIFxcdFxcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9tc2VfZ2V0X3BvbGljeSkgLSAxLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5jbWRcXHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VULFxcbitcXHRcXHQuZG9pdFxcdD0gZXRobmxfZGVmYXVsdF9kb2l0LFxcbitcXHRcXHQuc3RhcnRcXHQ9IGV0aG5sX3BvcnRfZHVtcF9zdGFydCxcXG4rXFx0XFx0LmR1bXBpdFxcdD0gZXRobmxfcG9ydF9kdW1waXQsXFxuK1xcdFxcdC5kb25lXFx0PSBldGhubF9wb3J0X2R1bXBfZG9uZSxcXG4rXFx0XFx0LnBvbGljeSA9IGV0aG5sX3BvcnRfZ2V0X3BvbGljeSxcXG4rXFx0XFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX3BvcnRfZ2V0X3BvbGljeSkgLSAxLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0ge1xcbkBAIC0xNTk0LDEwICsxNjA2LDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZXRodG9vbF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcbiAvKiBtb2R1bGUgc2V0dXAgKi9cXG4gXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBldGhubF9waHlfbmFtZXNfcG9wdWxhdGUodm9pZClcXG4re1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBQSFlfSU5URVJGQUNFX01PREVfTUFYOyBpKyspIHtcXG4rXFx0XFx0bmFtZSA9IHBoeV9tb2RlcyhpKTtcXG4rXFx0XFx0c3Ryc2NweShwaHlfaW50ZXJmYWNlX25hbWVzW2ldLCBuYW1lLCBFVEhfR1NUUklOR19MRU4pO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19pbml0IGV0aG5sX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0ZXRobmxfcGh5X25hbWVzX3BvcHVsYXRlKCk7XFxuK1xcbiBcXHRyZXQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseShcXHUwMDI2ZXRodG9vbF9nZW5sX2ZhbWlseSk7XFxuIFxcdGlmIChXQVJOKHJldCBcXHUwMDNjIDAsIFxcXCJldGh0b29sOiBnZW5ldGxpbmsgZmFtaWx5IHJlZ2lzdHJhdGlvbiBmYWlsZWRcXFwiKSlcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXFxuaW5kZXggM2U5NjlhMDcwZjlmZTQuLmIyNTBlOGI1YzRkNDc1IDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbkBAIC01LDExICs1LDE1IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBldGhubF9yZXFfaW5mbztcXG4gXFxuK2V4dGVybiBjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXTtcXG4rXFxuK3UzMiBldGhubF9iY2FzdF9zZXFfbmV4dCh2b2lkKTtcXG4gaW50IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuIFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpuZXN0LCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuQEAgLTQ3NCw2ICs0NzgsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BoeV9yZXF1ZXN0X29wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcG9ydF9yZXF1ZXN0X29wcztcXG4gXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xcbkBAIC01MzAsNiArNTM1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19nZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19IRUFERVIgKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX3NldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX01BWCArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgKyAxXTtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BvcnRfZ2V0X3BvbGljeVtFVEhUT09MX0FfUE9SVF9JRCArIDFdO1xcbiBcXG4gaW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbkBAIC01NDUsNiArNTUxLDkgQEAgaW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG4gaW50IGV0aG5sX3RzaW5mb19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuIGludCBldGhubF9yc3NfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuIGludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuK2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG4raW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuK2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IGNoYXIgc3RhdHNfc3RkX25hbWVzW19fRVRIVE9PTF9TVEFUU19DTlRdW0VUSF9HU1RSSU5HX0xFTl07XFxuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX2V0aF9waHlfbmFtZXNbX19FVEhUT09MX0FfU1RBVFNfRVRIX1BIWV9DTlRdW0VUSF9HU1RSSU5HX0xFTl07XFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BvcnQuYyBiL25ldC9ldGh0b29sL3BvcnQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFiMmNjMDVkZjlmOTBhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL25ldC9ldGh0b29sL3BvcnQuY1xcbkBAIC0wLDAgKzEsMzc1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogQ29weXJpZ2h0IDIwMjYgQm9vdGxpblxcbisgKi9cXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeV9wb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJiaXRzZXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbisjaW5jbHVkZSBcXFwibmV0bGluay5oXFxcIlxcbitcXG4rc3RydWN0IHBvcnRfcmVxX2luZm8ge1xcbitcXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcXG4rXFx0dTMyIHBvcnRfaWQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhIHtcXG4rXFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGFcXHRiYXNlO1xcbitcXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpO1xcbitcXHRERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhpbnRlcmZhY2VzKTtcXG4rXFx0dTMyIHBvcnRfaWQ7XFxuK1xcdGJvb2wgbWlpO1xcbitcXHRib29sIHNmcDtcXG4rXFx0dTMyIHVwc3RyZWFtX3BvcnQ7XFxuK307XFxuK1xcbisjZGVmaW5lIFBPUlRfUkVRSU5GTyhfX3JlcV9iYXNlKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZihfX3JlcV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXFfaW5mbywgYmFzZSlcXG4rXFxuKyNkZWZpbmUgUE9SVF9SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcXFxcbitcXHRjb250YWluZXJfb2YoX19yZXBseV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhLCBiYXNlKVxcbitcXG4rY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcG9ydF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QT1JUX0lEICsgMV0gPSB7XFxuK1xcdFtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXFxuK1xcdFtFVEhUT09MX0FfUE9SVF9JRF0gPSBOTEFfUE9MSUNZX01JTihOTEFfVTMyLCAxKSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcG9ydF9wYXJzZV9yZXF1ZXN0KHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0YixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcV9pbmZvICpyZXF1ZXN0ID0gUE9SVF9SRVFJTkZPKHJlcV9pbmZvKTtcXG4rXFxuK1xcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEVUSFRPT0xfQV9QT1JUX0lEKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXF1ZXN0LVxcdTAwM2Vwb3J0X2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BPUlRfSURdKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBvcnRfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEsXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcXG4rXFx0c3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuK1xcbitcXHQvKiBSVE5MIG11c3QgYmUgaGVsZCB3aGlsZSBob2xkaW5nIGEgcmVmIHRvIHRoZSBwaHlfcG9ydC4gSGVyZSwgY2FsbGVyXFxuK1xcdCAqIGhvbGRzIFJUTkwuXFxuK1xcdCAqL1xcbitcXHRwb3J0ID0gcGh5X2xpbmtfdG9wb19nZXRfcG9ydChyZXFfaW5mby1cXHUwMDNlZGV2LCByZXF1ZXN0LVxcdTAwM2Vwb3J0X2lkKTtcXG4rXFx0aWYgKCFwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdGxpbmttb2RlX2NvcHkocmVwbHktXFx1MDAzZXN1cHBvcnRlZCwgcG9ydC1cXHUwMDNlc3VwcG9ydGVkKTtcXG4rXFx0cGh5X2ludGVyZmFjZV9jb3B5KHJlcGx5LVxcdTAwM2VpbnRlcmZhY2VzLCBwb3J0LVxcdTAwM2VpbnRlcmZhY2VzKTtcXG4rXFx0cmVwbHktXFx1MDAzZXBvcnRfaWQgPSBwb3J0LVxcdTAwM2VpZDtcXG4rXFx0cmVwbHktXFx1MDAzZW1paSA9IHBvcnQtXFx1MDAzZWlzX21paTtcXG4rXFx0cmVwbHktXFx1MDAzZXNmcCA9IHBvcnQtXFx1MDAzZWlzX3NmcDtcXG4rXFx0cmVwbHktXFx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwb3J0LVxcdTAwM2V1cHN0cmVhbV9wb3J0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcG9ydF9yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKVxcbit7XFxuK1xcdGJvb2wgY29tcGFjdCA9IHJlcV9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpO1xcbitcXHRzaXplX3Qgc2l6ZSA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBFVEhUT09MX0FfUE9SVF9JRCAqL1xcbitcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcXG4rXFxuK1xcdGlmICghcmVwbHktXFx1MDAzZW1paSkge1xcbitcXHRcXHQvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMgKi9cXG4rXFx0XFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXFx1MDAzZXN1cHBvcnRlZCwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0X19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLFxcbitcXHRcXHRcXHRcXHRcXHRsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHNpemUgKz0gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyAqL1xcbitcXHRcXHRyZXQgPSBldGhubF9iaXRzZXRfc2l6ZShyZXBseS1cXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0UEhZX0lOVEVSRkFDRV9NT0RFX01BWCxcXG4rXFx0XFx0XFx0XFx0XFx0cGh5X2ludGVyZmFjZV9uYW1lcywgY29tcGFjdCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0c2l6ZSArPSByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEVUSFRPT0xfQV9QT1JUX1RZUEUgKi9cXG4rXFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFxuK1xcbitcXHQvKiBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUICovXFxuK1xcdGlmIChyZXBseS1cXHUwMDNldXBzdHJlYW1fcG9ydClcXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFxuK1xcbitcXHRyZXR1cm4gc2l6ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEpXFxuK3tcXG4rXFx0Ym9vbCBjb21wYWN0ID0gcmVxX2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRVRIVE9PTF9GTEFHX0NPTVBBQ1RfQklUU0VUUztcXG4rXFx0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XFxuK1xcdGludCByZXQsIHBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX01ESTtcXG4rXFxuK1xcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS1cXHUwMDNlcG9ydF9pZCkpXFxuK1xcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuK1xcbitcXHRpZiAoIXJlcGx5LVxcdTAwM2VtaWkpIHtcXG4rXFx0XFx0cmV0ID0gZXRobmxfcHV0X2JpdHNldChza2IsIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHJlcGx5LVxcdTAwM2VzdXBwb3J0ZWQsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gZXRobmxfcHV0X2JpdHNldChza2IsIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcmVwbHktXFx1MDAzZWludGVyZmFjZXMsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBQSFlfSU5URVJGQUNFX01PREVfTUFYLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcGh5X2ludGVyZmFjZV9uYW1lcywgY29tcGFjdCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAocmVwbHktXFx1MDAzZW1paSB8fCByZXBseS1cXHUwMDNlc2ZwKVxcbitcXHRcXHRwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9TRlA7XFxuK1xcbitcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUE9SVF9UWVBFLCBwb3J0X3R5cGUpKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0aWYgKHJlcGx5LVxcdTAwM2V1cHN0cmVhbV9wb3J0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsXFxuK1xcdFxcdFxcdHJlcGx5LVxcdTAwM2V1cHN0cmVhbV9wb3J0KSlcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdHJ1Y3QgcG9ydF9kdW1wX2N0eCB7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcV9pbmZvXFx0KnJlcV9pbmZvO1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhXFx0KnJlcGx5X2RhdGE7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRpZmluZGV4O1xcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0cG9zX2lmaW5kZXg7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRwb3NfcG9ydGlkO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpcXG4rcG9ydF9kdW1wX2N0eF9nZXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdHJldHVybiAoc3RydWN0IHBvcnRfZHVtcF9jdHggKiljYi1cXHUwMDNlY3R4O1xcbit9XFxuK1xcbitpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVxcdTAwM2VpbmZvLmF0dHJzO1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseV9kYXRhO1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxX2luZm87XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpIFxcdTAwM2Ugc2l6ZW9mKGNiLVxcdTAwM2VjdHgpKTtcXG4rXFxuK1xcdHJlcV9pbmZvID0ga3phbGxvY19vYmooKnJlcV9pbmZvKTtcXG4rXFx0aWYgKCFyZXFfaW5mbylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xcbitcXHRpZiAoIXJlcGx5X2RhdGEpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBmcmVlX3JlcV9pbmZvO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChcXHUwMDI2cmVxX2luZm8tXFx1MDAzZWJhc2UsIHRiW0VUSFRPT0xfQV9QT1JUX0hFQURFUl0sXFxuK1xcdFxcdFxcdFxcdFxcdCBnZW5sX2luZm9fbmV0KFxcdTAwMjZpbmZvLVxcdTAwM2VpbmZvKSxcXG4rXFx0XFx0XFx0XFx0XFx0IGluZm8tXFx1MDAzZWluZm8uZXh0YWNrLCBmYWxzZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGZyZWVfcmVwX2RhdGE7XFxuK1xcbitcXHRjdHgtXFx1MDAzZWlmaW5kZXggPSAwO1xcbitcXHRjdHgtXFx1MDAzZXBvc19pZmluZGV4ID0gMDtcXG4rXFxuK1xcdC8qIEZvciBmaWx0ZXJlZCBEVU1QIHJlcXVlc3RzLCBsZXQncyBqdXN0IHN0b3JlIHRoZSBpZmluZGV4LiBXZSdsbCBjaGVja1xcbitcXHQgKiBhZ2FpbiBpZiB0aGUgbmV0ZGV2IGlzIHN0aWxsIHRoZXJlIHdoZW4gbG9vcGluZyBvdmVyIHRoZSBuZXRkZXYgbGlzdFxcbitcXHQgKiBpbiB0aGUgRFVNUCBsb29wLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldikge1xcbitcXHRcXHRjdHgtXFx1MDAzZWlmaW5kZXggPSByZXFfaW5mby1cXHUwMDNlYmFzZS5kZXYtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdG5ldGRldl9wdXQocmVxX2luZm8tXFx1MDAzZWJhc2UuZGV2LCBcXHUwMDI2cmVxX2luZm8tXFx1MDAzZWJhc2UuZGV2X3RyYWNrZXIpO1xcbitcXHRcXHRyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRjdHgtXFx1MDAzZXJlcV9pbmZvID0gcmVxX2luZm87XFxuK1xcdGN0eC1cXHUwMDNlcmVwbHlfZGF0YSA9IHJlcGx5X2RhdGE7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2ZyZWVfcmVwX2RhdGE6XFxuK1xcdGtmcmVlKHJlcGx5X2RhdGEpO1xcbitmcmVlX3JlcV9pbmZvOlxcbitcXHRrZnJlZShyZXFfaW5mbyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXHR2b2lkICplaGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTtcXG4rXFx0aWYgKCFlaGRyKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0bWVtc2V0KGN0eC1cXHUwMDNlcmVwbHlfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpKTtcXG4rXFx0Y3R4LVxcdTAwM2VyZXBseV9kYXRhLVxcdTAwM2ViYXNlLmRldiA9IGRldjtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4rXFxuK1xcdHJldCA9IHBvcnRfcHJlcGFyZV9kYXRhKFxcdTAwMjZjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyZXBseV9kYXRhLVxcdTAwM2ViYXNlLFxcbitcXHRcXHRcXHRcXHRnZW5sX2luZm9fZHVtcChjYikpO1xcbitcXG4rXFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IGV0aG5sX2ZpbGxfcmVwbHlfaGVhZGVyKHNrYiwgZGV2LCBFVEhUT09MX0FfUE9SVF9IRUFERVIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBwb3J0X2ZpbGxfcmVwbHkoc2tiLCBcXHUwMDI2Y3R4LVxcdTAwM2VyZXFfaW5mby1cXHUwMDNlYmFzZSwgXFx1MDAyNmN0eC1cXHUwMDNlcmVwbHlfZGF0YS1cXHUwMDNlYmFzZSk7XFxuK1xcbitvdXQ6XFxuK1xcdGN0eC1cXHUwMDNlcmVwbHlfZGF0YS1cXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBlaGRyKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRnZW5sbXNnX2VuZChza2IsIGVoZHIpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwb3J0X2R1bXBfb25lX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuK3tcXG4rXFx0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZGV2ID0gY3R4LVxcdTAwM2VyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXY7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlbGlua190b3BvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHhhX2Zvcl9lYWNoX3N0YXJ0KFxcdTAwMjZkZXYtXFx1MDAzZWxpbmtfdG9wby1cXHUwMDNlcG9ydHMsIGN0eC1cXHUwMDNlcG9zX3BvcnRpZCwgcG9ydCxcXG4rXFx0XFx0XFx0ICBjdHgtXFx1MDAzZXBvc19wb3J0aWQpIHtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VyZXFfaW5mby1cXHUwMDNlcG9ydF9pZCA9IGN0eC1cXHUwMDNlcG9zX3BvcnRpZDtcXG4rXFxuK1xcdFxcdHJldCA9IHBvcnRfZHVtcF9vbmUoc2tiLCBkZXYsIGNiKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LVxcdTAwM2Vwb3NfcG9ydGlkID0gMDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBvcnRfZHVtcF9hbGxfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4rXFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2Vwb3NfaWZpbmRleCkge1xcbitcXHRcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0XFx0Y3R4LVxcdTAwM2VyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXYgPSBkZXY7XFxuK1xcdFxcdHJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpO1xcbitcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldl90cmFja2VyKTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xcbitcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRyZXQgPSAwO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG4rXFx0XFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuK1xcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuK1xcbitcXHRcXHRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoXFx1MDAyNmluZm8tXFx1MDAzZWluZm8pLFxcbitcXHRcXHRcXHRcXHRcXHQgIGN0eC1cXHUwMDNlaWZpbmRleCwgXFx1MDAyNmRldl90cmFja2VyLFxcbitcXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIWRldilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRcXHRjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldiA9IGRldjtcXG4rXFx0XFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XFxuK1xcbitcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldl90cmFja2VyKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gcG9ydF9kdW1wX2FsbF9kZXYoc2tiLCBjYik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuK3tcXG4rXFx0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcXG4rXFxuK1xcdGtmcmVlKGN0eC1cXHUwMDNlcmVxX2luZm8pO1xcbitcXHRrZnJlZShjdHgtXFx1MDAzZXJlcGx5X2RhdGEpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9wb3J0X3JlcXVlc3Rfb3BzID0ge1xcbitcXHQucmVxdWVzdF9jbWRcXHRcXHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VULFxcbitcXHQucmVwbHlfY21kXFx0XFx0PSBFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSxcXG4rXFx0Lmhkcl9hdHRyXFx0XFx0PSBFVEhUT09MX0FfUE9SVF9IRUFERVIsXFxuK1xcdC5yZXFfaW5mb19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHBvcnRfcmVxX2luZm8pLFxcbitcXHQucmVwbHlfZGF0YV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHBvcnRfcmVwbHlfZGF0YSksXFxuK1xcbitcXHQucGFyc2VfcmVxdWVzdFxcdFxcdD0gcG9ydF9wYXJzZV9yZXF1ZXN0LFxcbitcXHQucHJlcGFyZV9kYXRhXFx0XFx0PSBwb3J0X3ByZXBhcmVfZGF0YSxcXG4rXFx0LnJlcGx5X3NpemVcXHRcXHQ9IHBvcnRfcmVwbHlfc2l6ZSxcXG4rXFx0LmZpbGxfcmVwbHlcXHRcXHQ9IHBvcnRfZmlsbF9yZXBseSxcXG4rfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6NTI6MTMuOTQ4MTE4NTU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjMxNjAwOTg0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0ZQXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlBIWUxJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldGhubF9wb3J0X2R1bXBfc3RhcnRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcGl0XCIsXG4gICAgXCJldGhubF9wb3J0X2R1bXBfZG9uZVwiLFxuICAgIFwicG9ydF9wYXJzZV9yZXF1ZXN0XCIsXG4gICAgXCJwb3J0X3ByZXBhcmVfZGF0YVwiLFxuICAgIFwicG9ydF9yZXBseV9zaXplXCIsXG4gICAgXCJwb3J0X2ZpbGxfcmVwbHlcIixcbiAgICBcInBvcnRfZHVtcF9vbmVfZGV2XCIsXG4gICAgXCJwb3J0X2R1bXBfYWxsX2RldlwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19hZGRfcG9ydFwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19kZWxfcG9ydFwiLFxuICAgIFwicGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydFwiLFxuICAgIFwicGh5bGlua19hZGRfc2ZwX21vZF9wb3J0XCIsXG4gICAgXCJwaHlfYWRkX3NmcF9tb2RfcG9ydFwiLFxuICAgIFwicGh5X3NldHVwX3NmcF9wb3J0XCIsXG4gICAgXCJwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzXCIsXG4gICAgXCJwaHlfc2V0X3Vwc3RyZWFtX3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZCAoRVRIVE9PTF9NU0dfUE9SVF9HRVQpIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIFBIWSBhbmQgcGh5bGluayBzdWJzeXN0ZW1zIHRvIHRyYWNrIGFuZCBleHBvc2UgdGhlc2UgcG9ydHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNDVhOGJhYzAzY2Q4MTY0N2I3YmVjMWU4Yjk5YzE4MWQyYTQ5NmExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMDA6NTI6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuaW5kZXggNWRkNGQxYjVkOTRiYmIuLmQxMTUxYWYzMzVjYTEwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTIxMCw2ICsyMTAsMTAgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogZGlzY2FyZFxuICAgICAgICAgdmFsdWU6IDMxXG4rICAtXG4rICAgIG5hbWU6IHBvcnQtdHlwZVxuKyAgICB0eXBlOiBlbnVtXG4rICAgIGVudHJpZXM6IFttZGksIHNmcF1cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xOTA1LDYgKzE5MDksMzIgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBsaW5rXG4gICAgICAgICB0eXBlOiBuZXN0XG4gICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90XG4rICAtXG4rICAgIG5hbWU6IHBvcnRcbisgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnRcbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBoZWFkZXJcbisgICAgICAgIHR5cGU6IG5lc3RcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBpZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLW1vZGVzXG4rICAgICAgICB0eXBlOiBuZXN0XG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLWludGVyZmFjZXNcbisgICAgICAgIHR5cGU6IG5lc3RcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXRcbisgICAgICAtXG4rICAgICAgICBuYW1lOiB0eXBlXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IHBvcnQtdHlwZVxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHVwc3RyZWFtLXBvcnRcbisgICAgICAgIHR5cGU6IHUzMlxuIFxuIG9wZXJhdGlvbnM6XG4gICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbFxuQEAgLTI4NTksNiArMjg4OSwyNiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gd29yc3QtY2hhbm5lbFxuICAgICAgICAgICAgIC0gbGlua1xuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXG4rICAgIC1cbisgICAgICBuYW1lOiBwb3J0LWdldFxuKyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZVxuK1xuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBvcnRcbitcbisgICAgICBkbzogXHUwMDI2cG9ydC1nZXQtb3BcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgICAgICAtIGlkXG4rICAgICAgICByZXBseTpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIGhlYWRlclxuKyAgICAgICAgICAgIC0gaWRcbisgICAgICAgICAgICAtIHN1cHBvcnRlZC1tb2Rlc1xuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLWludGVyZmFjZXNcbisgICAgICAgICAgICAtIHR5cGVcbisgICAgICAgICAgICAtIHVwc3RyZWFtLXBvcnRcbisgICAgICBkdW1wOiAqcG9ydC1nZXQtb3BcbiBcbiBtY2FzdC1ncm91cHM6XG4gICBsaXN0OlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcbmluZGV4IGU5MmFiZjQ1ZmFmNTBkLi5iNDMyNmM4OWIwNzUxZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdFxuQEAgLTI1MzcsNiArMjUzNywzOSBAQCBXaXRoaW4gZWFjaCBjaGFubmVsIG5lc3QsIG9ubHkgdGhlIG1ldHJpY3Mgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgd2lsbCBiZSBwcmVzZW50LlxuIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW5cbiBgYGluY2x1ZGUvbGludXgvcGh5LmhgYC5cbiBcbitQT1JUX0dFVFxuKz09PT09PT09XG4rXG4rUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsXG4rcmVmZXJyZWQgdG8gYXMgXCJwb3J0c1wiLiBVc2VyIG5lZWRzIHRvIHNwZWNpZnkgYSBQT1JUX0lEIGZvciB0aGUgRE8gb3BlcmF0aW9uLFxuK2luIHdoaWNoIGNhc2UgdGhlIERPIHJlcXVlc3QgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNwZWNpZmljIHBvcnQuXG4rXG4rQXMgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgcG9ydCwgdGhlIERVTVAgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIGxpc3QgdGhlXG4rcG9ydHMgcHJlc2VudCBvbiBhIGdpdmVuIGludGVyZmFjZSwgYnkgcGFzc2luZyBhbiBpbnRlcmZhY2UgaW5kZXggb3IgbmFtZSBpblxuK3RoZSBkdW1wIHJlcXVlc3QuXG4rXG4rUmVxdWVzdCBjb250ZW50czpcbitcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcbisgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgdTMyICAgICBwb3J0IGlkXG4rICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK0tlcm5lbCByZXNwb25zZSBjb250ZW50czpcbitcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgICAgbmVzdGVkICByZXF1ZXN0IGhlYWRlclxuKyAgYGBFVEhUT09MX0FfUE9SVF9JRGBgICAgICAgICAgICAgICAgICAgIHUzMiAgICAgdGhlIHBvcnQncyB1bmlxdWUgaWRlbnRpZmllcixcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBuZXRkZXZpY2UuXG4rICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFU2BgICAgICAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIGxpbmttb2Rlc1xuKyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFU2BgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBNSUlcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXNcbisgIGBgRVRIVE9PTF9BX1BPUlRfVFlQRWBgICAgICAgICAgICAgICAgICB1MzIgICAgIHRoZSBwb3J0IHR5cGVcbisgIGBgRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVGBgICAgICAgICB1MzIgICAgIElmIGFueSwgdGhlIGluZGV4IG9mIHRoZSBNSUlcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgdGhhdCBmZWVkcyBpbnRvIHRoaXNcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuXG4rICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuIFJlcXVlc3QgdHJhbnNsYXRpb25cbiA9PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtMjY0Nyw0ICsyNjgwLDUgQEAgYXJlIG5ldGxpbmsgb25seS5cbiAgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUEhZX0dFVGBgXG4gICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgXG4gICBgYFNJT0NTSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX1NFVGBgXG4rICBuL2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1BPUlRfR0VUYGBcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuaW5kZXggNmUyOGQ5MDk0YmNlM2YuLjJhOWIxZWM5M2I3MGY5IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuQEAgLTk5LDEzICs5OSwyOSBAQCB3aWxsIGV2ZW50dWFsbHkgYmUgYWJsZSB0byByZXBvcnQgaXRzIG93biBrc2V0dGluZ3M6OlxuICAgICAgICAgICAgIChfX19fXyktLS0tLXwgUG9ydCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLStcbiBcbitTRlAgcG9ydHNcbis9PT09PT09PT1cbitcbitTRlAgaW50ZXJmYWNlcyBpbnZvbHZlIDIgZGlzdGluY3QgY29tcG9uZW50cywgZWFjaCByZXByZXNlbnRlZCBieVxuK2EgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCBpbnN0YW5jZSA6XG4rXG4rIC0gVGhlIFNGUCBjYWdlIGl0c2VsZiBpcyBhIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWAuIEl0J3Mgc3BlY2lhbFxuKyAgIGluIHRoYXQgaXQncyBub3QgYW4gTURJIGludGVyZmFjZSwgYnV0IHJhdGhlciBhIGhvdC1wbHVnZ2FibGUgTUlJLlxuKyAgIFRoZSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgIGFzc29jaWF0ZWQgdG8gaXQgbGlzdHMgdGhlIGRpZmZlcmVudFxuKyAgIE1JSSBpbnRlcmZhY2VzIHdlIGNhbiB1c2Ugb24gdGhlIGNhZ2UuXG4rXG4rIC0gVGhlIFNGUCBtb2R1bGUsIHdoZW4gaW5zZXJ0ZWQsIHdpbGwgYWxzbyBiZSBhc3NvY2lhdGVkIHRvIGFcbisgICA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgLCB0aGF0IHJlcHJlc2VudHMgdGhlIHZhcmlvdXMgbGlua21vZGVzXG4rICAgdGhhdCBpdCBnaXZlcyBhY2Nlc3MgdG8uIFRoZSBtb2R1bGUncyA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgXG4rICAgZG9lc24ndCBzdXBlcnNlZGUgdGhlIGNhZ2UncyBwb3J0LCBpdCByZWZlcmVuY2VzIGl0IHRocm91Z2hcbisgICB0aGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCA6YzptZW1iZXI6YHVwc3RyZWFtX3BvcnRgIGZpZWxkLlxuK1xuIE5leHQgc3RlcHNcbiA9PT09PT09PT09XG4gXG4tQXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50YXRpb24sIG9ubHkgcG9ydHMgY29udHJvbGxlZCBieSBQSFkgZGV2aWNlcyBhcmVcbi1zdXBwb3J0ZWQuIFRoZSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gYWRkIHRoZSBOZXRsaW5rIEFQSSB0byBleHBvc2UgdGhlc2Vcbi10byB1c2Vyc3BhY2UgYW5kIGFkZCBzdXBwb3J0IGZvciByYXcgcG9ydHMgKGNvbnRyb2xsZWQgYnkgc29tZSBmaXJtd2FyZSwgYW5kIGRpcmVjdGx5XG4tbWFuYWdlZCBieSB0aGUgTklDIGRyaXZlcikuXG4rQXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50YXRpb24sIHRoZSBwb3J0J3MgcHJlc2VuY2UgYW5kIGluZm9ybWF0aW9uIGNhbiBvbmx5XG4rYmUgcXVlcmllZCwgYW5kIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgb2YgdGhlIHBvcnQncyBzZXR0aW5ncyBvciBzZWxlY3Rcbit3aGljaCBvbmUgc2hvdWxkIGJlIHVzZWQuXG4gXG4gQW5vdGhlciBwYXJhbGxlbCB0YXNrIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBNSUkgbXV4aW5nIGZyYW1ld29yayB0byBhbGxvdyB0aGVcbi1jb250cm9sIG9mIG5vbi1QSFkgZHJpdmVyIG11bHRpLXBvcnQgc2V0dXBzLlxuK2NvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZW4gbXVsdGktcG9ydCBzZXR1cHMuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMDBlN2IyNmUwYTIzZmEuLmQzMzg4MWVjMWY2MjU1IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTg3OTIsNiArMTg3OTIsNyBAQCBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ldGhlcm5ldC1jb25uZWN0b3IueWFtbFxuIEY6XHREb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0XG4gRjpcdGRyaXZlcnMvbmV0L3BoeS9waHlfcG9ydC5jXG4gRjpcdGluY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuK0Y6XHRuZXQvZXRodG9vbC9wb3J0LmNcbiBLOlx0c3RydWN0XFxzK3BoeV9wb3J0fHBoeV9wb3J0X1xuIFxuIE5FVFdPUktJTkcgW0dFTkVSQUxdXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxuaW5kZXggNDIxMDg4ZTZmNmU4ZjEuLmVjM2QzOWEwYWUwNmJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmhcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXG5AQCAtNjYsNSArNjYsNyBAQCB2b2lkIHBoeV9jYXBzX21lZGl1bV9nZXRfc3VwcG9ydGVkKHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcbiBcdFx0XHRcdCAgIGVudW0gZXRodG9vbF9saW5rX21lZGl1bSBtZWRpdW0sXG4gXHRcdFx0XHQgICBpbnQgbGFuZXMpO1xuIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2Rlcyk7XG4rdm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmcm9tLFxuK1x0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTtcbiBcbiAjZW5kaWYgLyogX19QSFlfQ0FQU19IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xuaW5kZXggOTQyZDQzMTkxNTYxZTIuLjU1OGU0ZGY0ZDYzYzA4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jXG5AQCAtNDQ1LDMgKzQ0NSwyOSBAQCB1MzIgcGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpXG4gXHRyZXR1cm4gbWVkaXVtcztcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyk7XG4rXG4rLyoqXG4rICogcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcygpIC0gRmlsdGVyIGxpbmttb2RlcyB3aXRoIGFuIGludGVyZmFjZSBsaXN0XG4rICogQHRvOiBTdG9yZXMgdGhlIGZpbHRlcmVkIGxpbmttb2Rlc1xuKyAqIEBmcm9tOiBMaW5rbW9kZXMgdG8gZmlsdGVyXG4rICogQGludGVyZmFjZXM6IEJpdGZpZWxkIG9mIHBoeV9pbnRlcmZhY2VfdCB0aGF0IHdlIHVzZSBmb3IgZmlsdGVyaW5nXG4rICpcbisgKiBGaWx0ZXIgdGhlIHByb3ZpZGVkIGxpbmttb2Rlcywgb25seSB0byBrZWVwIHRoZSBvbmVzIHdlIGNhbiBwb3NzaWJseSBhY2hpZXZlXG4rICogd2hlbiB1c2luZyBhbnkgb2YgdGhlIHByb3ZpZGVkIE1JSSBpbnRlcmZhY2VzLlxuKyAqL1xuK3ZvaWQgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyh1bnNpZ25lZCBsb25nICp0byxcbitcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcbitcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaW50ZXJmYWNlcylcbit7XG4rXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhpZmFjZXNfc3VwcG9ydGVkKSA9IHt9O1xuK1x0dW5zaWduZWQgaW50IGlmYWNlc19jYXBzID0gMDtcbitcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4rXG4rXHRmb3JfZWFjaF9zZXRfYml0KGludGVyZmFjZSwgaW50ZXJmYWNlcywgUEhZX0lOVEVSRkFDRV9NT0RFX01BWClcbitcdFx0aWZhY2VzX2NhcHMgfD0gcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UoaW50ZXJmYWNlKTtcbitcbitcdHBoeV9jYXBzX2xpbmttb2RlcyhpZmFjZXNfY2FwcywgaWZhY2VzX3N1cHBvcnRlZCk7XG4rXG4rXHRsaW5rbW9kZV9hbmQodG8sIGZyb20sIGlmYWNlc19zdXBwb3J0ZWQpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggMDYxNTIyODQ1OWVmNDIuLmQ1MjUxNWU3ZTMwMzAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE0OTAsMTEgKzE0OTAsMjIgQEAgc3RhdGljIGludCBwaHlfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxuIHtcbiBcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2O1xuK1x0aW50IHJldDtcbiBcbi1cdGlmIChkZXYpXG4tXHRcdHJldHVybiBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7XG4rXHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gdHJ1ZTtcbitcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbiBcbi1cdHJldHVybiAwO1xuK1x0LyogSWYgd2UgYXJlbid0IGF0dGFjaGVkIHRvIGEgbmV0ZGV2LCB3ZSBjYW4ndCBhZGQgdGhlIFNGUCBQSFkgdG8gaXRzXG4rXHQgKiB0b3BvbG9neS5cbitcdCAqL1xuK1x0aWYgKCFkZXYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcGh5KGRldiwgcGh5LCBQSFlfVVBTVFJFQU1fUEhZLCBwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cGh5ZGV2LVx1MDAzZWhhc19zZnBfbW9kX3BoeSA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyoqXG5AQCAtMTUxMiw4ICsxNTIzLDEyIEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfZGlzY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbiBcbitcdHBoeWRldi1cdTAwM2VoYXNfc2ZwX21vZF9waHkgPSBmYWxzZTtcbitcbiBcdGlmIChkZXYpXG4gXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeSk7XG4rXG4rXHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBOVUxMKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTYxNyw2ICsxNjMyLDc3IEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfbGlua19kb3duKHZvaWQgKnVwc3RyZWFtKVxuIFx0XHRwb3J0LVx1MDAzZW9wcy1cdTAwM2VsaW5rX2Rvd24ocG9ydCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcGh5X2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzO1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHQvKiBDcmVhdGUgbW9kIHBvcnQgKi9cbitcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuK1x0aWYgKCFwb3J0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBvcnQtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbitcbitcdGNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbitcbitcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXHUwMDNlbGlua19tb2RlcyxcbitcdFx0XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQtXHUwMDNlaW50ZXJmYWNlcyk7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldikge1xuK1x0XHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYsIHBvcnQpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiB3ZSBkb24ndCB1c2UgcGh5X2FkZF9wb3J0KCkgaGVyZSBhcyB0aGUgbW9kdWxlIHBvcnQgaXNuJ3QgYSBkaXJlY3RcbitcdCAqIGludGVyZmFjZSBmcm9tIHRoZSBQSFksIGJ1dCByYXRoZXIgYW4gZXh0ZW5zaW9uIHRvIHRoZSBzZnAtYnVzLCB0aGF0XG4rXHQgKiBpcyBhbHJlYWR5IHJlcHJlc2VudGVkIGJ5IGl0cyBvd24gcGh5X3BvcnRcbitcdCAqL1xuK1x0cGh5ZGV2LVx1MDAzZW1vZF9wb3J0ID0gcG9ydDtcbitcbitcdHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWlkO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBoeV9kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aWYgKCFwaHlkZXYtXHUwMDNlbW9kX3BvcnQpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2KVxuK1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4rXG4rXHRwaHlfcG9ydF9kZXN0cm95KHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4rXHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IHBoeV9zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuK3tcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcbitcbitcdC8qIElmIHRoZXJlJ3MgYSBkb3duc3RyZWFtIFNGUCBtb2R1bGUsIGFuZCBpdCBkb2Vzbid0IGNvbnRhaW4gYSBQSFlcbitcdCAqIGRldmljZSwgbGV0J3MgY3JlYXRlIGEgcGh5X3BvcnQgdG8gcmVwcmVzZW50IHRoYXQgbW9kdWxlLlxuK1x0ICovXG4rXHRpZiAoIXBoeWRldi1cdTAwM2VoYXNfc2ZwX21vZF9waHkpXG4rXHRcdHJldHVybiBwaHlfYWRkX3NmcF9tb2RfcG9ydChwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBoeV9zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXG4re1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuK1xuK1x0LyogQ2FsbGVkIHVwb24gbW9kdWxlIHJlbW92YWwgb3IgdXBzdHJlYW0gcmVtb3ZhbCAqL1xuK1x0aWYgKCFwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxuK1x0XHRwaHlfZGVsX3NmcF9tb2RfcG9ydChwaHlkZXYpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG4gXHQuYXR0YWNoID0gcGh5X3NmcF9hdHRhY2gsXG4gXHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXG5AQCAtMTYyNiw2ICsxNzEyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHNmcF9waHlkZXZfb3BzID0ge1xuIFx0LmxpbmtfZG93biA9IHBoeV9zZnBfbGlua19kb3duLFxuIFx0LmNvbm5lY3RfcGh5ID0gcGh5X3NmcF9jb25uZWN0X3BoeSxcbiBcdC5kaXNjb25uZWN0X3BoeSA9IHBoeV9zZnBfZGlzY29ubmVjdF9waHksXG4rXHQubW9kdWxlX3N0YXJ0ID0gcGh5X3NmcF9tb2R1bGVfc3RhcnQsXG4rXHQubW9kdWxlX3N0b3AgPSBwaHlfc2ZwX21vZHVsZV9zdG9wLFxuIH07XG4gXG4gc3RhdGljIGludCBwaHlfYWRkX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuQEAgLTE2NzMsMTMgKzE3NjEsMTMgQEAgc3RhdGljIHZvaWQgcGh5X2RlbF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbiBcdHBoeWRldi1cdTAwM2VuX3BvcnRzLS07XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4rc3RhdGljIHN0cnVjdCBwaHlfcG9ydCAqcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0c3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoIXBvcnQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdHBvcnQtXHUwMDNlcGFyZW50X3R5cGUgPSBQSFlfUE9SVF9QSFk7XG4gXHRwb3J0LVx1MDAzZXBoeSA9IHBoeWRldjtcbkBAIC0xNjk0LDEwICsxNzgyLDEyIEBAIHN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHQgKiB3aGVuIGF0dGFjaGluZyB0aGUgcG9ydCB0byB0aGUgcGh5ZGV2LlxuIFx0ICovXG4gXHRyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0KSB7XG4gXHRcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rXHR9XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIHBvcnQ7XG4gfVxuIFxuIC8qKlxuQEAgLTE3MDYsMjUgKzE3OTYsNDkgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiAgKi9cbiBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBOVUxMO1xuIFx0c3RydWN0IHNmcF9idXMgKmJ1cztcbi1cdGludCByZXQgPSAwO1xuK1x0aW50IHJldDtcbiBcbi1cdGlmIChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKSB7XG4tXHRcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XG4tXHRcdGlmIChJU19FUlIoYnVzKSlcbi1cdFx0XHRyZXR1cm4gUFRSX0VSUihidXMpO1xuK1x0aWYgKCFwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1cdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBidXM7XG4rXHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpO1xuK1x0aWYgKElTX0VSUihidXMpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihidXMpO1xuIFxuLVx0XHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgXHUwMDI2c2ZwX3BoeWRldl9vcHMpO1xuLVx0XHRzZnBfYnVzX3B1dChidXMpO1xuK1x0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBidXM7XG4gXG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuK1x0aWYgKGJ1cykge1xuK1x0XHRwb3J0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XG4rXHRcdGlmIChJU19FUlIocG9ydCkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKHBvcnQpO1xuK1x0XHRcdHBvcnQgPSBOVUxMO1xuK1x0XHRcdGdvdG8gb3V0X3NmcDtcbitcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKVxuLVx0XHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbitcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3J0O1xuK1xuK1x0Lyogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSBncmFicyBhIHJlZiB0byB0aGUgc2ZwIGJ1cyBvbiBzdWNjZXNzLCBpdCdzXG4rXHQgKiBzYWZlIHRvIHJlbGVhc2UgaXQgbm93LlxuK1x0ICovXG4rXHRzZnBfYnVzX3B1dChidXMpO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBwb3J0O1xuK1xuK1x0cmV0dXJuIHJldDtcbitcbitvdXRfcG9ydDpcbitcdGlmIChwb3J0KSB7XG4rXHRcdHBoeV9kZWxfcG9ydChwaHlkZXYsIHBvcnQpO1xuK1x0XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuK1x0fVxuK291dF9zZnA6XG4rXHRzZnBfYnVzX3B1dChidXMpO1xuK1x0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTgxNSw2ICsxOTI5LDEyIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0XHRlcnIgPSBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHlkZXYsIFBIWV9VUFNUUkVBTV9NQUMsIGRldik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBlcnJvcjtcbitcbitcdFx0aWYgKHBoeWRldi1cdTAwM2Vtb2RfcG9ydCkge1xuK1x0XHRcdGVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoZGV2LCBwaHlkZXYtXHUwMDNlbW9kX3BvcnQpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGVycm9yO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHQvKiBTb21lIEV0aGVybmV0IGRyaXZlcnMgdHJ5IHRvIGNvbm5lY3QgdG8gYSBQSFkgZGV2aWNlIGJlZm9yZVxuQEAgLTE5NTEsNiArMjA3MSw4IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LVx1MDAzZXBoeWRldiA9IE5VTEw7XG4gXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xuIFx0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuK1x0XHRpZiAocGh5ZGV2LVx1MDAzZW1vZF9wb3J0KVxuK1x0XHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwaHlkZXYtXHUwMDNlbW9kX3BvcnQpO1xuIFx0fVxuIFxuIFx0cGh5ZGV2LVx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XG5AQCAtMzU3OSw2ICszNzAxLDI4IEBAIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcbiBcbisvKipcbisgKiBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoKSAtIFNldHMgdGhlIHBoeV9wb3J0IGNvbnRyb2xsaW5nIHRoZSBNSUkgdGhpcyBQSFkgaXNcbisgKlx0XHRcdCAgICAgYXR0YWNoZWQgdG8uXG4rICogQHBoeWRldjogcG9pbnRlciB0byB0aGUgUEhZIGRldmljZSB3ZSBzZXQgdGhlIHVwc3RyZWFtIG9mLlxuKyAqIEBwb3J0OiBUaGUgcGh5X3BvcnQgdXBzdHJlYW0gb2YgdGhpcyBQSFksIGNhbiBiZSBOVUxMLlxuKyAqL1xuK3ZvaWQgcGh5X3NldF91cHN0cmVhbV9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbit7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7XG4rXG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwb3J0O1xuK1xuK1x0cGh5X2Zvcl9lYWNoX3BvcnQocGh5ZGV2LCBsb2NhbF9wb3J0KVxuK1x0XHRpZiAocG9ydClcbitcdFx0XHRsb2NhbF9wb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwb3J0LVx1MDAzZWlkO1xuK1x0XHRlbHNlXG4rXHRcdFx0bG9jYWxfcG9ydC1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3NldF91cHN0cmVhbV9wb3J0KTtcbitcbiAvKipcbiAgKiBmd25vZGVfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZndub2RlLCBmaW5kIHRoZSBtZGlvX2RldmljZVxuICAqIEBmd25vZGU6IHBvaW50ZXIgdG8gdGhlIG1kaW9fZGV2aWNlJ3MgZndub2RlXG5AQCAtMzgxNyw2ICszOTYxLDcgQEAgc3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbiBcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbitcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbiBcbiBcdHBoeV9jbGVhbnVwX3BvcnRzKHBoeWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuaW5kZXggNDEzNGRlN2FlMzEzZDIuLjVlMTM1YWI2MzZjMGI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXG5AQCAtNyw2ICs3LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfbGlua190b3BvbG9neS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X3BvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuQEAgLTIzLDE3ICsyNCw4MSBAQCBzdGF0aWMgaW50IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0eGFfaW5pdF9mbGFncyhcdTAwMjZ0b3BvLVx1MDAzZXBoeXMsIFhBX0ZMQUdTX0FMTE9DMSk7XG4gXHR0b3BvLVx1MDAzZW5leHRfcGh5X2luZGV4ID0gMTtcbiBcbitcdHhhX2luaXRfZmxhZ3MoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgWEFfRkxBR1NfQUxMT0MxKTtcbitcdHRvcG8tXHUwMDNlbmV4dF9wb3J0X2luZGV4ID0gMTtcbitcbiBcdGRldi1cdTAwM2VsaW5rX3RvcG8gPSB0b3BvO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmIChkZXYtXHUwMDNlbGlua190b3BvKVxuK1x0XHRyZXR1cm4gZGV2LVx1MDAzZWxpbmtfdG9wbztcbitcbitcdC8qIFRoZSB0b3BvbG9neSBpcyBhbGxvY2F0ZWQgdGhlIGZpcnN0IHRpbWUgd2UgYWRkIGFuIG9iamVjdCB0byBpdC5cbitcdCAqIEl0IGlzIGZyZWVkIGFsb25nc2lkZSB0aGUgbmV0ZGV2LiBJdCBjYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlXG4rXHQgKiBjb250ZXh0czpcbitcdCAqICAtIEl0IGNhbiBiZSBjYWxsZWQgZnJvbSAucHJvYmUoKSA6IE5vIHJ0bmwsIG5vIG5ldGRldl9sb2NrXG4rXHQgKiAgLSAubmRvX29wZW4oKSA6IHJ0bmwgYW5kIHBvc3NpYmx5IG5ldGRldl9sb2NrXG4rXHQgKiAgLSBTRlAgc3RhdGUgbWFjaGluZSA6IHJ0bmwgaGVsZCBvciBub3RcbitcdCAqXG4rXHQgKiAgSG93ZXZlciwgd2UgY2FuJ3QgcmVhbGx5IGhhdmUgcmFjZXMgOlxuK1x0ICogIC0gSWYgd2UgaGF2ZSBhIFBIWSwgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkgd2lsbCBhbHdheXMgcnVuIGZpcnN0XG4rXHQgKiAgICBhbmQgdHJpZ2dlciB0aGUgYWxsb2MuIE9ubHkgdGhlbiB0aGUgcG9ydHMgY2FuIGJlIGFkZGVkIHRocm91Z2hcbitcdCAqICAgIHBoeWxpYiBvZiBzZnAuXG4rXHQgKiAgLSBJZiB3ZSBkb24ndCwgdGhlIFNGUCBwb3J0IGZvciB0aGUgY2FnZSBpcyByZWdpc3RlcmVkIGZpcnN0LCBhbmRcbitcdCAqICAgIG9ubHkgdGhlbiBvdGhlciBwb3J0cy9QSFlzIGNhbiBiZSByZWdpc3RlcmVkLlxuK1x0ICovXG4rXHRyZXQgPSBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rXG4rXHRyZXR1cm4gZGV2LVx1MDAzZWxpbmtfdG9wbztcbit9XG4rXG4raW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuK3tcbitcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbztcbitcdGludCByZXQ7XG4rXG4rXHR0b3BvID0gcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2MoZGV2KTtcbitcdGlmIChJU19FUlIodG9wbykpXG4rXHRcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xuK1xuK1x0LyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovXG4rXHRpZiAocG9ydC1cdTAwM2VpZClcbitcdFx0cmV0ID0geGFfaW5zZXJ0KFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIHBvcnQtXHUwMDNlaWQsIHBvcnQsIEdGUF9LRVJORUwpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSB4YV9hbGxvY19jeWNsaWMoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgXHUwMDI2cG9ydC1cdTAwM2VpZCwgcG9ydCxcbitcdFx0XHRcdCAgICAgIHhhX2xpbWl0XzMyYiwgXHUwMDI2dG9wby1cdTAwM2VuZXh0X3BvcnRfaW5kZXgsXG4rXHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fYWRkX3BvcnQpO1xuK1xuK3ZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbitcbitcdGlmICghdG9wbylcbitcdFx0cmV0dXJuO1xuK1xuK1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgcG9ydC1cdTAwM2VpZCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fZGVsX3BvcnQpO1xuK1xuIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4gXHRcdFx0ICBlbnVtIHBoeV91cHN0cmVhbSB1cHQsIHZvaWQgKnVwc3RyZWFtKVxuIHtcbi1cdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cdTAwM2VsaW5rX3RvcG87XG4rXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG87XG4gXHRzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogZXRodG9vbCBvcHMgbWF5IHJ1biB3aXRob3V0IHJ0bmxfbG9jaywgYW5kIHJ0bmxfbG9jayBpcyB3aGF0XG5AQCAtNDUsMTMgKzExMCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChXQVJOX09OX09OQ0UobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghdG9wbykge1xuLVx0XHRyZXQgPSBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koZGV2KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHR0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbi1cdH1cbitcdHRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpO1xuK1x0aWYgKElTX0VSUih0b3BvKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIodG9wbyk7XG4gXG4gXHRwZG4gPSBremFsbG9jX29iaigqcGRuKTtcbiBcdGlmICghcGRuKVxuQEAgLTg2LDggKzE0NywyMCBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbitcdC8qIEFkZCBhbGwgdGhlIFBIWSdzIHBvcnRzIHRvIHRoZSB0b3BvbG9neSAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwaHktXHUwMDNlcG9ydHMsIGhlYWQpIHtcbitcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBvcnQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gZGVsX3BvcnRzO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gXG4rZGVsX3BvcnRzOlxuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbitcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuK1xuK1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBwaHktXHUwMDNlcGh5aW5kZXgpO1xuIGVycjpcbiBcdGtmcmVlKHBkbik7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTk5LDEwICsxNzIsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuIFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuIFxuIFx0aWYgKCF0b3BvKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbitcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuK1xuIFx0cGRuID0geGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBwaHktXHUwMDNlcGh5aW5kZXgpO1xuIFxuIFx0LyogV2UgZGVsZXRlIHRoZSBQSFkgZnJvbSB0aGUgdG9wb2xvZ3ksIGhvd2V2ZXIgd2UgZG9uJ3QgcmUtc2V0IHRoZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5pbmRleCA1OWRmZTM1YWZhNTRmYy4uNWNmYmZjYzEwNzlhZDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5AQCAtMTQsNiArMTQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2ZpeGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfbGlua190b3BvbG9neS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X3BvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeWxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuQEAgLTkzLDYgKzk1LDggQEAgc3RydWN0IHBoeWxpbmsge1xuIFx0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soc2ZwX2ludGVyZmFjZXMpO1xuIFx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc2ZwX3N1cHBvcnQpO1xuIFx0dTggc2ZwX3BvcnQ7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xuIFxuIFx0c3RydWN0IGVlZV9jb25maWcgZWVlX2NmZztcbiBcbkBAIC0xNzY0LDYgKzE3NjgsNTEgQEAgc3RhdGljIHZvaWQgcGh5bGlua19maXhlZF9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHM7XG4gXG4rc3RhdGljIGludCBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbit7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmICghcGwtXHUwMDNlbmV0ZGV2IHx8ICFwbC1cdTAwM2VzZnBfYnVzKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuK1x0aWYgKCFwb3J0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBvcnQtXHUwMDNlaXNfc2ZwID0gdHJ1ZTtcbitcdHBvcnQtXHUwMDNlaXNfbWlpID0gdHJ1ZTtcbitcdHBvcnQtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbitcbitcdHBoeV9pbnRlcmZhY2VfYW5kKHBvcnQtXHUwMDNlaW50ZXJmYWNlcywgcGwtXHUwMDNlY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzLFxuK1x0XHRcdCAgcGh5bGlua19zZnBfaW50ZXJmYWNlcyk7XG4rXHRwaHlfcG9ydF91cGRhdGVfc3VwcG9ydGVkKHBvcnQpO1xuK1xuK1x0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBvcnQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfZGVzdHJveV9wb3J0O1xuK1xuK1x0cGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitvdXRfZGVzdHJveV9wb3J0OlxuK1x0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbitcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxuK3tcbitcdGlmIChwbC1cdTAwM2VuZXRkZXYgXHUwMDI2XHUwMDI2IHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpXG4rXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtXHUwMDNlbmV0ZGV2LCBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbitcbitcdGlmIChwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KVxuK1x0XHRwaHlfcG9ydF9kZXN0cm95KHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpO1xuK1xuK1x0cGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbiB7XG5AQCAtMTc4MSw5ICsxODMwLDE4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLFxuIFxuIFx0cGwtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbiBcbitcdHJldCA9IHBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnQocGwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRzZnBfYnVzX3B1dChidXMpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuIFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwbCwgXHUwMDI2c2ZwX3BoeWxpbmtfb3BzKTtcbiBcdHNmcF9idXNfcHV0KGJ1cyk7XG4gXG4rXHRpZiAocmV0KVxuK1x0XHRwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChwbCk7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xOTQ1LDYgKzIwMDMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2NyZWF0ZSk7XG4gdm9pZCBwaHlsaW5rX2Rlc3Ryb3koc3RydWN0IHBoeWxpbmsgKnBsKVxuIHtcbiBcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBsLVx1MDAzZXNmcF9idXMpO1xuK1x0cGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpO1xuIFx0aWYgKHBsLVx1MDAzZWxpbmtfZ3BpbylcbiBcdFx0Z3Bpb2RfcHV0KHBsLVx1MDAzZWxpbmtfZ3Bpbyk7XG4gXG5AQCAtMzg3MCwxNCArMzkyOSw2NyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfcmVtb3ZlKHZvaWQgKnVwc3RyZWFtKVxuIFx0cGh5X2ludGVyZmFjZV96ZXJvKHBsLVx1MDAzZXNmcF9pbnRlcmZhY2VzKTtcbiB9XG4gXG4rc3RhdGljIGludCBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmICghcGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBDcmVhdGUgbW9kIHBvcnQgKi9cbitcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuK1x0aWYgKCFwb3J0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBvcnQtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbitcbitcdGNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBsLVx1MDAzZXNmcF9idXMpO1xuK1xuK1x0cGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyhwb3J0LVx1MDAzZXN1cHBvcnRlZCwgY2Fwcy1cdTAwM2VsaW5rX21vZGVzLFxuK1x0XHRcdFx0XHRwbC1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuK1xuK1x0aWYgKHBsLVx1MDAzZW5ldGRldikge1xuK1x0XHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcG9ydCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQtXHUwMDNlaWQ7XG4rXG4rXHRwbC1cdTAwM2Vtb2RfcG9ydCA9IHBvcnQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbit7XG4rXHRpZiAoIXBsLVx1MDAzZW1vZF9wb3J0KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocGwtXHUwMDNlbmV0ZGV2KVxuK1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcGwtXHUwMDNlbW9kX3BvcnQpO1xuK1xuK1x0cGh5X3BvcnRfZGVzdHJveShwbC1cdTAwM2Vtb2RfcG9ydCk7XG4rXHRwbC1cdTAwM2Vtb2RfcG9ydCA9IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuIHtcbiBcdHN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtO1xuK1x0aW50IHJldDtcbiBcbiBcdC8qIElmIHRoaXMgU0ZQIG1vZHVsZSBoYXMgYSBQSFksIHN0YXJ0IHRoZSBQSFkgbm93LiAqL1xuIFx0aWYgKHBsLVx1MDAzZXBoeWRldikge1xuIFx0XHRwaHlfc3RhcnQocGwtXHUwMDNlcGh5ZGV2KTtcbiBcdFx0cmV0dXJuIDA7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQocGwpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHQvKiBJZiB0aGUgbW9kdWxlIG1heSBoYXZlIGEgUEhZIGJ1dCB3ZSBkaWRuJ3QgZGV0ZWN0IG9uZSB3ZVxuQEAgLTM4ODYsNyArMzk5OCwxNiBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcbiBcdGlmICghcGwtXHUwMDNlc2ZwX21heV9oYXZlX3BoeSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpO1xuK1x0cmV0ID0gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBkZWxfbW9kX3BvcnQ7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitkZWxfbW9kX3BvcnQ6XG4rXHRwaHlsaW5rX2RlbF9zZnBfbW9kX3BvcnQocGwpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXG5AQCAtMzg5Niw2ICs0MDE3LDggQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXG4gXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdG9wIGl0LiAqL1xuIFx0aWYgKHBsLVx1MDAzZXBoeWRldilcbiBcdFx0cGh5X3N0b3AocGwtXHUwMDNlcGh5ZGV2KTtcbitcdGVsc2VcbitcdFx0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbGlua19kb3duKHZvaWQgKnVwc3RyZWFtKVxuQEAgLTM5NDAsNiArNDA2Myw4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4gXHRwaHlfaW50ZXJmYWNlX2FuZChwaHktXHUwMDNlaG9zdF9pbnRlcmZhY2VzLCBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzLFxuIFx0XHRcdCAgcGwtXHUwMDNlY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiBcbitcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpO1xuK1xuIFx0LyogRG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiAqL1xuIFx0cmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19waHkocGwsIHBoeSk7XG4gfVxuQEAgLTM5NDgsNiArNDA3Myw3IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2Rpc2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh1cHN0cmVhbSk7XG4rXHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5ZGV2LCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHNmcF9waHlsaW5rX29wcyA9IHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggYmVmZjFkNmZjYzdjZGEuLjgyOTZmNGY1OWNlM2IyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTU4Miw2ICs1ODIsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHdvbF9lbmFibGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGUgUEhZIG9yIHRoZSBhdHRhY2hlZCBNQUMgaGF2ZSBXYWtlLW9uLUxBTlxuICAqIFx0XHQgZW5hYmxlZC5cbiAgKiBAaXNfZ2VucGh5X2RyaXZlbjogUEhZIGlzIGRyaXZlbiBieSBvbmUgb2YgdGhlIGdlbmVyaWMgUEhZIGRyaXZlcnNcbisgKiBAaGFzX3NmcF9tb2RfcGh5OiBTZXQgdHJ1ZSBpZiBkb3duc3RyZWFtIFNGUCBidXMncyBtb2R1bGUgY29udGFpbnMgYSBQSFlcbiAgKiBAc3RhdGU6IFN0YXRlIG9mIHRoZSBQSFkgZm9yIG1hbmFnZW1lbnQgcHVycG9zZXNcbiAgKiBAZGV2X2ZsYWdzOiBEZXZpY2Utc3BlY2lmaWMgZmxhZ3MgdXNlZCBieSB0aGUgUEhZIGRyaXZlci5cbiAgKlxuQEAgLTU5NCw2ICs1OTUsOSBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHBoeWxpbms6IFBvaW50ZXIgdG8gcGh5bGluayBpbnN0YW5jZSBmb3IgdGhpcyBQSFlcbiAgKiBAc2ZwX2J1c19hdHRhY2hlZDogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFNGUCBidXMgaGFzIGJlZW4gYXR0YWNoZWRcbiAgKiBAc2ZwX2J1czogU0ZQIGJ1cyBhdHRhY2hlZCB0byB0aGlzIFBIWSdzIGZpYmVyIHBvcnRcbisgKiBAc2ZwX2NhZ2VfcG9ydDogVGhlIHBoeV9wb3J0IGNvbm5lY3RlZCB0byB0aGUgZG93bnN0cmVhbSBTRlAgY2FnZVxuKyAqIEBtb2RfcG9ydDogcGh5X3BvcnQgcmVwcmVzZW50aW5nIHRoZSBTRlAgbW9kdWxlLCBpZiBpdCBpcyBwaHktbGVzc1xuKyAqIEB1cHN0cmVhbV9wb3J0OiBwaHlfcG9ydCB0aGlzIFBIWSdzIE1JSSBhdHRhY2hlcyB0bywgaWYgYW55XG4gICogQGF0dGFjaGVkX2RldjogVGhlIGF0dGFjaGVkIGVuZXQgZHJpdmVyJ3MgZGV2aWNlIGluc3RhbmNlIHB0clxuICAqIEBhZGp1c3RfbGluazogQ2FsbGJhY2sgZm9yIHRoZSBlbmV0IGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBjaGFuZ2VzOiBpbiB0aGVcbiAgKiAgICAgICAgICAgICAgIGxpbmsgc3RhdGUuXG5AQCAtNzA2LDYgKzcxMCw3IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcbiBcdHVuc2lnbmVkIGlycV9yZXJ1bjoxO1xuIFxuIFx0dW5zaWduZWQgZGVmYXVsdF90aW1lc3RhbXA6MTtcbitcdHVuc2lnbmVkIGhhc19zZnBfbW9kX3BoeToxO1xuIFxuIFx0aW50IHJhdGVfbWF0Y2hpbmc7XG4gXG5AQCAtNzg1LDYgKzc5MCw5IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcbiBcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cbiBcdGJvb2wgc2ZwX2J1c19hdHRhY2hlZDtcbiBcdHN0cnVjdCBzZnBfYnVzICpzZnBfYnVzO1xuK1x0c3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0O1xuK1x0c3RydWN0IHBoeV9wb3J0ICptb2RfcG9ydDtcbitcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcbiBcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmF0dGFjaGVkX2RldjtcbiBcdHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cztcbkBAIC0yNDY1LDYgKzI0NzMsOCBAQCBpbnQgX19waHlfaHd0c3RhbXBfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXG4gc3RydWN0IHBoeV9wb3J0ICpwaHlfZ2V0X3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIFxuK3ZvaWQgcGh5X3NldF91cHN0cmVhbV9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4rXG4gLyoqXG4gICogcGh5X21vZHVsZV9kcml2ZXIoKSAtIEhlbHBlciBtYWNybyBmb3IgcmVnaXN0ZXJpbmcgUEhZIGRyaXZlcnNcbiAgKiBAX19waHlfZHJpdmVyczogYXJyYXkgb2YgUEhZIGRyaXZlcnMgdG8gcmVnaXN0ZXJcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcbmluZGV4IDk1NTc1ZjY4ZDViYzcxLi45NTYyOTExMjIwNGVhOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXG5AQCAtMTMsMTQgKzEzLDE5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuIHN0cnVjdCB4YXJyYXk7XG4gc3RydWN0IHBoeV9kZXZpY2U7XG4rc3RydWN0IHBoeV9wb3J0O1xuIHN0cnVjdCBzZnBfYnVzO1xuIFxuIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSB7XG4gXHRzdHJ1Y3QgeGFycmF5IHBoeXM7XG4gXHR1MzIgbmV4dF9waHlfaW5kZXg7XG4rXG4rXHRzdHJ1Y3QgeGFycmF5IHBvcnRzO1xuK1x0dTMyIG5leHRfcG9ydF9pbmRleDtcbiB9O1xuIFxuIHN0cnVjdCBwaHlfZGV2aWNlX25vZGUge1xuQEAgLTQ4LDYgKzUzLDkgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuIFxuK2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4rdm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqXG4gcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiB7XG5AQCAtNjQsNiArNzIsMjAgQEAgcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXG4rcGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZClcbit7XG4rXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGlmICghdG9wbylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHQvKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwgd2hpbGUgaGFuZGxpbmcgdGhlIHBoeV9wb3J0ICovXG4rXHRyZXR1cm4geGFfbG9hZChcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzLCBwb3J0X2lkKTtcbit9XG4rXG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbkBAIC03NywxMSArOTksMjggQEAgc3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbit7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKlxuIHBoeV9saW5rX3RvcG9fZ2V0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcGh5aW5kZXgpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9wb3J0ICpcbitwaHlfbGlua190b3BvX2dldF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwb3J0X2lkKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19QSFlfTElOS19UT1BPTE9HWV9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oIGIvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oXG5pbmRleCAwZWYwZjVjZTQ3MDkyNi4uZTNhNDFjZWRlYmRjZmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuQEAgLTM2LDkgKzM2LDEyIEBAIHN0cnVjdCBwaHlfcG9ydF9vcHMge1xuIC8qKlxuICAqIHN0cnVjdCBwaHlfcG9ydCAtIEEgcmVwcmVzZW50YXRpb24gb2YgYSBuZXR3b3JrIGRldmljZSBwaHlzaWNhbCBpbnRlcmZhY2VcbiAgKlxuKyAqIEBpZDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwb3J0IHdpdGhpbiB0aGUgdG9wb2xvZ3lcbiAgKiBAaGVhZDogVXNlZCBieSB0aGUgcG9ydCdzIHBhcmVudCB0byBsaXN0IHBvcnRzXG4gICogQHBhcmVudF90eXBlOiBUaGUgdHlwZSBvZiBkZXZpY2UgdGhpcyBwb3J0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0b1xuICAqIEBwaHk6IElmIHRoZSBwYXJlbnQgaXMgUEhZX1BPUlRfUEhZREVWLCB0aGUgUEhZIGNvbnRyb2xsaW5nIHRoYXQgcG9ydFxuKyAqIEB1cHN0cmVhbV9wb3J0OiBGb3Igbm9uLU1JSSBwb3J0cywgaW5kaWNhdGVzIHRoZSBNSUkgcG9ydCB0aGF0IGZlZWRzIHRoaXNcbisgKlx0XHQgICBwb3J0LCBlLmcuIHRoZSBTRlAgY2FnZSBwb3J0IGZvciBhIFNGUCBtb2R1bGUgcG9ydC5cbiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlclxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxuICAqIEBtZWRpdW1zOiBCaXRtYXNrIG9mIHRoZSBwaHlzaWNhbCBtZWRpdW1zIHRoaXMgcG9ydCBwcm92aWRlcyBhY2Nlc3MgdG9cbkBAIC01MiwxMSArNTUsMTMgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7XG4gICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuXG4gICovXG4gc3RydWN0IHBoeV9wb3J0IHtcbitcdHUzMiBpZDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgaGVhZDtcbiBcdGVudW0gcGh5X3BvcnRfcGFyZW50IHBhcmVudF90eXBlO1xuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xuIFx0fTtcbitcdHUzMiB1cHN0cmVhbV9wb3J0O1xuIFxuIFx0Y29uc3Qgc3RydWN0IHBoeV9wb3J0X29wcyAqb3BzO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5pbmRleCA4MTM0YmFmNzg2MGYzYy4uZjlkODc5NGVhYmMxOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5AQCAtNzgsNiArNzgsMTEgQEAgZW51bSBldGh0b29sX3BzZV9ldmVudCB7XG4gXHRFVEhUT09MX1BTRV9FVkVOVF9TV19QV19DT05UUk9MX0VSUk9SID0gNjQsXG4gfTtcbiBcbitlbnVtIGV0aHRvb2xfcG9ydF90eXBlIHtcbitcdEVUSFRPT0xfUE9SVF9UWVBFX01ESSxcbitcdEVUSFRPT0xfUE9SVF9UWVBFX1NGUCxcbit9O1xuK1xuIGVudW0ge1xuIFx0RVRIVE9PTF9BX0hFQURFUl9VTlNQRUMsXG4gXHRFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWCxcbkBAIC04NDAsNiArODQ1LDE4IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9BX01TRV9NQVggPSAoX19FVEhUT09MX0FfTVNFX0NOVCAtIDEpXG4gfTtcbiBcbitlbnVtIHtcbitcdEVUSFRPT0xfQV9QT1JUX0hFQURFUiA9IDEsXG4rXHRFVEhUT09MX0FfUE9SVF9JRCxcbitcdEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyxcbitcdEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTLFxuK1x0RVRIVE9PTF9BX1BPUlRfVFlQRSxcbitcdEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsXG4rXG4rXHRfX0VUSFRPT0xfQV9QT1JUX0NOVCxcbitcdEVUSFRPT0xfQV9QT1JUX01BWCA9IChfX0VUSFRPT0xfQV9QT1JUX0NOVCAtIDEpXG4rfTtcbitcbiBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1VTRVJfTk9ORSA9IDAsXG4gXHRFVEhUT09MX01TR19TVFJTRVRfR0VUID0gMSxcbkBAIC04OTMsNiArOTEwLDcgQEAgZW51bSB7XG4gXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCxcbiBcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfQUNULFxuIFx0RVRIVE9PTF9NU0dfTVNFX0dFVCxcbitcdEVUSFRPT0xfTVNHX1BPUlRfR0VULFxuIFxuIFx0X19FVEhUT09MX01TR19VU0VSX0NOVCxcbiBcdEVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKVxuQEAgLTk1NCw2ICs5NzIsNyBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfTlRGLFxuIFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9OVEYsXG4gXHRFVEhUT09MX01TR19NU0VfR0VUX1JFUExZLFxuK1x0RVRIVE9PTF9NU0dfUE9SVF9HRVRfUkVQTFksXG4gXG4gXHRfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQsXG4gXHRFVEhUT09MX01TR19LRVJORUxfTUFYID0gKF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCAtIDEpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggYzFjMWJlMWE2OTYyZmUuLmIzNmNjNWM0NzgxNmE0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTEzMTUsNiArMTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXHUwMDI2XHUwMDI2IHRvcG8pIHtcbiBcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMpO1xuK1x0XHR4YV9kZXN0cm95KFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMpO1xuIFx0XHRrZnJlZSh0b3BvKTtcbiBcdFx0ZGV2LVx1MDAzZWxpbmtfdG9wbyA9IE5VTEw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuaW5kZXggNjI5YzEwOTE2NjcwZWMuLjliNWIwOTY3MDAwODExIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbisrKyBiL25ldC9ldGh0b29sL01ha2VmaWxlXG5AQCAtOSw0ICs5LDQgQEAgZXRodG9vbF9ubC15XHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxuIFx0XHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxuIFx0XHQgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXFxcbiBcdFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxuLVx0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vXG4rXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gcG9ydC5vXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5pbmRleCAxYWYzOTViNTQzMzBlMi4uYzA3NmMwN2QwYTA4MGMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmNcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xuQEAgLTI2LDYgKzI2LDggQEAgc3RhdGljIHUzMiBldGhubF9iY2FzdF9zZXE7XG4gXHRcdFx0ICAgICBFVEhUT09MX0ZMQUdfT01JVF9SRVBMWSlcbiAjZGVmaW5lIEVUSFRPT0xfRkxBR1NfU1RBVFMgKEVUSFRPT0xfRkxBR1NfQkFTSUMgfCBFVEhUT09MX0ZMQUdfU1RBVFMpXG4gXG4rY2hhciBwaHlfaW50ZXJmYWNlX25hbWVzW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdW0VUSF9HU1RSSU5HX0xFTl0gX19yb19hZnRlcl9pbml0O1xuK1xuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lbXSA9IHtcbiBcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9OQU1FXVx0PSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsXG5AQCAtNDMxLDYgKzQzMyw3IEBAIGV0aG5sX2RlZmF1bHRfcmVxdWVzdHNbX19FVEhUT09MX01TR19VU0VSX0NOVF0gPSB7XG4gXHRbRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUXVx0PSBcdTAwMjZldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcyxcbiBcdFtFVEhUT09MX01TR19QSFlfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX3BoeV9yZXF1ZXN0X29wcyxcbiBcdFtFVEhUT09MX01TR19NU0VfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX21zZV9yZXF1ZXN0X29wcyxcbitcdFtFVEhUT09MX01TR19QT1JUX0dFVF1cdFx0PSBcdTAwMjZldGhubF9wb3J0X3JlcXVlc3Rfb3BzLFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbkBAIC0xNTcyLDYgKzE1NzUsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7XG4gXHRcdC5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSxcbiBcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsXG4gXHR9LFxuK1x0e1xuK1x0XHQuY21kXHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VULFxuK1x0XHQuZG9pdFx0PSBldGhubF9kZWZhdWx0X2RvaXQsXG4rXHRcdC5zdGFydFx0PSBldGhubF9wb3J0X2R1bXBfc3RhcnQsXG4rXHRcdC5kdW1waXRcdD0gZXRobmxfcG9ydF9kdW1waXQsXG4rXHRcdC5kb25lXHQ9IGV0aG5sX3BvcnRfZHVtcF9kb25lLFxuK1x0XHQucG9saWN5ID0gZXRobmxfcG9ydF9nZXRfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcG9ydF9nZXRfcG9saWN5KSAtIDEsXG4rXHR9LFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0ge1xuQEAgLTE1OTQsMTAgKzE2MDYsMjMgQEAgc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBldGh0b29sX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcbiAvKiBtb2R1bGUgc2V0dXAgKi9cbiBcbitzdGF0aWMgdm9pZCBfX2luaXQgZXRobmxfcGh5X25hbWVzX3BvcHVsYXRlKHZvaWQpXG4re1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUEhZX0lOVEVSRkFDRV9NT0RFX01BWDsgaSsrKSB7XG4rXHRcdG5hbWUgPSBwaHlfbW9kZXMoaSk7XG4rXHRcdHN0cnNjcHkocGh5X2ludGVyZmFjZV9uYW1lc1tpXSwgbmFtZSwgRVRIX0dTVFJJTkdfTEVOKTtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBfX2luaXQgZXRobmxfaW5pdCh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG4gXG4rXHRldGhubF9waHlfbmFtZXNfcG9wdWxhdGUoKTtcbitcbiBcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmV0aHRvb2xfZ2VubF9mYW1pbHkpO1xuIFx0aWYgKFdBUk4ocmV0IFx1MDAzYyAwLCBcImV0aHRvb2w6IGdlbmV0bGluayBmYW1pbHkgcmVnaXN0cmF0aW9uIGZhaWxlZFwiKSlcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbmluZGV4IDNlOTY5YTA3MGY5ZmU0Li5iMjUwZThiNWM0ZDQ3NSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxuKysrIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5AQCAtNSwxMSArNSwxNSBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZXRobmxfcmVxX2luZm87XG4gXG4rZXh0ZXJuIGNoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dO1xuK1xuK3UzMiBldGhubF9iY2FzdF9zZXFfbmV4dCh2b2lkKTtcbiBpbnQgZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmVzdCwgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG5AQCAtNDc0LDYgKzQ3OCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbW1fcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21zZV9yZXF1ZXN0X29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHM7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5X3N0YXRzW0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgKyAxXTtcbkBAIC01MzAsNiArNTM1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcG9ydF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QT1JUX0lEICsgMV07XG4gXG4gaW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBpbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5AQCAtNTQ1LDYgKzU1MSw5IEBAIGludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4gaW50IGV0aG5sX3RzaW5mb19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4gaW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBpbnQgZXRobmxfcnNzX2RlbGV0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuK2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbitpbnQgZXRobmxfcG9ydF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbitpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBcbiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19zdGRfbmFtZXNbX19FVEhUT09MX1NUQVRTX0NOVF1bRVRIX0dTVFJJTkdfTEVOXTtcbiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19ldGhfcGh5X25hbWVzW19fRVRIVE9PTF9BX1NUQVRTX0VUSF9QSFlfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BvcnQuYyBiL25ldC9ldGh0b29sL3BvcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYjJjYzA1ZGY5ZjkwYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2V0aHRvb2wvcG9ydC5jXG5AQCAtMCwwICsxLDM3NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIENvcHlyaWdodCAyMDI2IEJvb3RsaW5cbisgKi9cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfcG9ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImJpdHNldC5oXCJcbisjaW5jbHVkZSBcImNvbW1vbi5oXCJcbisjaW5jbHVkZSBcIm5ldGxpbmsuaFwiXG4rXG4rc3RydWN0IHBvcnRfcmVxX2luZm8ge1xuK1x0c3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7XG4rXHR1MzIgcG9ydF9pZDtcbit9O1xuK1xuK3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEge1xuK1x0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGFcdGJhc2U7XG4rXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpO1xuK1x0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soaW50ZXJmYWNlcyk7XG4rXHR1MzIgcG9ydF9pZDtcbitcdGJvb2wgbWlpO1xuK1x0Ym9vbCBzZnA7XG4rXHR1MzIgdXBzdHJlYW1fcG9ydDtcbit9O1xuK1xuKyNkZWZpbmUgUE9SVF9SRVFJTkZPKF9fcmVxX2Jhc2UpIFxcXG4rXHRjb250YWluZXJfb2YoX19yZXFfYmFzZSwgc3RydWN0IHBvcnRfcmVxX2luZm8sIGJhc2UpXG4rXG4rI2RlZmluZSBQT1JUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxuK1x0Y29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBvcnRfcmVwbHlfZGF0YSwgYmFzZSlcbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXG4rXHRbRVRIVE9PTF9BX1BPUlRfSURdID0gTkxBX1BPTElDWV9NSU4oTkxBX1UzMiwgMSksXG4rfTtcbitcbitzdGF0aWMgaW50IHBvcnRfcGFyc2VfcmVxdWVzdChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRiLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4rXG4rXHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBFVEhUT09MX0FfUE9SVF9JRCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVxdWVzdC1cdTAwM2Vwb3J0X2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BPUlRfSURdKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXG4rXHRcdFx0ICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XG4rXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4rXG4rXHQvKiBSVE5MIG11c3QgYmUgaGVsZCB3aGlsZSBob2xkaW5nIGEgcmVmIHRvIHRoZSBwaHlfcG9ydC4gSGVyZSwgY2FsbGVyXG4rXHQgKiBob2xkcyBSVE5MLlxuK1x0ICovXG4rXHRwb3J0ID0gcGh5X2xpbmtfdG9wb19nZXRfcG9ydChyZXFfaW5mby1cdTAwM2VkZXYsIHJlcXVlc3QtXHUwMDNlcG9ydF9pZCk7XG4rXHRpZiAoIXBvcnQpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0bGlua21vZGVfY29weShyZXBseS1cdTAwM2VzdXBwb3J0ZWQsIHBvcnQtXHUwMDNlc3VwcG9ydGVkKTtcbitcdHBoeV9pbnRlcmZhY2VfY29weShyZXBseS1cdTAwM2VpbnRlcmZhY2VzLCBwb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuK1x0cmVwbHktXHUwMDNlcG9ydF9pZCA9IHBvcnQtXHUwMDNlaWQ7XG4rXHRyZXBseS1cdTAwM2VtaWkgPSBwb3J0LVx1MDAzZWlzX21paTtcbitcdHJlcGx5LVx1MDAzZXNmcCA9IHBvcnQtXHUwMDNlaXNfc2ZwO1xuK1x0cmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKVxuK3tcbitcdGJvb2wgY29tcGFjdCA9IHJlcV9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBFVEhUT09MX0ZMQUdfQ09NUEFDVF9CSVRTRVRTO1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XG4rXHRzaXplX3Qgc2l6ZSA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogRVRIVE9PTF9BX1BPUlRfSUQgKi9cbitcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xuK1xuK1x0aWYgKCFyZXBseS1cdTAwM2VtaWkpIHtcbitcdFx0LyogRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTICovXG4rXHRcdHJldCA9IGV0aG5sX2JpdHNldF9zaXplKHJlcGx5LVx1MDAzZXN1cHBvcnRlZCwgTlVMTCxcbitcdFx0XHRcdFx0X19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLFxuK1x0XHRcdFx0XHRsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHNpemUgKz0gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMgKi9cbitcdFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbitcdFx0XHRcdFx0UEhZX0lOVEVSRkFDRV9NT0RFX01BWCxcbitcdFx0XHRcdFx0cGh5X2ludGVyZmFjZV9uYW1lcywgY29tcGFjdCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0c2l6ZSArPSByZXQ7XG4rXHR9XG4rXG4rXHQvKiBFVEhUT09MX0FfUE9SVF9UWVBFICovXG4rXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbitcbitcdC8qIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQgKi9cbitcdGlmIChyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KVxuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEpXG4re1xuK1x0Ym9vbCBjb21wYWN0ID0gcmVxX2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7XG4rXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcbitcdGludCByZXQsIHBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX01ESTtcbitcbitcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS1cdTAwM2Vwb3J0X2lkKSlcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdGlmICghcmVwbHktXHUwMDNlbWlpKSB7XG4rXHRcdHJldCA9IGV0aG5sX3B1dF9iaXRzZXQoc2tiLCBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMsXG4rXHRcdFx0XHQgICAgICAgcmVwbHktXHUwMDNlc3VwcG9ydGVkLCBOVUxMLFxuK1x0XHRcdFx0ICAgICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyxcbitcdFx0XHRcdCAgICAgICBsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsXG4rXHRcdFx0XHQgICAgICAgcmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbitcdFx0XHRcdCAgICAgICBQSFlfSU5URVJGQUNFX01PREVfTUFYLFxuK1x0XHRcdFx0ICAgICAgIHBoeV9pbnRlcmZhY2VfbmFtZXMsIGNvbXBhY3QpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAocmVwbHktXHUwMDNlbWlpIHx8IHJlcGx5LVx1MDAzZXNmcClcbitcdFx0cG9ydF90eXBlID0gRVRIVE9PTF9QT1JUX1RZUEVfU0ZQO1xuK1xuK1x0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfVFlQRSwgcG9ydF90eXBlKSlcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdGlmIChyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0IFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCxcbitcdFx0XHRyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KSlcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdHJ1Y3QgcG9ydF9kdW1wX2N0eCB7XG4rXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mb1x0KnJlcV9pbmZvO1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YVx0KnJlcGx5X2RhdGE7XG4rXHR1bnNpZ25lZCBsb25nXHRcdGlmaW5kZXg7XG4rXHR1bnNpZ25lZCBsb25nXHRcdHBvc19pZmluZGV4O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRwb3NfcG9ydGlkO1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpcbitwb3J0X2R1bXBfY3R4X2dldChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0cmV0dXJuIChzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqKWNiLVx1MDAzZWN0eDtcbit9XG4rXG4raW50IGV0aG5sX3BvcnRfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTtcbitcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4rXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWluZm8uYXR0cnM7XG4rXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseV9kYXRhO1xuK1x0c3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcV9pbmZvO1xuK1x0aW50IHJldDtcbitcbitcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXHUwMDNlIHNpemVvZihjYi1cdTAwM2VjdHgpKTtcbitcbitcdHJlcV9pbmZvID0ga3phbGxvY19vYmooKnJlcV9pbmZvKTtcbitcdGlmICghcmVxX2luZm8pXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmVwbHlfZGF0YSA9IGttYWxsb2Nfb2JqKCpyZXBseV9kYXRhKTtcbitcdGlmICghcmVwbHlfZGF0YSkge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGZyZWVfcmVxX2luZm87XG4rXHR9XG4rXG4rXHRyZXQgPSBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChcdTAwMjZyZXFfaW5mby1cdTAwM2ViYXNlLCB0YltFVEhUT09MX0FfUE9SVF9IRUFERVJdLFxuK1x0XHRcdFx0XHQgZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuK1x0XHRcdFx0XHQgaW5mby1cdTAwM2VpbmZvLmV4dGFjaywgZmFsc2UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBmcmVlX3JlcF9kYXRhO1xuK1xuK1x0Y3R4LVx1MDAzZWlmaW5kZXggPSAwO1xuK1x0Y3R4LVx1MDAzZXBvc19pZmluZGV4ID0gMDtcbitcbitcdC8qIEZvciBmaWx0ZXJlZCBEVU1QIHJlcXVlc3RzLCBsZXQncyBqdXN0IHN0b3JlIHRoZSBpZmluZGV4LiBXZSdsbCBjaGVja1xuK1x0ICogYWdhaW4gaWYgdGhlIG5ldGRldiBpcyBzdGlsbCB0aGVyZSB3aGVuIGxvb3Bpbmcgb3ZlciB0aGUgbmV0ZGV2IGxpc3RcbitcdCAqIGluIHRoZSBEVU1QIGxvb3AuXG4rXHQgKi9cbitcdGlmIChyZXFfaW5mby1cdTAwM2ViYXNlLmRldikge1xuK1x0XHRjdHgtXHUwMDNlaWZpbmRleCA9IHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRcdG5ldGRldl9wdXQocmVxX2luZm8tXHUwMDNlYmFzZS5kZXYsIFx1MDAyNnJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2X3RyYWNrZXIpO1xuK1x0XHRyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IE5VTEw7XG4rXHR9XG4rXG4rXHRjdHgtXHUwMDNlcmVxX2luZm8gPSByZXFfaW5mbztcbitcdGN0eC1cdTAwM2VyZXBseV9kYXRhID0gcmVwbHlfZGF0YTtcbitcbitcdHJldHVybiAwO1xuK1xuK2ZyZWVfcmVwX2RhdGE6XG4rXHRrZnJlZShyZXBseV9kYXRhKTtcbitmcmVlX3JlcV9pbmZvOlxuK1x0a2ZyZWUocmVxX2luZm8pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBwb3J0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuK1x0dm9pZCAqZWhkcjtcbitcdGludCByZXQ7XG4rXG4rXHRlaGRyID0gZXRobmxfZHVtcF9wdXQoc2tiLCBjYiwgRVRIVE9PTF9NU0dfUE9SVF9HRVRfUkVQTFkpO1xuK1x0aWYgKCFlaGRyKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0bWVtc2V0KGN0eC1cdTAwM2VyZXBseV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHBvcnRfcmVwbHlfZGF0YSkpO1xuK1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBkZXY7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuK1xuK1x0cmV0ID0gcG9ydF9wcmVwYXJlX2RhdGEoXHUwMDI2Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UsIFx1MDAyNmN0eC1cdTAwM2VyZXBseV9kYXRhLVx1MDAzZWJhc2UsXG4rXHRcdFx0XHRnZW5sX2luZm9fZHVtcChjYikpO1xuK1xuK1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IGV0aG5sX2ZpbGxfcmVwbHlfaGVhZGVyKHNrYiwgZGV2LCBFVEhUT09MX0FfUE9SVF9IRUFERVIpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBwb3J0X2ZpbGxfcmVwbHkoc2tiLCBcdTAwMjZjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZSwgXHUwMDI2Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZSk7XG4rXG4rb3V0OlxuK1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBlaGRyKTtcbitcdGVsc2VcbitcdFx0Z2VubG1zZ19lbmQoc2tiLCBlaGRyKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcG9ydF9kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuK1x0aW50IHJldDtcbitcbitcdGRldiA9IGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldjtcbitcbitcdGlmICghZGV2LVx1MDAzZWxpbmtfdG9wbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR4YV9mb3JfZWFjaF9zdGFydChcdTAwMjZkZXYtXHUwMDNlbGlua190b3BvLVx1MDAzZXBvcnRzLCBjdHgtXHUwMDNlcG9zX3BvcnRpZCwgcG9ydCxcbitcdFx0XHQgIGN0eC1cdTAwM2Vwb3NfcG9ydGlkKSB7XG4rXHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2Vwb3J0X2lkID0gY3R4LVx1MDAzZXBvc19wb3J0aWQ7XG4rXG4rXHRcdHJldCA9IHBvcnRfZHVtcF9vbmUoc2tiLCBkZXYsIGNiKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0Y3R4LVx1MDAzZXBvc19wb3J0aWQgPSAwO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcG9ydF9kdW1wX2FsbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4rXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuK1x0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZXBvc19pZmluZGV4KSB7XG4rXHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gZGV2O1xuK1x0XHRyZXQgPSBwb3J0X2R1bXBfb25lX2Rldihza2IsIGNiKTtcbitcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIpO1xuK1x0XHRjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xuK1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXQgPSAwO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgZXRobmxfcG9ydF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XG4rXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoY3R4LVx1MDAzZWlmaW5kZXgpIHtcbitcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4rXHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXG4rXHRcdGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuK1x0XHRcdFx0XHQgIGN0eC1cdTAwM2VpZmluZGV4LCBcdTAwMjZkZXZfdHJhY2tlcixcbitcdFx0XHRcdFx0ICBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFkZXYpXG4rXHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IGRldjtcbitcdFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XG4rXG4rXHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwb3J0X2R1bXBfYWxsX2Rldihza2IsIGNiKTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbitcbitcdGtmcmVlKGN0eC1cdTAwM2VyZXFfaW5mbyk7XG4rXHRrZnJlZShjdHgtXHUwMDNlcmVwbHlfZGF0YSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHMgPSB7XG4rXHQucmVxdWVzdF9jbWRcdFx0PSBFVEhUT09MX01TR19QT1JUX0dFVCxcbitcdC5yZXBseV9jbWRcdFx0PSBFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSxcbitcdC5oZHJfYXR0clx0XHQ9IEVUSFRPT0xfQV9QT1JUX0hFQURFUixcbitcdC5yZXFfaW5mb19zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcV9pbmZvKSxcbitcdC5yZXBseV9kYXRhX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpLFxuK1xuK1x0LnBhcnNlX3JlcXVlc3RcdFx0PSBwb3J0X3BhcnNlX3JlcXVlc3QsXG4rXHQucHJlcGFyZV9kYXRhXHRcdD0gcG9ydF9wcmVwYXJlX2RhdGEsXG4rXHQucmVwbHlfc2l6ZVx0XHQ9IHBvcnRfcmVwbHlfc2l6ZSxcbitcdC5maWxsX3JlcGx5XHRcdD0gcG9ydF9maWxsX3JlcGx5LFxuK307XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDo1MjoxMy45NDgxMjA2NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA4MTA3NzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZSBEZXRlcm1pbmF0aW9uOiBldGh0b29sIE5ldGxpbmsgUG9ydCBJbmZvcm1hdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgdGhhdCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kLCBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiZG9lcyB0aGlzIGludHJvZHVjZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmc/XCIgVGhlIGFuc3dlciBpcyBsZWFuaW5nIHRvd2FyZHMgeWVzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGdldHRpbmcgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gcmV0cmlldmUgcG9ydCBpbmZvcm1hdGlvbiBmb3IgbmV0d29yayBkZXZpY2VzLCBzcGVjaWZpY2FsbHksIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzLiBJdCdzIGFkZGluZyBzdXBwb3J0IGZvciBgcGh5X3BvcnRgIGluIGBwaHlfbGlua190b3BvbG9neWAuIFRoaXMgdG91Y2hlcyBhIGdvb2QgbnVtYmVyIG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCwgYG5ldC9ldGh0b29sL3BvcnQuY2AsIGFuZCBgbmV0L2V0aHRvb2wvbmV0bGluay5jYC4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdXJmYWNlIGFyZWEuIFRoaXMgbmV3IG5ldGxpbmsgQVBJIG1lYW5zIHVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgdHJpZ2dlciB0aGVzZSBjaGFuZ2VzLiBTbyB5ZXMsIGl0J3MgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCB3aGljaCBwb2ludHMgdG93YXJkcyBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCBpcyBwcmV0dHkgc3RhbmRhcmQsIEknZCBleHBlY3QgaXQgdG8gYmUgZW5hYmxlZC4gVGhlbiwgdGhlcmUncyBgQ09ORklHX1BIWUxJQmAgZm9yIGBwaHlfbGlua190b3BvbG9neS5jYCBhbmQgYHBoeV9kZXZpY2UuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBgQ09ORklHX1BIWUxJTktgIGlzIG9idmlvdXNseSBuZWVkZWQgZm9yIGBwaHlsaW5rLmNgLiBgQ09ORklHX01ESU9fREVWSUNFYCBpcyBsaWtlbHkgYWxzbyBkZWZhdWx0LCBhbmQgYENPTkZJR19TRlBgICptaWdodCogYmUgcmVsZXZhbnQgc2luY2UgYHBoeWxpbmsuY2AgYW5kIGBwaHlfZGV2aWNlLmNgIHVzZSBgc2ZwX2J1c2AsIGJ1dCB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBzZWVtcyBicm9hZGVyIHRoYW4ganVzdCBTRlAuXG5cbkknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBpdHNlbGYuIFRoZSBuZXRsaW5rIGNvbW1hbmQgaXMgYEVUSFRPT0xfTVNHX1BPUlRfR0VUYCBzbyB0aGF0J3MgYSBnb29kIHNlYXJjaCB0ZXJtLiBUaGUgZXRodG9vbCBjb2RlIGlzIHRoZSBmb2N1cywgYW5kIHRoZW4gSSdsbCBsb29rIGF0IGFsbCB0aGUgcGh5IGNvZGUuIFRoZSBmdW5jdGlvbnMgdGhhdCBzdGFuZCBvdXQgYXJlOiBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgYGV0aG5sX3BvcnRfZHVtcGl0YCwgYGV0aG5sX3BvcnRfZHVtcF9kb25lYCwgYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBgcG9ydF9maWxsX3JlcGx5YCwgYW5kIHRoZW4gdGhlIHBvcnQgYWRkaW5nL3JlbW92aW5nIGZ1bmN0aW9ucywgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgLCBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGAsIGBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0YCwgYHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0YCwgYHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlsaW5rX2RlbF9zZnBfbW9kX3BvcnRgLCBgcGh5X2FkZF9zZnBfbW9kX3BvcnRgLCBgcGh5X2RlbF9zZnBfbW9kX3BvcnRgLCBgcGh5X3NldHVwX3NmcF9wb3J0YC4gVGhhdCBjb3ZlcnMgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCB0b3BvbG9neSB1cGRhdGVzLCBhbmQgU0ZQIGludGVyYWN0aW9ucy5cblxuSSdsbCBjaGVjayB0aGUgYnVpbGQgcnVsZXMgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuICBgbmV0L2V0aHRvb2wvcG9ydC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCBpcyBlbmFibGVkLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gYGRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jYCwgYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCBhbGwgYnVpbGQgd2l0aCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZyBvcHRpb25zIChgQ09ORklHX1BIWUxJQmAgYW5kIGBDT05GSUdfUEhZTElOS2ApLlxuXG5MZXQncyBkbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgY29uZmlncy4gYENPTkZJR19FVEhUT09MX05FVExJTktgLCBgQ09ORklHX1BIWUxJQmAsIGFuZCBgQ09ORklHX1BIWUxJTktgIGFyZSB1c3VhbGx5IGVuYWJsZWQuIFdlIG1pZ2h0IG5lZWQgYSBzcGVjaWZpYyBkcml2ZXIsIGxpa2UgYENPTkZJR19NQUNCYCwgdG8gZXhlcmNpc2UgYHBoeWxpbmtgIGZ1bGx5LCBidXQgd2UgY2FuIGxpc3QgdGhlIFBIWUxJQiBhbmQgUEhZTElOSyBjb25maWdzIGZvciBub3cuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IFNGUCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgZ3JlcCBmb3IgYENPTkZJR19TRlBgIG9yIGBzZnBfYnVzYCBzaG91bGQgZmxhZyBhbnl0aGluZyBpbXBvcnRhbnQgaW4gdGhhdCBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQxNSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjUyOjI1LjAyOTIwMDY3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY4MjY2NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TRlBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc9Mjg0PUNPTkZJR19YSUxJTlhfRU1BQ0xJVEU9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnOjI4NTpDT05GSUdfU0ZQPW1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZy0yODYtQ09ORklHX0JST0FEQ09NX1BIWT15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZz02ND1DT05GSUdfTVZQUDI9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnOjY1OkNPTkZJR19TRlA9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnLTY2LUNPTkZJR19NQVJWRUxMX1BIWT15XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORykgKz0gbWlpX3RpbWVzdGFtcGVyLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjUtXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19TRlApXFx0XFx0Kz0gc2ZwLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6Mjc6c2ZwLW9iai0kKENPTkZJR19TRlApXFx0XFx0Kz0gc2ZwLWJ1cy5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI4LW9iai15XFx0XFx0XFx0XFx0Kz0gJChzZnAtb2JqLXkpICQoc2ZwLW9iai1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZnAuaD01NjU9c3RydWN0IHNmcF91cHN0cmVhbV9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZnAuaC01NzctXFxuaW5jbHVkZS9saW51eC9zZnAuaDo1Nzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX1NGUClcXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3OS1jb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpzZnBfZ2V0X21vZHVsZV9jYXBzKHN0cnVjdCBzZnBfYnVzICpidXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDo1MjozMC4xOTc0NzM2ODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjkzMjM2OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTRlAgQ29uZmlndXJhdGlvbiBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYENPTkZJR19TRlBgIHRoaW5nLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHByZXR0eSBzcGVjaWZpYyBzZXQgb2YgaGFyZHdhcmUgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBTRlBgLCBgUEhZTElCYCwgYW5kIGBQSFlMSU5LYCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaG9zZSBhcmUgdGhlIGtleSBwaWVjZXMgdG8gc3RhcnQgd2l0aC5cblxuSSdtIGdvaW5nIHRvIHB1bGwgb3V0IHRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIG1vc3QgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBhcmVhLiBCYXNlZCBvbiBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIGZvY3VzIG9uOiBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgYGV0aG5sX3BvcnRfZHVtcGl0YCwgYGV0aG5sX3BvcnRfZHVtcF9kb25lYCwgYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBgcG9ydF9maWxsX3JlcGx5YCwgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgLCBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGAsIGBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0YCwgYHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlfc2V0dXBfc2ZwX3BvcnRgLCBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AsIGFuZCBgcGh5X3NldF91cHN0cmVhbV9wb3J0YC4gVGhlc2UgZnVuY3Rpb25zIHNlZW0gdG8gY292ZXIgdGhlIGNvcmUgYXNwZWN0cyBvZiBwb3J0IG1hbmFnZW1lbnQsIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3RlbnRpYWxseSBkZXZpY2UgZGlzY292ZXJ5IHJlbGF0ZWQgdG8gU0ZQcy5cblxuSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgcG9ydF9kdW1wX29uZV9kZXZgIGFuZCBgcG9ydF9kdW1wX2FsbF9kZXZgIGFyZSBhbHNvIHJlbGV2YW50IHRvIHdoYXQgSSdtIGRvaW5nLiBZZXAsIHRoZXkgYXBwZWFyIHRvIGJlIHZhbHVhYmxlIGluIHRoaXMgY29udGV4dCBhcyB3ZWxsLlxuXG5Ob3cgdGhhdCBJIGhhdmUgYSBjbGVhciBzZXQgb2YgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkIGFuZCBmaW5hbGl6ZSBteSBhc3Nlc3NtZW50LCBsaWtlbHkgYnkgY2FsbGluZyBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1OTgsIk91dHB1dFRva2VucyI6MzAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjUyOjM2Ljg5MDcxNTAzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NDk1NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRlBcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiUEhZTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9zdGFydFwiLFxuICAgIFwiZXRobmxfcG9ydF9kdW1waXRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9kb25lXCIsXG4gICAgXCJwb3J0X3BhcnNlX3JlcXVlc3RcIixcbiAgICBcInBvcnRfcHJlcGFyZV9kYXRhXCIsXG4gICAgXCJwb3J0X3JlcGx5X3NpemVcIixcbiAgICBcInBvcnRfZmlsbF9yZXBseVwiLFxuICAgIFwicG9ydF9kdW1wX29uZV9kZXZcIixcbiAgICBcInBvcnRfZHVtcF9hbGxfZGV2XCIsXG4gICAgXCJwaHlfbGlua190b3BvX2FkZF9wb3J0XCIsXG4gICAgXCJwaHlfbGlua190b3BvX2RlbF9wb3J0XCIsXG4gICAgXCJwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0XCIsXG4gICAgXCJwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnRcIixcbiAgICBcInBoeV9hZGRfc2ZwX21vZF9wb3J0XCIsXG4gICAgXCJwaHlfc2V0dXBfc2ZwX3BvcnRcIixcbiAgICBcInBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNcIixcbiAgICBcInBoeV9zZXRfdXBzdHJlYW1fcG9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIChFVEhUT09MX01TR19QT1JUX0dFVCkgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgcGh5c2ljYWwgY29ubmVjdGlvbiBwb2ludHMgb2YgYSBuZXR3b3JrIGRldmljZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgUEhZIGFuZCBwaHlsaW5rIHN1YnN5c3RlbXMgdG8gdHJhY2sgYW5kIGV4cG9zZSB0aGVzZSBwb3J0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIHRoZW0gaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNGUFwiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJQSFlMSU5LXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXRobmxfcG9ydF9kdW1wX3N0YXJ0XCIsXG4gICAgXCJldGhubF9wb3J0X2R1bXBpdFwiLFxuICAgIFwiZXRobmxfcG9ydF9kdW1wX2RvbmVcIixcbiAgICBcInBvcnRfcGFyc2VfcmVxdWVzdFwiLFxuICAgIFwicG9ydF9wcmVwYXJlX2RhdGFcIixcbiAgICBcInBvcnRfcmVwbHlfc2l6ZVwiLFxuICAgIFwicG9ydF9maWxsX3JlcGx5XCIsXG4gICAgXCJwb3J0X2R1bXBfb25lX2RldlwiLFxuICAgIFwicG9ydF9kdW1wX2FsbF9kZXZcIixcbiAgICBcInBoeV9saW5rX3RvcG9fYWRkX3BvcnRcIixcbiAgICBcInBoeV9saW5rX3RvcG9fZGVsX3BvcnRcIixcbiAgICBcInBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnRcIixcbiAgICBcInBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydFwiLFxuICAgIFwicGh5X2FkZF9zZnBfbW9kX3BvcnRcIixcbiAgICBcInBoeV9zZXR1cF9zZnBfcG9ydFwiLFxuICAgIFwicGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc1wiLFxuICAgIFwicGh5X3NldF91cHN0cmVhbV9wb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQgKEVUSFRPT0xfTVNHX1BPUlRfR0VUKSB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBQSFkgYW5kIHBoeWxpbmsgc3Vic3lzdGVtcyB0byB0cmFjayBhbmQgZXhwb3NlIHRoZXNlIHBvcnRzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlbn4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 00:35:16 +0000 UTC FinishedAt: 2026-07-21 00:52:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SFP", "PHYLIB", "PHYLINK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "298bb2b8903323f6ef2eab4819a2e477765f0ff1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SFP", "PHYLIB", "PHYLINK" ], "series_id": "0fe81d85-974c-49f2-b796-9a7c0334310e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ethnl_port_dump_start", "ethnl_port_dumpit", "ethnl_port_dump_done", "port_parse_request", "port_prepare_data", "port_reply_size", "port_fill_reply", "port_dump_one_dev", "port_dump_all_dev", "phy_link_topo_add_port", "phy_link_topo_del_port", "phylink_create_sfp_cage_port", "phylink_add_sfp_mod_port", "phy_add_sfp_mod_port", "phy_setup_sfp_port", "phy_caps_linkmode_filter_ifaces", "phy_set_upstream_port" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7UEhZTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBpdCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBfZG9uZSYjMzQ7LAogICAgJiMzNDtwb3J0X3BhcnNlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7cG9ydF9wcmVwYXJlX2RhdGEmIzM0OywKICAgICYjMzQ7cG9ydF9yZXBseV9zaXplJiMzNDssCiAgICAmIzM0O3BvcnRfZmlsbF9yZXBseSYjMzQ7LAogICAgJiMzNDtwb3J0X2R1bXBfb25lX2RldiYjMzQ7LAogICAgJiMzNDtwb3J0X2R1bXBfYWxsX2RldiYjMzQ7LAogICAgJiMzNDtwaHlfbGlua190b3BvX2FkZF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fZGVsX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2FkZF9zZnBfbW9kX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X3NldHVwX3NmcF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMmIzM0OywKICAgICYjMzQ7cGh5X3NldF91cHN0cmVhbV9wb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIChFVEhUT09MX01TR19QT1JUX0dFVCkgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgcGh5c2ljYWwgY29ubmVjdGlvbiBwb2ludHMgb2YgYSBuZXR3b3JrIGRldmljZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgUEhZIGFuZCBwaHlsaW5rIHN1YnN5c3RlbXMgdG8gdHJhY2sgYW5kIGV4cG9zZSB0aGVzZSBwb3J0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIHRoZW0gaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjQ1YThiYWMwM2NkODE2NDdiN2JlYzFlOGI5OWMxODFkMmE0OTZhMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDAwOjUyOjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5pbmRleCA1ZGQ0ZDFiNWQ5NGJiYi4uZDExNTFhZjMzNWNhMTAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXG5AQCAtMjEwLDYgJiM0MzsyMTAsMTAgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogZGlzY2FyZFxuICAgICAgICAgdmFsdWU6IDMxXG4mIzQzOyAgLVxuJiM0MzsgICAgbmFtZTogcG9ydC10eXBlXG4mIzQzOyAgICB0eXBlOiBlbnVtXG4mIzQzOyAgICBlbnRyaWVzOiBbbWRpLCBzZnBdXG4gXG4gYXR0cmlidXRlLXNldHM6XG4gICAtXG5AQCAtMTkwNSw2ICYjNDM7MTkwOSwzMiBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAgIG5hbWU6IGxpbmtcbiAgICAgICAgIHR5cGU6IG5lc3RcbiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBtc2Utc25hcHNob3RcbiYjNDM7ICAtXG4mIzQzOyAgICBuYW1lOiBwb3J0XG4mIzQzOyAgICBhdHRyLWNudC1uYW1lOiAtLWV0aHRvb2wtYS1wb3J0LWNudFxuJiM0MzsgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IGhlYWRlclxuJiM0MzsgICAgICAgIHR5cGU6IG5lc3RcbiYjNDM7ICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogaGVhZGVyXG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBpZFxuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuJiM0MzsgICAgICAtXG4mIzQzOyAgICAgICAgbmFtZTogc3VwcG9ydGVkLW1vZGVzXG4mIzQzOyAgICAgICAgdHlwZTogbmVzdFxuJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXRcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1pbnRlcmZhY2VzXG4mIzQzOyAgICAgICAgdHlwZTogbmVzdFxuJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXRcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHR5cGVcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiYjNDM7ICAgICAgICBlbnVtOiBwb3J0LXR5cGVcbiYjNDM7ICAgICAgLVxuJiM0MzsgICAgICAgIG5hbWU6IHVwc3RyZWFtLXBvcnRcbiYjNDM7ICAgICAgICB0eXBlOiB1MzJcbiBcbiBvcGVyYXRpb25zOlxuICAgZW51bS1tb2RlbDogZGlyZWN0aW9uYWxcbkBAIC0yODU5LDYgJiM0MzsyODg5LDI2IEBAIG9wZXJhdGlvbnM6XG4gICAgICAgICAgICAgLSB3b3JzdC1jaGFubmVsXG4gICAgICAgICAgICAgLSBsaW5rXG4gICAgICAgZHVtcDogKm1zZS1nZXQtb3BcbiYjNDM7ICAgIC1cbiYjNDM7ICAgICAgbmFtZTogcG9ydC1nZXRcbiYjNDM7ICAgICAgZG9jOiBHZXQgcG9ydHMgYXR0YWNoZWQgdG8gYW4gaW50ZXJmYWNlXG4mIzQzO1xuJiM0MzsgICAgICBhdHRyaWJ1dGUtc2V0OiBwb3J0XG4mIzQzO1xuJiM0MzsgICAgICBkbzogXHUwMDI2cG9ydC1nZXQtb3BcbiYjNDM7ICAgICAgICByZXF1ZXN0OlxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXJcbiYjNDM7ICAgICAgICAgICAgLSBpZFxuJiM0MzsgICAgICAgIHJlcGx5OlxuJiM0MzsgICAgICAgICAgYXR0cmlidXRlczpcbiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXJcbiYjNDM7ICAgICAgICAgICAgLSBpZFxuJiM0MzsgICAgICAgICAgICAtIHN1cHBvcnRlZC1tb2Rlc1xuJiM0MzsgICAgICAgICAgICAtIHN1cHBvcnRlZC1pbnRlcmZhY2VzXG4mIzQzOyAgICAgICAgICAgIC0gdHlwZVxuJiM0MzsgICAgICAgICAgICAtIHVwc3RyZWFtLXBvcnRcbiYjNDM7ICAgICAgZHVtcDogKnBvcnQtZ2V0LW9wXG4gXG4gbWNhc3QtZ3JvdXBzOlxuICAgbGlzdDpcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XG5pbmRleCBlOTJhYmY0NWZhZjUwZC4uYjQzMjZjODliMDc1MWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcbkBAIC0yNTM3LDYgJiM0MzsyNTM3LDM5IEBAIFdpdGhpbiBlYWNoIGNoYW5uZWwgbmVzdCwgb25seSB0aGUgbWV0cmljcyBzdXBwb3J0ZWQgYnkgdGhlIFBIWSB3aWxsIGJlIHByZXNlbnQuXG4gU2VlIGBgc3RydWN0IHBoeV9tc2Vfc25hcHNob3RgYCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBpblxuIGBgaW5jbHVkZS9saW51eC9waHkuaGBgLlxuIFxuJiM0MztQT1JUX0dFVFxuJiM0Mzs9PT09PT09PVxuJiM0MztcbiYjNDM7UmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsXG4mIzQzO3JlZmVycmVkIHRvIGFzIFwmIzM0O3BvcnRzXCYjMzQ7LiBVc2VyIG5lZWRzIHRvIHNwZWNpZnkgYSBQT1JUX0lEIGZvciB0aGUgRE8gb3BlcmF0aW9uLFxuJiM0MztpbiB3aGljaCBjYXNlIHRoZSBETyByZXF1ZXN0IHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhhdCBzcGVjaWZpYyBwb3J0LlxuJiM0MztcbiYjNDM7QXMgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgcG9ydCwgdGhlIERVTVAgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIGxpc3QgdGhlXG4mIzQzO3BvcnRzIHByZXNlbnQgb24gYSBnaXZlbiBpbnRlcmZhY2UsIGJ5IHBhc3NpbmcgYW4gaW50ZXJmYWNlIGluZGV4IG9yIG5hbWUgaW5cbiYjNDM7dGhlIGR1bXAgcmVxdWVzdC5cbiYjNDM7XG4mIzQzO1JlcXVlc3QgY29udGVudHM6XG4mIzQzO1xuJiM0MzsgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9IRUFERVJgYCAgICAgICAgICAgICBuZXN0ZWQgIHJlcXVlc3QgaGVhZGVyXG4mIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9JRGBgICAgICAgICAgICAgICAgICB1MzIgICAgIHBvcnQgaWRcbiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7S2VybmVsIHJlc3BvbnNlIGNvbnRlbnRzOlxuJiM0MztcbiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSEVBREVSYGAgICAgICAgICAgICAgICBuZXN0ZWQgIHJlcXVlc3QgaGVhZGVyXG4mIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9JRGBgICAgICAgICAgICAgICAgICAgIHUzMiAgICAgdGhlIHBvcnQmIzM5O3MgdW5pcXVlIGlkZW50aWZpZXIsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyIG5ldGRldmljZS5cbiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFU2BgICAgICAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIGxpbmttb2Rlc1xuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVNgYCBiaXRzZXQgIGJpdHNldCBvZiBzdXBwb3J0ZWQgTUlJXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlc1xuJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfVFlQRWBgICAgICAgICAgICAgICAgICB1MzIgICAgIHRoZSBwb3J0IHR5cGVcbiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlRgYCAgICAgICAgdTMyICAgICBJZiBhbnksIHRoZSBpbmRleCBvZiB0aGUgTUlJXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCB0aGF0IGZlZWRzIGludG8gdGhpc1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuXG4mIzQzOyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4gUmVxdWVzdCB0cmFuc2xhdGlvblxuID09PT09PT09PT09PT09PT09PT1cbiBcbkBAIC0yNjQ3LDQgJiM0MzsyNjgwLDUgQEAgYXJlIG5ldGxpbmsgb25seS5cbiAgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUEhZX0dFVGBgXG4gICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgXG4gICBgYFNJT0NTSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX1NFVGBgXG4mIzQzOyAgbi9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19QT1JUX0dFVGBgXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbmluZGV4IDZlMjhkOTA5NGJjZTNmLi4yYTliMWVjOTNiNzBmOSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcbkBAIC05OSwxMyAmIzQzOzk5LDI5IEBAIHdpbGwgZXZlbnR1YWxseSBiZSBhYmxlIHRvIHJlcG9ydCBpdHMgb3duIGtzZXR0aW5nczo6XG4gICAgICAgICAgICAgKF9fX19fKS0tLS0tfCBQb3J0IHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAmIzQzOy0tLS0tLSYjNDM7XG4gXG4mIzQzO1NGUCBwb3J0c1xuJiM0Mzs9PT09PT09PT1cbiYjNDM7XG4mIzQzO1NGUCBpbnRlcmZhY2VzIGludm9sdmUgMiBkaXN0aW5jdCBjb21wb25lbnRzLCBlYWNoIHJlcHJlc2VudGVkIGJ5XG4mIzQzO2EgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCBpbnN0YW5jZSA6XG4mIzQzO1xuJiM0MzsgLSBUaGUgU0ZQIGNhZ2UgaXRzZWxmIGlzIGEgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYC4gSXQmIzM5O3Mgc3BlY2lhbFxuJiM0MzsgICBpbiB0aGF0IGl0JiMzOTtzIG5vdCBhbiBNREkgaW50ZXJmYWNlLCBidXQgcmF0aGVyIGEgaG90LXBsdWdnYWJsZSBNSUkuXG4mIzQzOyAgIFRoZSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgIGFzc29jaWF0ZWQgdG8gaXQgbGlzdHMgdGhlIGRpZmZlcmVudFxuJiM0MzsgICBNSUkgaW50ZXJmYWNlcyB3ZSBjYW4gdXNlIG9uIHRoZSBjYWdlLlxuJiM0MztcbiYjNDM7IC0gVGhlIFNGUCBtb2R1bGUsIHdoZW4gaW5zZXJ0ZWQsIHdpbGwgYWxzbyBiZSBhc3NvY2lhdGVkIHRvIGFcbiYjNDM7ICAgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCwgdGhhdCByZXByZXNlbnRzIHRoZSB2YXJpb3VzIGxpbmttb2Rlc1xuJiM0MzsgICB0aGF0IGl0IGdpdmVzIGFjY2VzcyB0by4gVGhlIG1vZHVsZSYjMzk7cyA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgXG4mIzQzOyAgIGRvZXNuJiMzOTt0IHN1cGVyc2VkZSB0aGUgY2FnZSYjMzk7cyBwb3J0LCBpdCByZWZlcmVuY2VzIGl0IHRocm91Z2hcbiYjNDM7ICAgdGhlIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWAgOmM6bWVtYmVyOmB1cHN0cmVhbV9wb3J0YCBmaWVsZC5cbiYjNDM7XG4gTmV4dCBzdGVwc1xuID09PT09PT09PT1cbiBcbi1BcyBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgb25seSBwb3J0cyBjb250cm9sbGVkIGJ5IFBIWSBkZXZpY2VzIGFyZVxuLXN1cHBvcnRlZC4gVGhlIG5leHQgc3RlcHMgd2lsbCBiZSB0byBhZGQgdGhlIE5ldGxpbmsgQVBJIHRvIGV4cG9zZSB0aGVzZVxuLXRvIHVzZXJzcGFjZSBhbmQgYWRkIHN1cHBvcnQgZm9yIHJhdyBwb3J0cyAoY29udHJvbGxlZCBieSBzb21lIGZpcm13YXJlLCBhbmQgZGlyZWN0bHlcbi1tYW5hZ2VkIGJ5IHRoZSBOSUMgZHJpdmVyKS5cbiYjNDM7QXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50YXRpb24sIHRoZSBwb3J0JiMzOTtzIHByZXNlbmNlIGFuZCBpbmZvcm1hdGlvbiBjYW4gb25seVxuJiM0MztiZSBxdWVyaWVkLCBhbmQgaXQmIzM5O3Mgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgb2YgdGhlIHBvcnQmIzM5O3Mgc2V0dGluZ3Mgb3Igc2VsZWN0XG4mIzQzO3doaWNoIG9uZSBzaG91bGQgYmUgdXNlZC5cbiBcbiBBbm90aGVyIHBhcmFsbGVsIHRhc2sgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIE1JSSBtdXhpbmcgZnJhbWV3b3JrIHRvIGFsbG93IHRoZVxuLWNvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZXIgbXVsdGktcG9ydCBzZXR1cHMuXG4mIzQzO2NvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZW4gbXVsdGktcG9ydCBzZXR1cHMuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMDBlN2IyNmUwYTIzZmEuLmQzMzg4MWVjMWY2MjU1IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMTg3OTIsNiAmIzQzOzE4NzkyLDcgQEAgRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZXRoZXJuZXQtY29ubmVjdG9yLnlhbWxcbiBGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuIEY6XHRkcml2ZXJzL25ldC9waHkvcGh5X3BvcnQuY1xuIEY6XHRpbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbiYjNDM7RjpcdG5ldC9ldGh0b29sL3BvcnQuY1xuIEs6XHRzdHJ1Y3RcXHMmIzQzO3BoeV9wb3J0fHBoeV9wb3J0X1xuIFxuIE5FVFdPUktJTkcgW0dFTkVSQUxdXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxuaW5kZXggNDIxMDg4ZTZmNmU4ZjEuLmVjM2QzOWEwYWUwNmJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXG5AQCAtNjYsNSAmIzQzOzY2LDcgQEAgdm9pZCBwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXG4gXHRcdFx0XHQgICBlbnVtIGV0aHRvb2xfbGlua19tZWRpdW0gbWVkaXVtLFxuIFx0XHRcdFx0ICAgaW50IGxhbmVzKTtcbiB1MzIgcGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpO1xuJiM0Mzt2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTtcbiBcbiAjZW5kaWYgLyogX19QSFlfQ0FQU19IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xuaW5kZXggOTQyZDQzMTkxNTYxZTIuLjU1OGU0ZGY0ZDYzYzA4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jXG5AQCAtNDQ1LDMgJiM0Mzs0NDUsMjkgQEAgdTMyIHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxuIFx0cmV0dXJuIG1lZGl1bXM7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXMpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMoKSAtIEZpbHRlciBsaW5rbW9kZXMgd2l0aCBhbiBpbnRlcmZhY2UgbGlzdFxuJiM0MzsgKiBAdG86IFN0b3JlcyB0aGUgZmlsdGVyZWQgbGlua21vZGVzXG4mIzQzOyAqIEBmcm9tOiBMaW5rbW9kZXMgdG8gZmlsdGVyXG4mIzQzOyAqIEBpbnRlcmZhY2VzOiBCaXRmaWVsZCBvZiBwaHlfaW50ZXJmYWNlX3QgdGhhdCB3ZSB1c2UgZm9yIGZpbHRlcmluZ1xuJiM0MzsgKlxuJiM0MzsgKiBGaWx0ZXIgdGhlIHByb3ZpZGVkIGxpbmttb2Rlcywgb25seSB0byBrZWVwIHRoZSBvbmVzIHdlIGNhbiBwb3NzaWJseSBhY2hpZXZlXG4mIzQzOyAqIHdoZW4gdXNpbmcgYW55IG9mIHRoZSBwcm92aWRlZCBNSUkgaW50ZXJmYWNlcy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyh1bnNpZ25lZCBsb25nICp0byxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4mIzQzO1x0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKVxuJiM0Mzt7XG4mIzQzO1x0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soaWZhY2VzX3N1cHBvcnRlZCkgPSB7fTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaWZhY2VzX2NhcHMgPSAwO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX3NldF9iaXQoaW50ZXJmYWNlLCBpbnRlcmZhY2VzLCBQSFlfSU5URVJGQUNFX01PREVfTUFYKVxuJiM0MztcdFx0aWZhY2VzX2NhcHMgfD0gcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UoaW50ZXJmYWNlKTtcbiYjNDM7XG4mIzQzO1x0cGh5X2NhcHNfbGlua21vZGVzKGlmYWNlc19jYXBzLCBpZmFjZXNfc3VwcG9ydGVkKTtcbiYjNDM7XG4mIzQzO1x0bGlua21vZGVfYW5kKHRvLCBmcm9tLCBpZmFjZXNfc3VwcG9ydGVkKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggMDYxNTIyODQ1OWVmNDIuLmQ1MjUxNWU3ZTMwMzAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE0OTAsMTEgJiM0MzsxNDkwLDIyIEBAIHN0YXRpYyBpbnQgcGh5X3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbiB7XG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0aWYgKGRldilcbi1cdFx0cmV0dXJuIHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gdHJ1ZTtcbiYjNDM7XHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHQvKiBJZiB3ZSBhcmVuJiMzOTt0IGF0dGFjaGVkIHRvIGEgbmV0ZGV2LCB3ZSBjYW4mIzM5O3QgYWRkIHRoZSBTRlAgUEhZIHRvIGl0c1xuJiM0MztcdCAqIHRvcG9sb2d5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZGV2KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeSwgUEhZX1VQU1RSRUFNX1BIWSwgcGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWhhc19zZnBfbW9kX3BoeSA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiAvKipcbkBAIC0xNTEyLDggJiM0MzsxNTIzLDEyIEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfZGlzY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbiBcbiYjNDM7XHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7XG4mIzQzO1xuIFx0aWYgKGRldilcbiBcdFx0cGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTtcbiYjNDM7XG4mIzQzO1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgTlVMTCk7XG4gfVxuIFxuIC8qKlxuQEAgLTE2MTcsNiAmIzQzOzE2MzIsNzcgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9saW5rX2Rvd24odm9pZCAqdXBzdHJlYW0pXG4gXHRcdHBvcnQtXHUwMDNlb3BzLVx1MDAzZWxpbmtfZG93bihwb3J0KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGh5X2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHQvKiBDcmVhdGUgbW9kIHBvcnQgKi9cbiYjNDM7XHRwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcbiYjNDM7XHRpZiAoIXBvcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cG9ydC1cdTAwM2VhY3RpdmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRjYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwaHlkZXYtXHUwMDNlc2ZwX2J1cyk7XG4mIzQzO1xuJiM0MztcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXHUwMDNlbGlua19tb2RlcyxcbiYjNDM7XHRcdFx0XHRcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldikge1xuJiM0MztcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LCBwb3J0KTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIHdlIGRvbiYjMzk7dCB1c2UgcGh5X2FkZF9wb3J0KCkgaGVyZSBhcyB0aGUgbW9kdWxlIHBvcnQgaXNuJiMzOTt0IGEgZGlyZWN0XG4mIzQzO1x0ICogaW50ZXJmYWNlIGZyb20gdGhlIFBIWSwgYnV0IHJhdGhlciBhbiBleHRlbnNpb24gdG8gdGhlIHNmcC1idXMsIHRoYXRcbiYjNDM7XHQgKiBpcyBhbHJlYWR5IHJlcHJlc2VudGVkIGJ5IGl0cyBvd24gcGh5X3BvcnRcbiYjNDM7XHQgKi9cbiYjNDM7XHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBwb3J0O1xuJiM0MztcbiYjNDM7XHRwb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydC1cdTAwM2VpZDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBoeV9kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG4mIzQzO1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1xuJiM0MztcdHBoeV9wb3J0X2Rlc3Ryb3kocGh5ZGV2LVx1MDAzZW1vZF9wb3J0KTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBoeV9zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuJiM0MztcbiYjNDM7XHQvKiBJZiB0aGVyZSYjMzk7cyBhIGRvd25zdHJlYW0gU0ZQIG1vZHVsZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGNvbnRhaW4gYSBQSFlcbiYjNDM7XHQgKiBkZXZpY2UsIGxldCYjMzk7cyBjcmVhdGUgYSBwaHlfcG9ydCB0byByZXByZXNlbnQgdGhhdCBtb2R1bGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxuJiM0MztcdFx0cmV0dXJuIHBoeV9hZGRfc2ZwX21vZF9wb3J0KHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwaHlfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuJiM0MztcbiYjNDM7XHQvKiBDYWxsZWQgdXBvbiBtb2R1bGUgcmVtb3ZhbCBvciB1cHN0cmVhbSByZW1vdmFsICovXG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxuJiM0MztcdFx0cGh5X2RlbF9zZnBfbW9kX3BvcnQocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG4gXHQuYXR0YWNoID0gcGh5X3NmcF9hdHRhY2gsXG4gXHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXG5AQCAtMTYyNiw2ICYjNDM7MTcxMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcbiBcdC5saW5rX2Rvd24gPSBwaHlfc2ZwX2xpbmtfZG93bixcbiBcdC5jb25uZWN0X3BoeSA9IHBoeV9zZnBfY29ubmVjdF9waHksXG4gXHQuZGlzY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Rpc2Nvbm5lY3RfcGh5LFxuJiM0MztcdC5tb2R1bGVfc3RhcnQgPSBwaHlfc2ZwX21vZHVsZV9zdGFydCxcbiYjNDM7XHQubW9kdWxlX3N0b3AgPSBwaHlfc2ZwX21vZHVsZV9zdG9wLFxuIH07XG4gXG4gc3RhdGljIGludCBwaHlfYWRkX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuQEAgLTE2NzMsMTMgJiM0MzsxNzYxLDEzIEBAIHN0YXRpYyB2b2lkIHBoeV9kZWxfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4gXHRwaHlkZXYtXHUwMDNlbl9wb3J0cy0tO1xuIH1cbiBcbi1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0MztzdGF0aWMgc3RydWN0IHBoeV9wb3J0ICpwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4gXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuIFx0aW50IHJldDtcbiBcbiBcdGlmICghcG9ydClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdHBvcnQtXHUwMDNlcGFyZW50X3R5cGUgPSBQSFlfUE9SVF9QSFk7XG4gXHRwb3J0LVx1MDAzZXBoeSA9IHBoeWRldjtcbkBAIC0xNjk0LDEwICYjNDM7MTc4MiwxMiBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0ICogd2hlbiBhdHRhY2hpbmcgdGhlIHBvcnQgdG8gdGhlIHBoeWRldi5cbiBcdCAqL1xuIFx0cmV0ID0gcGh5X2FkZF9wb3J0KHBoeWRldiwgcG9ydCk7XG4tXHRpZiAocmV0KVxuJiM0MztcdGlmIChyZXQpIHtcbiBcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1x0fVxuIFxuLVx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXR1cm4gcG9ydDtcbiB9XG4gXG4gLyoqXG5AQCAtMTcwNiwyNSAmIzQzOzE3OTYsNDkgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiAgKi9cbiBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gTlVMTDtcbiBcdHN0cnVjdCBzZnBfYnVzICpidXM7XG4tXHRpbnQgcmV0ID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuLVx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpIHtcbi1cdFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKTtcbi1cdFx0aWYgKElTX0VSUihidXMpKVxuLVx0XHRcdHJldHVybiBQVFJfRVJSKGJ1cyk7XG4mIzQzO1x0aWYgKCFwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4gXG4tXHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gYnVzO1xuJiM0MztcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XG4mIzQzO1x0aWYgKElTX0VSUihidXMpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoYnVzKTtcbiBcbi1cdFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcbi1cdFx0c2ZwX2J1c19wdXQoYnVzKTtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbiBcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XG4mIzQzO1x0aWYgKGJ1cykge1xuJiM0MztcdFx0cG9ydCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKElTX0VSUihwb3J0KSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHBvcnQpO1xuJiM0MztcdFx0XHRwb3J0ID0gTlVMTDtcbiYjNDM7XHRcdFx0Z290byBvdXRfc2ZwO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKVxuLVx0XHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbiYjNDM7XHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgXHUwMDI2c2ZwX3BoeWRldl9vcHMpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9wb3J0O1xuJiM0MztcbiYjNDM7XHQvKiBzZnBfYnVzX2FkZF91cHN0cmVhbSgpIGdyYWJzIGEgcmVmIHRvIHRoZSBzZnAgYnVzIG9uIHN1Y2Nlc3MsIGl0JiMzOTtzXG4mIzQzO1x0ICogc2FmZSB0byByZWxlYXNlIGl0IG5vdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzZnBfYnVzX3B1dChidXMpO1xuJiM0MztcbiYjNDM7XHRwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztvdXRfcG9ydDpcbiYjNDM7XHRpZiAocG9ydCkge1xuJiM0MztcdFx0cGh5X2RlbF9wb3J0KHBoeWRldiwgcG9ydCk7XG4mIzQzO1x0XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuJiM0MztcdH1cbiYjNDM7b3V0X3NmcDpcbiYjNDM7XHRzZnBfYnVzX3B1dChidXMpO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE4MTUsNiAmIzQzOzE5MjksMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdGVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeWRldiwgUEhZX1VQU1RSRUFNX01BQywgZGV2KTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwaHlkZXYtXHUwMDNlbW9kX3BvcnQpIHtcbiYjNDM7XHRcdFx0ZXJyID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1x0XHRcdGlmIChlcnIpXG4mIzQzO1x0XHRcdFx0Z290byBlcnJvcjtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdC8qIFNvbWUgRXRoZXJuZXQgZHJpdmVycyB0cnkgdG8gY29ubmVjdCB0byBhIFBIWSBkZXZpY2UgYmVmb3JlXG5AQCAtMTk1MSw2ICYjNDM7MjA3MSw4IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LVx1MDAzZXBoeWRldiA9IE5VTEw7XG4gXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xuIFx0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHBoeWRldi1cdTAwM2Vtb2RfcG9ydClcbiYjNDM7XHRcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4gXHR9XG4gXG4gXHRwaHlkZXYtXHUwMDNlcGh5X2xpbmtfY2hhbmdlID0gTlVMTDtcbkBAIC0zNTc5LDYgJiM0MzszNzAxLDI4IEBAIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeV9zZXRfdXBzdHJlYW1fcG9ydCgpIC0gU2V0cyB0aGUgcGh5X3BvcnQgY29udHJvbGxpbmcgdGhlIE1JSSB0aGlzIFBIWSBpc1xuJiM0MzsgKlx0XHRcdCAgICAgYXR0YWNoZWQgdG8uXG4mIzQzOyAqIEBwaHlkZXY6IHBvaW50ZXIgdG8gdGhlIFBIWSBkZXZpY2Ugd2Ugc2V0IHRoZSB1cHN0cmVhbSBvZi5cbiYjNDM7ICogQHBvcnQ6IFRoZSBwaHlfcG9ydCB1cHN0cmVhbSBvZiB0aGlzIFBIWSwgY2FuIGJlIE5VTEwuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gcG9ydDtcbiYjNDM7XG4mIzQzO1x0cGh5X2Zvcl9lYWNoX3BvcnQocGh5ZGV2LCBsb2NhbF9wb3J0KVxuJiM0MztcdFx0aWYgKHBvcnQpXG4mIzQzO1x0XHRcdGxvY2FsX3BvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXHUwMDNlaWQ7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdGxvY2FsX3BvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA9IDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X3NldF91cHN0cmVhbV9wb3J0KTtcbiYjNDM7XG4gLyoqXG4gICogZndub2RlX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGZ3bm9kZSwgZmluZCB0aGUgbWRpb19kZXZpY2VcbiAgKiBAZndub2RlOiBwb2ludGVyIHRvIHRoZSBtZGlvX2RldmljZSYjMzk7cyBmd25vZGVcbkBAIC0zODE3LDYgJiM0MzszOTYxLDcgQEAgc3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbiBcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IE5VTEw7XG4gXG4gXHRwaHlfY2xlYW51cF9wb3J0cyhwaHlkZXYpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmNcbmluZGV4IDQxMzRkZTdhZTMxM2QyLi41ZTEzNWFiNjM2YzBiNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuQEAgLTcsNiAmIzQzOzcsNyBAQFxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X3BvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuQEAgLTIzLDE3ICYjNDM7MjQsODEgQEAgc3RhdGljIGludCBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHhhX2luaXRfZmxhZ3MoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBYQV9GTEFHU19BTExPQzEpO1xuIFx0dG9wby1cdTAwM2VuZXh0X3BoeV9pbmRleCA9IDE7XG4gXG4mIzQzO1x0eGFfaW5pdF9mbGFncyhcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzLCBYQV9GTEFHU19BTExPQzEpO1xuJiM0MztcdHRvcG8tXHUwMDNlbmV4dF9wb3J0X2luZGV4ID0gMTtcbiYjNDM7XG4gXHRkZXYtXHUwMDNlbGlua190b3BvID0gdG9wbztcbiBcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlbGlua190b3BvKVxuJiM0MztcdFx0cmV0dXJuIGRldi1cdTAwM2VsaW5rX3RvcG87XG4mIzQzO1xuJiM0MztcdC8qIFRoZSB0b3BvbG9neSBpcyBhbGxvY2F0ZWQgdGhlIGZpcnN0IHRpbWUgd2UgYWRkIGFuIG9iamVjdCB0byBpdC5cbiYjNDM7XHQgKiBJdCBpcyBmcmVlZCBhbG9uZ3NpZGUgdGhlIG5ldGRldi4gSXQgY2FuIGJlIGNhbGxlZCBvbiBtdWx0aXBsZVxuJiM0MztcdCAqIGNvbnRleHRzOlxuJiM0MztcdCAqICAtIEl0IGNhbiBiZSBjYWxsZWQgZnJvbSAucHJvYmUoKSA6IE5vIHJ0bmwsIG5vIG5ldGRldl9sb2NrXG4mIzQzO1x0ICogIC0gLm5kb19vcGVuKCkgOiBydG5sIGFuZCBwb3NzaWJseSBuZXRkZXZfbG9ja1xuJiM0MztcdCAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdFxuJiM0MztcdCAqXG4mIzQzO1x0ICogIEhvd2V2ZXIsIHdlIGNhbiYjMzk7dCByZWFsbHkgaGF2ZSByYWNlcyA6XG4mIzQzO1x0ICogIC0gSWYgd2UgaGF2ZSBhIFBIWSwgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkgd2lsbCBhbHdheXMgcnVuIGZpcnN0XG4mIzQzO1x0ICogICAgYW5kIHRyaWdnZXIgdGhlIGFsbG9jLiBPbmx5IHRoZW4gdGhlIHBvcnRzIGNhbiBiZSBhZGRlZCB0aHJvdWdoXG4mIzQzO1x0ICogICAgcGh5bGliIG9mIHNmcC5cbiYjNDM7XHQgKiAgLSBJZiB3ZSBkb24mIzM5O3QsIHRoZSBTRlAgcG9ydCBmb3IgdGhlIGNhZ2UgaXMgcmVnaXN0ZXJlZCBmaXJzdCwgYW5kXG4mIzQzO1x0ICogICAgb25seSB0aGVuIG90aGVyIHBvcnRzL1BIWXMgY2FuIGJlIHJlZ2lzdGVyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkZXYtXHUwMDNlbGlua190b3BvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0dG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7XG4mIzQzO1x0aWYgKElTX0VSUih0b3BvKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xuJiM0MztcbiYjNDM7XHQvKiBBdHRlbXB0IHRvIHJlLXVzZSBhIHByZXZpb3VzbHkgYWxsb2NhdGVkIHBvcnRfaWQgKi9cbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZClcbiYjNDM7XHRcdHJldCA9IHhhX2luc2VydChcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzLCBwb3J0LVx1MDAzZWlkLCBwb3J0LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXQgPSB4YV9hbGxvY19jeWNsaWMoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgXHUwMDI2cG9ydC1cdTAwM2VpZCwgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgICB4YV9saW1pdF8zMmIsIFx1MDAyNnRvcG8tXHUwMDNlbmV4dF9wb3J0X2luZGV4LFxuJiM0MztcdFx0XHRcdCAgICAgIEdGUF9LRVJORUwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fYWRkX3BvcnQpO1xuJiM0MztcbiYjNDM7dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cdTAwM2VsaW5rX3RvcG87XG4mIzQzO1xuJiM0MztcdGlmICghdG9wbylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgcG9ydC1cdTAwM2VpZCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19kZWxfcG9ydCk7XG4mIzQzO1xuIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4gXHRcdFx0ICBlbnVtIHBoeV91cHN0cmVhbSB1cHQsIHZvaWQgKnVwc3RyZWFtKVxuIHtcbi1cdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cdTAwM2VsaW5rX3RvcG87XG4mIzQzO1x0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvO1xuIFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiBcdGludCByZXQ7XG4gXG4gXHQvKiBldGh0b29sIG9wcyBtYXkgcnVuIHdpdGhvdXQgcnRubF9sb2NrLCBhbmQgcnRubF9sb2NrIGlzIHdoYXRcbkBAIC00NSwxMyAmIzQzOzExMCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChXQVJOX09OX09OQ0UobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghdG9wbykge1xuLVx0XHRyZXQgPSBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koZGV2KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHR0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbi1cdH1cbiYjNDM7XHR0b3BvID0gcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2MoZGV2KTtcbiYjNDM7XHRpZiAoSVNfRVJSKHRvcG8pKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIodG9wbyk7XG4gXG4gXHRwZG4gPSBremFsbG9jX29iaigqcGRuKTtcbiBcdGlmICghcGRuKVxuQEAgLTg2LDggJiM0MzsxNDcsMjAgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnI7XG4gXG4mIzQzO1x0LyogQWRkIGFsbCB0aGUgUEhZJiMzOTtzIHBvcnRzIHRvIHRoZSB0b3BvbG9neSAqL1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGh5LVx1MDAzZXBvcnRzLCBoZWFkKSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KGRldiwgcG9ydCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIGRlbF9wb3J0cztcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gXG4mIzQzO2RlbF9wb3J0czpcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2UocG9ydCwgXHUwMDI2cGh5LVx1MDAzZXBvcnRzLCBoZWFkKVxuJiM0MztcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuJiM0MztcbiYjNDM7XHR4YV9lcmFzZShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMsIHBoeS1cdTAwM2VwaHlpbmRleCk7XG4gZXJyOlxuIFx0a2ZyZWUocGRuKTtcbiBcdHJldHVybiByZXQ7XG5AQCAtOTksMTAgJiM0MzsxNzIsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuIFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiBcbiBcdGlmICghdG9wbylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGh5LVx1MDAzZXBvcnRzLCBoZWFkKVxuJiM0MztcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuJiM0MztcbiBcdHBkbiA9IHhhX2VyYXNlKFx1MDAyNnRvcG8tXHUwMDNlcGh5cywgcGh5LVx1MDAzZXBoeWluZGV4KTtcbiBcbiBcdC8qIFdlIGRlbGV0ZSB0aGUgUEhZIGZyb20gdGhlIHRvcG9sb2d5LCBob3dldmVyIHdlIGRvbiYjMzk7dCByZS1zZXQgdGhlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbmluZGV4IDU5ZGZlMzVhZmE1NGZjLi41Y2ZiZmNjMTA3OWFkMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbkBAIC0xNCw2ICYjNDM7MTQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2ZpeGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGlubG9jay5oXHUwMDNlXG5AQCAtOTMsNiAmIzQzOzk1LDggQEAgc3RydWN0IHBoeWxpbmsge1xuIFx0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soc2ZwX2ludGVyZmFjZXMpO1xuIFx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc2ZwX3N1cHBvcnQpO1xuIFx0dTggc2ZwX3BvcnQ7XG4mIzQzO1x0c3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqbW9kX3BvcnQ7XG4gXG4gXHRzdHJ1Y3QgZWVlX2NvbmZpZyBlZWVfY2ZnO1xuIFxuQEAgLTE3NjQsNiAmIzQzOzE3NjgsNTEgQEAgc3RhdGljIHZvaWQgcGh5bGlua19maXhlZF9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHM7XG4gXG4mIzQzO3N0YXRpYyBpbnQgcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcGwtXHUwMDNlbmV0ZGV2IHx8ICFwbC1cdTAwM2VzZnBfYnVzKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuJiM0MztcdGlmICghcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwb3J0LVx1MDAzZWlzX3NmcCA9IHRydWU7XG4mIzQzO1x0cG9ydC1cdTAwM2Vpc19taWkgPSB0cnVlO1xuJiM0MztcdHBvcnQtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV9hbmQocG9ydC1cdTAwM2VpbnRlcmZhY2VzLCBwbC1cdTAwM2Vjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMsXG4mIzQzO1x0XHRcdCAgcGh5bGlua19zZnBfaW50ZXJmYWNlcyk7XG4mIzQzO1x0cGh5X3BvcnRfdXBkYXRlX3N1cHBvcnRlZChwb3J0KTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBvcnQpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIG91dF9kZXN0cm95X3BvcnQ7XG4mIzQzO1xuJiM0MztcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBwb3J0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO291dF9kZXN0cm95X3BvcnQ6XG4mIzQzO1x0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbiYjNDM7XHRwbC1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4mIzQzO3tcbiYjNDM7XHRpZiAocGwtXHUwMDNlbmV0ZGV2IFx1MDAyNlx1MDAyNiBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KVxuJiM0MztcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpO1xuJiM0MztcbiYjNDM7XHRpZiAocGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydClcbiYjNDM7XHRcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4mIzQzO1xuJiM0MztcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbiB7XG5AQCAtMTc4MSw5ICYjNDM7MTgzMCwxOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcbiBcdHBsLVx1MDAzZXNmcF9idXMgPSBidXM7XG4gXG4mIzQzO1x0cmV0ID0gcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydChwbCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0c2ZwX2J1c19wdXQoYnVzKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGwsIFx1MDAyNnNmcF9waHlsaW5rX29wcyk7XG4gXHRzZnBfYnVzX3B1dChidXMpO1xuIFxuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChwbCk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTk0NSw2ICYjNDM7MjAwMyw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfY3JlYXRlKTtcbiB2b2lkIHBoeWxpbmtfZGVzdHJveShzdHJ1Y3QgcGh5bGluayAqcGwpXG4ge1xuIFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGwtXHUwMDNlc2ZwX2J1cyk7XG4mIzQzO1x0cGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpO1xuIFx0aWYgKHBsLVx1MDAzZWxpbmtfZ3BpbylcbiBcdFx0Z3Bpb2RfcHV0KHBsLVx1MDAzZWxpbmtfZ3Bpbyk7XG4gXG5AQCAtMzg3MCwxNCAmIzQzOzM5MjksNjcgQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3JlbW92ZSh2b2lkICp1cHN0cmVhbSlcbiBcdHBoeV9pbnRlcmZhY2VfemVybyhwbC1cdTAwM2VzZnBfaW50ZXJmYWNlcyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIENyZWF0ZSBtb2QgcG9ydCAqL1xuJiM0MztcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuJiM0MztcdGlmICghcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwb3J0LVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBsLVx1MDAzZXNmcF9idXMpO1xuJiM0MztcbiYjNDM7XHRwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHBvcnQtXHUwMDNlc3VwcG9ydGVkLCBjYXBzLVx1MDAzZWxpbmtfbW9kZXMsXG4mIzQzO1x0XHRcdFx0XHRwbC1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuJiM0MztcbiYjNDM7XHRpZiAocGwtXHUwMDNlbmV0ZGV2KSB7XG4mIzQzO1x0XHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcG9ydCk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWlkO1xuJiM0MztcbiYjNDM7XHRwbC1cdTAwM2Vtb2RfcG9ydCA9IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBwaHlsaW5rX2RlbF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFwbC1cdTAwM2Vtb2RfcG9ydClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHBsLVx1MDAzZW5ldGRldilcbiYjNDM7XHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtXHUwMDNlbmV0ZGV2LCBwbC1cdTAwM2Vtb2RfcG9ydCk7XG4mIzQzO1xuJiM0MztcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXHUwMDNlbW9kX3BvcnQpO1xuJiM0MztcdHBsLVx1MDAzZW1vZF9wb3J0ID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcbiB7XG4gXHRzdHJ1Y3QgcGh5bGluayAqcGwgPSB1cHN0cmVhbTtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0LyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RhcnQgdGhlIFBIWSBub3cuICovXG4gXHRpZiAocGwtXHUwMDNlcGh5ZGV2KSB7XG4gXHRcdHBoeV9zdGFydChwbC1cdTAwM2VwaHlkZXYpO1xuIFx0XHRyZXR1cm4gMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0ID0gcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHBsKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHQvKiBJZiB0aGUgbW9kdWxlIG1heSBoYXZlIGEgUEhZIGJ1dCB3ZSBkaWRuJiMzOTt0IGRldGVjdCBvbmUgd2VcbkBAIC0zODg2LDcgJiM0MzszOTk4LDE2IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuIFx0aWYgKCFwbC1cdTAwM2VzZnBfbWF5X2hhdmVfcGh5KVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XG4mIzQzO1x0cmV0ID0gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGRlbF9tb2RfcG9ydDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztkZWxfbW9kX3BvcnQ6XG4mIzQzO1x0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXG5AQCAtMzg5Niw2ICYjNDM7NDAxNyw4IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxuIFx0LyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi9cbiBcdGlmIChwbC1cdTAwM2VwaHlkZXYpXG4gXHRcdHBoeV9zdG9wKHBsLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbGlua19kb3duKHZvaWQgKnVwc3RyZWFtKVxuQEAgLTM5NDAsNiAmIzQzOzQwNjMsOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxuIFx0cGh5X2ludGVyZmFjZV9hbmQocGh5LVx1MDAzZWhvc3RfaW50ZXJmYWNlcywgcGh5bGlua19zZnBfaW50ZXJmYWNlcyxcbiBcdFx0XHQgIHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4gXG4mIzQzO1x0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XG4mIzQzO1xuIFx0LyogRG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiAqL1xuIFx0cmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19waHkocGwsIHBoeSk7XG4gfVxuQEAgLTM5NDgsNiAmIzQzOzQwNzMsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSxcbiBcdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkodXBzdHJlYW0pO1xuJiM0MztcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHlkZXYsIE5VTEwpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzID0ge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCBiZWZmMWQ2ZmNjN2NkYS4uODI5NmY0ZjU5Y2UzYjIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtNTgyLDYgJiM0Mzs1ODIsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHdvbF9lbmFibGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGUgUEhZIG9yIHRoZSBhdHRhY2hlZCBNQUMgaGF2ZSBXYWtlLW9uLUxBTlxuICAqIFx0XHQgZW5hYmxlZC5cbiAgKiBAaXNfZ2VucGh5X2RyaXZlbjogUEhZIGlzIGRyaXZlbiBieSBvbmUgb2YgdGhlIGdlbmVyaWMgUEhZIGRyaXZlcnNcbiYjNDM7ICogQGhhc19zZnBfbW9kX3BoeTogU2V0IHRydWUgaWYgZG93bnN0cmVhbSBTRlAgYnVzJiMzOTtzIG1vZHVsZSBjb250YWlucyBhIFBIWVxuICAqIEBzdGF0ZTogU3RhdGUgb2YgdGhlIFBIWSBmb3IgbWFuYWdlbWVudCBwdXJwb3Nlc1xuICAqIEBkZXZfZmxhZ3M6IERldmljZS1zcGVjaWZpYyBmbGFncyB1c2VkIGJ5IHRoZSBQSFkgZHJpdmVyLlxuICAqXG5AQCAtNTk0LDYgJiM0Mzs1OTUsOSBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHBoeWxpbms6IFBvaW50ZXIgdG8gcGh5bGluayBpbnN0YW5jZSBmb3IgdGhpcyBQSFlcbiAgKiBAc2ZwX2J1c19hdHRhY2hlZDogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFNGUCBidXMgaGFzIGJlZW4gYXR0YWNoZWRcbiAgKiBAc2ZwX2J1czogU0ZQIGJ1cyBhdHRhY2hlZCB0byB0aGlzIFBIWSYjMzk7cyBmaWJlciBwb3J0XG4mIzQzOyAqIEBzZnBfY2FnZV9wb3J0OiBUaGUgcGh5X3BvcnQgY29ubmVjdGVkIHRvIHRoZSBkb3duc3RyZWFtIFNGUCBjYWdlXG4mIzQzOyAqIEBtb2RfcG9ydDogcGh5X3BvcnQgcmVwcmVzZW50aW5nIHRoZSBTRlAgbW9kdWxlLCBpZiBpdCBpcyBwaHktbGVzc1xuJiM0MzsgKiBAdXBzdHJlYW1fcG9ydDogcGh5X3BvcnQgdGhpcyBQSFkmIzM5O3MgTUlJIGF0dGFjaGVzIHRvLCBpZiBhbnlcbiAgKiBAYXR0YWNoZWRfZGV2OiBUaGUgYXR0YWNoZWQgZW5ldCBkcml2ZXImIzM5O3MgZGV2aWNlIGluc3RhbmNlIHB0clxuICAqIEBhZGp1c3RfbGluazogQ2FsbGJhY2sgZm9yIHRoZSBlbmV0IGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBjaGFuZ2VzOiBpbiB0aGVcbiAgKiAgICAgICAgICAgICAgIGxpbmsgc3RhdGUuXG5AQCAtNzA2LDYgJiM0Mzs3MTAsNyBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7XG4gXHR1bnNpZ25lZCBpcnFfcmVydW46MTtcbiBcbiBcdHVuc2lnbmVkIGRlZmF1bHRfdGltZXN0YW1wOjE7XG4mIzQzO1x0dW5zaWduZWQgaGFzX3NmcF9tb2RfcGh5OjE7XG4gXG4gXHRpbnQgcmF0ZV9tYXRjaGluZztcbiBcbkBAIC03ODUsNiAmIzQzOzc5MCw5IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcbiBcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cbiBcdGJvb2wgc2ZwX2J1c19hdHRhY2hlZDtcbiBcdHN0cnVjdCBzZnBfYnVzICpzZnBfYnVzO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqc2ZwX2NhZ2VfcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcbiBcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmF0dGFjaGVkX2RldjtcbiBcdHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cztcbkBAIC0yNDY1LDYgJiM0MzsyNDczLDggQEAgaW50IF9fcGh5X2h3dHN0YW1wX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFxuIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBcbiYjNDM7dm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcbiYjNDM7XG4gLyoqXG4gICogcGh5X21vZHVsZV9kcml2ZXIoKSAtIEhlbHBlciBtYWNybyBmb3IgcmVnaXN0ZXJpbmcgUEhZIGRyaXZlcnNcbiAgKiBAX19waHlfZHJpdmVyczogYXJyYXkgb2YgUEhZIGRyaXZlcnMgdG8gcmVnaXN0ZXJcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcbmluZGV4IDk1NTc1ZjY4ZDViYzcxLi45NTYyOTExMjIwNGVhOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXG5AQCAtMTMsMTQgJiM0MzsxMywxOSBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gXG4gc3RydWN0IHhhcnJheTtcbiBzdHJ1Y3QgcGh5X2RldmljZTtcbiYjNDM7c3RydWN0IHBoeV9wb3J0O1xuIHN0cnVjdCBzZnBfYnVzO1xuIFxuIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSB7XG4gXHRzdHJ1Y3QgeGFycmF5IHBoeXM7XG4gXHR1MzIgbmV4dF9waHlfaW5kZXg7XG4mIzQzO1xuJiM0MztcdHN0cnVjdCB4YXJyYXkgcG9ydHM7XG4mIzQzO1x0dTMyIG5leHRfcG9ydF9pbmRleDtcbiB9O1xuIFxuIHN0cnVjdCBwaHlfZGV2aWNlX25vZGUge1xuQEAgLTQ4LDYgJiM0Mzs1Myw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcbiBcbiYjNDM7aW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcbiYjNDM7dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKlxuIHBoeV9saW5rX3RvcG9fZ2V0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcGh5aW5kZXgpXG4ge1xuQEAgLTY0LDYgJiM0Mzs3MiwyMCBAQCBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXG4mIzQzO3BoeV9saW5rX3RvcG9fZ2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBvcnRfaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRvcG8pXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0LyogQ2FsbGVyIG11c3QgaG9sZCBSVE5MIHdoaWxlIGhhbmRsaW5nIHRoZSBwaHlfcG9ydCAqL1xuJiM0MztcdHJldHVybiB4YV9sb2FkKFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIHBvcnRfaWQpO1xuJiM0Mzt9XG4mIzQzO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG5AQCAtNzcsMTEgJiM0Mzs5OSwyOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4ge1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0IHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdFx0ICBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICpcbiBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxuIHtcbiBcdHJldHVybiBOVUxMO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9wb3J0ICpcbiYjNDM7cGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4gI2VuZGlmXG4gXG4gI2VuZGlmIC8qIF9fUEhZX0xJTktfVE9QT0xPR1lfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaCBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuaW5kZXggMGVmMGY1Y2U0NzA5MjYuLmUzYTQxY2VkZWJkY2ZhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbkBAIC0zNiw5ICYjNDM7MzYsMTIgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7XG4gLyoqXG4gICogc3RydWN0IHBoeV9wb3J0IC0gQSByZXByZXNlbnRhdGlvbiBvZiBhIG5ldHdvcmsgZGV2aWNlIHBoeXNpY2FsIGludGVyZmFjZVxuICAqXG4mIzQzOyAqIEBpZDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwb3J0IHdpdGhpbiB0aGUgdG9wb2xvZ3lcbiAgKiBAaGVhZDogVXNlZCBieSB0aGUgcG9ydCYjMzk7cyBwYXJlbnQgdG8gbGlzdCBwb3J0c1xuICAqIEBwYXJlbnRfdHlwZTogVGhlIHR5cGUgb2YgZGV2aWNlIHRoaXMgcG9ydCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG9cbiAgKiBAcGh5OiBJZiB0aGUgcGFyZW50IGlzIFBIWV9QT1JUX1BIWURFViwgdGhlIFBIWSBjb250cm9sbGluZyB0aGF0IHBvcnRcbiYjNDM7ICogQHVwc3RyZWFtX3BvcnQ6IEZvciBub24tTUlJIHBvcnRzLCBpbmRpY2F0ZXMgdGhlIE1JSSBwb3J0IHRoYXQgZmVlZHMgdGhpc1xuJiM0MzsgKlx0XHQgICBwb3J0LCBlLmcuIHRoZSBTRlAgY2FnZSBwb3J0IGZvciBhIFNGUCBtb2R1bGUgcG9ydC5cbiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlclxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxuICAqIEBtZWRpdW1zOiBCaXRtYXNrIG9mIHRoZSBwaHlzaWNhbCBtZWRpdW1zIHRoaXMgcG9ydCBwcm92aWRlcyBhY2Nlc3MgdG9cbkBAIC01MiwxMSAmIzQzOzU1LDEzIEBAIHN0cnVjdCBwaHlfcG9ydF9vcHMge1xuICAqIEBpc19zZnA6IEluZGljYXRlcyBpZiB0aGlzIHBvcnQgZHJpdmVzIGFuIFNGUCBjYWdlLlxuICAqL1xuIHN0cnVjdCBwaHlfcG9ydCB7XG4mIzQzO1x0dTMyIGlkO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBoZWFkO1xuIFx0ZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7XG4gXHR1bmlvbiB7XG4gXHRcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHk7XG4gXHR9O1xuJiM0MztcdHUzMiB1cHN0cmVhbV9wb3J0O1xuIFxuIFx0Y29uc3Qgc3RydWN0IHBoeV9wb3J0X29wcyAqb3BzO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5pbmRleCA4MTM0YmFmNzg2MGYzYy4uZjlkODc5NGVhYmMxOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5AQCAtNzgsNiAmIzQzOzc4LDExIEBAIGVudW0gZXRodG9vbF9wc2VfZXZlbnQge1xuIFx0RVRIVE9PTF9QU0VfRVZFTlRfU1dfUFdfQ09OVFJPTF9FUlJPUiA9IDY0LFxuIH07XG4gXG4mIzQzO2VudW0gZXRodG9vbF9wb3J0X3R5cGUge1xuJiM0MztcdEVUSFRPT0xfUE9SVF9UWVBFX01ESSxcbiYjNDM7XHRFVEhUT09MX1BPUlRfVFlQRV9TRlAsXG4mIzQzO307XG4mIzQzO1xuIGVudW0ge1xuIFx0RVRIVE9PTF9BX0hFQURFUl9VTlNQRUMsXG4gXHRFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWCxcbkBAIC04NDAsNiAmIzQzOzg0NSwxOCBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfQV9NU0VfTUFYID0gKF9fRVRIVE9PTF9BX01TRV9DTlQgLSAxKVxuIH07XG4gXG4mIzQzO2VudW0ge1xuJiM0MztcdEVUSFRPT0xfQV9QT1JUX0hFQURFUiA9IDEsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfSUQsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxuJiM0MztcdEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTLFxuJiM0MztcdEVUSFRPT0xfQV9QT1JUX1RZUEUsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCxcbiYjNDM7XG4mIzQzO1x0X19FVEhUT09MX0FfUE9SVF9DTlQsXG4mIzQzO1x0RVRIVE9PTF9BX1BPUlRfTUFYID0gKF9fRVRIVE9PTF9BX1BPUlRfQ05UIC0gMSlcbiYjNDM7fTtcbiYjNDM7XG4gZW51bSB7XG4gXHRFVEhUT09MX01TR19VU0VSX05PTkUgPSAwLFxuIFx0RVRIVE9PTF9NU0dfU1RSU0VUX0dFVCA9IDEsXG5AQCAtODkzLDYgJiM0Mzs5MTAsNyBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfQUNULFxuIFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9BQ1QsXG4gXHRFVEhUT09MX01TR19NU0VfR0VULFxuJiM0MztcdEVUSFRPT0xfTVNHX1BPUlRfR0VULFxuIFxuIFx0X19FVEhUT09MX01TR19VU0VSX0NOVCxcbiBcdEVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKVxuQEAgLTk1NCw2ICYjNDM7OTcyLDcgQEAgZW51bSB7XG4gXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX05URixcbiBcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfTlRGLFxuIFx0RVRIVE9PTF9NU0dfTVNFX0dFVF9SRVBMWSxcbiYjNDM7XHRFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSxcbiBcbiBcdF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCxcbiBcdEVUSFRPT0xfTVNHX0tFUk5FTF9NQVggPSAoX19FVEhUT09MX01TR19LRVJORUxfQ05UIC0gMSlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBjMWMxYmUxYTY5NjJmZS4uYjM2Y2M1YzQ3ODE2YTQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC0xMTMxNSw2ICYjNDM7MTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXHUwMDI2XHUwMDI2IHRvcG8pIHtcbiBcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMpO1xuJiM0MztcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzKTtcbiBcdFx0a2ZyZWUodG9wbyk7XG4gXHRcdGRldi1cdTAwM2VsaW5rX3RvcG8gPSBOVUxMO1xuIFx0fVxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL01ha2VmaWxlIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbmluZGV4IDYyOWMxMDkxNjY3MGVjLi45YjViMDk2NzAwMDgxMSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuQEAgLTksNCAmIzQzOzksNCBAQCBldGh0b29sX25sLXlcdDo9IG5ldGxpbmsubyBiaXRzZXQubyBzdHJzZXQubyBsaW5raW5mby5vIGxpbmttb2Rlcy5vIHJzcy5vIFxcXG4gXHRcdCAgIGNoYW5uZWxzLm8gY29hbGVzY2UubyBwYXVzZS5vIGVlZS5vIHRzaW5mby5vIGNhYmxldGVzdC5vIFxcXG4gXHRcdCAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcXFxuIFx0XHQgICBtb2R1bGUubyBjbWlzX2Z3X3VwZGF0ZS5vIGNtaXNfY2RiLm8gcHNlLXBkLm8gcGxjYS5vIFxcXG4tXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm9cbiYjNDM7XHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gcG9ydC5vXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5pbmRleCAxYWYzOTViNTQzMzBlMi4uYzA3NmMwN2QwYTA4MGMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xuQEAgLTI2LDYgJiM0MzsyNiw4IEBAIHN0YXRpYyB1MzIgZXRobmxfYmNhc3Rfc2VxO1xuIFx0XHRcdCAgICAgRVRIVE9PTF9GTEFHX09NSVRfUkVQTFkpXG4gI2RlZmluZSBFVEhUT09MX0ZMQUdTX1NUQVRTIChFVEhUT09MX0ZMQUdTX0JBU0lDIHwgRVRIVE9PTF9GTEFHX1NUQVRTKVxuIFxuJiM0MztjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXSBfX3JvX2FmdGVyX2luaXQ7XG4mIzQzO1xuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lbXSA9IHtcbiBcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9OQU1FXVx0PSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsXG5AQCAtNDMxLDYgJiM0Mzs0MzMsNyBAQCBldGhubF9kZWZhdWx0X3JlcXVlc3RzW19fRVRIVE9PTF9NU0dfVVNFUl9DTlRdID0ge1xuIFx0W0VUSFRPT0xfTVNHX1RTQ09ORklHX1NFVF1cdD0gXHUwMDI2ZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHMsXG4gXHRbRVRIVE9PTF9NU0dfUEhZX0dFVF1cdFx0PSBcdTAwMjZldGhubF9waHlfcmVxdWVzdF9vcHMsXG4gXHRbRVRIVE9PTF9NU0dfTVNFX0dFVF1cdFx0PSBcdTAwMjZldGhubF9tc2VfcmVxdWVzdF9vcHMsXG4mIzQzO1x0W0VUSFRPT0xfTVNHX1BPUlRfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX3BvcnRfcmVxdWVzdF9vcHMsXG4gfTtcbiBcbiBzdGF0aWMgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuQEAgLTE1NzIsNiAmIzQzOzE1NzUsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7XG4gXHRcdC5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSxcbiBcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5jbWRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4mIzQzO1x0XHQuZG9pdFx0PSBldGhubF9kZWZhdWx0X2RvaXQsXG4mIzQzO1x0XHQuc3RhcnRcdD0gZXRobmxfcG9ydF9kdW1wX3N0YXJ0LFxuJiM0MztcdFx0LmR1bXBpdFx0PSBldGhubF9wb3J0X2R1bXBpdCxcbiYjNDM7XHRcdC5kb25lXHQ9IGV0aG5sX3BvcnRfZHVtcF9kb25lLFxuJiM0MztcdFx0LnBvbGljeSA9IGV0aG5sX3BvcnRfZ2V0X3BvbGljeSxcbiYjNDM7XHRcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9wb3J0X2dldF9wb2xpY3kpIC0gMSxcbiYjNDM7XHR9LFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0ge1xuQEAgLTE1OTQsMTAgJiM0MzsxNjA2LDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZXRodG9vbF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XG4gXG4gLyogbW9kdWxlIHNldHVwICovXG4gXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCBldGhubF9waHlfbmFtZXNfcG9wdWxhdGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWU7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRuYW1lID0gcGh5X21vZGVzKGkpO1xuJiM0MztcdFx0c3Ryc2NweShwaHlfaW50ZXJmYWNlX25hbWVzW2ldLCBuYW1lLCBFVEhfR1NUUklOR19MRU4pO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IF9faW5pdCBldGhubF9pbml0KHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHRldGhubF9waHlfbmFtZXNfcG9wdWxhdGUoKTtcbiYjNDM7XG4gXHRyZXQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseShcdTAwMjZldGh0b29sX2dlbmxfZmFtaWx5KTtcbiBcdGlmIChXQVJOKHJldCBcdTAwM2MgMCwgXCYjMzQ7ZXRodG9vbDogZ2VuZXRsaW5rIGZhbWlseSByZWdpc3RyYXRpb24gZmFpbGVkXCYjMzQ7KSlcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbmluZGV4IDNlOTY5YTA3MGY5ZmU0Li5iMjUwZThiNWM0ZDQ3NSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5AQCAtNSwxMSAmIzQzOzUsMTUgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGh0b29sX25ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2dlbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuIFxuIHN0cnVjdCBldGhubF9yZXFfaW5mbztcbiBcbiYjNDM7ZXh0ZXJuIGNoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dO1xuJiM0MztcbiYjNDM7dTMyIGV0aG5sX2JjYXN0X3NlcV9uZXh0KHZvaWQpO1xuIGludCBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuIFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpuZXN0LCBzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbkBAIC00NzQsNiAmIzQzOzQ3OCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbW1fcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21zZV9yZXF1ZXN0X29wcztcbiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9wb3J0X3JlcXVlc3Rfb3BzO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyAmIzQzOyAxXTtcbkBAIC01MzAsNiAmIzQzOzUzNSw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9waHlfZ2V0X3BvbGljeVtFVEhUT09MX0FfUEhZX0hFQURFUiAmIzQzOyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfdHNjb25maWdfZ2V0X3BvbGljeVtFVEhUT09MX0FfVFNDT05GSUdfSEVBREVSICYjNDM7IDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggJiM0MzsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX21zZV9nZXRfcG9saWN5W0VUSFRPT0xfQV9NU0VfSEVBREVSICYjNDM7IDFdO1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcG9ydF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QT1JUX0lEICYjNDM7IDFdO1xuIFxuIGludCBldGhubF9zZXRfZmVhdHVyZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuQEAgLTU0NSw2ICYjNDM7NTUxLDkgQEAgaW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBpbnQgZXRobmxfdHNpbmZvX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBpbnQgZXRobmxfcnNzX2NyZWF0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuIGludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4mIzQzO2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xuIFxuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX3N0ZF9uYW1lc1tfX0VUSFRPT0xfU1RBVFNfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX2V0aF9waHlfbmFtZXNbX19FVEhUT09MX0FfU1RBVFNfRVRIX1BIWV9DTlRdW0VUSF9HU1RSSU5HX0xFTl07XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvcG9ydC5jIGIvbmV0L2V0aHRvb2wvcG9ydC5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFiMmNjMDVkZjlmOTBhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9wb3J0LmNcbkBAIC0wLDAgJiM0MzsxLDM3NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAyMDI2IEJvb3RsaW5cbiYjNDM7ICovXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X3BvcnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Yml0c2V0LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Y29tbW9uLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bmV0bGluay5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcG9ydF9yZXFfaW5mbyB7XG4mIzQzO1x0c3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7XG4mIzQzO1x0dTMyIHBvcnRfaWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhIHtcbiYjNDM7XHRzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YVx0YmFzZTtcbiYjNDM7XHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpO1xuJiM0MztcdERFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLKGludGVyZmFjZXMpO1xuJiM0MztcdHUzMiBwb3J0X2lkO1xuJiM0MztcdGJvb2wgbWlpO1xuJiM0MztcdGJvb2wgc2ZwO1xuJiM0MztcdHUzMiB1cHN0cmVhbV9wb3J0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBQT1JUX1JFUUlORk8oX19yZXFfYmFzZSkgXFxcbiYjNDM7XHRjb250YWluZXJfb2YoX19yZXFfYmFzZSwgc3RydWN0IHBvcnRfcmVxX2luZm8sIGJhc2UpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBPUlRfUkVQREFUQShfX3JlcGx5X2Jhc2UpIFxcXG4mIzQzO1x0Y29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBvcnRfcmVwbHlfZGF0YSwgYmFzZSlcbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BvcnRfZ2V0X3BvbGljeVtFVEhUT09MX0FfUE9SVF9JRCAmIzQzOyAxXSA9IHtcbiYjNDM7XHRbRVRIVE9PTF9BX1BPUlRfSEVBREVSXSA9IE5MQV9QT0xJQ1lfTkVTVEVEKGV0aG5sX2hlYWRlcl9wb2xpY3kpLFxuJiM0MztcdFtFVEhUT09MX0FfUE9SVF9JRF0gPSBOTEFfUE9MSUNZX01JTihOTEFfVTMyLCAxKSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcG9ydF9wYXJzZV9yZXF1ZXN0KHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0YixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pO1xuJiM0MztcbiYjNDM7XHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBFVEhUT09MX0FfUE9SVF9JRCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVxdWVzdC1cdTAwM2Vwb3J0X2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BPUlRfSURdKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcG9ydF9wcmVwYXJlX2RhdGEoY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSxcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pO1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiYjNDM7XG4mIzQzO1x0LyogUlROTCBtdXN0IGJlIGhlbGQgd2hpbGUgaG9sZGluZyBhIHJlZiB0byB0aGUgcGh5X3BvcnQuIEhlcmUsIGNhbGxlclxuJiM0MztcdCAqIGhvbGRzIFJUTkwuXG4mIzQzO1x0ICovXG4mIzQzO1x0cG9ydCA9IHBoeV9saW5rX3RvcG9fZ2V0X3BvcnQocmVxX2luZm8tXHUwMDNlZGV2LCByZXF1ZXN0LVx1MDAzZXBvcnRfaWQpO1xuJiM0MztcdGlmICghcG9ydClcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRsaW5rbW9kZV9jb3B5KHJlcGx5LVx1MDAzZXN1cHBvcnRlZCwgcG9ydC1cdTAwM2VzdXBwb3J0ZWQpO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfY29weShyZXBseS1cdTAwM2VpbnRlcmZhY2VzLCBwb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuJiM0MztcdHJlcGx5LVx1MDAzZXBvcnRfaWQgPSBwb3J0LVx1MDAzZWlkO1xuJiM0MztcdHJlcGx5LVx1MDAzZW1paSA9IHBvcnQtXHUwMDNlaXNfbWlpO1xuJiM0MztcdHJlcGx5LVx1MDAzZXNmcCA9IHBvcnQtXHUwMDNlaXNfc2ZwO1xuJiM0MztcdHJlcGx5LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBvcnRfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSlcbiYjNDM7e1xuJiM0MztcdGJvb2wgY29tcGFjdCA9IHJlcV9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBFVEhUT09MX0ZMQUdfQ09NUEFDVF9CSVRTRVRTO1xuJiM0MztcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpO1xuJiM0MztcdHNpemVfdCBzaXplID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBFVEhUT09MX0FfUE9SVF9JRCAqL1xuJiM0MztcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXBseS1cdTAwM2VtaWkpIHtcbiYjNDM7XHRcdC8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyAqL1xuJiM0MztcdFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXHUwMDNlc3VwcG9ydGVkLCBOVUxMLFxuJiM0MztcdFx0XHRcdFx0X19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLFxuJiM0MztcdFx0XHRcdFx0bGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyAqL1xuJiM0MztcdFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsXG4mIzQzO1x0XHRcdFx0XHRwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0c2l6ZSAmIzQzOz0gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqL1xuJiM0MztcdHNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbiYjNDM7XG4mIzQzO1x0LyogRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCAqL1xuJiM0MztcdGlmIChyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KVxuJiM0MztcdFx0c2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2l6ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEpXG4mIzQzO3tcbiYjNDM7XHRib29sIGNvbXBhY3QgPSByZXFfaW5mby1cdTAwM2VmbGFncyBcdTAwMjYgRVRIVE9PTF9GTEFHX0NPTVBBQ1RfQklUU0VUUztcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcbiYjNDM7XHRpbnQgcmV0LCBwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9NREk7XG4mIzQzO1xuJiM0MztcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS1cdTAwM2Vwb3J0X2lkKSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdGlmICghcmVwbHktXHUwMDNlbWlpKSB7XG4mIzQzO1x0XHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTLFxuJiM0MztcdFx0XHRcdCAgICAgICByZXBseS1cdTAwM2VzdXBwb3J0ZWQsIE5VTEwsXG4mIzQzO1x0XHRcdFx0ICAgICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyxcbiYjNDM7XHRcdFx0XHQgICAgICAgbGlua19tb2RlX25hbWVzLCBjb21wYWN0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IGV0aG5sX3B1dF9iaXRzZXQoc2tiLCBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyxcbiYjNDM7XHRcdFx0XHQgICAgICAgcmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbiYjNDM7XHRcdFx0XHQgICAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX01BWCxcbiYjNDM7XHRcdFx0XHQgICAgICAgcGh5X2ludGVyZmFjZV9uYW1lcywgY29tcGFjdCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHJlcGx5LVx1MDAzZW1paSB8fCByZXBseS1cdTAwM2VzZnApXG4mIzQzO1x0XHRwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9TRlA7XG4mIzQzO1xuJiM0MztcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1RZUEUsIHBvcnRfdHlwZSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRpZiAocmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JULFxuJiM0MztcdFx0XHRyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KSlcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcG9ydF9kdW1wX2N0eCB7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVxX2luZm9cdCpyZXFfaW5mbztcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhXHQqcmVwbHlfZGF0YTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdGlmaW5kZXg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZ1x0XHRwb3NfaWZpbmRleDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdHBvc19wb3J0aWQ7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBvcnRfZHVtcF9jdHggKlxuJiM0Mztwb3J0X2R1bXBfY3R4X2dldChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBwb3J0X2R1bXBfY3R4ICopY2ItXHUwMDNlY3R4O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XG4mIzQzO1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbiYjNDM7XHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWluZm8uYXR0cnM7XG4mIzQzO1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxX2luZm87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0QlVJTERfQlVHX09OKHNpemVvZigqY3R4KSBcdTAwM2Ugc2l6ZW9mKGNiLVx1MDAzZWN0eCkpO1xuJiM0MztcbiYjNDM7XHRyZXFfaW5mbyA9IGt6YWxsb2Nfb2JqKCpyZXFfaW5mbyk7XG4mIzQzO1x0aWYgKCFyZXFfaW5mbylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xuJiM0MztcdGlmICghcmVwbHlfZGF0YSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZnJlZV9yZXFfaW5mbztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KFx1MDAyNnJlcV9pbmZvLVx1MDAzZWJhc2UsIHRiW0VUSFRPT0xfQV9QT1JUX0hFQURFUl0sXG4mIzQzO1x0XHRcdFx0XHQgZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuJiM0MztcdFx0XHRcdFx0IGluZm8tXHUwMDNlaW5mby5leHRhY2ssIGZhbHNlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBmcmVlX3JlcF9kYXRhO1xuJiM0MztcbiYjNDM7XHRjdHgtXHUwMDNlaWZpbmRleCA9IDA7XG4mIzQzO1x0Y3R4LVx1MDAzZXBvc19pZmluZGV4ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogRm9yIGZpbHRlcmVkIERVTVAgcmVxdWVzdHMsIGxldCYjMzk7cyBqdXN0IHN0b3JlIHRoZSBpZmluZGV4LiBXZSYjMzk7bGwgY2hlY2tcbiYjNDM7XHQgKiBhZ2FpbiBpZiB0aGUgbmV0ZGV2IGlzIHN0aWxsIHRoZXJlIHdoZW4gbG9vcGluZyBvdmVyIHRoZSBuZXRkZXYgbGlzdFxuJiM0MztcdCAqIGluIHRoZSBEVU1QIGxvb3AuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2KSB7XG4mIzQzO1x0XHRjdHgtXHUwMDNlaWZpbmRleCA9IHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0XHRuZXRkZXZfcHV0KHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LCBcdTAwMjZyZXFfaW5mby1cdTAwM2ViYXNlLmRldl90cmFja2VyKTtcbiYjNDM7XHRcdHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGN0eC1cdTAwM2VyZXFfaW5mbyA9IHJlcV9pbmZvO1xuJiM0MztcdGN0eC1cdTAwM2VyZXBseV9kYXRhID0gcmVwbHlfZGF0YTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztmcmVlX3JlcF9kYXRhOlxuJiM0MztcdGtmcmVlKHJlcGx5X2RhdGEpO1xuJiM0MztmcmVlX3JlcV9pbmZvOlxuJiM0MztcdGtmcmVlKHJlcV9pbmZvKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuJiM0MztcdHZvaWQgKmVoZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTtcbiYjNDM7XHRpZiAoIWVoZHIpXG4mIzQzO1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuJiM0MztcbiYjNDM7XHRtZW1zZXQoY3R4LVx1MDAzZXJlcGx5X2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhKSk7XG4mIzQzO1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBkZXY7XG4mIzQzO1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwb3J0X3ByZXBhcmVfZGF0YShcdTAwMjZjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZSwgXHUwMDI2Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZSxcbiYjNDM7XHRcdFx0XHRnZW5sX2luZm9fZHVtcChjYikpO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xuJiM0MztcdHJ0bmxfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZXRobmxfZmlsbF9yZXBseV9oZWFkZXIoc2tiLCBkZXYsIEVUSFRPT0xfQV9QT1JUX0hFQURFUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwb3J0X2ZpbGxfcmVwbHkoc2tiLCBcdTAwMjZjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZSwgXHUwMDI2Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZSk7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGdlbmxtc2dfZW5kKHNrYiwgZWhkcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcG9ydF9kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkZXYgPSBjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZS5kZXY7XG4mIzQzO1xuJiM0MztcdGlmICghZGV2LVx1MDAzZWxpbmtfdG9wbylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHR4YV9mb3JfZWFjaF9zdGFydChcdTAwMjZkZXYtXHUwMDNlbGlua190b3BvLVx1MDAzZXBvcnRzLCBjdHgtXHUwMDNlcG9zX3BvcnRpZCwgcG9ydCxcbiYjNDM7XHRcdFx0ICBjdHgtXHUwMDNlcG9zX3BvcnRpZCkge1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZXBvcnRfaWQgPSBjdHgtXHUwMDNlcG9zX3BvcnRpZDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwb3J0X2R1bXBfb25lKHNrYiwgZGV2LCBjYik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3R4LVx1MDAzZXBvc19wb3J0aWQgPSAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi1cdTAwM2Vzayk7XG4mIzQzO1x0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtXHUwMDNlcG9zX2lmaW5kZXgpIHtcbiYjNDM7XHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuJiM0MztcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gZGV2O1xuJiM0MztcdFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XG4mIzQzO1xuJiM0MztcdFx0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdFx0bmV0ZGV2X3B1dChkZXYsIFx1MDAyNmRldl90cmFja2VyKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xuJiM0MztcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChjdHgtXHUwMDNlaWZpbmRleCkge1xuJiM0MztcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4mIzQzO1x0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuJiM0MztcbiYjNDM7XHRcdGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuJiM0MztcdFx0XHRcdFx0ICBjdHgtXHUwMDNlaWZpbmRleCwgXHUwMDI2ZGV2X3RyYWNrZXIsXG4mIzQzO1x0XHRcdFx0XHQgIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0aWYgKCFkZXYpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiYjNDM7XHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IGRldjtcbiYjNDM7XHRcdHJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpO1xuJiM0MztcbiYjNDM7XHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IHBvcnRfZHVtcF9hbGxfZGV2KHNrYiwgY2IpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcF9kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4mIzQzO1xuJiM0MztcdGtmcmVlKGN0eC1cdTAwM2VyZXFfaW5mbyk7XG4mIzQzO1x0a2ZyZWUoY3R4LVx1MDAzZXJlcGx5X2RhdGEpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHMgPSB7XG4mIzQzO1x0LnJlcXVlc3RfY21kXHRcdD0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsXG4mIzQzO1x0LnJlcGx5X2NtZFx0XHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLFxuJiM0MztcdC5oZHJfYXR0clx0XHQ9IEVUSFRPT0xfQV9QT1JUX0hFQURFUixcbiYjNDM7XHQucmVxX2luZm9fc2l6ZVx0XHQ9IHNpemVvZihzdHJ1Y3QgcG9ydF9yZXFfaW5mbyksXG4mIzQzO1x0LnJlcGx5X2RhdGFfc2l6ZVx0PSBzaXplb2Yoc3RydWN0IHBvcnRfcmVwbHlfZGF0YSksXG4mIzQzO1xuJiM0MztcdC5wYXJzZV9yZXF1ZXN0XHRcdD0gcG9ydF9wYXJzZV9yZXF1ZXN0LFxuJiM0MztcdC5wcmVwYXJlX2RhdGFcdFx0PSBwb3J0X3ByZXBhcmVfZGF0YSxcbiYjNDM7XHQucmVwbHlfc2l6ZVx0XHQ9IHBvcnRfcmVwbHlfc2l6ZSxcbiYjNDM7XHQuZmlsbF9yZXBseVx0XHQ9IHBvcnRfZmlsbF9yZXBseSxcbiYjNDM7fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtQSFlMSU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O3BvcnRfcGFyc2VfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDtwb3J0X3ByZXBhcmVfZGF0YSYjMzQ7LAogICAgJiMzNDtwb3J0X3JlcGx5X3NpemUmIzM0OywKICAgICYjMzQ7cG9ydF9maWxsX3JlcGx5JiMzNDssCiAgICAmIzM0O3BvcnRfZHVtcF9vbmVfZGV2JiMzNDssCiAgICAmIzM0O3BvcnRfZHVtcF9hbGxfZGV2JiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb19kZWxfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0JiMzNDssCiAgICAmIzM0O3BoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfYWRkX3NmcF9tb2RfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfc2V0dXBfc2ZwX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyYjMzQ7LAogICAgJiMzNDtwaHlfc2V0X3Vwc3RyZWFtX3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQgKEVUSFRPT0xfTVNHX1BPUlRfR0VUKSB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBQSFkgYW5kIHBoeWxpbmsgc3Vic3lzdGVtcyB0byB0cmFjayBhbmQgZXhwb3NlIHRoZXNlIHBvcnRzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0NWE4YmFjMDNjZDgxNjQ3YjdiZWMxZThiOTljMTgxZDJhNDk2YTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEp1bCAyMSAwMDo1MjoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ldGh0b29sLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCmluZGV4IDVkZDRkMWI1ZDk0YmJiLi5kMTE1MWFmMzM1Y2ExMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sCkBAIC0yMTAsNiAmIzQzOzIxMCwxMCBAQCBkZWZpbml0aW9uczoKICAgICAgIC0KICAgICAgICAgbmFtZTogZGlzY2FyZAogICAgICAgICB2YWx1ZTogMzEKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogcG9ydC10eXBlCiYjNDM7ICAgIHR5cGU6IGVudW0KJiM0MzsgICAgZW50cmllczogW21kaSwgc2ZwXQogCiBhdHRyaWJ1dGUtc2V0czoKICAgLQpAQCAtMTkwNSw2ICYjNDM7MTkwOSwzMiBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgICAgbmFtZTogbGluawogICAgICAgICB0eXBlOiBuZXN0CiAgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBtc2Utc25hcHNob3QKJiM0MzsgIC0KJiM0MzsgICAgbmFtZTogcG9ydAomIzQzOyAgICBhdHRyLWNudC1uYW1lOiAtLWV0aHRvb2wtYS1wb3J0LWNudAomIzQzOyAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGhlYWRlcgomIzQzOyAgICAgICAgdHlwZTogbmVzdAomIzQzOyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlcgomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IGlkCiYjNDM7ICAgICAgICB0eXBlOiB1MzIKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtbW9kZXMKJiM0MzsgICAgICAgIHR5cGU6IG5lc3QKJiM0MzsgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXQKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtaW50ZXJmYWNlcwomIzQzOyAgICAgICAgdHlwZTogbmVzdAomIzQzOyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGJpdHNldAomIzQzOyAgICAgIC0KJiM0MzsgICAgICAgIG5hbWU6IHR5cGUKJiM0MzsgICAgICAgIHR5cGU6IHUzMgomIzQzOyAgICAgICAgZW51bTogcG9ydC10eXBlCiYjNDM7ICAgICAgLQomIzQzOyAgICAgICAgbmFtZTogdXBzdHJlYW0tcG9ydAomIzQzOyAgICAgICAgdHlwZTogdTMyCiAKIG9wZXJhdGlvbnM6CiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsCkBAIC0yODU5LDYgJiM0MzsyODg5LDI2IEBAIG9wZXJhdGlvbnM6CiAgICAgICAgICAgICAtIHdvcnN0LWNoYW5uZWwKICAgICAgICAgICAgIC0gbGluawogICAgICAgZHVtcDogKm1zZS1nZXQtb3AKJiM0MzsgICAgLQomIzQzOyAgICAgIG5hbWU6IHBvcnQtZ2V0CiYjNDM7ICAgICAgZG9jOiBHZXQgcG9ydHMgYXR0YWNoZWQgdG8gYW4gaW50ZXJmYWNlCiYjNDM7CiYjNDM7ICAgICAgYXR0cmlidXRlLXNldDogcG9ydAomIzQzOwomIzQzOyAgICAgIGRvOiAmYW1wO3BvcnQtZ2V0LW9wCiYjNDM7ICAgICAgICByZXF1ZXN0OgomIzQzOyAgICAgICAgICBhdHRyaWJ1dGVzOgomIzQzOyAgICAgICAgICAgIC0gaGVhZGVyCiYjNDM7ICAgICAgICAgICAgLSBpZAomIzQzOyAgICAgICAgcmVwbHk6CiYjNDM7ICAgICAgICAgIGF0dHJpYnV0ZXM6CiYjNDM7ICAgICAgICAgICAgLSBoZWFkZXIKJiM0MzsgICAgICAgICAgICAtIGlkCiYjNDM7ICAgICAgICAgICAgLSBzdXBwb3J0ZWQtbW9kZXMKJiM0MzsgICAgICAgICAgICAtIHN1cHBvcnRlZC1pbnRlcmZhY2VzCiYjNDM7ICAgICAgICAgICAgLSB0eXBlCiYjNDM7ICAgICAgICAgICAgLSB1cHN0cmVhbS1wb3J0CiYjNDM7ICAgICAgZHVtcDogKnBvcnQtZ2V0LW9wCiAKIG1jYXN0LWdyb3VwczoKICAgbGlzdDoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3QKaW5kZXggZTkyYWJmNDVmYWY1MGQuLmI0MzI2Yzg5YjA3NTFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdApAQCAtMjUzNyw2ICYjNDM7MjUzNywzOSBAQCBXaXRoaW4gZWFjaCBjaGFubmVsIG5lc3QsIG9ubHkgdGhlIG1ldHJpY3Mgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgd2lsbCBiZSBwcmVzZW50LgogU2VlIGBgc3RydWN0IHBoeV9tc2Vfc25hcHNob3RgYCBrZXJuZWwgZG9jdW1lbnRhdGlvbiBpbgogYGBpbmNsdWRlL2xpbnV4L3BoeS5oYGAuCiAKJiM0MztQT1JUX0dFVAomIzQzOz09PT09PT09CiYjNDM7CiYjNDM7UmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsCiYjNDM7cmVmZXJyZWQgdG8gYXMgJiMzNDtwb3J0cyYjMzQ7LiBVc2VyIG5lZWRzIHRvIHNwZWNpZnkgYSBQT1JUX0lEIGZvciB0aGUgRE8gb3BlcmF0aW9uLAomIzQzO2luIHdoaWNoIGNhc2UgdGhlIERPIHJlcXVlc3QgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNwZWNpZmljIHBvcnQuCiYjNDM7CiYjNDM7QXMgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgcG9ydCwgdGhlIERVTVAgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIGxpc3QgdGhlCiYjNDM7cG9ydHMgcHJlc2VudCBvbiBhIGdpdmVuIGludGVyZmFjZSwgYnkgcGFzc2luZyBhbiBpbnRlcmZhY2UgaW5kZXggb3IgbmFtZSBpbgomIzQzO3RoZSBkdW1wIHJlcXVlc3QuCiYjNDM7CiYjNDM7UmVxdWVzdCBjb250ZW50czoKJiM0MzsKJiM0MzsgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXIKJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgdTMyICAgICBwb3J0IGlkCiYjNDM7ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOwomIzQzO0tlcm5lbCByZXNwb25zZSBjb250ZW50czoKJiM0MzsKJiM0MzsgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgICAgbmVzdGVkICByZXF1ZXN0IGhlYWRlcgomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9JRGBgICAgICAgICAgICAgICAgICAgIHUzMiAgICAgdGhlIHBvcnQmIzM5O3MgdW5pcXVlIGlkZW50aWZpZXIsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXIgbmV0ZGV2aWNlLgomIzQzOyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVNgYCAgICAgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBsaW5rbW9kZXMKJiM0MzsgIGBgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVNgYCBiaXRzZXQgIGJpdHNldCBvZiBzdXBwb3J0ZWQgTUlJCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VzCiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1RZUEVgYCAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCB0eXBlCiYjNDM7ICBgYEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlRgYCAgICAgICAgdTMyICAgICBJZiBhbnksIHRoZSBpbmRleCBvZiB0aGUgTUlJCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0IHRoYXQgZmVlZHMgaW50byB0aGlzCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LgomIzQzOyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKIFJlcXVlc3QgdHJhbnNsYXRpb24KID09PT09PT09PT09PT09PT09PT0KIApAQCAtMjY0Nyw0ICYjNDM7MjY4MCw1IEBAIGFyZSBuZXRsaW5rIG9ubHkuCiAgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUEhZX0dFVGBgCiAgIGBgU0lPQ0dIV1RTVEFNUGBgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfVFNDT05GSUdfR0VUYGAKICAgYGBTSU9DU0hXVFNUQU1QYGAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19UU0NPTkZJR19TRVRgYAomIzQzOyAgbi9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19QT1JUX0dFVGBgCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0CmluZGV4IDZlMjhkOTA5NGJjZTNmLi4yYTliMWVjOTNiNzBmOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0CkBAIC05OSwxMyAmIzQzOzk5LDI5IEBAIHdpbGwgZXZlbnR1YWxseSBiZSBhYmxlIHRvIHJlcG9ydCBpdHMgb3duIGtzZXR0aW5nczo6CiAgICAgICAgICAgICAoX19fX18pLS0tLS18IFBvcnQgfAogICAgICAgICAgICAgICAgICAgICAgICAgJiM0MzstLS0tLS0mIzQzOwogCiYjNDM7U0ZQIHBvcnRzCiYjNDM7PT09PT09PT09CiYjNDM7CiYjNDM7U0ZQIGludGVyZmFjZXMgaW52b2x2ZSAyIGRpc3RpbmN0IGNvbXBvbmVudHMsIGVhY2ggcmVwcmVzZW50ZWQgYnkKJiM0MzthIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCAmbHQ7cGh5X3BvcnQmZ3Q7YCBpbnN0YW5jZSA6CiYjNDM7CiYjNDM7IC0gVGhlIFNGUCBjYWdlIGl0c2VsZiBpcyBhIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCAmbHQ7cGh5X3BvcnQmZ3Q7YC4gSXQmIzM5O3Mgc3BlY2lhbAomIzQzOyAgIGluIHRoYXQgaXQmIzM5O3Mgbm90IGFuIE1ESSBpbnRlcmZhY2UsIGJ1dCByYXRoZXIgYSBob3QtcGx1Z2dhYmxlIE1JSS4KJiM0MzsgICBUaGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0ICZsdDtwaHlfcG9ydCZndDtgIGFzc29jaWF0ZWQgdG8gaXQgbGlzdHMgdGhlIGRpZmZlcmVudAomIzQzOyAgIE1JSSBpbnRlcmZhY2VzIHdlIGNhbiB1c2Ugb24gdGhlIGNhZ2UuCiYjNDM7CiYjNDM7IC0gVGhlIFNGUCBtb2R1bGUsIHdoZW4gaW5zZXJ0ZWQsIHdpbGwgYWxzbyBiZSBhc3NvY2lhdGVkIHRvIGEKJiM0MzsgICA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgJmx0O3BoeV9wb3J0Jmd0O2AsIHRoYXQgcmVwcmVzZW50cyB0aGUgdmFyaW91cyBsaW5rbW9kZXMKJiM0MzsgICB0aGF0IGl0IGdpdmVzIGFjY2VzcyB0by4gVGhlIG1vZHVsZSYjMzk7cyA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgJmx0O3BoeV9wb3J0Jmd0O2AKJiM0MzsgICBkb2VzbiYjMzk7dCBzdXBlcnNlZGUgdGhlIGNhZ2UmIzM5O3MgcG9ydCwgaXQgcmVmZXJlbmNlcyBpdCB0aHJvdWdoCiYjNDM7ICAgdGhlIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCAmbHQ7cGh5X3BvcnQmZ3Q7YCA6YzptZW1iZXI6YHVwc3RyZWFtX3BvcnRgIGZpZWxkLgomIzQzOwogTmV4dCBzdGVwcwogPT09PT09PT09PQogCi1BcyBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgb25seSBwb3J0cyBjb250cm9sbGVkIGJ5IFBIWSBkZXZpY2VzIGFyZQotc3VwcG9ydGVkLiBUaGUgbmV4dCBzdGVwcyB3aWxsIGJlIHRvIGFkZCB0aGUgTmV0bGluayBBUEkgdG8gZXhwb3NlIHRoZXNlCi10byB1c2Vyc3BhY2UgYW5kIGFkZCBzdXBwb3J0IGZvciByYXcgcG9ydHMgKGNvbnRyb2xsZWQgYnkgc29tZSBmaXJtd2FyZSwgYW5kIGRpcmVjdGx5Ci1tYW5hZ2VkIGJ5IHRoZSBOSUMgZHJpdmVyKS4KJiM0MztBcyBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgdGhlIHBvcnQmIzM5O3MgcHJlc2VuY2UgYW5kIGluZm9ybWF0aW9uIGNhbiBvbmx5CiYjNDM7YmUgcXVlcmllZCwgYW5kIGl0JiMzOTtzIG5vdCBwb3NzaWJsZSB0byBjaGFuZ2UgYW55IG9mIHRoZSBwb3J0JiMzOTtzIHNldHRpbmdzIG9yIHNlbGVjdAomIzQzO3doaWNoIG9uZSBzaG91bGQgYmUgdXNlZC4KIAogQW5vdGhlciBwYXJhbGxlbCB0YXNrIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBNSUkgbXV4aW5nIGZyYW1ld29yayB0byBhbGxvdyB0aGUKLWNvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZXIgbXVsdGktcG9ydCBzZXR1cHMuCiYjNDM7Y29udHJvbCBvZiBub24tUEhZIGRyaXZlbiBtdWx0aS1wb3J0IHNldHVwcy4KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMDBlN2IyNmUwYTIzZmEuLmQzMzg4MWVjMWY2MjU1IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUwomIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSUwpAQCAtMTg3OTIsNiAmIzQzOzE4NzkyLDcgQEAgRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ldGhlcm5ldC1jb25uZWN0b3IueWFtbAogRjoJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdAogRjoJZHJpdmVycy9uZXQvcGh5L3BoeV9wb3J0LmMKIEY6CWluY2x1ZGUvbGludXgvcGh5X3BvcnQuaAomIzQzO0Y6CW5ldC9ldGh0b29sL3BvcnQuYwogSzoJc3RydWN0XHMmIzQzO3BoeV9wb3J0fHBoeV9wb3J0XwogCiBORVRXT1JLSU5HIFtHRU5FUkFMXQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaAppbmRleCA0MjEwODhlNmY2ZThmMS4uZWMzZDM5YTBhZTA2YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oCkBAIC02Niw1ICYjNDM7NjYsNyBAQCB2b2lkIHBoeV9jYXBzX21lZGl1bV9nZXRfc3VwcG9ydGVkKHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCwKIAkJCQkgICBlbnVtIGV0aHRvb2xfbGlua19tZWRpdW0gbWVkaXVtLAogCQkJCSAgIGludCBsYW5lcyk7CiB1MzIgcGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpOwomIzQzO3ZvaWQgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyh1bnNpZ25lZCBsb25nICp0bywgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSwKJiM0MzsJCQkJICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTsKIAogI2VuZGlmIC8qIF9fUEhZX0NBUFNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuYwppbmRleCA5NDJkNDMxOTE1NjFlMi4uNTU4ZTRkZjRkNjNjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jCkBAIC00NDUsMyAmIzQzOzQ0NSwyOSBAQCB1MzIgcGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpCiAJcmV0dXJuIG1lZGl1bXM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKCkgLSBGaWx0ZXIgbGlua21vZGVzIHdpdGggYW4gaW50ZXJmYWNlIGxpc3QKJiM0MzsgKiBAdG86IFN0b3JlcyB0aGUgZmlsdGVyZWQgbGlua21vZGVzCiYjNDM7ICogQGZyb206IExpbmttb2RlcyB0byBmaWx0ZXIKJiM0MzsgKiBAaW50ZXJmYWNlczogQml0ZmllbGQgb2YgcGh5X2ludGVyZmFjZV90IHRoYXQgd2UgdXNlIGZvciBmaWx0ZXJpbmcKJiM0MzsgKgomIzQzOyAqIEZpbHRlciB0aGUgcHJvdmlkZWQgbGlua21vZGVzLCBvbmx5IHRvIGtlZXAgdGhlIG9uZXMgd2UgY2FuIHBvc3NpYmx5IGFjaGlldmUKJiM0MzsgKiB3aGVuIHVzaW5nIGFueSBvZiB0aGUgcHJvdmlkZWQgTUlJIGludGVyZmFjZXMuCiYjNDM7ICovCiYjNDM7dm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLAomIzQzOwkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sCiYjNDM7CQkJCSAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaW50ZXJmYWNlcykKJiM0Mzt7CiYjNDM7CV9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKGlmYWNlc19zdXBwb3J0ZWQpID0ge307CiYjNDM7CXVuc2lnbmVkIGludCBpZmFjZXNfY2FwcyA9IDA7CiYjNDM7CXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX3NldF9iaXQoaW50ZXJmYWNlLCBpbnRlcmZhY2VzLCBQSFlfSU5URVJGQUNFX01PREVfTUFYKQomIzQzOwkJaWZhY2VzX2NhcHMgfD0gcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UoaW50ZXJmYWNlKTsKJiM0MzsKJiM0MzsJcGh5X2NhcHNfbGlua21vZGVzKGlmYWNlc19jYXBzLCBpZmFjZXNfc3VwcG9ydGVkKTsKJiM0MzsKJiM0MzsJbGlua21vZGVfYW5kKHRvLCBmcm9tLCBpZmFjZXNfc3VwcG9ydGVkKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCAwNjE1MjI4NDU5ZWY0Mi4uZDUyNTE1ZTdlMzAzMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMTQ5MCwxMSAmIzQzOzE0OTAsMjIgQEAgc3RhdGljIGludCBwaHlfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQogewogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LSZndDthdHRhY2hlZF9kZXY7CiYjNDM7CWludCByZXQ7CiAKLQlpZiAoZGV2KQotCQlyZXR1cm4gcGh5X2xpbmtfdG9wb19hZGRfcGh5KGRldiwgcGh5LCBQSFlfVVBTVFJFQU1fUEhZLCBwaHlkZXYpOwomIzQzOwlwaHlkZXYtJmd0O2hhc19zZnBfbW9kX3BoeSA9IHRydWU7CiYjNDM7CXBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIHBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydCk7CiAKLQlyZXR1cm4gMDsKJiM0MzsJLyogSWYgd2UgYXJlbiYjMzk7dCBhdHRhY2hlZCB0byBhIG5ldGRldiwgd2UgY2FuJiMzOTt0IGFkZCB0aGUgU0ZQIFBIWSB0byBpdHMKJiM0MzsJICogdG9wb2xvZ3kuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWRldikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlwaHlkZXYtJmd0O2hhc19zZnBfbW9kX3BoeSA9IGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTE1MTIsOCAmIzQzOzE1MjMsMTIgQEAgc3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSkKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2OwogCiYjNDM7CXBoeWRldi0mZ3Q7aGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7CiYjNDM7CiAJaWYgKGRldikKIAkJcGh5X2xpbmtfdG9wb19kZWxfcGh5KGRldiwgcGh5KTsKJiM0MzsKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgTlVMTCk7CiB9CiAKIC8qKgpAQCAtMTYxNyw2ICYjNDM7MTYzMiw3NyBAQCBzdGF0aWMgdm9pZCBwaHlfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSkKIAkJcG9ydC0mZ3Q7b3BzLSZndDtsaW5rX2Rvd24ocG9ydCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBoeV9hZGRfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzOwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwkvKiBDcmVhdGUgbW9kIHBvcnQgKi8KJiM0MzsJcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7CiYjNDM7CWlmICghcG9ydCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwb3J0LSZndDthY3RpdmUgPSB0cnVlOwomIzQzOwomIzQzOwljYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwaHlkZXYtJmd0O3NmcF9idXMpOwomIzQzOwomIzQzOwlwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHBvcnQtJmd0O3N1cHBvcnRlZCwgY2Fwcy0mZ3Q7bGlua19tb2RlcywKJiM0MzsJCQkJCXBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydC0mZ3Q7aW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2F0dGFjaGVkX2RldikgewomIzQzOwkJcmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiwgcG9ydCk7CiYjNDM7CQlpZiAocmV0KSB7CiYjNDM7CQkJcGh5X3BvcnRfZGVzdHJveShwb3J0KTsKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIHdlIGRvbiYjMzk7dCB1c2UgcGh5X2FkZF9wb3J0KCkgaGVyZSBhcyB0aGUgbW9kdWxlIHBvcnQgaXNuJiMzOTt0IGEgZGlyZWN0CiYjNDM7CSAqIGludGVyZmFjZSBmcm9tIHRoZSBQSFksIGJ1dCByYXRoZXIgYW4gZXh0ZW5zaW9uIHRvIHRoZSBzZnAtYnVzLCB0aGF0CiYjNDM7CSAqIGlzIGFscmVhZHkgcmVwcmVzZW50ZWQgYnkgaXRzIG93biBwaHlfcG9ydAomIzQzOwkgKi8KJiM0MzsJcGh5ZGV2LSZndDttb2RfcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXBvcnQtJmd0O3Vwc3RyZWFtX3BvcnQgPSBwaHlkZXYtJmd0O3NmcF9jYWdlX3BvcnQtJmd0O2lkOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5X2RlbF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWlmICghcGh5ZGV2LSZndDttb2RfcG9ydCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2KQomIzQzOwkJcGh5X2xpbmtfdG9wb19kZWxfcG9ydChwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiwgcGh5ZGV2LSZndDttb2RfcG9ydCk7CiYjNDM7CiYjNDM7CXBoeV9wb3J0X2Rlc3Ryb3kocGh5ZGV2LSZndDttb2RfcG9ydCk7CiYjNDM7CXBoeWRldi0mZ3Q7bW9kX3BvcnQgPSBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBoeV9zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtOwomIzQzOwomIzQzOwkvKiBJZiB0aGVyZSYjMzk7cyBhIGRvd25zdHJlYW0gU0ZQIG1vZHVsZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGNvbnRhaW4gYSBQSFkKJiM0MzsJICogZGV2aWNlLCBsZXQmIzM5O3MgY3JlYXRlIGEgcGh5X3BvcnQgdG8gcmVwcmVzZW50IHRoYXQgbW9kdWxlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFwaHlkZXYtJmd0O2hhc19zZnBfbW9kX3BoeSkKJiM0MzsJCXJldHVybiBwaHlfYWRkX3NmcF9tb2RfcG9ydChwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5X3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTsKJiM0MzsKJiM0MzsJLyogQ2FsbGVkIHVwb24gbW9kdWxlIHJlbW92YWwgb3IgdXBzdHJlYW0gcmVtb3ZhbCAqLwomIzQzOwlpZiAoIXBoeWRldi0mZ3Q7aGFzX3NmcF9tb2RfcGh5KQomIzQzOwkJcGh5X2RlbF9zZnBfbW9kX3BvcnQocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7CiAJLmF0dGFjaCA9IHBoeV9zZnBfYXR0YWNoLAogCS5kZXRhY2ggPSBwaHlfc2ZwX2RldGFjaCwKQEAgLTE2MjYsNiAmIzQzOzE3MTIsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7CiAJLmxpbmtfZG93biA9IHBoeV9zZnBfbGlua19kb3duLAogCS5jb25uZWN0X3BoeSA9IHBoeV9zZnBfY29ubmVjdF9waHksCiAJLmRpc2Nvbm5lY3RfcGh5ID0gcGh5X3NmcF9kaXNjb25uZWN0X3BoeSwKJiM0MzsJLm1vZHVsZV9zdGFydCA9IHBoeV9zZnBfbW9kdWxlX3N0YXJ0LAomIzQzOwkubW9kdWxlX3N0b3AgPSBwaHlfc2ZwX21vZHVsZV9zdG9wLAogfTsKIAogc3RhdGljIGludCBwaHlfYWRkX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KQpAQCAtMTY3MywxMyAmIzQzOzE3NjEsMTMgQEAgc3RhdGljIHZvaWQgcGh5X2RlbF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKIAlwaHlkZXYtJmd0O25fcG9ydHMtLTsKIH0KIAotc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9wb3J0ICpwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpOwogCWludCByZXQ7CiAKIAlpZiAoIXBvcnQpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlwb3J0LSZndDtwYXJlbnRfdHlwZSA9IFBIWV9QT1JUX1BIWTsKIAlwb3J0LSZndDtwaHkgPSBwaHlkZXY7CkBAIC0xNjk0LDEwICYjNDM7MTc4MiwxMiBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCSAqIHdoZW4gYXR0YWNoaW5nIHRoZSBwb3J0IHRvIHRoZSBwaHlkZXYuCiAJICovCiAJcmV0ID0gcGh5X2FkZF9wb3J0KHBoeWRldiwgcG9ydCk7Ci0JaWYgKHJldCkKJiM0MzsJaWYgKHJldCkgewogCQlwaHlfcG9ydF9kZXN0cm95KHBvcnQpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKJiM0MzsJfQogCi0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIHBvcnQ7CiB9CiAKIC8qKgpAQCAtMTcwNiwyNSAmIzQzOzE3OTYsNDkgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKICAqLwogc3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IE5VTEw7CiAJc3RydWN0IHNmcF9idXMgKmJ1czsKLQlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHJldDsKIAotCWlmIChwaHlkZXYtJmd0O21kaW8uZGV2LmZ3bm9kZSkgewotCQlidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi0mZ3Q7bWRpby5kZXYuZndub2RlKTsKLQkJaWYgKElTX0VSUihidXMpKQotCQkJcmV0dXJuIFBUUl9FUlIoYnVzKTsKJiM0MzsJaWYgKCFwaHlkZXYtJmd0O21kaW8uZGV2LmZ3bm9kZSkKJiM0MzsJCXJldHVybiAwOwogCi0JCXBoeWRldi0mZ3Q7c2ZwX2J1cyA9IGJ1czsKJiM0MzsJYnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtJmd0O21kaW8uZGV2LmZ3bm9kZSk7CiYjNDM7CWlmIChJU19FUlIoYnVzKSkKJiM0MzsJCXJldHVybiBQVFJfRVJSKGJ1cyk7CiAKLQkJcmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsICZhbXA7c2ZwX3BoeWRldl9vcHMpOwotCQlzZnBfYnVzX3B1dChidXMpOwomIzQzOwlwaHlkZXYtJmd0O3NmcF9idXMgPSBidXM7CiAKLQkJaWYgKHJldCkKLQkJCXBoeWRldi0mZ3Q7c2ZwX2J1cyA9IE5VTEw7CiYjNDM7CWlmIChidXMpIHsKJiM0MzsJCXBvcnQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTsKJiM0MzsJCWlmIChJU19FUlIocG9ydCkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHBvcnQpOwomIzQzOwkJCXBvcnQgPSBOVUxMOwomIzQzOwkJCWdvdG8gb3V0X3NmcDsKJiM0MzsJCX0KIAl9CiAKLQlpZiAoIXJldCAmYW1wOyZhbXA7IHBoeWRldi0mZ3Q7c2ZwX2J1cykKLQkJcmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7CiYjNDM7CXJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCAmYW1wO3NmcF9waHlkZXZfb3BzKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0X3BvcnQ7CiYjNDM7CiYjNDM7CS8qIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgZ3JhYnMgYSByZWYgdG8gdGhlIHNmcCBidXMgb24gc3VjY2VzcywgaXQmIzM5O3MKJiM0MzsJICogc2FmZSB0byByZWxlYXNlIGl0IG5vdy4KJiM0MzsJICovCiYjNDM7CXNmcF9idXNfcHV0KGJ1cyk7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7CiYjNDM7b3V0X3BvcnQ6CiYjNDM7CWlmIChwb3J0KSB7CiYjNDM7CQlwaHlfZGVsX3BvcnQocGh5ZGV2LCBwb3J0KTsKJiM0MzsJCXBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7CiYjNDM7CX0KJiM0MztvdXRfc2ZwOgomIzQzOwlzZnBfYnVzX3B1dChidXMpOwomIzQzOwlwaHlkZXYtJmd0O3NmcF9idXMgPSBOVUxMOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MTUsNiAmIzQzOzE5MjksMTIgQEAgaW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJCWVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BoeShkZXYsIHBoeWRldiwgUEhZX1VQU1RSRUFNX01BQywgZGV2KTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7CiYjNDM7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDttb2RfcG9ydCkgewomIzQzOwkJCWVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoZGV2LCBwaHlkZXYtJmd0O21vZF9wb3J0KTsKJiM0MzsJCQlpZiAoZXJyKQomIzQzOwkJCQlnb3RvIGVycm9yOwomIzQzOwkJfQogCX0KIAogCS8qIFNvbWUgRXRoZXJuZXQgZHJpdmVycyB0cnkgdG8gY29ubmVjdCB0byBhIFBIWSBkZXZpY2UgYmVmb3JlCkBAIC0xOTUxLDYgJiM0MzsyMDcxLDggQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJCXBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LSZndDtwaHlkZXYgPSBOVUxMOwogCQlwaHlkZXYtJmd0O2F0dGFjaGVkX2RldiA9IE5VTEw7CiAJCXBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeWRldik7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDttb2RfcG9ydCkKJiM0MzsJCQlwaHlfbGlua190b3BvX2RlbF9wb3J0KGRldiwgcGh5ZGV2LSZndDttb2RfcG9ydCk7CiAJfQogCiAJcGh5ZGV2LSZndDtwaHlfbGlua19jaGFuZ2UgPSBOVUxMOwpAQCAtMzU3OSw2ICYjNDM7MzcwMSwyOCBAQCBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfc2ZwX3BvcnQpOwogCiYjNDM7LyoqCiYjNDM7ICogcGh5X3NldF91cHN0cmVhbV9wb3J0KCkgLSBTZXRzIHRoZSBwaHlfcG9ydCBjb250cm9sbGluZyB0aGUgTUlJIHRoaXMgUEhZIGlzCiYjNDM7ICoJCQkgICAgIGF0dGFjaGVkIHRvLgomIzQzOyAqIEBwaHlkZXY6IHBvaW50ZXIgdG8gdGhlIFBIWSBkZXZpY2Ugd2Ugc2V0IHRoZSB1cHN0cmVhbSBvZi4KJiM0MzsgKiBAcG9ydDogVGhlIHBoeV9wb3J0IHVwc3RyZWFtIG9mIHRoaXMgUEhZLCBjYW4gYmUgTlVMTC4KJiM0MzsgKi8KJiM0Mzt2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7dXBzdHJlYW1fcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXBoeV9mb3JfZWFjaF9wb3J0KHBoeWRldiwgbG9jYWxfcG9ydCkKJiM0MzsJCWlmIChwb3J0KQomIzQzOwkJCWxvY2FsX3BvcnQtJmd0O3Vwc3RyZWFtX3BvcnQgPSBwb3J0LSZndDtpZDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlsb2NhbF9wb3J0LSZndDt1cHN0cmVhbV9wb3J0ID0gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X3NldF91cHN0cmVhbV9wb3J0KTsKJiM0MzsKIC8qKgogICogZndub2RlX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGZ3bm9kZSwgZmluZCB0aGUgbWRpb19kZXZpY2UKICAqIEBmd25vZGU6IHBvaW50ZXIgdG8gdGhlIG1kaW9fZGV2aWNlJiMzOTtzIGZ3bm9kZQpAQCAtMzgxNyw2ICYjNDM7Mzk2MSw3IEBAIHN0YXRpYyBpbnQgcGh5X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAlzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtJmd0O3NmcF9idXMpOwogCXBoeWRldi0mZ3Q7c2ZwX2J1cyA9IE5VTEw7CiYjNDM7CXBoeWRldi0mZ3Q7c2ZwX2NhZ2VfcG9ydCA9IE5VTEw7CiAKIAlwaHlfY2xlYW51cF9wb3J0cyhwaHlkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jCmluZGV4IDQxMzRkZTdhZTMxM2QyLi41ZTEzNWFiNjM2YzBiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMKQEAgLTcsNiAmIzQzOzcsNyBAQAogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9waHlfbGlua190b3BvbG9neS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHlfcG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwpAQCAtMjMsMTcgJiM0MzsyNCw4MSBAQCBzdGF0aWMgaW50IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXhhX2luaXRfZmxhZ3MoJmFtcDt0b3BvLSZndDtwaHlzLCBYQV9GTEFHU19BTExPQzEpOwogCXRvcG8tJmd0O25leHRfcGh5X2luZGV4ID0gMTsKIAomIzQzOwl4YV9pbml0X2ZsYWdzKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIFhBX0ZMQUdTX0FMTE9DMSk7CiYjNDM7CXRvcG8tJmd0O25leHRfcG9ydF9pbmRleCA9IDE7CiYjNDM7CiAJZGV2LSZndDtsaW5rX3RvcG8gPSB0b3BvOwogCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICpwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGRldi0mZ3Q7bGlua190b3BvKQomIzQzOwkJcmV0dXJuIGRldi0mZ3Q7bGlua190b3BvOwomIzQzOwomIzQzOwkvKiBUaGUgdG9wb2xvZ3kgaXMgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIHdlIGFkZCBhbiBvYmplY3QgdG8gaXQuCiYjNDM7CSAqIEl0IGlzIGZyZWVkIGFsb25nc2lkZSB0aGUgbmV0ZGV2LiBJdCBjYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlCiYjNDM7CSAqIGNvbnRleHRzOgomIzQzOwkgKiAgLSBJdCBjYW4gYmUgY2FsbGVkIGZyb20gLnByb2JlKCkgOiBObyBydG5sLCBubyBuZXRkZXZfbG9jawomIzQzOwkgKiAgLSAubmRvX29wZW4oKSA6IHJ0bmwgYW5kIHBvc3NpYmx5IG5ldGRldl9sb2NrCiYjNDM7CSAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdAomIzQzOwkgKgomIzQzOwkgKiAgSG93ZXZlciwgd2UgY2FuJiMzOTt0IHJlYWxseSBoYXZlIHJhY2VzIDoKJiM0MzsJICogIC0gSWYgd2UgaGF2ZSBhIFBIWSwgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkgd2lsbCBhbHdheXMgcnVuIGZpcnN0CiYjNDM7CSAqICAgIGFuZCB0cmlnZ2VyIHRoZSBhbGxvYy4gT25seSB0aGVuIHRoZSBwb3J0cyBjYW4gYmUgYWRkZWQgdGhyb3VnaAomIzQzOwkgKiAgICBwaHlsaWIgb2Ygc2ZwLgomIzQzOwkgKiAgLSBJZiB3ZSBkb24mIzM5O3QsIHRoZSBTRlAgcG9ydCBmb3IgdGhlIGNhZ2UgaXMgcmVnaXN0ZXJlZCBmaXJzdCwgYW5kCiYjNDM7CSAqICAgIG9ubHkgdGhlbiBvdGhlciBwb3J0cy9QSFlzIGNhbiBiZSByZWdpc3RlcmVkLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwomIzQzOwlyZXR1cm4gZGV2LSZndDtsaW5rX3RvcG87CiYjNDM7fQomIzQzOwomIzQzO2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJdG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7CiYjNDM7CWlmIChJU19FUlIodG9wbykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUih0b3BvKTsKJiM0MzsKJiM0MzsJLyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovCiYjNDM7CWlmIChwb3J0LSZndDtpZCkKJiM0MzsJCXJldCA9IHhhX2luc2VydCgmYW1wO3RvcG8tJmd0O3BvcnRzLCBwb3J0LSZndDtpZCwgcG9ydCwgR0ZQX0tFUk5FTCk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IHhhX2FsbG9jX2N5Y2xpYygmYW1wO3RvcG8tJmd0O3BvcnRzLCAmYW1wO3BvcnQtJmd0O2lkLCBwb3J0LAomIzQzOwkJCQkgICAgICB4YV9saW1pdF8zMmIsICZhbXA7dG9wby0mZ3Q7bmV4dF9wb3J0X2luZGV4LAomIzQzOwkJCQkgICAgICBHRlBfS0VSTkVMKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19hZGRfcG9ydCk7CiYjNDM7CiYjNDM7dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi0mZ3Q7bGlua190b3BvOwomIzQzOwomIzQzOwlpZiAoIXRvcG8pCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIHBvcnQtJmd0O2lkKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19kZWxfcG9ydCk7CiYjNDM7CiBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksCiAJCQkgIGVudW0gcGh5X3Vwc3RyZWFtIHVwdCwgdm9pZCAqdXBzdHJlYW0pCiB7Ci0Jc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LSZndDtsaW5rX3RvcG87CiYjNDM7CXN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbzsKIAlzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKIAlpbnQgcmV0OwogCiAJLyogZXRodG9vbCBvcHMgbWF5IHJ1biB3aXRob3V0IHJ0bmxfbG9jaywgYW5kIHJ0bmxfbG9jayBpcyB3aGF0CkBAIC00NSwxMyAmIzQzOzExMCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoV0FSTl9PTl9PTkNFKG5ldGRldl9uZWVkX29wc19sb2NrKGRldikpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAoIXRvcG8pIHsKLQkJcmV0ID0gbmV0ZGV2X2FsbG9jX3BoeV9saW5rX3RvcG9sb2d5KGRldik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXRvcG8gPSBkZXYtJmd0O2xpbmtfdG9wbzsKLQl9CiYjNDM7CXRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpOwomIzQzOwlpZiAoSVNfRVJSKHRvcG8pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIodG9wbyk7CiAKIAlwZG4gPSBremFsbG9jX29iaigqcGRuKTsKIAlpZiAoIXBkbikKQEAgLTg2LDggJiM0MzsxNDcsMjAgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIGVycjsKIAomIzQzOwkvKiBBZGQgYWxsIHRoZSBQSFkmIzM5O3MgcG9ydHMgdG8gdGhlIHRvcG9sb2d5ICovCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwaHktJmd0O3BvcnRzLCBoZWFkKSB7CiYjNDM7CQlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KGRldiwgcG9ydCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZGVsX3BvcnRzOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIDA7CiAKJiM0MztkZWxfcG9ydHM6CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShwb3J0LCAmYW1wO3BoeS0mZ3Q7cG9ydHMsIGhlYWQpCiYjNDM7CQlwaHlfbGlua190b3BvX2RlbF9wb3J0KGRldiwgcG9ydCk7CiYjNDM7CiYjNDM7CXhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cGh5cywgcGh5LSZndDtwaHlpbmRleCk7CiBlcnI6CiAJa2ZyZWUocGRuKTsKIAlyZXR1cm4gcmV0OwpAQCAtOTksMTAgJiM0MzsxNzIsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHsKIAlzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtJmd0O2xpbmtfdG9wbzsKIAlzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKIAogCWlmICghdG9wbykKIAkJcmV0dXJuOwogCiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJmFtcDtwaHktJmd0O3BvcnRzLCBoZWFkKQomIzQzOwkJcGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpOwomIzQzOwogCXBkbiA9IHhhX2VyYXNlKCZhbXA7dG9wby0mZ3Q7cGh5cywgcGh5LSZndDtwaHlpbmRleCk7CiAKIAkvKiBXZSBkZWxldGUgdGhlIFBIWSBmcm9tIHRoZSB0b3BvbG9neSwgaG93ZXZlciB3ZSBkb24mIzM5O3QgcmUtc2V0IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKaW5kZXggNTlkZmUzNWFmYTU0ZmMuLjVjZmJmY2MxMDc5YWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKQEAgLTE0LDYgJiM0MzsxNCw4IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvb2ZfbWRpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeV9maXhlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHlfbGlua190b3BvbG9neS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHlfcG9ydC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeWxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9ydG5ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcGlubG9jay5oJmd0OwpAQCAtOTMsNiAmIzQzOzk1LDggQEAgc3RydWN0IHBoeWxpbmsgewogCURFQ0xBUkVfUEhZX0lOVEVSRkFDRV9NQVNLKHNmcF9pbnRlcmZhY2VzKTsKIAlfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzZnBfc3VwcG9ydCk7CiAJdTggc2ZwX3BvcnQ7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqc2ZwX2NhZ2VfcG9ydDsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICptb2RfcG9ydDsKIAogCXN0cnVjdCBlZWVfY29uZmlnIGVlZV9jZmc7CiAKQEAgLTE3NjQsNiAmIzQzOzE3NjgsNTEgQEAgc3RhdGljIHZvaWQgcGh5bGlua19maXhlZF9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzOwogCiYjNDM7c3RhdGljIGludCBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmICghcGwtJmd0O25ldGRldiB8fCAhcGwtJmd0O3NmcF9idXMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7CiYjNDM7CWlmICghcG9ydCkKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwomIzQzOwlwb3J0LSZndDtpc19zZnAgPSB0cnVlOwomIzQzOwlwb3J0LSZndDtpc19taWkgPSB0cnVlOwomIzQzOwlwb3J0LSZndDthY3RpdmUgPSB0cnVlOwomIzQzOwomIzQzOwlwaHlfaW50ZXJmYWNlX2FuZChwb3J0LSZndDtpbnRlcmZhY2VzLCBwbC0mZ3Q7Y29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcywKJiM0MzsJCQkgIHBoeWxpbmtfc2ZwX2ludGVyZmFjZXMpOwomIzQzOwlwaHlfcG9ydF91cGRhdGVfc3VwcG9ydGVkKHBvcnQpOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLSZndDtuZXRkZXYsIHBvcnQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfZGVzdHJveV9wb3J0OwomIzQzOwomIzQzOwlwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO291dF9kZXN0cm95X3BvcnQ6CiYjNDM7CXBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7CiYjNDM7CXBsLSZndDtzZnBfY2FnZV9wb3J0ID0gTlVMTDsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKQomIzQzO3sKJiM0MzsJaWYgKHBsLSZndDtuZXRkZXYgJmFtcDsmYW1wOyBwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydCkKJiM0MzsJCXBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtJmd0O25ldGRldiwgcGwtJmd0O3NmcF9jYWdlX3BvcnQpOwomIzQzOwomIzQzOwlpZiAocGwtJmd0O3NmcF9jYWdlX3BvcnQpCiYjNDM7CQlwaHlfcG9ydF9kZXN0cm95KHBsLSZndDtzZnBfY2FnZV9wb3J0KTsKJiM0MzsKJiM0MzsJcGwtJmd0O3NmcF9jYWdlX3BvcnQgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLAogCQkJCWNvbnN0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpCiB7CkBAIC0xNzgxLDkgJiM0MzsxODMwLDE4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLAogCiAJcGwtJmd0O3NmcF9idXMgPSBidXM7CiAKJiM0MzsJcmV0ID0gcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydChwbCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCXNmcF9idXNfcHV0KGJ1cyk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiAJcmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwbCwgJmFtcDtzZnBfcGh5bGlua19vcHMpOwogCXNmcF9idXNfcHV0KGJ1cyk7CiAKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHBsKTsKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTQ1LDYgJiM0MzsyMDAzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpOwogdm9pZCBwaHlsaW5rX2Rlc3Ryb3koc3RydWN0IHBoeWxpbmsgKnBsKQogewogCXNmcF9idXNfZGVsX3Vwc3RyZWFtKHBsLSZndDtzZnBfYnVzKTsKJiM0MzsJcGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpOwogCWlmIChwbC0mZ3Q7bGlua19ncGlvKQogCQlncGlvZF9wdXQocGwtJmd0O2xpbmtfZ3Bpbyk7CiAKQEAgLTM4NzAsMTQgJiM0MzszOTI5LDY3IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9yZW1vdmUodm9pZCAqdXBzdHJlYW0pCiAJcGh5X2ludGVyZmFjZV96ZXJvKHBsLSZndDtzZnBfaW50ZXJmYWNlcyk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzOwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBsLSZndDtzZnBfY2FnZV9wb3J0KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qIENyZWF0ZSBtb2QgcG9ydCAqLwomIzQzOwlwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTsKJiM0MzsJaWYgKCFwb3J0KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBvcnQtJmd0O2FjdGl2ZSA9IHRydWU7CiYjNDM7CiYjNDM7CWNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBsLSZndDtzZnBfYnVzKTsKJiM0MzsKJiM0MzsJcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyhwb3J0LSZndDtzdXBwb3J0ZWQsIGNhcHMtJmd0O2xpbmtfbW9kZXMsCiYjNDM7CQkJCQlwbC0mZ3Q7c2ZwX2NhZ2VfcG9ydC0mZ3Q7aW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CWlmIChwbC0mZ3Q7bmV0ZGV2KSB7CiYjNDM7CQlyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLSZndDtuZXRkZXYsIHBvcnQpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7CiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlwb3J0LSZndDt1cHN0cmVhbV9wb3J0ID0gcGwtJmd0O3NmcF9jYWdlX3BvcnQtJmd0O2lkOwomIzQzOwomIzQzOwlwbC0mZ3Q7bW9kX3BvcnQgPSBwb3J0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbCkKJiM0Mzt7CiYjNDM7CWlmICghcGwtJmd0O21vZF9wb3J0KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAocGwtJmd0O25ldGRldikKJiM0MzsJCXBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtJmd0O25ldGRldiwgcGwtJmd0O21vZF9wb3J0KTsKJiM0MzsKJiM0MzsJcGh5X3BvcnRfZGVzdHJveShwbC0mZ3Q7bW9kX3BvcnQpOwomIzQzOwlwbC0mZ3Q7bW9kX3BvcnQgPSBOVUxMOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKQogewogCXN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtOwomIzQzOwlpbnQgcmV0OwogCiAJLyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RhcnQgdGhlIFBIWSBub3cuICovCiAJaWYgKHBsLSZndDtwaHlkZXYpIHsKIAkJcGh5X3N0YXJ0KHBsLSZndDtwaHlkZXYpOwogCQlyZXR1cm4gMDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydChwbCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiAJfQogCiAJLyogSWYgdGhlIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWSBidXQgd2UgZGlkbiYjMzk7dCBkZXRlY3Qgb25lIHdlCkBAIC0zODg2LDcgJiM0MzszOTk4LDE2IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKQogCWlmICghcGwtJmd0O3NmcF9tYXlfaGF2ZV9waHkpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTsKJiM0MzsJcmV0ID0gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBkZWxfbW9kX3BvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2RlbF9tb2RfcG9ydDoKJiM0MzsJcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pCkBAIC0zODk2LDYgJiM0Mzs0MDE3LDggQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pCiAJLyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi8KIAlpZiAocGwtJmd0O3BoeWRldikKIAkJcGh5X3N0b3AocGwtJmd0O3BoeWRldik7CiYjNDM7CWVsc2UKJiM0MzsJCXBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChwbCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSkKQEAgLTM5NDAsNiAmIzQzOzQwNjMsOCBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQogCXBoeV9pbnRlcmZhY2VfYW5kKHBoeS0mZ3Q7aG9zdF9pbnRlcmZhY2VzLCBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzLAogCQkJICBwbC0mZ3Q7Y29uZmlnLSZndDtzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiAKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGwtJmd0O3NmcF9jYWdlX3BvcnQpOwomIzQzOwogCS8qIERvIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gKi8KIAlyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX3BoeShwbCwgcGh5KTsKIH0KQEAgLTM5NDgsNiAmIzQzOzQwNzMsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwKIAkJCQkgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHVwc3RyZWFtKTsKJiM0MzsJcGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeWRldiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHMgPSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCBiZWZmMWQ2ZmNjN2NkYS4uODI5NmY0ZjU5Y2UzYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtNTgyLDYgJiM0Mzs1ODIsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7CiAgKiBAd29sX2VuYWJsZWQ6IFNldCB0byB0cnVlIGlmIHRoZSBQSFkgb3IgdGhlIGF0dGFjaGVkIE1BQyBoYXZlIFdha2Utb24tTEFOCiAgKiAJCSBlbmFibGVkLgogICogQGlzX2dlbnBoeV9kcml2ZW46IFBIWSBpcyBkcml2ZW4gYnkgb25lIG9mIHRoZSBnZW5lcmljIFBIWSBkcml2ZXJzCiYjNDM7ICogQGhhc19zZnBfbW9kX3BoeTogU2V0IHRydWUgaWYgZG93bnN0cmVhbSBTRlAgYnVzJiMzOTtzIG1vZHVsZSBjb250YWlucyBhIFBIWQogICogQHN0YXRlOiBTdGF0ZSBvZiB0aGUgUEhZIGZvciBtYW5hZ2VtZW50IHB1cnBvc2VzCiAgKiBAZGV2X2ZsYWdzOiBEZXZpY2Utc3BlY2lmaWMgZmxhZ3MgdXNlZCBieSB0aGUgUEhZIGRyaXZlci4KICAqCkBAIC01OTQsNiAmIzQzOzU5NSw5IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHsKICAqIEBwaHlsaW5rOiBQb2ludGVyIHRvIHBoeWxpbmsgaW5zdGFuY2UgZm9yIHRoaXMgUEhZCiAgKiBAc2ZwX2J1c19hdHRhY2hlZDogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFNGUCBidXMgaGFzIGJlZW4gYXR0YWNoZWQKICAqIEBzZnBfYnVzOiBTRlAgYnVzIGF0dGFjaGVkIHRvIHRoaXMgUEhZJiMzOTtzIGZpYmVyIHBvcnQKJiM0MzsgKiBAc2ZwX2NhZ2VfcG9ydDogVGhlIHBoeV9wb3J0IGNvbm5lY3RlZCB0byB0aGUgZG93bnN0cmVhbSBTRlAgY2FnZQomIzQzOyAqIEBtb2RfcG9ydDogcGh5X3BvcnQgcmVwcmVzZW50aW5nIHRoZSBTRlAgbW9kdWxlLCBpZiBpdCBpcyBwaHktbGVzcwomIzQzOyAqIEB1cHN0cmVhbV9wb3J0OiBwaHlfcG9ydCB0aGlzIFBIWSYjMzk7cyBNSUkgYXR0YWNoZXMgdG8sIGlmIGFueQogICogQGF0dGFjaGVkX2RldjogVGhlIGF0dGFjaGVkIGVuZXQgZHJpdmVyJiMzOTtzIGRldmljZSBpbnN0YW5jZSBwdHIKICAqIEBhZGp1c3RfbGluazogQ2FsbGJhY2sgZm9yIHRoZSBlbmV0IGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBjaGFuZ2VzOiBpbiB0aGUKICAqICAgICAgICAgICAgICAgbGluayBzdGF0ZS4KQEAgLTcwNiw2ICYjNDM7NzEwLDcgQEAgc3RydWN0IHBoeV9kZXZpY2UgewogCXVuc2lnbmVkIGlycV9yZXJ1bjoxOwogCiAJdW5zaWduZWQgZGVmYXVsdF90aW1lc3RhbXA6MTsKJiM0MzsJdW5zaWduZWQgaGFzX3NmcF9tb2RfcGh5OjE7CiAKIAlpbnQgcmF0ZV9tYXRjaGluZzsKIApAQCAtNzg1LDYgJiM0Mzs3OTAsOSBAQCBzdHJ1Y3QgcGh5X2RldmljZSB7CiAJLyogVGhpcyBtYXkgYmUgbW9kaWZpZWQgdW5kZXIgdGhlIHJ0bmwgbG9jayAqLwogCWJvb2wgc2ZwX2J1c19hdHRhY2hlZDsKIAlzdHJ1Y3Qgc2ZwX2J1cyAqc2ZwX2J1czsKJiM0MzsJc3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0OwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0OwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnVwc3RyZWFtX3BvcnQ7CiAJc3RydWN0IHBoeWxpbmsgKnBoeWxpbms7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmF0dGFjaGVkX2RldjsKIAlzdHJ1Y3QgbWlpX3RpbWVzdGFtcGVyICptaWlfdHM7CkBAIC0yNDY1LDYgJiM0MzsyNDczLDggQEAgaW50IF9fcGh5X2h3dHN0YW1wX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCiBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiAKJiM0Mzt2b2lkIHBoeV9zZXRfdXBzdHJlYW1fcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpOwomIzQzOwogLyoqCiAgKiBwaHlfbW9kdWxlX2RyaXZlcigpIC0gSGVscGVyIG1hY3JvIGZvciByZWdpc3RlcmluZyBQSFkgZHJpdmVycwogICogQF9fcGh5X2RyaXZlcnM6IGFycmF5IG9mIFBIWSBkcml2ZXJzIHRvIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmgKaW5kZXggOTU1NzVmNjhkNWJjNzEuLjk1NjI5MTEyMjA0ZWE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oCkBAIC0xMywxNCAmIzQzOzEzLDE5IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogCiBzdHJ1Y3QgeGFycmF5Owogc3RydWN0IHBoeV9kZXZpY2U7CiYjNDM7c3RydWN0IHBoeV9wb3J0Owogc3RydWN0IHNmcF9idXM7CiAKIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSB7CiAJc3RydWN0IHhhcnJheSBwaHlzOwogCXUzMiBuZXh0X3BoeV9pbmRleDsKJiM0MzsKJiM0MzsJc3RydWN0IHhhcnJheSBwb3J0czsKJiM0MzsJdTMyIG5leHRfcG9ydF9pbmRleDsKIH07CiAKIHN0cnVjdCBwaHlfZGV2aWNlX25vZGUgewpAQCAtNDgsNiAmIzQzOzUzLDkgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCiB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTsKIAomIzQzO2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7CiYjNDM7dm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7CiYjNDM7CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfZGV2aWNlICoKIHBoeV9saW5rX3RvcG9fZ2V0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcGh5aW5kZXgpCiB7CkBAIC02NCw2ICYjNDM7NzIsMjAgQEAgcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleCkKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9wb3J0ICoKJiM0MztwaHlfbGlua190b3BvX2dldF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwb3J0X2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LSZndDtsaW5rX3RvcG87CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CWlmICghdG9wbykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwkvKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwgd2hpbGUgaGFuZGxpbmcgdGhlIHBoeV9wb3J0ICovCiYjNDM7CXJldHVybiB4YV9sb2FkKCZhbXA7dG9wby0mZ3Q7cG9ydHMsIHBvcnRfaWQpOwomIzQzO30KJiM0MzsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSwKQEAgLTc3LDExICYjNDM7OTksMjggQEAgc3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogewogfQogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJICBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpCiYjNDM7ewomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKgogcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleCkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqCiYjNDM7cGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KICNlbmRpZgogCiAjZW5kaWYgLyogX19QSFlfTElOS19UT1BPTE9HWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmgKaW5kZXggMGVmMGY1Y2U0NzA5MjYuLmUzYTQxY2VkZWJkY2ZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oCkBAIC0zNiw5ICYjNDM7MzYsMTIgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7CiAvKioKICAqIHN0cnVjdCBwaHlfcG9ydCAtIEEgcmVwcmVzZW50YXRpb24gb2YgYSBuZXR3b3JrIGRldmljZSBwaHlzaWNhbCBpbnRlcmZhY2UKICAqCiYjNDM7ICogQGlkOiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHBvcnQgd2l0aGluIHRoZSB0b3BvbG9neQogICogQGhlYWQ6IFVzZWQgYnkgdGhlIHBvcnQmIzM5O3MgcGFyZW50IHRvIGxpc3QgcG9ydHMKICAqIEBwYXJlbnRfdHlwZTogVGhlIHR5cGUgb2YgZGV2aWNlIHRoaXMgcG9ydCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8KICAqIEBwaHk6IElmIHRoZSBwYXJlbnQgaXMgUEhZX1BPUlRfUEhZREVWLCB0aGUgUEhZIGNvbnRyb2xsaW5nIHRoYXQgcG9ydAomIzQzOyAqIEB1cHN0cmVhbV9wb3J0OiBGb3Igbm9uLU1JSSBwb3J0cywgaW5kaWNhdGVzIHRoZSBNSUkgcG9ydCB0aGF0IGZlZWRzIHRoaXMKJiM0MzsgKgkJICAgcG9ydCwgZS5nLiB0aGUgU0ZQIGNhZ2UgcG9ydCBmb3IgYSBTRlAgbW9kdWxlIHBvcnQuCiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlcgogICogQHBhaXJzOiBUaGUgbnVtYmVyIG9mICBwYWlycyB0aGlzIHBvcnQgaGFzLCAwIGlmIG5vdCBhcHBsaWNhYmxlCiAgKiBAbWVkaXVtczogQml0bWFzayBvZiB0aGUgcGh5c2ljYWwgbWVkaXVtcyB0aGlzIHBvcnQgcHJvdmlkZXMgYWNjZXNzIHRvCkBAIC01MiwxMSAmIzQzOzU1LDEzIEBAIHN0cnVjdCBwaHlfcG9ydF9vcHMgewogICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuCiAgKi8KIHN0cnVjdCBwaHlfcG9ydCB7CiYjNDM7CXUzMiBpZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CiAJZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7CiAJdW5pb24gewogCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OwogCX07CiYjNDM7CXUzMiB1cHN0cmVhbV9wb3J0OwogCiAJY29uc3Qgc3RydWN0IHBoeV9wb3J0X29wcyAqb3BzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaAppbmRleCA4MTM0YmFmNzg2MGYzYy4uZjlkODc5NGVhYmMxOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaApAQCAtNzgsNiAmIzQzOzc4LDExIEBAIGVudW0gZXRodG9vbF9wc2VfZXZlbnQgewogCUVUSFRPT0xfUFNFX0VWRU5UX1NXX1BXX0NPTlRST0xfRVJST1IgPSA2NCwKIH07CiAKJiM0MztlbnVtIGV0aHRvb2xfcG9ydF90eXBlIHsKJiM0MzsJRVRIVE9PTF9QT1JUX1RZUEVfTURJLAomIzQzOwlFVEhUT09MX1BPUlRfVFlQRV9TRlAsCiYjNDM7fTsKJiM0MzsKIGVudW0gewogCUVUSFRPT0xfQV9IRUFERVJfVU5TUEVDLAogCUVUSFRPT0xfQV9IRUFERVJfREVWX0lOREVYLApAQCAtODQwLDYgJiM0Mzs4NDUsMTggQEAgZW51bSB7CiAJRVRIVE9PTF9BX01TRV9NQVggPSAoX19FVEhUT09MX0FfTVNFX0NOVCAtIDEpCiB9OwogCiYjNDM7ZW51bSB7CiYjNDM7CUVUSFRPT0xfQV9QT1JUX0hFQURFUiA9IDEsCiYjNDM7CUVUSFRPT0xfQV9QT1JUX0lELAomIzQzOwlFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMsCiYjNDM7CUVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTLAomIzQzOwlFVEhUT09MX0FfUE9SVF9UWVBFLAomIzQzOwlFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JULAomIzQzOwomIzQzOwlfX0VUSFRPT0xfQV9QT1JUX0NOVCwKJiM0MzsJRVRIVE9PTF9BX1BPUlRfTUFYID0gKF9fRVRIVE9PTF9BX1BPUlRfQ05UIC0gMSkKJiM0Mzt9OwomIzQzOwogZW51bSB7CiAJRVRIVE9PTF9NU0dfVVNFUl9OT05FID0gMCwKIAlFVEhUT09MX01TR19TVFJTRVRfR0VUID0gMSwKQEAgLTg5Myw2ICYjNDM7OTEwLDcgQEAgZW51bSB7CiAJRVRIVE9PTF9NU0dfUlNTX0NSRUFURV9BQ1QsCiAJRVRIVE9PTF9NU0dfUlNTX0RFTEVURV9BQ1QsCiAJRVRIVE9PTF9NU0dfTVNFX0dFVCwKJiM0MzsJRVRIVE9PTF9NU0dfUE9SVF9HRVQsCiAKIAlfX0VUSFRPT0xfTVNHX1VTRVJfQ05ULAogCUVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKQpAQCAtOTU0LDYgJiM0Mzs5NzIsNyBAQCBlbnVtIHsKIAlFVEhUT09MX01TR19SU1NfQ1JFQVRFX05URiwKIAlFVEhUT09MX01TR19SU1NfREVMRVRFX05URiwKIAlFVEhUT09MX01TR19NU0VfR0VUX1JFUExZLAomIzQzOwlFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSwKIAogCV9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCwKIAlFVEhUT09MX01TR19LRVJORUxfTUFYID0gKF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCAtIDEpCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IGMxYzFiZTFhNjk2MmZlLi5iMzZjYzVjNDc4MTZhNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExMzE1LDYgJiM0MzsxMTMxNSw3IEBAIHN0YXRpYyB2b2lkIG5ldGRldl9mcmVlX3BoeV9saW5rX3RvcG9sb2d5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUEhZTElCKSAmYW1wOyZhbXA7IHRvcG8pIHsKIAkJeGFfZGVzdHJveSgmYW1wO3RvcG8tJmd0O3BoeXMpOwomIzQzOwkJeGFfZGVzdHJveSgmYW1wO3RvcG8tJmd0O3BvcnRzKTsKIAkJa2ZyZWUodG9wbyk7CiAJCWRldi0mZ3Q7bGlua190b3BvID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9NYWtlZmlsZSBiL25ldC9ldGh0b29sL01ha2VmaWxlCmluZGV4IDYyOWMxMDkxNjY3MGVjLi45YjViMDk2NzAwMDgxMSAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvTWFrZWZpbGUKQEAgLTksNCAmIzQzOzksNCBAQCBldGh0b29sX25sLXkJOj0gbmV0bGluay5vIGJpdHNldC5vIHN0cnNldC5vIGxpbmtpbmZvLm8gbGlua21vZGVzLm8gcnNzLm8gXAogCQkgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcCiAJCSAgIHR1bm5lbHMubyBmZWMubyBlZXByb20ubyBzdGF0cy5vIHBoY192Y2xvY2tzLm8gbW0ubyBcCiAJCSAgIG1vZHVsZS5vIGNtaXNfZndfdXBkYXRlLm8gY21pc19jZGIubyBwc2UtcGQubyBwbGNhLm8gXAotCQkgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vCiYjNDM7CQkgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vIHBvcnQubwpkaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jCmluZGV4IDFhZjM5NWI1NDMzMGUyLi5jMDc2YzA3ZDBhMDgwYyAxMDA2NDQKLS0tIGEvbmV0L2V0aHRvb2wvbmV0bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9ldGh0b29sL25ldGxpbmsuYwpAQCAtMjYsNiAmIzQzOzI2LDggQEAgc3RhdGljIHUzMiBldGhubF9iY2FzdF9zZXE7CiAJCQkgICAgIEVUSFRPT0xfRkxBR19PTUlUX1JFUExZKQogI2RlZmluZSBFVEhUT09MX0ZMQUdTX1NUQVRTIChFVEhUT09MX0ZMQUdTX0JBU0lDIHwgRVRIVE9PTF9GTEFHX1NUQVRTKQogCiYjNDM7Y2hhciBwaHlfaW50ZXJmYWNlX25hbWVzW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdW0VUSF9HU1RSSU5HX0xFTl0gX19yb19hZnRlcl9pbml0OwomIzQzOwogY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtdID0gewogCVtFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWF0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtFVEhUT09MX0FfSEVBREVSX0RFVl9OQU1FXQk9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORywKQEAgLTQzMSw2ICYjNDM7NDMzLDcgQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHsKIAlbRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUXQk9ICZhbXA7ZXRobmxfdHNjb25maWdfcmVxdWVzdF9vcHMsCiAJW0VUSFRPT0xfTVNHX1BIWV9HRVRdCQk9ICZhbXA7ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLAogCVtFVEhUT09MX01TR19NU0VfR0VUXQkJPSAmYW1wO2V0aG5sX21zZV9yZXF1ZXN0X29wcywKJiM0MzsJW0VUSFRPT0xfTVNHX1BPUlRfR0VUXQkJPSAmYW1wO2V0aG5sX3BvcnRfcmVxdWVzdF9vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGV0aG5sX2R1bXBfY3R4ICpldGhubF9kdW1wX2NvbnRleHQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQpAQCAtMTU3Miw2ICYjNDM7MTU3NSwxNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIGV0aHRvb2xfZ2VubF9vcHNbXSA9IHsKIAkJLnBvbGljeSA9IGV0aG5sX21zZV9nZXRfcG9saWN5LAogCQkubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfbXNlX2dldF9wb2xpY3kpIC0gMSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuY21kCT0gRVRIVE9PTF9NU0dfUE9SVF9HRVQsCiYjNDM7CQkuZG9pdAk9IGV0aG5sX2RlZmF1bHRfZG9pdCwKJiM0MzsJCS5zdGFydAk9IGV0aG5sX3BvcnRfZHVtcF9zdGFydCwKJiM0MzsJCS5kdW1waXQJPSBldGhubF9wb3J0X2R1bXBpdCwKJiM0MzsJCS5kb25lCT0gZXRobmxfcG9ydF9kdW1wX2RvbmUsCiYjNDM7CQkucG9saWN5ID0gZXRobmxfcG9ydF9nZXRfcG9saWN5LAomIzQzOwkJLm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX3BvcnRfZ2V0X3BvbGljeSkgLSAxLAomIzQzOwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0gewpAQCAtMTU5NCwxMCAmIzQzOzE2MDYsMjMgQEAgc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBldGh0b29sX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHsKIAogLyogbW9kdWxlIHNldHVwICovCiAKJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgZXRobmxfcGh5X25hbWVzX3BvcHVsYXRlKHZvaWQpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQluYW1lID0gcGh5X21vZGVzKGkpOwomIzQzOwkJc3Ryc2NweShwaHlfaW50ZXJmYWNlX25hbWVzW2ldLCBuYW1lLCBFVEhfR1NUUklOR19MRU4pOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBfX2luaXQgZXRobmxfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKJiM0MzsJZXRobmxfcGh5X25hbWVzX3BvcHVsYXRlKCk7CiYjNDM7CiAJcmV0ID0gZ2VubF9yZWdpc3Rlcl9mYW1pbHkoJmFtcDtldGh0b29sX2dlbmxfZmFtaWx5KTsKIAlpZiAoV0FSTihyZXQgJmx0OyAwLCAmIzM0O2V0aHRvb2w6IGdlbmV0bGluayBmYW1pbHkgcmVnaXN0cmF0aW9uIGZhaWxlZCYjMzQ7KSkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL25ldGxpbmsuaCBiL25ldC9ldGh0b29sL25ldGxpbmsuaAppbmRleCAzZTk2OWEwNzBmOWZlNC4uYjI1MGU4YjVjNGQ0NzUgMTAwNjQ0Ci0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZXRodG9vbC9uZXRsaW5rLmgKQEAgLTUsMTEgJiM0Mzs1LDE1IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGh0b29sX25ldGxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2dlbmV0bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zb2NrLmgmZ3Q7CiAKIHN0cnVjdCBldGhubF9yZXFfaW5mbzsKIAomIzQzO2V4dGVybiBjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXTsKJiM0MzsKJiM0Mzt1MzIgZXRobmxfYmNhc3Rfc2VxX25leHQodm9pZCk7CiBpbnQgZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbywKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpuZXN0LCBzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLApAQCAtNDc0LDYgJiM0Mzs0NzgsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3RzY29uZmlnX3JlcXVlc3Rfb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9wb3J0X3JlcXVlc3Rfb3BzOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfaGVhZGVyX3BvbGljeVtFVEhUT09MX0FfSEVBREVSX0ZMQUdTICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyAmIzQzOyAxXTsKQEAgLTUzMCw2ICYjNDM7NTM1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICYjNDM7IDFdOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiAmIzQzOyAxXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggJiM0MzsgMV07CiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgJiM0MzsgMV07CiYjNDM7ZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BvcnRfZ2V0X3BvbGljeVtFVEhUT09MX0FfUE9SVF9JRCAmIzQzOyAxXTsKIAogaW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIGludCBldGhubF9hY3RfY2FibGVfdGVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKQEAgLTU0NSw2ICYjNDM7NTUxLDkgQEAgaW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKIGludCBldGhubF90c2luZm9fZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogaW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIGludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiYjNDM7aW50IGV0aG5sX3BvcnRfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogCiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19zdGRfbmFtZXNbX19FVEhUT09MX1NUQVRTX0NOVF1bRVRIX0dTVFJJTkdfTEVOXTsKIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX2V0aF9waHlfbmFtZXNbX19FVEhUT09MX0FfU1RBVFNfRVRIX1BIWV9DTlRdW0VUSF9HU1RSSU5HX0xFTl07CmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9wb3J0LmMgYi9uZXQvZXRodG9vbC9wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFiMmNjMDVkZjlmOTBhCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2V0aHRvb2wvcG9ydC5jCkBAIC0wLDAgJiM0MzsxLDM3NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAyMDI2IEJvb3RsaW4KJiM0MzsgKi8KJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeV9wb3J0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9uZXRkZXZfbG9jay5oJmd0OwomIzQzOwomIzQzOyNpbmNsdWRlICYjMzQ7Yml0c2V0LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7Y29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bmV0bGluay5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3QgcG9ydF9yZXFfaW5mbyB7CiYjNDM7CXN0cnVjdCBldGhubF9yZXFfaW5mbyBiYXNlOwomIzQzOwl1MzIgcG9ydF9pZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEgewomIzQzOwlzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YQliYXNlOwomIzQzOwlfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpOwomIzQzOwlERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhpbnRlcmZhY2VzKTsKJiM0MzsJdTMyIHBvcnRfaWQ7CiYjNDM7CWJvb2wgbWlpOwomIzQzOwlib29sIHNmcDsKJiM0MzsJdTMyIHVwc3RyZWFtX3BvcnQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZGVmaW5lIFBPUlRfUkVRSU5GTyhfX3JlcV9iYXNlKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfX3JlcV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXFfaW5mbywgYmFzZSkKJiM0MzsKJiM0MzsjZGVmaW5lIFBPUlRfUkVQREFUQShfX3JlcGx5X2Jhc2UpIFwKJiM0MzsJY29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBvcnRfcmVwbHlfZGF0YSwgYmFzZSkKJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgJiM0MzsgMV0gPSB7CiYjNDM7CVtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksCiYjNDM7CVtFVEhUT09MX0FfUE9SVF9JRF0gPSBOTEFfUE9MSUNZX01JTihOTEFfVTMyLCAxKSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcG9ydF9wYXJzZV9yZXF1ZXN0KHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pOwomIzQzOwomIzQzOwlpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBFVEhUT09MX0FfUE9SVF9JRCkpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmVxdWVzdC0mZ3Q7cG9ydF9pZCA9IG5sYV9nZXRfdTMyKHRiW0VUSFRPT0xfQV9QT1JUX0lEXSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sCiYjNDM7CQkJICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSwKJiM0MzsJCQkgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pOwomIzQzOwlzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7CiYjNDM7CiYjNDM7CS8qIFJUTkwgbXVzdCBiZSBoZWxkIHdoaWxlIGhvbGRpbmcgYSByZWYgdG8gdGhlIHBoeV9wb3J0LiBIZXJlLCBjYWxsZXIKJiM0MzsJICogaG9sZHMgUlROTC4KJiM0MzsJICovCiYjNDM7CXBvcnQgPSBwaHlfbGlua190b3BvX2dldF9wb3J0KHJlcV9pbmZvLSZndDtkZXYsIHJlcXVlc3QtJmd0O3BvcnRfaWQpOwomIzQzOwlpZiAoIXBvcnQpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJbGlua21vZGVfY29weShyZXBseS0mZ3Q7c3VwcG9ydGVkLCBwb3J0LSZndDtzdXBwb3J0ZWQpOwomIzQzOwlwaHlfaW50ZXJmYWNlX2NvcHkocmVwbHktJmd0O2ludGVyZmFjZXMsIHBvcnQtJmd0O2ludGVyZmFjZXMpOwomIzQzOwlyZXBseS0mZ3Q7cG9ydF9pZCA9IHBvcnQtJmd0O2lkOwomIzQzOwlyZXBseS0mZ3Q7bWlpID0gcG9ydC0mZ3Q7aXNfbWlpOwomIzQzOwlyZXBseS0mZ3Q7c2ZwID0gcG9ydC0mZ3Q7aXNfc2ZwOwomIzQzOwlyZXBseS0mZ3Q7dXBzdHJlYW1fcG9ydCA9IHBvcnQtJmd0O3Vwc3RyZWFtX3BvcnQ7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKQomIzQzO3sKJiM0MzsJYm9vbCBjb21wYWN0ID0gcmVxX2luZm8tJmd0O2ZsYWdzICZhbXA7IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7CiYjNDM7CXN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpOwomIzQzOwlzaXplX3Qgc2l6ZSA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qIEVUSFRPT0xfQV9QT1JUX0lEICovCiYjNDM7CXNpemUgJiM0Mzs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsKJiM0MzsKJiM0MzsJaWYgKCFyZXBseS0mZ3Q7bWlpKSB7CiYjNDM7CQkvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMgKi8KJiM0MzsJCXJldCA9IGV0aG5sX2JpdHNldF9zaXplKHJlcGx5LSZndDtzdXBwb3J0ZWQsIE5VTEwsCiYjNDM7CQkJCQlfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsCiYjNDM7CQkJCQlsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXNpemUgJiM0Mzs9IHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTICovCiYjNDM7CQlyZXQgPSBldGhubF9iaXRzZXRfc2l6ZShyZXBseS0mZ3Q7aW50ZXJmYWNlcywgTlVMTCwKJiM0MzsJCQkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsCiYjNDM7CQkJCQlwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlzaXplICYjNDM7PSByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogRVRIVE9PTF9BX1BPUlRfVFlQRSAqLwomIzQzOwlzaXplICYjNDM7PSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7CiYjNDM7CiYjNDM7CS8qIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQgKi8KJiM0MzsJaWYgKHJlcGx5LSZndDt1cHN0cmVhbV9wb3J0KQomIzQzOwkJc2l6ZSAmIzQzOz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpOwomIzQzOwomIzQzOwlyZXR1cm4gc2l6ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKQomIzQzO3sKJiM0MzsJYm9vbCBjb21wYWN0ID0gcmVxX2luZm8tJmd0O2ZsYWdzICZhbXA7IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7CiYjNDM7CXN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpOwomIzQzOwlpbnQgcmV0LCBwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9NREk7CiYjNDM7CiYjNDM7CWlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS0mZ3Q7cG9ydF9pZCkpCiYjNDM7CQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwomIzQzOwlpZiAoIXJlcGx5LSZndDttaWkpIHsKJiM0MzsJCXJldCA9IGV0aG5sX3B1dF9iaXRzZXQoc2tiLCBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMsCiYjNDM7CQkJCSAgICAgICByZXBseS0mZ3Q7c3VwcG9ydGVkLCBOVUxMLAomIzQzOwkJCQkgICAgICAgX19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLAomIzQzOwkJCQkgICAgICAgbGlua19tb2RlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsCiYjNDM7CQkJCSAgICAgICByZXBseS0mZ3Q7aW50ZXJmYWNlcywgTlVMTCwKJiM0MzsJCQkJICAgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVgsCiYjNDM7CQkJCSAgICAgICBwaHlfaW50ZXJmYWNlX25hbWVzLCBjb21wYWN0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJlcGx5LSZndDttaWkgfHwgcmVwbHktJmd0O3NmcCkKJiM0MzsJCXBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX1NGUDsKJiM0MzsKJiM0MzsJaWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfVFlQRSwgcG9ydF90eXBlKSkKJiM0MzsJCXJldHVybiAtRU1TR1NJWkU7CiYjNDM7CiYjNDM7CWlmIChyZXBseS0mZ3Q7dXBzdHJlYW1fcG9ydCAmYW1wOyZhbXA7CiYjNDM7CSAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsCiYjNDM7CQkJcmVwbHktJmd0O3Vwc3RyZWFtX3BvcnQpKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBwb3J0X2R1bXBfY3R4IHsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8JKnJlcV9pbmZvOwomIzQzOwlzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhCSpyZXBseV9kYXRhOwomIzQzOwl1bnNpZ25lZCBsb25nCQlpZmluZGV4OwomIzQzOwl1bnNpZ25lZCBsb25nCQlwb3NfaWZpbmRleDsKJiM0MzsJdW5zaWduZWQgbG9uZwkJcG9zX3BvcnRpZDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqCiYjNDM7cG9ydF9kdW1wX2N0eF9nZXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqKWNiLSZndDtjdHg7CiYjNDM7fQomIzQzOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTsKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsJc3RydWN0IG5sYXR0ciAqKnRiID0gaW5mby0mZ3Q7aW5mby5hdHRyczsKJiM0MzsJc3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YTsKJiM0MzsJc3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcV9pbmZvOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpICZndDsgc2l6ZW9mKGNiLSZndDtjdHgpKTsKJiM0MzsKJiM0MzsJcmVxX2luZm8gPSBremFsbG9jX29iaigqcmVxX2luZm8pOwomIzQzOwlpZiAoIXJlcV9pbmZvKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJlcGx5X2RhdGEgPSBrbWFsbG9jX29iaigqcmVwbHlfZGF0YSk7CiYjNDM7CWlmICghcmVwbHlfZGF0YSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZnJlZV9yZXFfaW5mbzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldCgmYW1wO3JlcV9pbmZvLSZndDtiYXNlLCB0YltFVEhUT09MX0FfUE9SVF9IRUFERVJdLAomIzQzOwkJCQkJIGdlbmxfaW5mb19uZXQoJmFtcDtpbmZvLSZndDtpbmZvKSwKJiM0MzsJCQkJCSBpbmZvLSZndDtpbmZvLmV4dGFjaywgZmFsc2UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZnJlZV9yZXBfZGF0YTsKJiM0MzsKJiM0MzsJY3R4LSZndDtpZmluZGV4ID0gMDsKJiM0MzsJY3R4LSZndDtwb3NfaWZpbmRleCA9IDA7CiYjNDM7CiYjNDM7CS8qIEZvciBmaWx0ZXJlZCBEVU1QIHJlcXVlc3RzLCBsZXQmIzM5O3MganVzdCBzdG9yZSB0aGUgaWZpbmRleC4gV2UmIzM5O2xsIGNoZWNrCiYjNDM7CSAqIGFnYWluIGlmIHRoZSBuZXRkZXYgaXMgc3RpbGwgdGhlcmUgd2hlbiBsb29waW5nIG92ZXIgdGhlIG5ldGRldiBsaXN0CiYjNDM7CSAqIGluIHRoZSBEVU1QIGxvb3AuCiYjNDM7CSAqLwomIzQzOwlpZiAocmVxX2luZm8tJmd0O2Jhc2UuZGV2KSB7CiYjNDM7CQljdHgtJmd0O2lmaW5kZXggPSByZXFfaW5mby0mZ3Q7YmFzZS5kZXYtJmd0O2lmaW5kZXg7CiYjNDM7CQluZXRkZXZfcHV0KHJlcV9pbmZvLSZndDtiYXNlLmRldiwgJmFtcDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXZfdHJhY2tlcik7CiYjNDM7CQlyZXFfaW5mby0mZ3Q7YmFzZS5kZXYgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWN0eC0mZ3Q7cmVxX2luZm8gPSByZXFfaW5mbzsKJiM0MzsJY3R4LSZndDtyZXBseV9kYXRhID0gcmVwbHlfZGF0YTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZnJlZV9yZXBfZGF0YToKJiM0MzsJa2ZyZWUocmVwbHlfZGF0YSk7CiYjNDM7ZnJlZV9yZXFfaW5mbzoKJiM0MzsJa2ZyZWUocmVxX2luZm8pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsJdm9pZCAqZWhkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTsKJiM0MzsJaWYgKCFlaGRyKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJbWVtc2V0KGN0eC0mZ3Q7cmVwbHlfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpKTsKJiM0MzsJY3R4LSZndDtyZXBseV9kYXRhLSZndDtiYXNlLmRldiA9IGRldjsKJiM0MzsKJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CW5ldGRldl9sb2NrX29wcyhkZXYpOwomIzQzOwomIzQzOwlyZXQgPSBwb3J0X3ByZXBhcmVfZGF0YSgmYW1wO2N0eC0mZ3Q7cmVxX2luZm8tJmd0O2Jhc2UsICZhbXA7Y3R4LSZndDtyZXBseV9kYXRhLSZndDtiYXNlLAomIzQzOwkJCQlnZW5sX2luZm9fZHVtcChjYikpOwomIzQzOwomIzQzOwluZXRkZXZfdW5sb2NrX29wcyhkZXYpOwomIzQzOwlydG5sX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBldGhubF9maWxsX3JlcGx5X2hlYWRlcihza2IsIGRldiwgRVRIVE9PTF9BX1BPUlRfSEVBREVSKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gcG9ydF9maWxsX3JlcGx5KHNrYiwgJmFtcDtjdHgtJmd0O3JlcV9pbmZvLSZndDtiYXNlLCAmYW1wO2N0eC0mZ3Q7cmVwbHlfZGF0YS0mZ3Q7YmFzZSk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwljdHgtJmd0O3JlcGx5X2RhdGEtJmd0O2Jhc2UuZGV2ID0gTlVMTDsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnZW5sbXNnX2NhbmNlbChza2IsIGVoZHIpOwomIzQzOwllbHNlCiYjNDM7CQlnZW5sbXNnX2VuZChza2IsIGVoZHIpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmVfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CXN0cnVjdCBwaHlfcG9ydCAqcG9ydDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZGV2ID0gY3R4LSZndDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXY7CiYjNDM7CiYjNDM7CWlmICghZGV2LSZndDtsaW5rX3RvcG8pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJeGFfZm9yX2VhY2hfc3RhcnQoJmFtcDtkZXYtJmd0O2xpbmtfdG9wby0mZ3Q7cG9ydHMsIGN0eC0mZ3Q7cG9zX3BvcnRpZCwgcG9ydCwKJiM0MzsJCQkgIGN0eC0mZ3Q7cG9zX3BvcnRpZCkgewomIzQzOwkJY3R4LSZndDtyZXFfaW5mby0mZ3Q7cG9ydF9pZCA9IGN0eC0mZ3Q7cG9zX3BvcnRpZDsKJiM0MzsKJiM0MzsJCXJldCA9IHBvcnRfZHVtcF9vbmUoc2tiLCBkZXYsIGNiKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwljdHgtJmd0O3Bvc19wb3J0aWQgPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBwb3J0X2R1bXBfYWxsX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItJmd0O3NrKTsKJiM0MzsJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CWZvcl9lYWNoX25ldGRldl9kdW1wKG5ldCwgZGV2LCBjdHgtJmd0O3Bvc19pZmluZGV4KSB7CiYjNDM7CQluZXRkZXZfaG9sZChkZXYsICZhbXA7ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpOwomIzQzOwkJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CQljdHgtJmd0O3JlcV9pbmZvLSZndDtiYXNlLmRldiA9IGRldjsKJiM0MzsJCXJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpOwomIzQzOwomIzQzOwkJcmN1X3JlYWRfbG9jaygpOwomIzQzOwkJbmV0ZGV2X3B1dChkZXYsICZhbXA7ZGV2X3RyYWNrZXIpOwomIzQzOwkJY3R4LSZndDtyZXFfaW5mby0mZ3Q7YmFzZS5kZXYgPSBOVUxMOwomIzQzOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXJldCA9IDA7CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBldGhubF9wb3J0X2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpOwomIzQzOwlzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJaWYgKGN0eC0mZ3Q7aWZpbmRleCkgewomIzQzOwkJbmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7CiYjNDM7CQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwomIzQzOwomIzQzOwkJZGV2ID0gbmV0ZGV2X2dldF9ieV9pbmRleChnZW5sX2luZm9fbmV0KCZhbXA7aW5mby0mZ3Q7aW5mbyksCiYjNDM7CQkJCQkgIGN0eC0mZ3Q7aWZpbmRleCwgJmFtcDtkZXZfdHJhY2tlciwKJiM0MzsJCQkJCSAgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIWRldikKJiM0MzsJCQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJCWN0eC0mZ3Q7cmVxX2luZm8tJmd0O2Jhc2UuZGV2ID0gZGV2OwomIzQzOwkJcmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7CiYjNDM7CiYjNDM7CQluZXRkZXZfcHV0KGRldiwgJmFtcDtkZXZfdHJhY2tlcik7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBwb3J0X2R1bXBfYWxsX2Rldihza2IsIGNiKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQomIzQzO3sKJiM0MzsJc3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTsKJiM0MzsKJiM0MzsJa2ZyZWUoY3R4LSZndDtyZXFfaW5mbyk7CiYjNDM7CWtmcmVlKGN0eC0mZ3Q7cmVwbHlfZGF0YSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcG9ydF9yZXF1ZXN0X29wcyA9IHsKJiM0MzsJLnJlcXVlc3RfY21kCQk9IEVUSFRPT0xfTVNHX1BPUlRfR0VULAomIzQzOwkucmVwbHlfY21kCQk9IEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZLAomIzQzOwkuaGRyX2F0dHIJCT0gRVRIVE9PTF9BX1BPUlRfSEVBREVSLAomIzQzOwkucmVxX2luZm9fc2l6ZQkJPSBzaXplb2Yoc3RydWN0IHBvcnRfcmVxX2luZm8pLAomIzQzOwkucmVwbHlfZGF0YV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpLAomIzQzOwomIzQzOwkucGFyc2VfcmVxdWVzdAkJPSBwb3J0X3BhcnNlX3JlcXVlc3QsCiYjNDM7CS5wcmVwYXJlX2RhdGEJCT0gcG9ydF9wcmVwYXJlX2RhdGEsCiYjNDM7CS5yZXBseV9zaXplCQk9IHBvcnRfcmVwbHlfc2l6ZSwKJiM0MzsJLmZpbGxfcmVwbHkJCT0gcG9ydF9maWxsX3JlcGx5LAomIzQzO307CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDE1CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogODg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQ2FuZGlkYXRlIERldGVybWluYXRpb246IGV0aHRvb2wgTmV0bGluayBQb3J0IEluZm9ybWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIHNlcmllcyBoZXJlIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZCwgYEVUSFRPT0xfTVNHX1BPUlRfR0VUYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O2RvZXMgdGhpcyBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nPyYjMzQ7IFRoZSBhbnN3ZXIgaXMgbGVhbmluZyB0b3dhcmRzIHllcy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZ2V0dGluZyBuZXcgZnVuY3Rpb25hbGl0eSB0byByZXRyaWV2ZSBwb3J0IGluZm9ybWF0aW9uIGZvciBuZXR3b3JrIGRldmljZXMsIHNwZWNpZmljYWxseSwgcGh5c2ljYWwgY29ubmVjdGlvbiBwb2ludHMuIEl0JiMzOTtzIGFkZGluZyBzdXBwb3J0IGZvciBgcGh5X3BvcnRgIGluIGBwaHlfbGlua190b3BvbG9neWAuIFRoaXMgdG91Y2hlcyBhIGdvb2QgbnVtYmVyIG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCwgYG5ldC9ldGh0b29sL3BvcnQuY2AsIGFuZCBgbmV0L2V0aHRvb2wvbmV0bGluay5jYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc3VyZmFjZSBhcmVhLiBUaGlzIG5ldyBuZXRsaW5rIEFQSSBtZWFucyB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IHRyaWdnZXIgdGhlc2UgY2hhbmdlcy4gU28geWVzLCBpdCYjMzk7cyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUsIHdoaWNoIHBvaW50cyB0b3dhcmRzIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBgQ09ORklHX0VUSFRPT0xfTkVUTElOS2AgaXMgcHJldHR5IHN0YW5kYXJkLCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBlbmFibGVkLiBUaGVuLCB0aGVyZSYjMzk7cyBgQ09ORklHX1BIWUxJQmAgZm9yIGBwaHlfbGlua190b3BvbG9neS5jYCBhbmQgYHBoeV9kZXZpY2UuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBgQ09ORklHX1BIWUxJTktgIGlzIG9idmlvdXNseSBuZWVkZWQgZm9yIGBwaHlsaW5rLmNgLiBgQ09ORklHX01ESU9fREVWSUNFYCBpcyBsaWtlbHkgYWxzbyBkZWZhdWx0LCBhbmQgYENPTkZJR19TRlBgICptaWdodCogYmUgcmVsZXZhbnQgc2luY2UgYHBoeWxpbmsuY2AgYW5kIGBwaHlfZGV2aWNlLmNgIHVzZSBgc2ZwX2J1c2AsIGJ1dCB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBzZWVtcyBicm9hZGVyIHRoYW4ganVzdCBTRlAuCgpJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gVGhlIG5ldGxpbmsgY29tbWFuZCBpcyBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgIHNvIHRoYXQmIzM5O3MgYSBnb29kIHNlYXJjaCB0ZXJtLiBUaGUgZXRodG9vbCBjb2RlIGlzIHRoZSBmb2N1cywgYW5kIHRoZW4gSSYjMzk7bGwgbG9vayBhdCBhbGwgdGhlIHBoeSBjb2RlLiBUaGUgZnVuY3Rpb25zIHRoYXQgc3RhbmQgb3V0IGFyZTogYGV0aG5sX3BvcnRfZHVtcF9zdGFydGAsIGBldGhubF9wb3J0X2R1bXBpdGAsIGBldGhubF9wb3J0X2R1bXBfZG9uZWAsIGBwb3J0X3BhcnNlX3JlcXVlc3RgLCBgcG9ydF9wcmVwYXJlX2RhdGFgLCBgcG9ydF9yZXBseV9zaXplYCwgYHBvcnRfZmlsbF9yZXBseWAsIGFuZCB0aGVuIHRoZSBwb3J0IGFkZGluZy9yZW1vdmluZyBmdW5jdGlvbnMsIGBwaHlfbGlua190b3BvX2FkZF9wb3J0YCwgYHBoeV9saW5rX3RvcG9fZGVsX3BvcnRgLCBgcGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydGAsIGBwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydGAsIGBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnRgLCBgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0YCwgYHBoeV9hZGRfc2ZwX21vZF9wb3J0YCwgYHBoeV9kZWxfc2ZwX21vZF9wb3J0YCwgYHBoeV9zZXR1cF9zZnBfcG9ydGAuIFRoYXQgY292ZXJzIHRoZSBuZXRsaW5rIGludGVyZmFjZSwgdG9wb2xvZ3kgdXBkYXRlcywgYW5kIFNGUCBpbnRlcmFjdGlvbnMuCgpJJiMzOTtsbCBjaGVjayB0aGUgYnVpbGQgcnVsZXMgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuICBgbmV0L2V0aHRvb2wvcG9ydC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCBpcyBlbmFibGVkLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gYGRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jYCwgYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCBhbGwgYnVpbGQgd2l0aCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZyBvcHRpb25zIChgQ09ORklHX1BIWUxJQmAgYW5kIGBDT05GSUdfUEhZTElOS2ApLgoKTGV0JiMzOTtzIGRvIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSBjb25maWdzLiBgQ09ORklHX0VUSFRPT0xfTkVUTElOS2AsIGBDT05GSUdfUEhZTElCYCwgYW5kIGBDT05GSUdfUEhZTElOS2AgYXJlIHVzdWFsbHkgZW5hYmxlZC4gV2UgbWlnaHQgbmVlZCBhIHNwZWNpZmljIGRyaXZlciwgbGlrZSBgQ09ORklHX01BQ0JgLCB0byBleGVyY2lzZSBgcGh5bGlua2AgZnVsbHksIGJ1dCB3ZSBjYW4gbGlzdCB0aGUgUEhZTElCIGFuZCBQSFlMSU5LIGNvbmZpZ3MgZm9yIG5vdy4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBTRlAgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgb3IgZGVwZW5kZW5jaWVzLiBBIHF1aWNrIGdyZXAgZm9yIGBDT05GSUdfU0ZQYCBvciBgc2ZwX2J1c2Agc2hvdWxkIGZsYWcgYW55dGhpbmcgaW1wb3J0YW50IGluIHRoYXQgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU0ZQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnPTI4ND1DT05GSUdfWElMSU5YX0VNQUNMSVRFPXlcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnOjI4NTpDT05GSUdfU0ZQPW1cbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnLTI4Ni1DT05GSUdfQlJPQURDT01fUEhZPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZz02ND1DT05GSUdfTVZQUDI9eVxuYXJjaC9hcm0vY29uZmlncy9tdmVidV92N19kZWZjb25maWc6NjU6Q09ORklHX1NGUD15XG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZy02Ni1DT05GSUdfTUFSVkVMTF9QSFk9eVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSAmIzQzOz0gbWlpX3RpbWVzdGFtcGVyLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNjpvYmotJChDT05GSUdfU0ZQKVx0XHQmIzQzOz0gc2ZwLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcdFx0JiM0Mzs9IHNmcC1idXMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI4LW9iai15XHRcdFx0XHQmIzQzOz0gJChzZnAtb2JqLXkpICQoc2ZwLW9iai1tKVxuLS1cbmluY2x1ZGUvbGludXgvc2ZwLmg9NTY1PXN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3Ny1cbmluY2x1ZGUvbGludXgvc2ZwLmg6NTc4OiNpZiBJU19FTkFCTEVEKENPTkZJR19TRlApXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3OS1jb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpzZnBfZ2V0X21vZHVsZV9jYXBzKHN0cnVjdCBzZnBfYnVzICpidXMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTk4CgkJCQkJCQlvdXRwdXQ6IDMwMAoJCQkJCQkJdGhvdWdodHM6IDI0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgU0ZQIENvbmZpZ3VyYXRpb24gYW5kIFJlbGF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYENPTkZJR19TRlBgIHRoaW5nLiBJdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBwcmV0dHkgc3BlY2lmaWMgc2V0IG9mIGhhcmR3YXJlIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgU0ZQYCwgYFBIWUxJQmAsIGFuZCBgUEhZTElOS2Agd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhvc2UgYXJlIHRoZSBrZXkgcGllY2VzIHRvIHN0YXJ0IHdpdGguCgpJJiMzOTttIGdvaW5nIHRvIHB1bGwgb3V0IHRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIG1vc3QgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBhcmVhLiBCYXNlZCBvbiBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIGZvY3VzIG9uOiBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgYGV0aG5sX3BvcnRfZHVtcGl0YCwgYGV0aG5sX3BvcnRfZHVtcF9kb25lYCwgYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBgcG9ydF9maWxsX3JlcGx5YCwgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgLCBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGAsIGBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0YCwgYHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlfc2V0dXBfc2ZwX3BvcnRgLCBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AsIGFuZCBgcGh5X3NldF91cHN0cmVhbV9wb3J0YC4gVGhlc2UgZnVuY3Rpb25zIHNlZW0gdG8gY292ZXIgdGhlIGNvcmUgYXNwZWN0cyBvZiBwb3J0IG1hbmFnZW1lbnQsIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3RlbnRpYWxseSBkZXZpY2UgZGlzY292ZXJ5IHJlbGF0ZWQgdG8gU0ZQcy4KCkkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgcG9ydF9kdW1wX29uZV9kZXZgIGFuZCBgcG9ydF9kdW1wX2FsbF9kZXZgIGFyZSBhbHNvIHJlbGV2YW50IHRvIHdoYXQgSSYjMzk7bSBkb2luZy4gWWVwLCB0aGV5IGFwcGVhciB0byBiZSB2YWx1YWJsZSBpbiB0aGlzIGNvbnRleHQgYXMgd2VsbC4KCk5vdyB0aGF0IEkgaGF2ZSBhIGNsZWFyIHNldCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb24sIEkmIzM5O20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkIGFuZCBmaW5hbGl6ZSBteSBhc3Nlc3NtZW50LCBsaWtlbHkgYnkgY2FsbGluZyBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U0ZQJiMzNDssCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtQSFlMSU5LJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXRobmxfcG9ydF9kdW1wX3N0YXJ0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcGl0JiMzNDssCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9kb25lJiMzNDssCiAgICAmIzM0O3BvcnRfcGFyc2VfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDtwb3J0X3ByZXBhcmVfZGF0YSYjMzQ7LAogICAgJiMzNDtwb3J0X3JlcGx5X3NpemUmIzM0OywKICAgICYjMzQ7cG9ydF9maWxsX3JlcGx5JiMzNDssCiAgICAmIzM0O3BvcnRfZHVtcF9vbmVfZGV2JiMzNDssCiAgICAmIzM0O3BvcnRfZHVtcF9hbGxfZGV2JiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fYWRkX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb19kZWxfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0JiMzNDssCiAgICAmIzM0O3BoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfYWRkX3NmcF9tb2RfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlfc2V0dXBfc2ZwX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyYjMzQ7LAogICAgJiMzNDtwaHlfc2V0X3Vwc3RyZWFtX3BvcnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQgKEVUSFRPT0xfTVNHX1BPUlRfR0VUKSB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBQSFkgYW5kIHBoeWxpbmsgc3Vic3lzdGVtcyB0byB0cmFjayBhbmQgZXhwb3NlIHRoZXNlIHBvcnRzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NGUCYjMzQ7LAogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7UEhZTElOSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V0aG5sX3BvcnRfZHVtcF9zdGFydCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBpdCYjMzQ7LAogICAgJiMzNDtldGhubF9wb3J0X2R1bXBfZG9uZSYjMzQ7LAogICAgJiMzNDtwb3J0X3BhcnNlX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7cG9ydF9wcmVwYXJlX2RhdGEmIzM0OywKICAgICYjMzQ7cG9ydF9yZXBseV9zaXplJiMzNDssCiAgICAmIzM0O3BvcnRfZmlsbF9yZXBseSYjMzQ7LAogICAgJiMzNDtwb3J0X2R1bXBfb25lX2RldiYjMzQ7LAogICAgJiMzNDtwb3J0X2R1bXBfYWxsX2RldiYjMzQ7LAogICAgJiMzNDtwaHlfbGlua190b3BvX2FkZF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9saW5rX3RvcG9fZGVsX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X2FkZF9zZnBfbW9kX3BvcnQmIzM0OywKICAgICYjMzQ7cGh5X3NldHVwX3NmcF9wb3J0JiMzNDssCiAgICAmIzM0O3BoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMmIzM0OywKICAgICYjMzQ7cGh5X3NldF91cHN0cmVhbV9wb3J0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIChFVEhUT09MX01TR19QT1JUX0dFVCkgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgcGh5c2ljYWwgY29ubmVjdGlvbiBwb2ludHMgb2YgYSBuZXR3b3JrIGRldmljZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgUEhZIGFuZCBwaHlsaW5rIHN1YnN5c3RlbXMgdG8gdHJhY2sgYW5kIGV4cG9zZSB0aGVzZSBwb3J0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIHRoZW0gaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6NTI6MTIuODIzNjUyMzAzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyODQ1ODAzNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0ZQXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlBIWUxJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldGhubF9wb3J0X2R1bXBfc3RhcnRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcGl0XCIsXG4gICAgXCJldGhubF9wb3J0X2R1bXBfZG9uZVwiLFxuICAgIFwicG9ydF9wYXJzZV9yZXF1ZXN0XCIsXG4gICAgXCJwb3J0X3ByZXBhcmVfZGF0YVwiLFxuICAgIFwicG9ydF9yZXBseV9zaXplXCIsXG4gICAgXCJwb3J0X2ZpbGxfcmVwbHlcIixcbiAgICBcInBvcnRfZHVtcF9vbmVfZGV2XCIsXG4gICAgXCJwb3J0X2R1bXBfYWxsX2RldlwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19hZGRfcG9ydFwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19kZWxfcG9ydFwiLFxuICAgIFwicGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydFwiLFxuICAgIFwicGh5bGlua19hZGRfc2ZwX21vZF9wb3J0XCIsXG4gICAgXCJwaHlfYWRkX3NmcF9tb2RfcG9ydFwiLFxuICAgIFwicGh5X3NldHVwX3NmcF9wb3J0XCIsXG4gICAgXCJwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzXCIsXG4gICAgXCJwaHlfc2V0X3Vwc3RyZWFtX3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZCAoRVRIVE9PTF9NU0dfUE9SVF9HRVQpIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIFBIWSBhbmQgcGh5bGluayBzdWJzeXN0ZW1zIHRvIHRyYWNrIGFuZCBleHBvc2UgdGhlc2UgcG9ydHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6NTI6MTIuODIzNjU5NzQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIzMzg2NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjQ1YThiYWMwM2NkODE2NDdiN2JlYzFlOGI5OWMxODFkMmE0OTZhMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAyMSAwMDo1MjoxMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxcbmluZGV4IDVkZDRkMWI1ZDk0YmJiLi5kMTE1MWFmMzM1Y2ExMCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxcbkBAIC0yMTAsNiArMjEwLDEwIEBAIGRlZmluaXRpb25zOlxcbiAgICAgICAtXFxuICAgICAgICAgbmFtZTogZGlzY2FyZFxcbiAgICAgICAgIHZhbHVlOiAzMVxcbisgIC1cXG4rICAgIG5hbWU6IHBvcnQtdHlwZVxcbisgICAgdHlwZTogZW51bVxcbisgICAgZW50cmllczogW21kaSwgc2ZwXVxcbiBcXG4gYXR0cmlidXRlLXNldHM6XFxuICAgLVxcbkBAIC0xOTA1LDYgKzE5MDksMzIgQEAgYXR0cmlidXRlLXNldHM6XFxuICAgICAgICAgbmFtZTogbGlua1xcbiAgICAgICAgIHR5cGU6IG5lc3RcXG4gICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90XFxuKyAgLVxcbisgICAgbmFtZTogcG9ydFxcbisgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnRcXG4rICAgIGF0dHJpYnV0ZXM6XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBoZWFkZXJcXG4rICAgICAgICB0eXBlOiBuZXN0XFxuKyAgICAgICAgbmVzdGVkLWF0dHJpYnV0ZXM6IGhlYWRlclxcbisgICAgICAtXFxuKyAgICAgICAgbmFtZTogaWRcXG4rICAgICAgICB0eXBlOiB1MzJcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IHN1cHBvcnRlZC1tb2Rlc1xcbisgICAgICAgIHR5cGU6IG5lc3RcXG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiBzdXBwb3J0ZWQtaW50ZXJmYWNlc1xcbisgICAgICAgIHR5cGU6IG5lc3RcXG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiB0eXBlXFxuKyAgICAgICAgdHlwZTogdTMyXFxuKyAgICAgICAgZW51bTogcG9ydC10eXBlXFxuKyAgICAgIC1cXG4rICAgICAgICBuYW1lOiB1cHN0cmVhbS1wb3J0XFxuKyAgICAgICAgdHlwZTogdTMyXFxuIFxcbiBvcGVyYXRpb25zOlxcbiAgIGVudW0tbW9kZWw6IGRpcmVjdGlvbmFsXFxuQEAgLTI4NTksNiArMjg4OSwyNiBAQCBvcGVyYXRpb25zOlxcbiAgICAgICAgICAgICAtIHdvcnN0LWNoYW5uZWxcXG4gICAgICAgICAgICAgLSBsaW5rXFxuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXFxuKyAgICAtXFxuKyAgICAgIG5hbWU6IHBvcnQtZ2V0XFxuKyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZVxcbitcXG4rICAgICAgYXR0cmlidXRlLXNldDogcG9ydFxcbitcXG4rICAgICAgZG86IFxcdTAwMjZwb3J0LWdldC1vcFxcbisgICAgICAgIHJlcXVlc3Q6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGlkXFxuKyAgICAgICAgcmVwbHk6XFxuKyAgICAgICAgICBhdHRyaWJ1dGVzOlxcbisgICAgICAgICAgICAtIGhlYWRlclxcbisgICAgICAgICAgICAtIGlkXFxuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLW1vZGVzXFxuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLWludGVyZmFjZXNcXG4rICAgICAgICAgICAgLSB0eXBlXFxuKyAgICAgICAgICAgIC0gdXBzdHJlYW0tcG9ydFxcbisgICAgICBkdW1wOiAqcG9ydC1nZXQtb3BcXG4gXFxuIG1jYXN0LWdyb3VwczpcXG4gICBsaXN0OlxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XFxuaW5kZXggZTkyYWJmNDVmYWY1MGQuLmI0MzI2Yzg5YjA3NTFmIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcXG5AQCAtMjUzNyw2ICsyNTM3LDM5IEBAIFdpdGhpbiBlYWNoIGNoYW5uZWwgbmVzdCwgb25seSB0aGUgbWV0cmljcyBzdXBwb3J0ZWQgYnkgdGhlIFBIWSB3aWxsIGJlIHByZXNlbnQuXFxuIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW5cXG4gYGBpbmNsdWRlL2xpbnV4L3BoeS5oYGAuXFxuIFxcbitQT1JUX0dFVFxcbis9PT09PT09PVxcbitcXG4rUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsXFxuK3JlZmVycmVkIHRvIGFzIFxcXCJwb3J0c1xcXCIuIFVzZXIgbmVlZHMgdG8gc3BlY2lmeSBhIFBPUlRfSUQgZm9yIHRoZSBETyBvcGVyYXRpb24sXFxuK2luIHdoaWNoIGNhc2UgdGhlIERPIHJlcXVlc3QgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNwZWNpZmljIHBvcnQuXFxuK1xcbitBcyB0aGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBwb3J0LCB0aGUgRFVNUCBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gbGlzdCB0aGVcXG4rcG9ydHMgcHJlc2VudCBvbiBhIGdpdmVuIGludGVyZmFjZSwgYnkgcGFzc2luZyBhbiBpbnRlcmZhY2UgaW5kZXggb3IgbmFtZSBpblxcbit0aGUgZHVtcCByZXF1ZXN0LlxcbitcXG4rUmVxdWVzdCBjb250ZW50czpcXG4rXFxuKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcXG4rICBgYEVUSFRPT0xfQV9QT1JUX0lEYGAgICAgICAgICAgICAgICAgIHUzMiAgICAgcG9ydCBpZFxcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbitLZXJuZWwgcmVzcG9uc2UgY29udGVudHM6XFxuK1xcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAgYGBFVEhUT09MX0FfUE9SVF9IRUFERVJgYCAgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcXG4rICBgYEVUSFRPT0xfQV9QT1JUX0lEYGAgICAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCdzIHVuaXF1ZSBpZGVudGlmaWVyLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBuZXRkZXZpY2UuXFxuKyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVNgYCAgICAgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBsaW5rbW9kZXNcXG4rICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTYGAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIE1JSVxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXNcXG4rICBgYEVUSFRPT0xfQV9QT1JUX1RZUEVgYCAgICAgICAgICAgICAgICAgdTMyICAgICB0aGUgcG9ydCB0eXBlXFxuKyAgYGBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUYGAgICAgICAgIHUzMiAgICAgSWYgYW55LCB0aGUgaW5kZXggb2YgdGhlIE1JSVxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgdGhhdCBmZWVkcyBpbnRvIHRoaXNcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0LlxcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuK1xcbiBSZXF1ZXN0IHRyYW5zbGF0aW9uXFxuID09PT09PT09PT09PT09PT09PT1cXG4gXFxuQEAgLTI2NDcsNCArMjY4MCw1IEBAIGFyZSBuZXRsaW5rIG9ubHkuXFxuICAgbi9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19QSFlfR0VUYGBcXG4gICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgXFxuICAgYGBTSU9DU0hXVFNUQU1QYGAgICAgICAgICAgICAgICAgICAgYGBFVEhUT09MX01TR19UU0NPTkZJR19TRVRgYFxcbisgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgYFxcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcXG5pbmRleCA2ZTI4ZDkwOTRiY2UzZi4uMmE5YjFlYzkzYjcwZjkgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcXG5AQCAtOTksMTMgKzk5LDI5IEBAIHdpbGwgZXZlbnR1YWxseSBiZSBhYmxlIHRvIHJlcG9ydCBpdHMgb3duIGtzZXR0aW5nczo6XFxuICAgICAgICAgICAgIChfX19fXyktLS0tLXwgUG9ydCB8XFxuICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0rXFxuIFxcbitTRlAgcG9ydHNcXG4rPT09PT09PT09XFxuK1xcbitTRlAgaW50ZXJmYWNlcyBpbnZvbHZlIDIgZGlzdGluY3QgY29tcG9uZW50cywgZWFjaCByZXByZXNlbnRlZCBieVxcbithIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcXHUwMDNjcGh5X3BvcnRcXHUwMDNlYCBpbnN0YW5jZSA6XFxuK1xcbisgLSBUaGUgU0ZQIGNhZ2UgaXRzZWxmIGlzIGEgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFxcdTAwM2NwaHlfcG9ydFxcdTAwM2VgLiBJdCdzIHNwZWNpYWxcXG4rICAgaW4gdGhhdCBpdCdzIG5vdCBhbiBNREkgaW50ZXJmYWNlLCBidXQgcmF0aGVyIGEgaG90LXBsdWdnYWJsZSBNSUkuXFxuKyAgIFRoZSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXFx1MDAzY3BoeV9wb3J0XFx1MDAzZWAgYXNzb2NpYXRlZCB0byBpdCBsaXN0cyB0aGUgZGlmZmVyZW50XFxuKyAgIE1JSSBpbnRlcmZhY2VzIHdlIGNhbiB1c2Ugb24gdGhlIGNhZ2UuXFxuK1xcbisgLSBUaGUgU0ZQIG1vZHVsZSwgd2hlbiBpbnNlcnRlZCwgd2lsbCBhbHNvIGJlIGFzc29jaWF0ZWQgdG8gYVxcbisgICA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXFx1MDAzY3BoeV9wb3J0XFx1MDAzZWAsIHRoYXQgcmVwcmVzZW50cyB0aGUgdmFyaW91cyBsaW5rbW9kZXNcXG4rICAgdGhhdCBpdCBnaXZlcyBhY2Nlc3MgdG8uIFRoZSBtb2R1bGUncyA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXFx1MDAzY3BoeV9wb3J0XFx1MDAzZWBcXG4rICAgZG9lc24ndCBzdXBlcnNlZGUgdGhlIGNhZ2UncyBwb3J0LCBpdCByZWZlcmVuY2VzIGl0IHRocm91Z2hcXG4rICAgdGhlIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcXHUwMDNjcGh5X3BvcnRcXHUwMDNlYCA6YzptZW1iZXI6YHVwc3RyZWFtX3BvcnRgIGZpZWxkLlxcbitcXG4gTmV4dCBzdGVwc1xcbiA9PT09PT09PT09XFxuIFxcbi1BcyBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnRhdGlvbiwgb25seSBwb3J0cyBjb250cm9sbGVkIGJ5IFBIWSBkZXZpY2VzIGFyZVxcbi1zdXBwb3J0ZWQuIFRoZSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gYWRkIHRoZSBOZXRsaW5rIEFQSSB0byBleHBvc2UgdGhlc2VcXG4tdG8gdXNlcnNwYWNlIGFuZCBhZGQgc3VwcG9ydCBmb3IgcmF3IHBvcnRzIChjb250cm9sbGVkIGJ5IHNvbWUgZmlybXdhcmUsIGFuZCBkaXJlY3RseVxcbi1tYW5hZ2VkIGJ5IHRoZSBOSUMgZHJpdmVyKS5cXG4rQXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50YXRpb24sIHRoZSBwb3J0J3MgcHJlc2VuY2UgYW5kIGluZm9ybWF0aW9uIGNhbiBvbmx5XFxuK2JlIHF1ZXJpZWQsIGFuZCBpdCdzIG5vdCBwb3NzaWJsZSB0byBjaGFuZ2UgYW55IG9mIHRoZSBwb3J0J3Mgc2V0dGluZ3Mgb3Igc2VsZWN0XFxuK3doaWNoIG9uZSBzaG91bGQgYmUgdXNlZC5cXG4gXFxuIEFub3RoZXIgcGFyYWxsZWwgdGFzayBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgTUlJIG11eGluZyBmcmFtZXdvcmsgdG8gYWxsb3cgdGhlXFxuLWNvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZXIgbXVsdGktcG9ydCBzZXR1cHMuXFxuK2NvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZW4gbXVsdGktcG9ydCBzZXR1cHMuXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAwMGU3YjI2ZTBhMjNmYS4uZDMzODgxZWMxZjYyNTUgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xODc5Miw2ICsxODc5Miw3IEBAIEY6XFx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ldGhlcm5ldC1jb25uZWN0b3IueWFtbFxcbiBGOlxcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHktcG9ydC5yc3RcXG4gRjpcXHRkcml2ZXJzL25ldC9waHkvcGh5X3BvcnQuY1xcbiBGOlxcdGluY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxcbitGOlxcdG5ldC9ldGh0b29sL3BvcnQuY1xcbiBLOlxcdHN0cnVjdFxcXFxzK3BoeV9wb3J0fHBoeV9wb3J0X1xcbiBcXG4gTkVUV09SS0lORyBbR0VORVJBTF1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxcbmluZGV4IDQyMTA4OGU2ZjZlOGYxLi5lYzNkMzlhMGFlMDZiZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXFxuQEAgLTY2LDUgKzY2LDcgQEAgdm9pZCBwaHlfY2Fwc19tZWRpdW1fZ2V0X3N1cHBvcnRlZCh1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXFxuIFxcdFxcdFxcdFxcdCAgIGVudW0gZXRodG9vbF9saW5rX21lZGl1bSBtZWRpdW0sXFxuIFxcdFxcdFxcdFxcdCAgIGludCBsYW5lcyk7XFxuIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2Rlcyk7XFxuK3ZvaWQgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyh1bnNpZ25lZCBsb25nICp0bywgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTtcXG4gXFxuICNlbmRpZiAvKiBfX1BIWV9DQVBTX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xcbmluZGV4IDk0MmQ0MzE5MTU2MWUyLi41NThlNGRmNGQ2M2MwOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jXFxuQEAgLTQ0NSwzICs0NDUsMjkgQEAgdTMyIHBoeV9jYXBzX21lZGl1bXNfZnJvbV9saW5rbW9kZXModW5zaWduZWQgbG9uZyAqbGlua21vZGVzKVxcbiBcXHRyZXR1cm4gbWVkaXVtcztcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKTtcXG4rXFxuKy8qKlxcbisgKiBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKCkgLSBGaWx0ZXIgbGlua21vZGVzIHdpdGggYW4gaW50ZXJmYWNlIGxpc3RcXG4rICogQHRvOiBTdG9yZXMgdGhlIGZpbHRlcmVkIGxpbmttb2Rlc1xcbisgKiBAZnJvbTogTGlua21vZGVzIHRvIGZpbHRlclxcbisgKiBAaW50ZXJmYWNlczogQml0ZmllbGQgb2YgcGh5X2ludGVyZmFjZV90IHRoYXQgd2UgdXNlIGZvciBmaWx0ZXJpbmdcXG4rICpcXG4rICogRmlsdGVyIHRoZSBwcm92aWRlZCBsaW5rbW9kZXMsIG9ubHkgdG8ga2VlcCB0aGUgb25lcyB3ZSBjYW4gcG9zc2libHkgYWNoaWV2ZVxcbisgKiB3aGVuIHVzaW5nIGFueSBvZiB0aGUgcHJvdmlkZWQgTUlJIGludGVyZmFjZXMuXFxuKyAqL1xcbit2b2lkIHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXModW5zaWduZWQgbG9uZyAqdG8sXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcXG4rXFx0XFx0XFx0XFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKVxcbit7XFxuK1xcdF9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKGlmYWNlc19zdXBwb3J0ZWQpID0ge307XFxuK1xcdHVuc2lnbmVkIGludCBpZmFjZXNfY2FwcyA9IDA7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XFxuK1xcbitcXHRmb3JfZWFjaF9zZXRfYml0KGludGVyZmFjZSwgaW50ZXJmYWNlcywgUEhZX0lOVEVSRkFDRV9NT0RFX01BWClcXG4rXFx0XFx0aWZhY2VzX2NhcHMgfD0gcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UoaW50ZXJmYWNlKTtcXG4rXFxuK1xcdHBoeV9jYXBzX2xpbmttb2RlcyhpZmFjZXNfY2FwcywgaWZhY2VzX3N1cHBvcnRlZCk7XFxuK1xcbitcXHRsaW5rbW9kZV9hbmQodG8sIGZyb20sIGlmYWNlc19zdXBwb3J0ZWQpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDA2MTUyMjg0NTllZjQyLi5kNTI1MTVlN2UzMDMwMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbkBAIC0xNDkwLDExICsxNDkwLDIyIEBAIHN0YXRpYyBpbnQgcGh5X3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldjtcXG4rXFx0aW50IHJldDtcXG4gXFxuLVxcdGlmIChkZXYpXFxuLVxcdFxcdHJldHVybiBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7XFxuK1xcdHBoeWRldi1cXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gdHJ1ZTtcXG4rXFx0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0KTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHQvKiBJZiB3ZSBhcmVuJ3QgYXR0YWNoZWQgdG8gYSBuZXRkZXYsIHdlIGNhbid0IGFkZCB0aGUgU0ZQIFBIWSB0byBpdHNcXG4rXFx0ICogdG9wb2xvZ3kuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWRldilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTUxMiw4ICsxNTIzLDEyIEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfZGlzY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXFxuIFxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2O1xcbiBcXG4rXFx0cGh5ZGV2LVxcdTAwM2VoYXNfc2ZwX21vZF9waHkgPSBmYWxzZTtcXG4rXFxuIFxcdGlmIChkZXYpXFxuIFxcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeSk7XFxuK1xcbitcXHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBOVUxMKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTE2MTcsNiArMTYzMiw3NyBAQCBzdGF0aWMgdm9pZCBwaHlfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSlcXG4gXFx0XFx0cG9ydC1cXHUwMDNlb3BzLVxcdTAwM2VsaW5rX2Rvd24ocG9ydCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcGh5X2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0LyogQ3JlYXRlIG1vZCBwb3J0ICovXFxuK1xcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xcbitcXHRpZiAoIXBvcnQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cG9ydC1cXHUwMDNlYWN0aXZlID0gdHJ1ZTtcXG4rXFxuK1xcdGNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyk7XFxuK1xcbitcXHRwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHBvcnQtXFx1MDAzZXN1cHBvcnRlZCwgY2Fwcy1cXHUwMDNlbGlua19tb2RlcyxcXG4rXFx0XFx0XFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfY2FnZV9wb3J0LVxcdTAwM2VpbnRlcmZhY2VzKTtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldikge1xcbitcXHRcXHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2LCBwb3J0KTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIHdlIGRvbid0IHVzZSBwaHlfYWRkX3BvcnQoKSBoZXJlIGFzIHRoZSBtb2R1bGUgcG9ydCBpc24ndCBhIGRpcmVjdFxcbitcXHQgKiBpbnRlcmZhY2UgZnJvbSB0aGUgUEhZLCBidXQgcmF0aGVyIGFuIGV4dGVuc2lvbiB0byB0aGUgc2ZwLWJ1cywgdGhhdFxcbitcXHQgKiBpcyBhbHJlYWR5IHJlcHJlc2VudGVkIGJ5IGl0cyBvd24gcGh5X3BvcnRcXG4rXFx0ICovXFxuK1xcdHBoeWRldi1cXHUwMDNlbW9kX3BvcnQgPSBwb3J0O1xcbitcXG4rXFx0cG9ydC1cXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBoeWRldi1cXHUwMDNlc2ZwX2NhZ2VfcG9ydC1cXHUwMDNlaWQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGh5X2RlbF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpZiAoIXBoeWRldi1cXHUwMDNlbW9kX3BvcnQpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldilcXG4rXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldiwgcGh5ZGV2LVxcdTAwM2Vtb2RfcG9ydCk7XFxuK1xcbitcXHRwaHlfcG9ydF9kZXN0cm95KHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpO1xcbitcXHRwaHlkZXYtXFx1MDAzZW1vZF9wb3J0ID0gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwaHlfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcXG4re1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XFxuK1xcbitcXHQvKiBJZiB0aGVyZSdzIGEgZG93bnN0cmVhbSBTRlAgbW9kdWxlLCBhbmQgaXQgZG9lc24ndCBjb250YWluIGEgUEhZXFxuK1xcdCAqIGRldmljZSwgbGV0J3MgY3JlYXRlIGEgcGh5X3BvcnQgdG8gcmVwcmVzZW50IHRoYXQgbW9kdWxlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFwaHlkZXYtXFx1MDAzZWhhc19zZnBfbW9kX3BoeSlcXG4rXFx0XFx0cmV0dXJuIHBoeV9hZGRfc2ZwX21vZF9wb3J0KHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGh5X3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSlcXG4re1xcbitcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XFxuK1xcbitcXHQvKiBDYWxsZWQgdXBvbiBtb2R1bGUgcmVtb3ZhbCBvciB1cHN0cmVhbSByZW1vdmFsICovXFxuK1xcdGlmICghcGh5ZGV2LVxcdTAwM2VoYXNfc2ZwX21vZF9waHkpXFxuK1xcdFxcdHBoeV9kZWxfc2ZwX21vZF9wb3J0KHBoeWRldik7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcXG4gXFx0LmF0dGFjaCA9IHBoeV9zZnBfYXR0YWNoLFxcbiBcXHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXFxuQEAgLTE2MjYsNiArMTcxMiw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcXG4gXFx0LmxpbmtfZG93biA9IHBoeV9zZnBfbGlua19kb3duLFxcbiBcXHQuY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Nvbm5lY3RfcGh5LFxcbiBcXHQuZGlzY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Rpc2Nvbm5lY3RfcGh5LFxcbitcXHQubW9kdWxlX3N0YXJ0ID0gcGh5X3NmcF9tb2R1bGVfc3RhcnQsXFxuK1xcdC5tb2R1bGVfc3RvcCA9IHBoeV9zZnBfbW9kdWxlX3N0b3AsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHBoeV9hZGRfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuQEAgLTE2NzMsMTMgKzE3NjEsMTMgQEAgc3RhdGljIHZvaWQgcGh5X2RlbF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcXG4gXFx0cGh5ZGV2LVxcdTAwM2VuX3BvcnRzLS07XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IHBoeV9wb3J0X2FsbG9jKCk7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHRpZiAoIXBvcnQpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuIFxcdHBvcnQtXFx1MDAzZXBhcmVudF90eXBlID0gUEhZX1BPUlRfUEhZO1xcbiBcXHRwb3J0LVxcdTAwM2VwaHkgPSBwaHlkZXY7XFxuQEAgLTE2OTQsMTAgKzE3ODIsMTIgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0ICogd2hlbiBhdHRhY2hpbmcgdGhlIHBvcnQgdG8gdGhlIHBoeWRldi5cXG4gXFx0ICovXFxuIFxcdHJldCA9IHBoeV9hZGRfcG9ydChwaHlkZXYsIHBvcnQpO1xcbi1cXHRpZiAocmV0KVxcbitcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuK1xcdH1cXG4gXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiBwb3J0O1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTcwNiwyNSArMTc5Niw0OSBAQCBzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiAgKi9cXG4gc3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gTlVMTDtcXG4gXFx0c3RydWN0IHNmcF9idXMgKmJ1cztcXG4tXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCByZXQ7XFxuIFxcbi1cXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5md25vZGUpIHtcXG4tXFx0XFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XFxuLVxcdFxcdGlmIChJU19FUlIoYnVzKSlcXG4tXFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYnVzKTtcXG4rXFx0aWYgKCFwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LmZ3bm9kZSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBidXM7XFxuK1xcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5md25vZGUpO1xcbitcXHRpZiAoSVNfRVJSKGJ1cykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGJ1cyk7XFxuIFxcbi1cXHRcXHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgXFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcXG4tXFx0XFx0c2ZwX2J1c19wdXQoYnVzKTtcXG4rXFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gYnVzO1xcbiBcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gTlVMTDtcXG4rXFx0aWYgKGJ1cykge1xcbitcXHRcXHRwb3J0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XFxuK1xcdFxcdGlmIChJU19FUlIocG9ydCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihwb3J0KTtcXG4rXFx0XFx0XFx0cG9ydCA9IE5VTEw7XFxuK1xcdFxcdFxcdGdvdG8gb3V0X3NmcDtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZXNmcF9idXMpXFxuLVxcdFxcdHJldCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xcbitcXHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgXFx1MDAyNnNmcF9waHlkZXZfb3BzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcG9ydDtcXG4rXFxuK1xcdC8qIHNmcF9idXNfYWRkX3Vwc3RyZWFtKCkgZ3JhYnMgYSByZWYgdG8gdGhlIHNmcCBidXMgb24gc3VjY2VzcywgaXQnc1xcbitcXHQgKiBzYWZlIHRvIHJlbGVhc2UgaXQgbm93LlxcbitcXHQgKi9cXG4rXFx0c2ZwX2J1c19wdXQoYnVzKTtcXG4rXFxuK1xcdHBoeWRldi1cXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbitcXG4rb3V0X3BvcnQ6XFxuK1xcdGlmIChwb3J0KSB7XFxuK1xcdFxcdHBoeV9kZWxfcG9ydChwaHlkZXYsIHBvcnQpO1xcbitcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbitcXHR9XFxuK291dF9zZnA6XFxuK1xcdHNmcF9idXNfcHV0KGJ1cyk7XFxuK1xcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTE4MTUsNiArMTkyOSwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0XFx0ZXJyID0gcGh5X2xpbmtfdG9wb19hZGRfcGh5KGRldiwgcGh5ZGV2LCBQSFlfVVBTVFJFQU1fTUFDLCBkZXYpO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXG4rXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpIHtcXG4rXFx0XFx0XFx0ZXJyID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpO1xcbitcXHRcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFNvbWUgRXRoZXJuZXQgZHJpdmVycyB0cnkgdG8gY29ubmVjdCB0byBhIFBIWSBkZXZpY2UgYmVmb3JlXFxuQEAgLTE5NTEsNiArMjA3MSw4IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRcXHRwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldi1cXHUwMDNlcGh5ZGV2ID0gTlVMTDtcXG4gXFx0XFx0cGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xcbiBcXHRcXHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xcbitcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2Vtb2RfcG9ydClcXG4rXFx0XFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBoeWRldi1cXHUwMDNlbW9kX3BvcnQpO1xcbiBcXHR9XFxuIFxcbiBcXHRwaHlkZXYtXFx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XFxuQEAgLTM1NzksNiArMzcwMSwyOCBAQCBzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcXG4gXFxuKy8qKlxcbisgKiBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoKSAtIFNldHMgdGhlIHBoeV9wb3J0IGNvbnRyb2xsaW5nIHRoZSBNSUkgdGhpcyBQSFkgaXNcXG4rICpcXHRcXHRcXHQgICAgIGF0dGFjaGVkIHRvLlxcbisgKiBAcGh5ZGV2OiBwb2ludGVyIHRvIHRoZSBQSFkgZGV2aWNlIHdlIHNldCB0aGUgdXBzdHJlYW0gb2YuXFxuKyAqIEBwb3J0OiBUaGUgcGh5X3BvcnQgdXBzdHJlYW0gb2YgdGhpcyBQSFksIGNhbiBiZSBOVUxMLlxcbisgKi9cXG4rdm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqbG9jYWxfcG9ydDtcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwb3J0O1xcbitcXG4rXFx0cGh5X2Zvcl9lYWNoX3BvcnQocGh5ZGV2LCBsb2NhbF9wb3J0KVxcbitcXHRcXHRpZiAocG9ydClcXG4rXFx0XFx0XFx0bG9jYWxfcG9ydC1cXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXFx1MDAzZWlkO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGxvY2FsX3BvcnQtXFx1MDAzZXVwc3RyZWFtX3BvcnQgPSAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9zZXRfdXBzdHJlYW1fcG9ydCk7XFxuK1xcbiAvKipcXG4gICogZndub2RlX21kaW9fZmluZF9kZXZpY2UgLSBHaXZlbiBhIGZ3bm9kZSwgZmluZCB0aGUgbWRpb19kZXZpY2VcXG4gICogQGZ3bm9kZTogcG9pbnRlciB0byB0aGUgbWRpb19kZXZpY2UncyBmd25vZGVcXG5AQCAtMzgxNyw2ICszOTYxLDcgQEAgc3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFxuIFxcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyk7XFxuIFxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XFxuK1xcdHBoeWRldi1cXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IE5VTEw7XFxuIFxcbiBcXHRwaHlfY2xlYW51cF9wb3J0cyhwaHlkZXYpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xcbmluZGV4IDQxMzRkZTdhZTMxM2QyLi41ZTEzNWFiNjM2YzBiNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXFxuQEAgLTcsNiArNyw3IEBAXFxuICAqL1xcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfcG9ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbkBAIC0yMywxNyArMjQsODEgQEAgc3RhdGljIGludCBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2dG9wby1cXHUwMDNlcGh5cywgWEFfRkxBR1NfQUxMT0MxKTtcXG4gXFx0dG9wby1cXHUwMDNlbmV4dF9waHlfaW5kZXggPSAxO1xcbiBcXG4rXFx0eGFfaW5pdF9mbGFncyhcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIFhBX0ZMQUdTX0FMTE9DMSk7XFxuK1xcdHRvcG8tXFx1MDAzZW5leHRfcG9ydF9pbmRleCA9IDE7XFxuK1xcbiBcXHRkZXYtXFx1MDAzZWxpbmtfdG9wbyA9IHRvcG87XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlbGlua190b3BvKVxcbitcXHRcXHRyZXR1cm4gZGV2LVxcdTAwM2VsaW5rX3RvcG87XFxuK1xcbitcXHQvKiBUaGUgdG9wb2xvZ3kgaXMgYWxsb2NhdGVkIHRoZSBmaXJzdCB0aW1lIHdlIGFkZCBhbiBvYmplY3QgdG8gaXQuXFxuK1xcdCAqIEl0IGlzIGZyZWVkIGFsb25nc2lkZSB0aGUgbmV0ZGV2LiBJdCBjYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlXFxuK1xcdCAqIGNvbnRleHRzOlxcbitcXHQgKiAgLSBJdCBjYW4gYmUgY2FsbGVkIGZyb20gLnByb2JlKCkgOiBObyBydG5sLCBubyBuZXRkZXZfbG9ja1xcbitcXHQgKiAgLSAubmRvX29wZW4oKSA6IHJ0bmwgYW5kIHBvc3NpYmx5IG5ldGRldl9sb2NrXFxuK1xcdCAqICAtIFNGUCBzdGF0ZSBtYWNoaW5lIDogcnRubCBoZWxkIG9yIG5vdFxcbitcXHQgKlxcbitcXHQgKiAgSG93ZXZlciwgd2UgY2FuJ3QgcmVhbGx5IGhhdmUgcmFjZXMgOlxcbitcXHQgKiAgLSBJZiB3ZSBoYXZlIGEgUEhZLCBwaHlfbGlua190b3BvX2FkZF9waHkoKSB3aWxsIGFsd2F5cyBydW4gZmlyc3RcXG4rXFx0ICogICAgYW5kIHRyaWdnZXIgdGhlIGFsbG9jLiBPbmx5IHRoZW4gdGhlIHBvcnRzIGNhbiBiZSBhZGRlZCB0aHJvdWdoXFxuK1xcdCAqICAgIHBoeWxpYiBvZiBzZnAuXFxuK1xcdCAqICAtIElmIHdlIGRvbid0LCB0aGUgU0ZQIHBvcnQgZm9yIHRoZSBjYWdlIGlzIHJlZ2lzdGVyZWQgZmlyc3QsIGFuZFxcbitcXHQgKiAgICBvbmx5IHRoZW4gb3RoZXIgcG9ydHMvUEhZcyBjYW4gYmUgcmVnaXN0ZXJlZC5cXG4rXFx0ICovXFxuK1xcdHJldCA9IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShkZXYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXG4rXFx0cmV0dXJuIGRldi1cXHUwMDNlbGlua190b3BvO1xcbit9XFxuK1xcbitpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuK3tcXG4rXFx0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0dG9wbyA9IHBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKGRldik7XFxuK1xcdGlmIChJU19FUlIodG9wbykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xcbitcXG4rXFx0LyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovXFxuK1xcdGlmIChwb3J0LVxcdTAwM2VpZClcXG4rXFx0XFx0cmV0ID0geGFfaW5zZXJ0KFxcdTAwMjZ0b3BvLVxcdTAwM2Vwb3J0cywgcG9ydC1cXHUwMDNlaWQsIHBvcnQsIEdGUF9LRVJORUwpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldCA9IHhhX2FsbG9jX2N5Y2xpYyhcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIFxcdTAwMjZwb3J0LVxcdTAwM2VpZCwgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgeGFfbGltaXRfMzJiLCBcXHUwMDI2dG9wby1cXHUwMDNlbmV4dF9wb3J0X2luZGV4LFxcbitcXHRcXHRcXHRcXHQgICAgICBHRlBfS0VSTkVMKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X2xpbmtfdG9wb19hZGRfcG9ydCk7XFxuK1xcbit2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cXHUwMDNlbGlua190b3BvO1xcbitcXG4rXFx0aWYgKCF0b3BvKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR4YV9lcmFzZShcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIHBvcnQtXFx1MDAzZWlkKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwaHlfbGlua190b3BvX2RlbF9wb3J0KTtcXG4rXFxuIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbiBcXHRcXHRcXHQgIGVudW0gcGh5X3Vwc3RyZWFtIHVwdCwgdm9pZCAqdXBzdHJlYW0pXFxuIHtcXG4tXFx0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVxcdTAwM2VsaW5rX3RvcG87XFxuK1xcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbztcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBldGh0b29sIG9wcyBtYXkgcnVuIHdpdGhvdXQgcnRubF9sb2NrLCBhbmQgcnRubF9sb2NrIGlzIHdoYXRcXG5AQCAtNDUsMTMgKzExMCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKFdBUk5fT05fT05DRShuZXRkZXZfbmVlZF9vcHNfbG9jayhkZXYpKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0aWYgKCF0b3BvKSB7XFxuLVxcdFxcdHJldCA9IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShkZXYpO1xcbi1cXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi1cXG4tXFx0XFx0dG9wbyA9IGRldi1cXHUwMDNlbGlua190b3BvO1xcbi1cXHR9XFxuK1xcdHRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpO1xcbitcXHRpZiAoSVNfRVJSKHRvcG8pKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUih0b3BvKTtcXG4gXFxuIFxcdHBkbiA9IGt6YWxsb2Nfb2JqKCpwZG4pO1xcbiBcXHRpZiAoIXBkbilcXG5AQCAtODYsOCArMTQ3LDIwIEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4rXFx0LyogQWRkIGFsbCB0aGUgUEhZJ3MgcG9ydHMgdG8gdGhlIHRvcG9sb2d5ICovXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeS1cXHUwMDNlcG9ydHMsIGhlYWQpIHtcXG4rXFx0XFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBvcnQpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGRlbF9wb3J0cztcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbitkZWxfcG9ydHM6XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShwb3J0LCBcXHUwMDI2cGh5LVxcdTAwM2Vwb3J0cywgaGVhZClcXG4rXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xcbitcXG4rXFx0eGFfZXJhc2UoXFx1MDAyNnRvcG8tXFx1MDAzZXBoeXMsIHBoeS1cXHUwMDNlcGh5aW5kZXgpO1xcbiBlcnI6XFxuIFxcdGtmcmVlKHBkbik7XFxuIFxcdHJldHVybiByZXQ7XFxuQEAgLTk5LDEwICsxNzIsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiBcXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXFx1MDAzZWxpbmtfdG9wbztcXG4gXFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuIFxcbiBcXHRpZiAoIXRvcG8pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeS1cXHUwMDNlcG9ydHMsIGhlYWQpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwb3J0KTtcXG4rXFxuIFxcdHBkbiA9IHhhX2VyYXNlKFxcdTAwMjZ0b3BvLVxcdTAwM2VwaHlzLCBwaHktXFx1MDAzZXBoeWluZGV4KTtcXG4gXFxuIFxcdC8qIFdlIGRlbGV0ZSB0aGUgUEhZIGZyb20gdGhlIHRvcG9sb2d5LCBob3dldmVyIHdlIGRvbid0IHJlLXNldCB0aGVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG5pbmRleCA1OWRmZTM1YWZhNTRmYy4uNWNmYmZjYzEwNzlhZDMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG5AQCAtMTQsNiArMTQsOCBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfZml4ZWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHlfcG9ydC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGlubG9jay5oXFx1MDAzZVxcbkBAIC05Myw2ICs5NSw4IEBAIHN0cnVjdCBwaHlsaW5rIHtcXG4gXFx0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soc2ZwX2ludGVyZmFjZXMpO1xcbiBcXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzZnBfc3VwcG9ydCk7XFxuIFxcdHU4IHNmcF9wb3J0O1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqbW9kX3BvcnQ7XFxuIFxcbiBcXHRzdHJ1Y3QgZWVlX2NvbmZpZyBlZWVfY2ZnO1xcbiBcXG5AQCAtMTc2NCw2ICsxNzY4LDUxIEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfZml4ZWRfcG9sbChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHM7XFxuIFxcbitzdGF0aWMgaW50IHBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxcbit7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoIXBsLVxcdTAwM2VuZXRkZXYgfHwgIXBsLVxcdTAwM2VzZnBfYnVzKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xcbitcXHRpZiAoIXBvcnQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cG9ydC1cXHUwMDNlaXNfc2ZwID0gdHJ1ZTtcXG4rXFx0cG9ydC1cXHUwMDNlaXNfbWlpID0gdHJ1ZTtcXG4rXFx0cG9ydC1cXHUwMDNlYWN0aXZlID0gdHJ1ZTtcXG4rXFxuK1xcdHBoeV9pbnRlcmZhY2VfYW5kKHBvcnQtXFx1MDAzZWludGVyZmFjZXMsIHBsLVxcdTAwM2Vjb25maWctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzLFxcbitcXHRcXHRcXHQgIHBoeWxpbmtfc2ZwX2ludGVyZmFjZXMpO1xcbitcXHRwaHlfcG9ydF91cGRhdGVfc3VwcG9ydGVkKHBvcnQpO1xcbitcXG4rXFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC1cXHUwMDNlbmV0ZGV2LCBwb3J0KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfZGVzdHJveV9wb3J0O1xcbitcXG4rXFx0cGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQgPSBwb3J0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfZGVzdHJveV9wb3J0OlxcbitcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbitcXHRwbC1cXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IE5VTEw7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4re1xcbitcXHRpZiAocGwtXFx1MDAzZW5ldGRldiBcXHUwMDI2XFx1MDAyNiBwbC1cXHUwMDNlc2ZwX2NhZ2VfcG9ydClcXG4rXFx0XFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChwbC1cXHUwMDNlbmV0ZGV2LCBwbC1cXHUwMDNlc2ZwX2NhZ2VfcG9ydCk7XFxuK1xcbitcXHRpZiAocGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpXFxuK1xcdFxcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpO1xcbitcXG4rXFx0cGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHBoeWxpbmtfcmVnaXN0ZXJfc2ZwKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4gXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcXG4ge1xcbkBAIC0xNzgxLDkgKzE4MzAsMTggQEAgc3RhdGljIGludCBwaHlsaW5rX3JlZ2lzdGVyX3NmcChzdHJ1Y3QgcGh5bGluayAqcGwsXFxuIFxcbiBcXHRwbC1cXHUwMDNlc2ZwX2J1cyA9IGJ1cztcXG4gXFxuK1xcdHJldCA9IHBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnQocGwpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdHNmcF9idXNfcHV0KGJ1cyk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuIFxcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGwsIFxcdTAwMjZzZnBfcGh5bGlua19vcHMpO1xcbiBcXHRzZnBfYnVzX3B1dChidXMpO1xcbiBcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpO1xcbitcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMTk0NSw2ICsyMDAzLDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19jcmVhdGUpO1xcbiB2b2lkIHBoeWxpbmtfZGVzdHJveShzdHJ1Y3QgcGh5bGluayAqcGwpXFxuIHtcXG4gXFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGwtXFx1MDAzZXNmcF9idXMpO1xcbitcXHRwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChwbCk7XFxuIFxcdGlmIChwbC1cXHUwMDNlbGlua19ncGlvKVxcbiBcXHRcXHRncGlvZF9wdXQocGwtXFx1MDAzZWxpbmtfZ3Bpbyk7XFxuIFxcbkBAIC0zODcwLDE0ICszOTI5LDY3IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9yZW1vdmUodm9pZCAqdXBzdHJlYW0pXFxuIFxcdHBoeV9pbnRlcmZhY2VfemVybyhwbC1cXHUwMDNlc2ZwX2ludGVyZmFjZXMpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydChzdHJ1Y3QgcGh5bGluayAqcGwpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHNmcF9tb2R1bGVfY2FwcyAqY2FwcztcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmICghcGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LyogQ3JlYXRlIG1vZCBwb3J0ICovXFxuK1xcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xcbitcXHRpZiAoIXBvcnQpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cG9ydC1cXHUwMDNlYWN0aXZlID0gdHJ1ZTtcXG4rXFxuK1xcdGNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBsLVxcdTAwM2VzZnBfYnVzKTtcXG4rXFxuK1xcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cXHUwMDNlc3VwcG9ydGVkLCBjYXBzLVxcdTAwM2VsaW5rX21vZGVzLFxcbitcXHRcXHRcXHRcXHRcXHRwbC1cXHUwMDNlc2ZwX2NhZ2VfcG9ydC1cXHUwMDNlaW50ZXJmYWNlcyk7XFxuK1xcbitcXHRpZiAocGwtXFx1MDAzZW5ldGRldikge1xcbitcXHRcXHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLVxcdTAwM2VuZXRkZXYsIHBvcnQpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cG9ydC1cXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBsLVxcdTAwM2VzZnBfY2FnZV9wb3J0LVxcdTAwM2VpZDtcXG4rXFxuK1xcdHBsLVxcdTAwM2Vtb2RfcG9ydCA9IHBvcnQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcXG4re1xcbitcXHRpZiAoIXBsLVxcdTAwM2Vtb2RfcG9ydClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHBsLVxcdTAwM2VuZXRkZXYpXFxuK1xcdFxcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtXFx1MDAzZW5ldGRldiwgcGwtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFxuK1xcdHBoeV9wb3J0X2Rlc3Ryb3kocGwtXFx1MDAzZW1vZF9wb3J0KTtcXG4rXFx0cGwtXFx1MDAzZW1vZF9wb3J0ID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RhcnQodm9pZCAqdXBzdHJlYW0pXFxuIHtcXG4gXFx0c3RydWN0IHBoeWxpbmsgKnBsID0gdXBzdHJlYW07XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdGFydCB0aGUgUEhZIG5vdy4gKi9cXG4gXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpIHtcXG4gXFx0XFx0cGh5X3N0YXJ0KHBsLVxcdTAwM2VwaHlkZXYpO1xcbiBcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gcGh5bGlua19hZGRfc2ZwX21vZF9wb3J0KHBsKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0LyogSWYgdGhlIG1vZHVsZSBtYXkgaGF2ZSBhIFBIWSBidXQgd2UgZGlkbid0IGRldGVjdCBvbmUgd2VcXG5AQCAtMzg4Niw3ICszOTk4LDE2IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxcbiBcXHRpZiAoIXBsLVxcdTAwM2VzZnBfbWF5X2hhdmVfcGh5KVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdHJldHVybiBwaHlsaW5rX3NmcF9jb25maWdfb3B0aWNhbChwbCk7XFxuK1xcdHJldCA9IHBoeWxpbmtfc2ZwX2NvbmZpZ19vcHRpY2FsKHBsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBkZWxfbW9kX3BvcnQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2RlbF9tb2RfcG9ydDpcXG4rXFx0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX21vZHVsZV9zdG9wKHZvaWQgKnVwc3RyZWFtKVxcbkBAIC0zODk2LDYgKzQwMTcsOCBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfc3RvcCh2b2lkICp1cHN0cmVhbSlcXG4gXFx0LyogSWYgdGhpcyBTRlAgbW9kdWxlIGhhcyBhIFBIWSwgc3RvcCBpdC4gKi9cXG4gXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpXFxuIFxcdFxcdHBoeV9zdG9wKHBsLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHBoeWxpbmtfZGVsX3NmcF9tb2RfcG9ydChwbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSlcXG5AQCAtMzk0MCw2ICs0MDYzLDggQEAgc3RhdGljIGludCBwaHlsaW5rX3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG4gXFx0cGh5X2ludGVyZmFjZV9hbmQocGh5LVxcdTAwM2Vob3N0X2ludGVyZmFjZXMsIHBoeWxpbmtfc2ZwX2ludGVyZmFjZXMsXFxuIFxcdFxcdFxcdCAgcGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbiBcXG4rXFx0cGh5X3NldF91cHN0cmVhbV9wb3J0KHBoeSwgcGwtXFx1MDAzZXNmcF9jYWdlX3BvcnQpO1xcbitcXG4gXFx0LyogRG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiAqL1xcbiBcXHRyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX3BoeShwbCwgcGh5KTtcXG4gfVxcbkBAIC0zOTQ4LDYgKzQwNzMsNyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIHtcXG4gXFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh1cHN0cmVhbSk7XFxuK1xcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHlkZXYsIE5VTEwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWxpbmtfb3BzID0ge1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IGJlZmYxZDZmY2M3Y2RhLi44Mjk2ZjRmNTljZTNiMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbkBAIC01ODIsNiArNTgyLDcgQEAgc3RydWN0IHBoeV9vYXRjMTRfc3FpX2NhcGFiaWxpdHkge1xcbiAgKiBAd29sX2VuYWJsZWQ6IFNldCB0byB0cnVlIGlmIHRoZSBQSFkgb3IgdGhlIGF0dGFjaGVkIE1BQyBoYXZlIFdha2Utb24tTEFOXFxuICAqIFxcdFxcdCBlbmFibGVkLlxcbiAgKiBAaXNfZ2VucGh5X2RyaXZlbjogUEhZIGlzIGRyaXZlbiBieSBvbmUgb2YgdGhlIGdlbmVyaWMgUEhZIGRyaXZlcnNcXG4rICogQGhhc19zZnBfbW9kX3BoeTogU2V0IHRydWUgaWYgZG93bnN0cmVhbSBTRlAgYnVzJ3MgbW9kdWxlIGNvbnRhaW5zIGEgUEhZXFxuICAqIEBzdGF0ZTogU3RhdGUgb2YgdGhlIFBIWSBmb3IgbWFuYWdlbWVudCBwdXJwb3Nlc1xcbiAgKiBAZGV2X2ZsYWdzOiBEZXZpY2Utc3BlY2lmaWMgZmxhZ3MgdXNlZCBieSB0aGUgUEhZIGRyaXZlci5cXG4gICpcXG5AQCAtNTk0LDYgKzU5NSw5IEBAIHN0cnVjdCBwaHlfb2F0YzE0X3NxaV9jYXBhYmlsaXR5IHtcXG4gICogQHBoeWxpbms6IFBvaW50ZXIgdG8gcGh5bGluayBpbnN0YW5jZSBmb3IgdGhpcyBQSFlcXG4gICogQHNmcF9idXNfYXR0YWNoZWQ6IEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBTRlAgYnVzIGhhcyBiZWVuIGF0dGFjaGVkXFxuICAqIEBzZnBfYnVzOiBTRlAgYnVzIGF0dGFjaGVkIHRvIHRoaXMgUEhZJ3MgZmliZXIgcG9ydFxcbisgKiBAc2ZwX2NhZ2VfcG9ydDogVGhlIHBoeV9wb3J0IGNvbm5lY3RlZCB0byB0aGUgZG93bnN0cmVhbSBTRlAgY2FnZVxcbisgKiBAbW9kX3BvcnQ6IHBoeV9wb3J0IHJlcHJlc2VudGluZyB0aGUgU0ZQIG1vZHVsZSwgaWYgaXQgaXMgcGh5LWxlc3NcXG4rICogQHVwc3RyZWFtX3BvcnQ6IHBoeV9wb3J0IHRoaXMgUEhZJ3MgTUlJIGF0dGFjaGVzIHRvLCBpZiBhbnlcXG4gICogQGF0dGFjaGVkX2RldjogVGhlIGF0dGFjaGVkIGVuZXQgZHJpdmVyJ3MgZGV2aWNlIGluc3RhbmNlIHB0clxcbiAgKiBAYWRqdXN0X2xpbms6IENhbGxiYWNrIGZvciB0aGUgZW5ldCBjb250cm9sbGVyIHRvIHJlc3BvbmQgdG8gY2hhbmdlczogaW4gdGhlXFxuICAqICAgICAgICAgICAgICAgbGluayBzdGF0ZS5cXG5AQCAtNzA2LDYgKzcxMCw3IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcXG4gXFx0dW5zaWduZWQgaXJxX3JlcnVuOjE7XFxuIFxcbiBcXHR1bnNpZ25lZCBkZWZhdWx0X3RpbWVzdGFtcDoxO1xcbitcXHR1bnNpZ25lZCBoYXNfc2ZwX21vZF9waHk6MTtcXG4gXFxuIFxcdGludCByYXRlX21hdGNoaW5nO1xcbiBcXG5AQCAtNzg1LDYgKzc5MCw5IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcXG4gXFx0LyogVGhpcyBtYXkgYmUgbW9kaWZpZWQgdW5kZXIgdGhlIHJ0bmwgbG9jayAqL1xcbiBcXHRib29sIHNmcF9idXNfYXR0YWNoZWQ7XFxuIFxcdHN0cnVjdCBzZnBfYnVzICpzZnBfYnVzO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqbW9kX3BvcnQ7XFxuK1xcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcXG4gXFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICphdHRhY2hlZF9kZXY7XFxuIFxcdHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cztcXG5AQCAtMjQ2NSw2ICsyNDczLDggQEAgaW50IF9fcGh5X2h3dHN0YW1wX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXG4gc3RydWN0IHBoeV9wb3J0ICpwaHlfZ2V0X3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBcXG4rdm9pZCBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KTtcXG4rXFxuIC8qKlxcbiAgKiBwaHlfbW9kdWxlX2RyaXZlcigpIC0gSGVscGVyIG1hY3JvIGZvciByZWdpc3RlcmluZyBQSFkgZHJpdmVyc1xcbiAgKiBAX19waHlfZHJpdmVyczogYXJyYXkgb2YgUEhZIGRyaXZlcnMgdG8gcmVnaXN0ZXJcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oIGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXFxuaW5kZXggOTU1NzVmNjhkNWJjNzEuLjk1NjI5MTEyMjA0ZWE5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxcbkBAIC0xMywxNCArMTMsMTkgQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGh0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXFx1MDAzZVxcbiBcXG4gc3RydWN0IHhhcnJheTtcXG4gc3RydWN0IHBoeV9kZXZpY2U7XFxuK3N0cnVjdCBwaHlfcG9ydDtcXG4gc3RydWN0IHNmcF9idXM7XFxuIFxcbiBzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kge1xcbiBcXHRzdHJ1Y3QgeGFycmF5IHBoeXM7XFxuIFxcdHUzMiBuZXh0X3BoeV9pbmRleDtcXG4rXFxuK1xcdHN0cnVjdCB4YXJyYXkgcG9ydHM7XFxuK1xcdHUzMiBuZXh0X3BvcnRfaW5kZXg7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgcGh5X2RldmljZV9ub2RlIHtcXG5AQCAtNDgsNiArNTMsOSBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcbiB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcXG4gXFxuK2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XFxuK3ZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpO1xcbitcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqXFxuIHBoeV9saW5rX3RvcG9fZ2V0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcGh5aW5kZXgpXFxuIHtcXG5AQCAtNjQsNiArNzIsMjAgQEAgcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcXG4gXFx0cmV0dXJuIE5VTEw7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9wb3J0ICpcXG4rcGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZClcXG4re1xcbitcXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXFx1MDAzZWxpbmtfdG9wbztcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAoIXRvcG8pXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0LyogQ2FsbGVyIG11c3QgaG9sZCBSVE5MIHdoaWxlIGhhbmRsaW5nIHRoZSBwaHlfcG9ydCAqL1xcbitcXHRyZXR1cm4geGFfbG9hZChcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMsIHBvcnRfaWQpO1xcbit9XFxuK1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG5AQCAtNzcsMTEgKzk5LDI4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4ge1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbit7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKlxcbiBwaHlfbGlua190b3BvX2dldF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBoeWluZGV4KVxcbiB7XFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXFxuK3BoeV9saW5rX3RvcG9fZ2V0X3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHBvcnRfaWQpXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4gI2VuZGlmXFxuIFxcbiAjZW5kaWYgLyogX19QSFlfTElOS19UT1BPTE9HWV9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaCBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxcbmluZGV4IDBlZjBmNWNlNDcwOTI2Li5lM2E0MWNlZGViZGNmYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcXG5AQCAtMzYsOSArMzYsMTIgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7XFxuIC8qKlxcbiAgKiBzdHJ1Y3QgcGh5X3BvcnQgLSBBIHJlcHJlc2VudGF0aW9uIG9mIGEgbmV0d29yayBkZXZpY2UgcGh5c2ljYWwgaW50ZXJmYWNlXFxuICAqXFxuKyAqIEBpZDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwb3J0IHdpdGhpbiB0aGUgdG9wb2xvZ3lcXG4gICogQGhlYWQ6IFVzZWQgYnkgdGhlIHBvcnQncyBwYXJlbnQgdG8gbGlzdCBwb3J0c1xcbiAgKiBAcGFyZW50X3R5cGU6IFRoZSB0eXBlIG9mIGRldmljZSB0aGlzIHBvcnQgaXMgZGlyZWN0bHkgY29ubmVjdGVkIHRvXFxuICAqIEBwaHk6IElmIHRoZSBwYXJlbnQgaXMgUEhZX1BPUlRfUEhZREVWLCB0aGUgUEhZIGNvbnRyb2xsaW5nIHRoYXQgcG9ydFxcbisgKiBAdXBzdHJlYW1fcG9ydDogRm9yIG5vbi1NSUkgcG9ydHMsIGluZGljYXRlcyB0aGUgTUlJIHBvcnQgdGhhdCBmZWVkcyB0aGlzXFxuKyAqXFx0XFx0ICAgcG9ydCwgZS5nLiB0aGUgU0ZQIGNhZ2UgcG9ydCBmb3IgYSBTRlAgbW9kdWxlIHBvcnQuXFxuICAqIEBvcHM6IENhbGxiYWNrIG9wcyBpbXBsZW1lbnRlZCBieSB0aGUgcG9ydCBjb250cm9sbGVyXFxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxcbiAgKiBAbWVkaXVtczogQml0bWFzayBvZiB0aGUgcGh5c2ljYWwgbWVkaXVtcyB0aGlzIHBvcnQgcHJvdmlkZXMgYWNjZXNzIHRvXFxuQEAgLTUyLDExICs1NSwxMyBAQCBzdHJ1Y3QgcGh5X3BvcnRfb3BzIHtcXG4gICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuXFxuICAqL1xcbiBzdHJ1Y3QgcGh5X3BvcnQge1xcbitcXHR1MzIgaWQ7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgaGVhZDtcXG4gXFx0ZW51bSBwaHlfcG9ydF9wYXJlbnQgcGFyZW50X3R5cGU7XFxuIFxcdHVuaW9uIHtcXG4gXFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeTtcXG4gXFx0fTtcXG4rXFx0dTMyIHVwc3RyZWFtX3BvcnQ7XFxuIFxcbiBcXHRjb25zdCBzdHJ1Y3QgcGh5X3BvcnRfb3BzICpvcHM7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxcbmluZGV4IDgxMzRiYWY3ODYwZjNjLi5mOWQ4Nzk0ZWFiYzE5MCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2xfbmV0bGlua19nZW5lcmF0ZWQuaFxcbkBAIC03OCw2ICs3OCwxMSBAQCBlbnVtIGV0aHRvb2xfcHNlX2V2ZW50IHtcXG4gXFx0RVRIVE9PTF9QU0VfRVZFTlRfU1dfUFdfQ09OVFJPTF9FUlJPUiA9IDY0LFxcbiB9O1xcbiBcXG4rZW51bSBldGh0b29sX3BvcnRfdHlwZSB7XFxuK1xcdEVUSFRPT0xfUE9SVF9UWVBFX01ESSxcXG4rXFx0RVRIVE9PTF9QT1JUX1RZUEVfU0ZQLFxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdEVUSFRPT0xfQV9IRUFERVJfVU5TUEVDLFxcbiBcXHRFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWCxcXG5AQCAtODQwLDYgKzg0NSwxOCBAQCBlbnVtIHtcXG4gXFx0RVRIVE9PTF9BX01TRV9NQVggPSAoX19FVEhUT09MX0FfTVNFX0NOVCAtIDEpXFxuIH07XFxuIFxcbitlbnVtIHtcXG4rXFx0RVRIVE9PTF9BX1BPUlRfSEVBREVSID0gMSxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfSUQsXFxuK1xcdEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsXFxuK1xcdEVUSFRPT0xfQV9QT1JUX1RZUEUsXFxuK1xcdEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsXFxuK1xcbitcXHRfX0VUSFRPT0xfQV9QT1JUX0NOVCxcXG4rXFx0RVRIVE9PTF9BX1BPUlRfTUFYID0gKF9fRVRIVE9PTF9BX1BPUlRfQ05UIC0gMSlcXG4rfTtcXG4rXFxuIGVudW0ge1xcbiBcXHRFVEhUT09MX01TR19VU0VSX05PTkUgPSAwLFxcbiBcXHRFVEhUT09MX01TR19TVFJTRVRfR0VUID0gMSxcXG5AQCAtODkzLDYgKzkxMCw3IEBAIGVudW0ge1xcbiBcXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCxcXG4gXFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9BQ1QsXFxuIFxcdEVUSFRPT0xfTVNHX01TRV9HRVQsXFxuK1xcdEVUSFRPT0xfTVNHX1BPUlRfR0VULFxcbiBcXG4gXFx0X19FVEhUT09MX01TR19VU0VSX0NOVCxcXG4gXFx0RVRIVE9PTF9NU0dfVVNFUl9NQVggPSAoX19FVEhUT09MX01TR19VU0VSX0NOVCAtIDEpXFxuQEAgLTk1NCw2ICs5NzIsNyBAQCBlbnVtIHtcXG4gXFx0RVRIVE9PTF9NU0dfUlNTX0NSRUFURV9OVEYsXFxuIFxcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfTlRGLFxcbiBcXHRFVEhUT09MX01TR19NU0VfR0VUX1JFUExZLFxcbitcXHRFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSxcXG4gXFxuIFxcdF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCxcXG4gXFx0RVRIVE9PTF9NU0dfS0VSTkVMX01BWCA9IChfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQgLSAxKVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggYzFjMWJlMWE2OTYyZmUuLmIzNmNjNWM0NzgxNmE0IDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2Rldi5jXFxuKysrIGIvbmV0L2NvcmUvZGV2LmNcXG5AQCAtMTEzMTUsNiArMTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXFx1MDAyNlxcdTAwMjYgdG9wbykge1xcbiBcXHRcXHR4YV9kZXN0cm95KFxcdTAwMjZ0b3BvLVxcdTAwM2VwaHlzKTtcXG4rXFx0XFx0eGFfZGVzdHJveShcXHUwMDI2dG9wby1cXHUwMDNlcG9ydHMpO1xcbiBcXHRcXHRrZnJlZSh0b3BvKTtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VsaW5rX3RvcG8gPSBOVUxMO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL01ha2VmaWxlIGIvbmV0L2V0aHRvb2wvTWFrZWZpbGVcXG5pbmRleCA2MjljMTA5MTY2NzBlYy4uOWI1YjA5NjcwMDA4MTEgMTAwNjQ0XFxuLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGVcXG4rKysgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxcbkBAIC05LDQgKzksNCBAQCBldGh0b29sX25sLXlcXHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxcXFxuIFxcdFxcdCAgIGNoYW5uZWxzLm8gY29hbGVzY2UubyBwYXVzZS5vIGVlZS5vIHRzaW5mby5vIGNhYmxldGVzdC5vIFxcXFxcXG4gXFx0XFx0ICAgdHVubmVscy5vIGZlYy5vIGVlcHJvbS5vIHN0YXRzLm8gcGhjX3ZjbG9ja3MubyBtbS5vIFxcXFxcXG4gXFx0XFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxcXFxuLVxcdFxcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm9cXG4rXFx0XFx0ICAgcGh5Lm8gdHNjb25maWcubyBtc2UubyBwb3J0Lm9cXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXFxuaW5kZXggMWFmMzk1YjU0MzMwZTIuLmMwNzZjMDdkMGEwODBjIDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuY1xcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xcbkBAIC0yNiw2ICsyNiw4IEBAIHN0YXRpYyB1MzIgZXRobmxfYmNhc3Rfc2VxO1xcbiBcXHRcXHRcXHQgICAgIEVUSFRPT0xfRkxBR19PTUlUX1JFUExZKVxcbiAjZGVmaW5lIEVUSFRPT0xfRkxBR1NfU1RBVFMgKEVUSFRPT0xfRkxBR1NfQkFTSUMgfCBFVEhUT09MX0ZMQUdfU1RBVFMpXFxuIFxcbitjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXSBfX3JvX2FmdGVyX2luaXQ7XFxuK1xcbiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W10gPSB7XFxuIFxcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIFxcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9OQU1FXVxcdD0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLFxcbkBAIC00MzEsNiArNDMzLDcgQEAgZXRobmxfZGVmYXVsdF9yZXF1ZXN0c1tfX0VUSFRPT0xfTVNHX1VTRVJfQ05UXSA9IHtcXG4gXFx0W0VUSFRPT0xfTVNHX1RTQ09ORklHX1NFVF1cXHQ9IFxcdTAwMjZldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcyxcXG4gXFx0W0VUSFRPT0xfTVNHX1BIWV9HRVRdXFx0XFx0PSBcXHUwMDI2ZXRobmxfcGh5X3JlcXVlc3Rfb3BzLFxcbiBcXHRbRVRIVE9PTF9NU0dfTVNFX0dFVF1cXHRcXHQ9IFxcdTAwMjZldGhubF9tc2VfcmVxdWVzdF9vcHMsXFxuK1xcdFtFVEhUT09MX01TR19QT1JUX0dFVF1cXHRcXHQ9IFxcdTAwMjZldGhubF9wb3J0X3JlcXVlc3Rfb3BzLFxcbiB9O1xcbiBcXG4gc3RhdGljIHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5AQCAtMTU3Miw2ICsxNTc1LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9vcHMgZXRodG9vbF9nZW5sX29wc1tdID0ge1xcbiBcXHRcXHQucG9saWN5ID0gZXRobmxfbXNlX2dldF9wb2xpY3ksXFxuIFxcdFxcdC5tYXhhdHRyID0gQVJSQVlfU0laRShldGhubF9tc2VfZ2V0X3BvbGljeSkgLSAxLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5jbWRcXHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VULFxcbitcXHRcXHQuZG9pdFxcdD0gZXRobmxfZGVmYXVsdF9kb2l0LFxcbitcXHRcXHQuc3RhcnRcXHQ9IGV0aG5sX3BvcnRfZHVtcF9zdGFydCxcXG4rXFx0XFx0LmR1bXBpdFxcdD0gZXRobmxfcG9ydF9kdW1waXQsXFxuK1xcdFxcdC5kb25lXFx0PSBldGhubF9wb3J0X2R1bXBfZG9uZSxcXG4rXFx0XFx0LnBvbGljeSA9IGV0aG5sX3BvcnRfZ2V0X3BvbGljeSxcXG4rXFx0XFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX3BvcnRfZ2V0X3BvbGljeSkgLSAxLFxcbitcXHR9LFxcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0ge1xcbkBAIC0xNTk0LDEwICsxNjA2LDIzIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgZXRodG9vbF9nZW5sX2ZhbWlseSBfX3JvX2FmdGVyX2luaXQgPSB7XFxuIFxcbiAvKiBtb2R1bGUgc2V0dXAgKi9cXG4gXFxuK3N0YXRpYyB2b2lkIF9faW5pdCBldGhubF9waHlfbmFtZXNfcG9wdWxhdGUodm9pZClcXG4re1xcbitcXHRjb25zdCBjaGFyICpuYW1lO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBQSFlfSU5URVJGQUNFX01PREVfTUFYOyBpKyspIHtcXG4rXFx0XFx0bmFtZSA9IHBoeV9tb2RlcyhpKTtcXG4rXFx0XFx0c3Ryc2NweShwaHlfaW50ZXJmYWNlX25hbWVzW2ldLCBuYW1lLCBFVEhfR1NUUklOR19MRU4pO1xcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgX19pbml0IGV0aG5sX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4rXFx0ZXRobmxfcGh5X25hbWVzX3BvcHVsYXRlKCk7XFxuK1xcbiBcXHRyZXQgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseShcXHUwMDI2ZXRodG9vbF9nZW5sX2ZhbWlseSk7XFxuIFxcdGlmIChXQVJOKHJldCBcXHUwMDNjIDAsIFxcXCJldGh0b29sOiBnZW5ldGxpbmsgZmFtaWx5IHJlZ2lzdHJhdGlvbiBmYWlsZWRcXFwiKSlcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5oIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXFxuaW5kZXggM2U5NjlhMDcwZjlmZTQuLmIyNTBlOGI1YzRkNDc1IDEwMDY0NFxcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuaFxcbkBAIC01LDExICs1LDE1IEBAXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbF9uZXRsaW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2dlbmV0bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L3NvY2suaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBldGhubF9yZXFfaW5mbztcXG4gXFxuK2V4dGVybiBjaGFyIHBoeV9pbnRlcmZhY2VfbmFtZXNbUEhZX0lOVEVSRkFDRV9NT0RFX01BWF1bRVRIX0dTVFJJTkdfTEVOXTtcXG4rXFxuK3UzMiBldGhubF9iY2FzdF9zZXFfbmV4dCh2b2lkKTtcXG4gaW50IGV0aG5sX3BhcnNlX2hlYWRlcl9kZXZfZ2V0KHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuIFxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpuZXN0LCBzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuQEAgLTQ3NCw2ICs0NzgsNyBAQCBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21tX3JlcXVlc3Rfb3BzO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BoeV9yZXF1ZXN0X29wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcztcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9tc2VfcmVxdWVzdF9vcHM7XFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfcG9ydF9yZXF1ZXN0X29wcztcXG4gXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5W0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lfc3RhdHNbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xcbkBAIC01MzAsNiArNTM1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICsgMV07XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19nZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19IRUFERVIgKyAxXTtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX3NldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX01BWCArIDFdO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgKyAxXTtcXG4rZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BvcnRfZ2V0X3BvbGljeVtFVEhUT09MX0FfUE9SVF9JRCArIDFdO1xcbiBcXG4gaW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcXG4gaW50IGV0aG5sX2FjdF9jYWJsZV90ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xcbkBAIC01NDUsNiArNTUxLDkgQEAgaW50IGV0aG5sX3RzaW5mb19kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG4gaW50IGV0aG5sX3RzaW5mb19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuIGludCBldGhubF9yc3NfY3JlYXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuIGludCBldGhubF9yc3NfZGVsZXRlX2RvaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XFxuK2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcXG4raW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuK2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IGNoYXIgc3RhdHNfc3RkX25hbWVzW19fRVRIVE9PTF9TVEFUU19DTlRdW0VUSF9HU1RSSU5HX0xFTl07XFxuIGV4dGVybiBjb25zdCBjaGFyIHN0YXRzX2V0aF9waHlfbmFtZXNbX19FVEhUT09MX0FfU1RBVFNfRVRIX1BIWV9DTlRdW0VUSF9HU1RSSU5HX0xFTl07XFxuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BvcnQuYyBiL25ldC9ldGh0b29sL3BvcnQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFiMmNjMDVkZjlmOTBhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL25ldC9ldGh0b29sL3BvcnQuY1xcbkBAIC0wLDAgKzEsMzc1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogQ29weXJpZ2h0IDIwMjYgQm9vdGxpblxcbisgKi9cXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeV9wb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJiaXRzZXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImNvbW1vbi5oXFxcIlxcbisjaW5jbHVkZSBcXFwibmV0bGluay5oXFxcIlxcbitcXG4rc3RydWN0IHBvcnRfcmVxX2luZm8ge1xcbitcXHRzdHJ1Y3QgZXRobmxfcmVxX2luZm8gYmFzZTtcXG4rXFx0dTMyIHBvcnRfaWQ7XFxuK307XFxuK1xcbitzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhIHtcXG4rXFx0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGFcXHRiYXNlO1xcbitcXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpO1xcbitcXHRERUNMQVJFX1BIWV9JTlRFUkZBQ0VfTUFTSyhpbnRlcmZhY2VzKTtcXG4rXFx0dTMyIHBvcnRfaWQ7XFxuK1xcdGJvb2wgbWlpO1xcbitcXHRib29sIHNmcDtcXG4rXFx0dTMyIHVwc3RyZWFtX3BvcnQ7XFxuK307XFxuK1xcbisjZGVmaW5lIFBPUlRfUkVRSU5GTyhfX3JlcV9iYXNlKSBcXFxcXFxuK1xcdGNvbnRhaW5lcl9vZihfX3JlcV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXFfaW5mbywgYmFzZSlcXG4rXFxuKyNkZWZpbmUgUE9SVF9SRVBEQVRBKF9fcmVwbHlfYmFzZSkgXFxcXFxcbitcXHRjb250YWluZXJfb2YoX19yZXBseV9iYXNlLCBzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhLCBiYXNlKVxcbitcXG4rY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcG9ydF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QT1JUX0lEICsgMV0gPSB7XFxuK1xcdFtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXFxuK1xcdFtFVEhUT09MX0FfUE9SVF9JRF0gPSBOTEFfUE9MSUNZX01JTihOTEFfVTMyLCAxKSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcG9ydF9wYXJzZV9yZXF1ZXN0KHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0YixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcV9pbmZvICpyZXF1ZXN0ID0gUE9SVF9SRVFJTkZPKHJlcV9pbmZvKTtcXG4rXFxuK1xcdGlmIChHRU5MX1JFUV9BVFRSX0NIRUNLKGluZm8sIEVUSFRPT0xfQV9QT1JUX0lEKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXF1ZXN0LVxcdTAwM2Vwb3J0X2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BPUlRfSURdKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBvcnRfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEsXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4re1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcXG4rXFx0c3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcXVlc3QgPSBQT1JUX1JFUUlORk8ocmVxX2luZm8pO1xcbitcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuK1xcbitcXHQvKiBSVE5MIG11c3QgYmUgaGVsZCB3aGlsZSBob2xkaW5nIGEgcmVmIHRvIHRoZSBwaHlfcG9ydC4gSGVyZSwgY2FsbGVyXFxuK1xcdCAqIGhvbGRzIFJUTkwuXFxuK1xcdCAqL1xcbitcXHRwb3J0ID0gcGh5X2xpbmtfdG9wb19nZXRfcG9ydChyZXFfaW5mby1cXHUwMDNlZGV2LCByZXF1ZXN0LVxcdTAwM2Vwb3J0X2lkKTtcXG4rXFx0aWYgKCFwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdGxpbmttb2RlX2NvcHkocmVwbHktXFx1MDAzZXN1cHBvcnRlZCwgcG9ydC1cXHUwMDNlc3VwcG9ydGVkKTtcXG4rXFx0cGh5X2ludGVyZmFjZV9jb3B5KHJlcGx5LVxcdTAwM2VpbnRlcmZhY2VzLCBwb3J0LVxcdTAwM2VpbnRlcmZhY2VzKTtcXG4rXFx0cmVwbHktXFx1MDAzZXBvcnRfaWQgPSBwb3J0LVxcdTAwM2VpZDtcXG4rXFx0cmVwbHktXFx1MDAzZW1paSA9IHBvcnQtXFx1MDAzZWlzX21paTtcXG4rXFx0cmVwbHktXFx1MDAzZXNmcCA9IHBvcnQtXFx1MDAzZWlzX3NmcDtcXG4rXFx0cmVwbHktXFx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwb3J0LVxcdTAwM2V1cHN0cmVhbV9wb3J0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcG9ydF9yZXBseV9zaXplKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKVxcbit7XFxuK1xcdGJvb2wgY29tcGFjdCA9IHJlcV9pbmZvLVxcdTAwM2VmbGFncyBcXHUwMDI2IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEgKnJlcGx5ID0gUE9SVF9SRVBEQVRBKHJlcGx5X2RhdGEpO1xcbitcXHRzaXplX3Qgc2l6ZSA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBFVEhUT09MX0FfUE9SVF9JRCAqL1xcbitcXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcXG4rXFxuK1xcdGlmICghcmVwbHktXFx1MDAzZW1paSkge1xcbitcXHRcXHQvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMgKi9cXG4rXFx0XFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXFx1MDAzZXN1cHBvcnRlZCwgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0X19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLFxcbitcXHRcXHRcXHRcXHRcXHRsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHNpemUgKz0gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFUyAqL1xcbitcXHRcXHRyZXQgPSBldGhubF9iaXRzZXRfc2l6ZShyZXBseS1cXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcXG4rXFx0XFx0XFx0XFx0XFx0UEhZX0lOVEVSRkFDRV9NT0RFX01BWCxcXG4rXFx0XFx0XFx0XFx0XFx0cGh5X2ludGVyZmFjZV9uYW1lcywgY29tcGFjdCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0c2l6ZSArPSByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEVUSFRPT0xfQV9QT1JUX1RZUEUgKi9cXG4rXFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFxuK1xcbitcXHQvKiBFVEhUT09MX0FfUE9SVF9VUFNUUkVBTV9QT1JUICovXFxuK1xcdGlmIChyZXBseS1cXHUwMDNldXBzdHJlYW1fcG9ydClcXG4rXFx0XFx0c2l6ZSArPSBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSk7XFxuK1xcbitcXHRyZXR1cm4gc2l6ZTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwb3J0X2ZpbGxfcmVwbHkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEpXFxuK3tcXG4rXFx0Ym9vbCBjb21wYWN0ID0gcmVxX2luZm8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgRVRIVE9PTF9GTEFHX0NPTVBBQ1RfQklUU0VUUztcXG4rXFx0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XFxuK1xcdGludCByZXQsIHBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX01ESTtcXG4rXFxuK1xcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS1cXHUwMDNlcG9ydF9pZCkpXFxuK1xcdFxcdHJldHVybiAtRU1TR1NJWkU7XFxuK1xcbitcXHRpZiAoIXJlcGx5LVxcdTAwM2VtaWkpIHtcXG4rXFx0XFx0cmV0ID0gZXRobmxfcHV0X2JpdHNldChza2IsIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHJlcGx5LVxcdTAwM2VzdXBwb3J0ZWQsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gZXRobmxfcHV0X2JpdHNldChza2IsIEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcmVwbHktXFx1MDAzZWludGVyZmFjZXMsIE5VTEwsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBQSFlfSU5URVJGQUNFX01PREVfTUFYLFxcbitcXHRcXHRcXHRcXHQgICAgICAgcGh5X2ludGVyZmFjZV9uYW1lcywgY29tcGFjdCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAocmVwbHktXFx1MDAzZW1paSB8fCByZXBseS1cXHUwMDNlc2ZwKVxcbitcXHRcXHRwb3J0X3R5cGUgPSBFVEhUT09MX1BPUlRfVFlQRV9TRlA7XFxuK1xcbitcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBFVEhUT09MX0FfUE9SVF9UWVBFLCBwb3J0X3R5cGUpKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0aWYgKHJlcGx5LVxcdTAwM2V1cHN0cmVhbV9wb3J0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsXFxuK1xcdFxcdFxcdHJlcGx5LVxcdTAwM2V1cHN0cmVhbV9wb3J0KSlcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdHJ1Y3QgcG9ydF9kdW1wX2N0eCB7XFxuK1xcdHN0cnVjdCBwb3J0X3JlcV9pbmZvXFx0KnJlcV9pbmZvO1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhXFx0KnJlcGx5X2RhdGE7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRpZmluZGV4O1xcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0cG9zX2lmaW5kZXg7XFxuK1xcdHVuc2lnbmVkIGxvbmdcXHRcXHRwb3NfcG9ydGlkO1xcbit9O1xcbitcXG4rc3RhdGljIHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpcXG4rcG9ydF9kdW1wX2N0eF9nZXQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbit7XFxuK1xcdHJldHVybiAoc3RydWN0IHBvcnRfZHVtcF9jdHggKiljYi1cXHUwMDNlY3R4O1xcbit9XFxuK1xcbitpbnQgZXRobmxfcG9ydF9kdW1wX3N0YXJ0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVxcdTAwM2VpbmZvLmF0dHJzO1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseV9kYXRhO1xcbitcXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxX2luZm87XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKCpjdHgpIFxcdTAwM2Ugc2l6ZW9mKGNiLVxcdTAwM2VjdHgpKTtcXG4rXFxuK1xcdHJlcV9pbmZvID0ga3phbGxvY19vYmooKnJlcV9pbmZvKTtcXG4rXFx0aWYgKCFyZXFfaW5mbylcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXBseV9kYXRhID0ga21hbGxvY19vYmooKnJlcGx5X2RhdGEpO1xcbitcXHRpZiAoIXJlcGx5X2RhdGEpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBmcmVlX3JlcV9pbmZvO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChcXHUwMDI2cmVxX2luZm8tXFx1MDAzZWJhc2UsIHRiW0VUSFRPT0xfQV9QT1JUX0hFQURFUl0sXFxuK1xcdFxcdFxcdFxcdFxcdCBnZW5sX2luZm9fbmV0KFxcdTAwMjZpbmZvLVxcdTAwM2VpbmZvKSxcXG4rXFx0XFx0XFx0XFx0XFx0IGluZm8tXFx1MDAzZWluZm8uZXh0YWNrLCBmYWxzZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGZyZWVfcmVwX2RhdGE7XFxuK1xcbitcXHRjdHgtXFx1MDAzZWlmaW5kZXggPSAwO1xcbitcXHRjdHgtXFx1MDAzZXBvc19pZmluZGV4ID0gMDtcXG4rXFxuK1xcdC8qIEZvciBmaWx0ZXJlZCBEVU1QIHJlcXVlc3RzLCBsZXQncyBqdXN0IHN0b3JlIHRoZSBpZmluZGV4LiBXZSdsbCBjaGVja1xcbitcXHQgKiBhZ2FpbiBpZiB0aGUgbmV0ZGV2IGlzIHN0aWxsIHRoZXJlIHdoZW4gbG9vcGluZyBvdmVyIHRoZSBuZXRkZXYgbGlzdFxcbitcXHQgKiBpbiB0aGUgRFVNUCBsb29wLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldikge1xcbitcXHRcXHRjdHgtXFx1MDAzZWlmaW5kZXggPSByZXFfaW5mby1cXHUwMDNlYmFzZS5kZXYtXFx1MDAzZWlmaW5kZXg7XFxuK1xcdFxcdG5ldGRldl9wdXQocmVxX2luZm8tXFx1MDAzZWJhc2UuZGV2LCBcXHUwMDI2cmVxX2luZm8tXFx1MDAzZWJhc2UuZGV2X3RyYWNrZXIpO1xcbitcXHRcXHRyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRjdHgtXFx1MDAzZXJlcV9pbmZvID0gcmVxX2luZm87XFxuK1xcdGN0eC1cXHUwMDNlcmVwbHlfZGF0YSA9IHJlcGx5X2RhdGE7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2ZyZWVfcmVwX2RhdGE6XFxuK1xcdGtmcmVlKHJlcGx5X2RhdGEpO1xcbitmcmVlX3JlcV9pbmZvOlxcbitcXHRrZnJlZShyZXFfaW5mbyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBvcnRfZHVtcF9vbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXHR2b2lkICplaGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZWhkciA9IGV0aG5sX2R1bXBfcHV0KHNrYiwgY2IsIEVUSFRPT0xfTVNHX1BPUlRfR0VUX1JFUExZKTtcXG4rXFx0aWYgKCFlaGRyKVxcbitcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbitcXG4rXFx0bWVtc2V0KGN0eC1cXHUwMDNlcmVwbHlfZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpKTtcXG4rXFx0Y3R4LVxcdTAwM2VyZXBseV9kYXRhLVxcdTAwM2ViYXNlLmRldiA9IGRldjtcXG4rXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcXG4rXFxuK1xcdHJldCA9IHBvcnRfcHJlcGFyZV9kYXRhKFxcdTAwMjZjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLCBcXHUwMDI2Y3R4LVxcdTAwM2VyZXBseV9kYXRhLVxcdTAwM2ViYXNlLFxcbitcXHRcXHRcXHRcXHRnZW5sX2luZm9fZHVtcChjYikpO1xcbitcXG4rXFx0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcXG4rXFx0cnRubF91bmxvY2soKTtcXG4rXFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IGV0aG5sX2ZpbGxfcmVwbHlfaGVhZGVyKHNrYiwgZGV2LCBFVEhUT09MX0FfUE9SVF9IRUFERVIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBwb3J0X2ZpbGxfcmVwbHkoc2tiLCBcXHUwMDI2Y3R4LVxcdTAwM2VyZXFfaW5mby1cXHUwMDNlYmFzZSwgXFx1MDAyNmN0eC1cXHUwMDNlcmVwbHlfZGF0YS1cXHUwMDNlYmFzZSk7XFxuK1xcbitvdXQ6XFxuK1xcdGN0eC1cXHUwMDNlcmVwbHlfZGF0YS1cXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBlaGRyKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRnZW5sbXNnX2VuZChza2IsIGVoZHIpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwb3J0X2R1bXBfb25lX2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuK3tcXG4rXFx0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4rXFx0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZGV2ID0gY3R4LVxcdTAwM2VyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXY7XFxuK1xcbitcXHRpZiAoIWRldi1cXHUwMDNlbGlua190b3BvKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdHhhX2Zvcl9lYWNoX3N0YXJ0KFxcdTAwMjZkZXYtXFx1MDAzZWxpbmtfdG9wby1cXHUwMDNlcG9ydHMsIGN0eC1cXHUwMDNlcG9zX3BvcnRpZCwgcG9ydCxcXG4rXFx0XFx0XFx0ICBjdHgtXFx1MDAzZXBvc19wb3J0aWQpIHtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VyZXFfaW5mby1cXHUwMDNlcG9ydF9pZCA9IGN0eC1cXHUwMDNlcG9zX3BvcnRpZDtcXG4rXFxuK1xcdFxcdHJldCA9IHBvcnRfZHVtcF9vbmUoc2tiLCBkZXYsIGNiKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0Y3R4LVxcdTAwM2Vwb3NfcG9ydGlkID0gMDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBvcnRfZHVtcF9hbGxfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXFx1MDAzZXNrKTtcXG4rXFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVxcdTAwM2Vwb3NfaWZpbmRleCkge1xcbitcXHRcXHRuZXRkZXZfaG9sZChkZXYsIFxcdTAwMjZkZXZfdHJhY2tlciwgR0ZQX0FUT01JQyk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0XFx0Y3R4LVxcdTAwM2VyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXYgPSBkZXY7XFxuK1xcdFxcdHJldCA9IHBvcnRfZHVtcF9vbmVfZGV2KHNrYiwgY2IpO1xcbitcXG4rXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldl90cmFja2VyKTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VyZXFfaW5mby1cXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xcbitcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRyZXQgPSAwO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IGV0aG5sX3BvcnRfZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgZ2VubF9kdW1waXRfaW5mbyAqaW5mbyA9IGdlbmxfZHVtcGl0X2luZm8oY2IpO1xcbitcXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdGlmIChjdHgtXFx1MDAzZWlmaW5kZXgpIHtcXG4rXFx0XFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XFxuK1xcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuK1xcbitcXHRcXHRkZXYgPSBuZXRkZXZfZ2V0X2J5X2luZGV4KGdlbmxfaW5mb19uZXQoXFx1MDAyNmluZm8tXFx1MDAzZWluZm8pLFxcbitcXHRcXHRcXHRcXHRcXHQgIGN0eC1cXHUwMDNlaWZpbmRleCwgXFx1MDAyNmRldl90cmFja2VyLFxcbitcXHRcXHRcXHRcXHRcXHQgIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIWRldilcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRcXHRjdHgtXFx1MDAzZXJlcV9pbmZvLVxcdTAwM2ViYXNlLmRldiA9IGRldjtcXG4rXFx0XFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XFxuK1xcbitcXHRcXHRuZXRkZXZfcHV0KGRldiwgXFx1MDAyNmRldl90cmFja2VyKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gcG9ydF9kdW1wX2FsbF9kZXYoc2tiLCBjYik7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuK3tcXG4rXFx0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcXG4rXFxuK1xcdGtmcmVlKGN0eC1cXHUwMDNlcmVxX2luZm8pO1xcbitcXHRrZnJlZShjdHgtXFx1MDAzZXJlcGx5X2RhdGEpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9wb3J0X3JlcXVlc3Rfb3BzID0ge1xcbitcXHQucmVxdWVzdF9jbWRcXHRcXHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VULFxcbitcXHQucmVwbHlfY21kXFx0XFx0PSBFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSxcXG4rXFx0Lmhkcl9hdHRyXFx0XFx0PSBFVEhUT09MX0FfUE9SVF9IRUFERVIsXFxuK1xcdC5yZXFfaW5mb19zaXplXFx0XFx0PSBzaXplb2Yoc3RydWN0IHBvcnRfcmVxX2luZm8pLFxcbitcXHQucmVwbHlfZGF0YV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IHBvcnRfcmVwbHlfZGF0YSksXFxuK1xcbitcXHQucGFyc2VfcmVxdWVzdFxcdFxcdD0gcG9ydF9wYXJzZV9yZXF1ZXN0LFxcbitcXHQucHJlcGFyZV9kYXRhXFx0XFx0PSBwb3J0X3ByZXBhcmVfZGF0YSxcXG4rXFx0LnJlcGx5X3NpemVcXHRcXHQ9IHBvcnRfcmVwbHlfc2l6ZSxcXG4rXFx0LmZpbGxfcmVwbHlcXHRcXHQ9IHBvcnRfZmlsbF9yZXBseSxcXG4rfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMDA6NTI6MTMuOTQ4MTE4NTU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MjMxNjAwOTg0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU0ZQXCIsXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlBIWUxJTktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJldGhubF9wb3J0X2R1bXBfc3RhcnRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcGl0XCIsXG4gICAgXCJldGhubF9wb3J0X2R1bXBfZG9uZVwiLFxuICAgIFwicG9ydF9wYXJzZV9yZXF1ZXN0XCIsXG4gICAgXCJwb3J0X3ByZXBhcmVfZGF0YVwiLFxuICAgIFwicG9ydF9yZXBseV9zaXplXCIsXG4gICAgXCJwb3J0X2ZpbGxfcmVwbHlcIixcbiAgICBcInBvcnRfZHVtcF9vbmVfZGV2XCIsXG4gICAgXCJwb3J0X2R1bXBfYWxsX2RldlwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19hZGRfcG9ydFwiLFxuICAgIFwicGh5X2xpbmtfdG9wb19kZWxfcG9ydFwiLFxuICAgIFwicGh5bGlua19jcmVhdGVfc2ZwX2NhZ2VfcG9ydFwiLFxuICAgIFwicGh5bGlua19hZGRfc2ZwX21vZF9wb3J0XCIsXG4gICAgXCJwaHlfYWRkX3NmcF9tb2RfcG9ydFwiLFxuICAgIFwicGh5X3NldHVwX3NmcF9wb3J0XCIsXG4gICAgXCJwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzXCIsXG4gICAgXCJwaHlfc2V0X3Vwc3RyZWFtX3BvcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBldGh0b29sIG5ldGxpbmsgY29tbWFuZCAoRVRIVE9PTF9NU0dfUE9SVF9HRVQpIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UuIEl0IG1vZGlmaWVzIHRoZSBjb3JlIFBIWSBhbmQgcGh5bGluayBzdWJzeXN0ZW1zIHRvIHRyYWNrIGFuZCBleHBvc2UgdGhlc2UgcG9ydHMuIFRoZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIGhpZ2hseSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNDVhOGJhYzAzY2Q4MTY0N2I3YmVjMWU4Yjk5YzE4MWQyYTQ5NmExXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMDA6NTI6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvZXRodG9vbC55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuaW5kZXggNWRkNGQxYjVkOTRiYmIuLmQxMTUxYWYzMzVjYTEwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL2V0aHRvb2wueWFtbFxuQEAgLTIxMCw2ICsyMTAsMTAgQEAgZGVmaW5pdGlvbnM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogZGlzY2FyZFxuICAgICAgICAgdmFsdWU6IDMxXG4rICAtXG4rICAgIG5hbWU6IHBvcnQtdHlwZVxuKyAgICB0eXBlOiBlbnVtXG4rICAgIGVudHJpZXM6IFttZGksIHNmcF1cbiBcbiBhdHRyaWJ1dGUtc2V0czpcbiAgIC1cbkBAIC0xOTA1LDYgKzE5MDksMzIgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgICBuYW1lOiBsaW5rXG4gICAgICAgICB0eXBlOiBuZXN0XG4gICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogbXNlLXNuYXBzaG90XG4rICAtXG4rICAgIG5hbWU6IHBvcnRcbisgICAgYXR0ci1jbnQtbmFtZTogLS1ldGh0b29sLWEtcG9ydC1jbnRcbisgICAgYXR0cmlidXRlczpcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBoZWFkZXJcbisgICAgICAgIHR5cGU6IG5lc3RcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBoZWFkZXJcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBpZFxuKyAgICAgICAgdHlwZTogdTMyXG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLW1vZGVzXG4rICAgICAgICB0eXBlOiBuZXN0XG4rICAgICAgICBuZXN0ZWQtYXR0cmlidXRlczogYml0c2V0XG4rICAgICAgLVxuKyAgICAgICAgbmFtZTogc3VwcG9ydGVkLWludGVyZmFjZXNcbisgICAgICAgIHR5cGU6IG5lc3RcbisgICAgICAgIG5lc3RlZC1hdHRyaWJ1dGVzOiBiaXRzZXRcbisgICAgICAtXG4rICAgICAgICBuYW1lOiB0eXBlXG4rICAgICAgICB0eXBlOiB1MzJcbisgICAgICAgIGVudW06IHBvcnQtdHlwZVxuKyAgICAgIC1cbisgICAgICAgIG5hbWU6IHVwc3RyZWFtLXBvcnRcbisgICAgICAgIHR5cGU6IHUzMlxuIFxuIG9wZXJhdGlvbnM6XG4gICBlbnVtLW1vZGVsOiBkaXJlY3Rpb25hbFxuQEAgLTI4NTksNiArMjg4OSwyNiBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICAgIC0gd29yc3QtY2hhbm5lbFxuICAgICAgICAgICAgIC0gbGlua1xuICAgICAgIGR1bXA6ICptc2UtZ2V0LW9wXG4rICAgIC1cbisgICAgICBuYW1lOiBwb3J0LWdldFxuKyAgICAgIGRvYzogR2V0IHBvcnRzIGF0dGFjaGVkIHRvIGFuIGludGVyZmFjZVxuK1xuKyAgICAgIGF0dHJpYnV0ZS1zZXQ6IHBvcnRcbitcbisgICAgICBkbzogXHUwMDI2cG9ydC1nZXQtb3BcbisgICAgICAgIHJlcXVlc3Q6XG4rICAgICAgICAgIGF0dHJpYnV0ZXM6XG4rICAgICAgICAgICAgLSBoZWFkZXJcbisgICAgICAgICAgICAtIGlkXG4rICAgICAgICByZXBseTpcbisgICAgICAgICAgYXR0cmlidXRlczpcbisgICAgICAgICAgICAtIGhlYWRlclxuKyAgICAgICAgICAgIC0gaWRcbisgICAgICAgICAgICAtIHN1cHBvcnRlZC1tb2Rlc1xuKyAgICAgICAgICAgIC0gc3VwcG9ydGVkLWludGVyZmFjZXNcbisgICAgICAgICAgICAtIHR5cGVcbisgICAgICAgICAgICAtIHVwc3RyZWFtLXBvcnRcbisgICAgICBkdW1wOiAqcG9ydC1nZXQtb3BcbiBcbiBtY2FzdC1ncm91cHM6XG4gICBsaXN0OlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2V0aHRvb2wtbmV0bGluay5yc3RcbmluZGV4IGU5MmFiZjQ1ZmFmNTBkLi5iNDMyNmM4OWIwNzUxZiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ldGh0b29sLW5ldGxpbmsucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXRodG9vbC1uZXRsaW5rLnJzdFxuQEAgLTI1MzcsNiArMjUzNywzOSBAQCBXaXRoaW4gZWFjaCBjaGFubmVsIG5lc3QsIG9ubHkgdGhlIG1ldHJpY3Mgc3VwcG9ydGVkIGJ5IHRoZSBQSFkgd2lsbCBiZSBwcmVzZW50LlxuIFNlZSBgYHN0cnVjdCBwaHlfbXNlX3NuYXBzaG90YGAga2VybmVsIGRvY3VtZW50YXRpb24gaW5cbiBgYGluY2x1ZGUvbGludXgvcGh5LmhgYC5cbiBcbitQT1JUX0dFVFxuKz09PT09PT09XG4rXG4rUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzIG9mIGEgbmV0d29yayBkZXZpY2UsXG4rcmVmZXJyZWQgdG8gYXMgXCJwb3J0c1wiLiBVc2VyIG5lZWRzIHRvIHNwZWNpZnkgYSBQT1JUX0lEIGZvciB0aGUgRE8gb3BlcmF0aW9uLFxuK2luIHdoaWNoIGNhc2UgdGhlIERPIHJlcXVlc3QgcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0aGF0IHNwZWNpZmljIHBvcnQuXG4rXG4rQXMgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgcG9ydCwgdGhlIERVTVAgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIHRvIGxpc3QgdGhlXG4rcG9ydHMgcHJlc2VudCBvbiBhIGdpdmVuIGludGVyZmFjZSwgYnkgcGFzc2luZyBhbiBpbnRlcmZhY2UgaW5kZXggb3IgbmFtZSBpblxuK3RoZSBkdW1wIHJlcXVlc3QuXG4rXG4rUmVxdWVzdCBjb250ZW50czpcbitcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgIG5lc3RlZCAgcmVxdWVzdCBoZWFkZXJcbisgIGBgRVRIVE9PTF9BX1BPUlRfSURgYCAgICAgICAgICAgICAgICAgdTMyICAgICBwb3J0IGlkXG4rICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuK0tlcm5lbCByZXNwb25zZSBjb250ZW50czpcbitcbisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rICBgYEVUSFRPT0xfQV9QT1JUX0hFQURFUmBgICAgICAgICAgICAgICAgbmVzdGVkICByZXF1ZXN0IGhlYWRlclxuKyAgYGBFVEhUT09MX0FfUE9SVF9JRGBgICAgICAgICAgICAgICAgICAgIHUzMiAgICAgdGhlIHBvcnQncyB1bmlxdWUgaWRlbnRpZmllcixcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlciBuZXRkZXZpY2UuXG4rICBgYEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFU2BgICAgICAgYml0c2V0ICBiaXRzZXQgb2Ygc3VwcG9ydGVkIGxpbmttb2Rlc1xuKyAgYGBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfSU5URVJGQUNFU2BgIGJpdHNldCAgYml0c2V0IG9mIHN1cHBvcnRlZCBNSUlcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZXNcbisgIGBgRVRIVE9PTF9BX1BPUlRfVFlQRWBgICAgICAgICAgICAgICAgICB1MzIgICAgIHRoZSBwb3J0IHR5cGVcbisgIGBgRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVGBgICAgICAgICB1MzIgICAgIElmIGFueSwgdGhlIGluZGV4IG9mIHRoZSBNSUlcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgdGhhdCBmZWVkcyBpbnRvIHRoaXNcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQuXG4rICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuK1xuIFJlcXVlc3QgdHJhbnNsYXRpb25cbiA9PT09PT09PT09PT09PT09PT09XG4gXG5AQCAtMjY0Nyw0ICsyNjgwLDUgQEAgYXJlIG5ldGxpbmsgb25seS5cbiAgIG4vYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgRVRIVE9PTF9NU0dfUEhZX0dFVGBgXG4gICBgYFNJT0NHSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX0dFVGBgXG4gICBgYFNJT0NTSFdUU1RBTVBgYCAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1RTQ09ORklHX1NFVGBgXG4rICBuL2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYEVUSFRPT0xfTVNHX1BPUlRfR0VUYGBcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuaW5kZXggNmUyOGQ5MDk0YmNlM2YuLjJhOWIxZWM5M2I3MGY5IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BoeS1wb3J0LnJzdFxuQEAgLTk5LDEzICs5OSwyOSBAQCB3aWxsIGV2ZW50dWFsbHkgYmUgYWJsZSB0byByZXBvcnQgaXRzIG93biBrc2V0dGluZ3M6OlxuICAgICAgICAgICAgIChfX19fXyktLS0tLXwgUG9ydCB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLStcbiBcbitTRlAgcG9ydHNcbis9PT09PT09PT1cbitcbitTRlAgaW50ZXJmYWNlcyBpbnZvbHZlIDIgZGlzdGluY3QgY29tcG9uZW50cywgZWFjaCByZXByZXNlbnRlZCBieVxuK2EgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCBpbnN0YW5jZSA6XG4rXG4rIC0gVGhlIFNGUCBjYWdlIGl0c2VsZiBpcyBhIDpjOnR5cGU6YHN0cnVjdCBwaHlfcG9ydCBcdTAwM2NwaHlfcG9ydFx1MDAzZWAuIEl0J3Mgc3BlY2lhbFxuKyAgIGluIHRoYXQgaXQncyBub3QgYW4gTURJIGludGVyZmFjZSwgYnV0IHJhdGhlciBhIGhvdC1wbHVnZ2FibGUgTUlJLlxuKyAgIFRoZSA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgIGFzc29jaWF0ZWQgdG8gaXQgbGlzdHMgdGhlIGRpZmZlcmVudFxuKyAgIE1JSSBpbnRlcmZhY2VzIHdlIGNhbiB1c2Ugb24gdGhlIGNhZ2UuXG4rXG4rIC0gVGhlIFNGUCBtb2R1bGUsIHdoZW4gaW5zZXJ0ZWQsIHdpbGwgYWxzbyBiZSBhc3NvY2lhdGVkIHRvIGFcbisgICA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgLCB0aGF0IHJlcHJlc2VudHMgdGhlIHZhcmlvdXMgbGlua21vZGVzXG4rICAgdGhhdCBpdCBnaXZlcyBhY2Nlc3MgdG8uIFRoZSBtb2R1bGUncyA6Yzp0eXBlOmBzdHJ1Y3QgcGh5X3BvcnQgXHUwMDNjcGh5X3BvcnRcdTAwM2VgXG4rICAgZG9lc24ndCBzdXBlcnNlZGUgdGhlIGNhZ2UncyBwb3J0LCBpdCByZWZlcmVuY2VzIGl0IHRocm91Z2hcbisgICB0aGUgOmM6dHlwZTpgc3RydWN0IHBoeV9wb3J0IFx1MDAzY3BoeV9wb3J0XHUwMDNlYCA6YzptZW1iZXI6YHVwc3RyZWFtX3BvcnRgIGZpZWxkLlxuK1xuIE5leHQgc3RlcHNcbiA9PT09PT09PT09XG4gXG4tQXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50YXRpb24sIG9ubHkgcG9ydHMgY29udHJvbGxlZCBieSBQSFkgZGV2aWNlcyBhcmVcbi1zdXBwb3J0ZWQuIFRoZSBuZXh0IHN0ZXBzIHdpbGwgYmUgdG8gYWRkIHRoZSBOZXRsaW5rIEFQSSB0byBleHBvc2UgdGhlc2Vcbi10byB1c2Vyc3BhY2UgYW5kIGFkZCBzdXBwb3J0IGZvciByYXcgcG9ydHMgKGNvbnRyb2xsZWQgYnkgc29tZSBmaXJtd2FyZSwgYW5kIGRpcmVjdGx5XG4tbWFuYWdlZCBieSB0aGUgTklDIGRyaXZlcikuXG4rQXMgb2Ygd3JpdGluZyB0aGlzIGRvY3VtZW50YXRpb24sIHRoZSBwb3J0J3MgcHJlc2VuY2UgYW5kIGluZm9ybWF0aW9uIGNhbiBvbmx5XG4rYmUgcXVlcmllZCwgYW5kIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSBhbnkgb2YgdGhlIHBvcnQncyBzZXR0aW5ncyBvciBzZWxlY3Rcbit3aGljaCBvbmUgc2hvdWxkIGJlIHVzZWQuXG4gXG4gQW5vdGhlciBwYXJhbGxlbCB0YXNrIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBNSUkgbXV4aW5nIGZyYW1ld29yayB0byBhbGxvdyB0aGVcbi1jb250cm9sIG9mIG5vbi1QSFkgZHJpdmVyIG11bHRpLXBvcnQgc2V0dXBzLlxuK2NvbnRyb2wgb2Ygbm9uLVBIWSBkcml2ZW4gbXVsdGktcG9ydCBzZXR1cHMuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggMDBlN2IyNmUwYTIzZmEuLmQzMzg4MWVjMWY2MjU1IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtMTg3OTIsNiArMTg3OTIsNyBAQCBGOlx0RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ldGhlcm5ldC1jb25uZWN0b3IueWFtbFxuIEY6XHREb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGh5LXBvcnQucnN0XG4gRjpcdGRyaXZlcnMvbmV0L3BoeS9waHlfcG9ydC5jXG4gRjpcdGluY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuK0Y6XHRuZXQvZXRodG9vbC9wb3J0LmNcbiBLOlx0c3RydWN0XFxzK3BoeV9wb3J0fHBoeV9wb3J0X1xuIFxuIE5FVFdPUktJTkcgW0dFTkVSQUxdXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmggYi9kcml2ZXJzL25ldC9waHkvcGh5LWNhcHMuaFxuaW5kZXggNDIxMDg4ZTZmNmU4ZjEuLmVjM2QzOWEwYWUwNmJmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS1jYXBzLmhcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktY2Fwcy5oXG5AQCAtNjYsNSArNjYsNyBAQCB2b2lkIHBoeV9jYXBzX21lZGl1bV9nZXRfc3VwcG9ydGVkKHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcbiBcdFx0XHRcdCAgIGVudW0gZXRodG9vbF9saW5rX21lZGl1bSBtZWRpdW0sXG4gXHRcdFx0XHQgICBpbnQgbGFuZXMpO1xuIHUzMiBwaHlfY2Fwc19tZWRpdW1zX2Zyb21fbGlua21vZGVzKHVuc2lnbmVkIGxvbmcgKmxpbmttb2Rlcyk7XG4rdm9pZCBwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKHVuc2lnbmVkIGxvbmcgKnRvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmcm9tLFxuK1x0XHRcdFx0ICAgICBjb25zdCB1bnNpZ25lZCBsb25nICppbnRlcmZhY2VzKTtcbiBcbiAjZW5kaWYgLyogX19QSFlfQ0FQU19IICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2NhcHMuY1xuaW5kZXggOTQyZDQzMTkxNTYxZTIuLjU1OGU0ZGY0ZDYzYzA4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9jYXBzLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfY2Fwcy5jXG5AQCAtNDQ1LDMgKzQ0NSwyOSBAQCB1MzIgcGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyh1bnNpZ25lZCBsb25nICpsaW5rbW9kZXMpXG4gXHRyZXR1cm4gbWVkaXVtcztcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5X2NhcHNfbWVkaXVtc19mcm9tX2xpbmttb2Rlcyk7XG4rXG4rLyoqXG4rICogcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcygpIC0gRmlsdGVyIGxpbmttb2RlcyB3aXRoIGFuIGludGVyZmFjZSBsaXN0XG4rICogQHRvOiBTdG9yZXMgdGhlIGZpbHRlcmVkIGxpbmttb2Rlc1xuKyAqIEBmcm9tOiBMaW5rbW9kZXMgdG8gZmlsdGVyXG4rICogQGludGVyZmFjZXM6IEJpdGZpZWxkIG9mIHBoeV9pbnRlcmZhY2VfdCB0aGF0IHdlIHVzZSBmb3IgZmlsdGVyaW5nXG4rICpcbisgKiBGaWx0ZXIgdGhlIHByb3ZpZGVkIGxpbmttb2Rlcywgb25seSB0byBrZWVwIHRoZSBvbmVzIHdlIGNhbiBwb3NzaWJseSBhY2hpZXZlXG4rICogd2hlbiB1c2luZyBhbnkgb2YgdGhlIHByb3ZpZGVkIE1JSSBpbnRlcmZhY2VzLlxuKyAqL1xuK3ZvaWQgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyh1bnNpZ25lZCBsb25nICp0byxcbitcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcbitcdFx0XHRcdCAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqaW50ZXJmYWNlcylcbit7XG4rXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhpZmFjZXNfc3VwcG9ydGVkKSA9IHt9O1xuK1x0dW5zaWduZWQgaW50IGlmYWNlc19jYXBzID0gMDtcbitcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2U7XG4rXG4rXHRmb3JfZWFjaF9zZXRfYml0KGludGVyZmFjZSwgaW50ZXJmYWNlcywgUEhZX0lOVEVSRkFDRV9NT0RFX01BWClcbitcdFx0aWZhY2VzX2NhcHMgfD0gcGh5X2NhcHNfZnJvbV9pbnRlcmZhY2UoaW50ZXJmYWNlKTtcbitcbitcdHBoeV9jYXBzX2xpbmttb2RlcyhpZmFjZXNfY2FwcywgaWZhY2VzX3N1cHBvcnRlZCk7XG4rXG4rXHRsaW5rbW9kZV9hbmQodG8sIGZyb20sIGlmYWNlc19zdXBwb3J0ZWQpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwaHlfY2Fwc19saW5rbW9kZV9maWx0ZXJfaWZhY2VzKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggMDYxNTIyODQ1OWVmNDIuLmQ1MjUxNWU3ZTMwMzAzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE0OTAsMTEgKzE0OTAsMjIgQEAgc3RhdGljIGludCBwaHlfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxuIHtcbiBcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2O1xuK1x0aW50IHJldDtcbiBcbi1cdGlmIChkZXYpXG4tXHRcdHJldHVybiBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHksIFBIWV9VUFNUUkVBTV9QSFksIHBoeWRldik7XG4rXHRwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5ID0gdHJ1ZTtcbitcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbiBcbi1cdHJldHVybiAwO1xuK1x0LyogSWYgd2UgYXJlbid0IGF0dGFjaGVkIHRvIGEgbmV0ZGV2LCB3ZSBjYW4ndCBhZGQgdGhlIFNGUCBQSFkgdG8gaXRzXG4rXHQgKiB0b3BvbG9neS5cbitcdCAqL1xuK1x0aWYgKCFkZXYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcGh5KGRldiwgcGh5LCBQSFlfVVBTVFJFQU1fUEhZLCBwaHlkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cGh5ZGV2LVx1MDAzZWhhc19zZnBfbW9kX3BoeSA9IGZhbHNlO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gLyoqXG5AQCAtMTUxMiw4ICsxNTIzLDEyIEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfZGlzY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4gXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldjtcbiBcbitcdHBoeWRldi1cdTAwM2VoYXNfc2ZwX21vZF9waHkgPSBmYWxzZTtcbitcbiBcdGlmIChkZXYpXG4gXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BoeShkZXYsIHBoeSk7XG4rXG4rXHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5LCBOVUxMKTtcbiB9XG4gXG4gLyoqXG5AQCAtMTYxNyw2ICsxNjMyLDc3IEBAIHN0YXRpYyB2b2lkIHBoeV9zZnBfbGlua19kb3duKHZvaWQgKnVwc3RyZWFtKVxuIFx0XHRwb3J0LVx1MDAzZW9wcy1cdTAwM2VsaW5rX2Rvd24ocG9ydCk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgcGh5X2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRjb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzO1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHQvKiBDcmVhdGUgbW9kIHBvcnQgKi9cbitcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuK1x0aWYgKCFwb3J0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBvcnQtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbitcbitcdGNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbitcbitcdHBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXMocG9ydC1cdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXHUwMDNlbGlua19tb2RlcyxcbitcdFx0XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQtXHUwMDNlaW50ZXJmYWNlcyk7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldikge1xuK1x0XHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYsIHBvcnQpO1xuK1x0XHRpZiAocmV0KSB7XG4rXHRcdFx0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiB3ZSBkb24ndCB1c2UgcGh5X2FkZF9wb3J0KCkgaGVyZSBhcyB0aGUgbW9kdWxlIHBvcnQgaXNuJ3QgYSBkaXJlY3RcbitcdCAqIGludGVyZmFjZSBmcm9tIHRoZSBQSFksIGJ1dCByYXRoZXIgYW4gZXh0ZW5zaW9uIHRvIHRoZSBzZnAtYnVzLCB0aGF0XG4rXHQgKiBpcyBhbHJlYWR5IHJlcHJlc2VudGVkIGJ5IGl0cyBvd24gcGh5X3BvcnRcbitcdCAqL1xuK1x0cGh5ZGV2LVx1MDAzZW1vZF9wb3J0ID0gcG9ydDtcbitcbitcdHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWlkO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBoeV9kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aWYgKCFwaHlkZXYtXHUwMDNlbW9kX3BvcnQpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2KVxuK1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYsIHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4rXG4rXHRwaHlfcG9ydF9kZXN0cm95KHBoeWRldi1cdTAwM2Vtb2RfcG9ydCk7XG4rXHRwaHlkZXYtXHUwMDNlbW9kX3BvcnQgPSBOVUxMO1xuK31cbitcbitzdGF0aWMgaW50IHBoeV9zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuK3tcbitcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcbitcbitcdC8qIElmIHRoZXJlJ3MgYSBkb3duc3RyZWFtIFNGUCBtb2R1bGUsIGFuZCBpdCBkb2Vzbid0IGNvbnRhaW4gYSBQSFlcbitcdCAqIGRldmljZSwgbGV0J3MgY3JlYXRlIGEgcGh5X3BvcnQgdG8gcmVwcmVzZW50IHRoYXQgbW9kdWxlLlxuK1x0ICovXG4rXHRpZiAoIXBoeWRldi1cdTAwM2VoYXNfc2ZwX21vZF9waHkpXG4rXHRcdHJldHVybiBwaHlfYWRkX3NmcF9tb2RfcG9ydChwaHlkZXYpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBoeV9zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXG4re1xuK1x0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuK1xuK1x0LyogQ2FsbGVkIHVwb24gbW9kdWxlIHJlbW92YWwgb3IgdXBzdHJlYW0gcmVtb3ZhbCAqL1xuK1x0aWYgKCFwaHlkZXYtXHUwMDNlaGFzX3NmcF9tb2RfcGh5KVxuK1x0XHRwaHlfZGVsX3NmcF9tb2RfcG9ydChwaHlkZXYpO1xuK31cbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG4gXHQuYXR0YWNoID0gcGh5X3NmcF9hdHRhY2gsXG4gXHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXG5AQCAtMTYyNiw2ICsxNzEyLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHNmcF9waHlkZXZfb3BzID0ge1xuIFx0LmxpbmtfZG93biA9IHBoeV9zZnBfbGlua19kb3duLFxuIFx0LmNvbm5lY3RfcGh5ID0gcGh5X3NmcF9jb25uZWN0X3BoeSxcbiBcdC5kaXNjb25uZWN0X3BoeSA9IHBoeV9zZnBfZGlzY29ubmVjdF9waHksXG4rXHQubW9kdWxlX3N0YXJ0ID0gcGh5X3NmcF9tb2R1bGVfc3RhcnQsXG4rXHQubW9kdWxlX3N0b3AgPSBwaHlfc2ZwX21vZHVsZV9zdG9wLFxuIH07XG4gXG4gc3RhdGljIGludCBwaHlfYWRkX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuQEAgLTE2NzMsMTMgKzE3NjEsMTMgQEAgc3RhdGljIHZvaWQgcGh5X2RlbF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbiBcdHBoeWRldi1cdTAwM2VuX3BvcnRzLS07XG4gfVxuIFxuLXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4rc3RhdGljIHN0cnVjdCBwaHlfcG9ydCAqcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0c3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gcGh5X3BvcnRfYWxsb2MoKTtcbiBcdGludCByZXQ7XG4gXG4gXHRpZiAoIXBvcnQpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcbiBcdHBvcnQtXHUwMDNlcGFyZW50X3R5cGUgPSBQSFlfUE9SVF9QSFk7XG4gXHRwb3J0LVx1MDAzZXBoeSA9IHBoeWRldjtcbkBAIC0xNjk0LDEwICsxNzgyLDEyIEBAIHN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHQgKiB3aGVuIGF0dGFjaGluZyB0aGUgcG9ydCB0byB0aGUgcGh5ZGV2LlxuIFx0ICovXG4gXHRyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0KSB7XG4gXHRcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rXHR9XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIHBvcnQ7XG4gfVxuIFxuIC8qKlxuQEAgLTE3MDYsMjUgKzE3OTYsNDkgQEAgc3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiAgKi9cbiBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBOVUxMO1xuIFx0c3RydWN0IHNmcF9idXMgKmJ1cztcbi1cdGludCByZXQgPSAwO1xuK1x0aW50IHJldDtcbiBcbi1cdGlmIChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKSB7XG4tXHRcdGJ1cyA9IHNmcF9idXNfZmluZF9md25vZGUocGh5ZGV2LVx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XG4tXHRcdGlmIChJU19FUlIoYnVzKSlcbi1cdFx0XHRyZXR1cm4gUFRSX0VSUihidXMpO1xuK1x0aWYgKCFwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKVxuK1x0XHRyZXR1cm4gMDtcbiBcbi1cdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBidXM7XG4rXHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpO1xuK1x0aWYgKElTX0VSUihidXMpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihidXMpO1xuIFxuLVx0XHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgXHUwMDI2c2ZwX3BoeWRldl9vcHMpO1xuLVx0XHRzZnBfYnVzX3B1dChidXMpO1xuK1x0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBidXM7XG4gXG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuK1x0aWYgKGJ1cykge1xuK1x0XHRwb3J0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XG4rXHRcdGlmIChJU19FUlIocG9ydCkpIHtcbitcdFx0XHRyZXQgPSBQVFJfRVJSKHBvcnQpO1xuK1x0XHRcdHBvcnQgPSBOVUxMO1xuK1x0XHRcdGdvdG8gb3V0X3NmcDtcbitcdFx0fVxuIFx0fVxuIFxuLVx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKVxuLVx0XHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbitcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dF9wb3J0O1xuK1xuK1x0Lyogc2ZwX2J1c19hZGRfdXBzdHJlYW0oKSBncmFicyBhIHJlZiB0byB0aGUgc2ZwIGJ1cyBvbiBzdWNjZXNzLCBpdCdzXG4rXHQgKiBzYWZlIHRvIHJlbGVhc2UgaXQgbm93LlxuK1x0ICovXG4rXHRzZnBfYnVzX3B1dChidXMpO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBwb3J0O1xuK1xuK1x0cmV0dXJuIHJldDtcbitcbitvdXRfcG9ydDpcbitcdGlmIChwb3J0KSB7XG4rXHRcdHBoeV9kZWxfcG9ydChwaHlkZXYsIHBvcnQpO1xuK1x0XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuK1x0fVxuK291dF9zZnA6XG4rXHRzZnBfYnVzX3B1dChidXMpO1xuK1x0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTgxNSw2ICsxOTI5LDEyIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0XHRlcnIgPSBwaHlfbGlua190b3BvX2FkZF9waHkoZGV2LCBwaHlkZXYsIFBIWV9VUFNUUkVBTV9NQUMsIGRldik7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0Z290byBlcnJvcjtcbitcbitcdFx0aWYgKHBoeWRldi1cdTAwM2Vtb2RfcG9ydCkge1xuK1x0XHRcdGVyciA9IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoZGV2LCBwaHlkZXYtXHUwMDNlbW9kX3BvcnQpO1xuK1x0XHRcdGlmIChlcnIpXG4rXHRcdFx0XHRnb3RvIGVycm9yO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHQvKiBTb21lIEV0aGVybmV0IGRyaXZlcnMgdHJ5IHRvIGNvbm5lY3QgdG8gYSBQSFkgZGV2aWNlIGJlZm9yZVxuQEAgLTE5NTEsNiArMjA3MSw4IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0XHRwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LVx1MDAzZXBoeWRldiA9IE5VTEw7XG4gXHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYgPSBOVUxMO1xuIFx0XHRwaHlfbGlua190b3BvX2RlbF9waHkoZGV2LCBwaHlkZXYpO1xuK1x0XHRpZiAocGh5ZGV2LVx1MDAzZW1vZF9wb3J0KVxuK1x0XHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQoZGV2LCBwaHlkZXYtXHUwMDNlbW9kX3BvcnQpO1xuIFx0fVxuIFxuIFx0cGh5ZGV2LVx1MDAzZXBoeV9saW5rX2NoYW5nZSA9IE5VTEw7XG5AQCAtMzU3OSw2ICszNzAxLDI4IEBAIHN0cnVjdCBwaHlfcG9ydCAqcGh5X2dldF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcbiBcbisvKipcbisgKiBwaHlfc2V0X3Vwc3RyZWFtX3BvcnQoKSAtIFNldHMgdGhlIHBoeV9wb3J0IGNvbnRyb2xsaW5nIHRoZSBNSUkgdGhpcyBQSFkgaXNcbisgKlx0XHRcdCAgICAgYXR0YWNoZWQgdG8uXG4rICogQHBoeWRldjogcG9pbnRlciB0byB0aGUgUEhZIGRldmljZSB3ZSBzZXQgdGhlIHVwc3RyZWFtIG9mLlxuKyAqIEBwb3J0OiBUaGUgcGh5X3BvcnQgdXBzdHJlYW0gb2YgdGhpcyBQSFksIGNhbiBiZSBOVUxMLlxuKyAqL1xuK3ZvaWQgcGh5X3NldF91cHN0cmVhbV9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbit7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKmxvY2FsX3BvcnQ7XG4rXG4rXHRBU1NFUlRfUlROTCgpO1xuK1xuK1x0cGh5ZGV2LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwb3J0O1xuK1xuK1x0cGh5X2Zvcl9lYWNoX3BvcnQocGh5ZGV2LCBsb2NhbF9wb3J0KVxuK1x0XHRpZiAocG9ydClcbitcdFx0XHRsb2NhbF9wb3J0LVx1MDAzZXVwc3RyZWFtX3BvcnQgPSBwb3J0LVx1MDAzZWlkO1xuK1x0XHRlbHNlXG4rXHRcdFx0bG9jYWxfcG9ydC1cdTAwM2V1cHN0cmVhbV9wb3J0ID0gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGh5X3NldF91cHN0cmVhbV9wb3J0KTtcbitcbiAvKipcbiAgKiBmd25vZGVfbWRpb19maW5kX2RldmljZSAtIEdpdmVuIGEgZndub2RlLCBmaW5kIHRoZSBtZGlvX2RldmljZVxuICAqIEBmd25vZGU6IHBvaW50ZXIgdG8gdGhlIG1kaW9fZGV2aWNlJ3MgZndub2RlXG5AQCAtMzgxNyw2ICszOTYxLDcgQEAgc3RhdGljIGludCBwaHlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcbiBcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbiBcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbitcdHBoeWRldi1cdTAwM2VzZnBfY2FnZV9wb3J0ID0gTlVMTDtcbiBcbiBcdHBoeV9jbGVhbnVwX3BvcnRzKHBoeWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY1xuaW5kZXggNDEzNGRlN2FlMzEzZDIuLjVlMTM1YWI2MzZjMGI2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9saW5rX3RvcG9sb2d5LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jXG5AQCAtNyw2ICs3LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfbGlua190b3BvbG9neS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X3BvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuQEAgLTIzLDE3ICsyNCw4MSBAQCBzdGF0aWMgaW50IG5ldGRldl9hbGxvY19waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0eGFfaW5pdF9mbGFncyhcdTAwMjZ0b3BvLVx1MDAzZXBoeXMsIFhBX0ZMQUdTX0FMTE9DMSk7XG4gXHR0b3BvLVx1MDAzZW5leHRfcGh5X2luZGV4ID0gMTtcbiBcbitcdHhhX2luaXRfZmxhZ3MoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgWEFfRkxBR1NfQUxMT0MxKTtcbitcdHRvcG8tXHUwMDNlbmV4dF9wb3J0X2luZGV4ID0gMTtcbitcbiBcdGRldi1cdTAwM2VsaW5rX3RvcG8gPSB0b3BvO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnBoeV9saW5rX3RvcG9fZ2V0X29yX2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmIChkZXYtXHUwMDNlbGlua190b3BvKVxuK1x0XHRyZXR1cm4gZGV2LVx1MDAzZWxpbmtfdG9wbztcbitcbitcdC8qIFRoZSB0b3BvbG9neSBpcyBhbGxvY2F0ZWQgdGhlIGZpcnN0IHRpbWUgd2UgYWRkIGFuIG9iamVjdCB0byBpdC5cbitcdCAqIEl0IGlzIGZyZWVkIGFsb25nc2lkZSB0aGUgbmV0ZGV2LiBJdCBjYW4gYmUgY2FsbGVkIG9uIG11bHRpcGxlXG4rXHQgKiBjb250ZXh0czpcbitcdCAqICAtIEl0IGNhbiBiZSBjYWxsZWQgZnJvbSAucHJvYmUoKSA6IE5vIHJ0bmwsIG5vIG5ldGRldl9sb2NrXG4rXHQgKiAgLSAubmRvX29wZW4oKSA6IHJ0bmwgYW5kIHBvc3NpYmx5IG5ldGRldl9sb2NrXG4rXHQgKiAgLSBTRlAgc3RhdGUgbWFjaGluZSA6IHJ0bmwgaGVsZCBvciBub3RcbitcdCAqXG4rXHQgKiAgSG93ZXZlciwgd2UgY2FuJ3QgcmVhbGx5IGhhdmUgcmFjZXMgOlxuK1x0ICogIC0gSWYgd2UgaGF2ZSBhIFBIWSwgcGh5X2xpbmtfdG9wb19hZGRfcGh5KCkgd2lsbCBhbHdheXMgcnVuIGZpcnN0XG4rXHQgKiAgICBhbmQgdHJpZ2dlciB0aGUgYWxsb2MuIE9ubHkgdGhlbiB0aGUgcG9ydHMgY2FuIGJlIGFkZGVkIHRocm91Z2hcbitcdCAqICAgIHBoeWxpYiBvZiBzZnAuXG4rXHQgKiAgLSBJZiB3ZSBkb24ndCwgdGhlIFNGUCBwb3J0IGZvciB0aGUgY2FnZSBpcyByZWdpc3RlcmVkIGZpcnN0LCBhbmRcbitcdCAqICAgIG9ubHkgdGhlbiBvdGhlciBwb3J0cy9QSFlzIGNhbiBiZSByZWdpc3RlcmVkLlxuK1x0ICovXG4rXHRyZXQgPSBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koZGV2KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4rXG4rXHRyZXR1cm4gZGV2LVx1MDAzZWxpbmtfdG9wbztcbit9XG4rXG4raW50IHBoeV9saW5rX3RvcG9fYWRkX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuK3tcbitcdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbztcbitcdGludCByZXQ7XG4rXG4rXHR0b3BvID0gcGh5X2xpbmtfdG9wb19nZXRfb3JfYWxsb2MoZGV2KTtcbitcdGlmIChJU19FUlIodG9wbykpXG4rXHRcdHJldHVybiBQVFJfRVJSKHRvcG8pO1xuK1xuK1x0LyogQXR0ZW1wdCB0byByZS11c2UgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb3J0X2lkICovXG4rXHRpZiAocG9ydC1cdTAwM2VpZClcbitcdFx0cmV0ID0geGFfaW5zZXJ0KFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMsIHBvcnQtXHUwMDNlaWQsIHBvcnQsIEdGUF9LRVJORUwpO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSB4YV9hbGxvY19jeWNsaWMoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgXHUwMDI2cG9ydC1cdTAwM2VpZCwgcG9ydCxcbitcdFx0XHRcdCAgICAgIHhhX2xpbWl0XzMyYiwgXHUwMDI2dG9wby1cdTAwM2VuZXh0X3BvcnRfaW5kZXgsXG4rXHRcdFx0XHQgICAgICBHRlBfS0VSTkVMKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fYWRkX3BvcnQpO1xuK1xuK3ZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQpXG4re1xuK1x0c3RydWN0IHBoeV9saW5rX3RvcG9sb2d5ICp0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbitcbitcdGlmICghdG9wbylcbitcdFx0cmV0dXJuO1xuK1xuK1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2Vwb3J0cywgcG9ydC1cdTAwM2VpZCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeV9saW5rX3RvcG9fZGVsX3BvcnQpO1xuK1xuIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXG4gXHRcdFx0ICBlbnVtIHBoeV91cHN0cmVhbSB1cHQsIHZvaWQgKnVwc3RyZWFtKVxuIHtcbi1cdHN0cnVjdCBwaHlfbGlua190b3BvbG9neSAqdG9wbyA9IGRldi1cdTAwM2VsaW5rX3RvcG87XG4rXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG87XG4gXHRzdHJ1Y3QgcGh5X2RldmljZV9ub2RlICpwZG47XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogZXRodG9vbCBvcHMgbWF5IHJ1biB3aXRob3V0IHJ0bmxfbG9jaywgYW5kIHJ0bmxfbG9jayBpcyB3aGF0XG5AQCAtNDUsMTMgKzExMCw5IEBAIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGlmIChXQVJOX09OX09OQ0UobmV0ZGV2X25lZWRfb3BzX2xvY2soZGV2KSkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmICghdG9wbykge1xuLVx0XHRyZXQgPSBuZXRkZXZfYWxsb2NfcGh5X2xpbmtfdG9wb2xvZ3koZGV2KTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0XHR0b3BvID0gZGV2LVx1MDAzZWxpbmtfdG9wbztcbi1cdH1cbitcdHRvcG8gPSBwaHlfbGlua190b3BvX2dldF9vcl9hbGxvYyhkZXYpO1xuK1x0aWYgKElTX0VSUih0b3BvKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIodG9wbyk7XG4gXG4gXHRwZG4gPSBremFsbG9jX29iaigqcGRuKTtcbiBcdGlmICghcGRuKVxuQEAgLTg2LDggKzE0NywyMCBAQCBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycjtcbiBcbitcdC8qIEFkZCBhbGwgdGhlIFBIWSdzIHBvcnRzIHRvIHRoZSB0b3BvbG9neSAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwaHktXHUwMDNlcG9ydHMsIGhlYWQpIHtcbitcdFx0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChkZXYsIHBvcnQpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gZGVsX3BvcnRzO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gXG4rZGVsX3BvcnRzOlxuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbitcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuK1xuK1x0eGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBwaHktXHUwMDNlcGh5aW5kZXgpO1xuIGVycjpcbiBcdGtmcmVlKHBkbik7XG4gXHRyZXR1cm4gcmV0O1xuQEAgLTk5LDEwICsxNzIsMTQgQEAgdm9pZCBwaHlfbGlua190b3BvX2RlbF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiB7XG4gXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuIFx0c3RydWN0IHBoeV9kZXZpY2Vfbm9kZSAqcGRuO1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuIFxuIFx0aWYgKCF0b3BvKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIFx1MDAyNnBoeS1cdTAwM2Vwb3J0cywgaGVhZClcbitcdFx0cGh5X2xpbmtfdG9wb19kZWxfcG9ydChkZXYsIHBvcnQpO1xuK1xuIFx0cGRuID0geGFfZXJhc2UoXHUwMDI2dG9wby1cdTAwM2VwaHlzLCBwaHktXHUwMDNlcGh5aW5kZXgpO1xuIFxuIFx0LyogV2UgZGVsZXRlIHRoZSBQSFkgZnJvbSB0aGUgdG9wb2xvZ3ksIGhvd2V2ZXIgd2UgZG9uJ3QgcmUtc2V0IHRoZVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5pbmRleCA1OWRmZTM1YWZhNTRmYy4uNWNmYmZjYzEwNzlhZDMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5AQCAtMTQsNiArMTQsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29mX21kaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X2ZpeGVkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfbGlua190b3BvbG9neS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5X3BvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeWxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpbmxvY2suaFx1MDAzZVxuQEAgLTkzLDYgKzk1LDggQEAgc3RydWN0IHBoeWxpbmsge1xuIFx0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soc2ZwX2ludGVyZmFjZXMpO1xuIFx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc2ZwX3N1cHBvcnQpO1xuIFx0dTggc2ZwX3BvcnQ7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnNmcF9jYWdlX3BvcnQ7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKm1vZF9wb3J0O1xuIFxuIFx0c3RydWN0IGVlZV9jb25maWcgZWVlX2NmZztcbiBcbkBAIC0xNzY0LDYgKzE3NjgsNTEgQEAgc3RhdGljIHZvaWQgcGh5bGlua19maXhlZF9wb2xsKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5bGlua19vcHM7XG4gXG4rc3RhdGljIGludCBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbit7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmICghcGwtXHUwMDNlbmV0ZGV2IHx8ICFwbC1cdTAwM2VzZnBfYnVzKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuK1x0aWYgKCFwb3J0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBvcnQtXHUwMDNlaXNfc2ZwID0gdHJ1ZTtcbitcdHBvcnQtXHUwMDNlaXNfbWlpID0gdHJ1ZTtcbitcdHBvcnQtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbitcbitcdHBoeV9pbnRlcmZhY2VfYW5kKHBvcnQtXHUwMDNlaW50ZXJmYWNlcywgcGwtXHUwMDNlY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzLFxuK1x0XHRcdCAgcGh5bGlua19zZnBfaW50ZXJmYWNlcyk7XG4rXHRwaHlfcG9ydF91cGRhdGVfc3VwcG9ydGVkKHBvcnQpO1xuK1xuK1x0cmV0ID0gcGh5X2xpbmtfdG9wb19hZGRfcG9ydChwbC1cdTAwM2VuZXRkZXYsIHBvcnQpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfZGVzdHJveV9wb3J0O1xuK1xuK1x0cGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IHBvcnQ7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitvdXRfZGVzdHJveV9wb3J0OlxuK1x0cGh5X3BvcnRfZGVzdHJveShwb3J0KTtcbitcdHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQgPSBOVUxMO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxuK3tcbitcdGlmIChwbC1cdTAwM2VuZXRkZXYgXHUwMDI2XHUwMDI2IHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpXG4rXHRcdHBoeV9saW5rX3RvcG9fZGVsX3BvcnQocGwtXHUwMDNlbmV0ZGV2LCBwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KTtcbitcbitcdGlmIChwbC1cdTAwM2VzZnBfY2FnZV9wb3J0KVxuK1x0XHRwaHlfcG9ydF9kZXN0cm95KHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpO1xuK1xuK1x0cGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydCA9IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbiB7XG5AQCAtMTc4MSw5ICsxODMwLDE4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19yZWdpc3Rlcl9zZnAoc3RydWN0IHBoeWxpbmsgKnBsLFxuIFxuIFx0cGwtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbiBcbitcdHJldCA9IHBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnQocGwpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRzZnBfYnVzX3B1dChidXMpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuIFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwbCwgXHUwMDI2c2ZwX3BoeWxpbmtfb3BzKTtcbiBcdHNmcF9idXNfcHV0KGJ1cyk7XG4gXG4rXHRpZiAocmV0KVxuK1x0XHRwaHlsaW5rX2Rlc3Ryb3lfc2ZwX2NhZ2VfcG9ydChwbCk7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0xOTQ1LDYgKzIwMDMsNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2NyZWF0ZSk7XG4gdm9pZCBwaHlsaW5rX2Rlc3Ryb3koc3RydWN0IHBoeWxpbmsgKnBsKVxuIHtcbiBcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBsLVx1MDAzZXNmcF9idXMpO1xuK1x0cGh5bGlua19kZXN0cm95X3NmcF9jYWdlX3BvcnQocGwpO1xuIFx0aWYgKHBsLVx1MDAzZWxpbmtfZ3BpbylcbiBcdFx0Z3Bpb2RfcHV0KHBsLVx1MDAzZWxpbmtfZ3Bpbyk7XG4gXG5AQCAtMzg3MCwxNCArMzkyOSw2NyBAQCBzdGF0aWMgdm9pZCBwaHlsaW5rX3NmcF9tb2R1bGVfcmVtb3ZlKHZvaWQgKnVwc3RyZWFtKVxuIFx0cGh5X2ludGVyZmFjZV96ZXJvKHBsLVx1MDAzZXNmcF9pbnRlcmZhY2VzKTtcbiB9XG4gXG4rc3RhdGljIGludCBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQoc3RydWN0IHBoeWxpbmsgKnBsKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBzZnBfbW9kdWxlX2NhcHMgKmNhcHM7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmICghcGwtXHUwMDNlc2ZwX2NhZ2VfcG9ydClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHQvKiBDcmVhdGUgbW9kIHBvcnQgKi9cbitcdHBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuK1x0aWYgKCFwb3J0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBvcnQtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbitcbitcdGNhcHMgPSBzZnBfZ2V0X21vZHVsZV9jYXBzKHBsLVx1MDAzZXNmcF9idXMpO1xuK1xuK1x0cGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlcyhwb3J0LVx1MDAzZXN1cHBvcnRlZCwgY2Fwcy1cdTAwM2VsaW5rX21vZGVzLFxuK1x0XHRcdFx0XHRwbC1cdTAwM2VzZnBfY2FnZV9wb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuK1xuK1x0aWYgKHBsLVx1MDAzZW5ldGRldikge1xuK1x0XHRyZXQgPSBwaHlfbGlua190b3BvX2FkZF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcG9ydCk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQtXHUwMDNlaWQ7XG4rXG4rXHRwbC1cdTAwM2Vtb2RfcG9ydCA9IHBvcnQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHN0cnVjdCBwaHlsaW5rICpwbClcbit7XG4rXHRpZiAoIXBsLVx1MDAzZW1vZF9wb3J0KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAocGwtXHUwMDNlbmV0ZGV2KVxuK1x0XHRwaHlfbGlua190b3BvX2RlbF9wb3J0KHBsLVx1MDAzZW5ldGRldiwgcGwtXHUwMDNlbW9kX3BvcnQpO1xuK1xuK1x0cGh5X3BvcnRfZGVzdHJveShwbC1cdTAwM2Vtb2RfcG9ydCk7XG4rXHRwbC1cdTAwM2Vtb2RfcG9ydCA9IE5VTEw7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfbW9kdWxlX3N0YXJ0KHZvaWQgKnVwc3RyZWFtKVxuIHtcbiBcdHN0cnVjdCBwaHlsaW5rICpwbCA9IHVwc3RyZWFtO1xuK1x0aW50IHJldDtcbiBcbiBcdC8qIElmIHRoaXMgU0ZQIG1vZHVsZSBoYXMgYSBQSFksIHN0YXJ0IHRoZSBQSFkgbm93LiAqL1xuIFx0aWYgKHBsLVx1MDAzZXBoeWRldikge1xuIFx0XHRwaHlfc3RhcnQocGwtXHUwMDNlcGh5ZGV2KTtcbiBcdFx0cmV0dXJuIDA7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnQocGwpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHQvKiBJZiB0aGUgbW9kdWxlIG1heSBoYXZlIGEgUEhZIGJ1dCB3ZSBkaWRuJ3QgZGV0ZWN0IG9uZSB3ZVxuQEAgLTM4ODYsNyArMzk5OCwxNiBAQCBzdGF0aWMgaW50IHBoeWxpbmtfc2ZwX21vZHVsZV9zdGFydCh2b2lkICp1cHN0cmVhbSlcbiBcdGlmICghcGwtXHUwMDNlc2ZwX21heV9oYXZlX3BoeSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRyZXR1cm4gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpO1xuK1x0cmV0ID0gcGh5bGlua19zZnBfY29uZmlnX29wdGljYWwocGwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBkZWxfbW9kX3BvcnQ7XG4rXG4rXHRyZXR1cm4gMDtcbitcbitkZWxfbW9kX3BvcnQ6XG4rXHRwaHlsaW5rX2RlbF9zZnBfbW9kX3BvcnQocGwpO1xuK1xuK1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXG5AQCAtMzg5Niw2ICs0MDE3LDggQEAgc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbW9kdWxlX3N0b3Aodm9pZCAqdXBzdHJlYW0pXG4gXHQvKiBJZiB0aGlzIFNGUCBtb2R1bGUgaGFzIGEgUEhZLCBzdG9wIGl0LiAqL1xuIFx0aWYgKHBsLVx1MDAzZXBoeWRldilcbiBcdFx0cGh5X3N0b3AocGwtXHUwMDNlcGh5ZGV2KTtcbitcdGVsc2VcbitcdFx0cGh5bGlua19kZWxfc2ZwX21vZF9wb3J0KHBsKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcGh5bGlua19zZnBfbGlua19kb3duKHZvaWQgKnVwc3RyZWFtKVxuQEAgLTM5NDAsNiArNDA2Myw4IEBAIHN0YXRpYyBpbnQgcGh5bGlua19zZnBfY29ubmVjdF9waHkodm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpXG4gXHRwaHlfaW50ZXJmYWNlX2FuZChwaHktXHUwMDNlaG9zdF9pbnRlcmZhY2VzLCBwaHlsaW5rX3NmcF9pbnRlcmZhY2VzLFxuIFx0XHRcdCAgcGwtXHUwMDNlY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiBcbitcdHBoeV9zZXRfdXBzdHJlYW1fcG9ydChwaHksIHBsLVx1MDAzZXNmcF9jYWdlX3BvcnQpO1xuK1xuIFx0LyogRG8gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiAqL1xuIFx0cmV0dXJuIHBoeWxpbmtfc2ZwX2NvbmZpZ19waHkocGwsIHBoeSk7XG4gfVxuQEAgLTM5NDgsNiArNDA3Myw3IEBAIHN0YXRpYyB2b2lkIHBoeWxpbmtfc2ZwX2Rpc2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0cGh5bGlua19kaXNjb25uZWN0X3BoeSh1cHN0cmVhbSk7XG4rXHRwaHlfc2V0X3Vwc3RyZWFtX3BvcnQocGh5ZGV2LCBOVUxMKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzIHNmcF9waHlsaW5rX29wcyA9IHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggYmVmZjFkNmZjYzdjZGEuLjgyOTZmNGY1OWNlM2IyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTU4Miw2ICs1ODIsNyBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHdvbF9lbmFibGVkOiBTZXQgdG8gdHJ1ZSBpZiB0aGUgUEhZIG9yIHRoZSBhdHRhY2hlZCBNQUMgaGF2ZSBXYWtlLW9uLUxBTlxuICAqIFx0XHQgZW5hYmxlZC5cbiAgKiBAaXNfZ2VucGh5X2RyaXZlbjogUEhZIGlzIGRyaXZlbiBieSBvbmUgb2YgdGhlIGdlbmVyaWMgUEhZIGRyaXZlcnNcbisgKiBAaGFzX3NmcF9tb2RfcGh5OiBTZXQgdHJ1ZSBpZiBkb3duc3RyZWFtIFNGUCBidXMncyBtb2R1bGUgY29udGFpbnMgYSBQSFlcbiAgKiBAc3RhdGU6IFN0YXRlIG9mIHRoZSBQSFkgZm9yIG1hbmFnZW1lbnQgcHVycG9zZXNcbiAgKiBAZGV2X2ZsYWdzOiBEZXZpY2Utc3BlY2lmaWMgZmxhZ3MgdXNlZCBieSB0aGUgUEhZIGRyaXZlci5cbiAgKlxuQEAgLTU5NCw2ICs1OTUsOSBAQCBzdHJ1Y3QgcGh5X29hdGMxNF9zcWlfY2FwYWJpbGl0eSB7XG4gICogQHBoeWxpbms6IFBvaW50ZXIgdG8gcGh5bGluayBpbnN0YW5jZSBmb3IgdGhpcyBQSFlcbiAgKiBAc2ZwX2J1c19hdHRhY2hlZDogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIFNGUCBidXMgaGFzIGJlZW4gYXR0YWNoZWRcbiAgKiBAc2ZwX2J1czogU0ZQIGJ1cyBhdHRhY2hlZCB0byB0aGlzIFBIWSdzIGZpYmVyIHBvcnRcbisgKiBAc2ZwX2NhZ2VfcG9ydDogVGhlIHBoeV9wb3J0IGNvbm5lY3RlZCB0byB0aGUgZG93bnN0cmVhbSBTRlAgY2FnZVxuKyAqIEBtb2RfcG9ydDogcGh5X3BvcnQgcmVwcmVzZW50aW5nIHRoZSBTRlAgbW9kdWxlLCBpZiBpdCBpcyBwaHktbGVzc1xuKyAqIEB1cHN0cmVhbV9wb3J0OiBwaHlfcG9ydCB0aGlzIFBIWSdzIE1JSSBhdHRhY2hlcyB0bywgaWYgYW55XG4gICogQGF0dGFjaGVkX2RldjogVGhlIGF0dGFjaGVkIGVuZXQgZHJpdmVyJ3MgZGV2aWNlIGluc3RhbmNlIHB0clxuICAqIEBhZGp1c3RfbGluazogQ2FsbGJhY2sgZm9yIHRoZSBlbmV0IGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBjaGFuZ2VzOiBpbiB0aGVcbiAgKiAgICAgICAgICAgICAgIGxpbmsgc3RhdGUuXG5AQCAtNzA2LDYgKzcxMCw3IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcbiBcdHVuc2lnbmVkIGlycV9yZXJ1bjoxO1xuIFxuIFx0dW5zaWduZWQgZGVmYXVsdF90aW1lc3RhbXA6MTtcbitcdHVuc2lnbmVkIGhhc19zZnBfbW9kX3BoeToxO1xuIFxuIFx0aW50IHJhdGVfbWF0Y2hpbmc7XG4gXG5AQCAtNzg1LDYgKzc5MCw5IEBAIHN0cnVjdCBwaHlfZGV2aWNlIHtcbiBcdC8qIFRoaXMgbWF5IGJlIG1vZGlmaWVkIHVuZGVyIHRoZSBydG5sIGxvY2sgKi9cbiBcdGJvb2wgc2ZwX2J1c19hdHRhY2hlZDtcbiBcdHN0cnVjdCBzZnBfYnVzICpzZnBfYnVzO1xuK1x0c3RydWN0IHBoeV9wb3J0ICpzZnBfY2FnZV9wb3J0O1xuK1x0c3RydWN0IHBoeV9wb3J0ICptb2RfcG9ydDtcbitcdHN0cnVjdCBwaHlfcG9ydCAqdXBzdHJlYW1fcG9ydDtcbiBcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKmF0dGFjaGVkX2RldjtcbiBcdHN0cnVjdCBtaWlfdGltZXN0YW1wZXIgKm1paV90cztcbkBAIC0yNDY1LDYgKzI0NzMsOCBAQCBpbnQgX19waHlfaHd0c3RhbXBfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXG4gc3RydWN0IHBoeV9wb3J0ICpwaHlfZ2V0X3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIFxuK3ZvaWQgcGh5X3NldF91cHN0cmVhbV9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4rXG4gLyoqXG4gICogcGh5X21vZHVsZV9kcml2ZXIoKSAtIEhlbHBlciBtYWNybyBmb3IgcmVnaXN0ZXJpbmcgUEhZIGRyaXZlcnNcbiAgKiBAX19waHlfZHJpdmVyczogYXJyYXkgb2YgUEhZIGRyaXZlcnMgdG8gcmVnaXN0ZXJcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmggYi9pbmNsdWRlL2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcbmluZGV4IDk1NTc1ZjY4ZDViYzcxLi45NTYyOTExMjIwNGVhOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5X2xpbmtfdG9wb2xvZ3kuaFxuKysrIGIvaW5jbHVkZS9saW51eC9waHlfbGlua190b3BvbG9neS5oXG5AQCAtMTMsMTQgKzEzLDE5IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuIHN0cnVjdCB4YXJyYXk7XG4gc3RydWN0IHBoeV9kZXZpY2U7XG4rc3RydWN0IHBoeV9wb3J0O1xuIHN0cnVjdCBzZnBfYnVzO1xuIFxuIHN0cnVjdCBwaHlfbGlua190b3BvbG9neSB7XG4gXHRzdHJ1Y3QgeGFycmF5IHBoeXM7XG4gXHR1MzIgbmV4dF9waHlfaW5kZXg7XG4rXG4rXHRzdHJ1Y3QgeGFycmF5IHBvcnRzO1xuK1x0dTMyIG5leHRfcG9ydF9pbmRleDtcbiB9O1xuIFxuIHN0cnVjdCBwaHlfZGV2aWNlX25vZGUge1xuQEAgLTQ4LDYgKzUzLDkgQEAgaW50IHBoeV9saW5rX3RvcG9fYWRkX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFxuIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xuIFxuK2ludCBwaHlfbGlua190b3BvX2FkZF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4rdm9pZCBwaHlfbGlua190b3BvX2RlbF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfcG9ydCAqcG9ydCk7XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGh5X2RldmljZSAqXG4gcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiB7XG5AQCAtNjQsNiArNzIsMjAgQEAgcGh5X2xpbmtfdG9wb19nZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwaHlpbmRleClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwaHlfcG9ydCAqXG4rcGh5X2xpbmtfdG9wb19nZXRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcG9ydF9pZClcbit7XG4rXHRzdHJ1Y3QgcGh5X2xpbmtfdG9wb2xvZ3kgKnRvcG8gPSBkZXYtXHUwMDNlbGlua190b3BvO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGlmICghdG9wbylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHQvKiBDYWxsZXIgbXVzdCBob2xkIFJUTkwgd2hpbGUgaGFuZGxpbmcgdGhlIHBoeV9wb3J0ICovXG4rXHRyZXR1cm4geGFfbG9hZChcdTAwMjZ0b3BvLVx1MDAzZXBvcnRzLCBwb3J0X2lkKTtcbit9XG4rXG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwaHlfbGlua190b3BvX2FkZF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbkBAIC03NywxMSArOTksMjggQEAgc3RhdGljIGlubGluZSB2b2lkIHBoeV9saW5rX3RvcG9fZGVsX3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIHtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBpbnQgcGh5X2xpbmtfdG9wb19hZGRfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgcGh5X2xpbmtfdG9wb19kZWxfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBwaHlfcG9ydCAqcG9ydClcbit7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9kZXZpY2UgKlxuIHBoeV9saW5rX3RvcG9fZ2V0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgcGh5aW5kZXgpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG4gfVxuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBoeV9wb3J0ICpcbitwaHlfbGlua190b3BvX2dldF9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBwb3J0X2lkKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogX19QSFlfTElOS19UT1BPTE9HWV9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oIGIvaW5jbHVkZS9saW51eC9waHlfcG9ydC5oXG5pbmRleCAwZWYwZjVjZTQ3MDkyNi4uZTNhNDFjZWRlYmRjZmEgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeV9wb3J0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5X3BvcnQuaFxuQEAgLTM2LDkgKzM2LDEyIEBAIHN0cnVjdCBwaHlfcG9ydF9vcHMge1xuIC8qKlxuICAqIHN0cnVjdCBwaHlfcG9ydCAtIEEgcmVwcmVzZW50YXRpb24gb2YgYSBuZXR3b3JrIGRldmljZSBwaHlzaWNhbCBpbnRlcmZhY2VcbiAgKlxuKyAqIEBpZDogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBwb3J0IHdpdGhpbiB0aGUgdG9wb2xvZ3lcbiAgKiBAaGVhZDogVXNlZCBieSB0aGUgcG9ydCdzIHBhcmVudCB0byBsaXN0IHBvcnRzXG4gICogQHBhcmVudF90eXBlOiBUaGUgdHlwZSBvZiBkZXZpY2UgdGhpcyBwb3J0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0b1xuICAqIEBwaHk6IElmIHRoZSBwYXJlbnQgaXMgUEhZX1BPUlRfUEhZREVWLCB0aGUgUEhZIGNvbnRyb2xsaW5nIHRoYXQgcG9ydFxuKyAqIEB1cHN0cmVhbV9wb3J0OiBGb3Igbm9uLU1JSSBwb3J0cywgaW5kaWNhdGVzIHRoZSBNSUkgcG9ydCB0aGF0IGZlZWRzIHRoaXNcbisgKlx0XHQgICBwb3J0LCBlLmcuIHRoZSBTRlAgY2FnZSBwb3J0IGZvciBhIFNGUCBtb2R1bGUgcG9ydC5cbiAgKiBAb3BzOiBDYWxsYmFjayBvcHMgaW1wbGVtZW50ZWQgYnkgdGhlIHBvcnQgY29udHJvbGxlclxuICAqIEBwYWlyczogVGhlIG51bWJlciBvZiAgcGFpcnMgdGhpcyBwb3J0IGhhcywgMCBpZiBub3QgYXBwbGljYWJsZVxuICAqIEBtZWRpdW1zOiBCaXRtYXNrIG9mIHRoZSBwaHlzaWNhbCBtZWRpdW1zIHRoaXMgcG9ydCBwcm92aWRlcyBhY2Nlc3MgdG9cbkBAIC01MiwxMSArNTUsMTMgQEAgc3RydWN0IHBoeV9wb3J0X29wcyB7XG4gICogQGlzX3NmcDogSW5kaWNhdGVzIGlmIHRoaXMgcG9ydCBkcml2ZXMgYW4gU0ZQIGNhZ2UuXG4gICovXG4gc3RydWN0IHBoeV9wb3J0IHtcbitcdHUzMiBpZDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgaGVhZDtcbiBcdGVudW0gcGh5X3BvcnRfcGFyZW50IHBhcmVudF90eXBlO1xuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5O1xuIFx0fTtcbitcdHUzMiB1cHN0cmVhbV9wb3J0O1xuIFxuIFx0Y29uc3Qgc3RydWN0IHBoeV9wb3J0X29wcyAqb3BzO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sX25ldGxpbmtfZ2VuZXJhdGVkLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5pbmRleCA4MTM0YmFmNzg2MGYzYy4uZjlkODc5NGVhYmMxOTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbF9uZXRsaW5rX2dlbmVyYXRlZC5oXG5AQCAtNzgsNiArNzgsMTEgQEAgZW51bSBldGh0b29sX3BzZV9ldmVudCB7XG4gXHRFVEhUT09MX1BTRV9FVkVOVF9TV19QV19DT05UUk9MX0VSUk9SID0gNjQsXG4gfTtcbiBcbitlbnVtIGV0aHRvb2xfcG9ydF90eXBlIHtcbitcdEVUSFRPT0xfUE9SVF9UWVBFX01ESSxcbitcdEVUSFRPT0xfUE9SVF9UWVBFX1NGUCxcbit9O1xuK1xuIGVudW0ge1xuIFx0RVRIVE9PTF9BX0hFQURFUl9VTlNQRUMsXG4gXHRFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWCxcbkBAIC04NDAsNiArODQ1LDE4IEBAIGVudW0ge1xuIFx0RVRIVE9PTF9BX01TRV9NQVggPSAoX19FVEhUT09MX0FfTVNFX0NOVCAtIDEpXG4gfTtcbiBcbitlbnVtIHtcbitcdEVUSFRPT0xfQV9QT1JUX0hFQURFUiA9IDEsXG4rXHRFVEhUT09MX0FfUE9SVF9JRCxcbitcdEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9NT0RFUyxcbitcdEVUSFRPT0xfQV9QT1JUX1NVUFBPUlRFRF9JTlRFUkZBQ0VTLFxuK1x0RVRIVE9PTF9BX1BPUlRfVFlQRSxcbitcdEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQsXG4rXG4rXHRfX0VUSFRPT0xfQV9QT1JUX0NOVCxcbitcdEVUSFRPT0xfQV9QT1JUX01BWCA9IChfX0VUSFRPT0xfQV9QT1JUX0NOVCAtIDEpXG4rfTtcbitcbiBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1VTRVJfTk9ORSA9IDAsXG4gXHRFVEhUT09MX01TR19TVFJTRVRfR0VUID0gMSxcbkBAIC04OTMsNiArOTEwLDcgQEAgZW51bSB7XG4gXHRFVEhUT09MX01TR19SU1NfQ1JFQVRFX0FDVCxcbiBcdEVUSFRPT0xfTVNHX1JTU19ERUxFVEVfQUNULFxuIFx0RVRIVE9PTF9NU0dfTVNFX0dFVCxcbitcdEVUSFRPT0xfTVNHX1BPUlRfR0VULFxuIFxuIFx0X19FVEhUT09MX01TR19VU0VSX0NOVCxcbiBcdEVUSFRPT0xfTVNHX1VTRVJfTUFYID0gKF9fRVRIVE9PTF9NU0dfVVNFUl9DTlQgLSAxKVxuQEAgLTk1NCw2ICs5NzIsNyBAQCBlbnVtIHtcbiBcdEVUSFRPT0xfTVNHX1JTU19DUkVBVEVfTlRGLFxuIFx0RVRIVE9PTF9NU0dfUlNTX0RFTEVURV9OVEYsXG4gXHRFVEhUT09MX01TR19NU0VfR0VUX1JFUExZLFxuK1x0RVRIVE9PTF9NU0dfUE9SVF9HRVRfUkVQTFksXG4gXG4gXHRfX0VUSFRPT0xfTVNHX0tFUk5FTF9DTlQsXG4gXHRFVEhUT09MX01TR19LRVJORUxfTUFYID0gKF9fRVRIVE9PTF9NU0dfS0VSTkVMX0NOVCAtIDEpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggYzFjMWJlMWE2OTYyZmUuLmIzNmNjNWM0NzgxNmE0IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTEzMTUsNiArMTEzMTUsNyBAQCBzdGF0aWMgdm9pZCBuZXRkZXZfZnJlZV9waHlfbGlua190b3BvbG9neShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BIWUxJQikgXHUwMDI2XHUwMDI2IHRvcG8pIHtcbiBcdFx0eGFfZGVzdHJveShcdTAwMjZ0b3BvLVx1MDAzZXBoeXMpO1xuK1x0XHR4YV9kZXN0cm95KFx1MDAyNnRvcG8tXHUwMDNlcG9ydHMpO1xuIFx0XHRrZnJlZSh0b3BvKTtcbiBcdFx0ZGV2LVx1MDAzZWxpbmtfdG9wbyA9IE5VTEw7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvTWFrZWZpbGUgYi9uZXQvZXRodG9vbC9NYWtlZmlsZVxuaW5kZXggNjI5YzEwOTE2NjcwZWMuLjliNWIwOTY3MDAwODExIDEwMDY0NFxuLS0tIGEvbmV0L2V0aHRvb2wvTWFrZWZpbGVcbisrKyBiL25ldC9ldGh0b29sL01ha2VmaWxlXG5AQCAtOSw0ICs5LDQgQEAgZXRodG9vbF9ubC15XHQ6PSBuZXRsaW5rLm8gYml0c2V0Lm8gc3Ryc2V0Lm8gbGlua2luZm8ubyBsaW5rbW9kZXMubyByc3MubyBcXFxuIFx0XHQgICBjaGFubmVscy5vIGNvYWxlc2NlLm8gcGF1c2UubyBlZWUubyB0c2luZm8ubyBjYWJsZXRlc3QubyBcXFxuIFx0XHQgICB0dW5uZWxzLm8gZmVjLm8gZWVwcm9tLm8gc3RhdHMubyBwaGNfdmNsb2Nrcy5vIG1tLm8gXFxcbiBcdFx0ICAgbW9kdWxlLm8gY21pc19md191cGRhdGUubyBjbWlzX2NkYi5vIHBzZS1wZC5vIHBsY2EubyBcXFxuLVx0XHQgICBwaHkubyB0c2NvbmZpZy5vIG1zZS5vXG4rXHRcdCAgIHBoeS5vIHRzY29uZmlnLm8gbXNlLm8gcG9ydC5vXG5kaWZmIC0tZ2l0IGEvbmV0L2V0aHRvb2wvbmV0bGluay5jIGIvbmV0L2V0aHRvb2wvbmV0bGluay5jXG5pbmRleCAxYWYzOTViNTQzMzBlMi4uYzA3NmMwN2QwYTA4MGMgMTAwNjQ0XG4tLS0gYS9uZXQvZXRodG9vbC9uZXRsaW5rLmNcbisrKyBiL25ldC9ldGh0b29sL25ldGxpbmsuY1xuQEAgLTI2LDYgKzI2LDggQEAgc3RhdGljIHUzMiBldGhubF9iY2FzdF9zZXE7XG4gXHRcdFx0ICAgICBFVEhUT09MX0ZMQUdfT01JVF9SRVBMWSlcbiAjZGVmaW5lIEVUSFRPT0xfRkxBR1NfU1RBVFMgKEVUSFRPT0xfRkxBR1NfQkFTSUMgfCBFVEhUT09MX0ZMQUdfU1RBVFMpXG4gXG4rY2hhciBwaHlfaW50ZXJmYWNlX25hbWVzW1BIWV9JTlRFUkZBQ0VfTU9ERV9NQVhdW0VUSF9HU1RSSU5HX0xFTl0gX19yb19hZnRlcl9pbml0O1xuK1xuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lbXSA9IHtcbiBcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9JTkRFWF1cdD0geyAudHlwZSA9IE5MQV9VMzIgfSxcbiBcdFtFVEhUT09MX0FfSEVBREVSX0RFVl9OQU1FXVx0PSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsXG5AQCAtNDMxLDYgKzQzMyw3IEBAIGV0aG5sX2RlZmF1bHRfcmVxdWVzdHNbX19FVEhUT09MX01TR19VU0VSX0NOVF0gPSB7XG4gXHRbRVRIVE9PTF9NU0dfVFNDT05GSUdfU0VUXVx0PSBcdTAwMjZldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcyxcbiBcdFtFVEhUT09MX01TR19QSFlfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX3BoeV9yZXF1ZXN0X29wcyxcbiBcdFtFVEhUT09MX01TR19NU0VfR0VUXVx0XHQ9IFx1MDAyNmV0aG5sX21zZV9yZXF1ZXN0X29wcyxcbitcdFtFVEhUT09MX01TR19QT1JUX0dFVF1cdFx0PSBcdTAwMjZldGhubF9wb3J0X3JlcXVlc3Rfb3BzLFxuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBldGhubF9kdW1wX2N0eCAqZXRobmxfZHVtcF9jb250ZXh0KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbkBAIC0xNTcyLDYgKzE1NzUsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBldGh0b29sX2dlbmxfb3BzW10gPSB7XG4gXHRcdC5wb2xpY3kgPSBldGhubF9tc2VfZ2V0X3BvbGljeSxcbiBcdFx0Lm1heGF0dHIgPSBBUlJBWV9TSVpFKGV0aG5sX21zZV9nZXRfcG9saWN5KSAtIDEsXG4gXHR9LFxuK1x0e1xuK1x0XHQuY21kXHQ9IEVUSFRPT0xfTVNHX1BPUlRfR0VULFxuK1x0XHQuZG9pdFx0PSBldGhubF9kZWZhdWx0X2RvaXQsXG4rXHRcdC5zdGFydFx0PSBldGhubF9wb3J0X2R1bXBfc3RhcnQsXG4rXHRcdC5kdW1waXRcdD0gZXRobmxfcG9ydF9kdW1waXQsXG4rXHRcdC5kb25lXHQ9IGV0aG5sX3BvcnRfZHVtcF9kb25lLFxuK1x0XHQucG9saWN5ID0gZXRobmxfcG9ydF9nZXRfcG9saWN5LFxuK1x0XHQubWF4YXR0ciA9IEFSUkFZX1NJWkUoZXRobmxfcG9ydF9nZXRfcG9saWN5KSAtIDEsXG4rXHR9LFxuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBldGh0b29sX25sX21jZ3Jwc1tdID0ge1xuQEAgLTE1OTQsMTAgKzE2MDYsMjMgQEAgc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBldGh0b29sX2dlbmxfZmFtaWx5IF9fcm9fYWZ0ZXJfaW5pdCA9IHtcbiBcbiAvKiBtb2R1bGUgc2V0dXAgKi9cbiBcbitzdGF0aWMgdm9pZCBfX2luaXQgZXRobmxfcGh5X25hbWVzX3BvcHVsYXRlKHZvaWQpXG4re1xuK1x0Y29uc3QgY2hhciAqbmFtZTtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUEhZX0lOVEVSRkFDRV9NT0RFX01BWDsgaSsrKSB7XG4rXHRcdG5hbWUgPSBwaHlfbW9kZXMoaSk7XG4rXHRcdHN0cnNjcHkocGh5X2ludGVyZmFjZV9uYW1lc1tpXSwgbmFtZSwgRVRIX0dTVFJJTkdfTEVOKTtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBfX2luaXQgZXRobmxfaW5pdCh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG4gXG4rXHRldGhubF9waHlfbmFtZXNfcG9wdWxhdGUoKTtcbitcbiBcdHJldCA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5KFx1MDAyNmV0aHRvb2xfZ2VubF9mYW1pbHkpO1xuIFx0aWYgKFdBUk4ocmV0IFx1MDAzYyAwLCBcImV0aHRvb2w6IGdlbmV0bGluayBmYW1pbHkgcmVnaXN0cmF0aW9uIGZhaWxlZFwiKSlcbiBcdFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9uZXQvZXRodG9vbC9uZXRsaW5rLmggYi9uZXQvZXRodG9vbC9uZXRsaW5rLmhcbmluZGV4IDNlOTY5YTA3MGY5ZmU0Li5iMjUwZThiNWM0ZDQ3NSAxMDA2NDRcbi0tLSBhL25ldC9ldGh0b29sL25ldGxpbmsuaFxuKysrIGIvbmV0L2V0aHRvb2wvbmV0bGluay5oXG5AQCAtNSwxMSArNSwxNSBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2xfbmV0bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9nZW5ldGxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9zb2NrLmhcdTAwM2VcbiBcbiBzdHJ1Y3QgZXRobmxfcmVxX2luZm87XG4gXG4rZXh0ZXJuIGNoYXIgcGh5X2ludGVyZmFjZV9uYW1lc1tQSFlfSU5URVJGQUNFX01PREVfTUFYXVtFVEhfR1NUUklOR19MRU5dO1xuK1xuK3UzMiBldGhubF9iY2FzdF9zZXFfbmV4dCh2b2lkKTtcbiBpbnQgZXRobmxfcGFyc2VfaGVhZGVyX2Rldl9nZXQoc3RydWN0IGV0aG5sX3JlcV9pbmZvICpyZXFfaW5mbyxcbiBcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmVzdCwgc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG5AQCAtNDc0LDYgKzQ3OCw3IEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXRobmxfcmVxdWVzdF9vcHMgZXRobmxfbW1fcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF9waHlfcmVxdWVzdF9vcHM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGhubF9yZXF1ZXN0X29wcyBldGhubF90c2NvbmZpZ19yZXF1ZXN0X29wcztcbiBleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX21zZV9yZXF1ZXN0X29wcztcbitleHRlcm4gY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHM7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX2hlYWRlcl9wb2xpY3lbRVRIVE9PTF9BX0hFQURFUl9GTEFHUyArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9oZWFkZXJfcG9saWN5X3N0YXRzW0VUSFRPT0xfQV9IRUFERVJfRkxBR1MgKyAxXTtcbkBAIC01MzAsNiArNTM1LDcgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3BoeV9nZXRfcG9saWN5W0VUSFRPT0xfQV9QSFlfSEVBREVSICsgMV07XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGV0aG5sX3RzY29uZmlnX2dldF9wb2xpY3lbRVRIVE9PTF9BX1RTQ09ORklHX0hFQURFUiArIDFdO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF90c2NvbmZpZ19zZXRfcG9saWN5W0VUSFRPT0xfQV9UU0NPTkZJR19NQVggKyAxXTtcbiBleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfbXNlX2dldF9wb2xpY3lbRVRIVE9PTF9BX01TRV9IRUFERVIgKyAxXTtcbitleHRlcm4gY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZXRobmxfcG9ydF9nZXRfcG9saWN5W0VUSFRPT0xfQV9QT1JUX0lEICsgMV07XG4gXG4gaW50IGV0aG5sX3NldF9mZWF0dXJlcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBpbnQgZXRobmxfYWN0X2NhYmxlX3Rlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7XG5AQCAtNTQ1LDYgKzU1MSw5IEBAIGludCBldGhubF90c2luZm9fZHVtcGl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4gaW50IGV0aG5sX3RzaW5mb19kb25lKHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4gaW50IGV0aG5sX3Jzc19jcmVhdGVfZG9pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTtcbiBpbnQgZXRobmxfcnNzX2RlbGV0ZV9kb2l0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pO1xuK2ludCBldGhubF9wb3J0X2R1bXBfc3RhcnQoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbitpbnQgZXRobmxfcG9ydF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbitpbnQgZXRobmxfcG9ydF9kdW1wX2RvbmUoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiBcbiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19zdGRfbmFtZXNbX19FVEhUT09MX1NUQVRTX0NOVF1bRVRIX0dTVFJJTkdfTEVOXTtcbiBleHRlcm4gY29uc3QgY2hhciBzdGF0c19ldGhfcGh5X25hbWVzW19fRVRIVE9PTF9BX1NUQVRTX0VUSF9QSFlfQ05UXVtFVEhfR1NUUklOR19MRU5dO1xuZGlmZiAtLWdpdCBhL25ldC9ldGh0b29sL3BvcnQuYyBiL25ldC9ldGh0b29sL3BvcnQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYjJjYzA1ZGY5ZjkwYVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2V0aHRvb2wvcG9ydC5jXG5AQCAtMCwwICsxLDM3NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIENvcHlyaWdodCAyMDI2IEJvb3RsaW5cbisgKi9cbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeV9saW5rX3RvcG9sb2d5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlfcG9ydC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9sb2NrLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcImJpdHNldC5oXCJcbisjaW5jbHVkZSBcImNvbW1vbi5oXCJcbisjaW5jbHVkZSBcIm5ldGxpbmsuaFwiXG4rXG4rc3RydWN0IHBvcnRfcmVxX2luZm8ge1xuK1x0c3RydWN0IGV0aG5sX3JlcV9pbmZvIGJhc2U7XG4rXHR1MzIgcG9ydF9pZDtcbit9O1xuK1xuK3N0cnVjdCBwb3J0X3JlcGx5X2RhdGEge1xuK1x0c3RydWN0IGV0aG5sX3JlcGx5X2RhdGFcdGJhc2U7XG4rXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhzdXBwb3J0ZWQpO1xuK1x0REVDTEFSRV9QSFlfSU5URVJGQUNFX01BU0soaW50ZXJmYWNlcyk7XG4rXHR1MzIgcG9ydF9pZDtcbitcdGJvb2wgbWlpO1xuK1x0Ym9vbCBzZnA7XG4rXHR1MzIgdXBzdHJlYW1fcG9ydDtcbit9O1xuK1xuKyNkZWZpbmUgUE9SVF9SRVFJTkZPKF9fcmVxX2Jhc2UpIFxcXG4rXHRjb250YWluZXJfb2YoX19yZXFfYmFzZSwgc3RydWN0IHBvcnRfcmVxX2luZm8sIGJhc2UpXG4rXG4rI2RlZmluZSBQT1JUX1JFUERBVEEoX19yZXBseV9iYXNlKSBcXFxuK1x0Y29udGFpbmVyX29mKF9fcmVwbHlfYmFzZSwgc3RydWN0IHBvcnRfcmVwbHlfZGF0YSwgYmFzZSlcbitcbitjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBldGhubF9wb3J0X2dldF9wb2xpY3lbRVRIVE9PTF9BX1BPUlRfSUQgKyAxXSA9IHtcbitcdFtFVEhUT09MX0FfUE9SVF9IRUFERVJdID0gTkxBX1BPTElDWV9ORVNURUQoZXRobmxfaGVhZGVyX3BvbGljeSksXG4rXHRbRVRIVE9PTF9BX1BPUlRfSURdID0gTkxBX1BPTElDWV9NSU4oTkxBX1UzMiwgMSksXG4rfTtcbitcbitzdGF0aWMgaW50IHBvcnRfcGFyc2VfcmVxdWVzdChzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuK1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8sXG4rXHRcdFx0ICAgICAgc3RydWN0IG5sYXR0ciAqKnRiLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4rXG4rXHRpZiAoR0VOTF9SRVFfQVRUUl9DSEVDSyhpbmZvLCBFVEhUT09MX0FfUE9SVF9JRCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmVxdWVzdC1cdTAwM2Vwb3J0X2lkID0gbmxhX2dldF91MzIodGJbRVRIVE9PTF9BX1BPUlRfSURdKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfcHJlcGFyZV9kYXRhKGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXG4rXHRcdFx0ICAgICBzdHJ1Y3QgZXRobmxfcmVwbHlfZGF0YSAqcmVwbHlfZGF0YSxcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XG4rXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mbyAqcmVxdWVzdCA9IFBPUlRfUkVRSU5GTyhyZXFfaW5mbyk7XG4rXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XG4rXG4rXHQvKiBSVE5MIG11c3QgYmUgaGVsZCB3aGlsZSBob2xkaW5nIGEgcmVmIHRvIHRoZSBwaHlfcG9ydC4gSGVyZSwgY2FsbGVyXG4rXHQgKiBob2xkcyBSVE5MLlxuK1x0ICovXG4rXHRwb3J0ID0gcGh5X2xpbmtfdG9wb19nZXRfcG9ydChyZXFfaW5mby1cdTAwM2VkZXYsIHJlcXVlc3QtXHUwMDNlcG9ydF9pZCk7XG4rXHRpZiAoIXBvcnQpXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0bGlua21vZGVfY29weShyZXBseS1cdTAwM2VzdXBwb3J0ZWQsIHBvcnQtXHUwMDNlc3VwcG9ydGVkKTtcbitcdHBoeV9pbnRlcmZhY2VfY29weShyZXBseS1cdTAwM2VpbnRlcmZhY2VzLCBwb3J0LVx1MDAzZWludGVyZmFjZXMpO1xuK1x0cmVwbHktXHUwMDNlcG9ydF9pZCA9IHBvcnQtXHUwMDNlaWQ7XG4rXHRyZXBseS1cdTAwM2VtaWkgPSBwb3J0LVx1MDAzZWlzX21paTtcbitcdHJlcGx5LVx1MDAzZXNmcCA9IHBvcnQtXHUwMDNlaXNfc2ZwO1xuK1x0cmVwbHktXHUwMDNldXBzdHJlYW1fcG9ydCA9IHBvcnQtXHUwMDNldXBzdHJlYW1fcG9ydDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfcmVwbHlfc2l6ZShjb25zdCBzdHJ1Y3QgZXRobmxfcmVxX2luZm8gKnJlcV9pbmZvLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXBseV9kYXRhICpyZXBseV9kYXRhKVxuK3tcbitcdGJvb2wgY29tcGFjdCA9IHJlcV9pbmZvLVx1MDAzZWZsYWdzIFx1MDAyNiBFVEhUT09MX0ZMQUdfQ09NUEFDVF9CSVRTRVRTO1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YSAqcmVwbHkgPSBQT1JUX1JFUERBVEEocmVwbHlfZGF0YSk7XG4rXHRzaXplX3Qgc2l6ZSA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LyogRVRIVE9PTF9BX1BPUlRfSUQgKi9cbitcdHNpemUgKz0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpO1xuK1xuK1x0aWYgKCFyZXBseS1cdTAwM2VtaWkpIHtcbitcdFx0LyogRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX01PREVTICovXG4rXHRcdHJldCA9IGV0aG5sX2JpdHNldF9zaXplKHJlcGx5LVx1MDAzZXN1cHBvcnRlZCwgTlVMTCxcbitcdFx0XHRcdFx0X19FVEhUT09MX0xJTktfTU9ERV9NQVNLX05CSVRTLFxuK1x0XHRcdFx0XHRsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdHNpemUgKz0gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMgKi9cbitcdFx0cmV0ID0gZXRobmxfYml0c2V0X3NpemUocmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbitcdFx0XHRcdFx0UEhZX0lOVEVSRkFDRV9NT0RFX01BWCxcbitcdFx0XHRcdFx0cGh5X2ludGVyZmFjZV9uYW1lcywgY29tcGFjdCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0c2l6ZSArPSByZXQ7XG4rXHR9XG4rXG4rXHQvKiBFVEhUT09MX0FfUE9SVF9UWVBFICovXG4rXHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbitcbitcdC8qIEVUSFRPT0xfQV9QT1JUX1VQU1RSRUFNX1BPUlQgKi9cbitcdGlmIChyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KVxuK1x0XHRzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTtcbitcbitcdHJldHVybiBzaXplO1xuK31cbitcbitzdGF0aWMgaW50IHBvcnRfZmlsbF9yZXBseShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBldGhubF9yZXFfaW5mbyAqcmVxX2luZm8sXG4rXHRcdFx0ICAgY29uc3Qgc3RydWN0IGV0aG5sX3JlcGx5X2RhdGEgKnJlcGx5X2RhdGEpXG4re1xuK1x0Ym9vbCBjb21wYWN0ID0gcmVxX2luZm8tXHUwMDNlZmxhZ3MgXHUwMDI2IEVUSFRPT0xfRkxBR19DT01QQUNUX0JJVFNFVFM7XG4rXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseSA9IFBPUlRfUkVQREFUQShyZXBseV9kYXRhKTtcbitcdGludCByZXQsIHBvcnRfdHlwZSA9IEVUSFRPT0xfUE9SVF9UWVBFX01ESTtcbitcbitcdGlmIChubGFfcHV0X3UzMihza2IsIEVUSFRPT0xfQV9QT1JUX0lELCByZXBseS1cdTAwM2Vwb3J0X2lkKSlcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdGlmICghcmVwbHktXHUwMDNlbWlpKSB7XG4rXHRcdHJldCA9IGV0aG5sX3B1dF9iaXRzZXQoc2tiLCBFVEhUT09MX0FfUE9SVF9TVVBQT1JURURfTU9ERVMsXG4rXHRcdFx0XHQgICAgICAgcmVwbHktXHUwMDNlc3VwcG9ydGVkLCBOVUxMLFxuK1x0XHRcdFx0ICAgICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyxcbitcdFx0XHRcdCAgICAgICBsaW5rX21vZGVfbmFtZXMsIGNvbXBhY3QpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBldGhubF9wdXRfYml0c2V0KHNrYiwgRVRIVE9PTF9BX1BPUlRfU1VQUE9SVEVEX0lOVEVSRkFDRVMsXG4rXHRcdFx0XHQgICAgICAgcmVwbHktXHUwMDNlaW50ZXJmYWNlcywgTlVMTCxcbitcdFx0XHRcdCAgICAgICBQSFlfSU5URVJGQUNFX01PREVfTUFYLFxuK1x0XHRcdFx0ICAgICAgIHBoeV9pbnRlcmZhY2VfbmFtZXMsIGNvbXBhY3QpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAocmVwbHktXHUwMDNlbWlpIHx8IHJlcGx5LVx1MDAzZXNmcClcbitcdFx0cG9ydF90eXBlID0gRVRIVE9PTF9QT1JUX1RZUEVfU0ZQO1xuK1xuK1x0aWYgKG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfVFlQRSwgcG9ydF90eXBlKSlcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdGlmIChyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0IFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgRVRIVE9PTF9BX1BPUlRfVVBTVFJFQU1fUE9SVCxcbitcdFx0XHRyZXBseS1cdTAwM2V1cHN0cmVhbV9wb3J0KSlcbitcdFx0cmV0dXJuIC1FTVNHU0laRTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdHJ1Y3QgcG9ydF9kdW1wX2N0eCB7XG4rXHRzdHJ1Y3QgcG9ydF9yZXFfaW5mb1x0KnJlcV9pbmZvO1xuK1x0c3RydWN0IHBvcnRfcmVwbHlfZGF0YVx0KnJlcGx5X2RhdGE7XG4rXHR1bnNpZ25lZCBsb25nXHRcdGlmaW5kZXg7XG4rXHR1bnNpZ25lZCBsb25nXHRcdHBvc19pZmluZGV4O1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRwb3NfcG9ydGlkO1xuK307XG4rXG4rc3RhdGljIHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpcbitwb3J0X2R1bXBfY3R4X2dldChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0cmV0dXJuIChzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqKWNiLVx1MDAzZWN0eDtcbit9XG4rXG4raW50IGV0aG5sX3BvcnRfZHVtcF9zdGFydChzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGdlbmxfZHVtcGl0X2luZm8gKmluZm8gPSBnZW5sX2R1bXBpdF9pbmZvKGNiKTtcbitcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4rXHRzdHJ1Y3QgbmxhdHRyICoqdGIgPSBpbmZvLVx1MDAzZWluZm8uYXR0cnM7XG4rXHRzdHJ1Y3QgcG9ydF9yZXBseV9kYXRhICpyZXBseV9kYXRhO1xuK1x0c3RydWN0IHBvcnRfcmVxX2luZm8gKnJlcV9pbmZvO1xuK1x0aW50IHJldDtcbitcbitcdEJVSUxEX0JVR19PTihzaXplb2YoKmN0eCkgXHUwMDNlIHNpemVvZihjYi1cdTAwM2VjdHgpKTtcbitcbitcdHJlcV9pbmZvID0ga3phbGxvY19vYmooKnJlcV9pbmZvKTtcbitcdGlmICghcmVxX2luZm8pXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmVwbHlfZGF0YSA9IGttYWxsb2Nfb2JqKCpyZXBseV9kYXRhKTtcbitcdGlmICghcmVwbHlfZGF0YSkge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGZyZWVfcmVxX2luZm87XG4rXHR9XG4rXG4rXHRyZXQgPSBldGhubF9wYXJzZV9oZWFkZXJfZGV2X2dldChcdTAwMjZyZXFfaW5mby1cdTAwM2ViYXNlLCB0YltFVEhUT09MX0FfUE9SVF9IRUFERVJdLFxuK1x0XHRcdFx0XHQgZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuK1x0XHRcdFx0XHQgaW5mby1cdTAwM2VpbmZvLmV4dGFjaywgZmFsc2UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBmcmVlX3JlcF9kYXRhO1xuK1xuK1x0Y3R4LVx1MDAzZWlmaW5kZXggPSAwO1xuK1x0Y3R4LVx1MDAzZXBvc19pZmluZGV4ID0gMDtcbitcbitcdC8qIEZvciBmaWx0ZXJlZCBEVU1QIHJlcXVlc3RzLCBsZXQncyBqdXN0IHN0b3JlIHRoZSBpZmluZGV4LiBXZSdsbCBjaGVja1xuK1x0ICogYWdhaW4gaWYgdGhlIG5ldGRldiBpcyBzdGlsbCB0aGVyZSB3aGVuIGxvb3Bpbmcgb3ZlciB0aGUgbmV0ZGV2IGxpc3RcbitcdCAqIGluIHRoZSBEVU1QIGxvb3AuXG4rXHQgKi9cbitcdGlmIChyZXFfaW5mby1cdTAwM2ViYXNlLmRldikge1xuK1x0XHRjdHgtXHUwMDNlaWZpbmRleCA9IHJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRcdG5ldGRldl9wdXQocmVxX2luZm8tXHUwMDNlYmFzZS5kZXYsIFx1MDAyNnJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2X3RyYWNrZXIpO1xuK1x0XHRyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IE5VTEw7XG4rXHR9XG4rXG4rXHRjdHgtXHUwMDNlcmVxX2luZm8gPSByZXFfaW5mbztcbitcdGN0eC1cdTAwM2VyZXBseV9kYXRhID0gcmVwbHlfZGF0YTtcbitcbitcdHJldHVybiAwO1xuK1xuK2ZyZWVfcmVwX2RhdGE6XG4rXHRrZnJlZShyZXBseV9kYXRhKTtcbitmcmVlX3JlcV9pbmZvOlxuK1x0a2ZyZWUocmVxX2luZm8pO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCBwb3J0X2R1bXBfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0IHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbit7XG4rXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuK1x0dm9pZCAqZWhkcjtcbitcdGludCByZXQ7XG4rXG4rXHRlaGRyID0gZXRobmxfZHVtcF9wdXQoc2tiLCBjYiwgRVRIVE9PTF9NU0dfUE9SVF9HRVRfUkVQTFkpO1xuK1x0aWYgKCFlaGRyKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0bWVtc2V0KGN0eC1cdTAwM2VyZXBseV9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHBvcnRfcmVwbHlfZGF0YSkpO1xuK1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBkZXY7XG4rXG4rXHRydG5sX2xvY2soKTtcbitcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xuK1xuK1x0cmV0ID0gcG9ydF9wcmVwYXJlX2RhdGEoXHUwMDI2Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UsIFx1MDAyNmN0eC1cdTAwM2VyZXBseV9kYXRhLVx1MDAzZWJhc2UsXG4rXHRcdFx0XHRnZW5sX2luZm9fZHVtcChjYikpO1xuK1xuK1x0bmV0ZGV2X3VubG9ja19vcHMoZGV2KTtcbitcdHJ0bmxfdW5sb2NrKCk7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IGV0aG5sX2ZpbGxfcmVwbHlfaGVhZGVyKHNrYiwgZGV2LCBFVEhUT09MX0FfUE9SVF9IRUFERVIpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBwb3J0X2ZpbGxfcmVwbHkoc2tiLCBcdTAwMjZjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZSwgXHUwMDI2Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZSk7XG4rXG4rb3V0OlxuK1x0Y3R4LVx1MDAzZXJlcGx5X2RhdGEtXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z2VubG1zZ19jYW5jZWwoc2tiLCBlaGRyKTtcbitcdGVsc2VcbitcdFx0Z2VubG1zZ19lbmQoc2tiLCBlaGRyKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcG9ydF9kdW1wX29uZV9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuK1x0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xuK1x0aW50IHJldDtcbitcbitcdGRldiA9IGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldjtcbitcbitcdGlmICghZGV2LVx1MDAzZWxpbmtfdG9wbylcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHR4YV9mb3JfZWFjaF9zdGFydChcdTAwMjZkZXYtXHUwMDNlbGlua190b3BvLVx1MDAzZXBvcnRzLCBjdHgtXHUwMDNlcG9zX3BvcnRpZCwgcG9ydCxcbitcdFx0XHQgIGN0eC1cdTAwM2Vwb3NfcG9ydGlkKSB7XG4rXHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2Vwb3J0X2lkID0gY3R4LVx1MDAzZXBvc19wb3J0aWQ7XG4rXG4rXHRcdHJldCA9IHBvcnRfZHVtcF9vbmUoc2tiLCBkZXYsIGNiKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0Y3R4LVx1MDAzZXBvc19wb3J0aWQgPSAwO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcG9ydF9kdW1wX2FsbF9kZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdHN0cnVjdCBwb3J0X2R1bXBfY3R4ICpjdHggPSBwb3J0X2R1bXBfY3R4X2dldChjYik7XG4rXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuK1x0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRmb3JfZWFjaF9uZXRkZXZfZHVtcChuZXQsIGRldiwgY3R4LVx1MDAzZXBvc19pZmluZGV4KSB7XG4rXHRcdG5ldGRldl9ob2xkKGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIsIEdGUF9BVE9NSUMpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdFx0Y3R4LVx1MDAzZXJlcV9pbmZvLVx1MDAzZWJhc2UuZGV2ID0gZGV2O1xuK1x0XHRyZXQgPSBwb3J0X2R1bXBfb25lX2Rldihza2IsIGNiKTtcbitcbitcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRuZXRkZXZfcHV0KGRldiwgXHUwMDI2ZGV2X3RyYWNrZXIpO1xuK1x0XHRjdHgtXHUwMDNlcmVxX2luZm8tXHUwMDNlYmFzZS5kZXYgPSBOVUxMO1xuK1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXQgPSAwO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgZXRobmxfcG9ydF9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBnZW5sX2R1bXBpdF9pbmZvICppbmZvID0gZ2VubF9kdW1waXRfaW5mbyhjYik7XG4rXHRzdHJ1Y3QgcG9ydF9kdW1wX2N0eCAqY3R4ID0gcG9ydF9kdW1wX2N0eF9nZXQoY2IpO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRpZiAoY3R4LVx1MDAzZWlmaW5kZXgpIHtcbitcdFx0bmV0ZGV2aWNlX3RyYWNrZXIgZGV2X3RyYWNrZXI7XG4rXHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4rXG4rXHRcdGRldiA9IG5ldGRldl9nZXRfYnlfaW5kZXgoZ2VubF9pbmZvX25ldChcdTAwMjZpbmZvLVx1MDAzZWluZm8pLFxuK1x0XHRcdFx0XHQgIGN0eC1cdTAwM2VpZmluZGV4LCBcdTAwMjZkZXZfdHJhY2tlcixcbitcdFx0XHRcdFx0ICBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFkZXYpXG4rXHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRcdGN0eC1cdTAwM2VyZXFfaW5mby1cdTAwM2ViYXNlLmRldiA9IGRldjtcbitcdFx0cmV0ID0gcG9ydF9kdW1wX29uZV9kZXYoc2tiLCBjYik7XG4rXG4rXHRcdG5ldGRldl9wdXQoZGV2LCBcdTAwMjZkZXZfdHJhY2tlcik7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSBwb3J0X2R1bXBfYWxsX2Rldihza2IsIGNiKTtcbitcdH1cbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludCBldGhubF9wb3J0X2R1bXBfZG9uZShzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4re1xuK1x0c3RydWN0IHBvcnRfZHVtcF9jdHggKmN0eCA9IHBvcnRfZHVtcF9jdHhfZ2V0KGNiKTtcbitcbitcdGtmcmVlKGN0eC1cdTAwM2VyZXFfaW5mbyk7XG4rXHRrZnJlZShjdHgtXHUwMDNlcmVwbHlfZGF0YSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGV0aG5sX3JlcXVlc3Rfb3BzIGV0aG5sX3BvcnRfcmVxdWVzdF9vcHMgPSB7XG4rXHQucmVxdWVzdF9jbWRcdFx0PSBFVEhUT09MX01TR19QT1JUX0dFVCxcbitcdC5yZXBseV9jbWRcdFx0PSBFVEhUT09MX01TR19QT1JUX0dFVF9SRVBMWSxcbitcdC5oZHJfYXR0clx0XHQ9IEVUSFRPT0xfQV9QT1JUX0hFQURFUixcbitcdC5yZXFfaW5mb19zaXplXHRcdD0gc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcV9pbmZvKSxcbitcdC5yZXBseV9kYXRhX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBwb3J0X3JlcGx5X2RhdGEpLFxuK1xuK1x0LnBhcnNlX3JlcXVlc3RcdFx0PSBwb3J0X3BhcnNlX3JlcXVlc3QsXG4rXHQucHJlcGFyZV9kYXRhXHRcdD0gcG9ydF9wcmVwYXJlX2RhdGEsXG4rXHQucmVwbHlfc2l6ZVx0XHQ9IHBvcnRfcmVwbHlfc2l6ZSxcbitcdC5maWxsX3JlcGx5XHRcdD0gcG9ydF9maWxsX3JlcGx5LFxuK307XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDo1MjoxMy45NDgxMjA2NDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA4MTA3NzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIENhbmRpZGF0ZSBEZXRlcm1pbmF0aW9uOiBldGh0b29sIE5ldGxpbmsgUG9ydCBJbmZvcm1hdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggc2VyaWVzIGhlcmUgdGhhdCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kLCBgRVRIVE9PTF9NU0dfUE9SVF9HRVRgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiZG9lcyB0aGlzIGludHJvZHVjZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmc/XCIgVGhlIGFuc3dlciBpcyBsZWFuaW5nIHRvd2FyZHMgeWVzLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGdldHRpbmcgbmV3IGZ1bmN0aW9uYWxpdHkgdG8gcmV0cmlldmUgcG9ydCBpbmZvcm1hdGlvbiBmb3IgbmV0d29yayBkZXZpY2VzLCBzcGVjaWZpY2FsbHksIHBoeXNpY2FsIGNvbm5lY3Rpb24gcG9pbnRzLiBJdCdzIGFkZGluZyBzdXBwb3J0IGZvciBgcGh5X3BvcnRgIGluIGBwaHlfbGlua190b3BvbG9neWAuIFRoaXMgdG91Y2hlcyBhIGdvb2QgbnVtYmVyIG9mIGZpbGVzOiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5X2xpbmtfdG9wb2xvZ3kuY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCwgYG5ldC9ldGh0b29sL3BvcnQuY2AsIGFuZCBgbmV0L2V0aHRvb2wvbmV0bGluay5jYC4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdXJmYWNlIGFyZWEuIFRoaXMgbmV3IG5ldGxpbmsgQVBJIG1lYW5zIHVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgdHJpZ2dlciB0aGVzZSBjaGFuZ2VzLiBTbyB5ZXMsIGl0J3MgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLCB3aGljaCBwb2ludHMgdG93YXJkcyBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCBpcyBwcmV0dHkgc3RhbmRhcmQsIEknZCBleHBlY3QgaXQgdG8gYmUgZW5hYmxlZC4gVGhlbiwgdGhlcmUncyBgQ09ORklHX1BIWUxJQmAgZm9yIGBwaHlfbGlua190b3BvbG9neS5jYCBhbmQgYHBoeV9kZXZpY2UuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBgQ09ORklHX1BIWUxJTktgIGlzIG9idmlvdXNseSBuZWVkZWQgZm9yIGBwaHlsaW5rLmNgLiBgQ09ORklHX01ESU9fREVWSUNFYCBpcyBsaWtlbHkgYWxzbyBkZWZhdWx0LCBhbmQgYENPTkZJR19TRlBgICptaWdodCogYmUgcmVsZXZhbnQgc2luY2UgYHBoeWxpbmsuY2AgYW5kIGBwaHlfZGV2aWNlLmNgIHVzZSBgc2ZwX2J1c2AsIGJ1dCB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBzZWVtcyBicm9hZGVyIHRoYW4ganVzdCBTRlAuXG5cbkknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBpdHNlbGYuIFRoZSBuZXRsaW5rIGNvbW1hbmQgaXMgYEVUSFRPT0xfTVNHX1BPUlRfR0VUYCBzbyB0aGF0J3MgYSBnb29kIHNlYXJjaCB0ZXJtLiBUaGUgZXRodG9vbCBjb2RlIGlzIHRoZSBmb2N1cywgYW5kIHRoZW4gSSdsbCBsb29rIGF0IGFsbCB0aGUgcGh5IGNvZGUuIFRoZSBmdW5jdGlvbnMgdGhhdCBzdGFuZCBvdXQgYXJlOiBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgYGV0aG5sX3BvcnRfZHVtcGl0YCwgYGV0aG5sX3BvcnRfZHVtcF9kb25lYCwgYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBgcG9ydF9maWxsX3JlcGx5YCwgYW5kIHRoZW4gdGhlIHBvcnQgYWRkaW5nL3JlbW92aW5nIGZ1bmN0aW9ucywgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgLCBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGAsIGBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0YCwgYHBoeWxpbmtfZGVzdHJveV9zZnBfY2FnZV9wb3J0YCwgYHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlsaW5rX2RlbF9zZnBfbW9kX3BvcnRgLCBgcGh5X2FkZF9zZnBfbW9kX3BvcnRgLCBgcGh5X2RlbF9zZnBfbW9kX3BvcnRgLCBgcGh5X3NldHVwX3NmcF9wb3J0YC4gVGhhdCBjb3ZlcnMgdGhlIG5ldGxpbmsgaW50ZXJmYWNlLCB0b3BvbG9neSB1cGRhdGVzLCBhbmQgU0ZQIGludGVyYWN0aW9ucy5cblxuSSdsbCBjaGVjayB0aGUgYnVpbGQgcnVsZXMgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuICBgbmV0L2V0aHRvb2wvcG9ydC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfRVRIVE9PTF9ORVRMSU5LYCBpcyBlbmFibGVkLCB3aGljaCBpcyBhcyBleHBlY3RlZC4gYGRyaXZlcnMvbmV0L3BoeS9waHlfbGlua190b3BvbG9neS5jYCwgYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLCBhbmQgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCBhbGwgYnVpbGQgd2l0aCB0aGVpciByZXNwZWN0aXZlIGNvbmZpZyBvcHRpb25zIChgQ09ORklHX1BIWUxJQmAgYW5kIGBDT05GSUdfUEhZTElOS2ApLlxuXG5MZXQncyBkbyBhIHNhbml0eSBjaGVjayBvbiB0aGUgY29uZmlncy4gYENPTkZJR19FVEhUT09MX05FVExJTktgLCBgQ09ORklHX1BIWUxJQmAsIGFuZCBgQ09ORklHX1BIWUxJTktgIGFyZSB1c3VhbGx5IGVuYWJsZWQuIFdlIG1pZ2h0IG5lZWQgYSBzcGVjaWZpYyBkcml2ZXIsIGxpa2UgYENPTkZJR19NQUNCYCwgdG8gZXhlcmNpc2UgYHBoeWxpbmtgIGZ1bGx5LCBidXQgd2UgY2FuIGxpc3QgdGhlIFBIWUxJQiBhbmQgUEhZTElOSyBjb25maWdzIGZvciBub3cuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IFNGUCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBvciBkZXBlbmRlbmNpZXMuIEEgcXVpY2sgZ3JlcCBmb3IgYENPTkZJR19TRlBgIG9yIGBzZnBfYnVzYCBzaG91bGQgZmxhZyBhbnl0aGluZyBpbXBvcnRhbnQgaW4gdGhhdCBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQxNSwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjUyOjI1LjAyOTIwMDY3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTY4MjY2NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TRlBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWc9Mjg0PUNPTkZJR19YSUxJTlhfRU1BQ0xJVEU9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnOjI4NTpDT05GSUdfU0ZQPW1cXG5hcmNoL2FybS9jb25maWdzL211bHRpX3Y3X2RlZmNvbmZpZy0yODYtQ09ORklHX0JST0FEQ09NX1BIWT15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZz02ND1DT05GSUdfTVZQUDI9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnOjY1OkNPTkZJR19TRlA9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnLTY2LUNPTkZJR19NQVJWRUxMX1BIWT15XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORykgKz0gbWlpX3RpbWVzdGFtcGVyLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjUtXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjI2Om9iai0kKENPTkZJR19TRlApXFx0XFx0Kz0gc2ZwLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6Mjc6c2ZwLW9iai0kKENPTkZJR19TRlApXFx0XFx0Kz0gc2ZwLWJ1cy5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI4LW9iai15XFx0XFx0XFx0XFx0Kz0gJChzZnAtb2JqLXkpICQoc2ZwLW9iai1tKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zZnAuaD01NjU9c3RydWN0IHNmcF91cHN0cmVhbV9vcHMge1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZnAuaC01NzctXFxuaW5jbHVkZS9saW51eC9zZnAuaDo1Nzg6I2lmIElTX0VOQUJMRUQoQ09ORklHX1NGUClcXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU3OS1jb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpzZnBfZ2V0X21vZHVsZV9jYXBzKHN0cnVjdCBzZnBfYnVzICpidXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQwMDo1MjozMC4xOTc0NzM2ODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjkzMjM2OTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBTRlAgQ29uZmlndXJhdGlvbiBhbmQgUmVsYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYENPTkZJR19TRlBgIHRoaW5nLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHByZXR0eSBzcGVjaWZpYyBzZXQgb2YgaGFyZHdhcmUgaGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBTRlBgLCBgUEhZTElCYCwgYW5kIGBQSFlMSU5LYCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaG9zZSBhcmUgdGhlIGtleSBwaWVjZXMgdG8gc3RhcnQgd2l0aC5cblxuSSdtIGdvaW5nIHRvIHB1bGwgb3V0IHRoZSBmdW5jdGlvbnMgdGhhdCBzZWVtIG1vc3QgcmVsZXZhbnQgdG8gdGhpcyBzcGVjaWZpYyBhcmVhLiBCYXNlZCBvbiBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBvbmVzIEkgc2hvdWxkIGZvY3VzIG9uOiBgZXRobmxfcG9ydF9kdW1wX3N0YXJ0YCwgYGV0aG5sX3BvcnRfZHVtcGl0YCwgYGV0aG5sX3BvcnRfZHVtcF9kb25lYCwgYHBvcnRfcGFyc2VfcmVxdWVzdGAsIGBwb3J0X3ByZXBhcmVfZGF0YWAsIGBwb3J0X3JlcGx5X3NpemVgLCBgcG9ydF9maWxsX3JlcGx5YCwgYHBoeV9saW5rX3RvcG9fYWRkX3BvcnRgLCBgcGh5X2xpbmtfdG9wb19kZWxfcG9ydGAsIGBwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0YCwgYHBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlfYWRkX3NmcF9tb2RfcG9ydGAsIGBwaHlfc2V0dXBfc2ZwX3BvcnRgLCBgcGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc2AsIGFuZCBgcGh5X3NldF91cHN0cmVhbV9wb3J0YC4gVGhlc2UgZnVuY3Rpb25zIHNlZW0gdG8gY292ZXIgdGhlIGNvcmUgYXNwZWN0cyBvZiBwb3J0IG1hbmFnZW1lbnQsIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3RlbnRpYWxseSBkZXZpY2UgZGlzY292ZXJ5IHJlbGF0ZWQgdG8gU0ZQcy5cblxuSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgcG9ydF9kdW1wX29uZV9kZXZgIGFuZCBgcG9ydF9kdW1wX2FsbF9kZXZgIGFyZSBhbHNvIHJlbGV2YW50IHRvIHdoYXQgSSdtIGRvaW5nLiBZZXAsIHRoZXkgYXBwZWFyIHRvIGJlIHZhbHVhYmxlIGluIHRoaXMgY29udGV4dCBhcyB3ZWxsLlxuXG5Ob3cgdGhhdCBJIGhhdmUgYSBjbGVhciBzZXQgb2YgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLCBJJ20gcmVhZHkgdG8gbW92ZSBmb3J3YXJkIGFuZCBmaW5hbGl6ZSBteSBhc3Nlc3NtZW50LCBsaWtlbHkgYnkgY2FsbGluZyBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1OTgsIk91dHB1dFRva2VucyI6MzAwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDAwOjUyOjM2Ljg5MDcxNTAzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3NDk1NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTRlBcIixcbiAgICBcIlBIWUxJQlwiLFxuICAgIFwiUEhZTElOS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9zdGFydFwiLFxuICAgIFwiZXRobmxfcG9ydF9kdW1waXRcIixcbiAgICBcImV0aG5sX3BvcnRfZHVtcF9kb25lXCIsXG4gICAgXCJwb3J0X3BhcnNlX3JlcXVlc3RcIixcbiAgICBcInBvcnRfcHJlcGFyZV9kYXRhXCIsXG4gICAgXCJwb3J0X3JlcGx5X3NpemVcIixcbiAgICBcInBvcnRfZmlsbF9yZXBseVwiLFxuICAgIFwicG9ydF9kdW1wX29uZV9kZXZcIixcbiAgICBcInBvcnRfZHVtcF9hbGxfZGV2XCIsXG4gICAgXCJwaHlfbGlua190b3BvX2FkZF9wb3J0XCIsXG4gICAgXCJwaHlfbGlua190b3BvX2RlbF9wb3J0XCIsXG4gICAgXCJwaHlsaW5rX2NyZWF0ZV9zZnBfY2FnZV9wb3J0XCIsXG4gICAgXCJwaHlsaW5rX2FkZF9zZnBfbW9kX3BvcnRcIixcbiAgICBcInBoeV9hZGRfc2ZwX21vZF9wb3J0XCIsXG4gICAgXCJwaHlfc2V0dXBfc2ZwX3BvcnRcIixcbiAgICBcInBoeV9jYXBzX2xpbmttb2RlX2ZpbHRlcl9pZmFjZXNcIixcbiAgICBcInBoeV9zZXRfdXBzdHJlYW1fcG9ydFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGV0aHRvb2wgbmV0bGluayBjb21tYW5kIChFVEhUT09MX01TR19QT1JUX0dFVCkgdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgcGh5c2ljYWwgY29ubmVjdGlvbiBwb2ludHMgb2YgYSBuZXR3b3JrIGRldmljZS4gSXQgbW9kaWZpZXMgdGhlIGNvcmUgUEhZIGFuZCBwaHlsaW5rIHN1YnN5c3RlbXMgdG8gdHJhY2sgYW5kIGV4cG9zZSB0aGVzZSBwb3J0cy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIHRoZW0gaGlnaGx5IHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNGUFwiLFxuICAgIFwiUEhZTElCXCIsXG4gICAgXCJQSFlMSU5LXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXRobmxfcG9ydF9kdW1wX3N0YXJ0XCIsXG4gICAgXCJldGhubF9wb3J0X2R1bXBpdFwiLFxuICAgIFwiZXRobmxfcG9ydF9kdW1wX2RvbmVcIixcbiAgICBcInBvcnRfcGFyc2VfcmVxdWVzdFwiLFxuICAgIFwicG9ydF9wcmVwYXJlX2RhdGFcIixcbiAgICBcInBvcnRfcmVwbHlfc2l6ZVwiLFxuICAgIFwicG9ydF9maWxsX3JlcGx5XCIsXG4gICAgXCJwb3J0X2R1bXBfb25lX2RldlwiLFxuICAgIFwicG9ydF9kdW1wX2FsbF9kZXZcIixcbiAgICBcInBoeV9saW5rX3RvcG9fYWRkX3BvcnRcIixcbiAgICBcInBoeV9saW5rX3RvcG9fZGVsX3BvcnRcIixcbiAgICBcInBoeWxpbmtfY3JlYXRlX3NmcF9jYWdlX3BvcnRcIixcbiAgICBcInBoeWxpbmtfYWRkX3NmcF9tb2RfcG9ydFwiLFxuICAgIFwicGh5X2FkZF9zZnBfbW9kX3BvcnRcIixcbiAgICBcInBoeV9zZXR1cF9zZnBfcG9ydFwiLFxuICAgIFwicGh5X2NhcHNfbGlua21vZGVfZmlsdGVyX2lmYWNlc1wiLFxuICAgIFwicGh5X3NldF91cHN0cmVhbV9wb3J0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZXRodG9vbCBuZXRsaW5rIGNvbW1hbmQgKEVUSFRPT0xfTVNHX1BPUlRfR0VUKSB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBwaHlzaWNhbCBjb25uZWN0aW9uIHBvaW50cyBvZiBhIG5ldHdvcmsgZGV2aWNlLiBJdCBtb2RpZmllcyB0aGUgY29yZSBQSFkgYW5kIHBoeWxpbmsgc3Vic3lzdGVtcyB0byB0cmFjayBhbmQgZXhwb3NlIHRoZXNlIHBvcnRzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhlbSBoaWdobHkgc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlbn4[1] Phase: Succeeded StartedAt: 2026-07-21 00:52:50 +0000 UTC FinishedAt: 2026-07-21 00:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 00:52:50 +0000 UTC FinishedAt: 2026-07-21 00:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2] Phase: Succeeded StartedAt: 2026-07-21 00:52:50 +0000 UTC FinishedAt: 2026-07-21 05:21:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-21 00:52:50 +0000 UTC FinishedAt: 2026-07-21 05:21:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-21 00:52:50 +0000 UTC FinishedAt: 2026-07-21 00:53:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-21 00:52:50 +0000 UTC FinishedAt: 2026-07-21 00:53:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdlbn4/series-workflowdlbn4-convert-artifact-3448051562/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-21 00:53:23 +0000 UTC FinishedAt: 2026-07-21 01:26:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-21 00:53:23 +0000 UTC FinishedAt: 2026-07-21 01:26:31 +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:*307137ca-c241-4163-a814-ff1e257342b4,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-workflowdlbn4/series-workflowdlbn4-convert-artifact-3448051562/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": "8fa5177c-203e-4a38-a443-192a478f6e6e", "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-workflowdlbn4/series-workflowdlbn4-build-action-2158218712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-21 00:53:23 +0000 UTC FinishedAt: 2026-07-21 01:26:21 +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:*307137ca-c241-4163-a814-ff1e257342b4,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-workflowdlbn4/series-workflowdlbn4-convert-artifact-3448051562/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": "8fa5177c-203e-4a38-a443-192a478f6e6e", "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-workflowdlbn4/series-workflowdlbn4-build-action-2158218712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 01:26:31 +0000 UTC FinishedAt: 2026-07-21 01:26:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 01:26:31 +0000 UTC FinishedAt: 2026-07-21 01:26:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 01:26:31 +0000 UTC FinishedAt: 2026-07-21 01:26:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 01:26:31 +0000 UTC FinishedAt: 2026-07-21 01:26:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdlbn4/series-workflowdlbn4-convert-artifact-2888511621/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 01:26:42 +0000 UTC FinishedAt: 2026-07-21 01:28:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 01:26:42 +0000 UTC FinishedAt: 2026-07-21 01:28:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8fa5177c-203e-4a38-a443-192a478f6e6e,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-workflowdlbn4/series-workflowdlbn4-build-action-2158218712/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-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-21 01:28:27 +0000 UTC FinishedAt: 2026-07-21 01:28:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-21 01:28:27 +0000 UTC FinishedAt: 2026-07-21 01:28:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-21 01:28:27 +0000 UTC FinishedAt: 2026-07-21 02:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-21 01:28:27 +0000 UTC FinishedAt: 2026-07-21 02:16:57 +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:*307137ca-c241-4163-a814-ff1e257342b4,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-workflowdlbn4/series-workflowdlbn4-convert-artifact-2888511621/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": "74056776-2e0a-4e9a-943a-b3c613da796d", "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-workflowdlbn4/series-workflowdlbn4-build-action-4250391505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-21 01:28:27 +0000 UTC FinishedAt: 2026-07-21 02:16:47 +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:*307137ca-c241-4163-a814-ff1e257342b4,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-workflowdlbn4/series-workflowdlbn4-convert-artifact-2888511621/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": "74056776-2e0a-4e9a-943a-b3c613da796d", "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-workflowdlbn4/series-workflowdlbn4-build-action-4250391505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-21 02:16:57 +0000 UTC FinishedAt: 2026-07-21 02:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-21 02:16:57 +0000 UTC FinishedAt: 2026-07-21 02:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-21 02:16:57 +0000 UTC FinishedAt: 2026-07-21 02:19:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-21 02:16:57 +0000 UTC FinishedAt: 2026-07-21 02:18:53 +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:*74056776-2e0a-4e9a-943a-b3c613da796d,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-workflowdlbn4/series-workflowdlbn4-build-action-4250391505/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-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-21 02:19:03 +0000 UTC FinishedAt: 2026-07-21 05:21:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-21 02:19:03 +0000 UTC FinishedAt: 2026-07-21 05:21:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*8fa5177c-203e-4a38-a443-192a478f6e6e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*74056776-2e0a-4e9a-943a-b3c613da796d,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-workflowdlbn4/series-workflowdlbn4-build-action-2158218712/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-workflowdlbn4/series-workflowdlbn4-build-action-4250391505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-21 02:19:03 +0000 UTC FinishedAt: 2026-07-21 02:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-21 02:19:03 +0000 UTC FinishedAt: 2026-07-21 02:19:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdlbn4/series-workflowdlbn4-convert-artifact-4124451338/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-21 02:19:03 +0000 UTC FinishedAt: 2026-07-21 02:19:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-21 02:19:03 +0000 UTC FinishedAt: 2026-07-21 02:19:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-21 02:19:03 +0000 UTC FinishedAt: 2026-07-21 02:19:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-21 02:19:13 +0000 UTC FinishedAt: 2026-07-21 05:21:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdlbn4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ethnl_port_dump_start","ethnl_port_dumpit","ethnl_port_dump_done","port_parse_request","port_prepare_data","port_reply_size","port_fill_reply","port_dump_one_dev","port_dump_all_dev","phy_link_topo_add_port","phy_link_topo_del_port","phylink_create_sfp_cage_port","phylink_add_sfp_mod_port","phy_add_sfp_mod_port","phy_setup_sfp_port","phy_caps_linkmode_filter_ifaces","phy_set_upstream_port"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"298bb2b8903323f6ef2eab4819a2e477765f0ff1","config_name":"upstream-apparmor-kasan.config","enable_configs":["SFP","PHYLIB","PHYLINK"],"series_id":"0fe81d85-974c-49f2-b796-9a7c0334310e","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-21 02:19:13 +0000 UTC FinishedAt: 2026-07-21 05:21:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8fa5177c-203e-4a38-a443-192a478f6e6e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*74056776-2e0a-4e9a-943a-b3c613da796d,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-workflowdlbn4/series-workflowdlbn4-build-action-2158218712/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-workflowdlbn4/series-workflowdlbn4-build-action-4250391505/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-workflowdlbn4/series-workflowdlbn4-convert-artifact-4124451338/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,}