Name: series-workflowrl4lm Phase: Succeeded StartedAt: 2026-07-05 16:40:20 +0000 UTC FinishedAt: 2026-07-05 19:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[0] Phase: Succeeded StartedAt: 2026-07-05 16:40:20 +0000 UTC FinishedAt: 2026-07-05 16:55:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[0].run-triage Phase: Succeeded StartedAt: 2026-07-05 16:40:20 +0000 UTC FinishedAt: 2026-07-05 16:55:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MDIO_REALTEK_RTL9300" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MDIO_REALTEK_RTL9300" ], "series_id": "0838597e-091a-4a4b-bebe-cc685dcaebe2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "otto_emdio_notify_phy_attach", "otto_emdio_notify_phy_detach", "otto_emdio_init_polling", "otto_emdio_set_port_polling", "otto_emdio_8380_read_c22", "otto_emdio_8380_write_c22", "otto_emdio_8390_read_c22", "otto_emdio_8390_write_c22", "otto_emdio_8380_setup_controller" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaCYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9faW5pdF9wb2xsaW5nJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzgwX3dyaXRlX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzkwX3dyaXRlX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIHBvbGxpbmcgc3VwcG9ydCB0byB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gY29udHJvbGxlciBkcml2ZXIgYW5kIGludHJvZHVjZXMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbS4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGR1cmluZyBQSFkgZGV2aWNlIGF0dGFjaG1lbnQvZGV0YWNobWVudCwgYW5kIHRoZSBkcml2ZXIgY2hhbmdlcyBjYW4gYmUgcmVhY2hlZCBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjQ3ZjBkNmUyZjMwZGNlZjdmNzI0ZDZlOTc4YWE1YWVkNWQ2YWVlM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDUgMTY6NTQ6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5pbmRleCAyNzFlMDViYWU5YzU3NC4uNjdlMGIyM2E4NDcwZWEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuQEAgLTQsNyAmIzQzOzQsNyBAQFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXG4gJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4gXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcbiYjNDM7dGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcbiBcbiBtYWludGFpbmVyczpcbiAgIC0gQ2hyaXMgUGFja2hhbSBcdTAwM2NjaHJpcy5wYWNraGFtQGFsbGllZHRlbGVzaXMuY28ubnpcdTAwM2VcbkBAIC0xMiw2ICYjNDM7MTIsMTYgQEAgbWFpbnRhaW5lcnM6XG4gcHJvcGVydGllczpcbiAgIGNvbXBhdGlibGU6XG4gICAgIG9uZU9mOlxuJiM0MzsgICAgICAtIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzODAtbWRpb1xuJiM0MzsgICAgICAtIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgIC0gaXRlbXM6XG4gICAgICAgICAgIC0gZW51bTpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXG5AQCAtMjQsNiAmIzQzOzM0LDggQEAgcHJvcGVydGllczpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cbiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW9cbiAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvXG4mIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuaW5kZXggODkyZWQzNzgwYTY1NzIuLmQ3OTdkOGYwMWM2NmU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbkBAIC0zNSw2ICYjNDM7MzUsNzQgQEBcbiAgKlxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcbiYjNDM7ICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cbiYjNDM7ICpcbiYjNDM7ICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cbiYjNDM7ICpcbiYjNDM7ICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2ZcbiYjNDM7ICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXG4mIzQzOyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXG4mIzQzOyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKTpcbiYjNDM7ICpcbiYjNDM7ICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbiYjNDM7ICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcdHBoeV9yZWFkKHBoeSwgMCk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgMSk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XHRwaHlfcmVhZChwaHksIDQpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDUpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV9yZWFkKHBoeSwgNik7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgOSk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XHRwaHlfcmVhZChwaHksIDEwKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCAxNSk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDkpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDEwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDE1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDYpO1xuJiM0MzsgKlxuJiM0MzsgKiBGcm9tIHRoZSBhYm92ZSBzbmlwcGV0cyBpdCBwb2xscyBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB2aWEgQzQ1IG92ZXIgQzIyLiBBc1xuJiM0MzsgKiBvZiBub3cgaXQgaXMgdW5jbGVhciBob3cgdGhlIGhhcmR3YXJlIGRlY2lkZXMgaWYgYSBQSFkgc3VwcG9ydHMgdGhlc2UgcmVnaXN0ZXJzLiBBZnRlciBvbmUgUEhZXG4mIzQzOyAqIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gQmFzaWNhbGx5IHRoZSBidXMgaXMgYWx3YXlzIGJ1c3lcbiYjNDM7ICogYW5kIHRoZSBNQUMgc3RhdHVzIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLlxuJiM0MzsgKlxuJiM0MzsgKiBIb3cgZG9lcyBNRElPIGFjY2VzcyBmcm9tIGtlcm5lbCB3b3JrP1xuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyXG4mIzQzOyAqIHNldHMgYSBcJiMzNDtydW4gY29tbWFuZCBub3dcJiMzNDsgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXG4mIzQzOyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXG4mIzQzOyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XG4mIzQzOyAqXG4mIzQzOyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4mIzQzOyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1x0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcbiYjNDM7ICpcdFx0XHRcdFx0cGh5X3dyaXRlKHBoeSwgMzEsIDApO1xuJiM0MzsgKlxuJiM0MzsgKiBXaGF0IGRvZXMgdGhpcyBtZWFuP1xuJiM0MzsgKlxuJiM0MzsgKiBUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIHBvbGxpbmcgYW5kIFBIWSBhY2Nlc3MgYmV0d2VlbiB0aGUgbW9kZWxzIGJ1dCB0aGUgY2hhbGxlbmdlXG4mIzQzOyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXRcbiYjNDM7ICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uXG4mIzQzOyAqXG4mIzQzOyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay5cbiYjNDM7ICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy5cbiYjNDM7ICogLSBUaGUgUmVhbHRlayBwYWdlIHJlZ2lzdGVyIDMxIGlzIG1hZ2ljYWxseSBtb2RpZmllZCBpbiB0aGUgYmFja2dyb3VuZCBzbyB0aGF0IHBvbGxpbmcgd2lsbFxuJiM0MzsgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW1cbiYjNDM7ICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgXCYjMzQ7bWFnaWNhbGx5XCYjMzQ7IGluIHRoZSBiYWNrZ3JvdW5kLlxuJiM0MzsgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxuJiM0MzsgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLlxuJiM0MzsgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxuJiM0MzsgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxuJiM0MzsgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLlxuJiM0MzsgKlxuJiM0MzsgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcbiYjNDM7ICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbkBAIC01MSw2ICYjNDM7MTE5LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4gXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVNcdFx0XHQxXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFNcdFx0XHQyOFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMXHRcdFx0MHhhMTAwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORVx0XHRCSVQoMTUpXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcdFx0MHhhMWI4XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcdFx0MHhhMWJjXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soMjQsIDIwKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0VcdFx0R0VOTUFTSygxOSwgMTUpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDE0LCAzKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9XUklURVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDVcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyXHRcdDBcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTFx0XHRcdDAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi9cbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMlx0XHQweGExYzBcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGExYzRcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGExN2NcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGExYzhcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVNcdFx0XHQyXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fUEFHRVNcdFx0XHQ4MTkyXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFNcdFx0XHQ1MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTFx0XHQweDAzZWNcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTFx0XHQweDAzZGNcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSyg5LCA1KVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygyMiwgMTApXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUxcdFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQ1RSTFx0XHRcdDB4MDNlMFxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRVx0XHRHRU5NQVNLKDgsIDApXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMXHRcdDB4MDNmMFxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMXHRcdFx0MHgwM2Y0XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPV1x0XHQweDAzZTRcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFx0XHQweDAzZThcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDAzZmNcbiYjNDM7XG4gI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFU1x0XHRcdDRcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFNcdFx0XHQyOFxuQEAgLTcxLDYgJiM0MzsxODMsNyBAQFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4Y2I3Y1xuJiM0MzsjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTFx0XHRcdDB4Y2E5MFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhjYjgwXG4gXG4gI2RlZmluZSBSVEw5MzEwX05VTV9CVVNFU1x0XHRcdDRcbkBAIC05NiwxMSAmIzQzOzIwOSwxMyBAQFxuICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDE1LCAwKVxuICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMXHQweDBjMThcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfQUREUl9DVFJMXHRcdDB4MGM3NFxuJiM0MzsjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MGNjY1xuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTFx0XHQweDBjOWNcbiBcbiAjZGVmaW5lIFBIWV9DVFJMX0NNRFx0XHRcdFx0QklUKDApXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQURcdFx0XHRHRU5NQVNLKDIwLCAxNilcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUdcdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lIFBIWV9WRU5ET1JfUkVBTFRFS1x0XHRcdDB4MDAxY2M4MDBcbiBcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXHRcdFx0NlxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcdFx0XHQ1XG5AQCAtMTI2LDcgJiM0MzsyNDEsOSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHtcbiBcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XG4gXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4gXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi9cbiYjNDM7XHRERUNMQVJFX0JJVE1BUChwaHlfcG9sbCwgTUFYX1BPUlRTKTtcbiBcdERFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpO1xuJiM0MztcdHUxNiBwYWdlW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYnVzW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xuIFx0Ym9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107XG5AQCAtMTQzLDYgJiM0MzsyNjAsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcbiBcdHU4IG51bV9idXNlcztcbiBcdHU4IG51bV9wb3J0cztcbiBcdHUxNiBudW1fcGFnZXM7XG4mIzQzO1x0dTMyIHBvbGxfY3RybDtcbiBcdGludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpO1xuIFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbiBcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbkBAIC0xNzgsNiAmIzQzOzI5NiwxNCBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0cmV0dXJuIGNoYW4tXHUwMDNlcHJpdjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXBvbGxfY3RybCAmIzQzOyAocG9ydCAvIDMyKSAqIDQsXG4mIzQzO1x0XHRcdFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcbiB7XG5AQCAtMTg2LDkgJiM0MzszMTIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0dTMyIGNtZHN0YXRlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovXG4mIzQzO1x0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi9cbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuJiM0MztcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjI4LDcgJiM0MzszNTQsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yNjUsMTMgJiM0MzszOTEsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3dyaXRlLCBjbWRfZGF0YSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4ge1xuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiBcdH07XG4gXG5AQCAtMjg1LDcgJiM0Mzs1MjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuIFx0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4gXHR9O1xuQEAgLTMyNSw3ICYjNDM7NTYxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHVcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYnJvYWRjYXN0XHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSxcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHR9O1xuIFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbkBAIC0zMzcsNyAmIzQzOzU3Myw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG5AQCAtMzgzLDggJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0aWYgKHJlZ251bSA9PSAzMSlcbiYjNDM7XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlcGFnZVtwb3J0XTtcbiYjNDM7XG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2VyZWFkX2MyMihidXMsIHBvcnQsIHJlZ251bSwgXHUwMDI2dmFsdWUpO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiByZXQgPyByZXQgOiB2YWx1ZTtcbiB9XG5AQCAtMzk4LDggJiM0Mzs2MzgsMTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtLCB1MTZcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHRpZiAocmVnbnVtID09IDMxKSB7XG4mIzQzO1x0XHRcdGlmICh2YWx1ZSBcdTAwM2U9IFJBV19QQUdFKHByaXYpKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VwYWdlW3BvcnRdID0gdmFsdWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXdyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ3Miw2ICYjNDM7NzIxLDE1IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nXG4mIzQzO1x0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcbkBAIC01MDgsNiAmIzQzOzc2Niw1NCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVx1MDAzZW1kaW8uYnVzKTtcbiYjNDM7XHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcG9ydDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVx1MDAzZXBoeV9pZCwgUEhZX1ZFTkRPUl9SRUFMVEVLKSkpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRfX3NldF9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuJiM0MztcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdF9fY2xlYXJfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuJiM0MztcdH1cbiYjNDM7XHRcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZGV2X2VycihidXMtXHUwMDNlcGFyZW50LCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcbiBcdFx0XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSlcbiB7XG5AQCAtNTM3LDYgJiM0Mzs4NDMsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRidXMtXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcbiBcdH1cbiBcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4mIzQzO1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcbiYjNDM7XHRidXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xuJiM0MztcbiBcdGNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiBcdGNoYW4tXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcbiBcdGNoYW4tXHUwMDNlcHJpdiA9IHByaXY7XG5AQCAtNjUzLDYgJiM0Mzs5NjIsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIHByaXYtXHUwMDNlaW5mby1cdTAwM2VudW1fcG9ydHM7IHBvcnQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0XHRlcnIgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbkBAIC02NzIsNiAmIzQzOzk5NiwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCk7XG4gXG4mIzQzO1x0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuIFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XG4gXG4gXHRlcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpO1xuQEAgLTY5Nyw2ICYjNDM7MTAyNSw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XG4mIzQzO1x0LmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiYjNDM7XHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4mIzQzO1x0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxuJiM0MztcdC5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLFxuJiM0MztcdC5jbWRfcmVncyA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLFxuJiM0MztcdFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXG4mIzQzO1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCxcbiYjNDM7XHR9LFxuJiM0MztcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbiYjNDM7XHQubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsXG4mIzQzO1x0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4mIzQzO1x0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcixcbiYjNDM7XHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXG4mIzQzO1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuJiM0MztcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyLFxuJiM0MztcdC53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7XG4mIzQzO1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuJiM0MztcdC5jbWRfcmVhZCA9IFJUTDgzOTBfUEhZX0NUUkxfUkVBRCxcbiYjNDM7XHQuY21kX3dyaXRlID0gUlRMODM5MF9QSFlfQ1RSTF9XUklURSxcbiYjNDM7XHQuY21kX3JlZ3MgPSB7XG4mIzQzO1x0XHQuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLFxuJiM0MztcdFx0LmMyMl9kYXRhID0gUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkwsXG4mIzQzO1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbiYjNDM7XHRcdC5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsXG4mIzQzO1x0XHQuaW9fZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTCxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbiYjNDM7XHRcdC5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILFxuJiM0MztcdH0sXG4mIzQzO1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuJiM0MztcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcbiYjNDM7XHQubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuJiM0MztcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMixcbiYjNDM7XHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXG4mIzQzO1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4mIzQzO1x0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiBcdC5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCxcbkBAIC03MTIsNiAmIzQzOzEwODUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxuIFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcixcbiBcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcbiBcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSxcbkBAIC03MzcsNiAmIzQzOzExMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxuQEAgLTc0NSw2ICYjNDM7MTEyMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHtcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw4MzgwLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb184MzgwX2luZm8gfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw4MzkxLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb184MzkwX2luZm8gfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDkzMDEtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsOTMxMS1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXG4gXHR7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAwNjE1MjI4NDU5ZWY0Mi4uNjc2Y2JmMTgzMzUwZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTg3Niw2ICYjNDM7MTg3NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuJiM0MztcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwaHlfcmVzdW1lKHBoeWRldik7XG4gXG4gXHQvKipcbkBAIC0xOTE5LDYgJiM0MzsxOTI1LDkgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaClcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xuJiM0MztcbiBcdGlmIChwaHlkZXYtXHUwMDNlZGV2bGluaykge1xuIFx0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuIFx0XHRwaHlkZXYtXHUwMDNlZGV2bGluayA9IE5VTEw7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmZkLi4zMTYwY2E5OWRlYWI3OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0zNzYsNiAmIzQzOzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbiYjNDM7XHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXG4mIzQzO1x0aW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuJiM0MztcdC8qKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyAqL1xuJiM0MztcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRElPX1JFQUxURUtfUlRMOTMwMCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O290dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2gmIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaCYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvX2luaXRfcG9sbGluZyYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcmIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzgwX3JlYWRfYzIyJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fODM4MF93cml0ZV9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzkwX3JlYWRfYzIyJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fODM5MF93cml0ZV9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBwb2xsaW5nIHN1cHBvcnQgdG8gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGNvbnRyb2xsZXIgZHJpdmVyIGFuZCBpbnRyb2R1Y2VzIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0uIFRoZSBjb3JlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgUEhZIGRldmljZSBhdHRhY2htZW50L2RldGFjaG1lbnQsIGFuZCB0aGUgZHJpdmVyIGNoYW5nZXMgY2FuIGJlIHJlYWNoZWQgaWYgdGhlIGRyaXZlciBpcyBwcm9iZWQgdmlhIGRldmljZSB0cmVlIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjQ3ZjBkNmUyZjMwZGNlZjdmNzI0ZDZlOTc4YWE1YWVkNWQ2YWVlMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDUgMTY6NTQ6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKaW5kZXggMjcxZTA1YmFlOWM1NzQuLjY3ZTBiMjNhODQ3MGVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCkBAIC00LDcgJiM0Mzs0LDcgQEAKICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjCiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKIAotdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXIKJiM0Mzt0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlcgogCiBtYWludGFpbmVyczoKICAgLSBDaHJpcyBQYWNraGFtICZsdDtjaHJpcy5wYWNraGFtQGFsbGllZHRlbGVzaXMuY28ubnomZ3Q7CkBAIC0xMiw2ICYjNDM7MTIsMTYgQEAgbWFpbnRhaW5lcnM6CiBwcm9wZXJ0aWVzOgogICBjb21wYXRpYmxlOgogICAgIG9uZU9mOgomIzQzOyAgICAgIC0gaXRlbXM6CiYjNDM7ICAgICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW8KJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW8KJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzgwLW1kaW8KJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvCiAgICAgICAtIGl0ZW1zOgogICAgICAgICAgIC0gZW51bToKICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW8KQEAgLTI0LDYgJiM0MzszNCw4IEBAIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW8KICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpbwogICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW8KICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvCiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpbwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKaW5kZXggODkyZWQzNzgwYTY1NzIuLmQ3OTdkOGYwMWM2NmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCkBAIC0zNSw2ICYjNDM7MzUsNzQgQEAKICAqCiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvbgogICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LgomIzQzOyAqCiYjNDM7ICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0CiYjNDM7ICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy4KJiM0MzsgKgomIzQzOyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/CiYjNDM7ICoKJiM0MzsgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZgomIzQzOyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvcgomIzQzOyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlCiYjNDM7ICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOgomIzQzOyAqCiYjNDM7ICoJUlRMODM4MAkJCQlSVEw4MzkzCiYjNDM7ICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqCXBoeV93cml0ZShwaHksIDMxLCAweDApOwlwaHlfcmVhZChwaHksIDApOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwlwaHlfcmVhZChwaHksIDEpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDE0LCAweDNjKTsJcGh5X3JlYWQocGh5LCA0KTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCA1KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDE0KTsJCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CXBoeV9yZWFkKHBoeSwgOSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpOwlwaHlfcmVhZChwaHksIDEwKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCAxNSk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDkpOwkJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNSk7CQlwaHlfcmVhZChwaHksIDE0KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxKTsJCXBoeV93cml0ZShwaHksIDE0LCAweDNkKTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDQpOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA1KTsJCXBoeV9yZWFkKHBoeSwgMTQpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoKJiM0MzsgKiBGcm9tIHRoZSBhYm92ZSBzbmlwcGV0cyBpdCBwb2xscyBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB2aWEgQzQ1IG92ZXIgQzIyLiBBcwomIzQzOyAqIG9mIG5vdyBpdCBpcyB1bmNsZWFyIGhvdyB0aGUgaGFyZHdhcmUgZGVjaWRlcyBpZiBhIFBIWSBzdXBwb3J0cyB0aGVzZSByZWdpc3RlcnMuIEFmdGVyIG9uZSBQSFkKJiM0MzsgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5CiYjNDM7ICogYW5kIHRoZSBNQUMgc3RhdHVzIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLgomIzQzOyAqCiYjNDM7ICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz8KJiM0MzsgKgomIzQzOyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXIKJiM0MzsgKiBzZXRzIGEgJiMzNDtydW4gY29tbWFuZCBub3cmIzM0OyBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmUKJiM0MzsgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlcwomIzQzOyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6CiYjNDM7ICoKJiM0MzsgKglSVEw4MzgwCQkJCVJUTDgzOTMKJiM0MzsgKgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpOwlwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7CXBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpOwomIzQzOyAqCQkJCQlwaHlfd3JpdGUocGh5LCAzMSwgMCk7CiYjNDM7ICoKJiM0MzsgKiBXaGF0IGRvZXMgdGhpcyBtZWFuPwomIzQzOyAqCiYjNDM7ICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZQomIzQzOyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXQKJiM0MzsgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS4KJiM0MzsgKgomIzQzOyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay4KJiM0MzsgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLgomIzQzOyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGwKJiM0MzsgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW0KJiM0MzsgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyAmIzM0O21hZ2ljYWxseSYjMzQ7IGluIHRoZSBiYWNrZ3JvdW5kLgomIzQzOyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0CiYjNDM7ICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi4KJiM0MzsgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhbgomIzQzOyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uCiYjNDM7ICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS4KJiM0MzsgKgomIzQzOyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdAomIzQzOyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy4KICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKQEAgLTUxLDYgJiM0MzsxMTksNTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwogCiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9CVVNFUwkJCTEKJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTCQkJNDA5NgomIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFMJCQkyOAomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkwJCQkweGExMDAKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wCQkweGExYjgKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xCQkweGExYmMKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUgkJR0VOTUFTSygyNCwgMjApCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFCQlHRU5NQVNLKDE5LCAxNSkKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UJCUdFTk1BU0soMTQsIDMpCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEUJCUJJVCgyKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQUQJCQkwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUJCUJJVCgxKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyCQkwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTAkJCTAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi8KJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yCQkweGExYzAKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMJCTB4YTFjNAomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMCQkJMHhhMTdjCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTAkJMHhhMWM4CiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9CVVNFUwkJCTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTCQkJODE5MgomIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFMJCQk1MgomIzQzOyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMCQkweDAzZWMKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMCQkweDAzZGMKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUgkJR0VOTUFTSyg5LCA1KQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRQkJR0VOTUFTSygyMiwgMTApCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTAkJCUJJVCgxKQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFCQlCSVQoMykKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFECQkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1CQlCSVQoMikKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMgkJMAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQ1RSTAkJCTB4MDNlMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFCQlHRU5NQVNLKDgsIDApCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwJCTB4MDNmMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQQkJR0VOTUFTSygzMSwgMTYpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQQkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTAkJCTB4MDNmNAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVwkJMHgwM2U0CiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSAkJMHgwM2U4CiYjNDM7I2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTAkJMHgwM2ZjCiYjNDM7CiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTCQkJNAogI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFUwkJCTQwOTYKICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFMJCQkyOApAQCAtNzEsNiAmIzQzOzE4Myw3IEBACiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQogI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQQkJCUdFTk1BU0soMTUsIDApCiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zCQkweGNiN2MKJiM0MzsjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTAkJCTB4Y2E5MAogI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTAkJMHhjYjgwCiAKICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVMJCQk0CkBAIC05NiwxMSAmIzQzOzIwOSwxMyBAQAogI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkwJMHgwYzE4CiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfQUREUl9DVFJMCQkweDBjNzQKJiM0MzsjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMCQkweDBjY2MKICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTAkJMHgwYzljCiAKICNkZWZpbmUgUEhZX0NUUkxfQ01ECQkJCUJJVCgwKQogI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQUQJCQlHRU5NQVNLKDIwLCAxNikKICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFRwkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUsJCQkweDAwMWNjODAwCiAKICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUcJCQk2CiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSCQkJNQpAQCAtMTI2LDcgJiM0MzsyNDEsOSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHsKIAljb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvOwogCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi8KJiM0MzsJREVDTEFSRV9CSVRNQVAocGh5X3BvbGwsIE1BWF9QT1JUUyk7CiAJREVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7CiYjNDM7CXUxNiBwYWdlW01BWF9QT1JUU107CiAJdTggc21pX2J1c1tNQVhfUE9SVFNdOwogCXU4IHNtaV9hZGRyW01BWF9QT1JUU107CiAJYm9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107CkBAIC0xNDMsNiAmIzQzOzI2MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gewogCXU4IG51bV9idXNlczsKIAl1OCBudW1fcG9ydHM7CiAJdTE2IG51bV9wYWdlczsKJiM0MzsJdTMyIHBvbGxfY3RybDsKIAlpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTsKIAlpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpOwogCWludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTsKQEAgLTE3OCw2ICYjNDM7Mjk2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpCiAJcmV0dXJuIGNoYW4tJmd0O3ByaXY7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBwcml2LSZndDtpbmZvLSZndDtwb2xsX2N0cmwgJiM0MzsgKHBvcnQgLyAzMikgKiA0LAomIzQzOwkJCQkgIEJJVChwb3J0ICUgMzIpLCBhY3RpdmUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJCQkgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpCiB7CkBAIC0xODYsOSAmIzQzOzMxMiw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJdTMyIGNtZHN0YXRlOwogCWludCByZXQ7CiAKLQkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqLwomIzQzOwkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqLwogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIyOCw3ICYjNDM7MzU0LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTI2NSwxMyAmIzQzOzM5MSwxMjMgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLAogCXJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LSZndDtpbmZvLSZndDtjbWRfd3JpdGUsIGNtZF9kYXRhKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSBCSVQocG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmM0NV9kYXRhCT0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gQklUKHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiYjNDM7CQkuZXh0X3BhZ2UJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmV4dF9wYWdlCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfaGlnaAk9ICh1MzIpKEJJVF9VTEwocG9ydCkgJmd0OyZndDsgMzIpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSAodTMyKShCSVRfVUxMKHBvcnQpKSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsCiYjNDM7CQkJCSAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jNDVfZGF0YQk9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19oaWdoCT0gKHUzMikoQklUX1VMTChwb3J0KSAmZ3Q7Jmd0OyAzMiksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9ICh1MzIpKEJJVF9VTEwocG9ydCkpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKIHsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAogCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAogCX07CiAKQEAgLTI4NSw3ICYjNDM7NTIxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLAogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAogCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKIAkJLnBvcnRfbWFza19sb3cJPSBCSVQocG9ydCksCiAJfTsKQEAgLTMyNSw3ICYjNDM7NTYxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmJyb2FkY2FzdAk9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSwKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAl9OwogCiAJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhLApAQCAtMzM3LDcgJiM0Mzs1NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sCiAJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiAJCS5wb3J0X21hc2tfaGlnaAk9ICh1MzIpKEJJVF9VTEwocG9ydCkgJmd0OyZndDsgMzIpLAogCQkucG9ydF9tYXNrX2xvdwk9ICh1MzIpKEJJVF9VTEwocG9ydCkpLApAQCAtMzgzLDggJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pCiAJaWYgKHBvcnQgJmx0OyAwKQogCQlyZXR1cm4gcG9ydDsKIAotCXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKQomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykgewomIzQzOwkJaWYgKHJlZ251bSA9PSAzMSkKJiM0MzsJCQlyZXR1cm4gcHJpdi0mZ3Q7cGFnZVtwb3J0XTsKJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7cmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sICZhbXA7dmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7CiB9CkBAIC0zOTgsOCAmIzQzOzYzOCwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNgogCWlmIChwb3J0ICZsdDsgMCkKIAkJcmV0dXJuIHBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmIChyZWdudW0gPT0gMzEpIHsKJiM0MzsJCQlpZiAodmFsdWUgJmd0Oz0gUkFXX1BBR0UocHJpdikpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJCXByaXYtJmd0O3BhZ2VbcG9ydF0gPSB2YWx1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7d3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7CiYjNDM7CX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC00NzIsNiAmIzQzOzcyMSwxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nCiYjNDM7CSAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIHsKIAl1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7CkBAIC01MDgsNiAmIzQzOzc2Niw1NCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi0mZ3Q7bWRpby5idXMpOwomIzQzOwlpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBvcnQ7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X2JpdChwb3J0LCBwcml2LSZndDtwaHlfcG9sbCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzbWlfYnVzX2lzX2M0NVtjaGFuLSZndDttZGlvX2J1c10gJmFtcDsmYW1wOwomIzQzOwkgICAgKCFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LSZndDtwaHlfaWQsIFBIWV9WRU5ET1JfUkVBTFRFSykpKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykgewomIzQzOwkJcmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJX19zZXRfYml0KHBvcnQsIHByaXYtJmd0O3BoeV9wb2xsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtJmd0O21kaW8uYnVzKTsKJiM0MzsJaW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi0mZ3Q7bWRpby5idXMsIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCXJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlfX2NsZWFyX2JpdChwb3J0LCBwcml2LSZndDtwaHlfcG9sbCk7CiYjNDM7CX0KJiM0MzsJCiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkZXZfZXJyKGJ1cy0mZ3Q7cGFyZW50LCAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHBvbGxpbmcgZm9yIHBvcnQgJWRcbiYjMzQ7LCBwb3J0KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwKIAkJCQkgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpCiB7CkBAIC01MzcsNiAmIzQzOzg0Myw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2CiAJCWJ1cy0mZ3Q7d3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjsKIAl9CiAJYnVzLSZndDtwYXJlbnQgPSBkZXY7CiYjNDM7CWJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoOwomIzQzOwlidXMtJmd0O25vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDsKJiM0MzsKIAljaGFuID0gYnVzLSZndDtwcml2OwogCWNoYW4tJmd0O21kaW9fYnVzID0gbWRpb19idXM7CiAJY2hhbi0mZ3Q7cHJpdiA9IHByaXY7CkBAIC02NTMsNiAmIzQzOzk2MiwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldikKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgJmx0OyBwcml2LSZndDtpbmZvLSZndDtudW1fcG9ydHM7IHBvcnQmIzQzOyYjNDM7KSB7CiYjNDM7CQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykgewomIzQzOwkJCWVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKQEAgLTY3Miw2ICYjNDM7OTk2LDEwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmIChJU19FUlIocHJpdi0mZ3Q7cmVnbWFwKSkKIAkJcmV0dXJuIFBUUl9FUlIocHJpdi0mZ3Q7cmVnbWFwKTsKIAomIzQzOwllcnIgPSBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhwcml2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAKIAllcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpOwpAQCAtNjk3LDYgJiM0MzsxMDI1LDUxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7CiYjNDM7CS5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsCiYjNDM7CS5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCwKJiM0MzsJLmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELAomIzQzOwkuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSwKJiM0MzsJLmNtZF9yZWdzID0gewomIzQzOwkJLmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsCiYjNDM7CQkuYzQ1X2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMywKJiM0MzsJCS5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsCiYjNDM7CQkucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLAomIzQzOwl9LAomIzQzOwkubnVtX2J1c2VzID0gUlRMODM4MF9OVU1fQlVTRVMsCiYjNDM7CS5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUywKJiM0MzsJLm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLAomIzQzOwkucG9sbF9jdHJsID0gUlRMODM4MF9TTUlfUE9MTF9DVFJMLAomIzQzOwkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLAomIzQzOwkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsCiYjNDM7CS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSwKJiM0MzsJLndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsCiYjNDM7CS53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7CiYjNDM7CS5jbWRfZmFpbCA9IFJUTDgzOTBfUEhZX0NUUkxfRkFJTCwKJiM0MzsJLmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELAomIzQzOwkuY21kX3dyaXRlID0gUlRMODM5MF9QSFlfQ1RSTF9XUklURSwKJiM0MzsJLmNtZF9yZWdzID0gewomIzQzOwkJLmJyb2FkY2FzdCA9IFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTCwKJiM0MzsJCS5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLAomIzQzOwkJLmM0NV9kYXRhID0gUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwsCiYjNDM7CQkuZXh0X3BhZ2UgPSBSVEw4MzkwX1BIWVJFR19DVFJMLAomIzQzOwkJLmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsCiYjNDM7CQkucG9ydF9tYXNrX2xvdyA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1csCiYjNDM7CQkucG9ydF9tYXNrX2hpZ2ggPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSCwKJiM0MzsJfSwKJiM0MzsJLm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLAomIzQzOwkubnVtX3BhZ2VzID0gUlRMODM5MF9OVU1fUEFHRVMsCiYjNDM7CS5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLAomIzQzOwkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIsCiYjNDM7CS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NSwKJiM0MzsJLndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsCiYjNDM7CS53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1LAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHsKIAkuYWRkcl9tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMLAogCS5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCwKQEAgLTcxMiw2ICYjNDM7MTA4NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0gewogCS5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUywKIAkubnVtX3BvcnRzID0gUlRMOTMwMF9OVU1fUE9SVFMsCiAJLm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLAomIzQzOwkucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLAogCS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsCiAJLnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLAogCS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSwKQEAgLTczNyw2ICYjNDM7MTExMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0gewogCS5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUywKIAkubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsCiAJLm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLAomIzQzOwkucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsCiAJLnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlciwKIAkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsCiAJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LApAQCAtNzQ1LDYgJiM0MzsxMTIwLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvdHRvX2VtZGlvX2lkc1tdID0gewomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDgzODAtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb184MzgwX2luZm8gfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxydGw4MzkxLW1kaW8mIzM0OywgLmRhdGEgPSAmYW1wO290dG9fZW1kaW9fODM5MF9pbmZvIH0sCiAJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxydGw5MzAxLW1kaW8mIzM0OywgLmRhdGEgPSAmYW1wO290dG9fZW1kaW9fOTMwMF9pbmZvIH0sCiAJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxydGw5MzExLW1kaW8mIzM0OywgLmRhdGEgPSAmYW1wO290dG9fZW1kaW9fOTMxMF9pbmZvIH0sCiAJe30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDA2MTUyMjg0NTllZjQyLi42NzZjYmYxODMzNTBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCkBAIC0xODc2LDYgJiM0MzsxODc2LDEyIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7CiAKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfYXR0YWNoKSB7CiYjNDM7CQllcnIgPSBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGVycm9yOwomIzQzOwl9CiYjNDM7CiAJcGh5X3Jlc3VtZShwaHlkZXYpOwogCiAJLyoqCkBAIC0xOTE5LDYgJiM0MzsxOTI1LDkgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJc3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7CiAJc3RydWN0IG1paV9idXMgKmJ1czsKIAomIzQzOwlpZiAocGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9kZXRhY2gpCiYjNDM7CQlwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpOwomIzQzOwogCWlmIChwaHlkZXYtJmd0O2RldmxpbmspIHsKIAkJZGV2aWNlX2xpbmtfZGVsKHBoeWRldi0mZ3Q7ZGV2bGluayk7CiAJCXBoeWRldi0mZ3Q7ZGV2bGluayA9IE5VTEw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAxOTlhN2FhYTM0MWJmZC4uMzE2MGNhOTlkZWFiNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMzc2LDYgJiM0MzszNzYsMTAgQEAgc3RydWN0IG1paV9idXMgewogCQkJIGludCByZWdudW0sIHUxNiB2YWwpOwogCS8qKiBAcmVzZXQ6IFBlcmZvcm0gYSByZXNldCBvZiB0aGUgYnVzICovCiAJaW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpOwomIzQzOwkvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovCiYjNDM7CWludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKJiM0MzsJLyoqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nICovCiYjNDM7CXZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiAKIAkvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovCiAJc3RydWN0IG1kaW9fYnVzX3N0YXRzIHN0YXRzW1BIWV9NQVhfQUREUl07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTk2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGZvciBUZXN0YWJpbGl0eSBpbiB0aGUgUEhZIFN1YnN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgc2V2ZXJhbCBhcmVhczogdGhlIFJlYWx0ZWsgTURJTyBjb250cm9sbGVyIGRyaXZlciwgZGV2aWNlIHRyZWUgYmluZGluZ3MsIGFuZCB0aGVuIHNvbWUgY29yZSBQSFkgc3Vic3lzdGVtIGZpbGVzIChgcGh5X2RldmljZS5jYCBhbmQgYHBoeS5oYCkuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgYWRkaW5nIHRoZXNlIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBgbWlpX2J1c2Agc3RydWN0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIGFjdHVhbGx5ICp0ZXN0KiB0aGlzIGVmZmVjdGl2ZWx5PyBJcyBpdCBldmVuICp3b3J0aCogZnV6emluZz8mIzM0OwoKVGhlIGNoYW5nZXMgdG8gYHBoeV9kZXZpY2UuY2Ag4oCTIGFkZGluZyB0aG9zZSBjYWxsYmFja3MgYW5kIHVzaW5nIHRoZW0gaW4gYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIOKAkyB0aGF04oCZcyBjb3JlIFBIWSBzdHVmZi4gRGVmaW5pdGVseSByZWFjaGFibGUuIEkmIzM5O20gbGVzcyBzdXJlIGFib3V0IHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyLCBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIFRoYXQmIzM5O3MgaGFyZHdhcmUtc3BlY2lmaWMuIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgcHJvYmFibHkgKm5vdCogZ29pbmcgdG8gYmUgcmVhY2hhYmxlIGluIG1hbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBvciB3ZSYjMzk7cmUgdXNpbmcgZGV2aWNlIHRyZWUgb3ZlcmxheXMgc29tZWhvdy4gQnV0IHRoZSAqY29yZSogUEhZIHN1YnN5c3RlbSBjaGFuZ2VzPyBUaG9zZSBhcmUgZmFpciBnYW1lLgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgY2xvc2VyIGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYC4gQWgsIHJpZ2h0LCB0aGV5JiMzOTtyZSBjYWxsaW5nIHRob3NlIG5ldyBjYWxsYmFja3M6IGBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpYCBhbmQgYHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKHBoeWRldilgLiBPa2F5LCB0aGF0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGZvciBzdXJlLiBJdCYjMzk7cyBhIHByZXR0eSBjbGVhbiBjaGFuZ2UsIHNvIGxldCYjMzk7cyBzdGFydCBmdXp6aW5nIGFyb3VuZCB0aGF0IHNlY3Rpb24uCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyB0aWVkIHRvIGFueSBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbnMuIE9idmlvdXNseSwgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHJlcXVpcmVzIGBDT05GSUdfUEhZTElCYC4gSSB3b25kZXIgYWJvdXQgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBJcyB0aGVyZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby1yZWFsdGVrLXJ0bDkzMDAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfTURJT19QSUM2NEhQU0MpXHRcdCYjNDM7PSBtZGlvLXBpYzY0aHBzYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMClcdCYjNDM7PSBtZGlvLXJlYWx0ZWstcnRsOTMwMC5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19NRElPX1JFR01BUClcdFx0JiM0Mzs9IG1kaW8tcmVnbWFwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIGRlc2NyaWJlZDoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIFJUTDkzMDAgTURJTyBTdXBwb3J0KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvbWRpby9gIGRpcmVjdG9yeS4gSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG5ldHdvcmsgTURJTyBkcml2ZXIgY29uZmlndXJhdGlvbnMgYXJlIHR5cGljYWxseSBob3VzZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHN5bWJvbCBgQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBLbm93aW5nIHRoYXQgc3ltYm9sJiMzOTtzIHByZXNlbmNlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzcGVjaWZpYyBNRElPIGRyaXZlciBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGl0IGNvbWVzIHRvIHRoZSBidWlsZC4gSSBleHBlY3QgdGhlIGZpbGUgd2lsbCBnaXZlIG1lIGRldGFpbHMgYXJvdW5kIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IGFuZCBhbnkgcmVsZXZhbnQgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCBpZiBpdCBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY0PWNvbmZpZyBNRElPX0lQUTgwNjRcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTcxLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3Mjpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mzg3CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogODg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IFBIWSBDb3JlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCB3aGljaCBpcyByaWdodCBpbiB0aGUgY29yZSBQSFkgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydD8gSXQmIzM5O3MgYWRkaW5nIHR3byBuZXcgY2FsbGJhY2tzLCBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgLCB0byB0aGUgYG1paV9idXNgIHN0cnVjdC4gQXQgZmlyc3QgZ2xhbmNlLCBpdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgaXMgc2ltcGxlOiBhIG5vbi1OVUxMIGNoZWNrIGFuZCBmdW5jdGlvbiBjYWxsLgoKVGhlIHByaW1hcnkgdXNlciBvZiB0aGVzZSBuZXcgY2FsbGJhY2tzIGFwcGVhcnMgdG8gYmUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBOb3csIGJlY2F1c2UgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgbXkgaW50dWl0aW9uIHNheXMgaXQmIzM5O3MgdW5saWtlbHkgdG8gYmUgdHJpZ2dlcmVkIGluIGEgZ2VuZXJhbCB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwLiBCdXQsIHdlIGFsbCBrbm93IGludHVpdGlvbiBoYXMgdG8gYmUgY2hhbGxlbmdlZC4KClRoZSBjb3JlIFBIWSBjb2RlIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUuIEJ1dCwgaWYgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGlzbiYjMzk7dCB1c2VkLCB0aGUgY2FsbGJhY2tzIHdpbGwgYmUgYE5VTExgLCBhbmQgdGhlIGNvZGUgd29uJiMzOTt0IGV4ZWN1dGUsIG1ha2luZyB0aGF0IHBhcnQgb2YgdGhlIHBhdGNoIGlycmVsZXZhbnQuIFRoZSBpbXBvcnRhbnQgYml0IHRvIHJlbWVtYmVyIGhlcmUgaXMgdGhhdCBhIHN5emthbGxlciBzdHlsZSBmdXp6ZXIgY2FuIGZha2UgZGV2aWNlIHRyZWVzIG9yIHBlcmZvcm0gcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbnMuCgpMZXQmIzM5O3Mgc2VlOiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFN5emthbGxlciBjYW4gcHJvYmUgcGxhdGZvcm0gZHJpdmVycyB2aWEgYHN5el9kZXZtZW1gIG9yIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSwgb3IgaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLiBJdCYjMzk7cyAqcG9zc2libGUqIHdlIGNhbiBnZXQgdGhpcyBkcml2ZXIgcHJvYmVkLiBJZiB0aGF0IGhhcHBlbnMsIHRoZSBgYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaGAgcG9pbnRlciB3aWxsIGJlIHNldCB0byBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAuCgpTbywgd2hhdCBkb2VzIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCAqZG8qPyBJdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdmlhIGByZWdtYXBgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFzIGl0IGNvdWxkIGp1c3QgZmFpbCBhdCBwcm9iZSBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIG9yLCBiZWNhdXNlIGl0IHVzZXMgYHJlZ21hcC1tbWlvYCwgaXQgbWlnaHQgcmVhZC93cml0ZSB0byBtZW1vcnksIHdoaWNoIGNhbiBiZSBleHBsb2l0YWJsZS4KClRvIHByb2NlZWQsIGxldCBtZSBleGFtaW5lIGhvdyBgcmVnbWFwYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gYG90dG9fZW1kaW9fcHJvYmVgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGluZGljYXRpb24gb2YgaG93IGxpa2VseSB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFyZSB0byBjYXVzZSBpc3N1ZXMgaW4gYSBmdXp6ZWQgZW52aXJvbm1lbnQuIFdlIG5lZWQgdG8gZm9sbG93IHdoZXJlIHRoZSBtZW1vcnkgYWNjZXNzZXMgYXJlIGdvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bV9yZWdtYXBfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NDAKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFJUTDkzMDAgTURJTyBEcml2ZXIqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBvdHRvX2VtZGlvX3Byb2JlYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiAgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIgdGhlcmUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgaW5pdGlhbGl6ZXMgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBNRElPIGJ1cywgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBkZXRhaWxzIG9mIHRoZSBSVEw5MzAwLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiB0aGUgZHJpdmVyJiMzOTtzIGFiaWxpdHkgdG8gZGlzY292ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgYXR0YWNoZWQgUEhZcywgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiB0aG9yb3VnaGx5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGRldmljZSBzZXR1cCBsb2dpYyBsaXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3R0b19lbWRpb19wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9Nzk3PXN0YXRpYyB2b2lkIG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODE2LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjgxNzpzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04MTgtXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTk2NT1zdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTk3OS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo5ODA6c3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtOTgxLXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTAxOS1cdGRldmljZV9mb3JfZWFjaF9jaGlsZF9ub2RlX3Njb3BlZChkZXYsIGNoaWxkKSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MTAyMDpcdFx0ZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTAyMS1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MTEzMT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvdHRvX2VtZGlvX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxMTMyOlx0LnByb2JlID0gb3R0b19lbWRpb19wcm9iZSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTMzLVx0LmRyaXZlciA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NTMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIFJlZ2lzdGVyIE1hcCBBY3F1aXNpdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBvdHRvX2VtZGlvX3Byb2JlYC4gVGhlIGdvYWwgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB3ZSYjMzk7cmUgZ2V0dGluZyB0aGF0IGBwcml2LSZndDtyZWdtYXBgIGhhbmRsZS4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHJlZ2lzdGVyIG1hcCBpcyBpbml0aWFsaXplZCBhbmQgYWNjZXNzZWQgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBhbnkgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIGFuZCB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHRvIG1ha2Ugc3VyZSB0aGUgYXNzdW1wdGlvbnMgbWFkZSBhcmUgY29ycmVjdC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBzZXQgdXAgdGhpcyBjcnVjaWFsIHBpZWNlIG9mIHRoZSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmUuIEtub3dpbmcgdGhpcyBpcyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiA5ODE6XHR7XG4gOTgyOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiA5ODM6XHRcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7XG4gOTg0Olx0XHRpbnQgZXJyO1xuIDk4NTpcdFxuIDk4NjpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuIDk4NzpcdFx0aWYgKCFwcml2KVxuIDk4ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5ODk6XHRcbiA5OTA6XHRcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4gOTkxOlx0XHRpZiAoZXJyKVxuIDk5MjpcdFx0XHRyZXR1cm4gZXJyO1xuIDk5MzpcdFxuIDk5NDpcdFx0cHJpdi1cdTAwM2VpbmZvID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4gOTk1Olx0XHRwcml2LVx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChkZXYtXHUwMDNlcGFyZW50LVx1MDAzZW9mX25vZGUpO1xuIDk5NjpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gOTk3Olx0XHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiA5OTg6XHRcbiA5OTk6XHRcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuMTAwMDpcdFx0aWYgKGVycilcbjEwMDE6XHRcdFx0cmV0dXJuIGVycjtcbjEwMDI6XHRcbjEwMDM6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuMTAwNDpcdFxuMTAwNTpcdFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbjEwMDY6XHRcdGlmIChlcnIpXG4xMDA3Olx0XHRcdHJldHVybiBlcnI7XG4xMDA4Olx0XG4xMDA5Olx0XHRlcnIgPSBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHByaXYpO1xuMTAxMDpcdFx0aWYgKGVycilcbjEwMTE6XHRcdFx0cmV0dXJuIGVycjtcbjEwMTI6XHRcbjEwMTM6XHRcdGlmIChwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xuMTAxNDpcdFx0XHRlcnIgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcbjEwMTU6XHRcdFx0aWYgKGVycilcbjEwMTY6XHRcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuMTAxNzpcdFx0fVxuMTAxODpcdFxuMTAxOTpcdFx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHtcbjEwMjA6XHRcdFx0ZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7XG4xMDIxOlx0XHRcdGlmIChlcnIpXG4xMDIyOlx0XHRcdFx0cmV0dXJuIGVycjtcbjEwMjM6XHRcdH1cbjEwMjQ6XHRcbjEwMjU6XHRcdHJldHVybiAwO1xuMTAyNjpcdH1cbjEwMjc6XHRcbjEwMjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbjEwMjk6XHRcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTc3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogaXQgdXNlcyBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCwgd2hpY2ggbWVhbnMgaXQgKmV4cGVjdHMqIHRoZSBwYXJlbnQgbm9kZSB0byBiZSBhIHN5c2Nvbi4gVGhhdCBzdWdnZXN0cyBhIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLiBCdXQgaXMgaXQgKndvcnRoKiB0aGUgZWZmb3J0PwoKVGhlIHBhdGNoIGFkZHMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCB0byB0aGUgYHN0cnVjdCBtaWlfYnVzYCBhbmQgY2FsbHMgdGhlbSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIFRob3NlIGFyZSBjb3JlIFBIWSBzdWJzeXN0ZW0gZnVuY3Rpb25zLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgZXZlbiBpZiB0aGUgc3BlY2lmaWMgZHJpdmVyIGlzbiYjMzk7dCBpbW1lZGlhdGVseSByZWFjaGFibGUsIHRoZSBjb3JlIGNoYW5nZXMgYXJlLCB3aGljaCBpbmNyZWFzZXMgdGhlIGxpa2VsaWhvb2Qgb2YgZmluZGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuCgpIYW5nIG9uLi4uIHRoZSBjb3JlIGNoYW5nZXMgYXJlICpqdXN0KiB0aGlzIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbDoKCmBgYGMKCWlmIChwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCkgewoJCWVyciA9IHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7CgkJaWYgKGVycikKCQkJZ290byBlcnJvcjsKCX0KYGBgCgpUaGF0JiMzOTtzIGEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gcG9pbnRlci4gSWYgbm8gb3RoZXIgZHJpdmVyIGFjdHVhbGx5IHVzZXMgaXQsIHRoaXMgaXMgZXNzZW50aWFsbHkgYSBOVUxMIGNoZWNrLiBJcyBpdCBldmVuIHdvcnRoIGZ1enppbmcganVzdCBmb3IgYSBOVUxMIGNoZWNrPyBQcm9iYWJseSBub3QgYSBnb29kIHVzZSBvZiByZXNvdXJjZXMuCgpBaCwgYnV0IHdhaXQhIFRoZSBwYXRjaCAqYWxzbyogc2lnbmlmaWNhbnRseSBtb2RpZmllcyBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIEl0IGFkZHMgcG9sbGluZyBzdXBwb3J0IHRvIHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyISAqVGhhdCogc291bmRzIG11Y2ggbW9yZSBwcm9taXNpbmcuIENhbiAqdGhpcyogZHJpdmVyIGJlIGZ1enplZD8KClN5emthbGxlciBjYW4gaW5qZWN0IGRldmljZSB0cmVlcywgYW5kIHRoYXQmIzM5O3MgdGhlIGtleS4gSWYgaXQgY2FuIGluamVjdCBhIHN5c2NvbiBwYXJlbnQgKHdoaWNoIGlzIGVhc3kgZW5vdWdoLCBzaW5jZSBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCBqdXN0IG5lZWRzIGEgY29tcGF0aWJsZSBzdHJpbmcpIGFuZCAqdGhpcyogZGV2aWNlLCBpdCBjYW4gcHJvYmUgaXQuIFRoZSBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCBjYWxsIGlzIHNhdGlzZmllZCBpZiB0aGUgcGFyZW50IG5vZGUgaGFzIGEgY29tcGF0aWJsZSBzdHJpbmcgdGhhdCBtYXRjaGVzIGEgc3lzY29uIGRyaXZlci4KClNvIGlzIGl0IHdvcnRoIGZ1enppbmc/IFllcywgYWJzb2x1dGVseS4gSXQmIzM5O3MgYSBkcml2ZXIsIGFuZCBTeXprYWxsZXIgZXhjZWxzIGF0IGZ1enppbmcgZHJpdmVycy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwYCBpcyBlbmFibGVkIG9yIGF0IGxlYXN0IGNhbiBiZSBlbmFibGVkLiBJdCYjMzk7cyB0cmlzdGF0ZS4gR3JlYXQsIGl0ICpjYW4qIGJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgZmFudGFzdGljLiBMZXQgbWUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyB0aGF0IEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4gSnVzdCBgQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBMZXQgbWUgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTE2ND1jb25maWcgTURJT19JUFE4MDY0XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3MS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNzI6Y29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBNRElPX1JFQUxURUtfUlRMOTMwMGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgbW9kdWxlLiBBcyBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiBpdCByZWxpZXMgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcsIHBvcnRpbmcsIG9yIGV2ZW4ganVzdCB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycy4uLiBkb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzPyBLZXJuZWwgZHJpdmVycz8gUG9zc2libHkgbG93LWxldmVsIHJlZ2lzdGVyIGRlZmluaXRpb25zPyBBbmQgd2hhdCBhYm91dCBwb3RlbnRpYWwgdXNlci1zcGFjZSBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXM/IEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIG1hcCBvZiBhbGwgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0IG1ha2UgdXAgdGhpcyBtb2R1bGUgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MjpcdGNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxuIDE3MzpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiAxNzQ6XHRcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcbiAxNzU6XHRcdGhlbHBcbiAxNzY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBSZWFsdGVrXG4gMTc3Olx0XHQgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4gMTc4Olx0XG4gMTc5Olx0Y29uZmlnIE1ESU9fUkVHTUFQXG4gMTgwOlx0XHR0cmlzdGF0ZVxuIDE4MTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE2MAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE3NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgUmVhbHRlayBSVEw5MzAwIE1ESU8gSGFyZHdhcmUgUG9sbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGUgbmV3IGhhcmR3YXJlIHBvbGxpbmcgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGNvbnRyb2xsZXIuICBJdCBsb29rcyBsaWtlIHRoaXMgY2FuIGJlIGVuYWJsZWQgd2l0aCBgQ09NUElMRV9URVNUYCwgd2hpY2ggaXMgb2Z0ZW4gYWxyZWFkeSBlbmFibGVkIGluIFN5emthbGxlciwgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0LiAgVGhlIHByaW1hcnkgY29uZmlnIGlzIGBNRElPX1JFQUxURUtfUlRMOTMwMGAgYW5kIEkmIzM5O2xsIG1ha2Ugc3VyZSB0aGF0IGdldHMgZXhwbGljaXRseSBzZXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdC4KCkkmIzM5O3ZlIGdvdCB0aGUgZHJpdmVyIHVzaW5nIHJlZ21hcCBmb3IgTU1JTywgYW5kIFN5emthbGxlciBjYW4gaGFuZGxlIHRoYXQgdGhyb3VnaCBhIG1vY2sgb3IgbWVtb3J5IG1hcHBpbmcsIHNvIHRoYXQmIzM5O3MgZ29vZC4gYHN5c2Nvbl9ub2RlX3RvX3JlZ21hcGAgaXMgdXN1YWxseSBob3cgaXQgbWFwcyB0byBNTUlPLCBzbyBkZXZpY2UgdHJlZSBpbmplY3Rpb24gc2hvdWxkIHdvcmsuIFRoZSBjb3JlIGNoYW5nZXMgYXJlIG1pbm9yLCBtb3N0bHkgYWRkaW5nIHRob3NlIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBgbWlpX2J1c2Agc3RydWN0LiBUaGUgYnVsayBvZiB0aGUgbG9naWMgaXMgaW4gdGhlIGRyaXZlciBpdHNlbGYsIGluIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4KClRoZSBrZXkgZnVuY3Rpb25zIHRvIGNvbmNlbnRyYXRlIG9uIGFyZSBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAsIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoYCwgYG90dG9fZW1kaW9faW5pdF9wb2xsaW5nYCwgYG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZ2AsIGFuZCBhbGwgb2YgdGhlIGBvdHRvX2VtZGlvXypfcmVhZF9jIyNgIGFuZCBgb3R0b19lbWRpb18qX3dyaXRlX2MjI2AgZnVuY3Rpb25zIChmb3IgYm90aCA4MzgwIGFuZCA4MzkwKS4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgc2luY2UgdGhleSBhcmUgY29yZSBmdW5jdGlvbnMgYW5kIGFyZSBvbiB0aGUgaG90IHBhdGgsIGJ1dCB0aGV5IGFyZSB2ZXJ5IGdlbmVyaWMgYW5kIHdvdWxkIHB1bGwgaW4gYSBsb3Qgb2Ygb3RoZXIgUEhZIGRyaXZlcnMgaW50byB0aGUgbWl4LiBUaGlzIGlzIG5vdCB3aGF0IEkgd2FudC4gVGhleSBhcmUgYWxzbyBjb250cm9sIHBhdGguIFNvLCBJIHdpbGwgZm9jdXMgb24gdGhlIGBvdHRvX2VtZGlvXypgIGZ1bmN0aW9ucyBhcyB0aGV5IHRhcmdldCB0aGUgbmV3IGNvZGUgZGlyZWN0bHkuCgpTcGVjaWZpY2FsbHksIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCBpcyByZWFjaGFibGUuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZSBNRElPIGJ1cyBkdXJpbmcgcHJvYmUsIGFuZCB0aGVuIFBIWSBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCwgd2hpY2ggY2FsbHMgYHBoeV9hdHRhY2hfZGlyZWN0YCwgd2hpY2ggdGhlbiBjYWxscyBgbm90aWZ5X3BoeV9hdHRhY2hgLiBTbywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdmlhYmxlIGVudHJ5IHBvaW50LiBUaGUgc2FtZSBnb2VzIGZvciB0aGUgb3RoZXIgZnVuY3Rpb25zOgotICAgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgCi0gICBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaGAKLSAgIGBvdHRvX2VtZGlvX2luaXRfcG9sbGluZ2AKLSAgIGBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmdgCi0gICBgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXJgCi0gICBgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyYAotICAgYG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjJgCi0gICBgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1YAotICAgYG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDVgCi0gICBgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyYAotICAgYG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjJgCi0gICBgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1YAotICAgYG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDVgCgpUaGlzIGlzIGEgbmV3IGZlYXR1cmUgaW4gTURJTyBkcml2ZXIgYW5kIGNvcmUgUEhZIHN1YnN5c3RlbSwgc28gZnV6emluZyB0aGVzZSBpcyBhIGdvb2QgaWRlYS4gIFRoZSBwcmltYXJ5IGNvbmZpZyBuZWVkZWQgaXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBhbmQgaXQgZGVwZW5kcyBvbiBgTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RgLgoKSSB0aGluayB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIGl0LiBJJiMzOTt2ZSBuYXJyb3dlZCBkb3duIHRoZSB0YXJnZXQsIHVuZGVyc3RhbmQgdGhlIHJlYWNoYWJpbGl0eSBhbmQgc2V0dXAsIGFuZCBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgY29uZmlnIG9wdGlvbnMgdG8gcHJpb3JpdGl6ZS4gIExldCYjMzk7cyBnZXQgdG8gZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qb3R0b19lbWRpb18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MjcxPXN0cnVjdCBvdHRvX2VtZGlvX2NoYW4ge1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNzUtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6Mjc2OnN0YXRpYyBpbnQgb3R0b19lbWRpb19waHlfdG9fcG9ydChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTI3Ny17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTI5MS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoyOTI6c3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yOTMte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yOTgtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6Mjk5OnN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zMDAte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zMDYtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MzA3OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzA4LVx0XHRcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzYzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjM2NDpzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zNjUtXHRcdFx0ICAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSwgdTMyIG1hc2ssIHUzMiAqdmFsdWUpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTM4My1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzozODQ6c3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTM4NS1cdFx0XHRcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzkzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjM5NDpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zOTUte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00MDctXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NDA4OnN0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTQwOS17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTQyMS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo0MjI6c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDIzLVx0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDM0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQzNTpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDM2LVx0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDQ3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQ0ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00NDkte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00NjEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NDYyOnN0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTQ2My17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTQ3Ni1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo0Nzc6c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDc4LVx0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDg5LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQ5MDpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDkxLVx0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTAzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjUwNDpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01MDUte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01MTctXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NTE4OnN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTUxOS17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTUzMS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo1MzI6c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTMzLVx0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTQ0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU0NTpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTQ2LVx0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTU3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU1ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01NTkte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01NzAtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NTcxOnN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTU3Mi17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTU4NC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo1ODU6c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTg2LVx0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTk3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU5ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTk5LVx0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjExLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjYxMjpzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02MTMte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02MzEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NjMyOnN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTYzMy17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTY1NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo2NTY6c3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02NTcte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02NzEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NjcyOnN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02NzMtXHRcdFx0XHRpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjg3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjY4ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfbWFwcGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCB1MzIgYmFzZSwgdTMyIHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjg5LVx0XHRcdFx0ICAgIHUzMiB2YWxzX3Blcl9yZWcsIHUzMiBiaXRzX3Blcl92YWwsIHUzMiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjk3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjY5ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02OTkte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03MjMtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzI0OnN0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03MjUte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03MzItXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzMzOnN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03MzQte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NTItXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzUzOnN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NTQte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NjgtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzY5OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc3MC17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc5Ni1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3OTc6c3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc5OC17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTgxNi1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo4MTc6c3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODE4LVx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NjEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6ODYyOnN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKm90dG9fZW1kaW9fZ2V0X2J1c19ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODYzLXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODgwLSAqL1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg4MTpzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04ODIte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05NjQtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6OTY1OnN0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05NjYte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05NzktXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6OTgwOnN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTk4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjUwCgkJCQkJCQlvdXRwdXQ6IDI1NgoJCQkJCQkJdGhvdWdodHM6IDUwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBGdW5jdGlvbnMgQWRkZWQgYW5kIE1vZGlmaWVkKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyB0aGUgY2hhbmdlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjYXRlZ29yaXppbmcgdGhlIGZ1bmN0aW9ucy4KCkkgc2VlIGEgbGlzdCBvZiBuZXdseSAqYWRkZWQqIGZ1bmN0aW9uczogYG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZ2AsIGBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjJgLCBgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMmAsIGBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDVgLCBgb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NWAsIGBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjJgLCBgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMmAsIGBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDVgLCBgb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NWAsIGBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcmAsIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCwgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2hgLCBgb3R0b19lbWRpb19pbml0X3BvbGxpbmdgLgoKVGhlbiwgSSYjMzk7bSBub3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiAqbW9kaWZpZWQqOiBgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb19yZWFkX2MyMmAsIGBvdHRvX2VtZGlvX3dyaXRlX2MyMmAsIGBvdHRvX2VtZGlvX3Byb2JlX29uZWAsIGBvdHRvX2VtZGlvX3Byb2JlYCwgYHBoeV9hdHRhY2hfZGlyZWN0YCwgYHBoeV9kZXRhY2hgLgoKVGhlIHNpZ25pZmljYW50IGFkZGl0aW9ucyBzZWVtIHRvIGJlIGFyb3VuZCBwb2xsaW5nLCBzcGVjaWZpYyBQSFkgaW5pdGlhbGl6YXRpb24sIGFuZCBhdHRhY2gvZGV0YWNoIG5vdGlmaWNhdGlvbnMuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UgbmV3IGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCwgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2hgLCBgb3R0b19lbWRpb19pbml0X3BvbGxpbmdgLCBgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nYC4gQWxzbywgdGhlIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBoYW5kbGluZyB0aGUgODM4MCBhbmQgODM5MCBQSFlzIChgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXJgKSB3aWxsIHdhcnJhbnQgY2xvc2VyIGluc3BlY3Rpb24uCgpJdCBhcHBlYXJzIHRoZSBuZXcgZnVuY3Rpb25zIGFyZSBxdWl0ZSBpbXBvcnRhbnQuIEkga25vdyB3aGF0IHRvIGZvY3VzIG9uLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2gmIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb19pbml0X3BvbGxpbmcmIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fODM4MF9yZWFkX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fODM5MF9yZWFkX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgcG9sbGluZyBzdXBwb3J0IHRvIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBjb250cm9sbGVyIGRyaXZlciBhbmQgaW50cm9kdWNlcyBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtLiBUaGUgY29yZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZHVyaW5nIFBIWSBkZXZpY2UgYXR0YWNobWVudC9kZXRhY2htZW50LCBhbmQgdGhlIGRyaXZlciBjaGFuZ2VzIGNhbiBiZSByZWFjaGVkIGlmIHRoZSBkcml2ZXIgaXMgcHJvYmVkIHZpYSBkZXZpY2UgdHJlZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaCYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9faW5pdF9wb2xsaW5nJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzgwX3dyaXRlX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzkwX3dyaXRlX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIHBvbGxpbmcgc3VwcG9ydCB0byB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gY29udHJvbGxlciBkcml2ZXIgYW5kIGludHJvZHVjZXMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbS4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGR1cmluZyBQSFkgZGV2aWNlIGF0dGFjaG1lbnQvZGV0YWNobWVudCwgYW5kIHRoZSBkcml2ZXIgY2hhbmdlcyBjYW4gYmUgcmVhY2hlZCBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6NTQ6MzIuNDI2NTAzODY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxMTYyODc0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoXCIsXG4gICAgXCJvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoXCIsXG4gICAgXCJvdHRvX2VtZGlvX2luaXRfcG9sbGluZ1wiLFxuICAgIFwib3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM4MF93cml0ZV9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM5MF9yZWFkX2MyMlwiLFxuICAgIFwib3R0b19lbWRpb184MzkwX3dyaXRlX2MyMlwiLFxuICAgIFwib3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIHBvbGxpbmcgc3VwcG9ydCB0byB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gY29udHJvbGxlciBkcml2ZXIgYW5kIGludHJvZHVjZXMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbS4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGR1cmluZyBQSFkgZGV2aWNlIGF0dGFjaG1lbnQvZGV0YWNobWVudCwgYW5kIHRoZSBkcml2ZXIgY2hhbmdlcyBjYW4gYmUgcmVhY2hlZCBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NDozMi40MjY1MjkyMjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNDExMDIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY0N2YwZDZlMmYzMGRjZWY3ZjcyNGQ2ZTk3OGFhNWFlZDVkNmFlZTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgNSAxNjo1NDozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcXG5pbmRleCAyNzFlMDViYWU5YzU3NC4uNjdlMGIyM2E4NDcwZWEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuQEAgLTQsNyArNCw3IEBAXFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXFxuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbiBcXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcXG4rdGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcXG4gXFxuIG1haW50YWluZXJzOlxcbiAgIC0gQ2hyaXMgUGFja2hhbSBcXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XFx1MDAzZVxcbkBAIC0xMiw2ICsxMiwxNiBAQCBtYWludGFpbmVyczpcXG4gcHJvcGVydGllczpcXG4gICBjb21wYXRpYmxlOlxcbiAgICAgb25lT2Y6XFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXFxuICAgICAgIC0gaXRlbXM6XFxuICAgICAgICAgICAtIGVudW06XFxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cXG5AQCAtMjQsNiArMzQsOCBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXFxuICAgICAgIC0gZW51bTpcXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xcbmluZGV4IDg5MmVkMzc4MGE2NTcyLi5kNzk3ZDhmMDFjNjZlOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcXG5AQCAtMzUsNiArMzUsNzQgQEBcXG4gICpcXG4gICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb25cXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxcbisgKlxcbisgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcXG4rICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cXG4rICpcXG4rICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cXG4rICpcXG4rICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2ZcXG4rICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXFxuKyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXFxuKyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKTpcXG4rICpcXG4rICpcXHRSVEw4MzgwXFx0XFx0XFx0XFx0UlRMODM5M1xcbisgKlxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKlxcdHBoeV93cml0ZShwaHksIDMxLCAweDApO1xcdHBoeV9yZWFkKHBoeSwgMCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFx0cGh5X3JlYWQocGh5LCAxKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XFx0cGh5X3JlYWQocGh5LCA0KTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcXHRwaHlfcmVhZChwaHksIDUpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcdFxcdHBoeV9yZWFkKHBoeSwgNik7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFx0cGh5X3JlYWQocGh5LCA5KTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XFx0cGh5X3JlYWQocGh5LCAxMCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XFx0cGh5X3JlYWQocGh5LCAxNSk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxNCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA5KTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxMCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxNSk7XFx0XFx0cGh5X3JlYWQocGh5LCAxNCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAwKTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDEpO1xcdFxcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDQpO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgNSk7XFx0XFx0cGh5X3JlYWQocGh5LCAxNCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA2KTtcXG4rICpcXG4rICogRnJvbSB0aGUgYWJvdmUgc25pcHBldHMgaXQgcG9sbHMgTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgdmlhIEM0NSBvdmVyIEMyMi4gQXNcXG4rICogb2Ygbm93IGl0IGlzIHVuY2xlYXIgaG93IHRoZSBoYXJkd2FyZSBkZWNpZGVzIGlmIGEgUEhZIHN1cHBvcnRzIHRoZXNlIHJlZ2lzdGVycy4gQWZ0ZXIgb25lIFBIWVxcbisgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5XFxuKyAqIGFuZCB0aGUgTUFDIHN0YXR1cyBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cXG4rICpcXG4rICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz9cXG4rICpcXG4rICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxcbisgKiBzZXRzIGEgXFxcInJ1biBjb21tYW5kIG5vd1xcXCIgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXFxuKyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXFxuKyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XFxuKyAqXFxuKyAqXFx0UlRMODM4MFxcdFxcdFxcdFxcdFJUTDgzOTNcXG4rICpcXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICpcXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XFx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xcbisgKlxcdFxcdFxcdFxcdFxcdHBoeV93cml0ZShwaHksIDMxLCAwKTtcXG4rICpcXG4rICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cXG4rICpcXG4rICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxcbisgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XFxuKyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLlxcbisgKlxcbisgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXFxuKyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuXFxuKyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcXG4rICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXFxuKyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzIFxcXCJtYWdpY2FsbHlcXFwiIGluIHRoZSBiYWNrZ3JvdW5kLlxcbisgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxcbisgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLlxcbisgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxcbisgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxcbisgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLlxcbisgKlxcbisgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcXG4rICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLlxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbkBAIC01MSw2ICsxMTksNTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gXFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVNcXHRcXHRcXHQxXFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcXHRcXHRcXHQ0MDk2XFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFNcXHRcXHRcXHQyOFxcbisjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMXFx0XFx0XFx0MHhhMTAwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORVxcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFxcdFxcdDB4YTFiOFxcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXFx0XFx0MHhhMWJjXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSXFx0XFx0R0VOTUFTSygyNCwgMjApXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRVxcdFxcdEdFTk1BU0soMTksIDE1KVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcXHRcXHRHRU5NQVNLKDE0LCAzKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9XUklURVxcdFxcdEJJVCgyKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFEXFx0XFx0XFx0MFxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NVxcdFxcdEJJVCgxKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlxcdFxcdDBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTFxcdFxcdFxcdDAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi9cXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMlxcdFxcdDB4YTFjMFxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcXHRcXHQweGExYzRcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT0xMX0NUUkxcXHRcXHRcXHQweGExN2NcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFxcdFxcdDB4YTFjOFxcbitcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9CVVNFU1xcdFxcdFxcdDJcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QQUdFU1xcdFxcdFxcdDgxOTJcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QT1JUU1xcdFxcdFxcdDUyXFxuKyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMXFx0XFx0MHgwM2VjXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcXHRcXHQweDAzZGNcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFJcXHRcXHRHRU5NQVNLKDksIDUpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRVxcdFxcdEdFTk1BU0soMjIsIDEwKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXFx0XFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXFx0XFx0QklUKDMpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFQURcXHRcXHRcXHQwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1XFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyXFx0XFx0MFxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcXHRcXHRcXHQweDAzZTBcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcXHRcXHRHRU5NQVNLKDgsIDApXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMXFx0XFx0MHgwM2YwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFxcdFxcdFxcdDB4MDNmNFxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcXHRcXHQweDAzZTRcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFxcdFxcdDB4MDNlOFxcbisjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXFx0XFx0MHgwM2ZjXFxuK1xcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXFx0XFx0XFx0NFxcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BBR0VTXFx0XFx0XFx0NDA5NlxcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXFx0XFx0XFx0MjhcXG5AQCAtNzEsNiArMTgzLDcgQEBcXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEFcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXFx0XFx0MHhjYjdjXFxuKyNkZWZpbmUgUlRMOTMwMF9TTUlfUE9MTF9DVFJMXFx0XFx0XFx0MHhjYTkwXFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcXHRcXHQweGNiODBcXG4gXFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcXHRcXHRcXHQ0XFxuQEAgLTk2LDExICsyMDksMTMgQEBcXG4gI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygxNSwgMClcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkxcXHQweDBjMThcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFxcdFxcdDB4MGM3NFxcbisjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMXFx0XFx0MHgwY2NjXFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTFxcdFxcdDB4MGM5Y1xcbiBcXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcXHRcXHRcXHRcXHRCSVQoMClcXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQURcXHRcXHRcXHRHRU5NQVNLKDIwLCAxNilcXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUtcXHRcXHRcXHQweDAwMWNjODAwXFxuIFxcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXFx0XFx0XFx0NlxcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSXFx0XFx0XFx0NVxcbkBAIC0xMjYsNyArMjQxLDkgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XFxuIFxcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4gXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovXFxuK1xcdERFQ0xBUkVfQklUTUFQKHBoeV9wb2xsLCBNQVhfUE9SVFMpO1xcbiBcXHRERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTtcXG4rXFx0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcXG4gXFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xcbiBcXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xcbiBcXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcXG5AQCAtMTQzLDYgKzI2MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xcbiBcXHR1OCBudW1fYnVzZXM7XFxuIFxcdHU4IG51bV9wb3J0cztcXG4gXFx0dTE2IG51bV9wYWdlcztcXG4rXFx0dTMyIHBvbGxfY3RybDtcXG4gXFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XFxuIFxcdGludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XFxuIFxcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcXG5AQCAtMTc4LDYgKzI5NiwxNCBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbiBcXHRyZXR1cm4gY2hhbi1cXHUwMDNlcHJpdjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxcbit7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXBvbGxfY3RybCArIChwb3J0IC8gMzIpICogNCxcXG4rXFx0XFx0XFx0XFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxcbiB7XFxuQEAgLTE4Niw5ICszMTIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbiBcXHR1MzIgY21kc3RhdGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xcbitcXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjI4LDcgKzM1NCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjY1LDEzICszOTEsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9IEJJVChwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jNDVfZGF0YVxcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gQklUKHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmV4dF9wYWdlXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbitcXHRcXHQuZXh0X3BhZ2VcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmM0NV9kYXRhXFx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuIHtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4gXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXFxuIFxcdH07XFxuIFxcbkBAIC0yODUsNyArNTIxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbiBcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4tXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuIFxcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuIFxcdFxcdC5wb3J0X21hc2tfbG93XFx0PSBCSVQocG9ydCksXFxuIFxcdH07XFxuQEAgLTMyNSw3ICs1NjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmJyb2FkY2FzdFxcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuQEAgLTMzNyw3ICs1NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuQEAgLTM4Myw4ICs2MTksMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gMzEpXFxuK1xcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2VwYWdlW3BvcnRdO1xcbitcXG4gXFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlcmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sIFxcdTAwMjZ2YWx1ZSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiByZXQgPyByZXQgOiB2YWx1ZTtcXG4gfVxcbkBAIC0zOTgsOCArNjM4LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gMzEpIHtcXG4rXFx0XFx0XFx0aWYgKHZhbHVlIFxcdTAwM2U9IFJBV19QQUdFKHByaXYpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXdyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTQ3Miw2ICs3MjEsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcXG4rXFx0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4ge1xcbiBcXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XFxuQEAgLTUwOCw2ICs3NjYsNTQgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBvcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcG9ydDtcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChwb3J0LCBwcml2LVxcdTAwM2VwaHlfcG9sbCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVxcdTAwM2VtZGlvX2J1c10gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICghcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi1cXHUwMDNlcGh5X2lkLCBQSFlfVkVORE9SX1JFQUxURUspKSkge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIk9ubHkgUmVhbHRlayBQSFlzIGFsbG93ZWQgb24gQzIyIGJ1c1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgdHJ1ZSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRfX3NldF9iaXQocG9ydCwgcHJpdi1cXHUwMDNlcGh5X3BvbGwpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBvcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRfX2NsZWFyX2JpdChwb3J0LCBwcml2LVxcdTAwM2VwaHlfcG9sbCk7XFxuK1xcdH1cXG4rXFx0XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGRldl9lcnIoYnVzLVxcdTAwM2VwYXJlbnQsIFxcXCJmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXFxcXG5cXFwiLCBwb3J0KTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSlcXG4ge1xcbkBAIC01MzcsNiArODQzLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcXG4gXFx0XFx0YnVzLVxcdTAwM2V3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyO1xcbiBcXHR9XFxuIFxcdGJ1cy1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbitcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG4rXFx0YnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7XFxuK1xcbiBcXHRjaGFuID0gYnVzLVxcdTAwM2Vwcml2O1xcbiBcXHRjaGFuLVxcdTAwM2VtZGlvX2J1cyA9IG1kaW9fYnVzO1xcbiBcXHRjaGFuLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5AQCAtNjUzLDYgKzk2MiwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcXHUwMDNjIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZW51bV9wb3J0czsgcG9ydCsrKSB7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG5AQCAtNjcyLDYgKzk5NiwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihwcml2LVxcdTAwM2VyZWdtYXApO1xcbiBcXG4rXFx0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTtcXG4gXFxuIFxcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XFxuQEAgLTY5Nyw2ICsxMDI1LDUxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XFxuK1xcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXFxuK1xcdC5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCxcXG4rXFx0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxcbitcXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcXG4rXFx0LmNtZF9yZWdzID0ge1xcbitcXHRcXHQuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSxcXG4rXFx0XFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXFxuK1xcdFxcdC5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXFxuK1xcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsXFxuK1xcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMixcXG4rXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxcbitcXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMixcXG4rXFx0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcXG4rXFx0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxcbitcXHQuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsXFxuK1xcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxcbitcXHQuY21kX3JlZ3MgPSB7XFxuK1xcdFxcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXFxuK1xcdFxcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxcbitcXHRcXHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcXG4rXFx0XFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcXG4rXFx0XFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcXG4rXFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxcbitcXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXFxuK1xcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxcbitcXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xcbiBcXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxcbiBcXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXFxuQEAgLTcxMiw2ICsxMDg1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XFxuIFxcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxcbkBAIC03MzcsNiArMTExMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiBcXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXFxuIFxcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxcbkBAIC03NDUsNiArMTEyMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw4MzkxLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscnRsOTMwMS1tZGlvXFxcIiwgLmRhdGEgPSBcXHUwMDI2b3R0b19lbWRpb185MzAwX2luZm8gfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXFxuIFxcdHt9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuaW5kZXggMDYxNTIyODQ1OWVmNDIuLjY3NmNiZjE4MzM1MGQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuQEAgLTE4NzYsNiArMTg3NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xcbitcXHRcXHRlcnIgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuK1xcbiBcXHRwaHlfcmVzdW1lKHBoeWRldik7XFxuIFxcbiBcXHQvKipcXG5AQCAtMTkxOSw2ICsxOTI1LDkgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbiBcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxcbitcXHRcXHRwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xcbitcXG4gXFx0aWYgKHBoeWRldi1cXHUwMDNlZGV2bGluaykge1xcbiBcXHRcXHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVxcdTAwM2VkZXZsaW5rKTtcXG4gXFx0XFx0cGh5ZGV2LVxcdTAwM2VkZXZsaW5rID0gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uMzE2MGNhOTlkZWFiNzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMzc2LDYgKzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XFxuIFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKTtcXG4gXFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cXG4gXFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xcbitcXHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXFxuK1xcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4rXFx0LyoqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nICovXFxuK1xcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIFxcbiBcXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXFxuIFxcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NDozMi43NjE1MDMzODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzgxMjc4Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaFwiLFxuICAgIFwib3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaFwiLFxuICAgIFwib3R0b19lbWRpb19pbml0X3BvbGxpbmdcIixcbiAgICBcIm90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZ1wiLFxuICAgIFwib3R0b19lbWRpb184MzgwX3JlYWRfYzIyXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM5MF93cml0ZV9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBwb2xsaW5nIHN1cHBvcnQgdG8gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGNvbnRyb2xsZXIgZHJpdmVyIGFuZCBpbnRyb2R1Y2VzIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0uIFRoZSBjb3JlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgUEhZIGRldmljZSBhdHRhY2htZW50L2RldGFjaG1lbnQsIGFuZCB0aGUgZHJpdmVyIGNoYW5nZXMgY2FuIGJlIHJlYWNoZWQgaWYgdGhlIGRyaXZlciBpcyBwcm9iZWQgdmlhIGRldmljZSB0cmVlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNDdmMGQ2ZTJmMzBkY2VmN2Y3MjRkNmU5NzhhYTVhZWQ1ZDZhZWUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgNSAxNjo1NDozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuaW5kZXggMjcxZTA1YmFlOWM1NzQuLjY3ZTBiMjNhODQ3MGVhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbkBAIC00LDcgKzQsNyBAQFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXG4gJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4gXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcbit0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlclxuIFxuIG1haW50YWluZXJzOlxuICAgLSBDaHJpcyBQYWNraGFtIFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelx1MDAzZVxuQEAgLTEyLDYgKzEyLDE2IEBAIG1haW50YWluZXJzOlxuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBvbmVPZjpcbisgICAgICAtIGl0ZW1zOlxuKyAgICAgICAgICAtIGVudW06XG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpb1xuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgIC0gaXRlbXM6XG4gICAgICAgICAgIC0gZW51bTpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXG5AQCAtMjQsNiArMzQsOCBAQCBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuICAgICAgIC0gZW51bTpcbisgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuaW5kZXggODkyZWQzNzgwYTY1NzIuLmQ3OTdkOGYwMWM2NmU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbkBAIC0zNSw2ICszNSw3NCBAQFxuICAqXG4gICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb25cbiAgKiB0aGUgZXRoZXJuZXQtcG9ydHMgcHJvcGVydHkuXG4rICpcbisgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcbisgKiBjb25zdGFudGx5IHNjYW5zIHRoZSBNRElPIGJ1cyBhbmQgdGhlIGF0dGFjaGVkIFBIWXMgYW5kIHVwZGF0ZXMgdGhlIE1BQyBzdGF0dXMgcmVnaXN0ZXJzLlxuKyAqXG4rICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cbisgKlxuKyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXG4rICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXG4rICogZWFjaCBzZXQgcG9sbGluZyBiaXQgaXQgaXNzdWVzIGEgc3RhdHVzIGNoZWNrIGZvciB0aGUgUEhZLiBBdHRhY2hpbmcgYSBsb2dpYyBhbmFseXplciB0byB0aGVcbisgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XG4rICpcbisgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuKyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcdHBoeV9yZWFkKHBoeSwgMCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCAxKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1x0cGh5X3JlYWQocGh5LCA0KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDUpO1xuKyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3JlYWQocGh5LCA2KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDkpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XHRwaHlfcmVhZChwaHksIDEwKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDE1KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuKyAqXHRwaHlfcmVhZChwaHksIDkpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuKyAqXHRwaHlfcmVhZChwaHksIDApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xuKyAqXHRwaHlfcmVhZChwaHksIDQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbisgKlx0cGh5X3JlYWQocGh5LCA1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4rICpcdHBoeV9yZWFkKHBoeSwgNik7XG4rICpcbisgKiBGcm9tIHRoZSBhYm92ZSBzbmlwcGV0cyBpdCBwb2xscyBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB2aWEgQzQ1IG92ZXIgQzIyLiBBc1xuKyAqIG9mIG5vdyBpdCBpcyB1bmNsZWFyIGhvdyB0aGUgaGFyZHdhcmUgZGVjaWRlcyBpZiBhIFBIWSBzdXBwb3J0cyB0aGVzZSByZWdpc3RlcnMuIEFmdGVyIG9uZSBQSFlcbisgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5XG4rICogYW5kIHRoZSBNQUMgc3RhdHVzIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLlxuKyAqXG4rICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz9cbisgKlxuKyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXJcbisgKiBzZXRzIGEgXCJydW4gY29tbWFuZCBub3dcIiBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmVcbisgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlc1xuKyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XG4rICpcbisgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuKyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XG4rICpcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1x0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XG4rICpcdFx0XHRcdFx0cGh5X3dyaXRlKHBoeSwgMzEsIDApO1xuKyAqXG4rICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cbisgKlxuKyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2VcbisgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XG4rICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uXG4rICpcbisgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXG4rICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy5cbisgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsXG4rICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXG4rICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgXCJtYWdpY2FsbHlcIiBpbiB0aGUgYmFja2dyb3VuZC5cbisgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxuKyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uXG4rICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cbisgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxuKyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuXG4rICpcbisgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcbisgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuQEAgLTUxLDYgKzExOSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuIFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVNcdFx0XHQxXG4rI2RlZmluZSBSVEw4MzgwX05VTV9QQUdFU1x0XHRcdDQwOTZcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXHRcdFx0MjhcbisjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMXHRcdFx0MHhhMTAwXG4rI2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FXHRcdEJJVCgxNSlcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4YTFiOFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcdFx0MHhhMWJjXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSygyNCwgMjApXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXHRcdEdFTk1BU0soMTksIDE1KVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDE0LCAzKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgyKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDVcdFx0QklUKDEpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcdFx0XHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMlx0XHQweGExYzBcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGExYzRcbisjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTFx0XHRcdDB4YTE3Y1xuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhhMWM4XG4rXG4rI2RlZmluZSBSVEw4MzkwX05VTV9CVVNFU1x0XHRcdDJcbisjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXHRcdFx0ODE5MlxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFNcdFx0XHQ1MlxuKyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMXHRcdDB4MDNlY1xuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcdFx0MHgwM2RjXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSyg5LCA1KVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDIyLCAxMClcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXHRcdFx0QklUKDEpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDMpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMilcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19DVFJMXHRcdFx0MHgwM2UwXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcdFx0R0VOTUFTSyg4LCAwKVxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMXHRcdDB4MDNmMFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMXHRcdFx0MHgwM2Y0XG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXHRcdDB4MDNlNFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4rI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDAzZmNcbitcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXHRcdFx0NFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1x0XHRcdDI4XG5AQCAtNzEsNiArMTgzLDcgQEBcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGNiN2NcbisjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTFx0XHRcdDB4Y2E5MFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhjYjgwXG4gXG4gI2RlZmluZSBSVEw5MzEwX05VTV9CVVNFU1x0XHRcdDRcbkBAIC05NiwxMSArMjA5LDEzIEBAXG4gI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkxcdDB4MGMxOFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9BRERSX0NUUkxcdFx0MHgwYzc0XG4rI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDBjY2NcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcdFx0MHgwYzljXG4gXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcdFx0XHRcdEJJVCgwKVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXHRcdFx0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIFBIWV9WRU5ET1JfUkVBTFRFS1x0XHRcdDB4MDAxY2M4MDBcbiBcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXHRcdFx0NlxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcdFx0XHQ1XG5AQCAtMTI2LDcgKzI0MSw5IEBAIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYge1xuIFx0Y29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyAqaW5mbztcbiBcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xuK1x0REVDTEFSRV9CSVRNQVAocGh5X3BvbGwsIE1BWF9QT1JUUyk7XG4gXHRERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTtcbitcdHUxNiBwYWdlW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYnVzW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xuIFx0Ym9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107XG5AQCAtMTQzLDYgKzI2MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xuIFx0dTggbnVtX2J1c2VzO1xuIFx0dTggbnVtX3BvcnRzO1xuIFx0dTE2IG51bV9wYWdlcztcbitcdHUzMiBwb2xsX2N0cmw7XG4gXHRpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTtcbiBcdGludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XG4gXHRpbnQgKCpyZWFkX2M0NSkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XG5AQCAtMTc4LDYgKzI5NiwxNCBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0cmV0dXJuIGNoYW4tXHUwMDNlcHJpdjtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIHByaXYtXHUwMDNlaW5mby1cdTAwM2Vwb2xsX2N0cmwgKyAocG9ydCAvIDMyKSAqIDQsXG4rXHRcdFx0XHQgIEJJVChwb3J0ICUgMzIpLCBhY3RpdmUpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcbiB7XG5AQCAtMTg2LDkgKzMxMiw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHR1MzIgY21kc3RhdGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibGUgd3JvbmcgKi9cbitcdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmx5IHdyb25nICovXG4gXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cdTAwM2VyZWdtYXAsIGluZm8tXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcbitcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjI4LDcgKzM1NCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cdTAwM2VyZWdtYXAsIGluZm8tXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcbitcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjY1LDEzICszOTEsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3dyaXRlLCBjbWRfZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbitcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSxcbitcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuK1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4rXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4rXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSxcbitcdFx0XHRcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuIHtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiBcdH07XG4gXG5AQCAtMjg1LDcgKzUyMSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuIFx0fTtcbkBAIC0zMjUsNyArNTYxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHVcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYnJvYWRjYXN0XHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSxcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdH07XG4gXG4gXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDkzMTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuQEAgLTMzNyw3ICs1NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG5AQCAtMzgzLDggKzYxOSwxMiBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0aWYgKHJlZ251bSA9PSAzMSlcbitcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2VwYWdlW3BvcnRdO1xuK1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlcmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sIFx1MDAyNnZhbHVlKTtcbitcdH1cbiBcbiBcdHJldHVybiByZXQgPyByZXQgOiB2YWx1ZTtcbiB9XG5AQCAtMzk4LDggKzYzOCwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuK1x0XHRpZiAocmVnbnVtID09IDMxKSB7XG4rXHRcdFx0aWYgKHZhbHVlIFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00NzIsNiArNzIxLDE1IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbit7XG4rXHQvKlxuK1x0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcbitcdCAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC5cbitcdCAqL1xuK1x0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcbkBAIC01MDgsNiArNzY2LDU0IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuK1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZXByaXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBvcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBwb3J0O1xuK1xuK1x0aWYgKHRlc3RfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbitcdCAgICAoIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtXHUwMDNlcGh5X2lkLCBQSFlfVkVORE9SX1JFQUxURUspKSkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0X19zZXRfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4rXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBvcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdF9fY2xlYXJfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuK1x0fVxuK1x0XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfZXJyKGJ1cy1cdTAwM2VwYXJlbnQsIFwiZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcblwiLCBwb3J0KTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXG4ge1xuQEAgLTUzNyw2ICs4NDMsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRidXMtXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcbiBcdH1cbiBcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4rXHRidXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoO1xuK1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbitcbiBcdGNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiBcdGNoYW4tXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcbiBcdGNoYW4tXHUwMDNlcHJpdiA9IHByaXY7XG5AQCAtNjUzLDYgKzk2MiwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIHByaXYtXHUwMDNlaW5mby1cdTAwM2VudW1fcG9ydHM7IHBvcnQrKykge1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuK1x0XHRcdGVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbkBAIC02NzIsNiArOTk2LDEwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiBcbitcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbkBAIC02OTcsNiArMTAyNSw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbitcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4rXHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4rXHQuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsXG4rXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcbitcdC5jbWRfcmVncyA9IHtcbitcdFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXG4rXHRcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxuK1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuK1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxuK1x0fSxcbitcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbitcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcbitcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4rXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuK1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuK1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuK1x0LmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsXG4rXHQuY21kX3JlZ3MgPSB7XG4rXHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4rXHRcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxuK1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbitcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbitcdFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXG4rXHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbitcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4rXHR9LFxuK1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuK1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuK1x0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiBcdC5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCxcbkBAIC03MTIsNiArMTA4NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0Lm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtNzM3LDYgKzExMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG5AQCAtNzQ1LDYgKzExMjAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzOTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM5MF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMDEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXG4gXHR7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAwNjE1MjI4NDU5ZWY0Mi4uNjc2Y2JmMTgzMzUwZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTg3Niw2ICsxODc2LDEyIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcjtcbiBcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbitcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBlcnJvcjtcbitcdH1cbitcbiBcdHBoeV9yZXN1bWUocGh5ZGV2KTtcbiBcbiBcdC8qKlxuQEAgLTE5MTksNiArMTkyNSw5IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuIFxuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaClcbitcdFx0cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XG4rXG4gXHRpZiAocGh5ZGV2LVx1MDAzZWRldmxpbmspIHtcbiBcdFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cdTAwM2VkZXZsaW5rKTtcbiBcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uMzE2MGNhOTlkZWFiNzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMzc2LDYgKzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbitcdC8qKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgKi9cbitcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbitcdC8qKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyAqL1xuK1x0dm9pZCAoKm5vdGlmeV9waHlfZGV0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBcbiBcdC8qKiBAc3RhdHM6IFN0YXRpc3RpYyBjb3VudGVycyBwZXIgZGV2aWNlIG9uIHRoZSBidXMgKi9cbiBcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6NTQ6MzIuNzYxNTA0ODU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQwODEyODQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBmb3IgVGVzdGFiaWxpdHkgaW4gdGhlIFBIWSBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcy4gSXQgc2VlbXMgbGlrZSBpdCdzIHRvdWNoaW5nIHNldmVyYWwgYXJlYXM6IHRoZSBSZWFsdGVrIE1ESU8gY29udHJvbGxlciBkcml2ZXIsIGRldmljZSB0cmVlIGJpbmRpbmdzLCBhbmQgdGhlbiBzb21lIGNvcmUgUEhZIHN1YnN5c3RlbSBmaWxlcyAoYHBoeV9kZXZpY2UuY2AgYW5kIGBwaHkuaGApLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgYWRkaW5nIHRoZXNlIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBgbWlpX2J1c2Agc3RydWN0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQ2FuIHdlIGFjdHVhbGx5ICp0ZXN0KiB0aGlzIGVmZmVjdGl2ZWx5PyBJcyBpdCBldmVuICp3b3J0aCogZnV6emluZz9cIlxuXG5UaGUgY2hhbmdlcyB0byBgcGh5X2RldmljZS5jYCDigJMgYWRkaW5nIHRob3NlIGNhbGxiYWNrcyBhbmQgdXNpbmcgdGhlbSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAg4oCTIHRoYXTigJlzIGNvcmUgUEhZIHN0dWZmLiBEZWZpbml0ZWx5IHJlYWNoYWJsZS4gSSdtIGxlc3Mgc3VyZSBhYm91dCB0aGUgUmVhbHRlayBNRElPIGRyaXZlciwgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBUaGF0J3MgaGFyZHdhcmUtc3BlY2lmaWMuIEknbSBndWVzc2luZyBpdCdzIHByb2JhYmx5ICpub3QqIGdvaW5nIHRvIGJlIHJlYWNoYWJsZSBpbiBtYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1bmxlc3MgdGhlcmUncyBhbiBlbXVsYXRvciBvciB3ZSdyZSB1c2luZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBzb21laG93LiBCdXQgdGhlICpjb3JlKiBQSFkgc3Vic3lzdGVtIGNoYW5nZXM/IFRob3NlIGFyZSBmYWlyIGdhbWUuXG5cbkFscmlnaHQsIGxldCdzIGxvb2sgY2xvc2VyIGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYC4gQWgsIHJpZ2h0LCB0aGV5J3JlIGNhbGxpbmcgdGhvc2UgbmV3IGNhbGxiYWNrczogYHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpYCBhbmQgYHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpYC4gT2theSwgdGhhdCdzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGZvciBzdXJlLiBJdCdzIGEgcHJldHR5IGNsZWFuIGNoYW5nZSwgc28gbGV0J3Mgc3RhcnQgZnV6emluZyBhcm91bmQgdGhhdCBzZWN0aW9uLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGlzIGlzIHRpZWQgdG8gYW55IHNwZWNpZmljIEtjb25maWcgb3B0aW9ucy4gT2J2aW91c2x5LCBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AgcmVxdWlyZXMgYENPTkZJR19QSFlMSUJgLiBJIHdvbmRlciBhYm91dCBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIElzIHRoZXJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU0OjM5LjE2OTYzNjQ1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU2Mzk5MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8tcmVhbHRlay1ydGw5MzAwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX01ESU9fUElDNjRIUFNDKVxcdFxcdCs9IG1kaW8tcGljNjRocHNjLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMClcXHQrPSBtZGlvLXJlYWx0ZWstcnRsOTMwMC5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfTURJT19SRUdNQVApXFx0XFx0Kz0gbWRpby1yZWdtYXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NDo0MS42MjYwNDY4NDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYxOTgyOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSBkZXNjcmliZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIFJUTDkzMDAgTURJTyBTdXBwb3J0KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L21kaW8vYCBkaXJlY3RvcnkuIEkga25vdyB0aGF0J3Mgd2hlcmUgdGhlIG5ldHdvcmsgTURJTyBkcml2ZXIgY29uZmlndXJhdGlvbnMgYXJlIHR5cGljYWxseSBob3VzZWQuIEknbSBsb29raW5nIGZvciB0aGUgc3ltYm9sIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgLiBUaGF0J3MgdGhlIGtleS4gS25vd2luZyB0aGF0IHN5bWJvbCdzIHByZXNlbmNlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzcGVjaWZpYyBNRElPIGRyaXZlciBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGl0IGNvbWVzIHRvIHRoZSBidWlsZC4gSSBleHBlY3QgdGhlIGZpbGUgd2lsbCBnaXZlIG1lIGRldGFpbHMgYXJvdW5kIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IGFuZCBhbnkgcmVsZXZhbnQgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCBpZiBpdCBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAwOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU0OjQ0LjY4ODAzMTc3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM3OTk1MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY0PWNvbmZpZyBNRElPX0lQUTgwNjRcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzEtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3Mjpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6NTQ6NDcuMTI2MDMyNjQ5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyNjA5NzU0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogUEhZIENvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSBjb3JlIFBIWSBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0PyBJdCdzIGFkZGluZyB0d28gbmV3IGNhbGxiYWNrcywgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCwgdG8gdGhlIGBtaWlfYnVzYCBzdHJ1Y3QuIEF0IGZpcnN0IGdsYW5jZSwgaXQgc2VlbXMgdGhlIGNvcmUgY2hhbmdlIGlzIHNpbXBsZTogYSBub24tTlVMTCBjaGVjayBhbmQgZnVuY3Rpb24gY2FsbC5cblxuVGhlIHByaW1hcnkgdXNlciBvZiB0aGVzZSBuZXcgY2FsbGJhY2tzIGFwcGVhcnMgdG8gYmUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBOb3csIGJlY2F1c2UgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgbXkgaW50dWl0aW9uIHNheXMgaXQncyB1bmxpa2VseSB0byBiZSB0cmlnZ2VyZWQgaW4gYSBnZW5lcmFsIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuIEJ1dCwgd2UgYWxsIGtub3cgaW50dWl0aW9uIGhhcyB0byBiZSBjaGFsbGVuZ2VkLlxuXG5UaGUgY29yZSBQSFkgY29kZSBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLiBCdXQsIGlmIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBpc24ndCB1c2VkLCB0aGUgY2FsbGJhY2tzIHdpbGwgYmUgYE5VTExgLCBhbmQgdGhlIGNvZGUgd29uJ3QgZXhlY3V0ZSwgbWFraW5nIHRoYXQgcGFydCBvZiB0aGUgcGF0Y2ggaXJyZWxldmFudC4gVGhlIGltcG9ydGFudCBiaXQgdG8gcmVtZW1iZXIgaGVyZSBpcyB0aGF0IGEgc3l6a2FsbGVyIHN0eWxlIGZ1enplciBjYW4gZmFrZSBkZXZpY2UgdHJlZXMgb3IgcGVyZm9ybSBwbGF0Zm9ybSBkZXZpY2UgaW5qZWN0aW9ucy5cblxuTGV0J3Mgc2VlOiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFN5emthbGxlciBjYW4gcHJvYmUgcGxhdGZvcm0gZHJpdmVycyB2aWEgYHN5el9kZXZtZW1gIG9yIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSwgb3IgaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLiBJdCdzICpwb3NzaWJsZSogd2UgY2FuIGdldCB0aGlzIGRyaXZlciBwcm9iZWQuIElmIHRoYXQgaGFwcGVucywgdGhlIGBidXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2hgIHBvaW50ZXIgd2lsbCBiZSBzZXQgdG8gYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgLlxuXG5Tbywgd2hhdCBkb2VzIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCAqZG8qPyBJdCdzIGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUsIHNwZWNpZmljYWxseSB2aWEgYHJlZ21hcGAuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgaXQgY291bGQganVzdCBmYWlsIGF0IHByb2JlIGlmIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCBvciwgYmVjYXVzZSBpdCB1c2VzIGByZWdtYXAtbW1pb2AsIGl0IG1pZ2h0IHJlYWQvd3JpdGUgdG8gbWVtb3J5LCB3aGljaCBjYW4gYmUgZXhwbG9pdGFibGUuXG5cblRvIHByb2NlZWQsIGxldCBtZSBleGFtaW5lIGhvdyBgcmVnbWFwYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gYG90dG9fZW1kaW9fcHJvYmVgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGluZGljYXRpb24gb2YgaG93IGxpa2VseSB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFyZSB0byBjYXVzZSBpc3N1ZXMgaW4gYSBmdXp6ZWQgZW52aXJvbm1lbnQuIFdlIG5lZWQgdG8gZm9sbG93IHdoZXJlIHRoZSBtZW1vcnkgYWNjZXNzZXMgYXJlIGdvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM4NywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NDo1OC4zODcwMTEwMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY1NjQyODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldm1fcmVnbWFwX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NDo1OC40NDM1OTQ1MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA0OTMwOTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFJUTDkzMDAgTURJTyBEcml2ZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG90dG9fZW1kaW9fcHJvYmVgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIgdGhlcmUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgaW5pdGlhbGl6ZXMgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBNRElPIGJ1cywgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBkZXRhaWxzIG9mIHRoZSBSVEw5MzAwLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiB0aGUgZHJpdmVyJ3MgYWJpbGl0eSB0byBkaXNjb3ZlciBhbmQgY29uZmlndXJlIHRoZSBhdHRhY2hlZCBQSFlzLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGltcGxlbWVudGF0aW9uIHRob3JvdWdobHkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGV2aWNlIHNldHVwIGxvZ2ljIGxpdmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg0MCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU1OjAxLjM0ODUyODA2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczMTUyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3R0b19lbWRpb19wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTc5Nz1zdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODE2LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo4MTc6c3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTgxOC1cXHRcXHRcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9OTY1PXN0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05NzktXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjk4MDpzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtOTgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMDE5LVxcdGRldmljZV9mb3JfZWFjaF9jaGlsZF9ub2RlX3Njb3BlZChkZXYsIGNoaWxkKSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjEwMjA6XFx0XFx0ZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTEwMjEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0xMTMxPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG90dG9fZW1kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxMTMyOlxcdC5wcm9iZSA9IG90dG9fZW1kaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTExMzMtXFx0LmRyaXZlciA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6NTU6MDEuNDA1ODQ2OTEzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTgwMzQ5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgUmVnaXN0ZXIgTWFwIEFjcXVpc2l0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgb3R0b19lbWRpb19wcm9iZWAuIFRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgd2UncmUgZ2V0dGluZyB0aGF0IGBwcml2LVx1MDAzZXJlZ21hcGAgaGFuZGxlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgcmVnaXN0ZXIgbWFwIGlzIGluaXRpYWxpemVkIGFuZCBhY2Nlc3NlZCBpcyBjcml0aWNhbCBmb3IgZGVidWdnaW5nIGFueSBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgYW5kIHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgdG8gbWFrZSBzdXJlIHRoZSBhc3N1bXB0aW9ucyBtYWRlIGFyZSBjb3JyZWN0LiBMZXQncyBzZWUgaG93IHRoZXkgc2V0IHVwIHRoaXMgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgZHJpdmVyIGluZnJhc3RydWN0dXJlLiBLbm93aW5nIHRoaXMgaXMgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY1MywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU1OjA0LjI2Mzg4NDAxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4MDpcXHRzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gOTgxOlxcdHtcXG4gOTgyOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIDk4MzpcXHRcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2O1xcbiA5ODQ6XFx0XFx0aW50IGVycjtcXG4gOTg1OlxcdFxcbiA5ODY6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbiA5ODc6XFx0XFx0aWYgKCFwcml2KVxcbiA5ODg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDk4OTpcXHRcXG4gOTkwOlxcdFxcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4gOTkxOlxcdFxcdGlmIChlcnIpXFxuIDk5MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHRwcml2LVxcdTAwM2VpbmZvID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XFxuIDk5NTpcXHRcXHRwcml2LVxcdTAwM2VyZWdtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoZGV2LVxcdTAwM2VwYXJlbnQtXFx1MDAzZW9mX25vZGUpO1xcbiA5OTY6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbiA5OTc6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XFxuMTAwMDpcXHRcXHRpZiAoZXJyKVxcbjEwMDE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMDAyOlxcdFxcbjEwMDM6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XFxuMTAwNjpcXHRcXHRpZiAoZXJyKVxcbjEwMDc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMDA4OlxcdFxcbjEwMDk6XFx0XFx0ZXJyID0gb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShwcml2KTtcXG4xMDEwOlxcdFxcdGlmIChlcnIpXFxuMTAxMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xcbjEwMTQ6XFx0XFx0XFx0ZXJyID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcXG4xMDE1OlxcdFxcdFxcdGlmIChlcnIpXFxuMTAxNjpcXHRcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBzZXR1cCBNRElPIGJ1cyBjb250cm9sbGVyXFxcXG5cXFwiKTtcXG4xMDE3OlxcdFxcdH1cXG4xMDE4OlxcdFxcbjEwMTk6XFx0XFx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHtcXG4xMDIwOlxcdFxcdFxcdGVyciA9IG90dG9fZW1kaW9fcHJvYmVfb25lKGRldiwgcHJpdiwgY2hpbGQpO1xcbjEwMjE6XFx0XFx0XFx0aWYgKGVycilcXG4xMDIyOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTAyMzpcXHRcXHR9XFxuMTAyNDpcXHRcXG4xMDI1OlxcdFxcdHJldHVybiAwO1xcbjEwMjY6XFx0fVxcbjEwMjc6XFx0XFxuMTAyODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcXG4xMDI5OlxcdFxcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU1OjA0LjI2NDAwNTY0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjczNTYxMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGl0IHVzZXMgYHN5c2Nvbl9ub2RlX3RvX3JlZ21hcGAsIHdoaWNoIG1lYW5zIGl0ICpleHBlY3RzKiB0aGUgcGFyZW50IG5vZGUgdG8gYmUgYSBzeXNjb24uIFRoYXQgc3VnZ2VzdHMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy4gQnV0IGlzIGl0ICp3b3J0aCogdGhlIGVmZm9ydD9cblxuVGhlIHBhdGNoIGFkZHMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCB0byB0aGUgYHN0cnVjdCBtaWlfYnVzYCBhbmQgY2FsbHMgdGhlbSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIFRob3NlIGFyZSBjb3JlIFBIWSBzdWJzeXN0ZW0gZnVuY3Rpb25zLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgZXZlbiBpZiB0aGUgc3BlY2lmaWMgZHJpdmVyIGlzbid0IGltbWVkaWF0ZWx5IHJlYWNoYWJsZSwgdGhlIGNvcmUgY2hhbmdlcyBhcmUsIHdoaWNoIGluY3JlYXNlcyB0aGUgbGlrZWxpaG9vZCBvZiBmaW5kaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy5cblxuSGFuZyBvbi4uLiB0aGUgY29yZSBjaGFuZ2VzIGFyZSAqanVzdCogdGhpcyBmdW5jdGlvbiBwb2ludGVyIGNhbGw6XG5cbmBgYGNcblx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuXHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuXHRcdGlmIChlcnIpXG5cdFx0XHRnb3RvIGVycm9yO1xuXHR9XG5gYGBcblxuVGhhdCdzIGEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gcG9pbnRlci4gSWYgbm8gb3RoZXIgZHJpdmVyIGFjdHVhbGx5IHVzZXMgaXQsIHRoaXMgaXMgZXNzZW50aWFsbHkgYSBOVUxMIGNoZWNrLiBJcyBpdCBldmVuIHdvcnRoIGZ1enppbmcganVzdCBmb3IgYSBOVUxMIGNoZWNrPyBQcm9iYWJseSBub3QgYSBnb29kIHVzZSBvZiByZXNvdXJjZXMuXG5cbkFoLCBidXQgd2FpdCEgVGhlIHBhdGNoICphbHNvKiBzaWduaWZpY2FudGx5IG1vZGlmaWVzIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gSXQgYWRkcyBwb2xsaW5nIHN1cHBvcnQgdG8gdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIhICpUaGF0KiBzb3VuZHMgbXVjaCBtb3JlIHByb21pc2luZy4gQ2FuICp0aGlzKiBkcml2ZXIgYmUgZnV6emVkP1xuXG5TeXprYWxsZXIgY2FuIGluamVjdCBkZXZpY2UgdHJlZXMsIGFuZCB0aGF0J3MgdGhlIGtleS4gSWYgaXQgY2FuIGluamVjdCBhIHN5c2NvbiBwYXJlbnQgKHdoaWNoIGlzIGVhc3kgZW5vdWdoLCBzaW5jZSBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCBqdXN0IG5lZWRzIGEgY29tcGF0aWJsZSBzdHJpbmcpIGFuZCAqdGhpcyogZGV2aWNlLCBpdCBjYW4gcHJvYmUgaXQuIFRoZSBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCBjYWxsIGlzIHNhdGlzZmllZCBpZiB0aGUgcGFyZW50IG5vZGUgaGFzIGEgY29tcGF0aWJsZSBzdHJpbmcgdGhhdCBtYXRjaGVzIGEgc3lzY29uIGRyaXZlci5cblxuU28gaXMgaXQgd29ydGggZnV6emluZz8gWWVzLCBhYnNvbHV0ZWx5LiBJdCdzIGEgZHJpdmVyLCBhbmQgU3l6a2FsbGVyIGV4Y2VscyBhdCBmdXp6aW5nIGRyaXZlcnMuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgIGlzIGVuYWJsZWQgb3IgYXQgbGVhc3QgY2FuIGJlIGVuYWJsZWQuIEl0J3MgdHJpc3RhdGUuIEdyZWF0LCBpdCAqY2FuKiBiZSBlbmFibGVkLiBUaGF0J3MgZmFudGFzdGljLiBMZXQgbWUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyB0aGF0IEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4gSnVzdCBgQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBMZXQgbWUgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU3NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU1OjExLjUzNzU3MDA4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1MzQwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xNjQ9Y29uZmlnIE1ESU9fSVBRODA2NFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3MS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTcyOmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NToxMS41OTcxMDk0MDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMTkxMTc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBNRElPX1JFQUxURUtfUlRMOTMwMGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE1ESU9fUkVBTFRFS19SVEw5MzAwYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGJyZWFrIGRvd24gdGhlIGRlcGVuZGVuY2llcyBvZiB0aGlzIG1vZHVsZS4gQXMgYW4gZXhwZXJ0IGluIGVtYmVkZGVkIHN5c3RlbXMgYXJjaGl0ZWN0dXJlLCBJIG5lZWQgdG8ga25vdyAqZXZlcnl0aGluZyogaXQgcmVsaWVzIG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZGVidWdnaW5nLCBwb3J0aW5nLCBvciBldmVuIGp1c3QgdW5kZXJzdGFuZGluZyBpdHMgcGxhY2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycy4uLiBkb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzPyBLZXJuZWwgZHJpdmVycz8gUG9zc2libHkgbG93LWxldmVsIHJlZ2lzdGVyIGRlZmluaXRpb25zPyBBbmQgd2hhdCBhYm91dCBwb3RlbnRpYWwgdXNlci1zcGFjZSBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXM/IEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIG1hcCBvZiBhbGwgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0IG1ha2UgdXAgdGhpcyBtb2R1bGUgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NToxNC44OTkwMjM3MTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MjpcXHRjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcXG4gMTczOlxcdFxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4gMTc0OlxcdFxcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcXG4gMTc1OlxcdFxcdGhlbHBcXG4gMTc2OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBSZWFsdGVrXFxuIDE3NzpcXHRcXHQgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXFxuIDE3ODpcXHRcXG4gMTc5OlxcdGNvbmZpZyBNRElPX1JFR01BUFxcbiAxODA6XFx0XFx0dHJpc3RhdGVcXG4gMTgxOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6NTU6MTQuODk5MDk5MDM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MzEwNTAwNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFJlYWx0ZWsgUlRMOTMwMCBNRElPIEhhcmR3YXJlIFBvbGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoZSBuZXcgaGFyZHdhcmUgcG9sbGluZyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gY29udHJvbGxlci4gIEl0IGxvb2tzIGxpa2UgdGhpcyBjYW4gYmUgZW5hYmxlZCB3aXRoIGBDT01QSUxFX1RFU1RgLCB3aGljaCBpcyBvZnRlbiBhbHJlYWR5IGVuYWJsZWQgaW4gU3l6a2FsbGVyLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhhdC4gIFRoZSBwcmltYXJ5IGNvbmZpZyBpcyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIGFuZCBJJ2xsIG1ha2Ugc3VyZSB0aGF0IGdldHMgZXhwbGljaXRseSBzZXQuIEknbSBmb2N1c2luZyBvbiB0aGF0LlxuXG5JJ3ZlIGdvdCB0aGUgZHJpdmVyIHVzaW5nIHJlZ21hcCBmb3IgTU1JTywgYW5kIFN5emthbGxlciBjYW4gaGFuZGxlIHRoYXQgdGhyb3VnaCBhIG1vY2sgb3IgbWVtb3J5IG1hcHBpbmcsIHNvIHRoYXQncyBnb29kLiBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCBpcyB1c3VhbGx5IGhvdyBpdCBtYXBzIHRvIE1NSU8sIHNvIGRldmljZSB0cmVlIGluamVjdGlvbiBzaG91bGQgd29yay4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgbWlub3IsIG1vc3RseSBhZGRpbmcgdGhvc2UgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGBtaWlfYnVzYCBzdHJ1Y3QuIFRoZSBidWxrIG9mIHRoZSBsb2dpYyBpcyBpbiB0aGUgZHJpdmVyIGl0c2VsZiwgaW4gYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBjb25jZW50cmF0ZSBvbiBhcmUgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgLCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaGAsIGBvdHRvX2VtZGlvX2luaXRfcG9sbGluZ2AsIGBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmdgLCBhbmQgYWxsIG9mIHRoZSBgb3R0b19lbWRpb18qX3JlYWRfYyMjYCBhbmQgYG90dG9fZW1kaW9fKl93cml0ZV9jIyNgIGZ1bmN0aW9ucyAoZm9yIGJvdGggODM4MCBhbmQgODM5MCkuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIHNpbmNlIHRoZXkgYXJlIGNvcmUgZnVuY3Rpb25zIGFuZCBhcmUgb24gdGhlIGhvdCBwYXRoLCBidXQgdGhleSBhcmUgdmVyeSBnZW5lcmljIGFuZCB3b3VsZCBwdWxsIGluIGEgbG90IG9mIG90aGVyIFBIWSBkcml2ZXJzIGludG8gdGhlIG1peC4gVGhpcyBpcyBub3Qgd2hhdCBJIHdhbnQuIFRoZXkgYXJlIGFsc28gY29udHJvbCBwYXRoLiBTbywgSSB3aWxsIGZvY3VzIG9uIHRoZSBgb3R0b19lbWRpb18qYCBmdW5jdGlvbnMgYXMgdGhleSB0YXJnZXQgdGhlIG5ldyBjb2RlIGRpcmVjdGx5LlxuXG5TcGVjaWZpY2FsbHksIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCBpcyByZWFjaGFibGUuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZSBNRElPIGJ1cyBkdXJpbmcgcHJvYmUsIGFuZCB0aGVuIFBIWSBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCwgd2hpY2ggY2FsbHMgYHBoeV9hdHRhY2hfZGlyZWN0YCwgd2hpY2ggdGhlbiBjYWxscyBgbm90aWZ5X3BoeV9hdHRhY2hgLiBTbywgdGhhdCdzIGRlZmluaXRlbHkgYSB2aWFibGUgZW50cnkgcG9pbnQuIFRoZSBzYW1lIGdvZXMgZm9yIHRoZSBvdGhlciBmdW5jdGlvbnM6XG4tICAgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgXG4tICAgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2hgXG4tICAgYG90dG9fZW1kaW9faW5pdF9wb2xsaW5nYFxuLSAgIGBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmdgXG4tICAgYG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyYFxuLSAgIGBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjJgXG4tICAgYG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjJgXG4tICAgYG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NWBcbi0gICBgb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NWBcbi0gICBgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyYFxuLSAgIGBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyYFxuLSAgIGBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDVgXG4tICAgYG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDVgXG5cblRoaXMgaXMgYSBuZXcgZmVhdHVyZSBpbiBNRElPIGRyaXZlciBhbmQgY29yZSBQSFkgc3Vic3lzdGVtLCBzbyBmdXp6aW5nIHRoZXNlIGlzIGEgZ29vZCBpZGVhLiAgVGhlIHByaW1hcnkgY29uZmlnIG5lZWRlZCBpcyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIGFuZCBpdCBkZXBlbmRzIG9uIGBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVGAuXG5cbkkgdGhpbmsgdGhhdCdzIHRoZSBjb3JlIG9mIGl0LiBJJ3ZlIG5hcnJvd2VkIGRvd24gdGhlIHRhcmdldCwgdW5kZXJzdGFuZCB0aGUgcmVhY2hhYmlsaXR5IGFuZCBzZXR1cCwgYW5kIGhhdmUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBjb25maWcgb3B0aW9ucyB0byBwcmlvcml0aXplLiAgTGV0J3MgZ2V0IHRvIGZ1enppbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTYwLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU1OjMxLjIwOTYwMTU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ0OTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljLipvdHRvX2VtZGlvXy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0yNzE9c3RydWN0IG90dG9fZW1kaW9fY2hhbiB7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMjc1LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoyNzY6c3RhdGljIGludCBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTI3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMjkxLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoyOTI6c3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMjkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yOTgtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjI5OTpzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTMwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzA2LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzozMDc6c3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzA4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zNjMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjM2NDpzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzY1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEsIHUzMiBtYXNrLCB1MzIgKnZhbHVlKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTM4My1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6Mzg0OnN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzg1LVxcdFxcdFxcdFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zOTMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjM5NDpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00MDctXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQwODpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00MjEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQyMjpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDIzLVxcdFxcdFxcdFxcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDM0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo0MzU6c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00MzYtXFx0XFx0XFx0XFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00NDctXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQ0ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDQ5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00NjEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQ2MjpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00NzYtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQ3NzpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDc4LVxcdFxcdFxcdFxcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDg5LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo0OTA6c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00OTEtXFx0XFx0XFx0XFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01MDMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjUwNDpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTA1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01MTctXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjUxODpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01MzEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjUzMjpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTMzLVxcdFxcdFxcdFxcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTQ0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo1NDU6c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01NDYtXFx0XFx0XFx0XFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01NTctXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU1ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTU5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01NzAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU3MTpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01ODQtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU4NTpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTg2LVxcdFxcdFxcdFxcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTk3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo1OTg6c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01OTktXFx0XFx0XFx0XFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02MTEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjYxMjpzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02MzEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjYzMjpzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02NTUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjY1NjpzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02NTcte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTY3MS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NjcyOnN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjczLVxcdFxcdFxcdFxcdGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTY4Ny1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6Njg4OnN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9tYXBwaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIHUzMiBiYXNlLCB1MzIgcG9ydCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjg5LVxcdFxcdFxcdFxcdCAgICB1MzIgdmFsc19wZXJfcmVnLCB1MzIgYml0c19wZXJfdmFsLCB1MzIgdmFsdWUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjk3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo2OTg6c3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTY5OS17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzIzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3MjQ6c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03MjUte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTczMi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzMzOnN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzM0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NTItXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjc1MzpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzY4LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3Njk6c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzk2LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3OTc6c3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03OTgte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTgxNi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6ODE3OnN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04MTgtXFx0XFx0XFx0XFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTg2MS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6ODYyOnN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKm90dG9fZW1kaW9fZ2V0X2J1c19ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTg2My17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODgwLSAqL1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo4ODE6c3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTg4Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtOTY0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo5NjU6c3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05NjYte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTk3OS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6OTgwOnN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05ODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NTozMS4yODMwNTgyNTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE3NzYxMzUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBGdW5jdGlvbnMgQWRkZWQgYW5kIE1vZGlmaWVkKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaCBieSBleHBsaWNpdGx5IGxpc3RpbmcgdGhlIGNoYW5nZXMuIEknbSBnb2luZyB0byBzdGFydCBieSBjYXRlZ29yaXppbmcgdGhlIGZ1bmN0aW9ucy5cblxuSSBzZWUgYSBsaXN0IG9mIG5ld2x5ICphZGRlZCogZnVuY3Rpb25zOiBgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nYCwgYG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMmAsIGBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyYCwgYG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NWAsIGBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1YCwgYG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMmAsIGBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyYCwgYG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NWAsIGBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1YCwgYG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyYCwgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgLCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaGAsIGBvdHRvX2VtZGlvX2luaXRfcG9sbGluZ2AuXG5cblRoZW4sIEknbSBub3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiAqbW9kaWZpZWQqOiBgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb19yZWFkX2MyMmAsIGBvdHRvX2VtZGlvX3dyaXRlX2MyMmAsIGBvdHRvX2VtZGlvX3Byb2JlX29uZWAsIGBvdHRvX2VtZGlvX3Byb2JlYCwgYHBoeV9hdHRhY2hfZGlyZWN0YCwgYHBoeV9kZXRhY2hgLlxuXG5UaGUgc2lnbmlmaWNhbnQgYWRkaXRpb25zIHNlZW0gdG8gYmUgYXJvdW5kIHBvbGxpbmcsIHNwZWNpZmljIFBIWSBpbml0aWFsaXphdGlvbiwgYW5kIGF0dGFjaC9kZXRhY2ggbm90aWZpY2F0aW9ucy4gTG9va2luZyBhdCB0aGUgY2hhbmdlcywgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIG5ldyBmdW5jdGlvbnMsIGluY2x1ZGluZyBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAsIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoYCwgYG90dG9fZW1kaW9faW5pdF9wb2xsaW5nYCwgYG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZ2AuIEFsc28sIHRoZSBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gaGFuZGxpbmcgdGhlIDgzODAgYW5kIDgzOTAgUEhZcyAoYG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMmAsIGBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyYCwgYG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMmAsIGBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyYCwgYG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyYCkgd2lsbCB3YXJyYW50IGNsb3NlciBpbnNwZWN0aW9uLlxuXG5JdCBhcHBlYXJzIHRoZSBuZXcgZnVuY3Rpb25zIGFyZSBxdWl0ZSBpbXBvcnRhbnQuIEkga25vdyB3aGF0IHRvIGZvY3VzIG9uLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjUwLCJPdXRwdXRUb2tlbnMiOjI1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NTozOS40NjA2NzQyMDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEwNDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoXCIsXG4gICAgXCJvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoXCIsXG4gICAgXCJvdHRvX2VtZGlvX2luaXRfcG9sbGluZ1wiLFxuICAgIFwib3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM4MF93cml0ZV9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM5MF9yZWFkX2MyMlwiLFxuICAgIFwib3R0b19lbWRpb184MzkwX3dyaXRlX2MyMlwiLFxuICAgIFwib3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIHBvbGxpbmcgc3VwcG9ydCB0byB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gY29udHJvbGxlciBkcml2ZXIgYW5kIGludHJvZHVjZXMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbS4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGR1cmluZyBQSFkgZGV2aWNlIGF0dGFjaG1lbnQvZGV0YWNobWVudCwgYW5kIHRoZSBkcml2ZXIgY2hhbmdlcyBjYW4gYmUgcmVhY2hlZCBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaFwiLFxuICAgIFwib3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaFwiLFxuICAgIFwib3R0b19lbWRpb19pbml0X3BvbGxpbmdcIixcbiAgICBcIm90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZ1wiLFxuICAgIFwib3R0b19lbWRpb184MzgwX3JlYWRfYzIyXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM5MF93cml0ZV9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBwb2xsaW5nIHN1cHBvcnQgdG8gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGNvbnRyb2xsZXIgZHJpdmVyIGFuZCBpbnRyb2R1Y2VzIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0uIFRoZSBjb3JlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgUEhZIGRldmljZSBhdHRhY2htZW50L2RldGFjaG1lbnQsIGFuZCB0aGUgZHJpdmVyIGNoYW5nZXMgY2FuIGJlIHJlYWNoZWQgaWYgdGhlIGRyaXZlciBpcyBwcm9iZWQgdmlhIGRldmljZSB0cmVlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrl4lm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-05 16:40:20 +0000 UTC FinishedAt: 2026-07-05 16:55:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MDIO_REALTEK_RTL9300" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MDIO_REALTEK_RTL9300" ], "series_id": "0838597e-091a-4a4b-bebe-cc685dcaebe2" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "otto_emdio_notify_phy_attach", "otto_emdio_notify_phy_detach", "otto_emdio_init_polling", "otto_emdio_set_port_polling", "otto_emdio_8380_read_c22", "otto_emdio_8380_write_c22", "otto_emdio_8390_read_c22", "otto_emdio_8390_write_c22", "otto_emdio_8380_setup_controller" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaCYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9faW5pdF9wb2xsaW5nJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzgwX3dyaXRlX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzkwX3dyaXRlX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIHBvbGxpbmcgc3VwcG9ydCB0byB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gY29udHJvbGxlciBkcml2ZXIgYW5kIGludHJvZHVjZXMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbS4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGR1cmluZyBQSFkgZGV2aWNlIGF0dGFjaG1lbnQvZGV0YWNobWVudCwgYW5kIHRoZSBkcml2ZXIgY2hhbmdlcyBjYW4gYmUgcmVhY2hlZCBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjQ3ZjBkNmUyZjMwZGNlZjdmNzI0ZDZlOTc4YWE1YWVkNWQ2YWVlM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDUgMTY6NTQ6MzEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG5pbmRleCAyNzFlMDViYWU5YzU3NC4uNjdlMGIyM2E4NDcwZWEgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuQEAgLTQsNyAmIzQzOzQsNyBAQFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXG4gJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4gXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcbiYjNDM7dGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcbiBcbiBtYWludGFpbmVyczpcbiAgIC0gQ2hyaXMgUGFja2hhbSBcdTAwM2NjaHJpcy5wYWNraGFtQGFsbGllZHRlbGVzaXMuY28ubnpcdTAwM2VcbkBAIC0xMiw2ICYjNDM7MTIsMTYgQEAgbWFpbnRhaW5lcnM6XG4gcHJvcGVydGllczpcbiAgIGNvbXBhdGlibGU6XG4gICAgIG9uZU9mOlxuJiM0MzsgICAgICAtIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzODAtbWRpb1xuJiM0MzsgICAgICAtIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgLSBlbnVtOlxuJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkyLW1kaW9cbiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvXG4mIzQzOyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgIC0gaXRlbXM6XG4gICAgICAgICAgIC0gZW51bTpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXG5AQCAtMjQsNiAmIzQzOzM0LDggQEAgcHJvcGVydGllczpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cbiAgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw5MzExLW1kaW9cbiAgICAgICAtIGVudW06XG4mIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvXG4mIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuaW5kZXggODkyZWQzNzgwYTY1NzIuLmQ3OTdkOGYwMWM2NmU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbkBAIC0zNSw2ICYjNDM7MzUsNzQgQEBcbiAgKlxuICAqIFRoZSBkcml2ZXIgd29ya3Mgb3V0IHRoZSBtYXBwaW5nIGJhc2VkIG9uIHRoZSBNRElPIGJ1cyBkZXNjcmliZWQgaW4gZGV2aWNlIHRyZWUgYW5kIHBoYW5kbGVzIG9uXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcbiYjNDM7ICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cbiYjNDM7ICpcbiYjNDM7ICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cbiYjNDM7ICpcbiYjNDM7ICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2ZcbiYjNDM7ICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXG4mIzQzOyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXG4mIzQzOyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKTpcbiYjNDM7ICpcbiYjNDM7ICpcdFJUTDgzODBcdFx0XHRcdFJUTDgzOTNcbiYjNDM7ICpcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcdHBoeV9yZWFkKHBoeSwgMCk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgMSk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XHRwaHlfcmVhZChwaHksIDQpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDUpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV9yZWFkKHBoeSwgNik7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcdHBoeV9yZWFkKHBoeSwgOSk7XG4mIzQzOyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XHRwaHlfcmVhZChwaHksIDEwKTtcbiYjNDM7ICpcdHBoeV93cml0ZShwaHksIDEzLCAweDgwMDcpO1x0cGh5X3JlYWQocGh5LCAxNSk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDkpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDEwKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDE1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgMSk7XHRcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcbiYjNDM7ICpcdHBoeV9yZWFkKHBoeSwgNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xuJiM0MzsgKlx0cGh5X3JlYWQocGh5LCA1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4mIzQzOyAqXHRwaHlfcmVhZChwaHksIDYpO1xuJiM0MzsgKlxuJiM0MzsgKiBGcm9tIHRoZSBhYm92ZSBzbmlwcGV0cyBpdCBwb2xscyBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB2aWEgQzQ1IG92ZXIgQzIyLiBBc1xuJiM0MzsgKiBvZiBub3cgaXQgaXMgdW5jbGVhciBob3cgdGhlIGhhcmR3YXJlIGRlY2lkZXMgaWYgYSBQSFkgc3VwcG9ydHMgdGhlc2UgcmVnaXN0ZXJzLiBBZnRlciBvbmUgUEhZXG4mIzQzOyAqIHN0YXR1cyBpcyByZWFkLCB0aGUgcG9sbGluZyBlbmdpbmUgZ29lcyBvdmVyIHRvIHRoZSBuZXh0IFBIWS4gQmFzaWNhbGx5IHRoZSBidXMgaXMgYWx3YXlzIGJ1c3lcbiYjNDM7ICogYW5kIHRoZSBNQUMgc3RhdHVzIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLlxuJiM0MzsgKlxuJiM0MzsgKiBIb3cgZG9lcyBNRElPIGFjY2VzcyBmcm9tIGtlcm5lbCB3b3JrP1xuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIGlzc3VpbmcgTURJTyBhY2Nlc3NlcyB2aWEgYW4gTU1JTyBiYXNlZCBpbnRlcmZhY2UgdGhlIGZpbmFsIHdyaXRlIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyXG4mIzQzOyAqIHNldHMgYSBcJiMzNDtydW4gY29tbWFuZCBub3dcJiMzNDsgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXG4mIzQzOyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXG4mIzQzOyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XG4mIzQzOyAqXG4mIzQzOyAqXHRSVEw4MzgwXHRcdFx0XHRSVEw4MzkzXG4mIzQzOyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1x0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xuJiM0MzsgKlx0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XHRwaHlfd3JpdGUocGh5LCByZWcsIHZhbHVlKTtcbiYjNDM7ICpcdFx0XHRcdFx0cGh5X3dyaXRlKHBoeSwgMzEsIDApO1xuJiM0MzsgKlxuJiM0MzsgKiBXaGF0IGRvZXMgdGhpcyBtZWFuP1xuJiM0MzsgKlxuJiM0MzsgKiBUaGVyZSBhcmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIHBvbGxpbmcgYW5kIFBIWSBhY2Nlc3MgYmV0d2VlbiB0aGUgbW9kZWxzIGJ1dCB0aGUgY2hhbGxlbmdlXG4mIzQzOyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXRcbiYjNDM7ICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uXG4mIzQzOyAqXG4mIzQzOyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay5cbiYjNDM7ICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy5cbiYjNDM7ICogLSBUaGUgUmVhbHRlayBwYWdlIHJlZ2lzdGVyIDMxIGlzIG1hZ2ljYWxseSBtb2RpZmllZCBpbiB0aGUgYmFja2dyb3VuZCBzbyB0aGF0IHBvbGxpbmcgd2lsbFxuJiM0MzsgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW1cbiYjNDM7ICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgXCYjMzQ7bWFnaWNhbGx5XCYjMzQ7IGluIHRoZSBiYWNrZ3JvdW5kLlxuJiM0MzsgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxuJiM0MzsgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLlxuJiM0MzsgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxuJiM0MzsgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxuJiM0MzsgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLlxuJiM0MzsgKlxuJiM0MzsgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcbiYjNDM7ICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbkBAIC01MSw2ICYjNDM7MTE5LDUwIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4gXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVNcdFx0XHQxXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFNcdFx0XHQyOFxuJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMXHRcdFx0MHhhMTAwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORVx0XHRCSVQoMTUpXG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzBcdFx0MHhhMWI4XG4mIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcdFx0MHhhMWJjXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSXHRcdEdFTk1BU0soMjQsIDIwKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0VcdFx0R0VOTUFTSygxOSwgMTUpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDE0LCAzKVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9XUklURVx0XHRCSVQoMilcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDVcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyXHRcdDBcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTFx0XHRcdDAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi9cbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMlx0XHQweGExYzBcbiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMzEsIDE2KVxuJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGExYzRcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9QT0xMX0NUUkxcdFx0XHQweGExN2NcbiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFx0XHQweGExYzhcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fQlVTRVNcdFx0XHQyXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fUEFHRVNcdFx0XHQ4MTkyXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFNcdFx0XHQ1MlxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTFx0XHQweDAzZWNcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19BQ0NFU1NfQ1RSTFx0XHQweDAzZGNcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSyg5LCA1KVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0VcdFx0R0VOTUFTSygyMiwgMTApXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0ZBSUxcdFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1XHRcdEJJVCgyKVxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQ1RSTFx0XHRcdDB4MDNlMFxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRVx0XHRHRU5NQVNLKDgsIDApXG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMXHRcdDB4MDNmMFxuJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4mIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEFcdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMXHRcdFx0MHgwM2Y0XG4mIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPV1x0XHQweDAzZTRcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFx0XHQweDAzZThcbiYjNDM7I2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDAzZmNcbiYjNDM7XG4gI2RlZmluZSBSVEw5MzAwX05VTV9CVVNFU1x0XHRcdDRcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BBR0VTXHRcdFx0NDA5NlxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFNcdFx0XHQyOFxuQEAgLTcxLDYgJiM0MzsxODMsNyBAQFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXHRcdDB4Y2I3Y1xuJiM0MzsjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTFx0XHRcdDB4Y2E5MFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhjYjgwXG4gXG4gI2RlZmluZSBSVEw5MzEwX05VTV9CVVNFU1x0XHRcdDRcbkBAIC05NiwxMSAmIzQzOzIwOSwxMyBAQFxuICNkZWZpbmUgICBSVEw5MzEwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDE1LCAwKVxuICNkZWZpbmUgUlRMOTMxMF9TTUlfSU5EUlRfQUNDRVNTX01NRF9DVFJMXHQweDBjMThcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfQUREUl9DVFJMXHRcdDB4MGM3NFxuJiM0MzsjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMXHRcdDB4MGNjY1xuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTFx0XHQweDBjOWNcbiBcbiAjZGVmaW5lIFBIWV9DVFJMX0NNRFx0XHRcdFx0QklUKDApXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQURcdFx0XHRHRU5NQVNLKDIwLCAxNilcbiAjZGVmaW5lIFBIWV9DVFJMX01NRF9SRUdcdFx0XHRHRU5NQVNLKDE1LCAwKVxuJiM0MzsjZGVmaW5lIFBIWV9WRU5ET1JfUkVBTFRFS1x0XHRcdDB4MDAxY2M4MDBcbiBcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXHRcdFx0NlxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcdFx0XHQ1XG5AQCAtMTI2LDcgJiM0MzsyNDEsOSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHtcbiBcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XG4gXHRzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7XG4gXHRzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi9cbiYjNDM7XHRERUNMQVJFX0JJVE1BUChwaHlfcG9sbCwgTUFYX1BPUlRTKTtcbiBcdERFQ0xBUkVfQklUTUFQKHZhbGlkX3BvcnRzLCBNQVhfUE9SVFMpO1xuJiM0MztcdHUxNiBwYWdlW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYnVzW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xuIFx0Ym9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107XG5AQCAtMTQzLDYgJiM0MzsyNjAsNyBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIHtcbiBcdHU4IG51bV9idXNlcztcbiBcdHU4IG51bV9wb3J0cztcbiBcdHUxNiBudW1fcGFnZXM7XG4mIzQzO1x0dTMyIHBvbGxfY3RybDtcbiBcdGludCAoKnNldHVwX2NvbnRyb2xsZXIpKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpO1xuIFx0aW50ICgqcmVhZF9jMjIpKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbiBcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcbkBAIC0xNzgsNiAmIzQzOzI5NiwxNCBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0cmV0dXJuIGNoYW4tXHUwMDNlcHJpdjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbiYjNDM7e1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXBvbGxfY3RybCAmIzQzOyAocG9ydCAvIDMyKSAqIDQsXG4mIzQzO1x0XHRcdFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcbiB7XG5AQCAtMTg2LDkgJiM0MzszMTIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0dTMyIGNtZHN0YXRlO1xuIFx0aW50IHJldDtcbiBcbi1cdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmxlIHdyb25nICovXG4mIzQzO1x0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibHkgd3JvbmcgKi9cbiBcdHJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LVx1MDAzZXJlZ21hcCwgaW5mby1cdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcbi1cdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xuJiM0MztcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjI4LDcgJiM0MzszNTQsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0KHByaXYtXHUwMDNlcmVnbWFwLCBpbmZvLVx1MDAzZWNtZF9yZWdzLmMyMl9kYXRhLFxuLVx0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yNjUsMTMgJiM0MzszOTEsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3dyaXRlLCBjbWRfZGF0YSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcbiYjNDM7XHRcdFx0XHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4mIzQzO1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXG4mIzQzO1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuJiM0MztcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuJiM0MztcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuJiM0MztcdFx0LmM0NV9kYXRhXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxuJiM0MztcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSxcbiYjNDM7XHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxuJiM0MztcdFx0XHRcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiYjNDM7XHRcdC5jNDVfZGF0YVx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbiYjNDM7XHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiYjNDM7XHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4mIzQzO1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXG4ge1xuIFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4mIzQzO1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiBcdH07XG4gXG5AQCAtMjg1LDcgJiM0Mzs1MjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuJiM0MztcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuIFx0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4gXHR9O1xuQEAgLTMyNSw3ICYjNDM7NTYxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHVcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYnJvYWRjYXN0XHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSxcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHR9O1xuIFxuIFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbkBAIC0zMzcsNyAmIzQzOzU3Myw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbiYjNDM7XHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG5AQCAtMzgzLDggJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXG4gXHRpZiAocG9ydCBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIHBvcnQ7XG4gXG4tXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaylcbiYjNDM7XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0aWYgKHJlZ251bSA9PSAzMSlcbiYjNDM7XHRcdFx0cmV0dXJuIHByaXYtXHUwMDNlcGFnZVtwb3J0XTtcbiYjNDM7XG4gXHRcdHJldCA9IHByaXYtXHUwMDNlaW5mby1cdTAwM2VyZWFkX2MyMihidXMsIHBvcnQsIHJlZ251bSwgXHUwMDI2dmFsdWUpO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiByZXQgPyByZXQgOiB2YWx1ZTtcbiB9XG5AQCAtMzk4LDggJiM0Mzs2MzgsMTcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtLCB1MTZcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHRpZiAocmVnbnVtID09IDMxKSB7XG4mIzQzO1x0XHRcdGlmICh2YWx1ZSBcdTAwM2U9IFJBV19QQUdFKHByaXYpKVxuJiM0MztcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VwYWdlW3BvcnRdID0gdmFsdWU7XG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0cmV0ID0gcHJpdi1cdTAwM2VpbmZvLVx1MDAzZXdyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTQ3Miw2ICYjNDM7NzIxLDE1IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nXG4mIzQzO1x0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcbkBAIC01MDgsNiAmIzQzOzc2Niw1NCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVx1MDAzZW1kaW8uYnVzKTtcbiYjNDM7XHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcG9ydDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgKCFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LVx1MDAzZXBoeV9pZCwgUEhZX1ZFTkRPUl9SRUFMVEVLKSkpIHtcbiYjNDM7XHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcJiMzNDtPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbiYjNDM7XHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRfX3NldF9iaXQocG9ydCwgcHJpdi1cdTAwM2VwaHlfcG9sbCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuJiM0MztcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXHUwMDNlbWRpby5idXMsIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4mIzQzO1x0XHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdF9fY2xlYXJfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuJiM0MztcdH1cbiYjNDM7XHRcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZGV2X2VycihidXMtXHUwMDNlcGFyZW50LCBcJiMzNDtmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXFxuXCYjMzQ7LCBwb3J0KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcbiBcdFx0XHRcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSlcbiB7XG5AQCAtNTM3LDYgJiM0Mzs4NDMsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRidXMtXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcbiBcdH1cbiBcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4mIzQzO1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcbiYjNDM7XHRidXMtXHUwMDNlbm90aWZ5X3BoeV9kZXRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoO1xuJiM0MztcbiBcdGNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiBcdGNoYW4tXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcbiBcdGNoYW4tXHUwMDNlcHJpdiA9IHByaXY7XG5AQCAtNjUzLDYgJiM0Mzs5NjIsMjEgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIHByaXYtXHUwMDNlaW5mby1cdTAwM2VudW1fcG9ydHM7IHBvcnQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuJiM0MztcdFx0XHRlcnIgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgZmFsc2UpO1xuJiM0MztcdFx0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbkBAIC02NzIsNiAmIzQzOzk5NiwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdGlmIChJU19FUlIocHJpdi1cdTAwM2VyZWdtYXApKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZXJlZ21hcCk7XG4gXG4mIzQzO1x0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuIFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XG4gXG4gXHRlcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpO1xuQEAgLTY5Nyw2ICYjNDM7MTAyNSw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XG4mIzQzO1x0LmFkZHJfbWFwX2Jhc2UgPSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiYjNDM7XHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4mIzQzO1x0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxuJiM0MztcdC5jbWRfd3JpdGUgPSBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFLFxuJiM0MztcdC5jbWRfcmVncyA9IHtcbiYjNDM7XHRcdC5jMjJfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xLFxuJiM0MztcdFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXG4mIzQzO1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuJiM0MztcdFx0LnBvcnRfbWFza19sb3cgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMCxcbiYjNDM7XHR9LFxuJiM0MztcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbiYjNDM7XHQubnVtX3BhZ2VzID0gUlRMODM4MF9OVU1fUEFHRVMsXG4mIzQzO1x0Lm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLFxuJiM0MztcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4mIzQzO1x0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcixcbiYjNDM7XHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsXG4mIzQzO1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuJiM0MztcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyLFxuJiM0MztcdC53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7XG4mIzQzO1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuJiM0MztcdC5jbWRfcmVhZCA9IFJUTDgzOTBfUEhZX0NUUkxfUkVBRCxcbiYjNDM7XHQuY21kX3dyaXRlID0gUlRMODM5MF9QSFlfQ1RSTF9XUklURSxcbiYjNDM7XHQuY21kX3JlZ3MgPSB7XG4mIzQzO1x0XHQuYnJvYWRjYXN0ID0gUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMLFxuJiM0MztcdFx0LmMyMl9kYXRhID0gUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkwsXG4mIzQzO1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbiYjNDM7XHRcdC5leHRfcGFnZSA9IFJUTDgzOTBfUEhZUkVHX0NUUkwsXG4mIzQzO1x0XHQuaW9fZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0RBVEFfQ1RSTCxcbiYjNDM7XHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbiYjNDM7XHRcdC5wb3J0X21hc2tfaGlnaCA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9ISUdILFxuJiM0MztcdH0sXG4mIzQzO1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuJiM0MztcdC5udW1fcGFnZXMgPSBSVEw4MzkwX05VTV9QQUdFUyxcbiYjNDM7XHQubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsXG4mIzQzO1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuJiM0MztcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMixcbiYjNDM7XHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXG4mIzQzO1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4mIzQzO1x0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUsXG4mIzQzO307XG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiBcdC5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCxcbkBAIC03MTIsNiAmIzQzOzEwODUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzAwX05VTV9QT1JUUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzAwX05VTV9QQUdFUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLFxuIFx0LnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcixcbiBcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcbiBcdC5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSxcbkBAIC03MzcsNiAmIzQzOzExMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbiYjNDM7XHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXG4gXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyLFxuIFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzIyLFxuIFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxuQEAgLTc0NSw2ICYjNDM7MTEyMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHtcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw4MzgwLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb184MzgwX2luZm8gfSxcbiYjNDM7XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7cmVhbHRlayxydGw4MzkxLW1kaW9cJiMzNDssIC5kYXRhID0gXHUwMDI2b3R0b19lbWRpb184MzkwX2luZm8gfSxcbiBcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtyZWFsdGVrLHJ0bDkzMDEtbWRpb1wmIzM0OywgLmRhdGEgPSBcdTAwMjZvdHRvX2VtZGlvXzkzMDBfaW5mbyB9LFxuIFx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O3JlYWx0ZWsscnRsOTMxMS1tZGlvXCYjMzQ7LCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXG4gXHR7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAwNjE1MjI4NDU5ZWY0Mi4uNjc2Y2JmMTgzMzUwZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTg3Niw2ICYjNDM7MTg3NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdGlmIChlcnIpXG4gXHRcdGdvdG8gZXJyb3I7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuJiM0MztcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIGVycm9yO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwaHlfcmVzdW1lKHBoeWRldik7XG4gXG4gXHQvKipcbkBAIC0xOTE5LDYgJiM0MzsxOTI1LDkgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRzdHJ1Y3QgbW9kdWxlICpuZGV2X293bmVyID0gTlVMTDtcbiBcdHN0cnVjdCBtaWlfYnVzICpidXM7XG4gXG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaClcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xuJiM0MztcbiBcdGlmIChwaHlkZXYtXHUwMDNlZGV2bGluaykge1xuIFx0XHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVx1MDAzZWRldmxpbmspO1xuIFx0XHRwaHlkZXYtXHUwMDNlZGV2bGluayA9IE5VTEw7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmZkLi4zMTYwY2E5OWRlYWI3OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0zNzYsNiAmIzQzOzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbiYjNDM7XHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXG4mIzQzO1x0aW50ICgqbm90aWZ5X3BoeV9hdHRhY2gpKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuJiM0MztcdC8qKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyAqL1xuJiM0MztcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gXG4gXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXG4gXHRzdHJ1Y3QgbWRpb19idXNfc3RhdHMgc3RhdHNbUEhZX01BWF9BRERSXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRElPX1JFQUxURUtfUlRMOTMwMCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O290dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2gmIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaCYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvX2luaXRfcG9sbGluZyYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcmIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzgwX3JlYWRfYzIyJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fODM4MF93cml0ZV9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzkwX3JlYWRfYzIyJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fODM5MF93cml0ZV9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBwb2xsaW5nIHN1cHBvcnQgdG8gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGNvbnRyb2xsZXIgZHJpdmVyIGFuZCBpbnRyb2R1Y2VzIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0uIFRoZSBjb3JlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgUEhZIGRldmljZSBhdHRhY2htZW50L2RldGFjaG1lbnQsIGFuZCB0aGUgZHJpdmVyIGNoYW5nZXMgY2FuIGJlIHJlYWNoZWQgaWYgdGhlIGRyaXZlciBpcyBwcm9iZWQgdmlhIGRldmljZSB0cmVlIGluamVjdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjQ3ZjBkNmUyZjMwZGNlZjdmNzI0ZDZlOTc4YWE1YWVkNWQ2YWVlMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDUgMTY6NTQ6MzEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKaW5kZXggMjcxZTA1YmFlOWM1NzQuLjY3ZTBiMjNhODQ3MGVhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sCkBAIC00LDcgJiM0Mzs0LDcgQEAKICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjCiAkc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKIAotdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXIKJiM0Mzt0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlcgogCiBtYWludGFpbmVyczoKICAgLSBDaHJpcyBQYWNraGFtICZsdDtjaHJpcy5wYWNraGFtQGFsbGllZHRlbGVzaXMuY28ubnomZ3Q7CkBAIC0xMiw2ICYjNDM7MTIsMTYgQEAgbWFpbnRhaW5lcnM6CiBwcm9wZXJ0aWVzOgogICBjb21wYXRpYmxlOgogICAgIG9uZU9mOgomIzQzOyAgICAgIC0gaXRlbXM6CiYjNDM7ICAgICAgICAgIC0gZW51bToKJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgxLW1kaW8KJiM0MzsgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW8KJiM0MzsgICAgICAgICAgLSBjb25zdDogcmVhbHRlayxydGw4MzgwLW1kaW8KJiM0MzsgICAgICAtIGl0ZW1zOgomIzQzOyAgICAgICAgICAtIGVudW06CiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5Mi1tZGlvCiYjNDM7ICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5My1tZGlvCiYjNDM7ICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvCiAgICAgICAtIGl0ZW1zOgogICAgICAgICAgIC0gZW51bToKICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW8KQEAgLTI0LDYgJiM0MzszNCw4IEBAIHByb3BlcnRpZXM6CiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW8KICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpbwogICAgICAgLSBlbnVtOgomIzQzOyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MC1tZGlvCiYjNDM7ICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW8KICAgICAgICAgICAtIHJlYWx0ZWsscnRsOTMwMS1tZGlvCiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpbwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKaW5kZXggODkyZWQzNzgwYTY1NzIuLmQ3OTdkOGYwMWM2NmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jCkBAIC0zNSw2ICYjNDM7MzUsNzQgQEAKICAqCiAgKiBUaGUgZHJpdmVyIHdvcmtzIG91dCB0aGUgbWFwcGluZyBiYXNlZCBvbiB0aGUgTURJTyBidXMgZGVzY3JpYmVkIGluIGRldmljZSB0cmVlIGFuZCBwaGFuZGxlcyBvbgogICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LgomIzQzOyAqCiYjNDM7ICogVGhlIGRldmljZXMgaGF2ZSBhIGhhcmR3YXJlIHBvbGxpbmcgdW5pdCB0aGF0IHJ1bnMgaW4gdGhlIGJhY2tncm91bmQgd2l0aG91dCBhbnkgQ1BVIGxvYWQuIEl0CiYjNDM7ICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy4KJiM0MzsgKgomIzQzOyAqIEhvdyBkb2VzIHRoZSBwb2xsaW5nIHdvcms/CiYjNDM7ICoKJiM0MzsgKiBFYWNoIGRldmljZSBoYXMgYSBTTUlfUE9MTF9DVFJMIHJlZ2lzdGVyLiBBIHBlci1wb3J0IGJpdG1hc2sgZGVjaWRlcyBpZiB0aGUgaGFyZHdhcmUgcG9sbGluZyBvZgomIzQzOyAqIHRoZSBhc3NvY2lhdGVkIGJ1cy9hZGRyZXNzIGlzIGFjdGl2ZSBvciBub3QuIFRoZSBoYXJkd2FyZSBydW5zIGEgdGlnaHQgbG9vcCBvdmVyIHRoaXMgYW5kIGZvcgomIzQzOyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlCiYjNDM7ICogTURJTyBidXMgb2YgYW4gUlRMODM4MCBhbmQgUlRMODM5MyBnaXZlcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIChpbiBrZXJuZWwgbm90YXRpb24pOgomIzQzOyAqCiYjNDM7ICoJUlRMODM4MAkJCQlSVEw4MzkzCiYjNDM7ICoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqCXBoeV93cml0ZShwaHksIDMxLCAweDApOwlwaHlfcmVhZChwaHksIDApOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDEzLCAweDcpOwlwaHlfcmVhZChwaHksIDEpOwomIzQzOyAqCXBoeV93cml0ZShwaHksIDE0LCAweDNjKTsJcGh5X3JlYWQocGh5LCA0KTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCA1KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDE0KTsJCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CXBoeV9yZWFkKHBoeSwgOSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpOwlwaHlfcmVhZChwaHksIDEwKTsKJiM0MzsgKglwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTsJcGh5X3JlYWQocGh5LCAxNSk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNCk7CQlwaHlfd3JpdGUocGh5LCAxMywgMHg3KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDkpOwkJcGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgMTApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxNSk7CQlwaHlfcmVhZChwaHksIDE0KTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDApOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCAxKTsJCXBoeV93cml0ZShwaHksIDE0LCAweDNkKTsKJiM0MzsgKglwaHlfcmVhZChwaHksIDQpOwkJcGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7CiYjNDM7ICoJcGh5X3JlYWQocGh5LCA1KTsJCXBoeV9yZWFkKHBoeSwgMTQpOwomIzQzOyAqCXBoeV9yZWFkKHBoeSwgNik7CiYjNDM7ICoKJiM0MzsgKiBGcm9tIHRoZSBhYm92ZSBzbmlwcGV0cyBpdCBwb2xscyBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB2aWEgQzQ1IG92ZXIgQzIyLiBBcwomIzQzOyAqIG9mIG5vdyBpdCBpcyB1bmNsZWFyIGhvdyB0aGUgaGFyZHdhcmUgZGVjaWRlcyBpZiBhIFBIWSBzdXBwb3J0cyB0aGVzZSByZWdpc3RlcnMuIEFmdGVyIG9uZSBQSFkKJiM0MzsgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5CiYjNDM7ICogYW5kIHRoZSBNQUMgc3RhdHVzIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLgomIzQzOyAqCiYjNDM7ICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz8KJiM0MzsgKgomIzQzOyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXIKJiM0MzsgKiBzZXRzIGEgJiMzNDtydW4gY29tbWFuZCBub3cmIzM0OyBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmUKJiM0MzsgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlcwomIzQzOyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6CiYjNDM7ICoKJiM0MzsgKglSVEw4MzgwCQkJCVJUTDgzOTMKJiM0MzsgKgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpOwlwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7CiYjNDM7ICoJcGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7CXBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpOwomIzQzOyAqCQkJCQlwaHlfd3JpdGUocGh5LCAzMSwgMCk7CiYjNDM7ICoKJiM0MzsgKiBXaGF0IGRvZXMgdGhpcyBtZWFuPwomIzQzOyAqCiYjNDM7ICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZQomIzQzOyAqIHN0YXlzIHRoZSBzYW1lLiBPbiB0aGUgb25lIGhhbmQgdGhhdCBncmVhdGx5IHNpbXBsaWZpZXMgdGhlIE1BQyBsYXllciwgb24gdGhlIG90aGVyIGhhbmQgaXQKJiM0MzsgKiBoYXMgc29tZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBrZXJuZWwgUEhZIHN1YnN5c3RlbS4KJiM0MzsgKgomIzQzOyAqIC0gV2l0aG91dCB0aGUgcG9sbGluZyBhbmQgYSBwcm9wZXIgTUFDIHN0YXR1cywgc29tZSBvZiB0aGUgbGluayBoYW5kbGluZyBmZWF0dXJlcyBkbyBub3Qgd29yay4KJiM0MzsgKiAgIEVzcGVjaWFsbHkgYW4gdW5wb3B1bGF0ZWQgTUFDX0xJTktfU1RTIHJlZ2lzdGVyIGNhbmNlbHMgb3BlcmF0aW9ucyB0byBvdGhlciBNQUMgcmVnaXN0ZXJzLgomIzQzOyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGwKJiM0MzsgKiAgIHJlYWQgdGhlIHJpZ2h0IGRhdGEuIE9uIHRoZSBSVEw4Mzh4IHBvbGxpbmcgc2ltcGx5IHJlc2V0cyBpdCB0byB6ZXJvLiBPdGhlciBkZXZpY2VzIHNlZW0KJiM0MzsgKiAgIHRvIHRyYWNrIHRoZSBwYWdlIGFjY2VzcyAmIzM0O21hZ2ljYWxseSYjMzQ7IGluIHRoZSBiYWNrZ3JvdW5kLgomIzQzOyAqIC0gQSBDNDUgb3ZlciBDMjIga2VybmVsIGFjY2VzcyBzZXF1ZW5jZSBpcyBtb3N0IGxpa2VseSB0byBmYWlsIGJlY2F1c2UgY2hhbmNlcyBhcmUgaGlnaCB0aGF0CiYjNDM7ICogICB0aGUgcG9sbGluZyBlbmdpbmUgb3ZlcndyaXRlcyByZWdpc3RlcnMgMTMvMTQgaW4gYmV0d2Vlbi4KJiM0MzsgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhbgomIzQzOyAqICAgc2VxdWVuY2Ugb2YgcmVnaXN0ZXJzIGFuZCB2YWx1ZXMgd2l0aG91dCBkZXZpYXRpb24uCiYjNDM7ICogLSBBbiBhY2Nlc3MgdG8gb25lIFBIWSB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQgZnJlZSBzbG90IG9mIHRoZSBwb2xsaW5nIGVuZ2luZS4KJiM0MzsgKgomIzQzOyAqIENvbmNsdXNpb246IFRoZSBSZWFsdGVrIE1ESU8gYnVzIGRyaXZlciBQSFkgYWNjZXNzIG11c3Qga25vdyBhbmQgaGFuZGxlIGFueSBpbnRlcmZlcmVuY2UgdGhhdAomIzQzOyAqIGFyaXNlcyBmcm9tIHRoZSBhYm92ZSBkZXNjcmliZWQgaGFyZHdhcmUgcG9sbGluZy4KICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKQEAgLTUxLDYgJiM0MzsxMTksNTAgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wcm9wZXJ0eS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JlZ21hcC5oJmd0OwogCiYjNDM7I2RlZmluZSBSVEw4MzgwX05VTV9CVVNFUwkJCTEKJiM0MzsjZGVmaW5lIFJUTDgzODBfTlVNX1BBR0VTCQkJNDA5NgomIzQzOyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFMJCQkyOAomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfR0xCX0NUUkwJCQkweGExMDAKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wCQkweGExYjgKJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xCQkweGExYmMKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUgkJR0VOTUFTSygyNCwgMjApCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFCQlHRU5NQVNLKDE5LCAxNSkKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UJCUdFTk1BU0soMTQsIDMpCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfV1JJVEUJCUJJVCgyKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQUQJCQkwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDUJCUJJVCgxKQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyCQkwCiYjNDM7I2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTAkJCTAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi8KJiM0MzsjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yCQkweGExYzAKJiM0MzsjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQomIzQzOyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEJCQlHRU5NQVNLKDE1LCAwKQomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMJCTB4YTFjNAomIzQzOyNkZWZpbmUgUlRMODM4MF9TTUlfUE9MTF9DVFJMCQkJMHhhMTdjCiYjNDM7I2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTAkJMHhhMWM4CiYjNDM7CiYjNDM7I2RlZmluZSBSVEw4MzkwX05VTV9CVVNFUwkJCTIKJiM0MzsjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTCQkJODE5MgomIzQzOyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFMJCQk1MgomIzQzOyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMCQkweDAzZWMKJiM0MzsjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMCQkweDAzZGMKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUgkJR0VOTUFTSyg5LCA1KQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRQkJR0VOTUFTSygyMiwgMTApCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRkFJTAkJCUJJVCgxKQomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFCQlCSVQoMykKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9SRUFECQkJMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1CQlCSVQoMikKJiM0MzsjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMgkJMAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQ1RSTAkJCTB4MDNlMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFCQlHRU5NQVNLKDgsIDApCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwJCTB4MDNmMAomIzQzOyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQQkJR0VOTUFTSygzMSwgMTYpCiYjNDM7I2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQQkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTAkJCTB4MDNmNAomIzQzOyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVwkJMHgwM2U0CiYjNDM7I2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSAkJMHgwM2U4CiYjNDM7I2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTAkJMHgwM2ZjCiYjNDM7CiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTCQkJNAogI2RlZmluZSBSVEw5MzAwX05VTV9QQUdFUwkJCTQwOTYKICNkZWZpbmUgUlRMOTMwMF9OVU1fUE9SVFMJCQkyOApAQCAtNzEsNiAmIzQzOzE4Myw3IEBACiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEJCUdFTk1BU0soMzEsIDE2KQogI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQQkJCUdFTk1BU0soMTUsIDApCiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zCQkweGNiN2MKJiM0MzsjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTAkJCTB4Y2E5MAogI2RlZmluZSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTAkJMHhjYjgwCiAKICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVMJCQk0CkBAIC05NiwxMSAmIzQzOzIwOSwxMyBAQAogI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBCQlHRU5NQVNLKDE1LCAwKQogI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkwJMHgwYzE4CiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfQUREUl9DVFJMCQkweDBjNzQKJiM0MzsjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMCQkweDBjY2MKICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTAkJMHgwYzljCiAKICNkZWZpbmUgUEhZX0NUUkxfQ01ECQkJCUJJVCgwKQogI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQUQJCQlHRU5NQVNLKDIwLCAxNikKICNkZWZpbmUgUEhZX0NUUkxfTU1EX1JFRwkJCUdFTk1BU0soMTUsIDApCiYjNDM7I2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUsJCQkweDAwMWNjODAwCiAKICNkZWZpbmUgTUFQX0FERFJTX1BFUl9SRUcJCQk2CiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSCQkJNQpAQCAtMTI2LDcgJiM0MzsyNDEsOSBAQCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2IHsKIAljb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvICppbmZvOwogCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogcHJvdGVjdCBIVyBhY2Nlc3MgKi8KJiM0MzsJREVDTEFSRV9CSVRNQVAocGh5X3BvbGwsIE1BWF9QT1JUUyk7CiAJREVDTEFSRV9CSVRNQVAodmFsaWRfcG9ydHMsIE1BWF9QT1JUUyk7CiYjNDM7CXUxNiBwYWdlW01BWF9QT1JUU107CiAJdTggc21pX2J1c1tNQVhfUE9SVFNdOwogCXU4IHNtaV9hZGRyW01BWF9QT1JUU107CiAJYm9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107CkBAIC0xNDMsNiAmIzQzOzI2MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gewogCXU4IG51bV9idXNlczsKIAl1OCBudW1fcG9ydHM7CiAJdTE2IG51bV9wYWdlczsKJiM0MzsJdTMyIHBvbGxfY3RybDsKIAlpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTsKIAlpbnQgKCpyZWFkX2MyMikoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpOwogCWludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTsKQEAgLTE3OCw2ICYjNDM7Mjk2LDE0IEBAIHN0YXRpYyBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpvdHRvX2VtZGlvX2J1c190b19wcml2KHN0cnVjdCBtaWlfYnVzICpidXMpCiAJcmV0dXJuIGNoYW4tJmd0O3ByaXY7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cHJpdi0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBwcml2LSZndDtpbmZvLSZndDtwb2xsX2N0cmwgJiM0MzsgKHBvcnQgLyAzMikgKiA0LAomIzQzOwkJCQkgIEJJVChwb3J0ICUgMzIpLCBhY3RpdmUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJCQkgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEpCiB7CkBAIC0xODYsOSAmIzQzOzMxMiw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsCiAJdTMyIGNtZHN0YXRlOwogCWludCByZXQ7CiAKLQkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqLwomIzQzOwkvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqLwogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIyOCw3ICYjNDM7MzU0LDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCwKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChwcml2LSZndDtyZWdtYXAsIGluZm8tJmd0O2NtZF9yZWdzLmMyMl9kYXRhLAotCQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMCk7CiYjNDM7CQkJCSAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSAmYW1wOyBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTI2NSwxMyAmIzQzOzM5MSwxMjMgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLAogCXJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LSZndDtpbmZvLSZndDtjbWRfd3JpdGUsIGNtZF9kYXRhKTsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM4MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSBCSVQocG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsICZhbXA7Y21kX2RhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwKJiM0MzsJCQkJICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewomIzQzOwkJLmM0NV9kYXRhCT0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLAomIzQzOwkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhLAomIzQzOwkJCQkgICBSVEw4MzgwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfbG93CT0gQklUKHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jMjJfZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8CiYjNDM7CQkJCSAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi0mZ3Q7cGFnZVtwb3J0XSksCiYjNDM7CQkuZXh0X3BhZ2UJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksCiYjNDM7CX07CiYjNDM7CiYjNDM7CXJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSwKJiM0MzsJCQkJICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBLCB2YWx1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAomIzQzOwkJLmV4dF9wYWdlCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKJiM0MzsJCS5wb3J0X21hc2tfaGlnaAk9ICh1MzIpKEJJVF9VTEwocG9ydCkgJmd0OyZndDsgMzIpLAomIzQzOwkJLnBvcnRfbWFza19sb3cJPSAodTMyKShCSVRfVUxMKHBvcnQpKSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgJmFtcDtjbWRfZGF0YSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LAomIzQzOwkJCQkgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7CiYjNDM7CQkuYzQ1X2RhdGEJPSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksCiYjNDM7CQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DNDUsICZhbXA7Y21kX2RhdGEsCiYjNDM7CQkJCSAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsCiYjNDM7CQkJCSAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKJiM0MzsJCS5jNDVfZGF0YQk9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSwKJiM0MzsJCS5pb19kYXRhCT0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLAomIzQzOwkJLnBvcnRfbWFza19oaWdoCT0gKHUzMikoQklUX1VMTChwb3J0KSAmZ3Q7Jmd0OyAzMiksCiYjNDM7CQkucG9ydF9tYXNrX2xvdwk9ICh1MzIpKEJJVF9VTEwocG9ydCkpLAomIzQzOwl9OwomIzQzOwomIzQzOwlyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCAmYW1wO2NtZF9kYXRhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSkKIHsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpOwogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAogCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLAogCX07CiAKQEAgLTI4NSw3ICYjNDM7NTIxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLAogCXN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0gewogCQkuYzIyX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfAogCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfAotCQkJCSAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLAomIzQzOwkJCQkgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtJmd0O3BhZ2VbcG9ydF0pLAogCQkuaW9fZGF0YQk9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSwKIAkJLnBvcnRfbWFza19sb3cJPSBCSVQocG9ydCksCiAJfTsKQEAgLTMyNSw3ICYjNDM7NTYxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmJyb2FkY2FzdAk9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSwKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAl9OwogCiAJcmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCAmYW1wO2NtZF9kYXRhLApAQCAtMzM3LDcgJiM0Mzs1NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sCiAJc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTsKIAlzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHsKIAkJLmMyMl9kYXRhCT0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHwKLQkJCQkgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSwKJiM0MzsJCQkJICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LSZndDtwYWdlW3BvcnRdKSwKIAkJLmlvX2RhdGEJPSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksCiAJCS5wb3J0X21hc2tfaGlnaAk9ICh1MzIpKEJJVF9VTEwocG9ydCkgJmd0OyZndDsgMzIpLAogCQkucG9ydF9tYXNrX2xvdwk9ICh1MzIpKEJJVF9VTEwocG9ydCkpLApAQCAtMzgzLDggJiM0Mzs2MTksMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pCiAJaWYgKHBvcnQgJmx0OyAwKQogCQlyZXR1cm4gcG9ydDsKIAotCXNjb3BlZF9ndWFyZChtdXRleCwgJmFtcDtwcml2LSZndDtsb2NrKQomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykgewomIzQzOwkJaWYgKHJlZ251bSA9PSAzMSkKJiM0MzsJCQlyZXR1cm4gcHJpdi0mZ3Q7cGFnZVtwb3J0XTsKJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7cmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sICZhbXA7dmFsdWUpOwomIzQzOwl9CiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogdmFsdWU7CiB9CkBAIC0zOTgsOCAmIzQzOzYzOCwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNgogCWlmIChwb3J0ICZsdDsgMCkKIAkJcmV0dXJuIHBvcnQ7CiAKLQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCWlmIChyZWdudW0gPT0gMzEpIHsKJiM0MzsJCQlpZiAodmFsdWUgJmd0Oz0gUkFXX1BBR0UocHJpdikpCiYjNDM7CQkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJCXByaXYtJmd0O3BhZ2VbcG9ydF0gPSB2YWx1ZTsKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCX0KJiM0MzsKIAkJcmV0ID0gcHJpdi0mZ3Q7aW5mby0mZ3Q7d3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7CiYjNDM7CX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC00NzIsNiAmIzQzOzcyMSwxNSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFBIWV9QQVRDSF9ET05FIGVuYWJsZXMgUEhZIGNvbnRyb2wgdmlhIFNvQy4gVGhpcyBpcyByZXF1aXJlZCBmb3IgUEhZIGFjY2VzcywgaW5jbHVkaW5nCiYjNDM7CSAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiByZWdtYXBfc2V0X2JpdHMocHJpdi0mZ3Q7cmVnbWFwLCBSVEw4MzgwX1NNSV9HTEJfQ1RSTCwgUlRMODM4MF9TTUlfUEhZX1BBVENIX0RPTkUpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdikKIHsKIAl1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7CkBAIC01MDgsNiAmIzQzOzc2Niw1NCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi0mZ3Q7bWRpby5idXMpOwomIzQzOwlpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LSZndDttZGlvLmJ1cywgcGh5ZGV2LSZndDttZGlvLmFkZHIpOwomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHBvcnQ7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X2JpdChwb3J0LCBwcml2LSZndDtwaHlfcG9sbCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtzbWlfYnVzX2lzX2M0NVtjaGFuLSZndDttZGlvX2J1c10gJmFtcDsmYW1wOwomIzQzOwkgICAgKCFwaHlfaWRfY29tcGFyZV92ZW5kb3IocGh5ZGV2LSZndDtwaHlfaWQsIFBIWV9WRU5ET1JfUkVBTFRFSykpKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDtPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykgewomIzQzOwkJcmV0ID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIHRydWUpOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJX19zZXRfYml0KHBvcnQsIHByaXYtJmd0O3BoeV9wb2xsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtJmd0O21kaW8uYnVzKTsKJiM0MzsJaW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi0mZ3Q7bWRpby5idXMsIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi0mZ3Q7bWRpby5idXM7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc2NvcGVkX2d1YXJkKG11dGV4LCAmYW1wO3ByaXYtJmd0O2xvY2spIHsKJiM0MzsJCXJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlfX2NsZWFyX2JpdChwb3J0LCBwcml2LSZndDtwaHlfcG9sbCk7CiYjNDM7CX0KJiM0MzsJCiYjNDM7CWlmIChyZXQpCiYjNDM7CQlkZXZfZXJyKGJ1cy0mZ3Q7cGFyZW50LCAmIzM0O2ZhaWxlZCB0byBkaXNhYmxlIHBvbGxpbmcgZm9yIHBvcnQgJWRcbiYjMzQ7LCBwb3J0KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwKIAkJCQkgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpCiB7CkBAIC01MzcsNiAmIzQzOzg0Myw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2CiAJCWJ1cy0mZ3Q7d3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjsKIAl9CiAJYnVzLSZndDtwYXJlbnQgPSBkZXY7CiYjNDM7CWJ1cy0mZ3Q7bm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoOwomIzQzOwlidXMtJmd0O25vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDsKJiM0MzsKIAljaGFuID0gYnVzLSZndDtwcml2OwogCWNoYW4tJmd0O21kaW9fYnVzID0gbWRpb19idXM7CiAJY2hhbi0mZ3Q7cHJpdiA9IHByaXY7CkBAIC02NTMsNiAmIzQzOzk2MiwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldikKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgJmx0OyBwcml2LSZndDtpbmZvLSZndDtudW1fcG9ydHM7IHBvcnQmIzQzOyYjNDM7KSB7CiYjNDM7CQlzY29wZWRfZ3VhcmQobXV0ZXgsICZhbXA7cHJpdi0mZ3Q7bG9jaykgewomIzQzOwkJCWVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7CiYjNDM7CQkJaWYgKGVycikKJiM0MzsJCQkJcmV0dXJuIGVycjsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BkZXYtJmd0O2RldjsKQEAgLTY3Miw2ICYjNDM7OTk2LDEwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCWlmIChJU19FUlIocHJpdi0mZ3Q7cmVnbWFwKSkKIAkJcmV0dXJuIFBUUl9FUlIocHJpdi0mZ3Q7cmVnbWFwKTsKIAomIzQzOwllcnIgPSBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhwcml2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAKIAllcnIgPSBvdHRvX2VtZGlvX21hcF9wb3J0cyhkZXYpOwpAQCAtNjk3LDYgJiM0MzsxMDI1LDUxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7CiYjNDM7CS5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsCiYjNDM7CS5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCwKJiM0MzsJLmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELAomIzQzOwkuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSwKJiM0MzsJLmNtZF9yZWdzID0gewomIzQzOwkJLmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsCiYjNDM7CQkuYzQ1X2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMywKJiM0MzsJCS5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsCiYjNDM7CQkucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLAomIzQzOwl9LAomIzQzOwkubnVtX2J1c2VzID0gUlRMODM4MF9OVU1fQlVTRVMsCiYjNDM7CS5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUywKJiM0MzsJLm51bV9wb3J0cyA9IFJUTDgzODBfTlVNX1BPUlRTLAomIzQzOwkucG9sbF9jdHJsID0gUlRMODM4MF9TTUlfUE9MTF9DVFJMLAomIzQzOwkuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLAomIzQzOwkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjIsCiYjNDM7CS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NSwKJiM0MzsJLndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsCiYjNDM7CS53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzkwX2luZm8gPSB7CiYjNDM7CS5jbWRfZmFpbCA9IFJUTDgzOTBfUEhZX0NUUkxfRkFJTCwKJiM0MzsJLmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELAomIzQzOwkuY21kX3dyaXRlID0gUlRMODM5MF9QSFlfQ1RSTF9XUklURSwKJiM0MzsJLmNtZF9yZWdzID0gewomIzQzOwkJLmJyb2FkY2FzdCA9IFJUTDgzOTBfQkNBU1RfUEhZSURfQ1RSTCwKJiM0MzsJCS5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLAomIzQzOwkJLmM0NV9kYXRhID0gUlRMODM5MF9QSFlSRUdfTU1EX0NUUkwsCiYjNDM7CQkuZXh0X3BhZ2UgPSBSVEw4MzkwX1BIWVJFR19DVFJMLAomIzQzOwkJLmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsCiYjNDM7CQkucG9ydF9tYXNrX2xvdyA9IFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1csCiYjNDM7CQkucG9ydF9tYXNrX2hpZ2ggPSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSCwKJiM0MzsJfSwKJiM0MzsJLm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLAomIzQzOwkubnVtX3BhZ2VzID0gUlRMODM5MF9OVU1fUEFHRVMsCiYjNDM7CS5udW1fcG9ydHMgPSBSVEw4MzkwX05VTV9QT1JUUywKJiM0MzsJLnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLAomIzQzOwkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIsCiYjNDM7CS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NSwKJiM0MzsJLndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsCiYjNDM7CS53cml0ZV9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1LAomIzQzO307CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMDBfaW5mbyA9IHsKIAkuYWRkcl9tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMLAogCS5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCwKQEAgLTcxMiw2ICYjNDM7MTA4NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0gewogCS5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUywKIAkubnVtX3BvcnRzID0gUlRMOTMwMF9OVU1fUE9SVFMsCiAJLm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLAomIzQzOwkucG9sbF9jdHJsID0gUlRMOTMwMF9TTUlfUE9MTF9DVFJMLAogCS5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsCiAJLnJlYWRfYzIyID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzIyLAogCS5yZWFkX2M0NSA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NSwKQEAgLTczNyw2ICYjNDM7MTExMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0gewogCS5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUywKIAkubnVtX3BhZ2VzID0gUlRMOTMxMF9OVU1fUEFHRVMsCiAJLm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLAomIzQzOwkucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsCiAJLnNldHVwX2NvbnRyb2xsZXIgPSBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlciwKIAkucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsCiAJLnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LApAQCAtNzQ1LDYgJiM0MzsxMTIwLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzEwX2luZm8gPSB7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvdHRvX2VtZGlvX2lkc1tdID0gewomIzQzOwl7IC5jb21wYXRpYmxlID0gJiMzNDtyZWFsdGVrLHJ0bDgzODAtbWRpbyYjMzQ7LCAuZGF0YSA9ICZhbXA7b3R0b19lbWRpb184MzgwX2luZm8gfSwKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxydGw4MzkxLW1kaW8mIzM0OywgLmRhdGEgPSAmYW1wO290dG9fZW1kaW9fODM5MF9pbmZvIH0sCiAJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxydGw5MzAxLW1kaW8mIzM0OywgLmRhdGEgPSAmYW1wO290dG9fZW1kaW9fOTMwMF9pbmZvIH0sCiAJeyAuY29tcGF0aWJsZSA9ICYjMzQ7cmVhbHRlayxydGw5MzExLW1kaW8mIzM0OywgLmRhdGEgPSAmYW1wO290dG9fZW1kaW9fOTMxMF9pbmZvIH0sCiAJe30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDA2MTUyMjg0NTllZjQyLi42NzZjYmYxODMzNTBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCkBAIC0xODc2LDYgJiM0MzsxODc2LDEyIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7CiAKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfYXR0YWNoKSB7CiYjNDM7CQllcnIgPSBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIGVycm9yOwomIzQzOwl9CiYjNDM7CiAJcGh5X3Jlc3VtZShwaHlkZXYpOwogCiAJLyoqCkBAIC0xOTE5LDYgJiM0MzsxOTI1LDkgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJc3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7CiAJc3RydWN0IG1paV9idXMgKmJ1czsKIAomIzQzOwlpZiAocGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bm90aWZ5X3BoeV9kZXRhY2gpCiYjNDM7CQlwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpOwomIzQzOwogCWlmIChwaHlkZXYtJmd0O2RldmxpbmspIHsKIAkJZGV2aWNlX2xpbmtfZGVsKHBoeWRldi0mZ3Q7ZGV2bGluayk7CiAJCXBoeWRldi0mZ3Q7ZGV2bGluayA9IE5VTEw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAxOTlhN2FhYTM0MWJmZC4uMzE2MGNhOTlkZWFiNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaApAQCAtMzc2LDYgJiM0MzszNzYsMTAgQEAgc3RydWN0IG1paV9idXMgewogCQkJIGludCByZWdudW0sIHUxNiB2YWwpOwogCS8qKiBAcmVzZXQ6IFBlcmZvcm0gYSByZXNldCBvZiB0aGUgYnVzICovCiAJaW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpOwomIzQzOwkvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovCiYjNDM7CWludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKJiM0MzsJLyoqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nICovCiYjNDM7CXZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiAKIAkvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovCiAJc3RydWN0IG1kaW9fYnVzX3N0YXRzIHN0YXRzW1BIWV9NQVhfQUREUl07CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTk2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIGZvciBUZXN0YWJpbGl0eSBpbiB0aGUgUEhZIFN1YnN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMuIEl0IHNlZW1zIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgc2V2ZXJhbCBhcmVhczogdGhlIFJlYWx0ZWsgTURJTyBjb250cm9sbGVyIGRyaXZlciwgZGV2aWNlIHRyZWUgYmluZGluZ3MsIGFuZCB0aGVuIHNvbWUgY29yZSBQSFkgc3Vic3lzdGVtIGZpbGVzIChgcGh5X2RldmljZS5jYCBhbmQgYHBoeS5oYCkuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgYWRkaW5nIHRoZXNlIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBgbWlpX2J1c2Agc3RydWN0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIGFjdHVhbGx5ICp0ZXN0KiB0aGlzIGVmZmVjdGl2ZWx5PyBJcyBpdCBldmVuICp3b3J0aCogZnV6emluZz8mIzM0OwoKVGhlIGNoYW5nZXMgdG8gYHBoeV9kZXZpY2UuY2Ag4oCTIGFkZGluZyB0aG9zZSBjYWxsYmFja3MgYW5kIHVzaW5nIHRoZW0gaW4gYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIOKAkyB0aGF04oCZcyBjb3JlIFBIWSBzdHVmZi4gRGVmaW5pdGVseSByZWFjaGFibGUuIEkmIzM5O20gbGVzcyBzdXJlIGFib3V0IHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyLCBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIFRoYXQmIzM5O3MgaGFyZHdhcmUtc3BlY2lmaWMuIEkmIzM5O20gZ3Vlc3NpbmcgaXQmIzM5O3MgcHJvYmFibHkgKm5vdCogZ29pbmcgdG8gYmUgcmVhY2hhYmxlIGluIG1hbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBvciB3ZSYjMzk7cmUgdXNpbmcgZGV2aWNlIHRyZWUgb3ZlcmxheXMgc29tZWhvdy4gQnV0IHRoZSAqY29yZSogUEhZIHN1YnN5c3RlbSBjaGFuZ2VzPyBUaG9zZSBhcmUgZmFpciBnYW1lLgoKQWxyaWdodCwgbGV0JiMzOTtzIGxvb2sgY2xvc2VyIGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYC4gQWgsIHJpZ2h0LCB0aGV5JiMzOTtyZSBjYWxsaW5nIHRob3NlIG5ldyBjYWxsYmFja3M6IGBwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpYCBhbmQgYHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfZGV0YWNoKHBoeWRldilgLiBPa2F5LCB0aGF0JiMzOTtzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGZvciBzdXJlLiBJdCYjMzk7cyBhIHByZXR0eSBjbGVhbiBjaGFuZ2UsIHNvIGxldCYjMzk7cyBzdGFydCBmdXp6aW5nIGFyb3VuZCB0aGF0IHNlY3Rpb24uCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyB0aWVkIHRvIGFueSBzcGVjaWZpYyBLY29uZmlnIG9wdGlvbnMuIE9idmlvdXNseSwgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHJlcXVpcmVzIGBDT05GSUdfUEhZTElCYC4gSSB3b25kZXIgYWJvdXQgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBJcyB0aGVyZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhhdCBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpby1yZWFsdGVrLXJ0bDkzMDAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZT0yMz1vYmotJChDT05GSUdfTURJT19QSUM2NEhQU0MpXHRcdCYjNDM7PSBtZGlvLXBpYzY0aHBzYy5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMClcdCYjNDM7PSBtZGlvLXJlYWx0ZWstcnRsOTMwMC5vXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19NRElPX1JFR01BUClcdFx0JiM0Mzs9IG1kaW8tcmVnbWFwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDAwOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UmIzM5O3ZlIGRlc2NyaWJlZDoKCioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIFJUTDkzMDAgTURJTyBTdXBwb3J0KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGlzIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvbWRpby9gIGRpcmVjdG9yeS4gSSBrbm93IHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG5ldHdvcmsgTURJTyBkcml2ZXIgY29uZmlndXJhdGlvbnMgYXJlIHR5cGljYWxseSBob3VzZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHN5bWJvbCBgQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBLbm93aW5nIHRoYXQgc3ltYm9sJiMzOTtzIHByZXNlbmNlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzcGVjaWZpYyBNRElPIGRyaXZlciBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGl0IGNvbWVzIHRvIHRoZSBidWlsZC4gSSBleHBlY3QgdGhlIGZpbGUgd2lsbCBnaXZlIG1lIGRldGFpbHMgYXJvdW5kIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IGFuZCBhbnkgcmVsZXZhbnQgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCBpZiBpdCBpcyBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY0PWNvbmZpZyBNRElPX0lQUTgwNjRcbi0tXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTcxLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3Mjpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzMtXHR0cmlzdGF0ZSBcJiMzNDtSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mzg3CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogODg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXM6IFBIWSBDb3JlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgLCB3aGljaCBpcyByaWdodCBpbiB0aGUgY29yZSBQSFkgY29kZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBpcyB0aGlzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydD8gSXQmIzM5O3MgYWRkaW5nIHR3byBuZXcgY2FsbGJhY2tzLCBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgLCB0byB0aGUgYG1paV9idXNgIHN0cnVjdC4gQXQgZmlyc3QgZ2xhbmNlLCBpdCBzZWVtcyB0aGUgY29yZSBjaGFuZ2UgaXMgc2ltcGxlOiBhIG5vbi1OVUxMIGNoZWNrIGFuZCBmdW5jdGlvbiBjYWxsLgoKVGhlIHByaW1hcnkgdXNlciBvZiB0aGVzZSBuZXcgY2FsbGJhY2tzIGFwcGVhcnMgdG8gYmUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBOb3csIGJlY2F1c2UgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgbXkgaW50dWl0aW9uIHNheXMgaXQmIzM5O3MgdW5saWtlbHkgdG8gYmUgdHJpZ2dlcmVkIGluIGEgZ2VuZXJhbCB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwLiBCdXQsIHdlIGFsbCBrbm93IGludHVpdGlvbiBoYXMgdG8gYmUgY2hhbGxlbmdlZC4KClRoZSBjb3JlIFBIWSBjb2RlIGlzICpkZWZpbml0ZWx5KiByZWFjaGFibGUuIEJ1dCwgaWYgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgIGlzbiYjMzk7dCB1c2VkLCB0aGUgY2FsbGJhY2tzIHdpbGwgYmUgYE5VTExgLCBhbmQgdGhlIGNvZGUgd29uJiMzOTt0IGV4ZWN1dGUsIG1ha2luZyB0aGF0IHBhcnQgb2YgdGhlIHBhdGNoIGlycmVsZXZhbnQuIFRoZSBpbXBvcnRhbnQgYml0IHRvIHJlbWVtYmVyIGhlcmUgaXMgdGhhdCBhIHN5emthbGxlciBzdHlsZSBmdXp6ZXIgY2FuIGZha2UgZGV2aWNlIHRyZWVzIG9yIHBlcmZvcm0gcGxhdGZvcm0gZGV2aWNlIGluamVjdGlvbnMuCgpMZXQmIzM5O3Mgc2VlOiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFN5emthbGxlciBjYW4gcHJvYmUgcGxhdGZvcm0gZHJpdmVycyB2aWEgYHN5el9kZXZtZW1gIG9yIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSwgb3IgaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLiBJdCYjMzk7cyAqcG9zc2libGUqIHdlIGNhbiBnZXQgdGhpcyBkcml2ZXIgcHJvYmVkLiBJZiB0aGF0IGhhcHBlbnMsIHRoZSBgYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaGAgcG9pbnRlciB3aWxsIGJlIHNldCB0byBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAuCgpTbywgd2hhdCBkb2VzIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCAqZG8qPyBJdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLCBzcGVjaWZpY2FsbHkgdmlhIGByZWdtYXBgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcsIGFzIGl0IGNvdWxkIGp1c3QgZmFpbCBhdCBwcm9iZSBpZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIG9yLCBiZWNhdXNlIGl0IHVzZXMgYHJlZ21hcC1tbWlvYCwgaXQgbWlnaHQgcmVhZC93cml0ZSB0byBtZW1vcnksIHdoaWNoIGNhbiBiZSBleHBsb2l0YWJsZS4KClRvIHByb2NlZWQsIGxldCBtZSBleGFtaW5lIGhvdyBgcmVnbWFwYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gYG90dG9fZW1kaW9fcHJvYmVgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGluZGljYXRpb24gb2YgaG93IGxpa2VseSB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFyZSB0byBjYXVzZSBpc3N1ZXMgaW4gYSBmdXp6ZWQgZW52aXJvbm1lbnQuIFdlIG5lZWQgdG8gZm9sbG93IHdoZXJlIHRoZSBtZW1vcnkgYWNjZXNzZXMgYXJlIGdvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bV9yZWdtYXBfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NDAKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIFJUTDkzMDAgTURJTyBEcml2ZXIqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBvdHRvX2VtZGlvX3Byb2JlYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiAgSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIgdGhlcmUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgaW5pdGlhbGl6ZXMgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBNRElPIGJ1cywgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBkZXRhaWxzIG9mIHRoZSBSVEw5MzAwLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiB0aGUgZHJpdmVyJiMzOTtzIGFiaWxpdHkgdG8gZGlzY292ZXIgYW5kIGNvbmZpZ3VyZSB0aGUgYXR0YWNoZWQgUEhZcywgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiB0aG9yb3VnaGx5LiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGRldmljZSBzZXR1cCBsb2dpYyBsaXZlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3R0b19lbWRpb19wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9Nzk3PXN0YXRpYyB2b2lkIG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODE2LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjgxNzpzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdixcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04MTgtXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTk2NT1zdGF0aWMgaW50IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTk3OS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo5ODA6c3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtOTgxLXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTAxOS1cdGRldmljZV9mb3JfZWFjaF9jaGlsZF9ub2RlX3Njb3BlZChkZXYsIGNoaWxkKSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MTAyMDpcdFx0ZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMTAyMS1cdFx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MTEzMT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvdHRvX2VtZGlvX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxMTMyOlx0LnByb2JlID0gb3R0b19lbWRpb19wcm9iZSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMTMzLVx0LmRyaXZlciA9IHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2NTMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIFJlZ2lzdGVyIE1hcCBBY3F1aXNpdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBvdHRvX2VtZGlvX3Byb2JlYC4gVGhlIGdvYWwgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB3ZSYjMzk7cmUgZ2V0dGluZyB0aGF0IGBwcml2LSZndDtyZWdtYXBgIGhhbmRsZS4gVW5kZXJzdGFuZGluZyBob3cgdGhlIHJlZ2lzdGVyIG1hcCBpcyBpbml0aWFsaXplZCBhbmQgYWNjZXNzZWQgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBhbnkgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIGFuZCB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIHRvIG1ha2Ugc3VyZSB0aGUgYXNzdW1wdGlvbnMgbWFkZSBhcmUgY29ycmVjdC4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSBzZXQgdXAgdGhpcyBjcnVjaWFsIHBpZWNlIG9mIHRoZSBkcml2ZXIgaW5mcmFzdHJ1Y3R1cmUuIEtub3dpbmcgdGhpcyBpcyBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODA6XHRzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiA5ODE6XHR7XG4gOTgyOlx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiA5ODM6XHRcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXY7XG4gOTg0Olx0XHRpbnQgZXJyO1xuIDk4NTpcdFxuIDk4NjpcdFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuIDk4NzpcdFx0aWYgKCFwcml2KVxuIDk4ODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA5ODk6XHRcbiA5OTA6XHRcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4gOTkxOlx0XHRpZiAoZXJyKVxuIDk5MjpcdFx0XHRyZXR1cm4gZXJyO1xuIDk5MzpcdFxuIDk5NDpcdFx0cHJpdi1cdTAwM2VpbmZvID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XG4gOTk1Olx0XHRwcml2LVx1MDAzZXJlZ21hcCA9IHN5c2Nvbl9ub2RlX3RvX3JlZ21hcChkZXYtXHUwMDNlcGFyZW50LVx1MDAzZW9mX25vZGUpO1xuIDk5NjpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gOTk3Olx0XHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiA5OTg6XHRcbiA5OTk6XHRcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuMTAwMDpcdFx0aWYgKGVycilcbjEwMDE6XHRcdFx0cmV0dXJuIGVycjtcbjEwMDI6XHRcbjEwMDM6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuMTAwNDpcdFxuMTAwNTpcdFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbjEwMDY6XHRcdGlmIChlcnIpXG4xMDA3Olx0XHRcdHJldHVybiBlcnI7XG4xMDA4Olx0XG4xMDA5Olx0XHRlcnIgPSBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHByaXYpO1xuMTAxMDpcdFx0aWYgKGVycilcbjEwMTE6XHRcdFx0cmV0dXJuIGVycjtcbjEwMTI6XHRcbjEwMTM6XHRcdGlmIChwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xuMTAxNDpcdFx0XHRlcnIgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcbjEwMTU6XHRcdFx0aWYgKGVycilcbjEwMTY6XHRcdFx0XHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXCYjMzQ7ZmFpbGVkIHRvIHNldHVwIE1ESU8gYnVzIGNvbnRyb2xsZXJcXG5cJiMzNDspO1xuMTAxNzpcdFx0fVxuMTAxODpcdFxuMTAxOTpcdFx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHtcbjEwMjA6XHRcdFx0ZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7XG4xMDIxOlx0XHRcdGlmIChlcnIpXG4xMDIyOlx0XHRcdFx0cmV0dXJuIGVycjtcbjEwMjM6XHRcdH1cbjEwMjQ6XHRcbjEwMjU6XHRcdHJldHVybiAwO1xuMTAyNjpcdH1cbjEwMjc6XHRcbjEwMjg6XHRzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbjEwMjk6XHRcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NTc3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgUG90ZW50aWFsOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogaXQgdXNlcyBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCwgd2hpY2ggbWVhbnMgaXQgKmV4cGVjdHMqIHRoZSBwYXJlbnQgbm9kZSB0byBiZSBhIHN5c2Nvbi4gVGhhdCBzdWdnZXN0cyBhIHNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLiBCdXQgaXMgaXQgKndvcnRoKiB0aGUgZWZmb3J0PwoKVGhlIHBhdGNoIGFkZHMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCB0byB0aGUgYHN0cnVjdCBtaWlfYnVzYCBhbmQgY2FsbHMgdGhlbSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIFRob3NlIGFyZSBjb3JlIFBIWSBzdWJzeXN0ZW0gZnVuY3Rpb25zLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgZXZlbiBpZiB0aGUgc3BlY2lmaWMgZHJpdmVyIGlzbiYjMzk7dCBpbW1lZGlhdGVseSByZWFjaGFibGUsIHRoZSBjb3JlIGNoYW5nZXMgYXJlLCB3aGljaCBpbmNyZWFzZXMgdGhlIGxpa2VsaWhvb2Qgb2YgZmluZGluZyBzb21ldGhpbmcgaW50ZXJlc3RpbmcuCgpIYW5nIG9uLi4uIHRoZSBjb3JlIGNoYW5nZXMgYXJlICpqdXN0KiB0aGlzIGZ1bmN0aW9uIHBvaW50ZXIgY2FsbDoKCmBgYGMKCWlmIChwaHlkZXYtJmd0O21kaW8uYnVzLSZndDtub3RpZnlfcGh5X2F0dGFjaCkgewoJCWVyciA9IHBoeWRldi0mZ3Q7bWRpby5idXMtJmd0O25vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7CgkJaWYgKGVycikKCQkJZ290byBlcnJvcjsKCX0KYGBgCgpUaGF0JiMzOTtzIGEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gcG9pbnRlci4gSWYgbm8gb3RoZXIgZHJpdmVyIGFjdHVhbGx5IHVzZXMgaXQsIHRoaXMgaXMgZXNzZW50aWFsbHkgYSBOVUxMIGNoZWNrLiBJcyBpdCBldmVuIHdvcnRoIGZ1enppbmcganVzdCBmb3IgYSBOVUxMIGNoZWNrPyBQcm9iYWJseSBub3QgYSBnb29kIHVzZSBvZiByZXNvdXJjZXMuCgpBaCwgYnV0IHdhaXQhIFRoZSBwYXRjaCAqYWxzbyogc2lnbmlmaWNhbnRseSBtb2RpZmllcyBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIEl0IGFkZHMgcG9sbGluZyBzdXBwb3J0IHRvIHRoZSBSZWFsdGVrIE1ESU8gZHJpdmVyISAqVGhhdCogc291bmRzIG11Y2ggbW9yZSBwcm9taXNpbmcuIENhbiAqdGhpcyogZHJpdmVyIGJlIGZ1enplZD8KClN5emthbGxlciBjYW4gaW5qZWN0IGRldmljZSB0cmVlcywgYW5kIHRoYXQmIzM5O3MgdGhlIGtleS4gSWYgaXQgY2FuIGluamVjdCBhIHN5c2NvbiBwYXJlbnQgKHdoaWNoIGlzIGVhc3kgZW5vdWdoLCBzaW5jZSBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCBqdXN0IG5lZWRzIGEgY29tcGF0aWJsZSBzdHJpbmcpIGFuZCAqdGhpcyogZGV2aWNlLCBpdCBjYW4gcHJvYmUgaXQuIFRoZSBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCBjYWxsIGlzIHNhdGlzZmllZCBpZiB0aGUgcGFyZW50IG5vZGUgaGFzIGEgY29tcGF0aWJsZSBzdHJpbmcgdGhhdCBtYXRjaGVzIGEgc3lzY29uIGRyaXZlci4KClNvIGlzIGl0IHdvcnRoIGZ1enppbmc/IFllcywgYWJzb2x1dGVseS4gSXQmIzM5O3MgYSBkcml2ZXIsIGFuZCBTeXprYWxsZXIgZXhjZWxzIGF0IGZ1enppbmcgZHJpdmVycy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwYCBpcyBlbmFibGVkIG9yIGF0IGxlYXN0IGNhbiBiZSBlbmFibGVkLiBJdCYjMzk7cyB0cmlzdGF0ZS4gR3JlYXQsIGl0ICpjYW4qIGJlIGVuYWJsZWQuIFRoYXQmIzM5O3MgZmFudGFzdGljLiBMZXQgbWUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyB0aGF0IEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4gSnVzdCBgQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBMZXQgbWUgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby9LY29uZmlnPTE2ND1jb25maWcgTURJT19JUFE4MDY0XG4tLVxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3MS1cbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZzoxNzI6Y29uZmlnIE1ESU9fUkVBTFRFS19SVEw5MzAwXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NTUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBNRElPX1JFQUxURUtfUlRMOTMwMGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoaXMgbW9kdWxlLiBBcyBhbiBleHBlcnQgaW4gZW1iZWRkZWQgc3lzdGVtcyBhcmNoaXRlY3R1cmUsIEkgbmVlZCB0byBrbm93ICpldmVyeXRoaW5nKiBpdCByZWxpZXMgb24gdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBkZWJ1Z2dpbmcsIHBvcnRpbmcsIG9yIGV2ZW4ganVzdCB1bmRlcnN0YW5kaW5nIGl0cyBwbGFjZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycy4uLiBkb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzPyBLZXJuZWwgZHJpdmVycz8gUG9zc2libHkgbG93LWxldmVsIHJlZ2lzdGVyIGRlZmluaXRpb25zPyBBbmQgd2hhdCBhYm91dCBwb3RlbnRpYWwgdXNlci1zcGFjZSBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXM/IEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIG1hcCBvZiBhbGwgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0IG1ha2UgdXAgdGhpcyBtb2R1bGUgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MjpcdGNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxuIDE3MzpcdFx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayBSVEw5MzAwIE1ESU8gaW50ZXJmYWNlIHN1cHBvcnRcJiMzNDtcbiAxNzQ6XHRcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcbiAxNzU6XHRcdGhlbHBcbiAxNzY6XHRcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBSZWFsdGVrXG4gMTc3Olx0XHQgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXG4gMTc4Olx0XG4gMTc5Olx0Y29uZmlnIE1ESU9fUkVHTUFQXG4gMTgwOlx0XHR0cmlzdGF0ZVxuIDE4MTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE2MAoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE3NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgUmVhbHRlayBSVEw5MzAwIE1ESU8gSGFyZHdhcmUgUG9sbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGUgbmV3IGhhcmR3YXJlIHBvbGxpbmcgc3VwcG9ydCBmb3IgdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGNvbnRyb2xsZXIuICBJdCBsb29rcyBsaWtlIHRoaXMgY2FuIGJlIGVuYWJsZWQgd2l0aCBgQ09NUElMRV9URVNUYCwgd2hpY2ggaXMgb2Z0ZW4gYWxyZWFkeSBlbmFibGVkIGluIFN5emthbGxlciwgYnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGF0LiAgVGhlIHByaW1hcnkgY29uZmlnIGlzIGBNRElPX1JFQUxURUtfUlRMOTMwMGAgYW5kIEkmIzM5O2xsIG1ha2Ugc3VyZSB0aGF0IGdldHMgZXhwbGljaXRseSBzZXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdC4KCkkmIzM5O3ZlIGdvdCB0aGUgZHJpdmVyIHVzaW5nIHJlZ21hcCBmb3IgTU1JTywgYW5kIFN5emthbGxlciBjYW4gaGFuZGxlIHRoYXQgdGhyb3VnaCBhIG1vY2sgb3IgbWVtb3J5IG1hcHBpbmcsIHNvIHRoYXQmIzM5O3MgZ29vZC4gYHN5c2Nvbl9ub2RlX3RvX3JlZ21hcGAgaXMgdXN1YWxseSBob3cgaXQgbWFwcyB0byBNTUlPLCBzbyBkZXZpY2UgdHJlZSBpbmplY3Rpb24gc2hvdWxkIHdvcmsuIFRoZSBjb3JlIGNoYW5nZXMgYXJlIG1pbm9yLCBtb3N0bHkgYWRkaW5nIHRob3NlIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBgbWlpX2J1c2Agc3RydWN0LiBUaGUgYnVsayBvZiB0aGUgbG9naWMgaXMgaW4gdGhlIGRyaXZlciBpdHNlbGYsIGluIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4KClRoZSBrZXkgZnVuY3Rpb25zIHRvIGNvbmNlbnRyYXRlIG9uIGFyZSBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAsIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoYCwgYG90dG9fZW1kaW9faW5pdF9wb2xsaW5nYCwgYG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZ2AsIGFuZCBhbGwgb2YgdGhlIGBvdHRvX2VtZGlvXypfcmVhZF9jIyNgIGFuZCBgb3R0b19lbWRpb18qX3dyaXRlX2MjI2AgZnVuY3Rpb25zIChmb3IgYm90aCA4MzgwIGFuZCA4MzkwKS4gSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAgc2luY2UgdGhleSBhcmUgY29yZSBmdW5jdGlvbnMgYW5kIGFyZSBvbiB0aGUgaG90IHBhdGgsIGJ1dCB0aGV5IGFyZSB2ZXJ5IGdlbmVyaWMgYW5kIHdvdWxkIHB1bGwgaW4gYSBsb3Qgb2Ygb3RoZXIgUEhZIGRyaXZlcnMgaW50byB0aGUgbWl4LiBUaGlzIGlzIG5vdCB3aGF0IEkgd2FudC4gVGhleSBhcmUgYWxzbyBjb250cm9sIHBhdGguIFNvLCBJIHdpbGwgZm9jdXMgb24gdGhlIGBvdHRvX2VtZGlvXypgIGZ1bmN0aW9ucyBhcyB0aGV5IHRhcmdldCB0aGUgbmV3IGNvZGUgZGlyZWN0bHkuCgpTcGVjaWZpY2FsbHksIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCBpcyByZWFjaGFibGUuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZSBNRElPIGJ1cyBkdXJpbmcgcHJvYmUsIGFuZCB0aGVuIFBIWSBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCwgd2hpY2ggY2FsbHMgYHBoeV9hdHRhY2hfZGlyZWN0YCwgd2hpY2ggdGhlbiBjYWxscyBgbm90aWZ5X3BoeV9hdHRhY2hgLiBTbywgdGhhdCYjMzk7cyBkZWZpbml0ZWx5IGEgdmlhYmxlIGVudHJ5IHBvaW50LiBUaGUgc2FtZSBnb2VzIGZvciB0aGUgb3RoZXIgZnVuY3Rpb25zOgotICAgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgCi0gICBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaGAKLSAgIGBvdHRvX2VtZGlvX2luaXRfcG9sbGluZ2AKLSAgIGBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmdgCi0gICBgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXJgCi0gICBgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyYAotICAgYG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjJgCi0gICBgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1YAotICAgYG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDVgCi0gICBgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyYAotICAgYG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjJgCi0gICBgb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1YAotICAgYG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDVgCgpUaGlzIGlzIGEgbmV3IGZlYXR1cmUgaW4gTURJTyBkcml2ZXIgYW5kIGNvcmUgUEhZIHN1YnN5c3RlbSwgc28gZnV6emluZyB0aGVzZSBpcyBhIGdvb2QgaWRlYS4gIFRoZSBwcmltYXJ5IGNvbmZpZyBuZWVkZWQgaXMgYE1ESU9fUkVBTFRFS19SVEw5MzAwYCBhbmQgaXQgZGVwZW5kcyBvbiBgTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RgLgoKSSB0aGluayB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIGl0LiBJJiMzOTt2ZSBuYXJyb3dlZCBkb3duIHRoZSB0YXJnZXQsIHVuZGVyc3RhbmQgdGhlIHJlYWNoYWJpbGl0eSBhbmQgc2V0dXAsIGFuZCBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgY29uZmlnIG9wdGlvbnMgdG8gcHJpb3JpdGl6ZS4gIExldCYjMzk7cyBnZXQgdG8gZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDUgMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnN0YXRpYy4qb3R0b19lbWRpb18uKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9MjcxPXN0cnVjdCBvdHRvX2VtZGlvX2NoYW4ge1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yNzUtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6Mjc2OnN0YXRpYyBpbnQgb3R0b19lbWRpb19waHlfdG9fcG9ydChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTI3Ny17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTI5MS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoyOTI6c3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yOTMte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yOTgtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6Mjk5OnN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIGludCBwb3J0LCBib29sIGFjdGl2ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zMDAte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zMDYtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6MzA3OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzA4LVx0XHRcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzYzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjM2NDpzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zNjUtXHRcdFx0ICAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSwgdTMyIG1hc2ssIHUzMiAqdmFsdWUpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTM4My1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzozODQ6c3RhdGljIGludCBvdHRvX2VtZGlvX3dyaXRlX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTM4NS1cdFx0XHRcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzkzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjM5NDpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zOTUte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00MDctXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NDA4OnN0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTQwOS17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTQyMS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo0MjI6c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDIzLVx0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDM0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQzNTpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDM2LVx0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDQ3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQ0ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00NDkte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00NjEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NDYyOnN0YXRpYyBpbnQgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTQ2My17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTQ3Ni1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo0Nzc6c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDc4LVx0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDg5LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQ5MDpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDkxLVx0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTAzLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjUwNDpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01MDUte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01MTctXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NTE4OnN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTUxOS17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTUzMS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo1MzI6c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTMzLVx0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTQ0LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU0NTpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTQ2LVx0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTU3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU1ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01NTkte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01NzAtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NTcxOnN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTU3Mi17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTU4NC1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo1ODU6c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTg2LVx0XHRcdFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTk3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU5ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTk5LVx0XHRcdFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjExLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjYxMjpzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02MTMte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02MzEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NjMyOnN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTYzMy17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTY1NS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo2NTY6c3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSlcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02NTcte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02NzEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NjcyOnN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02NzMtXHRcdFx0XHRpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjg3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjY4ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfbWFwcGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCB1MzIgYmFzZSwgdTMyIHBvcnQsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjg5LVx0XHRcdFx0ICAgIHUzMiB2YWxzX3Blcl9yZWcsIHUzMiBiaXRzX3Blcl92YWwsIHUzMiB2YWx1ZSlcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjk3LVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjY5ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0dXBfdG9wb2xvZ3koc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02OTkte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03MjMtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzI0OnN0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03MjUte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03MzItXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzMzOnN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03MzQte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NTItXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzUzOnN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NTQte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NjgtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzY5OnN0YXRpYyBpbnQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc3MC17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc5Ni1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3OTc6c3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc5OC17XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTgxNi1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo4MTc6c3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODE4LVx0XHRcdFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04NjEtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6ODYyOnN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKm90dG9fZW1kaW9fZ2V0X2J1c19ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODYzLXtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODgwLSAqL1xuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjg4MTpzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04ODIte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05NjQtXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6OTY1OnN0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05NjYte1xuLS1cbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05NzktXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6OTgwOnN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTk4MS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA1IDE2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MjUwCgkJCQkJCQlvdXRwdXQ6IDI1NgoJCQkJCQkJdGhvdWdodHM6IDUwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBGdW5jdGlvbnMgQWRkZWQgYW5kIE1vZGlmaWVkKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyB0aGUgY2hhbmdlcy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjYXRlZ29yaXppbmcgdGhlIGZ1bmN0aW9ucy4KCkkgc2VlIGEgbGlzdCBvZiBuZXdseSAqYWRkZWQqIGZ1bmN0aW9uczogYG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZ2AsIGBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjJgLCBgb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMmAsIGBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDVgLCBgb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NWAsIGBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjJgLCBgb3R0b19lbWRpb184MzkwX3dyaXRlX2MyMmAsIGBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDVgLCBgb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NWAsIGBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcmAsIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCwgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2hgLCBgb3R0b19lbWRpb19pbml0X3BvbGxpbmdgLgoKVGhlbiwgSSYjMzk7bSBub3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiAqbW9kaWZpZWQqOiBgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb19yZWFkX2MyMmAsIGBvdHRvX2VtZGlvX3dyaXRlX2MyMmAsIGBvdHRvX2VtZGlvX3Byb2JlX29uZWAsIGBvdHRvX2VtZGlvX3Byb2JlYCwgYHBoeV9hdHRhY2hfZGlyZWN0YCwgYHBoeV9kZXRhY2hgLgoKVGhlIHNpZ25pZmljYW50IGFkZGl0aW9ucyBzZWVtIHRvIGJlIGFyb3VuZCBwb2xsaW5nLCBzcGVjaWZpYyBQSFkgaW5pdGlhbGl6YXRpb24sIGFuZCBhdHRhY2gvZGV0YWNoIG5vdGlmaWNhdGlvbnMuIExvb2tpbmcgYXQgdGhlIGNoYW5nZXMsIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhvc2UgbmV3IGZ1bmN0aW9ucywgaW5jbHVkaW5nIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCwgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2hgLCBgb3R0b19lbWRpb19pbml0X3BvbGxpbmdgLCBgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nYC4gQWxzbywgdGhlIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBoYW5kbGluZyB0aGUgODM4MCBhbmQgODM5MCBQSFlzIChgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXJgKSB3aWxsIHdhcnJhbnQgY2xvc2VyIGluc3BlY3Rpb24uCgpJdCBhcHBlYXJzIHRoZSBuZXcgZnVuY3Rpb25zIGFyZSBxdWl0ZSBpbXBvcnRhbnQuIEkga25vdyB3aGF0IHRvIGZvY3VzIG9uLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNSAxNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TURJT19SRUFMVEVLX1JUTDkzMDAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2gmIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb19pbml0X3BvbGxpbmcmIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fODM4MF9yZWFkX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fODM5MF9yZWFkX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUgcG9sbGluZyBzdXBwb3J0IHRvIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBjb250cm9sbGVyIGRyaXZlciBhbmQgaW50cm9kdWNlcyBgbm90aWZ5X3BoeV9hdHRhY2hgIGFuZCBgbm90aWZ5X3BoeV9kZXRhY2hgIGNhbGxiYWNrcyB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtLiBUaGUgY29yZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZHVyaW5nIFBIWSBkZXZpY2UgYXR0YWNobWVudC9kZXRhY2htZW50LCBhbmQgdGhlIGRyaXZlciBjaGFuZ2VzIGNhbiBiZSByZWFjaGVkIGlmIHRoZSBkcml2ZXIgaXMgcHJvYmVkIHZpYSBkZXZpY2UgdHJlZSBpbmplY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01ESU9fUkVBTFRFS19SVEw5MzAwJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaCYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9faW5pdF9wb2xsaW5nJiMzNDssCiAgICAmIzM0O290dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzgwX3dyaXRlX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjImIzM0OywKICAgICYjMzQ7b3R0b19lbWRpb184MzkwX3dyaXRlX2MyMiYjMzQ7LAogICAgJiMzNDtvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIHBvbGxpbmcgc3VwcG9ydCB0byB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gY29udHJvbGxlciBkcml2ZXIgYW5kIGludHJvZHVjZXMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbS4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGR1cmluZyBQSFkgZGV2aWNlIGF0dGFjaG1lbnQvZGV0YWNobWVudCwgYW5kIHRoZSBkcml2ZXIgY2hhbmdlcyBjYW4gYmUgcmVhY2hlZCBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6NTQ6MzIuNDI2NTAzODY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcxMTYyODc0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoXCIsXG4gICAgXCJvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoXCIsXG4gICAgXCJvdHRvX2VtZGlvX2luaXRfcG9sbGluZ1wiLFxuICAgIFwib3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM4MF93cml0ZV9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM5MF9yZWFkX2MyMlwiLFxuICAgIFwib3R0b19lbWRpb184MzkwX3dyaXRlX2MyMlwiLFxuICAgIFwib3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIHBvbGxpbmcgc3VwcG9ydCB0byB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gY29udHJvbGxlciBkcml2ZXIgYW5kIGludHJvZHVjZXMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbS4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGR1cmluZyBQSFkgZGV2aWNlIGF0dGFjaG1lbnQvZGV0YWNobWVudCwgYW5kIHRoZSBkcml2ZXIgY2hhbmdlcyBjYW4gYmUgcmVhY2hlZCBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NDozMi40MjY1MjkyMjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNDExMDIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY0N2YwZDZlMmYzMGRjZWY3ZjcyNGQ2ZTk3OGFhNWFlZDVkNmFlZTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgNSAxNjo1NDozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcXG5pbmRleCAyNzFlMDViYWU5YzU3NC4uNjdlMGIyM2E4NDcwZWEgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXFxuQEAgLTQsNyArNCw3IEBAXFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXFxuICRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbiBcXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcXG4rdGl0bGU6IFJlYWx0ZWsgT3R0byBTd2l0Y2hlcyBFdGhlcm5ldCBNRElPIENvbnRyb2xsZXJcXG4gXFxuIG1haW50YWluZXJzOlxcbiAgIC0gQ2hyaXMgUGFja2hhbSBcXHUwMDNjY2hyaXMucGFja2hhbUBhbGxpZWR0ZWxlc2lzLmNvLm56XFx1MDAzZVxcbkBAIC0xMiw2ICsxMiwxNiBAQCBtYWludGFpbmVyczpcXG4gcHJvcGVydGllczpcXG4gICBjb21wYXRpYmxlOlxcbiAgICAgb25lT2Y6XFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODEtbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgyLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXFxuKyAgICAgIC0gaXRlbXM6XFxuKyAgICAgICAgICAtIGVudW06XFxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xcbisgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkzLW1kaW9cXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM5MS1tZGlvXFxuICAgICAgIC0gaXRlbXM6XFxuICAgICAgICAgICAtIGVudW06XFxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMDJiLW1kaW9cXG5AQCAtMjQsNiArMzQsOCBAQCBwcm9wZXJ0aWVzOlxcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzEzLW1kaW9cXG4gICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsOTMxMS1tZGlvXFxuICAgICAgIC0gZW51bTpcXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzgwLW1kaW9cXG4rICAgICAgICAgIC0gcmVhbHRlayxydGw4MzkxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzExLW1kaW9cXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xcbmluZGV4IDg5MmVkMzc4MGE2NTcyLi5kNzk3ZDhmMDFjNjZlOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcXG5AQCAtMzUsNiArMzUsNzQgQEBcXG4gICpcXG4gICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb25cXG4gICogdGhlIGV0aGVybmV0LXBvcnRzIHByb3BlcnR5LlxcbisgKlxcbisgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcXG4rICogY29uc3RhbnRseSBzY2FucyB0aGUgTURJTyBidXMgYW5kIHRoZSBhdHRhY2hlZCBQSFlzIGFuZCB1cGRhdGVzIHRoZSBNQUMgc3RhdHVzIHJlZ2lzdGVycy5cXG4rICpcXG4rICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cXG4rICpcXG4rICogRWFjaCBkZXZpY2UgaGFzIGEgU01JX1BPTExfQ1RSTCByZWdpc3Rlci4gQSBwZXItcG9ydCBiaXRtYXNrIGRlY2lkZXMgaWYgdGhlIGhhcmR3YXJlIHBvbGxpbmcgb2ZcXG4rICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXFxuKyAqIGVhY2ggc2V0IHBvbGxpbmcgYml0IGl0IGlzc3VlcyBhIHN0YXR1cyBjaGVjayBmb3IgdGhlIFBIWS4gQXR0YWNoaW5nIGEgbG9naWMgYW5hbHl6ZXIgdG8gdGhlXFxuKyAqIE1ESU8gYnVzIG9mIGFuIFJUTDgzODAgYW5kIFJUTDgzOTMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcyAoaW4ga2VybmVsIG5vdGF0aW9uKTpcXG4rICpcXG4rICpcXHRSVEw4MzgwXFx0XFx0XFx0XFx0UlRMODM5M1xcbisgKlxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKlxcdHBoeV93cml0ZShwaHksIDMxLCAweDApO1xcdHBoeV9yZWFkKHBoeSwgMCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFx0cGh5X3JlYWQocGh5LCAxKTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XFx0cGh5X3JlYWQocGh5LCA0KTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg4MDA3KTtcXHRwaHlfcmVhZChwaHksIDUpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgMTQpO1xcdFxcdHBoeV9yZWFkKHBoeSwgNik7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFx0cGh5X3JlYWQocGh5LCA5KTtcXG4rICpcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XFx0cGh5X3JlYWQocGh5LCAxMCk7XFxuKyAqXFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XFx0cGh5X3JlYWQocGh5LCAxNSk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxNCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA5KTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxMCk7XFx0XFx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4NDAwNyk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAxNSk7XFx0XFx0cGh5X3JlYWQocGh5LCAxNCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCAwKTtcXHRcXHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDEpO1xcdFxcdHBoeV93cml0ZShwaHksIDE0LCAweDNkKTtcXG4rICpcXHRwaHlfcmVhZChwaHksIDQpO1xcdFxcdHBoeV93cml0ZShwaHksIDEzLCAweDQwMDcpO1xcbisgKlxcdHBoeV9yZWFkKHBoeSwgNSk7XFx0XFx0cGh5X3JlYWQocGh5LCAxNCk7XFxuKyAqXFx0cGh5X3JlYWQocGh5LCA2KTtcXG4rICpcXG4rICogRnJvbSB0aGUgYWJvdmUgc25pcHBldHMgaXQgcG9sbHMgTURJT19BTl9FRUVfQURWIGFuZCBNRElPX0FOX0VFRV9MUEFCTEUgdmlhIEM0NSBvdmVyIEMyMi4gQXNcXG4rICogb2Ygbm93IGl0IGlzIHVuY2xlYXIgaG93IHRoZSBoYXJkd2FyZSBkZWNpZGVzIGlmIGEgUEhZIHN1cHBvcnRzIHRoZXNlIHJlZ2lzdGVycy4gQWZ0ZXIgb25lIFBIWVxcbisgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5XFxuKyAqIGFuZCB0aGUgTUFDIHN0YXR1cyBpcyB1cGRhdGVkIGluIHJlYWwtdGltZS5cXG4rICpcXG4rICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz9cXG4rICpcXG4rICogV2hlbiBpc3N1aW5nIE1ESU8gYWNjZXNzZXMgdmlhIGFuIE1NSU8gYmFzZWQgaW50ZXJmYWNlIHRoZSBmaW5hbCB3cml0ZSB0byB0aGUgY29tbWFuZCByZWdpc3RlclxcbisgKiBzZXRzIGEgXFxcInJ1biBjb21tYW5kIG5vd1xcXCIgYml0LiBCZXR3ZWVuIHR3byBwb2xsaW5nIHNlcXVlbmNlcyBmb3IgZGlmZmVyZW50IFBIWXMgdGhlIGhhcmR3YXJlXFxuKyAqIGNoZWNrcyBpZiBhIHVzZXIgY29tbWFuZCBuZWVkcyB0byBydW4gYW5kIHNlbmRzIGl0IG9udG8gdGhlIGJ1cy4gQWZ0ZXJ3YXJkcyBpdCBzaW1wbHkgY29udGludWVzXFxuKyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XFxuKyAqXFxuKyAqXFx0UlRMODM4MFxcdFxcdFxcdFxcdFJUTDgzOTNcXG4rICpcXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICpcXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XFx0cGh5X3dyaXRlKHBoeSwgMzEsIHBhZ2UpO1xcbisgKlxcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1xcbisgKlxcdFxcdFxcdFxcdFxcdHBoeV93cml0ZShwaHksIDMxLCAwKTtcXG4rICpcXG4rICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cXG4rICpcXG4rICogVGhlcmUgYXJlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBwb2xsaW5nIGFuZCBQSFkgYWNjZXNzIGJldHdlZW4gdGhlIG1vZGVscyBidXQgdGhlIGNoYWxsZW5nZVxcbisgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XFxuKyAqIGhhcyBzb21lIGltcGxpY2F0aW9ucyBmb3IgdGhlIGtlcm5lbCBQSFkgc3Vic3lzdGVtLlxcbisgKlxcbisgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXFxuKyAqICAgRXNwZWNpYWxseSBhbiB1bnBvcHVsYXRlZCBNQUNfTElOS19TVFMgcmVnaXN0ZXIgY2FuY2VscyBvcGVyYXRpb25zIHRvIG90aGVyIE1BQyByZWdpc3RlcnMuXFxuKyAqIC0gVGhlIFJlYWx0ZWsgcGFnZSByZWdpc3RlciAzMSBpcyBtYWdpY2FsbHkgbW9kaWZpZWQgaW4gdGhlIGJhY2tncm91bmQgc28gdGhhdCBwb2xsaW5nIHdpbGxcXG4rICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXFxuKyAqICAgdG8gdHJhY2sgdGhlIHBhZ2UgYWNjZXNzIFxcXCJtYWdpY2FsbHlcXFwiIGluIHRoZSBiYWNrZ3JvdW5kLlxcbisgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxcbisgKiAgIHRoZSBwb2xsaW5nIGVuZ2luZSBvdmVyd3JpdGVzIHJlZ2lzdGVycyAxMy8xNCBpbiBiZXR3ZWVuLlxcbisgKiAtIFBIWSBmaXJtd2FyZSBsb2FkaW5nIGNhbiBoYXZlIGlzc3Vlcy4gRXNwZWNpYWxseSBpZiBhIFBIWSBpcyBkZXNpZ25lZCB0byBleHBlY3QgYSBjbGVhblxcbisgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxcbisgKiAtIEFuIGFjY2VzcyB0byBvbmUgUEhZIHdpbGwgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dCBmcmVlIHNsb3Qgb2YgdGhlIHBvbGxpbmcgZW5naW5lLlxcbisgKlxcbisgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcXG4rICogYXJpc2VzIGZyb20gdGhlIGFib3ZlIGRlc2NyaWJlZCBoYXJkd2FyZSBwb2xsaW5nLlxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbkBAIC01MSw2ICsxMTksNTAgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWdtYXAuaFxcdTAwM2VcXG4gXFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVNcXHRcXHRcXHQxXFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUEFHRVNcXHRcXHRcXHQ0MDk2XFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fUE9SVFNcXHRcXHRcXHQyOFxcbisjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMXFx0XFx0XFx0MHhhMTAwXFxuKyNkZWZpbmUgICBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORVxcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMFxcdFxcdDB4YTFiOFxcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8xXFx0XFx0MHhhMWJjXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFR19BRERSXFx0XFx0R0VOTUFTSygyNCwgMjApXFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1BBUktfUEFHRVxcdFxcdEdFTk1BU0soMTksIDE1KVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0VcXHRcXHRHRU5NQVNLKDE0LCAzKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9XUklURVxcdFxcdEJJVCgyKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9SRUFEXFx0XFx0XFx0MFxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NVxcdFxcdEJJVCgxKVxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0MyMlxcdFxcdDBcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfRkFJTFxcdFxcdFxcdDAgLyogbm8gZmFpbCBpbmRpY2F0b3IgKi9cXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMlxcdFxcdDB4YTFjMFxcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEFcXHRcXHRHRU5NQVNLKDMxLCAxNilcXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVxcdFxcdFxcdEdFTk1BU0soMTUsIDApXFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzNcXHRcXHQweGExYzRcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT0xMX0NUUkxcXHRcXHRcXHQweGExN2NcXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9QT1JUMF81X0FERFJfQ1RSTFxcdFxcdDB4YTFjOFxcbitcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9CVVNFU1xcdFxcdFxcdDJcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QQUdFU1xcdFxcdFxcdDgxOTJcXG4rI2RlZmluZSBSVEw4MzkwX05VTV9QT1JUU1xcdFxcdFxcdDUyXFxuKyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMXFx0XFx0MHgwM2VjXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcXHRcXHQweDAzZGNcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFJcXHRcXHRHRU5NQVNLKDksIDUpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRVxcdFxcdEdFTk1BU0soMjIsIDEwKVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXFx0XFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFXFx0XFx0QklUKDMpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1JFQURcXHRcXHRcXHQwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1XFx0XFx0QklUKDIpXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyXFx0XFx0MFxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX0NUUkxcXHRcXHRcXHQweDAzZTBcXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcXHRcXHRHRU5NQVNLKDgsIDApXFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMXFx0XFx0MHgwM2YwXFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQVxcdFxcdEdFTk1BU0soMzEsIDE2KVxcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTFxcdFxcdFxcdDB4MDNmNFxcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX1BPUlRfQ1RSTF9MT1dcXHRcXHQweDAzZTRcXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfSElHSFxcdFxcdDB4MDNlOFxcbisjZGVmaW5lIFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMXFx0XFx0MHgwM2ZjXFxuK1xcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXFx0XFx0XFx0NFxcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BBR0VTXFx0XFx0XFx0NDA5NlxcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX1BPUlRTXFx0XFx0XFx0MjhcXG5AQCAtNzEsNiArMTgzLDcgQEBcXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygzMSwgMTYpXFxuICNkZWZpbmUgICBSVEw5MzAwX1BIWV9DVFJMX0RBVEFcXHRcXHRcXHRHRU5NQVNLKDE1LCAwKVxcbiAjZGVmaW5lIFJUTDkzMDBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zXFx0XFx0MHhjYjdjXFxuKyNkZWZpbmUgUlRMOTMwMF9TTUlfUE9MTF9DVFJMXFx0XFx0XFx0MHhjYTkwXFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcXHRcXHQweGNiODBcXG4gXFxuICNkZWZpbmUgUlRMOTMxMF9OVU1fQlVTRVNcXHRcXHRcXHQ0XFxuQEAgLTk2LDExICsyMDksMTMgQEBcXG4gI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBXFx0XFx0R0VOTUFTSygxNSwgMClcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkxcXHQweDBjMThcXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX0FERFJfQ1RSTFxcdFxcdDB4MGM3NFxcbisjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19DVFJMXFx0XFx0MHgwY2NjXFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX1NFTFxcdFxcdDB4MGM5Y1xcbiBcXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcXHRcXHRcXHRcXHRCSVQoMClcXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfREVWQURcXHRcXHRcXHRHRU5NQVNLKDIwLCAxNilcXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXFx0XFx0XFx0R0VOTUFTSygxNSwgMClcXG4rI2RlZmluZSBQSFlfVkVORE9SX1JFQUxURUtcXHRcXHRcXHQweDAwMWNjODAwXFxuIFxcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXFx0XFx0XFx0NlxcbiAjZGVmaW5lIE1BUF9CSVRTX1BFUl9BRERSXFx0XFx0XFx0NVxcbkBAIC0xMjYsNyArMjQxLDkgQEAgc3RydWN0IG90dG9fZW1kaW9fcHJpdiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gKmluZm87XFxuIFxcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcXG4gXFx0c3RydWN0IG11dGV4IGxvY2s7IC8qIHByb3RlY3QgSFcgYWNjZXNzICovXFxuK1xcdERFQ0xBUkVfQklUTUFQKHBoeV9wb2xsLCBNQVhfUE9SVFMpO1xcbiBcXHRERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTtcXG4rXFx0dTE2IHBhZ2VbTUFYX1BPUlRTXTtcXG4gXFx0dTggc21pX2J1c1tNQVhfUE9SVFNdO1xcbiBcXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xcbiBcXHRib29sIHNtaV9idXNfaXNfYzQ1W01BWF9TTUlfQlVTU0VTXTtcXG5AQCAtMTQzLDYgKzI2MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xcbiBcXHR1OCBudW1fYnVzZXM7XFxuIFxcdHU4IG51bV9wb3J0cztcXG4gXFx0dTE2IG51bV9wYWdlcztcXG4rXFx0dTMyIHBvbGxfY3RybDtcXG4gXFx0aW50ICgqc2V0dXBfY29udHJvbGxlcikoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdik7XFxuIFxcdGludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XFxuIFxcdGludCAoKnJlYWRfYzQ1KShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKTtcXG5AQCAtMTc4LDYgKzI5NiwxNCBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxcbiBcXHRyZXR1cm4gY2hhbi1cXHUwMDNlcHJpdjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxcbit7XFxuK1xcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlZ21hcF9hc3NpZ25fYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXBvbGxfY3RybCArIChwb3J0IC8gMzIpICogNCxcXG4rXFx0XFx0XFx0XFx0ICBCSVQocG9ydCAlIDMyKSwgYWN0aXZlKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgKmNtZF9kYXRhKVxcbiB7XFxuQEAgLTE4Niw5ICszMTIsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxcbiBcXHR1MzIgY21kc3RhdGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJsZSB3cm9uZyAqL1xcbitcXHQvKiBEZWZlbnNpdmUgcHJlIGNoZWNrIGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgZ29lcyBob3JyaWJseSB3cm9uZyAqL1xcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjI4LDcgKzM1NCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cXHUwMDNlcmVnbWFwLCBpbmZvLVxcdTAwM2VjbWRfcmVncy5jMjJfZGF0YSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNtZHN0YXRlLCAhKGNtZHN0YXRlIFxcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDApO1xcbitcXHRcXHRcXHRcXHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXFx1MDAyNiBQSFlfQ1RSTF9DTUQpLCAxMCwgMTAwMDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjY1LDEzICszOTEsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcnVuX2NtZChidXMsIGNtZCB8IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZWNtZF93cml0ZSwgY21kX2RhdGEpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9IEJJVChwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFxcdTAwMjZjbWRfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdFxcdCAgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jNDVfZGF0YVxcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChQSFlfQ1RSTF9NTURfUkVHLCByZWdudW0pLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gQklUKHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuK1xcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVxcdTAwM2VwYWdlW3BvcnRdKSxcXG4rXFx0XFx0LmV4dF9wYWdlXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0UsIDB4MWZmKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbitcXHRcXHQuZXh0X3BhZ2VcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxcbitcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbitcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbitcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuK1xcdH07XFxuK1xcbitcXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG4rXFx0XFx0XFx0XFx0ICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4rXFx0XFx0LmM0NV9kYXRhXFx0PSBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9ERVZBRCwgZGV2X2FkZHIpIHxcXG4rXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFBIWV9DVFJMX01NRF9SRUcsIHJlZ251bSksXFxuK1xcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhLFxcbitcXHRcXHRcXHRcXHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbit7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbitcXHRcXHQuYzQ1X2RhdGFcXHQ9IEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX0RFVkFELCBkZXZfYWRkcikgfFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcXG4rXFx0XFx0LmlvX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoXFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFxcdTAwM2VcXHUwMDNlIDMyKSxcXG4rXFx0XFx0LnBvcnRfbWFza19sb3dcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXFx1MDAyNmNtZF9kYXRhKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuIHtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcXG4gXFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XFxuIFxcdFxcdC5jMjJfZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcXG4gXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXFxuIFxcdH07XFxuIFxcbkBAIC0yODUsNyArNTIxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLFxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmMyMl9kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxcbiBcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcXG4tXFx0XFx0XFx0XFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXFxuK1xcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cXHUwMDNlcGFnZVtwb3J0XSksXFxuIFxcdFxcdC5pb19kYXRhXFx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXFxuIFxcdFxcdC5wb3J0X21hc2tfbG93XFx0PSBCSVQocG9ydCksXFxuIFxcdH07XFxuQEAgLTMyNSw3ICs1NjEsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdVxcbiBcXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcXG4gXFx0XFx0LmJyb2FkY2FzdFxcdD0gRklFTERfUFJFUChSVEw5MzEwX0JDX1BPUlRfSUQsIHBvcnQpLFxcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHR9O1xcbiBcXG4gXFx0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw5MzEwX1BIWV9DVFJMX1RZUEVfQzIyLCBcXHUwMDI2Y21kX2RhdGEsXFxuQEAgLTMzNyw3ICs1NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XFxuIFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xcbiBcXHRcXHQuYzIyX2RhdGFcXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XFxuLVxcdFxcdFxcdFxcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxcbitcXHRcXHRcXHRcXHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0pLFxcbiBcXHRcXHQuaW9fZGF0YVxcdD0gRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2hpZ2hcXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXFx1MDAzZVxcdTAwM2UgMzIpLFxcbiBcXHRcXHQucG9ydF9tYXNrX2xvd1xcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXFxuQEAgLTM4Myw4ICs2MTksMTIgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0pXFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gMzEpXFxuK1xcdFxcdFxcdHJldHVybiBwcml2LVxcdTAwM2VwYWdlW3BvcnRdO1xcbitcXG4gXFx0XFx0cmV0ID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlcmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sIFxcdTAwMjZ2YWx1ZSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiByZXQgPyByZXQgOiB2YWx1ZTtcXG4gfVxcbkBAIC0zOTgsOCArNjM4LDE3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2XFxuIFxcdGlmIChwb3J0IFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIHBvcnQ7XFxuIFxcbi1cXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKVxcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdGlmIChyZWdudW0gPT0gMzEpIHtcXG4rXFx0XFx0XFx0aWYgKHZhbHVlIFxcdTAwM2U9IFJBV19QQUdFKHByaXYpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcXG4rXFx0XFx0XFx0cmV0dXJuIDA7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJldCA9IHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZXdyaXRlX2MyMihidXMsIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTQ3Miw2ICs3MjEsMTUgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcXG4rXFx0ICogcGF0Y2hpbmcgYW5kIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgUEhZcyBhcmUgcHJvYmVkLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVxcdTAwM2VyZWdtYXAsIFJUTDgzODBfU01JX0dMQl9DVFJMLCBSVEw4MzgwX1NNSV9QSFlfUEFUQ0hfRE9ORSk7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4ge1xcbiBcXHR1MzIgZ2xiX2N0cmxfbWFzayA9IDAsIGdsYl9jdHJsX3ZhbCA9IDA7XFxuQEAgLTUwOCw2ICs3NjYsNTQgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHN0cnVjdCBvdHRvX2VtZGlvX2NoYW4gKmNoYW4gPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBvcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcG9ydDtcXG4rXFxuK1xcdGlmICh0ZXN0X2JpdChwb3J0LCBwcml2LVxcdTAwM2VwaHlfcG9sbCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVxcdTAwM2VtZGlvX2J1c10gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICghcGh5X2lkX2NvbXBhcmVfdmVuZG9yKHBoeWRldi1cXHUwMDNlcGh5X2lkLCBQSFlfVkVORE9SX1JFQUxURUspKSkge1xcbitcXHRcXHRwaHlkZXZfZXJyKHBoeWRldiwgXFxcIk9ubHkgUmVhbHRlayBQSFlzIGFsbG93ZWQgb24gQzIyIGJ1c1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0c2NvcGVkX2d1YXJkKG11dGV4LCBcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaykge1xcbitcXHRcXHRyZXQgPSBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcocHJpdiwgcG9ydCwgdHJ1ZSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRfX3NldF9iaXQocG9ydCwgcHJpdi1cXHUwMDNlcGh5X3BvbGwpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYocGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cyk7XFxuK1xcdGludCBwb3J0ID0gb3R0b19lbWRpb19waHlfdG9fcG9ydChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcik7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBvcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKSB7XFxuK1xcdFxcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRfX2NsZWFyX2JpdChwb3J0LCBwcml2LVxcdTAwM2VwaHlfcG9sbCk7XFxuK1xcdH1cXG4rXFx0XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGRldl9lcnIoYnVzLVxcdTAwM2VwYXJlbnQsIFxcXCJmYWlsZWQgdG8gZGlzYWJsZSBwb2xsaW5nIGZvciBwb3J0ICVkXFxcXG5cXFwiLCBwb3J0KTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqbm9kZSlcXG4ge1xcbkBAIC01MzcsNiArODQzLDkgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXZcXG4gXFx0XFx0YnVzLVxcdTAwM2V3cml0ZSA9IG90dG9fZW1kaW9fd3JpdGVfYzIyO1xcbiBcXHR9XFxuIFxcdGJ1cy1cXHUwMDNlcGFyZW50ID0gZGV2O1xcbitcXHRidXMtXFx1MDAzZW5vdGlmeV9waHlfYXR0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaDtcXG4rXFx0YnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaCA9IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2g7XFxuK1xcbiBcXHRjaGFuID0gYnVzLVxcdTAwM2Vwcml2O1xcbiBcXHRjaGFuLVxcdTAwM2VtZGlvX2J1cyA9IG1kaW9fYnVzO1xcbiBcXHRjaGFuLVxcdTAwM2Vwcml2ID0gcHJpdjtcXG5AQCAtNjUzLDYgKzk2MiwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRmb3IgKGludCBwb3J0ID0gMDsgcG9ydCBcXHUwMDNjIHByaXYtXFx1MDAzZWluZm8tXFx1MDAzZW51bV9wb3J0czsgcG9ydCsrKSB7XFxuK1xcdFxcdHNjb3BlZF9ndWFyZChtdXRleCwgXFx1MDAyNnByaXYtXFx1MDAzZWxvY2spIHtcXG4rXFx0XFx0XFx0ZXJyID0gb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nKHByaXYsIHBvcnQsIGZhbHNlKTtcXG4rXFx0XFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG5AQCAtNjcyLDYgKzk5NiwxMCBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihwcml2LVxcdTAwM2VyZWdtYXApO1xcbiBcXG4rXFx0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbiBcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTtcXG4gXFxuIFxcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XFxuQEAgLTY5Nyw2ICsxMDI1LDUxIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb184MzgwX2luZm8gPSB7XFxuK1xcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXFxuK1xcdC5jbWRfZmFpbCA9IFJUTDgzODBfUEhZX0NUUkxfRkFJTCxcXG4rXFx0LmNtZF9yZWFkID0gUlRMODM4MF9QSFlfQ1RSTF9SRUFELFxcbitcXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcXG4rXFx0LmNtZF9yZWdzID0ge1xcbitcXHRcXHQuYzIyX2RhdGEgPSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMSxcXG4rXFx0XFx0LmM0NV9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzMsXFxuK1xcdFxcdC5pb19kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzIsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzAsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzODBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM4MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXFxuK1xcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIsXFxuK1xcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMixcXG4rXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxcbitcXHQud3JpdGVfYzIyID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2MyMixcXG4rXFx0LndyaXRlX2M0NSA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzOTBfaW5mbyA9IHtcXG4rXFx0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxcbitcXHQuY21kX3JlYWQgPSBSVEw4MzkwX1BIWV9DVFJMX1JFQUQsXFxuK1xcdC5jbWRfd3JpdGUgPSBSVEw4MzkwX1BIWV9DVFJMX1dSSVRFLFxcbitcXHQuY21kX3JlZ3MgPSB7XFxuK1xcdFxcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXFxuK1xcdFxcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxcbitcXHRcXHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcXG4rXFx0XFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcXG4rXFx0XFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXFxuK1xcdFxcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcXG4rXFx0XFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXFxuK1xcdH0sXFxuK1xcdC5udW1fYnVzZXMgPSBSVEw4MzkwX05VTV9CVVNFUyxcXG4rXFx0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxcbitcXHQubnVtX3BvcnRzID0gUlRMODM5MF9OVU1fUE9SVFMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcXG4rXFx0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxcbitcXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUsXFxuK1xcdC53cml0ZV9jMjIgPSBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyLFxcbitcXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcXG4rfTtcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xcbiBcXHQuYWRkcl9tYXBfYmFzZSA9IFJUTDkzMDBfU01JX1BPUlQwXzVfQUREUl9DVFJMLFxcbiBcXHQuYnVzX21hcF9iYXNlID0gUlRMOTMwMF9TTUlfUE9SVDBfMTVfUE9MTElOR19TRUwsXFxuQEAgLTcxMiw2ICsxMDg1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvdHRvX2VtZGlvX2luZm8gb3R0b19lbWRpb185MzAwX2luZm8gPSB7XFxuIFxcdC5udW1fYnVzZXMgPSBSVEw5MzAwX05VTV9CVVNFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxcbiBcXHQubnVtX3BhZ2VzID0gUlRMOTMwMF9OVU1fUEFHRVMsXFxuK1xcdC5wb2xsX2N0cmwgPSBSVEw5MzAwX1NNSV9QT0xMX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzAwX3JlYWRfYzQ1LFxcbkBAIC03MzcsNiArMTExMSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiBcXHQubnVtX2J1c2VzID0gUlRMOTMxMF9OVU1fQlVTRVMsXFxuIFxcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcXG4gXFx0Lm51bV9wb3J0cyA9IFJUTDkzMTBfTlVNX1BPUlRTLFxcbitcXHQucG9sbF9jdHJsID0gUlRMOTMxMF9TTUlfUE9SVF9QT0xMSU5HX0NUUkwsXFxuIFxcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXFxuIFxcdC5yZWFkX2MyMiA9IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMixcXG4gXFx0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb185MzEwX3JlYWRfYzQ1LFxcbkBAIC03NDUsNiArMTEyMCw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMxMF9pbmZvID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3R0b19lbWRpb19pZHNbXSA9IHtcXG4rXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXFxuK1xcdHsgLmNvbXBhdGlibGUgPSBcXFwicmVhbHRlayxydGw4MzkxLW1kaW9cXFwiLCAuZGF0YSA9IFxcdTAwMjZvdHRvX2VtZGlvXzgzOTBfaW5mbyB9LFxcbiBcXHR7IC5jb21wYXRpYmxlID0gXFxcInJlYWx0ZWsscnRsOTMwMS1tZGlvXFxcIiwgLmRhdGEgPSBcXHUwMDI2b3R0b19lbWRpb185MzAwX2luZm8gfSxcXG4gXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1xcXCIsIC5kYXRhID0gXFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXFxuIFxcdHt9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuaW5kZXggMDYxNTIyODQ1OWVmNDIuLjY3NmNiZjE4MzM1MGQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuQEAgLTE4NzYsNiArMTg3NiwxMiBAQCBpbnQgcGh5X2F0dGFjaF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBlcnJvcjtcXG4gXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xcbitcXHRcXHRlcnIgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xcbitcXHRcXHRpZiAoZXJyKVxcbitcXHRcXHRcXHRnb3RvIGVycm9yO1xcbitcXHR9XFxuK1xcbiBcXHRwaHlfcmVzdW1lKHBoeWRldik7XFxuIFxcbiBcXHQvKipcXG5AQCAtMTkxOSw2ICsxOTI1LDkgQEAgdm9pZCBwaHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHN0cnVjdCBtb2R1bGUgKm5kZXZfb3duZXIgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xcbiBcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5idXMtXFx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKVxcbitcXHRcXHRwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpO1xcbitcXG4gXFx0aWYgKHBoeWRldi1cXHUwMDNlZGV2bGluaykge1xcbiBcXHRcXHRkZXZpY2VfbGlua19kZWwocGh5ZGV2LVxcdTAwM2VkZXZsaW5rKTtcXG4gXFx0XFx0cGh5ZGV2LVxcdTAwM2VkZXZsaW5rID0gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uMzE2MGNhOTlkZWFiNzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5AQCAtMzc2LDYgKzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XFxuIFxcdFxcdFxcdCBpbnQgcmVnbnVtLCB1MTYgdmFsKTtcXG4gXFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cXG4gXFx0aW50ICgqcmVzZXQpKHN0cnVjdCBtaWlfYnVzICpidXMpO1xcbitcXHQvKiogQG5vdGlmeV9waHlfYXR0YWNoOiBQZXJmb3JtIHBvc3QtYXR0YWNoIGhhbmRsaW5nICovXFxuK1xcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4rXFx0LyoqIEBub3RpZnlfcGh5X2RldGFjaDogUGVyZm9ybSBwcmUtZGV0YWNoIGhhbmRsaW5nICovXFxuK1xcdHZvaWQgKCpub3RpZnlfcGh5X2RldGFjaCkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XFxuIFxcbiBcXHQvKiogQHN0YXRzOiBTdGF0aXN0aWMgY291bnRlcnMgcGVyIGRldmljZSBvbiB0aGUgYnVzICovXFxuIFxcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NDozMi43NjE1MDMzODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzgxMjc4Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaFwiLFxuICAgIFwib3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaFwiLFxuICAgIFwib3R0b19lbWRpb19pbml0X3BvbGxpbmdcIixcbiAgICBcIm90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZ1wiLFxuICAgIFwib3R0b19lbWRpb184MzgwX3JlYWRfYzIyXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM5MF93cml0ZV9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBwb2xsaW5nIHN1cHBvcnQgdG8gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGNvbnRyb2xsZXIgZHJpdmVyIGFuZCBpbnRyb2R1Y2VzIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0uIFRoZSBjb3JlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgUEhZIGRldmljZSBhdHRhY2htZW50L2RldGFjaG1lbnQsIGFuZCB0aGUgZHJpdmVyIGNoYW5nZXMgY2FuIGJlIHJlYWNoZWQgaWYgdGhlIGRyaXZlciBpcyBwcm9iZWQgdmlhIGRldmljZSB0cmVlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNDdmMGQ2ZTJmMzBkY2VmN2Y3MjRkNmU5NzhhYTVhZWQ1ZDZhZWUzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgNSAxNjo1NDozMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcmVhbHRlayxydGw5MzAxLW1kaW8ueWFtbFxuaW5kZXggMjcxZTA1YmFlOWM1NzQuLjY3ZTBiMjNhODQ3MGVhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9yZWFsdGVrLHJ0bDkzMDEtbWRpby55YW1sXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWxcbkBAIC00LDcgKzQsNyBAQFxuICRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3JlYWx0ZWsscnRsOTMwMS1tZGlvLnlhbWwjXG4gJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4gXG4tdGl0bGU6IFJlYWx0ZWsgUlRMOTMwMCBNRElPIENvbnRyb2xsZXJcbit0aXRsZTogUmVhbHRlayBPdHRvIFN3aXRjaGVzIEV0aGVybmV0IE1ESU8gQ29udHJvbGxlclxuIFxuIG1haW50YWluZXJzOlxuICAgLSBDaHJpcyBQYWNraGFtIFx1MDAzY2NocmlzLnBhY2toYW1AYWxsaWVkdGVsZXNpcy5jby5uelx1MDAzZVxuQEAgLTEyLDYgKzEyLDE2IEBAIG1haW50YWluZXJzOlxuIHByb3BlcnRpZXM6XG4gICBjb21wYXRpYmxlOlxuICAgICBvbmVPZjpcbisgICAgICAtIGl0ZW1zOlxuKyAgICAgICAgICAtIGVudW06XG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4MS1tZGlvXG4rICAgICAgICAgICAgICAtIHJlYWx0ZWsscnRsODM4Mi1tZGlvXG4rICAgICAgICAgIC0gY29uc3Q6IHJlYWx0ZWsscnRsODM4MC1tZGlvXG4rICAgICAgLSBpdGVtczpcbisgICAgICAgICAgLSBlbnVtOlxuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTItbWRpb1xuKyAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzOTMtbWRpb1xuKyAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDgzOTEtbWRpb1xuICAgICAgIC0gaXRlbXM6XG4gICAgICAgICAgIC0gZW51bTpcbiAgICAgICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAyYi1tZGlvXG5AQCAtMjQsNiArMzQsOCBAQCBwcm9wZXJ0aWVzOlxuICAgICAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTMtbWRpb1xuICAgICAgICAgICAtIGNvbnN0OiByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuICAgICAgIC0gZW51bTpcbisgICAgICAgICAgLSByZWFsdGVrLHJ0bDgzODAtbWRpb1xuKyAgICAgICAgICAtIHJlYWx0ZWsscnRsODM5MS1tZGlvXG4gICAgICAgICAgIC0gcmVhbHRlayxydGw5MzAxLW1kaW9cbiAgICAgICAgICAgLSByZWFsdGVrLHJ0bDkzMTEtbWRpb1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYyBiL2RyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuY1xuaW5kZXggODkyZWQzNzgwYTY1NzIuLmQ3OTdkOGYwMWM2NmU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXG4rKysgYi9kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcbkBAIC0zNSw2ICszNSw3NCBAQFxuICAqXG4gICogVGhlIGRyaXZlciB3b3JrcyBvdXQgdGhlIG1hcHBpbmcgYmFzZWQgb24gdGhlIE1ESU8gYnVzIGRlc2NyaWJlZCBpbiBkZXZpY2UgdHJlZSBhbmQgcGhhbmRsZXMgb25cbiAgKiB0aGUgZXRoZXJuZXQtcG9ydHMgcHJvcGVydHkuXG4rICpcbisgKiBUaGUgZGV2aWNlcyBoYXZlIGEgaGFyZHdhcmUgcG9sbGluZyB1bml0IHRoYXQgcnVucyBpbiB0aGUgYmFja2dyb3VuZCB3aXRob3V0IGFueSBDUFUgbG9hZC4gSXRcbisgKiBjb25zdGFudGx5IHNjYW5zIHRoZSBNRElPIGJ1cyBhbmQgdGhlIGF0dGFjaGVkIFBIWXMgYW5kIHVwZGF0ZXMgdGhlIE1BQyBzdGF0dXMgcmVnaXN0ZXJzLlxuKyAqXG4rICogSG93IGRvZXMgdGhlIHBvbGxpbmcgd29yaz9cbisgKlxuKyAqIEVhY2ggZGV2aWNlIGhhcyBhIFNNSV9QT0xMX0NUUkwgcmVnaXN0ZXIuIEEgcGVyLXBvcnQgYml0bWFzayBkZWNpZGVzIGlmIHRoZSBoYXJkd2FyZSBwb2xsaW5nIG9mXG4rICogdGhlIGFzc29jaWF0ZWQgYnVzL2FkZHJlc3MgaXMgYWN0aXZlIG9yIG5vdC4gVGhlIGhhcmR3YXJlIHJ1bnMgYSB0aWdodCBsb29wIG92ZXIgdGhpcyBhbmQgZm9yXG4rICogZWFjaCBzZXQgcG9sbGluZyBiaXQgaXQgaXNzdWVzIGEgc3RhdHVzIGNoZWNrIGZvciB0aGUgUEhZLiBBdHRhY2hpbmcgYSBsb2dpYyBhbmFseXplciB0byB0aGVcbisgKiBNRElPIGJ1cyBvZiBhbiBSVEw4MzgwIGFuZCBSVEw4MzkzIGdpdmVzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgKGluIGtlcm5lbCBub3RhdGlvbik6XG4rICpcbisgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuKyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgMHgwKTtcdHBoeV9yZWFkKHBoeSwgMCk7XG4rICpcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1x0cGh5X3JlYWQocGh5LCAxKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2MpO1x0cGh5X3JlYWQocGh5LCA0KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDUpO1xuKyAqXHRwaHlfcmVhZChwaHksIDE0KTtcdFx0cGh5X3JlYWQocGh5LCA2KTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4Nyk7XHRwaHlfcmVhZChwaHksIDkpO1xuKyAqXHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzZCk7XHRwaHlfcmVhZChwaHksIDEwKTtcbisgKlx0cGh5X3dyaXRlKHBoeSwgMTMsIDB4ODAwNyk7XHRwaHlfcmVhZChwaHksIDE1KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNCk7XHRcdHBoeV93cml0ZShwaHksIDEzLCAweDcpO1xuKyAqXHRwaHlfcmVhZChwaHksIDkpO1x0XHRwaHlfd3JpdGUocGh5LCAxNCwgMHgzYyk7XG4rICpcdHBoeV9yZWFkKHBoeSwgMTApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxNSk7XHRcdHBoeV9yZWFkKHBoeSwgMTQpO1xuKyAqXHRwaHlfcmVhZChwaHksIDApO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg3KTtcbisgKlx0cGh5X3JlYWQocGh5LCAxKTtcdFx0cGh5X3dyaXRlKHBoeSwgMTQsIDB4M2QpO1xuKyAqXHRwaHlfcmVhZChwaHksIDQpO1x0XHRwaHlfd3JpdGUocGh5LCAxMywgMHg0MDA3KTtcbisgKlx0cGh5X3JlYWQocGh5LCA1KTtcdFx0cGh5X3JlYWQocGh5LCAxNCk7XG4rICpcdHBoeV9yZWFkKHBoeSwgNik7XG4rICpcbisgKiBGcm9tIHRoZSBhYm92ZSBzbmlwcGV0cyBpdCBwb2xscyBNRElPX0FOX0VFRV9BRFYgYW5kIE1ESU9fQU5fRUVFX0xQQUJMRSB2aWEgQzQ1IG92ZXIgQzIyLiBBc1xuKyAqIG9mIG5vdyBpdCBpcyB1bmNsZWFyIGhvdyB0aGUgaGFyZHdhcmUgZGVjaWRlcyBpZiBhIFBIWSBzdXBwb3J0cyB0aGVzZSByZWdpc3RlcnMuIEFmdGVyIG9uZSBQSFlcbisgKiBzdGF0dXMgaXMgcmVhZCwgdGhlIHBvbGxpbmcgZW5naW5lIGdvZXMgb3ZlciB0byB0aGUgbmV4dCBQSFkuIEJhc2ljYWxseSB0aGUgYnVzIGlzIGFsd2F5cyBidXN5XG4rICogYW5kIHRoZSBNQUMgc3RhdHVzIGlzIHVwZGF0ZWQgaW4gcmVhbC10aW1lLlxuKyAqXG4rICogSG93IGRvZXMgTURJTyBhY2Nlc3MgZnJvbSBrZXJuZWwgd29yaz9cbisgKlxuKyAqIFdoZW4gaXNzdWluZyBNRElPIGFjY2Vzc2VzIHZpYSBhbiBNTUlPIGJhc2VkIGludGVyZmFjZSB0aGUgZmluYWwgd3JpdGUgdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXJcbisgKiBzZXRzIGEgXCJydW4gY29tbWFuZCBub3dcIiBiaXQuIEJldHdlZW4gdHdvIHBvbGxpbmcgc2VxdWVuY2VzIGZvciBkaWZmZXJlbnQgUEhZcyB0aGUgaGFyZHdhcmVcbisgKiBjaGVja3MgaWYgYSB1c2VyIGNvbW1hbmQgbmVlZHMgdG8gcnVuIGFuZCBzZW5kcyBpdCBvbnRvIHRoZSBidXMuIEFmdGVyd2FyZHMgaXQgc2ltcGx5IGNvbnRpbnVlc1xuKyAqIGl0cyBwb2xsaW5nIHdvcmsuIEluc3BlY3RpbmcgdGhlIGNvbW1hbmQgc2VxdWVuY2UgZm9yIGEgcGFnZWQgcmVhZCBvbiB0aGUgbG9naWMgYW5hbHl6ZXIgZ2l2ZXM6XG4rICpcbisgKlx0UlRMODM4MFx0XHRcdFx0UlRMODM5M1xuKyAqXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqXHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XHRwaHlfd3JpdGUocGh5LCAzMSwgcGFnZSk7XG4rICpcdHBoeV93cml0ZShwaHksIHJlZywgdmFsdWUpO1x0cGh5X3dyaXRlKHBoeSwgcmVnLCB2YWx1ZSk7XG4rICpcdFx0XHRcdFx0cGh5X3dyaXRlKHBoeSwgMzEsIDApO1xuKyAqXG4rICogV2hhdCBkb2VzIHRoaXMgbWVhbj9cbisgKlxuKyAqIFRoZXJlIGFyZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gcG9sbGluZyBhbmQgUEhZIGFjY2VzcyBiZXR3ZWVuIHRoZSBtb2RlbHMgYnV0IHRoZSBjaGFsbGVuZ2VcbisgKiBzdGF5cyB0aGUgc2FtZS4gT24gdGhlIG9uZSBoYW5kIHRoYXQgZ3JlYXRseSBzaW1wbGlmaWVzIHRoZSBNQUMgbGF5ZXIsIG9uIHRoZSBvdGhlciBoYW5kIGl0XG4rICogaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciB0aGUga2VybmVsIFBIWSBzdWJzeXN0ZW0uXG4rICpcbisgKiAtIFdpdGhvdXQgdGhlIHBvbGxpbmcgYW5kIGEgcHJvcGVyIE1BQyBzdGF0dXMsIHNvbWUgb2YgdGhlIGxpbmsgaGFuZGxpbmcgZmVhdHVyZXMgZG8gbm90IHdvcmsuXG4rICogICBFc3BlY2lhbGx5IGFuIHVucG9wdWxhdGVkIE1BQ19MSU5LX1NUUyByZWdpc3RlciBjYW5jZWxzIG9wZXJhdGlvbnMgdG8gb3RoZXIgTUFDIHJlZ2lzdGVycy5cbisgKiAtIFRoZSBSZWFsdGVrIHBhZ2UgcmVnaXN0ZXIgMzEgaXMgbWFnaWNhbGx5IG1vZGlmaWVkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIHRoYXQgcG9sbGluZyB3aWxsXG4rICogICByZWFkIHRoZSByaWdodCBkYXRhLiBPbiB0aGUgUlRMODM4eCBwb2xsaW5nIHNpbXBseSByZXNldHMgaXQgdG8gemVyby4gT3RoZXIgZGV2aWNlcyBzZWVtXG4rICogICB0byB0cmFjayB0aGUgcGFnZSBhY2Nlc3MgXCJtYWdpY2FsbHlcIiBpbiB0aGUgYmFja2dyb3VuZC5cbisgKiAtIEEgQzQ1IG92ZXIgQzIyIGtlcm5lbCBhY2Nlc3Mgc2VxdWVuY2UgaXMgbW9zdCBsaWtlbHkgdG8gZmFpbCBiZWNhdXNlIGNoYW5jZXMgYXJlIGhpZ2ggdGhhdFxuKyAqICAgdGhlIHBvbGxpbmcgZW5naW5lIG92ZXJ3cml0ZXMgcmVnaXN0ZXJzIDEzLzE0IGluIGJldHdlZW4uXG4rICogLSBQSFkgZmlybXdhcmUgbG9hZGluZyBjYW4gaGF2ZSBpc3N1ZXMuIEVzcGVjaWFsbHkgaWYgYSBQSFkgaXMgZGVzaWduZWQgdG8gZXhwZWN0IGEgY2xlYW5cbisgKiAgIHNlcXVlbmNlIG9mIHJlZ2lzdGVycyBhbmQgdmFsdWVzIHdpdGhvdXQgZGV2aWF0aW9uLlxuKyAqIC0gQW4gYWNjZXNzIHRvIG9uZSBQSFkgd2lsbCBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IGZyZWUgc2xvdCBvZiB0aGUgcG9sbGluZyBlbmdpbmUuXG4rICpcbisgKiBDb25jbHVzaW9uOiBUaGUgUmVhbHRlayBNRElPIGJ1cyBkcml2ZXIgUEhZIGFjY2VzcyBtdXN0IGtub3cgYW5kIGhhbmRsZSBhbnkgaW50ZXJmZXJlbmNlIHRoYXRcbisgKiBhcmlzZXMgZnJvbSB0aGUgYWJvdmUgZGVzY3JpYmVkIGhhcmR3YXJlIHBvbGxpbmcuXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuQEAgLTUxLDYgKzExOSw1MCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuIFxuKyNkZWZpbmUgUlRMODM4MF9OVU1fQlVTRVNcdFx0XHQxXG4rI2RlZmluZSBSVEw4MzgwX05VTV9QQUdFU1x0XHRcdDQwOTZcbisjZGVmaW5lIFJUTDgzODBfTlVNX1BPUlRTXHRcdFx0MjhcbisjZGVmaW5lIFJUTDgzODBfU01JX0dMQl9DVFJMXHRcdFx0MHhhMTAwXG4rI2RlZmluZSAgIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FXHRcdEJJVCgxNSlcbisjZGVmaW5lIFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wXHRcdDB4YTFiOFxuKyNkZWZpbmUgUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzFcdFx0MHhhMWJjXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSygyNCwgMjApXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFXHRcdEdFTk1BU0soMTksIDE1KVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDE0LCAzKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1dSSVRFXHRcdEJJVCgyKVxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX1JFQURcdFx0XHQwXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DNDVcdFx0QklUKDEpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjJcdFx0MFxuKyNkZWZpbmUgICBSVEw4MzgwX1BIWV9DVFJMX0ZBSUxcdFx0XHQwIC8qIG5vIGZhaWwgaW5kaWNhdG9yICovXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfMlx0XHQweGExYzBcbisjZGVmaW5lICAgUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4rI2RlZmluZSAgIFJUTDgzODBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4rI2RlZmluZSBSVEw4MzgwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGExYzRcbisjZGVmaW5lIFJUTDgzODBfU01JX1BPTExfQ1RSTFx0XHRcdDB4YTE3Y1xuKyNkZWZpbmUgUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhhMWM4XG4rXG4rI2RlZmluZSBSVEw4MzkwX05VTV9CVVNFU1x0XHRcdDJcbisjZGVmaW5lIFJUTDgzOTBfTlVNX1BBR0VTXHRcdFx0ODE5MlxuKyNkZWZpbmUgUlRMODM5MF9OVU1fUE9SVFNcdFx0XHQ1MlxuKyNkZWZpbmUgUlRMODM5MF9CQ0FTVF9QSFlJRF9DVFJMXHRcdDB4MDNlY1xuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfQUNDRVNTX0NUUkxcdFx0MHgwM2RjXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFJcdFx0R0VOTUFTSyg5LCA1KVxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRVx0XHRHRU5NQVNLKDIyLCAxMClcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9GQUlMXHRcdFx0QklUKDEpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfV1JJVEVcdFx0QklUKDMpXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfUkVBRFx0XHRcdDBcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0M0NVx0XHRCSVQoMilcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMlx0XHQwXG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19DVFJMXHRcdFx0MHgwM2UwXG4rI2RlZmluZSAgIFJUTDgzOTBfUEhZX0NUUkxfRVhUX1BBR0VcdFx0R0VOTUFTSyg4LCAwKVxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfREFUQV9DVFJMXHRcdDB4MDNmMFxuKyNkZWZpbmUgICBSVEw4MzkwX1BIWV9DVFJMX0lOREFUQVx0XHRHRU5NQVNLKDMxLCAxNilcbisjZGVmaW5lICAgUlRMODM5MF9QSFlfQ1RSTF9EQVRBXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIFJUTDgzOTBfUEhZUkVHX01NRF9DVFJMXHRcdFx0MHgwM2Y0XG4rI2RlZmluZSBSVEw4MzkwX1BIWVJFR19QT1JUX0NUUkxfTE9XXHRcdDB4MDNlNFxuKyNkZWZpbmUgUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0hcdFx0MHgwM2U4XG4rI2RlZmluZSBSVEw4MzkwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDAzZmNcbitcbiAjZGVmaW5lIFJUTDkzMDBfTlVNX0JVU0VTXHRcdFx0NFxuICNkZWZpbmUgUlRMOTMwMF9OVU1fUEFHRVNcdFx0XHQ0MDk2XG4gI2RlZmluZSBSVEw5MzAwX05VTV9QT1JUU1x0XHRcdDI4XG5AQCAtNzEsNiArMTgzLDcgQEBcbiAjZGVmaW5lICAgUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEFcdFx0R0VOTUFTSygzMSwgMTYpXG4gI2RlZmluZSAgIFJUTDkzMDBfUEhZX0NUUkxfREFUQVx0XHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzAwX1NNSV9BQ0NFU1NfUEhZX0NUUkxfM1x0XHQweGNiN2NcbisjZGVmaW5lIFJUTDkzMDBfU01JX1BPTExfQ1RSTFx0XHRcdDB4Y2E5MFxuICNkZWZpbmUgUlRMOTMwMF9TTUlfUE9SVDBfNV9BRERSX0NUUkxcdFx0MHhjYjgwXG4gXG4gI2RlZmluZSBSVEw5MzEwX05VTV9CVVNFU1x0XHRcdDRcbkBAIC05NiwxMSArMjA5LDEzIEBAXG4gI2RlZmluZSAgIFJUTDkzMTBfUEhZX0NUUkxfSU5EQVRBXHRcdEdFTk1BU0soMTUsIDApXG4gI2RlZmluZSBSVEw5MzEwX1NNSV9JTkRSVF9BQ0NFU1NfTU1EX0NUUkxcdDB4MGMxOFxuICNkZWZpbmUgUlRMOTMxMF9TTUlfUE9SVF9BRERSX0NUUkxcdFx0MHgwYzc0XG4rI2RlZmluZSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTFx0XHQweDBjY2NcbiAjZGVmaW5lIFJUTDkzMTBfU01JX1BPUlRfUE9MTElOR19TRUxcdFx0MHgwYzljXG4gXG4gI2RlZmluZSBQSFlfQ1RSTF9DTURcdFx0XHRcdEJJVCgwKVxuICNkZWZpbmUgUEhZX0NUUkxfTU1EX0RFVkFEXHRcdFx0R0VOTUFTSygyMCwgMTYpXG4gI2RlZmluZSBQSFlfQ1RSTF9NTURfUkVHXHRcdFx0R0VOTUFTSygxNSwgMClcbisjZGVmaW5lIFBIWV9WRU5ET1JfUkVBTFRFS1x0XHRcdDB4MDAxY2M4MDBcbiBcbiAjZGVmaW5lIE1BUF9BRERSU19QRVJfUkVHXHRcdFx0NlxuICNkZWZpbmUgTUFQX0JJVFNfUEVSX0FERFJcdFx0XHQ1XG5AQCAtMTI2LDcgKzI0MSw5IEBAIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYge1xuIFx0Y29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyAqaW5mbztcbiBcdHN0cnVjdCByZWdtYXAgKnJlZ21hcDtcbiBcdHN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0IEhXIGFjY2VzcyAqL1xuK1x0REVDTEFSRV9CSVRNQVAocGh5X3BvbGwsIE1BWF9QT1JUUyk7XG4gXHRERUNMQVJFX0JJVE1BUCh2YWxpZF9wb3J0cywgTUFYX1BPUlRTKTtcbitcdHUxNiBwYWdlW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYnVzW01BWF9QT1JUU107XG4gXHR1OCBzbWlfYWRkcltNQVhfUE9SVFNdO1xuIFx0Ym9vbCBzbWlfYnVzX2lzX2M0NVtNQVhfU01JX0JVU1NFU107XG5AQCAtMTQzLDYgKzI2MCw3IEBAIHN0cnVjdCBvdHRvX2VtZGlvX2luZm8ge1xuIFx0dTggbnVtX2J1c2VzO1xuIFx0dTggbnVtX3BvcnRzO1xuIFx0dTE2IG51bV9wYWdlcztcbitcdHUzMiBwb2xsX2N0cmw7XG4gXHRpbnQgKCpzZXR1cF9jb250cm9sbGVyKShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KTtcbiBcdGludCAoKnJlYWRfYzIyKShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XG4gXHRpbnQgKCpyZWFkX2M0NSkoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSk7XG5AQCAtMTc4LDYgKzI5NiwxNCBAQCBzdGF0aWMgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqb3R0b19lbWRpb19idXNfdG9fcHJpdihzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuIFx0cmV0dXJuIGNoYW4tXHUwMDNlcHJpdjtcbiB9XG4gXG4rc3RhdGljIGludCBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiwgaW50IHBvcnQsIGJvb2wgYWN0aXZlKVxuK3tcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKTtcbitcbitcdHJldHVybiByZWdtYXBfYXNzaWduX2JpdHMocHJpdi1cdTAwM2VyZWdtYXAsIHByaXYtXHUwMDNlaW5mby1cdTAwM2Vwb2xsX2N0cmwgKyAocG9ydCAvIDMyKSAqIDQsXG4rXHRcdFx0XHQgIEJJVChwb3J0ICUgMzIpLCBhY3RpdmUpO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcnVuX2NtZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCB1MzIgY21kLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcbiB7XG5AQCAtMTg2LDkgKzMxMiw5IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHR1MzIgY21kc3RhdGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0LyogRGVmZW5zaXZlIHByZSBjaGVjayBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgaG9ycmlibGUgd3JvbmcgKi9cbitcdC8qIERlZmVuc2l2ZSBwcmUgY2hlY2sganVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIGhvcnJpYmx5IHdyb25nICovXG4gXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cdTAwM2VyZWdtYXAsIGluZm8tXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcbitcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjI4LDcgKzM1NCw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19ydW5fY21kKHN0cnVjdCBtaWlfYnVzICpidXMsIHUzMiBjbWQsXG4gXHRcdHJldHVybiByZXQ7XG4gXG4gXHRyZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQocHJpdi1cdTAwM2VyZWdtYXAsIGluZm8tXHUwMDNlY21kX3JlZ3MuYzIyX2RhdGEsXG4tXHRcdFx0XHQgICAgICAgY21kc3RhdGUsICEoY21kc3RhdGUgXHUwMDI2IFBIWV9DVFJMX0NNRCksIDEwLCAxMDAwKTtcbitcdFx0XHRcdCAgICAgICBjbWRzdGF0ZSwgIShjbWRzdGF0ZSBcdTAwMjYgUEhZX0NUUkxfQ01EKSwgMTAsIDEwMDAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjY1LDEzICszOTEsMTIzIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcbiBcdHJldHVybiBvdHRvX2VtZGlvX3J1bl9jbWQoYnVzLCBjbWQgfCBwcml2LVx1MDAzZWluZm8tXHUwMDNlY21kX3dyaXRlLCBjbWRfZGF0YSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbitcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzIyLCBcdTAwMjZjbWRfZGF0YSxcbitcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzODBfUEhZX0NUUkxfUEFSS19QQUdFLCAweDFmKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM4MF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbitcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzODBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzgwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSxcbitcdFx0XHRcdCAgIFJUTDgzODBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzgwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSBCSVQocG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fd3JpdGVfY21kKGJ1cywgUlRMODM4MF9QSFlfQ1RSTF9UWVBFX0M0NSwgXHUwMDI2Y21kX2RhdGEpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuK1x0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4rXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuK1x0XHQuZXh0X3BhZ2VcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0VYVF9QQUdFLCAweDFmZiksXG4rXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9JTkRBVEEsIHBvcnQpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3JlYWRfY21kKGJ1cywgUlRMODM5MF9QSFlfQ1RSTF9UWVBFX0MyMiwgXHUwMDI2Y21kX2RhdGEsXG4rXHRcdFx0XHQgICBSVEw4MzkwX1BIWV9DVFJMX0RBVEEsIHZhbHVlKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXG4re1xuK1x0c3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdiA9IG90dG9fZW1kaW9fYnVzX3RvX3ByaXYoYnVzKTtcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbitcdFx0LmV4dF9wYWdlXHQ9IEZJRUxEX1BSRVAoUlRMODM5MF9QSFlfQ1RSTF9FWFRfUEFHRSwgMHgxZmYpLFxuK1x0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDgzOTBfUEhZX0NUUkxfSU5EQVRBLCB2YWx1ZSksXG4rXHRcdC5wb3J0X21hc2tfaGlnaFx0PSAodTMyKShCSVRfVUxMKHBvcnQpIFx1MDAzZVx1MDAzZSAzMiksXG4rXHRcdC5wb3J0X21hc2tfbG93XHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkpLFxuK1x0fTtcbitcbitcdHJldHVybiBvdHRvX2VtZGlvX3dyaXRlX2NtZChidXMsIFJUTDgzOTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhKTtcbit9XG4rXG4rc3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgcG9ydCksXG4rXHR9O1xuK1xuK1x0cmV0dXJuIG90dG9fZW1kaW9fcmVhZF9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSxcbitcdFx0XHRcdCAgIFJUTDgzOTBfUEhZX0NUUkxfREFUQSwgdmFsdWUpO1xuK31cbitcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsXG4rXHRcdFx0XHQgICAgIGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuK1x0XHQuYzQ1X2RhdGFcdD0gRklFTERfUFJFUChQSFlfQ1RSTF9NTURfREVWQUQsIGRldl9hZGRyKSB8XG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUEhZX0NUUkxfTU1EX1JFRywgcmVnbnVtKSxcbitcdFx0LmlvX2RhdGFcdD0gRklFTERfUFJFUChSVEw4MzkwX1BIWV9DVFJMX0lOREFUQSwgdmFsdWUpLFxuK1x0XHQucG9ydF9tYXNrX2hpZ2hcdD0gKHUzMikoQklUX1VMTChwb3J0KSBcdTAwM2VcdTAwM2UgMzIpLFxuK1x0XHQucG9ydF9tYXNrX2xvd1x0PSAodTMyKShCSVRfVUxMKHBvcnQpKSxcbitcdH07XG4rXG4rXHRyZXR1cm4gb3R0b19lbWRpb193cml0ZV9jbWQoYnVzLCBSVEw4MzkwX1BIWV9DVFJMX1RZUEVfQzQ1LCBcdTAwMjZjbWRfZGF0YSk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LCBpbnQgcmVnbnVtLCB1MzIgKnZhbHVlKVxuIHtcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KGJ1cyk7XG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyBjbWRfZGF0YSA9IHtcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4gXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9QQVJLX1BBR0UsIDB4MWYpIHxcbi1cdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX01BSU5fUEFHRSwgUkFXX1BBR0UocHJpdikpLFxuK1x0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBwcml2LVx1MDAzZXBhZ2VbcG9ydF0pLFxuIFx0XHQuaW9fZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfSU5EQVRBLCBwb3J0KSxcbiBcdH07XG4gXG5AQCAtMjg1LDcgKzUyMSw3IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3dyaXRlX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSxcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYzIyX2RhdGFcdD0gRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1JFR19BRERSLCByZWdudW0pIHxcbiBcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzAwX1BIWV9DVFJMX1BBUktfUEFHRSwgMHgxZikgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMDBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMwMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gQklUKHBvcnQpLFxuIFx0fTtcbkBAIC0zMjUsNyArNTYxLDcgQEAgc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHVcbiBcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzIGNtZF9kYXRhID0ge1xuIFx0XHQuYnJvYWRjYXN0XHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9CQ19QT1JUX0lELCBwb3J0KSxcbiBcdFx0LmMyMl9kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9SRUdfQUREUiwgcmVnbnVtKSB8XG4tXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIFJBV19QQUdFKHByaXYpKSxcbitcdFx0XHRcdCAgRklFTERfUFJFUChSVEw5MzEwX1BIWV9DVFJMX01BSU5fUEFHRSwgcHJpdi1cdTAwM2VwYWdlW3BvcnRdKSxcbiBcdH07XG4gXG4gXHRyZXR1cm4gb3R0b19lbWRpb19yZWFkX2NtZChidXMsIFJUTDkzMTBfUEhZX0NUUkxfVFlQRV9DMjIsIFx1MDAyNmNtZF9kYXRhLFxuQEAgLTMzNyw3ICs1NzMsNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sXG4gXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihidXMpO1xuIFx0c3RydWN0IG90dG9fZW1kaW9fY21kX3JlZ3MgY21kX2RhdGEgPSB7XG4gXHRcdC5jMjJfZGF0YVx0PSBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfUkVHX0FERFIsIHJlZ251bSkgfFxuLVx0XHRcdFx0ICBGSUVMRF9QUkVQKFJUTDkzMTBfUEhZX0NUUkxfTUFJTl9QQUdFLCBSQVdfUEFHRShwcml2KSksXG4rXHRcdFx0XHQgIEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9NQUlOX1BBR0UsIHByaXYtXHUwMDNlcGFnZVtwb3J0XSksXG4gXHRcdC5pb19kYXRhXHQ9IEZJRUxEX1BSRVAoUlRMOTMxMF9QSFlfQ1RSTF9JTkRBVEEsIHZhbHVlKSxcbiBcdFx0LnBvcnRfbWFza19oaWdoXHQ9ICh1MzIpKEJJVF9VTEwocG9ydCkgXHUwMDNlXHUwMDNlIDMyKSxcbiBcdFx0LnBvcnRfbWFza19sb3dcdD0gKHUzMikoQklUX1VMTChwb3J0KSksXG5AQCAtMzgzLDggKzYxOSwxMiBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcbiBcdGlmIChwb3J0IFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gcG9ydDtcbiBcbi1cdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKVxuK1x0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spIHtcbitcdFx0aWYgKHJlZ251bSA9PSAzMSlcbitcdFx0XHRyZXR1cm4gcHJpdi1cdTAwM2VwYWdlW3BvcnRdO1xuK1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNlcmVhZF9jMjIoYnVzLCBwb3J0LCByZWdudW0sIFx1MDAyNnZhbHVlKTtcbitcdH1cbiBcbiBcdHJldHVybiByZXQgPyByZXQgOiB2YWx1ZTtcbiB9XG5AQCAtMzk4LDggKzYzOCwxNyBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNlxuIFx0aWYgKHBvcnQgXHUwMDNjIDApXG4gXHRcdHJldHVybiBwb3J0O1xuIFxuLVx0c2NvcGVkX2d1YXJkKG11dGV4LCBcdTAwMjZwcml2LVx1MDAzZWxvY2spXG4rXHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuK1x0XHRpZiAocmVnbnVtID09IDMxKSB7XG4rXHRcdFx0aWYgKHZhbHVlIFx1MDAzZT0gUkFXX1BBR0UocHJpdikpXG4rXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0XHRwcml2LVx1MDAzZXBhZ2VbcG9ydF0gPSB2YWx1ZTtcbitcdFx0XHRyZXR1cm4gMDtcbitcdFx0fVxuK1xuIFx0XHRyZXQgPSBwcml2LVx1MDAzZWluZm8tXHUwMDNld3JpdGVfYzIyKGJ1cywgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XG4rXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00NzIsNiArNzIxLDE1IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbit7XG4rXHQvKlxuK1x0ICogUEhZX1BBVENIX0RPTkUgZW5hYmxlcyBQSFkgY29udHJvbCB2aWEgU29DLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBQSFkgYWNjZXNzLCBpbmNsdWRpbmdcbitcdCAqIHBhdGNoaW5nIGFuZCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIFBIWXMgYXJlIHByb2JlZC5cbitcdCAqL1xuK1x0cmV0dXJuIHJlZ21hcF9zZXRfYml0cyhwcml2LVx1MDAzZXJlZ21hcCwgUlRMODM4MF9TTUlfR0xCX0NUUkwsIFJUTDgzODBfU01JX1BIWV9QQVRDSF9ET05FKTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBnbGJfY3RybF9tYXNrID0gMCwgZ2xiX2N0cmxfdmFsID0gMDtcbkBAIC01MDgsNiArNzY2LDU0IEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2goc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2ID0gb3R0b19lbWRpb19idXNfdG9fcHJpdihwaHlkZXYtXHUwMDNlbWRpby5idXMpO1xuK1x0aW50IHBvcnQgPSBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHBoeWRldi1cdTAwM2VtZGlvLmJ1cywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4rXHRzdHJ1Y3Qgb3R0b19lbWRpb19jaGFuICpjaGFuID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZXByaXY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBvcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBwb3J0O1xuK1xuK1x0aWYgKHRlc3RfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGlmICghcHJpdi1cdTAwM2VzbWlfYnVzX2lzX2M0NVtjaGFuLVx1MDAzZW1kaW9fYnVzXSBcdTAwMjZcdTAwMjZcbitcdCAgICAoIXBoeV9pZF9jb21wYXJlX3ZlbmRvcihwaHlkZXYtXHUwMDNlcGh5X2lkLCBQSFlfVkVORE9SX1JFQUxURUspKSkge1xuK1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCJPbmx5IFJlYWx0ZWsgUEhZcyBhbGxvd2VkIG9uIEMyMiBidXNcXG5cIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCB0cnVlKTtcbitcdFx0aWYgKCFyZXQpXG4rXHRcdFx0X19zZXRfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYgPSBvdHRvX2VtZGlvX2J1c190b19wcml2KHBoeWRldi1cdTAwM2VtZGlvLmJ1cyk7XG4rXHRpbnQgcG9ydCA9IG90dG9fZW1kaW9fcGh5X3RvX3BvcnQocGh5ZGV2LVx1MDAzZW1kaW8uYnVzLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBvcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdHNjb3BlZF9ndWFyZChtdXRleCwgXHUwMDI2cHJpdi1cdTAwM2Vsb2NrKSB7XG4rXHRcdHJldCA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdF9fY2xlYXJfYml0KHBvcnQsIHByaXYtXHUwMDNlcGh5X3BvbGwpO1xuK1x0fVxuK1x0XG4rXHRpZiAocmV0KVxuK1x0XHRkZXZfZXJyKGJ1cy1cdTAwM2VwYXJlbnQsIFwiZmFpbGVkIHRvIGRpc2FibGUgcG9sbGluZyBmb3IgcG9ydCAlZFxcblwiLCBwb3J0KTtcbit9XG4rXG4gc3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXG4gXHRcdFx0XHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXG4ge1xuQEAgLTUzNyw2ICs4NDMsOSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmVfb25lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdlxuIFx0XHRidXMtXHUwMDNld3JpdGUgPSBvdHRvX2VtZGlvX3dyaXRlX2MyMjtcbiBcdH1cbiBcdGJ1cy1cdTAwM2VwYXJlbnQgPSBkZXY7XG4rXHRidXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2ggPSBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoO1xuK1x0YnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoID0gb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaDtcbitcbiBcdGNoYW4gPSBidXMtXHUwMDNlcHJpdjtcbiBcdGNoYW4tXHUwMDNlbWRpb19idXMgPSBtZGlvX2J1cztcbiBcdGNoYW4tXHUwMDNlcHJpdiA9IHByaXY7XG5AQCAtNjUzLDYgKzk2MiwyMSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fbWFwX3BvcnRzKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuK3N0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0Zm9yIChpbnQgcG9ydCA9IDA7IHBvcnQgXHUwMDNjIHByaXYtXHUwMDNlaW5mby1cdTAwM2VudW1fcG9ydHM7IHBvcnQrKykge1xuK1x0XHRzY29wZWRfZ3VhcmQobXV0ZXgsIFx1MDAyNnByaXYtXHUwMDNlbG9jaykge1xuK1x0XHRcdGVyciA9IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhwcml2LCBwb3J0LCBmYWxzZSk7XG4rXHRcdFx0aWYgKGVycilcbitcdFx0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbkBAIC02NzIsNiArOTk2LDEwIEBAIHN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0aWYgKElTX0VSUihwcml2LVx1MDAzZXJlZ21hcCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlcmVnbWFwKTtcbiBcbitcdGVyciA9IG90dG9fZW1kaW9faW5pdF9wb2xsaW5nKHByaXYpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbiBcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpO1xuIFxuIFx0ZXJyID0gb3R0b19lbWRpb19tYXBfcG9ydHMoZGV2KTtcbkBAIC02OTcsNiArMTAyNSw1MSBAQCBzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcbitcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXG4rXHQuY21kX2ZhaWwgPSBSVEw4MzgwX1BIWV9DVFJMX0ZBSUwsXG4rXHQuY21kX3JlYWQgPSBSVEw4MzgwX1BIWV9DVFJMX1JFQUQsXG4rXHQuY21kX3dyaXRlID0gUlRMODM4MF9QSFlfQ1RSTF9XUklURSxcbitcdC5jbWRfcmVncyA9IHtcbitcdFx0LmMyMl9kYXRhID0gUlRMODM4MF9TTUlfQUNDRVNTX1BIWV9DVFJMXzEsXG4rXHRcdC5jNDVfZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8zLFxuK1x0XHQuaW9fZGF0YSA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8yLFxuK1x0XHQucG9ydF9tYXNrX2xvdyA9IFJUTDgzODBfU01JX0FDQ0VTU19QSFlfQ1RSTF8wLFxuK1x0fSxcbitcdC5udW1fYnVzZXMgPSBSVEw4MzgwX05VTV9CVVNFUyxcbitcdC5udW1fcGFnZXMgPSBSVEw4MzgwX05VTV9QQUdFUyxcbitcdC5udW1fcG9ydHMgPSBSVEw4MzgwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw4MzgwX1NNSV9QT0xMX0NUUkwsXG4rXHQuc2V0dXBfY29udHJvbGxlciA9IG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzgwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NSxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fODM5MF9pbmZvID0ge1xuK1x0LmNtZF9mYWlsID0gUlRMODM5MF9QSFlfQ1RSTF9GQUlMLFxuK1x0LmNtZF9yZWFkID0gUlRMODM5MF9QSFlfQ1RSTF9SRUFELFxuK1x0LmNtZF93cml0ZSA9IFJUTDgzOTBfUEhZX0NUUkxfV1JJVEUsXG4rXHQuY21kX3JlZ3MgPSB7XG4rXHRcdC5icm9hZGNhc3QgPSBSVEw4MzkwX0JDQVNUX1BIWUlEX0NUUkwsXG4rXHRcdC5jMjJfZGF0YSA9IFJUTDgzOTBfUEhZUkVHX0FDQ0VTU19DVFJMLFxuK1x0XHQuYzQ1X2RhdGEgPSBSVEw4MzkwX1BIWVJFR19NTURfQ1RSTCxcbitcdFx0LmV4dF9wYWdlID0gUlRMODM5MF9QSFlSRUdfQ1RSTCxcbitcdFx0LmlvX2RhdGEgPSBSVEw4MzkwX1BIWVJFR19EQVRBX0NUUkwsXG4rXHRcdC5wb3J0X21hc2tfbG93ID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0xPVyxcbitcdFx0LnBvcnRfbWFza19oaWdoID0gUlRMODM5MF9QSFlSRUdfUE9SVF9DVFJMX0hJR0gsXG4rXHR9LFxuK1x0Lm51bV9idXNlcyA9IFJUTDgzOTBfTlVNX0JVU0VTLFxuK1x0Lm51bV9wYWdlcyA9IFJUTDgzOTBfTlVNX1BBR0VTLFxuK1x0Lm51bV9wb3J0cyA9IFJUTDgzOTBfTlVNX1BPUlRTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDgzOTBfU01JX1BPUlRfUE9MTElOR19DVFJMLFxuK1x0LnJlYWRfYzIyID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzIyLFxuK1x0LnJlYWRfYzQ1ID0gb3R0b19lbWRpb184MzkwX3JlYWRfYzQ1LFxuK1x0LndyaXRlX2MyMiA9IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIsXG4rXHQud3JpdGVfYzQ1ID0gb3R0b19lbWRpb184MzkwX3dyaXRlX2M0NSxcbit9O1xuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0LmFkZHJfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF81X0FERFJfQ1RSTCxcbiBcdC5idXNfbWFwX2Jhc2UgPSBSVEw5MzAwX1NNSV9QT1JUMF8xNV9QT0xMSU5HX1NFTCxcbkBAIC03MTIsNiArMTA4NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3R0b19lbWRpb19pbmZvIG90dG9fZW1kaW9fOTMwMF9pbmZvID0ge1xuIFx0Lm51bV9idXNlcyA9IFJUTDkzMDBfTlVNX0JVU0VTLFxuIFx0Lm51bV9wb3J0cyA9IFJUTDkzMDBfTlVNX1BPUlRTLFxuIFx0Lm51bV9wYWdlcyA9IFJUTDkzMDBfTlVNX1BBR0VTLFxuK1x0LnBvbGxfY3RybCA9IFJUTDkzMDBfU01JX1BPTExfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMDBfcmVhZF9jNDUsXG5AQCAtNzM3LDYgKzExMTEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiBcdC5udW1fYnVzZXMgPSBSVEw5MzEwX05VTV9CVVNFUyxcbiBcdC5udW1fcGFnZXMgPSBSVEw5MzEwX05VTV9QQUdFUyxcbiBcdC5udW1fcG9ydHMgPSBSVEw5MzEwX05VTV9QT1JUUyxcbitcdC5wb2xsX2N0cmwgPSBSVEw5MzEwX1NNSV9QT1JUX1BPTExJTkdfQ1RSTCxcbiBcdC5zZXR1cF9jb250cm9sbGVyID0gb3R0b19lbWRpb185MzEwX3NldHVwX2NvbnRyb2xsZXIsXG4gXHQucmVhZF9jMjIgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jMjIsXG4gXHQucmVhZF9jNDUgPSBvdHRvX2VtZGlvXzkzMTBfcmVhZF9jNDUsXG5AQCAtNzQ1LDYgKzExMjAsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzkzMTBfaW5mbyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG90dG9fZW1kaW9faWRzW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzODAtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM4MF9pbmZvIH0sXG4rXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDgzOTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fODM5MF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMDEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMwMF9pbmZvIH0sXG4gXHR7IC5jb21wYXRpYmxlID0gXCJyZWFsdGVrLHJ0bDkzMTEtbWRpb1wiLCAuZGF0YSA9IFx1MDAyNm90dG9fZW1kaW9fOTMxMF9pbmZvIH0sXG4gXHR7fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAwNjE1MjI4NDU5ZWY0Mi4uNjc2Y2JmMTgzMzUwZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTg3Niw2ICsxODc2LDEyIEBAIGludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJvcjtcbiBcbitcdGlmIChwaHlkZXYtXHUwMDNlbWRpby5idXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2gpIHtcbitcdFx0ZXJyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfYXR0YWNoKHBoeWRldik7XG4rXHRcdGlmIChlcnIpXG4rXHRcdFx0Z290byBlcnJvcjtcbitcdH1cbitcbiBcdHBoeV9yZXN1bWUocGh5ZGV2KTtcbiBcbiBcdC8qKlxuQEAgLTE5MTksNiArMTkyNSw5IEBAIHZvaWQgcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0c3RydWN0IG1vZHVsZSAqbmRldl9vd25lciA9IE5VTEw7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzO1xuIFxuK1x0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaClcbitcdFx0cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW5vdGlmeV9waHlfZGV0YWNoKHBoeWRldik7XG4rXG4gXHRpZiAocGh5ZGV2LVx1MDAzZWRldmxpbmspIHtcbiBcdFx0ZGV2aWNlX2xpbmtfZGVsKHBoeWRldi1cdTAwM2VkZXZsaW5rKTtcbiBcdFx0cGh5ZGV2LVx1MDAzZWRldmxpbmsgPSBOVUxMO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5pbmRleCAxOTlhN2FhYTM0MWJmZC4uMzE2MGNhOTlkZWFiNzkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMzc2LDYgKzM3NiwxMCBAQCBzdHJ1Y3QgbWlpX2J1cyB7XG4gXHRcdFx0IGludCByZWdudW0sIHUxNiB2YWwpO1xuIFx0LyoqIEByZXNldDogUGVyZm9ybSBhIHJlc2V0IG9mIHRoZSBidXMgKi9cbiBcdGludCAoKnJlc2V0KShzdHJ1Y3QgbWlpX2J1cyAqYnVzKTtcbitcdC8qKiBAbm90aWZ5X3BoeV9hdHRhY2g6IFBlcmZvcm0gcG9zdC1hdHRhY2ggaGFuZGxpbmcgKi9cbitcdGludCAoKm5vdGlmeV9waHlfYXR0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbitcdC8qKiBAbm90aWZ5X3BoeV9kZXRhY2g6IFBlcmZvcm0gcHJlLWRldGFjaCBoYW5kbGluZyAqL1xuK1x0dm9pZCAoKm5vdGlmeV9waHlfZGV0YWNoKShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiBcbiBcdC8qKiBAc3RhdHM6IFN0YXRpc3RpYyBjb3VudGVycyBwZXIgZGV2aWNlIG9uIHRoZSBidXMgKi9cbiBcdHN0cnVjdCBtZGlvX2J1c19zdGF0cyBzdGF0c1tQSFlfTUFYX0FERFJdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6NTQ6MzIuNzYxNTA0ODU5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQwODEyODQ5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBmb3IgVGVzdGFiaWxpdHkgaW4gdGhlIFBIWSBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcy4gSXQgc2VlbXMgbGlrZSBpdCdzIHRvdWNoaW5nIHNldmVyYWwgYXJlYXM6IHRoZSBSZWFsdGVrIE1ESU8gY29udHJvbGxlciBkcml2ZXIsIGRldmljZSB0cmVlIGJpbmRpbmdzLCBhbmQgdGhlbiBzb21lIGNvcmUgUEhZIHN1YnN5c3RlbSBmaWxlcyAoYHBoeV9kZXZpY2UuY2AgYW5kIGBwaHkuaGApLiBTcGVjaWZpY2FsbHksIHRoZXkncmUgYWRkaW5nIHRoZXNlIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBgbWlpX2J1c2Agc3RydWN0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQ2FuIHdlIGFjdHVhbGx5ICp0ZXN0KiB0aGlzIGVmZmVjdGl2ZWx5PyBJcyBpdCBldmVuICp3b3J0aCogZnV6emluZz9cIlxuXG5UaGUgY2hhbmdlcyB0byBgcGh5X2RldmljZS5jYCDigJMgYWRkaW5nIHRob3NlIGNhbGxiYWNrcyBhbmQgdXNpbmcgdGhlbSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAg4oCTIHRoYXTigJlzIGNvcmUgUEhZIHN0dWZmLiBEZWZpbml0ZWx5IHJlYWNoYWJsZS4gSSdtIGxlc3Mgc3VyZSBhYm91dCB0aGUgUmVhbHRlayBNRElPIGRyaXZlciwgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBUaGF0J3MgaGFyZHdhcmUtc3BlY2lmaWMuIEknbSBndWVzc2luZyBpdCdzIHByb2JhYmx5ICpub3QqIGdvaW5nIHRvIGJlIHJlYWNoYWJsZSBpbiBtYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1bmxlc3MgdGhlcmUncyBhbiBlbXVsYXRvciBvciB3ZSdyZSB1c2luZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBzb21laG93LiBCdXQgdGhlICpjb3JlKiBQSFkgc3Vic3lzdGVtIGNoYW5nZXM/IFRob3NlIGFyZSBmYWlyIGdhbWUuXG5cbkFscmlnaHQsIGxldCdzIGxvb2sgY2xvc2VyIGF0IGBwaHlfYXR0YWNoX2RpcmVjdGAgYW5kIGBwaHlfZGV0YWNoYC4gQWgsIHJpZ2h0LCB0aGV5J3JlIGNhbGxpbmcgdGhvc2UgbmV3IGNhbGxiYWNrczogYHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpYCBhbmQgYHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2RldGFjaChwaHlkZXYpYC4gT2theSwgdGhhdCdzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSB0byB0aGUgY29yZSBQSFkgc3Vic3lzdGVtIGZvciBzdXJlLiBJdCdzIGEgcHJldHR5IGNsZWFuIGNoYW5nZSwgc28gbGV0J3Mgc3RhcnQgZnV6emluZyBhcm91bmQgdGhhdCBzZWN0aW9uLlxuXG5Ob3csIGxldCdzIHNlZSBpZiB0aGlzIGlzIHRpZWQgdG8gYW55IHNwZWNpZmljIEtjb25maWcgb3B0aW9ucy4gT2J2aW91c2x5LCBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AgcmVxdWlyZXMgYENPTkZJR19QSFlMSUJgLiBJIHdvbmRlciBhYm91dCBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AuIElzIHRoZXJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5NiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU0OjM5LjE2OTYzNjQ1N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU2Mzk5MTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8tcmVhbHRlay1ydGw5MzAwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX01ESU9fUElDNjRIUFNDKVxcdFxcdCs9IG1kaW8tcGljNjRocHNjLm9cXG5kcml2ZXJzL25ldC9tZGlvL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19NRElPX1JFQUxURUtfUlRMOTMwMClcXHQrPSBtZGlvLXJlYWx0ZWstcnRsOTMwMC5vXFxuZHJpdmVycy9uZXQvbWRpby9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfTURJT19SRUdNQVApXFx0XFx0Kz0gbWRpby1yZWdtYXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NDo0MS42MjYwNDY4NDlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYxOTgyOTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIG9uIHRoZSBwZXJzb25hIHlvdSd2ZSBkZXNjcmliZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIEtjb25maWcgZm9yIFJUTDkzMDAgTURJTyBTdXBwb3J0KipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhpcyBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L21kaW8vYCBkaXJlY3RvcnkuIEkga25vdyB0aGF0J3Mgd2hlcmUgdGhlIG5ldHdvcmsgTURJTyBkcml2ZXIgY29uZmlndXJhdGlvbnMgYXJlIHR5cGljYWxseSBob3VzZWQuIEknbSBsb29raW5nIGZvciB0aGUgc3ltYm9sIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgLiBUaGF0J3MgdGhlIGtleS4gS25vd2luZyB0aGF0IHN5bWJvbCdzIHByZXNlbmNlIGFuZCBpdHMgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzcGVjaWZpYyBNRElPIGRyaXZlciBpcyBlbmFibGVkIG9yIGRpc2FibGVkIGFuZCB3aGF0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZSB3aGVuIGl0IGNvbWVzIHRvIHRoZSBidWlsZC4gSSBleHBlY3QgdGhlIGZpbGUgd2lsbCBnaXZlIG1lIGRldGFpbHMgYXJvdW5kIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBzdXBwb3J0IGFuZCBhbnkgcmVsZXZhbnQgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCBpZiBpdCBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAwOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU0OjQ0LjY4ODAzMTc3N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM3OTk1MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9tZGlvL0tjb25maWc9MTY0PWNvbmZpZyBNRElPX0lQUTgwNjRcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzEtXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnOjE3Mjpjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWctMTczLVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6NTQ6NDcuMTI2MDMyNjQ5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyNjA5NzU0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogUEhZIENvcmUgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSBjb3JlIFBIWSBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIGlzIHRoaXMgd29ydGggdGhlIGZ1enppbmcgZWZmb3J0PyBJdCdzIGFkZGluZyB0d28gbmV3IGNhbGxiYWNrcywgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCwgdG8gdGhlIGBtaWlfYnVzYCBzdHJ1Y3QuIEF0IGZpcnN0IGdsYW5jZSwgaXQgc2VlbXMgdGhlIGNvcmUgY2hhbmdlIGlzIHNpbXBsZTogYSBub24tTlVMTCBjaGVjayBhbmQgZnVuY3Rpb24gY2FsbC5cblxuVGhlIHByaW1hcnkgdXNlciBvZiB0aGVzZSBuZXcgY2FsbGJhY2tzIGFwcGVhcnMgdG8gYmUgYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLiBOb3csIGJlY2F1c2UgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciwgbXkgaW50dWl0aW9uIHNheXMgaXQncyB1bmxpa2VseSB0byBiZSB0cmlnZ2VyZWQgaW4gYSBnZW5lcmFsIHZpcnR1YWxpemVkIGZ1enppbmcgc2V0dXAuIEJ1dCwgd2UgYWxsIGtub3cgaW50dWl0aW9uIGhhcyB0byBiZSBjaGFsbGVuZ2VkLlxuXG5UaGUgY29yZSBQSFkgY29kZSBpcyAqZGVmaW5pdGVseSogcmVhY2hhYmxlLiBCdXQsIGlmIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYCBpc24ndCB1c2VkLCB0aGUgY2FsbGJhY2tzIHdpbGwgYmUgYE5VTExgLCBhbmQgdGhlIGNvZGUgd29uJ3QgZXhlY3V0ZSwgbWFraW5nIHRoYXQgcGFydCBvZiB0aGUgcGF0Y2ggaXJyZWxldmFudC4gVGhlIGltcG9ydGFudCBiaXQgdG8gcmVtZW1iZXIgaGVyZSBpcyB0aGF0IGEgc3l6a2FsbGVyIHN0eWxlIGZ1enplciBjYW4gZmFrZSBkZXZpY2UgdHJlZXMgb3IgcGVyZm9ybSBwbGF0Zm9ybSBkZXZpY2UgaW5qZWN0aW9ucy5cblxuTGV0J3Mgc2VlOiBgbWRpby1yZWFsdGVrLXJ0bDkzMDAuY2AgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIFN5emthbGxlciBjYW4gcHJvYmUgcGxhdGZvcm0gZHJpdmVycyB2aWEgYHN5el9kZXZtZW1gIG9yIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSwgb3IgaW5qZWN0IGRldmljZSB0cmVlIG5vZGVzLiBJdCdzICpwb3NzaWJsZSogd2UgY2FuIGdldCB0aGlzIGRyaXZlciBwcm9iZWQuIElmIHRoYXQgaGFwcGVucywgdGhlIGBidXMtXHUwMDNlbm90aWZ5X3BoeV9hdHRhY2hgIHBvaW50ZXIgd2lsbCBiZSBzZXQgdG8gYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgLlxuXG5Tbywgd2hhdCBkb2VzIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCAqZG8qPyBJdCdzIGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUsIHNwZWNpZmljYWxseSB2aWEgYHJlZ21hcGAuIFRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZywgYXMgaXQgY291bGQganVzdCBmYWlsIGF0IHByb2JlIGlmIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCBvciwgYmVjYXVzZSBpdCB1c2VzIGByZWdtYXAtbW1pb2AsIGl0IG1pZ2h0IHJlYWQvd3JpdGUgdG8gbWVtb3J5LCB3aGljaCBjYW4gYmUgZXhwbG9pdGFibGUuXG5cblRvIHByb2NlZWQsIGxldCBtZSBleGFtaW5lIGhvdyBgcmVnbWFwYCBpcyBpbml0aWFsaXplZCB3aXRoaW4gYG90dG9fZW1kaW9fcHJvYmVgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIGluZGljYXRpb24gb2YgaG93IGxpa2VseSB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb25zIGFyZSB0byBjYXVzZSBpc3N1ZXMgaW4gYSBmdXp6ZWQgZW52aXJvbm1lbnQuIFdlIG5lZWQgdG8gZm9sbG93IHdoZXJlIHRoZSBtZW1vcnkgYWNjZXNzZXMgYXJlIGdvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM4NywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NDo1OC4zODcwMTEwMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY1NjQyODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldm1fcmVnbWFwX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NDo1OC40NDM1OTQ1MDJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA0OTMwOTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFJUTDkzMDAgTURJTyBEcml2ZXIqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYG90dG9fZW1kaW9fcHJvYmVgLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBuYXZpZ2F0ZSB0byBgZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIHRoZSBSZWFsdGVrIFJUTDkzMDAgTURJTyBkcml2ZXIgdGhlcmUuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgcGFydGljdWxhciBkcml2ZXIgaW5pdGlhbGl6ZXMgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBNRElPIGJ1cywgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBkZXRhaWxzIG9mIHRoZSBSVEw5MzAwLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY3J1eCBvZiB0aGUgZHJpdmVyJ3MgYWJpbGl0eSB0byBkaXNjb3ZlciBhbmQgY29uZmlndXJlIHRoZSBhdHRhY2hlZCBQSFlzLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIGltcGxlbWVudGF0aW9uIHRob3JvdWdobHkuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgZGV2aWNlIHNldHVwIGxvZ2ljIGxpdmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTg0MCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU1OjAxLjM0ODUyODA2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTczMTUyMTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3R0b19lbWRpb19wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jPTc5Nz1zdGF0aWMgdm9pZCBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODE2LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo4MTc6c3RhdGljIGludCBvdHRvX2VtZGlvX3Byb2JlX29uZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTgxOC1cXHRcXHRcXHRcXHQgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM9OTY1PXN0YXRpYyBpbnQgb3R0b19lbWRpb19pbml0X3BvbGxpbmcoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05NzktXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjk4MDpzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtOTgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0xMDE5LVxcdGRldmljZV9mb3JfZWFjaF9jaGlsZF9ub2RlX3Njb3BlZChkZXYsIGNoaWxkKSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjEwMjA6XFx0XFx0ZXJyID0gb3R0b19lbWRpb19wcm9iZV9vbmUoZGV2LCBwcml2LCBjaGlsZCk7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTEwMjEtXFx0XFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0xMTMxPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG90dG9fZW1kaW9fZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoxMTMyOlxcdC5wcm9iZSA9IG90dG9fZW1kaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTExMzMtXFx0LmRyaXZlciA9IHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6NTU6MDEuNDA1ODQ2OTEzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NTgwMzQ5NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgUmVnaXN0ZXIgTWFwIEFjcXVpc2l0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgb3R0b19lbWRpb19wcm9iZWAuIFRoZSBnb2FsIGlzIHRvIGZpZ3VyZSBvdXQgZXhhY3RseSBob3cgd2UncmUgZ2V0dGluZyB0aGF0IGBwcml2LVx1MDAzZXJlZ21hcGAgaGFuZGxlLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgcmVnaXN0ZXIgbWFwIGlzIGluaXRpYWxpemVkIGFuZCBhY2Nlc3NlZCBpcyBjcml0aWNhbCBmb3IgZGVidWdnaW5nIGFueSBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgYW5kIHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgdG8gbWFrZSBzdXJlIHRoZSBhc3N1bXB0aW9ucyBtYWRlIGFyZSBjb3JyZWN0LiBMZXQncyBzZWUgaG93IHRoZXkgc2V0IHVwIHRoaXMgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgZHJpdmVyIGluZnJhc3RydWN0dXJlLiBLbm93aW5nIHRoaXMgaXMgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY1MywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU1OjA0LjI2Mzg4NDAxNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4MDpcXHRzdGF0aWMgaW50IG90dG9fZW1kaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gOTgxOlxcdHtcXG4gOTgyOlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIDk4MzpcXHRcXHRzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2O1xcbiA5ODQ6XFx0XFx0aW50IGVycjtcXG4gOTg1OlxcdFxcbiA5ODY6XFx0XFx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xcbiA5ODc6XFx0XFx0aWYgKCFwcml2KVxcbiA5ODg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDk4OTpcXHRcXG4gOTkwOlxcdFxcdGVyciA9IGRldm1fbXV0ZXhfaW5pdChkZXYsIFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4gOTkxOlxcdFxcdGlmIChlcnIpXFxuIDk5MjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHRwcml2LVxcdTAwM2VpbmZvID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldik7XFxuIDk5NTpcXHRcXHRwcml2LVxcdTAwM2VyZWdtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoZGV2LVxcdTAwM2VwYXJlbnQtXFx1MDAzZW9mX25vZGUpO1xcbiA5OTY6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VyZWdtYXApKVxcbiA5OTc6XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlcmVnbWFwKTtcXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0ZXJyID0gb3R0b19lbWRpb19pbml0X3BvbGxpbmcocHJpdik7XFxuMTAwMDpcXHRcXHRpZiAoZXJyKVxcbjEwMDE6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMDAyOlxcdFxcbjEwMDM6XFx0XFx0cGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdGVyciA9IG90dG9fZW1kaW9fbWFwX3BvcnRzKGRldik7XFxuMTAwNjpcXHRcXHRpZiAoZXJyKVxcbjEwMDc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMDA4OlxcdFxcbjEwMDk6XFx0XFx0ZXJyID0gb3R0b19lbWRpb19zZXR1cF90b3BvbG9neShwcml2KTtcXG4xMDEwOlxcdFxcdGlmIChlcnIpXFxuMTAxMTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEwMTI6XFx0XFxuMTAxMzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlc2V0dXBfY29udHJvbGxlcikge1xcbjEwMTQ6XFx0XFx0XFx0ZXJyID0gcHJpdi1cXHUwMDNlaW5mby1cXHUwMDNlc2V0dXBfY29udHJvbGxlcihwcml2KTtcXG4xMDE1OlxcdFxcdFxcdGlmIChlcnIpXFxuMTAxNjpcXHRcXHRcXHRcXHRyZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIGVyciwgXFxcImZhaWxlZCB0byBzZXR1cCBNRElPIGJ1cyBjb250cm9sbGVyXFxcXG5cXFwiKTtcXG4xMDE3OlxcdFxcdH1cXG4xMDE4OlxcdFxcbjEwMTk6XFx0XFx0ZGV2aWNlX2Zvcl9lYWNoX2NoaWxkX25vZGVfc2NvcGVkKGRldiwgY2hpbGQpIHtcXG4xMDIwOlxcdFxcdFxcdGVyciA9IG90dG9fZW1kaW9fcHJvYmVfb25lKGRldiwgcHJpdiwgY2hpbGQpO1xcbjEwMjE6XFx0XFx0XFx0aWYgKGVycilcXG4xMDIyOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTAyMzpcXHRcXHR9XFxuMTAyNDpcXHRcXG4xMDI1OlxcdFxcdHJldHVybiAwO1xcbjEwMjY6XFx0fVxcbjEwMjc6XFx0XFxuMTAyODpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG90dG9fZW1kaW9faW5mbyBvdHRvX2VtZGlvXzgzODBfaW5mbyA9IHtcXG4xMDI5OlxcdFxcdC5hZGRyX21hcF9iYXNlID0gUlRMODM4MF9TTUlfUE9SVDBfNV9BRERSX0NUUkwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU1OjA0LjI2NDAwNTY0NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjczNTYxMzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgUG90ZW50aWFsOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGl0IHVzZXMgYHN5c2Nvbl9ub2RlX3RvX3JlZ21hcGAsIHdoaWNoIG1lYW5zIGl0ICpleHBlY3RzKiB0aGUgcGFyZW50IG5vZGUgdG8gYmUgYSBzeXNjb24uIFRoYXQgc3VnZ2VzdHMgYSBzcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZnV6emluZy4gQnV0IGlzIGl0ICp3b3J0aCogdGhlIGVmZm9ydD9cblxuVGhlIHBhdGNoIGFkZHMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCB0byB0aGUgYHN0cnVjdCBtaWlfYnVzYCBhbmQgY2FsbHMgdGhlbSBpbiBgcGh5X2F0dGFjaF9kaXJlY3RgIGFuZCBgcGh5X2RldGFjaGAuIFRob3NlIGFyZSBjb3JlIFBIWSBzdWJzeXN0ZW0gZnVuY3Rpb25zLiBNeSBmaXJzdCBpbXByZXNzaW9uIGlzIHRoYXQgZXZlbiBpZiB0aGUgc3BlY2lmaWMgZHJpdmVyIGlzbid0IGltbWVkaWF0ZWx5IHJlYWNoYWJsZSwgdGhlIGNvcmUgY2hhbmdlcyBhcmUsIHdoaWNoIGluY3JlYXNlcyB0aGUgbGlrZWxpaG9vZCBvZiBmaW5kaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZy5cblxuSGFuZyBvbi4uLiB0aGUgY29yZSBjaGFuZ2VzIGFyZSAqanVzdCogdGhpcyBmdW5jdGlvbiBwb2ludGVyIGNhbGw6XG5cbmBgYGNcblx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaCkge1xuXHRcdGVyciA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2Vub3RpZnlfcGh5X2F0dGFjaChwaHlkZXYpO1xuXHRcdGlmIChlcnIpXG5cdFx0XHRnb3RvIGVycm9yO1xuXHR9XG5gYGBcblxuVGhhdCdzIGEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gcG9pbnRlci4gSWYgbm8gb3RoZXIgZHJpdmVyIGFjdHVhbGx5IHVzZXMgaXQsIHRoaXMgaXMgZXNzZW50aWFsbHkgYSBOVUxMIGNoZWNrLiBJcyBpdCBldmVuIHdvcnRoIGZ1enppbmcganVzdCBmb3IgYSBOVUxMIGNoZWNrPyBQcm9iYWJseSBub3QgYSBnb29kIHVzZSBvZiByZXNvdXJjZXMuXG5cbkFoLCBidXQgd2FpdCEgVGhlIHBhdGNoICphbHNvKiBzaWduaWZpY2FudGx5IG1vZGlmaWVzIGBtZGlvLXJlYWx0ZWstcnRsOTMwMC5jYC4gSXQgYWRkcyBwb2xsaW5nIHN1cHBvcnQgdG8gdGhlIFJlYWx0ZWsgTURJTyBkcml2ZXIhICpUaGF0KiBzb3VuZHMgbXVjaCBtb3JlIHByb21pc2luZy4gQ2FuICp0aGlzKiBkcml2ZXIgYmUgZnV6emVkP1xuXG5TeXprYWxsZXIgY2FuIGluamVjdCBkZXZpY2UgdHJlZXMsIGFuZCB0aGF0J3MgdGhlIGtleS4gSWYgaXQgY2FuIGluamVjdCBhIHN5c2NvbiBwYXJlbnQgKHdoaWNoIGlzIGVhc3kgZW5vdWdoLCBzaW5jZSBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCBqdXN0IG5lZWRzIGEgY29tcGF0aWJsZSBzdHJpbmcpIGFuZCAqdGhpcyogZGV2aWNlLCBpdCBjYW4gcHJvYmUgaXQuIFRoZSBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCBjYWxsIGlzIHNhdGlzZmllZCBpZiB0aGUgcGFyZW50IG5vZGUgaGFzIGEgY29tcGF0aWJsZSBzdHJpbmcgdGhhdCBtYXRjaGVzIGEgc3lzY29uIGRyaXZlci5cblxuU28gaXMgaXQgd29ydGggZnV6emluZz8gWWVzLCBhYnNvbHV0ZWx5LiBJdCdzIGEgZHJpdmVyLCBhbmQgU3l6a2FsbGVyIGV4Y2VscyBhdCBmdXp6aW5nIGRyaXZlcnMuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIGBDT05GSUdfTURJT19SRUFMVEVLX1JUTDkzMDBgIGlzIGVuYWJsZWQgb3IgYXQgbGVhc3QgY2FuIGJlIGVuYWJsZWQuIEl0J3MgdHJpc3RhdGUuIEdyZWF0LCBpdCAqY2FuKiBiZSBlbmFibGVkLiBUaGF0J3MgZmFudGFzdGljLiBMZXQgbWUgY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyB0aGF0IEkgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aC4gSnVzdCBgQ09ORklHX01ESU9fUkVBTFRFS19SVEw5MzAwYC4gSXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBMZXQgbWUgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzU3NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU1OjExLjUzNzU3MDA4NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1MzQwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZz0xNjQ9Y29uZmlnIE1ESU9fSVBRODA2NFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9LY29uZmlnLTE3MS1cXG5kcml2ZXJzL25ldC9tZGlvL0tjb25maWc6MTcyOmNvbmZpZyBNRElPX1JFQUxURUtfUlRMOTMwMFxcbmRyaXZlcnMvbmV0L21kaW8vS2NvbmZpZy0xNzMtXFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgUlRMOTMwMCBNRElPIGludGVyZmFjZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NToxMS41OTcxMDk0MDNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMwMTkxMTc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBNRElPX1JFQUxURUtfUlRMOTMwMGAgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYE1ESU9fUkVBTFRFS19SVEw5MzAwYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGJyZWFrIGRvd24gdGhlIGRlcGVuZGVuY2llcyBvZiB0aGlzIG1vZHVsZS4gQXMgYW4gZXhwZXJ0IGluIGVtYmVkZGVkIHN5c3RlbXMgYXJjaGl0ZWN0dXJlLCBJIG5lZWQgdG8ga25vdyAqZXZlcnl0aGluZyogaXQgcmVsaWVzIG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyBmdW5kYW1lbnRhbCBmb3IgZGVidWdnaW5nLCBwb3J0aW5nLCBvciBldmVuIGp1c3QgdW5kZXJzdGFuZGluZyBpdHMgcGxhY2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGxheWVycy4uLiBkb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXJzPyBLZXJuZWwgZHJpdmVycz8gUG9zc2libHkgbG93LWxldmVsIHJlZ2lzdGVyIGRlZmluaXRpb25zPyBBbmQgd2hhdCBhYm91dCBwb3RlbnRpYWwgdXNlci1zcGFjZSBjb21wb25lbnRzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXM/IEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIG1hcCBvZiBhbGwgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0aGF0IG1ha2UgdXAgdGhpcyBtb2R1bGUgc28gdGhhdCBpdCBjYW4gYmUgbWFuYWdlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NTUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NToxNC44OTkwMjM3MTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvbWRpby9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3MixcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE3MjpcXHRjb25maWcgTURJT19SRUFMVEVLX1JUTDkzMDBcXG4gMTczOlxcdFxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIFJUTDkzMDAgTURJTyBpbnRlcmZhY2Ugc3VwcG9ydFxcXCJcXG4gMTc0OlxcdFxcdGRlcGVuZHMgb24gTUFDSF9SRUFMVEVLX1JUTCB8fCBDT01QSUxFX1RFU1RcXG4gMTc1OlxcdFxcdGhlbHBcXG4gMTc2OlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gaW50ZXJmYWNlIGZvdW5kIGluIHRoZSBSZWFsdGVrXFxuIDE3NzpcXHRcXHQgIFJUTDkzMDAgZmFtaWx5IG9mIEV0aGVybmV0IHN3aXRjaGVzIHdpdGggaW50ZWdyYXRlZCBTb0MuXFxuIDE3ODpcXHRcXG4gMTc5OlxcdGNvbmZpZyBNRElPX1JFR01BUFxcbiAxODA6XFx0XFx0dHJpc3RhdGVcXG4gMTgxOlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDVUMTY6NTU6MTQuODk5MDk5MDM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2MzEwNTAwNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFJlYWx0ZWsgUlRMOTMwMCBNRElPIEhhcmR3YXJlIFBvbGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCBmdXp6aW5nIHRoZSBuZXcgaGFyZHdhcmUgcG9sbGluZyBzdXBwb3J0IGZvciB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gY29udHJvbGxlci4gIEl0IGxvb2tzIGxpa2UgdGhpcyBjYW4gYmUgZW5hYmxlZCB3aXRoIGBDT01QSUxFX1RFU1RgLCB3aGljaCBpcyBvZnRlbiBhbHJlYWR5IGVuYWJsZWQgaW4gU3l6a2FsbGVyLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgdGhhdC4gIFRoZSBwcmltYXJ5IGNvbmZpZyBpcyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIGFuZCBJJ2xsIG1ha2Ugc3VyZSB0aGF0IGdldHMgZXhwbGljaXRseSBzZXQuIEknbSBmb2N1c2luZyBvbiB0aGF0LlxuXG5JJ3ZlIGdvdCB0aGUgZHJpdmVyIHVzaW5nIHJlZ21hcCBmb3IgTU1JTywgYW5kIFN5emthbGxlciBjYW4gaGFuZGxlIHRoYXQgdGhyb3VnaCBhIG1vY2sgb3IgbWVtb3J5IG1hcHBpbmcsIHNvIHRoYXQncyBnb29kLiBgc3lzY29uX25vZGVfdG9fcmVnbWFwYCBpcyB1c3VhbGx5IGhvdyBpdCBtYXBzIHRvIE1NSU8sIHNvIGRldmljZSB0cmVlIGluamVjdGlvbiBzaG91bGQgd29yay4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgbWlub3IsIG1vc3RseSBhZGRpbmcgdGhvc2UgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGBtaWlfYnVzYCBzdHJ1Y3QuIFRoZSBidWxrIG9mIHRoZSBsb2dpYyBpcyBpbiB0aGUgZHJpdmVyIGl0c2VsZiwgaW4gYG1kaW8tcmVhbHRlay1ydGw5MzAwLmNgLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBjb25jZW50cmF0ZSBvbiBhcmUgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgLCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaGAsIGBvdHRvX2VtZGlvX2luaXRfcG9sbGluZ2AsIGBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmdgLCBhbmQgYWxsIG9mIHRoZSBgb3R0b19lbWRpb18qX3JlYWRfYyMjYCBhbmQgYG90dG9fZW1kaW9fKl93cml0ZV9jIyNgIGZ1bmN0aW9ucyAoZm9yIGJvdGggODM4MCBhbmQgODM5MCkuIEkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYHBoeV9hdHRhY2hfZGlyZWN0YCBhbmQgYHBoeV9kZXRhY2hgIHNpbmNlIHRoZXkgYXJlIGNvcmUgZnVuY3Rpb25zIGFuZCBhcmUgb24gdGhlIGhvdCBwYXRoLCBidXQgdGhleSBhcmUgdmVyeSBnZW5lcmljIGFuZCB3b3VsZCBwdWxsIGluIGEgbG90IG9mIG90aGVyIFBIWSBkcml2ZXJzIGludG8gdGhlIG1peC4gVGhpcyBpcyBub3Qgd2hhdCBJIHdhbnQuIFRoZXkgYXJlIGFsc28gY29udHJvbCBwYXRoLiBTbywgSSB3aWxsIGZvY3VzIG9uIHRoZSBgb3R0b19lbWRpb18qYCBmdW5jdGlvbnMgYXMgdGhleSB0YXJnZXQgdGhlIG5ldyBjb2RlIGRpcmVjdGx5LlxuXG5TcGVjaWZpY2FsbHksIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoYCBpcyByZWFjaGFibGUuIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIHRoZSBNRElPIGJ1cyBkdXJpbmcgcHJvYmUsIGFuZCB0aGVuIFBIWSBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCwgd2hpY2ggY2FsbHMgYHBoeV9hdHRhY2hfZGlyZWN0YCwgd2hpY2ggdGhlbiBjYWxscyBgbm90aWZ5X3BoeV9hdHRhY2hgLiBTbywgdGhhdCdzIGRlZmluaXRlbHkgYSB2aWFibGUgZW50cnkgcG9pbnQuIFRoZSBzYW1lIGdvZXMgZm9yIHRoZSBvdGhlciBmdW5jdGlvbnM6XG4tICAgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgXG4tICAgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9kZXRhY2hgXG4tICAgYG90dG9fZW1kaW9faW5pdF9wb2xsaW5nYFxuLSAgIGBvdHRvX2VtZGlvX3NldF9wb3J0X3BvbGxpbmdgXG4tICAgYG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyYFxuLSAgIGBvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjJgXG4tICAgYG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjJgXG4tICAgYG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NWBcbi0gICBgb3R0b19lbWRpb184MzgwX3dyaXRlX2M0NWBcbi0gICBgb3R0b19lbWRpb184MzkwX3JlYWRfYzIyYFxuLSAgIGBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyYFxuLSAgIGBvdHRvX2VtZGlvXzgzOTBfcmVhZF9jNDVgXG4tICAgYG90dG9fZW1kaW9fODM5MF93cml0ZV9jNDVgXG5cblRoaXMgaXMgYSBuZXcgZmVhdHVyZSBpbiBNRElPIGRyaXZlciBhbmQgY29yZSBQSFkgc3Vic3lzdGVtLCBzbyBmdXp6aW5nIHRoZXNlIGlzIGEgZ29vZCBpZGVhLiAgVGhlIHByaW1hcnkgY29uZmlnIG5lZWRlZCBpcyBgTURJT19SRUFMVEVLX1JUTDkzMDBgIGFuZCBpdCBkZXBlbmRzIG9uIGBNQUNIX1JFQUxURUtfUlRMIHx8IENPTVBJTEVfVEVTVGAuXG5cbkkgdGhpbmsgdGhhdCdzIHRoZSBjb3JlIG9mIGl0LiBJJ3ZlIG5hcnJvd2VkIGRvd24gdGhlIHRhcmdldCwgdW5kZXJzdGFuZCB0aGUgcmVhY2hhYmlsaXR5IGFuZCBzZXR1cCwgYW5kIGhhdmUgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBjb25maWcgb3B0aW9ucyB0byBwcmlvcml0aXplLiAgTGV0J3MgZ2V0IHRvIGZ1enppbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTYwLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA1VDE2OjU1OjMxLjIwOTYwMTU5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzQ0OTE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljLipvdHRvX2VtZGlvXy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYz0yNzE9c3RydWN0IG90dG9fZW1kaW9fY2hhbiB7XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMjc1LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoyNzY6c3RhdGljIGludCBvdHRvX2VtZGlvX3BoeV90b19wb3J0KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTI3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMjkxLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzoyOTI6c3RhdGljIHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKm90dG9fZW1kaW9fYnVzX3RvX3ByaXYoc3RydWN0IG1paV9idXMgKmJ1cylcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMjkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0yOTgtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjI5OTpzdGF0aWMgaW50IG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LCBpbnQgcG9ydCwgYm9vbCBhY3RpdmUpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTMwMC17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzA2LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzozMDc6c3RhdGljIGludCBvdHRvX2VtZGlvX3J1bl9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzA4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zNjMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjM2NDpzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzY1LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgb3R0b19lbWRpb19jbWRfcmVncyAqY21kX2RhdGEsIHUzMiBtYXNrLCB1MzIgKnZhbHVlKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTM4My1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6Mzg0OnN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jbWQoc3RydWN0IG1paV9idXMgKmJ1cywgdTMyIGNtZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzg1LVxcdFxcdFxcdFxcdHN0cnVjdCBvdHRvX2VtZGlvX2NtZF9yZWdzICpjbWRfZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy0zOTMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjM5NDpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtMzk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00MDctXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQwODpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00MjEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQyMjpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDIzLVxcdFxcdFxcdFxcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDM0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo0MzU6c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00MzYtXFx0XFx0XFx0XFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00NDctXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQ0ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDQ5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00NjEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQ2MjpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDYzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00NzYtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjQ3NzpzdGF0aWMgaW50IG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDc4LVxcdFxcdFxcdFxcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNDg5LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo0OTA6c3RhdGljIGludCBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy00OTEtXFx0XFx0XFx0XFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01MDMtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjUwNDpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTA1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01MTctXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjUxODpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTE5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01MzEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjUzMjpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMwMF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTMzLVxcdFxcdFxcdFxcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTQ0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo1NDU6c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMDBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01NDYtXFx0XFx0XFx0XFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01NTctXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU1ODpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2MyMihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCwgaW50IHJlZ251bSwgdTMyICp2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTU5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01NzAtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU3MTpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBvcnQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01ODQtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjU4NTpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTg2LVxcdFxcdFxcdFxcdCAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUzMiAqdmFsdWUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNTk3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo1OTg6c3RhdGljIGludCBvdHRvX2VtZGlvXzkzMTBfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy01OTktXFx0XFx0XFx0XFx0ICAgICBpbnQgZGV2X2FkZHIsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02MTEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjYxMjpzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jMjIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02MzEtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjYzMjpzdGF0aWMgaW50IG90dG9fZW1kaW9fd3JpdGVfYzIyKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCByZWdudW0sIHUxNiB2YWx1ZSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02NTUtXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjY1NjpzdGF0aWMgaW50IG90dG9fZW1kaW9fcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGRldl9hZGRyLCBpbnQgcmVnbnVtKVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy02NTcte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTY3MS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NjcyOnN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjczLVxcdFxcdFxcdFxcdGludCBkZXZfYWRkciwgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTY4Ny1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6Njg4OnN0YXRpYyBpbnQgb3R0b19lbWRpb193cml0ZV9tYXBwaW5nKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYsIHUzMiBiYXNlLCB1MzIgcG9ydCxcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjg5LVxcdFxcdFxcdFxcdCAgICB1MzIgdmFsc19wZXJfcmVnLCB1MzIgYml0c19wZXJfdmFsLCB1MzIgdmFsdWUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNjk3LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo2OTg6c3RhdGljIGludCBvdHRvX2VtZGlvX3NldHVwX3RvcG9sb2d5KHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTY5OS17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzIzLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3MjQ6c3RhdGljIGludCBvdHRvX2VtZGlvXzgzODBfc2V0dXBfY29udHJvbGxlcihzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03MjUte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTczMi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6NzMzOnN0YXRpYyBpbnQgb3R0b19lbWRpb185MzAwX3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IG90dG9fZW1kaW9fcHJpdiAqcHJpdilcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzM0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03NTItXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jOjc1MzpzdGF0aWMgaW50IG90dG9fZW1kaW9fOTMxMF9zZXR1cF9jb250cm9sbGVyKHN0cnVjdCBvdHRvX2VtZGlvX3ByaXYgKnByaXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzY4LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3Njk6c3RhdGljIGludCBvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTc3MC17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtNzk2LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo3OTc6c3RhdGljIHZvaWQgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy03OTgte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTgxNi1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6ODE3OnN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZV9vbmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2LFxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy04MTgtXFx0XFx0XFx0XFx0IHN0cnVjdCBmd25vZGVfaGFuZGxlICpub2RlKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTg2MS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6ODYyOnN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKm90dG9fZW1kaW9fZ2V0X2J1c19ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTg2My17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtODgwLSAqL1xcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo4ODE6c3RhdGljIGludCBvdHRvX2VtZGlvX21hcF9wb3J0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTg4Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmMtOTY0LVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYzo5NjU6c3RhdGljIGludCBvdHRvX2VtZGlvX2luaXRfcG9sbGluZyhzdHJ1Y3Qgb3R0b19lbWRpb19wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05NjYte1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXJlYWx0ZWstcnRsOTMwMC5jLTk3OS1cXG5kcml2ZXJzL25ldC9tZGlvL21kaW8tcmVhbHRlay1ydGw5MzAwLmM6OTgwOnN0YXRpYyBpbnQgb3R0b19lbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1yZWFsdGVrLXJ0bDkzMDAuYy05ODEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NTozMS4yODMwNTgyNTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE3NzYxMzUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiBGdW5jdGlvbnMgQWRkZWQgYW5kIE1vZGlmaWVkKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgc2NvcGUgb2YgdGhpcyBwYXRjaCBieSBleHBsaWNpdGx5IGxpc3RpbmcgdGhlIGNoYW5nZXMuIEknbSBnb2luZyB0byBzdGFydCBieSBjYXRlZ29yaXppbmcgdGhlIGZ1bmN0aW9ucy5cblxuSSBzZWUgYSBsaXN0IG9mIG5ld2x5ICphZGRlZCogZnVuY3Rpb25zOiBgb3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nYCwgYG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMmAsIGBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyYCwgYG90dG9fZW1kaW9fODM4MF9yZWFkX2M0NWAsIGBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzQ1YCwgYG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMmAsIGBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyYCwgYG90dG9fZW1kaW9fODM5MF9yZWFkX2M0NWAsIGBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzQ1YCwgYG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyYCwgYG90dG9fZW1kaW9fbm90aWZ5X3BoeV9hdHRhY2hgLCBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaGAsIGBvdHRvX2VtZGlvX2luaXRfcG9sbGluZ2AuXG5cblRoZW4sIEknbSBub3RpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiAqbW9kaWZpZWQqOiBgb3R0b19lbWRpb185MzAwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fOTMwMF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb185MzEwX3JlYWRfYzIyYCwgYG90dG9fZW1kaW9fOTMxMF93cml0ZV9jMjJgLCBgb3R0b19lbWRpb19yZWFkX2MyMmAsIGBvdHRvX2VtZGlvX3dyaXRlX2MyMmAsIGBvdHRvX2VtZGlvX3Byb2JlX29uZWAsIGBvdHRvX2VtZGlvX3Byb2JlYCwgYHBoeV9hdHRhY2hfZGlyZWN0YCwgYHBoeV9kZXRhY2hgLlxuXG5UaGUgc2lnbmlmaWNhbnQgYWRkaXRpb25zIHNlZW0gdG8gYmUgYXJvdW5kIHBvbGxpbmcsIHNwZWNpZmljIFBIWSBpbml0aWFsaXphdGlvbiwgYW5kIGF0dGFjaC9kZXRhY2ggbm90aWZpY2F0aW9ucy4gTG9va2luZyBhdCB0aGUgY2hhbmdlcywgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRob3NlIG5ldyBmdW5jdGlvbnMsIGluY2x1ZGluZyBgb3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaGAsIGBvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoYCwgYG90dG9fZW1kaW9faW5pdF9wb2xsaW5nYCwgYG90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZ2AuIEFsc28sIHRoZSBmdW5jdGlvbnMgc3BlY2lmaWMgdG8gaGFuZGxpbmcgdGhlIDgzODAgYW5kIDgzOTAgUEhZcyAoYG90dG9fZW1kaW9fODM4MF9yZWFkX2MyMmAsIGBvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyYCwgYG90dG9fZW1kaW9fODM5MF9yZWFkX2MyMmAsIGBvdHRvX2VtZGlvXzgzOTBfd3JpdGVfYzIyYCwgYG90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyYCkgd2lsbCB3YXJyYW50IGNsb3NlciBpbnNwZWN0aW9uLlxuXG5JdCBhcHBlYXJzIHRoZSBuZXcgZnVuY3Rpb25zIGFyZSBxdWl0ZSBpbXBvcnRhbnQuIEkga25vdyB3aGF0IHRvIGZvY3VzIG9uLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MjUwLCJPdXRwdXRUb2tlbnMiOjI1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wNVQxNjo1NTozOS40NjA2NzQyMDZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjEwNDEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTURJT19SRUFMVEVLX1JUTDkzMDBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvdHRvX2VtZGlvX25vdGlmeV9waHlfYXR0YWNoXCIsXG4gICAgXCJvdHRvX2VtZGlvX25vdGlmeV9waHlfZGV0YWNoXCIsXG4gICAgXCJvdHRvX2VtZGlvX2luaXRfcG9sbGluZ1wiLFxuICAgIFwib3R0b19lbWRpb19zZXRfcG9ydF9wb2xsaW5nXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzODBfcmVhZF9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM4MF93cml0ZV9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM5MF9yZWFkX2MyMlwiLFxuICAgIFwib3R0b19lbWRpb184MzkwX3dyaXRlX2MyMlwiLFxuICAgIFwib3R0b19lbWRpb184MzgwX3NldHVwX2NvbnRyb2xsZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlIHBvbGxpbmcgc3VwcG9ydCB0byB0aGUgUmVhbHRlayBSVEw5MzAwIE1ESU8gY29udHJvbGxlciBkcml2ZXIgYW5kIGludHJvZHVjZXMgYG5vdGlmeV9waHlfYXR0YWNoYCBhbmQgYG5vdGlmeV9waHlfZGV0YWNoYCBjYWxsYmFja3MgdG8gdGhlIGNvcmUgUEhZIHN1YnN5c3RlbS4gVGhlIGNvcmUgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGR1cmluZyBQSFkgZGV2aWNlIGF0dGFjaG1lbnQvZGV0YWNobWVudCwgYW5kIHRoZSBkcml2ZXIgY2hhbmdlcyBjYW4gYmUgcmVhY2hlZCBpZiB0aGUgZHJpdmVyIGlzIHByb2JlZCB2aWEgZGV2aWNlIHRyZWUgaW5qZWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1ESU9fUkVBTFRFS19SVEw5MzAwXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib3R0b19lbWRpb19ub3RpZnlfcGh5X2F0dGFjaFwiLFxuICAgIFwib3R0b19lbWRpb19ub3RpZnlfcGh5X2RldGFjaFwiLFxuICAgIFwib3R0b19lbWRpb19pbml0X3BvbGxpbmdcIixcbiAgICBcIm90dG9fZW1kaW9fc2V0X3BvcnRfcG9sbGluZ1wiLFxuICAgIFwib3R0b19lbWRpb184MzgwX3JlYWRfYzIyXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzODBfd3JpdGVfYzIyXCIsXG4gICAgXCJvdHRvX2VtZGlvXzgzOTBfcmVhZF9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM5MF93cml0ZV9jMjJcIixcbiAgICBcIm90dG9fZW1kaW9fODM4MF9zZXR1cF9jb250cm9sbGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZSBwb2xsaW5nIHN1cHBvcnQgdG8gdGhlIFJlYWx0ZWsgUlRMOTMwMCBNRElPIGNvbnRyb2xsZXIgZHJpdmVyIGFuZCBpbnRyb2R1Y2VzIGBub3RpZnlfcGh5X2F0dGFjaGAgYW5kIGBub3RpZnlfcGh5X2RldGFjaGAgY2FsbGJhY2tzIHRvIHRoZSBjb3JlIFBIWSBzdWJzeXN0ZW0uIFRoZSBjb3JlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgUEhZIGRldmljZSBhdHRhY2htZW50L2RldGFjaG1lbnQsIGFuZCB0aGUgZHJpdmVyIGNoYW5nZXMgY2FuIGJlIHJlYWNoZWQgaWYgdGhlIGRyaXZlciBpcyBwcm9iZWQgdmlhIGRldmljZSB0cmVlIGluamVjdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrl4lm[1] Phase: Succeeded StartedAt: 2026-07-05 16:55:51 +0000 UTC FinishedAt: 2026-07-05 16:55:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-05 16:55:51 +0000 UTC FinishedAt: 2026-07-05 16:55:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2] Phase: Succeeded StartedAt: 2026-07-05 16:55:51 +0000 UTC FinishedAt: 2026-07-05 19:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-05 16:55:51 +0000 UTC FinishedAt: 2026-07-05 19:02:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-05 16:55:51 +0000 UTC FinishedAt: 2026-07-05 16:56:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-05 16:55:51 +0000 UTC FinishedAt: 2026-07-05 16:55:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrl4lm/series-workflowrl4lm-convert-artifact-3863396352/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-05 16:56:01 +0000 UTC FinishedAt: 2026-07-05 17:29:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-05 16:56:01 +0000 UTC FinishedAt: 2026-07-05 17:29:04 +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:*2e77833e-5090-40dd-a462-45964f14d7b2,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-workflowrl4lm/series-workflowrl4lm-convert-artifact-3863396352/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": "1fef6e05-ae22-426e-9f25-a1b764801abf", "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-workflowrl4lm/series-workflowrl4lm-build-action-3293842118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-05 16:56:01 +0000 UTC FinishedAt: 2026-07-05 17:28:54 +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:*2e77833e-5090-40dd-a462-45964f14d7b2,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-workflowrl4lm/series-workflowrl4lm-convert-artifact-3863396352/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": "1fef6e05-ae22-426e-9f25-a1b764801abf", "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-workflowrl4lm/series-workflowrl4lm-build-action-3293842118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-05 17:29:04 +0000 UTC FinishedAt: 2026-07-05 17:29:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-05 17:29:04 +0000 UTC FinishedAt: 2026-07-05 17:29:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-05 17:29:04 +0000 UTC FinishedAt: 2026-07-05 17:29:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-05 17:29:04 +0000 UTC FinishedAt: 2026-07-05 17:29:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrl4lm/series-workflowrl4lm-convert-artifact-689452967/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-05 17:29:24 +0000 UTC FinishedAt: 2026-07-05 17:31:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-05 17:29:24 +0000 UTC FinishedAt: 2026-07-05 17:31:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1fef6e05-ae22-426e-9f25-a1b764801abf,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-workflowrl4lm/series-workflowrl4lm-build-action-3293842118/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-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-05 17:31:30 +0000 UTC FinishedAt: 2026-07-05 17:31:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-05 17:31:30 +0000 UTC FinishedAt: 2026-07-05 17:31:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-05 17:31:30 +0000 UTC FinishedAt: 2026-07-05 18:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-05 17:31:30 +0000 UTC FinishedAt: 2026-07-05 18:05:17 +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:*2e77833e-5090-40dd-a462-45964f14d7b2,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-workflowrl4lm/series-workflowrl4lm-convert-artifact-689452967/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": "fa982ba5-17ab-4021-8bb2-7af4168d9d77", "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-workflowrl4lm/series-workflowrl4lm-build-action-2036902187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-05 17:31:30 +0000 UTC FinishedAt: 2026-07-05 18:05:07 +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:*2e77833e-5090-40dd-a462-45964f14d7b2,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-workflowrl4lm/series-workflowrl4lm-convert-artifact-689452967/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": "fa982ba5-17ab-4021-8bb2-7af4168d9d77", "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-workflowrl4lm/series-workflowrl4lm-build-action-2036902187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-05 18:05:17 +0000 UTC FinishedAt: 2026-07-05 18:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-05 18:05:17 +0000 UTC FinishedAt: 2026-07-05 18:05:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-05 18:05:17 +0000 UTC FinishedAt: 2026-07-05 18:07:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-05 18:05:17 +0000 UTC FinishedAt: 2026-07-05 18:07:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fa982ba5-17ab-4021-8bb2-7af4168d9d77,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrl4lm/series-workflowrl4lm-build-action-2036902187/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-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-05 18:07:21 +0000 UTC FinishedAt: 2026-07-05 19:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-05 18:07:21 +0000 UTC FinishedAt: 2026-07-05 19:02:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1fef6e05-ae22-426e-9f25-a1b764801abf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fa982ba5-17ab-4021-8bb2-7af4168d9d77,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrl4lm/series-workflowrl4lm-build-action-3293842118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrl4lm/series-workflowrl4lm-build-action-2036902187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-05 18:07:21 +0000 UTC FinishedAt: 2026-07-05 18:07:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-05 18:07:21 +0000 UTC FinishedAt: 2026-07-05 18:07:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrl4lm/series-workflowrl4lm-convert-artifact-2077550336/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-05 18:07:21 +0000 UTC FinishedAt: 2026-07-05 18:07:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-05 18:07:21 +0000 UTC FinishedAt: 2026-07-05 18:07:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-05 18:07:21 +0000 UTC FinishedAt: 2026-07-05 18:07:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-05 18:07:31 +0000 UTC FinishedAt: 2026-07-05 19:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrl4lm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["otto_emdio_notify_phy_attach","otto_emdio_notify_phy_detach","otto_emdio_init_polling","otto_emdio_set_port_polling","otto_emdio_8380_read_c22","otto_emdio_8380_write_c22","otto_emdio_8390_read_c22","otto_emdio_8390_write_c22","otto_emdio_8380_setup_controller"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b73bc9ca3686b78b642fb35dcc1fdf874ecb74a1","config_name":"upstream-apparmor-kasan.config","enable_configs":["MDIO_REALTEK_RTL9300"],"series_id":"0838597e-091a-4a4b-bebe-cc685dcaebe2","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-05 18:07:31 +0000 UTC FinishedAt: 2026-07-05 19:01:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1fef6e05-ae22-426e-9f25-a1b764801abf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*fa982ba5-17ab-4021-8bb2-7af4168d9d77,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrl4lm/series-workflowrl4lm-build-action-3293842118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrl4lm/series-workflowrl4lm-build-action-2036902187/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrl4lm/series-workflowrl4lm-convert-artifact-2077550336/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}