Name: series-workflown2f2f Phase: Succeeded StartedAt: 2026-07-10 18:29:02 +0000 UTC FinishedAt: 2026-07-10 20:02:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[0] Phase: Succeeded StartedAt: 2026-07-10 18:29:02 +0000 UTC FinishedAt: 2026-07-10 18:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 18:29:02 +0000 UTC FinishedAt: 2026-07-10 18:48:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ACPI_RAS2", "MEM_ACPI_RAS2", "EDAC_SCRUB", "PCC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ACPI_RAS2", "MEM_ACPI_RAS2", "EDAC_SCRUB", "PCC" ], "series_id": "5040b478-7bdb-4326-a6b4-5685754ec2d4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "parse_ras2_table", "ras2_send_pcc_cmd", "ras2_mem_drv_probe", "ras2_update_patrol_scrub_params_cache", "ras2_get_demand_scrub_running", "ras2_scrub_monitor_thread", "ras2_hw_scrub_cycle_write", "ras2_hw_scrub_write_addr", "ras2_hw_scrub_write_size", "__ras2_hw_scrub_set_enabled_bg", "ras2_hw_scrub_set_enabled_od" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FDUElfUkFTMiYjMzQ7LAogICAgJiMzNDtNRU1fQUNQSV9SQVMyJiMzNDssCiAgICAmIzM0O0VEQUNfU0NSVUImIzM0OywKICAgICYjMzQ7UENDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFyc2VfcmFzMl90YWJsZSYjMzQ7LAogICAgJiMzNDtyYXMyX3NlbmRfcGNjX2NtZCYjMzQ7LAogICAgJiMzNDtyYXMyX21lbV9kcnZfcHJvYmUmIzM0OywKICAgICYjMzQ7cmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZSYjMzQ7LAogICAgJiMzNDtyYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyYjMzQ7LAogICAgJiMzNDtyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUmIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl93cml0ZV9hZGRyJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSYjMzQ7LAogICAgJiMzNDtfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcmIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEFDUEkgUkFTMiBkcml2ZXIgdGhhdCBwYXJzZXMgdGhlIFJBUzIgQUNQSSB0YWJsZSBhbmQgcmVnaXN0ZXJzIGF1eGlsaWFyeSBkZXZpY2VzIGZvciBtZW1vcnkgc2NydWJiaW5nLiBJdCBhbHNvIGFkZHMgYSBkcml2ZXIgdGhhdCBiaW5kcyB0byB0aGVzZSBhdXhpbGlhcnkgZGV2aWNlcyBhbmQgZXhwb3NlcyBFREFDIHNjcnViIHN5c2ZzIGludGVyZmFjZXMgdG8gY29udHJvbCBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nIHZpYSBQQ0MgKFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCkuIFNpbmNlIHN5emthbGxlciBjYW4gaW5qZWN0IEFDUEkgdGFibGVzIChpbmNsdWRpbmcgUkFTMiBhbmQgUENDVCkgYW5kIGludGVyYWN0IHdpdGggc3lzZnMsIHRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2JlY2I0ZjJiNzIzNDNiYjc1NGYxNGM2MTlkYjM1YzdhNGYzODMwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDE4OjQ3OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuaW5kZXggYWI2MDE0NzQzZGE1NjguLjJiODc0ZTAzMzYyMzM0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbkBAIC0yMCwxMSAmIzQzOzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcdDYuMTVcbiBDb250YWN0Olx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcbiBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4tXHRcdGZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy5cbi1cdFx0VGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuXG4tXG4tXHRcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcbi1cdFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXG4mIzQzO1x0XHRmb3IgZGVtYW5kIHNjcnViYmluZy5cbiBcbiBXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL3NpemVcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG5AQCAtMzQsNiAmIzQzOzMwLDE0IEBAIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4gXHRcdChvbi1kZW1hbmQgc2NydWJiaW5nKS5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXG4mIzQzO0RhdGU6XHRcdEphbiAyMDI2XG4mIzQzO0tlcm5lbFZlcnNpb246XHQ2LjE5XG4mIzQzO0NvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuJiM0MztEZXNjcmlwdGlvbjpcbiYjNDM7XHRcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcbiYjNDM7XHRcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXG4mIzQzO1xuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmRcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG4gS2VybmVsVmVyc2lvbjpcdDYuMTVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuaW5kZXggMmNmYTc0ZmExZmZkMmYuLjU2MmJmZDZmZjYzMDUxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuQEAgLTM0MCwzICYjNDM7MzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXG4gXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxuJiM0MztcbiYjNDM7My4gQUNQSSBSQVMyIEhhcmR3YXJlLWJhc2VkIE1lbW9yeSBTY3J1YmJpbmdcbiYjNDM7XG4mIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxuJiM0MztcbiYjNDM7My4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cbiYjNDM7XG4mIzQzO0FwcGxpY2FibGUgdG8gYm90aCBkZW1hbmQgYW5kIGJhY2tncm91bmQgc2NydWJiaW5nLiBUaGUgdW5pdCBvZiB0aGVcbiYjNDM7c2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cbiYjNDM7XG4mIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszNjAwMFxuJiM0MztcbiYjNDM7My4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXG4mIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7MzYwMFxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7ODY0MDBcbiYjNDM7XG4mIzQzOzMuMS40LiBQcm9ncmFtIHNjcnViYmluZyBmb3IgdGhlIG1lbW9yeSByZWdpb24gaW4gUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGV2ZXJ5XG4mIzQzOzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxuJiM0MztcbiYjNDM7IyBlY2hvIDQzMjAwIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7My4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxuJiM0MztcbiYjNDM7U2V0ICYjMzk7YWRkciYjMzk7IG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxuJiM0MztcbiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXG4mIzQzO1xuJiM0MztTZXQgJiMzOTtzaXplJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMHgyMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXG4mIzQzO1xuJiM0MzszLjEuNi4gU3RhcnQgJiMzOTtkZW1hbmQgc2NydWJiaW5nJiMzOTsuXG4mIzQzO1xuJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuJiM0Mzt3aWxsIGJlIHN0b3BwZWQgYW5kIHRoZW4gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZVxuJiM0MztkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cbiYjNDM7XG4mIzQzOyMgZWNobyAxIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuJiM0MztcbiYjNDM7My4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxuJiM0MztcbiYjNDM7My4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcbiYjNDM7c2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMjE2MDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszLjIuMy4gU3RhcnQgJiMzOTtiYWNrZ3JvdW5kIHNjcnViYmluZyYjMzk7LlxuJiM0MztcbiYjNDM7IyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuQEAgLTI5NCw2ICYjNDM7Mjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXG4gXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiBcbiYjNDM7Y29uZmlnIEFDUElfUkFTMlxuJiM0MztcdGJvb2wgXCYjMzQ7QUNQSSBSQVMyIGRyaXZlclwmIzM0O1xuJiM0MztcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4mIzQzO1x0ZGVwZW5kcyBvbiBNQUlMQk9YXG4mIzQzO1x0ZGVwZW5kcyBvbiBQQ0NcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxuJiM0MztcdCAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cbiYjNDM7XG4gY29uZmlnIEFDUElfUFJPQ0VTU09SXG4gXHR0cmlzdGF0ZSBcJiMzNDtQcm9jZXNzb3JcJiMzNDtcbiBcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbkBAIC0xMDUsNiAmIzQzOzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpXHQmIzQzOz0gZWNfc3lzLm9cbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVx0XHQmIzQzOz0gYmdydC5vXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXHQmIzQzOz0gY3BwY19hY3BpLm9cbiBvYmotJChDT05GSUdfQUNQSV9TUENSX1RBQkxFKVx0JiM0Mzs9IHNwY3Iub1xuJiM0MztvYmotJChDT05GSUdfQUNQSV9SQVMyKVx0XHQmIzQzOz0gcmFzMi5vXG4gb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgJiM0Mzs9IGFjcGlfZGJnLm9cbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcdCYjNDM7PSBwcHR0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcdCYjNDM7PSBwZnJfdXBkYXRlLm8gcGZyX3RlbGVtZXRyeS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jXG5pbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuY1xuQEAgLTMxLDYgJiM0MzszMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYWNwaS9hcGVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm10LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG5AQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuIFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XG4gXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XG4gXHRhY3BpX3Zpb3RfaW5pdCgpO1xuJiM0MztcdGFjcGlfcmFzMl9pbml0KCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI2NjcwMGUwZTdkMzUyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5AQCAtMCwwICYjNDM7MSw1MDIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBTdXBwb3J0IGZvciBSQVMyIHRhYmxlIC0gQUNQSSA2LjUgU3BlY2lmaWNhdGlvbiwgc2VjdGlvbiA1LjIuMjEsIHdoaWNoXG4mIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxuJiM0MzsgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXG4mIzQzOyAqIFBDQyBjaGFubmVsIHN1YnNwYWNlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyN1bmRlZiBwcl9mbXRcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtBQ1BJIFJBUzI6IFwmIzM0OyBmbXRcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3BjYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbiYjNDM7ICogQG1ib3hfY2xpZW50Olx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxuJiM0MzsgKiBAcGNjX2NoYW46XHRcdFBvaW50ZXIgdG8gc3RydWN0IHBjY19tYm94X2NoYW5cbiYjNDM7ICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAZWxlbTpcdFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xuJiM0MzsgKiBAcGNjX2xvY2s6XHRcdFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuJiM0MzsgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIEBkZWFkbGluZV91czpcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xuJiM0MzsgKlx0XHRcdGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uXG4mIzQzOyAqIEBwY2NfbXBhcjpcdFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXG4mIzQzOyAqIEBwY2NfbXJ0dDpcdFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXG4mIzQzOyAqXHRcdFx0T1MgbXVzdCB3YWl0IGFmdGVyIGNvbXBsZXRpb24gb2YgYSBQQ0MgY29tbWFuZCBiZWZvcmVcbiYjNDM7ICpcdFx0XHRpc3N1aW5nIG5leHQgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9tcGFyX3Jlc2V0Olx0VGltZSBvZiBsYXN0IE1QQVIgY291bnQgcmVzZXRcbiYjNDM7ICogQG1wYXJfY291bnQ6XHRcdE1QQVIgY291bnRcbiYjNDM7ICogQHBjY19pZDpcdFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcbiYjNDM7ICogQGxhc3RfY21kOlx0XHRMYXN0IFBDQyBjb21tYW5kXG4mIzQzOyAqIEBrcmVmOlx0XHRrcmVmIG9iamVjdFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJhczJfc3NwY2Mge1xuJiM0MztcdHN0cnVjdCBtYm94X2NsaWVudFx0XHRtYm94X2NsaWVudDtcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhblx0XHQqcGNjX2NoYW47XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdFx0ZWxlbTtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwY2NfbG9jaztcbiYjNDM7XHR1NjRcdFx0XHRcdGRlYWRsaW5lX3VzO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcGFyO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcnR0O1xuJiM0MztcdGt0aW1lX3RcdFx0XHRcdGxhc3RfY21kX2NtcGxfdGltZTtcbiYjNDM7XHRrdGltZV90XHRcdFx0XHRsYXN0X21wYXJfcmVzZXQ7XG4mIzQzO1x0aW50XHRcdFx0XHRtcGFyX2NvdW50O1xuJiM0MztcdGludFx0XHRcdFx0cGNjX2lkO1xuJiM0MztcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4mIzQzO1x0c3RydWN0IGtyZWZcdFx0XHRrcmVmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXG4mIzQzOyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxuJiM0MzsjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXG4mIzQzOyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcbiYjNDM7XG4mIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1x0dTMyIGNhcF9zdGF0dXM7XG4mIzQzO1x0dTE2IHN0YXR1cztcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxuJiM0MztcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuJiM0MztcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuJiM0MztcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbiYjNDM7XHQgKiBiaXQgaXMgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbiYjNDM7XHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG4mIzQzO1x0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCk7XG4mIzQzO1x0XHRzdGF0dXMgXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcbiYjNDM7XHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiYjNDM7XHRcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cbiYjNDM7XHRybWIoKTtcbiYjNDM7XHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xuJiM0MztcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxuJiM0MztcdFx0cmMgPSAtRVBFUk07XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9CVVNZOlxuJiM0MztcdFx0cmMgPSAtRUJVU1k7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XG4mIzQzO1x0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4mIzQzO1x0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmMgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXG4mIzQzOyAqIEByYXMyX2N0eDpcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4mIzQzO1x0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcdHM2NCB0aW1lX2RlbHRhO1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHNzcGNjID0gcmFzMl9jdHgtXHUwMDNlc3NwY2M7XG4mIzQzO1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XG4mIzQzO1x0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4mIzQzO1x0ICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZlxuJiM0MztcdCAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHR0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSk7XG4mIzQzO1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4mIzQzO1x0XHRcdGZzbGVlcChzc3BjYy1cdTAwM2VwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGVcbiYjNDM7XHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuJiM0MztcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXG4mIzQzO1x0ICogbGltaXRhdGlvbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcbiYjNDM7XHQgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGVcbiYjNDM7XHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4mIzQzO1x0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxuJiM0MztcdCAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXBhcikge1xuJiM0MztcdFx0aWYgKCFzc3BjYy1cdTAwM2VtcGFyX2NvdW50KSB7XG4mIzQzO1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbiYjNDM7XHRcdFx0aWYgKCh0aW1lX2RlbHRhIFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXHUwMDI2XHUwMDI2IHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xuJiM0MztcdFx0XHRcdGRldl9kYmcocmFzMl9jdHgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7UENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdFwmIzM0OywgY21kKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRzc3BjYy1cdTAwM2VsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTtcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudC0tO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xuJiM0MztcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4mIzQzO1xuJiM0MztcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xuJiM0MztcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdC8qIFJpbmcgZG9vcmJlbGwgKi9cbiYjNDM7XHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxuJiM0MztcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcXG5cJiMzNDssIGNtZCwgcmMpO1xuJiM0MztcdFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXG4mIzQzO1x0XHR2YWwgPSBpb3JlYWQxNihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4mIzQzO1x0XHRpb3dyaXRlMTYodmFsLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJjID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjLVx1MDAzZWxhc3RfY21kID0gY21kO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxuJiM0MztcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcbiYjNDM7XHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbiYjNDM7XHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dClcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBjY19jaGFubmVsLVx1MDAzZW1ib3gtXHUwMDNldHhkb25lX2lycSlcbiYjNDM7XHRcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCYjMzQ7YWNwaV9yYXMyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfbGlzdF9wY2NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJhczJfc3NwY2MsIGtyZWYpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbiYjNDM7XHRsaXN0X2RlbChcdTAwMjZzc3BjYy1cdTAwM2VlbGVtKTtcbiYjNDM7XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuJiM0MztcdGtmcmVlKHNzcGNjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuJiM0Mzt7XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2c3NwY2MtXHUwMDNla3JlZiwgIFx1MDAyNnJhczJfbGlzdF9wY2NfcmVsZWFzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcmFzMl9zc3BjYyAqcmFzMl9zc3BjY19nZXQoaW50IHBjY19pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShzc3BjYywgXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xuJiM0MztcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2c3NwY2MtXHUwMDNla3JlZikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBzc3BjYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XG4mIzQzO1x0aWYgKHBjY19pZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7XG4mIzQzO1x0aWYgKHNzcGNjKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9XG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlcGNjX2xvY2tcdD0gXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2s7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFzc3BjYylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuJiM0MztcdFx0a2ZyZWUoc3NwY2MpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSkge1xuJiM0MztcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHBjY19jaGFuKTtcbiYjNDM7XHRcdGtmcmVlKHNzcGNjKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19jaGFuXHRcdD0gcGNjX2NoYW47XG4mIzQzO1x0c3NwY2MtXHUwMDNlY29tbV9hZGRyXHQ9IHBjY19jaGFuLVx1MDAzZXNobWVtO1xuJiM0MztcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cdTAwM2VsYXRlbmN5O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19tcnR0XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VwY2NfbXBhclx0XHQ9IHBjY19jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PSBwY2NfY2hhbi1cdTAwM2VtY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldjtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfSURBKHJhczJfaWRhKTtcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWRhX2ZyZWUoXHUwMDI2cmFzMl9pZGEsIGF1eGRldi1cdTAwM2VpZCk7XG4mIzQzO1x0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXHUwMDNlc3NwY2MpO1xuJiM0MztcdGtmcmVlKHJhczJfY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbiYjNDM7XHR1MzIgY29tcF9uaWQ7XG4mIzQzO1x0aW50IGlkLCByYztcbiYjNDM7XG4mIzQzO1x0Y29tcF9uaWQgPSBweG1fdG9fbm9kZShweG1faW5zdCk7XG4mIzQzO1x0aWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7SW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcXG5cJiMzNDssIGNoYW5uZWwsIHB4bV9pbnN0KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7XG4mIzQzO1xuJiM0MztcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMCkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxuXCYjMzQ7LCBjaGFubmVsLFxuJiM0MztcdFx0XHQgcHhtX2luc3QsIHJjKTtcbiYjNDM7XHRcdGdvdG8gY3R4X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZCA9IGlkYV9hbGxvYyhcdTAwMjZyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGlkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyYyA9IGlkO1xuJiM0MztcdFx0Z290byBwY2NfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuaWRcdFx0PSBpZDtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2Lm5hbWVcdFx0PSBuYW1lO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcdD0gcmFzMl9yZWxlYXNlO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnBhcmVudFx0PSByYXMyX2N0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGdvdG8gaWRhX2ZyZWU7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByYXMyX2N0eDtcbiYjNDM7XG4mIzQzO2lkYV9mcmVlOlxuJiM0MztcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBpZCk7XG4mIzQzO3BjY19mcmVlOlxuJiM0MztcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVx1MDAzZXNzcGNjKTtcbiYjNDM7Y3R4X2ZyZWU6XG4mIzQzO1x0a2ZyZWUocmFzMl9jdHgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihyYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyYXMyX2N0eClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqKnBjdHhfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbiYjNDM7XHR1MTYgdG90X3RibF9sZW47XG4mIzQzO1x0dTE2IGk7XG4mIzQzO1xuJiM0MztcdGlmIChyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YoKnJhczJfdGFiKSkge1xuJiM0MztcdFx0cHJfd2FybihGV19XQVJOIFwmIzM0O0FDUEkgUkFTMiB0YWJsZSBwcmVzZW50IGJ1dCBicm9rZW4gKHRvbyBzaG9ydCwgc2l6ZT0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgfHwgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyBcdTAwM2UgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykge1xuJiM0MztcdFx0cHJfd2FybihGV19XQVJOIFwmIzM0O05vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSAmIzQzOyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTtcbiYjNDM7XHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2MgdG90X3RibF9sZW4pIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwY3R4X2xpc3QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cGNjX2Rlc2NfbGlzdCA9IChzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICopKHJhczJfdGFiICYjNDM7IDEpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3M7IGkmIzQzOyYjNDM7LCBwY2NfZGVzY19saXN0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHBjY19kZXNjX2xpc3QtXHUwMDNlZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cmFzMl9jdHggPSBhZGRfYXV4X2RldmljZShSQVMyX01FTV9ERVZfSURfTkFNRSwgcGNjX2Rlc2NfbGlzdC1cdTAwM2VjaGFubmVsX2lkLFxuJiM0MztcdFx0XHRcdFx0ICBwY2NfZGVzY19saXN0LVx1MDAzZWluc3RhbmNlKTtcbiYjNDM7XHRcdC8qIEludmFsaWQgTlVNQSBub2RlLCBjb250aW51ZSBwYXJzaW5nIG5leHQgbm9kZSAqL1xuJiM0MztcdFx0aWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKElTX0VSUihyYXMyX2N0eCkpIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXG5cJiMzNDssIFBUUl9FUlIocmFzMl9jdHgpKTtcbiYjNDM7XHRcdFx0Zm9yICg7IGkgXHUwMDNlIDA7IGktLSkge1xuJiM0MztcdFx0XHRcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxuJiM0MztcdFx0XHRcdFx0cmVtb3ZlX2F1eF9kZXZpY2UocGN0eF9saXN0W2kgLSAxXSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0a2ZyZWUocGN0eF9saXN0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIocmFzMl9jdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XG4mIzQzO1x0fVxuJiM0MztcdGtmcmVlKHBjdHhfbGlzdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2VcbiYjNDM7ICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuXG4mIzQzOyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxuJiM0MzsgKiBtZW1vcnkgZmVhdHVyZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogbm9uZS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcbiYjNDM7XHRhY3BpX3N0YXR1cyBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXHUwMDI2cmFzMl90YWIpO1xuJiM0MztcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIGdldCB0YWJsZSwgJXNcXG5cJiMzNDssIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAIGVudW0gZWRhY19zY3J1Yl9hdHRyaWJ1dGVzIHtcbiBcdFNDUlVCX0FERFJFU1MsXG4gXHRTQ1JVQl9TSVpFLFxuIFx0U0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkQsXG4mIzQzO1x0U0NSVUJfRU5BQkxFX0RFTUFORCxcbiBcdFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX01BWF9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTixcbkBAIC01NSw2ICYjNDM7NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcJiMzNDsweCVsbHhcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coc2l6ZSwgcmVhZF9zaXplLCB1NjQsIFwmIzM0OzB4JWxseFxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuJiM0MztFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfZGVtYW5kLCBnZXRfZW5hYmxlZF9vZCwgYm9vbCwgXCYjMzQ7JXVcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCBcJiMzNDsldVxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBnZXRfY3ljbGVfZHVyYXRpb24sIHUzMiwgXCYjMzQ7JXVcXG5cJiMzNDspXG5AQCAtODQsNiAmIzQzOzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFx0XHRcdFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2JhY2tncm91bmQsIHNldF9lbmFibGVkX2JnLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBcbiBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxuQEAgLTExOSw2ICYjNDM7MTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50XG4gXHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNDUlVCX0VOQUJMRV9ERU1BTkQ6XG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWdldF9lbmFibGVkX29kKSB7XG4mIzQzO1x0XHRcdGlmIChvcHMtXHUwMDNlc2V0X2VuYWJsZWRfb2QpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGEtXHUwMDNlbW9kZTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdHJldHVybiAwNDQ0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjpcbiBcdFx0aWYgKG9wcy1cdTAwM2VnZXRfbWluX2N5Y2xlKVxuIFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG5AQCAtMTY0LDYgJiM0MzsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcbiBcdFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxuJiM0MztcdFx0W1NDUlVCX0VOQUJMRV9ERU1BTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9kZW1hbmQsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX01JTl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWluX2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1heF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuQEAgLTQ2LDQgJiM0Mzs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE1cbiBcdCAgTWVtb3J5IHdpbGwgYmUgcmV0aXJlZCBkdXJpbmcgYm9vdCB0aW1lIGFuZCBydW4gdGltZSBkZXBlbmRpbmcgb25cbiBcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXG4gXG4mIzQzO2NvbmZpZyBNRU1fQUNQSV9SQVMyXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEFDUElfUkFTMlxuJiM0MztcdGRlcGVuZHMgb24gRURBQ1xuJiM0MztcdGRlcGVuZHMgb24gRURBQ19TQ1JVQlxuJiM0MztcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMlxuJiM0MztcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXG4mIzQzO1x0ICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXNcbiYjNDM7XHQgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyXG4mIzQzO1x0ICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS5cbiYjNDM7XG4gZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZSBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5pbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcbkBAIC0yLDYgJiM0MzsyLDcgQEBcbiBvYmotJChDT05GSUdfUkFTKVx0JiM0Mzs9IHJhcy5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX0ZTKVx0JiM0Mzs9IGRlYnVnZnMub1xuIG9iai0kKENPTkZJR19SQVNfQ0VDKVx0JiM0Mzs9IGNlYy5vXG4mIzQzO29iai0kKENPTkZJR19NRU1fQUNQSV9SQVMyKVx0JiM0Mzs9IGFjcGlfcmFzMi5vXG4gXG4gb2JqLSQoQ09ORklHX1JBU19GTVBNKVx0JiM0Mzs9IGFtZC9mbXBtLm9cbiBvYmoteVx0XHRcdCYjNDM7PSBhbWQvYXRsL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjY4YjFjMzhkZGY5MDVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5AQCAtMCwwICYjNDM7MSw2MDMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I3VuZGVmIHByX2ZtdFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpXHRcJiMzNDtBQ1BJIFJBUzIgTUVNT1JZOiBcJiMzNDsgZm10XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZWRhYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDFcbiYjNDM7I2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXG4mIzQzOyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSQVMyIHBhdHJvbCBzY3J1YlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4XG4mIzQzOyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMFxuJiM0MztcbiYjNDM7c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BhdHJvbF9zY3J1Yl9wYXJhbSBwYXJhbXM7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRPX0FDUElfUkFTMl9QU19TSE1FTShfYWRkcikgXFxcbiYjNDM7XHRjb250YWluZXJfb2YoX2FkZHIsIHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSwgY29tbW9uKVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRpb3dyaXRlOCgwLCBcdTAwMjZjb21tb24tXHUwMDNlc2V0X2NhcHNbMF0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9yZWFkOChcdTAwMjZjb21tb24tXHUwMDNlZmVhdHVyZXNbMF0pIFx1MDAyNiBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuJiM0MztcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19vdXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiYjNDM7XHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19vdXQpO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgIChpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSB0cnVlO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IGlvcmVhZDY0KFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIENvbnRleHQgLSBQQ0MgbG9jayBtdXN0IGJlIGhlbGQgKi9cbiYjNDM7c3RhdGljIGludCByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgYm9vbCAqcnVubmluZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XG4mIzQzO1x0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4LVx1MDAzZW9kX3NjcnViKSB7XG4mIzQzO1x0XHQqcnVubmluZyA9IGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuJiM0MztcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX3NpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqcnVubmluZyA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5mbGFncykgXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HO1xuJiM0MztcdGlmICghKCpydW5uaW5nKSlcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuJiM0MztcdFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxuJiM0MztcdFx0XHRnb3RvIGV4aXQ7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElmIHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKCkgZmFpbHMgaGVyZSwgcmUtZW5hYmxpbmcgYmFja2dyb3VuZFxuJiM0MztcdFx0ICogc2NydWJiaW5nIGltbWVkaWF0ZWx5IG1heSBub3QgYmUgcG9zc2libGUgb3IgY29ycmVjdC4gSW4gdGhhdCBjYXNlLFxuJiM0MztcdFx0ICogdGhlIGFkbWluIG9yIGZpcm13YXJlIG1heSBuZWVkIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViYmluZ1xuJiM0MztcdFx0ICogYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gZXhpdDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXJ1bm5pbmcpIHtcbiYjNDM7XHRcdFx0cmV0ID0gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHJhczJfY3R4LVx1MDAzZWRldiwgcmFzMl9jdHgsIHRydWUpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIHJldD0lZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XG4mIzQzO1x0XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdFx0bXNsZWVwKDEwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO2V4aXQ6XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUpXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdCptaW4gPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1heClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0Km1heCA9IHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpzY3J1Yl9jeWNsZV9zZWNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHNjcnViX2N5Y2xlX2hycyA9IHNjcnViX2N5Y2xlX3NlY3MgLyBSQVMyX0hPVVJfSU5fU0VDUztcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRpZiAoc2NydWJfY3ljbGVfaHJzIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgfHxcbiYjNDM7XHQgICAgc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIEJHIHNjcnViYmluZyBpcyBlbmFibGVkIHRoZSBhY3R1YWwgYWRkcmVzcyByYW5nZSBpcyBub3QgdmFsaWQuXG4mIzQzO1x0ICogUmV0dXJuIC1FQlVTWSBub3cgdW5sZXNzIGZpbmQgb3V0IGEgbWV0aG9kIHRvIHJldHJpZXZlIGFjdHVhbCBmdWxsIFBBIHJhbmdlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQqYmFzZSA9IHJhczJfY3R4LVx1MDAzZWJhc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCAqc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0KnNpemUgPSByYXMyX2N0eC1cdTAwM2VzaXplO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IGJhc2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gYmFzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaXplKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocnVubmluZylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNpemUgPSBzaXplO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdCplbmFibGVkID0gcmFzMl9jdHgtXHUwMDNlYmdfc2NydWI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuJiM0MztcdGlmIChlbmFibGUpIHtcbiYjNDM7XHRcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiB8fCBydW5uaW5nKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0XHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xuJiM0MztcdFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbiYjNDM7XHRcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdFx0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghcmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4mIzQzO1x0XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MztcdFx0aW93cml0ZTE2KFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpO1xuJiM0MztcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWJnX3NjcnViID0gZW5hYmxlO1xuJiM0MztcdGlmIChlbmFibGUpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHQvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi9cbiYjNDM7XHRcdHJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGVuYWJsZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCplbmFibGVkID0gcnVubmluZztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlbmFibGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBleGl0O1xuJiM0MztcbiYjNDM7XHRpZiAocnVubmluZykge1xuJiM0MztcdFx0cmV0ID0gLUVCVVNZO1xuJiM0MztcdFx0Z290byBleGl0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU3RvcCBhbnkgYmFja2dyb3VuZCBzY3J1YiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi9cbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIGV4aXQ7XG4mIzQzO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcbiYjNDM7XHQgKiB3aXRoIChiYXNlICYjNDM7IHNpemUpIFx1MDAzZSAobWVtX2Jhc2UgJiM0MzsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXG4mIzQzO1x0ICogcHJvcGVyIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIE5VTUEgbm9kZSBtZW1vcnkgcmFuZ2UgaXMgYXZhaWxhYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmFzMl9jdHgtXHUwMDNlc2l6ZSB8fCByYXMyX2N0eC1cdTAwM2ViYXNlIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzOiBJbnZhbGlkIGFkZHJlc3MgcmFuZ2UsIGJhc2U9MHglbGx4IHNpemU9MHglbGx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRfX2Z1bmNfXywgcmFzMl9jdHgtXHUwMDNlYmFzZSwgcmFzMl9jdHgtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0XHRyZXQgPSAtRVJBTkdFO1xuJiM0MztcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfRU5fQkFDS0dST1VORDtcbiYjNDM7XHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHN0YXJ0IGRlbWFuZCBzY3J1YmJpbmcgcmMoJWQpXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbiYjNDM7XHRcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZW5hYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViIFx1MDAyNlx1MDAyNiByYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlIFx1MDAyNlx1MDAyNiAhcmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYga3RocmVhZF9ydW4oKSBpcyBjYWxsZWQgYmVmb3JlIHNlbmRpbmcgdGhlIGNvbW1hbmQgZm9yIGRlbWFuZCBzY3J1YmJpbmcsXG4mIzQzO1x0XHQgKiB0aGUgdGhyZWFkIG1heSBkZXRlcm1pbmUgdGhhdCBkZW1hbmQgc2NydWJiaW5nIGlzIG5vdCBydW5uaW5nLCBhdHRlbXB0IHRvXG4mIzQzO1x0XHQgKiByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nLCBhbmQgdGhlbiBleGl0LiBUaGlzIGNhbiBvY2N1ciBiZWNhdXNlIHRoZVxuJiM0MztcdFx0ICogdGhyZWFkIGZ1bmN0aW9uIG1heSBzdGFydCBydW5uaW5nIGJlZm9yZSBkZW1hbmQgc2NydWJiaW5nIHN0YXJ0cy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4ocmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCwgcmFzMl9jdHgsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7cmFzMl9zY3J1Yl9uaWQlZFwmIzM0OywgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbiYjNDM7XHRcdGlmIChJU19FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsXG4mIzQzO1x0XHRcdCAqIHJlLWVuYWJsaW5nIGJhY2tncm91bmQgc2NydWIgd2lsbCBmYWlsLiBUaHVzIGFkbWluL2Zpcm13YXJlIG1heSBuZWVkXG4mIzQzO1x0XHRcdCAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRnb3RvIGV4aXQ7XG4mIzQzO1xuJiM0MztlbmFibGVfYmdfc2NydWI6XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0X19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2V4aXQ6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xuJiM0MztcdC5yZWFkX2FkZHIgPSByYXMyX2h3X3NjcnViX3JlYWRfYWRkcixcbiYjNDM7XHQucmVhZF9zaXplID0gcmFzMl9od19zY3J1Yl9yZWFkX3NpemUsXG4mIzQzO1x0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXG4mIzQzO1x0LndyaXRlX3NpemUgPSByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUsXG4mIzQzO1x0LmdldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyxcbiYjNDM7XHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxuJiM0MztcdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXG4mIzQzO1x0LnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCxcbiYjNDM7XHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXG4mIzQzO1x0LmdldF9tYXhfY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlLFxuJiM0MztcdC5nZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQsXG4mIzQzO1x0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlID0gZmFsc2U7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXRocmVhZCkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdGt0aHJlYWRfc3RvcChyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XG4mIzQzO1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBudW1fc3Bhbm5lZF9wYWdlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHJpZXZlIHRoZSBQQSByYW5nZSBvZiB0aGUgTlVNQSBkb21haW4gYW5kIHVzZSBpdCBhcyB0aGVcbiYjNDM7XHQgKiAmIzM5O1JlcXVlc3RlZCBBZGRyZXNzIFJhbmdlJiMzOTssIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmQgR0VUX1BBVFJPTF9QQVJBTUVURVJTXG4mIzQzO1x0ICogdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzIGluIHRoZSBOVU1BIGRvbWFpblxuJiM0MztcdCAqIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSIHRvIHN0YXJ0IHRoZSBkZW1hbmRcbiYjNDM7XHQgKiBzY3J1YmJpbmcuIFRoZSB2YWxpZGl0eSBjaGVjayBmb3Igc3lzX2NvbXBfbmlkIGFnYWluc3QgTlVNQV9OT19OT0RFIGlzXG4mIzQzO1x0ICogYWxyZWFkeSBwZXJmb3JtZWQgaW4gYWRkX2F1eF9kZXZpY2UoKSBpbiAvYWNwaS9yYXMyLmNcbiYjNDM7XHQgKi9cbiYjNDM7XHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuJiM0MztcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxcblwmIzM0OywgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi9cbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUpXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnM7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xuJiM0MztcbiYjNDM7XHRzcHJpbnRmKHNjcnViX25hbWUsIFwmIzM0O2FjcGlfcmFzX21lbSVkXCYjMzQ7LCBhdXhkZXYtXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRyYXNfZmVhdHVyZXMuZnRfdHlwZVx0PSBSQVNfRkVBVF9TQ1JVQjtcbiYjNDM7XHRyYXNfZmVhdHVyZXMuaW5zdGFuY2VcdD0gMDtcbiYjNDM7XHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuJiM0MztcdHJhc19mZWF0dXJlcy5jdHhcdD0gcmFzMl9jdHg7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZWRhY19kZXZfcmVnaXN0ZXIoXHUwMDI2YXV4ZGV2LVx1MDAzZWRldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgXHUwMDI2cmFzX2ZlYXR1cmVzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkIHJhczJfbWVtX2Rldl9pZF90YWJsZVtdID0ge1xuJiM0MztcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcJiMzNDsuXCYjMzQ7IFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGF1eGlsaWFyeV9kcml2ZXIgcmFzMl9tZW1fZHJpdmVyID0ge1xuJiM0MztcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG4mIzQzO1x0LnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLFxuJiM0MztcdC5yZW1vdmUgPSByYXMyX21lbV9kcnZfcmVtb3ZlLFxuJiM0MztcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7QUNQSV9SQVMyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0FDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hY3BpL3JhczIuaFxuQEAgLTAsMCAmIzQzOzEsODYgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKlxuJiM0MzsgKiBBQ1BJIFJBUzIgKFJBUyBGZWF0dXJlIFRhYmxlKSBtZXRob2RzLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZFxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX0FDUElfUkFTMl9IXG4mIzQzOyNkZWZpbmUgX0FDUElfUkFTMl9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYXV4aWxpYXJ5X2J1cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21haWxib3hfY2xpZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGV2aWNlO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XG4mIzQzOyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FIFwmIzM0O3JhczJcJiMzNDtcbiYjNDM7I2RlZmluZSBSQVMyX01FTV9ERVZfSURfTkFNRSBcJiMzNDthY3BpX3JhczJfbWVtXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJhczJfbWVtX2N0eCAtIENvbnRleHQgZm9yIFJBUzIgbWVtb3J5IGZlYXR1cmVzXG4mIzQzOyAqIEBhZGV2Olx0XHRBdXhpbGlhcnkgZGV2aWNlIG9iamVjdFxuJiM0MzsgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4mIzQzOyAqIEBkZXY6XHRcdFBvaW50ZXIgdG8gZGV2aWNlIGJhY2tpbmcgc3RydWN0IG1ib3hfY29udHJvbGxlciBmb3IgUENDXG4mIzQzOyAqIEBzc3BjYzpcdFx0UG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbiYjNDM7ICogQHBjY19sb2NrOlx0XHRQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuJiM0MzsgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIEBzeXNfY29tcF9uaWQ6XHROb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlXG4mIzQzOyAqXHRcdFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXG4mIzQzOyAqXHRcdFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxuJiM0MzsgKlx0XHRcdEZpZWxkOiBJbnN0YW5jZVxuJiM0MzsgKiBAbWVtX2Jhc2U6XHRcdEJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuJiM0MzsgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuJiM0MzsgKiBAbWVtX3NpemVcdFx0U2l6ZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXG4mIzQzOyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4mIzQzOyAqIEBiYXNlOlx0XHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcbiYjNDM7ICogQHNpemU6XHRcdFNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcbiYjNDM7ICogQHNjcnViX2N5Y2xlX2hyczpcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xuJiM0MzsgKiBAc2V0X3NjcnViX2N5Y2xlOlx0U2NydWIgcmF0ZSB0byBzZXQgaW4gaG91cnNcbiYjNDM7ICogQG1pbl9zY3J1Yl9jeWNsZTpcdE1pbmltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbiYjNDM7ICogQG1heF9zY3J1Yl9jeWNsZTpcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbiYjNDM7ICogQG9kX3NjcnViOlx0XHRTdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZyAobWVtb3J5IHJlZ2lvbilcbiYjNDM7ICogQGJnX3NjcnViOlx0XHRTdGF0dXMgb2YgYmFja2dyb3VuZCBwYXRyb2wgc2NydWJiaW5nXG4mIzQzOyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcdEZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kXG4mIzQzOyAqXHRcdFx0c2NydWJiaW5nIGlzIGZpbmlzaGVkXG4mIzQzOyAqIEB0aHJlYWQ6XHRcdERlbWFuZCBzY3J1YiBtb25pdG9yIGt0aHJlYWRcbiYjNDM7ICogQGRyaXZlcl9hY3RpdmU6XHRGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCByYXMyX21lbV9jdHgge1xuJiM0MztcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXHRcdGFkZXY7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBkZXZpY2VcdFx0XHQqZGV2O1xuJiM0MztcdHZvaWRcdFx0XHRcdCpzc3BjYztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHQqcGNjX2xvY2s7XG4mIzQzO1x0dTMyXHRcdFx0XHRzeXNfY29tcF9uaWQ7XG4mIzQzO1x0dTY0XHRcdFx0XHRtZW1fYmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdG1lbV9zaXplO1xuJiM0MztcdHU2NFx0XHRcdFx0YmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdHNpemU7XG4mIzQzO1x0dThcdFx0XHRcdHNjcnViX2N5Y2xlX2hycztcbiYjNDM7XHR1OFx0XHRcdFx0c2V0X3NjcnViX2N5Y2xlO1xuJiM0MztcdHU4XHRcdFx0XHRtaW5fc2NydWJfY3ljbGU7XG4mIzQzO1x0dThcdFx0XHRcdG1heF9zY3J1Yl9jeWNsZTtcbiYjNDM7XHRib29sXHRcdFx0XHRvZF9zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRiZ19zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRyZWVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3RcdFx0KnRocmVhZDtcbiYjNDM7XHRib29sXHRcdFx0XHRkcml2ZXJfYWN0aXZlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbiYjNDM7dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XG4mIzQzO2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0FDUElfUkFTMl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGFjLmggYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5AQCAtNjg0LDYgJiM0Mzs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQge1xuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXG4gICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLlxuICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLlxuJiM0MzsgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbiYjNDM7ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9jeWNsZV9kdXJhdGlvbjogZ2V0IGN1cnJlbnQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbkBAIC02OTYsNiAmIzQzOzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7XG4gXHRpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7XG4gXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbiBcdGludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4mIzQzO1x0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4mIzQzO1x0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbiBcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XG4gXHRpbnQgKCpnZXRfbWF4X2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptYXgpO1xuIFx0aW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBQ1BJX1JBUzImIzM0OywKICAgICYjMzQ7TUVNX0FDUElfUkFTMiYjMzQ7LAogICAgJiMzNDtFREFDX1NDUlVCJiMzNDssCiAgICAmIzM0O1BDQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhcnNlX3JhczJfdGFibGUmIzM0OywKICAgICYjMzQ7cmFzMl9zZW5kX3BjY19jbWQmIzM0OywKICAgICYjMzQ7cmFzMl9tZW1fZHJ2X3Byb2JlJiMzNDssCiAgICAmIzM0O3JhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUmIzM0OywKICAgICYjMzQ7cmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcmIzM0OywKICAgICYjMzQ7cmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCYjMzQ7LAogICAgJiMzNDtyYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfd3JpdGVfYWRkciYjMzQ7LAogICAgJiMzNDtyYXMyX2h3X3NjcnViX3dyaXRlX3NpemUmIzM0OywKICAgICYjMzQ7X19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBQ1BJIFJBUzIgZHJpdmVyIHRoYXQgcGFyc2VzIHRoZSBSQVMyIEFDUEkgdGFibGUgYW5kIHJlZ2lzdGVycyBhdXhpbGlhcnkgZGV2aWNlcyBmb3IgbWVtb3J5IHNjcnViYmluZy4gSXQgYWxzbyBhZGRzIGEgZHJpdmVyIHRoYXQgYmluZHMgdG8gdGhlc2UgYXV4aWxpYXJ5IGRldmljZXMgYW5kIGV4cG9zZXMgRURBQyBzY3J1YiBzeXNmcyBpbnRlcmZhY2VzIHRvIGNvbnRyb2wgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZyB2aWEgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpLiBTaW5jZSBzeXprYWxsZXIgY2FuIGluamVjdCBBQ1BJIHRhYmxlcyAoaW5jbHVkaW5nIFJBUzIgYW5kIFBDQ1QpIGFuZCBpbnRlcmFjdCB3aXRoIHN5c2ZzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2JlY2I0ZjJiNzIzNDNiYjc1NGYxNGM2MTlkYjM1YzdhNGYzODMwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDE4OjQ3OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViCmluZGV4IGFiNjAxNDc0M2RhNTY4Li4yYjg3NGUwMzM2MjMzNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgpAQCAtMjAsMTEgJiM0MzsyMCw3IEBAIEtlcm5lbFZlcnNpb246CTYuMTUKIENvbnRhY3Q6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiBEZXNjcmlwdGlvbjoKIAkJKFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkCi0JCWZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy4KLQkJVGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuCi0KLQkJVGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZAotCQlvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS4KJiM0MzsJCWZvciBkZW1hbmQgc2NydWJiaW5nLgogCiBXaGF0OgkJL3N5cy9idXMvZWRhYy9kZXZpY2VzLyZsdDtkZXYtbmFtZSZndDsvc2NydWJYL3NpemUKIERhdGU6CQlNYXJjaCAyMDI1CkBAIC0zNCw2ICYjNDM7MzAsMTQgQEAgRGVzY3JpcHRpb246CiAJCShSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWQKIAkJKG9uLWRlbWFuZCBzY3J1YmJpbmcpLgogCiYjNDM7V2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfZGVtYW5kCiYjNDM7RGF0ZToJCUphbiAyMDI2CiYjNDM7S2VybmVsVmVyc2lvbjoJNi4xOQomIzQzO0NvbnRhY3Q6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiYjNDM7RGVzY3JpcHRpb246CiYjNDM7CQkoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzCiYjNDM7CQlzdXBwb3J0ZWQgb25seSBpZiB0aGUgZHJpdmVyIGFuZCBoYXJkd2FyZSBzdXBwb3J0IGl0LgomIzQzOwogV2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfYmFja2dyb3VuZAogRGF0ZToJCU1hcmNoIDIwMjUKIEtlcm5lbFZlcnNpb246CTYuMTUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CkBAIC0zNDAsMyAmIzQzOzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLgogCiBTeXNmcyBmaWxlcyBmb3Igc2NydWJiaW5nIGFyZSBkb2N1bWVudGVkIGluCiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2AKJiM0MzsKJiM0MzszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZwomIzQzOwomIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLgomIzQzOwomIzQzOzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcKJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzAKJiM0MzsKJiM0MzszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuCiYjNDM7CiYjNDM7QXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZQomIzQzO3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwMAomIzQzOwomIzQzOzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLgomIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLgomIzQzOwomIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzg2NDAwCiYjNDM7CiYjNDM7My4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnkKJiM0Mzs0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS4KJiM0MzsKJiM0MzsjIGVjaG8gNDMyMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzMuMS41LiBTZXQgYWRkcmVzcyByYW5nZS4KJiM0MzsKJiM0MztTZXQgJiMzOTthZGRyJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuCiYjNDM7CiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvYWRkcgomIzQzOwomIzQzO1NldCAmIzM5O3NpemUmIzM5OyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi4KJiM0MzsKJiM0MzsjIGVjaG8gMHgyMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvc2l6ZQomIzQzOwomIzQzOzMuMS42LiBTdGFydCAmIzM5O2RlbWFuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcwomIzQzO3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlCiYjNDM7ZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuCiYjNDM7CiYjNDM7IyBlY2hvIDEgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzMuMi4gQmFja2dyb3VuZCBzY3J1YmJpbmcgdGhlIGVudGlyZSBtZW1vcnkKJiM0MzsKJiM0MzszLjIuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBiYWNrZ3JvdW5kIHNjcnViYmluZy4KJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmQKJiM0MzsKJiM0MzswCiYjNDM7CiYjNDM7My4yLjIuIFByb2dyYW0gYmFja2dyb3VuZCBzY3J1YmJpbmcgZm9yIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBpbiBldmVyeSAyMTYwMAomIzQzO3NlY29uZHMgKHF1YXJ0ZXIgb2YgYSBkYXkpLgomIzQzOwomIzQzOyMgZWNobyAyMTYwMCAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uCiYjNDM7CiYjNDM7My4yLjMuIFN0YXJ0ICYjMzk7YmFja2dyb3VuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MzsjIGVjaG8gMSAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0yOTQsNiAmIzQzOzI5NCwxNyBAQCBjb25maWcgQUNQSV9DUFBDX0xJQgogCSAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsCiAJICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC4KIAomIzQzO2NvbmZpZyBBQ1BJX1JBUzIKJiM0MzsJYm9vbCAmIzM0O0FDUEkgUkFTMiBkcml2ZXImIzM0OwomIzQzOwlzZWxlY3QgQVVYSUxJQVJZX0JVUwomIzQzOwlkZXBlbmRzIG9uIE1BSUxCT1gKJiM0MzsJZGVwZW5kcyBvbiBQQ0MKJiM0MzsJaGVscAomIzQzOwkgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yCiYjNDM7CSAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzZWxlY3QgTi4KJiM0MzsKIGNvbmZpZyBBQ1BJX1BST0NFU1NPUgogCXRyaXN0YXRlICYjMzQ7UHJvY2Vzc29yJiMzNDsKIAlkZXBlbmRzIG9uIFg4NiB8fCBBUk02NCB8fCBMT09OR0FSQ0ggfHwgUklTQ1YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQppbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUykJJiM0Mzs9IGVjX3N5cy5vCiBvYmotJChDT05GSUdfQUNQSV9CR1JUKQkJJiM0Mzs9IGJncnQubwogb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpCSYjNDM7PSBjcHBjX2FjcGkubwogb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSkJJiM0Mzs9IHNwY3IubwomIzQzO29iai0kKENPTkZJR19BQ1BJX1JBUzIpCQkmIzQzOz0gcmFzMi5vCiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSAmIzQzOz0gYWNwaV9kYmcubwogb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgCSYjNDM7PSBwcHR0Lm8KIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKQkmIzQzOz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNpbmNsdWRlICZsdDthY3BpL2FwZWkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdXNwZW5kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJtdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3JhczIuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIApAQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKQogCWFjcGlfZGVidWdnZXJfaW5pdCgpOwogCWFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTsKIAlhY3BpX3Zpb3RfaW5pdCgpOwomIzQzOwlhY3BpX3JhczJfaW5pdCgpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjY2NzAwZTBlN2QzNTIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jCkBAIC0wLDAgJiM0MzsxLDUwMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLgomIzQzOyAqCiYjNDM7ICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaAomIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeQomIzQzOyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXMKJiM0MzsgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjdW5kZWYgcHJfZm10CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O0FDUEkgUkFTMjogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9wY2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9yYXMyLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb24KJiM0MzsgKiBAbWJveF9jbGllbnQ6CXN0cnVjdCBtYm94X2NsaWVudCBvYmplY3QKJiM0MzsgKiBAcGNjX2NoYW46CQlQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuCiYjNDM7ICogQGNvbW1fYWRkcjoJCVBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZWxlbToJCUxpc3QgZm9yIHJlZ2lzdGVyZWQgUkFTMiBQQ0MgY2hhbm5lbCBzdWJzcGFjZXMKJiM0MzsgKiBAcGNjX2xvY2s6CQlQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MKJiM0MzsgKgkJCXRvIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogQGRlYWRsaW5lX3VzOglQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgdGltZW91dCBpbiBtaWNyb3NlY3MKJiM0MzsgKgkJCWZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uCiYjNDM7ICogQHBjY19tcGFyOgkJTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsCiYjNDM7ICogQHBjY19tcnR0OgkJTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzCiYjNDM7ICoJCQlPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZQomIzQzOyAqCQkJaXNzdWluZyBuZXh0IGNvbW1hbmQKJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBsYXN0X21wYXJfcmVzZXQ6CVRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0CiYjNDM7ICogQG1wYXJfY291bnQ6CQlNUEFSIGNvdW50CiYjNDM7ICogQHBjY19pZDoJCUlkZW50aWZpZXIgb2YgdGhlIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsCiYjNDM7ICogQGxhc3RfY21kOgkJTGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBrcmVmOgkJa3JlZiBvYmplY3QKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcmFzMl9zc3BjYyB7CiYjNDM7CXN0cnVjdCBtYm94X2NsaWVudAkJbWJveF9jbGllbnQ7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuCQkqcGNjX2NoYW47CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbQkqY29tbV9hZGRyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCQllbGVtOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwY2NfbG9jazsKJiM0MzsJdTY0CQkJCWRlYWRsaW5lX3VzOwomIzQzOwl1bnNpZ25lZCBpbnQJCQlwY2NfbXBhcjsKJiM0MzsJdW5zaWduZWQgaW50CQkJcGNjX21ydHQ7CiYjNDM7CWt0aW1lX3QJCQkJbGFzdF9jbWRfY21wbF90aW1lOwomIzQzOwlrdGltZV90CQkJCWxhc3RfbXBhcl9yZXNldDsKJiM0MzsJaW50CQkJCW1wYXJfY291bnQ7CiYjNDM7CWludAkJCQlwY2NfaWQ7CiYjNDM7CXUxNgkJCQlsYXN0X2NtZDsKJiM0MzsJc3RydWN0IGtyZWYJCQlrcmVmOwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBcmJpdHJhcnkgcmV0cmllcyBmb3IgUENDIGNvbW1hbmRzIGJlY2F1c2UgdGhlIHJlbW90ZSBwcm9jZXNzb3IgY291bGQgYmUKJiM0MzsgKiBtdWNoIHNsb3dlciB0byByZXBseS4gS2VlcCBpdCBoaWdoIGVub3VnaCB0byBjb3ZlciBlbXVsYXRvcnMgd2hlcmUgdGhlCiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBQQ0NfTlVNX1JFVFJJRVMgNjAwVUxMCiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMAomIzQzOyNkZWZpbmUgUENDX01JTl9QT0xMX1VTRUNTIDMKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwCiYjNDM7I2RlZmluZSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkgMHgwMAomIzQzOwomIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi8KJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7c3RhdGljIExJU1RfSEVBRChyYXMyX3NzcGNjKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZSA9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CXUzMiBjYXBfc3RhdHVzOwomIzQzOwl1MTYgc3RhdHVzOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFzIHBlciBBQ1BJIHNwZWMsIHRoZSBQQ0Mgc3BhY2Ugd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGUKJiM0MzsJICogcGxhdGZvcm0gYW5kIHNob3VsZCBoYXZlIHNldCB0aGUgY29tbWFuZCBjb21wbGV0aW9uIGJpdCB3aGVuCiYjNDM7CSAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLgomIzQzOwkgKgomIzQzOwkgKiBQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgZXZlcnkgUENDX01JTl9QT0xMX1VTRUNTIGZvciBtYXhpbXVtIG9mCiYjNDM7CSAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGUKJiM0MzsJICogYml0IGlzIHNldC4KJiM0MzsJICovCiYjNDM7CXJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMsIHN0YXR1cywKJiM0MzsJCQkJCXN0YXR1cyAmYW1wOyBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSwKJiM0MzsJCQkJCVBDQ19NSU5fUE9MTF9VU0VDUywgc3NwY2MtJmd0O2RlYWRsaW5lX3VzKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcbiYjMzQ7LAomIzQzOwkJCXNzcGNjLSZndDtwY2NfaWQsIHNzcGNjLSZndDtsYXN0X2NtZCwgcmMpOwomIzQzOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgUENDX1NUQVRVU19FUlJPUikgewomIzQzOwkJcHJfd2FybigmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxuJiMzNDssCiYjNDM7CQkJc3NwY2MtJmd0O3BjY19pZCwgc3NwY2MtJmd0O2xhc3RfY21kKTsKJiM0MzsJCXN0YXR1cyAmYW1wOz0gflBDQ19TVEFUVVNfRVJST1I7CiYjNDM7CQlpb3dyaXRlMTYoc3RhdHVzLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3N0YXR1cyk7CiYjNDM7CQlpb3dyaXRlMzIoMHgwLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3NldF9jYXBzX3N0YXR1cyk7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqLwomIzQzOwlybWIoKTsKJiM0MzsJY2FwX3N0YXR1cyA9IGlvcmVhZDMyKCZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c2V0X2NhcHNfc3RhdHVzKTsKJiM0MzsJc3dpdGNoIChjYXBfc3RhdHVzKSB7CiYjNDM7CWNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDoKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfTk9UX1NVUFBPUlRFRDoKJiM0MzsJCXJjID0gLUVQRVJNOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0JVU1k6CiYjNDM7CQlyYyA9IC1FQlVTWTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDUElfUkFTMl9GQUlMRUQ6CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0lOVkFMSURfREFUQToKJiM0MzsJCXJjID0gLUVJTlZBTDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvd3JpdGUzMigweDAsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c2V0X2NhcHNfc3RhdHVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsCiYjNDM7ICogQHJhczJfY3R4Oglwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlCiYjNDM7ICogQGNtZDoJUkFTMiBjb21tYW5kIHRvIHNlbmQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7aW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlOwomIzQzOwlzdHJ1Y3QgbWJveF9jaGFuICpwY2NfY2hhbm5lbDsKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwlzNjQgdGltZV9kZWx0YTsKJiM0MzsJdTE2IHZhbDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJc3NwY2MgPSByYXMyX2N0eC0mZ3Q7c3NwY2M7CiYjNDM7CWdlbl9jb21tX2Jhc2UgPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwomIzQzOwlyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcGNjX2NoYW5uZWwgPSBzc3BjYy0mZ3Q7cGNjX2NoYW4tJmd0O21jaGFuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBIYW5kbGUgdGhlIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpOiB0aGUgbWluaW11bQomIzQzOwkgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mCiYjNDM7CSAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3NwY2MtJmd0O3BjY19tcnR0KSB7CiYjNDM7CQl0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLSZndDtsYXN0X2NtZF9jbXBsX3RpbWUpOwomIzQzOwkJaWYgKHNzcGNjLSZndDtwY2NfbXJ0dCAmZ3Q7IHRpbWVfZGVsdGEpCiYjNDM7CQkJZnNsZWVwKHNzcGNjLSZndDtwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEhhbmRsZSB0aGUgbm9uLXplcm8gTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUik6IHRoZQomIzQzOwkgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhbgomIzQzOwkgKiBzdXBwb3J0LCByZXBvcnRlZCBpbiBjb21tYW5kcyBwZXIgbWludXRlLiAwIGluZGljYXRlcyBubwomIzQzOwkgKiBsaW1pdGF0aW9uLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgaWRlYWxseSB6ZXJvIG9yIGxhcmdlIGVub3VnaCBzbyB0aGF0IGl0CiYjNDM7CSAqIGNhbiBoYW5kbGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBhbGwgdGhlIGNvcmVzIGluIHRoZQomIzQzOwkgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kCiYjNDM7CSAqIGp1c3Qgbm90IHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHBsYXRmb3JtIGFmdGVyIGhpdHRpbmcgdGhlIE1QQVIKJiM0MzsJICogbGltaXQgaW4gYW55IDYwcyB3aW5kb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3NwY2MtJmd0O3BjY19tcGFyKSB7CiYjNDM7CQlpZiAoIXNzcGNjLSZndDttcGFyX2NvdW50KSB7CiYjNDM7CQkJdGltZV9kZWx0YSA9IGt0aW1lX21zX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy0mZ3Q7bGFzdF9tcGFyX3Jlc2V0KTsKJiM0MzsJCQlpZiAoKHRpbWVfZGVsdGEgJmx0OyA2MCAqIE1TRUNfUEVSX1NFQykgJmFtcDsmYW1wOyBzc3BjYy0mZ3Q7bGFzdF9tcGFyX3Jlc2V0KSB7CiYjNDM7CQkJCWRldl9kYmcocmFzMl9jdHgtJmd0O2RldiwKJiM0MzsJCQkJCSYjMzQ7UENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdCYjMzQ7LCBjbWQpOwomIzQzOwkJCQlyZXR1cm4gLUVJTzsKJiM0MzsJCQl9CiYjNDM7CQkJc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCA9IGt0aW1lX2dldCgpOwomIzQzOwkJCXNzcGNjLSZndDttcGFyX2NvdW50ID0gc3NwY2MtJmd0O3BjY19tcGFyOwomIzQzOwkJfQomIzQzOwkJc3NwY2MtJmd0O21wYXJfY291bnQtLTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXcml0ZSB0byB0aGUgc2hhcmVkIGNvbW0gcmVnaW9uICovCiYjNDM7CWlvd3JpdGUxNihjbWQsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7Y29tbWFuZCk7CiYjNDM7CiYjNDM7CS8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqLwomIzQzOwlpb3dyaXRlMTYoMCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwomIzQzOwkvKiBSaW5nIGRvb3JiZWxsICovCiYjNDM7CXJjID0gbWJveF9zZW5kX21lc3NhZ2UocGNjX2NoYW5uZWwsICZhbXA7Y21kKTsKJiM0MzsJLyoKJiM0MzsJICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvbgomIzQzOwkgKiBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZsdDsgMCkgewomIzQzOwkJZGV2X3dhcm4ocmFzMl9jdHgtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcbiYjMzQ7LCBjbWQsIHJjKTsKJiM0MzsJCS8qIFJlc3RvcmUgQ01EIENPTVBMRVRFIGJpdCBvbiBlcnJvciAqLwomIzQzOwkJdmFsID0gaW9yZWFkMTYoJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwkJdmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFOwomIzQzOwkJaW93cml0ZTE2KHZhbCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNzcGNjLSZndDtsYXN0X2NtZCA9IGNtZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlCiYjNDM7CSAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmcKJiM0MzsJICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuCiYjNDM7CSAqLwomIzQzOwlpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLSZndDtwY2NfbXJ0dCkgewomIzQzOwkJcmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7CiYjNDM7CQlpZiAoc3NwY2MtJmd0O3BjY19tcnR0KQomIzQzOwkJCXNzcGNjLSZndDtsYXN0X2NtZF9jbXBsX3RpbWUgPSBrdGltZV9nZXQoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXBjY19jaGFubmVsLSZndDttYm94LSZndDt0eGRvbmVfaXJxKQomIzQzOwkJbWJveF9jbGllbnRfdHhkb25lKHBjY19jaGFubmVsLCByYyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgJiMzNDthY3BpX3JhczImIzM0Oyk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9saXN0X3BjY19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID0KJiM0MzsJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmFzMl9zc3BjYywga3JlZik7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CWxpc3RfZGVsKCZhbXA7c3NwY2MtJmd0O2VsZW0pOwomIzQzOwlwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtJmd0O3BjY19jaGFuKTsKJiM0MzsJa2ZyZWUoc3NwY2MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX3NzcGNjX3B1dChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpCiYjNDM7ewomIzQzOwlrcmVmX3B1dCgmYW1wO3NzcGNjLSZndDtrcmVmLCAgJmFtcDtyYXMyX2xpc3RfcGNjX3JlbGVhc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoc3NwY2MsICZhbXA7cmFzMl9zc3BjYywgZWxlbSkgewomIzQzOwkJaWYgKHNzcGNjLSZndDtwY2NfaWQgIT0gcGNjX2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmYW1wO3NzcGNjLSZndDtrcmVmKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXJldHVybiBzc3BjYzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfY2hhbjsKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwomIzQzOwlpZiAocGNjX2lkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7CiYjNDM7CWlmIChzc3BjYykgewomIzQzOwkJcmFzMl9jdHgtJmd0O3NzcGNjCQk9IHNzcGNjOwomIzQzOwkJcmFzMl9jdHgtJmd0O2NvbW1fYWRkcgk9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7ZGV2CQk9CiYjNDM7CQkJc3NwY2MtJmd0O3BjY19jaGFuLSZndDttY2hhbi0mZ3Q7bWJveC0mZ3Q7ZGV2OwomIzQzOwkJcmFzMl9jdHgtJmd0O3BjY19sb2NrCT0gJmFtcDtzc3BjYy0mZ3Q7cGNjX2xvY2s7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlzc3BjYyA9IGt6YWxsb2Moc2l6ZW9mKCpzc3BjYyksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXNzcGNjKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKCZhbXA7c3NwY2MtJmd0O21ib3hfY2xpZW50LCBwY2NfaWQpOwomIzQzOwlpZiAoSVNfRVJSKHBjY19jaGFuKSkgewomIzQzOwkJa2ZyZWUoc3NwY2MpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcGNjX2NoYW4tJmd0O3NobWVtKSB7CiYjNDM7CQlwY2NfbWJveF9mcmVlX2NoYW5uZWwocGNjX2NoYW4pOwomIzQzOwkJa2ZyZWUoc3NwY2MpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3NwY2MtJmd0O3BjY19pZAkJPSBwY2NfaWQ7CiYjNDM7CXNzcGNjLSZndDtwY2NfY2hhbgkJPSBwY2NfY2hhbjsKJiM0MzsJc3NwY2MtJmd0O2NvbW1fYWRkcgk9IHBjY19jaGFuLSZndDtzaG1lbTsKJiM0MzsJaWYgKHBjY19jaGFuLSZndDtsYXRlbmN5KQomIzQzOwkJc3NwY2MtJmd0O2RlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogcGNjX2NoYW4tJmd0O2xhdGVuY3k7CiYjNDM7CWVsc2UKJiM0MzsJCXNzcGNjLSZndDtkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWTsKJiM0MzsJc3NwY2MtJmd0O3BjY19tcnR0CQk9IHBjY19jaGFuLSZndDttaW5fdHVybmFyb3VuZF90aW1lOwomIzQzOwlzc3BjYy0mZ3Q7cGNjX21wYXIJCT0gcGNjX2NoYW4tJmd0O21heF9hY2Nlc3NfcmF0ZTsKJiM0MzsJc3NwY2MtJmd0O21ib3hfY2xpZW50Lmtub3dzX3R4ZG9uZQk9IHRydWU7CiYjNDM7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtzc3BjYy0mZ3Q7cGNjX2xvY2spOwomIzQzOwlrcmVmX2luaXQoJmFtcDtzc3BjYy0mZ3Q7a3JlZik7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2FkZCgmYW1wO3NzcGNjLSZndDtlbGVtLCAmYW1wO3JhczJfc3NwY2MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c3NwY2MJCT0gc3NwY2M7CiYjNDM7CXJhczJfY3R4LSZndDtjb21tX2FkZHIJPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZGV2CQk9IHBjY19jaGFuLSZndDttY2hhbi0mZ3Q7bWJveC0mZ3Q7ZGV2OwomIzQzOwlyYXMyX2N0eC0mZ3Q7cGNjX2xvY2sJPSAmYW1wO3NzcGNjLSZndDtwY2NfbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfSURBKHJhczJfaWRhKTsKJiM0MztzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTsKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTsKJiM0MzsKJiM0MzsJaWRhX2ZyZWUoJmFtcDtyYXMyX2lkYSwgYXV4ZGV2LSZndDtpZCk7CiYjNDM7CXJhczJfc3NwY2NfcHV0KHJhczJfY3R4LSZndDtzc3BjYyk7CiYjNDM7CWtmcmVlKHJhczJfY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDsKJiM0MzsJdTMyIGNvbXBfbmlkOwomIzQzOwlpbnQgaWQsIHJjOwomIzQzOwomIzQzOwljb21wX25pZCA9IHB4bV90b19ub2RlKHB4bV9pbnN0KTsKJiM0MzsJaWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkgewomIzQzOwkJcHJfZGVidWcoJiMzNDtJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxuJiMzNDssIGNoYW5uZWwsIHB4bV9pbnN0KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmFzMl9jdHggPSBremFsbG9jKHNpemVvZigqcmFzMl9jdHgpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFyYXMyX2N0eCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7CiYjNDM7CiYjNDM7CXJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpOwomIzQzOwlpZiAocmMgJmx0OyAwKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQQ0MgY2hhbm5lbD0lZCBweG1faW5zdD0lZCByYz0lZFxuJiMzNDssIGNoYW5uZWwsCiYjNDM7CQkJIHB4bV9pbnN0LCByYyk7CiYjNDM7CQlnb3RvIGN0eF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlkID0gaWRhX2FsbG9jKCZhbXA7cmFzMl9pZGEsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoaWQgJmx0OyAwKSB7CiYjNDM7CQlyYyA9IGlkOwomIzQzOwkJZ290byBwY2NfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5pZAkJPSBpZDsKJiM0MzsJcmFzMl9jdHgtJmd0O2FkZXYubmFtZQkJPSBuYW1lOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5kZXYucmVsZWFzZQk9IHJhczJfcmVsZWFzZTsKJiM0MzsJcmFzMl9jdHgtJmd0O2FkZXYuZGV2LnBhcmVudAk9IHJhczJfY3R4LSZndDtkZXY7CiYjNDM7CiYjNDM7CXJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KCZhbXA7cmFzMl9jdHgtJmd0O2FkZXYpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlnb3RvIGlkYV9mcmVlOwomIzQzOwomIzQzOwlyYyA9IGF1eGlsaWFyeV9kZXZpY2VfYWRkKCZhbXA7cmFzMl9jdHgtJmd0O2FkZXYpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KCZhbXA7cmFzMl9jdHgtJmd0O2FkZXYpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYXMyX2N0eDsKJiM0MzsKJiM0MztpZGFfZnJlZToKJiM0MzsJaWRhX2ZyZWUoJmFtcDtyYXMyX2lkYSwgaWQpOwomIzQzO3BjY19mcmVlOgomIzQzOwlyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC0mZ3Q7c3NwY2MpOwomIzQzO2N0eF9mcmVlOgomIzQzOwlrZnJlZShyYXMyX2N0eCk7CiYjNDM7CiYjNDM7CXJldHVybiBFUlJfUFRSKHJjKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpCiYjNDM7ewomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhdXhpbGlhcnlfZGV2aWNlX2RlbGV0ZSgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0MzsJYXV4aWxpYXJ5X2RldmljZV91bmluaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4OwomIzQzOwl1MTYgdG90X3RibF9sZW47CiYjNDM7CXUxNiBpOwomIzQzOwomIzQzOwlpZiAocmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGggJmx0OyBzaXplb2YoKnJhczJfdGFiKSkgewomIzQzOwkJcHJfd2FybihGV19XQVJOICYjMzQ7QUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgYnV0IGJyb2tlbiAodG9vIHNob3J0LCBzaXplPSV1KVxuJiMzNDssCiYjNDM7CQkJcmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGgpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyB8fCByYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyAmZ3Q7IFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHsKJiM0MzsJCXByX3dhcm4oRldfV0FSTiAmIzM0O05vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXG4mIzM0OywKJiM0MzsJCQlyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwl0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICYjNDM7IHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTsKJiM0MzsJaWYgKHJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoICZsdDsgdG90X3RibF9sZW4pIHsKJiM0MzsJCXByX3dhcm4oRldfV0FSTiAmIzM0O1JBUzIgdGFibGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIFBDQyBkZXNjcz0lZCBzaXplPSV1KVxuJiMzNDssCiYjNDM7CQkJcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MsIHJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjdHhfbGlzdCA9IGtjYWxsb2MocmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGN0eF9saXN0KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiAmIzQzOyAxKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzOyBpJiM0MzsmIzQzOywgcGNjX2Rlc2NfbGlzdCYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChwY2NfZGVzY19saXN0LSZndDtmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJcmFzMl9jdHggPSBhZGRfYXV4X2RldmljZShSQVMyX01FTV9ERVZfSURfTkFNRSwgcGNjX2Rlc2NfbGlzdC0mZ3Q7Y2hhbm5lbF9pZCwKJiM0MzsJCQkJCSAgcGNjX2Rlc2NfbGlzdC0mZ3Q7aW5zdGFuY2UpOwomIzQzOwkJLyogSW52YWxpZCBOVU1BIG5vZGUsIGNvbnRpbnVlIHBhcnNpbmcgbmV4dCBub2RlICovCiYjNDM7CQlpZiAoUFRSX0VSUihyYXMyX2N0eCkgPT0gLUVOWElPKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKElTX0VSUihyYXMyX2N0eCkpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXG4mIzM0OywgUFRSX0VSUihyYXMyX2N0eCkpOwomIzQzOwkJCWZvciAoOyBpICZndDsgMDsgaS0tKSB7CiYjNDM7CQkJCWlmIChwY3R4X2xpc3RbaSAtIDFdKQomIzQzOwkJCQkJcmVtb3ZlX2F1eF9kZXZpY2UocGN0eF9saXN0W2kgLSAxXSk7CiYjNDM7CQkJfQomIzQzOwkJCWtmcmVlKHBjdHhfbGlzdCk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIocmFzMl9jdHgpOwomIzQzOwkJfQomIzQzOwkJcGN0eF9saXN0W2ldID0gcmFzMl9jdHg7CiYjNDM7CX0KJiM0MzsJa2ZyZWUocGN0eF9saXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCiYjNDM7ICoKJiM0MzsgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZQomIzQzOyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhbgomIzQzOyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMgomIzQzOyAqIG1lbW9yeSBmZWF0dXJlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogbm9uZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7CiYjNDM7CWFjcGlfc3RhdHVzIHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmYW1wO3JhczJfdGFiKTsKJiM0MzsJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byBnZXQgdGFibGUsICVzXG4mIzM0OywgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSkKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIHBhcnNlIFJBUzIgdGFibGVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJYWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jCmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL3NjcnViLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9lZGFjL3NjcnViLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBAIGVudW0gZWRhY19zY3J1Yl9hdHRyaWJ1dGVzIHsKIAlTQ1JVQl9BRERSRVNTLAogCVNDUlVCX1NJWkUsCiAJU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkQsCiYjNDM7CVNDUlVCX0VOQUJMRV9ERU1BTkQsCiAJU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OLAogCVNDUlVCX01BWF9DWUNMRV9EVVJBVElPTiwKIAlTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sCkBAIC01NSw2ICYjNDM7NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldiwJCQlcCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhhZGRyLCByZWFkX2FkZHIsIHU2NCwgJiMzNDsweCVsbHhcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1coc2l6ZSwgcmVhZF9zaXplLCB1NjQsICYjMzQ7MHglbGx4XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9iYWNrZ3JvdW5kLCBnZXRfZW5hYmxlZF9iZywgYm9vbCwgJiMzNDsldVxuJiMzNDspCiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1cobWF4X2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWF4X2N5Y2xlLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQpAQCAtODQsNiAmIzQzOzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LAkJCVwKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShhZGRyLCB3cml0ZV9hZGRyLCB1NjQsIGtzdHJ0b3U2NCkKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NCkKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKQomIzQzO0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpCiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bCkKIAogc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZCkKQEAgLTExOSw2ICYjNDM7MTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50CiAJCQkJcmV0dXJuIDA0NDQ7CiAJCX0KIAkJYnJlYWs7CiYjNDM7CWNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDoKJiM0MzsJCWlmIChvcHMtJmd0O2dldF9lbmFibGVkX29kKSB7CiYjNDM7CQkJaWYgKG9wcy0mZ3Q7c2V0X2VuYWJsZWRfb2QpCiYjNDM7CQkJCXJldHVybiBhLSZndDttb2RlOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJcmV0dXJuIDA0NDQ7CiYjNDM7CQl9CiYjNDM7CQlicmVhazsKIAljYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjoKIAkJaWYgKG9wcy0mZ3Q7Z2V0X21pbl9jeWNsZSkKIAkJCXJldHVybiBhLSZndDttb2RlOwpAQCAtMTY0LDYgJiM0MzsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldiwKIAkJW1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSwKIAkJW1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSwKIAkJW1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLAomIzQzOwkJW1NDUlVCX0VOQUJMRV9ERU1BTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9kZW1hbmQsIGluc3RhbmNlKSwKIAkJW1NDUlVCX01JTl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWluX2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1heF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLAogCQlbU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnCmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9LY29uZmlnCkBAIC00Niw0ICYjNDM7NDYsMTcgQEAgY29uZmlnIFJBU19GTVBNCiAJICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvbgogCSAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuCiAKJiM0Mztjb25maWcgTUVNX0FDUElfUkFTMgomIzQzOwl0cmlzdGF0ZSAmIzM0O01lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBBQ1BJX1JBUzIKJiM0MzsJZGVwZW5kcyBvbiBFREFDCiYjNDM7CWRlcGVuZHMgb24gRURBQ19TQ1JVQgomIzQzOwlzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8KJiM0MzsJaGVscAomIzQzOwkgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMgomIzQzOwkgIGZlYXR1cmUgdGFibGUgcGFyc2VyLiBUaGUgZHJpdmVyIHVzZXMgYSBQQ0MgY2hhbm5lbCBzdWJzcGFjZSB0bwomIzQzOwkgIGNvbW11bmljYXRlIHdpdGggdGhlIEFDUEktY29tcGxpYW50IHBsYXRmb3JtIGFuZCBwcm92aWRlcwomIzQzOwkgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyCiYjNDM7CSAgdGhyb3VnaCB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuCiYjNDM7CiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZQppbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFzL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlCkBAIC0yLDYgJiM0MzsyLDcgQEAKIG9iai0kKENPTkZJR19SQVMpCSYjNDM7PSByYXMubwogb2JqLSQoQ09ORklHX0RFQlVHX0ZTKQkmIzQzOz0gZGVidWdmcy5vCiBvYmotJChDT05GSUdfUkFTX0NFQykJJiM0Mzs9IGNlYy5vCiYjNDM7b2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpCSYjNDM7PSBhY3BpX3JhczIubwogCiBvYmotJChDT05GSUdfUkFTX0ZNUE0pCSYjNDM7PSBhbWQvZm1wbS5vCiBvYmoteQkJCSYjNDM7PSBhbWQvYXRsLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMjY4YjFjMzhkZGY5MDUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYwpAQCAtMCwwICYjNDM7MSw2MDMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLgomIzQzOyAqCiYjNDM7ICovCiYjNDM7CiYjNDM7I3VuZGVmIHByX2ZtdAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkJJiMzNDtBQ1BJIFJBUzIgTUVNT1JZOiAmIzM0OyBmbXQKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWRhYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3JhczIuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIgQklUKDApCiYjNDM7I2RlZmluZSBSQVMyX1RZUEVfUEFUUk9MX1NDUlVCIDB4MDAwMAomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMgMHgwMQomIzQzOyNkZWZpbmUgUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIgMHgwMgomIzQzOyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSQVMyIHBhdHJvbCBzY3J1YgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfSU5fTUFTSyBHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKQomIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfT1VUX01BU0sgR0VOTUFTSyg3LCAwKQomIzQzOyNkZWZpbmUgUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORyBCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4CiYjNDM7I2RlZmluZSBSQVMyX0hPVVJfSU5fU0VDUyAzNjAwCiYjNDM7CiYjNDM7c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcGF0cm9sX3NjcnViX3BhcmFtIHBhcmFtczsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgVE9fQUNQSV9SQVMyX1BTX1NITUVNKF9hZGRyKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pCiYjNDM7CiYjNDM7c3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqY29tbW9uID0gKHZvaWQgKilyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJaW93cml0ZTgoMCwgJmFtcDtjb21tb24tJmd0O3NldF9jYXBzWzBdKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlvcmVhZDgoJmFtcDtjb21tb24tJmd0O2ZlYXR1cmVzWzBdKSAmYW1wOyBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPQomIzQzOwkJVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LSZndDtjb21tX2FkZHIpOwomIzQzOwl1MzIgc2NydWJfcGFyYW1zX291dDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgJmFtcDtwc19zbS0mZ3Q7Y29tbW9uLnNldF9jYXBzWzBdKTsKJiM0MzsJaW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CWlvd3JpdGU2NChyYXMyX2N0eC0mZ3Q7bWVtX2Jhc2UsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7CiYjNDM7CWlvd3JpdGU2NChyYXMyX2N0eC0mZ3Q7bWVtX3NpemUsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7CiYjNDM7CXJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIocmFzMl9jdHgtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19vdXQpOwomIzQzOwlyYXMyX2N0eC0mZ3Q7bWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSywKJiM0MzsJCQkJCSAgICAgIHNjcnViX3BhcmFtc19vdXQpOwomIzQzOwlyYXMyX2N0eC0mZ3Q7bWF4X3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSywKJiM0MzsJCQkJCSAgICAgIHNjcnViX3BhcmFtc19vdXQpOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLAomIzQzOwkJCQkJICAgICAgc2NydWJfcGFyYW1zX291dCk7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpIHsKJiM0MzsJCXJhczJfY3R4LSZndDtvZF9zY3J1YiA9IGZhbHNlOwomIzQzOwkJcmFzMl9jdHgtJmd0O2Jhc2UgPSAwOwomIzQzOwkJcmFzMl9jdHgtJmd0O3NpemUgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgIChpb3JlYWQzMigmYW1wO3BzX3NtLSZndDtwYXJhbXMuZmxhZ3MpICZhbXA7IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSB0cnVlOwomIzQzOwkJcmFzMl9jdHgtJmd0O2Jhc2UgPSBpb3JlYWQ2NCgmYW1wO3BzX3NtLSZndDtwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJCXJhczJfY3R4LSZndDtzaXplID0gaW9yZWFkNjQoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmFjdGxfYWRkcl9yYW5nZVsxXSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqLwomIzQzO3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPQomIzQzOwkJVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LSZndDtjb21tX2FkZHIpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXJhczJfY3R4LSZndDtvZF9zY3J1YikgewomIzQzOwkJKnJ1bm5pbmcgPSBmYWxzZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CWlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9iYXNlLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9zaXplLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJhczJfY3R4LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnJ1bm5pbmcgPSBpb3JlYWQzMigmYW1wO3BzX3NtLSZndDtwYXJhbXMuZmxhZ3MpICZhbXA7IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HOwomIzQzOwlpZiAoISgqcnVubmluZykpCiYjNDM7CQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSAoc3RydWN0IHJhczJfbWVtX2N0eCAqKXA7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKJiM0MzsJCW11dGV4X2xvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCWlmICghcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViKQomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZygpIGZhaWxzIGhlcmUsIHJlLWVuYWJsaW5nIGJhY2tncm91bmQKJiM0MzsJCSAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSwKJiM0MzsJCSAqIHRoZSBhZG1pbiBvciBmaXJtd2FyZSBtYXkgbmVlZCB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YmJpbmcKJiM0MzsJCSAqIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLgomIzQzOwkJICovCiYjNDM7CQlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBleGl0OwomIzQzOwomIzQzOwkJaWYgKCFydW5uaW5nKSB7CiYjNDM7CQkJcmV0ID0gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHJhczJfY3R4LSZndDtkZXYsIHJhczJfY3R4LCB0cnVlKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlkZXZfZXJyKHJhczJfY3R4LSZndDtkZXYsCiYjNDM7CQkJCQkmIzM0O0ZhaWxlZCB0byBlbmFibGUgYmFja2dyb3VuZCBzY3J1YiByZXQ9JWRcbiYjMzQ7LCByZXQpOwomIzQzOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkJbXNsZWVwKDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MztleGl0OgomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2RyaXZlcl9hY3RpdmUpCiYjNDM7CQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJKm1pbiA9IHJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1heCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkqbWF4ID0gcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpzY3J1Yl9jeWNsZV9zZWNzKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CSpzY3J1Yl9jeWNsZV9zZWNzID0gcmFzMl9jdHgtJmd0O3NjcnViX2N5Y2xlX2hycyAqIFJBUzJfSE9VUl9JTl9TRUNTOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKQomIzQzO3sKJiM0MzsJdTMyIHNjcnViX2N5Y2xlX2hycyA9IHNjcnViX2N5Y2xlX3NlY3MgLyBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YikKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAoc2NydWJfY3ljbGVfaHJzICZsdDsgcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSB8fAomIzQzOwkgICAgc2NydWJfY3ljbGVfaHJzICZndDsgcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLgomIzQzOwkgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuCiYjNDM7CSAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJcmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqYmFzZSA9IHJhczJfY3R4LSZndDtiYXNlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YikKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJKnNpemUgPSByYXMyX2N0eC0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocnVubmluZykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiYXNlID0gYmFzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXNpemUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkqZW5hYmxlZCA9IHJhczJfY3R4LSZndDtiZ19zY3J1YjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LSZndDtjb21tX2FkZHIpOwomIzQzOwl1MzIgc2NydWJfcGFyYW1zX2luOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgJmFtcDtwc19zbS0mZ3Q7Y29tbW9uLnNldF9jYXBzWzBdKTsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YiB8fCBydW5uaW5nKQomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwkJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CQlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLOwomIzQzOwkJc2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtJmd0O3NldF9zY3J1Yl9jeWNsZSk7CiYjNDM7CQlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJCWlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJCWlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXNjcnViX3BhcmFtc19pbiAmYW1wOz0gflJBUzJfUFNfRU5fQkFDS0dST1VORDsKJiM0MzsJc2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpOwomIzQzOwlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvICVzIGJhY2tncm91bmQgc2NydWJiaW5nXG4mIzM0OywKJiM0MzsJCQlzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiZ19zY3J1YiA9IGVuYWJsZTsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7CiYjNDM7CQkvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi8KJiM0MzsJCXJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CSplbmFibGVkID0gcnVubmluZzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19pbjsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWVuYWJsZSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCXJldCA9IC1FQlVTWTsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIGV4aXQ7CiYjNDM7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7cmVlbmFibGVfYmdfc2NydWIgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZAomIzQzOwkgKiB3aXRoIChiYXNlICYjNDM7IHNpemUpICZndDsgKG1lbV9iYXNlICYjNDM7IG1lbV9zaXplKSBjaGVjayBpbiB0aGUgZnV0dXJlIG9uY2UgYQomIzQzOwkgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJhczJfY3R4LSZndDtzaXplIHx8IHJhczJfY3R4LSZndDtiYXNlICZsdDsgcmFzMl9jdHgtJmd0O21lbV9iYXNlKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDslczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxuJiMzNDssCiYjNDM7CQkJX19mdW5jX18sIHJhczJfY3R4LSZndDtiYXNlLCByYXMyX2N0eC0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXQgPSAtRVJBTkdFOwomIzQzOwkJZ290byBlbmFibGVfYmdfc2NydWI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgJmFtcDtwc19zbS0mZ3Q7Y29tbW9uLnNldF9jYXBzWzBdKTsKJiM0MzsJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXNjcnViX3BhcmFtc19pbiAmYW1wOz0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7CiYjNDM7CXNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUpOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7CiYjNDM7CWlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sICZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O2Jhc2UsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7CiYjNDM7CWlvd3JpdGU2NChyYXMyX2N0eC0mZ3Q7c2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJaW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxuJiMzNDssIHJldCk7CiYjNDM7CQlpZiAocmV0ICE9IC1FQlVTWSkgewomIzQzOwkJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwkJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwkJCXJhczJfY3R4LSZndDtvZF9zY3J1YiA9IGZhbHNlOwomIzQzOwkJCXJhczJfY3R4LSZndDtiYXNlID0gMDsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IDA7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIGVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBlbmFibGU7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViICZhbXA7JmFtcDsgcmFzMl9jdHgtJmd0O2RyaXZlcl9hY3RpdmUgJmFtcDsmYW1wOyAhcmFzMl9jdHgtJmd0O3RocmVhZCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIGt0aHJlYWRfcnVuKCkgaXMgY2FsbGVkIGJlZm9yZSBzZW5kaW5nIHRoZSBjb21tYW5kIGZvciBkZW1hbmQgc2NydWJiaW5nLAomIzQzOwkJICogdGhlIHRocmVhZCBtYXkgZGV0ZXJtaW5lIHRoYXQgZGVtYW5kIHNjcnViYmluZyBpcyBub3QgcnVubmluZywgYXR0ZW1wdCB0bwomIzQzOwkJICogcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZywgYW5kIHRoZW4gZXhpdC4gVGhpcyBjYW4gb2NjdXIgYmVjYXVzZSB0aGUKJiM0MzsJCSAqIHRocmVhZCBmdW5jdGlvbiBtYXkgc3RhcnQgcnVubmluZyBiZWZvcmUgZGVtYW5kIHNjcnViYmluZyBzdGFydHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJhczJfY3R4LSZndDt0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCwKJiM0MzsJCQkJCSAgICAgICAmIzM0O3JhczJfc2NydWJfbmlkJWQmIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlpZiAoSVNfRVJSKHJhczJfY3R4LSZndDt0aHJlYWQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihyYXMyX2N0eC0mZ3Q7dGhyZWFkKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsCiYjNDM7CQkJICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWQKJiM0MzsJCQkgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlnb3RvIGVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlnb3RvIGV4aXQ7CiYjNDM7CiYjNDM7ZW5hYmxlX2JnX3NjcnViOgomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7cmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTsKJiM0MzsJCV9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzO2V4aXQ6CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0gewomIzQzOwkucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsCiYjNDM7CS5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSwKJiM0MzsJLndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsCiYjNDM7CS53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLAomIzQzOwkuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLAomIzQzOwkuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLAomIzQzOwkuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLAomIzQzOwkuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLAomIzQzOwkuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsCiYjNDM7CS5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSwKJiM0MzsJLmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCwKJiM0MzsJLnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltdXRleF9sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJhczJfY3R4LSZndDtkcml2ZXJfYWN0aXZlID0gZmFsc2U7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7dGhyZWFkKSB7CiYjNDM7CQltdXRleF91bmxvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCWt0aHJlYWRfc3RvcChyYXMyX2N0eC0mZ3Q7dGhyZWFkKTsKJiM0MzsJCXJhczJfY3R4LSZndDt0aHJlYWQgPSBOVUxMOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfbWVtX2Rydl9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2LCBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCAqaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwlzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7CiYjNDM7CWNoYXIgc2NydWJfbmFtZVtSQVMyX1NDUlVCX05BTUVfTEVOXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlCiYjNDM7CSAqICYjMzk7UmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UmIzM5Oywgd2hlbiBzZW5kIFJBUzIgY29tbWFuZCBHRVRfUEFUUk9MX1BBUkFNRVRFUlMKJiM0MzsJICogdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzIGluIHRoZSBOVU1BIGRvbWFpbgomIzQzOwkgKiBhcyB3ZWxsIGFzIHdoZW4gc2VuZCBjb21tYW5kIFNUQVJUX1BBVFJPTF9TQ1JVQkJFUiB0byBzdGFydCB0aGUgZGVtYW5kCiYjNDM7CSAqIHNjcnViYmluZy4gVGhlIHZhbGlkaXR5IGNoZWNrIGZvciBzeXNfY29tcF9uaWQgYWdhaW5zdCBOVU1BX05PX05PREUgaXMKJiM0MzsJICogYWxyZWFkeSBwZXJmb3JtZWQgaW4gYWRkX2F1eF9kZXZpY2UoKSBpbiAvYWNwaS9yYXMyLmMKJiM0MzsJICovCiYjNDM7CXN0YXJ0X3BmbiA9IG5vZGVfc3RhcnRfcGZuKHJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQpOwomIzQzOwludW1fc3Bhbm5lZF9wYWdlcyA9IG5vZGVfc3Bhbm5lZF9wYWdlcyhyYXMyX2N0eC0mZ3Q7c3lzX2NvbXBfbmlkKTsKJiM0MzsJaWYgKCFudW1fc3Bhbm5lZF9wYWdlcykgewomIzQzOwkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXG4mIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDttZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTsKJiM0MzsJcmFzMl9jdHgtJmd0O21lbV9zaXplID0gKHU2NCludW1fc3Bhbm5lZF9wYWdlcyAqIFBBR0VfU0laRTsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi8KJiM0MzsJaWYgKHJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnMgJmd0OyByYXMyX2N0eC0mZ3Q7bWluX3NjcnViX2N5Y2xlKQomIzQzOwkJcmFzMl9jdHgtJmd0O3NldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnM7CiYjNDM7CWVsc2UKJiM0MzsJCXJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC0mZ3Q7bWluX3NjcnViX2N5Y2xlOwomIzQzOwomIzQzOwlzcHJpbnRmKHNjcnViX25hbWUsICYjMzQ7YWNwaV9yYXNfbWVtJWQmIzM0OywgYXV4ZGV2LSZndDtpZCk7CiYjNDM7CiYjNDM7CXJhc19mZWF0dXJlcy5mdF90eXBlCT0gUkFTX0ZFQVRfU0NSVUI7CiYjNDM7CXJhc19mZWF0dXJlcy5pbnN0YW5jZQk9IDA7CiYjNDM7CXJhc19mZWF0dXJlcy5zY3J1Yl9vcHMJPSAmYW1wO3JhczJfc2NydWJfb3BzOwomIzQzOwlyYXNfZmVhdHVyZXMuY3R4CT0gcmFzMl9jdHg7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtkcml2ZXJfYWN0aXZlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKCZhbXA7YXV4ZGV2LSZndDtkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsICZhbXA7cmFzX2ZlYXR1cmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkIHJhczJfbWVtX2Rldl9pZF90YWJsZVtdID0gewomIzQzOwl7IC5uYW1lID0gUkFTMl9BVVhfREVWX05BTUUgJiMzNDsuJiMzNDsgUkFTMl9NRU1fREVWX0lEX05BTUUsIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHsKJiM0MzsJLm5hbWUgPSBSQVMyX01FTV9ERVZfSURfTkFNRSwKJiM0MzsJLnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLAomIzQzOwkucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSwKJiM0MzsJLmlkX3RhYmxlID0gcmFzMl9tZW1fZGV2X2lkX3RhYmxlLAomIzQzO307CiYjNDM7bW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTsKJiM0MzsKJiM0MztNT0RVTEVfSU1QT1JUX05TKCYjMzQ7QUNQSV9SQVMyJiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O0FDUEkgUkFTMiBtZW1vcnkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFjNzViMDMwN2ZhOWNjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hY3BpL3JhczIuaApAQCAtMCwwICYjNDM7MSw4NiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKgomIzQzOyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZAomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX0FDUElfUkFTMl9ICiYjNDM7I2RlZmluZSBfQUNQSV9SQVMyX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hdXhpbGlhcnlfYnVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21haWxib3hfY2xpZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGRldmljZTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MjogUENDIGNvbW1hbmQgY29kZXMgdXNlZCBieQomIzQzOyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUENDX0NNRF9FWEVDX1JBUzIgMHgwMQomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9BVVhfREVWX05BTUUgJiMzNDtyYXMyJiMzNDsKJiM0MzsjZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FICYjMzQ7YWNwaV9yYXMyX21lbSYjMzQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHJhczJfbWVtX2N0eCAtIENvbnRleHQgZm9yIFJBUzIgbWVtb3J5IGZlYXR1cmVzCiYjNDM7ICogQGFkZXY6CQlBdXhpbGlhcnkgZGV2aWNlIG9iamVjdAomIzQzOyAqIEBjb21tX2FkZHI6CQlQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uCiYjNDM7ICogQGRldjoJCVBvaW50ZXIgdG8gZGV2aWNlIGJhY2tpbmcgc3RydWN0IG1ib3hfY29udHJvbGxlciBmb3IgUENDCiYjNDM7ICogQHNzcGNjOgkJUG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb24KJiM0MzsgKiBAcGNjX2xvY2s6CQlQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2VzcwomIzQzOyAqCQkJdG8gUENDIGNoYW5uZWwgc3Vic3BhY2UKJiM0MzsgKiBAc3lzX2NvbXBfbmlkOglOb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlCiYjNDM7ICoJCQlpcyBhc3NvY2lhdGVkIHdpdGguIFNlZSBBQ1BJIHNwZWMgNi41IFRhYmxlIDUuODA6IFJBUzIKJiM0MzsgKgkJCVBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCBEZXNjcmlwdG9yIGZvcm1hdCwKJiM0MzsgKgkJCUZpZWxkOiBJbnN0YW5jZQomIzQzOyAqIEBtZW1fYmFzZToJCUJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZQomIzQzOyAqCQkJb2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluCiYjNDM7ICogQG1lbV9zaXplCQlTaXplIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2UKJiM0MzsgKgkJCW9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpbgomIzQzOyAqIEBiYXNlOgkJQmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViCiYjNDM7ICogQHNpemU6CQlTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViCiYjNDM7ICogQHNjcnViX2N5Y2xlX2hyczoJQ3VycmVudCBzY3J1YiByYXRlIGluIGhvdXJzCiYjNDM7ICogQHNldF9zY3J1Yl9jeWNsZToJU2NydWIgcmF0ZSB0byBzZXQgaW4gaG91cnMKJiM0MzsgKiBAbWluX3NjcnViX2N5Y2xlOglNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkCiYjNDM7ICogQG1heF9zY3J1Yl9jeWNsZToJTWF4aW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZAomIzQzOyAqIEBvZF9zY3J1YjoJCVN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKQomIzQzOyAqIEBiZ19zY3J1YjoJCVN0YXR1cyBvZiBiYWNrZ3JvdW5kIHBhdHJvbCBzY3J1YmJpbmcKJiM0MzsgKiBAcmVlbmFibGVfYmdfc2NydWI6CUZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kCiYjNDM7ICoJCQlzY3J1YmJpbmcgaXMgZmluaXNoZWQKJiM0MzsgKiBAdGhyZWFkOgkJRGVtYW5kIHNjcnViIG1vbml0b3Iga3RocmVhZAomIzQzOyAqIEBkcml2ZXJfYWN0aXZlOglGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcmFzMl9tZW1fY3R4IHsKJiM0MzsJc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UJCWFkZXY7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbQkqY29tbV9hZGRyOwomIzQzOwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKJiM0MzsJdm9pZAkJCQkqc3NwY2M7CiYjNDM7CXN0cnVjdCBtdXRleAkJCSpwY2NfbG9jazsKJiM0MzsJdTMyCQkJCXN5c19jb21wX25pZDsKJiM0MzsJdTY0CQkJCW1lbV9iYXNlOwomIzQzOwl1NjQJCQkJbWVtX3NpemU7CiYjNDM7CXU2NAkJCQliYXNlOwomIzQzOwl1NjQJCQkJc2l6ZTsKJiM0MzsJdTgJCQkJc2NydWJfY3ljbGVfaHJzOwomIzQzOwl1OAkJCQlzZXRfc2NydWJfY3ljbGU7CiYjNDM7CXU4CQkJCW1pbl9zY3J1Yl9jeWNsZTsKJiM0MzsJdTgJCQkJbWF4X3NjcnViX2N5Y2xlOwomIzQzOwlib29sCQkJCW9kX3NjcnViOwomIzQzOwlib29sCQkJCWJnX3NjcnViOwomIzQzOwlib29sCQkJCXJlZW5hYmxlX2JnX3NjcnViOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QJCSp0aHJlYWQ7CiYjNDM7CWJvb2wJCQkJZHJpdmVyX2FjdGl2ZTsKJiM0Mzt9OwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyCiYjNDM7dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7CiYjNDM7aW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZW5kaWYgLyogX0FDUElfUkFTMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oCmluZGV4IGU2YjRlNTExMzBlNWZmLi5iZTRmNmU1MmVhMzhhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZGFjLmgKQEAgLTY4NCw2ICYjNDM7Njg0LDggQEAgZW51bSBlZGFjX2Rldl9mZWF0IHsKICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuCiAgKiBAZ2V0X2VuYWJsZWRfYmc6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGJhY2tncm91bmQgc2NydWIuCiAgKiBAc2V0X2VuYWJsZWRfYmc6IHN0YXJ0IG9yIHN0b3AgYSBiZy1zY3J1Yi4KJiM0MzsgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi4KJiM0MzsgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuCiAgKiBAZ2V0X21pbl9jeWNsZTogZ2V0IG1pbmltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuCiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuCiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLgpAQCAtNjk2LDYgJiM0Mzs2OTgsOCBAQCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgewogCWludCAoKndyaXRlX3NpemUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKTsKIAlpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTsKIAlpbnQgKCpzZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpOwomIzQzOwlpbnQgKCpnZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTsKJiM0MzsJaW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTsKIAlpbnQgKCpnZXRfbWluX2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptaW4pOwogCWludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7CiAJaW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MjcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgQUNQSSBSQVMyIE1lbW9yeSBTY3J1YmJpbmcgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBBQ1BJIFJBUzIgbWVtb3J5IHNjcnViYmluZy4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2Ug4oCTIGEgbmV3IGRyaXZlciwgYGRyaXZlcnMvYWNwaS9yYXMyLmNgIGFuZCBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLCBhbG9uZyB3aXRoIGEgbW9kaWZpY2F0aW9uIHRvIGBkcml2ZXJzL2VkYWMvc2NydWIuY2AuIFRoZSBjb3JlIG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxpZXMgb24gdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCAoUENDKSBmb3IgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiwgZ2l2ZW4gbXkgZm9jdXMsIGlzIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLgoKVGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCBBQ1BJIHRhYmxlcyAoc3BlY2lmaWNhbGx5IHRoZSBgQUNQSV9TSUdfUkFTMmAgc2lnbmF0dXJlKSBhbmQgUENDIG1haWxib3hlcy4gTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgcGFydGljdWxhcmx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBXZSBjYW4gcHJvYmFibHkgaW5qZWN0IEFDUEkgdGFibGVzIHVzaW5nIHN5emthbGxlciwgd2hpY2ggbWlnaHQgbGV0IHVzIHRyaWdnZXIgdGhlIGluaXRpYWxpemF0aW9uLiBUaGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgYGFjcGlfcmFzMl9pbml0YCwgaXMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAsIHNvIHRoYXTigJlzIGEgcHJvbWlzaW5nIGVudHJ5IHBvaW50LiBJdCBwYXJzZXMgdGhlIFJBUzIgdGFibGUgYW5kLCBpZiBwcmVzZW50LCByZWdpc3RlcnMgYXV4aWxpYXJ5IGRldmljZXMuIFRoZSBhdXhpbGlhcnkgZGV2aWNlIHByb2JlLCBgcmFzMl9tZW1fZHJ2X3Byb2JlYCwgaXMgd2hlcmUgdGhlIGNydWNpYWwgUENDIHJlYWQgb3BlcmF0aW9ucyBvY2N1ci4KCkJ1dCB0aGUgY2F0Y2ggaXMgdGhlIFBDQyBtYWlsYm94IHN1cHBvcnQuIFN5emthbGxlciBjYW4gaW5qZWN0IEFDUEkgdGFibGVzIHVzaW5nIGBzeXpfYWNwaV9pbmplY3RgLCBidXQgZG9lcyBpdCBhY3R1YWxseSBoYXZlIFBDQyBtYWlsYm94IHN1cHBvcnQ/IEkgbmVlZCB0byB2ZXJpZnkgaWYgUENDIGlzIGV2ZW4gcmVhY2hhYmxlLiBUaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgZnVuY3Rpb24gYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAuIElmIHRoZXJlJiMzOTtzIG5vIFBDQyBtYWlsYm94IGF2YWlsYWJsZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwuIEkmIzM5O20gZ29pbmcgdG8gZGVsdmUgaW50byB0aGUga2VybmVsIGNvZGUgZm9yIGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgIGFuZCBzZWUgd2hhdCB0aGUgY29uZGl0aW9ucyBmb3Igc3VjY2VzcyBvciBmYWlsdXJlIGFyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIGZhY3RvciBpbiBkZXRlcm1pbmluZyBpZiB0aGlzIHdob2xlIHBhdGggaXMgdmlhYmxlIGZvciBmdXp6aW5nIGFuZCB3aWxsIGRldGVybWluZSBob3cgSSBhcHByb2FjaCB0ZXN0aW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNjX21ib3hfcmVxdWVzdF9jaGFubmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9hY3BpX3BjYy5jPTQ5PWFjcGlfcGNjX2FkZHJlc3Nfc3BhY2Vfc2V0dXAoYWNwaV9oYW5kbGUgcmVnaW9uX2hhbmRsZSwgdTMyIGZ1bmN0aW9uLFxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY3LVx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmRhdGEtXHUwMDNlZG9uZSk7XG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYzo2ODpcdGRhdGEtXHUwMDNlcGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2ZGF0YS1cdTAwM2VjbCwgY3R4LVx1MDAzZXN1YnNwYWNlX2lkKTtcbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY5LVx0aWYgKElTX0VSUihkYXRhLVx1MDAzZXBjY19jaGFuKSkge1xuLS1cbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYz01NjY9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChpbnQgcGNjX3NzX2lkeClcbi0tXG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmMtNTcxLVx0aWYgKHBjY19zc19pZHggXHUwMDNlPSAwKSB7XG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmM6NTcyOlx0XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZjcHBjX21ib3hfY2wsIHBjY19zc19pZHgpO1xuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3My1cbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jPTI4MT1zdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuLS1cbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzAyLVxuZHJpdmVycy9hY3BpL3JhczIuYzozMDM6XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA0LVx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcbi0tXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jPTEwNj1zdGF0aWMgaW50IGhpc2lfdW5jb3JlX3JlcXVlc3RfcGNjX2NoYW4oc3RydWN0IGhpc2lfdW5jb3JlX2ZyZXEgKnVuY29yZSlcbi0tXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jLTExNi1cbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM6MTE3Olx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2dW5jb3JlLVx1MDAzZWNsLCB1bmNvcmUtXHUwMDNlY2hhbl9pZCk7XG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jLTExOC1cdGlmIChJU19FUlIocGNjX2NoYW4pKVxuLS1cbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYz02MDk9c3RhdGljIGludCB4Z2VuZV9od21vbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjctXHRcdGNsLVx1MDAzZXJ4X2NhbGxiYWNrID0geGdlbmVfaHdtb25fcGNjX3J4X2NiO1xuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jOjY2ODpcdFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cdTAwM2VtYm94X2lkeCk7XG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNjY5LVx0XHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuLS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jPTQzNj1zdGF0aWMgaW50IHhnZW5lX3NsaW1wcm9faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc3LVx0XHRjbC1cdTAwM2VyeF9jYWxsYmFjayA9IHNsaW1wcm9faTJjX3BjY19yeF9jYjtcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jOjQ3ODpcdFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cdTAwM2VtYm94X2lkeCk7XG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYy00NzktXHRcdGlmIChJU19FUlIocGNjX2NoYW4pKVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zMTM9c3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNDgtLyoqXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzQ5OiAqIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCAtIFBDQyBjbGllbnRzIGNhbGwgdGhpcyBmdW5jdGlvbiB0b1xuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM1MC0gKlx0XHRyZXF1ZXN0IGEgcG9pbnRlciB0byB0aGVpciBQQ0Mgc3Vic3BhY2UsIGZyb20gd2hpY2ggdGhleVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zNjA9c3RydWN0IHBjY19tYm94X2NoYW4gKlxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM2MTpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM2Mi17XG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5Mi19XG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzkzOkVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzk0LVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTgtICogQHBjaGFuOiBQb2ludGVyIHRvIHRoZSBQQ0MgbWFpbGJveCBjaGFubmVsIGFzIHJldHVybmVkIGJ5XG5kcml2ZXJzL21haWxib3gvcGNjLmM6Mzk5OiAqXHQgICBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoKVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTQwMC0gKi9cbi0tXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmM9MTczPXN0YXRpYyBpbnQgaGNjc19yZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgaGNjc19kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jLTE4OC1cbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYzoxODk6XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgaGRldi1cdTAwM2VjaGFuX2lkKTtcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xOTAtXHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuLS1cbmluY2x1ZGUvYWNwaS9wY2MuaD0zNz1leHRlcm4gc3RydWN0IHBjY19tYm94X2NoYW4gKlxuaW5jbHVkZS9hY3BpL3BjYy5oOjM4OnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpO1xuaW5jbHVkZS9hY3BpL3BjYy5oLTM5LWV4dGVybiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqY2hhbik7XG4tLVxuaW5jbHVkZS9hY3BpL3BjYy5oPTQxPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjY19tYm94X2NoYW4gKlxuaW5jbHVkZS9hY3BpL3BjYy5oOjQyOnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXG5pbmNsdWRlL2FjcGkvcGNjLmgtNDMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDMwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFJBUzIgU2NydWIgSW50ZXJmYWNlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlIGNhbiBmdXp6IHRoZSBSQVMyIGRyaXZlciBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggRURBQyBzY3J1YiBpbnRlcmZhY2VzLiBGaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGUgUENDIG1haWxib3ggZHJpdmVyIGlzIGFjY2Vzc2libGUgdmlhIEFDUEkgdGFibGUgaW5qZWN0aW9uLCBzcGVjaWZpY2FsbHkgUENDVC4gIElmIHN5emthbGxlciBpbmplY3RzIGEgUENDVCB0YWJsZSwgdGhlIFBDQyBtYWlsYm94IHNob3VsZCBpbml0aWFsaXplIGNoYW5uZWxzLCBhbmQgdGhlbiB0aGUgUkFTMiBkcml2ZXIgc2hvdWxkIGluaXRpYWxpemUgaXRzZWxmIGlmIGEgUkFTMiB0YWJsZSBpcyBhbHNvIGluamVjdGVkLCB3aGljaCBtZWFucyB3ZSBjYW4gcmVhY2ggaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGBlZGFjX2Rldl9yZWdpc3RlcmAgY2FsbCBpbiBgcmFzMl9tZW1fZHJ2X3Byb2JlYC4gVGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlcyBiZWluZyBleHBvc2VkIHZpYSBzeXNmcy4gVGhpcyBpcyBncmVhdCwgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhvc2Ugc3lzZnMgZmlsZXMgdG8gdHJpZ2dlciB0aGUgc2NydWIgb3BlcmF0aW9ucy4gSSYjMzk7bSBzZWVpbmcgdGhlIGZpbGVzIGFyZTogYC9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfZGVtYW5kYCwgYC9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9zaXplYCwgYC9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9hZGRyYCwgYC9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uYCwgYW5kIGAvc3lzL2J1cy9lZGFjL2RldmljZXMvJmx0O2Rldi1uYW1lJmd0Oy9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmRgLgoKVGhlIGtleSBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIG9wZXJhdGlvbnMuIExvb2tpbmcgYXQgYHJhczJfc2NydWJfb3BzYCwgSSBzZWUgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBgcmVhZF9hZGRyYCwgYHJlYWRfc2l6ZWAsIGB3cml0ZV9hZGRyYCwgYHdyaXRlX3NpemVgLCBgZ2V0X2VuYWJsZWRfYmdgLCBgc2V0X2VuYWJsZWRfYmdgLCBgZ2V0X2VuYWJsZWRfb2RgLCBgc2V0X2VuYWJsZWRfb2RgLCBgZ2V0X21pbl9jeWNsZWAsIGBnZXRfbWF4X2N5Y2xlYCwgYGdldF9jeWNsZV9kdXJhdGlvbmAsIGFuZCBgc2V0X2N5Y2xlX2R1cmF0aW9uYC4gVGhpcyBpcyBhIGNsZWFyIHRhcmdldCBmb3IgZnV6emluZy4gV2UgY2FuIHByb3ZpZGUgYXJiaXRyYXJ5IHZhbHVlcyB0byB0aGVzZSBmaWxlcyBhbmQgb2JzZXJ2ZSB0aGUgZWZmZWN0cywgc2VlaW5nIGlmIHdlIGNhbiB0cmlnZ2VyIGFueSBtZW1vcnkgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCBgQ09ORklHX0FDUElfUkFTMmAsIGBDT05GSUdfTUVNX0FDUElfUkFTMmAsIGFuZCBgQ09ORklHX0VEQUNfU0NSVUJgLiBMZXQmIzM5O3MgY29uZmlybSBob3cgdGhlc2UgcmVsYXRlLi4uIEFoYSwgYE1FTV9BQ1BJX1JBUzJgICpkZXBlbmRzKiBvbiBgQUNQSV9SQVMyYCwgYEVEQUNgLCBhbmQgYEVEQUNfU0NSVUJgLiBTbywgZW5zdXJpbmcgdGhhdCBgTUVNX0FDUElfUkFTMmAgaXMgZW5hYmxlZCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSB0aGUgb3RoZXJzLCB3aGljaCBpcyBpZGVhbC4gTGV0IG1lIGdvIGNoZWNrIGBkcml2ZXJzL3Jhcy9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNX0FDUElfUkFTMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Jhcy9LY29uZmlnPTM3PWNvbmZpZyBSQVNfRk1QTVxuLS1cbmRyaXZlcnMvcmFzL0tjb25maWctNDgtXG5kcml2ZXJzL3Jhcy9LY29uZmlnOjQ5OmNvbmZpZyBNRU1fQUNQSV9SQVMyXG5kcml2ZXJzL3Jhcy9LY29uZmlnLTUwLVx0dHJpc3RhdGUgXCYjMzQ7TWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM5OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIFJBUyBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgZHJpdmVycy9yYXMvS2NvbmZpZ2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgYE1FTV9BQ1BJX1JBUzJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBSQVMsIG9yIFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIGFuZCBTZXJ2aWNlYWJpbGl0eSwgaXMgY3JpdGljYWwsIG9idmlvdXNseS4gQW5kIGBBQ1BJYCBhbG1vc3QgY2VydGFpbmx5IGluZGljYXRlcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIHBsYXRmb3JtIGludGVyZmFjZXMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gZXJyb3IgaGFuZGxpbmcgb3IgbWVtb3J5IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQUNQSS1kZWZpbmVkIGZlYXR1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgYE1FTV9BQ1BJX1JBUzJgIHJlbGF0ZXMgdG8gdGhlIGJyb2FkZXIgUkFTIGluZnJhc3RydWN0dXJlOyBwZXJoYXBzIGl0JiMzOTtzIGFuIGVuaGFuY2VtZW50LCBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBvciBhIGZhbGxiYWNrIG1lY2hhbmlzbS4gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIGZlYXR1cmVzLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgY29uZmlndXJlcyByZWxpYWJpbGl0eSBmZWF0dXJlcyBiYXNlZCBvbiBBQ1BJLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9yYXMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdGRlcGVuZHMgb24gQU1EX0FUTCBcdTAwMjZcdTAwMjYgQUNQSV9BUEVJXG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIFN1cHBvcnQgc2F2aW5nIGFuZCByZXN0b3JpbmcgbWVtb3J5IGVycm9yIGluZm9ybWF0aW9uIGFjcm9zcyByZWJvb3RcbiAgNDM6XHRcdCAgdXNpbmcgQUNQSSBFUlNUIGFzIHBlcnNpc3RlbnQgc3RvcmFnZS4gRXJyb3IgaW5mb3JtYXRpb24gaXMgc2F2ZWQgd2l0aFxuICA0NDpcdFx0ICB0aGUgVUVGSSBDUEVSIFwmIzM0O0ZSVSBNZW1vcnkgUG9pc29uXCYjMzQ7IHNlY3Rpb24gZm9ybWF0LlxuICA0NTpcdFxuICA0NjpcdFx0ICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvblxuICA0NzpcdFx0ICBwbGF0Zm9ybS1zcGVjaWZpYyBwb2xpY2llcy5cbiAgNDg6XHRcbiAgNDk6XHRjb25maWcgTUVNX0FDUElfUkFTMlxuICA1MDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcJiMzNDtcbiAgNTE6XHRcdGRlcGVuZHMgb24gQUNQSV9SQVMyXG4gIDUyOlx0XHRkZXBlbmRzIG9uIEVEQUNcbiAgNTM6XHRcdGRlcGVuZHMgb24gRURBQ19TQ1JVQlxuICA1NDpcdFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMlxuICA1NzpcdFx0ICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG9cbiAgNTg6XHRcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXG4gIDU5Olx0XHQgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBSZWxpYWJpbGl0eSBGcmFtZXdvcmsqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYE1FTV9BQ1BJX1JBUzJg4oCmIHRoYXQgcmluZ3MgYSBiZWxsLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGRlZmluaXRlbHkgdGllZCB0byBgQUNQSV9SQVMyYCwgYW5kIG9mIGNvdXJzZSwgdGhhdCBpbXBsaWVzIGEgbGluayB0byBgRURBQ2AgYW5kIGBFREFDX1NDUlVCYC4gU2VlbXMgbGlrZSBhIHByZXR0eSBmb2N1c2VkIGFyZWEg4oCTIG1lbW9yeSBlcnJvciBjb3JyZWN0aW9uIHdpdGhpbiB0aGUgQUNQSSBmcmFtZXdvcmsuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBhbnl0aGluZyBlbHNlLCBJIHNob3VsZCBjaGVjayB0aGUgc291cmNlLiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBnZXQgdGhlIEtjb25maWcgZmlsZSBmb3IgQUNQSSwgdGhhdCBzaG91bGQgdGVsbCBtZSB3aGF0IHRoYXQgYEFDUElfUkFTMmAgc3ltYm9sIGlzIGFsbCBhYm91dC4gSG9wZWZ1bGx5IEkgY2FuIGdldCBhIGJldHRlciBvdmVydmlldyBvZiBkZXBlbmRlbmNpZXMgdGhpcyB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9hY3BpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGlzIGZpbGUgaW1wbGVtZW50cyBjb21tb24gZnVuY3Rpb25hbGl0eVxuIDI5MTpcdFx0ICB0byBwYXJzZSBDUFBDIHRhYmxlcyBhcyBkZXNjcmliZWQgaW4gdGhlIEFDUEkgNS4xJiM0Mzsgc3BlYy4gVGhlXG4gMjkyOlx0XHQgIHJvdXRpbmVzIGltcGxlbWVudGVkIGFyZSBtZWFudCB0byBiZSB1c2VkIGJ5IG90aGVyXG4gMjkzOlx0XHQgIGRyaXZlcnMgdG8gY29udHJvbCBDUFUgcGVyZm9ybWFuY2UgdXNpbmcgQ1BQQyBzZW1hbnRpY3MuXG4gMjk0Olx0XHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIDI5NTpcdFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiAyOTY6XHRcbiAyOTc6XHRjb25maWcgQUNQSV9SQVMyXG4gMjk4Olx0XHRib29sIFwmIzM0O0FDUEkgUkFTMiBkcml2ZXJcJiMzNDtcbiAyOTk6XHRcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4gMzAwOlx0XHRkZXBlbmRzIG9uIE1BSUxCT1hcbiAzMDE6XHRcdGRlcGVuZHMgb24gUENDXG4gMzAyOlx0XHRoZWxwXG4gMzAzOlx0XHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXG4gMzA0Olx0XHQgIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgc3VjaCBhcyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLlxuIDMwNTpcdFxuIDMwNjpcdFx0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxuIDMwNzpcdFxuIDMwODpcdGNvbmZpZyBBQ1BJX1BST0NFU1NPUlxuIDMwOTpcdFx0dHJpc3RhdGUgXCYjMzQ7UHJvY2Vzc29yXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTEwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSByZXF1aXJlbWVudHMsIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGlzIHNwYWNlOgoKKipEaWdnaW5nIGludG8gdGhlIFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIGFuZCBTZXJ2aWNlYWJpbGl0eSBSZXF1aXJlbWVudHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyByZWxpYWJpbGl0eSBhbmQgUkFTIHN0dWZmLiBJIHNlZSBhIGZldyBrZXkgZWxlbWVudHMganVtcGluZyBvdXQ6IGBBQ1BJX1JBUzJgLCBgTUVNX0FDUElfUkFTMmAsIGBFREFDX1NDUlVCYCwgYFBDQ2AsIGFuZCBgTUFJTEJPWGAuIFRoZXNlIGFsbCBwb2ludCB0byBkaWZmZXJlbnQgbGV2ZWxzIG9mIGVycm9yIGRldGVjdGlvbiwgY29ycmVjdGlvbiwgYW5kIGhhbmRsaW5nIHdpdGhpbiB0aGUgc3lzdGVtLiBgQUNQSV9SQVMyYCBhbmQgYE1FTV9BQ1BJX1JBUzJgIGxpa2VseSBhZGRyZXNzIGZpcm13YXJlLWJhc2VkIGFuZCBtZW1vcnktc3BlY2lmaWMgUkFTIGNhcGFiaWxpdGllcywgd2hpY2ggYXJlIGZ1bmRhbWVudGFsLiBgUENDYCBwcm9iYWJseSByZWZlcnMgdG8gUGxhdGZvcm0gQ29udHJvbCBDb21wb25lbnQsIHN1Z2dlc3Rpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhZHZhbmNlZCBwbGF0Zm9ybSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBBbmQgdGhlIGBNQUlMQk9YYCBpbmRpY2F0ZXMgYSBtZWNoYW5pc20gZm9yIGludGVyLXByb2Nlc3NvciBvciBpbnRlci1tb2R1bGUgY29tbXVuaWNhdGlvbiBzcGVjaWZpY2FsbHkgZm9yIFJBUyBldmVudHMuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgY2FwYWJpbGl0aWVzIG9mIHRoZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHF1aWNrbHk6IElzIGBFREFDX1NDUlVCYCBhY3R1YWxseSBhIGNvbmZpZ3VyYWJsZSBvcHRpb24/IFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkL2NvbmZpZyBvcHRpb25zIGZvciBhIHNjcnViIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgd2hhdCBjYW4gYmUgY3VzdG9taXplZCBhbmQgaWYgd2UgY2FuIG1vZGlmeSB0aGUgd2F5IHRoZSBFREFDIHNjcnViIHdvcmtzLiBJcyBpdCBqdXN0IGEgZHJpdmVyLCBvciBhIGNvbXByZWhlbnNpdmUgbWVjaGFuaXNtIHRoYXQgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGluIGl0cyBjb250ZXh0PyBHZXR0aW5nIHRoaXMgY2xhcml0eSBpcyBrZXkgdG8gZGVjaWRpbmcgaG93IHdlIGNhbiBpbnRlZ3JhdGUgYWxsIHRoZXNlIGNvbXBvbmVudHMgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIGEgZm91bmRhdGlvbmFsIHF1ZXN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRURBQ19TQ1JVQiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2VkYWMvS2NvbmZpZz00Nz1jb25maWcgRURBQ19HSEVTXG4tLVxuZHJpdmVycy9lZGFjL0tjb25maWctNjktXG5kcml2ZXJzL2VkYWMvS2NvbmZpZzo3MDpjb25maWcgRURBQ19TQ1JVQlxuZHJpdmVycy9lZGFjL0tjb25maWctNzEtXHRib29sIFwmIzM0O0VEQUMgc2NydWIgZmVhdHVyZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTk1OQoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBTeXN0ZW0gQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMsIGFuZCB5ZXAsICpFREFDX1NDUlVCKi4uLiB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIHNldHRpbmcuIEdvdCBpdC4gTm93LCB3aGF0JiMzOTtzIG5leHQ/IExldCBtZSBzaGlmdCBteSBmb2N1cy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0ICpQQ0MqLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBnbyBmcm9tIGhlcmUsIGxldCYjMzk7cyBleHBsb3JlIHRoYXQgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21haWxib3gvS2NvbmZpZz0xMTQ9Y29uZmlnIFJPQ0tDSElQX01CT1hcbi0tXG5kcml2ZXJzL21haWxib3gvS2NvbmZpZy0xMjItXG5kcml2ZXJzL21haWxib3gvS2NvbmZpZzoxMjM6Y29uZmlnIFBDQ1xuZHJpdmVycy9tYWlsYm94L0tjb25maWctMTI0LVx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9wY21jaWEvS2NvbmZpZy01LVxuZHJpdmVycy9wY21jaWEvS2NvbmZpZzo2Om1lbnVjb25maWcgUENDQVJEXG5kcml2ZXJzL3BjbWNpYS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtQQ0NhcmQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9wY21jaWEvS2NvbmZpZz0yMTM9Y29uZmlnIEVMRUNUUkFfQ0Zcbi0tXG5kcml2ZXJzL3BjbWNpYS9LY29uZmlnLTIxOS1cbmRyaXZlcnMvcGNtY2lhL0tjb25maWc6MjIwOmNvbmZpZyBQQ0NBUkRfTk9OU1RBVElDXG5kcml2ZXJzL3BjbWNpYS9LY29uZmlnLTIyMS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyOTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA5NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFRhcmdldCBmb3IgRnV6emluZzogUENDIGFuZCBSQVMyKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgUENDYCB0aGluZy4gRmlyc3QgdGhpbmdzIGZpcnN0OiBjb25maXJtIHRoYXQgYFBDQ2AgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBJIHNlZSBpdCBpcyBpbiBgZHJpdmVycy9tYWlsYm94L0tjb25maWdgLiBSaWdodCwgc28gdG8gZW5hYmxlIHRoZSBgUENDYCBmdW5jdGlvbmFsaXR5LCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSB0aGVzZSBjb25maWdzOiBgQUNQSV9SQVMyYCwgYE1FTV9BQ1BJX1JBUzJgLCBgRURBQ19TQ1JVQmAgYW5kIGBQQ0NgLCBhbmQgcHJvYmFibHkgYE1BSUxCT1hgIGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGNvcmUgc3Vic3lzdGVtLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucy4gTG9va2luZyBhdCBgZHJpdmVycy9hY3BpL3JhczIuY2AsIHRoZXJlIGFyZSB0aGVzZSBuZXcgZnVuY3Rpb25zOiBgcmFzMl9zZW5kX3BjY19jbWRgLCBgcmVnaXN0ZXJfcGNjX2NoYW5uZWxgLCBgYWRkX2F1eF9kZXZpY2VgLCBgcGFyc2VfcmFzMl90YWJsZWAsIGFuZCBgYWNwaV9yYXMyX2luaXRgLiBUaGVuLCBpbiBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLCBJIHNlZSBhIGxhcmdlciBzZXQgb2YgaW50ZXJlc3Rpbmcgcm91dGluZXM6IGByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0YCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlYCwgYHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGVgLCBgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkYCwgYHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGVgLCBgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHJgLCBgcmFzMl9od19zY3J1Yl9yZWFkX3NpemVgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZWAsIGByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnYCwgYF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZ2AsIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2RgLCBgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZGAsIGFuZCBgcmFzMl9tZW1fZHJ2X3Byb2JlYC4KCkFscmlnaHQsIHRpbWUgdG8gcmVmaW5lIHRoZSBhdHRhY2sgc3VyZmFjZSBmb3IgZnV6emluZy4gSW5pdGlhbGx5LCBJIHRoaW5rIHRoZSBjcml0aWNhbCBvbmVzIGFyZTogYHJhczJfc2VuZF9wY2NfY21kYCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcmAsIGByYXMyX2h3X3NjcnViX3dyaXRlX3NpemVgLCBgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2RgLCBgcmFzMl9tZW1fZHJ2X3Byb2JlYCwgYW5kIGBwYXJzZV9yYXMyX3RhYmxlYC4KCkhhbmcgb24uLi4gSSBzZWUgYHJhczJfc2VuZF9wY2NfY21kYCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBzaG91bGQgY2hlY2sgYGRyaXZlcnMvZWRhYy9zY3J1Yi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXcgc3lzZnMgYXR0cmlidXRlcyBvciBhbnl0aGluZyBlbHNlIHRvIGNvbnNpZGVyLiBTZWVtcyBsaWtlIHRoZXJlJiMzOTtzIGEgc2ltcGxlIGFkZGl0aW9uIG9mIGBlbmFibGVfZGVtYW5kYCB0byB0aGUgc3lzZnMgYXR0cmlidXRlcyBhbmQgYSBtb2RpZmljYXRpb24gb2YgYHNjcnViX2F0dHJfdmlzaWJsZWAsIG5vdGhpbmcgbWFqb3IuCgpTbywgbGV0IG1lIHJlLWV2YWx1YXRlIHRoZSB0YXJnZXQgbGlzdCwgYWZ0ZXIgdGhpcyBxdWljayBzY2FuIG9mIHRoZSBgZWRhY2Agc2lkZTogYHJhczJfc2VuZF9wY2NfY21kYCwgYHBhcnNlX3JhczJfdGFibGVgLCBgcmFzMl9tZW1fZHJ2X3Byb2JlYCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcmAsIGByYXMyX2h3X3NjcnViX3dyaXRlX3NpemVgLCBgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYW5kIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FjcGlfcmFzMl9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9idXMuYz0xNTc2PXN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvYWNwaS9idXMuYy0xNjEzLVx0YWNwaV92aW90X2luaXQoKTtcbmRyaXZlcnMvYWNwaS9idXMuYzoxNjE0Olx0YWNwaV9yYXMyX2luaXQoKTtcbmRyaXZlcnMvYWNwaS9idXMuYy0xNjE1LVxuLS1cbmRyaXZlcnMvYWNwaS9yYXMyLmM9NDE5PXN0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTQ3Ny0vKipcbmRyaXZlcnMvYWNwaS9yYXMyLmM6NDc4OiAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTQ3OS0gKlxuLS1cbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDg2LSAqL1xuZHJpdmVycy9hY3BpL3JhczIuYzo0ODc6dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZClcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDg4LXtcbi0tXG5pbmNsdWRlL2FjcGkvcmFzMi5oPTU3PXN0cnVjdCByYXMyX21lbV9jdHgge1xuLS1cbmluY2x1ZGUvYWNwaS9yYXMyLmgtNzktI2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbmluY2x1ZGUvYWNwaS9yYXMyLmg6ODA6dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XG5pbmNsdWRlL2FjcGkvcmFzMi5oLTgxLWludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XG5pbmNsdWRlL2FjcGkvcmFzMi5oLTgyLSNlbHNlXG5pbmNsdWRlL2FjcGkvcmFzMi5oOjgzOnN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cbmluY2x1ZGUvYWNwaS9yYXMyLmgtODQtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjM3CgkJCQkJCQlvdXRwdXQ6IDMwMwoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgQUNQSSBSQVMyIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXcgQUNQSSBSQVMyIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBicmFpbiBzdGFydHMgY2h1cm5pbmcuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIHdheSB0byBoYW5kbGUgbWVtb3J5IHNjcnViYmluZyB0aHJvdWdoIEFDUEkgYW5kIGV4cG9zZSBpdCB0aHJvdWdoIHN5c2ZzLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgcmlnaHQgYXdheS4gVGhpcyBkcml2ZXIgcGFyc2VzIHRoZSBSQVMyIEFDUEkgdGFibGUsIHdoaWNoIGlzIGEga2V5IHN0cnVjdHVyZS4gSXQgdGhlbiByZWdpc3RlcnMgdGhlc2UgYXV4aWxpYXJ5IGRldmljZXMsIGFuZCBhIGJpbmRpbmcgZHJpdmVyIGlzIGluY2x1ZGVkIHRvIGludGVyYWN0IHdpdGggdGhlbSwgZXhwb3NpbmcgRURBQyBzY3J1YiBpbnRlcmZhY2VzIGZvciBjb250cm9sIHRocm91Z2ggdGhlIFBDQy4KClRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyBzZXR1cCBpcyAqcmVhY2hhYmxlKiBieSBzeXprYWxsZXIuIFN5emthbGxlciBjYW4gaW5qZWN0IGN1c3RvbSBBQ1BJIHRhYmxlcywgaW5jbHVkaW5nIFJBUzIgYW5kIFBDQ1QsIGFuZCBpdCBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlcy4gVGhpcyBpcyBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHMsIHRoZXkmIzM5O3JlIHRoZSBhdHRhY2sgc3VyZmFjZTogYHBhcnNlX3JhczJfdGFibGVgLCBgcmFzMl9zZW5kX3BjY19jbWRgLCBgcmFzMl9tZW1fZHJ2X3Byb2JlYCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcmAsIGByYXMyX2h3X3NjcnViX3dyaXRlX3NpemVgLCBgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYW5kIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kYC4gRWFjaCBvbmUgb2YgdGhlc2UsIHBhcnRpY3VsYXJseSB0aGUgKndyaXRlKiBvcGVyYXRpb25zLCBuZWVkcyBtZXRpY3Vsb3VzIHNjcnV0aW55LgoKVGhlIGNvbmZpZ3VyYXRpb25zIHRvIGxvb2sgb3V0IGZvciBhcmUgYEFDUElfUkFTMmAsIGBNRU1fQUNQSV9SQVMyYCwgYEVEQUNfU0NSVUJgLCBhbmQgYFBDQ2AuIFRoZXNlIGFyZSB0aGUgZ2F0ZXMgYW5kIGluZGljYXRvcnMgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSByaWdodCBlbnZpcm9ubWVudC4KCkFscmlnaHQsIHRpbWUgdG8gc2V0IHNvbWUgZXhwZWN0YXRpb25zIGFuZCByZXN1bHRzLiBUaGlzIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgZnV6emVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUNQSV9SQVMyJiMzNDssCiAgICAmIzM0O01FTV9BQ1BJX1JBUzImIzM0OywKICAgICYjMzQ7RURBQ19TQ1JVQiYjMzQ7LAogICAgJiMzNDtQQ0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYXJzZV9yYXMyX3RhYmxlJiMzNDssCiAgICAmIzM0O3JhczJfc2VuZF9wY2NfY21kJiMzNDssCiAgICAmIzM0O3JhczJfbWVtX2Rydl9wcm9iZSYjMzQ7LAogICAgJiMzNDtyYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlJiMzNDssCiAgICAmIzM0O3JhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nJiMzNDssCiAgICAmIzM0O3JhczJfc2NydWJfbW9uaXRvcl90aHJlYWQmIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZSYjMzQ7LAogICAgJiMzNDtyYXMyX2h3X3NjcnViX3dyaXRlX2FkZHImIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl93cml0ZV9zaXplJiMzNDssCiAgICAmIzM0O19fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyYjMzQ7LAogICAgJiMzNDtyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQUNQSSBSQVMyIGRyaXZlciB0aGF0IHBhcnNlcyB0aGUgUkFTMiBBQ1BJIHRhYmxlIGFuZCByZWdpc3RlcnMgYXV4aWxpYXJ5IGRldmljZXMgZm9yIG1lbW9yeSBzY3J1YmJpbmcuIEl0IGFsc28gYWRkcyBhIGRyaXZlciB0aGF0IGJpbmRzIHRvIHRoZXNlIGF1eGlsaWFyeSBkZXZpY2VzIGFuZCBleHBvc2VzIEVEQUMgc2NydWIgc3lzZnMgaW50ZXJmYWNlcyB0byBjb250cm9sIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcgdmlhIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKS4gU2luY2Ugc3l6a2FsbGVyIGNhbiBpbmplY3QgQUNQSSB0YWJsZXMgKGluY2x1ZGluZyBSQVMyIGFuZCBQQ0NUKSBhbmQgaW50ZXJhY3Qgd2l0aCBzeXNmcywgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FDUElfUkFTMiYjMzQ7LAogICAgJiMzNDtNRU1fQUNQSV9SQVMyJiMzNDssCiAgICAmIzM0O0VEQUNfU0NSVUImIzM0OywKICAgICYjMzQ7UENDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFyc2VfcmFzMl90YWJsZSYjMzQ7LAogICAgJiMzNDtyYXMyX3NlbmRfcGNjX2NtZCYjMzQ7LAogICAgJiMzNDtyYXMyX21lbV9kcnZfcHJvYmUmIzM0OywKICAgICYjMzQ7cmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZSYjMzQ7LAogICAgJiMzNDtyYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyYjMzQ7LAogICAgJiMzNDtyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUmIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl93cml0ZV9hZGRyJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSYjMzQ7LAogICAgJiMzNDtfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcmIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEFDUEkgUkFTMiBkcml2ZXIgdGhhdCBwYXJzZXMgdGhlIFJBUzIgQUNQSSB0YWJsZSBhbmQgcmVnaXN0ZXJzIGF1eGlsaWFyeSBkZXZpY2VzIGZvciBtZW1vcnkgc2NydWJiaW5nLiBJdCBhbHNvIGFkZHMgYSBkcml2ZXIgdGhhdCBiaW5kcyB0byB0aGVzZSBhdXhpbGlhcnkgZGV2aWNlcyBhbmQgZXhwb3NlcyBFREFDIHNjcnViIHN5c2ZzIGludGVyZmFjZXMgdG8gY29udHJvbCBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nIHZpYSBQQ0MgKFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCkuIFNpbmNlIHN5emthbGxlciBjYW4gaW5qZWN0IEFDUEkgdGFibGVzIChpbmNsdWRpbmcgUkFTMiBhbmQgUENDVCkgYW5kIGludGVyYWN0IHdpdGggc3lzZnMsIHRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDc6MDkuOTk2NjA4MzY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIxMzI4ODQ5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUNQSV9SQVMyXCIsXG4gICAgXCJNRU1fQUNQSV9SQVMyXCIsXG4gICAgXCJFREFDX1NDUlVCXCIsXG4gICAgXCJQQ0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXJzZV9yYXMyX3RhYmxlXCIsXG4gICAgXCJyYXMyX3NlbmRfcGNjX2NtZFwiLFxuICAgIFwicmFzMl9tZW1fZHJ2X3Byb2JlXCIsXG4gICAgXCJyYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlXCIsXG4gICAgXCJyYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZ1wiLFxuICAgIFwicmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZFwiLFxuICAgIFwicmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZVwiLFxuICAgIFwicmFzMl9od19zY3J1Yl93cml0ZV9hZGRyXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3dyaXRlX3NpemVcIixcbiAgICBcIl9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZ1wiLFxuICAgIFwicmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQUNQSSBSQVMyIGRyaXZlciB0aGF0IHBhcnNlcyB0aGUgUkFTMiBBQ1BJIHRhYmxlIGFuZCByZWdpc3RlcnMgYXV4aWxpYXJ5IGRldmljZXMgZm9yIG1lbW9yeSBzY3J1YmJpbmcuIEl0IGFsc28gYWRkcyBhIGRyaXZlciB0aGF0IGJpbmRzIHRvIHRoZXNlIGF1eGlsaWFyeSBkZXZpY2VzIGFuZCBleHBvc2VzIEVEQUMgc2NydWIgc3lzZnMgaW50ZXJmYWNlcyB0byBjb250cm9sIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcgdmlhIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKS4gU2luY2Ugc3l6a2FsbGVyIGNhbiBpbmplY3QgQUNQSSB0YWJsZXMgKGluY2x1ZGluZyBSQVMyIGFuZCBQQ0NUKSBhbmQgaW50ZXJhY3Qgd2l0aCBzeXNmcywgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjQ3OjA5Ljk5NjYxMzgxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2MjM3NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2JlY2I0ZjJiNzIzNDNiYjc1NGYxNGM2MTlkYjM1YzdhNGYzODMwNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxMCAxODo0NzowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcXG5pbmRleCBhYjYwMTQ3NDNkYTU2OC4uMmI4NzRlMDMzNjIzMzQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuQEAgLTIwLDExICsyMCw3IEBAIEtlcm5lbFZlcnNpb246XFx0Ni4xNVxcbiBDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuIERlc2NyaXB0aW9uOlxcbiBcXHRcXHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4tXFx0XFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxcbi1cXHRcXHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cXG4tXFxuLVxcdFxcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcXG4tXFx0XFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXFxuK1xcdFxcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxcbiBcXG4gV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1Ylgvc2l6ZVxcbiBEYXRlOlxcdFxcdE1hcmNoIDIwMjVcXG5AQCAtMzQsNiArMzAsMTQgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdChSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4gXFx0XFx0KG9uLWRlbWFuZCBzY3J1YmJpbmcpLlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1YlgvZW5hYmxlX2RlbWFuZFxcbitEYXRlOlxcdFxcdEphbiAyMDI2XFxuK0tlcm5lbFZlcnNpb246XFx0Ni4xOVxcbitDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHQoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzXFxuK1xcdFxcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cXHUwMDNjZGV2LW5hbWVcXHUwMDNlL3NjcnViWC9lbmFibGVfYmFja2dyb3VuZFxcbiBEYXRlOlxcdFxcdE1hcmNoIDIwMjVcXG4gS2VybmVsVmVyc2lvbjpcXHQ2LjE1XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XFxuaW5kZXggMmNmYTc0ZmExZmZkMmYuLjU2MmJmZDZmZjYzMDUxIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XFxuQEAgLTM0MCwzICszNDAsNzMgQEAgY29udHJvbGxlciBvciBwbGF0Zm9ybSB3aGVuIHVuZXhwZWN0ZWRseSBoaWdoIGVycm9yIHJhdGVzIGFyZSBkZXRlY3RlZC5cXG4gXFxuIFN5c2ZzIGZpbGVzIGZvciBzY3J1YmJpbmcgYXJlIGRvY3VtZW50ZWQgaW5cXG4gYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1lY3NgXFxuK1xcbiszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZ1xcbitcXG4rMy4xLiBEZW1hbmQgc2NydWJiaW5nIGZvciBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uXFxuK1xcbiszLjEuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxcbitcXG4rMFxcbitcXG4rMy4xLjIuIFF1ZXJ5IHdoYXQgaXMgZGV2aWNlIGRlZmF1bHQvY3VycmVudCBzY3J1YiBjeWNsZSBzZXR0aW5nLlxcbitcXG4rQXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZVxcbitzY3J1YiBjeWNsZSBpcyBzZWNvbmRzLlxcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cXG4rXFxuKzM2MDAwXFxuK1xcbiszLjEuMy4gUXVlcnkgdGhlIHJhbmdlIG9mIGRldmljZSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZm9yIGEgbWVtb3J5IHJlZ2lvbi5cXG4rVGhlIHVuaXQgb2YgdGhlIHNjcnViIGN5Y2xlIHJhbmdlIGlzIHNlY29uZHMuXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWluX2N5Y2xlX2R1cmF0aW9uXFxuK1xcbiszNjAwXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWF4X2N5Y2xlX2R1cmF0aW9uXFxuK1xcbis4NjQwMFxcbitcXG4rMy4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnlcXG4rNDMyMDAgc2Vjb25kcyAoaGFsZiBhIGRheSkuXFxuK1xcbisjIGVjaG8gNDMyMDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxcbitcXG4rMy4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxcbitcXG4rU2V0ICdhZGRyJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cXG4rXFxuKyMgZWNobyAweDgwMDAwMDAwIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHJcXG4rXFxuK1NldCAnc2l6ZScgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXFxuK1xcbisjIGVjaG8gMHgyMDAwMDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvc2l6ZVxcbitcXG4rMy4xLjYuIFN0YXJ0ICdkZW1hbmQgc2NydWJiaW5nJy5cXG4rXFxuK1doZW4gYSBkZW1hbmQgc2NydWIgaXMgc3RhcnRlZCwgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzXFxuK3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlXFxuK2RlbWFuZCBzY3J1YiBoYXMgY29tcGxldGVkLlxcbitcXG4rIyBlY2hvIDEgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxcbitcXG4rMy4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxcbitcXG4rMy4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcXG4rXFxuKzBcXG4rXFxuKzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcXG4rc2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXFxuK1xcbisjIGVjaG8gMjE2MDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxcbitcXG4rMy4yLjMuIFN0YXJ0ICdiYWNrZ3JvdW5kIHNjcnViYmluZycuXFxuK1xcbisjIGVjaG8gMSBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXFxuaW5kZXggZjE2NWQxNGNmNjFhM2EuLjUzOWZmMTQzY2NjNTIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWdcXG5AQCAtMjk0LDYgKzI5NCwxNyBAQCBjb25maWcgQUNQSV9DUFBDX0xJQlxcbiBcXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxcbiBcXHQgIGxlYXZlIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxcbiBcXG4rY29uZmlnIEFDUElfUkFTMlxcbitcXHRib29sIFxcXCJBQ1BJIFJBUzIgZHJpdmVyXFxcIlxcbitcXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbitcXHRkZXBlbmRzIG9uIE1BSUxCT1hcXG4rXFx0ZGVwZW5kcyBvbiBQQ0NcXG4rXFx0aGVscFxcbitcXHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXFxuK1xcdCAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgc2VsZWN0IE4uXFxuK1xcbiBjb25maWcgQUNQSV9QUk9DRVNTT1JcXG4gXFx0dHJpc3RhdGUgXFxcIlByb2Nlc3NvclxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxcbmluZGV4IGQxYjBhZmZiODQ0ZjA1Li5hYmZlYzY3NDU3MjRlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcXG5AQCAtMTA1LDYgKzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpXFx0Kz0gZWNfc3lzLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfQkdSVClcXHRcXHQrPSBiZ3J0Lm9cXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXFx0Kz0gY3BwY19hY3BpLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSlcXHQrPSBzcGNyLm9cXG4rb2JqLSQoQ09ORklHX0FDUElfUkFTMilcXHRcXHQrPSByYXMyLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgKz0gYWNwaV9kYmcub1xcbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcXHQrPSBwcHR0Lm9cXG4gb2JqLSQoQ09ORklHX0FDUElfUEZSVVQpXFx0Kz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmNcXG5pbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jXFxuKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jXFxuQEAgLTMxLDYgKzMxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FjcGkvYXBlaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3VzcGVuZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJtdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gXFxuQEAgLTE2MTAsNiArMTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxcbiBcXHRhY3BpX2RlYnVnZ2VyX2luaXQoKTtcXG4gXFx0YWNwaV9zZXR1cF9zYl9ub3RpZnlfaGFuZGxlcigpO1xcbiBcXHRhY3BpX3Zpb3RfaW5pdCgpO1xcbitcXHRhY3BpX3JhczJfaW5pdCgpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjY2NzAwZTBlN2QzNTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9hY3BpL3JhczIuY1xcbkBAIC0wLDAgKzEsNTAyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogQUNQSSBSQVMyIGZlYXR1cmUgdGFibGUgZHJpdmVyLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cXG4rICpcXG4rICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaFxcbisgKiBwcm92aWRlcyBpbnRlcmZhY2VzIGZvciBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIGUuZy4sIGZvciBIVy1iYXNlZCBtZW1vcnlcXG4rICogc2NydWJiaW5nLCBhbmQgbG9naWNhbCB0byBwaHlzaWNhbCBhZGRyZXNzIHRyYW5zbGF0aW9uIHNlcnZpY2UuIFJBUzIgdXNlc1xcbisgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS5cXG4rICovXFxuK1xcbisjdW5kZWYgcHJfZm10XFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcIkFDUEkgUkFTMjogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL3BjYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cXG4rICogQG1ib3hfY2xpZW50OlxcdHN0cnVjdCBtYm94X2NsaWVudCBvYmplY3RcXG4rICogQHBjY19jaGFuOlxcdFxcdFBvaW50ZXIgdG8gc3RydWN0IHBjY19tYm94X2NoYW5cXG4rICogQGNvbW1fYWRkcjpcXHRcXHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBlbGVtOlxcdFxcdExpc3QgZm9yIHJlZ2lzdGVyZWQgUkFTMiBQQ0MgY2hhbm5lbCBzdWJzcGFjZXNcXG4rICogQHBjY19sb2NrOlxcdFxcdFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xcbisgKlxcdFxcdFxcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXFxuKyAqIEBkZWFkbGluZV91czpcXHRQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgdGltZW91dCBpbiBtaWNyb3NlY3NcXG4rICpcXHRcXHRcXHRmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvblxcbisgKiBAcGNjX21wYXI6XFx0XFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXFxuKyAqIEBwY2NfbXJ0dDpcXHRcXHRNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKSBpbiBtaWNyb3NlY3NcXG4rICpcXHRcXHRcXHRPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZVxcbisgKlxcdFxcdFxcdGlzc3VpbmcgbmV4dCBjb21tYW5kXFxuKyAqIEBsYXN0X2NtZF9jbXBsX3RpbWU6IENvbXBsZXRpb24gdGltZSBvZiBsYXN0IFBDQyBjb21tYW5kXFxuKyAqIEBsYXN0X21wYXJfcmVzZXQ6XFx0VGltZSBvZiBsYXN0IE1QQVIgY291bnQgcmVzZXRcXG4rICogQG1wYXJfY291bnQ6XFx0XFx0TVBBUiBjb3VudFxcbisgKiBAcGNjX2lkOlxcdFxcdElkZW50aWZpZXIgb2YgdGhlIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsXFxuKyAqIEBsYXN0X2NtZDpcXHRcXHRMYXN0IFBDQyBjb21tYW5kXFxuKyAqIEBrcmVmOlxcdFxcdGtyZWYgb2JqZWN0XFxuKyAqL1xcbitzdHJ1Y3QgcmFzMl9zc3BjYyB7XFxuK1xcdHN0cnVjdCBtYm94X2NsaWVudFxcdFxcdG1ib3hfY2xpZW50O1xcbitcXHRzdHJ1Y3QgcGNjX21ib3hfY2hhblxcdFxcdCpwY2NfY2hhbjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXFx0KmNvbW1fYWRkcjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGVsZW07XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdHBjY19sb2NrO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRkZWFkbGluZV91cztcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0cGNjX21wYXI7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdFxcdHBjY19tcnR0O1xcbitcXHRrdGltZV90XFx0XFx0XFx0XFx0bGFzdF9jbWRfY21wbF90aW1lO1xcbitcXHRrdGltZV90XFx0XFx0XFx0XFx0bGFzdF9tcGFyX3Jlc2V0O1xcbitcXHRpbnRcXHRcXHRcXHRcXHRtcGFyX2NvdW50O1xcbitcXHRpbnRcXHRcXHRcXHRcXHRwY2NfaWQ7XFxuK1xcdHUxNlxcdFxcdFxcdFxcdGxhc3RfY21kO1xcbitcXHRzdHJ1Y3Qga3JlZlxcdFxcdFxcdGtyZWY7XFxuK307XFxuK1xcbisvKlxcbisgKiBBcmJpdHJhcnkgcmV0cmllcyBmb3IgUENDIGNvbW1hbmRzIGJlY2F1c2UgdGhlIHJlbW90ZSBwcm9jZXNzb3IgY291bGQgYmVcXG4rICogbXVjaCBzbG93ZXIgdG8gcmVwbHkuIEtlZXAgaXQgaGlnaCBlbm91Z2ggdG8gY292ZXIgZW11bGF0b3JzIHdoZXJlIHRoZVxcbisgKiBwcm9jZXNzb3JzIHJ1biBwYWluZnVsbHkgc2xvdy5cXG4rICovXFxuKyNkZWZpbmUgUENDX05VTV9SRVRSSUVTIDYwMFVMTFxcbisjZGVmaW5lIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWSAxMDAwXFxuKyNkZWZpbmUgUENDX01JTl9QT0xMX1VTRUNTIDNcXG4rXFxuKyNkZWZpbmUgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUyAxMDBcXG4rI2RlZmluZSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkgMHgwMFxcbitcXG4rLyogU3RhdGljIHZhcmlhYmxlcyBmb3IgdGhlIFJBUzIgUENDIHN1YnNwYWNlcyAqL1xcbitzdGF0aWMgREVGSU5FX01VVEVYKHJhczJfcGNjX2xpc3RfbG9jayk7XFxuK3N0YXRpYyBMSVNUX0hFQUQocmFzMl9zc3BjYyk7XFxuK1xcbitzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHR1MzIgY2FwX3N0YXR1cztcXG4rXFx0dTE2IHN0YXR1cztcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxcbitcXHQgKiBwbGF0Zm9ybSBhbmQgc2hvdWxkIGhhdmUgc2V0IHRoZSBjb21tYW5kIGNvbXBsZXRpb24gYml0IHdoZW5cXG4rXFx0ICogUENDIGNhbiBiZSB1c2VkIGJ5IE9TUE0uXFxuK1xcdCAqXFxuK1xcdCAqIFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciBldmVyeSBQQ0NfTUlOX1BPTExfVVNFQ1MgZm9yIG1heGltdW0gb2ZcXG4rXFx0ICogUENDX05VTV9SRVRSSUVTICogUENDIGNoYW5uZWwgbGF0ZW5jeSB1bnRpbCBQQ0MgY29tbWFuZCBjb21wbGV0ZVxcbitcXHQgKiBiaXQgaXMgc2V0LlxcbitcXHQgKi9cXG4rXFx0cmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dChcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzLCBzdGF0dXMsXFxuK1xcdFxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxcbitcXHRcXHRcXHRcXHRcXHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRwcl93YXJuKFxcXCJQQ0MgSUQ6IDB4JXg6IFBDQyBjaGVjayBjaGFubmVsIHRpbWVvdXQgZm9yIGxhc3QgY29tbWFuZDogMHgleCByYz0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZXBjY19pZCwgc3NwY2MtXFx1MDAzZWxhc3RfY21kLCByYyk7XFxuK1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzdGF0dXMgXFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIlBDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZXBjY19pZCwgc3NwY2MtXFx1MDAzZWxhc3RfY21kKTtcXG4rXFx0XFx0c3RhdHVzIFxcdTAwMjY9IH5QQ0NfU1RBVFVTX0VSUk9SO1xcbitcXHRcXHRpb3dyaXRlMTYoc3RhdHVzLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4rXFx0XFx0aW93cml0ZTMyKDB4MCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHQvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqL1xcbitcXHRybWIoKTtcXG4rXFx0Y2FwX3N0YXR1cyA9IGlvcmVhZDMyKFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xcbitcXHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfTk9UX1ZBTElEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxcbitcXHRcXHRyYyA9IC1FUEVSTTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUNQSV9SQVMyX0JVU1k6XFxuK1xcdFxcdHJjID0gLUVCVVNZO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfRkFJTEVEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9BQk9SVEVEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XFxuK1xcdFxcdHJjID0gLUVJTlZBTDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJjID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aW93cml0ZTMyKDB4MCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXFxuKyAqIEByYXMyX2N0eDpcXHRwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlXFxuKyAqIEBjbWQ6XFx0UkFTMiBjb21tYW5kIHRvIHNlbmRcXG4rICpcXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBvdGhlcndpc2VcXG4rICovXFxuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XFxuK1xcdHN0cnVjdCBtYm94X2NoYW4gKnBjY19jaGFubmVsO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcdHM2NCB0aW1lX2RlbHRhO1xcbitcXHR1MTYgdmFsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0c3NwY2MgPSByYXMyX2N0eC1cXHUwMDNlc3NwY2M7XFxuK1xcdGdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXG4rXFx0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHBjY19jaGFubmVsID0gc3NwY2MtXFx1MDAzZXBjY19jaGFuLVxcdTAwM2VtY2hhbjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXFxuK1xcdCAqIGFtb3VudCBvZiB0aW1lIHRoYXQgT1NQTSBtdXN0IHdhaXQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2ZcXG4rXFx0ICogYSBjb21tYW5kIGJlZm9yZSBpc3N1aW5nIHRoZSBuZXh0IGNvbW1hbmQsIGluIG1pY3Jvc2Vjb25kcy5cXG4rXFx0ICovXFxuK1xcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21ydHQpIHtcXG4rXFx0XFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lKTtcXG4rXFx0XFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCBcXHUwMDNlIHRpbWVfZGVsdGEpXFxuK1xcdFxcdFxcdGZzbGVlcChzc3BjYy1cXHUwMDNlcGNjX21ydHQgLSB0aW1lX2RlbHRhKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXFxuK1xcdCAqIG1heGltdW0gbnVtYmVyIG9mIHBlcmlvZGljIHJlcXVlc3RzIHRoYXQgdGhlIHN1YnNwYWNlIGNoYW5uZWwgY2FuXFxuK1xcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXFxuK1xcdCAqIGxpbWl0YXRpb24uXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcXG4rXFx0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXFxuK1xcdCAqIHN5c3RlbSBjYW4gY29sbGVjdGl2ZWx5IGdlbmVyYXRlLiBJZiBpdCBpcyBub3QsIGZvbGxvdyB0aGUgc3BlYyBhbmRcXG4rXFx0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxcbitcXHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cXG4rXFx0ICovXFxuK1xcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21wYXIpIHtcXG4rXFx0XFx0aWYgKCFzc3BjYy1cXHUwMDNlbXBhcl9jb3VudCkge1xcbitcXHRcXHRcXHR0aW1lX2RlbHRhID0ga3RpbWVfbXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVxcdTAwM2VsYXN0X21wYXJfcmVzZXQpO1xcbitcXHRcXHRcXHRpZiAoKHRpbWVfZGVsdGEgXFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXFx1MDAyNlxcdTAwMjYgc3NwY2MtXFx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xcbitcXHRcXHRcXHRcXHRkZXZfZGJnKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJQQ0MgY29tbWFuZCAweCV4IG5vdCBzZW50IGR1ZSB0byBNUEFSIGxpbWl0XFxcIiwgY21kKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZWxhc3RfbXBhcl9yZXNldCA9IGt0aW1lX2dldCgpO1xcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVxcdTAwM2VwY2NfbXBhcjtcXG4rXFx0XFx0fVxcbitcXHRcXHRzc3BjYy1cXHUwMDNlbXBhcl9jb3VudC0tO1xcbitcXHR9XFxuK1xcbitcXHQvKiBXcml0ZSB0byB0aGUgc2hhcmVkIGNvbW0gcmVnaW9uICovXFxuK1xcdGlvd3JpdGUxNihjbWQsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2Vjb21tYW5kKTtcXG4rXFxuK1xcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xcbitcXHRpb3dyaXRlMTYoMCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuK1xcbitcXHQvKiBSaW5nIGRvb3JiZWxsICovXFxuK1xcdHJjID0gbWJveF9zZW5kX21lc3NhZ2UocGNjX2NoYW5uZWwsIFxcdTAwMjZjbWQpO1xcbitcXHQvKlxcbitcXHQgKiBtYm94X3NlbmRfbWVzc2FnZSgpIHJldHVybnMgYSBub24tbmVnYXRpdmUgaW50ZWdlciBmb3Igc3VjY2Vzc2Z1bCBzdWJtaXNzaW9uXFxuK1xcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXFxuK1xcdCAqL1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl93YXJuKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxcXG5cXFwiLCBjbWQsIHJjKTtcXG4rXFx0XFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXFxuK1xcdFxcdHZhbCA9IGlvcmVhZDE2KFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXHRcXHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XFxuK1xcdFxcdGlvd3JpdGUxNih2YWwsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJjID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0c3NwY2MtXFx1MDAzZWxhc3RfY21kID0gY21kO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXFxuK1xcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcXG4rXFx0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuXFxuK1xcdCAqL1xcbitcXHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCkge1xcbitcXHRcXHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcXG4rXFx0XFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dClcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSA9IGt0aW1lX2dldCgpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXBjY19jaGFubmVsLVxcdTAwM2VtYm94LVxcdTAwM2V0eGRvbmVfaXJxKVxcbitcXHRcXHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcXFwiYWNwaV9yYXMyXFxcIik7XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VlbGVtKTtcXG4rXFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVxcdTAwM2VwY2NfY2hhbik7XFxuK1xcdGtmcmVlKHNzcGNjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxcbit7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZiwgIFxcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2c3NwY2MtXFx1MDAzZWtyZWYpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHJldHVybiBzc3BjYztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcbitcXHRpZiAocGNjX2lkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7XFxuK1xcdGlmIChzc3BjYykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc3NwY2NcXHRcXHQ9IHNzcGNjO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyXFx0PSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlZGV2XFx0XFx0PVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc3NwY2MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcXG4rXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4rXFx0XFx0a2ZyZWUoc3NwY2MpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGNjX2NoYW4tXFx1MDAzZXNobWVtKSB7XFxuK1xcdFxcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChwY2NfY2hhbik7XFxuK1xcdFxcdGtmcmVlKHNzcGNjKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfaWRcXHRcXHQ9IHBjY19pZDtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19jaGFuXFx0XFx0PSBwY2NfY2hhbjtcXG4rXFx0c3NwY2MtXFx1MDAzZWNvbW1fYWRkclxcdD0gcGNjX2NoYW4tXFx1MDAzZXNobWVtO1xcbitcXHRpZiAocGNjX2NoYW4tXFx1MDAzZWxhdGVuY3kpXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLVxcdTAwM2VsYXRlbmN5O1xcbitcXHRlbHNlXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcnR0XFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcGFyXFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWF4X2FjY2Vzc19yYXRlO1xcbitcXHRzc3BjYy1cXHUwMDNlbWJveF9jbGllbnQua25vd3NfdHhkb25lXFx0PSB0cnVlO1xcbitcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2c3NwY2MtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0a3JlZl9pbml0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZik7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2FkZChcXHUwMDI2c3NwY2MtXFx1MDAzZWVsZW0sIFxcdTAwMjZyYXMyX3NzcGNjKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNzcGNjXFx0XFx0PSBzc3BjYztcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkclxcdD0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRldlxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7XFxuK3N0YXRpYyB2b2lkIHJhczJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTtcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcXG4rXFxuK1xcdGlkYV9mcmVlKFxcdTAwMjZyYXMyX2lkYSwgYXV4ZGV2LVxcdTAwM2VpZCk7XFxuK1xcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVxcdTAwM2Vzc3BjYyk7XFxuK1xcdGtmcmVlKHJhczJfY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XFxuK1xcdHUzMiBjb21wX25pZDtcXG4rXFx0aW50IGlkLCByYztcXG4rXFxuK1xcdGNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpO1xcbitcXHRpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxcXFxuXFxcIiwgY2hhbm5lbCwgcHhtX2luc3QpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQgPSBjb21wX25pZDtcXG4rXFxuK1xcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUENDIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWQgcmM9JWRcXFxcblxcXCIsIGNoYW5uZWwsXFxuK1xcdFxcdFxcdCBweG1faW5zdCwgcmMpO1xcbitcXHRcXHRnb3RvIGN0eF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHRpZCA9IGlkYV9hbGxvYyhcXHUwMDI2cmFzMl9pZGEsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoaWQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJjID0gaWQ7XFxuK1xcdFxcdGdvdG8gcGNjX2ZyZWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2LmlkXFx0XFx0PSBpZDtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYubmFtZVxcdFxcdD0gbmFtZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcXHQ9IHJhczJfcmVsZWFzZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnBhcmVudFxcdD0gcmFzMl9jdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0Z290byBpZGFfZnJlZTtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJjKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJhczJfY3R4O1xcbitcXG4raWRhX2ZyZWU6XFxuK1xcdGlkYV9mcmVlKFxcdTAwMjZyYXMyX2lkYSwgaWQpO1xcbitwY2NfZnJlZTpcXG4rXFx0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXFx1MDAzZXNzcGNjKTtcXG4rY3R4X2ZyZWU6XFxuK1xcdGtmcmVlKHJhczJfY3R4KTtcXG4rXFxuK1xcdHJldHVybiBFUlJfUFRSKHJjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXFxuK3tcXG4rXFx0aWYgKCFyYXMyX2N0eClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rXFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwYXJzZV9yYXMyX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiKVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xcbitcXHR1MTYgdG90X3RibF9sZW47XFxuK1xcdHUxNiBpO1xcbitcXG4rXFx0aWYgKHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoIFxcdTAwM2Mgc2l6ZW9mKCpyYXMyX3RhYikpIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzIFxcdTAwM2UgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykge1xcbitcXHRcXHRwcl93YXJuKEZXX1dBUk4gXFxcIk5vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHR0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICsgcmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MgKiBzaXplb2YoKnBjY19kZXNjX2xpc3QpO1xcbitcXHRpZiAocmFzMl90YWItXFx1MDAzZWhlYWRlci5sZW5ndGggXFx1MDAzYyB0b3RfdGJsX2xlbikge1xcbitcXHRcXHRwcl93YXJuKEZXX1dBUk4gXFxcIlJBUzIgdGFibGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIFBDQyBkZXNjcz0lZCBzaXplPSV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MsIHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHBjdHhfbGlzdCA9IGtjYWxsb2MocmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcGN0eF9saXN0KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiArIDEpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3M7IGkrKywgcGNjX2Rlc2NfbGlzdCsrKSB7XFxuK1xcdFxcdGlmIChwY2NfZGVzY19saXN0LVxcdTAwM2VmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtXFx1MDAzZWNoYW5uZWxfaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcGNjX2Rlc2NfbGlzdC1cXHUwMDNlaW5zdGFuY2UpO1xcbitcXHRcXHQvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi9cXG4rXFx0XFx0aWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoSVNfRVJSKHJhczJfY3R4KSkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXFxcblxcXCIsIFBUUl9FUlIocmFzMl9jdHgpKTtcXG4rXFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzZSAwOyBpLS0pIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHBjdHhfbGlzdFtpIC0gMV0pXFxuK1xcdFxcdFxcdFxcdFxcdHJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGtmcmVlKHBjdHhfbGlzdCk7XFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKHJhczJfY3R4KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRwY3R4X2xpc3RbaV0gPSByYXMyX2N0eDtcXG4rXFx0fVxcbitcXHRrZnJlZShwY3R4X2xpc3QpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBhY3BpX3JhczJfaW5pdCAtIFJBUzIgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxcbisgKlxcbisgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxcbisgKiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4gRHJpdmVyIGFkZHMgYW5cXG4rICogYXV4aWxpYXJ5IGRldmljZSwgd2hpY2ggYmluZHMgdG8gdGhlIG1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyLCBmb3IgZWFjaCBSQVMyXFxuKyAqIG1lbW9yeSBmZWF0dXJlLlxcbisgKlxcbisgKiBSZXR1cm5zOiBub25lLlxcbisgKi9cXG4rdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcXG4rXFx0YWNwaV9zdGF0dXMgc3RhdHVzO1xcbitcXG4rXFx0c3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKilcXHUwMDI2cmFzMl90YWIpO1xcbitcXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxcXG5cXFwiLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBhcnNlX3JhczJfdGFibGUocmFzMl90YWIpKVxcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiRmFpbGVkIHRvIHBhcnNlIFJBUzIgdGFibGVcXFxcblxcXCIpO1xcbitcXG4rXFx0YWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuaW5kZXggZjlkMDJhZjJmYzNhMjAuLmYzYjlhMmYwNDk1MDBlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuKysrIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcXG5AQCAtMTQsNiArMTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7XFxuIFxcdFNDUlVCX0FERFJFU1MsXFxuIFxcdFNDUlVCX1NJWkUsXFxuIFxcdFNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELFxcbitcXHRTQ1JVQl9FTkFCTEVfREVNQU5ELFxcbiBcXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXFxuIFxcdFNDUlVCX01BWF9DWUNMRV9EVVJBVElPTixcXG4gXFx0U0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OLFxcbkBAIC01NSw2ICs1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3Nob3coc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFxcdFxcdFxcdFxcXFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coYWRkciwgcmVhZF9hZGRyLCB1NjQsIFxcXCIweCVsbHhcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcXFwiMHglbGx4XFxcXG5cXFwiKVxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsIFxcXCIldVxcXFxuXFxcIilcXG4rRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWF4X2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWF4X2N5Y2xlLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG5AQCAtODQsNiArODYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXFx0XFx0XFx0XFxcXFxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoYWRkciwgd3JpdGVfYWRkciwgdTY0LCBrc3RydG91NjQpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NClcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuK0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBzZXRfY3ljbGVfZHVyYXRpb24sIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbiBcXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcXG5AQCAtMTE5LDYgKzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludFxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMDQ0NDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOlxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xcbitcXHRcXHRcXHRpZiAob3BzLVxcdTAwM2VzZXRfZW5hYmxlZF9vZClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGEtXFx1MDAzZW1vZGU7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA0NDQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OOlxcbiBcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfbWluX2N5Y2xlKVxcbiBcXHRcXHRcXHRyZXR1cm4gYS1cXHUwMDNlbW9kZTtcXG5AQCAtMTY0LDYgKzE3NSw3IEBAIHN0YXRpYyBpbnQgc2NydWJfY3JlYXRlX2Rlc2Moc3RydWN0IGRldmljZSAqc2NydWJfZGV2LFxcbiBcXHRcXHRbU0NSVUJfQUREUkVTU10gPSBFREFDX1NDUlVCX0FUVFJfUlcoYWRkciwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfU0laRV0gPSBFREFDX1NDUlVCX0FUVFJfUlcoc2l6ZSwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9iYWNrZ3JvdW5kLCBpbnN0YW5jZSksXFxuK1xcdFxcdFtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksXFxuIFxcdFxcdFtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuQEAgLTQ2LDQgKzQ2LDE3IEBAIGNvbmZpZyBSQVNfRk1QTVxcbiBcXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXFxuIFxcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXFxuIFxcbitjb25maWcgTUVNX0FDUElfUkFTMlxcbitcXHR0cmlzdGF0ZSBcXFwiTWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcXFwiXFxuK1xcdGRlcGVuZHMgb24gQUNQSV9SQVMyXFxuK1xcdGRlcGVuZHMgb24gRURBQ1xcbitcXHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcXG4rXFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcXG4rXFx0ICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG9cXG4rXFx0ICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXNcXG4rXFx0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxcbitcXHQgIHRocm91Z2ggdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLlxcbitcXG4gZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbmluZGV4IDExZjk1ZDU5ZDM5NzJkLi5hMGU2ZTkwM2Q2YjA5YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXFxuQEAgLTIsNiArMiw3IEBAXFxuIG9iai0kKENPTkZJR19SQVMpXFx0Kz0gcmFzLm9cXG4gb2JqLSQoQ09ORklHX0RFQlVHX0ZTKVxcdCs9IGRlYnVnZnMub1xcbiBvYmotJChDT05GSUdfUkFTX0NFQylcXHQrPSBjZWMub1xcbitvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMilcXHQrPSBhY3BpX3JhczIub1xcbiBcXG4gb2JqLSQoQ09ORklHX1JBU19GTVBNKVxcdCs9IGFtZC9mbXBtLm9cXG4gb2JqLXlcXHRcXHRcXHQrPSBhbWQvYXRsL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjY4YjFjMzhkZGY5MDVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcXG5AQCAtMCwwICsxLDYwMyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cXG4rICpcXG4rICovXFxuK1xcbisjdW5kZWYgcHJfZm10XFxuKyNkZWZpbmUgcHJfZm10KGZtdClcXHRcXFwiQUNQSSBSQVMyIE1FTU9SWTogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VkYWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIgQklUKDApXFxuKyNkZWZpbmUgUkFTMl9UWVBFX1BBVFJPTF9TQ1JVQiAweDAwMDBcXG4rXFxuKyNkZWZpbmUgUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMgMHgwMVxcbisjZGVmaW5lIFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSIDB4MDJcXG4rI2RlZmluZSBSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSIDB4MDNcXG4rXFxuKy8qXFxuKyAqIFJBUzIgcGF0cm9sIHNjcnViXFxuKyAqL1xcbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX0lOX01BU0sgR0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBSQVMyX1BTX0VOX0JBQ0tHUk9VTkQgQklUKDApXFxuKyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfT1VUX01BU0sgR0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDIzLCAxNilcXG4rI2RlZmluZSBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORyBCSVQoMClcXG4rXFxuKyNkZWZpbmUgUkFTMl9TQ1JVQl9OQU1FX0xFTiAxMjhcXG4rI2RlZmluZSBSQVMyX0hPVVJfSU5fU0VDUyAzNjAwXFxuK1xcbitzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0ge1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zO1xcbit9O1xcbitcXG4rI2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbilcXG4rXFxuK3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRpb3dyaXRlOCgwLCBcXHUwMDI2Y29tbW9uLVxcdTAwM2VzZXRfY2Fwc1swXSk7XFxuK1xcbitcXHRyZXR1cm4gaW9yZWFkOChcXHUwMDI2Y29tbW9uLVxcdTAwM2VmZWF0dXJlc1swXSkgXFx1MDAyNiBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4rXFx0XFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX291dDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFxcdTAwMjZwc19zbS1cXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcXG4rXFx0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fYmFzZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9zaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihyYXMyX2N0eC1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1Yikge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSAwO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAgKGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmZsYWdzKSBcXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HKSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IHRydWU7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2ViYXNlID0gaW9yZWFkNjQoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSBpb3JlYWQ2NChcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIENvbnRleHQgLSBQQ0MgbG9jayBtdXN0IGJlIGhlbGQgKi9cXG4rc3RhdGljIGludCByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgYm9vbCAqcnVubmluZylcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxcbitcXHRcXHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXJhczJfY3R4LVxcdTAwM2VvZF9zY3J1Yikge1xcbitcXHRcXHQqcnVubmluZyA9IGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbitcXHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XFxuK1xcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX3NpemUsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcXG4rXFxuK1xcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihyYXMyX2N0eC1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQqcnVubmluZyA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmZsYWdzKSBcXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HO1xcbitcXHRpZiAoISgqcnVubmluZykpXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xcbitcXHRcXHRtdXRleF9sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdFxcdGlmICghcmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxcbitcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZygpIGZhaWxzIGhlcmUsIHJlLWVuYWJsaW5nIGJhY2tncm91bmRcXG4rXFx0XFx0ICogc2NydWJiaW5nIGltbWVkaWF0ZWx5IG1heSBub3QgYmUgcG9zc2libGUgb3IgY29ycmVjdC4gSW4gdGhhdCBjYXNlLFxcbitcXHRcXHQgKiB0aGUgYWRtaW4gb3IgZmlybXdhcmUgbWF5IG5lZWQgdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWJiaW5nXFxuK1xcdFxcdCAqIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXG4rXFx0XFx0aWYgKCFydW5uaW5nKSB7XFxuK1xcdFxcdFxcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC1cXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdGRldl9lcnIocmFzMl9jdHgtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBlbmFibGUgYmFja2dyb3VuZCBzY3J1YiByZXQ9JWRcXFxcblxcXCIsIHJldCk7XFxuK1xcbitcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRcXHRtc2xlZXAoMTAwMCk7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rZXhpdDpcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2Vkcml2ZXJfYWN0aXZlKVxcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNldGhyZWFkID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0Km1pbiA9IHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQqbWF4ID0gcmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2VjcylcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdCpzY3J1Yl9jeWNsZV9zZWNzID0gcmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyAqIFJBUzJfSE9VUl9JTl9TRUNTO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcylcXG4re1xcbitcXHR1MzIgc2NydWJfY3ljbGVfaHJzID0gc2NydWJfY3ljbGVfc2VjcyAvIFJBUzJfSE9VUl9JTl9TRUNTO1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YilcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcXHUwMDI2cnVubmluZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocnVubmluZylcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdGlmIChzY3J1Yl9jeWNsZV9ocnMgXFx1MDAzYyByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlIHx8XFxuK1xcdCAgICBzY3J1Yl9jeWNsZV9ocnMgXFx1MDAzZSByYXMyX2N0eC1cXHUwMDNlbWF4X3NjcnViX2N5Y2xlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSBzY3J1Yl9jeWNsZV9ocnM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIEJHIHNjcnViYmluZyBpcyBlbmFibGVkIHRoZSBhY3R1YWwgYWRkcmVzcyByYW5nZSBpcyBub3QgdmFsaWQuXFxuK1xcdCAqIFJldHVybiAtRUJVU1kgbm93IHVubGVzcyBmaW5kIG91dCBhIG1ldGhvZCB0byByZXRyaWV2ZSBhY3R1YWwgZnVsbCBQQSByYW5nZS5cXG4rXFx0ICovXFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdCpiYXNlID0gcmFzMl9jdHgtXFx1MDAzZWJhc2U7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqc2l6ZSA9IHJhczJfY3R4LVxcdTAwM2VzaXplO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlYmFzZSA9IGJhc2U7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFzaXplKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQqZW5hYmxlZCA9IHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcik7XFxuK1xcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcXHUwMDI2cnVubmluZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdGlmIChlbmFibGUpIHtcXG4rXFx0XFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YiB8fCBydW5uaW5nKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0XFx0aW93cml0ZTY0KDAsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0XFx0aW93cml0ZTY0KDAsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcXG4rXFx0XFx0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0XFx0c2NydWJfcGFyYW1zX2luIFxcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xcbitcXHRcXHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC1cXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcXG4rXFx0XFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0XFx0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKCFyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpXFxuK1xcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbitcXHRcXHRpb3dyaXRlMTYoUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX0VOX0JBQ0tHUk9VTkQsIGVuYWJsZSk7XFxuK1xcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gJXMgYmFja2dyb3VuZCBzY3J1YmJpbmdcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViID0gZW5hYmxlO1xcbitcXHRpZiAoZW5hYmxlKSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xcbitcXHRcXHQvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi9cXG4rXFx0XFx0cmV0dXJuIHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcXHUwMDI2cnVubmluZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqZW5hYmxlZCA9IHJ1bm5pbmc7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyKTtcXG4rXFx0dTMyIHNjcnViX3BhcmFtc19pbjtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFlbmFibGUpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdG11dGV4X2xvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBleGl0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpIHtcXG4rXFx0XFx0cmV0ID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0b3AgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzICovXFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpIHtcXG4rXFx0XFx0cmV0ID0gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIHZhbGlkaXR5IGNoZWNrcyBmb3IgdGhlIGFkZHJlc3MgcmFuZ2UgdG8gc2NydWIgbmVlZCB0byBiZSB1cGRhdGVkXFxuK1xcdCAqIHdpdGggKGJhc2UgKyBzaXplKSBcXHUwMDNlIChtZW1fYmFzZSArIG1lbV9zaXplKSBjaGVjayBpbiB0aGUgZnV0dXJlIG9uY2UgYVxcbitcXHQgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJhczJfY3R4LVxcdTAwM2VzaXplIHx8IHJhczJfY3R4LVxcdTAwM2ViYXNlIFxcdTAwM2MgcmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXM6IEludmFsaWQgYWRkcmVzcyByYW5nZSwgYmFzZT0weCVsbHggc2l6ZT0weCVsbHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdF9fZnVuY19fLCByYXMyX2N0eC1cXHUwMDNlYmFzZSwgcmFzMl9jdHgtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRyZXQgPSAtRVJBTkdFO1xcbitcXHRcXHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcXG4rXFx0fVxcbitcXG4rXFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gXFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XFxuK1xcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gXFx1MDAyNj0gflJBUzJfUFNfRU5fQkFDS0dST1VORDtcXG4rXFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2ViYXNlLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XFxuK1xcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlc2l6ZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xcbitcXG4rXFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcXG4rXFx0XFx0XFx0aW93cml0ZTY0KDAsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0XFx0XFx0aW93cml0ZTY0KDAsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2ViYXNlID0gMDtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBlbmFibGU7XFxuK1xcbitcXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcXG4rXFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgXFx1MDAyNlxcdTAwMjYgcmFzMl9jdHgtXFx1MDAzZWRyaXZlcl9hY3RpdmUgXFx1MDAyNlxcdTAwMjYgIXJhczJfY3R4LVxcdTAwM2V0aHJlYWQpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYga3RocmVhZF9ydW4oKSBpcyBjYWxsZWQgYmVmb3JlIHNlbmRpbmcgdGhlIGNvbW1hbmQgZm9yIGRlbWFuZCBzY3J1YmJpbmcsXFxuK1xcdFxcdCAqIHRoZSB0aHJlYWQgbWF5IGRldGVybWluZSB0aGF0IGRlbWFuZCBzY3J1YmJpbmcgaXMgbm90IHJ1bm5pbmcsIGF0dGVtcHQgdG9cXG4rXFx0XFx0ICogcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZywgYW5kIHRoZW4gZXhpdC4gVGhpcyBjYW4gb2NjdXIgYmVjYXVzZSB0aGVcXG4rXFx0XFx0ICogdGhyZWFkIGZ1bmN0aW9uIG1heSBzdGFydCBydW5uaW5nIGJlZm9yZSBkZW1hbmQgc2NydWJiaW5nIHN0YXJ0cy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJyYXMyX3NjcnViX25pZCVkXFxcIiwgcmFzMl9jdHgtXFx1MDAzZXN5c19jb21wX25pZCk7XFxuK1xcdFxcdGlmIChJU19FUlIocmFzMl9jdHgtXFx1MDAzZXRocmVhZCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihyYXMyX2N0eC1cXHUwMDNldGhyZWFkKTtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZXRocmVhZCA9IE5VTEw7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsXFxuK1xcdFxcdFxcdCAqIHJlLWVuYWJsaW5nIGJhY2tncm91bmQgc2NydWIgd2lsbCBmYWlsLiBUaHVzIGFkbWluL2Zpcm13YXJlIG1heSBuZWVkXFxuK1xcdFxcdFxcdCAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0Z290byBlbmFibGVfYmdfc2NydWI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Z290byBleGl0O1xcbitcXG4rZW5hYmxlX2JnX3NjcnViOlxcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xcbitcXHRcXHRfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK2V4aXQ6XFxuK1xcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xcbitcXHQucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsXFxuK1xcdC5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSxcXG4rXFx0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXFxuK1xcdC53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLFxcbitcXHQuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLFxcbitcXHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxcbitcXHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxcbitcXHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxcbitcXHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXFxuK1xcdC5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSxcXG4rXFx0LmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCxcXG4rXFx0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcXG4rXFxuK1xcdGlmICghcmFzMl9jdHgpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG11dGV4X2xvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRyaXZlcl9hY3RpdmUgPSBmYWxzZTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2V0aHJlYWQpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdFxcdGt0aHJlYWRfc3RvcChyYXMyX2N0eC1cXHUwMDNldGhyZWFkKTtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXRocmVhZCA9IE5VTEw7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XFxuK1xcdHN0cnVjdCBlZGFjX2Rldl9mZWF0dXJlIHJhc19mZWF0dXJlcztcXG4rXFx0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbnVtX3NwYW5uZWRfcGFnZXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlXFxuK1xcdCAqICdSZXF1ZXN0ZWQgQWRkcmVzcyBSYW5nZScsIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmQgR0VUX1BBVFJPTF9QQVJBTUVURVJTXFxuK1xcdCAqIHRvIGdldCBwYXJhbWV0ZXJzIHRoYXQgYXBwbHkgdG8gYWxsIGFkZHJlc3NlcyBpbiB0aGUgTlVNQSBkb21haW5cXG4rXFx0ICogYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVIgdG8gc3RhcnQgdGhlIGRlbWFuZFxcbitcXHQgKiBzY3J1YmJpbmcuIFRoZSB2YWxpZGl0eSBjaGVjayBmb3Igc3lzX2NvbXBfbmlkIGFnYWluc3QgTlVNQV9OT19OT0RFIGlzXFxuK1xcdCAqIGFscmVhZHkgcGVyZm9ybWVkIGluIGFkZF9hdXhfZGV2aWNlKCkgaW4gL2FjcGkvcmFzMi5jXFxuK1xcdCAqL1xcbitcXHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4rXFx0bnVtX3NwYW5uZWRfcGFnZXMgPSBub2RlX3NwYW5uZWRfcGFnZXMocmFzMl9jdHgtXFx1MDAzZXN5c19jb21wX25pZCk7XFxuK1xcdGlmICghbnVtX3NwYW5uZWRfcGFnZXMpIHtcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcXFxcblxcXCIsIHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VtZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzIFxcdTAwM2UgcmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSlcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVxcdTAwM2VzY3J1Yl9jeWNsZV9ocnM7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGU7XFxuK1xcbitcXHRzcHJpbnRmKHNjcnViX25hbWUsIFxcXCJhY3BpX3Jhc19tZW0lZFxcXCIsIGF1eGRldi1cXHUwMDNlaWQpO1xcbitcXG4rXFx0cmFzX2ZlYXR1cmVzLmZ0X3R5cGVcXHQ9IFJBU19GRUFUX1NDUlVCO1xcbitcXHRyYXNfZmVhdHVyZXMuaW5zdGFuY2VcXHQ9IDA7XFxuK1xcdHJhc19mZWF0dXJlcy5zY3J1Yl9vcHNcXHQ9IFxcdTAwMjZyYXMyX3NjcnViX29wcztcXG4rXFx0cmFzX2ZlYXR1cmVzLmN0eFxcdD0gcmFzMl9jdHg7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlZHJpdmVyX2FjdGl2ZSA9IHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZWRhY19kZXZfcmVnaXN0ZXIoXFx1MDAyNmF1eGRldi1cXHUwMDNlZGV2LCBzY3J1Yl9uYW1lLCBOVUxMLCAxLCBcXHUwMDI2cmFzX2ZlYXR1cmVzKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkIHJhczJfbWVtX2Rldl9pZF90YWJsZVtdID0ge1xcbitcXHR7IC5uYW1lID0gUkFTMl9BVVhfREVWX05BTUUgXFxcIi5cXFwiIFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LFxcbitcXHR7IH1cXG4rfTtcXG4rXFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcXG4rXFx0Lm5hbWUgPSBSQVMyX01FTV9ERVZfSURfTkFNRSxcXG4rXFx0LnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLFxcbitcXHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcXG4rXFx0LmlkX3RhYmxlID0gcmFzMl9tZW1fZGV2X2lkX3RhYmxlLFxcbit9O1xcbittb2R1bGVfYXV4aWxpYXJ5X2RyaXZlcihyYXMyX21lbV9kcml2ZXIpO1xcbitcXG4rTU9EVUxFX0lNUE9SVF9OUyhcXFwiQUNQSV9SQVMyXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFjNzViMDMwN2ZhOWNjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcXG5AQCAtMCwwICsxLDg2IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rLypcXG4rICogQUNQSSBSQVMyIChSQVMgRmVhdHVyZSBUYWJsZSkgbWV0aG9kcy5cXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWRcXG4rICovXFxuK1xcbisjaWZuZGVmIF9BQ1BJX1JBUzJfSFxcbisjZGVmaW5lIF9BQ1BJX1JBUzJfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F1eGlsaWFyeV9idXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21haWxib3hfY2xpZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBkZXZpY2U7XFxuK1xcbisvKlxcbisgKiBBQ1BJIHNwZWMgNi41IFRhYmxlIDUuODI6IFBDQyBjb21tYW5kIGNvZGVzIHVzZWQgYnlcXG4rICogUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXFxuKyAqL1xcbisjZGVmaW5lIFBDQ19DTURfRVhFQ19SQVMyIDB4MDFcXG4rXFxuKyNkZWZpbmUgUkFTMl9BVVhfREVWX05BTUUgXFxcInJhczJcXFwiXFxuKyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXFxcImFjcGlfcmFzMl9tZW1cXFwiXFxuK1xcbisvKipcXG4rICogc3RydWN0IHJhczJfbWVtX2N0eCAtIENvbnRleHQgZm9yIFJBUzIgbWVtb3J5IGZlYXR1cmVzXFxuKyAqIEBhZGV2OlxcdFxcdEF1eGlsaWFyeSBkZXZpY2Ugb2JqZWN0XFxuKyAqIEBjb21tX2FkZHI6XFx0XFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxcbisgKiBAZGV2OlxcdFxcdFBvaW50ZXIgdG8gZGV2aWNlIGJhY2tpbmcgc3RydWN0IG1ib3hfY29udHJvbGxlciBmb3IgUENDXFxuKyAqIEBzc3BjYzpcXHRcXHRQb2ludGVyIHRvIGxvY2FsIGRhdGEgc3RydWN0dXJlIGZvciBQQ0MgY29tbXVuaWNhdGlvblxcbisgKiBAcGNjX2xvY2s6XFx0XFx0UG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcXG4rICpcXHRcXHRcXHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxcbisgKiBAc3lzX2NvbXBfbmlkOlxcdE5vZGUgSUQgb2YgdGhlIHN5c3RlbSBjb21wb25lbnQgdGhhdCB0aGUgUkFTIGZlYXR1cmVcXG4rICpcXHRcXHRcXHRpcyBhc3NvY2lhdGVkIHdpdGguIFNlZSBBQ1BJIHNwZWMgNi41IFRhYmxlIDUuODA6IFJBUzJcXG4rICpcXHRcXHRcXHRQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsXFxuKyAqXFx0XFx0XFx0RmllbGQ6IEluc3RhbmNlXFxuKyAqIEBtZW1fYmFzZTpcXHRcXHRCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2VcXG4rICpcXHRcXHRcXHRvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW5cXG4rICogQG1lbV9zaXplXFx0XFx0U2l6ZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXFxuKyAqXFx0XFx0XFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXFxuKyAqIEBiYXNlOlxcdFxcdEJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxcbisgKiBAc2l6ZTpcXHRcXHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXFxuKyAqIEBzY3J1Yl9jeWNsZV9ocnM6XFx0Q3VycmVudCBzY3J1YiByYXRlIGluIGhvdXJzXFxuKyAqIEBzZXRfc2NydWJfY3ljbGU6XFx0U2NydWIgcmF0ZSB0byBzZXQgaW4gaG91cnNcXG4rICogQG1pbl9zY3J1Yl9jeWNsZTpcXHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXFxuKyAqIEBtYXhfc2NydWJfY3ljbGU6XFx0TWF4aW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZFxcbisgKiBAb2Rfc2NydWI6XFx0XFx0U3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcgKG1lbW9yeSByZWdpb24pXFxuKyAqIEBiZ19zY3J1YjpcXHRcXHRTdGF0dXMgb2YgYmFja2dyb3VuZCBwYXRyb2wgc2NydWJiaW5nXFxuKyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcXHRGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZFxcbisgKlxcdFxcdFxcdHNjcnViYmluZyBpcyBmaW5pc2hlZFxcbisgKiBAdGhyZWFkOlxcdFxcdERlbWFuZCBzY3J1YiBtb25pdG9yIGt0aHJlYWRcXG4rICogQGRyaXZlcl9hY3RpdmU6XFx0RmxhZyBpbmRpY2F0ZXMgUkFTMiBtZW1vcnkgZHJpdmVyIGlzIGFjdGl2ZS9yZW1vdmVkXFxuKyAqL1xcbitzdHJ1Y3QgcmFzMl9tZW1fY3R4IHtcXG4rXFx0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2VcXHRcXHRhZGV2O1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cXHQqY29tbV9hZGRyO1xcbitcXHRzdHJ1Y3QgZGV2aWNlXFx0XFx0XFx0KmRldjtcXG4rXFx0dm9pZFxcdFxcdFxcdFxcdCpzc3BjYztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0KnBjY19sb2NrO1xcbitcXHR1MzJcXHRcXHRcXHRcXHRzeXNfY29tcF9uaWQ7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdG1lbV9iYXNlO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRtZW1fc2l6ZTtcXG4rXFx0dTY0XFx0XFx0XFx0XFx0YmFzZTtcXG4rXFx0dTY0XFx0XFx0XFx0XFx0c2l6ZTtcXG4rXFx0dThcXHRcXHRcXHRcXHRzY3J1Yl9jeWNsZV9ocnM7XFxuK1xcdHU4XFx0XFx0XFx0XFx0c2V0X3NjcnViX2N5Y2xlO1xcbitcXHR1OFxcdFxcdFxcdFxcdG1pbl9zY3J1Yl9jeWNsZTtcXG4rXFx0dThcXHRcXHRcXHRcXHRtYXhfc2NydWJfY3ljbGU7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRvZF9zY3J1YjtcXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdGJnX3NjcnViO1xcbitcXHRib29sXFx0XFx0XFx0XFx0cmVlbmFibGVfYmdfc2NydWI7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdFxcdFxcdCp0aHJlYWQ7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRkcml2ZXJfYWN0aXZlO1xcbit9O1xcbitcXG4rI2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcXG4rdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XFxuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cXG4rI2VuZGlmXFxuK1xcbisjZW5kaWYgLyogX0FDUElfUkFTMl9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRhYy5oIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcXG5pbmRleCBlNmI0ZTUxMTMwZTVmZi4uYmU0ZjZlNTJlYTM4YTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxcbkBAIC02ODQsNiArNjg0LDggQEAgZW51bSBlZGFjX2Rldl9mZWF0IHtcXG4gICogQHdyaXRlX3NpemU6IHNldCBvZmZzZXQgb2YgdGhlIHNjcnViYmluZyByYW5nZS5cXG4gICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLlxcbiAgKiBAc2V0X2VuYWJsZWRfYmc6IHN0YXJ0IG9yIHN0b3AgYSBiZy1zY3J1Yi5cXG4rICogQGdldF9lbmFibGVkX29kOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBkZW1hbmQgc2NydWIuXFxuKyAqIEBzZXRfZW5hYmxlZF9vZDogc3RhcnQgb3Igc3RvcCBhIGRlbWFuZC1zY3J1Yi5cXG4gICogQGdldF9taW5fY3ljbGU6IGdldCBtaW5pbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXFxuICAqIEBnZXRfY3ljbGVfZHVyYXRpb246IGdldCBjdXJyZW50IHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXFxuQEAgLTY5Niw2ICs2OTgsOCBAQCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xcbiBcXHRpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7XFxuIFxcdGludCAoKmdldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xcbiBcXHRpbnQgKCpzZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xcbitcXHRpbnQgKCpnZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcXG4rXFx0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4gXFx0aW50ICgqZ2V0X21pbl9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWluKTtcXG4gXFx0aW50ICgqZ2V0X21heF9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWF4KTtcXG4gXFx0aW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDc6MTAuODM1MDcxOTQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTI5NDQxMDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBQ1BJX1JBUzJcIixcbiAgICBcIk1FTV9BQ1BJX1JBUzJcIixcbiAgICBcIkVEQUNfU0NSVUJcIixcbiAgICBcIlBDQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhcnNlX3JhczJfdGFibGVcIixcbiAgICBcInJhczJfc2VuZF9wY2NfY21kXCIsXG4gICAgXCJyYXMyX21lbV9kcnZfcHJvYmVcIixcbiAgICBcInJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVcIixcbiAgICBcInJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nXCIsXG4gICAgXCJyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3dyaXRlX2FkZHJcIixcbiAgICBcInJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZVwiLFxuICAgIFwiX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBQ1BJIFJBUzIgZHJpdmVyIHRoYXQgcGFyc2VzIHRoZSBSQVMyIEFDUEkgdGFibGUgYW5kIHJlZ2lzdGVycyBhdXhpbGlhcnkgZGV2aWNlcyBmb3IgbWVtb3J5IHNjcnViYmluZy4gSXQgYWxzbyBhZGRzIGEgZHJpdmVyIHRoYXQgYmluZHMgdG8gdGhlc2UgYXV4aWxpYXJ5IGRldmljZXMgYW5kIGV4cG9zZXMgRURBQyBzY3J1YiBzeXNmcyBpbnRlcmZhY2VzIHRvIGNvbnRyb2wgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZyB2aWEgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpLiBTaW5jZSBzeXprYWxsZXIgY2FuIGluamVjdCBBQ1BJIHRhYmxlcyAoaW5jbHVkaW5nIFJBUzIgYW5kIFBDQ1QpIGFuZCBpbnRlcmFjdCB3aXRoIHN5c2ZzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYmVjYjRmMmI3MjM0M2JiNzU0ZjE0YzYxOWRiMzVjN2E0ZjM4MzA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTg6NDc6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbmluZGV4IGFiNjAxNDc0M2RhNTY4Li4yYjg3NGUwMzM2MjMzNCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG5AQCAtMjAsMTEgKzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcdDYuMTVcbiBDb250YWN0Olx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcbiBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4tXHRcdGZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy5cbi1cdFx0VGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuXG4tXG4tXHRcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcbi1cdFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXG4rXHRcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxuIFxuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1Ylgvc2l6ZVxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbkBAIC0zNCw2ICszMCwxNCBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZFxuIFx0XHQob24tZGVtYW5kIHNjcnViYmluZykuXG4gXG4rV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXG4rRGF0ZTpcdFx0SmFuIDIwMjZcbitLZXJuZWxWZXJzaW9uOlx0Ni4xOVxuK0NvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuK0Rlc2NyaXB0aW9uOlxuK1x0XHQoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzXG4rXHRcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXG4rXG4gV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfYmFja2dyb3VuZFxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbiBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5pbmRleCAyY2ZhNzRmYTFmZmQyZi4uNTYyYmZkNmZmNjMwNTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5AQCAtMzQwLDMgKzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLlxuIFxuIFN5c2ZzIGZpbGVzIGZvciBzY3J1YmJpbmcgYXJlIGRvY3VtZW50ZWQgaW5cbiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2BcbitcbiszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZ1xuK1xuKzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxuK1xuKzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmdcbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuK1xuKzBcbitcbiszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuXG4rXG4rQXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZVxuK3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbitcbiszNjAwMFxuK1xuKzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLlxuK1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb25cbitcbiszNjAwXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxuK1xuKzg2NDAwXG4rXG4rMy4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnlcbis0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS5cbitcbisjIGVjaG8gNDMyMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4rXG4rMy4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxuK1xuK1NldCAnYWRkcicgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4rXG4rIyBlY2hvIDB4ODAwMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXG4rXG4rU2V0ICdzaXplJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cbitcbisjIGVjaG8gMHgyMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXG4rXG4rMy4xLjYuIFN0YXJ0ICdkZW1hbmQgc2NydWJiaW5nJy5cbitcbitXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuK3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlXG4rZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuXG4rXG4rIyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXG4rXG4rMy4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxuK1xuKzMuMi4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGJhY2tncm91bmQgc2NydWJiaW5nLlxuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuK1xuKzBcbitcbiszLjIuMi4gUHJvZ3JhbSBiYWNrZ3JvdW5kIHNjcnViYmluZyBmb3IgUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGluIGV2ZXJ5IDIxNjAwXG4rc2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXG4rXG4rIyBlY2hvIDIxNjAwIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuK1xuKzMuMi4zLiBTdGFydCAnYmFja2dyb3VuZCBzY3J1YmJpbmcnLlxuK1xuKyMgZWNobyAxIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXG5pbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbkBAIC0yOTQsNiArMjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXG4gXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiBcbitjb25maWcgQUNQSV9SQVMyXG4rXHRib29sIFwiQUNQSSBSQVMyIGRyaXZlclwiXG4rXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuK1x0ZGVwZW5kcyBvbiBNQUlMQk9YXG4rXHRkZXBlbmRzIG9uIFBDQ1xuK1x0aGVscFxuK1x0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxuK1x0ICBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIHN1Y2ggYXMgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy5cbitcbitcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cbitcbiBjb25maWcgQUNQSV9QUk9DRVNTT1JcbiBcdHRyaXN0YXRlIFwiUHJvY2Vzc29yXCJcbiBcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbkBAIC0xMDUsNiArMTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUylcdCs9IGVjX3N5cy5vXG4gb2JqLSQoQ09ORklHX0FDUElfQkdSVClcdFx0Kz0gYmdydC5vXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXHQrPSBjcHBjX2FjcGkub1xuIG9iai0kKENPTkZJR19BQ1BJX1NQQ1JfVEFCTEUpXHQrPSBzcGNyLm9cbitvYmotJChDT05GSUdfQUNQSV9SQVMyKVx0XHQrPSByYXMyLm9cbiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSArPSBhY3BpX2RiZy5vXG4gb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgXHQrPSBwcHR0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcdCs9IHBmcl91cGRhdGUubyBwZnJfdGVsZW1ldHJ5Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmNcbmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9idXMuY1xuKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jXG5AQCAtMzEsNiArMzEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FjcGkvYXBlaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJtdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuQEAgLTE2MTAsNiArMTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuIFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XG4gXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XG4gXHRhY3BpX3Zpb3RfaW5pdCgpO1xuK1x0YWNwaV9yYXMyX2luaXQoKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iNjY3MDBlMGU3ZDM1MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9hY3BpL3JhczIuY1xuQEAgLTAsMCArMSw1MDIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cbisgKlxuKyAqIFN1cHBvcnQgZm9yIFJBUzIgdGFibGUgLSBBQ1BJIDYuNSBTcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDUuMi4yMSwgd2hpY2hcbisgKiBwcm92aWRlcyBpbnRlcmZhY2VzIGZvciBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIGUuZy4sIGZvciBIVy1iYXNlZCBtZW1vcnlcbisgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXG4rICogUENDIGNoYW5uZWwgc3Vic3BhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uXG4rICovXG4rXG4rI3VuZGVmIHByX2ZtdFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXCJBQ1BJIFJBUzI6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvcGNjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCByYXMyX3NzcGNjIC0gRGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4rICogQG1ib3hfY2xpZW50Olx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxuKyAqIEBwY2NfY2hhbjpcdFx0UG9pbnRlciB0byBzdHJ1Y3QgcGNjX21ib3hfY2hhblxuKyAqIEBjb21tX2FkZHI6XHRcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cbisgKiBAZWxlbTpcdFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xuKyAqIEBwY2NfbG9jazpcdFx0UENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXG4rICpcdFx0XHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuKyAqIEBkZWFkbGluZV91czpcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xuKyAqXHRcdFx0Zm9yIFBDQyBjb21tYW5kIGNvbXBsZXRpb25cbisgKiBAcGNjX21wYXI6XHRcdE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpIGZvciBQQ0MgY2hhbm5lbFxuKyAqIEBwY2NfbXJ0dDpcdFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXG4rICpcdFx0XHRPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZVxuKyAqXHRcdFx0aXNzdWluZyBuZXh0IGNvbW1hbmRcbisgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxuKyAqIEBsYXN0X21wYXJfcmVzZXQ6XHRUaW1lIG9mIGxhc3QgTVBBUiBjb3VudCByZXNldFxuKyAqIEBtcGFyX2NvdW50Olx0XHRNUEFSIGNvdW50XG4rICogQHBjY19pZDpcdFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcbisgKiBAbGFzdF9jbWQ6XHRcdExhc3QgUENDIGNvbW1hbmRcbisgKiBAa3JlZjpcdFx0a3JlZiBvYmplY3RcbisgKi9cbitzdHJ1Y3QgcmFzMl9zc3BjYyB7XG4rXHRzdHJ1Y3QgbWJveF9jbGllbnRcdFx0bWJveF9jbGllbnQ7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhblx0XHQqcGNjX2NoYW47XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cdCpjb21tX2FkZHI7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGVsZW07XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwY2NfbG9jaztcbitcdHU2NFx0XHRcdFx0ZGVhZGxpbmVfdXM7XG4rXHR1bnNpZ25lZCBpbnRcdFx0XHRwY2NfbXBhcjtcbitcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcnR0O1xuK1x0a3RpbWVfdFx0XHRcdFx0bGFzdF9jbWRfY21wbF90aW1lO1xuK1x0a3RpbWVfdFx0XHRcdFx0bGFzdF9tcGFyX3Jlc2V0O1xuK1x0aW50XHRcdFx0XHRtcGFyX2NvdW50O1xuK1x0aW50XHRcdFx0XHRwY2NfaWQ7XG4rXHR1MTZcdFx0XHRcdGxhc3RfY21kO1xuK1x0c3RydWN0IGtyZWZcdFx0XHRrcmVmO1xuK307XG4rXG4rLypcbisgKiBBcmJpdHJhcnkgcmV0cmllcyBmb3IgUENDIGNvbW1hbmRzIGJlY2F1c2UgdGhlIHJlbW90ZSBwcm9jZXNzb3IgY291bGQgYmVcbisgKiBtdWNoIHNsb3dlciB0byByZXBseS4gS2VlcCBpdCBoaWdoIGVub3VnaCB0byBjb3ZlciBlbXVsYXRvcnMgd2hlcmUgdGhlXG4rICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXG4rICovXG4rI2RlZmluZSBQQ0NfTlVNX1JFVFJJRVMgNjAwVUxMXG4rI2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxuKyNkZWZpbmUgUENDX01JTl9QT0xMX1VTRUNTIDNcbitcbisjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXG4rI2RlZmluZSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkgMHgwMFxuK1xuKy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cbitzdGF0aWMgREVGSU5FX01VVEVYKHJhczJfcGNjX2xpc3RfbG9jayk7XG4rc3RhdGljIExJU1RfSEVBRChyYXMyX3NzcGNjKTtcbitcbitzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4rXHR1MzIgY2FwX3N0YXR1cztcbitcdHUxNiBzdGF0dXM7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKlxuK1x0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxuK1x0ICogcGxhdGZvcm0gYW5kIHNob3VsZCBoYXZlIHNldCB0aGUgY29tbWFuZCBjb21wbGV0aW9uIGJpdCB3aGVuXG4rXHQgKiBQQ0MgY2FuIGJlIHVzZWQgYnkgT1NQTS5cbitcdCAqXG4rXHQgKiBQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgZXZlcnkgUENDX01JTl9QT0xMX1VTRUNTIGZvciBtYXhpbXVtIG9mXG4rXHQgKiBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0MgY2hhbm5lbCBsYXRlbmN5IHVudGlsIFBDQyBjb21tYW5kIGNvbXBsZXRlXG4rXHQgKiBiaXQgaXMgc2V0LlxuK1x0ICovXG4rXHRyYyA9IHJlYWR3X3JlbGF4ZWRfcG9sbF90aW1lb3V0KFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzLCBzdGF0dXMsXG4rXHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG4rXHRcdFx0XHRcdFBDQ19NSU5fUE9MTF9VU0VDUywgc3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHByX3dhcm4oXCJQQ0MgSUQ6IDB4JXg6IFBDQyBjaGVjayBjaGFubmVsIHRpbWVvdXQgZm9yIGxhc3QgY29tbWFuZDogMHgleCByYz0lZFxcblwiLFxuK1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbitcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuK1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19FUlJPUikge1xuK1x0XHRwcl93YXJuKFwiUENDIElEOiAweCV4OiBFcnJvciBpbiBleGVjdXRpbmcgbGFzdCBjb21tYW5kOiAweCV4XFxuXCIsXG4rXHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCk7XG4rXHRcdHN0YXR1cyBcdTAwMjY9IH5QQ0NfU1RBVFVTX0VSUk9SO1xuK1x0XHRpb3dyaXRlMTYoc3RhdHVzLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4rXHRcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4rXHQvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqL1xuK1x0cm1iKCk7XG4rXHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuK1x0c3dpdGNoIChjYXBfc3RhdHVzKSB7XG4rXHRjYXNlIEFDUElfUkFTMl9OT1RfVkFMSUQ6XG4rXHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxuK1x0XHRyYyA9IC1FUEVSTTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFDUElfUkFTMl9CVVNZOlxuK1x0XHRyYyA9IC1FQlVTWTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XG4rXHRjYXNlIEFDUElfUkFTMl9BQk9SVEVEOlxuK1x0Y2FzZSBBQ1BJX1JBUzJfSU5WQUxJRF9EQVRBOlxuK1x0XHRyYyA9IC1FSU5WQUw7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmMgPSAwO1xuK1x0fVxuK1xuK1x0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXG4rICogQHJhczJfY3R4Olx0cG9pbnRlciB0byB0aGUgUkFTMiBjb250ZXh0IHN0cnVjdHVyZVxuKyAqIEBjbWQ6XHRSQVMyIGNvbW1hbmQgdG8gc2VuZFxuKyAqXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBvdGhlcndpc2VcbisgKi9cbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlO1xuK1x0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XG4rXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4rXHRzNjQgdGltZV9kZWx0YTtcbitcdHUxNiB2YWw7XG4rXHRpbnQgcmM7XG4rXG4rXHRpZiAoIXJhczJfY3R4KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0c3NwY2MgPSByYXMyX2N0eC1cdTAwM2Vzc3BjYztcbitcdGdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4rXG4rXHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cGNjX2NoYW5uZWwgPSBzc3BjYy1cdTAwM2VwY2NfY2hhbi1cdTAwM2VtY2hhbjtcbitcbitcdC8qXG4rXHQgKiBIYW5kbGUgdGhlIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpOiB0aGUgbWluaW11bVxuK1x0ICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZlxuK1x0ICogYSBjb21tYW5kIGJlZm9yZSBpc3N1aW5nIHRoZSBuZXh0IGNvbW1hbmQsIGluIG1pY3Jvc2Vjb25kcy5cbitcdCAqL1xuK1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4rXHRcdHRpbWVfZGVsdGEgPSBrdGltZV91c19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lKTtcbitcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0IFx1MDAzZSB0aW1lX2RlbHRhKVxuK1x0XHRcdGZzbGVlcChzc3BjYy1cdTAwM2VwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEhhbmRsZSB0aGUgbm9uLXplcm8gTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUik6IHRoZVxuK1x0ICogbWF4aW11bSBudW1iZXIgb2YgcGVyaW9kaWMgcmVxdWVzdHMgdGhhdCB0aGUgc3Vic3BhY2UgY2hhbm5lbCBjYW5cbitcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXG4rXHQgKiBsaW1pdGF0aW9uLlxuK1x0ICpcbitcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcbitcdCAqIGNhbiBoYW5kbGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBhbGwgdGhlIGNvcmVzIGluIHRoZVxuK1x0ICogc3lzdGVtIGNhbiBjb2xsZWN0aXZlbHkgZ2VuZXJhdGUuIElmIGl0IGlzIG5vdCwgZm9sbG93IHRoZSBzcGVjIGFuZFxuK1x0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxuK1x0ICogbGltaXQgaW4gYW55IDYwcyB3aW5kb3cuXG4rXHQgKi9cbitcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXBhcikge1xuK1x0XHRpZiAoIXNzcGNjLVx1MDAzZW1wYXJfY291bnQpIHtcbitcdFx0XHR0aW1lX2RlbHRhID0ga3RpbWVfbXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCk7XG4rXHRcdFx0aWYgKCh0aW1lX2RlbHRhIFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXHUwMDI2XHUwMDI2IHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xuK1x0XHRcdFx0ZGV2X2RiZyhyYXMyX2N0eC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFwiUENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdFwiLCBjbWQpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU87XG4rXHRcdFx0fVxuK1x0XHRcdHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCA9IGt0aW1lX2dldCgpO1xuK1x0XHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQgPSBzc3BjYy1cdTAwM2VwY2NfbXBhcjtcbitcdFx0fVxuK1x0XHRzc3BjYy1cdTAwM2VtcGFyX2NvdW50LS07XG4rXHR9XG4rXG4rXHQvKiBXcml0ZSB0byB0aGUgc2hhcmVkIGNvbW0gcmVnaW9uICovXG4rXHRpb3dyaXRlMTYoY21kLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZWNvbW1hbmQpO1xuK1xuK1x0LyogRmxpcCBDTUQgQ09NUExFVEUgYml0ICovXG4rXHRpb3dyaXRlMTYoMCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuK1xuK1x0LyogUmluZyBkb29yYmVsbCAqL1xuK1x0cmMgPSBtYm94X3NlbmRfbWVzc2FnZShwY2NfY2hhbm5lbCwgXHUwMDI2Y21kKTtcbitcdC8qXG4rXHQgKiBtYm94X3NlbmRfbWVzc2FnZSgpIHJldHVybnMgYSBub24tbmVnYXRpdmUgaW50ZWdlciBmb3Igc3VjY2Vzc2Z1bCBzdWJtaXNzaW9uXG4rXHQgKiBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLlxuK1x0ICovXG4rXHRpZiAocmMgXHUwMDNjIDApIHtcbitcdFx0ZGV2X3dhcm4ocmFzMl9jdHgtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIkVycm9yIHNlbmRpbmcgUENDIG1ib3ggbWVzc2FnZSBjb21tYW5kOiAweCV4LCByYzolZFxcblwiLCBjbWQsIHJjKTtcbitcdFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXG4rXHRcdHZhbCA9IGlvcmVhZDE2KFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0dmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xuK1x0XHRpb3dyaXRlMTYodmFsLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4rXHRcdHJldHVybiByYztcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gMDtcbitcdH1cbitcbitcdHNzcGNjLVx1MDAzZWxhc3RfY21kID0gY21kO1xuK1xuK1x0LypcbitcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxuK1x0ICogY29tcGxldGlvbiB0aW1lIG9mIGJvdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgZm9yIHByb3BlciBoYW5kbGluZ1xuK1x0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuXG4rXHQgKi9cbitcdGlmIChjbWQgPT0gUENDX0NNRF9FWEVDX1JBUzIgfHwgc3NwY2MtXHUwMDNlcGNjX21ydHQpIHtcbitcdFx0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4rXHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dClcbitcdFx0XHRzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUgPSBrdGltZV9nZXQoKTtcbitcdH1cbitcbitcdGlmICghcGNjX2NoYW5uZWwtXHUwMDNlbWJveC1cdTAwM2V0eGRvbmVfaXJxKVxuK1x0XHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcbitcbitcdHJldHVybiByYztcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCJhY3BpX3JhczJcIik7XG4rXG4rc3RhdGljIHZvaWQgcmFzMl9saXN0X3BjY19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuK3tcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9XG4rXHRcdGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmFzMl9zc3BjYywga3JlZik7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcdGxpc3RfZGVsKFx1MDAyNnNzcGNjLVx1MDAzZWVsZW0pO1xuK1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVx1MDAzZXBjY19jaGFuKTtcbitcdGtmcmVlKHNzcGNjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuK3tcbitcdGtyZWZfcHV0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYsICBcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpXG4re1xuK1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcdTAwMjZyYXMyX3NzcGNjLCBlbGVtKSB7XG4rXHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfaWQgIT0gcGNjX2lkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXR1cm4gc3NwY2M7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcbit7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX2NoYW47XG4rXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4rXG4rXHRpZiAocGNjX2lkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHNzcGNjID0gcmFzMl9zc3BjY19nZXQocGNjX2lkKTtcbitcdGlmIChzc3BjYykge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PVxuK1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRzc3BjYyA9IGt6YWxsb2Moc2l6ZW9mKCpzc3BjYyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFzc3BjYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbitcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XG4rXHRcdGtmcmVlKHNzcGNjKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuK1x0fVxuK1xuK1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSkge1xuK1x0XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwocGNjX2NoYW4pO1xuK1x0XHRrZnJlZShzc3BjYyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuK1x0c3NwY2MtXHUwMDNlcGNjX2NoYW5cdFx0PSBwY2NfY2hhbjtcbitcdHNzcGNjLVx1MDAzZWNvbW1fYWRkclx0PSBwY2NfY2hhbi1cdTAwM2VzaG1lbTtcbitcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuK1x0XHRzc3BjYy1cdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLVx1MDAzZWxhdGVuY3k7XG4rXHRlbHNlXG4rXHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuK1x0c3NwY2MtXHUwMDNlcGNjX21ydHRcdFx0PSBwY2NfY2hhbi1cdTAwM2VtaW5fdHVybmFyb3VuZF90aW1lO1xuK1x0c3NwY2MtXHUwMDNlcGNjX21wYXJcdFx0PSBwY2NfY2hhbi1cdTAwM2VtYXhfYWNjZXNzX3JhdGU7XG4rXHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbitcbitcdG11dGV4X2luaXQoXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2spO1xuK1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuK1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcbitcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4rXHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0cmFzMl9jdHgtXHUwMDNlZGV2XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXY7XG4rXHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7XG4rc3RhdGljIHZvaWQgcmFzMl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2ID0gdG9fYXV4aWxpYXJ5X2RldihkZXZpY2UpO1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbitcbitcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBhdXhkZXYtXHUwMDNlaWQpO1xuK1x0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXHUwMDNlc3NwY2MpO1xuK1x0a2ZyZWUocmFzMl9jdHgpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHJhczJfbWVtX2N0eCAqYWRkX2F1eF9kZXZpY2UoY2hhciAqbmFtZSwgaW50IGNoYW5uZWwsIHUzMiBweG1faW5zdClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbitcdHUzMiBjb21wX25pZDtcbitcdGludCBpZCwgcmM7XG4rXG4rXHRjb21wX25pZCA9IHB4bV90b19ub2RlKHB4bV9pbnN0KTtcbitcdGlmIChjb21wX25pZCA9PSBOVU1BX05PX05PREUpIHtcbitcdFx0cHJfZGVidWcoXCJJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxcblwiLCBjaGFubmVsLCBweG1faW5zdCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyYXMyX2N0eClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQgPSBjb21wX25pZDtcbitcbitcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKSB7XG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxuXCIsIGNoYW5uZWwsXG4rXHRcdFx0IHB4bV9pbnN0LCByYyk7XG4rXHRcdGdvdG8gY3R4X2ZyZWU7XG4rXHR9XG4rXG4rXHRpZCA9IGlkYV9hbGxvYyhcdTAwMjZyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoaWQgXHUwMDNjIDApIHtcbitcdFx0cmMgPSBpZDtcbitcdFx0Z290byBwY2NfZnJlZTtcbitcdH1cbitcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYuaWRcdFx0PSBpZDtcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYubmFtZVx0XHQ9IG5hbWU7XG4rXHRyYXMyX2N0eC1cdTAwM2VhZGV2LmRldi5yZWxlYXNlXHQ9IHJhczJfcmVsZWFzZTtcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnBhcmVudFx0PSByYXMyX2N0eC1cdTAwM2VkZXY7XG4rXG4rXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbitcdGlmIChyYylcbitcdFx0Z290byBpZGFfZnJlZTtcbitcbitcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRpZiAocmMpIHtcbitcdFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbitcdH1cbitcbitcdHJldHVybiByYXMyX2N0eDtcbitcbitpZGFfZnJlZTpcbitcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBpZCk7XG4rcGNjX2ZyZWU6XG4rXHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cdTAwM2Vzc3BjYyk7XG4rY3R4X2ZyZWU6XG4rXHRrZnJlZShyYXMyX2N0eCk7XG4rXG4rXHRyZXR1cm4gRVJSX1BUUihyYyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuK3tcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybjtcbitcbitcdGF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuK1x0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0O1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqKnBjdHhfbGlzdDtcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xuK1x0dTE2IHRvdF90YmxfbGVuO1xuK1x0dTE2IGk7XG4rXG4rXHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2Mgc2l6ZW9mKCpyYXMyX3RhYikpIHtcbitcdFx0cHJfd2FybihGV19XQVJOIFwiQUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgYnV0IGJyb2tlbiAodG9vIHNob3J0LCBzaXplPSV1KVxcblwiLFxuK1x0XHRcdHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmICghcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyB8fCByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzIFx1MDAzZSBSQVMyX01BWF9OVU1fUENDX0RFU0NTKSB7XG4rXHRcdHByX3dhcm4oRldfV0FSTiBcIk5vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXFxuXCIsXG4rXHRcdFx0cmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0dG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSArIHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgKiBzaXplb2YoKnBjY19kZXNjX2xpc3QpO1xuK1x0aWYgKHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIHRvdF90YmxfbGVuKSB7XG4rXHRcdHByX3dhcm4oRldfV0FSTiBcIlJBUzIgdGFibGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIFBDQyBkZXNjcz0lZCBzaXplPSV1KVxcblwiLFxuK1x0XHRcdHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHBjdHhfbGlzdCA9IGtjYWxsb2MocmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcywgc2l6ZW9mKCpwY3R4X2xpc3QpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcGN0eF9saXN0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiArIDEpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjczsgaSsrLCBwY2NfZGVzY19saXN0KyspIHtcbitcdFx0aWYgKHBjY19kZXNjX2xpc3QtXHUwMDNlZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0cmFzMl9jdHggPSBhZGRfYXV4X2RldmljZShSQVMyX01FTV9ERVZfSURfTkFNRSwgcGNjX2Rlc2NfbGlzdC1cdTAwM2VjaGFubmVsX2lkLFxuK1x0XHRcdFx0XHQgIHBjY19kZXNjX2xpc3QtXHUwMDNlaW5zdGFuY2UpO1xuK1x0XHQvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi9cbitcdFx0aWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKElTX0VSUihyYXMyX2N0eCkpIHtcbitcdFx0XHRwcl93YXJuKFwiRmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXFxuXCIsIFBUUl9FUlIocmFzMl9jdHgpKTtcbitcdFx0XHRmb3IgKDsgaSBcdTAwM2UgMDsgaS0tKSB7XG4rXHRcdFx0XHRpZiAocGN0eF9saXN0W2kgLSAxXSlcbitcdFx0XHRcdFx0cmVtb3ZlX2F1eF9kZXZpY2UocGN0eF9saXN0W2kgLSAxXSk7XG4rXHRcdFx0fVxuK1x0XHRcdGtmcmVlKHBjdHhfbGlzdCk7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIocmFzMl9jdHgpO1xuK1x0XHR9XG4rXHRcdHBjdHhfbGlzdFtpXSA9IHJhczJfY3R4O1xuK1x0fVxuK1x0a2ZyZWUocGN0eF9saXN0KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBhY3BpX3JhczJfaW5pdCAtIFJBUzIgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxuKyAqXG4rICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2VcbisgKiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4gRHJpdmVyIGFkZHMgYW5cbisgKiBhdXhpbGlhcnkgZGV2aWNlLCB3aGljaCBiaW5kcyB0byB0aGUgbWVtb3J5IEFDUEkgUkFTMiBkcml2ZXIsIGZvciBlYWNoIFJBUzJcbisgKiBtZW1vcnkgZmVhdHVyZS5cbisgKlxuKyAqIFJldHVybnM6IG5vbmUuXG4rICovXG4rdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcbitcdGFjcGlfc3RhdHVzIHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXHUwMDI2cmFzMl90YWIpO1xuK1x0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7XG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIGdldCB0YWJsZSwgJXNcXG5cIiwgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAocGFyc2VfcmFzMl90YWJsZShyYXMyX3RhYikpXG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIHBhcnNlIFJBUzIgdGFibGVcXG5cIik7XG4rXG4rXHRhY3BpX3B1dF90YWJsZSgoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopcmFzMl90YWIpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG5pbmRleCBmOWQwMmFmMmZjM2EyMC4uZjNiOWEyZjA0OTUwMGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuY1xuKysrIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbkBAIC0xNCw2ICsxNCw3IEBAIGVudW0gZWRhY19zY3J1Yl9hdHRyaWJ1dGVzIHtcbiBcdFNDUlVCX0FERFJFU1MsXG4gXHRTQ1JVQl9TSVpFLFxuIFx0U0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkQsXG4rXHRTQ1JVQl9FTkFCTEVfREVNQU5ELFxuIFx0U0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OLFxuIFx0U0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OLFxuIFx0U0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OLFxuQEAgLTU1LDYgKzU2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXHRcdFx0XFxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhhZGRyLCByZWFkX2FkZHIsIHU2NCwgXCIweCVsbHhcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhzaXplLCByZWFkX3NpemUsIHU2NCwgXCIweCVsbHhcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsIFwiJXVcXG5cIilcbitFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfZGVtYW5kLCBnZXRfZW5hYmxlZF9vZCwgYm9vbCwgXCIldVxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCBcIiV1XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWF4X2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWF4X2N5Y2xlLCB1MzIsIFwiJXVcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBnZXRfY3ljbGVfZHVyYXRpb24sIHUzMiwgXCIldVxcblwiKVxuQEAgLTg0LDYgKzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFx0XHRcdFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2JhY2tncm91bmQsIHNldF9lbmFibGVkX2JnLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbitFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2RlbWFuZCwgc2V0X2VuYWJsZWRfb2QsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBzZXRfY3ljbGVfZHVyYXRpb24sIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuIFxuIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpXG5AQCAtMTE5LDYgKzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludFxuIFx0XHRcdFx0cmV0dXJuIDA0NDQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFNDUlVCX0VOQUJMRV9ERU1BTkQ6XG4rXHRcdGlmIChvcHMtXHUwMDNlZ2V0X2VuYWJsZWRfb2QpIHtcbitcdFx0XHRpZiAob3BzLVx1MDAzZXNldF9lbmFibGVkX29kKVxuK1x0XHRcdFx0cmV0dXJuIGEtXHUwMDNlbW9kZTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRyZXR1cm4gMDQ0NDtcbitcdFx0fVxuK1x0XHRicmVhaztcbiBcdGNhc2UgU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OOlxuIFx0XHRpZiAob3BzLVx1MDAzZWdldF9taW5fY3ljbGUpXG4gXHRcdFx0cmV0dXJuIGEtXHUwMDNlbW9kZTtcbkBAIC0xNjQsNiArMTc1LDcgQEAgc3RhdGljIGludCBzY3J1Yl9jcmVhdGVfZGVzYyhzdHJ1Y3QgZGV2aWNlICpzY3J1Yl9kZXYsXG4gXHRcdFtTQ1JVQl9BRERSRVNTXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhhZGRyLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9TSVpFXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhzaXplLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9FTkFCTEVfQkFDS0dST1VORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2JhY2tncm91bmQsIGluc3RhbmNlKSxcbitcdFx0W1NDUlVCX0VOQUJMRV9ERU1BTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9kZW1hbmQsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX01JTl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWluX2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1heF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuQEAgLTQ2LDQgKzQ2LDE3IEBAIGNvbmZpZyBSQVNfRk1QTVxuIFx0ICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvblxuIFx0ICBwbGF0Zm9ybS1zcGVjaWZpYyBwb2xpY2llcy5cbiBcbitjb25maWcgTUVNX0FDUElfUkFTMlxuK1x0dHJpc3RhdGUgXCJNZW1vcnkgQUNQSSBSQVMyIGRyaXZlclwiXG4rXHRkZXBlbmRzIG9uIEFDUElfUkFTMlxuK1x0ZGVwZW5kcyBvbiBFREFDXG4rXHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcbitcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xuK1x0aGVscFxuK1x0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcbitcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXG4rXHQgIGNvbW11bmljYXRlIHdpdGggdGhlIEFDUEktY29tcGxpYW50IHBsYXRmb3JtIGFuZCBwcm92aWRlc1xuK1x0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxuK1x0ICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS5cbitcbiBlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL01ha2VmaWxlIGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcbmluZGV4IDExZjk1ZDU5ZDM5NzJkLi5hMGU2ZTkwM2Q2YjA5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmFzL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuQEAgLTIsNiArMiw3IEBAXG4gb2JqLSQoQ09ORklHX1JBUylcdCs9IHJhcy5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX0ZTKVx0Kz0gZGVidWdmcy5vXG4gb2JqLSQoQ09ORklHX1JBU19DRUMpXHQrPSBjZWMub1xuK29iai0kKENPTkZJR19NRU1fQUNQSV9SQVMyKVx0Kz0gYWNwaV9yYXMyLm9cbiBcbiBvYmotJChDT05GSUdfUkFTX0ZNUE0pXHQrPSBhbWQvZm1wbS5vXG4gb2JqLXlcdFx0XHQrPSBhbWQvYXRsL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjY4YjFjMzhkZGY5MDVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5AQCAtMCwwICsxLDYwMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXG4rICpcbisgKi9cbitcbisjdW5kZWYgcHJfZm10XG4rI2RlZmluZSBwcl9mbXQoZm10KVx0XCJBQ1BJIFJBUzIgTUVNT1JZOiBcIiBmbXRcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VkYWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbitcbisjZGVmaW5lIFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIgQklUKDApXG4rI2RlZmluZSBSQVMyX1RZUEVfUEFUUk9MX1NDUlVCIDB4MDAwMFxuK1xuKyNkZWZpbmUgUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMgMHgwMVxuKyNkZWZpbmUgUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIgMHgwMlxuKyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzXG4rXG4rLypcbisgKiBSQVMyIHBhdHJvbCBzY3J1YlxuKyAqL1xuKyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfSU5fTUFTSyBHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKVxuKyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfT1VUX01BU0sgR0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpXG4rI2RlZmluZSBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORyBCSVQoMClcbitcbisjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4XG4rI2RlZmluZSBSQVMyX0hPVVJfSU5fU0VDUyAzNjAwXG4rXG4rc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHtcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gY29tbW9uO1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zO1xuK307XG4rXG4rI2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFxcXG4rXHRjb250YWluZXJfb2YoX2FkZHIsIHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSwgY29tbW9uKVxuK1xuK3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbitcbitzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcjtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpb3dyaXRlOCgwLCBcdTAwMjZjb21tb24tXHUwMDNlc2V0X2NhcHNbMF0pO1xuK1xuK1x0cmV0dXJuIGlvcmVhZDgoXHUwMDI2Y29tbW9uLVx1MDAzZWZlYXR1cmVzWzBdKSBcdTAwMjYgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XG4rXHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuK1x0dTMyIHNjcnViX3BhcmFtc19vdXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbitcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19vdXQpO1xuK1x0cmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyxcbitcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4rXHRyYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLFxuK1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbitcdHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyxcbitcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICAoaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmZsYWdzKSBcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSB0cnVlO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzFdKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqL1xuK3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbitcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VvZF9zY3J1Yikge1xuK1x0XHQqcnVubmluZyA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0KnJ1bm5pbmcgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORztcbitcdGlmICghKCpydW5uaW5nKSlcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICopcDtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuK1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0aWYgKCFyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YilcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIElmIHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKCkgZmFpbHMgaGVyZSwgcmUtZW5hYmxpbmcgYmFja2dyb3VuZFxuK1x0XHQgKiBzY3J1YmJpbmcgaW1tZWRpYXRlbHkgbWF5IG5vdCBiZSBwb3NzaWJsZSBvciBjb3JyZWN0LiBJbiB0aGF0IGNhc2UsXG4rXHRcdCAqIHRoZSBhZG1pbiBvciBmaXJtd2FyZSBtYXkgbmVlZCB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YmJpbmdcbitcdFx0ICogYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBleGl0O1xuK1xuK1x0XHRpZiAoIXJ1bm5pbmcpIHtcbitcdFx0XHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRcIkZhaWxlZCB0byBlbmFibGUgYmFja2dyb3VuZCBzY3J1YiByZXQ9JWRcXG5cIiwgcmV0KTtcbitcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXHRcdH1cbitcbitcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0bXNsZWVwKDEwMDApO1xuK1x0fVxuK1xuK1x0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rZXhpdDpcbitcdGlmIChyYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlKVxuK1x0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuK1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHQqbWluID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWF4KVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0Km1heCA9IHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2Vjcylcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdCpzY3J1Yl9jeWNsZV9zZWNzID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKVxuK3tcbitcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRpZiAoc2NydWJfY3ljbGVfaHJzIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgfHxcbitcdCAgICBzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSBzY3J1Yl9jeWNsZV9ocnM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0LypcbitcdCAqIFdoZW4gQkcgc2NydWJiaW5nIGlzIGVuYWJsZWQgdGhlIGFjdHVhbCBhZGRyZXNzIHJhbmdlIGlzIG5vdCB2YWxpZC5cbitcdCAqIFJldHVybiAtRUJVU1kgbm93IHVubGVzcyBmaW5kIG91dCBhIG1ldGhvZCB0byByZXRyaWV2ZSBhY3R1YWwgZnVsbCBQQSByYW5nZS5cbitcdCAqL1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0KmJhc2UgPSByYXMyX2N0eC1cdTAwM2ViYXNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCpzaXplID0gcmFzMl9jdHgtXHUwMDNlc2l6ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gYmFzZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghc2l6ZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChydW5uaW5nKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IHNpemU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHQqZW5hYmxlZCA9IHJhczJfY3R4LVx1MDAzZWJnX3NjcnViO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRpZiAoZW5hYmxlKSB7XG4rXHRcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiB8fCBydW5uaW5nKVxuK1x0XHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcdFx0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xuK1x0XHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xuK1x0XHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdFx0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHRcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXHR9XG4rXG4rXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX0VOX0JBQ0tHUk9VTkQsIGVuYWJsZSk7XG4rXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcblwiLFxuK1x0XHRcdHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJhczJfY3R4LVx1MDAzZWJnX3NjcnViID0gZW5hYmxlO1xuK1x0aWYgKGVuYWJsZSkge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuK1x0XHQvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi9cbitcdFx0cmV0dXJuIHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcbitcdHJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCplbmFibGVkID0gcnVubmluZztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuK1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWVuYWJsZSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGV4aXQ7XG4rXG4rXHRpZiAocnVubmluZykge1xuK1x0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbitcdC8qIFN0b3AgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbitcdFx0cmV0ID0gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGZhbHNlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXG4rXHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcbitcdCAqIHdpdGggKGJhc2UgKyBzaXplKSBcdTAwM2UgKG1lbV9iYXNlICsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXG4rXHQgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuXG4rXHQgKi9cbitcdGlmICghcmFzMl9jdHgtXHUwMDNlc2l6ZSB8fCByYXMyX2N0eC1cdTAwM2ViYXNlIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCIlczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcblwiLFxuK1x0XHRcdF9fZnVuY19fLCByYXMyX2N0eC1cdTAwM2ViYXNlLCByYXMyX2N0eC1cdTAwM2VzaXplKTtcbitcdFx0cmV0ID0gLUVSQU5HRTtcbitcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHR9XG4rXG4rXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuK1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbitcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuK1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VzaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXG4rXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcXG5cIiwgcmV0KTtcbitcdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbitcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcdFx0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSAwO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuK1x0XHR9XG4rXHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBlbmFibGU7XG4rXG4rXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbitcbitcdGlmIChyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiBcdTAwMjZcdTAwMjYgcmFzMl9jdHgtXHUwMDNlZHJpdmVyX2FjdGl2ZSBcdTAwMjZcdTAwMjYgIXJhczJfY3R4LVx1MDAzZXRocmVhZCkge1xuK1x0XHQvKlxuK1x0XHQgKiBJZiBrdGhyZWFkX3J1bigpIGlzIGNhbGxlZCBiZWZvcmUgc2VuZGluZyB0aGUgY29tbWFuZCBmb3IgZGVtYW5kIHNjcnViYmluZyxcbitcdFx0ICogdGhlIHRocmVhZCBtYXkgZGV0ZXJtaW5lIHRoYXQgZGVtYW5kIHNjcnViYmluZyBpcyBub3QgcnVubmluZywgYXR0ZW1wdCB0b1xuK1x0XHQgKiByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nLCBhbmQgdGhlbiBleGl0LiBUaGlzIGNhbiBvY2N1ciBiZWNhdXNlIHRoZVxuK1x0XHQgKiB0aHJlYWQgZnVuY3Rpb24gbWF5IHN0YXJ0IHJ1bm5pbmcgYmVmb3JlIGRlbWFuZCBzY3J1YmJpbmcgc3RhcnRzLlxuK1x0XHQgKi9cbitcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4ocmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCwgcmFzMl9jdHgsXG4rXHRcdFx0XHRcdCAgICAgICBcInJhczJfc2NydWJfbmlkJWRcIiwgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbitcdFx0aWYgKElTX0VSUihyYXMyX2N0eC1cdTAwM2V0aHJlYWQpKSB7XG4rXHRcdFx0cmV0ID0gUFRSX0VSUihyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBJZiBrdGhyZWFkX3J1bigpIGZhaWxzIGFuZCB0aGUgZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBydW5uaW5nLFxuK1x0XHRcdCAqIHJlLWVuYWJsaW5nIGJhY2tncm91bmQgc2NydWIgd2lsbCBmYWlsLiBUaHVzIGFkbWluL2Zpcm13YXJlIG1heSBuZWVkXG4rXHRcdFx0ICogdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWIgYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHRcdH1cbitcdH1cbitcbitcdGdvdG8gZXhpdDtcbitcbitlbmFibGVfYmdfc2NydWI6XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcbitcdFx0X19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIHRydWUpO1xuK1x0fVxuK1xuK2V4aXQ6XG4rXHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcbitcdC5yZWFkX2FkZHIgPSByYXMyX2h3X3NjcnViX3JlYWRfYWRkcixcbitcdC5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSxcbitcdC53cml0ZV9hZGRyID0gcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyLFxuK1x0LndyaXRlX3NpemUgPSByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUsXG4rXHQuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLFxuK1x0LnNldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyxcbitcdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXG4rXHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxuK1x0LmdldF9taW5fY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlLFxuK1x0LmdldF9tYXhfY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlLFxuK1x0LmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCxcbitcdC5zZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlLFxuK307XG4rXG4rc3RhdGljIHZvaWQgcmFzMl9tZW1fZHJ2X3JlbW92ZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2KVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XG4rXG4rXHRpZiAoIXJhczJfY3R4KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSBmYWxzZTtcbitcdGlmIChyYXMyX2N0eC1cdTAwM2V0aHJlYWQpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0a3RocmVhZF9zdG9wKHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuK1x0c3RydWN0IGVkYWNfZGV2X2ZlYXR1cmUgcmFzX2ZlYXR1cmVzO1xuK1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChyYXMyX2N0eCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qXG4rXHQgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlXG4rXHQgKiAnUmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UnLCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kIEdFVF9QQVRST0xfUEFSQU1FVEVSU1xuK1x0ICogdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzIGluIHRoZSBOVU1BIGRvbWFpblxuK1x0ICogYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVIgdG8gc3RhcnQgdGhlIGRlbWFuZFxuK1x0ICogc2NydWJiaW5nLiBUaGUgdmFsaWRpdHkgY2hlY2sgZm9yIHN5c19jb21wX25pZCBhZ2FpbnN0IE5VTUFfTk9fTk9ERSBpc1xuK1x0ICogYWxyZWFkeSBwZXJmb3JtZWQgaW4gYWRkX2F1eF9kZXZpY2UoKSBpbiAvYWNwaS9yYXMyLmNcbitcdCAqL1xuK1x0c3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbitcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRpZiAoIW51bV9zcGFubmVkX3BhZ2VzKSB7XG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxcblwiLCByYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XG4rXHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi9cbitcdGlmIChyYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSlcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xuK1x0ZWxzZVxuK1x0XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGU7XG4rXG4rXHRzcHJpbnRmKHNjcnViX25hbWUsIFwiYWNwaV9yYXNfbWVtJWRcIiwgYXV4ZGV2LVx1MDAzZWlkKTtcbitcbitcdHJhc19mZWF0dXJlcy5mdF90eXBlXHQ9IFJBU19GRUFUX1NDUlVCO1xuK1x0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4rXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuK1x0cmFzX2ZlYXR1cmVzLmN0eFx0PSByYXMyX2N0eDtcbitcbitcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbitcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcIi5cIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XG4rXG4rc3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcbitcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG4rXHQucHJvYmUgPSByYXMyX21lbV9kcnZfcHJvYmUsXG4rXHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcbitcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbit9O1xuK21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7XG4rXG4rTU9EVUxFX0lNUE9SVF9OUyhcIkFDUElfUkFTMlwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxuQEAgLTAsMCArMSw4NiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKlxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZFxuKyAqL1xuK1xuKyNpZm5kZWYgX0FDUElfUkFTMl9IXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbitzdHJ1Y3QgZGV2aWNlO1xuK1xuKy8qXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XG4rICogUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXG4rICovXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXG4rXG4rI2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcInJhczJcIlxuKyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXCJhY3BpX3JhczJfbWVtXCJcbitcbisvKipcbisgKiBzdHJ1Y3QgcmFzMl9tZW1fY3R4IC0gQ29udGV4dCBmb3IgUkFTMiBtZW1vcnkgZmVhdHVyZXNcbisgKiBAYWRldjpcdFx0QXV4aWxpYXJ5IGRldmljZSBvYmplY3RcbisgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4rICogQGRldjpcdFx0UG9pbnRlciB0byBkZXZpY2UgYmFja2luZyBzdHJ1Y3QgbWJveF9jb250cm9sbGVyIGZvciBQQ0NcbisgKiBAc3NwY2M6XHRcdFBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4rICogQHBjY19sb2NrOlx0XHRQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuKyAqXHRcdFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcbisgKiBAc3lzX2NvbXBfbmlkOlx0Tm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZVxuKyAqXHRcdFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXG4rICpcdFx0XHRQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsXG4rICpcdFx0XHRGaWVsZDogSW5zdGFuY2VcbisgKiBAbWVtX2Jhc2U6XHRcdEJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQG1lbV9zaXplXHRcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQGJhc2U6XHRcdEJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxuKyAqIEBzaXplOlx0XHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4rICogQHNjcnViX2N5Y2xlX2hyczpcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xuKyAqIEBzZXRfc2NydWJfY3ljbGU6XHRTY3J1YiByYXRlIHRvIHNldCBpbiBob3Vyc1xuKyAqIEBtaW5fc2NydWJfY3ljbGU6XHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4rICogQG1heF9zY3J1Yl9jeWNsZTpcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbisgKiBAb2Rfc2NydWI6XHRcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxuKyAqIEBiZ19zY3J1YjpcdFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xuKyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcdEZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kXG4rICpcdFx0XHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcbisgKiBAdGhyZWFkOlx0XHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXG4rICogQGRyaXZlcl9hY3RpdmU6XHRGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWRcbisgKi9cbitzdHJ1Y3QgcmFzMl9tZW1fY3R4IHtcbitcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXHRcdGFkZXY7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cdCpjb21tX2FkZHI7XG4rXHRzdHJ1Y3QgZGV2aWNlXHRcdFx0KmRldjtcbitcdHZvaWRcdFx0XHRcdCpzc3BjYztcbitcdHN0cnVjdCBtdXRleFx0XHRcdCpwY2NfbG9jaztcbitcdHUzMlx0XHRcdFx0c3lzX2NvbXBfbmlkO1xuK1x0dTY0XHRcdFx0XHRtZW1fYmFzZTtcbitcdHU2NFx0XHRcdFx0bWVtX3NpemU7XG4rXHR1NjRcdFx0XHRcdGJhc2U7XG4rXHR1NjRcdFx0XHRcdHNpemU7XG4rXHR1OFx0XHRcdFx0c2NydWJfY3ljbGVfaHJzO1xuK1x0dThcdFx0XHRcdHNldF9zY3J1Yl9jeWNsZTtcbitcdHU4XHRcdFx0XHRtaW5fc2NydWJfY3ljbGU7XG4rXHR1OFx0XHRcdFx0bWF4X3NjcnViX2N5Y2xlO1xuK1x0Ym9vbFx0XHRcdFx0b2Rfc2NydWI7XG4rXHRib29sXHRcdFx0XHRiZ19zY3J1YjtcbitcdGJvb2xcdFx0XHRcdHJlZW5hYmxlX2JnX3NjcnViO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0XHRcdCp0aHJlYWQ7XG4rXHRib29sXHRcdFx0XHRkcml2ZXJfYWN0aXZlO1xuK307XG4rXG4rI2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbit2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKTtcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGFjcGlfcmFzMl9pbml0KHZvaWQpIHsgfVxuKyNlbmRpZlxuK1xuKyNlbmRpZiAvKiBfQUNQSV9SQVMyX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5pbmRleCBlNmI0ZTUxMTMwZTVmZi4uYmU0ZjZlNTJlYTM4YTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcbkBAIC02ODQsNiArNjg0LDggQEAgZW51bSBlZGFjX2Rldl9mZWF0IHtcbiAgKiBAd3JpdGVfc2l6ZTogc2V0IG9mZnNldCBvZiB0aGUgc2NydWJiaW5nIHJhbmdlLlxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cbiAgKiBAc2V0X2VuYWJsZWRfYmc6IHN0YXJ0IG9yIHN0b3AgYSBiZy1zY3J1Yi5cbisgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbisgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXG4gICogQGdldF9taW5fY3ljbGU6IGdldCBtaW5pbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuICAqIEBnZXRfbWF4X2N5Y2xlOiBnZXQgbWF4aW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuQEAgLTY5Niw2ICs2OTgsOCBAQCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xuIFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xuIFx0aW50ICgqZ2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4gXHRpbnQgKCpzZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuK1x0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4rXHRpbnQgKCpzZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuIFx0aW50ICgqZ2V0X21pbl9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWluKTtcbiBcdGludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7XG4gXHRpbnQgKCpnZXRfY3ljbGVfZHVyYXRpb24pKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqY3ljbGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDc6MTAuODM1MDc1MjYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2ODA1MTM1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQUNQSSBSQVMyIE1lbW9yeSBTY3J1YmJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgQUNQSSBSQVMyIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggYXQgZmlyc3QgZ2xhbmNlIOKAkyBhIG5ldyBkcml2ZXIsIGBkcml2ZXJzL2FjcGkvcmFzMi5jYCBhbmQgYGRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jYCwgYWxvbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgZHJpdmVycy9lZGFjL3NjcnViLmNgLiBUaGUgY29yZSBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgcmVsaWVzIG9uIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgZm9yIGhhcmR3YXJlIGludGVyYWN0aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGdpdmVuIG15IGZvY3VzLCBpcyB3aGV0aGVyIHRoaXMgaXMgd29ydGggZnV6emluZy5cblxuVGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCBBQ1BJIHRhYmxlcyAoc3BlY2lmaWNhbGx5IHRoZSBgQUNQSV9TSUdfUkFTMmAgc2lnbmF0dXJlKSBhbmQgUENDIG1haWxib3hlcy4gTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyBpbiB0aGUgY29udGV4dCBvZiBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuIFdlIGNhbiBwcm9iYWJseSBpbmplY3QgQUNQSSB0YWJsZXMgdXNpbmcgc3l6a2FsbGVyLCB3aGljaCBtaWdodCBsZXQgdXMgdHJpZ2dlciB0aGUgaW5pdGlhbGl6YXRpb24uIFRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBgYWNwaV9yYXMyX2luaXRgLCBpcyBjYWxsZWQgZnJvbSBgYWNwaV9pbml0YCwgc28gdGhhdOKAmXMgYSBwcm9taXNpbmcgZW50cnkgcG9pbnQuIEl0IHBhcnNlcyB0aGUgUkFTMiB0YWJsZSBhbmQsIGlmIHByZXNlbnQsIHJlZ2lzdGVycyBhdXhpbGlhcnkgZGV2aWNlcy4gVGhlIGF1eGlsaWFyeSBkZXZpY2UgcHJvYmUsIGByYXMyX21lbV9kcnZfcHJvYmVgLCBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBQQ0MgcmVhZCBvcGVyYXRpb25zIG9jY3VyLlxuXG5CdXQgdGhlIGNhdGNoIGlzIHRoZSBQQ0MgbWFpbGJveCBzdXBwb3J0LiBTeXprYWxsZXIgY2FuIGluamVjdCBBQ1BJIHRhYmxlcyB1c2luZyBgc3l6X2FjcGlfaW5qZWN0YCwgYnV0IGRvZXMgaXQgYWN0dWFsbHkgaGF2ZSBQQ0MgbWFpbGJveCBzdXBwb3J0PyBJIG5lZWQgdG8gdmVyaWZ5IGlmIFBDQyBpcyBldmVuIHJlYWNoYWJsZS4gVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdGhlIGZ1bmN0aW9uIGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgLiBJZiB0aGVyZSdzIG5vIFBDQyBtYWlsYm94IGF2YWlsYWJsZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwuIEknbSBnb2luZyB0byBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZSBmb3IgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgYW5kIHNlZSB3aGF0IHRoZSBjb25kaXRpb25zIGZvciBzdWNjZXNzIG9yIGZhaWx1cmUgYXJlLiBUaGlzIGlzIGEgY3JpdGljYWwgZmFjdG9yIGluIGRldGVybWluaW5nIGlmIHRoaXMgd2hvbGUgcGF0aCBpcyB2aWFibGUgZm9yIGZ1enppbmcgYW5kIHdpbGwgZGV0ZXJtaW5lIGhvdyBJIGFwcHJvYWNoIHRlc3RpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MjcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0NzoyMS41MTU1OTEyMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNzY1MDg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY3BpL2FjcGlfcGNjLmM9NDk9YWNwaV9wY2NfYWRkcmVzc19zcGFjZV9zZXR1cChhY3BpX2hhbmRsZSByZWdpb25faGFuZGxlLCB1MzIgZnVuY3Rpb24sXFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYy02Ny1cXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmRhdGEtXFx1MDAzZWRvbmUpO1xcbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jOjY4OlxcdGRhdGEtXFx1MDAzZXBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFxcdTAwMjZkYXRhLVxcdTAwM2VjbCwgY3R4LVxcdTAwM2VzdWJzcGFjZV9pZCk7XFxuZHJpdmVycy9hY3BpL2FjcGlfcGNjLmMtNjktXFx0aWYgKElTX0VSUihkYXRhLVxcdTAwM2VwY2NfY2hhbikpIHtcXG4tLVxcbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYz01NjY9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChpbnQgcGNjX3NzX2lkeClcXG4tLVxcbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYy01NzEtXFx0aWYgKHBjY19zc19pZHggXFx1MDAzZT0gMCkge1xcbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYzo1NzI6XFx0XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNmNwcGNfbWJveF9jbCwgcGNjX3NzX2lkeCk7XFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3My1cXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM9MjgxPXN0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXFxuLS1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTMwMi1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jOjMwMzpcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcXHUwMDI2c3NwY2MtXFx1MDAzZW1ib3hfY2xpZW50LCBwY2NfaWQpO1xcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA0LVxcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XFxuLS1cXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jPTEwNj1zdGF0aWMgaW50IGhpc2lfdW5jb3JlX3JlcXVlc3RfcGNjX2NoYW4oc3RydWN0IGhpc2lfdW5jb3JlX2ZyZXEgKnVuY29yZSlcXG4tLVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmMtMTE2LVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM6MTE3OlxcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFxcdTAwMjZ1bmNvcmUtXFx1MDAzZWNsLCB1bmNvcmUtXFx1MDAzZWNoYW5faWQpO1xcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmMtMTE4LVxcdGlmIChJU19FUlIocGNjX2NoYW4pKVxcbi0tXFxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jPTYwOT1zdGF0aWMgaW50IHhnZW5lX2h3bW9uX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNjY3LVxcdFxcdGNsLVxcdTAwM2VyeF9jYWxsYmFjayA9IHhnZW5lX2h3bW9uX3BjY19yeF9jYjtcXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM6NjY4OlxcdFxcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKGNsLCBjdHgtXFx1MDAzZW1ib3hfaWR4KTtcXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNjY5LVxcdFxcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XFxuLS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYz00MzY9c3RhdGljIGludCB4Z2VuZV9zbGltcHJvX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc3LVxcdFxcdGNsLVxcdTAwM2VyeF9jYWxsYmFjayA9IHNsaW1wcm9faTJjX3BjY19yeF9jYjtcXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYzo0Nzg6XFx0XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cXHUwMDNlbWJveF9pZHgpO1xcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jLTQ3OS1cXHRcXHRpZiAoSVNfRVJSKHBjY19jaGFuKSlcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zMTM9c3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM0OC0vKipcXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzQ5OiAqIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCAtIFBDQyBjbGllbnRzIGNhbGwgdGhpcyBmdW5jdGlvbiB0b1xcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNTAtICpcXHRcXHRyZXF1ZXN0IGEgcG9pbnRlciB0byB0aGVpciBQQ0Mgc3Vic3BhY2UsIGZyb20gd2hpY2ggdGhleVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTM2MD1zdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM2MTpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNjIte1xcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5Mi19XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM5MzpFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwpO1xcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTQtXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzk4LSAqIEBwY2hhbjogUG9pbnRlciB0byB0aGUgUENDIG1haWxib3ggY2hhbm5lbCBhcyByZXR1cm5lZCBieVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozOTk6ICpcXHQgICBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoKVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy00MDAtICovXFxuLS1cXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmM9MTczPXN0YXRpYyBpbnQgaGNjc19yZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgaGNjc19kZXYgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmMtMTg4LVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYzoxODk6XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGhkZXYtXFx1MDAzZWNoYW5faWQpO1xcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xOTAtXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4tLVxcbmluY2x1ZGUvYWNwaS9wY2MuaD0zNz1leHRlcm4gc3RydWN0IHBjY19tYm94X2NoYW4gKlxcbmluY2x1ZGUvYWNwaS9wY2MuaDozODpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKTtcXG5pbmNsdWRlL2FjcGkvcGNjLmgtMzktZXh0ZXJuIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKTtcXG4tLVxcbmluY2x1ZGUvYWNwaS9wY2MuaD00MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwY2NfbWJveF9jaGFuICpcXG5pbmNsdWRlL2FjcGkvcGNjLmg6NDI6cGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcXG5pbmNsdWRlL2FjcGkvcGNjLmgtNDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0NzoyMy45NDMyNDY4MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzc3MTkxMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFJBUzIgU2NydWIgSW50ZXJmYWNlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gZnV6eiB0aGUgUkFTMiBkcml2ZXIgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEVEQUMgc2NydWIgaW50ZXJmYWNlcy4gRmlyc3QsIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhlIFBDQyBtYWlsYm94IGRyaXZlciBpcyBhY2Nlc3NpYmxlIHZpYSBBQ1BJIHRhYmxlIGluamVjdGlvbiwgc3BlY2lmaWNhbGx5IFBDQ1QuICBJZiBzeXprYWxsZXIgaW5qZWN0cyBhIFBDQ1QgdGFibGUsIHRoZSBQQ0MgbWFpbGJveCBzaG91bGQgaW5pdGlhbGl6ZSBjaGFubmVscywgYW5kIHRoZW4gdGhlIFJBUzIgZHJpdmVyIHNob3VsZCBpbml0aWFsaXplIGl0c2VsZiBpZiBhIFJBUzIgdGFibGUgaXMgYWxzbyBpbmplY3RlZCwgd2hpY2ggbWVhbnMgd2UgY2FuIHJlYWNoIGl0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGBlZGFjX2Rldl9yZWdpc3RlcmAgY2FsbCBpbiBgcmFzMl9tZW1fZHJ2X3Byb2JlYC4gVGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlcyBiZWluZyBleHBvc2VkIHZpYSBzeXNmcy4gVGhpcyBpcyBncmVhdCwgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhvc2Ugc3lzZnMgZmlsZXMgdG8gdHJpZ2dlciB0aGUgc2NydWIgb3BlcmF0aW9ucy4gSSdtIHNlZWluZyB0aGUgZmlsZXMgYXJlOiBgL3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kYCwgYC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1Ylgvc2l6ZWAsIGAvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2FkZHJgLCBgL3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uYCwgYW5kIGAvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9iYWNrZ3JvdW5kYC5cblxuVGhlIGtleSBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIG9wZXJhdGlvbnMuIExvb2tpbmcgYXQgYHJhczJfc2NydWJfb3BzYCwgSSBzZWUgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBgcmVhZF9hZGRyYCwgYHJlYWRfc2l6ZWAsIGB3cml0ZV9hZGRyYCwgYHdyaXRlX3NpemVgLCBgZ2V0X2VuYWJsZWRfYmdgLCBgc2V0X2VuYWJsZWRfYmdgLCBgZ2V0X2VuYWJsZWRfb2RgLCBgc2V0X2VuYWJsZWRfb2RgLCBgZ2V0X21pbl9jeWNsZWAsIGBnZXRfbWF4X2N5Y2xlYCwgYGdldF9jeWNsZV9kdXJhdGlvbmAsIGFuZCBgc2V0X2N5Y2xlX2R1cmF0aW9uYC4gVGhpcyBpcyBhIGNsZWFyIHRhcmdldCBmb3IgZnV6emluZy4gV2UgY2FuIHByb3ZpZGUgYXJiaXRyYXJ5IHZhbHVlcyB0byB0aGVzZSBmaWxlcyBhbmQgb2JzZXJ2ZSB0aGUgZWZmZWN0cywgc2VlaW5nIGlmIHdlIGNhbiB0cmlnZ2VyIGFueSBtZW1vcnkgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSdtIHRoaW5raW5nIHdlIG5lZWQgYENPTkZJR19BQ1BJX1JBUzJgLCBgQ09ORklHX01FTV9BQ1BJX1JBUzJgLCBhbmQgYENPTkZJR19FREFDX1NDUlVCYC4gTGV0J3MgY29uZmlybSBob3cgdGhlc2UgcmVsYXRlLi4uIEFoYSwgYE1FTV9BQ1BJX1JBUzJgICpkZXBlbmRzKiBvbiBgQUNQSV9SQVMyYCwgYEVEQUNgLCBhbmQgYEVEQUNfU0NSVUJgLiBTbywgZW5zdXJpbmcgdGhhdCBgTUVNX0FDUElfUkFTMmAgaXMgZW5hYmxlZCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSB0aGUgb3RoZXJzLCB3aGljaCBpcyBpZGVhbC4gTGV0IG1lIGdvIGNoZWNrIGBkcml2ZXJzL3Jhcy9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMzAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDc6MzMuNzIwNDQwMjY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjU1MDQ3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTV9BQ1BJX1JBUzJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9yYXMvS2NvbmZpZz0zNz1jb25maWcgUkFTX0ZNUE1cXG4tLVxcbmRyaXZlcnMvcmFzL0tjb25maWctNDgtXFxuZHJpdmVycy9yYXMvS2NvbmZpZzo0OTpjb25maWcgTUVNX0FDUElfUkFTMlxcbmRyaXZlcnMvcmFzL0tjb25maWctNTAtXFx0dHJpc3RhdGUgXFxcIk1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0NzozNi4wODU5NTA3MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDExNTMyNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFJBUyBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgYGRyaXZlcnMvcmFzL0tjb25maWdgIGZpbGUgYW5kIHplcm8gaW4gb24gdGhlIGBNRU1fQUNQSV9SQVMyYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBSQVMsIG9yIFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIGFuZCBTZXJ2aWNlYWJpbGl0eSwgaXMgY3JpdGljYWwsIG9idmlvdXNseS4gQW5kIGBBQ1BJYCBhbG1vc3QgY2VydGFpbmx5IGluZGljYXRlcyB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgcGxhdGZvcm0gaW50ZXJmYWNlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBpbnRlcmVzdGVkIGluIGVycm9yIGhhbmRsaW5nIG9yIG1lbW9yeSBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEFDUEktZGVmaW5lZCBmZWF0dXJlcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgYE1FTV9BQ1BJX1JBUzJgIHJlbGF0ZXMgdG8gdGhlIGJyb2FkZXIgUkFTIGluZnJhc3RydWN0dXJlOyBwZXJoYXBzIGl0J3MgYW4gZW5oYW5jZW1lbnQsIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIG9yIGEgZmFsbGJhY2sgbWVjaGFuaXNtLiBJJ2xsIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGRlcGVuZGVuY2llcyBhbmQgYXNzb2NpYXRlZCBmZWF0dXJlcy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGNvbmZpZ3VyZXMgcmVsaWFiaWxpdHkgZmVhdHVyZXMgYmFzZWQgb24gQUNQSS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzOTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0NzozOS40OTc0ODYyOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9yYXMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRcXHRkZXBlbmRzIG9uIEFNRF9BVEwgXFx1MDAyNlxcdTAwMjYgQUNQSV9BUEVJXFxuICA0MTpcXHRcXHRoZWxwXFxuICA0MjpcXHRcXHQgIFN1cHBvcnQgc2F2aW5nIGFuZCByZXN0b3JpbmcgbWVtb3J5IGVycm9yIGluZm9ybWF0aW9uIGFjcm9zcyByZWJvb3RcXG4gIDQzOlxcdFxcdCAgdXNpbmcgQUNQSSBFUlNUIGFzIHBlcnNpc3RlbnQgc3RvcmFnZS4gRXJyb3IgaW5mb3JtYXRpb24gaXMgc2F2ZWQgd2l0aFxcbiAgNDQ6XFx0XFx0ICB0aGUgVUVGSSBDUEVSIFxcXCJGUlUgTWVtb3J5IFBvaXNvblxcXCIgc2VjdGlvbiBmb3JtYXQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgTWVtb3J5IHdpbGwgYmUgcmV0aXJlZCBkdXJpbmcgYm9vdCB0aW1lIGFuZCBydW4gdGltZSBkZXBlbmRpbmcgb25cXG4gIDQ3OlxcdFxcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXFxuICA0ODpcXHRcXG4gIDQ5OlxcdGNvbmZpZyBNRU1fQUNQSV9SQVMyXFxuICA1MDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcXFwiXFxuICA1MTpcXHRcXHRkZXBlbmRzIG9uIEFDUElfUkFTMlxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBFREFDXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcXG4gIDU0OlxcdFxcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcXG4gIDU3OlxcdFxcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXFxuICA1ODpcXHRcXHQgIGNvbW11bmljYXRlIHdpdGggdGhlIEFDUEktY29tcGxpYW50IHBsYXRmb3JtIGFuZCBwcm92aWRlc1xcbiAgNTk6XFx0XFx0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0NzozOS40OTc2MTg3ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDE2MDk5ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBSZWxpYWJpbGl0eSBGcmFtZXdvcmsqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGBNRU1fQUNQSV9SQVMyYOKApiB0aGF0IHJpbmdzIGEgYmVsbC4gQWgsIHJpZ2h0LCBpdCdzIGRlZmluaXRlbHkgdGllZCB0byBgQUNQSV9SQVMyYCwgYW5kIG9mIGNvdXJzZSwgdGhhdCBpbXBsaWVzIGEgbGluayB0byBgRURBQ2AgYW5kIGBFREFDX1NDUlVCYC4gU2VlbXMgbGlrZSBhIHByZXR0eSBmb2N1c2VkIGFyZWEg4oCTIG1lbW9yeSBlcnJvciBjb3JyZWN0aW9uIHdpdGhpbiB0aGUgQUNQSSBmcmFtZXdvcmsuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBhbnl0aGluZyBlbHNlLCBJIHNob3VsZCBjaGVjayB0aGUgc291cmNlLiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIGdldCB0aGUgS2NvbmZpZyBmaWxlIGZvciBBQ1BJLCB0aGF0IHNob3VsZCB0ZWxsIG1lIHdoYXQgdGhhdCBgQUNQSV9SQVMyYCBzeW1ib2wgaXMgYWxsIGFib3V0LiBIb3BlZnVsbHkgSSBjYW4gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGRlcGVuZGVuY2llcyB0aGlzIHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjQ3OjQzLjUxMzcyMjIzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYWNwaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoaXMgZmlsZSBpbXBsZW1lbnRzIGNvbW1vbiBmdW5jdGlvbmFsaXR5XFxuIDI5MTpcXHRcXHQgIHRvIHBhcnNlIENQUEMgdGFibGVzIGFzIGRlc2NyaWJlZCBpbiB0aGUgQUNQSSA1LjErIHNwZWMuIFRoZVxcbiAyOTI6XFx0XFx0ICByb3V0aW5lcyBpbXBsZW1lbnRlZCBhcmUgbWVhbnQgdG8gYmUgdXNlZCBieSBvdGhlclxcbiAyOTM6XFx0XFx0ICBkcml2ZXJzIHRvIGNvbnRyb2wgQ1BVIHBlcmZvcm1hbmNlIHVzaW5nIENQUEMgc2VtYW50aWNzLlxcbiAyOTQ6XFx0XFx0ICBJZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgQ1BQQyBpbiBmaXJtd2FyZSxcXG4gMjk1OlxcdFxcdCAgbGVhdmUgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuIDI5NjpcXHRcXG4gMjk3OlxcdGNvbmZpZyBBQ1BJX1JBUzJcXG4gMjk4OlxcdFxcdGJvb2wgXFxcIkFDUEkgUkFTMiBkcml2ZXJcXFwiXFxuIDI5OTpcXHRcXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbiAzMDA6XFx0XFx0ZGVwZW5kcyBvbiBNQUlMQk9YXFxuIDMwMTpcXHRcXHRkZXBlbmRzIG9uIFBDQ1xcbiAzMDI6XFx0XFx0aGVscFxcbiAzMDM6XFx0XFx0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxcbiAzMDQ6XFx0XFx0ICBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIHN1Y2ggYXMgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy5cXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxcbiAzMDc6XFx0XFxuIDMwODpcXHRjb25maWcgQUNQSV9QUk9DRVNTT1JcXG4gMzA5OlxcdFxcdHRyaXN0YXRlIFxcXCJQcm9jZXNzb3JcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjQ3OjQzLjUxNDkxODY5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDIxNTM3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSByZXF1aXJlbWVudHMsIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGlzIHNwYWNlOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgUmVsaWFiaWxpdHksIEF2YWlsYWJpbGl0eSwgYW5kIFNlcnZpY2VhYmlsaXR5IFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyByZWxpYWJpbGl0eSBhbmQgUkFTIHN0dWZmLiBJIHNlZSBhIGZldyBrZXkgZWxlbWVudHMganVtcGluZyBvdXQ6IGBBQ1BJX1JBUzJgLCBgTUVNX0FDUElfUkFTMmAsIGBFREFDX1NDUlVCYCwgYFBDQ2AsIGFuZCBgTUFJTEJPWGAuIFRoZXNlIGFsbCBwb2ludCB0byBkaWZmZXJlbnQgbGV2ZWxzIG9mIGVycm9yIGRldGVjdGlvbiwgY29ycmVjdGlvbiwgYW5kIGhhbmRsaW5nIHdpdGhpbiB0aGUgc3lzdGVtLiBgQUNQSV9SQVMyYCBhbmQgYE1FTV9BQ1BJX1JBUzJgIGxpa2VseSBhZGRyZXNzIGZpcm13YXJlLWJhc2VkIGFuZCBtZW1vcnktc3BlY2lmaWMgUkFTIGNhcGFiaWxpdGllcywgd2hpY2ggYXJlIGZ1bmRhbWVudGFsLiBgUENDYCBwcm9iYWJseSByZWZlcnMgdG8gUGxhdGZvcm0gQ29udHJvbCBDb21wb25lbnQsIHN1Z2dlc3Rpbmcgd2UncmUgZGVhbGluZyB3aXRoIGFkdmFuY2VkIHBsYXRmb3JtIG1hbmFnZW1lbnQgZmVhdHVyZXMuIEFuZCB0aGUgYE1BSUxCT1hgIGluZGljYXRlcyBhIG1lY2hhbmlzbSBmb3IgaW50ZXItcHJvY2Vzc29yIG9yIGludGVyLW1vZHVsZSBjb21tdW5pY2F0aW9uIHNwZWNpZmljYWxseSBmb3IgUkFTIGV2ZW50cy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGNhcGFiaWxpdGllcyBvZiB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBxdWlja2x5OiBJcyBgRURBQ19TQ1JVQmAgYWN0dWFsbHkgYSBjb25maWd1cmFibGUgb3B0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZC9jb25maWcgb3B0aW9ucyBmb3IgYSBzY3J1YiBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIHdoYXQgY2FuIGJlIGN1c3RvbWl6ZWQgYW5kIGlmIHdlIGNhbiBtb2RpZnkgdGhlIHdheSB0aGUgRURBQyBzY3J1YiB3b3Jrcy4gSXMgaXQganVzdCBhIGRyaXZlciwgb3IgYSBjb21wcmVoZW5zaXZlIG1lY2hhbmlzbSB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBpbiBpdHMgY29udGV4dD8gR2V0dGluZyB0aGlzIGNsYXJpdHkgaXMga2V5IHRvIGRlY2lkaW5nIGhvdyB3ZSBjYW4gaW50ZWdyYXRlIGFsbCB0aGVzZSBjb21wb25lbnRzIGVmZmVjdGl2ZWx5LiBJdCdzIGEgZm91bmRhdGlvbmFsIHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUxMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDc6NDkuOTM2NDU4OTA5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA5NjgzNTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFREFDX1NDUlVCXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZWRhYy9LY29uZmlnPTQ3PWNvbmZpZyBFREFDX0dIRVNcXG4tLVxcbmRyaXZlcnMvZWRhYy9LY29uZmlnLTY5LVxcbmRyaXZlcnMvZWRhYy9LY29uZmlnOjcwOmNvbmZpZyBFREFDX1NDUlVCXFxuZHJpdmVycy9lZGFjL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRURBQyBzY3J1YiBmZWF0dXJlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0Nzo1Mi42NDYxNDgxOTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3MDE0OTMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFN5c3RlbSBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMsIGFuZCB5ZXAsICpFREFDX1NDUlVCKi4uLiB0aGF0J3MgZGVmaW5pdGVseSBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gR290IGl0LiBOb3csIHdoYXQncyBuZXh0PyBMZXQgbWUgc2hpZnQgbXkgZm9jdXMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCAqUENDKi4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBnbyBmcm9tIGhlcmUsIGxldCdzIGV4cGxvcmUgdGhhdCBzZXR0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk1OSwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjQ3OjU1LjQxNjMwMTAzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzOTk4MTMyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUENDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWFpbGJveC9LY29uZmlnPTExND1jb25maWcgUk9DS0NISVBfTUJPWFxcbi0tXFxuZHJpdmVycy9tYWlsYm94L0tjb25maWctMTIyLVxcbmRyaXZlcnMvbWFpbGJveC9LY29uZmlnOjEyMzpjb25maWcgUENDXFxuZHJpdmVycy9tYWlsYm94L0tjb25maWctMTI0LVxcdGJvb2wgXFxcIlBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCBEcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9LY29uZmlnLTUtXFxuZHJpdmVycy9wY21jaWEvS2NvbmZpZzo2Om1lbnVjb25maWcgUENDQVJEXFxuZHJpdmVycy9wY21jaWEvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJQQ0NhcmQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9wY21jaWEvS2NvbmZpZz0yMTM9Y29uZmlnIEVMRUNUUkFfQ0ZcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL0tjb25maWctMjE5LVxcbmRyaXZlcnMvcGNtY2lhL0tjb25maWc6MjIwOmNvbmZpZyBQQ0NBUkRfTk9OU1RBVElDXFxuZHJpdmVycy9wY21jaWEvS2NvbmZpZy0yMjEtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0Nzo1OS43NTYyODcwMjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4NjkwMjg1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFRhcmdldCBmb3IgRnV6emluZzogUENDIGFuZCBSQVMyKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYFBDQ2AgdGhpbmcuIEZpcnN0IHRoaW5ncyBmaXJzdDogY29uZmlybSB0aGF0IGBQQ0NgIGlzIGluZGVlZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBzZWUgaXQgaXMgaW4gYGRyaXZlcnMvbWFpbGJveC9LY29uZmlnYC4gUmlnaHQsIHNvIHRvIGVuYWJsZSB0aGUgYFBDQ2AgZnVuY3Rpb25hbGl0eSwgSSdsbCBuZWVkIHRvIGVuYWJsZSB0aGVzZSBjb25maWdzOiBgQUNQSV9SQVMyYCwgYE1FTV9BQ1BJX1JBUzJgLCBgRURBQ19TQ1JVQmAgYW5kIGBQQ0NgLCBhbmQgcHJvYmFibHkgYE1BSUxCT1hgIGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgaXQgbG9va3MgbGlrZSBpdCdzIGEgY29yZSBzdWJzeXN0ZW0uXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucy4gTG9va2luZyBhdCBgZHJpdmVycy9hY3BpL3JhczIuY2AsIHRoZXJlIGFyZSB0aGVzZSBuZXcgZnVuY3Rpb25zOiBgcmFzMl9zZW5kX3BjY19jbWRgLCBgcmVnaXN0ZXJfcGNjX2NoYW5uZWxgLCBgYWRkX2F1eF9kZXZpY2VgLCBgcGFyc2VfcmFzMl90YWJsZWAsIGFuZCBgYWNwaV9yYXMyX2luaXRgLiBUaGVuLCBpbiBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLCBJIHNlZSBhIGxhcmdlciBzZXQgb2YgaW50ZXJlc3Rpbmcgcm91dGluZXM6IGByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0YCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlYCwgYHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGVgLCBgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkYCwgYHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGVgLCBgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHJgLCBgcmFzMl9od19zY3J1Yl9yZWFkX3NpemVgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZWAsIGByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnYCwgYF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZ2AsIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2RgLCBgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZGAsIGFuZCBgcmFzMl9tZW1fZHJ2X3Byb2JlYC5cblxuQWxyaWdodCwgdGltZSB0byByZWZpbmUgdGhlIGF0dGFjayBzdXJmYWNlIGZvciBmdXp6aW5nLiBJbml0aWFsbHksIEkgdGhpbmsgdGhlIGNyaXRpY2FsIG9uZXMgYXJlOiBgcmFzMl9zZW5kX3BjY19jbWRgLCBgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZWAsIGByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZ2AsIGByYXMyX3NjcnViX21vbml0b3JfdGhyZWFkYCwgYHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGVgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZWAsIGBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmdgLCBgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZGAsIGByYXMyX21lbV9kcnZfcHJvYmVgLCBhbmQgYHBhcnNlX3JhczJfdGFibGVgLlxuXG5IYW5nIG9uLi4uIEkgc2VlIGByYXMyX3NlbmRfcGNjX2NtZGAgaXMgZXhwb3J0ZWQuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBzaG91bGQgY2hlY2sgYGRyaXZlcnMvZWRhYy9zY3J1Yi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXcgc3lzZnMgYXR0cmlidXRlcyBvciBhbnl0aGluZyBlbHNlIHRvIGNvbnNpZGVyLiBTZWVtcyBsaWtlIHRoZXJlJ3MgYSBzaW1wbGUgYWRkaXRpb24gb2YgYGVuYWJsZV9kZW1hbmRgIHRvIHRoZSBzeXNmcyBhdHRyaWJ1dGVzIGFuZCBhIG1vZGlmaWNhdGlvbiBvZiBgc2NydWJfYXR0cl92aXNpYmxlYCwgbm90aGluZyBtYWpvci5cblxuU28sIGxldCBtZSByZS1ldmFsdWF0ZSB0aGUgdGFyZ2V0IGxpc3QsIGFmdGVyIHRoaXMgcXVpY2sgc2NhbiBvZiB0aGUgYGVkYWNgIHNpZGU6IGByYXMyX3NlbmRfcGNjX2NtZGAsIGBwYXJzZV9yYXMyX3RhYmxlYCwgYHJhczJfbWVtX2Rydl9wcm9iZWAsIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCwgYHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nYCwgYHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWRgLCBgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZWAsIGByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHJgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplYCwgYF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZ2AsIGFuZCBgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI5MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0ODoxMS42MjUzMTg1OTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Njc1ODI0NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWNwaV9yYXMyX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY3BpL2J1cy5jPTE1NzY9c3RhdGljIGludCBfX2luaXQgYWNwaV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2FjcGkvYnVzLmMtMTYxMy1cXHRhY3BpX3Zpb3RfaW5pdCgpO1xcbmRyaXZlcnMvYWNwaS9idXMuYzoxNjE0OlxcdGFjcGlfcmFzMl9pbml0KCk7XFxuZHJpdmVycy9hY3BpL2J1cy5jLTE2MTUtXFxuLS1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jPTQxOT1zdGF0aWMgaW50IHBhcnNlX3JhczJfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWIpXFxuLS1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTQ3Ny0vKipcXG5kcml2ZXJzL2FjcGkvcmFzMi5jOjQ3ODogKiBhY3BpX3JhczJfaW5pdCAtIFJBUzIgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDc5LSAqXFxuLS1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTQ4Ni0gKi9cXG5kcml2ZXJzL2FjcGkvcmFzMi5jOjQ4Nzp2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDg4LXtcXG4tLVxcbmluY2x1ZGUvYWNwaS9yYXMyLmg9NTc9c3RydWN0IHJhczJfbWVtX2N0eCB7XFxuLS1cXG5pbmNsdWRlL2FjcGkvcmFzMi5oLTc5LSNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXFxuaW5jbHVkZS9hY3BpL3JhczIuaDo4MDp2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKTtcXG5pbmNsdWRlL2FjcGkvcmFzMi5oLTgxLWludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XFxuaW5jbHVkZS9hY3BpL3JhczIuaC04Mi0jZWxzZVxcbmluY2x1ZGUvYWNwaS9yYXMyLmg6ODM6c3RhdGljIGlubGluZSB2b2lkIGFjcGlfcmFzMl9pbml0KHZvaWQpIHsgfVxcbmluY2x1ZGUvYWNwaS9yYXMyLmgtODQtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjQ4OjE0LjM5MjkwNjIyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc5NDEwOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBBQ1BJIFJBUzIgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBuZXcgQUNQSSBSQVMyIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBicmFpbiBzdGFydHMgY2h1cm5pbmcuIEVzc2VudGlhbGx5LCBpdCdzIGludHJvZHVjaW5nIGEgd2F5IHRvIGhhbmRsZSBtZW1vcnkgc2NydWJiaW5nIHRocm91Z2ggQUNQSSBhbmQgZXhwb3NlIGl0IHRocm91Z2ggc3lzZnMuIEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyByaWdodCBhd2F5LiBUaGlzIGRyaXZlciBwYXJzZXMgdGhlIFJBUzIgQUNQSSB0YWJsZSwgd2hpY2ggaXMgYSBrZXkgc3RydWN0dXJlLiBJdCB0aGVuIHJlZ2lzdGVycyB0aGVzZSBhdXhpbGlhcnkgZGV2aWNlcywgYW5kIGEgYmluZGluZyBkcml2ZXIgaXMgaW5jbHVkZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtLCBleHBvc2luZyBFREFDIHNjcnViIGludGVyZmFjZXMgZm9yIGNvbnRyb2wgdGhyb3VnaCB0aGUgUENDLlxuXG5UaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoaXMgc2V0dXAgaXMgKnJlYWNoYWJsZSogYnkgc3l6a2FsbGVyLiBTeXprYWxsZXIgY2FuIGluamVjdCBjdXN0b20gQUNQSSB0YWJsZXMsIGluY2x1ZGluZyBSQVMyIGFuZCBQQ0NULCBhbmQgaXQgY2FuIGludGVyYWN0IHdpdGggdGhlIHN5c2ZzIGludGVyZmFjZXMuIFRoaXMgaXMgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzLCB0aGV5J3JlIHRoZSBhdHRhY2sgc3VyZmFjZTogYHBhcnNlX3JhczJfdGFibGVgLCBgcmFzMl9zZW5kX3BjY19jbWRgLCBgcmFzMl9tZW1fZHJ2X3Byb2JlYCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcmAsIGByYXMyX2h3X3NjcnViX3dyaXRlX3NpemVgLCBgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYW5kIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kYC4gRWFjaCBvbmUgb2YgdGhlc2UsIHBhcnRpY3VsYXJseSB0aGUgKndyaXRlKiBvcGVyYXRpb25zLCBuZWVkcyBtZXRpY3Vsb3VzIHNjcnV0aW55LlxuXG5UaGUgY29uZmlndXJhdGlvbnMgdG8gbG9vayBvdXQgZm9yIGFyZSBgQUNQSV9SQVMyYCwgYE1FTV9BQ1BJX1JBUzJgLCBgRURBQ19TQ1JVQmAsIGFuZCBgUENDYC4gVGhlc2UgYXJlIHRoZSBnYXRlcyBhbmQgaW5kaWNhdG9ycyB0byBtYWtlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgcmlnaHQgZW52aXJvbm1lbnQuXG5cbkFscmlnaHQsIHRpbWUgdG8gc2V0IHNvbWUgZXhwZWN0YXRpb25zIGFuZCByZXN1bHRzLiBUaGlzIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYzNywiT3V0cHV0VG9rZW5zIjozMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDg6MjEuOTcyMzE5ODI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MTU2NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBQ1BJX1JBUzJcIixcbiAgICBcIk1FTV9BQ1BJX1JBUzJcIixcbiAgICBcIkVEQUNfU0NSVUJcIixcbiAgICBcIlBDQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhcnNlX3JhczJfdGFibGVcIixcbiAgICBcInJhczJfc2VuZF9wY2NfY21kXCIsXG4gICAgXCJyYXMyX21lbV9kcnZfcHJvYmVcIixcbiAgICBcInJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVcIixcbiAgICBcInJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nXCIsXG4gICAgXCJyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3dyaXRlX2FkZHJcIixcbiAgICBcInJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZVwiLFxuICAgIFwiX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBQ1BJIFJBUzIgZHJpdmVyIHRoYXQgcGFyc2VzIHRoZSBSQVMyIEFDUEkgdGFibGUgYW5kIHJlZ2lzdGVycyBhdXhpbGlhcnkgZGV2aWNlcyBmb3IgbWVtb3J5IHNjcnViYmluZy4gSXQgYWxzbyBhZGRzIGEgZHJpdmVyIHRoYXQgYmluZHMgdG8gdGhlc2UgYXV4aWxpYXJ5IGRldmljZXMgYW5kIGV4cG9zZXMgRURBQyBzY3J1YiBzeXNmcyBpbnRlcmZhY2VzIHRvIGNvbnRyb2wgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZyB2aWEgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpLiBTaW5jZSBzeXprYWxsZXIgY2FuIGluamVjdCBBQ1BJIHRhYmxlcyAoaW5jbHVkaW5nIFJBUzIgYW5kIFBDQ1QpIGFuZCBpbnRlcmFjdCB3aXRoIHN5c2ZzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBQ1BJX1JBUzJcIixcbiAgICBcIk1FTV9BQ1BJX1JBUzJcIixcbiAgICBcIkVEQUNfU0NSVUJcIixcbiAgICBcIlBDQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhcnNlX3JhczJfdGFibGVcIixcbiAgICBcInJhczJfc2VuZF9wY2NfY21kXCIsXG4gICAgXCJyYXMyX21lbV9kcnZfcHJvYmVcIixcbiAgICBcInJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVcIixcbiAgICBcInJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nXCIsXG4gICAgXCJyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3dyaXRlX2FkZHJcIixcbiAgICBcInJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZVwiLFxuICAgIFwiX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBQ1BJIFJBUzIgZHJpdmVyIHRoYXQgcGFyc2VzIHRoZSBSQVMyIEFDUEkgdGFibGUgYW5kIHJlZ2lzdGVycyBhdXhpbGlhcnkgZGV2aWNlcyBmb3IgbWVtb3J5IHNjcnViYmluZy4gSXQgYWxzbyBhZGRzIGEgZHJpdmVyIHRoYXQgYmluZHMgdG8gdGhlc2UgYXV4aWxpYXJ5IGRldmljZXMgYW5kIGV4cG9zZXMgRURBQyBzY3J1YiBzeXNmcyBpbnRlcmZhY2VzIHRvIGNvbnRyb2wgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZyB2aWEgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpLiBTaW5jZSBzeXprYWxsZXIgY2FuIGluamVjdCBBQ1BJIHRhYmxlcyAoaW5jbHVkaW5nIFJBUzIgYW5kIFBDQ1QpIGFuZCBpbnRlcmFjdCB3aXRoIHN5c2ZzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown2f2f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 18:29:02 +0000 UTC FinishedAt: 2026-07-10 18:48:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ACPI_RAS2", "MEM_ACPI_RAS2", "EDAC_SCRUB", "PCC" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ACPI_RAS2", "MEM_ACPI_RAS2", "EDAC_SCRUB", "PCC" ], "series_id": "5040b478-7bdb-4326-a6b4-5685754ec2d4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "parse_ras2_table", "ras2_send_pcc_cmd", "ras2_mem_drv_probe", "ras2_update_patrol_scrub_params_cache", "ras2_get_demand_scrub_running", "ras2_scrub_monitor_thread", "ras2_hw_scrub_cycle_write", "ras2_hw_scrub_write_addr", "ras2_hw_scrub_write_size", "__ras2_hw_scrub_set_enabled_bg", "ras2_hw_scrub_set_enabled_od" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FDUElfUkFTMiYjMzQ7LAogICAgJiMzNDtNRU1fQUNQSV9SQVMyJiMzNDssCiAgICAmIzM0O0VEQUNfU0NSVUImIzM0OywKICAgICYjMzQ7UENDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFyc2VfcmFzMl90YWJsZSYjMzQ7LAogICAgJiMzNDtyYXMyX3NlbmRfcGNjX2NtZCYjMzQ7LAogICAgJiMzNDtyYXMyX21lbV9kcnZfcHJvYmUmIzM0OywKICAgICYjMzQ7cmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZSYjMzQ7LAogICAgJiMzNDtyYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyYjMzQ7LAogICAgJiMzNDtyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUmIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl93cml0ZV9hZGRyJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSYjMzQ7LAogICAgJiMzNDtfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcmIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEFDUEkgUkFTMiBkcml2ZXIgdGhhdCBwYXJzZXMgdGhlIFJBUzIgQUNQSSB0YWJsZSBhbmQgcmVnaXN0ZXJzIGF1eGlsaWFyeSBkZXZpY2VzIGZvciBtZW1vcnkgc2NydWJiaW5nLiBJdCBhbHNvIGFkZHMgYSBkcml2ZXIgdGhhdCBiaW5kcyB0byB0aGVzZSBhdXhpbGlhcnkgZGV2aWNlcyBhbmQgZXhwb3NlcyBFREFDIHNjcnViIHN5c2ZzIGludGVyZmFjZXMgdG8gY29udHJvbCBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nIHZpYSBQQ0MgKFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCkuIFNpbmNlIHN5emthbGxlciBjYW4gaW5qZWN0IEFDUEkgdGFibGVzIChpbmNsdWRpbmcgUkFTMiBhbmQgUENDVCkgYW5kIGludGVyYWN0IHdpdGggc3lzZnMsIHRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgM2JlY2I0ZjJiNzIzNDNiYjc1NGYxNGM2MTlkYjM1YzdhNGYzODMwNVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDE4OjQ3OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuaW5kZXggYWI2MDE0NzQzZGE1NjguLjJiODc0ZTAzMzYyMzM0IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbkBAIC0yMCwxMSAmIzQzOzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcdDYuMTVcbiBDb250YWN0Olx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcbiBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4tXHRcdGZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy5cbi1cdFx0VGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuXG4tXG4tXHRcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcbi1cdFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXG4mIzQzO1x0XHRmb3IgZGVtYW5kIHNjcnViYmluZy5cbiBcbiBXaGF0Olx0XHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL3NpemVcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG5AQCAtMzQsNiAmIzQzOzMwLDE0IEBAIERlc2NyaXB0aW9uOlxuIFx0XHQoUlcpIFRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4gXHRcdChvbi1kZW1hbmQgc2NydWJiaW5nKS5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXG4mIzQzO0RhdGU6XHRcdEphbiAyMDI2XG4mIzQzO0tlcm5lbFZlcnNpb246XHQ2LjE5XG4mIzQzO0NvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuJiM0MztEZXNjcmlwdGlvbjpcbiYjNDM7XHRcdChSVykgU3RhcnQvU3RvcCBkZW1hbmQgc2NydWJiaW5nLiBUaGUgc3RvcCBvcGVyYXRpb24gaXNcbiYjNDM7XHRcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXG4mIzQzO1xuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmRcbiBEYXRlOlx0XHRNYXJjaCAyMDI1XG4gS2VybmVsVmVyc2lvbjpcdDYuMTVcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuaW5kZXggMmNmYTc0ZmExZmZkMmYuLjU2MmJmZDZmZjYzMDUxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdFxuQEAgLTM0MCwzICYjNDM7MzQwLDczIEBAIGNvbnRyb2xsZXIgb3IgcGxhdGZvcm0gd2hlbiB1bmV4cGVjdGVkbHkgaGlnaCBlcnJvciByYXRlcyBhcmUgZGV0ZWN0ZWQuXG4gXG4gU3lzZnMgZmlsZXMgZm9yIHNjcnViYmluZyBhcmUgZG9jdW1lbnRlZCBpblxuIGBEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtZWNzYFxuJiM0MztcbiYjNDM7My4gQUNQSSBSQVMyIEhhcmR3YXJlLWJhc2VkIE1lbW9yeSBTY3J1YmJpbmdcbiYjNDM7XG4mIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxuJiM0MztcbiYjNDM7My4xLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZ1xuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2VuYWJsZV9kZW1hbmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMS4yLiBRdWVyeSB3aGF0IGlzIGRldmljZSBkZWZhdWx0L2N1cnJlbnQgc2NydWIgY3ljbGUgc2V0dGluZy5cbiYjNDM7XG4mIzQzO0FwcGxpY2FibGUgdG8gYm90aCBkZW1hbmQgYW5kIGJhY2tncm91bmQgc2NydWJiaW5nLiBUaGUgdW5pdCBvZiB0aGVcbiYjNDM7c2NydWIgY3ljbGUgaXMgc2Vjb25kcy5cbiYjNDM7XG4mIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszNjAwMFxuJiM0MztcbiYjNDM7My4xLjMuIFF1ZXJ5IHRoZSByYW5nZSBvZiBkZXZpY2Ugc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGZvciBhIG1lbW9yeSByZWdpb24uXG4mIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21pbl9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7MzYwMFxuJiM0MztcbiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7ODY0MDBcbiYjNDM7XG4mIzQzOzMuMS40LiBQcm9ncmFtIHNjcnViYmluZyBmb3IgdGhlIG1lbW9yeSByZWdpb24gaW4gUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGV2ZXJ5XG4mIzQzOzQzMjAwIHNlY29uZHMgKGhhbGYgYSBkYXkpLlxuJiM0MztcbiYjNDM7IyBlY2hvIDQzMjAwIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuJiM0MztcbiYjNDM7My4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxuJiM0MztcbiYjNDM7U2V0ICYjMzk7YWRkciYjMzk7IG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViLlxuJiM0MztcbiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXG4mIzQzO1xuJiM0MztTZXQgJiMzOTtzaXplJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMHgyMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXG4mIzQzO1xuJiM0MzszLjEuNi4gU3RhcnQgJiMzOTtkZW1hbmQgc2NydWJiaW5nJiMzOTsuXG4mIzQzO1xuJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuJiM0Mzt3aWxsIGJlIHN0b3BwZWQgYW5kIHRoZW4gYXV0b21hdGljYWxseSByZXN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyB3aGVuIHRoZVxuJiM0MztkZW1hbmQgc2NydWIgaGFzIGNvbXBsZXRlZC5cbiYjNDM7XG4mIzQzOyMgZWNobyAxIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuJiM0MztcbiYjNDM7My4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxuJiM0MztcbiYjNDM7My4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcbiYjNDM7XG4mIzQzOzBcbiYjNDM7XG4mIzQzOzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcbiYjNDM7c2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXG4mIzQzO1xuJiM0MzsjIGVjaG8gMjE2MDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4mIzQzO1xuJiM0MzszLjIuMy4gU3RhcnQgJiMzOTtiYWNrZ3JvdW5kIHNjcnViYmluZyYjMzk7LlxuJiM0MztcbiYjNDM7IyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbmluZGV4IGYxNjVkMTRjZjYxYTNhLi41MzlmZjE0M2NjYzUyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuQEAgLTI5NCw2ICYjNDM7Mjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXG4gXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiBcbiYjNDM7Y29uZmlnIEFDUElfUkFTMlxuJiM0MztcdGJvb2wgXCYjMzQ7QUNQSSBSQVMyIGRyaXZlclwmIzM0O1xuJiM0MztcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4mIzQzO1x0ZGVwZW5kcyBvbiBNQUlMQk9YXG4mIzQzO1x0ZGVwZW5kcyBvbiBQQ0NcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxuJiM0MztcdCAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuXG4mIzQzO1xuJiM0MztcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cbiYjNDM7XG4gY29uZmlnIEFDUElfUFJPQ0VTU09SXG4gXHR0cmlzdGF0ZSBcJiMzNDtQcm9jZXNzb3JcJiMzNDtcbiBcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbkBAIC0xMDUsNiAmIzQzOzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpXHQmIzQzOz0gZWNfc3lzLm9cbiBvYmotJChDT05GSUdfQUNQSV9CR1JUKVx0XHQmIzQzOz0gYmdydC5vXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXHQmIzQzOz0gY3BwY19hY3BpLm9cbiBvYmotJChDT05GSUdfQUNQSV9TUENSX1RBQkxFKVx0JiM0Mzs9IHNwY3Iub1xuJiM0MztvYmotJChDT05GSUdfQUNQSV9SQVMyKVx0XHQmIzQzOz0gcmFzMi5vXG4gb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgJiM0Mzs9IGFjcGlfZGJnLm9cbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcdCYjNDM7PSBwcHR0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcdCYjNDM7PSBwZnJfdXBkYXRlLm8gcGZyX3RlbGVtZXRyeS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jXG5pbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuY1xuQEAgLTMxLDYgJiM0MzszMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjYWNwaS9hcGVpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdXNwZW5kLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm10LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gXG5AQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuIFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XG4gXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XG4gXHRhY3BpX3Zpb3RfaW5pdCgpO1xuJiM0MztcdGFjcGlfcmFzMl9pbml0KCk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmI2NjcwMGUwZTdkMzUyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXG5AQCAtMCwwICYjNDM7MSw1MDIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBTdXBwb3J0IGZvciBSQVMyIHRhYmxlIC0gQUNQSSA2LjUgU3BlY2lmaWNhdGlvbiwgc2VjdGlvbiA1LjIuMjEsIHdoaWNoXG4mIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeVxuJiM0MzsgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXG4mIzQzOyAqIFBDQyBjaGFubmVsIHN1YnNwYWNlIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyN1bmRlZiBwcl9mbXRcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtBQ1BJIFJBUzI6IFwmIzM0OyBmbXRcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXhwb3J0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3RpbWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3BjYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FjcGkvcmFzMi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbiYjNDM7ICogQG1ib3hfY2xpZW50Olx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxuJiM0MzsgKiBAcGNjX2NoYW46XHRcdFBvaW50ZXIgdG8gc3RydWN0IHBjY19tYm94X2NoYW5cbiYjNDM7ICogQGNvbW1fYWRkcjpcdFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxuJiM0MzsgKiBAZWxlbTpcdFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xuJiM0MzsgKiBAcGNjX2xvY2s6XHRcdFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuJiM0MzsgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIEBkZWFkbGluZV91czpcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xuJiM0MzsgKlx0XHRcdGZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uXG4mIzQzOyAqIEBwY2NfbXBhcjpcdFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXG4mIzQzOyAqIEBwY2NfbXJ0dDpcdFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXG4mIzQzOyAqXHRcdFx0T1MgbXVzdCB3YWl0IGFmdGVyIGNvbXBsZXRpb24gb2YgYSBQQ0MgY29tbWFuZCBiZWZvcmVcbiYjNDM7ICpcdFx0XHRpc3N1aW5nIG5leHQgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxuJiM0MzsgKiBAbGFzdF9tcGFyX3Jlc2V0Olx0VGltZSBvZiBsYXN0IE1QQVIgY291bnQgcmVzZXRcbiYjNDM7ICogQG1wYXJfY291bnQ6XHRcdE1QQVIgY291bnRcbiYjNDM7ICogQHBjY19pZDpcdFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcbiYjNDM7ICogQGxhc3RfY21kOlx0XHRMYXN0IFBDQyBjb21tYW5kXG4mIzQzOyAqIEBrcmVmOlx0XHRrcmVmIG9iamVjdFxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IHJhczJfc3NwY2Mge1xuJiM0MztcdHN0cnVjdCBtYm94X2NsaWVudFx0XHRtYm94X2NsaWVudDtcbiYjNDM7XHRzdHJ1Y3QgcGNjX21ib3hfY2hhblx0XHQqcGNjX2NoYW47XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWRcdFx0ZWxlbTtcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwY2NfbG9jaztcbiYjNDM7XHR1NjRcdFx0XHRcdGRlYWRsaW5lX3VzO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcGFyO1xuJiM0MztcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcnR0O1xuJiM0MztcdGt0aW1lX3RcdFx0XHRcdGxhc3RfY21kX2NtcGxfdGltZTtcbiYjNDM7XHRrdGltZV90XHRcdFx0XHRsYXN0X21wYXJfcmVzZXQ7XG4mIzQzO1x0aW50XHRcdFx0XHRtcGFyX2NvdW50O1xuJiM0MztcdGludFx0XHRcdFx0cGNjX2lkO1xuJiM0MztcdHUxNlx0XHRcdFx0bGFzdF9jbWQ7XG4mIzQzO1x0c3RydWN0IGtyZWZcdFx0XHRrcmVmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQXJiaXRyYXJ5IHJldHJpZXMgZm9yIFBDQyBjb21tYW5kcyBiZWNhdXNlIHRoZSByZW1vdGUgcHJvY2Vzc29yIGNvdWxkIGJlXG4mIzQzOyAqIG11Y2ggc2xvd2VyIHRvIHJlcGx5LiBLZWVwIGl0IGhpZ2ggZW5vdWdoIHRvIGNvdmVyIGVtdWxhdG9ycyB3aGVyZSB0aGVcbiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIFBDQ19OVU1fUkVUUklFUyA2MDBVTExcbiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxuJiM0MzsjZGVmaW5lIFBDQ19NSU5fUE9MTF9VU0VDUyAzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXG4mIzQzOyNkZWZpbmUgUkFTMl9GRUFUX1RZUEVfTUVNT1JZIDB4MDBcbiYjNDM7XG4mIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cbiYjNDM7c3RhdGljIERFRklORV9NVVRFWChyYXMyX3BjY19saXN0X2xvY2spO1xuJiM0MztzdGF0aWMgTElTVF9IRUFEKHJhczJfc3NwY2MpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBjaGVja19wY2NfY2hhbihzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4mIzQzO1x0dTMyIGNhcF9zdGF0dXM7XG4mIzQzO1x0dTE2IHN0YXR1cztcbiYjNDM7XHRpbnQgcmM7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxuJiM0MztcdCAqIHBsYXRmb3JtIGFuZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGNvbW1hbmQgY29tcGxldGlvbiBiaXQgd2hlblxuJiM0MztcdCAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUG9sbCBQQ0Mgc3RhdHVzIHJlZ2lzdGVyIGV2ZXJ5IFBDQ19NSU5fUE9MTF9VU0VDUyBmb3IgbWF4aW11bSBvZlxuJiM0MztcdCAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGVcbiYjNDM7XHQgKiBiaXQgaXMgc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMsIHN0YXR1cyxcbiYjNDM7XHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG4mIzQzO1x0XHRcdFx0XHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzKTtcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHByX3dhcm4oXCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XG4mIzQzO1x0XHRwcl93YXJuKFwmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCk7XG4mIzQzO1x0XHRzdGF0dXMgXHUwMDI2PSB+UENDX1NUQVRVU19FUlJPUjtcbiYjNDM7XHRcdGlvd3JpdGUxNihzdGF0dXMsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbiYjNDM7XHRcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogRW5zdXJlIGdldCB1cGRhdGVkIFBDQyBzdGF0dXMgKi9cbiYjNDM7XHRybWIoKTtcbiYjNDM7XHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcdHN3aXRjaCAoY2FwX3N0YXR1cykge1xuJiM0MztcdGNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxuJiM0MztcdFx0cmMgPSAtRVBFUk07XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9CVVNZOlxuJiM0MztcdFx0cmMgPSAtRUJVU1k7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XG4mIzQzO1x0Y2FzZSBBQ1BJX1JBUzJfQUJPUlRFRDpcbiYjNDM7XHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XG4mIzQzO1x0XHRyYyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmMgPSAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXG4mIzQzOyAqIEByYXMyX2N0eDpcdHBvaW50ZXIgdG8gdGhlIFJBUzIgY29udGV4dCBzdHJ1Y3R1cmVcbiYjNDM7ICogQGNtZDpcdFJBUzIgY29tbWFuZCB0byBzZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlXG4mIzQzOyAqL1xuJiM0MztpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XG4mIzQzO1x0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XG4mIzQzO1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuJiM0MztcdHM2NCB0aW1lX2RlbHRhO1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1x0aW50IHJjO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHNzcGNjID0gcmFzMl9jdHgtXHUwMDNlc3NwY2M7XG4mIzQzO1x0Z2VuX2NvbW1fYmFzZSA9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XG4mIzQzO1x0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJjO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbm5lbCA9IHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXG4mIzQzO1x0ICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZlxuJiM0MztcdCAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHR0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSk7XG4mIzQzO1x0XHRpZiAoc3NwY2MtXHUwMDNlcGNjX21ydHQgXHUwMDNlIHRpbWVfZGVsdGEpXG4mIzQzO1x0XHRcdGZzbGVlcChzc3BjYy1cdTAwM2VwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBIYW5kbGUgdGhlIG5vbi16ZXJvIE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpOiB0aGVcbiYjNDM7XHQgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhblxuJiM0MztcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXG4mIzQzO1x0ICogbGltaXRhdGlvbi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcbiYjNDM7XHQgKiBjYW4gaGFuZGxlIG1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBjb3JlcyBpbiB0aGVcbiYjNDM7XHQgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kXG4mIzQzO1x0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxuJiM0MztcdCAqIGxpbWl0IGluIGFueSA2MHMgd2luZG93LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXBhcikge1xuJiM0MztcdFx0aWYgKCFzc3BjYy1cdTAwM2VtcGFyX2NvdW50KSB7XG4mIzQzO1x0XHRcdHRpbWVfZGVsdGEgPSBrdGltZV9tc19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9tcGFyX3Jlc2V0KTtcbiYjNDM7XHRcdFx0aWYgKCh0aW1lX2RlbHRhIFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXHUwMDI2XHUwMDI2IHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xuJiM0MztcdFx0XHRcdGRldl9kYmcocmFzMl9jdHgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7UENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdFwmIzM0OywgY21kKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRzc3BjYy1cdTAwM2VsYXN0X21wYXJfcmVzZXQgPSBrdGltZV9nZXQoKTtcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVx1MDAzZXBjY19tcGFyO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlbXBhcl9jb3VudC0tO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV3JpdGUgdG8gdGhlIHNoYXJlZCBjb21tIHJlZ2lvbiAqL1xuJiM0MztcdGlvd3JpdGUxNihjbWQsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlY29tbWFuZCk7XG4mIzQzO1xuJiM0MztcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xuJiM0MztcdGlvd3JpdGUxNigwLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1xuJiM0MztcdC8qIFJpbmcgZG9vcmJlbGwgKi9cbiYjNDM7XHRyYyA9IG1ib3hfc2VuZF9tZXNzYWdlKHBjY19jaGFubmVsLCBcdTAwMjZjbWQpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvblxuJiM0MztcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJjIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRkZXZfd2FybihyYXMyX2N0eC1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdCBcJiMzNDtFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcXG5cJiMzNDssIGNtZCwgcmMpO1xuJiM0MztcdFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXG4mIzQzO1x0XHR2YWwgPSBpb3JlYWQxNihcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XG4mIzQzO1x0XHRpb3dyaXRlMTYodmFsLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJjID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjLVx1MDAzZWxhc3RfY21kID0gY21kO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxuJiM0MztcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcbiYjNDM7XHQgKiBvZiBNUlRULCBzbyBuZWVkIHRvIGNoZWNrIGZvciBwY2NfbXJ0dCBpbiBhZGRpdGlvbiB0byBQQ0NfQ01EX0VYRUNfUkFTMi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4mIzQzO1x0XHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbiYjNDM7XHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dClcbiYjNDM7XHRcdFx0c3NwY2MtXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lID0ga3RpbWVfZ2V0KCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXBjY19jaGFubmVsLVx1MDAzZW1ib3gtXHUwMDNldHhkb25lX2lycSlcbiYjNDM7XHRcdG1ib3hfY2xpZW50X3R4ZG9uZShwY2NfY2hhbm5lbCwgcmMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCYjMzQ7YWNwaV9yYXMyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJhczJfbGlzdF9wY2NfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9XG4mIzQzO1x0XHRjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHJhczJfc3NwY2MsIGtyZWYpO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbiYjNDM7XHRsaXN0X2RlbChcdTAwMjZzc3BjYy1cdTAwM2VlbGVtKTtcbiYjNDM7XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtXHUwMDNlcGNjX2NoYW4pO1xuJiM0MztcdGtmcmVlKHNzcGNjKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuJiM0Mzt7XG4mIzQzO1x0a3JlZl9wdXQoXHUwMDI2c3NwY2MtXHUwMDNla3JlZiwgIFx1MDAyNnJhczJfbGlzdF9wY2NfcmVsZWFzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcmFzMl9zc3BjYyAqcmFzMl9zc3BjY19nZXQoaW50IHBjY19pZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShzc3BjYywgXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xuJiM0MztcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2c3NwY2MtXHUwMDNla3JlZikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdHJldHVybiBzc3BjYztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xuJiM0MztcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYztcbiYjNDM7XG4mIzQzO1x0aWYgKHBjY19pZCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7XG4mIzQzO1x0aWYgKHNzcGNjKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZWRldlx0XHQ9XG4mIzQzO1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlcGNjX2xvY2tcdD0gXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2s7XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFzc3BjYylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuJiM0MztcdFx0a2ZyZWUoc3NwY2MpO1xuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSkge1xuJiM0MztcdFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHBjY19jaGFuKTtcbiYjNDM7XHRcdGtmcmVlKHNzcGNjKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19jaGFuXHRcdD0gcGNjX2NoYW47XG4mIzQzO1x0c3NwY2MtXHUwMDNlY29tbV9hZGRyXHQ9IHBjY19jaGFuLVx1MDAzZXNobWVtO1xuJiM0MztcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuJiM0MztcdFx0c3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMgPSBQQ0NfTlVNX1JFVFJJRVMgKiBwY2NfY2hhbi1cdTAwM2VsYXRlbmN5O1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuJiM0MztcdHNzcGNjLVx1MDAzZXBjY19tcnR0XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VwY2NfbXBhclx0XHQ9IHBjY19jaGFuLVx1MDAzZW1heF9hY2Nlc3NfcmF0ZTtcbiYjNDM7XHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyXHQ9IHNzcGNjLVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PSBwY2NfY2hhbi1cdTAwM2VtY2hhbi1cdTAwM2VtYm94LVx1MDAzZWRldjtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfSURBKHJhczJfaWRhKTtcbiYjNDM7c3RhdGljIHZvaWQgcmFzMl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYgPSB0b19hdXhpbGlhcnlfZGV2KGRldmljZSk7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWRhX2ZyZWUoXHUwMDI2cmFzMl9pZGEsIGF1eGRldi1cdTAwM2VpZCk7XG4mIzQzO1x0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXHUwMDNlc3NwY2MpO1xuJiM0MztcdGtmcmVlKHJhczJfY3R4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbiYjNDM7XHR1MzIgY29tcF9uaWQ7XG4mIzQzO1x0aW50IGlkLCByYztcbiYjNDM7XG4mIzQzO1x0Y29tcF9uaWQgPSBweG1fdG9fbm9kZShweG1faW5zdCk7XG4mIzQzO1x0aWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7SW52YWxpZCBOVU1BIG5vZGUsIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWRcXG5cJiMzNDssIGNoYW5uZWwsIHB4bV9pbnN0KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcmFzMl9jdHgpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7XG4mIzQzO1xuJiM0MztcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xuJiM0MztcdGlmIChyYyBcdTAwM2MgMCkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxuXCYjMzQ7LCBjaGFubmVsLFxuJiM0MztcdFx0XHQgcHhtX2luc3QsIHJjKTtcbiYjNDM7XHRcdGdvdG8gY3R4X2ZyZWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZCA9IGlkYV9hbGxvYyhcdTAwMjZyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGlkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRyYyA9IGlkO1xuJiM0MztcdFx0Z290byBwY2NfZnJlZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuaWRcdFx0PSBpZDtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VhZGV2Lm5hbWVcdFx0PSBuYW1lO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcdD0gcmFzMl9yZWxlYXNlO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnBhcmVudFx0PSByYXMyX2N0eC1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuJiM0MztcdGlmIChyYylcbiYjNDM7XHRcdGdvdG8gaWRhX2ZyZWU7XG4mIzQzO1xuJiM0MztcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByYXMyX2N0eDtcbiYjNDM7XG4mIzQzO2lkYV9mcmVlOlxuJiM0MztcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBpZCk7XG4mIzQzO3BjY19mcmVlOlxuJiM0MztcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVx1MDAzZXNzcGNjKTtcbiYjNDM7Y3R4X2ZyZWU6XG4mIzQzO1x0a2ZyZWUocmFzMl9jdHgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUihyYyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFyYXMyX2N0eClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO1x0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqKnBjdHhfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbiYjNDM7XHR1MTYgdG90X3RibF9sZW47XG4mIzQzO1x0dTE2IGk7XG4mIzQzO1xuJiM0MztcdGlmIChyYXMyX3RhYi1cdTAwM2VoZWFkZXIubGVuZ3RoIFx1MDAzYyBzaXplb2YoKnJhczJfdGFiKSkge1xuJiM0MztcdFx0cHJfd2FybihGV19XQVJOIFwmIzM0O0FDUEkgUkFTMiB0YWJsZSBwcmVzZW50IGJ1dCBicm9rZW4gKHRvbyBzaG9ydCwgc2l6ZT0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgfHwgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyBcdTAwM2UgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykge1xuJiM0MztcdFx0cHJfd2FybihGV19XQVJOIFwmIzM0O05vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSAmIzQzOyByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTtcbiYjNDM7XHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2MgdG90X3RibF9sZW4pIHtcbiYjNDM7XHRcdHByX3dhcm4oRldfV0FSTiBcJiMzNDtSQVMyIHRhYmxlIGlzIG5vdCBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiBQQ0MgZGVzY3M9JWQgc2l6ZT0ldSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwY3R4X2xpc3QgPSBrY2FsbG9jKHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwY3R4X2xpc3QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cGNjX2Rlc2NfbGlzdCA9IChzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICopKHJhczJfdGFiICYjNDM7IDEpO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3M7IGkmIzQzOyYjNDM7LCBwY2NfZGVzY19saXN0JiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKHBjY19kZXNjX2xpc3QtXHUwMDNlZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSlcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0cmFzMl9jdHggPSBhZGRfYXV4X2RldmljZShSQVMyX01FTV9ERVZfSURfTkFNRSwgcGNjX2Rlc2NfbGlzdC1cdTAwM2VjaGFubmVsX2lkLFxuJiM0MztcdFx0XHRcdFx0ICBwY2NfZGVzY19saXN0LVx1MDAzZWluc3RhbmNlKTtcbiYjNDM7XHRcdC8qIEludmFsaWQgTlVNQSBub2RlLCBjb250aW51ZSBwYXJzaW5nIG5leHQgbm9kZSAqL1xuJiM0MztcdFx0aWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0aWYgKElTX0VSUihyYXMyX2N0eCkpIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXG5cJiMzNDssIFBUUl9FUlIocmFzMl9jdHgpKTtcbiYjNDM7XHRcdFx0Zm9yICg7IGkgXHUwMDNlIDA7IGktLSkge1xuJiM0MztcdFx0XHRcdGlmIChwY3R4X2xpc3RbaSAtIDFdKVxuJiM0MztcdFx0XHRcdFx0cmVtb3ZlX2F1eF9kZXZpY2UocGN0eF9saXN0W2kgLSAxXSk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0a2ZyZWUocGN0eF9saXN0KTtcbiYjNDM7XHRcdFx0cmV0dXJuIFBUUl9FUlIocmFzMl9jdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cGN0eF9saXN0W2ldID0gcmFzMl9jdHg7XG4mIzQzO1x0fVxuJiM0MztcdGtmcmVlKHBjdHhfbGlzdCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYWNwaV9yYXMyX2luaXQgLSBSQVMyIGRyaXZlciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2VcbiYjNDM7ICogZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uIERyaXZlciBhZGRzIGFuXG4mIzQzOyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMlxuJiM0MzsgKiBtZW1vcnkgZmVhdHVyZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogbm9uZS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19pbml0IGFjcGlfcmFzMl9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcbiYjNDM7XHRhY3BpX3N0YXR1cyBzdGF0dXM7XG4mIzQzO1xuJiM0MztcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXHUwMDI2cmFzMl90YWIpO1xuJiM0MztcdGlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIGdldCB0YWJsZSwgJXNcXG5cJiMzNDssIGFjcGlfZm9ybWF0X2V4Y2VwdGlvbihzdGF0dXMpKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSlcbiYjNDM7XHRcdHByX2RlYnVnKFwmIzM0O0ZhaWxlZCB0byBwYXJzZSBSQVMyIHRhYmxlXFxuXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2VkYWMvc2NydWIuY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAIGVudW0gZWRhY19zY3J1Yl9hdHRyaWJ1dGVzIHtcbiBcdFNDUlVCX0FERFJFU1MsXG4gXHRTQ1JVQl9TSVpFLFxuIFx0U0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkQsXG4mIzQzO1x0U0NSVUJfRU5BQkxFX0RFTUFORCxcbiBcdFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX01BWF9DWUNMRV9EVVJBVElPTixcbiBcdFNDUlVCX0NVUl9DWUNMRV9EVVJBVElPTixcbkBAIC01NSw2ICYjNDM7NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldixcdFx0XHRcXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGFkZHIsIHJlYWRfYWRkciwgdTY0LCBcJiMzNDsweCVsbHhcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coc2l6ZSwgcmVhZF9zaXplLCB1NjQsIFwmIzM0OzB4JWxseFxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuJiM0MztFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfZGVtYW5kLCBnZXRfZW5hYmxlZF9vZCwgYm9vbCwgXCYjMzQ7JXVcXG5cJiMzNDspXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFwmIzM0OyV1XFxuXCYjMzQ7KVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1heF9jeWNsZV9kdXJhdGlvbiwgZ2V0X21heF9jeWNsZSwgdTMyLCBcJiMzNDsldVxcblwmIzM0OylcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBnZXRfY3ljbGVfZHVyYXRpb24sIHUzMiwgXCYjMzQ7JXVcXG5cJiMzNDspXG5AQCAtODQsNiAmIzQzOzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFx0XHRcdFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2JhY2tncm91bmQsIHNldF9lbmFibGVkX2JnLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9kZW1hbmQsIHNldF9lbmFibGVkX29kLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbiBcbiBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBhdHRyX2lkKVxuQEAgLTExOSw2ICYjNDM7MTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50XG4gXHRcdFx0XHRyZXR1cm4gMDQ0NDtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNDUlVCX0VOQUJMRV9ERU1BTkQ6XG4mIzQzO1x0XHRpZiAob3BzLVx1MDAzZWdldF9lbmFibGVkX29kKSB7XG4mIzQzO1x0XHRcdGlmIChvcHMtXHUwMDNlc2V0X2VuYWJsZWRfb2QpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGEtXHUwMDNlbW9kZTtcbiYjNDM7XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdHJldHVybiAwNDQ0O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0YnJlYWs7XG4gXHRjYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjpcbiBcdFx0aWYgKG9wcy1cdTAwM2VnZXRfbWluX2N5Y2xlKVxuIFx0XHRcdHJldHVybiBhLVx1MDAzZW1vZGU7XG5AQCAtMTY0LDYgJiM0MzsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldixcbiBcdFx0W1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLFxuJiM0MztcdFx0W1NDUlVCX0VOQUJMRV9ERU1BTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9kZW1hbmQsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX01JTl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWluX2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1heF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuQEAgLTQ2LDQgJiM0Mzs0NiwxNyBAQCBjb25maWcgUkFTX0ZNUE1cbiBcdCAgTWVtb3J5IHdpbGwgYmUgcmV0aXJlZCBkdXJpbmcgYm9vdCB0aW1lIGFuZCBydW4gdGltZSBkZXBlbmRpbmcgb25cbiBcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXG4gXG4mIzQzO2NvbmZpZyBNRU1fQUNQSV9SQVMyXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEFDUElfUkFTMlxuJiM0MztcdGRlcGVuZHMgb24gRURBQ1xuJiM0MztcdGRlcGVuZHMgb24gRURBQ19TQ1JVQlxuJiM0MztcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMlxuJiM0MztcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXG4mIzQzO1x0ICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXNcbiYjNDM7XHQgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyXG4mIzQzO1x0ICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS5cbiYjNDM7XG4gZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZSBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXG5pbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcbkBAIC0yLDYgJiM0MzsyLDcgQEBcbiBvYmotJChDT05GSUdfUkFTKVx0JiM0Mzs9IHJhcy5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX0ZTKVx0JiM0Mzs9IGRlYnVnZnMub1xuIG9iai0kKENPTkZJR19SQVNfQ0VDKVx0JiM0Mzs9IGNlYy5vXG4mIzQzO29iai0kKENPTkZJR19NRU1fQUNQSV9SQVMyKVx0JiM0Mzs9IGFjcGlfcmFzMi5vXG4gXG4gb2JqLSQoQ09ORklHX1JBU19GTVBNKVx0JiM0Mzs9IGFtZC9mbXBtLm9cbiBvYmoteVx0XHRcdCYjNDM7PSBhbWQvYXRsL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjY4YjFjMzhkZGY5MDVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5AQCAtMCwwICYjNDM7MSw2MDMgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcbiYjNDM7ICpcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXG4mIzQzOyAqXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I3VuZGVmIHByX2ZtdFxuJiM0MzsjZGVmaW5lIHByX2ZtdChmbXQpXHRcJiMzNDtBQ1BJIFJBUzIgTUVNT1JZOiBcJiMzNDsgZm10XG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZWRhYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCIEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJBUzJfVFlQRV9QQVRST0xfU0NSVUIgMHgwMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTIDB4MDFcbiYjNDM7I2RlZmluZSBSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiAweDAyXG4mIzQzOyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSQVMyIHBhdHJvbCBzY3J1YlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBSQVMyX1BTX1NDX0hSU19JTl9NQVNLIEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKVxuJiM0MzsjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soNywgMClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpXG4mIzQzOyNkZWZpbmUgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcgQklUKDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4XG4mIzQzOyNkZWZpbmUgUkFTMl9IT1VSX0lOX1NFQ1MgMzYwMFxuJiM0MztcbiYjNDM7c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjtcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BhdHJvbF9zY3J1Yl9wYXJhbSBwYXJhbXM7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFRPX0FDUElfUkFTMl9QU19TSE1FTShfYWRkcikgXFxcbiYjNDM7XHRjb250YWluZXJfb2YoX2FkZHIsIHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSwgY29tbW9uKVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0KHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcjtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRpb3dyaXRlOCgwLCBcdTAwMjZjb21tb24tXHUwMDNlc2V0X2NhcHNbMF0pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW9yZWFkOChcdTAwMjZjb21tb24tXHUwMDNlZmVhdHVyZXNbMF0pIFx1MDAyNiBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxuJiM0MztcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19vdXQ7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbiYjNDM7XHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19vdXQpO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01JTl9TQ19IUlNfT1VUX01BU0ssXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VzaXplID0gMDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgIChpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORykge1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSB0cnVlO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IGlvcmVhZDY0KFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IGlvcmVhZDY0KFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIENvbnRleHQgLSBQQ0MgbG9jayBtdXN0IGJlIGhlbGQgKi9cbiYjNDM7c3RhdGljIGludCByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgYm9vbCAqcnVubmluZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XG4mIzQzO1x0XHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4LVx1MDAzZW9kX3NjcnViKSB7XG4mIzQzO1x0XHQqcnVubmluZyA9IGZhbHNlO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuJiM0MztcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuJiM0MztcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlbWVtX3NpemUsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqcnVubmluZyA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5mbGFncykgXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HO1xuJiM0MztcdGlmICghKCpydW5uaW5nKSlcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuJiM0MztcdFx0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxuJiM0MztcdFx0XHRnb3RvIGV4aXQ7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElmIHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKCkgZmFpbHMgaGVyZSwgcmUtZW5hYmxpbmcgYmFja2dyb3VuZFxuJiM0MztcdFx0ICogc2NydWJiaW5nIGltbWVkaWF0ZWx5IG1heSBub3QgYmUgcG9zc2libGUgb3IgY29ycmVjdC4gSW4gdGhhdCBjYXNlLFxuJiM0MztcdFx0ICogdGhlIGFkbWluIG9yIGZpcm13YXJlIG1heSBuZWVkIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViYmluZ1xuJiM0MztcdFx0ICogYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gZXhpdDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXJ1bm5pbmcpIHtcbiYjNDM7XHRcdFx0cmV0ID0gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHJhczJfY3R4LVx1MDAzZWRldiwgcmFzMl9jdHgsIHRydWUpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIHJldD0lZFxcblwmIzM0OywgcmV0KTtcbiYjNDM7XG4mIzQzO1x0XHRcdGdvdG8gZXhpdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdFx0bXNsZWVwKDEwMDApO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO2V4aXQ6XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUpXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuJiM0MztcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdCptaW4gPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1heClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0Km1heCA9IHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpzY3J1Yl9jeWNsZV9zZWNzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHQqc2NydWJfY3ljbGVfc2VjcyA9IHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHNjcnViX2N5Y2xlX2hycyA9IHNjcnViX2N5Y2xlX3NlY3MgLyBSQVMyX0hPVVJfSU5fU0VDUztcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRpZiAoc2NydWJfY3ljbGVfaHJzIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgfHxcbiYjNDM7XHQgICAgc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIEJHIHNjcnViYmluZyBpcyBlbmFibGVkIHRoZSBhY3R1YWwgYWRkcmVzcyByYW5nZSBpcyBub3QgdmFsaWQuXG4mIzQzO1x0ICogUmV0dXJuIC1FQlVTWSBub3cgdW5sZXNzIGZpbmQgb3V0IGEgbWV0aG9kIHRvIHJldHJpZXZlIGFjdHVhbCBmdWxsIFBBIHJhbmdlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQqYmFzZSA9IHJhczJfY3R4LVx1MDAzZWJhc2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCAqc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0KnNpemUgPSByYXMyX2N0eC1cdTAwM2VzaXplO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IGJhc2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcdGJvb2wgcnVubmluZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ1bm5pbmcpXG4mIzQzO1x0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gYmFzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaXplKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocnVubmluZylcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZXNpemUgPSBzaXplO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdCplbmFibGVkID0gcmFzMl9jdHgtXHUwMDNlYmdfc2NydWI7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuJiM0MztcdGlmIChlbmFibGUpIHtcbiYjNDM7XHRcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiB8fCBydW5uaW5nKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuJiM0MztcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XG4mIzQzO1x0XHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xuJiM0MztcdFx0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcbiYjNDM7XHRcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdFx0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghcmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4mIzQzO1x0XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1xuJiM0MztcdFx0aW93cml0ZTE2KFJBUzJfU1RPUF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpO1xuJiM0MztcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0c3RyX2VuYWJsZV9kaXNhYmxlKGVuYWJsZSkpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWJnX3NjcnViID0gZW5hYmxlO1xuJiM0MztcdGlmIChlbmFibGUpIHtcbiYjNDM7XHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7XG4mIzQzO1x0XHQvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi9cbiYjNDM7XHRcdHJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuJiM0MztcbiYjNDM7XHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGVuYWJsZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdCplbmFibGVkID0gcnVubmluZztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4mIzQzO1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbiYjNDM7XHRib29sIHJ1bm5pbmc7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlbmFibGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuJiM0MztcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcdTAwMjZydW5uaW5nKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBleGl0O1xuJiM0MztcbiYjNDM7XHRpZiAocnVubmluZykge1xuJiM0MztcdFx0cmV0ID0gLUVCVVNZO1xuJiM0MztcdFx0Z290byBleGl0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU3RvcCBhbnkgYmFja2dyb3VuZCBzY3J1YiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi9cbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbiYjNDM7XHRcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIGV4aXQ7XG4mIzQzO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcbiYjNDM7XHQgKiB3aXRoIChiYXNlICYjNDM7IHNpemUpIFx1MDAzZSAobWVtX2Jhc2UgJiM0MzsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXG4mIzQzO1x0ICogcHJvcGVyIG1ldGhvZCBmb3IgZGV0ZXJtaW5pbmcgdGhlIE5VTUEgbm9kZSBtZW1vcnkgcmFuZ2UgaXMgYXZhaWxhYmxlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghcmFzMl9jdHgtXHUwMDNlc2l6ZSB8fCByYXMyX2N0eC1cdTAwM2ViYXNlIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0OyVzOiBJbnZhbGlkIGFkZHJlc3MgcmFuZ2UsIGJhc2U9MHglbGx4IHNpemU9MHglbGx4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRfX2Z1bmNfXywgcmFzMl9jdHgtXHUwMDNlYmFzZSwgcmFzMl9jdHgtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0XHRyZXQgPSAtRVJBTkdFO1xuJiM0MztcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xuJiM0MztcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XG4mIzQzO1x0c2NydWJfcGFyYW1zX2luIFx1MDAyNj0gflJBUzJfUFNfRU5fQkFDS0dST1VORDtcbiYjNDM7XHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbiYjNDM7XHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbiYjNDM7XHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIHN0YXJ0IGRlbWFuZCBzY3J1YmJpbmcgcmMoJWQpXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbiYjNDM7XHRcdFx0aW93cml0ZTY0KDAsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XG4mIzQzO1x0XHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gMDtcbiYjNDM7XHRcdFx0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZW5hYmxlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViIFx1MDAyNlx1MDAyNiByYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlIFx1MDAyNlx1MDAyNiAhcmFzMl9jdHgtXHUwMDNldGhyZWFkKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYga3RocmVhZF9ydW4oKSBpcyBjYWxsZWQgYmVmb3JlIHNlbmRpbmcgdGhlIGNvbW1hbmQgZm9yIGRlbWFuZCBzY3J1YmJpbmcsXG4mIzQzO1x0XHQgKiB0aGUgdGhyZWFkIG1heSBkZXRlcm1pbmUgdGhhdCBkZW1hbmQgc2NydWJiaW5nIGlzIG5vdCBydW5uaW5nLCBhdHRlbXB0IHRvXG4mIzQzO1x0XHQgKiByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nLCBhbmQgdGhlbiBleGl0LiBUaGlzIGNhbiBvY2N1ciBiZWNhdXNlIHRoZVxuJiM0MztcdFx0ICogdGhyZWFkIGZ1bmN0aW9uIG1heSBzdGFydCBydW5uaW5nIGJlZm9yZSBkZW1hbmQgc2NydWJiaW5nIHN0YXJ0cy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4ocmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCwgcmFzMl9jdHgsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXCYjMzQ7cmFzMl9zY3J1Yl9uaWQlZFwmIzM0OywgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbiYjNDM7XHRcdGlmIChJU19FUlIocmFzMl9jdHgtXHUwMDNldGhyZWFkKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4mIzQzO1x0XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsXG4mIzQzO1x0XHRcdCAqIHJlLWVuYWJsaW5nIGJhY2tncm91bmQgc2NydWIgd2lsbCBmYWlsLiBUaHVzIGFkbWluL2Zpcm13YXJlIG1heSBuZWVkXG4mIzQzO1x0XHRcdCAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRnb3RvIGV4aXQ7XG4mIzQzO1xuJiM0MztlbmFibGVfYmdfc2NydWI6XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKSB7XG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuJiM0MztcdFx0X19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIHRydWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2V4aXQ6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xuJiM0MztcdC5yZWFkX2FkZHIgPSByYXMyX2h3X3NjcnViX3JlYWRfYWRkcixcbiYjNDM7XHQucmVhZF9zaXplID0gcmFzMl9od19zY3J1Yl9yZWFkX3NpemUsXG4mIzQzO1x0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXG4mIzQzO1x0LndyaXRlX3NpemUgPSByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUsXG4mIzQzO1x0LmdldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9nZXRfZW5hYmxlZF9iZyxcbiYjNDM7XHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxuJiM0MztcdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXG4mIzQzO1x0LnNldF9lbmFibGVkX29kID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCxcbiYjNDM7XHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXG4mIzQzO1x0LmdldF9tYXhfY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlLFxuJiM0MztcdC5nZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQsXG4mIzQzO1x0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfY3R4KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlID0gZmFsc2U7XG4mIzQzO1x0aWYgKHJhczJfY3R4LVx1MDAzZXRocmVhZCkge1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRcdGt0aHJlYWRfc3RvcChyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0gTlVMTDtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7XG4mIzQzO1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBudW1fc3Bhbm5lZF9wYWdlcztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHJpZXZlIHRoZSBQQSByYW5nZSBvZiB0aGUgTlVNQSBkb21haW4gYW5kIHVzZSBpdCBhcyB0aGVcbiYjNDM7XHQgKiAmIzM5O1JlcXVlc3RlZCBBZGRyZXNzIFJhbmdlJiMzOTssIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmQgR0VUX1BBVFJPTF9QQVJBTUVURVJTXG4mIzQzO1x0ICogdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzIGluIHRoZSBOVU1BIGRvbWFpblxuJiM0MztcdCAqIGFzIHdlbGwgYXMgd2hlbiBzZW5kIGNvbW1hbmQgU1RBUlRfUEFUUk9MX1NDUlVCQkVSIHRvIHN0YXJ0IHRoZSBkZW1hbmRcbiYjNDM7XHQgKiBzY3J1YmJpbmcuIFRoZSB2YWxpZGl0eSBjaGVjayBmb3Igc3lzX2NvbXBfbmlkIGFnYWluc3QgTlVNQV9OT19OT0RFIGlzXG4mIzQzO1x0ICogYWxyZWFkeSBwZXJmb3JtZWQgaW4gYWRkX2F1eF9kZXZpY2UoKSBpbiAvYWNwaS9yYXMyLmNcbiYjNDM7XHQgKi9cbiYjNDM7XHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuJiM0MztcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4mIzQzO1x0aWYgKCFudW1fc3Bhbm5lZF9wYWdlcykge1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxcblwmIzM0OywgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbiYjNDM7XHRcdHJldHVybiAtRVBFUk07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTtcbiYjNDM7XHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbiYjNDM7XHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi9cbiYjNDM7XHRpZiAocmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzIFx1MDAzZSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUpXG4mIzQzO1x0XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnM7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlO1xuJiM0MztcbiYjNDM7XHRzcHJpbnRmKHNjcnViX25hbWUsIFwmIzM0O2FjcGlfcmFzX21lbSVkXCYjMzQ7LCBhdXhkZXYtXHUwMDNlaWQpO1xuJiM0MztcbiYjNDM7XHRyYXNfZmVhdHVyZXMuZnRfdHlwZVx0PSBSQVNfRkVBVF9TQ1JVQjtcbiYjNDM7XHRyYXNfZmVhdHVyZXMuaW5zdGFuY2VcdD0gMDtcbiYjNDM7XHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuJiM0MztcdHJhc19mZWF0dXJlcy5jdHhcdD0gcmFzMl9jdHg7XG4mIzQzO1xuJiM0MztcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZWRhY19kZXZfcmVnaXN0ZXIoXHUwMDI2YXV4ZGV2LVx1MDAzZWRldiwgc2NydWJfbmFtZSwgTlVMTCwgMSwgXHUwMDI2cmFzX2ZlYXR1cmVzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkIHJhczJfbWVtX2Rldl9pZF90YWJsZVtdID0ge1xuJiM0MztcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcJiMzNDsuXCYjMzQ7IFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LFxuJiM0MztcdHsgfVxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGF1eGlsaWFyeV9kcml2ZXIgcmFzMl9tZW1fZHJpdmVyID0ge1xuJiM0MztcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG4mIzQzO1x0LnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLFxuJiM0MztcdC5yZW1vdmUgPSByYXMyX21lbV9kcnZfcmVtb3ZlLFxuJiM0MztcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9JTVBPUlRfTlMoXCYjMzQ7QUNQSV9SQVMyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0FDUEkgUkFTMiBtZW1vcnkgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hY3BpL3JhczIuaFxuQEAgLTAsMCAmIzQzOzEsODYgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKlxuJiM0MzsgKiBBQ1BJIFJBUzIgKFJBUyBGZWF0dXJlIFRhYmxlKSBtZXRob2RzLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZFxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpZm5kZWYgX0FDUElfUkFTMl9IXG4mIzQzOyNkZWZpbmUgX0FDUElfUkFTMl9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYXV4aWxpYXJ5X2J1cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21haWxib3hfY2xpZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgZGV2aWNlO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XG4mIzQzOyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFJBUzJfQVVYX0RFVl9OQU1FIFwmIzM0O3JhczJcJiMzNDtcbiYjNDM7I2RlZmluZSBSQVMyX01FTV9ERVZfSURfTkFNRSBcJiMzNDthY3BpX3JhczJfbWVtXCYjMzQ7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IHJhczJfbWVtX2N0eCAtIENvbnRleHQgZm9yIFJBUzIgbWVtb3J5IGZlYXR1cmVzXG4mIzQzOyAqIEBhZGV2Olx0XHRBdXhpbGlhcnkgZGV2aWNlIG9iamVjdFxuJiM0MzsgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4mIzQzOyAqIEBkZXY6XHRcdFBvaW50ZXIgdG8gZGV2aWNlIGJhY2tpbmcgc3RydWN0IG1ib3hfY29udHJvbGxlciBmb3IgUENDXG4mIzQzOyAqIEBzc3BjYzpcdFx0UG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cbiYjNDM7ICogQHBjY19sb2NrOlx0XHRQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuJiM0MzsgKlx0XHRcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXG4mIzQzOyAqIEBzeXNfY29tcF9uaWQ6XHROb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlXG4mIzQzOyAqXHRcdFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXG4mIzQzOyAqXHRcdFx0UGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsIERlc2NyaXB0b3IgZm9ybWF0LFxuJiM0MzsgKlx0XHRcdEZpZWxkOiBJbnN0YW5jZVxuJiM0MzsgKiBAbWVtX2Jhc2U6XHRcdEJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuJiM0MzsgKlx0XHRcdG9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpblxuJiM0MzsgKiBAbWVtX3NpemVcdFx0U2l6ZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXG4mIzQzOyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4mIzQzOyAqIEBiYXNlOlx0XHRCYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcbiYjNDM7ICogQHNpemU6XHRcdFNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWJcbiYjNDM7ICogQHNjcnViX2N5Y2xlX2hyczpcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xuJiM0MzsgKiBAc2V0X3NjcnViX2N5Y2xlOlx0U2NydWIgcmF0ZSB0byBzZXQgaW4gaG91cnNcbiYjNDM7ICogQG1pbl9zY3J1Yl9jeWNsZTpcdE1pbmltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbiYjNDM7ICogQG1heF9zY3J1Yl9jeWNsZTpcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbiYjNDM7ICogQG9kX3NjcnViOlx0XHRTdGF0dXMgb2YgZGVtYW5kIHNjcnViYmluZyAobWVtb3J5IHJlZ2lvbilcbiYjNDM7ICogQGJnX3NjcnViOlx0XHRTdGF0dXMgb2YgYmFja2dyb3VuZCBwYXRyb2wgc2NydWJiaW5nXG4mIzQzOyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcdEZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kXG4mIzQzOyAqXHRcdFx0c2NydWJiaW5nIGlzIGZpbmlzaGVkXG4mIzQzOyAqIEB0aHJlYWQ6XHRcdERlbWFuZCBzY3J1YiBtb25pdG9yIGt0aHJlYWRcbiYjNDM7ICogQGRyaXZlcl9hY3RpdmU6XHRGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWRcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCByYXMyX21lbV9jdHgge1xuJiM0MztcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXHRcdGFkZXY7XG4mIzQzO1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXHQqY29tbV9hZGRyO1xuJiM0MztcdHN0cnVjdCBkZXZpY2VcdFx0XHQqZGV2O1xuJiM0MztcdHZvaWRcdFx0XHRcdCpzc3BjYztcbiYjNDM7XHRzdHJ1Y3QgbXV0ZXhcdFx0XHQqcGNjX2xvY2s7XG4mIzQzO1x0dTMyXHRcdFx0XHRzeXNfY29tcF9uaWQ7XG4mIzQzO1x0dTY0XHRcdFx0XHRtZW1fYmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdG1lbV9zaXplO1xuJiM0MztcdHU2NFx0XHRcdFx0YmFzZTtcbiYjNDM7XHR1NjRcdFx0XHRcdHNpemU7XG4mIzQzO1x0dThcdFx0XHRcdHNjcnViX2N5Y2xlX2hycztcbiYjNDM7XHR1OFx0XHRcdFx0c2V0X3NjcnViX2N5Y2xlO1xuJiM0MztcdHU4XHRcdFx0XHRtaW5fc2NydWJfY3ljbGU7XG4mIzQzO1x0dThcdFx0XHRcdG1heF9zY3J1Yl9jeWNsZTtcbiYjNDM7XHRib29sXHRcdFx0XHRvZF9zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRiZ19zY3J1YjtcbiYjNDM7XHRib29sXHRcdFx0XHRyZWVuYWJsZV9iZ19zY3J1YjtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3RcdFx0KnRocmVhZDtcbiYjNDM7XHRib29sXHRcdFx0XHRkcml2ZXJfYWN0aXZlO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbiYjNDM7dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XG4mIzQzO2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogX0FDUElfUkFTMl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lZGFjLmggYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuaW5kZXggZTZiNGU1MTEzMGU1ZmYuLmJlNGY2ZTUyZWEzOGEwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5AQCAtNjg0LDYgJiM0Mzs2ODQsOCBAQCBlbnVtIGVkYWNfZGV2X2ZlYXQge1xuICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuXG4gICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLlxuICAqIEBzZXRfZW5hYmxlZF9iZzogc3RhcnQgb3Igc3RvcCBhIGJnLXNjcnViLlxuJiM0MzsgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbiYjNDM7ICogQHNldF9lbmFibGVkX29kOiBzdGFydCBvciBzdG9wIGEgZGVtYW5kLXNjcnViLlxuICAqIEBnZXRfbWluX2N5Y2xlOiBnZXQgbWluaW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXG4gICogQGdldF9jeWNsZV9kdXJhdGlvbjogZ2V0IGN1cnJlbnQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbkBAIC02OTYsNiAmIzQzOzY5OCw4IEBAIHN0cnVjdCBlZGFjX3NjcnViX29wcyB7XG4gXHRpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7XG4gXHRpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcbiBcdGludCAoKnNldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSk7XG4mIzQzO1x0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4mIzQzO1x0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbiBcdGludCAoKmdldF9taW5fY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1pbik7XG4gXHRpbnQgKCpnZXRfbWF4X2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptYXgpO1xuIFx0aW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBQ1BJX1JBUzImIzM0OywKICAgICYjMzQ7TUVNX0FDUElfUkFTMiYjMzQ7LAogICAgJiMzNDtFREFDX1NDUlVCJiMzNDssCiAgICAmIzM0O1BDQyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhcnNlX3JhczJfdGFibGUmIzM0OywKICAgICYjMzQ7cmFzMl9zZW5kX3BjY19jbWQmIzM0OywKICAgICYjMzQ7cmFzMl9tZW1fZHJ2X3Byb2JlJiMzNDssCiAgICAmIzM0O3JhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUmIzM0OywKICAgICYjMzQ7cmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcmIzM0OywKICAgICYjMzQ7cmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCYjMzQ7LAogICAgJiMzNDtyYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfd3JpdGVfYWRkciYjMzQ7LAogICAgJiMzNDtyYXMyX2h3X3NjcnViX3dyaXRlX3NpemUmIzM0OywKICAgICYjMzQ7X19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBQ1BJIFJBUzIgZHJpdmVyIHRoYXQgcGFyc2VzIHRoZSBSQVMyIEFDUEkgdGFibGUgYW5kIHJlZ2lzdGVycyBhdXhpbGlhcnkgZGV2aWNlcyBmb3IgbWVtb3J5IHNjcnViYmluZy4gSXQgYWxzbyBhZGRzIGEgZHJpdmVyIHRoYXQgYmluZHMgdG8gdGhlc2UgYXV4aWxpYXJ5IGRldmljZXMgYW5kIGV4cG9zZXMgRURBQyBzY3J1YiBzeXNmcyBpbnRlcmZhY2VzIHRvIGNvbnRyb2wgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZyB2aWEgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpLiBTaW5jZSBzeXprYWxsZXIgY2FuIGluamVjdCBBQ1BJIHRhYmxlcyAoaW5jbHVkaW5nIFJBUzIgYW5kIFBDQ1QpIGFuZCBpbnRlcmFjdCB3aXRoIHN5c2ZzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgM2JlY2I0ZjJiNzIzNDNiYjc1NGYxNGM2MTlkYjM1YzdhNGYzODMwNQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDE4OjQ3OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViCmluZGV4IGFiNjAxNDc0M2RhNTY4Li4yYjg3NGUwMzM2MjMzNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YgpAQCAtMjAsMTEgJiM0MzsyMCw3IEBAIEtlcm5lbFZlcnNpb246CTYuMTUKIENvbnRhY3Q6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiBEZXNjcmlwdGlvbjoKIAkJKFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkCi0JCWZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy4KLQkJVGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuCi0KLQkJVGhlIHJlYWRiYWNrIGFkZHIgdmFsdWUgaXMgbm9uLXplcm8gaWYgdGhlIHJlcXVlc3RlZAotCQlvbi1kZW1hbmQgc2NydWJiaW5nIGlzIGluIHByb2dyZXNzLCB6ZXJvIG90aGVyd2lzZS4KJiM0MzsJCWZvciBkZW1hbmQgc2NydWJiaW5nLgogCiBXaGF0OgkJL3N5cy9idXMvZWRhYy9kZXZpY2VzLyZsdDtkZXYtbmFtZSZndDsvc2NydWJYL3NpemUKIERhdGU6CQlNYXJjaCAyMDI1CkBAIC0zNCw2ICYjNDM7MzAsMTQgQEAgRGVzY3JpcHRpb246CiAJCShSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWQKIAkJKG9uLWRlbWFuZCBzY3J1YmJpbmcpLgogCiYjNDM7V2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfZGVtYW5kCiYjNDM7RGF0ZToJCUphbiAyMDI2CiYjNDM7S2VybmVsVmVyc2lvbjoJNi4xOQomIzQzO0NvbnRhY3Q6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiYjNDM7RGVzY3JpcHRpb246CiYjNDM7CQkoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzCiYjNDM7CQlzdXBwb3J0ZWQgb25seSBpZiB0aGUgZHJpdmVyIGFuZCBoYXJkd2FyZSBzdXBwb3J0IGl0LgomIzQzOwogV2hhdDoJCS9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfYmFja2dyb3VuZAogRGF0ZToJCU1hcmNoIDIwMjUKIEtlcm5lbFZlcnNpb246CTYuMTUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CmluZGV4IDJjZmE3NGZhMWZmZDJmLi41NjJiZmQ2ZmY2MzA1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9lZGFjL3NjcnViLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0CkBAIC0zNDAsMyAmIzQzOzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLgogCiBTeXNmcyBmaWxlcyBmb3Igc2NydWJiaW5nIGFyZSBkb2N1bWVudGVkIGluCiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2AKJiM0MzsKJiM0MzszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZwomIzQzOwomIzQzOzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLgomIzQzOwomIzQzOzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcKJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzAKJiM0MzsKJiM0MzszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuCiYjNDM7CiYjNDM7QXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZQomIzQzO3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwMAomIzQzOwomIzQzOzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLgomIzQzO1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLgomIzQzOwomIzQzOyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb24KJiM0MzsKJiM0MzszNjAwCiYjNDM7CiYjNDM7IyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzg2NDAwCiYjNDM7CiYjNDM7My4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnkKJiM0Mzs0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS4KJiM0MzsKJiM0MzsjIGVjaG8gNDMyMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvbgomIzQzOwomIzQzOzMuMS41LiBTZXQgYWRkcmVzcyByYW5nZS4KJiM0MzsKJiM0MztTZXQgJiMzOTthZGRyJiMzOTsgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuCiYjNDM7CiYjNDM7IyBlY2hvIDB4ODAwMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvYWRkcgomIzQzOwomIzQzO1NldCAmIzM5O3NpemUmIzM5OyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi4KJiM0MzsKJiM0MzsjIGVjaG8gMHgyMDAwMDAgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvc2l6ZQomIzQzOwomIzQzOzMuMS42LiBTdGFydCAmIzM5O2RlbWFuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MztXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcwomIzQzO3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlCiYjNDM7ZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuCiYjNDM7CiYjNDM7IyBlY2hvIDEgJmd0OyAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZAomIzQzOwomIzQzOzMuMi4gQmFja2dyb3VuZCBzY3J1YmJpbmcgdGhlIGVudGlyZSBtZW1vcnkKJiM0MzsKJiM0MzszLjIuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBiYWNrZ3JvdW5kIHNjcnViYmluZy4KJiM0MzsKJiM0MzsjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmQKJiM0MzsKJiM0MzswCiYjNDM7CiYjNDM7My4yLjIuIFByb2dyYW0gYmFja2dyb3VuZCBzY3J1YmJpbmcgZm9yIFJBUzIgZGV2aWNlIHRvIHJlcGVhdCBpbiBldmVyeSAyMTYwMAomIzQzO3NlY29uZHMgKHF1YXJ0ZXIgb2YgYSBkYXkpLgomIzQzOwomIzQzOyMgZWNobyAyMTYwMCAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uCiYjNDM7CiYjNDM7My4yLjMuIFN0YXJ0ICYjMzk7YmFja2dyb3VuZCBzY3J1YmJpbmcmIzM5Oy4KJiM0MzsKJiM0MzsjIGVjaG8gMSAmZ3Q7IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCkBAIC0yOTQsNiAmIzQzOzI5NCwxNyBAQCBjb25maWcgQUNQSV9DUFBDX0xJQgogCSAgSWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IENQUEMgaW4gZmlybXdhcmUsCiAJICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC4KIAomIzQzO2NvbmZpZyBBQ1BJX1JBUzIKJiM0MzsJYm9vbCAmIzM0O0FDUEkgUkFTMiBkcml2ZXImIzM0OwomIzQzOwlzZWxlY3QgQVVYSUxJQVJZX0JVUwomIzQzOwlkZXBlbmRzIG9uIE1BSUxCT1gKJiM0MzsJZGVwZW5kcyBvbiBQQ0MKJiM0MzsJaGVscAomIzQzOwkgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yCiYjNDM7CSAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzZWxlY3QgTi4KJiM0MzsKIGNvbmZpZyBBQ1BJX1BST0NFU1NPUgogCXRyaXN0YXRlICYjMzQ7UHJvY2Vzc29yJiMzNDsKIAlkZXBlbmRzIG9uIFg4NiB8fCBBUk02NCB8fCBMT09OR0FSQ0ggfHwgUklTQ1YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQppbmRleCBkMWIwYWZmYjg0NGYwNS4uYWJmZWM2NzQ1NzI0ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUykJJiM0Mzs9IGVjX3N5cy5vCiBvYmotJChDT05GSUdfQUNQSV9CR1JUKQkJJiM0Mzs9IGJncnQubwogb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpCSYjNDM7PSBjcHBjX2FjcGkubwogb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSkJJiM0Mzs9IHNwY3IubwomIzQzO29iai0kKENPTkZJR19BQ1BJX1JBUzIpCQkmIzQzOz0gcmFzMi5vCiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSAmIzQzOz0gYWNwaV9kYmcubwogb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgCSYjNDM7PSBwcHR0Lm8KIG9iai0kKENPTkZJR19BQ1BJX1BGUlVUKQkmIzQzOz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1cy5jIGIvZHJpdmVycy9hY3BpL2J1cy5jCmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYWNwaS9idXMuYwpAQCAtMzEsNiAmIzQzOzMxLDcgQEAKICNpbmNsdWRlICZsdDthY3BpL2FwZWkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdXNwZW5kLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJtdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3JhczIuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIApAQCAtMTYxMCw2ICYjNDM7MTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKQogCWFjcGlfZGVidWdnZXJfaW5pdCgpOwogCWFjcGlfc2V0dXBfc2Jfbm90aWZ5X2hhbmRsZXIoKTsKIAlhY3BpX3Zpb3RfaW5pdCgpOwomIzQzOwlhY3BpX3JhczJfaW5pdCgpOwomIzQzOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjY2NzAwZTBlN2QzNTIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2FjcGkvcmFzMi5jCkBAIC0wLDAgJiM0MzsxLDUwMiBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsvKgomIzQzOyAqIEFDUEkgUkFTMiBmZWF0dXJlIHRhYmxlIGRyaXZlci4KJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLgomIzQzOyAqCiYjNDM7ICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaAomIzQzOyAqIHByb3ZpZGVzIGludGVyZmFjZXMgZm9yIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgZS5nLiwgZm9yIEhXLWJhc2VkIG1lbW9yeQomIzQzOyAqIHNjcnViYmluZywgYW5kIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBzZXJ2aWNlLiBSQVMyIHVzZXMKJiM0MzsgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjdW5kZWYgcHJfZm10CiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSAmIzM0O0FDUEkgUkFTMjogJiMzNDsgZm10CiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2V4cG9ydC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9wY2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YWNwaS9yYXMyLmgmZ3Q7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb24KJiM0MzsgKiBAbWJveF9jbGllbnQ6CXN0cnVjdCBtYm94X2NsaWVudCBvYmplY3QKJiM0MzsgKiBAcGNjX2NoYW46CQlQb2ludGVyIHRvIHN0cnVjdCBwY2NfbWJveF9jaGFuCiYjNDM7ICogQGNvbW1fYWRkcjoJCVBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZWxlbToJCUxpc3QgZm9yIHJlZ2lzdGVyZWQgUkFTMiBQQ0MgY2hhbm5lbCBzdWJzcGFjZXMKJiM0MzsgKiBAcGNjX2xvY2s6CQlQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3MKJiM0MzsgKgkJCXRvIFBDQyBjaGFubmVsIHN1YnNwYWNlCiYjNDM7ICogQGRlYWRsaW5lX3VzOglQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgdGltZW91dCBpbiBtaWNyb3NlY3MKJiM0MzsgKgkJCWZvciBQQ0MgY29tbWFuZCBjb21wbGV0aW9uCiYjNDM7ICogQHBjY19tcGFyOgkJTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsCiYjNDM7ICogQHBjY19tcnR0OgkJTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzCiYjNDM7ICoJCQlPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZQomIzQzOyAqCQkJaXNzdWluZyBuZXh0IGNvbW1hbmQKJiM0MzsgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBsYXN0X21wYXJfcmVzZXQ6CVRpbWUgb2YgbGFzdCBNUEFSIGNvdW50IHJlc2V0CiYjNDM7ICogQG1wYXJfY291bnQ6CQlNUEFSIGNvdW50CiYjNDM7ICogQHBjY19pZDoJCUlkZW50aWZpZXIgb2YgdGhlIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsCiYjNDM7ICogQGxhc3RfY21kOgkJTGFzdCBQQ0MgY29tbWFuZAomIzQzOyAqIEBrcmVmOgkJa3JlZiBvYmplY3QKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcmFzMl9zc3BjYyB7CiYjNDM7CXN0cnVjdCBtYm94X2NsaWVudAkJbWJveF9jbGllbnQ7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuCQkqcGNjX2NoYW47CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbQkqY29tbV9hZGRyOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkCQllbGVtOwomIzQzOwlzdHJ1Y3QgbXV0ZXgJCQlwY2NfbG9jazsKJiM0MzsJdTY0CQkJCWRlYWRsaW5lX3VzOwomIzQzOwl1bnNpZ25lZCBpbnQJCQlwY2NfbXBhcjsKJiM0MzsJdW5zaWduZWQgaW50CQkJcGNjX21ydHQ7CiYjNDM7CWt0aW1lX3QJCQkJbGFzdF9jbWRfY21wbF90aW1lOwomIzQzOwlrdGltZV90CQkJCWxhc3RfbXBhcl9yZXNldDsKJiM0MzsJaW50CQkJCW1wYXJfY291bnQ7CiYjNDM7CWludAkJCQlwY2NfaWQ7CiYjNDM7CXUxNgkJCQlsYXN0X2NtZDsKJiM0MzsJc3RydWN0IGtyZWYJCQlrcmVmOwomIzQzO307CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBcmJpdHJhcnkgcmV0cmllcyBmb3IgUENDIGNvbW1hbmRzIGJlY2F1c2UgdGhlIHJlbW90ZSBwcm9jZXNzb3IgY291bGQgYmUKJiM0MzsgKiBtdWNoIHNsb3dlciB0byByZXBseS4gS2VlcCBpdCBoaWdoIGVub3VnaCB0byBjb3ZlciBlbXVsYXRvcnMgd2hlcmUgdGhlCiYjNDM7ICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBQQ0NfTlVNX1JFVFJJRVMgNjAwVUxMCiYjNDM7I2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMAomIzQzOyNkZWZpbmUgUENDX01JTl9QT0xMX1VTRUNTIDMKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwCiYjNDM7I2RlZmluZSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkgMHgwMAomIzQzOwomIzQzOy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi8KJiM0MztzdGF0aWMgREVGSU5FX01VVEVYKHJhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7c3RhdGljIExJU1RfSEVBRChyYXMyX3NzcGNjKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqZ2VuX2NvbW1fYmFzZSA9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CXUzMiBjYXBfc3RhdHVzOwomIzQzOwl1MTYgc3RhdHVzOwomIzQzOwlpbnQgcmM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFzIHBlciBBQ1BJIHNwZWMsIHRoZSBQQ0Mgc3BhY2Ugd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGUKJiM0MzsJICogcGxhdGZvcm0gYW5kIHNob3VsZCBoYXZlIHNldCB0aGUgY29tbWFuZCBjb21wbGV0aW9uIGJpdCB3aGVuCiYjNDM7CSAqIFBDQyBjYW4gYmUgdXNlZCBieSBPU1BNLgomIzQzOwkgKgomIzQzOwkgKiBQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgZXZlcnkgUENDX01JTl9QT0xMX1VTRUNTIGZvciBtYXhpbXVtIG9mCiYjNDM7CSAqIFBDQ19OVU1fUkVUUklFUyAqIFBDQyBjaGFubmVsIGxhdGVuY3kgdW50aWwgUENDIGNvbW1hbmQgY29tcGxldGUKJiM0MzsJICogYml0IGlzIHNldC4KJiM0MzsJICovCiYjNDM7CXJjID0gcmVhZHdfcmVsYXhlZF9wb2xsX3RpbWVvdXQoJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMsIHN0YXR1cywKJiM0MzsJCQkJCXN0YXR1cyAmYW1wOyBQQ0NfU1RBVFVTX0NNRF9DT01QTEVURSwKJiM0MzsJCQkJCVBDQ19NSU5fUE9MTF9VU0VDUywgc3NwY2MtJmd0O2RlYWRsaW5lX3VzKTsKJiM0MzsJaWYgKHJjKSB7CiYjNDM7CQlwcl93YXJuKCYjMzQ7UENDIElEOiAweCV4OiBQQ0MgY2hlY2sgY2hhbm5lbCB0aW1lb3V0IGZvciBsYXN0IGNvbW1hbmQ6IDB4JXggcmM9JWRcbiYjMzQ7LAomIzQzOwkJCXNzcGNjLSZndDtwY2NfaWQsIHNzcGNjLSZndDtsYXN0X2NtZCwgcmMpOwomIzQzOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgUENDX1NUQVRVU19FUlJPUikgewomIzQzOwkJcHJfd2FybigmIzM0O1BDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxuJiMzNDssCiYjNDM7CQkJc3NwY2MtJmd0O3BjY19pZCwgc3NwY2MtJmd0O2xhc3RfY21kKTsKJiM0MzsJCXN0YXR1cyAmYW1wOz0gflBDQ19TVEFUVVNfRVJST1I7CiYjNDM7CQlpb3dyaXRlMTYoc3RhdHVzLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3N0YXR1cyk7CiYjNDM7CQlpb3dyaXRlMzIoMHgwLCAmYW1wO2dlbl9jb21tX2Jhc2UtJmd0O3NldF9jYXBzX3N0YXR1cyk7CiYjNDM7CQlyZXR1cm4gLUVJTzsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqLwomIzQzOwlybWIoKTsKJiM0MzsJY2FwX3N0YXR1cyA9IGlvcmVhZDMyKCZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c2V0X2NhcHNfc3RhdHVzKTsKJiM0MzsJc3dpdGNoIChjYXBfc3RhdHVzKSB7CiYjNDM7CWNhc2UgQUNQSV9SQVMyX05PVF9WQUxJRDoKJiM0MzsJY2FzZSBBQ1BJX1JBUzJfTk9UX1NVUFBPUlRFRDoKJiM0MzsJCXJjID0gLUVQRVJNOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0JVU1k6CiYjNDM7CQlyYyA9IC1FQlVTWTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFDUElfUkFTMl9GQUlMRUQ6CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0FCT1JURUQ6CiYjNDM7CWNhc2UgQUNQSV9SQVMyX0lOVkFMSURfREFUQToKJiM0MzsJCXJjID0gLUVJTlZBTDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvd3JpdGUzMigweDAsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7c2V0X2NhcHNfc3RhdHVzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJjOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsCiYjNDM7ICogQHJhczJfY3R4Oglwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlCiYjNDM7ICogQGNtZDoJUkFTMiBjb21tYW5kIHRvIHNlbmQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb24gc3VjY2VzcywgYW4gZXJyb3Igb3RoZXJ3aXNlCiYjNDM7ICovCiYjNDM7aW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlOwomIzQzOwlzdHJ1Y3QgbWJveF9jaGFuICpwY2NfY2hhbm5lbDsKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwlzNjQgdGltZV9kZWx0YTsKJiM0MzsJdTE2IHZhbDsKJiM0MzsJaW50IHJjOwomIzQzOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJc3NwY2MgPSByYXMyX2N0eC0mZ3Q7c3NwY2M7CiYjNDM7CWdlbl9jb21tX2Jhc2UgPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwomIzQzOwlyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJcGNjX2NoYW5uZWwgPSBzc3BjYy0mZ3Q7cGNjX2NoYW4tJmd0O21jaGFuOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBIYW5kbGUgdGhlIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpOiB0aGUgbWluaW11bQomIzQzOwkgKiBhbW91bnQgb2YgdGltZSB0aGF0IE9TUE0gbXVzdCB3YWl0IGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mCiYjNDM7CSAqIGEgY29tbWFuZCBiZWZvcmUgaXNzdWluZyB0aGUgbmV4dCBjb21tYW5kLCBpbiBtaWNyb3NlY29uZHMuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3NwY2MtJmd0O3BjY19tcnR0KSB7CiYjNDM7CQl0aW1lX2RlbHRhID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLSZndDtsYXN0X2NtZF9jbXBsX3RpbWUpOwomIzQzOwkJaWYgKHNzcGNjLSZndDtwY2NfbXJ0dCAmZ3Q7IHRpbWVfZGVsdGEpCiYjNDM7CQkJZnNsZWVwKHNzcGNjLSZndDtwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEhhbmRsZSB0aGUgbm9uLXplcm8gTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUik6IHRoZQomIzQzOwkgKiBtYXhpbXVtIG51bWJlciBvZiBwZXJpb2RpYyByZXF1ZXN0cyB0aGF0IHRoZSBzdWJzcGFjZSBjaGFubmVsIGNhbgomIzQzOwkgKiBzdXBwb3J0LCByZXBvcnRlZCBpbiBjb21tYW5kcyBwZXIgbWludXRlLiAwIGluZGljYXRlcyBubwomIzQzOwkgKiBsaW1pdGF0aW9uLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgaWRlYWxseSB6ZXJvIG9yIGxhcmdlIGVub3VnaCBzbyB0aGF0IGl0CiYjNDM7CSAqIGNhbiBoYW5kbGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBhbGwgdGhlIGNvcmVzIGluIHRoZQomIzQzOwkgKiBzeXN0ZW0gY2FuIGNvbGxlY3RpdmVseSBnZW5lcmF0ZS4gSWYgaXQgaXMgbm90LCBmb2xsb3cgdGhlIHNwZWMgYW5kCiYjNDM7CSAqIGp1c3Qgbm90IHNlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIHBsYXRmb3JtIGFmdGVyIGhpdHRpbmcgdGhlIE1QQVIKJiM0MzsJICogbGltaXQgaW4gYW55IDYwcyB3aW5kb3cuCiYjNDM7CSAqLwomIzQzOwlpZiAoc3NwY2MtJmd0O3BjY19tcGFyKSB7CiYjNDM7CQlpZiAoIXNzcGNjLSZndDttcGFyX2NvdW50KSB7CiYjNDM7CQkJdGltZV9kZWx0YSA9IGt0aW1lX21zX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy0mZ3Q7bGFzdF9tcGFyX3Jlc2V0KTsKJiM0MzsJCQlpZiAoKHRpbWVfZGVsdGEgJmx0OyA2MCAqIE1TRUNfUEVSX1NFQykgJmFtcDsmYW1wOyBzc3BjYy0mZ3Q7bGFzdF9tcGFyX3Jlc2V0KSB7CiYjNDM7CQkJCWRldl9kYmcocmFzMl9jdHgtJmd0O2RldiwKJiM0MzsJCQkJCSYjMzQ7UENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdCYjMzQ7LCBjbWQpOwomIzQzOwkJCQlyZXR1cm4gLUVJTzsKJiM0MzsJCQl9CiYjNDM7CQkJc3NwY2MtJmd0O2xhc3RfbXBhcl9yZXNldCA9IGt0aW1lX2dldCgpOwomIzQzOwkJCXNzcGNjLSZndDttcGFyX2NvdW50ID0gc3NwY2MtJmd0O3BjY19tcGFyOwomIzQzOwkJfQomIzQzOwkJc3NwY2MtJmd0O21wYXJfY291bnQtLTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBXcml0ZSB0byB0aGUgc2hhcmVkIGNvbW0gcmVnaW9uICovCiYjNDM7CWlvd3JpdGUxNihjbWQsICZhbXA7Z2VuX2NvbW1fYmFzZS0mZ3Q7Y29tbWFuZCk7CiYjNDM7CiYjNDM7CS8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqLwomIzQzOwlpb3dyaXRlMTYoMCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwomIzQzOwkvKiBSaW5nIGRvb3JiZWxsICovCiYjNDM7CXJjID0gbWJveF9zZW5kX21lc3NhZ2UocGNjX2NoYW5uZWwsICZhbXA7Y21kKTsKJiM0MzsJLyoKJiM0MzsJICogbWJveF9zZW5kX21lc3NhZ2UoKSByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgZm9yIHN1Y2Nlc3NmdWwgc3VibWlzc2lvbgomIzQzOwkgKiBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJjICZsdDsgMCkgewomIzQzOwkJZGV2X3dhcm4ocmFzMl9jdHgtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtFcnJvciBzZW5kaW5nIFBDQyBtYm94IG1lc3NhZ2UgY29tbWFuZDogMHgleCwgcmM6JWRcbiYjMzQ7LCBjbWQsIHJjKTsKJiM0MzsJCS8qIFJlc3RvcmUgQ01EIENPTVBMRVRFIGJpdCBvbiBlcnJvciAqLwomIzQzOwkJdmFsID0gaW9yZWFkMTYoJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwkJdmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFOwomIzQzOwkJaW93cml0ZTE2KHZhbCwgJmFtcDtnZW5fY29tbV9iYXNlLSZndDtzdGF0dXMpOwomIzQzOwkJcmV0dXJuIHJjOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmMgPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNzcGNjLSZndDtsYXN0X2NtZCA9IGNtZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlCiYjNDM7CSAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmcKJiM0MzsJICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuCiYjNDM7CSAqLwomIzQzOwlpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLSZndDtwY2NfbXJ0dCkgewomIzQzOwkJcmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7CiYjNDM7CQlpZiAoc3NwY2MtJmd0O3BjY19tcnR0KQomIzQzOwkJCXNzcGNjLSZndDtsYXN0X2NtZF9jbXBsX3RpbWUgPSBrdGltZV9nZXQoKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXBjY19jaGFubmVsLSZndDttYm94LSZndDt0eGRvbmVfaXJxKQomIzQzOwkJbWJveF9jbGllbnRfdHhkb25lKHBjY19jaGFubmVsLCByYyk7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgJiMzNDthY3BpX3JhczImIzM0Oyk7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmFzMl9saXN0X3BjY19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID0KJiM0MzsJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmFzMl9zc3BjYywga3JlZik7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CWxpc3RfZGVsKCZhbXA7c3NwY2MtJmd0O2VsZW0pOwomIzQzOwlwY2NfbWJveF9mcmVlX2NoYW5uZWwoc3NwY2MtJmd0O3BjY19jaGFuKTsKJiM0MzsJa2ZyZWUoc3NwY2MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX3NzcGNjX3B1dChzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2MpCiYjNDM7ewomIzQzOwlrcmVmX3B1dCgmYW1wO3NzcGNjLSZndDtrcmVmLCAgJmFtcDtyYXMyX2xpc3RfcGNjX3JlbGVhc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3JhczJfcGNjX2xpc3RfbG9jayk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkoc3NwY2MsICZhbXA7cmFzMl9zc3BjYywgZWxlbSkgewomIzQzOwkJaWYgKHNzcGNjLSZndDtwY2NfaWQgIT0gcGNjX2lkKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKCFrcmVmX2dldF91bmxlc3NfemVybygmYW1wO3NzcGNjLSZndDtrcmVmKSkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCXJldHVybiBzc3BjYzsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2NfbWJveF9jaGFuICpwY2NfY2hhbjsKJiM0MzsJc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjOwomIzQzOwomIzQzOwlpZiAocGNjX2lkICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7CiYjNDM7CWlmIChzc3BjYykgewomIzQzOwkJcmFzMl9jdHgtJmd0O3NzcGNjCQk9IHNzcGNjOwomIzQzOwkJcmFzMl9jdHgtJmd0O2NvbW1fYWRkcgk9IHNzcGNjLSZndDtjb21tX2FkZHI7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7ZGV2CQk9CiYjNDM7CQkJc3NwY2MtJmd0O3BjY19jaGFuLSZndDttY2hhbi0mZ3Q7bWJveC0mZ3Q7ZGV2OwomIzQzOwkJcmFzMl9jdHgtJmd0O3BjY19sb2NrCT0gJmFtcDtzc3BjYy0mZ3Q7cGNjX2xvY2s7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwomIzQzOwlzc3BjYyA9IGt6YWxsb2Moc2l6ZW9mKCpzc3BjYyksIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoIXNzcGNjKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKCZhbXA7c3NwY2MtJmd0O21ib3hfY2xpZW50LCBwY2NfaWQpOwomIzQzOwlpZiAoSVNfRVJSKHBjY19jaGFuKSkgewomIzQzOwkJa2ZyZWUoc3NwY2MpOwomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmICghcGNjX2NoYW4tJmd0O3NobWVtKSB7CiYjNDM7CQlwY2NfbWJveF9mcmVlX2NoYW5uZWwocGNjX2NoYW4pOwomIzQzOwkJa2ZyZWUoc3NwY2MpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3NwY2MtJmd0O3BjY19pZAkJPSBwY2NfaWQ7CiYjNDM7CXNzcGNjLSZndDtwY2NfY2hhbgkJPSBwY2NfY2hhbjsKJiM0MzsJc3NwY2MtJmd0O2NvbW1fYWRkcgk9IHBjY19jaGFuLSZndDtzaG1lbTsKJiM0MzsJaWYgKHBjY19jaGFuLSZndDtsYXRlbmN5KQomIzQzOwkJc3NwY2MtJmd0O2RlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogcGNjX2NoYW4tJmd0O2xhdGVuY3k7CiYjNDM7CWVsc2UKJiM0MzsJCXNzcGNjLSZndDtkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWTsKJiM0MzsJc3NwY2MtJmd0O3BjY19tcnR0CQk9IHBjY19jaGFuLSZndDttaW5fdHVybmFyb3VuZF90aW1lOwomIzQzOwlzc3BjYy0mZ3Q7cGNjX21wYXIJCT0gcGNjX2NoYW4tJmd0O21heF9hY2Nlc3NfcmF0ZTsKJiM0MzsJc3NwY2MtJmd0O21ib3hfY2xpZW50Lmtub3dzX3R4ZG9uZQk9IHRydWU7CiYjNDM7CiYjNDM7CW11dGV4X2luaXQoJmFtcDtzc3BjYy0mZ3Q7cGNjX2xvY2spOwomIzQzOwlrcmVmX2luaXQoJmFtcDtzc3BjYy0mZ3Q7a3JlZik7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwlsaXN0X2FkZCgmYW1wO3NzcGNjLSZndDtlbGVtLCAmYW1wO3JhczJfc3NwY2MpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtyYXMyX3BjY19saXN0X2xvY2spOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c3NwY2MJCT0gc3NwY2M7CiYjNDM7CXJhczJfY3R4LSZndDtjb21tX2FkZHIJPSBzc3BjYy0mZ3Q7Y29tbV9hZGRyOwomIzQzOwlyYXMyX2N0eC0mZ3Q7ZGV2CQk9IHBjY19jaGFuLSZndDttY2hhbi0mZ3Q7bWJveC0mZ3Q7ZGV2OwomIzQzOwlyYXMyX2N0eC0mZ3Q7cGNjX2xvY2sJPSAmYW1wO3NzcGNjLSZndDtwY2NfbG9jazsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfSURBKHJhczJfaWRhKTsKJiM0MztzdGF0aWMgdm9pZCByYXMyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTsKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTsKJiM0MzsKJiM0MzsJaWRhX2ZyZWUoJmFtcDtyYXMyX2lkYSwgYXV4ZGV2LSZndDtpZCk7CiYjNDM7CXJhczJfc3NwY2NfcHV0KHJhczJfY3R4LSZndDtzc3BjYyk7CiYjNDM7CWtmcmVlKHJhczJfY3R4KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDsKJiM0MzsJdTMyIGNvbXBfbmlkOwomIzQzOwlpbnQgaWQsIHJjOwomIzQzOwomIzQzOwljb21wX25pZCA9IHB4bV90b19ub2RlKHB4bV9pbnN0KTsKJiM0MzsJaWYgKGNvbXBfbmlkID09IE5VTUFfTk9fTk9ERSkgewomIzQzOwkJcHJfZGVidWcoJiMzNDtJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxuJiMzNDssIGNoYW5uZWwsIHB4bV9pbnN0KTsKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTlhJTyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmFzMl9jdHggPSBremFsbG9jKHNpemVvZigqcmFzMl9jdHgpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFyYXMyX2N0eCkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c3lzX2NvbXBfbmlkID0gY29tcF9uaWQ7CiYjNDM7CiYjNDM7CXJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpOwomIzQzOwlpZiAocmMgJmx0OyAwKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBQQ0MgY2hhbm5lbD0lZCBweG1faW5zdD0lZCByYz0lZFxuJiMzNDssIGNoYW5uZWwsCiYjNDM7CQkJIHB4bV9pbnN0LCByYyk7CiYjNDM7CQlnb3RvIGN0eF9mcmVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlkID0gaWRhX2FsbG9jKCZhbXA7cmFzMl9pZGEsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoaWQgJmx0OyAwKSB7CiYjNDM7CQlyYyA9IGlkOwomIzQzOwkJZ290byBwY2NfZnJlZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5pZAkJPSBpZDsKJiM0MzsJcmFzMl9jdHgtJmd0O2FkZXYubmFtZQkJPSBuYW1lOwomIzQzOwlyYXMyX2N0eC0mZ3Q7YWRldi5kZXYucmVsZWFzZQk9IHJhczJfcmVsZWFzZTsKJiM0MzsJcmFzMl9jdHgtJmd0O2FkZXYuZGV2LnBhcmVudAk9IHJhczJfY3R4LSZndDtkZXY7CiYjNDM7CiYjNDM7CXJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KCZhbXA7cmFzMl9jdHgtJmd0O2FkZXYpOwomIzQzOwlpZiAocmMpCiYjNDM7CQlnb3RvIGlkYV9mcmVlOwomIzQzOwomIzQzOwlyYyA9IGF1eGlsaWFyeV9kZXZpY2VfYWRkKCZhbXA7cmFzMl9jdHgtJmd0O2FkZXYpOwomIzQzOwlpZiAocmMpIHsKJiM0MzsJCWF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KCZhbXA7cmFzMl9jdHgtJmd0O2FkZXYpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIocmMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByYXMyX2N0eDsKJiM0MzsKJiM0MztpZGFfZnJlZToKJiM0MzsJaWRhX2ZyZWUoJmFtcDtyYXMyX2lkYSwgaWQpOwomIzQzO3BjY19mcmVlOgomIzQzOwlyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC0mZ3Q7c3NwY2MpOwomIzQzO2N0eF9mcmVlOgomIzQzOwlrZnJlZShyYXMyX2N0eCk7CiYjNDM7CiYjNDM7CXJldHVybiBFUlJfUFRSKHJjKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpCiYjNDM7ewomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlhdXhpbGlhcnlfZGV2aWNlX2RlbGV0ZSgmYW1wO3JhczJfY3R4LSZndDthZGV2KTsKJiM0MzsJYXV4aWxpYXJ5X2RldmljZV91bmluaXQoJmFtcDtyYXMyX2N0eC0mZ3Q7YWRldik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4OwomIzQzOwl1MTYgdG90X3RibF9sZW47CiYjNDM7CXUxNiBpOwomIzQzOwomIzQzOwlpZiAocmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGggJmx0OyBzaXplb2YoKnJhczJfdGFiKSkgewomIzQzOwkJcHJfd2FybihGV19XQVJOICYjMzQ7QUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgYnV0IGJyb2tlbiAodG9vIHNob3J0LCBzaXplPSV1KVxuJiMzNDssCiYjNDM7CQkJcmFzMl90YWItJmd0O2hlYWRlci5sZW5ndGgpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyB8fCByYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyAmZ3Q7IFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MpIHsKJiM0MzsJCXByX3dhcm4oRldfV0FSTiAmIzM0O05vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXG4mIzM0OywKJiM0MzsJCQlyYXMyX3RhYi0mZ3Q7bnVtX3BjY19kZXNjcyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwl0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICYjNDM7IHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzICogc2l6ZW9mKCpwY2NfZGVzY19saXN0KTsKJiM0MzsJaWYgKHJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoICZsdDsgdG90X3RibF9sZW4pIHsKJiM0MzsJCXByX3dhcm4oRldfV0FSTiAmIzM0O1JBUzIgdGFibGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIFBDQyBkZXNjcz0lZCBzaXplPSV1KVxuJiMzNDssCiYjNDM7CQkJcmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MsIHJhczJfdGFiLSZndDtoZWFkZXIubGVuZ3RoKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXBjdHhfbGlzdCA9IGtjYWxsb2MocmFzMl90YWItJmd0O251bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcGN0eF9saXN0KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiAmIzQzOyAxKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHJhczJfdGFiLSZndDtudW1fcGNjX2Rlc2NzOyBpJiM0MzsmIzQzOywgcGNjX2Rlc2NfbGlzdCYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChwY2NfZGVzY19saXN0LSZndDtmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJcmFzMl9jdHggPSBhZGRfYXV4X2RldmljZShSQVMyX01FTV9ERVZfSURfTkFNRSwgcGNjX2Rlc2NfbGlzdC0mZ3Q7Y2hhbm5lbF9pZCwKJiM0MzsJCQkJCSAgcGNjX2Rlc2NfbGlzdC0mZ3Q7aW5zdGFuY2UpOwomIzQzOwkJLyogSW52YWxpZCBOVU1BIG5vZGUsIGNvbnRpbnVlIHBhcnNpbmcgbmV4dCBub2RlICovCiYjNDM7CQlpZiAoUFRSX0VSUihyYXMyX2N0eCkgPT0gLUVOWElPKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJaWYgKElTX0VSUihyYXMyX2N0eCkpIHsKJiM0MzsJCQlwcl93YXJuKCYjMzQ7RmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXG4mIzM0OywgUFRSX0VSUihyYXMyX2N0eCkpOwomIzQzOwkJCWZvciAoOyBpICZndDsgMDsgaS0tKSB7CiYjNDM7CQkJCWlmIChwY3R4X2xpc3RbaSAtIDFdKQomIzQzOwkJCQkJcmVtb3ZlX2F1eF9kZXZpY2UocGN0eF9saXN0W2kgLSAxXSk7CiYjNDM7CQkJfQomIzQzOwkJCWtmcmVlKHBjdHhfbGlzdCk7CiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIocmFzMl9jdHgpOwomIzQzOwkJfQomIzQzOwkJcGN0eF9saXN0W2ldID0gcmFzMl9jdHg7CiYjNDM7CX0KJiM0MzsJa2ZyZWUocGN0eF9saXN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCiYjNDM7ICoKJiM0MzsgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZQomIzQzOyAqIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIEFDUEkgY29tcGxpYW50IEhXIHBsYXRmb3JtLiBEcml2ZXIgYWRkcyBhbgomIzQzOyAqIGF1eGlsaWFyeSBkZXZpY2UsIHdoaWNoIGJpbmRzIHRvIHRoZSBtZW1vcnkgQUNQSSBSQVMyIGRyaXZlciwgZm9yIGVhY2ggUkFTMgomIzQzOyAqIG1lbW9yeSBmZWF0dXJlLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogbm9uZS4KJiM0MzsgKi8KJiM0Mzt2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWI7CiYjNDM7CWFjcGlfc3RhdHVzIHN0YXR1czsKJiM0MzsKJiM0MzsJc3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmYW1wO3JhczJfdGFiKTsKJiM0MzsJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiYjNDM7CQlwcl9kZWJ1ZygmIzM0O0ZhaWxlZCB0byBnZXQgdGFibGUsICVzXG4mIzM0OywgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChwYXJzZV9yYXMyX3RhYmxlKHJhczJfdGFiKSkKJiM0MzsJCXByX2RlYnVnKCYjMzQ7RmFpbGVkIHRvIHBhcnNlIFJBUzIgdGFibGVcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJYWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jCmluZGV4IGY5ZDAyYWYyZmMzYTIwLi5mM2I5YTJmMDQ5NTAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL3NjcnViLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9lZGFjL3NjcnViLmMKQEAgLTE0LDYgJiM0MzsxNCw3IEBAIGVudW0gZWRhY19zY3J1Yl9hdHRyaWJ1dGVzIHsKIAlTQ1JVQl9BRERSRVNTLAogCVNDUlVCX1NJWkUsCiAJU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkQsCiYjNDM7CVNDUlVCX0VOQUJMRV9ERU1BTkQsCiAJU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OLAogCVNDUlVCX01BWF9DWUNMRV9EVVJBVElPTiwKIAlTQ1JVQl9DVVJfQ1lDTEVfRFVSQVRJT04sCkBAIC01NSw2ICYjNDM7NTYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zaG93KHN0cnVjdCBkZXZpY2UgKnJhc19mZWF0X2RldiwJCQlcCiBFREFDX1NDUlVCX0FUVFJfU0hPVyhhZGRyLCByZWFkX2FkZHIsIHU2NCwgJiMzNDsweCVsbHhcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1coc2l6ZSwgcmVhZF9zaXplLCB1NjQsICYjMzQ7MHglbGx4XG4mIzM0OykKIEVEQUNfU0NSVUJfQVRUUl9TSE9XKGVuYWJsZV9iYWNrZ3JvdW5kLCBnZXRfZW5hYmxlZF9iZywgYm9vbCwgJiMzNDsldVxuJiMzNDspCiYjNDM7RURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1cobWF4X2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWF4X2N5Y2xlLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQogRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsICYjMzQ7JXVcbiYjMzQ7KQpAQCAtODQsNiAmIzQzOzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LAkJCVwKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShhZGRyLCB3cml0ZV9hZGRyLCB1NjQsIGtzdHJ0b3U2NCkKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NCkKIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfYmFja2dyb3VuZCwgc2V0X2VuYWJsZWRfYmcsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKQomIzQzO0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpCiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgc2V0X2N5Y2xlX2R1cmF0aW9uLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bCkKIAogc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZCkKQEAgLTExOSw2ICYjNDM7MTIyLDE0IEBAIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50CiAJCQkJcmV0dXJuIDA0NDQ7CiAJCX0KIAkJYnJlYWs7CiYjNDM7CWNhc2UgU0NSVUJfRU5BQkxFX0RFTUFORDoKJiM0MzsJCWlmIChvcHMtJmd0O2dldF9lbmFibGVkX29kKSB7CiYjNDM7CQkJaWYgKG9wcy0mZ3Q7c2V0X2VuYWJsZWRfb2QpCiYjNDM7CQkJCXJldHVybiBhLSZndDttb2RlOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJcmV0dXJuIDA0NDQ7CiYjNDM7CQl9CiYjNDM7CQlicmVhazsKIAljYXNlIFNDUlVCX01JTl9DWUNMRV9EVVJBVElPTjoKIAkJaWYgKG9wcy0mZ3Q7Z2V0X21pbl9jeWNsZSkKIAkJCXJldHVybiBhLSZndDttb2RlOwpAQCAtMTY0LDYgJiM0MzsxNzUsNyBAQCBzdGF0aWMgaW50IHNjcnViX2NyZWF0ZV9kZXNjKHN0cnVjdCBkZXZpY2UgKnNjcnViX2RldiwKIAkJW1NDUlVCX0FERFJFU1NdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGFkZHIsIGluc3RhbmNlKSwKIAkJW1NDUlVCX1NJWkVdID0gRURBQ19TQ1JVQl9BVFRSX1JXKHNpemUsIGluc3RhbmNlKSwKIAkJW1NDUlVCX0VOQUJMRV9CQUNLR1JPVU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfYmFja2dyb3VuZCwgaW5zdGFuY2UpLAomIzQzOwkJW1NDUlVCX0VOQUJMRV9ERU1BTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9kZW1hbmQsIGluc3RhbmNlKSwKIAkJW1NDUlVCX01JTl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWluX2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksCiAJCVtTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1heF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLAogCQlbU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnCmluZGV4IGZjNGY0YmI5NGE0YzY1Li5hMWU2YWVkOGJjYzg1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXMvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9LY29uZmlnCkBAIC00Niw0ICYjNDM7NDYsMTcgQEAgY29uZmlnIFJBU19GTVBNCiAJICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvbgogCSAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuCiAKJiM0Mztjb25maWcgTUVNX0FDUElfUkFTMgomIzQzOwl0cmlzdGF0ZSAmIzM0O01lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyJiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBBQ1BJX1JBUzIKJiM0MzsJZGVwZW5kcyBvbiBFREFDCiYjNDM7CWRlcGVuZHMgb24gRURBQ19TQ1JVQgomIzQzOwlzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8KJiM0MzsJaGVscAomIzQzOwkgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMgomIzQzOwkgIGZlYXR1cmUgdGFibGUgcGFyc2VyLiBUaGUgZHJpdmVyIHVzZXMgYSBQQ0MgY2hhbm5lbCBzdWJzcGFjZSB0bwomIzQzOwkgIGNvbW11bmljYXRlIHdpdGggdGhlIEFDUEktY29tcGxpYW50IHBsYXRmb3JtIGFuZCBwcm92aWRlcwomIzQzOwkgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyCiYjNDM7CSAgdGhyb3VnaCB0aGUgRURBQyBzY3J1YiBpbnRlcmZhY2UuCiYjNDM7CiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZQppbmRleCAxMWY5NWQ1OWQzOTcyZC4uYTBlNmU5MDNkNmIwOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFzL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlCkBAIC0yLDYgJiM0MzsyLDcgQEAKIG9iai0kKENPTkZJR19SQVMpCSYjNDM7PSByYXMubwogb2JqLSQoQ09ORklHX0RFQlVHX0ZTKQkmIzQzOz0gZGVidWdmcy5vCiBvYmotJChDT05GSUdfUkFTX0NFQykJJiM0Mzs9IGNlYy5vCiYjNDM7b2JqLSQoQ09ORklHX01FTV9BQ1BJX1JBUzIpCSYjNDM7PSBhY3BpX3JhczIubwogCiBvYmotJChDT05GSUdfUkFTX0ZNUE0pCSYjNDM7PSBhbWQvZm1wbS5vCiBvYmoteQkJCSYjNDM7PSBhbWQvYXRsLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmMgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMjY4YjFjMzhkZGY5MDUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYwpAQCAtMCwwICYjNDM7MSw2MDMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXIKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNC0yMDI2IEhpU2lsaWNvbiBMaW1pdGVkLgomIzQzOyAqCiYjNDM7ICovCiYjNDM7CiYjNDM7I3VuZGVmIHByX2ZtdAomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkJJiMzNDtBQ1BJIFJBUzIgTUVNT1JZOiAmIzM0OyBmbXQKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZWRhYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BsYXRmb3JtX2RldmljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthY3BpL3JhczIuaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIgQklUKDApCiYjNDM7I2RlZmluZSBSQVMyX1RZUEVfUEFUUk9MX1NDUlVCIDB4MDAwMAomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMgMHgwMQomIzQzOyNkZWZpbmUgUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIgMHgwMgomIzQzOyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzCiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSQVMyIHBhdHJvbCBzY3J1YgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfSU5fTUFTSyBHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKQomIzQzOyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfT1VUX01BU0sgR0VOTUFTSyg3LCAwKQomIzQzOyNkZWZpbmUgUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpCiYjNDM7I2RlZmluZSBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORyBCSVQoMCkKJiM0MzsKJiM0MzsjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4CiYjNDM7I2RlZmluZSBSQVMyX0hPVVJfSU5fU0VDUyAzNjAwCiYjNDM7CiYjNDM7c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9zaG1lbSBjb21tb247CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcGF0cm9sX3NjcnViX3BhcmFtIHBhcmFtczsKJiM0Mzt9OwomIzQzOwomIzQzOyNkZWZpbmUgVE9fQUNQSV9SQVMyX1BTX1NITUVNKF9hZGRyKSBcCiYjNDM7CWNvbnRhaW5lcl9vZihfYWRkciwgc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtLCBjb21tb24pCiYjNDM7CiYjNDM7c3RhdGljIGludCBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbSAqY29tbW9uID0gKHZvaWQgKilyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJaW93cml0ZTgoMCwgJmFtcDtjb21tb24tJmd0O3NldF9jYXBzWzBdKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGlvcmVhZDgoJmFtcDtjb21tb24tJmd0O2ZlYXR1cmVzWzBdKSAmYW1wOyBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPQomIzQzOwkJVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LSZndDtjb21tX2FkZHIpOwomIzQzOwl1MzIgc2NydWJfcGFyYW1zX291dDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgJmFtcDtwc19zbS0mZ3Q7Y29tbW9uLnNldF9jYXBzWzBdKTsKJiM0MzsJaW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CWlvd3JpdGU2NChyYXMyX2N0eC0mZ3Q7bWVtX2Jhc2UsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7CiYjNDM7CWlvd3JpdGU2NChyYXMyX2N0eC0mZ3Q7bWVtX3NpemUsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7CiYjNDM7CXJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIocmFzMl9jdHgtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVhZCBwYXRyb2wgc2NydWIgcGFyYW1ldGVyc1xuJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwlzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19vdXQpOwomIzQzOwlyYXMyX2N0eC0mZ3Q7bWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSywKJiM0MzsJCQkJCSAgICAgIHNjcnViX3BhcmFtc19vdXQpOwomIzQzOwlyYXMyX2N0eC0mZ3Q7bWF4X3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSywKJiM0MzsJCQkJCSAgICAgIHNjcnViX3BhcmFtc19vdXQpOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLAomIzQzOwkJCQkJICAgICAgc2NydWJfcGFyYW1zX291dCk7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpIHsKJiM0MzsJCXJhczJfY3R4LSZndDtvZF9zY3J1YiA9IGZhbHNlOwomIzQzOwkJcmFzMl9jdHgtJmd0O2Jhc2UgPSAwOwomIzQzOwkJcmFzMl9jdHgtJmd0O3NpemUgPSAwOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgIChpb3JlYWQzMigmYW1wO3BzX3NtLSZndDtwYXJhbXMuZmxhZ3MpICZhbXA7IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSB0cnVlOwomIzQzOwkJcmFzMl9jdHgtJmd0O2Jhc2UgPSBpb3JlYWQ2NCgmYW1wO3BzX3NtLSZndDtwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJCXJhczJfY3R4LSZndDtzaXplID0gaW9yZWFkNjQoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmFjdGxfYWRkcl9yYW5nZVsxXSk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqLwomIzQzO3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPQomIzQzOwkJVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LSZndDtjb21tX2FkZHIpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXJhczJfY3R4LSZndDtvZF9zY3J1YikgewomIzQzOwkJKnJ1bm5pbmcgPSBmYWxzZTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsICZhbXA7cHNfc20tJmd0O2NvbW1vbi5zZXRfY2Fwc1swXSk7CiYjNDM7CWlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9iYXNlLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O21lbV9zaXplLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwomIzQzOwlyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKHJhczJfY3R4LSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnJ1bm5pbmcgPSBpb3JlYWQzMigmYW1wO3BzX3NtLSZndDtwYXJhbXMuZmxhZ3MpICZhbXA7IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HOwomIzQzOwlpZiAoISgqcnVubmluZykpCiYjNDM7CQlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSAoc3RydWN0IHJhczJfbWVtX2N0eCAqKXA7CiYjNDM7CWJvb2wgcnVubmluZzsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKJiM0MzsJCW11dGV4X2xvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCWlmICghcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViKQomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZygpIGZhaWxzIGhlcmUsIHJlLWVuYWJsaW5nIGJhY2tncm91bmQKJiM0MzsJCSAqIHNjcnViYmluZyBpbW1lZGlhdGVseSBtYXkgbm90IGJlIHBvc3NpYmxlIG9yIGNvcnJlY3QuIEluIHRoYXQgY2FzZSwKJiM0MzsJCSAqIHRoZSBhZG1pbiBvciBmaXJtd2FyZSBtYXkgbmVlZCB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YmJpbmcKJiM0MzsJCSAqIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLgomIzQzOwkJICovCiYjNDM7CQlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byBleGl0OwomIzQzOwomIzQzOwkJaWYgKCFydW5uaW5nKSB7CiYjNDM7CQkJcmV0ID0gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHJhczJfY3R4LSZndDtkZXYsIHJhczJfY3R4LCB0cnVlKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlkZXZfZXJyKHJhczJfY3R4LSZndDtkZXYsCiYjNDM7CQkJCQkmIzM0O0ZhaWxlZCB0byBlbmFibGUgYmFja2dyb3VuZCBzY3J1YiByZXQ9JWRcbiYjMzQ7LCByZXQpOwomIzQzOwomIzQzOwkJCWdvdG8gZXhpdDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkJbXNsZWVwKDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MztleGl0OgomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2RyaXZlcl9hY3RpdmUpCiYjNDM7CQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJbXV0ZXhfdW5sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJKm1pbiA9IHJhczJfY3R4LSZndDttaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKm1heCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkqbWF4ID0gcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICpzY3J1Yl9jeWNsZV9zZWNzKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CSpzY3J1Yl9jeWNsZV9zZWNzID0gcmFzMl9jdHgtJmd0O3NjcnViX2N5Y2xlX2hycyAqIFJBUzJfSE9VUl9JTl9TRUNTOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKQomIzQzO3sKJiM0MzsJdTMyIHNjcnViX2N5Y2xlX2hycyA9IHNjcnViX2N5Y2xlX3NlY3MgLyBSQVMyX0hPVVJfSU5fU0VDUzsKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YikKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAoc2NydWJfY3ljbGVfaHJzICZsdDsgcmFzMl9jdHgtJmd0O21pbl9zY3J1Yl9jeWNsZSB8fAomIzQzOwkgICAgc2NydWJfY3ljbGVfaHJzICZndDsgcmFzMl9jdHgtJmd0O21heF9zY3J1Yl9jeWNsZSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2V0X3NjcnViX2N5Y2xlID0gc2NydWJfY3ljbGVfaHJzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJLyoKJiM0MzsJICogV2hlbiBCRyBzY3J1YmJpbmcgaXMgZW5hYmxlZCB0aGUgYWN0dWFsIGFkZHJlc3MgcmFuZ2UgaXMgbm90IHZhbGlkLgomIzQzOwkgKiBSZXR1cm4gLUVCVVNZIG5vdyB1bmxlc3MgZmluZCBvdXQgYSBtZXRob2QgdG8gcmV0cmlldmUgYWN0dWFsIGZ1bGwgUEEgcmFuZ2UuCiYjNDM7CSAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKQomIzQzOwkJcmV0dXJuIC1FQlVTWTsKJiM0MzsKJiM0MzsJcmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkqYmFzZSA9IHJhczJfY3R4LSZndDtiYXNlOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YikKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJKnNpemUgPSByYXMyX2N0eC0mZ3Q7c2l6ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlndWFyZChtdXRleCkocmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJcmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsICZhbXA7cnVubmluZyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocnVubmluZykKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiYXNlID0gYmFzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXNpemUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpCiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfYmcoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwkqZW5hYmxlZCA9IHJhczJfY3R4LSZndDtiZ19zY3J1YjsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsJc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID0gVE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LSZndDtjb21tX2FkZHIpOwomIzQzOwl1MzIgc2NydWJfcGFyYW1zX2luOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCAmYW1wO3J1bm5pbmcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgJmFtcDtwc19zbS0mZ3Q7Y29tbW9uLnNldF9jYXBzWzBdKTsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJaWYgKHJhczJfY3R4LSZndDtiZ19zY3J1YiB8fCBydW5uaW5nKQomIzQzOwkJCXJldHVybiAtRUJVU1k7CiYjNDM7CiYjNDM7CQlpb3dyaXRlNjQoMCwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTsKJiM0MzsJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwkJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CQlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLOwomIzQzOwkJc2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19TQ19IUlNfSU5fTUFTSywgcmFzMl9jdHgtJmd0O3NldF9zY3J1Yl9jeWNsZSk7CiYjNDM7CQlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJCWlvd3JpdGUxNihSQVMyX1NUQVJUX1BBVFJPTF9TQ1JVQkJFUiwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLmNvbW1hbmQpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKCFyYXMyX2N0eC0mZ3Q7Ymdfc2NydWIpCiYjNDM7CQkJcmV0dXJuIC1FUEVSTTsKJiM0MzsKJiM0MzsJCWlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXNjcnViX3BhcmFtc19pbiAmYW1wOz0gflJBUzJfUFNfRU5fQkFDS0dST1VORDsKJiM0MzsJc2NydWJfcGFyYW1zX2luIHw9IEZJRUxEX1BSRVAoUkFTMl9QU19FTl9CQUNLR1JPVU5ELCBlbmFibGUpOwomIzQzOwlpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuc2NydWJfcGFyYW1zX2luKTsKJiM0MzsJcmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvICVzIGJhY2tncm91bmQgc2NydWJiaW5nXG4mIzM0OywKJiM0MzsJCQlzdHJfZW5hYmxlX2Rpc2FibGUoZW5hYmxlKSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtiZ19zY3J1YiA9IGVuYWJsZTsKJiM0MzsJaWYgKGVuYWJsZSkgewomIzQzOwkJcmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViID0gZmFsc2U7CiYjNDM7CQkvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi8KJiM0MzsJCXJldHVybiByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhOwomIzQzOwlib29sIHJ1bm5pbmc7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KShyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CSplbmFibGVkID0gcnVubmluZzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC0mZ3Q7Y29tbV9hZGRyKTsKJiM0MzsJdTMyIHNjcnViX3BhcmFtc19pbjsKJiM0MzsJYm9vbCBydW5uaW5nOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIWVuYWJsZSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgJmFtcDtydW5uaW5nKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsKJiM0MzsJaWYgKHJ1bm5pbmcpIHsKJiM0MzsJCXJldCA9IC1FQlVTWTsKJiM0MzsJCWdvdG8gZXhpdDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdG9wIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqLwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O2JnX3NjcnViKSB7CiYjNDM7CQlyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZmFsc2UpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlnb3RvIGV4aXQ7CiYjNDM7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7cmVlbmFibGVfYmdfc2NydWIgPSB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSB2YWxpZGl0eSBjaGVja3MgZm9yIHRoZSBhZGRyZXNzIHJhbmdlIHRvIHNjcnViIG5lZWQgdG8gYmUgdXBkYXRlZAomIzQzOwkgKiB3aXRoIChiYXNlICYjNDM7IHNpemUpICZndDsgKG1lbV9iYXNlICYjNDM7IG1lbV9zaXplKSBjaGVjayBpbiB0aGUgZnV0dXJlIG9uY2UgYQomIzQzOwkgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXJhczJfY3R4LSZndDtzaXplIHx8IHJhczJfY3R4LSZndDtiYXNlICZsdDsgcmFzMl9jdHgtJmd0O21lbV9iYXNlKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDslczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxuJiMzNDssCiYjNDM7CQkJX19mdW5jX18sIHJhczJfY3R4LSZndDtiYXNlLCByYXMyX2N0eC0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXQgPSAtRVJBTkdFOwomIzQzOwkJZ290byBlbmFibGVfYmdfc2NydWI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgJmFtcDtwc19zbS0mZ3Q7Y29tbW9uLnNldF9jYXBzWzBdKTsKJiM0MzsJc2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnNjcnViX3BhcmFtc19pbik7CiYjNDM7CXNjcnViX3BhcmFtc19pbiAmYW1wOz0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7CiYjNDM7CXNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUpOwomIzQzOwlzY3J1Yl9wYXJhbXNfaW4gJmFtcDs9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7CiYjNDM7CWlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sICZhbXA7cHNfc20tJmd0O3BhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pOwomIzQzOwlpb3dyaXRlNjQocmFzMl9jdHgtJmd0O2Jhc2UsICZhbXA7cHNfc20tJmd0O3BhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7CiYjNDM7CWlvd3JpdGU2NChyYXMyX2N0eC0mZ3Q7c2l6ZSwgJmFtcDtwc19zbS0mZ3Q7cGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTsKJiM0MzsJaW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMuY29tbWFuZCk7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoZGV2LCAmIzM0O0ZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxuJiMzNDssIHJldCk7CiYjNDM7CQlpZiAocmV0ICE9IC1FQlVTWSkgewomIzQzOwkJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pOwomIzQzOwkJCWlvd3JpdGU2NCgwLCAmYW1wO3BzX3NtLSZndDtwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pOwomIzQzOwkJCXJhczJfY3R4LSZndDtvZF9zY3J1YiA9IGZhbHNlOwomIzQzOwkJCXJhczJfY3R4LSZndDtiYXNlID0gMDsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7c2l6ZSA9IDA7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIGVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJfQomIzQzOwomIzQzOwlyYXMyX2N0eC0mZ3Q7b2Rfc2NydWIgPSBlbmFibGU7CiYjNDM7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViICZhbXA7JmFtcDsgcmFzMl9jdHgtJmd0O2RyaXZlcl9hY3RpdmUgJmFtcDsmYW1wOyAhcmFzMl9jdHgtJmd0O3RocmVhZCkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIGt0aHJlYWRfcnVuKCkgaXMgY2FsbGVkIGJlZm9yZSBzZW5kaW5nIHRoZSBjb21tYW5kIGZvciBkZW1hbmQgc2NydWJiaW5nLAomIzQzOwkJICogdGhlIHRocmVhZCBtYXkgZGV0ZXJtaW5lIHRoYXQgZGVtYW5kIHNjcnViYmluZyBpcyBub3QgcnVubmluZywgYXR0ZW1wdCB0bwomIzQzOwkJICogcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZywgYW5kIHRoZW4gZXhpdC4gVGhpcyBjYW4gb2NjdXIgYmVjYXVzZSB0aGUKJiM0MzsJCSAqIHRocmVhZCBmdW5jdGlvbiBtYXkgc3RhcnQgcnVubmluZyBiZWZvcmUgZGVtYW5kIHNjcnViYmluZyBzdGFydHMuCiYjNDM7CQkgKi8KJiM0MzsJCXJhczJfY3R4LSZndDt0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCwKJiM0MzsJCQkJCSAgICAgICAmIzM0O3JhczJfc2NydWJfbmlkJWQmIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlpZiAoSVNfRVJSKHJhczJfY3R4LSZndDt0aHJlYWQpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUihyYXMyX2N0eC0mZ3Q7dGhyZWFkKTsKJiM0MzsJCQlyYXMyX2N0eC0mZ3Q7dGhyZWFkID0gTlVMTDsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsCiYjNDM7CQkJICogcmUtZW5hYmxpbmcgYmFja2dyb3VuZCBzY3J1YiB3aWxsIGZhaWwuIFRodXMgYWRtaW4vZmlybXdhcmUgbWF5IG5lZWQKJiM0MzsJCQkgKiB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YiBhZnRlciBkZW1hbmQgc2NydWJiaW5nIGhhcyBmaW5pc2hlZC4KJiM0MzsJCQkgKi8KJiM0MzsJCQlnb3RvIGVuYWJsZV9iZ19zY3J1YjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlnb3RvIGV4aXQ7CiYjNDM7CiYjNDM7ZW5hYmxlX2JnX3NjcnViOgomIzQzOwlpZiAocmFzMl9jdHgtJmd0O3JlZW5hYmxlX2JnX3NjcnViKSB7CiYjNDM7CQlyYXMyX2N0eC0mZ3Q7cmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTsKJiM0MzsJCV9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhkZXYsIGRydl9kYXRhLCB0cnVlKTsKJiM0MzsJfQomIzQzOwomIzQzO2V4aXQ6CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0gewomIzQzOwkucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsCiYjNDM7CS5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSwKJiM0MzsJLndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsCiYjNDM7CS53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLAomIzQzOwkuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLAomIzQzOwkuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLAomIzQzOwkuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLAomIzQzOwkuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLAomIzQzOwkuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsCiYjNDM7CS5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSwKJiM0MzsJLmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCwKJiM0MzsJLnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwomIzQzOwlpZiAoIXJhczJfY3R4KQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltdXRleF9sb2NrKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJhczJfY3R4LSZndDtkcml2ZXJfYWN0aXZlID0gZmFsc2U7CiYjNDM7CWlmIChyYXMyX2N0eC0mZ3Q7dGhyZWFkKSB7CiYjNDM7CQltdXRleF91bmxvY2socmFzMl9jdHgtJmd0O3BjY19sb2NrKTsKJiM0MzsJCWt0aHJlYWRfc3RvcChyYXMyX2N0eC0mZ3Q7dGhyZWFkKTsKJiM0MzsJCXJhczJfY3R4LSZndDt0aHJlYWQgPSBOVUxMOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jayhyYXMyX2N0eC0mZ3Q7cGNjX2xvY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJhczJfbWVtX2Rydl9wcm9iZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2LCBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCAqaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpOwomIzQzOwlzdHJ1Y3QgZWRhY19kZXZfZmVhdHVyZSByYXNfZmVhdHVyZXM7CiYjNDM7CWNoYXIgc2NydWJfbmFtZVtSQVMyX1NDUlVCX05BTUVfTEVOXTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlCiYjNDM7CSAqICYjMzk7UmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UmIzM5Oywgd2hlbiBzZW5kIFJBUzIgY29tbWFuZCBHRVRfUEFUUk9MX1BBUkFNRVRFUlMKJiM0MzsJICogdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzIGluIHRoZSBOVU1BIGRvbWFpbgomIzQzOwkgKiBhcyB3ZWxsIGFzIHdoZW4gc2VuZCBjb21tYW5kIFNUQVJUX1BBVFJPTF9TQ1JVQkJFUiB0byBzdGFydCB0aGUgZGVtYW5kCiYjNDM7CSAqIHNjcnViYmluZy4gVGhlIHZhbGlkaXR5IGNoZWNrIGZvciBzeXNfY29tcF9uaWQgYWdhaW5zdCBOVU1BX05PX05PREUgaXMKJiM0MzsJICogYWxyZWFkeSBwZXJmb3JtZWQgaW4gYWRkX2F1eF9kZXZpY2UoKSBpbiAvYWNwaS9yYXMyLmMKJiM0MzsJICovCiYjNDM7CXN0YXJ0X3BmbiA9IG5vZGVfc3RhcnRfcGZuKHJhczJfY3R4LSZndDtzeXNfY29tcF9uaWQpOwomIzQzOwludW1fc3Bhbm5lZF9wYWdlcyA9IG5vZGVfc3Bhbm5lZF9wYWdlcyhyYXMyX2N0eC0mZ3Q7c3lzX2NvbXBfbmlkKTsKJiM0MzsJaWYgKCFudW1fc3Bhbm5lZF9wYWdlcykgewomIzQzOwkJcHJfZGVidWcoJiMzNDtGYWlsZWQgdG8gZmluZCBQQSByYW5nZSBvZiBOVU1BIG5vZGUoJXUpXG4mIzM0OywgcmFzMl9jdHgtJmd0O3N5c19jb21wX25pZCk7CiYjNDM7CQlyZXR1cm4gLUVQRVJNOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDttZW1fYmFzZSA9IF9fcGZuX3RvX3BoeXMoc3RhcnRfcGZuKTsKJiM0MzsJcmFzMl9jdHgtJmd0O21lbV9zaXplID0gKHU2NCludW1fc3Bhbm5lZF9wYWdlcyAqIFBBR0VfU0laRTsKJiM0MzsJZ3VhcmQobXV0ZXgpKHJhczJfY3R4LSZndDtwY2NfbG9jayk7CiYjNDM7CXJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi8KJiM0MzsJaWYgKHJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnMgJmd0OyByYXMyX2N0eC0mZ3Q7bWluX3NjcnViX2N5Y2xlKQomIzQzOwkJcmFzMl9jdHgtJmd0O3NldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LSZndDtzY3J1Yl9jeWNsZV9ocnM7CiYjNDM7CWVsc2UKJiM0MzsJCXJhczJfY3R4LSZndDtzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC0mZ3Q7bWluX3NjcnViX2N5Y2xlOwomIzQzOwomIzQzOwlzcHJpbnRmKHNjcnViX25hbWUsICYjMzQ7YWNwaV9yYXNfbWVtJWQmIzM0OywgYXV4ZGV2LSZndDtpZCk7CiYjNDM7CiYjNDM7CXJhc19mZWF0dXJlcy5mdF90eXBlCT0gUkFTX0ZFQVRfU0NSVUI7CiYjNDM7CXJhc19mZWF0dXJlcy5pbnN0YW5jZQk9IDA7CiYjNDM7CXJhc19mZWF0dXJlcy5zY3J1Yl9vcHMJPSAmYW1wO3JhczJfc2NydWJfb3BzOwomIzQzOwlyYXNfZmVhdHVyZXMuY3R4CT0gcmFzMl9jdHg7CiYjNDM7CiYjNDM7CXJhczJfY3R4LSZndDtkcml2ZXJfYWN0aXZlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKCZhbXA7YXV4ZGV2LSZndDtkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsICZhbXA7cmFzX2ZlYXR1cmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkIHJhczJfbWVtX2Rldl9pZF90YWJsZVtdID0gewomIzQzOwl7IC5uYW1lID0gUkFTMl9BVVhfREVWX05BTUUgJiMzNDsuJiMzNDsgUkFTMl9NRU1fREVWX0lEX05BTUUsIH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHsKJiM0MzsJLm5hbWUgPSBSQVMyX01FTV9ERVZfSURfTkFNRSwKJiM0MzsJLnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLAomIzQzOwkucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSwKJiM0MzsJLmlkX3RhYmxlID0gcmFzMl9tZW1fZGV2X2lkX3RhYmxlLAomIzQzO307CiYjNDM7bW9kdWxlX2F1eGlsaWFyeV9kcml2ZXIocmFzMl9tZW1fZHJpdmVyKTsKJiM0MzsKJiM0MztNT0RVTEVfSU1QT1JUX05TKCYjMzQ7QUNQSV9SQVMyJiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O0FDUEkgUkFTMiBtZW1vcnkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3JhczIuaCBiL2luY2x1ZGUvYWNwaS9yYXMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFjNzViMDMwN2ZhOWNjCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hY3BpL3JhczIuaApAQCAtMCwwICYjNDM7MSw4NiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KJiM0MzsvKgomIzQzOyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZAomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX0FDUElfUkFTMl9ICiYjNDM7I2RlZmluZSBfQUNQSV9SQVMyX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hdXhpbGlhcnlfYnVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21haWxib3hfY2xpZW50LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L211dGV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGRldmljZTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFDUEkgc3BlYyA2LjUgVGFibGUgNS44MjogUENDIGNvbW1hbmQgY29kZXMgdXNlZCBieQomIzQzOyAqIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgUENDX0NNRF9FWEVDX1JBUzIgMHgwMQomIzQzOwomIzQzOyNkZWZpbmUgUkFTMl9BVVhfREVWX05BTUUgJiMzNDtyYXMyJiMzNDsKJiM0MzsjZGVmaW5lIFJBUzJfTUVNX0RFVl9JRF9OQU1FICYjMzQ7YWNwaV9yYXMyX21lbSYjMzQ7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IHJhczJfbWVtX2N0eCAtIENvbnRleHQgZm9yIFJBUzIgbWVtb3J5IGZlYXR1cmVzCiYjNDM7ICogQGFkZXY6CQlBdXhpbGlhcnkgZGV2aWNlIG9iamVjdAomIzQzOyAqIEBjb21tX2FkZHI6CQlQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uCiYjNDM7ICogQGRldjoJCVBvaW50ZXIgdG8gZGV2aWNlIGJhY2tpbmcgc3RydWN0IG1ib3hfY29udHJvbGxlciBmb3IgUENDCiYjNDM7ICogQHNzcGNjOgkJUG9pbnRlciB0byBsb2NhbCBkYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb24KJiM0MzsgKiBAcGNjX2xvY2s6CQlQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2VzcwomIzQzOyAqCQkJdG8gUENDIGNoYW5uZWwgc3Vic3BhY2UKJiM0MzsgKiBAc3lzX2NvbXBfbmlkOglOb2RlIElEIG9mIHRoZSBzeXN0ZW0gY29tcG9uZW50IHRoYXQgdGhlIFJBUyBmZWF0dXJlCiYjNDM7ICoJCQlpcyBhc3NvY2lhdGVkIHdpdGguIFNlZSBBQ1BJIHNwZWMgNi41IFRhYmxlIDUuODA6IFJBUzIKJiM0MzsgKgkJCVBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCBEZXNjcmlwdG9yIGZvcm1hdCwKJiM0MzsgKgkJCUZpZWxkOiBJbnN0YW5jZQomIzQzOyAqIEBtZW1fYmFzZToJCUJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZQomIzQzOyAqCQkJb2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluCiYjNDM7ICogQG1lbV9zaXplCQlTaXplIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2UKJiM0MzsgKgkJCW9mIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBOVU1BIGRvbWFpbgomIzQzOyAqIEBiYXNlOgkJQmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViCiYjNDM7ICogQHNpemU6CQlTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViCiYjNDM7ICogQHNjcnViX2N5Y2xlX2hyczoJQ3VycmVudCBzY3J1YiByYXRlIGluIGhvdXJzCiYjNDM7ICogQHNldF9zY3J1Yl9jeWNsZToJU2NydWIgcmF0ZSB0byBzZXQgaW4gaG91cnMKJiM0MzsgKiBAbWluX3NjcnViX2N5Y2xlOglNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkCiYjNDM7ICogQG1heF9zY3J1Yl9jeWNsZToJTWF4aW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZAomIzQzOyAqIEBvZF9zY3J1YjoJCVN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKQomIzQzOyAqIEBiZ19zY3J1YjoJCVN0YXR1cyBvZiBiYWNrZ3JvdW5kIHBhdHJvbCBzY3J1YmJpbmcKJiM0MzsgKiBAcmVlbmFibGVfYmdfc2NydWI6CUZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kCiYjNDM7ICoJCQlzY3J1YmJpbmcgaXMgZmluaXNoZWQKJiM0MzsgKiBAdGhyZWFkOgkJRGVtYW5kIHNjcnViIG1vbml0b3Iga3RocmVhZAomIzQzOyAqIEBkcml2ZXJfYWN0aXZlOglGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWQKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcmFzMl9tZW1fY3R4IHsKJiM0MzsJc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UJCWFkZXY7CiYjNDM7CXN0cnVjdCBhY3BpX3JhczJfc2htZW0gX19pb21lbQkqY29tbV9hZGRyOwomIzQzOwlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKJiM0MzsJdm9pZAkJCQkqc3NwY2M7CiYjNDM7CXN0cnVjdCBtdXRleAkJCSpwY2NfbG9jazsKJiM0MzsJdTMyCQkJCXN5c19jb21wX25pZDsKJiM0MzsJdTY0CQkJCW1lbV9iYXNlOwomIzQzOwl1NjQJCQkJbWVtX3NpemU7CiYjNDM7CXU2NAkJCQliYXNlOwomIzQzOwl1NjQJCQkJc2l6ZTsKJiM0MzsJdTgJCQkJc2NydWJfY3ljbGVfaHJzOwomIzQzOwl1OAkJCQlzZXRfc2NydWJfY3ljbGU7CiYjNDM7CXU4CQkJCW1pbl9zY3J1Yl9jeWNsZTsKJiM0MzsJdTgJCQkJbWF4X3NjcnViX2N5Y2xlOwomIzQzOwlib29sCQkJCW9kX3NjcnViOwomIzQzOwlib29sCQkJCWJnX3NjcnViOwomIzQzOwlib29sCQkJCXJlZW5hYmxlX2JnX3NjcnViOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QJCSp0aHJlYWQ7CiYjNDM7CWJvb2wJCQkJZHJpdmVyX2FjdGl2ZTsKJiM0Mzt9OwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQUNQSV9SQVMyCiYjNDM7dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7CiYjNDM7aW50IHJhczJfc2VuZF9wY2NfY21kKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCB1MTYgY21kKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjZW5kaWYgLyogX0FDUElfUkFTMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oCmluZGV4IGU2YjRlNTExMzBlNWZmLi5iZTRmNmU1MmVhMzhhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9lZGFjLmgKQEAgLTY4NCw2ICYjNDM7Njg0LDggQEAgZW51bSBlZGFjX2Rldl9mZWF0IHsKICAqIEB3cml0ZV9zaXplOiBzZXQgb2Zmc2V0IG9mIHRoZSBzY3J1YmJpbmcgcmFuZ2UuCiAgKiBAZ2V0X2VuYWJsZWRfYmc6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGJhY2tncm91bmQgc2NydWIuCiAgKiBAc2V0X2VuYWJsZWRfYmc6IHN0YXJ0IG9yIHN0b3AgYSBiZy1zY3J1Yi4KJiM0MzsgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi4KJiM0MzsgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuCiAgKiBAZ2V0X21pbl9jeWNsZTogZ2V0IG1pbmltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuCiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuCiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLgpAQCAtNjk2LDYgJiM0Mzs2OTgsOCBAQCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMgewogCWludCAoKndyaXRlX3NpemUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBzaXplKTsKIAlpbnQgKCpnZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTsKIAlpbnQgKCpzZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpOwomIzQzOwlpbnQgKCpnZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTsKJiM0MzsJaW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTsKIAlpbnQgKCpnZXRfbWluX2N5Y2xlKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCAgdTMyICptaW4pOwogCWludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7CiAJaW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA3MjcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgQUNQSSBSQVMyIE1lbW9yeSBTY3J1YmJpbmcgUGF0Y2gqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBBQ1BJIFJBUzIgbWVtb3J5IHNjcnViYmluZy4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2Ug4oCTIGEgbmV3IGRyaXZlciwgYGRyaXZlcnMvYWNwaS9yYXMyLmNgIGFuZCBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLCBhbG9uZyB3aXRoIGEgbW9kaWZpY2F0aW9uIHRvIGBkcml2ZXJzL2VkYWMvc2NydWIuY2AuIFRoZSBjb3JlIG9mIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSByZWxpZXMgb24gdGhlIFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCAoUENDKSBmb3IgaGFyZHdhcmUgaW50ZXJhY3Rpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbiwgZ2l2ZW4gbXkgZm9jdXMsIGlzIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLgoKVGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCBBQ1BJIHRhYmxlcyAoc3BlY2lmaWNhbGx5IHRoZSBgQUNQSV9TSUdfUkFTMmAgc2lnbmF0dXJlKSBhbmQgUENDIG1haWxib3hlcy4gTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcgaW4gdGhlIGNvbnRleHQgb2YgZnV6emluZywgcGFydGljdWxhcmx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR29vZ2xlIENvbXB1dGUgRW5naW5lLiBXZSBjYW4gcHJvYmFibHkgaW5qZWN0IEFDUEkgdGFibGVzIHVzaW5nIHN5emthbGxlciwgd2hpY2ggbWlnaHQgbGV0IHVzIHRyaWdnZXIgdGhlIGluaXRpYWxpemF0aW9uLiBUaGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgYGFjcGlfcmFzMl9pbml0YCwgaXMgY2FsbGVkIGZyb20gYGFjcGlfaW5pdGAsIHNvIHRoYXTigJlzIGEgcHJvbWlzaW5nIGVudHJ5IHBvaW50LiBJdCBwYXJzZXMgdGhlIFJBUzIgdGFibGUgYW5kLCBpZiBwcmVzZW50LCByZWdpc3RlcnMgYXV4aWxpYXJ5IGRldmljZXMuIFRoZSBhdXhpbGlhcnkgZGV2aWNlIHByb2JlLCBgcmFzMl9tZW1fZHJ2X3Byb2JlYCwgaXMgd2hlcmUgdGhlIGNydWNpYWwgUENDIHJlYWQgb3BlcmF0aW9ucyBvY2N1ci4KCkJ1dCB0aGUgY2F0Y2ggaXMgdGhlIFBDQyBtYWlsYm94IHN1cHBvcnQuIFN5emthbGxlciBjYW4gaW5qZWN0IEFDUEkgdGFibGVzIHVzaW5nIGBzeXpfYWNwaV9pbmplY3RgLCBidXQgZG9lcyBpdCBhY3R1YWxseSBoYXZlIFBDQyBtYWlsYm94IHN1cHBvcnQ/IEkgbmVlZCB0byB2ZXJpZnkgaWYgUENDIGlzIGV2ZW4gcmVhY2hhYmxlLiBUaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgZnVuY3Rpb24gYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAuIElmIHRoZXJlJiMzOTtzIG5vIFBDQyBtYWlsYm94IGF2YWlsYWJsZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwuIEkmIzM5O20gZ29pbmcgdG8gZGVsdmUgaW50byB0aGUga2VybmVsIGNvZGUgZm9yIGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgIGFuZCBzZWUgd2hhdCB0aGUgY29uZGl0aW9ucyBmb3Igc3VjY2VzcyBvciBmYWlsdXJlIGFyZS4gVGhpcyBpcyBhIGNyaXRpY2FsIGZhY3RvciBpbiBkZXRlcm1pbmluZyBpZiB0aGlzIHdob2xlIHBhdGggaXMgdmlhYmxlIGZvciBmdXp6aW5nIGFuZCB3aWxsIGRldGVybWluZSBob3cgSSBhcHByb2FjaCB0ZXN0aW5nIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNjX21ib3hfcmVxdWVzdF9jaGFubmVsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9hY3BpX3BjYy5jPTQ5PWFjcGlfcGNjX2FkZHJlc3Nfc3BhY2Vfc2V0dXAoYWNwaV9oYW5kbGUgcmVnaW9uX2hhbmRsZSwgdTMyIGZ1bmN0aW9uLFxuLS1cbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY3LVx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmRhdGEtXHUwMDNlZG9uZSk7XG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYzo2ODpcdGRhdGEtXHUwMDNlcGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2ZGF0YS1cdTAwM2VjbCwgY3R4LVx1MDAzZXN1YnNwYWNlX2lkKTtcbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jLTY5LVx0aWYgKElTX0VSUihkYXRhLVx1MDAzZXBjY19jaGFuKSkge1xuLS1cbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYz01NjY9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChpbnQgcGNjX3NzX2lkeClcbi0tXG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmMtNTcxLVx0aWYgKHBjY19zc19pZHggXHUwMDNlPSAwKSB7XG5kcml2ZXJzL2FjcGkvY3BwY19hY3BpLmM6NTcyOlx0XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZjcHBjX21ib3hfY2wsIHBjY19zc19pZHgpO1xuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3My1cbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jPTI4MT1zdGF0aWMgaW50IHJlZ2lzdGVyX3BjY19jaGFubmVsKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4LCBpbnQgcGNjX2lkKVxuLS1cbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzAyLVxuZHJpdmVycy9hY3BpL3JhczIuYzozMDM6XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA0LVx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcbi0tXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jPTEwNj1zdGF0aWMgaW50IGhpc2lfdW5jb3JlX3JlcXVlc3RfcGNjX2NoYW4oc3RydWN0IGhpc2lfdW5jb3JlX2ZyZXEgKnVuY29yZSlcbi0tXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jLTExNi1cbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM6MTE3Olx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXHUwMDI2dW5jb3JlLVx1MDAzZWNsLCB1bmNvcmUtXHUwMDNlY2hhbl9pZCk7XG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jLTExOC1cdGlmIChJU19FUlIocGNjX2NoYW4pKVxuLS1cbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYz02MDk9c3RhdGljIGludCB4Z2VuZV9od21vbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvaHdtb24veGdlbmUtaHdtb24uYy02NjctXHRcdGNsLVx1MDAzZXJ4X2NhbGxiYWNrID0geGdlbmVfaHdtb25fcGNjX3J4X2NiO1xuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jOjY2ODpcdFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cdTAwM2VtYm94X2lkeCk7XG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNjY5LVx0XHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuLS1cbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jPTQzNj1zdGF0aWMgaW50IHhnZW5lX3NsaW1wcm9faTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc3LVx0XHRjbC1cdTAwM2VyeF9jYWxsYmFjayA9IHNsaW1wcm9faTJjX3BjY19yeF9jYjtcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jOjQ3ODpcdFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cdTAwM2VtYm94X2lkeCk7XG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYy00NzktXHRcdGlmIChJU19FUlIocGNjX2NoYW4pKVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zMTM9c3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNDgtLyoqXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzQ5OiAqIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCAtIFBDQyBjbGllbnRzIGNhbGwgdGhpcyBmdW5jdGlvbiB0b1xuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM1MC0gKlx0XHRyZXF1ZXN0IGEgcG9pbnRlciB0byB0aGVpciBQQ0Mgc3Vic3BhY2UsIGZyb20gd2hpY2ggdGhleVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zNjA9c3RydWN0IHBjY19tYm94X2NoYW4gKlxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM2MTpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM2Mi17XG4tLVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5Mi19XG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzkzOkVYUE9SVF9TWU1CT0xfR1BMKHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCk7XG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzk0LVxuLS1cbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTgtICogQHBjaGFuOiBQb2ludGVyIHRvIHRoZSBQQ0MgbWFpbGJveCBjaGFubmVsIGFzIHJldHVybmVkIGJ5XG5kcml2ZXJzL21haWxib3gvcGNjLmM6Mzk5OiAqXHQgICBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoKVxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTQwMC0gKi9cbi0tXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmM9MTczPXN0YXRpYyBpbnQgaGNjc19yZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgaGNjc19kZXYgKmhkZXYpXG4tLVxuZHJpdmVycy9zb2MvaGlzaWxpY29uL2t1bnBlbmdfaGNjcy5jLTE4OC1cbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYzoxODk6XHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChjbCwgaGRldi1cdTAwM2VjaGFuX2lkKTtcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xOTAtXHRpZiAoSVNfRVJSKHBjY19jaGFuKSkge1xuLS1cbmluY2x1ZGUvYWNwaS9wY2MuaD0zNz1leHRlcm4gc3RydWN0IHBjY19tYm94X2NoYW4gKlxuaW5jbHVkZS9hY3BpL3BjYy5oOjM4OnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpO1xuaW5jbHVkZS9hY3BpL3BjYy5oLTM5LWV4dGVybiB2b2lkIHBjY19tYm94X2ZyZWVfY2hhbm5lbChzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqY2hhbik7XG4tLVxuaW5jbHVkZS9hY3BpL3BjYy5oPTQxPXN0YXRpYyBpbmxpbmUgc3RydWN0IHBjY19tYm94X2NoYW4gKlxuaW5jbHVkZS9hY3BpL3BjYy5oOjQyOnBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChzdHJ1Y3QgbWJveF9jbGllbnQgKmNsLCBpbnQgc3Vic3BhY2VfaWQpXG5pbmNsdWRlL2FjcGkvcGNjLmgtNDMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDMwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIFJBUzIgU2NydWIgSW50ZXJmYWNlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHdlIGNhbiBmdXp6IHRoZSBSQVMyIGRyaXZlciBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggRURBQyBzY3J1YiBpbnRlcmZhY2VzLiBGaXJzdCwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGUgUENDIG1haWxib3ggZHJpdmVyIGlzIGFjY2Vzc2libGUgdmlhIEFDUEkgdGFibGUgaW5qZWN0aW9uLCBzcGVjaWZpY2FsbHkgUENDVC4gIElmIHN5emthbGxlciBpbmplY3RzIGEgUENDVCB0YWJsZSwgdGhlIFBDQyBtYWlsYm94IHNob3VsZCBpbml0aWFsaXplIGNoYW5uZWxzLCBhbmQgdGhlbiB0aGUgUkFTMiBkcml2ZXIgc2hvdWxkIGluaXRpYWxpemUgaXRzZWxmIGlmIGEgUkFTMiB0YWJsZSBpcyBhbHNvIGluamVjdGVkLCB3aGljaCBtZWFucyB3ZSBjYW4gcmVhY2ggaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGBlZGFjX2Rldl9yZWdpc3RlcmAgY2FsbCBpbiBgcmFzMl9tZW1fZHJ2X3Byb2JlYC4gVGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlcyBiZWluZyBleHBvc2VkIHZpYSBzeXNmcy4gVGhpcyBpcyBncmVhdCwgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhvc2Ugc3lzZnMgZmlsZXMgdG8gdHJpZ2dlciB0aGUgc2NydWIgb3BlcmF0aW9ucy4gSSYjMzk7bSBzZWVpbmcgdGhlIGZpbGVzIGFyZTogYC9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9lbmFibGVfZGVtYW5kYCwgYC9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9zaXplYCwgYC9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9hZGRyYCwgYC9zeXMvYnVzL2VkYWMvZGV2aWNlcy8mbHQ7ZGV2LW5hbWUmZ3Q7L3NjcnViWC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uYCwgYW5kIGAvc3lzL2J1cy9lZGFjL2RldmljZXMvJmx0O2Rldi1uYW1lJmd0Oy9zY3J1YlgvZW5hYmxlX2JhY2tncm91bmRgLgoKVGhlIGtleSBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIG9wZXJhdGlvbnMuIExvb2tpbmcgYXQgYHJhczJfc2NydWJfb3BzYCwgSSBzZWUgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBgcmVhZF9hZGRyYCwgYHJlYWRfc2l6ZWAsIGB3cml0ZV9hZGRyYCwgYHdyaXRlX3NpemVgLCBgZ2V0X2VuYWJsZWRfYmdgLCBgc2V0X2VuYWJsZWRfYmdgLCBgZ2V0X2VuYWJsZWRfb2RgLCBgc2V0X2VuYWJsZWRfb2RgLCBgZ2V0X21pbl9jeWNsZWAsIGBnZXRfbWF4X2N5Y2xlYCwgYGdldF9jeWNsZV9kdXJhdGlvbmAsIGFuZCBgc2V0X2N5Y2xlX2R1cmF0aW9uYC4gVGhpcyBpcyBhIGNsZWFyIHRhcmdldCBmb3IgZnV6emluZy4gV2UgY2FuIHByb3ZpZGUgYXJiaXRyYXJ5IHZhbHVlcyB0byB0aGVzZSBmaWxlcyBhbmQgb2JzZXJ2ZSB0aGUgZWZmZWN0cywgc2VlaW5nIGlmIHdlIGNhbiB0cmlnZ2VyIGFueSBtZW1vcnkgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCBgQ09ORklHX0FDUElfUkFTMmAsIGBDT05GSUdfTUVNX0FDUElfUkFTMmAsIGFuZCBgQ09ORklHX0VEQUNfU0NSVUJgLiBMZXQmIzM5O3MgY29uZmlybSBob3cgdGhlc2UgcmVsYXRlLi4uIEFoYSwgYE1FTV9BQ1BJX1JBUzJgICpkZXBlbmRzKiBvbiBgQUNQSV9SQVMyYCwgYEVEQUNgLCBhbmQgYEVEQUNfU0NSVUJgLiBTbywgZW5zdXJpbmcgdGhhdCBgTUVNX0FDUElfUkFTMmAgaXMgZW5hYmxlZCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSB0aGUgb3RoZXJzLCB3aGljaCBpcyBpZGVhbC4gTGV0IG1lIGdvIGNoZWNrIGBkcml2ZXJzL3Jhcy9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNX0FDUElfUkFTMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3Jhcy9LY29uZmlnPTM3PWNvbmZpZyBSQVNfRk1QTVxuLS1cbmRyaXZlcnMvcmFzL0tjb25maWctNDgtXG5kcml2ZXJzL3Jhcy9LY29uZmlnOjQ5OmNvbmZpZyBNRU1fQUNQSV9SQVMyXG5kcml2ZXJzL3Jhcy9LY29uZmlnLTUwLVx0dHJpc3RhdGUgXCYjMzQ7TWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDM5OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0ZXh0LCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIFJBUyBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgZHJpdmVycy9yYXMvS2NvbmZpZ2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgYE1FTV9BQ1BJX1JBUzJgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBSQVMsIG9yIFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIGFuZCBTZXJ2aWNlYWJpbGl0eSwgaXMgY3JpdGljYWwsIG9idmlvdXNseS4gQW5kIGBBQ1BJYCBhbG1vc3QgY2VydGFpbmx5IGluZGljYXRlcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIHBsYXRmb3JtIGludGVyZmFjZXMuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGludGVyZXN0ZWQgaW4gZXJyb3IgaGFuZGxpbmcgb3IgbWVtb3J5IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gQUNQSS1kZWZpbmVkIGZlYXR1cmVzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgYE1FTV9BQ1BJX1JBUzJgIHJlbGF0ZXMgdG8gdGhlIGJyb2FkZXIgUkFTIGluZnJhc3RydWN0dXJlOyBwZXJoYXBzIGl0JiMzOTtzIGFuIGVuaGFuY2VtZW50LCBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBvciBhIGZhbGxiYWNrIG1lY2hhbmlzbS4gSSYjMzk7bGwgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBhc3NvY2lhdGVkIGZlYXR1cmVzLiBUaGlzIHNob3VsZCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgY29uZmlndXJlcyByZWxpYWJpbGl0eSBmZWF0dXJlcyBiYXNlZCBvbiBBQ1BJLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9yYXMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdGRlcGVuZHMgb24gQU1EX0FUTCBcdTAwMjZcdTAwMjYgQUNQSV9BUEVJXG4gIDQxOlx0XHRoZWxwXG4gIDQyOlx0XHQgIFN1cHBvcnQgc2F2aW5nIGFuZCByZXN0b3JpbmcgbWVtb3J5IGVycm9yIGluZm9ybWF0aW9uIGFjcm9zcyByZWJvb3RcbiAgNDM6XHRcdCAgdXNpbmcgQUNQSSBFUlNUIGFzIHBlcnNpc3RlbnQgc3RvcmFnZS4gRXJyb3IgaW5mb3JtYXRpb24gaXMgc2F2ZWQgd2l0aFxuICA0NDpcdFx0ICB0aGUgVUVGSSBDUEVSIFwmIzM0O0ZSVSBNZW1vcnkgUG9pc29uXCYjMzQ7IHNlY3Rpb24gZm9ybWF0LlxuICA0NTpcdFxuICA0NjpcdFx0ICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvblxuICA0NzpcdFx0ICBwbGF0Zm9ybS1zcGVjaWZpYyBwb2xpY2llcy5cbiAgNDg6XHRcbiAgNDk6XHRjb25maWcgTUVNX0FDUElfUkFTMlxuICA1MDpcdFx0dHJpc3RhdGUgXCYjMzQ7TWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcJiMzNDtcbiAgNTE6XHRcdGRlcGVuZHMgb24gQUNQSV9SQVMyXG4gIDUyOlx0XHRkZXBlbmRzIG9uIEVEQUNcbiAgNTM6XHRcdGRlcGVuZHMgb24gRURBQ19TQ1JVQlxuICA1NDpcdFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPXG4gIDU1Olx0XHRoZWxwXG4gIDU2Olx0XHQgIFRoZSBkcml2ZXIgYmluZHMgdG8gdGhlIGF1eGlsaWFyeSBkZXZpY2UgYWRkZWQgYnkgdGhlIEFDUEkgUkFTMlxuICA1NzpcdFx0ICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG9cbiAgNTg6XHRcdCAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQUNQSS1jb21wbGlhbnQgcGxhdGZvcm0gYW5kIHByb3ZpZGVzXG4gIDU5Olx0XHQgIGNvbnRyb2wgb2YgdGhlIEhXLWJhc2VkIG1lbW9yeSBzY3J1YmJlciBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ5NTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBSZWxpYWJpbGl0eSBGcmFtZXdvcmsqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSwgYE1FTV9BQ1BJX1JBUzJg4oCmIHRoYXQgcmluZ3MgYSBiZWxsLiBBaCwgcmlnaHQsIGl0JiMzOTtzIGRlZmluaXRlbHkgdGllZCB0byBgQUNQSV9SQVMyYCwgYW5kIG9mIGNvdXJzZSwgdGhhdCBpbXBsaWVzIGEgbGluayB0byBgRURBQ2AgYW5kIGBFREFDX1NDUlVCYC4gU2VlbXMgbGlrZSBhIHByZXR0eSBmb2N1c2VkIGFyZWEg4oCTIG1lbW9yeSBlcnJvciBjb3JyZWN0aW9uIHdpdGhpbiB0aGUgQUNQSSBmcmFtZXdvcmsuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBhbnl0aGluZyBlbHNlLCBJIHNob3VsZCBjaGVjayB0aGUgc291cmNlLiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCYjMzk7cyBnZXQgdGhlIEtjb25maWcgZmlsZSBmb3IgQUNQSSwgdGhhdCBzaG91bGQgdGVsbCBtZSB3aGF0IHRoYXQgYEFDUElfUkFTMmAgc3ltYm9sIGlzIGFsbCBhYm91dC4gSG9wZWZ1bGx5IEkgY2FuIGdldCBhIGJldHRlciBvdmVydmlldyBvZiBkZXBlbmRlbmNpZXMgdGhpcyB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9hY3BpL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0ICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGlzIGZpbGUgaW1wbGVtZW50cyBjb21tb24gZnVuY3Rpb25hbGl0eVxuIDI5MTpcdFx0ICB0byBwYXJzZSBDUFBDIHRhYmxlcyBhcyBkZXNjcmliZWQgaW4gdGhlIEFDUEkgNS4xJiM0Mzsgc3BlYy4gVGhlXG4gMjkyOlx0XHQgIHJvdXRpbmVzIGltcGxlbWVudGVkIGFyZSBtZWFudCB0byBiZSB1c2VkIGJ5IG90aGVyXG4gMjkzOlx0XHQgIGRyaXZlcnMgdG8gY29udHJvbCBDUFUgcGVyZm9ybWFuY2UgdXNpbmcgQ1BQQyBzZW1hbnRpY3MuXG4gMjk0Olx0XHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIDI5NTpcdFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiAyOTY6XHRcbiAyOTc6XHRjb25maWcgQUNQSV9SQVMyXG4gMjk4Olx0XHRib29sIFwmIzM0O0FDUEkgUkFTMiBkcml2ZXJcJiMzNDtcbiAyOTk6XHRcdHNlbGVjdCBBVVhJTElBUllfQlVTXG4gMzAwOlx0XHRkZXBlbmRzIG9uIE1BSUxCT1hcbiAzMDE6XHRcdGRlcGVuZHMgb24gUENDXG4gMzAyOlx0XHRoZWxwXG4gMzAzOlx0XHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXG4gMzA0Olx0XHQgIHBsYXRmb3JtIFJBUyBmZWF0dXJlcywgc3VjaCBhcyBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nLlxuIDMwNTpcdFxuIDMwNjpcdFx0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxuIDMwNzpcdFxuIDMwODpcdGNvbmZpZyBBQ1BJX1BST0NFU1NPUlxuIDMwOTpcdFx0dHJpc3RhdGUgXCYjMzQ7UHJvY2Vzc29yXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NTEwCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSByZXF1aXJlbWVudHMsIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGlzIHNwYWNlOgoKKipEaWdnaW5nIGludG8gdGhlIFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIGFuZCBTZXJ2aWNlYWJpbGl0eSBSZXF1aXJlbWVudHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyByZWxpYWJpbGl0eSBhbmQgUkFTIHN0dWZmLiBJIHNlZSBhIGZldyBrZXkgZWxlbWVudHMganVtcGluZyBvdXQ6IGBBQ1BJX1JBUzJgLCBgTUVNX0FDUElfUkFTMmAsIGBFREFDX1NDUlVCYCwgYFBDQ2AsIGFuZCBgTUFJTEJPWGAuIFRoZXNlIGFsbCBwb2ludCB0byBkaWZmZXJlbnQgbGV2ZWxzIG9mIGVycm9yIGRldGVjdGlvbiwgY29ycmVjdGlvbiwgYW5kIGhhbmRsaW5nIHdpdGhpbiB0aGUgc3lzdGVtLiBgQUNQSV9SQVMyYCBhbmQgYE1FTV9BQ1BJX1JBUzJgIGxpa2VseSBhZGRyZXNzIGZpcm13YXJlLWJhc2VkIGFuZCBtZW1vcnktc3BlY2lmaWMgUkFTIGNhcGFiaWxpdGllcywgd2hpY2ggYXJlIGZ1bmRhbWVudGFsLiBgUENDYCBwcm9iYWJseSByZWZlcnMgdG8gUGxhdGZvcm0gQ29udHJvbCBDb21wb25lbnQsIHN1Z2dlc3Rpbmcgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhZHZhbmNlZCBwbGF0Zm9ybSBtYW5hZ2VtZW50IGZlYXR1cmVzLiBBbmQgdGhlIGBNQUlMQk9YYCBpbmRpY2F0ZXMgYSBtZWNoYW5pc20gZm9yIGludGVyLXByb2Nlc3NvciBvciBpbnRlci1tb2R1bGUgY29tbXVuaWNhdGlvbiBzcGVjaWZpY2FsbHkgZm9yIFJBUyBldmVudHMuCgpNeSBmaXJzdCB0aG91Z2h0IGlzIGFsd2F5cyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgY2FwYWJpbGl0aWVzIG9mIHRoZSBleGlzdGluZyBpbmZyYXN0cnVjdHVyZS4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgc29tZXRoaW5nIHF1aWNrbHk6IElzIGBFREFDX1NDUlVCYCBhY3R1YWxseSBhIGNvbmZpZ3VyYWJsZSBvcHRpb24/IFVuZGVyc3RhbmRpbmcgdGhlIGJ1aWxkL2NvbmZpZyBvcHRpb25zIGZvciBhIHNjcnViIGFsbG93cyB1cyB0byBkZXRlcm1pbmUgd2hhdCBjYW4gYmUgY3VzdG9taXplZCBhbmQgaWYgd2UgY2FuIG1vZGlmeSB0aGUgd2F5IHRoZSBFREFDIHNjcnViIHdvcmtzLiBJcyBpdCBqdXN0IGEgZHJpdmVyLCBvciBhIGNvbXByZWhlbnNpdmUgbWVjaGFuaXNtIHRoYXQgbmVlZHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGluIGl0cyBjb250ZXh0PyBHZXR0aW5nIHRoaXMgY2xhcml0eSBpcyBrZXkgdG8gZGVjaWRpbmcgaG93IHdlIGNhbiBpbnRlZ3JhdGUgYWxsIHRoZXNlIGNvbXBvbmVudHMgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIGEgZm91bmRhdGlvbmFsIHF1ZXN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRURBQ19TQ1JVQiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2VkYWMvS2NvbmZpZz00Nz1jb25maWcgRURBQ19HSEVTXG4tLVxuZHJpdmVycy9lZGFjL0tjb25maWctNjktXG5kcml2ZXJzL2VkYWMvS2NvbmZpZzo3MDpjb25maWcgRURBQ19TQ1JVQlxuZHJpdmVycy9lZGFjL0tjb25maWctNzEtXHRib29sIFwmIzM0O0VEQUMgc2NydWIgZmVhdHVyZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTk1OQoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBTeXN0ZW0gQ29uZmlndXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMsIGFuZCB5ZXAsICpFREFDX1NDUlVCKi4uLiB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSBjb25maWd1cmF0aW9uIHNldHRpbmcuIEdvdCBpdC4gTm93LCB3aGF0JiMzOTtzIG5leHQ/IExldCBtZSBzaGlmdCBteSBmb2N1cy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0ICpQQ0MqLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBnbyBmcm9tIGhlcmUsIGxldCYjMzk7cyBleHBsb3JlIHRoYXQgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBDQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21haWxib3gvS2NvbmZpZz0xMTQ9Y29uZmlnIFJPQ0tDSElQX01CT1hcbi0tXG5kcml2ZXJzL21haWxib3gvS2NvbmZpZy0xMjItXG5kcml2ZXJzL21haWxib3gvS2NvbmZpZzoxMjM6Y29uZmlnIFBDQ1xuZHJpdmVycy9tYWlsYm94L0tjb25maWctMTI0LVx0Ym9vbCBcJiMzNDtQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9wY21jaWEvS2NvbmZpZy01LVxuZHJpdmVycy9wY21jaWEvS2NvbmZpZzo2Om1lbnVjb25maWcgUENDQVJEXG5kcml2ZXJzL3BjbWNpYS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtQQ0NhcmQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9wY21jaWEvS2NvbmZpZz0yMTM9Y29uZmlnIEVMRUNUUkFfQ0Zcbi0tXG5kcml2ZXJzL3BjbWNpYS9LY29uZmlnLTIxOS1cbmRyaXZlcnMvcGNtY2lhL0tjb25maWc6MjIwOmNvbmZpZyBQQ0NBUkRfTk9OU1RBVElDXG5kcml2ZXJzL3BjbWNpYS9LY29uZmlnLTIyMS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYyOTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA5NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFRhcmdldCBmb3IgRnV6emluZzogUENDIGFuZCBSQVMyKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgUENDYCB0aGluZy4gRmlyc3QgdGhpbmdzIGZpcnN0OiBjb25maXJtIHRoYXQgYFBDQ2AgaXMgaW5kZWVkIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBJIHNlZSBpdCBpcyBpbiBgZHJpdmVycy9tYWlsYm94L0tjb25maWdgLiBSaWdodCwgc28gdG8gZW5hYmxlIHRoZSBgUENDYCBmdW5jdGlvbmFsaXR5LCBJJiMzOTtsbCBuZWVkIHRvIGVuYWJsZSB0aGVzZSBjb25maWdzOiBgQUNQSV9SQVMyYCwgYE1FTV9BQ1BJX1JBUzJgLCBgRURBQ19TQ1JVQmAgYW5kIGBQQ0NgLCBhbmQgcHJvYmFibHkgYE1BSUxCT1hgIGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGNvcmUgc3Vic3lzdGVtLgoKTm93LCBsZXQmIzM5O3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucy4gTG9va2luZyBhdCBgZHJpdmVycy9hY3BpL3JhczIuY2AsIHRoZXJlIGFyZSB0aGVzZSBuZXcgZnVuY3Rpb25zOiBgcmFzMl9zZW5kX3BjY19jbWRgLCBgcmVnaXN0ZXJfcGNjX2NoYW5uZWxgLCBgYWRkX2F1eF9kZXZpY2VgLCBgcGFyc2VfcmFzMl90YWJsZWAsIGFuZCBgYWNwaV9yYXMyX2luaXRgLiBUaGVuLCBpbiBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLCBJIHNlZSBhIGxhcmdlciBzZXQgb2YgaW50ZXJlc3Rpbmcgcm91dGluZXM6IGByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0YCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlYCwgYHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGVgLCBgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkYCwgYHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGVgLCBgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHJgLCBgcmFzMl9od19zY3J1Yl9yZWFkX3NpemVgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZWAsIGByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnYCwgYF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZ2AsIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2RgLCBgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZGAsIGFuZCBgcmFzMl9tZW1fZHJ2X3Byb2JlYC4KCkFscmlnaHQsIHRpbWUgdG8gcmVmaW5lIHRoZSBhdHRhY2sgc3VyZmFjZSBmb3IgZnV6emluZy4gSW5pdGlhbGx5LCBJIHRoaW5rIHRoZSBjcml0aWNhbCBvbmVzIGFyZTogYHJhczJfc2VuZF9wY2NfY21kYCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcmAsIGByYXMyX2h3X3NjcnViX3dyaXRlX3NpemVgLCBgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2RgLCBgcmFzMl9tZW1fZHJ2X3Byb2JlYCwgYW5kIGBwYXJzZV9yYXMyX3RhYmxlYC4KCkhhbmcgb24uLi4gSSBzZWUgYHJhczJfc2VuZF9wY2NfY21kYCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBzaG91bGQgY2hlY2sgYGRyaXZlcnMvZWRhYy9zY3J1Yi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXcgc3lzZnMgYXR0cmlidXRlcyBvciBhbnl0aGluZyBlbHNlIHRvIGNvbnNpZGVyLiBTZWVtcyBsaWtlIHRoZXJlJiMzOTtzIGEgc2ltcGxlIGFkZGl0aW9uIG9mIGBlbmFibGVfZGVtYW5kYCB0byB0aGUgc3lzZnMgYXR0cmlidXRlcyBhbmQgYSBtb2RpZmljYXRpb24gb2YgYHNjcnViX2F0dHJfdmlzaWJsZWAsIG5vdGhpbmcgbWFqb3IuCgpTbywgbGV0IG1lIHJlLWV2YWx1YXRlIHRoZSB0YXJnZXQgbGlzdCwgYWZ0ZXIgdGhpcyBxdWljayBzY2FuIG9mIHRoZSBgZWRhY2Agc2lkZTogYHJhczJfc2VuZF9wY2NfY21kYCwgYHBhcnNlX3JhczJfdGFibGVgLCBgcmFzMl9tZW1fZHJ2X3Byb2JlYCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcmAsIGByYXMyX2h3X3NjcnViX3dyaXRlX3NpemVgLCBgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYW5kIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FjcGlfcmFzMl9pbml0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNwaS9idXMuYz0xNTc2PXN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvYWNwaS9idXMuYy0xNjEzLVx0YWNwaV92aW90X2luaXQoKTtcbmRyaXZlcnMvYWNwaS9idXMuYzoxNjE0Olx0YWNwaV9yYXMyX2luaXQoKTtcbmRyaXZlcnMvYWNwaS9idXMuYy0xNjE1LVxuLS1cbmRyaXZlcnMvYWNwaS9yYXMyLmM9NDE5PXN0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcbi0tXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTQ3Ny0vKipcbmRyaXZlcnMvYWNwaS9yYXMyLmM6NDc4OiAqIGFjcGlfcmFzMl9pbml0IC0gUkFTMiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTQ3OS0gKlxuLS1cbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDg2LSAqL1xuZHJpdmVycy9hY3BpL3JhczIuYzo0ODc6dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZClcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDg4LXtcbi0tXG5pbmNsdWRlL2FjcGkvcmFzMi5oPTU3PXN0cnVjdCByYXMyX21lbV9jdHgge1xuLS1cbmluY2x1ZGUvYWNwaS9yYXMyLmgtNzktI2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbmluY2x1ZGUvYWNwaS9yYXMyLmg6ODA6dm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XG5pbmNsdWRlL2FjcGkvcmFzMi5oLTgxLWludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XG5pbmNsdWRlL2FjcGkvcmFzMi5oLTgyLSNlbHNlXG5pbmNsdWRlL2FjcGkvcmFzMi5oOjgzOnN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cbmluY2x1ZGUvYWNwaS9yYXMyLmgtODQtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDE4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjM3CgkJCQkJCQlvdXRwdXQ6IDMwMwoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXcgQUNQSSBSQVMyIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXcgQUNQSSBSQVMyIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBicmFpbiBzdGFydHMgY2h1cm5pbmcuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIHdheSB0byBoYW5kbGUgbWVtb3J5IHNjcnViYmluZyB0aHJvdWdoIEFDUEkgYW5kIGV4cG9zZSBpdCB0aHJvdWdoIHN5c2ZzLiBJIGNhbiBzZWUgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgcmlnaHQgYXdheS4gVGhpcyBkcml2ZXIgcGFyc2VzIHRoZSBSQVMyIEFDUEkgdGFibGUsIHdoaWNoIGlzIGEga2V5IHN0cnVjdHVyZS4gSXQgdGhlbiByZWdpc3RlcnMgdGhlc2UgYXV4aWxpYXJ5IGRldmljZXMsIGFuZCBhIGJpbmRpbmcgZHJpdmVyIGlzIGluY2x1ZGVkIHRvIGludGVyYWN0IHdpdGggdGhlbSwgZXhwb3NpbmcgRURBQyBzY3J1YiBpbnRlcmZhY2VzIGZvciBjb250cm9sIHRocm91Z2ggdGhlIFBDQy4KClRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhpcyBzZXR1cCBpcyAqcmVhY2hhYmxlKiBieSBzeXprYWxsZXIuIFN5emthbGxlciBjYW4gaW5qZWN0IGN1c3RvbSBBQ1BJIHRhYmxlcywgaW5jbHVkaW5nIFJBUzIgYW5kIFBDQ1QsIGFuZCBpdCBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlcy4gVGhpcyBpcyBwcmltZSBmdXp6aW5nIHRlcnJpdG9yeS4gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHMsIHRoZXkmIzM5O3JlIHRoZSBhdHRhY2sgc3VyZmFjZTogYHBhcnNlX3JhczJfdGFibGVgLCBgcmFzMl9zZW5kX3BjY19jbWRgLCBgcmFzMl9tZW1fZHJ2X3Byb2JlYCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcmAsIGByYXMyX2h3X3NjcnViX3dyaXRlX3NpemVgLCBgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYW5kIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kYC4gRWFjaCBvbmUgb2YgdGhlc2UsIHBhcnRpY3VsYXJseSB0aGUgKndyaXRlKiBvcGVyYXRpb25zLCBuZWVkcyBtZXRpY3Vsb3VzIHNjcnV0aW55LgoKVGhlIGNvbmZpZ3VyYXRpb25zIHRvIGxvb2sgb3V0IGZvciBhcmUgYEFDUElfUkFTMmAsIGBNRU1fQUNQSV9SQVMyYCwgYEVEQUNfU0NSVUJgLCBhbmQgYFBDQ2AuIFRoZXNlIGFyZSB0aGUgZ2F0ZXMgYW5kIGluZGljYXRvcnMgdG8gbWFrZSBzdXJlIHdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSByaWdodCBlbnZpcm9ubWVudC4KCkFscmlnaHQsIHRpbWUgdG8gc2V0IHNvbWUgZXhwZWN0YXRpb25zIGFuZCByZXN1bHRzLiBUaGlzIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgZnV6emVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxODo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUNQSV9SQVMyJiMzNDssCiAgICAmIzM0O01FTV9BQ1BJX1JBUzImIzM0OywKICAgICYjMzQ7RURBQ19TQ1JVQiYjMzQ7LAogICAgJiMzNDtQQ0MmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYXJzZV9yYXMyX3RhYmxlJiMzNDssCiAgICAmIzM0O3JhczJfc2VuZF9wY2NfY21kJiMzNDssCiAgICAmIzM0O3JhczJfbWVtX2Rydl9wcm9iZSYjMzQ7LAogICAgJiMzNDtyYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlJiMzNDssCiAgICAmIzM0O3JhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nJiMzNDssCiAgICAmIzM0O3JhczJfc2NydWJfbW9uaXRvcl90aHJlYWQmIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZSYjMzQ7LAogICAgJiMzNDtyYXMyX2h3X3NjcnViX3dyaXRlX2FkZHImIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl93cml0ZV9zaXplJiMzNDssCiAgICAmIzM0O19fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyYjMzQ7LAogICAgJiMzNDtyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQUNQSSBSQVMyIGRyaXZlciB0aGF0IHBhcnNlcyB0aGUgUkFTMiBBQ1BJIHRhYmxlIGFuZCByZWdpc3RlcnMgYXV4aWxpYXJ5IGRldmljZXMgZm9yIG1lbW9yeSBzY3J1YmJpbmcuIEl0IGFsc28gYWRkcyBhIGRyaXZlciB0aGF0IGJpbmRzIHRvIHRoZXNlIGF1eGlsaWFyeSBkZXZpY2VzIGFuZCBleHBvc2VzIEVEQUMgc2NydWIgc3lzZnMgaW50ZXJmYWNlcyB0byBjb250cm9sIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcgdmlhIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKS4gU2luY2Ugc3l6a2FsbGVyIGNhbiBpbmplY3QgQUNQSSB0YWJsZXMgKGluY2x1ZGluZyBSQVMyIGFuZCBQQ0NUKSBhbmQgaW50ZXJhY3Qgd2l0aCBzeXNmcywgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FDUElfUkFTMiYjMzQ7LAogICAgJiMzNDtNRU1fQUNQSV9SQVMyJiMzNDssCiAgICAmIzM0O0VEQUNfU0NSVUImIzM0OywKICAgICYjMzQ7UENDJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFyc2VfcmFzMl90YWJsZSYjMzQ7LAogICAgJiMzNDtyYXMyX3NlbmRfcGNjX2NtZCYjMzQ7LAogICAgJiMzNDtyYXMyX21lbV9kcnZfcHJvYmUmIzM0OywKICAgICYjMzQ7cmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZSYjMzQ7LAogICAgJiMzNDtyYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyYjMzQ7LAogICAgJiMzNDtyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUmIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl93cml0ZV9hZGRyJiMzNDssCiAgICAmIzM0O3JhczJfaHdfc2NydWJfd3JpdGVfc2l6ZSYjMzQ7LAogICAgJiMzNDtfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcmIzM0OywKICAgICYjMzQ7cmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEFDUEkgUkFTMiBkcml2ZXIgdGhhdCBwYXJzZXMgdGhlIFJBUzIgQUNQSSB0YWJsZSBhbmQgcmVnaXN0ZXJzIGF1eGlsaWFyeSBkZXZpY2VzIGZvciBtZW1vcnkgc2NydWJiaW5nLiBJdCBhbHNvIGFkZHMgYSBkcml2ZXIgdGhhdCBiaW5kcyB0byB0aGVzZSBhdXhpbGlhcnkgZGV2aWNlcyBhbmQgZXhwb3NlcyBFREFDIHNjcnViIHN5c2ZzIGludGVyZmFjZXMgdG8gY29udHJvbCBoYXJkd2FyZS1iYXNlZCBtZW1vcnkgc2NydWJiaW5nIHZpYSBQQ0MgKFBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCkuIFNpbmNlIHN5emthbGxlciBjYW4gaW5qZWN0IEFDUEkgdGFibGVzIChpbmNsdWRpbmcgUkFTMiBhbmQgUENDVCkgYW5kIGludGVyYWN0IHdpdGggc3lzZnMsIHRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDc6MDkuOTk2NjA4MzY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzIxMzI4ODQ5OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQUNQSV9SQVMyXCIsXG4gICAgXCJNRU1fQUNQSV9SQVMyXCIsXG4gICAgXCJFREFDX1NDUlVCXCIsXG4gICAgXCJQQ0NcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXJzZV9yYXMyX3RhYmxlXCIsXG4gICAgXCJyYXMyX3NlbmRfcGNjX2NtZFwiLFxuICAgIFwicmFzMl9tZW1fZHJ2X3Byb2JlXCIsXG4gICAgXCJyYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlXCIsXG4gICAgXCJyYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZ1wiLFxuICAgIFwicmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZFwiLFxuICAgIFwicmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZVwiLFxuICAgIFwicmFzMl9od19zY3J1Yl93cml0ZV9hZGRyXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3dyaXRlX3NpemVcIixcbiAgICBcIl9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZ1wiLFxuICAgIFwicmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQUNQSSBSQVMyIGRyaXZlciB0aGF0IHBhcnNlcyB0aGUgUkFTMiBBQ1BJIHRhYmxlIGFuZCByZWdpc3RlcnMgYXV4aWxpYXJ5IGRldmljZXMgZm9yIG1lbW9yeSBzY3J1YmJpbmcuIEl0IGFsc28gYWRkcyBhIGRyaXZlciB0aGF0IGJpbmRzIHRvIHRoZXNlIGF1eGlsaWFyeSBkZXZpY2VzIGFuZCBleHBvc2VzIEVEQUMgc2NydWIgc3lzZnMgaW50ZXJmYWNlcyB0byBjb250cm9sIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcgdmlhIFBDQyAoUGxhdGZvcm0gQ29tbXVuaWNhdGlvbiBDaGFubmVsKS4gU2luY2Ugc3l6a2FsbGVyIGNhbiBpbmplY3QgQUNQSSB0YWJsZXMgKGluY2x1ZGluZyBSQVMyIGFuZCBQQ0NUKSBhbmQgaW50ZXJhY3Qgd2l0aCBzeXNmcywgdGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjQ3OjA5Ljk5NjYxMzgxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM2MjM3NTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgM2JlY2I0ZjJiNzIzNDNiYjc1NGYxNGM2MTlkYjM1YzdhNGYzODMwNVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxMCAxODo0NzowOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcXG5pbmRleCBhYjYwMTQ3NDNkYTU2OC4uMmI4NzRlMDMzNjIzMzQgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXFxuQEAgLTIwLDExICsyMCw3IEBAIEtlcm5lbFZlcnNpb246XFx0Ni4xNVxcbiBDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuIERlc2NyaXB0aW9uOlxcbiBcXHRcXHQoUlcpIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4tXFx0XFx0Zm9yIG9uLWRlbWFuZCBzY3J1YmJpbmcuIFNldHRpbmcgYWRkcmVzcyBzdGFydHMgc2NydWJiaW5nLlxcbi1cXHRcXHRUaGUgc2l6ZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhhdC5cXG4tXFxuLVxcdFxcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcXG4tXFx0XFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXFxuK1xcdFxcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxcbiBcXG4gV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1Ylgvc2l6ZVxcbiBEYXRlOlxcdFxcdE1hcmNoIDIwMjVcXG5AQCAtMzQsNiArMzAsMTQgQEAgRGVzY3JpcHRpb246XFxuIFxcdFxcdChSVykgVGhlIHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gYmUgc2NydWJiZWRcXG4gXFx0XFx0KG9uLWRlbWFuZCBzY3J1YmJpbmcpLlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2J1cy9lZGFjL2RldmljZXMvXFx1MDAzY2Rldi1uYW1lXFx1MDAzZS9zY3J1YlgvZW5hYmxlX2RlbWFuZFxcbitEYXRlOlxcdFxcdEphbiAyMDI2XFxuK0tlcm5lbFZlcnNpb246XFx0Ni4xOVxcbitDb250YWN0OlxcdGxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnXFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHQoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzXFxuK1xcdFxcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cXHUwMDNjZGV2LW5hbWVcXHUwMDNlL3NjcnViWC9lbmFibGVfYmFja2dyb3VuZFxcbiBEYXRlOlxcdFxcdE1hcmNoIDIwMjVcXG4gS2VybmVsVmVyc2lvbjpcXHQ2LjE1XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XFxuaW5kZXggMmNmYTc0ZmExZmZkMmYuLjU2MmJmZDZmZjYzMDUxIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XFxuQEAgLTM0MCwzICszNDAsNzMgQEAgY29udHJvbGxlciBvciBwbGF0Zm9ybSB3aGVuIHVuZXhwZWN0ZWRseSBoaWdoIGVycm9yIHJhdGVzIGFyZSBkZXRlY3RlZC5cXG4gXFxuIFN5c2ZzIGZpbGVzIGZvciBzY3J1YmJpbmcgYXJlIGRvY3VtZW50ZWQgaW5cXG4gYERvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1lY3NgXFxuK1xcbiszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZ1xcbitcXG4rMy4xLiBEZW1hbmQgc2NydWJiaW5nIGZvciBhIHNwZWNpZmljIG1lbW9yeSByZWdpb24uXFxuK1xcbiszLjEuMS4gUXVlcnkgdGhlIHN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxcbitcXG4rMFxcbitcXG4rMy4xLjIuIFF1ZXJ5IHdoYXQgaXMgZGV2aWNlIGRlZmF1bHQvY3VycmVudCBzY3J1YiBjeWNsZSBzZXR0aW5nLlxcbitcXG4rQXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZVxcbitzY3J1YiBjeWNsZSBpcyBzZWNvbmRzLlxcbitcXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cXG4rXFxuKzM2MDAwXFxuK1xcbiszLjEuMy4gUXVlcnkgdGhlIHJhbmdlIG9mIGRldmljZSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZm9yIGEgbWVtb3J5IHJlZ2lvbi5cXG4rVGhlIHVuaXQgb2YgdGhlIHNjcnViIGN5Y2xlIHJhbmdlIGlzIHNlY29uZHMuXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWluX2N5Y2xlX2R1cmF0aW9uXFxuK1xcbiszNjAwXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvbWF4X2N5Y2xlX2R1cmF0aW9uXFxuK1xcbis4NjQwMFxcbitcXG4rMy4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnlcXG4rNDMyMDAgc2Vjb25kcyAoaGFsZiBhIGRheSkuXFxuK1xcbisjIGVjaG8gNDMyMDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxcbitcXG4rMy4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxcbitcXG4rU2V0ICdhZGRyJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cXG4rXFxuKyMgZWNobyAweDgwMDAwMDAwIFxcdTAwM2UgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2FkZHJcXG4rXFxuK1NldCAnc2l6ZScgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXFxuK1xcbisjIGVjaG8gMHgyMDAwMDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvc2l6ZVxcbitcXG4rMy4xLjYuIFN0YXJ0ICdkZW1hbmQgc2NydWJiaW5nJy5cXG4rXFxuK1doZW4gYSBkZW1hbmQgc2NydWIgaXMgc3RhcnRlZCwgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzXFxuK3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlXFxuK2RlbWFuZCBzY3J1YiBoYXMgY29tcGxldGVkLlxcbitcXG4rIyBlY2hvIDEgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxcbitcXG4rMy4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxcbitcXG4rMy4yLjEuIFF1ZXJ5IHRoZSBzdGF0dXMgb2YgYmFja2dyb3VuZCBzY3J1YmJpbmcuXFxuK1xcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcXG4rXFxuKzBcXG4rXFxuKzMuMi4yLiBQcm9ncmFtIGJhY2tncm91bmQgc2NydWJiaW5nIGZvciBSQVMyIGRldmljZSB0byByZXBlYXQgaW4gZXZlcnkgMjE2MDBcXG4rc2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXFxuK1xcbisjIGVjaG8gMjE2MDAgXFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxcbitcXG4rMy4yLjMuIFN0YXJ0ICdiYWNrZ3JvdW5kIHNjcnViYmluZycuXFxuK1xcbisjIGVjaG8gMSBcXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXFxuaW5kZXggZjE2NWQxNGNmNjFhM2EuLjUzOWZmMTQzY2NjNTIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvYWNwaS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWdcXG5AQCAtMjk0LDYgKzI5NCwxNyBAQCBjb25maWcgQUNQSV9DUFBDX0xJQlxcbiBcXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxcbiBcXHQgIGxlYXZlIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxcbiBcXG4rY29uZmlnIEFDUElfUkFTMlxcbitcXHRib29sIFxcXCJBQ1BJIFJBUzIgZHJpdmVyXFxcIlxcbitcXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbitcXHRkZXBlbmRzIG9uIE1BSUxCT1hcXG4rXFx0ZGVwZW5kcyBvbiBQQ0NcXG4rXFx0aGVscFxcbitcXHQgIEFkZCBzdXBwb3J0IGZvciB0aGUgUkFTMiBmZWF0dXJlIHRhYmxlIGFuZCBwcm92aWRlIGludGVyZmFjZXMgZm9yXFxuK1xcdCAgcGxhdGZvcm0gUkFTIGZlYXR1cmVzLCBzdWNoIGFzIGhhcmR3YXJlLWJhc2VkIG1lbW9yeSBzY3J1YmJpbmcuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgc2VsZWN0IE4uXFxuK1xcbiBjb25maWcgQUNQSV9QUk9DRVNTT1JcXG4gXFx0dHJpc3RhdGUgXFxcIlByb2Nlc3NvclxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBYODYgfHwgQVJNNjQgfHwgTE9PTkdBUkNIIHx8IFJJU0NWXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxcbmluZGV4IGQxYjBhZmZiODQ0ZjA1Li5hYmZlYzY3NDU3MjRlMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcXG5AQCAtMTA1LDYgKzEwNSw3IEBAIG9iai0kKENPTkZJR19BQ1BJX0VDX0RFQlVHRlMpXFx0Kz0gZWNfc3lzLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfQkdSVClcXHRcXHQrPSBiZ3J0Lm9cXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXFx0Kz0gY3BwY19hY3BpLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfU1BDUl9UQUJMRSlcXHQrPSBzcGNyLm9cXG4rb2JqLSQoQ09ORklHX0FDUElfUkFTMilcXHRcXHQrPSByYXMyLm9cXG4gb2JqLSQoQ09ORklHX0FDUElfREVCVUdHRVJfVVNFUikgKz0gYWNwaV9kYmcub1xcbiBvYmotJChDT05GSUdfQUNQSV9QUFRUKSBcXHQrPSBwcHR0Lm9cXG4gb2JqLSQoQ09ORklHX0FDUElfUEZSVVQpXFx0Kz0gcGZyX3VwZGF0ZS5vIHBmcl90ZWxlbWV0cnkub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmNcXG5pbmRleCBhMzBhOTA0ZjY1MzVmNC4uOGQ2YTBiNzczYmM1N2EgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jXFxuKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jXFxuQEAgLTMxLDYgKzMxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FjcGkvYXBlaS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3VzcGVuZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJtdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gXFxuQEAgLTE2MTAsNiArMTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxcbiBcXHRhY3BpX2RlYnVnZ2VyX2luaXQoKTtcXG4gXFx0YWNwaV9zZXR1cF9zYl9ub3RpZnlfaGFuZGxlcigpO1xcbiBcXHRhY3BpX3Zpb3RfaW5pdCgpO1xcbitcXHRhY3BpX3JhczJfaW5pdCgpO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9yYXMyLmMgYi9kcml2ZXJzL2FjcGkvcmFzMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjY2NzAwZTBlN2QzNTJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9hY3BpL3JhczIuY1xcbkBAIC0wLDAgKzEsNTAyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLypcXG4rICogQUNQSSBSQVMyIGZlYXR1cmUgdGFibGUgZHJpdmVyLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cXG4rICpcXG4rICogU3VwcG9ydCBmb3IgUkFTMiB0YWJsZSAtIEFDUEkgNi41IFNwZWNpZmljYXRpb24sIHNlY3Rpb24gNS4yLjIxLCB3aGljaFxcbisgKiBwcm92aWRlcyBpbnRlcmZhY2VzIGZvciBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIGUuZy4sIGZvciBIVy1iYXNlZCBtZW1vcnlcXG4rICogc2NydWJiaW5nLCBhbmQgbG9naWNhbCB0byBwaHlzaWNhbCBhZGRyZXNzIHRyYW5zbGF0aW9uIHNlcnZpY2UuIFJBUzIgdXNlc1xcbisgKiBQQ0MgY2hhbm5lbCBzdWJzcGFjZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS5cXG4rICovXFxuK1xcbisjdW5kZWYgcHJfZm10XFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXFxcIkFDUEkgUkFTMjogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvbGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NhY3BpL3BjYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IHJhczJfc3NwY2MgLSBEYXRhIHN0cnVjdHVyZSBmb3IgUENDIGNvbW11bmljYXRpb25cXG4rICogQG1ib3hfY2xpZW50OlxcdHN0cnVjdCBtYm94X2NsaWVudCBvYmplY3RcXG4rICogQHBjY19jaGFuOlxcdFxcdFBvaW50ZXIgdG8gc3RydWN0IHBjY19tYm94X2NoYW5cXG4rICogQGNvbW1fYWRkcjpcXHRcXHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXFxuKyAqIEBlbGVtOlxcdFxcdExpc3QgZm9yIHJlZ2lzdGVyZWQgUkFTMiBQQ0MgY2hhbm5lbCBzdWJzcGFjZXNcXG4rICogQHBjY19sb2NrOlxcdFxcdFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xcbisgKlxcdFxcdFxcdHRvIFBDQyBjaGFubmVsIHN1YnNwYWNlXFxuKyAqIEBkZWFkbGluZV91czpcXHRQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgdGltZW91dCBpbiBtaWNyb3NlY3NcXG4rICpcXHRcXHRcXHRmb3IgUENDIGNvbW1hbmQgY29tcGxldGlvblxcbisgKiBAcGNjX21wYXI6XFx0XFx0TWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUikgZm9yIFBDQyBjaGFubmVsXFxuKyAqIEBwY2NfbXJ0dDpcXHRcXHRNaW5pbXVtIFJlcXVlc3QgVHVybmFyb3VuZCBUaW1lIChNUlRUKSBpbiBtaWNyb3NlY3NcXG4rICpcXHRcXHRcXHRPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZVxcbisgKlxcdFxcdFxcdGlzc3VpbmcgbmV4dCBjb21tYW5kXFxuKyAqIEBsYXN0X2NtZF9jbXBsX3RpbWU6IENvbXBsZXRpb24gdGltZSBvZiBsYXN0IFBDQyBjb21tYW5kXFxuKyAqIEBsYXN0X21wYXJfcmVzZXQ6XFx0VGltZSBvZiBsYXN0IE1QQVIgY291bnQgcmVzZXRcXG4rICogQG1wYXJfY291bnQ6XFx0XFx0TVBBUiBjb3VudFxcbisgKiBAcGNjX2lkOlxcdFxcdElkZW50aWZpZXIgb2YgdGhlIFJBUzIgcGxhdGZvcm0gY29tbXVuaWNhdGlvbiBjaGFubmVsXFxuKyAqIEBsYXN0X2NtZDpcXHRcXHRMYXN0IFBDQyBjb21tYW5kXFxuKyAqIEBrcmVmOlxcdFxcdGtyZWYgb2JqZWN0XFxuKyAqL1xcbitzdHJ1Y3QgcmFzMl9zc3BjYyB7XFxuK1xcdHN0cnVjdCBtYm94X2NsaWVudFxcdFxcdG1ib3hfY2xpZW50O1xcbitcXHRzdHJ1Y3QgcGNjX21ib3hfY2hhblxcdFxcdCpwY2NfY2hhbjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtXFx0KmNvbW1fYWRkcjtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdFxcdGVsZW07XFxuK1xcdHN0cnVjdCBtdXRleFxcdFxcdFxcdHBjY19sb2NrO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRkZWFkbGluZV91cztcXG4rXFx0dW5zaWduZWQgaW50XFx0XFx0XFx0cGNjX21wYXI7XFxuK1xcdHVuc2lnbmVkIGludFxcdFxcdFxcdHBjY19tcnR0O1xcbitcXHRrdGltZV90XFx0XFx0XFx0XFx0bGFzdF9jbWRfY21wbF90aW1lO1xcbitcXHRrdGltZV90XFx0XFx0XFx0XFx0bGFzdF9tcGFyX3Jlc2V0O1xcbitcXHRpbnRcXHRcXHRcXHRcXHRtcGFyX2NvdW50O1xcbitcXHRpbnRcXHRcXHRcXHRcXHRwY2NfaWQ7XFxuK1xcdHUxNlxcdFxcdFxcdFxcdGxhc3RfY21kO1xcbitcXHRzdHJ1Y3Qga3JlZlxcdFxcdFxcdGtyZWY7XFxuK307XFxuK1xcbisvKlxcbisgKiBBcmJpdHJhcnkgcmV0cmllcyBmb3IgUENDIGNvbW1hbmRzIGJlY2F1c2UgdGhlIHJlbW90ZSBwcm9jZXNzb3IgY291bGQgYmVcXG4rICogbXVjaCBzbG93ZXIgdG8gcmVwbHkuIEtlZXAgaXQgaGlnaCBlbm91Z2ggdG8gY292ZXIgZW11bGF0b3JzIHdoZXJlIHRoZVxcbisgKiBwcm9jZXNzb3JzIHJ1biBwYWluZnVsbHkgc2xvdy5cXG4rICovXFxuKyNkZWZpbmUgUENDX05VTV9SRVRSSUVTIDYwMFVMTFxcbisjZGVmaW5lIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWSAxMDAwXFxuKyNkZWZpbmUgUENDX01JTl9QT0xMX1VTRUNTIDNcXG4rXFxuKyNkZWZpbmUgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUyAxMDBcXG4rI2RlZmluZSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkgMHgwMFxcbitcXG4rLyogU3RhdGljIHZhcmlhYmxlcyBmb3IgdGhlIFJBUzIgUENDIHN1YnNwYWNlcyAqL1xcbitzdGF0aWMgREVGSU5FX01VVEVYKHJhczJfcGNjX2xpc3RfbG9jayk7XFxuK3N0YXRpYyBMSVNUX0hFQUQocmFzMl9zc3BjYyk7XFxuK1xcbitzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHR1MzIgY2FwX3N0YXR1cztcXG4rXFx0dTE2IHN0YXR1cztcXG4rXFx0aW50IHJjO1xcbitcXG4rXFx0LypcXG4rXFx0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxcbitcXHQgKiBwbGF0Zm9ybSBhbmQgc2hvdWxkIGhhdmUgc2V0IHRoZSBjb21tYW5kIGNvbXBsZXRpb24gYml0IHdoZW5cXG4rXFx0ICogUENDIGNhbiBiZSB1c2VkIGJ5IE9TUE0uXFxuK1xcdCAqXFxuK1xcdCAqIFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciBldmVyeSBQQ0NfTUlOX1BPTExfVVNFQ1MgZm9yIG1heGltdW0gb2ZcXG4rXFx0ICogUENDX05VTV9SRVRSSUVTICogUENDIGNoYW5uZWwgbGF0ZW5jeSB1bnRpbCBQQ0MgY29tbWFuZCBjb21wbGV0ZVxcbitcXHQgKiBiaXQgaXMgc2V0LlxcbitcXHQgKi9cXG4rXFx0cmMgPSByZWFkd19yZWxheGVkX3BvbGxfdGltZW91dChcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzLCBzdGF0dXMsXFxuK1xcdFxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFLFxcbitcXHRcXHRcXHRcXHRcXHRQQ0NfTUlOX1BPTExfVVNFQ1MsIHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyk7XFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRwcl93YXJuKFxcXCJQQ0MgSUQ6IDB4JXg6IFBDQyBjaGVjayBjaGFubmVsIHRpbWVvdXQgZm9yIGxhc3QgY29tbWFuZDogMHgleCByYz0lZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZXBjY19pZCwgc3NwY2MtXFx1MDAzZWxhc3RfY21kLCByYyk7XFxuK1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzdGF0dXMgXFx1MDAyNiBQQ0NfU1RBVFVTX0VSUk9SKSB7XFxuK1xcdFxcdHByX3dhcm4oXFxcIlBDQyBJRDogMHgleDogRXJyb3IgaW4gZXhlY3V0aW5nIGxhc3QgY29tbWFuZDogMHgleFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZXBjY19pZCwgc3NwY2MtXFx1MDAzZWxhc3RfY21kKTtcXG4rXFx0XFx0c3RhdHVzIFxcdTAwMjY9IH5QQ0NfU1RBVFVTX0VSUk9SO1xcbitcXHRcXHRpb3dyaXRlMTYoc3RhdHVzLCBcXHUwMDI2Z2VuX2NvbW1fYmFzZS1cXHUwMDNlc3RhdHVzKTtcXG4rXFx0XFx0aW93cml0ZTMyKDB4MCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbitcXHQvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqL1xcbitcXHRybWIoKTtcXG4rXFx0Y2FwX3N0YXR1cyA9IGlvcmVhZDMyKFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xcbitcXHRzd2l0Y2ggKGNhcF9zdGF0dXMpIHtcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfTk9UX1ZBTElEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxcbitcXHRcXHRyYyA9IC1FUEVSTTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgQUNQSV9SQVMyX0JVU1k6XFxuK1xcdFxcdHJjID0gLUVCVVNZO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBQ1BJX1JBUzJfRkFJTEVEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9BQk9SVEVEOlxcbitcXHRjYXNlIEFDUElfUkFTMl9JTlZBTElEX0RBVEE6XFxuK1xcdFxcdHJjID0gLUVJTlZBTDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJjID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0aW93cml0ZTMyKDB4MCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXNldF9jYXBzX3N0YXR1cyk7XFxuK1xcbitcXHRyZXR1cm4gcmM7XFxuK31cXG4rXFxuKy8qKlxcbisgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXFxuKyAqIEByYXMyX2N0eDpcXHRwb2ludGVyIHRvIHRoZSBSQVMyIGNvbnRleHQgc3RydWN0dXJlXFxuKyAqIEBjbWQ6XFx0UkFTMiBjb21tYW5kIHRvIHNlbmRcXG4rICpcXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBvdGhlcndpc2VcXG4rICovXFxuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2U7XFxuK1xcdHN0cnVjdCBtYm94X2NoYW4gKnBjY19jaGFubmVsO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcdHM2NCB0aW1lX2RlbHRhO1xcbitcXHR1MTYgdmFsO1xcbitcXHRpbnQgcmM7XFxuK1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0c3NwY2MgPSByYXMyX2N0eC1cXHUwMDNlc3NwY2M7XFxuK1xcdGdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXG4rXFx0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XFxuK1xcdGlmIChyYyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByYztcXG4rXFxuK1xcdHBjY19jaGFubmVsID0gc3NwY2MtXFx1MDAzZXBjY19jaGFuLVxcdTAwM2VtY2hhbjtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEhhbmRsZSB0aGUgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCk6IHRoZSBtaW5pbXVtXFxuK1xcdCAqIGFtb3VudCBvZiB0aW1lIHRoYXQgT1NQTSBtdXN0IHdhaXQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24gb2ZcXG4rXFx0ICogYSBjb21tYW5kIGJlZm9yZSBpc3N1aW5nIHRoZSBuZXh0IGNvbW1hbmQsIGluIG1pY3Jvc2Vjb25kcy5cXG4rXFx0ICovXFxuK1xcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21ydHQpIHtcXG4rXFx0XFx0dGltZV9kZWx0YSA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzc3BjYy1cXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lKTtcXG4rXFx0XFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCBcXHUwMDNlIHRpbWVfZGVsdGEpXFxuK1xcdFxcdFxcdGZzbGVlcChzc3BjYy1cXHUwMDNlcGNjX21ydHQgLSB0aW1lX2RlbHRhKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogSGFuZGxlIHRoZSBub24temVybyBNYXhpbXVtIFBlcmlvZGljIEFjY2VzcyBSYXRlIChNUEFSKTogdGhlXFxuK1xcdCAqIG1heGltdW0gbnVtYmVyIG9mIHBlcmlvZGljIHJlcXVlc3RzIHRoYXQgdGhlIHN1YnNwYWNlIGNoYW5uZWwgY2FuXFxuK1xcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXFxuK1xcdCAqIGxpbWl0YXRpb24uXFxuK1xcdCAqXFxuK1xcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcXG4rXFx0ICogY2FuIGhhbmRsZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgY29yZXMgaW4gdGhlXFxuK1xcdCAqIHN5c3RlbSBjYW4gY29sbGVjdGl2ZWx5IGdlbmVyYXRlLiBJZiBpdCBpcyBub3QsIGZvbGxvdyB0aGUgc3BlYyBhbmRcXG4rXFx0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxcbitcXHQgKiBsaW1pdCBpbiBhbnkgNjBzIHdpbmRvdy5cXG4rXFx0ICovXFxuK1xcdGlmIChzc3BjYy1cXHUwMDNlcGNjX21wYXIpIHtcXG4rXFx0XFx0aWYgKCFzc3BjYy1cXHUwMDNlbXBhcl9jb3VudCkge1xcbitcXHRcXHRcXHR0aW1lX2RlbHRhID0ga3RpbWVfbXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVxcdTAwM2VsYXN0X21wYXJfcmVzZXQpO1xcbitcXHRcXHRcXHRpZiAoKHRpbWVfZGVsdGEgXFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXFx1MDAyNlxcdTAwMjYgc3NwY2MtXFx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xcbitcXHRcXHRcXHRcXHRkZXZfZGJnKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJQQ0MgY29tbWFuZCAweCV4IG5vdCBzZW50IGR1ZSB0byBNUEFSIGxpbWl0XFxcIiwgY21kKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZWxhc3RfbXBhcl9yZXNldCA9IGt0aW1lX2dldCgpO1xcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlbXBhcl9jb3VudCA9IHNzcGNjLVxcdTAwM2VwY2NfbXBhcjtcXG4rXFx0XFx0fVxcbitcXHRcXHRzc3BjYy1cXHUwMDNlbXBhcl9jb3VudC0tO1xcbitcXHR9XFxuK1xcbitcXHQvKiBXcml0ZSB0byB0aGUgc2hhcmVkIGNvbW0gcmVnaW9uICovXFxuK1xcdGlvd3JpdGUxNihjbWQsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2Vjb21tYW5kKTtcXG4rXFxuK1xcdC8qIEZsaXAgQ01EIENPTVBMRVRFIGJpdCAqL1xcbitcXHRpb3dyaXRlMTYoMCwgXFx1MDAyNmdlbl9jb21tX2Jhc2UtXFx1MDAzZXN0YXR1cyk7XFxuK1xcbitcXHQvKiBSaW5nIGRvb3JiZWxsICovXFxuK1xcdHJjID0gbWJveF9zZW5kX21lc3NhZ2UocGNjX2NoYW5uZWwsIFxcdTAwMjZjbWQpO1xcbitcXHQvKlxcbitcXHQgKiBtYm94X3NlbmRfbWVzc2FnZSgpIHJldHVybnMgYSBub24tbmVnYXRpdmUgaW50ZWdlciBmb3Igc3VjY2Vzc2Z1bCBzdWJtaXNzaW9uXFxuK1xcdCAqIGFuZCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUuXFxuK1xcdCAqL1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGRldl93YXJuKHJhczJfY3R4LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdCBcXFwiRXJyb3Igc2VuZGluZyBQQ0MgbWJveCBtZXNzYWdlIGNvbW1hbmQ6IDB4JXgsIHJjOiVkXFxcXG5cXFwiLCBjbWQsIHJjKTtcXG4rXFx0XFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXFxuK1xcdFxcdHZhbCA9IGlvcmVhZDE2KFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXHRcXHR2YWwgfD0gUENDX1NUQVRVU19DTURfQ09NUExFVEU7XFxuK1xcdFxcdGlvd3JpdGUxNih2YWwsIFxcdTAwMjZnZW5fY29tbV9iYXNlLVxcdTAwM2VzdGF0dXMpO1xcbitcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHJjID0gMDtcXG4rXFx0fVxcbitcXG4rXFx0c3NwY2MtXFx1MDAzZWxhc3RfY21kID0gY21kO1xcbitcXG4rXFx0LypcXG4rXFx0ICogSWYgTWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSBpcyBub24temVybywgbmVlZCB0byByZWNvcmQgdGhlXFxuK1xcdCAqIGNvbXBsZXRpb24gdGltZSBvZiBib3RoIFJFQUQgYW5kIFdSSVRFIGNvbW1hbmRzIGZvciBwcm9wZXIgaGFuZGxpbmdcXG4rXFx0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuXFxuK1xcdCAqL1xcbitcXHRpZiAoY21kID09IFBDQ19DTURfRVhFQ19SQVMyIHx8IHNzcGNjLVxcdTAwM2VwY2NfbXJ0dCkge1xcbitcXHRcXHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcXG4rXFx0XFx0aWYgKHNzcGNjLVxcdTAwM2VwY2NfbXJ0dClcXG4rXFx0XFx0XFx0c3NwY2MtXFx1MDAzZWxhc3RfY21kX2NtcGxfdGltZSA9IGt0aW1lX2dldCgpO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXBjY19jaGFubmVsLVxcdTAwM2VtYm94LVxcdTAwM2V0eGRvbmVfaXJxKVxcbitcXHRcXHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0ZPUl9NT0RVTEVTKHJhczJfc2VuZF9wY2NfY21kLCBcXFwiYWNwaV9yYXMyXFxcIik7XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX2xpc3RfcGNjX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCByYXMyX3NzcGNjLCBrcmVmKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcXG4rXFx0bGlzdF9kZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VlbGVtKTtcXG4rXFx0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVxcdTAwM2VwY2NfY2hhbik7XFxuK1xcdGtmcmVlKHNzcGNjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxcbit7XFxuK1xcdGtyZWZfcHV0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZiwgIFxcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcXHUwMDI2cmFzMl9zc3BjYywgZWxlbSkge1xcbitcXHRcXHRpZiAoc3NwY2MtXFx1MDAzZXBjY19pZCAhPSBwY2NfaWQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2c3NwY2MtXFx1MDAzZWtyZWYpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdHJldHVybiBzc3BjYztcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXFxuK3tcXG4rXFx0c3RydWN0IHBjY19tYm94X2NoYW4gKnBjY19jaGFuO1xcbitcXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XFxuK1xcbitcXHRpZiAocGNjX2lkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRzc3BjYyA9IHJhczJfc3NwY2NfZ2V0KHBjY19pZCk7XFxuK1xcdGlmIChzc3BjYykge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc3NwY2NcXHRcXHQ9IHNzcGNjO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyXFx0PSBzc3BjYy1cXHUwMDNlY29tbV9hZGRyO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlZGV2XFx0XFx0PVxcbitcXHRcXHRcXHRzc3BjYy1cXHUwMDNlcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjID0ga3phbGxvYyhzaXplb2YoKnNzcGNjKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghc3NwY2MpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNnNzcGNjLVxcdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcXG4rXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4rXFx0XFx0a2ZyZWUoc3NwY2MpO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwY2NfY2hhbik7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGNjX2NoYW4tXFx1MDAzZXNobWVtKSB7XFxuK1xcdFxcdHBjY19tYm94X2ZyZWVfY2hhbm5lbChwY2NfY2hhbik7XFxuK1xcdFxcdGtmcmVlKHNzcGNjKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHNzcGNjLVxcdTAwM2VwY2NfaWRcXHRcXHQ9IHBjY19pZDtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19jaGFuXFx0XFx0PSBwY2NfY2hhbjtcXG4rXFx0c3NwY2MtXFx1MDAzZWNvbW1fYWRkclxcdD0gcGNjX2NoYW4tXFx1MDAzZXNobWVtO1xcbitcXHRpZiAocGNjX2NoYW4tXFx1MDAzZWxhdGVuY3kpXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLVxcdTAwM2VsYXRlbmN5O1xcbitcXHRlbHNlXFxuK1xcdFxcdHNzcGNjLVxcdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIFBDQ19DSE5MX0RFRkFVTFRfTEFURU5DWTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcnR0XFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWluX3R1cm5hcm91bmRfdGltZTtcXG4rXFx0c3NwY2MtXFx1MDAzZXBjY19tcGFyXFx0XFx0PSBwY2NfY2hhbi1cXHUwMDNlbWF4X2FjY2Vzc19yYXRlO1xcbitcXHRzc3BjYy1cXHUwMDNlbWJveF9jbGllbnQua25vd3NfdHhkb25lXFx0PSB0cnVlO1xcbitcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2c3NwY2MtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0a3JlZl9pbml0KFxcdTAwMjZzc3BjYy1cXHUwMDNla3JlZik7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXHRsaXN0X2FkZChcXHUwMDI2c3NwY2MtXFx1MDAzZWVsZW0sIFxcdTAwMjZyYXMyX3NzcGNjKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZXNzcGNjXFx0XFx0PSBzc3BjYztcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkclxcdD0gc3NwY2MtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRldlxcdFxcdD0gcGNjX2NoYW4tXFx1MDAzZW1jaGFuLVxcdTAwM2VtYm94LVxcdTAwM2VkZXY7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VwY2NfbG9ja1xcdD0gXFx1MDAyNnNzcGNjLVxcdTAwM2VwY2NfbG9jaztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7XFxuK3N0YXRpYyB2b2lkIHJhczJfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiA9IHRvX2F1eGlsaWFyeV9kZXYoZGV2aWNlKTtcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcXG4rXFxuK1xcdGlkYV9mcmVlKFxcdTAwMjZyYXMyX2lkYSwgYXV4ZGV2LVxcdTAwM2VpZCk7XFxuK1xcdHJhczJfc3NwY2NfcHV0KHJhczJfY3R4LVxcdTAwM2Vzc3BjYyk7XFxuK1xcdGtmcmVlKHJhczJfY3R4KTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCByYXMyX21lbV9jdHggKmFkZF9hdXhfZGV2aWNlKGNoYXIgKm5hbWUsIGludCBjaGFubmVsLCB1MzIgcHhtX2luc3QpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHg7XFxuK1xcdHUzMiBjb21wX25pZDtcXG4rXFx0aW50IGlkLCByYztcXG4rXFxuK1xcdGNvbXBfbmlkID0gcHhtX3RvX25vZGUocHhtX2luc3QpO1xcbitcXHRpZiAoY29tcF9uaWQgPT0gTlVNQV9OT19OT0RFKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxcXFxuXFxcIiwgY2hhbm5lbCwgcHhtX2luc3QpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5YSU8pO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJhczJfY3R4KVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQgPSBjb21wX25pZDtcXG4rXFxuK1xcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xcbitcXHRpZiAocmMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHByX2RlYnVnKFxcXCJGYWlsZWQgdG8gcmVnaXN0ZXIgUENDIGNoYW5uZWw9JWQgcHhtX2luc3Q9JWQgcmM9JWRcXFxcblxcXCIsIGNoYW5uZWwsXFxuK1xcdFxcdFxcdCBweG1faW5zdCwgcmMpO1xcbitcXHRcXHRnb3RvIGN0eF9mcmVlO1xcbitcXHR9XFxuK1xcbitcXHRpZCA9IGlkYV9hbGxvYyhcXHUwMDI2cmFzMl9pZGEsIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoaWQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHJjID0gaWQ7XFxuK1xcdFxcdGdvdG8gcGNjX2ZyZWU7XFxuK1xcdH1cXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VhZGV2LmlkXFx0XFx0PSBpZDtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYubmFtZVxcdFxcdD0gbmFtZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnJlbGVhc2VcXHQ9IHJhczJfcmVsZWFzZTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWFkZXYuZGV2LnBhcmVudFxcdD0gcmFzMl9jdHgtXFx1MDAzZWRldjtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdGlmIChyYylcXG4rXFx0XFx0Z290byBpZGFfZnJlZTtcXG4rXFxuK1xcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rXFx0aWYgKHJjKSB7XFxuK1xcdFxcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KFxcdTAwMjZyYXMyX2N0eC1cXHUwMDNlYWRldik7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKHJjKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJhczJfY3R4O1xcbitcXG4raWRhX2ZyZWU6XFxuK1xcdGlkYV9mcmVlKFxcdTAwMjZyYXMyX2lkYSwgaWQpO1xcbitwY2NfZnJlZTpcXG4rXFx0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXFx1MDAzZXNzcGNjKTtcXG4rY3R4X2ZyZWU6XFxuK1xcdGtmcmVlKHJhczJfY3R4KTtcXG4rXFxuK1xcdHJldHVybiBFUlJfUFRSKHJjKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVtb3ZlX2F1eF9kZXZpY2Uoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXFxuK3tcXG4rXFx0aWYgKCFyYXMyX2N0eClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YXV4aWxpYXJ5X2RldmljZV9kZWxldGUoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rXFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXFx1MDAyNnJhczJfY3R4LVxcdTAwM2VhZGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBwYXJzZV9yYXMyX3RhYmxlKHN0cnVjdCBhY3BpX3RhYmxlX3JhczIgKnJhczJfdGFiKVxcbit7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcGNjX2Rlc2MgKnBjY19kZXNjX2xpc3Q7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKipwY3R4X2xpc3Q7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xcbitcXHR1MTYgdG90X3RibF9sZW47XFxuK1xcdHUxNiBpO1xcbitcXG4rXFx0aWYgKHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoIFxcdTAwM2Mgc2l6ZW9mKCpyYXMyX3RhYikpIHtcXG4rXFx0XFx0cHJfd2FybihGV19XQVJOIFxcXCJBQ1BJIFJBUzIgdGFibGUgcHJlc2VudCBidXQgYnJva2VuICh0b28gc2hvcnQsIHNpemU9JXUpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyYXMyX3RhYi1cXHUwMDNlaGVhZGVyLmxlbmd0aCk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzIHx8IHJhczJfdGFiLVxcdTAwM2VudW1fcGNjX2Rlc2NzIFxcdTAwM2UgUkFTMl9NQVhfTlVNX1BDQ19ERVNDUykge1xcbitcXHRcXHRwcl93YXJuKEZXX1dBUk4gXFxcIk5vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRyYXMyX3RhYi1cXHUwMDNlbnVtX3BjY19kZXNjcyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHR0b3RfdGJsX2xlbiA9IHNpemVvZigqcmFzMl90YWIpICsgcmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MgKiBzaXplb2YoKnBjY19kZXNjX2xpc3QpO1xcbitcXHRpZiAocmFzMl90YWItXFx1MDAzZWhlYWRlci5sZW5ndGggXFx1MDAzYyB0b3RfdGJsX2xlbikge1xcbitcXHRcXHRwcl93YXJuKEZXX1dBUk4gXFxcIlJBUzIgdGFibGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIFBDQyBkZXNjcz0lZCBzaXplPSV1KVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MsIHJhczJfdGFiLVxcdTAwM2VoZWFkZXIubGVuZ3RoKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHBjdHhfbGlzdCA9IGtjYWxsb2MocmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3MsIHNpemVvZigqcGN0eF9saXN0KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcGN0eF9saXN0KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiArIDEpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcmFzMl90YWItXFx1MDAzZW51bV9wY2NfZGVzY3M7IGkrKywgcGNjX2Rlc2NfbGlzdCsrKSB7XFxuK1xcdFxcdGlmIChwY2NfZGVzY19saXN0LVxcdTAwM2VmZWF0dXJlX3R5cGUgIT0gUkFTMl9GRUFUX1RZUEVfTUVNT1JZKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdHJhczJfY3R4ID0gYWRkX2F1eF9kZXZpY2UoUkFTMl9NRU1fREVWX0lEX05BTUUsIHBjY19kZXNjX2xpc3QtXFx1MDAzZWNoYW5uZWxfaWQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgcGNjX2Rlc2NfbGlzdC1cXHUwMDNlaW5zdGFuY2UpO1xcbitcXHRcXHQvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi9cXG4rXFx0XFx0aWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRpZiAoSVNfRVJSKHJhczJfY3R4KSkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJGYWlsZWQgdG8gYWRkIFJBUzIgYXV4aWxpYXJ5IGRldmljZSByYz0lbGRcXFxcblxcXCIsIFBUUl9FUlIocmFzMl9jdHgpKTtcXG4rXFx0XFx0XFx0Zm9yICg7IGkgXFx1MDAzZSAwOyBpLS0pIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHBjdHhfbGlzdFtpIC0gMV0pXFxuK1xcdFxcdFxcdFxcdFxcdHJlbW92ZV9hdXhfZGV2aWNlKHBjdHhfbGlzdFtpIC0gMV0pO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGtmcmVlKHBjdHhfbGlzdCk7XFxuK1xcdFxcdFxcdHJldHVybiBQVFJfRVJSKHJhczJfY3R4KTtcXG4rXFx0XFx0fVxcbitcXHRcXHRwY3R4X2xpc3RbaV0gPSByYXMyX2N0eDtcXG4rXFx0fVxcbitcXHRrZnJlZShwY3R4X2xpc3QpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBhY3BpX3JhczJfaW5pdCAtIFJBUzIgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxcbisgKlxcbisgKiBFeHRyYWN0cyB0aGUgQUNQSSBSQVMyIHRhYmxlIGFuZCByZXRyaWV2ZXMgSUQgZm9yIHRoZSBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxcbisgKiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4gRHJpdmVyIGFkZHMgYW5cXG4rICogYXV4aWxpYXJ5IGRldmljZSwgd2hpY2ggYmluZHMgdG8gdGhlIG1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyLCBmb3IgZWFjaCBSQVMyXFxuKyAqIG1lbW9yeSBmZWF0dXJlLlxcbisgKlxcbisgKiBSZXR1cm5zOiBub25lLlxcbisgKi9cXG4rdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcXG4rXFx0YWNwaV9zdGF0dXMgc3RhdHVzO1xcbitcXG4rXFx0c3RhdHVzID0gYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfUkFTMiwgMCwgKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKilcXHUwMDI2cmFzMl90YWIpO1xcbitcXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBnZXQgdGFibGUsICVzXFxcXG5cXFwiLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHBhcnNlX3JhczJfdGFibGUocmFzMl90YWIpKVxcbitcXHRcXHRwcl9kZWJ1ZyhcXFwiRmFpbGVkIHRvIHBhcnNlIFJBUzIgdGFibGVcXFxcblxcXCIpO1xcbitcXG4rXFx0YWNwaV9wdXRfdGFibGUoKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXJhczJfdGFiKTtcXG4rfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuaW5kZXggZjlkMDJhZjJmYzNhMjAuLmYzYjlhMmYwNDk1MDBlIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXFxuKysrIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcXG5AQCAtMTQsNiArMTQsNyBAQCBlbnVtIGVkYWNfc2NydWJfYXR0cmlidXRlcyB7XFxuIFxcdFNDUlVCX0FERFJFU1MsXFxuIFxcdFNDUlVCX1NJWkUsXFxuIFxcdFNDUlVCX0VOQUJMRV9CQUNLR1JPVU5ELFxcbitcXHRTQ1JVQl9FTkFCTEVfREVNQU5ELFxcbiBcXHRTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT04sXFxuIFxcdFNDUlVCX01BWF9DWUNMRV9EVVJBVElPTixcXG4gXFx0U0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OLFxcbkBAIC01NSw2ICs1Niw3IEBAIHN0YXRpYyBzc2l6ZV90IGF0dHJpYiMjX3Nob3coc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFxcdFxcdFxcdFxcXFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coYWRkciwgcmVhZF9hZGRyLCB1NjQsIFxcXCIweCVsbHhcXFxcblxcXCIpXFxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKHNpemUsIHJlYWRfc2l6ZSwgdTY0LCBcXFwiMHglbGx4XFxcXG5cXFwiKVxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsIFxcXCIldVxcXFxuXFxcIilcXG4rRURBQ19TQ1JVQl9BVFRSX1NIT1coZW5hYmxlX2RlbWFuZCwgZ2V0X2VuYWJsZWRfb2QsIGJvb2wsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWluX2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWluX2N5Y2xlLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWF4X2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWF4X2N5Y2xlLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1coY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgZ2V0X2N5Y2xlX2R1cmF0aW9uLCB1MzIsIFxcXCIldVxcXFxuXFxcIilcXG5AQCAtODQsNiArODYsNyBAQCBzdGF0aWMgc3NpemVfdCBhdHRyaWIjI19zdG9yZShzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXFx0XFx0XFx0XFxcXFxcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoYWRkciwgd3JpdGVfYWRkciwgdTY0LCBrc3RydG91NjQpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NClcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGVuYWJsZV9iYWNrZ3JvdW5kLCBzZXRfZW5hYmxlZF9iZywgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuK0VEQUNfU0NSVUJfQVRUUl9TVE9SRShlbmFibGVfZGVtYW5kLCBzZXRfZW5hYmxlZF9vZCwgdW5zaWduZWQgbG9uZywga3N0cnRvdWwpXFxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBzZXRfY3ljbGVfZHVyYXRpb24sIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxcbiBcXG4gc3RhdGljIHVtb2RlX3Qgc2NydWJfYXR0cl92aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphLCBpbnQgYXR0cl9pZClcXG5AQCAtMTE5LDYgKzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludFxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gMDQ0NDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTQ1JVQl9FTkFCTEVfREVNQU5EOlxcbitcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfZW5hYmxlZF9vZCkge1xcbitcXHRcXHRcXHRpZiAob3BzLVxcdTAwM2VzZXRfZW5hYmxlZF9vZClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGEtXFx1MDAzZW1vZGU7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIDA0NDQ7XFxuK1xcdFxcdH1cXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OOlxcbiBcXHRcXHRpZiAob3BzLVxcdTAwM2VnZXRfbWluX2N5Y2xlKVxcbiBcXHRcXHRcXHRyZXR1cm4gYS1cXHUwMDNlbW9kZTtcXG5AQCAtMTY0LDYgKzE3NSw3IEBAIHN0YXRpYyBpbnQgc2NydWJfY3JlYXRlX2Rlc2Moc3RydWN0IGRldmljZSAqc2NydWJfZGV2LFxcbiBcXHRcXHRbU0NSVUJfQUREUkVTU10gPSBFREFDX1NDUlVCX0FUVFJfUlcoYWRkciwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfU0laRV0gPSBFREFDX1NDUlVCX0FUVFJfUlcoc2l6ZSwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9iYWNrZ3JvdW5kLCBpbnN0YW5jZSksXFxuK1xcdFxcdFtTQ1JVQl9FTkFCTEVfREVNQU5EXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhlbmFibGVfZGVtYW5kLCBpbnN0YW5jZSksXFxuIFxcdFxcdFtTQ1JVQl9NSU5fQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1pbl9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxcbiBcXHRcXHRbU0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9STyhtYXhfY3ljbGVfZHVyYXRpb24sIGluc3RhbmNlKSxcXG4gXFx0XFx0W1NDUlVCX0NVUl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUlcoY3VycmVudF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL0tjb25maWcgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcmFzL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL3Jhcy9LY29uZmlnXFxuQEAgLTQ2LDQgKzQ2LDE3IEBAIGNvbmZpZyBSQVNfRk1QTVxcbiBcXHQgIE1lbW9yeSB3aWxsIGJlIHJldGlyZWQgZHVyaW5nIGJvb3QgdGltZSBhbmQgcnVuIHRpbWUgZGVwZW5kaW5nIG9uXFxuIFxcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXFxuIFxcbitjb25maWcgTUVNX0FDUElfUkFTMlxcbitcXHR0cmlzdGF0ZSBcXFwiTWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcXFwiXFxuK1xcdGRlcGVuZHMgb24gQUNQSV9SQVMyXFxuK1xcdGRlcGVuZHMgb24gRURBQ1xcbitcXHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcXG4rXFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPXFxuK1xcdGhlbHBcXG4rXFx0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcXG4rXFx0ICBmZWF0dXJlIHRhYmxlIHBhcnNlci4gVGhlIGRyaXZlciB1c2VzIGEgUENDIGNoYW5uZWwgc3Vic3BhY2UgdG9cXG4rXFx0ICBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSBhbmQgcHJvdmlkZXNcXG4rXFx0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxcbitcXHQgIHRocm91Z2ggdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlLlxcbitcXG4gZW5kaWZcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXMvTWFrZWZpbGUgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbmluZGV4IDExZjk1ZDU5ZDM5NzJkLi5hMGU2ZTkwM2Q2YjA5YiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvcmFzL01ha2VmaWxlXFxuQEAgLTIsNiArMiw3IEBAXFxuIG9iai0kKENPTkZJR19SQVMpXFx0Kz0gcmFzLm9cXG4gb2JqLSQoQ09ORklHX0RFQlVHX0ZTKVxcdCs9IGRlYnVnZnMub1xcbiBvYmotJChDT05GSUdfUkFTX0NFQylcXHQrPSBjZWMub1xcbitvYmotJChDT05GSUdfTUVNX0FDUElfUkFTMilcXHQrPSBhY3BpX3JhczIub1xcbiBcXG4gb2JqLSQoQ09ORklHX1JBU19GTVBNKVxcdCs9IGFtZC9mbXBtLm9cXG4gb2JqLXlcXHRcXHRcXHQrPSBhbWQvYXRsL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9hY3BpX3JhczIuYyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjY4YjFjMzhkZGY5MDVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcXG5AQCAtMCwwICsxLDYwMyBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cXG4rICpcXG4rICovXFxuK1xcbisjdW5kZWYgcHJfZm10XFxuKyNkZWZpbmUgcHJfZm10KGZtdClcXHRcXFwiQUNQSSBSQVMyIE1FTU9SWTogXFxcIiBmbXRcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VkYWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aHJlYWQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYWNwaS9yYXMyLmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIgQklUKDApXFxuKyNkZWZpbmUgUkFTMl9UWVBFX1BBVFJPTF9TQ1JVQiAweDAwMDBcXG4rXFxuKyNkZWZpbmUgUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMgMHgwMVxcbisjZGVmaW5lIFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSIDB4MDJcXG4rI2RlZmluZSBSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSIDB4MDNcXG4rXFxuKy8qXFxuKyAqIFJBUzIgcGF0cm9sIHNjcnViXFxuKyAqL1xcbisjZGVmaW5lIFJBUzJfUFNfU0NfSFJTX0lOX01BU0sgR0VOTUFTSygxNSwgOClcXG4rI2RlZmluZSBSQVMyX1BTX0VOX0JBQ0tHUk9VTkQgQklUKDApXFxuKyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfT1VUX01BU0sgR0VOTUFTSyg3LCAwKVxcbisjZGVmaW5lIFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIFJBUzJfUFNfTUFYX1NDX0hSU19PVVRfTUFTSyBHRU5NQVNLKDIzLCAxNilcXG4rI2RlZmluZSBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORyBCSVQoMClcXG4rXFxuKyNkZWZpbmUgUkFTMl9TQ1JVQl9OQU1FX0xFTiAxMjhcXG4rI2RlZmluZSBSQVMyX0hPVVJfSU5fU0VDUyAzNjAwXFxuK1xcbitzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0ge1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIGNvbW1vbjtcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zO1xcbit9O1xcbitcXG4rI2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFxcXFxcXG4rXFx0Y29udGFpbmVyX29mKF9hZGRyLCBzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0sIGNvbW1vbilcXG4rXFxuK3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eClcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmNvbW1vbiA9ICh2b2lkICopcmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcjtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRpb3dyaXRlOCgwLCBcXHUwMDI2Y29tbW9uLVxcdTAwM2VzZXRfY2Fwc1swXSk7XFxuK1xcbitcXHRyZXR1cm4gaW9yZWFkOChcXHUwMDI2Y29tbW9uLVxcdTAwM2VmZWF0dXJlc1swXSkgXFx1MDAyNiBSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXFxuK3tcXG4rXFx0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cXG4rXFx0XFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVxcdTAwM2Vjb21tX2FkZHIpO1xcbitcXHR1MzIgc2NydWJfcGFyYW1zX291dDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFxcdTAwMjZwc19zbS1cXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcXG4rXFx0aW93cml0ZTE2KFJBUzJfR0VUX1BBVFJPTF9QQVJBTUVURVJTLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2VtZW1fYmFzZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9zaXplLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVsxXSk7XFxuK1xcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihyYXMyX2N0eC1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX291dCk7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSA9IEZJRUxEX0dFVChSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHNjcnViX3BhcmFtc19vdXQpO1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzID0gRklFTERfR0VUKFJBUzJfUFNfU0NfSFJTX09VVF9NQVNLLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1Yikge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZWJhc2UgPSAwO1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IDA7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRpZiAgKGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmZsYWdzKSBcXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HKSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IHRydWU7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2ViYXNlID0gaW9yZWFkNjQoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSBpb3JlYWQ2NChcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5hY3RsX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qIENvbnRleHQgLSBQQ0MgbG9jayBtdXN0IGJlIGhlbGQgKi9cXG4rc3RhdGljIGludCByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgYm9vbCAqcnVubmluZylcXG4re1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPVxcbitcXHRcXHRUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXJhczJfY3R4LVxcdTAwM2VvZF9zY3J1Yikge1xcbitcXHRcXHQqcnVubmluZyA9IGZhbHNlO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbitcXHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xcbitcXHRpb3dyaXRlNjQocmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XFxuK1xcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlbWVtX3NpemUsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcXG4rXFxuK1xcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihyYXMyX2N0eC1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQqcnVubmluZyA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmZsYWdzKSBcXHUwMDI2IFJBUzJfUFNfRkxBR19TQ1JVQl9SVU5OSU5HO1xcbitcXHRpZiAoISgqcnVubmluZykpXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCh2b2lkICpwKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gKHN0cnVjdCByYXMyX21lbV9jdHggKilwO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xcbitcXHRcXHRtdXRleF9sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdFxcdGlmICghcmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKVxcbitcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZygpIGZhaWxzIGhlcmUsIHJlLWVuYWJsaW5nIGJhY2tncm91bmRcXG4rXFx0XFx0ICogc2NydWJiaW5nIGltbWVkaWF0ZWx5IG1heSBub3QgYmUgcG9zc2libGUgb3IgY29ycmVjdC4gSW4gdGhhdCBjYXNlLFxcbitcXHRcXHQgKiB0aGUgYWRtaW4gb3IgZmlybXdhcmUgbWF5IG5lZWQgdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWJiaW5nXFxuK1xcdFxcdCAqIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXG4rXFx0XFx0aWYgKCFydW5uaW5nKSB7XFxuK1xcdFxcdFxcdHJldCA9IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhyYXMyX2N0eC1cXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdGRldl9lcnIocmFzMl9jdHgtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBlbmFibGUgYmFja2dyb3VuZCBzY3J1YiByZXQ9JWRcXFxcblxcXCIsIHJldCk7XFxuK1xcbitcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRcXHRtc2xlZXAoMTAwMCk7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rZXhpdDpcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2Vkcml2ZXJfYWN0aXZlKVxcbitcXHRcXHRyYXMyX2N0eC1cXHUwMDNldGhyZWFkID0gTlVMTDtcXG4rXFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWluKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0Km1pbiA9IHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGUgKiBSQVMyX0hPVVJfSU5fU0VDUztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptYXgpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQqbWF4ID0gcmFzMl9jdHgtXFx1MDAzZW1heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2VjcylcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdCpzY3J1Yl9jeWNsZV9zZWNzID0gcmFzMl9jdHgtXFx1MDAzZXNjcnViX2N5Y2xlX2hycyAqIFJBUzJfSE9VUl9JTl9TRUNTO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgc2NydWJfY3ljbGVfc2VjcylcXG4re1xcbitcXHR1MzIgc2NydWJfY3ljbGVfaHJzID0gc2NydWJfY3ljbGVfc2VjcyAvIFJBUzJfSE9VUl9JTl9TRUNTO1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRib29sIHJ1bm5pbmc7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YilcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcXHUwMDI2cnVubmluZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocnVubmluZylcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuK1xcdGlmIChzY3J1Yl9jeWNsZV9ocnMgXFx1MDAzYyByYXMyX2N0eC1cXHUwMDNlbWluX3NjcnViX2N5Y2xlIHx8XFxuK1xcdCAgICBzY3J1Yl9jeWNsZV9ocnMgXFx1MDAzZSByYXMyX2N0eC1cXHUwMDNlbWF4X3NjcnViX2N5Y2xlKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUgPSBzY3J1Yl9jeWNsZV9ocnM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQvKlxcbitcXHQgKiBXaGVuIEJHIHNjcnViYmluZyBpcyBlbmFibGVkIHRoZSBhY3R1YWwgYWRkcmVzcyByYW5nZSBpcyBub3QgdmFsaWQuXFxuK1xcdCAqIFJldHVybiAtRUJVU1kgbm93IHVubGVzcyBmaW5kIG91dCBhIG1ldGhvZCB0byByZXRyaWV2ZSBhY3R1YWwgZnVsbCBQQSByYW5nZS5cXG4rXFx0ICovXFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdCpiYXNlID0gcmFzMl9jdHgtXFx1MDAzZWJhc2U7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKnNpemUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViKVxcbitcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqc2l6ZSA9IHJhczJfY3R4LVxcdTAwM2VzaXplO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHU2NCBiYXNlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlYmFzZSA9IGJhc2U7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFzaXplKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXFx1MDAyNnJ1bm5pbmcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpXFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHQqZW5hYmxlZCA9IHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YjtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcXG4re1xcbitcXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXFx1MDAzZWNvbW1fYWRkcik7XFxuK1xcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XFxuK1xcdGJvb2wgcnVubmluZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcXHUwMDI2cnVubmluZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcXHUwMDI2cHNfc20tXFx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XFxuK1xcdGlmIChlbmFibGUpIHtcXG4rXFx0XFx0aWYgKHJhczJfY3R4LVxcdTAwM2ViZ19zY3J1YiB8fCBydW5uaW5nKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbitcXG4rXFx0XFx0aW93cml0ZTY0KDAsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0XFx0aW93cml0ZTY0KDAsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcXG4rXFx0XFx0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0XFx0c2NydWJfcGFyYW1zX2luIFxcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xcbitcXHRcXHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC1cXHUwMDNlc2V0X3NjcnViX2N5Y2xlKTtcXG4rXFx0XFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0XFx0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5jb21tYW5kKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKCFyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpXFxuK1xcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuK1xcbitcXHRcXHRpb3dyaXRlMTYoUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuY29tbWFuZCk7XFxuK1xcdH1cXG4rXFxuK1xcdHNjcnViX3BhcmFtc19pbiA9IGlvcmVhZDMyKFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdHNjcnViX3BhcmFtc19pbiBcXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX0VOX0JBQ0tHUk9VTkQsIGVuYWJsZSk7XFxuK1xcdGlvd3JpdGUzMihzY3J1Yl9wYXJhbXNfaW4sIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XFxuK1xcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJGYWlsZWQgdG8gJXMgYmFja2dyb3VuZCBzY3J1YmJpbmdcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWJnX3NjcnViID0gZW5hYmxlO1xcbitcXHRpZiAoZW5hYmxlKSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xcbitcXHRcXHQvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi9cXG4rXFx0XFx0cmV0dXJuIHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcbitcXHRndWFyZChtdXRleCkocmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFxuK1xcdHJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdHJldCA9IHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKHJhczJfY3R4LCBcXHUwMDI2cnVubmluZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQqZW5hYmxlZCA9IHJ1bm5pbmc7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XFxuK1xcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cXHUwMDNlY29tbV9hZGRyKTtcXG4rXFx0dTMyIHNjcnViX3BhcmFtc19pbjtcXG4rXFx0Ym9vbCBydW5uaW5nO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFlbmFibGUpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdG11dGV4X2xvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFxcdTAwMjZydW5uaW5nKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBleGl0O1xcbitcXG4rXFx0aWYgKHJ1bm5pbmcpIHtcXG4rXFx0XFx0cmV0ID0gLUVCVVNZO1xcbitcXHRcXHRnb3RvIGV4aXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0b3AgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzICovXFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlYmdfc2NydWIpIHtcXG4rXFx0XFx0cmV0ID0gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGZhbHNlKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byBleGl0O1xcbitcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIHZhbGlkaXR5IGNoZWNrcyBmb3IgdGhlIGFkZHJlc3MgcmFuZ2UgdG8gc2NydWIgbmVlZCB0byBiZSB1cGRhdGVkXFxuK1xcdCAqIHdpdGggKGJhc2UgKyBzaXplKSBcXHUwMDNlIChtZW1fYmFzZSArIG1lbV9zaXplKSBjaGVjayBpbiB0aGUgZnV0dXJlIG9uY2UgYVxcbitcXHQgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXJhczJfY3R4LVxcdTAwM2VzaXplIHx8IHJhczJfY3R4LVxcdTAwM2ViYXNlIFxcdTAwM2MgcmFzMl9jdHgtXFx1MDAzZW1lbV9iYXNlKSB7XFxuK1xcdFxcdGRldl9lcnIoZGV2LCBcXFwiJXM6IEludmFsaWQgYWRkcmVzcyByYW5nZSwgYmFzZT0weCVsbHggc2l6ZT0weCVsbHhcXFxcblxcXCIsXFxuK1xcdFxcdFxcdF9fZnVuY19fLCByYXMyX2N0eC1cXHUwMDNlYmFzZSwgcmFzMl9jdHgtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRyZXQgPSAtRVJBTkdFO1xcbitcXHRcXHRnb3RvIGVuYWJsZV9iZ19zY3J1YjtcXG4rXFx0fVxcbitcXG4rXFx0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXFx1MDAyNnBzX3NtLVxcdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5zY3J1Yl9wYXJhbXNfaW4pO1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gXFx1MDAyNj0gflJBUzJfUFNfU0NfSFJTX0lOX01BU0s7XFxuK1xcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVxcdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xcbitcXHRzY3J1Yl9wYXJhbXNfaW4gXFx1MDAyNj0gflJBUzJfUFNfRU5fQkFDS0dST1VORDtcXG4rXFx0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcXG4rXFx0aW93cml0ZTY0KHJhczJfY3R4LVxcdTAwM2ViYXNlLCBcXHUwMDI2cHNfc20tXFx1MDAzZXBhcmFtcy5yZXFfYWRkcl9yYW5nZVswXSk7XFxuK1xcdGlvd3JpdGU2NChyYXMyX2N0eC1cXHUwMDNlc2l6ZSwgXFx1MDAyNnBzX3NtLVxcdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xcbitcXHRpb3dyaXRlMTYoUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xcbitcXG4rXFx0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIkZhaWxlZCB0byBzdGFydCBkZW1hbmQgc2NydWJiaW5nIHJjKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcXG4rXFx0XFx0XFx0aW93cml0ZTY0KDAsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcXG4rXFx0XFx0XFx0aW93cml0ZTY0KDAsIFxcdTAwMjZwc19zbS1cXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZW9kX3NjcnViID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJhczJfY3R4LVxcdTAwM2ViYXNlID0gMDtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNpemUgPSAwO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlb2Rfc2NydWIgPSBlbmFibGU7XFxuK1xcbitcXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcXG4rXFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgXFx1MDAyNlxcdTAwMjYgcmFzMl9jdHgtXFx1MDAzZWRyaXZlcl9hY3RpdmUgXFx1MDAyNlxcdTAwMjYgIXJhczJfY3R4LVxcdTAwM2V0aHJlYWQpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYga3RocmVhZF9ydW4oKSBpcyBjYWxsZWQgYmVmb3JlIHNlbmRpbmcgdGhlIGNvbW1hbmQgZm9yIGRlbWFuZCBzY3J1YmJpbmcsXFxuK1xcdFxcdCAqIHRoZSB0aHJlYWQgbWF5IGRldGVybWluZSB0aGF0IGRlbWFuZCBzY3J1YmJpbmcgaXMgbm90IHJ1bm5pbmcsIGF0dGVtcHQgdG9cXG4rXFx0XFx0ICogcmVzdGFydCBiYWNrZ3JvdW5kIHNjcnViYmluZywgYW5kIHRoZW4gZXhpdC4gVGhpcyBjYW4gb2NjdXIgYmVjYXVzZSB0aGVcXG4rXFx0XFx0ICogdGhyZWFkIGZ1bmN0aW9uIG1heSBzdGFydCBydW5uaW5nIGJlZm9yZSBkZW1hbmQgc2NydWJiaW5nIHN0YXJ0cy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2V0aHJlYWQgPSBrdGhyZWFkX3J1bihyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkLCByYXMyX2N0eCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJyYXMyX3NjcnViX25pZCVkXFxcIiwgcmFzMl9jdHgtXFx1MDAzZXN5c19jb21wX25pZCk7XFxuK1xcdFxcdGlmIChJU19FUlIocmFzMl9jdHgtXFx1MDAzZXRocmVhZCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihyYXMyX2N0eC1cXHUwMDNldGhyZWFkKTtcXG4rXFx0XFx0XFx0cmFzMl9jdHgtXFx1MDAzZXRocmVhZCA9IE5VTEw7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIElmIGt0aHJlYWRfcnVuKCkgZmFpbHMgYW5kIHRoZSBkZW1hbmQgc2NydWJiaW5nIGhhcyBzdGFydGVkIHJ1bm5pbmcsXFxuK1xcdFxcdFxcdCAqIHJlLWVuYWJsaW5nIGJhY2tncm91bmQgc2NydWIgd2lsbCBmYWlsLiBUaHVzIGFkbWluL2Zpcm13YXJlIG1heSBuZWVkXFxuK1xcdFxcdFxcdCAqIHRvIHJlLWVuYWJsZSBiYWNrZ3JvdW5kIHNjcnViIGFmdGVyIGRlbWFuZCBzY3J1YmJpbmcgaGFzIGZpbmlzaGVkLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0Z290byBlbmFibGVfYmdfc2NydWI7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0Z290byBleGl0O1xcbitcXG4rZW5hYmxlX2JnX3NjcnViOlxcbitcXHRpZiAocmFzMl9jdHgtXFx1MDAzZXJlZW5hYmxlX2JnX3NjcnViKSB7XFxuK1xcdFxcdHJhczJfY3R4LVxcdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xcbitcXHRcXHRfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgdHJ1ZSk7XFxuK1xcdH1cXG4rXFxuK2V4aXQ6XFxuK1xcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGVkYWNfc2NydWJfb3BzIHJhczJfc2NydWJfb3BzID0ge1xcbitcXHQucmVhZF9hZGRyID0gcmFzMl9od19zY3J1Yl9yZWFkX2FkZHIsXFxuK1xcdC5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSxcXG4rXFx0LndyaXRlX2FkZHIgPSByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHIsXFxuK1xcdC53cml0ZV9zaXplID0gcmFzMl9od19zY3J1Yl93cml0ZV9zaXplLFxcbitcXHQuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLFxcbitcXHQuc2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnLFxcbitcXHQuZ2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kLFxcbitcXHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxcbitcXHQuZ2V0X21pbl9jeWNsZSA9IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUsXFxuK1xcdC5nZXRfbWF4X2N5Y2xlID0gcmFzMl9od19zY3J1Yl9yZWFkX21heF9zY3J1Yl9jeWNsZSxcXG4rXFx0LmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCxcXG4rXFx0LnNldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGUsXFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCByYXMyX21lbV9kcnZfcmVtb3ZlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcXG4rXFxuK1xcdGlmICghcmFzMl9jdHgpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG11dGV4X2xvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rXFx0cmFzMl9jdHgtXFx1MDAzZWRyaXZlcl9hY3RpdmUgPSBmYWxzZTtcXG4rXFx0aWYgKHJhczJfY3R4LVxcdTAwM2V0aHJlYWQpIHtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVxcdTAwM2VwY2NfbG9jayk7XFxuK1xcdFxcdGt0aHJlYWRfc3RvcChyYXMyX2N0eC1cXHUwMDNldGhyZWFkKTtcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXRocmVhZCA9IE5VTEw7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRtdXRleF91bmxvY2socmFzMl9jdHgtXFx1MDAzZXBjY19sb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCByYXMyX21lbV9kcnZfcHJvYmUoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldiwgY29uc3Qgc3RydWN0IGF1eGlsaWFyeV9kZXZpY2VfaWQgKmlkKVxcbit7XFxuK1xcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XFxuK1xcdHN0cnVjdCBlZGFjX2Rldl9mZWF0dXJlIHJhc19mZWF0dXJlcztcXG4rXFx0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbnVtX3NwYW5uZWRfcGFnZXM7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQocmFzMl9jdHgpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlXFxuK1xcdCAqICdSZXF1ZXN0ZWQgQWRkcmVzcyBSYW5nZScsIHdoZW4gc2VuZCBSQVMyIGNvbW1hbmQgR0VUX1BBVFJPTF9QQVJBTUVURVJTXFxuK1xcdCAqIHRvIGdldCBwYXJhbWV0ZXJzIHRoYXQgYXBwbHkgdG8gYWxsIGFkZHJlc3NlcyBpbiB0aGUgTlVNQSBkb21haW5cXG4rXFx0ICogYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVIgdG8gc3RhcnQgdGhlIGRlbWFuZFxcbitcXHQgKiBzY3J1YmJpbmcuIFRoZSB2YWxpZGl0eSBjaGVjayBmb3Igc3lzX2NvbXBfbmlkIGFnYWluc3QgTlVNQV9OT19OT0RFIGlzXFxuK1xcdCAqIGFscmVhZHkgcGVyZm9ybWVkIGluIGFkZF9hdXhfZGV2aWNlKCkgaW4gL2FjcGkvcmFzMi5jXFxuK1xcdCAqL1xcbitcXHRzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbihyYXMyX2N0eC1cXHUwMDNlc3lzX2NvbXBfbmlkKTtcXG4rXFx0bnVtX3NwYW5uZWRfcGFnZXMgPSBub2RlX3NwYW5uZWRfcGFnZXMocmFzMl9jdHgtXFx1MDAzZXN5c19jb21wX25pZCk7XFxuK1xcdGlmICghbnVtX3NwYW5uZWRfcGFnZXMpIHtcXG4rXFx0XFx0cHJfZGVidWcoXFxcIkZhaWxlZCB0byBmaW5kIFBBIHJhbmdlIG9mIE5VTUEgbm9kZSgldSlcXFxcblxcXCIsIHJhczJfY3R4LVxcdTAwM2VzeXNfY29tcF9uaWQpO1xcbitcXHRcXHRyZXR1cm4gLUVQRVJNO1xcbitcXHR9XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XFxuK1xcdHJhczJfY3R4LVxcdTAwM2VtZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XFxuK1xcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cXHUwMDNlcGNjX2xvY2spO1xcbitcXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgc2V0X3NjcnViX2N5Y2xlICovXFxuK1xcdGlmIChyYXMyX2N0eC1cXHUwMDNlc2NydWJfY3ljbGVfaHJzIFxcdTAwM2UgcmFzMl9jdHgtXFx1MDAzZW1pbl9zY3J1Yl9jeWNsZSlcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVxcdTAwM2VzY3J1Yl9jeWNsZV9ocnM7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmFzMl9jdHgtXFx1MDAzZXNldF9zY3J1Yl9jeWNsZSA9IHJhczJfY3R4LVxcdTAwM2VtaW5fc2NydWJfY3ljbGU7XFxuK1xcbitcXHRzcHJpbnRmKHNjcnViX25hbWUsIFxcXCJhY3BpX3Jhc19tZW0lZFxcXCIsIGF1eGRldi1cXHUwMDNlaWQpO1xcbitcXG4rXFx0cmFzX2ZlYXR1cmVzLmZ0X3R5cGVcXHQ9IFJBU19GRUFUX1NDUlVCO1xcbitcXHRyYXNfZmVhdHVyZXMuaW5zdGFuY2VcXHQ9IDA7XFxuK1xcdHJhc19mZWF0dXJlcy5zY3J1Yl9vcHNcXHQ9IFxcdTAwMjZyYXMyX3NjcnViX29wcztcXG4rXFx0cmFzX2ZlYXR1cmVzLmN0eFxcdD0gcmFzMl9jdHg7XFxuK1xcbitcXHRyYXMyX2N0eC1cXHUwMDNlZHJpdmVyX2FjdGl2ZSA9IHRydWU7XFxuK1xcbitcXHRyZXR1cm4gZWRhY19kZXZfcmVnaXN0ZXIoXFx1MDAyNmF1eGRldi1cXHUwMDNlZGV2LCBzY3J1Yl9uYW1lLCBOVUxMLCAxLCBcXHUwMDI2cmFzX2ZlYXR1cmVzKTtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkIHJhczJfbWVtX2Rldl9pZF90YWJsZVtdID0ge1xcbitcXHR7IC5uYW1lID0gUkFTMl9BVVhfREVWX05BTUUgXFxcIi5cXFwiIFJBUzJfTUVNX0RFVl9JRF9OQU1FLCB9LFxcbitcXHR7IH1cXG4rfTtcXG4rXFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUoYXV4aWxpYXJ5LCByYXMyX21lbV9kZXZfaWRfdGFibGUpO1xcbitcXG4rc3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcXG4rXFx0Lm5hbWUgPSBSQVMyX01FTV9ERVZfSURfTkFNRSxcXG4rXFx0LnByb2JlID0gcmFzMl9tZW1fZHJ2X3Byb2JlLFxcbitcXHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcXG4rXFx0LmlkX3RhYmxlID0gcmFzMl9tZW1fZGV2X2lkX3RhYmxlLFxcbit9O1xcbittb2R1bGVfYXV4aWxpYXJ5X2RyaXZlcihyYXMyX21lbV9kcml2ZXIpO1xcbitcXG4rTU9EVUxFX0lNUE9SVF9OUyhcXFwiQUNQSV9SQVMyXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiQUNQSSBSQVMyIG1lbW9yeSBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmFjNzViMDMwN2ZhOWNjXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2luY2x1ZGUvYWNwaS9yYXMyLmhcXG5AQCAtMCwwICsxLDg2IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cXG4rLypcXG4rICogQUNQSSBSQVMyIChSQVMgRmVhdHVyZSBUYWJsZSkgbWV0aG9kcy5cXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWRcXG4rICovXFxuK1xcbisjaWZuZGVmIF9BQ1BJX1JBUzJfSFxcbisjZGVmaW5lIF9BQ1BJX1JBUzJfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F1eGlsaWFyeV9idXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21haWxib3hfY2xpZW50LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvdHlwZXMuaFxcdTAwM2VcXG4rXFxuK3N0cnVjdCBkZXZpY2U7XFxuK1xcbisvKlxcbisgKiBBQ1BJIHNwZWMgNi41IFRhYmxlIDUuODI6IFBDQyBjb21tYW5kIGNvZGVzIHVzZWQgYnlcXG4rICogUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXFxuKyAqL1xcbisjZGVmaW5lIFBDQ19DTURfRVhFQ19SQVMyIDB4MDFcXG4rXFxuKyNkZWZpbmUgUkFTMl9BVVhfREVWX05BTUUgXFxcInJhczJcXFwiXFxuKyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXFxcImFjcGlfcmFzMl9tZW1cXFwiXFxuK1xcbisvKipcXG4rICogc3RydWN0IHJhczJfbWVtX2N0eCAtIENvbnRleHQgZm9yIFJBUzIgbWVtb3J5IGZlYXR1cmVzXFxuKyAqIEBhZGV2OlxcdFxcdEF1eGlsaWFyeSBkZXZpY2Ugb2JqZWN0XFxuKyAqIEBjb21tX2FkZHI6XFx0XFx0UG9pbnRlciB0byBSQVMyIFBDQyBzaGFyZWQgbWVtb3J5IHJlZ2lvblxcbisgKiBAZGV2OlxcdFxcdFBvaW50ZXIgdG8gZGV2aWNlIGJhY2tpbmcgc3RydWN0IG1ib3hfY29udHJvbGxlciBmb3IgUENDXFxuKyAqIEBzc3BjYzpcXHRcXHRQb2ludGVyIHRvIGxvY2FsIGRhdGEgc3RydWN0dXJlIGZvciBQQ0MgY29tbXVuaWNhdGlvblxcbisgKiBAcGNjX2xvY2s6XFx0XFx0UG9pbnRlciB0byBQQ0MgbG9jayB0byBwcm92aWRlIG11dHVhbGx5IGV4Y2x1c2l2ZSBhY2Nlc3NcXG4rICpcXHRcXHRcXHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxcbisgKiBAc3lzX2NvbXBfbmlkOlxcdE5vZGUgSUQgb2YgdGhlIHN5c3RlbSBjb21wb25lbnQgdGhhdCB0aGUgUkFTIGZlYXR1cmVcXG4rICpcXHRcXHRcXHRpcyBhc3NvY2lhdGVkIHdpdGguIFNlZSBBQ1BJIHNwZWMgNi41IFRhYmxlIDUuODA6IFJBUzJcXG4rICpcXHRcXHRcXHRQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsXFxuKyAqXFx0XFx0XFx0RmllbGQ6IEluc3RhbmNlXFxuKyAqIEBtZW1fYmFzZTpcXHRcXHRCYXNlIG9mIHRoZSBsb3dlc3QgcGh5c2ljYWwgY29udGludW91cyBtZW1vcnkgcmFuZ2VcXG4rICpcXHRcXHRcXHRvZiB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTlVNQSBkb21haW5cXG4rICogQG1lbV9zaXplXFx0XFx0U2l6ZSBvZiB0aGUgbG93ZXN0IHBoeXNpY2FsIGNvbnRpbnVvdXMgbWVtb3J5IHJhbmdlXFxuKyAqXFx0XFx0XFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXFxuKyAqIEBiYXNlOlxcdFxcdEJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxcbisgKiBAc2l6ZTpcXHRcXHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXFxuKyAqIEBzY3J1Yl9jeWNsZV9ocnM6XFx0Q3VycmVudCBzY3J1YiByYXRlIGluIGhvdXJzXFxuKyAqIEBzZXRfc2NydWJfY3ljbGU6XFx0U2NydWIgcmF0ZSB0byBzZXQgaW4gaG91cnNcXG4rICogQG1pbl9zY3J1Yl9jeWNsZTpcXHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXFxuKyAqIEBtYXhfc2NydWJfY3ljbGU6XFx0TWF4aW11bSBzY3J1YiByYXRlIHN1cHBvcnRlZFxcbisgKiBAb2Rfc2NydWI6XFx0XFx0U3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmcgKG1lbW9yeSByZWdpb24pXFxuKyAqIEBiZ19zY3J1YjpcXHRcXHRTdGF0dXMgb2YgYmFja2dyb3VuZCBwYXRyb2wgc2NydWJiaW5nXFxuKyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcXHRGbGFnIGluZGljYXRlcyByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nIGFmdGVyIGRlbWFuZFxcbisgKlxcdFxcdFxcdHNjcnViYmluZyBpcyBmaW5pc2hlZFxcbisgKiBAdGhyZWFkOlxcdFxcdERlbWFuZCBzY3J1YiBtb25pdG9yIGt0aHJlYWRcXG4rICogQGRyaXZlcl9hY3RpdmU6XFx0RmxhZyBpbmRpY2F0ZXMgUkFTMiBtZW1vcnkgZHJpdmVyIGlzIGFjdGl2ZS9yZW1vdmVkXFxuKyAqL1xcbitzdHJ1Y3QgcmFzMl9tZW1fY3R4IHtcXG4rXFx0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2VcXHRcXHRhZGV2O1xcbitcXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cXHQqY29tbV9hZGRyO1xcbitcXHRzdHJ1Y3QgZGV2aWNlXFx0XFx0XFx0KmRldjtcXG4rXFx0dm9pZFxcdFxcdFxcdFxcdCpzc3BjYztcXG4rXFx0c3RydWN0IG11dGV4XFx0XFx0XFx0KnBjY19sb2NrO1xcbitcXHR1MzJcXHRcXHRcXHRcXHRzeXNfY29tcF9uaWQ7XFxuK1xcdHU2NFxcdFxcdFxcdFxcdG1lbV9iYXNlO1xcbitcXHR1NjRcXHRcXHRcXHRcXHRtZW1fc2l6ZTtcXG4rXFx0dTY0XFx0XFx0XFx0XFx0YmFzZTtcXG4rXFx0dTY0XFx0XFx0XFx0XFx0c2l6ZTtcXG4rXFx0dThcXHRcXHRcXHRcXHRzY3J1Yl9jeWNsZV9ocnM7XFxuK1xcdHU4XFx0XFx0XFx0XFx0c2V0X3NjcnViX2N5Y2xlO1xcbitcXHR1OFxcdFxcdFxcdFxcdG1pbl9zY3J1Yl9jeWNsZTtcXG4rXFx0dThcXHRcXHRcXHRcXHRtYXhfc2NydWJfY3ljbGU7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRvZF9zY3J1YjtcXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdGJnX3NjcnViO1xcbitcXHRib29sXFx0XFx0XFx0XFx0cmVlbmFibGVfYmdfc2NydWI7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdFxcdFxcdCp0aHJlYWQ7XFxuK1xcdGJvb2xcXHRcXHRcXHRcXHRkcml2ZXJfYWN0aXZlO1xcbit9O1xcbitcXG4rI2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcXG4rdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZCk7XFxuK2ludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3JhczJfaW5pdCh2b2lkKSB7IH1cXG4rI2VuZGlmXFxuK1xcbisjZW5kaWYgLyogX0FDUElfUkFTMl9IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWRhYy5oIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcXG5pbmRleCBlNmI0ZTUxMTMwZTVmZi4uYmU0ZjZlNTJlYTM4YTAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9lZGFjLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2VkYWMuaFxcbkBAIC02ODQsNiArNjg0LDggQEAgZW51bSBlZGFjX2Rldl9mZWF0IHtcXG4gICogQHdyaXRlX3NpemU6IHNldCBvZmZzZXQgb2YgdGhlIHNjcnViYmluZyByYW5nZS5cXG4gICogQGdldF9lbmFibGVkX2JnOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBiYWNrZ3JvdW5kIHNjcnViLlxcbiAgKiBAc2V0X2VuYWJsZWRfYmc6IHN0YXJ0IG9yIHN0b3AgYSBiZy1zY3J1Yi5cXG4rICogQGdldF9lbmFibGVkX29kOiBjaGVjayBpZiBjdXJyZW50bHkgcGVyZm9ybWluZyBkZW1hbmQgc2NydWIuXFxuKyAqIEBzZXRfZW5hYmxlZF9vZDogc3RhcnQgb3Igc3RvcCBhIGRlbWFuZC1zY3J1Yi5cXG4gICogQGdldF9taW5fY3ljbGU6IGdldCBtaW5pbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxcbiAgKiBAZ2V0X21heF9jeWNsZTogZ2V0IG1heGltdW0gc3VwcG9ydGVkIHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXFxuICAqIEBnZXRfY3ljbGVfZHVyYXRpb246IGdldCBjdXJyZW50IHNjcnViIGN5Y2xlIGR1cmF0aW9uIGluIHNlY29uZHMuXFxuQEAgLTY5Niw2ICs2OTgsOCBAQCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xcbiBcXHRpbnQgKCp3cml0ZV9zaXplKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSk7XFxuIFxcdGludCAoKmdldF9lbmFibGVkX2JnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sICplbmFibGUpO1xcbiBcXHRpbnQgKCpzZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xcbitcXHRpbnQgKCpnZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCAqZW5hYmxlKTtcXG4rXFx0aW50ICgqc2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcXG4gXFx0aW50ICgqZ2V0X21pbl9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWluKTtcXG4gXFx0aW50ICgqZ2V0X21heF9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWF4KTtcXG4gXFx0aW50ICgqZ2V0X2N5Y2xlX2R1cmF0aW9uKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1MzIgKmN5Y2xlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDc6MTAuODM1MDcxOTQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTI5NDQxMDI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBQ1BJX1JBUzJcIixcbiAgICBcIk1FTV9BQ1BJX1JBUzJcIixcbiAgICBcIkVEQUNfU0NSVUJcIixcbiAgICBcIlBDQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhcnNlX3JhczJfdGFibGVcIixcbiAgICBcInJhczJfc2VuZF9wY2NfY21kXCIsXG4gICAgXCJyYXMyX21lbV9kcnZfcHJvYmVcIixcbiAgICBcInJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVcIixcbiAgICBcInJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nXCIsXG4gICAgXCJyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3dyaXRlX2FkZHJcIixcbiAgICBcInJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZVwiLFxuICAgIFwiX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBQ1BJIFJBUzIgZHJpdmVyIHRoYXQgcGFyc2VzIHRoZSBSQVMyIEFDUEkgdGFibGUgYW5kIHJlZ2lzdGVycyBhdXhpbGlhcnkgZGV2aWNlcyBmb3IgbWVtb3J5IHNjcnViYmluZy4gSXQgYWxzbyBhZGRzIGEgZHJpdmVyIHRoYXQgYmluZHMgdG8gdGhlc2UgYXV4aWxpYXJ5IGRldmljZXMgYW5kIGV4cG9zZXMgRURBQyBzY3J1YiBzeXNmcyBpbnRlcmZhY2VzIHRvIGNvbnRyb2wgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZyB2aWEgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpLiBTaW5jZSBzeXprYWxsZXIgY2FuIGluamVjdCBBQ1BJIHRhYmxlcyAoaW5jbHVkaW5nIFJBUzIgYW5kIFBDQ1QpIGFuZCBpbnRlcmFjdCB3aXRoIHN5c2ZzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzYmVjYjRmMmI3MjM0M2JiNzU0ZjE0YzYxOWRiMzVjN2E0ZjM4MzA1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTg6NDc6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWVkYWMtc2NydWJcbmluZGV4IGFiNjAxNDc0M2RhNTY4Li4yYjg3NGUwMzM2MjMzNCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZWRhYy1zY3J1YlxuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLXNjcnViXG5AQCAtMjAsMTEgKzIwLDcgQEAgS2VybmVsVmVyc2lvbjpcdDYuMTVcbiBDb250YWN0Olx0bGludXgtZWRhY0B2Z2VyLmtlcm5lbC5vcmdcbiBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIGJlIHNjcnViYmVkXG4tXHRcdGZvciBvbi1kZW1hbmQgc2NydWJiaW5nLiBTZXR0aW5nIGFkZHJlc3Mgc3RhcnRzIHNjcnViYmluZy5cbi1cdFx0VGhlIHNpemUgbXVzdCBiZSBzZXQgYmVmb3JlIHRoYXQuXG4tXG4tXHRcdFRoZSByZWFkYmFjayBhZGRyIHZhbHVlIGlzIG5vbi16ZXJvIGlmIHRoZSByZXF1ZXN0ZWRcbi1cdFx0b24tZGVtYW5kIHNjcnViYmluZyBpcyBpbiBwcm9ncmVzcywgemVybyBvdGhlcndpc2UuXG4rXHRcdGZvciBkZW1hbmQgc2NydWJiaW5nLlxuIFxuIFdoYXQ6XHRcdC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1Ylgvc2l6ZVxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbkBAIC0zNCw2ICszMCwxNCBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0KFJXKSBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBiZSBzY3J1YmJlZFxuIFx0XHQob24tZGVtYW5kIHNjcnViYmluZykuXG4gXG4rV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kXG4rRGF0ZTpcdFx0SmFuIDIwMjZcbitLZXJuZWxWZXJzaW9uOlx0Ni4xOVxuK0NvbnRhY3Q6XHRsaW51eC1lZGFjQHZnZXIua2VybmVsLm9yZ1xuK0Rlc2NyaXB0aW9uOlxuK1x0XHQoUlcpIFN0YXJ0L1N0b3AgZGVtYW5kIHNjcnViYmluZy4gVGhlIHN0b3Agb3BlcmF0aW9uIGlzXG4rXHRcdHN1cHBvcnRlZCBvbmx5IGlmIHRoZSBkcml2ZXIgYW5kIGhhcmR3YXJlIHN1cHBvcnQgaXQuXG4rXG4gV2hhdDpcdFx0L3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfYmFja2dyb3VuZFxuIERhdGU6XHRcdE1hcmNoIDIwMjVcbiBLZXJuZWxWZXJzaW9uOlx0Ni4xNVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZWRhYy9zY3J1Yi5yc3QgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5pbmRleCAyY2ZhNzRmYTFmZmQyZi4uNTYyYmZkNmZmNjMwNTEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2VkYWMvc2NydWIucnN0XG5AQCAtMzQwLDMgKzM0MCw3MyBAQCBjb250cm9sbGVyIG9yIHBsYXRmb3JtIHdoZW4gdW5leHBlY3RlZGx5IGhpZ2ggZXJyb3IgcmF0ZXMgYXJlIGRldGVjdGVkLlxuIFxuIFN5c2ZzIGZpbGVzIGZvciBzY3J1YmJpbmcgYXJlIGRvY3VtZW50ZWQgaW5cbiBgRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1lZGFjLWVjc2BcbitcbiszLiBBQ1BJIFJBUzIgSGFyZHdhcmUtYmFzZWQgTWVtb3J5IFNjcnViYmluZ1xuK1xuKzMuMS4gRGVtYW5kIHNjcnViYmluZyBmb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVnaW9uLlxuK1xuKzMuMS4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGRlbWFuZCBzY3J1YmJpbmdcbitcbisjIGNhdCAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2RlbWFuZFxuK1xuKzBcbitcbiszLjEuMi4gUXVlcnkgd2hhdCBpcyBkZXZpY2UgZGVmYXVsdC9jdXJyZW50IHNjcnViIGN5Y2xlIHNldHRpbmcuXG4rXG4rQXBwbGljYWJsZSB0byBib3RoIGRlbWFuZCBhbmQgYmFja2dyb3VuZCBzY3J1YmJpbmcuIFRoZSB1bml0IG9mIHRoZVxuK3NjcnViIGN5Y2xlIGlzIHNlY29uZHMuXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL2N1cnJlbnRfY3ljbGVfZHVyYXRpb25cbitcbiszNjAwMFxuK1xuKzMuMS4zLiBRdWVyeSB0aGUgcmFuZ2Ugb2YgZGV2aWNlIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBmb3IgYSBtZW1vcnkgcmVnaW9uLlxuK1RoZSB1bml0IG9mIHRoZSBzY3J1YiBjeWNsZSByYW5nZSBpcyBzZWNvbmRzLlxuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9taW5fY3ljbGVfZHVyYXRpb25cbitcbiszNjAwXG4rXG4rIyBjYXQgL3N5cy9idXMvZWRhYy9kZXZpY2VzL2FjcGlfcmFzX21lbTAvc2NydWIwL21heF9jeWNsZV9kdXJhdGlvblxuK1xuKzg2NDAwXG4rXG4rMy4xLjQuIFByb2dyYW0gc2NydWJiaW5nIGZvciB0aGUgbWVtb3J5IHJlZ2lvbiBpbiBSQVMyIGRldmljZSB0byByZXBlYXQgZXZlcnlcbis0MzIwMCBzZWNvbmRzIChoYWxmIGEgZGF5KS5cbitcbisjIGVjaG8gNDMyMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uXG4rXG4rMy4xLjUuIFNldCBhZGRyZXNzIHJhbmdlLlxuK1xuK1NldCAnYWRkcicgb2YgdGhlIG1lbW9yeSByZWdpb24gdG8gc2NydWIuXG4rXG4rIyBlY2hvIDB4ODAwMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9hZGRyXG4rXG4rU2V0ICdzaXplJyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1Yi5cbitcbisjIGVjaG8gMHgyMDAwMDAgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9zaXplXG4rXG4rMy4xLjYuIFN0YXJ0ICdkZW1hbmQgc2NydWJiaW5nJy5cbitcbitXaGVuIGEgZGVtYW5kIHNjcnViIGlzIHN0YXJ0ZWQsIGFueSBiYWNrZ3JvdW5kIHNjcnViIGN1cnJlbnRseSBpbiBwcm9ncmVzc1xuK3dpbGwgYmUgc3RvcHBlZCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IHJlc3RhcnRlZCBhdCB0aGUgYmVnaW5uaW5nIHdoZW4gdGhlXG4rZGVtYW5kIHNjcnViIGhhcyBjb21wbGV0ZWQuXG4rXG4rIyBlY2hvIDEgXHUwMDNlIC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfZGVtYW5kXG4rXG4rMy4yLiBCYWNrZ3JvdW5kIHNjcnViYmluZyB0aGUgZW50aXJlIG1lbW9yeVxuK1xuKzMuMi4xLiBRdWVyeSB0aGUgc3RhdHVzIG9mIGJhY2tncm91bmQgc2NydWJiaW5nLlxuK1xuKyMgY2F0IC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9hY3BpX3Jhc19tZW0wL3NjcnViMC9lbmFibGVfYmFja2dyb3VuZFxuK1xuKzBcbitcbiszLjIuMi4gUHJvZ3JhbSBiYWNrZ3JvdW5kIHNjcnViYmluZyBmb3IgUkFTMiBkZXZpY2UgdG8gcmVwZWF0IGluIGV2ZXJ5IDIxNjAwXG4rc2Vjb25kcyAocXVhcnRlciBvZiBhIGRheSkuXG4rXG4rIyBlY2hvIDIxNjAwIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvY3VycmVudF9jeWNsZV9kdXJhdGlvblxuK1xuKzMuMi4zLiBTdGFydCAnYmFja2dyb3VuZCBzY3J1YmJpbmcnLlxuK1xuKyMgZWNobyAxIFx1MDAzZSAvc3lzL2J1cy9lZGFjL2RldmljZXMvYWNwaV9yYXNfbWVtMC9zY3J1YjAvZW5hYmxlX2JhY2tncm91bmRcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnXG5pbmRleCBmMTY1ZDE0Y2Y2MWEzYS4uNTM5ZmYxNDNjY2M1MjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWdcbkBAIC0yOTQsNiArMjk0LDE3IEBAIGNvbmZpZyBBQ1BJX0NQUENfTElCXG4gXHQgIElmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBDUFBDIGluIGZpcm13YXJlLFxuIFx0ICBsZWF2ZSB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbiBcbitjb25maWcgQUNQSV9SQVMyXG4rXHRib29sIFwiQUNQSSBSQVMyIGRyaXZlclwiXG4rXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuK1x0ZGVwZW5kcyBvbiBNQUlMQk9YXG4rXHRkZXBlbmRzIG9uIFBDQ1xuK1x0aGVscFxuK1x0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxuK1x0ICBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIHN1Y2ggYXMgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy5cbitcbitcdCAgSWYgdW5zdXJlLCBzZWxlY3QgTi5cbitcbiBjb25maWcgQUNQSV9QUk9DRVNTT1JcbiBcdHRyaXN0YXRlIFwiUHJvY2Vzc29yXCJcbiBcdGRlcGVuZHMgb24gWDg2IHx8IEFSTTY0IHx8IExPT05HQVJDSCB8fCBSSVNDVlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZVxuaW5kZXggZDFiMGFmZmI4NDRmMDUuLmFiZmVjNjc0NTcyNGUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGVcbkBAIC0xMDUsNiArMTA1LDcgQEAgb2JqLSQoQ09ORklHX0FDUElfRUNfREVCVUdGUylcdCs9IGVjX3N5cy5vXG4gb2JqLSQoQ09ORklHX0FDUElfQkdSVClcdFx0Kz0gYmdydC5vXG4gb2JqLSQoQ09ORklHX0FDUElfQ1BQQ19MSUIpXHQrPSBjcHBjX2FjcGkub1xuIG9iai0kKENPTkZJR19BQ1BJX1NQQ1JfVEFCTEUpXHQrPSBzcGNyLm9cbitvYmotJChDT05GSUdfQUNQSV9SQVMyKVx0XHQrPSByYXMyLm9cbiBvYmotJChDT05GSUdfQUNQSV9ERUJVR0dFUl9VU0VSKSArPSBhY3BpX2RiZy5vXG4gb2JqLSQoQ09ORklHX0FDUElfUFBUVCkgXHQrPSBwcHR0Lm9cbiBvYmotJChDT05GSUdfQUNQSV9QRlJVVClcdCs9IHBmcl91cGRhdGUubyBwZnJfdGVsZW1ldHJ5Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmNcbmluZGV4IGEzMGE5MDRmNjUzNWY0Li44ZDZhMGI3NzNiYzU3YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYWNwaS9idXMuY1xuKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jXG5AQCAtMzEsNiArMzEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2FjcGkvYXBlaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3VzcGVuZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJtdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuQEAgLTE2MTAsNiArMTYxMSw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfaW5pdCh2b2lkKVxuIFx0YWNwaV9kZWJ1Z2dlcl9pbml0KCk7XG4gXHRhY3BpX3NldHVwX3NiX25vdGlmeV9oYW5kbGVyKCk7XG4gXHRhY3BpX3Zpb3RfaW5pdCgpO1xuK1x0YWNwaV9yYXMyX2luaXQoKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmFzMi5jIGIvZHJpdmVycy9hY3BpL3JhczIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iNjY3MDBlMGU3ZDM1MlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9hY3BpL3JhczIuY1xuQEAgLTAsMCArMSw1MDIgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rLypcbisgKiBBQ1BJIFJBUzIgZmVhdHVyZSB0YWJsZSBkcml2ZXIuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZC5cbisgKlxuKyAqIFN1cHBvcnQgZm9yIFJBUzIgdGFibGUgLSBBQ1BJIDYuNSBTcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDUuMi4yMSwgd2hpY2hcbisgKiBwcm92aWRlcyBpbnRlcmZhY2VzIGZvciBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIGUuZy4sIGZvciBIVy1iYXNlZCBtZW1vcnlcbisgKiBzY3J1YmJpbmcsIGFuZCBsb2dpY2FsIHRvIHBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gc2VydmljZS4gUkFTMiB1c2VzXG4rICogUENDIGNoYW5uZWwgc3Vic3BhY2UgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgQUNQSSBjb21wbGlhbnQgSFcgcGxhdGZvcm0uXG4rICovXG4rXG4rI3VuZGVmIHByX2ZtdFxuKyNkZWZpbmUgcHJfZm10KGZtdCkgXCJBQ1BJIFJBUzI6IFwiIGZtdFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2FjcGkvcGNjLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NhY3BpL3JhczIuaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCByYXMyX3NzcGNjIC0gRGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4rICogQG1ib3hfY2xpZW50Olx0c3RydWN0IG1ib3hfY2xpZW50IG9iamVjdFxuKyAqIEBwY2NfY2hhbjpcdFx0UG9pbnRlciB0byBzdHJ1Y3QgcGNjX21ib3hfY2hhblxuKyAqIEBjb21tX2FkZHI6XHRcdFBvaW50ZXIgdG8gUkFTMiBQQ0Mgc2hhcmVkIG1lbW9yeSByZWdpb25cbisgKiBAZWxlbTpcdFx0TGlzdCBmb3IgcmVnaXN0ZXJlZCBSQVMyIFBDQyBjaGFubmVsIHN1YnNwYWNlc1xuKyAqIEBwY2NfbG9jazpcdFx0UENDIGxvY2sgdG8gcHJvdmlkZSBtdXR1YWxseSBleGNsdXNpdmUgYWNjZXNzXG4rICpcdFx0XHR0byBQQ0MgY2hhbm5lbCBzdWJzcGFjZVxuKyAqIEBkZWFkbGluZV91czpcdFBvbGwgUENDIHN0YXR1cyByZWdpc3RlciB0aW1lb3V0IGluIG1pY3Jvc2Vjc1xuKyAqXHRcdFx0Zm9yIFBDQyBjb21tYW5kIGNvbXBsZXRpb25cbisgKiBAcGNjX21wYXI6XHRcdE1heGltdW0gUGVyaW9kaWMgQWNjZXNzIFJhdGUgKE1QQVIpIGZvciBQQ0MgY2hhbm5lbFxuKyAqIEBwY2NfbXJ0dDpcdFx0TWluaW11bSBSZXF1ZXN0IFR1cm5hcm91bmQgVGltZSAoTVJUVCkgaW4gbWljcm9zZWNzXG4rICpcdFx0XHRPUyBtdXN0IHdhaXQgYWZ0ZXIgY29tcGxldGlvbiBvZiBhIFBDQyBjb21tYW5kIGJlZm9yZVxuKyAqXHRcdFx0aXNzdWluZyBuZXh0IGNvbW1hbmRcbisgKiBAbGFzdF9jbWRfY21wbF90aW1lOiBDb21wbGV0aW9uIHRpbWUgb2YgbGFzdCBQQ0MgY29tbWFuZFxuKyAqIEBsYXN0X21wYXJfcmVzZXQ6XHRUaW1lIG9mIGxhc3QgTVBBUiBjb3VudCByZXNldFxuKyAqIEBtcGFyX2NvdW50Olx0XHRNUEFSIGNvdW50XG4rICogQHBjY19pZDpcdFx0SWRlbnRpZmllciBvZiB0aGUgUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWxcbisgKiBAbGFzdF9jbWQ6XHRcdExhc3QgUENDIGNvbW1hbmRcbisgKiBAa3JlZjpcdFx0a3JlZiBvYmplY3RcbisgKi9cbitzdHJ1Y3QgcmFzMl9zc3BjYyB7XG4rXHRzdHJ1Y3QgbWJveF9jbGllbnRcdFx0bWJveF9jbGllbnQ7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhblx0XHQqcGNjX2NoYW47XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cdCpjb21tX2FkZHI7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkXHRcdGVsZW07XG4rXHRzdHJ1Y3QgbXV0ZXhcdFx0XHRwY2NfbG9jaztcbitcdHU2NFx0XHRcdFx0ZGVhZGxpbmVfdXM7XG4rXHR1bnNpZ25lZCBpbnRcdFx0XHRwY2NfbXBhcjtcbitcdHVuc2lnbmVkIGludFx0XHRcdHBjY19tcnR0O1xuK1x0a3RpbWVfdFx0XHRcdFx0bGFzdF9jbWRfY21wbF90aW1lO1xuK1x0a3RpbWVfdFx0XHRcdFx0bGFzdF9tcGFyX3Jlc2V0O1xuK1x0aW50XHRcdFx0XHRtcGFyX2NvdW50O1xuK1x0aW50XHRcdFx0XHRwY2NfaWQ7XG4rXHR1MTZcdFx0XHRcdGxhc3RfY21kO1xuK1x0c3RydWN0IGtyZWZcdFx0XHRrcmVmO1xuK307XG4rXG4rLypcbisgKiBBcmJpdHJhcnkgcmV0cmllcyBmb3IgUENDIGNvbW1hbmRzIGJlY2F1c2UgdGhlIHJlbW90ZSBwcm9jZXNzb3IgY291bGQgYmVcbisgKiBtdWNoIHNsb3dlciB0byByZXBseS4gS2VlcCBpdCBoaWdoIGVub3VnaCB0byBjb3ZlciBlbXVsYXRvcnMgd2hlcmUgdGhlXG4rICogcHJvY2Vzc29ycyBydW4gcGFpbmZ1bGx5IHNsb3cuXG4rICovXG4rI2RlZmluZSBQQ0NfTlVNX1JFVFJJRVMgNjAwVUxMXG4rI2RlZmluZSBQQ0NfQ0hOTF9ERUZBVUxUX0xBVEVOQ1kgMTAwMFxuKyNkZWZpbmUgUENDX01JTl9QT0xMX1VTRUNTIDNcbitcbisjZGVmaW5lIFJBUzJfTUFYX05VTV9QQ0NfREVTQ1MgMTAwXG4rI2RlZmluZSBSQVMyX0ZFQVRfVFlQRV9NRU1PUlkgMHgwMFxuK1xuKy8qIFN0YXRpYyB2YXJpYWJsZXMgZm9yIHRoZSBSQVMyIFBDQyBzdWJzcGFjZXMgKi9cbitzdGF0aWMgREVGSU5FX01VVEVYKHJhczJfcGNjX2xpc3RfbG9jayk7XG4rc3RhdGljIExJU1RfSEVBRChyYXMyX3NzcGNjKTtcbitcbitzdGF0aWMgaW50IGNoZWNrX3BjY19jaGFuKHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYylcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW0gKmdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4rXHR1MzIgY2FwX3N0YXR1cztcbitcdHUxNiBzdGF0dXM7XG4rXHRpbnQgcmM7XG4rXG4rXHQvKlxuK1x0ICogQXMgcGVyIEFDUEkgc3BlYywgdGhlIFBDQyBzcGFjZSB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZVxuK1x0ICogcGxhdGZvcm0gYW5kIHNob3VsZCBoYXZlIHNldCB0aGUgY29tbWFuZCBjb21wbGV0aW9uIGJpdCB3aGVuXG4rXHQgKiBQQ0MgY2FuIGJlIHVzZWQgYnkgT1NQTS5cbitcdCAqXG4rXHQgKiBQb2xsIFBDQyBzdGF0dXMgcmVnaXN0ZXIgZXZlcnkgUENDX01JTl9QT0xMX1VTRUNTIGZvciBtYXhpbXVtIG9mXG4rXHQgKiBQQ0NfTlVNX1JFVFJJRVMgKiBQQ0MgY2hhbm5lbCBsYXRlbmN5IHVudGlsIFBDQyBjb21tYW5kIGNvbXBsZXRlXG4rXHQgKiBiaXQgaXMgc2V0LlxuK1x0ICovXG4rXHRyYyA9IHJlYWR3X3JlbGF4ZWRfcG9sbF90aW1lb3V0KFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzLCBzdGF0dXMsXG4rXHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19DTURfQ09NUExFVEUsXG4rXHRcdFx0XHRcdFBDQ19NSU5fUE9MTF9VU0VDUywgc3NwY2MtXHUwMDNlZGVhZGxpbmVfdXMpO1xuK1x0aWYgKHJjKSB7XG4rXHRcdHByX3dhcm4oXCJQQ0MgSUQ6IDB4JXg6IFBDQyBjaGVjayBjaGFubmVsIHRpbWVvdXQgZm9yIGxhc3QgY29tbWFuZDogMHgleCByYz0lZFxcblwiLFxuK1x0XHRcdHNzcGNjLVx1MDAzZXBjY19pZCwgc3NwY2MtXHUwMDNlbGFzdF9jbWQsIHJjKTtcbitcbitcdFx0cmV0dXJuIHJjO1xuK1x0fVxuK1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgUENDX1NUQVRVU19FUlJPUikge1xuK1x0XHRwcl93YXJuKFwiUENDIElEOiAweCV4OiBFcnJvciBpbiBleGVjdXRpbmcgbGFzdCBjb21tYW5kOiAweCV4XFxuXCIsXG4rXHRcdFx0c3NwY2MtXHUwMDNlcGNjX2lkLCBzc3BjYy1cdTAwM2VsYXN0X2NtZCk7XG4rXHRcdHN0YXR1cyBcdTAwMjY9IH5QQ0NfU1RBVFVTX0VSUk9SO1xuK1x0XHRpb3dyaXRlMTYoc3RhdHVzLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4rXHRcdGlvd3JpdGUzMigweDAsIFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc2V0X2NhcHNfc3RhdHVzKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4rXHQvKiBFbnN1cmUgZ2V0IHVwZGF0ZWQgUENDIHN0YXR1cyAqL1xuK1x0cm1iKCk7XG4rXHRjYXBfc3RhdHVzID0gaW9yZWFkMzIoXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuK1x0c3dpdGNoIChjYXBfc3RhdHVzKSB7XG4rXHRjYXNlIEFDUElfUkFTMl9OT1RfVkFMSUQ6XG4rXHRjYXNlIEFDUElfUkFTMl9OT1RfU1VQUE9SVEVEOlxuK1x0XHRyYyA9IC1FUEVSTTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFDUElfUkFTMl9CVVNZOlxuK1x0XHRyYyA9IC1FQlVTWTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEFDUElfUkFTMl9GQUlMRUQ6XG4rXHRjYXNlIEFDUElfUkFTMl9BQk9SVEVEOlxuK1x0Y2FzZSBBQ1BJX1JBUzJfSU5WQUxJRF9EQVRBOlxuK1x0XHRyYyA9IC1FSU5WQUw7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmMgPSAwO1xuK1x0fVxuK1xuK1x0aW93cml0ZTMyKDB4MCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzZXRfY2Fwc19zdGF0dXMpO1xuK1xuK1x0cmV0dXJuIHJjO1xuK31cbitcbisvKipcbisgKiByYXMyX3NlbmRfcGNjX2NtZCgpIC0gU2VuZCBSQVMyIGNvbW1hbmQgdmlhIFBDQyBjaGFubmVsXG4rICogQHJhczJfY3R4Olx0cG9pbnRlciB0byB0aGUgUkFTMiBjb250ZXh0IHN0cnVjdHVyZVxuKyAqIEBjbWQ6XHRSQVMyIGNvbW1hbmQgdG8gc2VuZFxuKyAqXG4rICogUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhbiBlcnJvciBvdGhlcndpc2VcbisgKi9cbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpnZW5fY29tbV9iYXNlO1xuK1x0c3RydWN0IG1ib3hfY2hhbiAqcGNjX2NoYW5uZWw7XG4rXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4rXHRzNjQgdGltZV9kZWx0YTtcbitcdHUxNiB2YWw7XG4rXHRpbnQgcmM7XG4rXG4rXHRpZiAoIXJhczJfY3R4KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0c3NwY2MgPSByYXMyX2N0eC1cdTAwM2Vzc3BjYztcbitcdGdlbl9jb21tX2Jhc2UgPSBzc3BjYy1cdTAwM2Vjb21tX2FkZHI7XG4rXG4rXHRyYyA9IGNoZWNrX3BjY19jaGFuKHNzcGNjKTtcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0cGNjX2NoYW5uZWwgPSBzc3BjYy1cdTAwM2VwY2NfY2hhbi1cdTAwM2VtY2hhbjtcbitcbitcdC8qXG4rXHQgKiBIYW5kbGUgdGhlIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgKE1SVFQpOiB0aGUgbWluaW11bVxuK1x0ICogYW1vdW50IG9mIHRpbWUgdGhhdCBPU1BNIG11c3Qgd2FpdCBhZnRlciB0aGUgY29tcGxldGlvbiBvZlxuK1x0ICogYSBjb21tYW5kIGJlZm9yZSBpc3N1aW5nIHRoZSBuZXh0IGNvbW1hbmQsIGluIG1pY3Jvc2Vjb25kcy5cbitcdCAqL1xuK1x0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0KSB7XG4rXHRcdHRpbWVfZGVsdGEgPSBrdGltZV91c19kZWx0YShrdGltZV9nZXQoKSwgc3NwY2MtXHUwMDNlbGFzdF9jbWRfY21wbF90aW1lKTtcbitcdFx0aWYgKHNzcGNjLVx1MDAzZXBjY19tcnR0IFx1MDAzZSB0aW1lX2RlbHRhKVxuK1x0XHRcdGZzbGVlcChzc3BjYy1cdTAwM2VwY2NfbXJ0dCAtIHRpbWVfZGVsdGEpO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIEhhbmRsZSB0aGUgbm9uLXplcm8gTWF4aW11bSBQZXJpb2RpYyBBY2Nlc3MgUmF0ZSAoTVBBUik6IHRoZVxuK1x0ICogbWF4aW11bSBudW1iZXIgb2YgcGVyaW9kaWMgcmVxdWVzdHMgdGhhdCB0aGUgc3Vic3BhY2UgY2hhbm5lbCBjYW5cbitcdCAqIHN1cHBvcnQsIHJlcG9ydGVkIGluIGNvbW1hbmRzIHBlciBtaW51dGUuIDAgaW5kaWNhdGVzIG5vXG4rXHQgKiBsaW1pdGF0aW9uLlxuK1x0ICpcbitcdCAqIFRoaXMgcGFyYW1ldGVyIHNob3VsZCBiZSBpZGVhbGx5IHplcm8gb3IgbGFyZ2UgZW5vdWdoIHNvIHRoYXQgaXRcbitcdCAqIGNhbiBoYW5kbGUgbWF4aW11bSBudW1iZXIgb2YgcmVxdWVzdHMgdGhhdCBhbGwgdGhlIGNvcmVzIGluIHRoZVxuK1x0ICogc3lzdGVtIGNhbiBjb2xsZWN0aXZlbHkgZ2VuZXJhdGUuIElmIGl0IGlzIG5vdCwgZm9sbG93IHRoZSBzcGVjIGFuZFxuK1x0ICoganVzdCBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gYWZ0ZXIgaGl0dGluZyB0aGUgTVBBUlxuK1x0ICogbGltaXQgaW4gYW55IDYwcyB3aW5kb3cuXG4rXHQgKi9cbitcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXBhcikge1xuK1x0XHRpZiAoIXNzcGNjLVx1MDAzZW1wYXJfY291bnQpIHtcbitcdFx0XHR0aW1lX2RlbHRhID0ga3RpbWVfbXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCk7XG4rXHRcdFx0aWYgKCh0aW1lX2RlbHRhIFx1MDAzYyA2MCAqIE1TRUNfUEVSX1NFQykgXHUwMDI2XHUwMDI2IHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCkge1xuK1x0XHRcdFx0ZGV2X2RiZyhyYXMyX2N0eC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdFwiUENDIGNvbW1hbmQgMHgleCBub3Qgc2VudCBkdWUgdG8gTVBBUiBsaW1pdFwiLCBjbWQpO1xuK1x0XHRcdFx0cmV0dXJuIC1FSU87XG4rXHRcdFx0fVxuK1x0XHRcdHNzcGNjLVx1MDAzZWxhc3RfbXBhcl9yZXNldCA9IGt0aW1lX2dldCgpO1xuK1x0XHRcdHNzcGNjLVx1MDAzZW1wYXJfY291bnQgPSBzc3BjYy1cdTAwM2VwY2NfbXBhcjtcbitcdFx0fVxuK1x0XHRzc3BjYy1cdTAwM2VtcGFyX2NvdW50LS07XG4rXHR9XG4rXG4rXHQvKiBXcml0ZSB0byB0aGUgc2hhcmVkIGNvbW0gcmVnaW9uICovXG4rXHRpb3dyaXRlMTYoY21kLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZWNvbW1hbmQpO1xuK1xuK1x0LyogRmxpcCBDTUQgQ09NUExFVEUgYml0ICovXG4rXHRpb3dyaXRlMTYoMCwgXHUwMDI2Z2VuX2NvbW1fYmFzZS1cdTAwM2VzdGF0dXMpO1xuK1xuK1x0LyogUmluZyBkb29yYmVsbCAqL1xuK1x0cmMgPSBtYm94X3NlbmRfbWVzc2FnZShwY2NfY2hhbm5lbCwgXHUwMDI2Y21kKTtcbitcdC8qXG4rXHQgKiBtYm94X3NlbmRfbWVzc2FnZSgpIHJldHVybnMgYSBub24tbmVnYXRpdmUgaW50ZWdlciBmb3Igc3VjY2Vzc2Z1bCBzdWJtaXNzaW9uXG4rXHQgKiBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLlxuK1x0ICovXG4rXHRpZiAocmMgXHUwMDNjIDApIHtcbitcdFx0ZGV2X3dhcm4ocmFzMl9jdHgtXHUwMDNlZGV2LFxuK1x0XHRcdCBcIkVycm9yIHNlbmRpbmcgUENDIG1ib3ggbWVzc2FnZSBjb21tYW5kOiAweCV4LCByYzolZFxcblwiLCBjbWQsIHJjKTtcbitcdFx0LyogUmVzdG9yZSBDTUQgQ09NUExFVEUgYml0IG9uIGVycm9yICovXG4rXHRcdHZhbCA9IGlvcmVhZDE2KFx1MDAyNmdlbl9jb21tX2Jhc2UtXHUwMDNlc3RhdHVzKTtcbitcdFx0dmFsIHw9IFBDQ19TVEFUVVNfQ01EX0NPTVBMRVRFO1xuK1x0XHRpb3dyaXRlMTYodmFsLCBcdTAwMjZnZW5fY29tbV9iYXNlLVx1MDAzZXN0YXR1cyk7XG4rXHRcdHJldHVybiByYztcbitcdH0gZWxzZSB7XG4rXHRcdHJjID0gMDtcbitcdH1cbitcbitcdHNzcGNjLVx1MDAzZWxhc3RfY21kID0gY21kO1xuK1xuK1x0LypcbitcdCAqIElmIE1pbmltdW0gUmVxdWVzdCBUdXJuYXJvdW5kIFRpbWUgaXMgbm9uLXplcm8sIG5lZWQgdG8gcmVjb3JkIHRoZVxuK1x0ICogY29tcGxldGlvbiB0aW1lIG9mIGJvdGggUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgZm9yIHByb3BlciBoYW5kbGluZ1xuK1x0ICogb2YgTVJUVCwgc28gbmVlZCB0byBjaGVjayBmb3IgcGNjX21ydHQgaW4gYWRkaXRpb24gdG8gUENDX0NNRF9FWEVDX1JBUzIuXG4rXHQgKi9cbitcdGlmIChjbWQgPT0gUENDX0NNRF9FWEVDX1JBUzIgfHwgc3NwY2MtXHUwMDNlcGNjX21ydHQpIHtcbitcdFx0cmMgPSBjaGVja19wY2NfY2hhbihzc3BjYyk7XG4rXHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfbXJ0dClcbitcdFx0XHRzc3BjYy1cdTAwM2VsYXN0X2NtZF9jbXBsX3RpbWUgPSBrdGltZV9nZXQoKTtcbitcdH1cbitcbitcdGlmICghcGNjX2NoYW5uZWwtXHUwMDNlbWJveC1cdTAwM2V0eGRvbmVfaXJxKVxuK1x0XHRtYm94X2NsaWVudF90eGRvbmUocGNjX2NoYW5uZWwsIHJjKTtcbitcbitcdHJldHVybiByYztcbit9XG4rRVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhyYXMyX3NlbmRfcGNjX2NtZCwgXCJhY3BpX3JhczJcIik7XG4rXG4rc3RhdGljIHZvaWQgcmFzMl9saXN0X3BjY19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKVxuK3tcbitcdHN0cnVjdCByYXMyX3NzcGNjICpzc3BjYyA9XG4rXHRcdGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmFzMl9zc3BjYywga3JlZik7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcdGxpc3RfZGVsKFx1MDAyNnNzcGNjLVx1MDAzZWVsZW0pO1xuK1x0cGNjX21ib3hfZnJlZV9jaGFubmVsKHNzcGNjLVx1MDAzZXBjY19jaGFuKTtcbitcdGtmcmVlKHNzcGNjKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcmFzMl9zc3BjY19wdXQoc3RydWN0IHJhczJfc3NwY2MgKnNzcGNjKVxuK3tcbitcdGtyZWZfcHV0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYsICBcdTAwMjZyYXMyX2xpc3RfcGNjX3JlbGVhc2UpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHJhczJfc3NwY2MgKnJhczJfc3NwY2NfZ2V0KGludCBwY2NfaWQpXG4re1xuK1x0c3RydWN0IHJhczJfc3NwY2MgKnNzcGNjO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnJhczJfcGNjX2xpc3RfbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHNzcGNjLCBcdTAwMjZyYXMyX3NzcGNjLCBlbGVtKSB7XG4rXHRcdGlmIChzc3BjYy1cdTAwM2VwY2NfaWQgIT0gcGNjX2lkKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpKVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRyZXR1cm4gc3NwY2M7XG4rXHR9XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgaW50IHBjY19pZClcbit7XG4rXHRzdHJ1Y3QgcGNjX21ib3hfY2hhbiAqcGNjX2NoYW47XG4rXHRzdHJ1Y3QgcmFzMl9zc3BjYyAqc3NwY2M7XG4rXG4rXHRpZiAocGNjX2lkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdHNzcGNjID0gcmFzMl9zc3BjY19nZXQocGNjX2lkKTtcbitcdGlmIChzc3BjYykge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vzc3BjY1x0XHQ9IHNzcGNjO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VkZXZcdFx0PVxuK1x0XHRcdHNzcGNjLVx1MDAzZXBjY19jaGFuLVx1MDAzZW1jaGFuLVx1MDAzZW1ib3gtXHUwMDNlZGV2O1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRzc3BjYyA9IGt6YWxsb2Moc2l6ZW9mKCpzc3BjYyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFzc3BjYylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcdTAwMjZzc3BjYy1cdTAwM2VtYm94X2NsaWVudCwgcGNjX2lkKTtcbitcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XG4rXHRcdGtmcmVlKHNzcGNjKTtcbitcdFx0cmV0dXJuIFBUUl9FUlIocGNjX2NoYW4pO1xuK1x0fVxuK1xuK1x0aWYgKCFwY2NfY2hhbi1cdTAwM2VzaG1lbSkge1xuK1x0XHRwY2NfbWJveF9mcmVlX2NoYW5uZWwocGNjX2NoYW4pO1xuK1x0XHRrZnJlZShzc3BjYyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0c3NwY2MtXHUwMDNlcGNjX2lkXHRcdD0gcGNjX2lkO1xuK1x0c3NwY2MtXHUwMDNlcGNjX2NoYW5cdFx0PSBwY2NfY2hhbjtcbitcdHNzcGNjLVx1MDAzZWNvbW1fYWRkclx0PSBwY2NfY2hhbi1cdTAwM2VzaG1lbTtcbitcdGlmIChwY2NfY2hhbi1cdTAwM2VsYXRlbmN5KVxuK1x0XHRzc3BjYy1cdTAwM2VkZWFkbGluZV91cyA9IFBDQ19OVU1fUkVUUklFUyAqIHBjY19jaGFuLVx1MDAzZWxhdGVuY3k7XG4rXHRlbHNlXG4rXHRcdHNzcGNjLVx1MDAzZWRlYWRsaW5lX3VzID0gUENDX05VTV9SRVRSSUVTICogUENDX0NITkxfREVGQVVMVF9MQVRFTkNZO1xuK1x0c3NwY2MtXHUwMDNlcGNjX21ydHRcdFx0PSBwY2NfY2hhbi1cdTAwM2VtaW5fdHVybmFyb3VuZF90aW1lO1xuK1x0c3NwY2MtXHUwMDNlcGNjX21wYXJcdFx0PSBwY2NfY2hhbi1cdTAwM2VtYXhfYWNjZXNzX3JhdGU7XG4rXHRzc3BjYy1cdTAwM2VtYm94X2NsaWVudC5rbm93c190eGRvbmVcdD0gdHJ1ZTtcbitcbitcdG11dGV4X2luaXQoXHUwMDI2c3NwY2MtXHUwMDNlcGNjX2xvY2spO1xuK1x0a3JlZl9pbml0KFx1MDAyNnNzcGNjLVx1MDAzZWtyZWYpO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZyYXMyX3BjY19saXN0X2xvY2spO1xuK1x0bGlzdF9hZGQoXHUwMDI2c3NwY2MtXHUwMDNlZWxlbSwgXHUwMDI2cmFzMl9zc3BjYyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cmFzMl9wY2NfbGlzdF9sb2NrKTtcbitcbitcdHJhczJfY3R4LVx1MDAzZXNzcGNjXHRcdD0gc3NwY2M7XG4rXHRyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHJcdD0gc3NwY2MtXHUwMDNlY29tbV9hZGRyO1xuK1x0cmFzMl9jdHgtXHUwMDNlZGV2XHRcdD0gcGNjX2NoYW4tXHUwMDNlbWNoYW4tXHUwMDNlbWJveC1cdTAwM2VkZXY7XG4rXHRyYXMyX2N0eC1cdTAwM2VwY2NfbG9ja1x0PSBcdTAwMjZzc3BjYy1cdTAwM2VwY2NfbG9jaztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgREVGSU5FX0lEQShyYXMyX2lkYSk7XG4rc3RhdGljIHZvaWQgcmFzMl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2ID0gdG9fYXV4aWxpYXJ5X2RldihkZXZpY2UpO1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBjb250YWluZXJfb2YoYXV4ZGV2LCBzdHJ1Y3QgcmFzMl9tZW1fY3R4LCBhZGV2KTtcbitcbitcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBhdXhkZXYtXHUwMDNlaWQpO1xuK1x0cmFzMl9zc3BjY19wdXQocmFzMl9jdHgtXHUwMDNlc3NwY2MpO1xuK1x0a2ZyZWUocmFzMl9jdHgpO1xuK31cbitcbitzdGF0aWMgc3RydWN0IHJhczJfbWVtX2N0eCAqYWRkX2F1eF9kZXZpY2UoY2hhciAqbmFtZSwgaW50IGNoYW5uZWwsIHUzMiBweG1faW5zdClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eDtcbitcdHUzMiBjb21wX25pZDtcbitcdGludCBpZCwgcmM7XG4rXG4rXHRjb21wX25pZCA9IHB4bV90b19ub2RlKHB4bV9pbnN0KTtcbitcdGlmIChjb21wX25pZCA9PSBOVU1BX05PX05PREUpIHtcbitcdFx0cHJfZGVidWcoXCJJbnZhbGlkIE5VTUEgbm9kZSwgY2hhbm5lbD0lZCBweG1faW5zdD0lZFxcblwiLCBjaGFubmVsLCBweG1faW5zdCk7XG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTlhJTyk7XG4rXHR9XG4rXG4rXHRyYXMyX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKCpyYXMyX2N0eCksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyYXMyX2N0eClcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQgPSBjb21wX25pZDtcbitcbitcdHJjID0gcmVnaXN0ZXJfcGNjX2NoYW5uZWwocmFzMl9jdHgsIGNoYW5uZWwpO1xuK1x0aWYgKHJjIFx1MDAzYyAwKSB7XG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIHJlZ2lzdGVyIFBDQyBjaGFubmVsPSVkIHB4bV9pbnN0PSVkIHJjPSVkXFxuXCIsIGNoYW5uZWwsXG4rXHRcdFx0IHB4bV9pbnN0LCByYyk7XG4rXHRcdGdvdG8gY3R4X2ZyZWU7XG4rXHR9XG4rXG4rXHRpZCA9IGlkYV9hbGxvYyhcdTAwMjZyYXMyX2lkYSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoaWQgXHUwMDNjIDApIHtcbitcdFx0cmMgPSBpZDtcbitcdFx0Z290byBwY2NfZnJlZTtcbitcdH1cbitcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYuaWRcdFx0PSBpZDtcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYubmFtZVx0XHQ9IG5hbWU7XG4rXHRyYXMyX2N0eC1cdTAwM2VhZGV2LmRldi5yZWxlYXNlXHQ9IHJhczJfcmVsZWFzZTtcbitcdHJhczJfY3R4LVx1MDAzZWFkZXYuZGV2LnBhcmVudFx0PSByYXMyX2N0eC1cdTAwM2VkZXY7XG4rXG4rXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChcdTAwMjZyYXMyX2N0eC1cdTAwM2VhZGV2KTtcbitcdGlmIChyYylcbitcdFx0Z290byBpZGFfZnJlZTtcbitcbitcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9hZGQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRpZiAocmMpIHtcbitcdFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rXHRcdHJldHVybiBFUlJfUFRSKHJjKTtcbitcdH1cbitcbitcdHJldHVybiByYXMyX2N0eDtcbitcbitpZGFfZnJlZTpcbitcdGlkYV9mcmVlKFx1MDAyNnJhczJfaWRhLCBpZCk7XG4rcGNjX2ZyZWU6XG4rXHRyYXMyX3NzcGNjX3B1dChyYXMyX2N0eC1cdTAwM2Vzc3BjYyk7XG4rY3R4X2ZyZWU6XG4rXHRrZnJlZShyYXMyX2N0eCk7XG4rXG4rXHRyZXR1cm4gRVJSX1BUUihyYyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJlbW92ZV9hdXhfZGV2aWNlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuK3tcbitcdGlmICghcmFzMl9jdHgpXG4rXHRcdHJldHVybjtcbitcbitcdGF1eGlsaWFyeV9kZXZpY2VfZGVsZXRlKFx1MDAyNnJhczJfY3R4LVx1MDAzZWFkZXYpO1xuK1x0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoXHUwMDI2cmFzMl9jdHgtXHUwMDNlYWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcGFyc2VfcmFzMl90YWJsZShzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYilcbit7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BjY19kZXNjICpwY2NfZGVzY19saXN0O1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqKnBjdHhfbGlzdDtcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4O1xuK1x0dTE2IHRvdF90YmxfbGVuO1xuK1x0dTE2IGk7XG4rXG4rXHRpZiAocmFzMl90YWItXHUwMDNlaGVhZGVyLmxlbmd0aCBcdTAwM2Mgc2l6ZW9mKCpyYXMyX3RhYikpIHtcbitcdFx0cHJfd2FybihGV19XQVJOIFwiQUNQSSBSQVMyIHRhYmxlIHByZXNlbnQgYnV0IGJyb2tlbiAodG9vIHNob3J0LCBzaXplPSV1KVxcblwiLFxuK1x0XHRcdHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmICghcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyB8fCByYXMyX3RhYi1cdTAwM2VudW1fcGNjX2Rlc2NzIFx1MDAzZSBSQVMyX01BWF9OVU1fUENDX0RFU0NTKSB7XG4rXHRcdHByX3dhcm4oRldfV0FSTiBcIk5vL0ludmFsaWQgbnVtYmVyIG9mIFBDQyBkZXNjcyglZCkgaW4gQUNQSSBSQVMyIHRhYmxlXFxuXCIsXG4rXHRcdFx0cmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0dG90X3RibF9sZW4gPSBzaXplb2YoKnJhczJfdGFiKSArIHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MgKiBzaXplb2YoKnBjY19kZXNjX2xpc3QpO1xuK1x0aWYgKHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGggXHUwMDNjIHRvdF90YmxfbGVuKSB7XG4rXHRcdHByX3dhcm4oRldfV0FSTiBcIlJBUzIgdGFibGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIFBDQyBkZXNjcz0lZCBzaXplPSV1KVxcblwiLFxuK1x0XHRcdHJhczJfdGFiLVx1MDAzZW51bV9wY2NfZGVzY3MsIHJhczJfdGFiLVx1MDAzZWhlYWRlci5sZW5ndGgpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHBjdHhfbGlzdCA9IGtjYWxsb2MocmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjcywgc2l6ZW9mKCpwY3R4X2xpc3QpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcGN0eF9saXN0KVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBjY19kZXNjX2xpc3QgPSAoc3RydWN0IGFjcGlfcmFzMl9wY2NfZGVzYyAqKShyYXMyX3RhYiArIDEpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmFzMl90YWItXHUwMDNlbnVtX3BjY19kZXNjczsgaSsrLCBwY2NfZGVzY19saXN0KyspIHtcbitcdFx0aWYgKHBjY19kZXNjX2xpc3QtXHUwMDNlZmVhdHVyZV90eXBlICE9IFJBUzJfRkVBVF9UWVBFX01FTU9SWSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0cmFzMl9jdHggPSBhZGRfYXV4X2RldmljZShSQVMyX01FTV9ERVZfSURfTkFNRSwgcGNjX2Rlc2NfbGlzdC1cdTAwM2VjaGFubmVsX2lkLFxuK1x0XHRcdFx0XHQgIHBjY19kZXNjX2xpc3QtXHUwMDNlaW5zdGFuY2UpO1xuK1x0XHQvKiBJbnZhbGlkIE5VTUEgbm9kZSwgY29udGludWUgcGFyc2luZyBuZXh0IG5vZGUgKi9cbitcdFx0aWYgKFBUUl9FUlIocmFzMl9jdHgpID09IC1FTlhJTylcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKElTX0VSUihyYXMyX2N0eCkpIHtcbitcdFx0XHRwcl93YXJuKFwiRmFpbGVkIHRvIGFkZCBSQVMyIGF1eGlsaWFyeSBkZXZpY2UgcmM9JWxkXFxuXCIsIFBUUl9FUlIocmFzMl9jdHgpKTtcbitcdFx0XHRmb3IgKDsgaSBcdTAwM2UgMDsgaS0tKSB7XG4rXHRcdFx0XHRpZiAocGN0eF9saXN0W2kgLSAxXSlcbitcdFx0XHRcdFx0cmVtb3ZlX2F1eF9kZXZpY2UocGN0eF9saXN0W2kgLSAxXSk7XG4rXHRcdFx0fVxuK1x0XHRcdGtmcmVlKHBjdHhfbGlzdCk7XG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIocmFzMl9jdHgpO1xuK1x0XHR9XG4rXHRcdHBjdHhfbGlzdFtpXSA9IHJhczJfY3R4O1xuK1x0fVxuK1x0a2ZyZWUocGN0eF9saXN0KTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBhY3BpX3JhczJfaW5pdCAtIFJBUzIgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxuKyAqXG4rICogRXh0cmFjdHMgdGhlIEFDUEkgUkFTMiB0YWJsZSBhbmQgcmV0cmlldmVzIElEIGZvciB0aGUgUENDIGNoYW5uZWwgc3Vic3BhY2VcbisgKiBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBBQ1BJIGNvbXBsaWFudCBIVyBwbGF0Zm9ybS4gRHJpdmVyIGFkZHMgYW5cbisgKiBhdXhpbGlhcnkgZGV2aWNlLCB3aGljaCBiaW5kcyB0byB0aGUgbWVtb3J5IEFDUEkgUkFTMiBkcml2ZXIsIGZvciBlYWNoIFJBUzJcbisgKiBtZW1vcnkgZmVhdHVyZS5cbisgKlxuKyAqIFJldHVybnM6IG5vbmUuXG4rICovXG4rdm9pZCBfX2luaXQgYWNwaV9yYXMyX2luaXQodm9pZClcbit7XG4rXHRzdHJ1Y3QgYWNwaV90YWJsZV9yYXMyICpyYXMyX3RhYjtcbitcdGFjcGlfc3RhdHVzIHN0YXR1cztcbitcbitcdHN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1JBUzIsIDAsIChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopXHUwMDI2cmFzMl90YWIpO1xuK1x0aWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7XG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIGdldCB0YWJsZSwgJXNcXG5cIiwgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAocGFyc2VfcmFzMl90YWJsZShyYXMyX3RhYikpXG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIHBhcnNlIFJBUzIgdGFibGVcXG5cIik7XG4rXG4rXHRhY3BpX3B1dF90YWJsZSgoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICopcmFzMl90YWIpO1xuK31cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc2NydWIuYyBiL2RyaXZlcnMvZWRhYy9zY3J1Yi5jXG5pbmRleCBmOWQwMmFmMmZjM2EyMC4uZjNiOWEyZjA0OTUwMGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2VkYWMvc2NydWIuY1xuKysrIGIvZHJpdmVycy9lZGFjL3NjcnViLmNcbkBAIC0xNCw2ICsxNCw3IEBAIGVudW0gZWRhY19zY3J1Yl9hdHRyaWJ1dGVzIHtcbiBcdFNDUlVCX0FERFJFU1MsXG4gXHRTQ1JVQl9TSVpFLFxuIFx0U0NSVUJfRU5BQkxFX0JBQ0tHUk9VTkQsXG4rXHRTQ1JVQl9FTkFCTEVfREVNQU5ELFxuIFx0U0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OLFxuIFx0U0NSVUJfTUFYX0NZQ0xFX0RVUkFUSU9OLFxuIFx0U0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OLFxuQEAgLTU1LDYgKzU2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpyYXNfZmVhdF9kZXYsXHRcdFx0XFxcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhhZGRyLCByZWFkX2FkZHIsIHU2NCwgXCIweCVsbHhcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhzaXplLCByZWFkX3NpemUsIHU2NCwgXCIweCVsbHhcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfYmFja2dyb3VuZCwgZ2V0X2VuYWJsZWRfYmcsIGJvb2wsIFwiJXVcXG5cIilcbitFREFDX1NDUlVCX0FUVFJfU0hPVyhlbmFibGVfZGVtYW5kLCBnZXRfZW5hYmxlZF9vZCwgYm9vbCwgXCIldVxcblwiKVxuIEVEQUNfU0NSVUJfQVRUUl9TSE9XKG1pbl9jeWNsZV9kdXJhdGlvbiwgZ2V0X21pbl9jeWNsZSwgdTMyLCBcIiV1XFxuXCIpXG4gRURBQ19TQ1JVQl9BVFRSX1NIT1cobWF4X2N5Y2xlX2R1cmF0aW9uLCBnZXRfbWF4X2N5Y2xlLCB1MzIsIFwiJXVcXG5cIilcbiBFREFDX1NDUlVCX0FUVFJfU0hPVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBnZXRfY3ljbGVfZHVyYXRpb24sIHUzMiwgXCIldVxcblwiKVxuQEAgLTg0LDYgKzg2LDcgQEAgc3RhdGljIHNzaXplX3QgYXR0cmliIyNfc3RvcmUoc3RydWN0IGRldmljZSAqcmFzX2ZlYXRfZGV2LFx0XHRcdFxcXG4gRURBQ19TQ1JVQl9BVFRSX1NUT1JFKGFkZHIsIHdyaXRlX2FkZHIsIHU2NCwga3N0cnRvdTY0KVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShzaXplLCB3cml0ZV9zaXplLCB1NjQsIGtzdHJ0b3U2NClcbiBFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2JhY2tncm91bmQsIHNldF9lbmFibGVkX2JnLCB1bnNpZ25lZCBsb25nLCBrc3RydG91bClcbitFREFDX1NDUlVCX0FUVFJfU1RPUkUoZW5hYmxlX2RlbWFuZCwgc2V0X2VuYWJsZWRfb2QsIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuIEVEQUNfU0NSVUJfQVRUUl9TVE9SRShjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBzZXRfY3ljbGVfZHVyYXRpb24sIHVuc2lnbmVkIGxvbmcsIGtzdHJ0b3VsKVxuIFxuIHN0YXRpYyB1bW9kZV90IHNjcnViX2F0dHJfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYSwgaW50IGF0dHJfaWQpXG5AQCAtMTE5LDYgKzEyMiwxNCBAQCBzdGF0aWMgdW1vZGVfdCBzY3J1Yl9hdHRyX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludFxuIFx0XHRcdFx0cmV0dXJuIDA0NDQ7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFNDUlVCX0VOQUJMRV9ERU1BTkQ6XG4rXHRcdGlmIChvcHMtXHUwMDNlZ2V0X2VuYWJsZWRfb2QpIHtcbitcdFx0XHRpZiAob3BzLVx1MDAzZXNldF9lbmFibGVkX29kKVxuK1x0XHRcdFx0cmV0dXJuIGEtXHUwMDNlbW9kZTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRyZXR1cm4gMDQ0NDtcbitcdFx0fVxuK1x0XHRicmVhaztcbiBcdGNhc2UgU0NSVUJfTUlOX0NZQ0xFX0RVUkFUSU9OOlxuIFx0XHRpZiAob3BzLVx1MDAzZWdldF9taW5fY3ljbGUpXG4gXHRcdFx0cmV0dXJuIGEtXHUwMDNlbW9kZTtcbkBAIC0xNjQsNiArMTc1LDcgQEAgc3RhdGljIGludCBzY3J1Yl9jcmVhdGVfZGVzYyhzdHJ1Y3QgZGV2aWNlICpzY3J1Yl9kZXYsXG4gXHRcdFtTQ1JVQl9BRERSRVNTXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhhZGRyLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9TSVpFXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhzaXplLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9FTkFCTEVfQkFDS0dST1VORF0gPSBFREFDX1NDUlVCX0FUVFJfUlcoZW5hYmxlX2JhY2tncm91bmQsIGluc3RhbmNlKSxcbitcdFx0W1NDUlVCX0VOQUJMRV9ERU1BTkRdID0gRURBQ19TQ1JVQl9BVFRSX1JXKGVuYWJsZV9kZW1hbmQsIGluc3RhbmNlKSxcbiBcdFx0W1NDUlVCX01JTl9DWUNMRV9EVVJBVElPTl0gPSBFREFDX1NDUlVCX0FUVFJfUk8obWluX2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSksXG4gXHRcdFtTQ1JVQl9NQVhfQ1lDTEVfRFVSQVRJT05dID0gRURBQ19TQ1JVQl9BVFRSX1JPKG1heF9jeWNsZV9kdXJhdGlvbiwgaW5zdGFuY2UpLFxuIFx0XHRbU0NSVUJfQ1VSX0NZQ0xFX0RVUkFUSU9OXSA9IEVEQUNfU0NSVUJfQVRUUl9SVyhjdXJyZW50X2N5Y2xlX2R1cmF0aW9uLCBpbnN0YW5jZSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3Jhcy9LY29uZmlnIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuaW5kZXggZmM0ZjRiYjk0YTRjNjUuLmExZTZhZWQ4YmNjODU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9yYXMvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9yYXMvS2NvbmZpZ1xuQEAgLTQ2LDQgKzQ2LDE3IEBAIGNvbmZpZyBSQVNfRk1QTVxuIFx0ICBNZW1vcnkgd2lsbCBiZSByZXRpcmVkIGR1cmluZyBib290IHRpbWUgYW5kIHJ1biB0aW1lIGRlcGVuZGluZyBvblxuIFx0ICBwbGF0Zm9ybS1zcGVjaWZpYyBwb2xpY2llcy5cbiBcbitjb25maWcgTUVNX0FDUElfUkFTMlxuK1x0dHJpc3RhdGUgXCJNZW1vcnkgQUNQSSBSQVMyIGRyaXZlclwiXG4rXHRkZXBlbmRzIG9uIEFDUElfUkFTMlxuK1x0ZGVwZW5kcyBvbiBFREFDXG4rXHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcbitcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xuK1x0aGVscFxuK1x0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcbitcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXG4rXHQgIGNvbW11bmljYXRlIHdpdGggdGhlIEFDUEktY29tcGxpYW50IHBsYXRmb3JtIGFuZCBwcm92aWRlc1xuK1x0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxuK1x0ICB0aHJvdWdoIHRoZSBFREFDIHNjcnViIGludGVyZmFjZS5cbitcbiBlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL01ha2VmaWxlIGIvZHJpdmVycy9yYXMvTWFrZWZpbGVcbmluZGV4IDExZjk1ZDU5ZDM5NzJkLi5hMGU2ZTkwM2Q2YjA5YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvcmFzL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL3Jhcy9NYWtlZmlsZVxuQEAgLTIsNiArMiw3IEBAXG4gb2JqLSQoQ09ORklHX1JBUylcdCs9IHJhcy5vXG4gb2JqLSQoQ09ORklHX0RFQlVHX0ZTKVx0Kz0gZGVidWdmcy5vXG4gb2JqLSQoQ09ORklHX1JBU19DRUMpXHQrPSBjZWMub1xuK29iai0kKENPTkZJR19NRU1fQUNQSV9SQVMyKVx0Kz0gYWNwaV9yYXMyLm9cbiBcbiBvYmotJChDT05GSUdfUkFTX0ZNUE0pXHQrPSBhbWQvZm1wbS5vXG4gb2JqLXlcdFx0XHQrPSBhbWQvYXRsL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jIGIvZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjY4YjFjMzhkZGY5MDVcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvcmFzL2FjcGlfcmFzMi5jXG5AQCAtMCwwICsxLDYwMyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclxuKyAqXG4rICogQ29weXJpZ2h0IChjKSAyMDI0LTIwMjYgSGlTaWxpY29uIExpbWl0ZWQuXG4rICpcbisgKi9cbitcbisjdW5kZWYgcHJfZm10XG4rI2RlZmluZSBwcl9mbXQoZm10KVx0XCJBQ1BJIFJBUzIgTUVNT1JZOiBcIiBmbXRcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2VkYWMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYWNwaS9yYXMyLmhcdTAwM2VcbitcbisjZGVmaW5lIFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIgQklUKDApXG4rI2RlZmluZSBSQVMyX1RZUEVfUEFUUk9MX1NDUlVCIDB4MDAwMFxuK1xuKyNkZWZpbmUgUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMgMHgwMVxuKyNkZWZpbmUgUkFTMl9TVEFSVF9QQVRST0xfU0NSVUJCRVIgMHgwMlxuKyNkZWZpbmUgUkFTMl9TVE9QX1BBVFJPTF9TQ1JVQkJFUiAweDAzXG4rXG4rLypcbisgKiBSQVMyIHBhdHJvbCBzY3J1YlxuKyAqL1xuKyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfSU5fTUFTSyBHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgUkFTMl9QU19FTl9CQUNLR1JPVU5EIEJJVCgwKVxuKyNkZWZpbmUgUkFTMl9QU19TQ19IUlNfT1VUX01BU0sgR0VOTUFTSyg3LCAwKVxuKyNkZWZpbmUgUkFTMl9QU19NSU5fU0NfSFJTX09VVF9NQVNLIEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBSQVMyX1BTX01BWF9TQ19IUlNfT1VUX01BU0sgR0VOTUFTSygyMywgMTYpXG4rI2RlZmluZSBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORyBCSVQoMClcbitcbisjZGVmaW5lIFJBUzJfU0NSVUJfTkFNRV9MRU4gMTI4XG4rI2RlZmluZSBSQVMyX0hPVVJfSU5fU0VDUyAzNjAwXG4rXG4rc3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIHtcbitcdHN0cnVjdCBhY3BpX3JhczJfc2htZW0gY29tbW9uO1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wYXRyb2xfc2NydWJfcGFyYW0gcGFyYW1zO1xuK307XG4rXG4rI2RlZmluZSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0oX2FkZHIpIFxcXG4rXHRjb250YWluZXJfb2YoX2FkZHIsIHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSwgY29tbW9uKVxuK1xuK3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKTtcbitcbitzdGF0aWMgaW50IHJhczJfaXNfcGF0cm9sX3NjcnViX3N1cHBvcnQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9zaG1lbSBfX2lvbWVtICpjb21tb24gPSAodm9pZCAqKXJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcjtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpb3dyaXRlOCgwLCBcdTAwMjZjb21tb24tXHUwMDNlc2V0X2NhcHNbMF0pO1xuK1xuK1x0cmV0dXJuIGlvcmVhZDgoXHUwMDI2Y29tbW9uLVx1MDAzZWZlYXR1cmVzWzBdKSBcdTAwMjYgUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQjtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4KVxuK3tcbitcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9XG4rXHRcdFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuK1x0dTMyIHNjcnViX3BhcmFtc19vdXQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aW93cml0ZTgoUkFTMl9TVVBQT1JUX0hXX1BBUlRPTF9TQ1JVQiwgXHUwMDI2cHNfc20tXHUwMDNlY29tbW9uLnNldF9jYXBzWzBdKTtcbitcdGlvd3JpdGUxNihSQVMyX0dFVF9QQVRST0xfUEFSQU1FVEVSUywgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmNvbW1hbmQpO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9iYXNlLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0aW93cml0ZTY0KHJhczJfY3R4LVx1MDAzZW1lbV9zaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0cmV0ID0gcmFzMl9zZW5kX3BjY19jbWQocmFzMl9jdHgsIFBDQ19DTURfRVhFQ19SQVMyKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihyYXMyX2N0eC1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgcGF0cm9sIHNjcnViIHBhcmFtZXRlcnNcXG5cIik7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRzY3J1Yl9wYXJhbXNfb3V0ID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19vdXQpO1xuK1x0cmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlID0gRklFTERfR0VUKFJBUzJfUFNfTUlOX1NDX0hSU19PVVRfTUFTSyxcbitcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4rXHRyYXMyX2N0eC1cdTAwM2VtYXhfc2NydWJfY3ljbGUgPSBGSUVMRF9HRVQoUkFTMl9QU19NQVhfU0NfSFJTX09VVF9NQVNLLFxuK1x0XHRcdFx0XHQgICAgICBzY3J1Yl9wYXJhbXNfb3V0KTtcbitcdHJhczJfY3R4LVx1MDAzZXNjcnViX2N5Y2xlX2hycyA9IEZJRUxEX0dFVChSQVMyX1BTX1NDX0hSU19PVVRfTUFTSyxcbitcdFx0XHRcdFx0ICAgICAgc2NydWJfcGFyYW1zX291dCk7XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcdFx0cmFzMl9jdHgtXHUwMDNlYmFzZSA9IDA7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICAoaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmZsYWdzKSBcdTAwMjYgUkFTMl9QU19GTEFHX1NDUlVCX1JVTk5JTkcpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSB0cnVlO1xuK1x0XHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gaW9yZWFkNjQoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLmFjdGxfYWRkcl9yYW5nZVswXSk7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSBpb3JlYWQ2NChcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuYWN0bF9hZGRyX3JhbmdlWzFdKTtcbitcdH0gZWxzZSB7XG4rXHRcdHJhczJfY3R4LVx1MDAzZW9kX3NjcnViID0gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyogQ29udGV4dCAtIFBDQyBsb2NrIG11c3QgYmUgaGVsZCAqL1xuK3N0YXRpYyBpbnQgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGJvb2wgKnJ1bm5pbmcpXG4re1xuK1x0c3RydWN0IGFjcGlfcmFzMl9wc19zaGFyZWRfbWVtIF9faW9tZW0gKnBzX3NtID1cbitcdFx0VE9fQUNQSV9SQVMyX1BTX1NITUVNKHJhczJfY3R4LVx1MDAzZWNvbW1fYWRkcik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFyYXMyX2N0eC1cdTAwM2VvZF9zY3J1Yikge1xuK1x0XHQqcnVubmluZyA9IGZhbHNlO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRpb3dyaXRlMTYoUkFTMl9HRVRfUEFUUk9MX1BBUkFNRVRFUlMsIFx1MDAyNnBzX3NtLVx1MDAzZXBhcmFtcy5jb21tYW5kKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZWFkIHBhdHJvbCBzY3J1YiBwYXJhbWV0ZXJzXFxuXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0KnJ1bm5pbmcgPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuZmxhZ3MpIFx1MDAyNiBSQVMyX1BTX0ZMQUdfU0NSVUJfUlVOTklORztcbitcdGlmICghKCpydW5uaW5nKSlcbitcdFx0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBmYWxzZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWQodm9pZCAqcClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICopcDtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuK1x0XHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0aWYgKCFyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YilcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIElmIHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nKCkgZmFpbHMgaGVyZSwgcmUtZW5hYmxpbmcgYmFja2dyb3VuZFxuK1x0XHQgKiBzY3J1YmJpbmcgaW1tZWRpYXRlbHkgbWF5IG5vdCBiZSBwb3NzaWJsZSBvciBjb3JyZWN0LiBJbiB0aGF0IGNhc2UsXG4rXHRcdCAqIHRoZSBhZG1pbiBvciBmaXJtd2FyZSBtYXkgbmVlZCB0byByZS1lbmFibGUgYmFja2dyb3VuZCBzY3J1YmJpbmdcbitcdFx0ICogYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byBleGl0O1xuK1xuK1x0XHRpZiAoIXJ1bm5pbmcpIHtcbitcdFx0XHRyZXQgPSBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcocmFzMl9jdHgtXHUwMDNlZGV2LCByYXMyX2N0eCwgdHJ1ZSk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdGRldl9lcnIocmFzMl9jdHgtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRcIkZhaWxlZCB0byBlbmFibGUgYmFja2dyb3VuZCBzY3J1YiByZXQ9JWRcXG5cIiwgcmV0KTtcbitcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXHRcdH1cbitcbitcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0bXNsZWVwKDEwMDApO1xuK1x0fVxuK1xuK1x0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rZXhpdDpcbitcdGlmIChyYXMyX2N0eC1cdTAwM2Vkcml2ZXJfYWN0aXZlKVxuK1x0XHRyYXMyX2N0eC1cdTAwM2V0aHJlYWQgPSBOVUxMO1xuK1x0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfcmVhZF9taW5fc2NydWJfY3ljbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTMyICptaW4pXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHQqbWluID0gcmFzMl9jdHgtXHUwMDNlbWluX3NjcnViX2N5Y2xlICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqbWF4KVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0Km1heCA9IHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSAqIFJBUzJfSE9VUl9JTl9TRUNTO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqc2NydWJfY3ljbGVfc2Vjcylcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdCpzY3J1Yl9jeWNsZV9zZWNzID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzICogUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiBzY3J1Yl9jeWNsZV9zZWNzKVxuK3tcbitcdHUzMiBzY3J1Yl9jeWNsZV9ocnMgPSBzY3J1Yl9jeWNsZV9zZWNzIC8gUkFTMl9IT1VSX0lOX1NFQ1M7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRpZiAoc2NydWJfY3ljbGVfaHJzIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGUgfHxcbitcdCAgICBzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1heF9zY3J1Yl9jeWNsZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSBzY3J1Yl9jeWNsZV9ocnM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX3JlYWRfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgKmJhc2UpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0LypcbitcdCAqIFdoZW4gQkcgc2NydWJiaW5nIGlzIGVuYWJsZWQgdGhlIGFjdHVhbCBhZGRyZXNzIHJhbmdlIGlzIG5vdCB2YWxpZC5cbitcdCAqIFJldHVybiAtRUJVU1kgbm93IHVubGVzcyBmaW5kIG91dCBhIG1ldGhvZCB0byByZXRyaWV2ZSBhY3R1YWwgZnVsbCBQQSByYW5nZS5cbitcdCAqL1xuK1x0aWYgKHJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0KmJhc2UgPSByYXMyX2N0eC1cdTAwM2ViYXNlO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9yZWFkX3NpemUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0ICpzaXplKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRpbnQgcmV0O1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YilcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbitcdHJldCA9IHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCpzaXplID0gcmFzMl9jdHgtXHUwMDNlc2l6ZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgYmFzZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKHJ1bm5pbmcpXG4rXHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRyYXMyX2N0eC1cdTAwM2ViYXNlID0gYmFzZTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCB1NjQgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1x0Ym9vbCBydW5uaW5nO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghc2l6ZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChydW5uaW5nKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuK1x0cmFzMl9jdHgtXHUwMDNlc2l6ZSA9IHNpemU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcbitcdGd1YXJkKG11dGV4KShyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHQqZW5hYmxlZCA9IHJhczJfY3R4LVx1MDAzZWJnX3NjcnViO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgZW5hYmxlKVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gZHJ2X2RhdGE7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3BzX3NoYXJlZF9tZW0gX19pb21lbSAqcHNfc20gPSBUT19BQ1BJX1JBUzJfUFNfU0hNRU0ocmFzMl9jdHgtXHUwMDNlY29tbV9hZGRyKTtcbitcdHUzMiBzY3J1Yl9wYXJhbXNfaW47XG4rXHRib29sIHJ1bm5pbmc7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlvd3JpdGU4KFJBUzJfU1VQUE9SVF9IV19QQVJUT0xfU0NSVUIsIFx1MDAyNnBzX3NtLVx1MDAzZWNvbW1vbi5zZXRfY2Fwc1swXSk7XG4rXHRpZiAoZW5hYmxlKSB7XG4rXHRcdGlmIChyYXMyX2N0eC1cdTAwM2ViZ19zY3J1YiB8fCBydW5uaW5nKVxuK1x0XHRcdHJldHVybiAtRUJVU1k7XG4rXG4rXHRcdGlvd3JpdGU2NCgwLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMF0pO1xuK1x0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcdFx0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX1NDX0hSU19JTl9NQVNLO1xuK1x0XHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX1NDX0hSU19JTl9NQVNLLCByYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUpO1xuK1x0XHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdFx0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAoIXJhczJfY3R4LVx1MDAzZWJnX3NjcnViKVxuK1x0XHRcdHJldHVybiAtRVBFUk07XG4rXG4rXHRcdGlvd3JpdGUxNihSQVMyX1NUT1BfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXHR9XG4rXG4rXHRzY3J1Yl9wYXJhbXNfaW4gPSBpb3JlYWQzMihcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHNjcnViX3BhcmFtc19pbiBcdTAwMjY9IH5SQVMyX1BTX0VOX0JBQ0tHUk9VTkQ7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gfD0gRklFTERfUFJFUChSQVMyX1BTX0VOX0JBQ0tHUk9VTkQsIGVuYWJsZSk7XG4rXHRpb3dyaXRlMzIoc2NydWJfcGFyYW1zX2luLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuc2NydWJfcGFyYW1zX2luKTtcbitcdHJldCA9IHJhczJfc2VuZF9wY2NfY21kKHJhczJfY3R4LCBQQ0NfQ01EX0VYRUNfUkFTMik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIkZhaWxlZCB0byAlcyBiYWNrZ3JvdW5kIHNjcnViYmluZ1xcblwiLFxuK1x0XHRcdHN0cl9lbmFibGVfZGlzYWJsZShlbmFibGUpKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJhczJfY3R4LVx1MDAzZWJnX3NjcnViID0gZW5hYmxlO1xuK1x0aWYgKGVuYWJsZSkge1xuK1x0XHRyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiA9IGZhbHNlO1xuK1x0XHQvKiBVcGRhdGUgdGhlIGNhY2hlIHRvIGFjY291bnQgZm9yIHJvdW5kaW5nIG9mIHN1cHBsaWVkIHBhcmFtZXRlcnMgYW5kIHNpbWlsYXIgKi9cbitcdFx0cmV0dXJuIHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGUocmFzMl9jdHgpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRydl9kYXRhLCBib29sIGVuYWJsZSlcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGRydl9kYXRhO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcbitcdHJldHVybiBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmcoZGV2LCBkcnZfZGF0YSwgZW5hYmxlKTtcbit9XG4rXG4rc3RhdGljIGludCByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX29kKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZWQpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmcocmFzMl9jdHgsIFx1MDAyNnJ1bm5pbmcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdCplbmFibGVkID0gcnVubmluZztcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfb2Qoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpXG4re1xuK1x0c3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHggPSBkcnZfZGF0YTtcbitcdHN0cnVjdCBhY3BpX3JhczJfcHNfc2hhcmVkX21lbSBfX2lvbWVtICpwc19zbSA9IFRPX0FDUElfUkFTMl9QU19TSE1FTShyYXMyX2N0eC1cdTAwM2Vjb21tX2FkZHIpO1xuK1x0dTMyIHNjcnViX3BhcmFtc19pbjtcbitcdGJvb2wgcnVubmluZztcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIWVuYWJsZSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0bXV0ZXhfbG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rXHRyZXQgPSByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZyhyYXMyX2N0eCwgXHUwMDI2cnVubmluZyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGV4aXQ7XG4rXG4rXHRpZiAocnVubmluZykge1xuK1x0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdGdvdG8gZXhpdDtcbitcdH1cbitcbitcdC8qIFN0b3AgYW55IGJhY2tncm91bmQgc2NydWIgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlYmdfc2NydWIpIHtcbitcdFx0cmV0ID0gX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIGZhbHNlKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGV4aXQ7XG4rXG4rXHRcdHJhczJfY3R4LVx1MDAzZXJlZW5hYmxlX2JnX3NjcnViID0gdHJ1ZTtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBUaGUgdmFsaWRpdHkgY2hlY2tzIGZvciB0aGUgYWRkcmVzcyByYW5nZSB0byBzY3J1YiBuZWVkIHRvIGJlIHVwZGF0ZWRcbitcdCAqIHdpdGggKGJhc2UgKyBzaXplKSBcdTAwM2UgKG1lbV9iYXNlICsgbWVtX3NpemUpIGNoZWNrIGluIHRoZSBmdXR1cmUgb25jZSBhXG4rXHQgKiBwcm9wZXIgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgTlVNQSBub2RlIG1lbW9yeSByYW5nZSBpcyBhdmFpbGFibGUuXG4rXHQgKi9cbitcdGlmICghcmFzMl9jdHgtXHUwMDNlc2l6ZSB8fCByYXMyX2N0eC1cdTAwM2ViYXNlIFx1MDAzYyByYXMyX2N0eC1cdTAwM2VtZW1fYmFzZSkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCIlczogSW52YWxpZCBhZGRyZXNzIHJhbmdlLCBiYXNlPTB4JWxseCBzaXplPTB4JWxseFxcblwiLFxuK1x0XHRcdF9fZnVuY19fLCByYXMyX2N0eC1cdTAwM2ViYXNlLCByYXMyX2N0eC1cdTAwM2VzaXplKTtcbitcdFx0cmV0ID0gLUVSQU5HRTtcbitcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHR9XG4rXG4rXHRpb3dyaXRlOChSQVMyX1NVUFBPUlRfSFdfUEFSVE9MX1NDUlVCLCBcdTAwMjZwc19zbS1cdTAwM2Vjb21tb24uc2V0X2NhcHNbMF0pO1xuK1x0c2NydWJfcGFyYW1zX2luID0gaW9yZWFkMzIoXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19TQ19IUlNfSU5fTUFTSztcbitcdHNjcnViX3BhcmFtc19pbiB8PSBGSUVMRF9QUkVQKFJBUzJfUFNfU0NfSFJTX0lOX01BU0ssIHJhczJfY3R4LVx1MDAzZXNldF9zY3J1Yl9jeWNsZSk7XG4rXHRzY3J1Yl9wYXJhbXNfaW4gXHUwMDI2PSB+UkFTMl9QU19FTl9CQUNLR1JPVU5EO1xuK1x0aW93cml0ZTMyKHNjcnViX3BhcmFtc19pbiwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnNjcnViX3BhcmFtc19pbik7XG4rXHRpb3dyaXRlNjQocmFzMl9jdHgtXHUwMDNlYmFzZSwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdGlvd3JpdGU2NChyYXMyX2N0eC1cdTAwM2VzaXplLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMucmVxX2FkZHJfcmFuZ2VbMV0pO1xuK1x0aW93cml0ZTE2KFJBUzJfU1RBUlRfUEFUUk9MX1NDUlVCQkVSLCBcdTAwMjZwc19zbS1cdTAwM2VwYXJhbXMuY29tbWFuZCk7XG4rXG4rXHRyZXQgPSByYXMyX3NlbmRfcGNjX2NtZChyYXMyX2N0eCwgUENDX0NNRF9FWEVDX1JBUzIpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gc3RhcnQgZGVtYW5kIHNjcnViYmluZyByYyglZClcXG5cIiwgcmV0KTtcbitcdFx0aWYgKHJldCAhPSAtRUJVU1kpIHtcbitcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzBdKTtcbitcdFx0XHRpb3dyaXRlNjQoMCwgXHUwMDI2cHNfc20tXHUwMDNlcGFyYW1zLnJlcV9hZGRyX3JhbmdlWzFdKTtcbitcdFx0XHRyYXMyX2N0eC1cdTAwM2VvZF9zY3J1YiA9IGZhbHNlO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZWJhc2UgPSAwO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZXNpemUgPSAwO1xuK1x0XHR9XG4rXHRcdGdvdG8gZW5hYmxlX2JnX3NjcnViO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNlb2Rfc2NydWIgPSBlbmFibGU7XG4rXG4rXHRyZXQgPSByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlKHJhczJfY3R4KTtcbitcbitcdGlmIChyYXMyX2N0eC1cdTAwM2VyZWVuYWJsZV9iZ19zY3J1YiBcdTAwMjZcdTAwMjYgcmFzMl9jdHgtXHUwMDNlZHJpdmVyX2FjdGl2ZSBcdTAwMjZcdTAwMjYgIXJhczJfY3R4LVx1MDAzZXRocmVhZCkge1xuK1x0XHQvKlxuK1x0XHQgKiBJZiBrdGhyZWFkX3J1bigpIGlzIGNhbGxlZCBiZWZvcmUgc2VuZGluZyB0aGUgY29tbWFuZCBmb3IgZGVtYW5kIHNjcnViYmluZyxcbitcdFx0ICogdGhlIHRocmVhZCBtYXkgZGV0ZXJtaW5lIHRoYXQgZGVtYW5kIHNjcnViYmluZyBpcyBub3QgcnVubmluZywgYXR0ZW1wdCB0b1xuK1x0XHQgKiByZXN0YXJ0IGJhY2tncm91bmQgc2NydWJiaW5nLCBhbmQgdGhlbiBleGl0LiBUaGlzIGNhbiBvY2N1ciBiZWNhdXNlIHRoZVxuK1x0XHQgKiB0aHJlYWQgZnVuY3Rpb24gbWF5IHN0YXJ0IHJ1bm5pbmcgYmVmb3JlIGRlbWFuZCBzY3J1YmJpbmcgc3RhcnRzLlxuK1x0XHQgKi9cbitcdFx0cmFzMl9jdHgtXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4ocmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZCwgcmFzMl9jdHgsXG4rXHRcdFx0XHRcdCAgICAgICBcInJhczJfc2NydWJfbmlkJWRcIiwgcmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbitcdFx0aWYgKElTX0VSUihyYXMyX2N0eC1cdTAwM2V0aHJlYWQpKSB7XG4rXHRcdFx0cmV0ID0gUFRSX0VSUihyYXMyX2N0eC1cdTAwM2V0aHJlYWQpO1xuK1x0XHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBJZiBrdGhyZWFkX3J1bigpIGZhaWxzIGFuZCB0aGUgZGVtYW5kIHNjcnViYmluZyBoYXMgc3RhcnRlZCBydW5uaW5nLFxuK1x0XHRcdCAqIHJlLWVuYWJsaW5nIGJhY2tncm91bmQgc2NydWIgd2lsbCBmYWlsLiBUaHVzIGFkbWluL2Zpcm13YXJlIG1heSBuZWVkXG4rXHRcdFx0ICogdG8gcmUtZW5hYmxlIGJhY2tncm91bmQgc2NydWIgYWZ0ZXIgZGVtYW5kIHNjcnViYmluZyBoYXMgZmluaXNoZWQuXG4rXHRcdFx0ICovXG4rXHRcdFx0Z290byBlbmFibGVfYmdfc2NydWI7XG4rXHRcdH1cbitcdH1cbitcbitcdGdvdG8gZXhpdDtcbitcbitlbmFibGVfYmdfc2NydWI6XG4rXHRpZiAocmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIpIHtcbitcdFx0cmFzMl9jdHgtXHUwMDNlcmVlbmFibGVfYmdfc2NydWIgPSBmYWxzZTtcbitcdFx0X19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnKGRldiwgZHJ2X2RhdGEsIHRydWUpO1xuK1x0fVxuK1xuK2V4aXQ6XG4rXHRtdXRleF91bmxvY2socmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBlZGFjX3NjcnViX29wcyByYXMyX3NjcnViX29wcyA9IHtcbitcdC5yZWFkX2FkZHIgPSByYXMyX2h3X3NjcnViX3JlYWRfYWRkcixcbitcdC5yZWFkX3NpemUgPSByYXMyX2h3X3NjcnViX3JlYWRfc2l6ZSxcbitcdC53cml0ZV9hZGRyID0gcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyLFxuK1x0LndyaXRlX3NpemUgPSByYXMyX2h3X3NjcnViX3dyaXRlX3NpemUsXG4rXHQuZ2V0X2VuYWJsZWRfYmcgPSByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnLFxuK1x0LnNldF9lbmFibGVkX2JnID0gcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZyxcbitcdC5nZXRfZW5hYmxlZF9vZCA9IHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2QsXG4rXHQuc2V0X2VuYWJsZWRfb2QgPSByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kLFxuK1x0LmdldF9taW5fY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlLFxuK1x0LmdldF9tYXhfY3ljbGUgPSByYXMyX2h3X3NjcnViX3JlYWRfbWF4X3NjcnViX2N5Y2xlLFxuK1x0LmdldF9jeWNsZV9kdXJhdGlvbiA9IHJhczJfaHdfc2NydWJfY3ljbGVfcmVhZCxcbitcdC5zZXRfY3ljbGVfZHVyYXRpb24gPSByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlLFxuK307XG4rXG4rc3RhdGljIHZvaWQgcmFzMl9tZW1fZHJ2X3JlbW92ZShzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2KVxuK3tcbitcdHN0cnVjdCByYXMyX21lbV9jdHggKnJhczJfY3R4ID0gY29udGFpbmVyX29mKGF1eGRldiwgc3RydWN0IHJhczJfbWVtX2N0eCwgYWRldik7XG4rXG4rXHRpZiAoIXJhczJfY3R4KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtdXRleF9sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSBmYWxzZTtcbitcdGlmIChyYXMyX2N0eC1cdTAwM2V0aHJlYWQpIHtcbitcdFx0bXV0ZXhfdW5sb2NrKHJhczJfY3R4LVx1MDAzZXBjY19sb2NrKTtcbitcdFx0a3RocmVhZF9zdG9wKHJhczJfY3R4LVx1MDAzZXRocmVhZCk7XG4rXHRcdHJhczJfY3R4LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXHRcdHJldHVybjtcbitcdH1cbitcdG11dGV4X3VubG9jayhyYXMyX2N0eC1cdTAwM2VwY2NfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcmFzMl9tZW1fZHJ2X3Byb2JlKHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYsIGNvbnN0IHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlX2lkICppZClcbit7XG4rXHRzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCA9IGNvbnRhaW5lcl9vZihhdXhkZXYsIHN0cnVjdCByYXMyX21lbV9jdHgsIGFkZXYpO1xuK1x0c3RydWN0IGVkYWNfZGV2X2ZlYXR1cmUgcmFzX2ZlYXR1cmVzO1xuK1x0Y2hhciBzY3J1Yl9uYW1lW1JBUzJfU0NSVUJfTkFNRV9MRU5dO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIG51bV9zcGFubmVkX3BhZ2VzO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcmFzMl9pc19wYXRyb2xfc2NydWJfc3VwcG9ydChyYXMyX2N0eCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdC8qXG4rXHQgKiBSZXRyaWV2ZSB0aGUgUEEgcmFuZ2Ugb2YgdGhlIE5VTUEgZG9tYWluIGFuZCB1c2UgaXQgYXMgdGhlXG4rXHQgKiAnUmVxdWVzdGVkIEFkZHJlc3MgUmFuZ2UnLCB3aGVuIHNlbmQgUkFTMiBjb21tYW5kIEdFVF9QQVRST0xfUEFSQU1FVEVSU1xuK1x0ICogdG8gZ2V0IHBhcmFtZXRlcnMgdGhhdCBhcHBseSB0byBhbGwgYWRkcmVzc2VzIGluIHRoZSBOVU1BIGRvbWFpblxuK1x0ICogYXMgd2VsbCBhcyB3aGVuIHNlbmQgY29tbWFuZCBTVEFSVF9QQVRST0xfU0NSVUJCRVIgdG8gc3RhcnQgdGhlIGRlbWFuZFxuK1x0ICogc2NydWJiaW5nLiBUaGUgdmFsaWRpdHkgY2hlY2sgZm9yIHN5c19jb21wX25pZCBhZ2FpbnN0IE5VTUFfTk9fTk9ERSBpc1xuK1x0ICogYWxyZWFkeSBwZXJmb3JtZWQgaW4gYWRkX2F1eF9kZXZpY2UoKSBpbiAvYWNwaS9yYXMyLmNcbitcdCAqL1xuK1x0c3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm4ocmFzMl9jdHgtXHUwMDNlc3lzX2NvbXBfbmlkKTtcbitcdG51bV9zcGFubmVkX3BhZ2VzID0gbm9kZV9zcGFubmVkX3BhZ2VzKHJhczJfY3R4LVx1MDAzZXN5c19jb21wX25pZCk7XG4rXHRpZiAoIW51bV9zcGFubmVkX3BhZ2VzKSB7XG4rXHRcdHByX2RlYnVnKFwiRmFpbGVkIHRvIGZpbmQgUEEgcmFuZ2Ugb2YgTlVNQSBub2RlKCV1KVxcblwiLCByYXMyX2N0eC1cdTAwM2VzeXNfY29tcF9uaWQpO1xuK1x0XHRyZXR1cm4gLUVQRVJNO1xuK1x0fVxuK1xuK1x0cmFzMl9jdHgtXHUwMDNlbWVtX2Jhc2UgPSBfX3Bmbl90b19waHlzKHN0YXJ0X3Bmbik7XG4rXHRyYXMyX2N0eC1cdTAwM2VtZW1fc2l6ZSA9ICh1NjQpbnVtX3NwYW5uZWRfcGFnZXMgKiBQQUdFX1NJWkU7XG4rXHRndWFyZChtdXRleCkocmFzMl9jdHgtXHUwMDNlcGNjX2xvY2spO1xuK1x0cmV0ID0gcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZShyYXMyX2N0eCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogSW5pdGlhbGl6ZSBzZXRfc2NydWJfY3ljbGUgKi9cbitcdGlmIChyYXMyX2N0eC1cdTAwM2VzY3J1Yl9jeWNsZV9ocnMgXHUwMDNlIHJhczJfY3R4LVx1MDAzZW1pbl9zY3J1Yl9jeWNsZSlcbitcdFx0cmFzMl9jdHgtXHUwMDNlc2V0X3NjcnViX2N5Y2xlID0gcmFzMl9jdHgtXHUwMDNlc2NydWJfY3ljbGVfaHJzO1xuK1x0ZWxzZVxuK1x0XHRyYXMyX2N0eC1cdTAwM2VzZXRfc2NydWJfY3ljbGUgPSByYXMyX2N0eC1cdTAwM2VtaW5fc2NydWJfY3ljbGU7XG4rXG4rXHRzcHJpbnRmKHNjcnViX25hbWUsIFwiYWNwaV9yYXNfbWVtJWRcIiwgYXV4ZGV2LVx1MDAzZWlkKTtcbitcbitcdHJhc19mZWF0dXJlcy5mdF90eXBlXHQ9IFJBU19GRUFUX1NDUlVCO1xuK1x0cmFzX2ZlYXR1cmVzLmluc3RhbmNlXHQ9IDA7XG4rXHRyYXNfZmVhdHVyZXMuc2NydWJfb3BzXHQ9IFx1MDAyNnJhczJfc2NydWJfb3BzO1xuK1x0cmFzX2ZlYXR1cmVzLmN0eFx0PSByYXMyX2N0eDtcbitcbitcdHJhczJfY3R4LVx1MDAzZWRyaXZlcl9hY3RpdmUgPSB0cnVlO1xuK1xuK1x0cmV0dXJuIGVkYWNfZGV2X3JlZ2lzdGVyKFx1MDAyNmF1eGRldi1cdTAwM2VkZXYsIHNjcnViX25hbWUsIE5VTEwsIDEsIFx1MDAyNnJhc19mZWF0dXJlcyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZV9pZCByYXMyX21lbV9kZXZfaWRfdGFibGVbXSA9IHtcbitcdHsgLm5hbWUgPSBSQVMyX0FVWF9ERVZfTkFNRSBcIi5cIiBSQVMyX01FTV9ERVZfSURfTkFNRSwgfSxcbitcdHsgfVxuK307XG4rXG4rTU9EVUxFX0RFVklDRV9UQUJMRShhdXhpbGlhcnksIHJhczJfbWVtX2Rldl9pZF90YWJsZSk7XG4rXG4rc3RhdGljIHN0cnVjdCBhdXhpbGlhcnlfZHJpdmVyIHJhczJfbWVtX2RyaXZlciA9IHtcbitcdC5uYW1lID0gUkFTMl9NRU1fREVWX0lEX05BTUUsXG4rXHQucHJvYmUgPSByYXMyX21lbV9kcnZfcHJvYmUsXG4rXHQucmVtb3ZlID0gcmFzMl9tZW1fZHJ2X3JlbW92ZSxcbitcdC5pZF90YWJsZSA9IHJhczJfbWVtX2Rldl9pZF90YWJsZSxcbit9O1xuK21vZHVsZV9hdXhpbGlhcnlfZHJpdmVyKHJhczJfbWVtX2RyaXZlcik7XG4rXG4rTU9EVUxFX0lNUE9SVF9OUyhcIkFDUElfUkFTMlwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJBQ1BJIFJBUzIgbWVtb3J5IGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcmFzMi5oIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5hYzc1YjAzMDdmYTljY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9hY3BpL3JhczIuaFxuQEAgLTAsMCArMSw4NiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKlxuKyAqIEFDUEkgUkFTMiAoUkFTIEZlYXR1cmUgVGFibGUpIG1ldGhvZHMuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjQtMjAyNiBIaVNpbGljb24gTGltaXRlZFxuKyAqL1xuK1xuKyNpZm5kZWYgX0FDUElfUkFTMl9IXG4rI2RlZmluZSBfQUNQSV9SQVMyX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hY3BpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hdXhpbGlhcnlfYnVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tYWlsYm94X2NsaWVudC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbitcbitzdHJ1Y3QgZGV2aWNlO1xuK1xuKy8qXG4rICogQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgyOiBQQ0MgY29tbWFuZCBjb2RlcyB1c2VkIGJ5XG4rICogUkFTMiBwbGF0Zm9ybSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuXG4rICovXG4rI2RlZmluZSBQQ0NfQ01EX0VYRUNfUkFTMiAweDAxXG4rXG4rI2RlZmluZSBSQVMyX0FVWF9ERVZfTkFNRSBcInJhczJcIlxuKyNkZWZpbmUgUkFTMl9NRU1fREVWX0lEX05BTUUgXCJhY3BpX3JhczJfbWVtXCJcbitcbisvKipcbisgKiBzdHJ1Y3QgcmFzMl9tZW1fY3R4IC0gQ29udGV4dCBmb3IgUkFTMiBtZW1vcnkgZmVhdHVyZXNcbisgKiBAYWRldjpcdFx0QXV4aWxpYXJ5IGRldmljZSBvYmplY3RcbisgKiBAY29tbV9hZGRyOlx0XHRQb2ludGVyIHRvIFJBUzIgUENDIHNoYXJlZCBtZW1vcnkgcmVnaW9uXG4rICogQGRldjpcdFx0UG9pbnRlciB0byBkZXZpY2UgYmFja2luZyBzdHJ1Y3QgbWJveF9jb250cm9sbGVyIGZvciBQQ0NcbisgKiBAc3NwY2M6XHRcdFBvaW50ZXIgdG8gbG9jYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIFBDQyBjb21tdW5pY2F0aW9uXG4rICogQHBjY19sb2NrOlx0XHRQb2ludGVyIHRvIFBDQyBsb2NrIHRvIHByb3ZpZGUgbXV0dWFsbHkgZXhjbHVzaXZlIGFjY2Vzc1xuKyAqXHRcdFx0dG8gUENDIGNoYW5uZWwgc3Vic3BhY2VcbisgKiBAc3lzX2NvbXBfbmlkOlx0Tm9kZSBJRCBvZiB0aGUgc3lzdGVtIGNvbXBvbmVudCB0aGF0IHRoZSBSQVMgZmVhdHVyZVxuKyAqXHRcdFx0aXMgYXNzb2NpYXRlZCB3aXRoLiBTZWUgQUNQSSBzcGVjIDYuNSBUYWJsZSA1LjgwOiBSQVMyXG4rICpcdFx0XHRQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgRGVzY3JpcHRvciBmb3JtYXQsXG4rICpcdFx0XHRGaWVsZDogSW5zdGFuY2VcbisgKiBAbWVtX2Jhc2U6XHRcdEJhc2Ugb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQG1lbV9zaXplXHRcdFNpemUgb2YgdGhlIGxvd2VzdCBwaHlzaWNhbCBjb250aW51b3VzIG1lbW9yeSByYW5nZVxuKyAqXHRcdFx0b2YgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIE5VTUEgZG9tYWluXG4rICogQGJhc2U6XHRcdEJhc2UgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB0byBzY3J1YlxuKyAqIEBzaXplOlx0XHRTaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIHRvIHNjcnViXG4rICogQHNjcnViX2N5Y2xlX2hyczpcdEN1cnJlbnQgc2NydWIgcmF0ZSBpbiBob3Vyc1xuKyAqIEBzZXRfc2NydWJfY3ljbGU6XHRTY3J1YiByYXRlIHRvIHNldCBpbiBob3Vyc1xuKyAqIEBtaW5fc2NydWJfY3ljbGU6XHRNaW5pbXVtIHNjcnViIHJhdGUgc3VwcG9ydGVkXG4rICogQG1heF9zY3J1Yl9jeWNsZTpcdE1heGltdW0gc2NydWIgcmF0ZSBzdXBwb3J0ZWRcbisgKiBAb2Rfc2NydWI6XHRcdFN0YXR1cyBvZiBkZW1hbmQgc2NydWJiaW5nIChtZW1vcnkgcmVnaW9uKVxuKyAqIEBiZ19zY3J1YjpcdFx0U3RhdHVzIG9mIGJhY2tncm91bmQgcGF0cm9sIHNjcnViYmluZ1xuKyAqIEByZWVuYWJsZV9iZ19zY3J1YjpcdEZsYWcgaW5kaWNhdGVzIHJlc3RhcnQgYmFja2dyb3VuZCBzY3J1YmJpbmcgYWZ0ZXIgZGVtYW5kXG4rICpcdFx0XHRzY3J1YmJpbmcgaXMgZmluaXNoZWRcbisgKiBAdGhyZWFkOlx0XHREZW1hbmQgc2NydWIgbW9uaXRvciBrdGhyZWFkXG4rICogQGRyaXZlcl9hY3RpdmU6XHRGbGFnIGluZGljYXRlcyBSQVMyIG1lbW9yeSBkcml2ZXIgaXMgYWN0aXZlL3JlbW92ZWRcbisgKi9cbitzdHJ1Y3QgcmFzMl9tZW1fY3R4IHtcbitcdHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlXHRcdGFkZXY7XG4rXHRzdHJ1Y3QgYWNwaV9yYXMyX3NobWVtIF9faW9tZW1cdCpjb21tX2FkZHI7XG4rXHRzdHJ1Y3QgZGV2aWNlXHRcdFx0KmRldjtcbitcdHZvaWRcdFx0XHRcdCpzc3BjYztcbitcdHN0cnVjdCBtdXRleFx0XHRcdCpwY2NfbG9jaztcbitcdHUzMlx0XHRcdFx0c3lzX2NvbXBfbmlkO1xuK1x0dTY0XHRcdFx0XHRtZW1fYmFzZTtcbitcdHU2NFx0XHRcdFx0bWVtX3NpemU7XG4rXHR1NjRcdFx0XHRcdGJhc2U7XG4rXHR1NjRcdFx0XHRcdHNpemU7XG4rXHR1OFx0XHRcdFx0c2NydWJfY3ljbGVfaHJzO1xuK1x0dThcdFx0XHRcdHNldF9zY3J1Yl9jeWNsZTtcbitcdHU4XHRcdFx0XHRtaW5fc2NydWJfY3ljbGU7XG4rXHR1OFx0XHRcdFx0bWF4X3NjcnViX2N5Y2xlO1xuK1x0Ym9vbFx0XHRcdFx0b2Rfc2NydWI7XG4rXHRib29sXHRcdFx0XHRiZ19zY3J1YjtcbitcdGJvb2xcdFx0XHRcdHJlZW5hYmxlX2JnX3NjcnViO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0XHRcdCp0aHJlYWQ7XG4rXHRib29sXHRcdFx0XHRkcml2ZXJfYWN0aXZlO1xuK307XG4rXG4rI2lmZGVmIENPTkZJR19BQ1BJX1JBUzJcbit2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKTtcbitpbnQgcmFzMl9zZW5kX3BjY19jbWQoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIHUxNiBjbWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIGFjcGlfcmFzMl9pbml0KHZvaWQpIHsgfVxuKyNlbmRpZlxuK1xuKyNlbmRpZiAvKiBfQUNQSV9SQVMyX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VkYWMuaCBiL2luY2x1ZGUvbGludXgvZWRhYy5oXG5pbmRleCBlNmI0ZTUxMTMwZTVmZi4uYmU0ZjZlNTJlYTM4YTAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2VkYWMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9lZGFjLmhcbkBAIC02ODQsNiArNjg0LDggQEAgZW51bSBlZGFjX2Rldl9mZWF0IHtcbiAgKiBAd3JpdGVfc2l6ZTogc2V0IG9mZnNldCBvZiB0aGUgc2NydWJiaW5nIHJhbmdlLlxuICAqIEBnZXRfZW5hYmxlZF9iZzogY2hlY2sgaWYgY3VycmVudGx5IHBlcmZvcm1pbmcgYmFja2dyb3VuZCBzY3J1Yi5cbiAgKiBAc2V0X2VuYWJsZWRfYmc6IHN0YXJ0IG9yIHN0b3AgYSBiZy1zY3J1Yi5cbisgKiBAZ2V0X2VuYWJsZWRfb2Q6IGNoZWNrIGlmIGN1cnJlbnRseSBwZXJmb3JtaW5nIGRlbWFuZCBzY3J1Yi5cbisgKiBAc2V0X2VuYWJsZWRfb2Q6IHN0YXJ0IG9yIHN0b3AgYSBkZW1hbmQtc2NydWIuXG4gICogQGdldF9taW5fY3ljbGU6IGdldCBtaW5pbXVtIHN1cHBvcnRlZCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuICAqIEBnZXRfbWF4X2N5Y2xlOiBnZXQgbWF4aW11bSBzdXBwb3J0ZWQgc2NydWIgY3ljbGUgZHVyYXRpb24gaW4gc2Vjb25kcy5cbiAgKiBAZ2V0X2N5Y2xlX2R1cmF0aW9uOiBnZXQgY3VycmVudCBzY3J1YiBjeWNsZSBkdXJhdGlvbiBpbiBzZWNvbmRzLlxuQEAgLTY5Niw2ICs2OTgsOCBAQCBzdHJ1Y3QgZWRhY19zY3J1Yl9vcHMge1xuIFx0aW50ICgqd3JpdGVfc2l6ZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgdTY0IHNpemUpO1xuIFx0aW50ICgqZ2V0X2VuYWJsZWRfYmcpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4gXHRpbnQgKCpzZXRfZW5hYmxlZF9iZykoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuK1x0aW50ICgqZ2V0X2VuYWJsZWRfb2QpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIGJvb2wgKmVuYWJsZSk7XG4rXHRpbnQgKCpzZXRfZW5hYmxlZF9vZCkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgYm9vbCBlbmFibGUpO1xuIFx0aW50ICgqZ2V0X21pbl9jeWNsZSkoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcnZfZGF0YSwgIHUzMiAqbWluKTtcbiBcdGludCAoKmdldF9tYXhfY3ljbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsICB1MzIgKm1heCk7XG4gXHRpbnQgKCpnZXRfY3ljbGVfZHVyYXRpb24pKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJ2X2RhdGEsIHUzMiAqY3ljbGUpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDc6MTAuODM1MDc1MjYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2ODA1MTM1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyB0aGUgQUNQSSBSQVMyIE1lbW9yeSBTY3J1YmJpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgQUNQSSBSQVMyIG1lbW9yeSBzY3J1YmJpbmcuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggYXQgZmlyc3QgZ2xhbmNlIOKAkyBhIG5ldyBkcml2ZXIsIGBkcml2ZXJzL2FjcGkvcmFzMi5jYCBhbmQgYGRyaXZlcnMvcmFzL2FjcGlfcmFzMi5jYCwgYWxvbmcgd2l0aCBhIG1vZGlmaWNhdGlvbiB0byBgZHJpdmVycy9lZGFjL3NjcnViLmNgLiBUaGUgY29yZSBvZiB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgcmVsaWVzIG9uIHRoZSBQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwgKFBDQykgZm9yIGhhcmR3YXJlIGludGVyYWN0aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGdpdmVuIG15IGZvY3VzLCBpcyB3aGV0aGVyIHRoaXMgaXMgd29ydGggZnV6emluZy5cblxuVGhlIGRyaXZlciBpbnRlcmFjdHMgd2l0aCBBQ1BJIHRhYmxlcyAoc3BlY2lmaWNhbGx5IHRoZSBgQUNQSV9TSUdfUkFTMmAgc2lnbmF0dXJlKSBhbmQgUENDIG1haWxib3hlcy4gTm93LCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyBpbiB0aGUgY29udGV4dCBvZiBmdXp6aW5nLCBwYXJ0aWN1bGFybHkgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuIFdlIGNhbiBwcm9iYWJseSBpbmplY3QgQUNQSSB0YWJsZXMgdXNpbmcgc3l6a2FsbGVyLCB3aGljaCBtaWdodCBsZXQgdXMgdHJpZ2dlciB0aGUgaW5pdGlhbGl6YXRpb24uIFRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBgYWNwaV9yYXMyX2luaXRgLCBpcyBjYWxsZWQgZnJvbSBgYWNwaV9pbml0YCwgc28gdGhhdOKAmXMgYSBwcm9taXNpbmcgZW50cnkgcG9pbnQuIEl0IHBhcnNlcyB0aGUgUkFTMiB0YWJsZSBhbmQsIGlmIHByZXNlbnQsIHJlZ2lzdGVycyBhdXhpbGlhcnkgZGV2aWNlcy4gVGhlIGF1eGlsaWFyeSBkZXZpY2UgcHJvYmUsIGByYXMyX21lbV9kcnZfcHJvYmVgLCBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBQQ0MgcmVhZCBvcGVyYXRpb25zIG9jY3VyLlxuXG5CdXQgdGhlIGNhdGNoIGlzIHRoZSBQQ0MgbWFpbGJveCBzdXBwb3J0LiBTeXprYWxsZXIgY2FuIGluamVjdCBBQ1BJIHRhYmxlcyB1c2luZyBgc3l6X2FjcGlfaW5qZWN0YCwgYnV0IGRvZXMgaXQgYWN0dWFsbHkgaGF2ZSBQQ0MgbWFpbGJveCBzdXBwb3J0PyBJIG5lZWQgdG8gdmVyaWZ5IGlmIFBDQyBpcyBldmVuIHJlYWNoYWJsZS4gVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdGhlIGZ1bmN0aW9uIGBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxgLiBJZiB0aGVyZSdzIG5vIFBDQyBtYWlsYm94IGF2YWlsYWJsZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGZhaWwuIEknbSBnb2luZyB0byBkZWx2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZSBmb3IgYHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbGAgYW5kIHNlZSB3aGF0IHRoZSBjb25kaXRpb25zIGZvciBzdWNjZXNzIG9yIGZhaWx1cmUgYXJlLiBUaGlzIGlzIGEgY3JpdGljYWwgZmFjdG9yIGluIGRldGVybWluaW5nIGlmIHRoaXMgd2hvbGUgcGF0aCBpcyB2aWFibGUgZm9yIGZ1enppbmcgYW5kIHdpbGwgZGV0ZXJtaW5lIGhvdyBJIGFwcHJvYWNoIHRlc3RpbmcgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MjcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0NzoyMS41MTU1OTEyMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyNzY1MDg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWxcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY3BpL2FjcGlfcGNjLmM9NDk9YWNwaV9wY2NfYWRkcmVzc19zcGFjZV9zZXR1cChhY3BpX2hhbmRsZSByZWdpb25faGFuZGxlLCB1MzIgZnVuY3Rpb24sXFxuLS1cXG5kcml2ZXJzL2FjcGkvYWNwaV9wY2MuYy02Ny1cXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmRhdGEtXFx1MDAzZWRvbmUpO1xcbmRyaXZlcnMvYWNwaS9hY3BpX3BjYy5jOjY4OlxcdGRhdGEtXFx1MDAzZXBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFxcdTAwMjZkYXRhLVxcdTAwM2VjbCwgY3R4LVxcdTAwM2VzdWJzcGFjZV9pZCk7XFxuZHJpdmVycy9hY3BpL2FjcGlfcGNjLmMtNjktXFx0aWYgKElTX0VSUihkYXRhLVxcdTAwM2VwY2NfY2hhbikpIHtcXG4tLVxcbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYz01NjY9c3RhdGljIGludCByZWdpc3Rlcl9wY2NfY2hhbm5lbChpbnQgcGNjX3NzX2lkeClcXG4tLVxcbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYy01NzEtXFx0aWYgKHBjY19zc19pZHggXFx1MDAzZT0gMCkge1xcbmRyaXZlcnMvYWNwaS9jcHBjX2FjcGkuYzo1NzI6XFx0XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoXFx1MDAyNmNwcGNfbWJveF9jbCwgcGNjX3NzX2lkeCk7XFxuZHJpdmVycy9hY3BpL2NwcGNfYWNwaS5jLTU3My1cXG4tLVxcbmRyaXZlcnMvYWNwaS9yYXMyLmM9MjgxPXN0YXRpYyBpbnQgcmVnaXN0ZXJfcGNjX2NoYW5uZWwoc3RydWN0IHJhczJfbWVtX2N0eCAqcmFzMl9jdHgsIGludCBwY2NfaWQpXFxuLS1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTMwMi1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jOjMwMzpcXHRwY2NfY2hhbiA9IHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbChcXHUwMDI2c3NwY2MtXFx1MDAzZW1ib3hfY2xpZW50LCBwY2NfaWQpO1xcbmRyaXZlcnMvYWNwaS9yYXMyLmMtMzA0LVxcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XFxuLS1cXG5kcml2ZXJzL2RldmZyZXEvaGlzaV91bmNvcmVfZnJlcS5jPTEwNj1zdGF0aWMgaW50IGhpc2lfdW5jb3JlX3JlcXVlc3RfcGNjX2NoYW4oc3RydWN0IGhpc2lfdW5jb3JlX2ZyZXEgKnVuY29yZSlcXG4tLVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmMtMTE2LVxcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmM6MTE3OlxcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKFxcdTAwMjZ1bmNvcmUtXFx1MDAzZWNsLCB1bmNvcmUtXFx1MDAzZWNoYW5faWQpO1xcbmRyaXZlcnMvZGV2ZnJlcS9oaXNpX3VuY29yZV9mcmVxLmMtMTE4LVxcdGlmIChJU19FUlIocGNjX2NoYW4pKVxcbi0tXFxuZHJpdmVycy9od21vbi94Z2VuZS1od21vbi5jPTYwOT1zdGF0aWMgaW50IHhnZW5lX2h3bW9uX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNjY3LVxcdFxcdGNsLVxcdTAwM2VyeF9jYWxsYmFjayA9IHhnZW5lX2h3bW9uX3BjY19yeF9jYjtcXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmM6NjY4OlxcdFxcdHBjY19jaGFuID0gcGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKGNsLCBjdHgtXFx1MDAzZW1ib3hfaWR4KTtcXG5kcml2ZXJzL2h3bW9uL3hnZW5lLWh3bW9uLmMtNjY5LVxcdFxcdGlmIChJU19FUlIocGNjX2NoYW4pKSB7XFxuLS1cXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYz00MzY9c3RhdGljIGludCB4Z2VuZV9zbGltcHJvX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14Z2VuZS1zbGltcHJvLmMtNDc3LVxcdFxcdGNsLVxcdTAwM2VyeF9jYWxsYmFjayA9IHNsaW1wcm9faTJjX3BjY19yeF9jYjtcXG5kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhnZW5lLXNsaW1wcm8uYzo0Nzg6XFx0XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGN0eC1cXHUwMDNlbWJveF9pZHgpO1xcbmRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGdlbmUtc2xpbXByby5jLTQ3OS1cXHRcXHRpZiAoSVNfRVJSKHBjY19jaGFuKSlcXG4tLVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYz0zMTM9c3RhdGljIGlycXJldHVybl90IHBjY19tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM0OC0vKipcXG5kcml2ZXJzL21haWxib3gvcGNjLmM6MzQ5OiAqIHBjY19tYm94X3JlcXVlc3RfY2hhbm5lbCAtIFBDQyBjbGllbnRzIGNhbGwgdGhpcyBmdW5jdGlvbiB0b1xcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNTAtICpcXHRcXHRyZXF1ZXN0IGEgcG9pbnRlciB0byB0aGVpciBQQ0Mgc3Vic3BhY2UsIGZyb20gd2hpY2ggdGhleVxcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jPTM2MD1zdHJ1Y3QgcGNjX21ib3hfY2hhbiAqXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM2MTpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zNjIte1xcbi0tXFxuZHJpdmVycy9tYWlsYm94L3BjYy5jLTM5Mi19XFxuZHJpdmVycy9tYWlsYm94L3BjYy5jOjM5MzpFWFBPUlRfU1lNQk9MX0dQTChwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwpO1xcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy0zOTQtXFxuLS1cXG5kcml2ZXJzL21haWxib3gvcGNjLmMtMzk4LSAqIEBwY2hhbjogUG9pbnRlciB0byB0aGUgUENDIG1haWxib3ggY2hhbm5lbCBhcyByZXR1cm5lZCBieVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYzozOTk6ICpcXHQgICBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoKVxcbmRyaXZlcnMvbWFpbGJveC9wY2MuYy00MDAtICovXFxuLS1cXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmM9MTczPXN0YXRpYyBpbnQgaGNjc19yZWdpc3Rlcl9wY2NfY2hhbm5lbChzdHJ1Y3QgaGNjc19kZXYgKmhkZXYpXFxuLS1cXG5kcml2ZXJzL3NvYy9oaXNpbGljb24va3VucGVuZ19oY2NzLmMtMTg4LVxcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYzoxODk6XFx0cGNjX2NoYW4gPSBwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoY2wsIGhkZXYtXFx1MDAzZWNoYW5faWQpO1xcbmRyaXZlcnMvc29jL2hpc2lsaWNvbi9rdW5wZW5nX2hjY3MuYy0xOTAtXFx0aWYgKElTX0VSUihwY2NfY2hhbikpIHtcXG4tLVxcbmluY2x1ZGUvYWNwaS9wY2MuaD0zNz1leHRlcm4gc3RydWN0IHBjY19tYm94X2NoYW4gKlxcbmluY2x1ZGUvYWNwaS9wY2MuaDozODpwY2NfbWJveF9yZXF1ZXN0X2NoYW5uZWwoc3RydWN0IG1ib3hfY2xpZW50ICpjbCwgaW50IHN1YnNwYWNlX2lkKTtcXG5pbmNsdWRlL2FjcGkvcGNjLmgtMzktZXh0ZXJuIHZvaWQgcGNjX21ib3hfZnJlZV9jaGFubmVsKHN0cnVjdCBwY2NfbWJveF9jaGFuICpjaGFuKTtcXG4tLVxcbmluY2x1ZGUvYWNwaS9wY2MuaD00MT1zdGF0aWMgaW5saW5lIHN0cnVjdCBwY2NfbWJveF9jaGFuICpcXG5pbmNsdWRlL2FjcGkvcGNjLmg6NDI6cGNjX21ib3hfcmVxdWVzdF9jaGFubmVsKHN0cnVjdCBtYm94X2NsaWVudCAqY2wsIGludCBzdWJzcGFjZV9pZClcXG5pbmNsdWRlL2FjcGkvcGNjLmgtNDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0NzoyMy45NDMyNDY4MzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5Nzc3MTkxMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFJBUzIgU2NydWIgSW50ZXJmYWNlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB3ZSBjYW4gZnV6eiB0aGUgUkFTMiBkcml2ZXIgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEVEQUMgc2NydWIgaW50ZXJmYWNlcy4gRmlyc3QsIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhlIFBDQyBtYWlsYm94IGRyaXZlciBpcyBhY2Nlc3NpYmxlIHZpYSBBQ1BJIHRhYmxlIGluamVjdGlvbiwgc3BlY2lmaWNhbGx5IFBDQ1QuICBJZiBzeXprYWxsZXIgaW5qZWN0cyBhIFBDQ1QgdGFibGUsIHRoZSBQQ0MgbWFpbGJveCBzaG91bGQgaW5pdGlhbGl6ZSBjaGFubmVscywgYW5kIHRoZW4gdGhlIFJBUzIgZHJpdmVyIHNob3VsZCBpbml0aWFsaXplIGl0c2VsZiBpZiBhIFJBUzIgdGFibGUgaXMgYWxzbyBpbmplY3RlZCwgd2hpY2ggbWVhbnMgd2UgY2FuIHJlYWNoIGl0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuXG5cbk5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhlIGBlZGFjX2Rldl9yZWdpc3RlcmAgY2FsbCBpbiBgcmFzMl9tZW1fZHJ2X3Byb2JlYC4gVGhhdCBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIEVEQUMgc2NydWIgaW50ZXJmYWNlcyBiZWluZyBleHBvc2VkIHZpYSBzeXNmcy4gVGhpcyBpcyBncmVhdCwgYmVjYXVzZSBzeXprYWxsZXIgY2FuIGRpcmVjdGx5IGludGVyYWN0IHdpdGggdGhvc2Ugc3lzZnMgZmlsZXMgdG8gdHJpZ2dlciB0aGUgc2NydWIgb3BlcmF0aW9ucy4gSSdtIHNlZWluZyB0aGUgZmlsZXMgYXJlOiBgL3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9lbmFibGVfZGVtYW5kYCwgYC9zeXMvYnVzL2VkYWMvZGV2aWNlcy9cdTAwM2NkZXYtbmFtZVx1MDAzZS9zY3J1Ylgvc2l6ZWAsIGAvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2FkZHJgLCBgL3N5cy9idXMvZWRhYy9kZXZpY2VzL1x1MDAzY2Rldi1uYW1lXHUwMDNlL3NjcnViWC9jdXJyZW50X2N5Y2xlX2R1cmF0aW9uYCwgYW5kIGAvc3lzL2J1cy9lZGFjL2RldmljZXMvXHUwMDNjZGV2LW5hbWVcdTAwM2Uvc2NydWJYL2VuYWJsZV9iYWNrZ3JvdW5kYC5cblxuVGhlIGtleSBoZXJlIGlzIHVuZGVyc3RhbmRpbmcgdGhlIG9wZXJhdGlvbnMuIExvb2tpbmcgYXQgYHJhczJfc2NydWJfb3BzYCwgSSBzZWUgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBgcmVhZF9hZGRyYCwgYHJlYWRfc2l6ZWAsIGB3cml0ZV9hZGRyYCwgYHdyaXRlX3NpemVgLCBgZ2V0X2VuYWJsZWRfYmdgLCBgc2V0X2VuYWJsZWRfYmdgLCBgZ2V0X2VuYWJsZWRfb2RgLCBgc2V0X2VuYWJsZWRfb2RgLCBgZ2V0X21pbl9jeWNsZWAsIGBnZXRfbWF4X2N5Y2xlYCwgYGdldF9jeWNsZV9kdXJhdGlvbmAsIGFuZCBgc2V0X2N5Y2xlX2R1cmF0aW9uYC4gVGhpcyBpcyBhIGNsZWFyIHRhcmdldCBmb3IgZnV6emluZy4gV2UgY2FuIHByb3ZpZGUgYXJiaXRyYXJ5IHZhbHVlcyB0byB0aGVzZSBmaWxlcyBhbmQgb2JzZXJ2ZSB0aGUgZWZmZWN0cywgc2VlaW5nIGlmIHdlIGNhbiB0cmlnZ2VyIGFueSBtZW1vcnkgZXJyb3JzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSSdtIHRoaW5raW5nIHdlIG5lZWQgYENPTkZJR19BQ1BJX1JBUzJgLCBgQ09ORklHX01FTV9BQ1BJX1JBUzJgLCBhbmQgYENPTkZJR19FREFDX1NDUlVCYC4gTGV0J3MgY29uZmlybSBob3cgdGhlc2UgcmVsYXRlLi4uIEFoYSwgYE1FTV9BQ1BJX1JBUzJgICpkZXBlbmRzKiBvbiBgQUNQSV9SQVMyYCwgYEVEQUNgLCBhbmQgYEVEQUNfU0NSVUJgLiBTbywgZW5zdXJpbmcgdGhhdCBgTUVNX0FDUElfUkFTMmAgaXMgZW5hYmxlZCB3aWxsIGF1dG9tYXRpY2FsbHkgaW5jbHVkZSB0aGUgb3RoZXJzLCB3aGljaCBpcyBpZGVhbC4gTGV0IG1lIGdvIGNoZWNrIGBkcml2ZXJzL3Jhcy9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMzAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDc6MzMuNzIwNDQwMjY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjU1MDQ3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTV9BQ1BJX1JBUzJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9yYXMvS2NvbmZpZz0zNz1jb25maWcgUkFTX0ZNUE1cXG4tLVxcbmRyaXZlcnMvcmFzL0tjb25maWctNDgtXFxuZHJpdmVycy9yYXMvS2NvbmZpZzo0OTpjb25maWcgTUVNX0FDUElfUkFTMlxcbmRyaXZlcnMvcmFzL0tjb25maWctNTAtXFx0dHJpc3RhdGUgXFxcIk1lbW9yeSBBQ1BJIFJBUzIgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0NzozNi4wODU5NTA3MDZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDExNTMyNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRleHQsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFJBUyBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgcHVsbCB1cCB0aGUgYGRyaXZlcnMvcmFzL0tjb25maWdgIGZpbGUgYW5kIHplcm8gaW4gb24gdGhlIGBNRU1fQUNQSV9SQVMyYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQncyB0aGUgY29udGV4dCBoZXJlPyBSQVMsIG9yIFJlbGlhYmlsaXR5LCBBdmFpbGFiaWxpdHksIGFuZCBTZXJ2aWNlYWJpbGl0eSwgaXMgY3JpdGljYWwsIG9idmlvdXNseS4gQW5kIGBBQ1BJYCBhbG1vc3QgY2VydGFpbmx5IGluZGljYXRlcyB3ZSdyZSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgcGxhdGZvcm0gaW50ZXJmYWNlcy4gSXQgbG9va3MgbGlrZSB3ZSdyZSBpbnRlcmVzdGVkIGluIGVycm9yIGhhbmRsaW5nIG9yIG1lbW9yeSBjb25maWd1cmF0aW9uIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIEFDUEktZGVmaW5lZCBmZWF0dXJlcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgYE1FTV9BQ1BJX1JBUzJgIHJlbGF0ZXMgdG8gdGhlIGJyb2FkZXIgUkFTIGluZnJhc3RydWN0dXJlOyBwZXJoYXBzIGl0J3MgYW4gZW5oYW5jZW1lbnQsIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIG9yIGEgZmFsbGJhY2sgbWVjaGFuaXNtLiBJJ2xsIG5lZWQgdG8gcXVpY2tseSBlc3RhYmxpc2ggdGhlIGRlcGVuZGVuY2llcyBhbmQgYXNzb2NpYXRlZCBmZWF0dXJlcy4gVGhpcyBzaG91bGQgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGNvbmZpZ3VyZXMgcmVsaWFiaWxpdHkgZmVhdHVyZXMgYmFzZWQgb24gQUNQSS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzOTksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0NzozOS40OTc0ODYyOTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9yYXMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRcXHRkZXBlbmRzIG9uIEFNRF9BVEwgXFx1MDAyNlxcdTAwMjYgQUNQSV9BUEVJXFxuICA0MTpcXHRcXHRoZWxwXFxuICA0MjpcXHRcXHQgIFN1cHBvcnQgc2F2aW5nIGFuZCByZXN0b3JpbmcgbWVtb3J5IGVycm9yIGluZm9ybWF0aW9uIGFjcm9zcyByZWJvb3RcXG4gIDQzOlxcdFxcdCAgdXNpbmcgQUNQSSBFUlNUIGFzIHBlcnNpc3RlbnQgc3RvcmFnZS4gRXJyb3IgaW5mb3JtYXRpb24gaXMgc2F2ZWQgd2l0aFxcbiAgNDQ6XFx0XFx0ICB0aGUgVUVGSSBDUEVSIFxcXCJGUlUgTWVtb3J5IFBvaXNvblxcXCIgc2VjdGlvbiBmb3JtYXQuXFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdCAgTWVtb3J5IHdpbGwgYmUgcmV0aXJlZCBkdXJpbmcgYm9vdCB0aW1lIGFuZCBydW4gdGltZSBkZXBlbmRpbmcgb25cXG4gIDQ3OlxcdFxcdCAgcGxhdGZvcm0tc3BlY2lmaWMgcG9saWNpZXMuXFxuICA0ODpcXHRcXG4gIDQ5OlxcdGNvbmZpZyBNRU1fQUNQSV9SQVMyXFxuICA1MDpcXHRcXHR0cmlzdGF0ZSBcXFwiTWVtb3J5IEFDUEkgUkFTMiBkcml2ZXJcXFwiXFxuICA1MTpcXHRcXHRkZXBlbmRzIG9uIEFDUElfUkFTMlxcbiAgNTI6XFx0XFx0ZGVwZW5kcyBvbiBFREFDXFxuICA1MzpcXHRcXHRkZXBlbmRzIG9uIEVEQUNfU0NSVUJcXG4gIDU0OlxcdFxcdHNlbGVjdCBOVU1BX0tFRVBfTUVNSU5GT1xcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBUaGUgZHJpdmVyIGJpbmRzIHRvIHRoZSBhdXhpbGlhcnkgZGV2aWNlIGFkZGVkIGJ5IHRoZSBBQ1BJIFJBUzJcXG4gIDU3OlxcdFxcdCAgZmVhdHVyZSB0YWJsZSBwYXJzZXIuIFRoZSBkcml2ZXIgdXNlcyBhIFBDQyBjaGFubmVsIHN1YnNwYWNlIHRvXFxuICA1ODpcXHRcXHQgIGNvbW11bmljYXRlIHdpdGggdGhlIEFDUEktY29tcGxpYW50IHBsYXRmb3JtIGFuZCBwcm92aWRlc1xcbiAgNTk6XFx0XFx0ICBjb250cm9sIG9mIHRoZSBIVy1iYXNlZCBtZW1vcnkgc2NydWJiZXIgcGFyYW1ldGVycyB0byB0aGUgdXNlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0NzozOS40OTc2MTg3ODVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDE2MDk5ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipDb25uZWN0aW5nIHRoZSBEb3RzIGluIHRoZSBSZWxpYWJpbGl0eSBGcmFtZXdvcmsqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUsIGBNRU1fQUNQSV9SQVMyYOKApiB0aGF0IHJpbmdzIGEgYmVsbC4gQWgsIHJpZ2h0LCBpdCdzIGRlZmluaXRlbHkgdGllZCB0byBgQUNQSV9SQVMyYCwgYW5kIG9mIGNvdXJzZSwgdGhhdCBpbXBsaWVzIGEgbGluayB0byBgRURBQ2AgYW5kIGBFREFDX1NDUlVCYC4gU2VlbXMgbGlrZSBhIHByZXR0eSBmb2N1c2VkIGFyZWEg4oCTIG1lbW9yeSBlcnJvciBjb3JyZWN0aW9uIHdpdGhpbiB0aGUgQUNQSSBmcmFtZXdvcmsuIEJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byBhbnl0aGluZyBlbHNlLCBJIHNob3VsZCBjaGVjayB0aGUgc291cmNlLiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIExldCdzIGdldCB0aGUgS2NvbmZpZyBmaWxlIGZvciBBQ1BJLCB0aGF0IHNob3VsZCB0ZWxsIG1lIHdoYXQgdGhhdCBgQUNQSV9SQVMyYCBzeW1ib2wgaXMgYWxsIGFib3V0LiBIb3BlZnVsbHkgSSBjYW4gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGRlcGVuZGVuY2llcyB0aGlzIHdheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ5NTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjQ3OjQzLjUxMzcyMjIzOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYWNwaS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHQgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoaXMgZmlsZSBpbXBsZW1lbnRzIGNvbW1vbiBmdW5jdGlvbmFsaXR5XFxuIDI5MTpcXHRcXHQgIHRvIHBhcnNlIENQUEMgdGFibGVzIGFzIGRlc2NyaWJlZCBpbiB0aGUgQUNQSSA1LjErIHNwZWMuIFRoZVxcbiAyOTI6XFx0XFx0ICByb3V0aW5lcyBpbXBsZW1lbnRlZCBhcmUgbWVhbnQgdG8gYmUgdXNlZCBieSBvdGhlclxcbiAyOTM6XFx0XFx0ICBkcml2ZXJzIHRvIGNvbnRyb2wgQ1BVIHBlcmZvcm1hbmNlIHVzaW5nIENQUEMgc2VtYW50aWNzLlxcbiAyOTQ6XFx0XFx0ICBJZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgQ1BQQyBpbiBmaXJtd2FyZSxcXG4gMjk1OlxcdFxcdCAgbGVhdmUgdGhpcyBvcHRpb24gZGlzYWJsZWQuXFxuIDI5NjpcXHRcXG4gMjk3OlxcdGNvbmZpZyBBQ1BJX1JBUzJcXG4gMjk4OlxcdFxcdGJvb2wgXFxcIkFDUEkgUkFTMiBkcml2ZXJcXFwiXFxuIDI5OTpcXHRcXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbiAzMDA6XFx0XFx0ZGVwZW5kcyBvbiBNQUlMQk9YXFxuIDMwMTpcXHRcXHRkZXBlbmRzIG9uIFBDQ1xcbiAzMDI6XFx0XFx0aGVscFxcbiAzMDM6XFx0XFx0ICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJBUzIgZmVhdHVyZSB0YWJsZSBhbmQgcHJvdmlkZSBpbnRlcmZhY2VzIGZvclxcbiAzMDQ6XFx0XFx0ICBwbGF0Zm9ybSBSQVMgZmVhdHVyZXMsIHN1Y2ggYXMgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZy5cXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0ICBJZiB1bnN1cmUsIHNlbGVjdCBOLlxcbiAzMDc6XFx0XFxuIDMwODpcXHRjb25maWcgQUNQSV9QUk9DRVNTT1JcXG4gMzA5OlxcdFxcdHRyaXN0YXRlIFxcXCJQcm9jZXNzb3JcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjQ3OjQzLjUxNDkxODY5OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDIxNTM3OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSByZXF1aXJlbWVudHMsIHRhaWxvcmVkIGZvciBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGlzIHNwYWNlOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgUmVsaWFiaWxpdHksIEF2YWlsYWJpbGl0eSwgYW5kIFNlcnZpY2VhYmlsaXR5IFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyByZWxpYWJpbGl0eSBhbmQgUkFTIHN0dWZmLiBJIHNlZSBhIGZldyBrZXkgZWxlbWVudHMganVtcGluZyBvdXQ6IGBBQ1BJX1JBUzJgLCBgTUVNX0FDUElfUkFTMmAsIGBFREFDX1NDUlVCYCwgYFBDQ2AsIGFuZCBgTUFJTEJPWGAuIFRoZXNlIGFsbCBwb2ludCB0byBkaWZmZXJlbnQgbGV2ZWxzIG9mIGVycm9yIGRldGVjdGlvbiwgY29ycmVjdGlvbiwgYW5kIGhhbmRsaW5nIHdpdGhpbiB0aGUgc3lzdGVtLiBgQUNQSV9SQVMyYCBhbmQgYE1FTV9BQ1BJX1JBUzJgIGxpa2VseSBhZGRyZXNzIGZpcm13YXJlLWJhc2VkIGFuZCBtZW1vcnktc3BlY2lmaWMgUkFTIGNhcGFiaWxpdGllcywgd2hpY2ggYXJlIGZ1bmRhbWVudGFsLiBgUENDYCBwcm9iYWJseSByZWZlcnMgdG8gUGxhdGZvcm0gQ29udHJvbCBDb21wb25lbnQsIHN1Z2dlc3Rpbmcgd2UncmUgZGVhbGluZyB3aXRoIGFkdmFuY2VkIHBsYXRmb3JtIG1hbmFnZW1lbnQgZmVhdHVyZXMuIEFuZCB0aGUgYE1BSUxCT1hgIGluZGljYXRlcyBhIG1lY2hhbmlzbSBmb3IgaW50ZXItcHJvY2Vzc29yIG9yIGludGVyLW1vZHVsZSBjb21tdW5pY2F0aW9uIHNwZWNpZmljYWxseSBmb3IgUkFTIGV2ZW50cy5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyBhbHdheXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGNhcGFiaWxpdGllcyBvZiB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHNvbWV0aGluZyBxdWlja2x5OiBJcyBgRURBQ19TQ1JVQmAgYWN0dWFsbHkgYSBjb25maWd1cmFibGUgb3B0aW9uPyBVbmRlcnN0YW5kaW5nIHRoZSBidWlsZC9jb25maWcgb3B0aW9ucyBmb3IgYSBzY3J1YiBhbGxvd3MgdXMgdG8gZGV0ZXJtaW5lIHdoYXQgY2FuIGJlIGN1c3RvbWl6ZWQgYW5kIGlmIHdlIGNhbiBtb2RpZnkgdGhlIHdheSB0aGUgRURBQyBzY3J1YiB3b3Jrcy4gSXMgaXQganVzdCBhIGRyaXZlciwgb3IgYSBjb21wcmVoZW5zaXZlIG1lY2hhbmlzbSB0aGF0IG5lZWRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbiBpbiBpdHMgY29udGV4dD8gR2V0dGluZyB0aGlzIGNsYXJpdHkgaXMga2V5IHRvIGRlY2lkaW5nIGhvdyB3ZSBjYW4gaW50ZWdyYXRlIGFsbCB0aGVzZSBjb21wb25lbnRzIGVmZmVjdGl2ZWx5LiBJdCdzIGEgZm91bmRhdGlvbmFsIHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUxMCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDc6NDkuOTM2NDU4OTA5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA5NjgzNTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFREFDX1NDUlVCXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZWRhYy9LY29uZmlnPTQ3PWNvbmZpZyBFREFDX0dIRVNcXG4tLVxcbmRyaXZlcnMvZWRhYy9LY29uZmlnLTY5LVxcbmRyaXZlcnMvZWRhYy9LY29uZmlnOjcwOmNvbmZpZyBFREFDX1NDUlVCXFxuZHJpdmVycy9lZGFjL0tjb25maWctNzEtXFx0Ym9vbCBcXFwiRURBQyBzY3J1YiBmZWF0dXJlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0Nzo1Mi42NDYxNDgxOTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3MDE0OTMxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIFN5c3RlbSBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMsIGFuZCB5ZXAsICpFREFDX1NDUlVCKi4uLiB0aGF0J3MgZGVmaW5pdGVseSBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4gR290IGl0LiBOb3csIHdoYXQncyBuZXh0PyBMZXQgbWUgc2hpZnQgbXkgZm9jdXMuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCAqUENDKi4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBnbyBmcm9tIGhlcmUsIGxldCdzIGV4cGxvcmUgdGhhdCBzZXR0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTk1OSwiT3V0cHV0VG9rZW5zIjoxNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjQ3OjU1LjQxNjMwMTAzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzOTk4MTMyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUENDXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWFpbGJveC9LY29uZmlnPTExND1jb25maWcgUk9DS0NISVBfTUJPWFxcbi0tXFxuZHJpdmVycy9tYWlsYm94L0tjb25maWctMTIyLVxcbmRyaXZlcnMvbWFpbGJveC9LY29uZmlnOjEyMzpjb25maWcgUENDXFxuZHJpdmVycy9tYWlsYm94L0tjb25maWctMTI0LVxcdGJvb2wgXFxcIlBsYXRmb3JtIENvbW11bmljYXRpb24gQ2hhbm5lbCBEcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL3BjbWNpYS9LY29uZmlnLTUtXFxuZHJpdmVycy9wY21jaWEvS2NvbmZpZzo2Om1lbnVjb25maWcgUENDQVJEXFxuZHJpdmVycy9wY21jaWEvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJQQ0NhcmQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9wY21jaWEvS2NvbmZpZz0yMTM9Y29uZmlnIEVMRUNUUkFfQ0ZcXG4tLVxcbmRyaXZlcnMvcGNtY2lhL0tjb25maWctMjE5LVxcbmRyaXZlcnMvcGNtY2lhL0tjb25maWc6MjIwOmNvbmZpZyBQQ0NBUkRfTk9OU1RBVElDXFxuZHJpdmVycy9wY21jaWEvS2NvbmZpZy0yMjEtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0Nzo1OS43NTYyODcwMjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4NjkwMjg1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmaW5pbmcgdGhlIFRhcmdldCBmb3IgRnV6emluZzogUENDIGFuZCBSQVMyKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYFBDQ2AgdGhpbmcuIEZpcnN0IHRoaW5ncyBmaXJzdDogY29uZmlybSB0aGF0IGBQQ0NgIGlzIGluZGVlZCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgSSBzZWUgaXQgaXMgaW4gYGRyaXZlcnMvbWFpbGJveC9LY29uZmlnYC4gUmlnaHQsIHNvIHRvIGVuYWJsZSB0aGUgYFBDQ2AgZnVuY3Rpb25hbGl0eSwgSSdsbCBuZWVkIHRvIGVuYWJsZSB0aGVzZSBjb25maWdzOiBgQUNQSV9SQVMyYCwgYE1FTV9BQ1BJX1JBUzJgLCBgRURBQ19TQ1JVQmAgYW5kIGBQQ0NgLCBhbmQgcHJvYmFibHkgYE1BSUxCT1hgIGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgaXQgbG9va3MgbGlrZSBpdCdzIGEgY29yZSBzdWJzeXN0ZW0uXG5cbk5vdywgbGV0J3MgemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9ucy4gTG9va2luZyBhdCBgZHJpdmVycy9hY3BpL3JhczIuY2AsIHRoZXJlIGFyZSB0aGVzZSBuZXcgZnVuY3Rpb25zOiBgcmFzMl9zZW5kX3BjY19jbWRgLCBgcmVnaXN0ZXJfcGNjX2NoYW5uZWxgLCBgYWRkX2F1eF9kZXZpY2VgLCBgcGFyc2VfcmFzMl90YWJsZWAsIGFuZCBgYWNwaV9yYXMyX2luaXRgLiBUaGVuLCBpbiBgZHJpdmVycy9yYXMvYWNwaV9yYXMyLmNgLCBJIHNlZSBhIGxhcmdlciBzZXQgb2YgaW50ZXJlc3Rpbmcgcm91dGluZXM6IGByYXMyX2lzX3BhdHJvbF9zY3J1Yl9zdXBwb3J0YCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX3JlYWRfbWluX3NjcnViX2N5Y2xlYCwgYHJhczJfaHdfc2NydWJfcmVhZF9tYXhfc2NydWJfY3ljbGVgLCBgcmFzMl9od19zY3J1Yl9jeWNsZV9yZWFkYCwgYHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGVgLCBgcmFzMl9od19zY3J1Yl9yZWFkX2FkZHJgLCBgcmFzMl9od19zY3J1Yl9yZWFkX3NpemVgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZWAsIGByYXMyX2h3X3NjcnViX2dldF9lbmFibGVkX2JnYCwgYF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZ2AsIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYHJhczJfaHdfc2NydWJfZ2V0X2VuYWJsZWRfb2RgLCBgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZGAsIGFuZCBgcmFzMl9tZW1fZHJ2X3Byb2JlYC5cblxuQWxyaWdodCwgdGltZSB0byByZWZpbmUgdGhlIGF0dGFjayBzdXJmYWNlIGZvciBmdXp6aW5nLiBJbml0aWFsbHksIEkgdGhpbmsgdGhlIGNyaXRpY2FsIG9uZXMgYXJlOiBgcmFzMl9zZW5kX3BjY19jbWRgLCBgcmFzMl91cGRhdGVfcGF0cm9sX3NjcnViX3BhcmFtc19jYWNoZWAsIGByYXMyX2dldF9kZW1hbmRfc2NydWJfcnVubmluZ2AsIGByYXMyX3NjcnViX21vbml0b3JfdGhyZWFkYCwgYHJhczJfaHdfc2NydWJfY3ljbGVfd3JpdGVgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9hZGRyYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZWAsIGBfX3JhczJfaHdfc2NydWJfc2V0X2VuYWJsZWRfYmdgLCBgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZGAsIGByYXMyX21lbV9kcnZfcHJvYmVgLCBhbmQgYHBhcnNlX3JhczJfdGFibGVgLlxuXG5IYW5nIG9uLi4uIEkgc2VlIGByYXMyX3NlbmRfcGNjX2NtZGAgaXMgZXhwb3J0ZWQuIFRoYXQncyBpbnRlcmVzdGluZy4gSSBzaG91bGQgY2hlY2sgYGRyaXZlcnMvZWRhYy9zY3J1Yi5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBuZXcgc3lzZnMgYXR0cmlidXRlcyBvciBhbnl0aGluZyBlbHNlIHRvIGNvbnNpZGVyLiBTZWVtcyBsaWtlIHRoZXJlJ3MgYSBzaW1wbGUgYWRkaXRpb24gb2YgYGVuYWJsZV9kZW1hbmRgIHRvIHRoZSBzeXNmcyBhdHRyaWJ1dGVzIGFuZCBhIG1vZGlmaWNhdGlvbiBvZiBgc2NydWJfYXR0cl92aXNpYmxlYCwgbm90aGluZyBtYWpvci5cblxuU28sIGxldCBtZSByZS1ldmFsdWF0ZSB0aGUgdGFyZ2V0IGxpc3QsIGFmdGVyIHRoaXMgcXVpY2sgc2NhbiBvZiB0aGUgYGVkYWNgIHNpZGU6IGByYXMyX3NlbmRfcGNjX2NtZGAsIGBwYXJzZV9yYXMyX3RhYmxlYCwgYHJhczJfbWVtX2Rydl9wcm9iZWAsIGByYXMyX3VwZGF0ZV9wYXRyb2xfc2NydWJfcGFyYW1zX2NhY2hlYCwgYHJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nYCwgYHJhczJfc2NydWJfbW9uaXRvcl90aHJlYWRgLCBgcmFzMl9od19zY3J1Yl9jeWNsZV93cml0ZWAsIGByYXMyX2h3X3NjcnViX3dyaXRlX2FkZHJgLCBgcmFzMl9od19zY3J1Yl93cml0ZV9zaXplYCwgYF9fcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9iZ2AsIGFuZCBgcmFzMl9od19zY3J1Yl9zZXRfZW5hYmxlZF9vZGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjI5MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxODo0ODoxMS42MjUzMTg1OTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3Njc1ODI0NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWNwaV9yYXMyX2luaXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY3BpL2J1cy5jPTE1NzY9c3RhdGljIGludCBfX2luaXQgYWNwaV9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL2FjcGkvYnVzLmMtMTYxMy1cXHRhY3BpX3Zpb3RfaW5pdCgpO1xcbmRyaXZlcnMvYWNwaS9idXMuYzoxNjE0OlxcdGFjcGlfcmFzMl9pbml0KCk7XFxuZHJpdmVycy9hY3BpL2J1cy5jLTE2MTUtXFxuLS1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jPTQxOT1zdGF0aWMgaW50IHBhcnNlX3JhczJfdGFibGUoc3RydWN0IGFjcGlfdGFibGVfcmFzMiAqcmFzMl90YWIpXFxuLS1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTQ3Ny0vKipcXG5kcml2ZXJzL2FjcGkvcmFzMi5jOjQ3ODogKiBhY3BpX3JhczJfaW5pdCAtIFJBUzIgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLlxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDc5LSAqXFxuLS1cXG5kcml2ZXJzL2FjcGkvcmFzMi5jLTQ4Ni0gKi9cXG5kcml2ZXJzL2FjcGkvcmFzMi5jOjQ4Nzp2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKVxcbmRyaXZlcnMvYWNwaS9yYXMyLmMtNDg4LXtcXG4tLVxcbmluY2x1ZGUvYWNwaS9yYXMyLmg9NTc9c3RydWN0IHJhczJfbWVtX2N0eCB7XFxuLS1cXG5pbmNsdWRlL2FjcGkvcmFzMi5oLTc5LSNpZmRlZiBDT05GSUdfQUNQSV9SQVMyXFxuaW5jbHVkZS9hY3BpL3JhczIuaDo4MDp2b2lkIF9faW5pdCBhY3BpX3JhczJfaW5pdCh2b2lkKTtcXG5pbmNsdWRlL2FjcGkvcmFzMi5oLTgxLWludCByYXMyX3NlbmRfcGNjX2NtZChzdHJ1Y3QgcmFzMl9tZW1fY3R4ICpyYXMyX2N0eCwgdTE2IGNtZCk7XFxuaW5jbHVkZS9hY3BpL3JhczIuaC04Mi0jZWxzZVxcbmluY2x1ZGUvYWNwaS9yYXMyLmg6ODM6c3RhdGljIGlubGluZSB2b2lkIGFjcGlfcmFzMl9pbml0KHZvaWQpIHsgfVxcbmluY2x1ZGUvYWNwaS9yYXMyLmgtODQtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDE4OjQ4OjE0LjM5MjkwNjIyNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTc5NDEwOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldyBBQ1BJIFJBUzIgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBuZXcgQUNQSSBSQVMyIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBicmFpbiBzdGFydHMgY2h1cm5pbmcuIEVzc2VudGlhbGx5LCBpdCdzIGludHJvZHVjaW5nIGEgd2F5IHRvIGhhbmRsZSBtZW1vcnkgc2NydWJiaW5nIHRocm91Z2ggQUNQSSBhbmQgZXhwb3NlIGl0IHRocm91Z2ggc3lzZnMuIEkgY2FuIHNlZSB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyByaWdodCBhd2F5LiBUaGlzIGRyaXZlciBwYXJzZXMgdGhlIFJBUzIgQUNQSSB0YWJsZSwgd2hpY2ggaXMgYSBrZXkgc3RydWN0dXJlLiBJdCB0aGVuIHJlZ2lzdGVycyB0aGVzZSBhdXhpbGlhcnkgZGV2aWNlcywgYW5kIGEgYmluZGluZyBkcml2ZXIgaXMgaW5jbHVkZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtLCBleHBvc2luZyBFREFDIHNjcnViIGludGVyZmFjZXMgZm9yIGNvbnRyb2wgdGhyb3VnaCB0aGUgUENDLlxuXG5UaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoaXMgc2V0dXAgaXMgKnJlYWNoYWJsZSogYnkgc3l6a2FsbGVyLiBTeXprYWxsZXIgY2FuIGluamVjdCBjdXN0b20gQUNQSSB0YWJsZXMsIGluY2x1ZGluZyBSQVMyIGFuZCBQQ0NULCBhbmQgaXQgY2FuIGludGVyYWN0IHdpdGggdGhlIHN5c2ZzIGludGVyZmFjZXMuIFRoaXMgaXMgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzLCB0aGV5J3JlIHRoZSBhdHRhY2sgc3VyZmFjZTogYHBhcnNlX3JhczJfdGFibGVgLCBgcmFzMl9zZW5kX3BjY19jbWRgLCBgcmFzMl9tZW1fZHJ2X3Byb2JlYCwgYHJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVgLCBgcmFzMl9nZXRfZGVtYW5kX3NjcnViX3J1bm5pbmdgLCBgcmFzMl9zY3J1Yl9tb25pdG9yX3RocmVhZGAsIGByYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlYCwgYHJhczJfaHdfc2NydWJfd3JpdGVfYWRkcmAsIGByYXMyX2h3X3NjcnViX3dyaXRlX3NpemVgLCBgX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnYCwgYW5kIGByYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kYC4gRWFjaCBvbmUgb2YgdGhlc2UsIHBhcnRpY3VsYXJseSB0aGUgKndyaXRlKiBvcGVyYXRpb25zLCBuZWVkcyBtZXRpY3Vsb3VzIHNjcnV0aW55LlxuXG5UaGUgY29uZmlndXJhdGlvbnMgdG8gbG9vayBvdXQgZm9yIGFyZSBgQUNQSV9SQVMyYCwgYE1FTV9BQ1BJX1JBUzJgLCBgRURBQ19TQ1JVQmAsIGFuZCBgUENDYC4gVGhlc2UgYXJlIHRoZSBnYXRlcyBhbmQgaW5kaWNhdG9ycyB0byBtYWtlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgcmlnaHQgZW52aXJvbm1lbnQuXG5cbkFscmlnaHQsIHRpbWUgdG8gc2V0IHNvbWUgZXhwZWN0YXRpb25zIGFuZCByZXN1bHRzLiBUaGlzIG5lZWRzIHRvIGJlIHRob3JvdWdobHkgZnV6emVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODYzNywiT3V0cHV0VG9rZW5zIjozMDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTg6NDg6MjEuOTcyMzE5ODI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3MTU2NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBQ1BJX1JBUzJcIixcbiAgICBcIk1FTV9BQ1BJX1JBUzJcIixcbiAgICBcIkVEQUNfU0NSVUJcIixcbiAgICBcIlBDQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhcnNlX3JhczJfdGFibGVcIixcbiAgICBcInJhczJfc2VuZF9wY2NfY21kXCIsXG4gICAgXCJyYXMyX21lbV9kcnZfcHJvYmVcIixcbiAgICBcInJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVcIixcbiAgICBcInJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nXCIsXG4gICAgXCJyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3dyaXRlX2FkZHJcIixcbiAgICBcInJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZVwiLFxuICAgIFwiX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBQ1BJIFJBUzIgZHJpdmVyIHRoYXQgcGFyc2VzIHRoZSBSQVMyIEFDUEkgdGFibGUgYW5kIHJlZ2lzdGVycyBhdXhpbGlhcnkgZGV2aWNlcyBmb3IgbWVtb3J5IHNjcnViYmluZy4gSXQgYWxzbyBhZGRzIGEgZHJpdmVyIHRoYXQgYmluZHMgdG8gdGhlc2UgYXV4aWxpYXJ5IGRldmljZXMgYW5kIGV4cG9zZXMgRURBQyBzY3J1YiBzeXNmcyBpbnRlcmZhY2VzIHRvIGNvbnRyb2wgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZyB2aWEgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpLiBTaW5jZSBzeXprYWxsZXIgY2FuIGluamVjdCBBQ1BJIHRhYmxlcyAoaW5jbHVkaW5nIFJBUzIgYW5kIFBDQ1QpIGFuZCBpbnRlcmFjdCB3aXRoIHN5c2ZzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBQ1BJX1JBUzJcIixcbiAgICBcIk1FTV9BQ1BJX1JBUzJcIixcbiAgICBcIkVEQUNfU0NSVUJcIixcbiAgICBcIlBDQ1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhcnNlX3JhczJfdGFibGVcIixcbiAgICBcInJhczJfc2VuZF9wY2NfY21kXCIsXG4gICAgXCJyYXMyX21lbV9kcnZfcHJvYmVcIixcbiAgICBcInJhczJfdXBkYXRlX3BhdHJvbF9zY3J1Yl9wYXJhbXNfY2FjaGVcIixcbiAgICBcInJhczJfZ2V0X2RlbWFuZF9zY3J1Yl9ydW5uaW5nXCIsXG4gICAgXCJyYXMyX3NjcnViX21vbml0b3JfdGhyZWFkXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX2N5Y2xlX3dyaXRlXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3dyaXRlX2FkZHJcIixcbiAgICBcInJhczJfaHdfc2NydWJfd3JpdGVfc2l6ZVwiLFxuICAgIFwiX19yYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX2JnXCIsXG4gICAgXCJyYXMyX2h3X3NjcnViX3NldF9lbmFibGVkX29kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBBQ1BJIFJBUzIgZHJpdmVyIHRoYXQgcGFyc2VzIHRoZSBSQVMyIEFDUEkgdGFibGUgYW5kIHJlZ2lzdGVycyBhdXhpbGlhcnkgZGV2aWNlcyBmb3IgbWVtb3J5IHNjcnViYmluZy4gSXQgYWxzbyBhZGRzIGEgZHJpdmVyIHRoYXQgYmluZHMgdG8gdGhlc2UgYXV4aWxpYXJ5IGRldmljZXMgYW5kIGV4cG9zZXMgRURBQyBzY3J1YiBzeXNmcyBpbnRlcmZhY2VzIHRvIGNvbnRyb2wgaGFyZHdhcmUtYmFzZWQgbWVtb3J5IHNjcnViYmluZyB2aWEgUENDIChQbGF0Zm9ybSBDb21tdW5pY2F0aW9uIENoYW5uZWwpLiBTaW5jZSBzeXprYWxsZXIgY2FuIGluamVjdCBBQ1BJIHRhYmxlcyAoaW5jbHVkaW5nIFJBUzIgYW5kIFBDQ1QpIGFuZCBpbnRlcmFjdCB3aXRoIHN5c2ZzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown2f2f[1] Phase: Succeeded StartedAt: 2026-07-10 18:48:34 +0000 UTC FinishedAt: 2026-07-10 18:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 18:48:34 +0000 UTC FinishedAt: 2026-07-10 18:48:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2] Phase: Succeeded StartedAt: 2026-07-10 18:48:34 +0000 UTC FinishedAt: 2026-07-10 20:02:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-10 18:48:34 +0000 UTC FinishedAt: 2026-07-10 20:02:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 18:48:34 +0000 UTC FinishedAt: 2026-07-10 18:48:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 18:48:34 +0000 UTC FinishedAt: 2026-07-10 18:48:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown2f2f/series-workflown2f2f-convert-artifact-1155049163/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 18:48:55 +0000 UTC FinishedAt: 2026-07-10 19:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 18:48:55 +0000 UTC FinishedAt: 2026-07-10 19:34:10 +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:*dd2f3a6f-b800-4cbc-8e7e-eb5e9863f4dc,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-workflown2f2f/series-workflown2f2f-convert-artifact-1155049163/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": "16bddfaa-fb16-43c5-a06c-7238b8283ad1", "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-workflown2f2f/series-workflown2f2f-build-action-630988233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 18:48:55 +0000 UTC FinishedAt: 2026-07-10 19:34:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dd2f3a6f-b800-4cbc-8e7e-eb5e9863f4dc,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-workflown2f2f/series-workflown2f2f-convert-artifact-1155049163/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": "16bddfaa-fb16-43c5-a06c-7238b8283ad1", "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-workflown2f2f/series-workflown2f2f-build-action-630988233/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 19:34:10 +0000 UTC FinishedAt: 2026-07-10 19:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 19:34:10 +0000 UTC FinishedAt: 2026-07-10 19:34:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 19:34:10 +0000 UTC FinishedAt: 2026-07-10 19:34:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 19:34:10 +0000 UTC FinishedAt: 2026-07-10 19:34:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown2f2f/series-workflown2f2f-convert-artifact-943527202/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 19:34:21 +0000 UTC FinishedAt: 2026-07-10 19:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 19:34:21 +0000 UTC FinishedAt: 2026-07-10 19:36:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*16bddfaa-fb16-43c5-a06c-7238b8283ad1,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-workflown2f2f/series-workflown2f2f-build-action-630988233/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-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 19:36:31 +0000 UTC FinishedAt: 2026-07-10 19:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 19:36:31 +0000 UTC FinishedAt: 2026-07-10 19:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 19:36:31 +0000 UTC FinishedAt: 2026-07-10 20:02:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 19:36:31 +0000 UTC FinishedAt: 2026-07-10 20:02:09 +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:*dd2f3a6f-b800-4cbc-8e7e-eb5e9863f4dc,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-workflown2f2f/series-workflown2f2f-convert-artifact-943527202/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": "4aba36a3-6777-42f1-bcad-f10d6ceb7cdf", "success": false },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-workflown2f2f/series-workflown2f2f-build-action-3323352438/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 19:36:31 +0000 UTC FinishedAt: 2026-07-10 20:01:45 +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:*dd2f3a6f-b800-4cbc-8e7e-eb5e9863f4dc,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-workflown2f2f/series-workflown2f2f-convert-artifact-943527202/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": "4aba36a3-6777-42f1-bcad-f10d6ceb7cdf", "success": false },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-workflown2f2f/series-workflown2f2f-build-action-3323352438/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-07-10 20:02:09 +0000 UTC FinishedAt: 2026-07-10 20:02:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflown2f2f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["parse_ras2_table","ras2_send_pcc_cmd","ras2_mem_drv_probe","ras2_update_patrol_scrub_params_cache","ras2_get_demand_scrub_running","ras2_scrub_monitor_thread","ras2_hw_scrub_cycle_write","ras2_hw_scrub_write_addr","ras2_hw_scrub_write_size","__ras2_hw_scrub_set_enabled_bg","ras2_hw_scrub_set_enabled_od"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["ACPI_RAS2","MEM_ACPI_RAS2","EDAC_SCRUB","PCC"],"series_id":"5040b478-7bdb-4326-a6b4-5685754ec2d4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-07-10 20:02:09 +0000 UTC FinishedAt: 2026-07-10 20:02:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}