Name: series-workflow8c8cb Phase: Succeeded StartedAt: 2026-08-24 12:45:31 +0000 UTC FinishedAt: 2026-08-24 14:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[0] Phase: Succeeded StartedAt: 2026-08-24 12:45:31 +0000 UTC FinishedAt: 2026-08-24 13:43:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 12:45:31 +0000 UTC FinishedAt: 2026-08-24 13:43:53 +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": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "8139TOO" ], "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": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "8139TOO" ], "series_id": "9136fc9b-b784-4f81-aa58-17b3b6d3def0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl8139_set_mac_address" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzgxMzlUT08mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTM5X3NldF9tYWNfYWRkcmVzcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgdG8gdXNlIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNhc3RpbmcgYGRldi1cdTAwM2VkZXZfYWRkcmAgdG8gYHUzMiAqYCBhbmQgZGVyZWZlcmVuY2luZyBpdC4gVGhlIG9sZCBjb2RlIHJlYWQgNCBieXRlcyBmcm9tIGBkZXYtXHUwMDNlZGV2X2FkZHIgJiM0MzsgNGAgKGJ5dGVzIDQsIDUsIDYsIGFuZCA3KSwgd2hpY2ggbG9naWNhbGx5IGV4Y2VlZHMgdGhlIDYtYnl0ZSBNQUMgYWRkcmVzcyBsZW5ndGguIFxuXG5Ib3dldmVyLCBgZGV2LVx1MDAzZWRldl9hZGRyYCBwb2ludHMgdG8gYGhhLVx1MDAzZWFkZHJgIHdpdGhpbiBhIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgLCB3aGljaCBpcyBhIDMyLWJ5dGUgYXJyYXkgKGBNQVhfQUREUl9MRU5gKS4gVGhpcyBlbnRpcmUgMzItYnl0ZSBhcnJheSBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYGRldl9hZGRyX2luaXQoKWAgdXNpbmcgYG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpYC4gQmVjYXVzZSB0aGUgcGFkZGluZyBieXRlcyAoYnl0ZXMgNiBhbmQgNykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHRvIHplcm8sIHJlYWRpbmcgdGhlbSBkb2VzIG5vdCBjb25zdGl0dXRlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGFueSBpc3N1ZSBoZXJlLlxuXG5GdXJ0aGVybW9yZSwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBhbGxvY2F0aW9uIGlzIDMyIGJ5dGVzLCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgdGhpcyBhcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZWl0aGVyLiBUaGUgcGF0Y2ggcHJpbWFyaWx5IHJlc29sdmVzIGEgbG9naWNhbCBvdXQtb2YtYm91bmRzIHJlYWQsIHBvdGVudGlhbCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzLCBhbmQgU3BhcnNlIHdhcm5pbmdzIHJlbGF0ZWQgdG8gZW5kaWFubmVzcyB0eXBlcyAocGFzc2luZyBgX19sZTMyYCB0byBgaW93cml0ZTMyYCB3aGljaCBleHBlY3RzIGB1MzJgKS4gXG5cblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhlc2UgY2hhbmdlcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGluIHRoZSBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyBmdW5jdGlvbiBieSB1c2luZyBnZXRfdW5hbGlnbmVkX2xlMzIgYW5kIGdldF91bmFsaWduZWRfbGUxNi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgdGhlIE1BQyBhZGRyZXNzIGlzIHJlYWQgZnJvbSBtZW1vcnksIGVzcGVjaWFsbHkgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzLiBUaGUgcnRsODEzOSBkcml2ZXIgaXMgZm9yIGEgY29tbW9uIG5ldHdvcmsgY2FyZCB0aGF0IGlzIGVtdWxhdGVkIGluIFFFTVUsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIGZ1enphYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmQ1ZGQzMjNhN2YzNjBkMWE2OTAxY2FjMDg1MWIzMzQ3NTRmNjRhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDEzOjM3OjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNcbmluZGV4IDgyNDFiY2Y3NjY2NDQuLjE3MzY1OTlkNzI0NDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNcbkBAIC0xMTIsNiAmIzQzOzExMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vaXJxLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAvKiBEZWZhdWx0IE1lc3NhZ2UgbGV2ZWwgKi9cbiAjZGVmaW5lIFJUTDgxMzlfREVGX01TR19FTkFCTEUgICAoTkVUSUZfTVNHX0RSViAgIHwgXFxcbkBAIC0yMjMwLDggJiM0MzsyMjMxLDggQEAgc3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0cC1cdTAwM2Vsb2NrKTtcbiBcbiBcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTtcbi1cdFJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDApKSk7XG4tXHRSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciAmIzQzOyA0KSkpO1xuJiM0MztcdFJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGdldF91bmFsaWduZWRfbGUzMihkZXYtXHUwMDNlZGV2X2FkZHIpKTtcbiYjNDM7XHRSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDQpKTtcbiBcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7XG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2dHAtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzgxMzlUT08mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTM5X3NldF9tYWNfYWRkcmVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkNWRkMzIzYTdmMzYwZDFhNjkwMWNhYzA4NTFiMzM0NzU0ZjY0YTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxMzozNzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMKaW5kZXggODI0MWJjZjc2NjY0NC4uMTczNjU5OWQ3MjQ0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMKQEAgLTExMiw2ICYjNDM7MTEyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2lycS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKIAogLyogRGVmYXVsdCBNZXNzYWdlIGxldmVsICovCiAjZGVmaW5lIFJUTDgxMzlfREVGX01TR19FTkFCTEUgICAoTkVUSUZfTVNHX0RSViAgIHwgXApAQCAtMjIzMCw4ICYjNDM7MjIzMSw4IEBAIHN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIAlzcGluX2xvY2tfaXJxKCZhbXA7dHAtJmd0O2xvY2spOwogCiAJUlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwotCVJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LSZndDtkZXZfYWRkciAmIzQzOyAwKSkpOwotCVJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LSZndDtkZXZfYWRkciAmIzQzOyA0KSkpOwomIzQzOwlSVExfVzMyX0YoTUFDMCAmIzQzOyAwLCBnZXRfdW5hbGlnbmVkX2xlMzIoZGV2LSZndDtkZXZfYWRkcikpOwomIzQzOwlSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LSZndDtkZXZfYWRkciAmIzQzOyA0KSk7CiAJUlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmYW1wO3RwLSZndDtsb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jYC4gVGhlIGNoYW5nZSBpcyBpbiBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSByZXBsYWNlZCBzb21lIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHVuYWxpZ25lZCBwb2ludGVyIGNhc3RzIHdpdGggYGdldF91bmFsaWduZWRfbGUzMmAgYW5kIGBnZXRfdW5hbGlnbmVkX2xlMTZgLiBHb29kIHByYWN0aWNlLCBkZWZpbml0ZWx5IGEgc2Vuc2libGUgbW92ZSB0byBpbXByb3ZlIHBvcnRhYmlsaXR5IGFuZCBhdm9pZCB1bmRlZmluZWQgYmVoYXZpb3IuCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIHRoaXMgYSBkcml2ZXIgc29sZWx5IGZvciBhIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgY2FyZCwgb3IgaXMgaXQgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgZW5jb3VudGVyZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cD8gVGhlIFJUTDgxMzkgaXMgYSBwcmV0dHkgdWJpcXVpdG91cyBuZXR3b3JrIGNhcmQsIGhpc3RvcmljYWxseSBzcGVha2luZy4gQW5kIHllcCwgY29uZmlybWVkIOKAkyBRRU1VIGFjdHVhbGx5IGhhcyBleHBsaWNpdCBlbXVsYXRpb24gZm9yIGl0IHdpdGggdGhlIGAtZGV2aWNlIHJ0bDgxMzlgIG9wdGlvbi4gVGhhdCBtZWFucyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSB3aWRlIHJhbmdlIG9mIGVudmlyb25tZW50cywgaW5jbHVkaW5nIFZNcywgc28gdGhpcyBwYXRjaCBjb3VsZCBoYXZlIGEgc2lnbmlmaWNhbnQgaW1wYWN0LiBUaW1lIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIHNlZSBob3cgYDgxMzl0b28uY2AgZml0cyBpbnRvIHRoZSBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ODEzOXRvby5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHXzgxMzlDUCkgJiM0Mzs9IDgxMzljcC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHXzgxMzlUT08pICYjNDM7PSA4MTM5dG9vLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGUtOC1yODE2OS15ICYjNDM7PSByODE2OV9tYWluLm8gcjgxNjlfZmlybXdhcmUubyByODE2OV9waHlfY29uZmlnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIEkmIzM5O20gbG9va2luZyBhdCBpcyBgQ09ORklHXzgxMzlUT09gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGlzIGJhY2sgdG8gaXRzIHNvdXJjZSwgdGhlIEtjb25maWcgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNldHRpbmcgcmVwcmVzZW50cyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIG9wZW4gYW5kIGFuYWx5emUgdGhhdCBzcGVjaWZpYyBLY29uZmlnIGZpbGUgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGV4cGVydGlzZSBhbGxvd3MgbWUgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBkZXRhaWxzIGlzIGtleSB0byBpbnRlcnByZXRpbmcgd2hhdCYjMzk7cyBiZWVuIGRlZmluZWQuIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSBob3cgYDgxMzlUT09gIGlzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgZWZmZWN0cyBpdCBoYXMgb24gdGhlIHN5c3RlbSYjMzk7cyBvdmVyYWxsIGJlaGF2aW9yLiBJIGNhbiBsaWtlbHkgcXVpY2tseSBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpbiBLY29uZmlnIGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIDgxMzlUT08mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTIwPWNvbmZpZyA4MTM5Q1Bcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MzI6Y29uZmlnIDgxMzlUT09cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O1JlYWxUZWsgUlRMLTgxMjkvODEzMC84MTM5IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo0NDpjb25maWcgODEzOVRPT19QSU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00NS1cdGJvb2wgXCYjMzQ7VXNlIFBJTyBpbnN0ZWFkIG9mIE1NSU9cJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6NTQ6Y29uZmlnIDgxMzlUT09fVFVORV9UV0lTVEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHVuY29tbW9uIFJUTC04MTM5IHJldi4gSyAoYXV0b21hdGljIGNoYW5uZWwgZXF1YWxpemF0aW9uKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy02NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo2NTpjb25maWcgODEzOVRPT184MTI5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNjYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIG9sZGVyIFJUTC04MTI5LzgxMzAgYm9hcmRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0MgoJCQkJCQkJb3V0cHV0OiA3OAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgRGVwZW5kZW5jaWVzIGZvciA4MTM5VE9PKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYXNzb2NpYXRlZCB3aXRoIGA4MTM5VE9PYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBsaWJyYXJpZXMsIG1vZHVsZXMsIG90aGVyIGNvbXBvbmVudHMsIG9yIGV2ZW4gZXh0ZXJuYWwgc2VydmljZXMgdGhpcyBwYXJ0aWN1bGFyIGVsZW1lbnQgcmVsaWVzIHVwb24uIElzIGl0IGEgY29yZSBpbnRlcm5hbCBtb2R1bGUsIGFuIGV4dGVybmFsIGxpYnJhcnkgaW50ZWdyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWMgY29udGV4dCBpc24mIzM5O3QgZ2l2ZW4sIHNvIEkmIzM5O20gdGhpbmtpbmcgYnJvYWRseSBhYm91dCB0aGUgcG9zc2libGUgZGVwZW5kZW5jeSB0eXBlcy4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byB0cm91Ymxlc2hvb3QgYSBidWcsIG1ha2UgYSBjaGFuZ2UsIG9yIGFzc2VzcyB0aGUgaW1wYWN0IG9mIGEgcGxhbm5lZCB1cGRhdGUuIERlcGVuZGluZyBvbiB0aGUgc3lzdGVtLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBJJiMzOTtkIHR5cGljYWxseSBnbyBhYm91dCBpbnZlc3RpZ2F0aW5nIHRoaXMuIFBlcmhhcHMgSSYjMzk7bGwgdXNlIGEgZGVwZW5kZW5jeSBhbmFseXNpcyB0b29sLCBleHBsb3JlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBvciBzdGFydCB3aXRoIHNvdXJjZSBjb2RlIGluc3BlY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGEgc3RyYXRlZ3kgdG8gc3RhcnQgdHJhY2luZyB0aGVzZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIDgxMzlUT08mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTIwPWNvbmZpZyA4MTM5Q1Bcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MzI6Y29uZmlnIDgxMzlUT09cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O1JlYWxUZWsgUlRMLTgxMjkvODEzMC84MTM5IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo0NDpjb25maWcgODEzOVRPT19QSU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00NS1cdGJvb2wgXCYjMzQ7VXNlIFBJTyBpbnN0ZWFkIG9mIE1NSU9cJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6NTQ6Y29uZmlnIDgxMzlUT09fVFVORV9UV0lTVEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHVuY29tbW9uIFJUTC04MTM5IHJldi4gSyAoYXV0b21hdGljIGNoYW5uZWwgZXF1YWxpemF0aW9uKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy02NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo2NTpjb25maWcgODEzOVRPT184MTI5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNjYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIG9sZGVyIFJUTC04MTI5LzgxMzAgYm9hcmRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMyOlx0Y29uZmlnIDgxMzlUT09cbiAgMzM6XHRcdHRyaXN0YXRlIFwmIzM0O1JlYWxUZWsgUlRMLTgxMjkvODEzMC84MTM5IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuICAzNDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMzU6XHRcdHNlbGVjdCBDUkMzMlxuICAzNjpcdFx0c2VsZWN0IE1JSVxuICAzNzpcdFx0aGVscFxuICAzODpcdFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgRmFzdCBFdGhlcm5ldCBQQ0kgbmV0d29yayBjYXJkcyBiYXNlZCBvblxuICAzOTpcdFx0ICB0aGUgUlRMIDgxMjkvODEzMC84MTM5IGNoaXBzLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhvc2UsIHNheSBZIGhlcmUuXG4gIDQwOlx0XG4gIDQxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNDI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgODEzOXRvby4gIFRoaXMgaXMgcmVjb21tZW5kZWQuXG4gIDQzOlx0XG4gIDQ0Olx0Y29uZmlnIDgxMzlUT09fUElPXG4gIDQ1Olx0XHRib29sIFwmIzM0O1VzZSBQSU8gaW5zdGVhZCBvZiBNTUlPXCYjMzQ7XG4gIDQ2Olx0XHRkZWZhdWx0IHlcbiAgNDc6XHRcdGRlcGVuZHMgb24gODEzOVRPTyBcdTAwMjZcdTAwMjYgIU5PX0lPUE9SVF9NQVBcbiAgNDg6XHRcdGhlbHBcbiAgNDk6XHRcdCAgVGhpcyBpbnN0cnVjdHMgdGhlIGRyaXZlciB0byB1c2UgcHJvZ3JhbW1lZCBJL08gcG9ydHMgKFBJTykgaW5zdGVhZFxuICA1MDpcdFx0ICBvZiBQQ0kgc2hhcmVkIG1lbW9yeSAoTU1JTykuICBUaGlzIGNhbiBwb3NzaWJseSBzb2x2ZSBzb21lIHByb2JsZW1zXG4gIDUxOlx0XHQgIGluIGNhc2UgeW91ciBtYWluYm9hcmQgaGFzIG1lbW9yeSBjb25zaXN0ZW5jeSBpc3N1ZXMuICBJZiB1bnN1cmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NTgKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBNaW5vciBOZXR3b3JrIERyaXZlciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHRvIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkuIFdlJiMzOTtyZSBmaXhpbmcgcG90ZW50aWFsIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzLCB3aGljaCwgbGV0JiMzOTtzIGJlIGhvbmVzdCwgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGNyYXNoZXMgb3IgZXZlbiBqdXN0IHN1YnRseSBpbmNvcnJlY3QgTUFDIGFkZHJlc3NlcyBvbiBjZXJ0YWluIGFyY2hpdGVjdHVyZXMuIFRoZSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgd2FycmFudHMgZnV6emluZyBhdHRlbnRpb24uCgpJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIHJlYWxseS4gU3dhcHBpbmcgb3V0IHRoZSByYXcgY2FzdHMgZm9yIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YC4gUHJldHR5IGNsZWFuLiBCdXQgKmlzKiBpdCByZWFjaGFibGU/IFllcCwgdGhyb3VnaCBgbmRvX3NldF9tYWNfYWRkcmVzc2AuIEdvb2QsIGdvb2QuIE9rYXksIHdvcnRoIGZ1enppbmc/IFllcywgaXTigJlzIGEgYnVnIGZpeCAodW5hbGlnbmVkIGFjY2VzcykgYW5kIGl0IGNoYW5nZXMgZXhlY3V0aW9uIGZsb3cgKHVzaW5nIHRoZSB1bmFsaWduZWQgYWNjZXNzIGhlbHBlcnMgaXMgZGlmZmVyZW50KSwgc28gcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpXYWl0IGEgc2Vjb25kLCB0aG91Z2guIExldCYjMzk7cyBzdGVwIGJhY2suIFRoZSAqY29yZSogY2hhbmdlIGlzIGp1c3QgdGhhdCB1bmFsaWduZWQgYWNjZXNzIGZpeC4gUmlnaHQuIFNvLCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBZZXMhIEJlY2F1c2UgaXQmIzM5O3Mgc3RpbGwgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgKm1lYW50KiB0byBjaGFuZ2UgdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvdXIgYW5kIGZpeCBzb21ldGhpbmcsIHNvIGV2ZW4gc2VlbWluZ2x5IHNpbXBsZSBjaGFuZ2VzIG5lZWQgdG8gYmUgdGVzdGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGV4YW1pbmUgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bDgxMzlfc2V0X21hY19hZGRyZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM9NjQ2PXN0YXRpYyB2b2lkIHJ0bDgxMzlfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtNjQ3LSNlbmRpZlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6NjQ4OnN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy02NDktc3RhdGljIGludCBydGw4MTM5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz05MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTM5X25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtOTI3LVx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6OTI4Olx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXHQ9IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtOTI5LVx0Lm5kb19zdGFydF94bWl0XHRcdD0gcnRsODEzOV9zdGFydF94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTIyMDk9c3RhdGljIHZvaWQgcnRsODEzOV9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMjE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6MjIyMDpzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMjIxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ3MgoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiA0MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLCB3aGljaCBJIGtub3cgaXMgdGhlIGBuZG9fc2V0X21hY19hZGRyZXNzYCBjYWxsYmFjay4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSwgd2hpY2ggaXMgZ29vZC4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIHJlcGxhY2luZyB1bmFsaWduZWQgcG9pbnRlciBjYXN0cyB3aXRoIGNhbGxzIHRvIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBpcyBpbXBvcnRhbnQuCgpJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYENPTkZJR184MTM5VE9PYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGNvbnNpZGVyOyB5ZXMgaXQgaXMuIFRoZSBmb2N1c2VkIHN5bWJvbCBpcyBkZWZpbml0ZWx5IGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AuCgpOb3csIHRoZSBwcm9tcHQgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoICpvbmx5KiBpbnZvbHZlcyBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0ICpkb24mIzM5O3QqIGFsdGVyIGV4ZWN1dGlvbiBmbG93LiBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0LiBEb2VzIHRoaXMgYWN0dWFsbHkgY2hhbmdlIGhvdyB0aGUgY29kZSAqcnVucyo/IE9uIHg4NiwgcHJvYmFibHkgbm90OyB0aG9zZSBjYWxscyBhcmUganVzdCBjYXN0cywgdGhlIHVuYWxpZ25lZCBhY2Nlc3MgaXMgaGFuZGxlZC4gSG93ZXZlciwgb24gYXJjaGl0ZWN0dXJlcyB0aGF0ICpkb24mIzM5O3QqIHN1cHBvcnQgdW5hbGlnbmVkIGFjY2VzcywgaXQgYWJzb2x1dGVseSBkb2VzOiBpdCYjMzk7cyBkb2luZyBieXRlLWJ5LWJ5dGUgcmVhZHMuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRpc3RpbmN0aW9uLgoKQnV0IHdhaXQsIGBkZXYtJmd0O2Rldl9hZGRyYCBpcyBhIE1BQyBhZGRyZXNzLiBUaGF0JiMzOTtzIDYgYnl0ZXMuIEl0JiMzOTtzICpwcm9iYWJseSogYWxpZ25lZCB0byBhdCBsZWFzdCAyIGJ5dGVzLCBtYXliZSBldmVuIDQgYnl0ZXMsIGJ1dCBtYXliZSBub3Qgb24gYWxsIGFyY2hpdGVjdHVyZXMuCgpJIG5lZWQgdG8gcmVjYWxsIHRoYXQgYGdldF91bmFsaWduZWRfbGUzMmAgYW5kIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGFyZSBpbmxpbmUgZnVuY3Rpb25zL21hY3Jvcy4gU28gaXQmIzM5O3Mgc3RpbGwgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzLCBpbiBlc3NlbmNlLCBhIGJ1ZyBmaXggdG8gaGFuZGxlIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKU28sIHRoZSBmb2N1cyBzeW1ib2wgaXMgc3RpbGwgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYC4gSSBzaG91bGQgc2V0IGBFbmFibGVDb25maWdzYCB0byBgODEzOVRPT2AsIGFuZCBub3cgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0JiMzOTtzIGl0LiBZZXMsIGA4MTM5VE9PYCBkZXBlbmRzIG9uIGBQQ0lgLCBidXQgdGhhdCYjMzk7cyBhIHN0YW5kYXJkIGNvbmZpZywgc28gbm8gd29ycmllcyB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBhZGQgYDgxMzlUT09gIHRvIHRoZSBmaW5hbCBvdXRwdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDs4MTM5VE9PJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODEzOV9zZXRfbWFjX2FkZHJlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaW4gdGhlIHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzIGZ1bmN0aW9uIGJ5IHVzaW5nIGdldF91bmFsaWduZWRfbGUzMiBhbmQgZ2V0X3VuYWxpZ25lZF9sZTE2LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyB0aGUgTUFDIGFkZHJlc3MgaXMgcmVhZCBmcm9tIG1lbW9yeSwgZXNwZWNpYWxseSBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG8gbm90IHN1cHBvcnQgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MuIFRoZSBydGw4MTM5IGRyaXZlciBpcyBmb3IgYSBjb21tb24gbmV0d29yayBjYXJkIHRoYXQgaXMgZW11bGF0ZWQgaW4gUUVNVSwgbWFraW5nIGl0IHJlYWNoYWJsZSBhbmQgZnV6emFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzgxMzlUT08mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTM5X3NldF9tYWNfYWRkcmVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgaW5zdGVhZCBvZiBkaXJlY3RseSBjYXN0aW5nIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHRvIGB1MzIgKmAgYW5kIGRlcmVmZXJlbmNpbmcgaXQuIFRoZSBvbGQgY29kZSByZWFkIDQgYnl0ZXMgZnJvbSBgZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDRgIChieXRlcyA0LCA1LCA2LCBhbmQgNyksIHdoaWNoIGxvZ2ljYWxseSBleGNlZWRzIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MgbGVuZ3RoLiBcblxuSG93ZXZlciwgYGRldi1cdTAwM2VkZXZfYWRkcmAgcG9pbnRzIHRvIGBoYS1cdTAwM2VhZGRyYCB3aXRoaW4gYSBgc3RydWN0IG5ldGRldl9od19hZGRyYCwgd2hpY2ggaXMgYSAzMi1ieXRlIGFycmF5IChgTUFYX0FERFJfTEVOYCkuIFRoaXMgZW50aXJlIDMyLWJ5dGUgYXJyYXkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfYWRkcl9pbml0KClgIHVzaW5nIGBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKWAuIEJlY2F1c2UgdGhlIHBhZGRpbmcgYnl0ZXMgKGJ5dGVzIDYgYW5kIDcpIGFyZSBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLCByZWFkaW5nIHRoZW0gZG9lcyBub3QgY29uc3RpdHV0ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gd291bGQgbm90IGRldGVjdCBhbnkgaXNzdWUgaGVyZS5cblxuRnVydGhlcm1vcmUsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgYWxsb2NhdGlvbiBpcyAzMiBieXRlcywgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGVpdGhlci4gVGhlIHBhdGNoIHByaW1hcmlseSByZXNvbHZlcyBhIGxvZ2ljYWwgb3V0LW9mLWJvdW5kcyByZWFkLCBwb3RlbnRpYWwgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcywgYW5kIFNwYXJzZSB3YXJuaW5ncyByZWxhdGVkIHRvIGVuZGlhbm5lc3MgdHlwZXMgKHBhc3NpbmcgYF9fbGUzMmAgdG8gYGlvd3JpdGUzMmAgd2hpY2ggZXhwZWN0cyBgdTMyYCkuIFxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyZDVkZDMyM2E3ZjM2MGQxYTY5MDFjYWMwODUxYjMzNDc1NGY2NGE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTM6Mzc6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jCmluZGV4IDgyNDFiY2Y3NjY2NDQuLjE3MzY1OTlkNzI0NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jCkBAIC0xMTIsNiAmIzQzOzExMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9pcnEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiAKIC8qIERlZmF1bHQgTWVzc2FnZSBsZXZlbCAqLwogI2RlZmluZSBSVEw4MTM5X0RFRl9NU0dfRU5BQkxFICAgKE5FVElGX01TR19EUlYgICB8IFwKQEAgLTIyMzAsOCAmIzQzOzIyMzEsOCBAQCBzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCiAJc3Bpbl9sb2NrX2lycSgmYW1wO3RwLSZndDtsb2NrKTsKIAogCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKLQlSVExfVzMyX0YoTUFDMCAmIzQzOyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgMCkpKTsKLQlSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNCkpKTsKJiM0MzsJUlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi0mZ3Q7ZGV2X2FkZHIpKTsKJiM0MzsJUlRMX1czMl9GKE1BQzAgJiM0MzsgNCwgZ2V0X3VuYWxpZ25lZF9sZTE2KGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNCkpOwogCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CiAKIAlzcGluX3VubG9ja19pcnEoJmFtcDt0cC0mZ3Q7bG9jayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlYWx0ZWsgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYDgxMzl0b28uY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRla2AgZGlyZWN0b3J5LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGhvdyB0aGUgTUFDIGFkZHJlc3MgaXMgd3JpdHRlbiB0byB0aGUgUmVhbHRlayA4MTM5JiMzOTtzIGhhcmR3YXJlIHJlZ2lzdGVycy4KCkluaXRpYWxseSwgdGhlIGNvZGUgd2FzIG1ha2luZyB1bmFsaWduZWQgYWNjZXNzZXMgd2l0aCB0aGVzZSBsaW5lczoKCmBgYGMKCVJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LSZndDtkZXZfYWRkciAmIzQzOyAwKSkpOwoJUlRMX1czMl9GKE1BQzAgJiM0MzsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDQpKSk7CmBgYAoKQW5kIG5vdyBpdCBpcyB0aGlzOgoKYGBgYwoJUlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi0mZ3Q7ZGV2X2FkZHIpKTsKCVJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDQpKTsKYGBgCgpUaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUsIHdoZW4gcmVhZGluZyBhdCB0aGUgb2Zmc2V0IGBkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDRgLCB3YXMgYXR0ZW1wdGluZyB0byByZWFkIGEgNC1ieXRlIHZhbHVlIChgdTMyYCkuIEhvd2V2ZXIsIGEgc3RhbmRhcmQgTUFDIGFkZHJlc3MgaXMgb25seSA2IGJ5dGVzIGxvbmcuIFRoaXMgbWVhbnMgdGhlIGNvZGUgd2FzIHBvdGVudGlhbGx5IHJlYWRpbmcgYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIE1BQyBhZGRyZXNzIGJ1ZmZlci4KClNwZWNpZmljYWxseSwgaWYgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIGEgNi1ieXRlIGFycmF5LCB0aGVuIGBkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDRgIHBvaW50cyB0byB0aGUgbGFzdCB0d28gYnl0ZXMuIFJlYWRpbmcgYSBgdTMyYCBmcm9tIHRoYXQgbG9jYXRpb24gd291bGQgaGF2ZSByZWFkIGJ5dGVzIDQsIDUsIDYsIGFuZCA3LCB3aGljaCBtZWFucyB0aGF0IGJ5dGVzIDYgYW5kIDcgd2VyZSBvdXQgb2YgYm91bmRzLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gS0FTQU4gKnNob3VsZCogYmUgYWJsZSB0byBjYXRjaCB0aGlzIHNvcnQgb2YgdGhpbmcsIGVzcGVjaWFsbHkgaWYgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIHBsYWNlZCBhdCB0aGUgZW5kIG9mIGFuIGFsbG9jYXRpb24uCgpUaGlua2luZyB0aGlzIHRocm91Z2gsIGBkZXYtJmd0O2Rldl9hZGRyYCBpbiBhIGBuZXRfZGV2aWNlYCBzdHJ1Y3QgaXMgKnVzdWFsbHkqIGEgcG9pbnRlciB0byBhIGJ1ZmZlci4gSG93ZXZlciwgbW9kZXJuIGtlcm5lbHMgb2Z0ZW4gYWxsb2NhdGUgc3BhY2UgaW5saW5lIGFzIGFuIGFycmF5LCBsaWtlbHkgYE1BWF9BRERSX0xFTmAgYnl0ZXMgKG9mdGVuIDMyKS4gVGhpcyBpcyBjcml0aWNhbC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG5ldF9kZXZpY2VgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgYnVmZmVyJiMzOTtzIHNpemUuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIHByb2JsZW0uCgpUaGUgcGF0Y2ggaXMgZml4aW5nIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgZXJyb3IuIFRoZSBjaGFuZ2UgdG8gYGdldF91bmFsaWduZWRfbGUzMmAgYW5kIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGNvcnJlY3RzIHRoZSBvdmVycmVhZDogNCBieXRlcyAtJmd0OyAyIGJ5dGVzLiBUaGlzIG1ha2VzIHRoZSBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHdoYXQgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gYWNjZXNzLCB3aGljaCBpcyB0aGUgNi1ieXRlIE1BQyBhZGRyZXNzLiBHb29kIGNhdGNoLCBhbmQgdGhlIGZpeCBsb29rcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5zaWduZWQgY2hhci4qZGV2X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzk2LVx0LyogSW50ZXJmYWNlIGFkZHJlc3MgaW5mbyB1c2VkIGluIGV0aF90eXBlX3RyYW5zKCkgKi9cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM5NzpcdGNvbnN0IHVuc2lnbmVkIGNoYXJcdCpkZXZfYWRkcjtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM5OC1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMzMTA9c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvIHtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzMxMS1cdHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfaW5mbyBpbmZvOyAvKiBtdXN0IGJlIGZpcnN0ICovXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMzMTI6XHRjb25zdCB1bnNpZ25lZCBjaGFyICpkZXZfYWRkcjtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzMxMy19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBkZXZfYWRkcmAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGBkZXZfYWRkcmAgaXMgY2xlYXJseSBhIHBvaW50ZXIuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGRvZXMgdGhpcyBwb2ludGVyIGFjdHVhbGx5IHBvaW50PyBJcyBpdCBqdXN0IGEgY29udmVuaWVudCB3cmFwcGVyIGZvciBzb21ldGhpbmcgYWxyZWFkeSB3aXRoaW4gdGhlIGBkZXZgIHN0cnVjdHVyZSwgbGlrZSBwZXJoYXBzIGBkZXYtJmd0O2FkZHJfYXNzaWduX3R5cGVgLCBvciBpcyBpdCBzb21ldGhpbmcgbW9yZSBzaWduaWZpY2FudD8gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIGp1c3QgYSBkaXJlY3QgbGluayB0byBhbiBleGlzdGluZyBtZW1iZXIuIEl0JiMzOTtzIG1vcmUgbGlrZWx5IGVpdGhlciBwb2ludGluZyB0byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgb3IsIG1vcmUgY29udGV4dHVhbGx5LCBzb21lIHJlZ2lvbiAqaW5zaWRlKiB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdHVyZSBpdHNlbGYuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgaXMgdG8gcGlucG9pbnQgdGhlIGFsbG9jYXRpb24gb2YgYGRldl9hZGRyYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyB3aWxsIGxpZS4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBhbGxvY2F0ZWQgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgYWJvdXQgaXRzIGV4cGVjdGVkIGxpZmV0aW1lLCBzY29wZSwgYW5kIGhvdyBJIHNob3VsZCBiZSB0cmVhdGluZyB0aGUgbWVtb3J5IGl0IHJlZmVyZW5jZXMuIFRpbWUgdG8gdHJhY2sgZG93biB0aGF0IGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl9hZGRyID0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMDAyMD1pbnQgbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTAwMjUtXHRcdC5pbmZvLmV4dGFjayA9IGV4dGFjayxcbm5ldC9jb3JlL2Rldi5jOjEwMDI2Olx0XHQuZGV2X2FkZHIgPSBhZGRyLFxubmV0L2NvcmUvZGV2LmMtMTAwMjctXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYWxsb2NfbmV0ZGV2X21xc2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtdWx0aS1xdWV1ZSBkZXZpY2UgYWxsb2NhdGlvbiBpcyBoYW5kbGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgYWxsb2NfbmV0ZGV2X21xc2AgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9kZXYuY2AuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLCBkZXRlcm1pbmluZyB0aGUgZGV2aWNlJiMzOTtzIGNhcGFiaWxpdGllcyBhbmQgYWxsb2NhdGluZyB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcyBmb3IgbXVsdGlwbGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcXVldWVzLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaG93IGl0IGNhbGN1bGF0ZXMgcXVldWUgbnVtYmVycyBiYXNlZCBvbiBOSUMgY2FwYWJpbGl0aWVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBmcm9tIHRoZSBrZXJuZWwmIzM5O3MgcGVyc3BlY3RpdmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBzZXRzIHVwIHRoZSBgbmV0X2RldmljZWAgc3RydWN0IGFuZCBpbml0aWFsaXplcyB0aGUgcmVsZXZhbnQgbWVtYmVycyB0byBoYW5kbGUgdGhlIG11bHRpLXF1ZXVlIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IGl0IG1hbmFnZXMgdGhlIGlycSBhbGxvY2F0aW9ucyBhbmQgYmluZGluZyB0byB0aGUgcXVldWVzLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgd2hlcmUgSSYjMzk7bGwgZmluZCBjbHVlcyB0byBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBxdWV1ZSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBwYXJ0aWN1bGFybHkgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBwb3RlbnRpYWwgZmFsbGJhY2sgbWVjaGFuaXNtcyBpZiB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBxdWV1ZXMgY2Fubm90IGJlIGFsbG9jYXRlZC4gUmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01MjY9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBuZXRkZXZfeG1pdF9sb2NrX2tleVtBUlJBWV9TSVpFKG5ldGRldl9sb2NrX3R5cGUpXTtcbm5ldC9jb3JlL2Rldi5jOjUyNzpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG5ldGRldl9hZGRyX2xvY2tfa2V5W0FSUkFZX1NJWkUobmV0ZGV2X2xvY2tfdHlwZSldO1xubmV0L2NvcmUvZGV2LmMtNTI4LVxuLS1cbm5ldC9jb3JlL2Rldi5jPTU1MT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3NldF9hZGRyX2xvY2tkZXBfY2xhc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy01NTYtXHRsb2NrZGVwX3NldF9jbGFzc19hbmRfbmFtZShcdTAwMjZkZXYtXHUwMDNlYWRkcl9saXN0X2xvY2ssXG5uZXQvY29yZS9kZXYuYzo1NTc6XHRcdFx0XHQgICBcdTAwMjZuZXRkZXZfYWRkcl9sb2NrX2tleVtpXSxcbm5ldC9jb3JlL2Rldi5jLTU1OC1cdFx0XHRcdCAgIG5ldGRldl9sb2NrX25hbWVbaV0pO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyMTY9aW50IG5ldGRldl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIGludCBpZmluZGV4KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyMzYtXG5uZXQvY29yZS9kZXYuYzoxMjM3OnN0YXRpYyBib29sIGRldl9hZGRyX2NtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB0eXBlLFxubmV0L2NvcmUvZGV2LmMtMTIzOC1cdFx0XHQgY29uc3QgY2hhciAqaGEpXG5uZXQvY29yZS9kZXYuYy0xMjM5LXtcbm5ldC9jb3JlL2Rldi5jOjEyNDA6XHRyZXR1cm4gZGV2LVx1MDAzZXR5cGUgPT0gdHlwZSBcdTAwMjZcdTAwMjYgIW1lbWNtcChkZXYtXHUwMDNlZGV2X2FkZHIsIGhhLCBkZXYtXHUwMDNlYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2LmMtMTI0MS19XG4tLVxubmV0L2NvcmUvZGV2LmM9MTI1Nz1zdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldGJ5aHdhZGRyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIHNob3J0IHR5cGUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI2Mi1cdGZvcl9lYWNoX25ldGRldl9yY3UobmV0LCBkZXYpXG5uZXQvY29yZS9kZXYuYzoxMjYzOlx0XHRpZiAoZGV2X2FkZHJfY21wKGRldiwgdHlwZSwgaGEpKVxubmV0L2NvcmUvZGV2LmMtMTI2NC1cdFx0XHRyZXR1cm4gZGV2O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyODI9c3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRieWh3YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIHNob3J0IHR5cGUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI4OC1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldilcbm5ldC9jb3JlL2Rldi5jOjEyODk6XHRcdGlmIChkZXZfYWRkcl9jbXAoZGV2LCB0eXBlLCBoYSkpXG5uZXQvY29yZS9kZXYuYy0xMjkwLVx0XHRcdHJldHVybiBkZXY7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTY4OT1zdGF0aWMgaW50IF9fZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE2OTQtXHRBU1NFUlRfUlROTCgpO1xubmV0L2NvcmUvZGV2LmM6MTY5NTpcdGRldl9hZGRyX2NoZWNrKGRldik7XG5uZXQvY29yZS9kZXYuYy0xNjk2LVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE3MzMtXHRcdGRldl9hY3RpdmF0ZShkZXYpO1xubmV0L2NvcmUvZGV2LmM6MTczNDpcdFx0YWRkX2RldmljZV9yYW5kb21uZXNzKGRldi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldi5jLTE3MzUtXHR9XG4tLVxubmV0L2NvcmUvZGV2LmM9NTUwNj11MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU1NDEtXHRldGggPSAoc3RydWN0IGV0aGhkciAqKXhkcC1cdTAwM2VkYXRhO1xubmV0L2NvcmUvZGV2LmM6NTU0MjpcdG9yaWdfaG9zdCA9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cdTAwM2VoX2Rlc3QsIHNrYi1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xubmV0L2NvcmUvZGV2LmMtNTU0My1cdG9yaWdfYmNhc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcl82NGJpdHMoZXRoLVx1MDAzZWhfZGVzdCk7XG4tLVxubmV0L2NvcmUvZGV2LmMtNTU4Mi1cdCAgICAob3JpZ19ob3N0ICE9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cdTAwM2VoX2Rlc3QsXG5uZXQvY29yZS9kZXYuYzo1NTgzOlx0XHRcdFx0XHRcdCAgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcikpIHx8XG5uZXQvY29yZS9kZXYuYy01NTg0LVx0ICAgIChvcmlnX2JjYXN0ICE9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyXzY0Yml0cyhldGgtXHUwMDNlaF9kZXN0KSkpIHtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMDAyMD1pbnQgbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTAwMjUtXHRcdC5pbmZvLmV4dGFjayA9IGV4dGFjayxcbm5ldC9jb3JlL2Rldi5jOjEwMDI2Olx0XHQuZGV2X2FkZHIgPSBhZGRyLFxubmV0L2NvcmUvZGV2LmMtMTAwMjctXHR9O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEwMDM1PWludCBuZXRpZl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNzLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwMDQ5LVx0XHRyZXR1cm4gZXJyO1xubmV0L2NvcmUvZGV2LmM6MTAwNTA6XHRpZiAobWVtY21wKGRldi1cdTAwM2VkZXZfYWRkciwgc3MtXHUwMDNlX19kYXRhLCBkZXYtXHUwMDNlYWRkcl9sZW4pKSB7XG5uZXQvY29yZS9kZXYuYy0xMDA1MS1cdFx0ZXJyID0gb3BzLVx1MDAzZW5kb19zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcyk7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTAwNTYtXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7XG5uZXQvY29yZS9kZXYuYzoxMDA1NzpcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhkZXYtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VhZGRyX2xlbik7XG5uZXQvY29yZS9kZXYuYy0xMDA1OC1cdHJldHVybiAwO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTEwMDYwLVxubmV0L2NvcmUvZGV2LmM6MTAwNjE6REVDTEFSRV9SV1NFTShkZXZfYWRkcl9zZW0pO1xubmV0L2NvcmUvZGV2LmMtMTAwNjItXG4tLVxubmV0L2NvcmUvZGV2LmM9MTAwNjQ9aW50IG5ldGlmX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmRldl9uYW1lKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwMDY5LVxubmV0L2NvcmUvZGV2LmM6MTAwNzA6XHRkb3duX3JlYWQoXHUwMDI2ZGV2X2FkZHJfc2VtKTtcbm5ldC9jb3JlL2Rldi5jLTEwMDcxLVx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTEwMDgwLVx0ZWxzZVxubmV0L2NvcmUvZGV2LmM6MTAwODE6XHRcdG1lbWNweShzYS1cdTAwM2VzYV9kYXRhLCBkZXYtXHUwMDNlZGV2X2FkZHIsXG5uZXQvY29yZS9kZXYuYy0xMDA4Mi1cdFx0ICAgICAgIG1pbl90KHNpemVfdCwgc2l6ZSwgZGV2LVx1MDAzZWFkZHJfbGVuKSk7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTAwODYtXHRyY3VfcmVhZF91bmxvY2soKTtcbm5ldC9jb3JlL2Rldi5jOjEwMDg3Olx0dXBfcmVhZChcdTAwMjZkZXZfYWRkcl9zZW0pO1xubmV0L2NvcmUvZGV2LmMtMTAwODgtXHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTUyOS1cbm5ldC9jb3JlL2Rldi5jOjExNTMwOlx0YWRkX2RldmljZV9yYW5kb21uZXNzKGRldi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldi5jLTExNTMxLVxubmV0L2NvcmUvZGV2LmMtMTE1MzItXHQvKiBJZiB0aGUgZGV2aWNlIGhhcyBwZXJtYW5lbnQgZGV2aWNlIGFkZHJlc3MsIGRyaXZlciBzaG91bGRcbm5ldC9jb3JlL2Rldi5jOjExNTMzOlx0ICogc2V0IGRldl9hZGRyIGFuZCBhbHNvIGFkZHJfYXNzaWduX3R5cGUgc2hvdWxkIGJlIHNldCB0b1xubmV0L2NvcmUvZGV2LmMtMTE1MzQtXHQgKiBORVRfQUREUl9QRVJNIChkZWZhdWx0IHZhbHVlKS5cbi0tXG5uZXQvY29yZS9kZXYuYy0xMTUzNi1cdGlmIChkZXYtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9PSBORVRfQUREUl9QRVJNKVxubmV0L2NvcmUvZGV2LmM6MTE1Mzc6XHRcdG1lbWNweShkZXYtXHUwMDNlcGVybV9hZGRyLCBkZXYtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VhZGRyX2xlbik7XG5uZXQvY29yZS9kZXYuYy0xMTUzOC1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMjA5ND1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIxMzMtXG5uZXQvY29yZS9kZXYuYzoxMjEzNDpcdGlmIChkZXZfYWRkcl9pbml0KGRldikpXG5uZXQvY29yZS9kZXYuYy0xMjEzNS1cdFx0Z290byBmcmVlX3BjcHU7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTIyNTk9dm9pZCBmcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyMjgzLVx0LyogRmx1c2ggZGV2aWNlIGFkZHJlc3NlcyAqL1xubmV0L2NvcmUvZGV2LmM6MTIyODQ6XHRkZXZfYWRkcl9mbHVzaChkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTIyODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gZGV2X2FkZHJfaW5pdCoqCgpPa2F5LCBzbyBgZGV2X2FkZHJfaW5pdGAgaXMgdXAuIExldCYjMzk7cyBnZXQgcmlnaHQgZG93biB0byBpdC4gTXkgdGFzayBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoZSBgZGV2X2FkZHJgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHZhbHVlcyBvciBwcm9jZXNzZXMgaXQgaW52b2x2ZXMgYW5kIHdoYXQgZWZmZWN0IHRoaXMgaW5pdGlhbGl6YXRpb24gaGFzIG9uIHRoZSBzeXN0ZW0uIFRpbWUgdG8gZ28gbGluZS1ieS1saW5lLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRoaW5nIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfYWRkcl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY2MT12b2lkIGRldl9hZGRyX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NzAtLyoqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY3MTogKlx0ZGV2X2FkZHJfaW5pdCAtIEluaXQgZGV2aWNlIGFkZHJlc3MgbGlzdFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NzItICpcdEBkZXY6IGRldmljZVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjc4LSAqL1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2Nzk6aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjgwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk3MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIGBkZXZfYWRkcl9pbml0YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBteSBtaW5kIGlzOiAmIzM0O0xldCYjMzk7cyByZWFkIGBkZXZfYWRkcl9pbml0YC4mIzM0OyBTaW1wbGUsIGRpcmVjdCwgYW5kIHByYWdtYXRpYy4gQXMgYW4gZXhwZXJ0LCBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgaHlwb3RoZXNlcyBhYm91dCB3aGF0IHRoaXMgZnVuY3Rpb24gKm1pZ2h0KiBiZSBkb2luZy4gQmFzZWQgb24gdGhlIG5hbWUsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGRldmljZSBhZGRyZXNzIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSYjMzk7bSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGFkZHJlc3NlcyBhcmUgc2V0LCBpZiB0aGV5IGFyZSBkZXRlcm1pbmVkIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHksIGhvdyBjb25mbGljdHMgYXJlIGhhbmRsZWQsIGFuZCB3aGF0IGVycm9yIGNoZWNraW5nIGlzIGluIHBsYWNlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGlmIG15IGFzc3VtcHRpb25zIGhvbGQgdHJ1ZSBhbmQgc3RhcnQgdG8gYnVpbGQgYW4gbWVudGFsIG1hcCBvZiBob3cgdGhpcyBwaWVjZXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHQvKipcbiA2NzE6XHQgKlx0ZGV2X2FkZHJfaW5pdCAtIEluaXQgZGV2aWNlIGFkZHJlc3MgbGlzdFxuIDY3MjpcdCAqXHRAZGV2OiBkZXZpY2VcbiA2NzM6XHQgKlxuIDY3NDpcdCAqXHRJbml0IGRldmljZSBhZGRyZXNzIGxpc3QgYW5kIGNyZWF0ZSB0aGUgZmlyc3QgZWxlbWVudCxcbiA2NzU6XHQgKlx0dXNlZCBieSAtXHUwMDNlZGV2X2FkZHIuXG4gNjc2Olx0ICpcbiA2Nzc6XHQgKlx0VGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHJ0bmxfbXV0ZXguXG4gNjc4Olx0ICovXG4gNjc5Olx0aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA2ODA6XHR7XG4gNjgxOlx0XHR1bnNpZ25lZCBjaGFyIGFkZHJbTUFYX0FERFJfTEVOXTtcbiA2ODI6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gNjgzOlx0XHRpbnQgZXJyO1xuIDY4NDpcdFxuIDY4NTpcdFx0LyogcnRubF9tdXRleCBtdXN0IGJlIGhlbGQgaGVyZSAqL1xuIDY4NjpcdFxuIDY4NzpcdFx0X19od19hZGRyX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycyk7XG4gNjg4Olx0XHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcbiA2ODk6XHRcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxuIDY5MDpcdFx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX0xBTik7XG4gNjkxOlx0XHRpZiAoIWVycikge1xuIDY5MjpcdFx0XHQvKlxuIDY5MzpcdFx0XHQgKiBHZXQgdGhlIGZpcnN0IChwcmV2aW91c2x5IGNyZWF0ZWQpIGFkZHJlc3MgZnJvbSB0aGUgbGlzdFxuIDY5NDpcdFx0XHQgKiBhbmQgc2V0IGRldl9hZGRyIHBvaW50ZXIgdG8gdGhpcyBsb2NhdGlvbi5cbiA2OTU6XHRcdFx0ICovXG4gNjk2Olx0XHRcdGhhID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzLmxpc3QsXG4gNjk3Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIGxpc3QpO1xuIDY5ODpcdFx0XHRkZXYtXHUwMDNlZGV2X2FkZHIgPSBoYS1cdTAwM2VhZGRyO1xuIDY5OTpcdFx0fVxuIDcwMDpcdFx0cmV0dXJuIGVycjtcbiA3MDE6XHR9XG4gNzAyOlx0XG4gNzAzOlx0dm9pZCBkZXZfYWRkcl9tb2Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG9mZnNldCxcbiA3MDQ6XHRcdFx0ICBjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKVxuIDcwNTpcdHtcbiA3MDY6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gNzA3Olx0XG4gNzA4Olx0XHRkZXZfYWRkcl9jaGVjayhkZXYpO1xuIDcwOTpcdFxuIDcxMDpcdFx0aGEgPSBjb250YWluZXJfb2YoZGV2LVx1MDAzZWRldl9hZGRyLCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIGFkZHJbMF0pO1xuIDcxMTpcdFx0cmJfZXJhc2UoXHUwMDI2aGEtXHUwMDNlbm9kZSwgXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycy50cmVlKTtcbiA3MTI6XHRcdG1lbWNweShcdTAwMjZoYS1cdTAwM2VhZGRyW29mZnNldF0sIGFkZHIsIGxlbik7XG4gNzEzOlx0XHRtZW1jcHkoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRyX3NoYWRvd1tvZmZzZXRdLCBhZGRyLCBsZW4pO1xuIDcxNDpcdFx0V0FSTl9PTihfX2h3X2FkZHJfaW5zZXJ0KFx1MDAyNmRldi1cdTAwM2VkZXZfYWRkcnMsIGhhLCBkZXYtXHUwMDNlYWRkcl9sZW4pKTtcbiA3MTU6XHR9XG4gNzE2Olx0RVhQT1JUX1NZTUJPTChkZXZfYWRkcl9tb2QpO1xuIDcxNzpcdFxuIDcxODpcdC8qKlxuIDcxOTpcdCAqXHRkZXZfYWRkcl9hZGQgLSBBZGQgYSBkZXZpY2UgYWRkcmVzc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTU3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgbmV0d29yayBkZXZpY2UgZHJpdmVyIGRldmVsb3BtZW50OgoKKipBbmFseXppbmcgQWRkcmVzcyBBbGxvY2F0aW9uIGluIHRoZSBEcml2ZXIqKgoKUmlnaHQsIHNvIGBkZXYtJmd0O2Rldl9hZGRyYCwgdGhhdCBkZXZpY2UgYWRkcmVzcyBwb2ludGVyLCBpdCYjMzk7cyBhY3R1YWxseSBwb2ludGluZyBkaXJlY3RseSB0byBgaGEtJmd0O2FkZHJgLiAgQW5kIEkgcmVtZW1iZXIgZnJvbSBteSBkaWdnaW5nIGFyb3VuZCwgYGhhLSZndDthZGRyYCBpdHNlbGYgZ2V0cyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBgX19od19hZGRyX2FkZGAgZnVuY3Rpb24uICBUaGF0JiMzOTtzIHRoZSBrZXkgY29ubmVjdGlvbi4gU28gdGhlIGRldmljZSBhZGRyZXNzIGlzbiYjMzk7dCBqdXN0IGZsb2F0aW5nIG91dCB0aGVyZSwgaXTigJlzIGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGhhcmR3YXJlIGFkZHJlc3Mgc3RydWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGFsbG9jYXRpb24gZGV0YWlscyBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGVyZSwgd2hpY2ggbWVhbnMgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBfX2h3X2FkZHJfYWRkYCBmdW5jdGlvbi4gSSB3aWxsIGNoZWNrIGZvciBhbnkgcGVjdWxpYXJpdGllcyB0aGF0IG1heSBoYXZlIGNvbWUgdXAgZHVyaW5nIGRlYnVnZ2luZyBwcmV2aW91c2x5LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIG5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMgLSBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIG5ldCBkZXZpY2UgbGlzdHNcbiAgIDQ6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSmlyaSBQaXJrbyBcdTAwM2NqcGlya29AcmVkaGF0LmNvbVx1MDAzZVxuICAgNTpcdCAqXG4gICA2Olx0ICogVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHVuaWNhc3QsIG11bHRpY2FzdCBhbmQgZGV2aWNlXG4gICA3Olx0ICogYWRkcmVzc2VzIGxpc3RzLlxuICAgODpcdCAqL1xuICAgOTpcdFxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQjaW5jbHVkZSBcJiMzNDtkZXYuaFwmIzM0O1xuICAxODpcdFxuICAxOTpcdC8qXG4gIDIwOlx0ICogR2VuZXJhbCBsaXN0IGhhbmRsaW5nIGZ1bmN0aW9uc1xuICAyMTpcdCAqL1xuICAyMjpcdFxuICAyMzpcdHN0YXRpYyBpbnQgX19od19hZGRyX2luc2VydChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbiAgMjQ6XHRcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyICpuZXcsIGludCBhZGRyX2xlbilcbiAgMjU6XHR7XG4gIDI2Olx0XHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFx1MDAyNmxpc3QtXHUwMDNldHJlZS5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDtcbiAgMjc6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gIDI4Olx0XG4gIDI5Olx0XHR3aGlsZSAoKmluc19wb2ludCkge1xuICAzMDpcdFx0XHRpbnQgZGlmZjtcbiAgMzE6XHRcbiAgMzI6XHRcdFx0aGEgPSByYl9lbnRyeSgqaW5zX3BvaW50LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIG5vZGUpO1xuICAzMzpcdFx0XHRkaWZmID0gbWVtY21wKG5ldy1cdTAwM2VhZGRyLCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbik7XG4gIDM0Olx0XHRcdGlmIChkaWZmID09IDApXG4gIDM1Olx0XHRcdFx0ZGlmZiA9IG1lbWNtcChcdTAwMjZuZXctXHUwMDNldHlwZSwgXHUwMDI2aGEtXHUwMDNldHlwZSwgc2l6ZW9mKG5ldy1cdTAwM2V0eXBlKSk7XG4gIDM2Olx0XG4gIDM3Olx0XHRcdHBhcmVudCA9ICppbnNfcG9pbnQ7XG4gIDM4Olx0XHRcdGlmIChkaWZmIFx1MDAzYyAwKVxuICAzOTpcdFx0XHRcdGluc19wb2ludCA9IFx1MDAyNnBhcmVudC1cdTAwM2VyYl9sZWZ0O1xuICA0MDpcdFx0XHRlbHNlIGlmIChkaWZmIFx1MDAzZSAwKVxuICA0MTpcdFx0XHRcdGluc19wb2ludCA9IFx1MDAyNnBhcmVudC1cdTAwM2VyYl9yaWdodDtcbiAgNDI6XHRcdFx0ZWxzZVxuICA0MzpcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuICA0NDpcdFx0fVxuICA0NTpcdFxuICA0NjpcdFx0cmJfbGlua19ub2RlX3JjdShcdTAwMjZuZXctXHUwMDNlbm9kZSwgcGFyZW50LCBpbnNfcG9pbnQpO1xuICA0NzpcdFx0cmJfaW5zZXJ0X2NvbG9yKFx1MDAyNm5ldy1cdTAwM2Vub2RlLCBcdTAwMjZsaXN0LVx1MDAzZXRyZWUpO1xuICA0ODpcdFxuICA0OTpcdFx0cmV0dXJuIDA7XG4gIDUwOlx0fVxuICA1MTpcdFxuICA1MjpcdHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXG4gIDUzOlx0X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4gIDU0Olx0XHRcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYylcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuICA1NzpcdFx0aW50IGFsbG9jX3NpemU7XG4gIDU4Olx0XG4gIDU5Olx0XHRhbGxvY19zaXplID0gc2l6ZW9mKCpoYSk7XG4gIDYwOlx0XHRpZiAoYWxsb2Nfc2l6ZSBcdTAwM2MgTDFfQ0FDSEVfQllURVMpXG4gIDYxOlx0XHRcdGFsbG9jX3NpemUgPSBMMV9DQUNIRV9CWVRFUztcbiAgNjI6XHRcdGhhID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfQVRPTUlDKTtcbiAgNjM6XHRcdGlmICghaGEpXG4gIDY0Olx0XHRcdHJldHVybiBOVUxMO1xuICA2NTpcdFx0bWVtY3B5KGhhLVx1MDAzZWFkZHIsIGFkZHIsIGFkZHJfbGVuKTtcbiAgNjY6XHRcdGhhLVx1MDAzZXR5cGUgPSBhZGRyX3R5cGU7XG4gIDY3Olx0XHRoYS1cdTAwM2VyZWZjb3VudCA9IDE7XG4gIDY4Olx0XHRoYS1cdTAwM2VnbG9iYWxfdXNlID0gZ2xvYmFsO1xuICA2OTpcdFx0aGEtXHUwMDNlc3luY2VkID0gc3luYyA/IDEgOiAwO1xuICA3MDpcdFx0aGEtXHUwMDNlc3luY19jbnQgPSAwO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIGhhO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgaW50IF9faHdfYWRkcl9hZGRfZXgoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG4gIDc2Olx0XHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbiAgNzc6XHRcdFx0XHQgICAgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUsIGJvb2wgZ2xvYmFsLCBib29sIHN5bmMsXG4gIDc4Olx0XHRcdFx0ICAgIGludCBzeW5jX2NvdW50LCBib29sIGV4Y2x1c2l2ZSlcbiAgNzk6XHR7XG4gIDgwOlx0XHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFx1MDAyNmxpc3QtXHUwMDNldHJlZS5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDtcbiAgODE6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gIDgyOlx0XG4gIDgzOlx0XHRpZiAoYWRkcl9sZW4gXHUwMDNlIE1BWF9BRERSX0xFTilcbiAgODQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDg1Olx0XG4gIDg2Olx0XHR3aGlsZSAoKmluc19wb2ludCkge1xuICA4NzpcdFx0XHRpbnQgZGlmZjtcbiAgODg6XHRcbiAgODk6XHRcdFx0aGEgPSByYl9lbnRyeSgqaW5zX3BvaW50LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIG5vZGUpO1xuICA5MDpcdFx0XHRkaWZmID0gbWVtY21wKGFkZHIsIGhhLVx1MDAzZWFkZHIsIGFkZHJfbGVuKTtcbiAgOTE6XHRcdFx0aWYgKGRpZmYgPT0gMClcbiAgOTI6XHRcdFx0XHRkaWZmID0gbWVtY21wKFx1MDAyNmFkZHJfdHlwZSwgXHUwMDI2aGEtXHUwMDNldHlwZSwgc2l6ZW9mKGFkZHJfdHlwZSkpO1xuICA5MzpcdFxuICA5NDpcdFx0XHRwYXJlbnQgPSAqaW5zX3BvaW50O1xuICA5NTpcdFx0XHRpZiAoZGlmZiBcdTAwM2MgMCkge1xuICA5NjpcdFx0XHRcdGluc19wb2ludCA9IFx1MDAyNnBhcmVudC1cdTAwM2VyYl9sZWZ0O1xuICA5NzpcdFx0XHR9IGVsc2UgaWYgKGRpZmYgXHUwMDNlIDApIHtcbiAgOTg6XHRcdFx0XHRpbnNfcG9pbnQgPSBcdTAwMjZwYXJlbnQtXHUwMDNlcmJfcmlnaHQ7XG4gIDk5Olx0XHRcdH0gZWxzZSB7XG4gMTAwOlx0XHRcdFx0aWYgKGV4Y2x1c2l2ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyBOZXR3b3JrIERldmljZSBIYXJkd2FyZSBBZGRyZXNzZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGhhLSZndDthZGRyYCBjb25zdHJ1Y3QgYW5kIGl0JiMzOTtzIGNsZWFybHkgcGFydCBvZiBhIGBuZXRkZXZfaHdfYWRkcmAgc3RydWN0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgYW5kIHZlcmlmeSB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG5ldGRldl9od19hZGRyYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSB0byBzZWUgaG93IHRoaXMgYGhhLSZndDthZGRyYCBmaWVsZCBpcyBiZWluZyB1c2VkLiBUaGlzIGNvdWxkIGJlIGNydWNpYWwgaW4gdW5kZXJzdGFuZGluZyBhIGN1cnJlbnQgaXNzdWUgb3IgZGVzaWduLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhZGRyZXNzIG1hbmlwdWxhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIEkga25vdyB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIzNT1zdHJ1Y3Qgc2tfYnVmZjtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM2LVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzc6c3RydWN0IG5ldGRldl9od19hZGRyIHtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM4LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgLiBUaGlzIGlzIGEgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZSwgY2xlYXJseSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgYWRkcmVzc2VzIHdpdGhpbiB0aGUgbmV0d29yayBkZXZpY2UgY29udGV4dC4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIHdpbGwgYmUgdXNlZCBmb3IgTUFDIGFkZHJlc3NlcywgbXVsdGljYXN0IE1BQyBhZGRyZXNzZXMsIG9yIHBvc3NpYmx5IGV2ZW4gb3RoZXIgaGFyZHdhcmUtc3BlY2lmaWMgaWRlbnRpZmllcnMgbWFuYWdlZCBieSB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcG9uZW50cy4gSXMgaXQgc2ltcGx5IGEgY29udGFpbmVyIGZvciB0aGUgYWRkcmVzcyBpdHNlbGYsIG9yIGRvZXMgaXQgaG9sZCBhc3NvY2lhdGVkIG1ldGFkYXRhIGxpa2UgZmxhZ3MgKGUuZy4sIHBlcm1hbmVudCwgdGVtcG9yYXJ5LCBldGMuKSBvciBwZXJoYXBzIHJlZmVyZW5jZSBjb3VudHM/IEFyZSB0aGVyZSBhbnkgcG9pbnRlcnMgaW4gdGhlIHN0cnVjdHVyZSB0aGF0IG1hbmFnZSB0aGUgbWVtb3J5IGZvciB0aGUgaGFyZHdhcmUgYWRkcmVzcyBpdHNlbGY/IEkgZXhwZWN0IHRoZXJlIHRvIGJlIGEgZmllbGQgZGVmaW5pbmcgdGhlIGxlbmd0aCBvZiB0aGUgYWRkcmVzcywgYXMgZGlmZmVyZW50IGhhcmR3YXJlIHR5cGVzIGNhbiBoYXZlIGRpZmZlcmVudCBhZGRyZXNzIHNpemVzIChlLmcuLCBFdGhlcm5ldCB2cy4gc29tZSBvYnNjdXJlIGVtYmVkZGVkIG5ldHdvcmspLiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgdmVyc2lvbmVkIG9yIGlmIHRoZXJlIGFyZSBhbnkgZXh0ZW5zaW9uIGZpZWxkcyBhZGRlZCBmb3IgZnV0dXJlIGZlYXR1cmVzLCBhbmQgaG93IHRoYXQgaXMgaGFuZGxlZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhbmQgdXNlZCBieSB0aGUgc3Vycm91bmRpbmcgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNzpcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XG4gMjM4Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuIDIzOTpcdFx0c3RydWN0IHJiX25vZGVcdFx0bm9kZTtcbiAyNDA6XHRcdHVuc2lnbmVkIGNoYXJcdFx0YWRkcltNQVhfQUREUl9MRU5dO1xuIDI0MTpcdFx0dW5zaWduZWQgY2hhclx0XHR0eXBlO1xuIDI0MjpcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9MQU5cdFx0MVxuIDI0MzpcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9TQU5cdFx0MlxuIDI0NDpcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9VTklDQVNUXHQzXG4gMjQ1Olx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVFx0NFxuIDI0NjpcdFx0Ym9vbFx0XHRcdGdsb2JhbF91c2U7XG4gMjQ3Olx0XHRpbnRcdFx0XHRzeW5jX2NudDtcbiAyNDg6XHRcdGludFx0XHRcdHJlZmNvdW50O1xuIDI0OTpcdFx0aW50XHRcdFx0c3luY2VkO1xuIDI1MDpcdFx0c3RydWN0IHJjdV9oZWFkXHRcdHJjdV9oZWFkO1xuIDI1MTpcdH07XG4gMjUyOlx0XG4gMjUzOlx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3Qge1xuIDI1NDpcdFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiAyNTU6XHRcdGludFx0XHRcdGNvdW50O1xuIDI1NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUwMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyBpbiBOZXR3b3JrIERyaXZlciBNQUMgQWRkcmVzcyBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgTUFYX0FERFJfTEVOYCBpcyBkZWZpbmVkIGFzIDMyLCB3aGljaCBtZWFucyB0aGUgaGFyZHdhcmUgYWRkcmVzcyBidWZmZXIsIGBoYS0mZ3Q7YWRkcmAsIGlzIGEgMzItYnl0ZSBhcnJheS4gVGhlIGBfX2h3X2FkZHJfY3JlYXRlYCBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhpcyBzdHJ1Y3R1cmUgdXNpbmcgYGttYWxsb2NgLiBOb3csIGEgY3J1Y2lhbCBwb2ludDogYGttYWxsb2NgIGRvZXNuJiMzOTt0IHplcm8taW5pdGlhbGl6ZSB0aGUgbWVtb3J5LiAgSXQganVzdCBnaXZlcyB5b3UgYSBjaHVuayBvZiBtZW1vcnkuICBTbywgaWYgYGFkZHJfbGVuYCBwYXNzZWQgdG8gYF9faHdfYWRkcl9jcmVhdGVgIGlzIGxlc3MgdGhhbiAzMiwgd2hpY2ggaXQgaXMgaW4gdGhlIGNhc2Ugb2YgYSBzdGFuZGFyZCBFdGhlcm5ldCBNQUMgYWRkcmVzcyAoNiBieXRlcyksIHRoZSAqcmVtYWluaW5nKiBieXRlcyBvZiBgaGEtJmd0O2FkZHJgIHdpbGwgYmUgdW5pbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5LCB0aGUgYnl0ZXMgZnJvbSBpbmRleCA2IHVwIHRvIDMxIHdpbGwgYmUgZ2FyYmFnZS4KCk5vdywgbG9va2luZyBhdCBob3cgdGhlIE1BQyBhZGRyZXNzIGlzIGFjdHVhbGx5ICp1c2VkKiBpbiB0aGUgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBmdW5jdGlvbjoKYGBgYwoJUlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDApKSk7CglSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNCkpKTsKYGBgCldlJiMzOTtyZSByZWFkaW5nIGZyb20gYGRldi0mZ3Q7ZGV2X2FkZHJgLCB3aGljaCAqcG9pbnRzKiB0byBvdXIgYGhhLSZndDthZGRyYC4gVGhlIG9yaWdpbmFsIGNvZGUgcmVhZHMgZnJvbSBgZGV2LSZndDtkZXZfYWRkciAmIzQzOyA0YCwgYW5kIHRoYXQgcmVhZHMgNCBieXRlcyBzdGFydGluZyBhdCBpbmRleCA0IChieXRlcyA0LCA1LCA2LCA3KS4gQnl0ZXMgNCBhbmQgNSBhcmUgcGFydCBvZiB0aGUgTUFDIGFkZHJlc3MsIHNvIHRoZXkgYXJlIGluaXRpYWxpemVkLiBIb3dldmVyLCBieXRlcyA2IGFuZCA3IGFyZSBVTklOSVRJQUxJWkVELiBUaGF0IGNvdWxkIGJlIGEgcHJvYmxlbSEgIFdlJiMzOTtyZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSG93ZXZlciwgYGRldl9hZGRyX2luaXRgIHNlZW1zIHRvIGluaXRpYWxpemUgdGhlIGZpcnN0IE1BQyBhZGRyZXNzIGZ1bGx5IQpgYGBjCgl1bnNpZ25lZCBjaGFyIGFkZHJbTUFYX0FERFJfTEVOXTsKCW1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpOwoJZXJyID0gX19od19hZGRyX2FkZCgmYW1wO2Rldi0mZ3Q7ZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksCgkJCSAgICBORVRERVZfSFdfQUREUl9UX0xBTik7CmBgYApIZXJlLCB3ZSBjcmVhdGUgYSAzMi1ieXRlIGFycmF5LCBgYWRkcmAsIGFuZCB6ZXJvIGl0IG91dCwgYW5kIHRoZW4gd2UgYWRkIGl0IGFzIGFuIGFkZHJlc3MuICBDcnVjaWFsbHksIGBfX2h3X2FkZHJfYWRkYCBpcyBnaXZlbiBhIGBhZGRyX2xlbmAgb2YgMzIsIHNvIHRoaXMgZmlyc3QgYWRkcmVzcyBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLiAgU28gd2UgYXJlIHNhZmUgaGVyZSEKCkJ1dCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgTUFDIGFkZHJlc3MgaXMgKmNoYW5nZWQqPyBgbmV0aWZfc2V0X21hY19hZGRyZXNzYCBjYWxscyBgZGV2X2FkZHJfbW9kYCwgd2hpY2ggdXNlcyBgbWVtY3B5YCB0byB1cGRhdGUgdGhlIE1BQyBhZGRyZXNzLgpgYGBjCgltZW1jcHkoJmFtcDtoYS0mZ3Q7YWRkcltvZmZzZXRdLCBhZGRyLCBsZW4pOwpgYGAKVGhpcyBvdmVyd3JpdGVzIHRoZSBleGlzdGluZyBgaGEtJmd0O2FkZHJgIGluIHBsYWNlLiBUaGlzIG1lYW5zIHRoYXQgKm9ubHkqIHRoZSBNQUMgYWRkcmVzcyBieXRlcyBnZXQgdXBkYXRlZCwgYW5kIHRoZSBvdGhlciBieXRlcyByZW1haW4gd2hhdGV2ZXIgZ2FyYmFnZSB3YXMgdGhlcmUgYmVmb3JlLCB1bmxlc3Mgd2Ugc3BlY2lmaWNhbGx5IGluaXRpYWxpemUgdGhlbS4KCkFuZCBmaW5hbGx5LCB3ZSBoYXZlIHRoZSBjYXNlIHdoZXJlIGEgZHJpdmVyIGRpcmVjdGx5IHNldHMgdGhlIE1BQyBhZGRyZXNzLiAgTWFueSBkcml2ZXJzIGRvIGBldGhfaHdfYWRkcl9zZXQoZGV2LCBtYWNfYWRkcilgLiBXZSYjMzk7ZCBuZWVkIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBldGhfaHdfYWRkcl9zZXRgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGlzLiBJcyB0aGVyZSBhbnkgaW5pdGlhbGl6YXRpb24gaGFwcGVuaW5nIHRoZXJlPyAgQXJlIHdlIHNhZmU/IFdlIG5lZWQgdG8gaW52ZXN0aWdhdGUgYGV0aF9od19hZGRyX3NldGAgZm9yIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuIEl0JiMzOTtzIHBvc3NpYmxlIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgc2FtZSBwcm9ibGVtIGFzIHRoZSBvcmlnaW5hbCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldGhfaHdfYWRkcl9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTMwMj1zdGF0aWMgaW5saW5lIHZvaWQgZXRoZXJfYWRkcl9jb3B5KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpXG4tLVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTMxNy0vKipcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDozMTg6ICogZXRoX2h3X2FkZHJfc2V0IC0gQXNzaWduIEV0aGVybmV0IGFkZHJlc3MgdG8gYSBuZXRfZGV2aWNlXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzE5LSAqIEBkZXY6IHBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmVcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzIzLSAqL1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjMyNDpzdGF0aWMgaW5saW5lIHZvaWQgZXRoX2h3X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyKVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTMyNS17XG4tLVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZXRoX2h3X2FkZHJfaW5oZXJpdChzdHJ1Y3QgbmV0X2RldmljZSAqZHN0LFxuLS1cbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zNDAtXHRkc3QtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IHNyYy1cdTAwM2VhZGRyX2Fzc2lnbl90eXBlO1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjM0MTpcdGV0aF9od19hZGRyX3NldChkc3QsIHNyYy1cdTAwM2VkZXZfYWRkcik7XG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzQyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg9NjA0PXN0YXRpYyBpbmxpbmUgdm9pZCBldGhfaHdfYWRkcl9nZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJhc2VfYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNjExLVx0dTY0X3RvX2V0aGVyX2FkZHIodSwgYWRkcik7XG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6NjEyOlx0ZXRoX2h3X2FkZHJfc2V0KGRldiwgYWRkcik7XG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNjEzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGBldGhfaHdfYWRkcl9zZXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZXRoX2h3X2FkZHJfc2V0YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyByb2xlLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byBzZXR0aW5nIHRoZSBoYXJkd2FyZSBhZGRyZXNzIOKAkyB0aGUgTUFDIGFkZHJlc3MsIHByZXN1bWFibHkg4oCTIG9mIGFuIEV0aGVybmV0IGludGVyZmFjZS4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIGdvIGRlZXBlciB0aGFuIGp1c3QgdGhlIG5hbWUuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aGlua2luZyBhYm91dCB0aGUgY29udGV4dC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBsaWtlbHkgdG8gYmUgdXNlZD8gSXMgaXQgcGFydCBvZiB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBJcyBpdCBhIHVzZXItc3BhY2UgdXRpbGl0eSBmdW5jdGlvbiB0byBjb25maWd1cmUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlPyBPciBpcyBpdCBzb21ldGhpbmcgbW9yZSBkZWVwbHkgZW1iZWRkZWQgaW4gdGhlIG5ldHdvcmsgc3RhY2s/IEtub3dpbmcgdGhlIGVudmlyb25tZW50IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuCgpJIHdhbnQgdG8ga25vdyBpdHMgaW5wdXRzLiBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgZXhwZWN0PyBBIG5ldHdvcmsgaW50ZXJmYWNlIGRlc2NyaXB0b3IsIHN1cmVseSwgYnV0IHdoYXQgYWJvdXQgdGhlIGFkZHJlc3MgaXRzZWxmPyBJcyBpdCBhIHNpbXBsZSBieXRlIGFycmF5PyBBIHN0YW5kYXJkaXplZCBzdHJ1Y3Q/IEFueSBlcnJvciBoYW5kbGluZyBpbnB1dHM/IEFueSBsaW1pdGF0aW9ucyBvbiB3aGF0JiMzOTtzIGFsbG93ZWQ/IE15IHRob3VnaHRzIGFyZSByYWNpbmcgZm9yd2FyZCBub3csIGFudGljaXBhdGluZyBob3cgaXQgaGFuZGxlcyBtYWxmb3JtZWQgYWRkcmVzc2VzLCBvciBwb3RlbnRpYWxseSBjb25mbGljdGluZyByZXF1ZXN0cy4KClRoZSBleGVjdXRpb24gZmxvdyBpcyBuZXh0LiBIb3cgZG9lcyB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgZ28gYWJvdXQgc2V0dGluZyB0aGUgYWRkcmVzcz8gRG9lcyBpdCBkaXJlY3RseSBtYW5pcHVsYXRlIHJlZ2lzdGVycyBvbiB0aGUgTmV0d29yayBJbnRlcmZhY2UgQ29udHJvbGxlciAoTklDKT8gRG9lcyBpdCB1dGlsaXplIHNvbWUga2luZCBvZiBzeXN0ZW0gY2FsbCBvciBhIGtlcm5lbCBBUEk/IERvZXMgaXQgZ28gdGhyb3VnaCBhbnkgbGV2ZWwgb2YgYWJzdHJhY3Rpb24/IEtub3dpbmcgdGhpcyB3aWxsIHJldmVhbCB0aGUgbGV2ZWwgb2YgZmxleGliaWxpdHkuIFdpbGwgaXQgaGFuZGxlIGFsbCB0eXBlcyBvZiBhZGRyZXNzZXMgKHVuaWNhc3QsIG11bHRpY2FzdCk/IE9yIGRvZXMgaXQgaGF2ZSBzb21lIHJlc3RyaWN0aW9ucz8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBIb3cgcm9idXN0IGlzIGl0PyBXaGF0IGZhaWx1cmUgbW9kZXMgZG9lcyBpdCBhbnRpY2lwYXRlPyBEb2VzIGl0IHJldHVybiBlcnJvciBjb2RlcywgdGhyb3cgZXhjZXB0aW9ucywgb3IganVzdCBzaWxlbnRseSBmYWlsPyBEb2VzIGl0IGNvbnNpZGVyIHRoZSB0aW1pbmcgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aGluIHRoZSBlbnZpcm9ubWVudD8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBJIHVzZSBpdCBvciB3aGF0IGFzc3VtcHRpb25zIEkgY2FuIG1ha2UgaWYgaW1wbGVtZW50aW5nIGEgY29tcGxlbWVudGFyeSBmdW5jdGlvbi4KClVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvciwgbGltaXRhdGlvbnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYmV5b25kIHRoZSBjb2RlIGl0c2VsZiwgY29uc2lkZXJpbmcgdGhlIHBsYXRmb3JtLCBkcml2ZXIsIGFuZCB0aGUgdXNlci1mYWNpbmcgaW1wbGljYXRpb25zIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgcXVpY2sgZXhhbWluYXRpb24gbmVlZHMgdG8gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNvdXJjZSwgdGhlIGRvY3VtZW50YXRpb24sIG9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIGl0cyB0cnVlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxODpcdCAqIGV0aF9od19hZGRyX3NldCAtIEFzc2lnbiBFdGhlcm5ldCBhZGRyZXNzIHRvIGEgbmV0X2RldmljZVxuIDMxOTpcdCAqIEBkZXY6IHBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmVcbiAzMjA6XHQgKiBAYWRkcjogYWRkcmVzcyB0byBhc3NpZ25cbiAzMjE6XHQgKlxuIDMyMjpcdCAqIEFzc2lnbiBnaXZlbiBhZGRyZXNzIHRvIHRoZSBuZXRfZGV2aWNlLCBhZGRyX2Fzc2lnbl90eXBlIGlzIG5vdCBjaGFuZ2VkLlxuIDMyMzpcdCAqL1xuIDMyNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBldGhfaHdfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpXG4gMzI1Olx0e1xuIDMyNjpcdFx0X19kZXZfYWRkcl9zZXQoZGV2LCBhZGRyLCBFVEhfQUxFTik7XG4gMzI3Olx0fVxuIDMyODpcdFxuIDMyOTpcdC8qKlxuIDMzMDpcdCAqIGV0aF9od19hZGRyX2luaGVyaXQgLSBDb3B5IGRldl9hZGRyIGZyb20gYW5vdGhlciBuZXRfZGV2aWNlXG4gMzMxOlx0ICogQGRzdDogcG9pbnRlciB0byBuZXRfZGV2aWNlIHRvIGNvcHkgZGV2X2FkZHIgdG9cbiAzMzI6XHQgKiBAc3JjOiBwb2ludGVyIHRvIG5ldF9kZXZpY2UgdG8gY29weSBkZXZfYWRkciBmcm9tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzMwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgX19kZXZfYWRkcl9zZXRgIHNpdHVhdGlvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgYF9fZGV2X2FkZHJfc2V0YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIGdldCBpbnRvIHRoZSBjb2RlIGZvciBgX19kZXZfYWRkcl9zZXRgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgbGluZSBieSBsaW5lLCByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBsb2dpYy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IGNvbXBvbmVudHMsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3Mgd29ya2luZyB3aXRoLCBhbmQgdGhlIGNvcmUgcHVycG9zZSBpdCYjMzk7cyBzZXJ2aW5nLiBLbm93aW5nIG15IG5ldHdvcmtpbmcgYW5kIGRldmljZSBkcml2ZXIgYmFja2dyb3VuZCwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGFzcGVjdHMgbGlrZSBtYW5pcHVsYXRpbmcgTUFDIGFkZHJlc3NlcywgaGFuZGxpbmcgYWRkcmVzcyBhc3NpZ25tZW50IHdpdGhpbiBhIGRldmljZSBzdHJ1Y3R1cmUsIGFuZCBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBpZiBhdCBhbGwsIG9yIGlmIGl0IHByaW1hcmlseSBtYW5hZ2VzIHRoZSBzb2Z0d2FyZSByZXByZXNlbnRhdGlvbiBvZiBhIGRldmljZSYjMzk7cyBhZGRyZXNzIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGRldmljZSBkcml2ZXIgZWNvc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Rldl9hZGRyX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD01MDk0PXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MDk1Ol9fZGV2X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwOTYte1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NTEwMD1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTAxLXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTEwMjpcdF9fZGV2X2FkZHJfc2V0KGRldiwgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuKTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTEwMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzY4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgX19kZXZfYWRkcl9zZXRgIHNpdHVhdGlvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgYF9fZGV2X2FkZHJfc2V0YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIGdldCBpbnRvIHRoZSBjb2RlIGZvciBgX19kZXZfYWRkcl9zZXRgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgbGluZSBieSBsaW5lLCByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBsb2dpYy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IGNvbXBvbmVudHMsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3Mgd29ya2luZyB3aXRoLCBhbmQgdGhlIGNvcmUgcHVycG9zZSBpdCYjMzk7cyBzZXJ2aW5nLiBLbm93aW5nIG15IG5ldHdvcmtpbmcgYW5kIGRldmljZSBkcml2ZXIgYmFja2dyb3VuZCwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGFzcGVjdHMgbGlrZSBtYW5pcHVsYXRpbmcgTUFDIGFkZHJlc3NlcywgaGFuZGxpbmcgYWRkcmVzcyBhc3NpZ25tZW50IHdpdGhpbiBhIGRldmljZSBzdHJ1Y3R1cmUsIGFuZCBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBpZiBhdCBhbGwsIG9yIGlmIGl0IHByaW1hcmlseSBtYW5hZ2VzIHRoZSBzb2Z0d2FyZSByZXByZXNlbnRhdGlvbiBvZiBhIGRldmljZSYjMzk7cyBhZGRyZXNzIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGRldmljZSBkcml2ZXIgZWNvc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwOTQ6XHRzdGF0aWMgaW5saW5lIHZvaWRcbjUwOTU6XHRfX2Rldl9hZGRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKVxuNTA5NjpcdHtcbjUwOTc6XHRcdGRldl9hZGRyX21vZChkZXYsIDAsIGFkZHIsIGxlbik7XG41MDk4Olx0fVxuNTA5OTpcdFxuNTEwMDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpXG41MTAxOlx0e1xuNTEwMjpcdFx0X19kZXZfYWRkcl9zZXQoZGV2LCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4pO1xuNTEwMzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQUMgQWRkcmVzcyBNb2RpZmljYXRpb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGV2X2FkZHJfbW9kYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCB3aXRoIGFuIG9mZnNldCBvZiAwIGFuZCBhIGxlbmd0aCBvZiA2LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgbW9kaWZ5aW5nIGEgTUFDIGFkZHJlc3MsIHJpZ2h0PyAgVGhlIGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgb3ZlcndyaXRlIHRoZSBmaXJzdCA2IGJ5dGVzIG9mIGBoYS0mZ3Q7YWRkcmAgd2l0aCBgbWVtY3B5YC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCB0aGlzIHdvdWxkIG1lYW4gdGhlIHJlbWFpbmluZyAyNiBieXRlcyBvZiBgaGEtJmd0O2FkZHJgIHdvdWxkIHJlbWFpbiB6ZXJvZWQsIGJlY2F1c2Ugb2YgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gaW4gYGRldl9hZGRyX2luaXRgLiBUaGlzIGxvb2tzIGNvcnJlY3QgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbW9kaWZ5aW5nIHRoZSBhZGRyZXNzIGluLXBsYWNlLgoKQnV0IHRoZW4gSSBoYWQgYSBtb21lbnQgb2YgZG91YnQuICBJcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgaGEtJmd0O2FkZHJgIGNvdWxkIGJlIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYCBhbmQgKm5vdCogYmUgemVyby1pbml0aWFsaXplZD8gIEkgaW1tZWRpYXRlbHkgcmVjYWxsZWQgdGhlIGBfX2h3X2FkZHJfYWRkX2V4YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhhdCBgX19od19hZGRyX2NyZWF0ZWAgYWxsb2NhdGVzIGBoYWAgd2l0aCBga21hbGxvY2AgYW5kIG9ubHkgY29waWVzIHRoZSBzdXBwbGllZCBgYWRkcl9sZW5gIGJ5dGVzLiAgU28gaWYgYF9faHdfYWRkcl9hZGRgIGlzIGNhbGxlZCB3aXRoIGEgbGVuZ3RoIG9mIDYsIHdvdWxkbiYjMzk7dCB0aGF0IG1lYW4gdGhlIHJlc3Qgd291bGQgYmUgdW5pbml0aWFsaXplZD8KCk15IHRob3VnaHQgdHJhaW4gY29udGludWVkIGFuZCBJIHdlbnQgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRvIGVuc3VyZSBteSBhc3N1bXB0aW9uIHJlZ2FyZGluZyBkYXRhIGluaXRpYWxpemF0aW9uLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IHRoZSBgZGV2LSZndDtkZXZfYWRkcmAgaXMgc2V0IG9uY2UgaW4gYGRldl9hZGRyX2luaXRgIGFuZCBuZXZlciBjaGFuZ2VkIHRvIHBvaW50IHRvIGEgZGlmZmVyZW50IGBoYWAsIGFuZCB0aGF0IHRoaXMgaW5pdGlhbCBgaGFgIGlzIHplcm9lZC4gIFRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgZXhpc3Rpbmcgb25lIGluIHBsYWNlLiBJIGhhZCB0byBlbnN1cmUgdGhhdCB0aGUgcG9pbnRlciB3YXMgbm90IHN3aXRjaGVkIGF0IGFueSB0aW1lLgoKQnV0IEkgaGFkIHRvIGRvdWJsZSBjaGVjayEgVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmcm9tIGEgc3l6LWNsdXN0ZXIsIGFuZCBJIHdhc24mIzM5O3Qgc3VyZSBpZiB0aGVyZSB3YXMgYW4gb2xkZXIga2VybmVsIHZlcnNpb24gd2hlcmUgYGRldi0mZ3Q7ZGV2X2FkZHJgIHdhcyBhbiBhcnJheS4gVGltZSB0byBjaGVjayBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAgZm9yIGhvdyBgZGV2X2FkZHJgIGlzIGRlZmluZWQuIFRoaXMgc2hvdWxkIGNsZWFyIHVwIHRoYXQgdGhvdWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTgxOD1lbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk1OC0gKlx0QG1jOlx0XHRcdG11bHRpY2FzdCBtYWMgYWRkcmVzc2VzXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE5NTk6ICpcdEBkZXZfYWRkcnM6XHRcdGxpc3Qgb2YgZGV2aWNlIGh3IGFkZHJlc3Nlc1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xOTYwLSAqXHRAcXVldWVzX2tzZXQ6XHRcdEdyb3VwIG9mIGFsbCBLb2JqZWN0cyBpbiB0aGUgVHggYW5kIFJYIHF1ZXVlc1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk3Ny0gKlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxOTc4OiAqXHRAZGV2X2FkZHI6XHRIdyBhZGRyZXNzIChiZWZvcmUgYmNhc3QsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NzktICpcdFx0XHRiZWNhdXNlIG1vc3QgcGFja2V0cyBhcmUgdW5pY2FzdClcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIxMjUtICpcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjEyNjogKlx0QGRldl9hZGRyX3NoYWRvdzpcdENvcHkgb2YgQGRldl9hZGRyIHRvIGNhdGNoIGRpcmVjdCB3cml0ZXMuXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIxMjctICpcdEBsaW5rd2F0Y2hfZGV2X3RyYWNrZXI6XHRyZWZjb3VudCB0cmFja2VyIHVzZWQgYnkgbGlua3dhdGNoLlxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzM5LVx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3RcdG1jO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzQwOlx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3RcdGRldl9hZGRycztcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM0MS1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOTYtXHQvKiBJbnRlcmZhY2UgYWRkcmVzcyBpbmZvIHVzZWQgaW4gZXRoX3R5cGVfdHJhbnMoKSAqL1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzk3Olx0Y29uc3QgdW5zaWduZWQgY2hhclx0KmRldl9hZGRyO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzk4LVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjU0NC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjU0NTpcdHU4IGRldl9hZGRyX3NoYWRvd1tNQVhfQUREUl9MRU5dO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTQ2LVx0bmV0ZGV2aWNlX3RyYWNrZXJcdGxpbmt3YXRjaF9kZXZfdHJhY2tlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMzMTA9c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvIHtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzMxMS1cdHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfaW5mbyBpbmZvOyAvKiBtdXN0IGJlIGZpcnN0ICovXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMzMTI6XHRjb25zdCB1bnNpZ25lZCBjaGFyICpkZXZfYWRkcjtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzMxMy19O1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NTAxNz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfYWRkcl91bmxvY2tfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwMjItLypcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTAyMzogKiBkZXZfYWRkcnMgd2Fsa2VyLiBTaG91bGQgYmUgdXNlZCBvbmx5IGZvciByZWFkIGFjY2Vzcy4gQ2FsbCB3aXRoXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwMjQtICogcmN1X3JlYWRfbG9jayBoZWxkLlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDI1LSAqL1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MDI2OiNkZWZpbmUgZm9yX2VhY2hfZGV2X2FkZHIoZGV2LCBoYSkgXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTAyNzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaGEsIFx1MDAyNmRldi1cdTAwM2VkZXZfYWRkcnMubGlzdCwgbGlzdClcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTAyOC1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTUwODU9dm9pZCBfX2h3X2FkZHJfbGlzdF9yZWNvbmNpbGUoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnJlYWxfbGlzdCxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwOTAtLyogRnVuY3Rpb25zIHVzZWQgZm9yIGRldmljZSBhZGRyZXNzZXMgaGFuZGxpbmcgKi9cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTA5MTp2b2lkIGRldl9hZGRyX21vZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDkyLVx0XHQgIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NTA5ND1zdGF0aWMgaW5saW5lIHZvaWRcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTA5NTpfX2Rldl9hZGRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDk2LXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTA5NzpcdGRldl9hZGRyX21vZChkZXYsIDAsIGFkZHIsIGxlbik7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwOTgtfVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDk5LVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MTAwOnN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUxMDEte1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MTAyOlx0X19kZXZfYWRkcl9zZXQoZGV2LCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4pO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTAzLX1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTEwNC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTEwNTppbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUxMDYtXHRcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUxMDc6aW50IGRldl9hZGRyX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTA4LVx0XHQgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYyNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hYyBBZGRyZXNzIFJlYWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGRldl9hZGRyYCBpcyBjbGVhcmx5IGEgcG9pbnRlciwgYW5kIGFmdGVyIGV4YW1pbmluZyBgZGV2X2FkZHJfaW5pdGAsIEkgY2FuIHNlZSB0aGF0IGl0IGluaXRpYWxpemVzIGEgMzItYnl0ZSBidWZmZXIsIG5hbWVkIGBhZGRyYCwgdG8gYWxsIHplcm9zIHVzaW5nIGBtZW1zZXRgLiBUaGUgcG9pbnRlciBgZGV2LSZndDtkZXZfYWRkcmAgaXMgdGhlbiBzZXQgdG8gcG9pbnQgdG8gdGhpcyBgYWRkcmAgYnVmZmVyLiBTbyB3aGVuIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgYXR0ZW1wdHMgdG8gcmVhZCA0IGJ5dGVzIHN0YXJ0aW5nIGF0IGFuIG9mZnNldCBvZiAmIzQzOzQsIGl0JiMzOTtzIGFjY2Vzc2luZyBieXRlcyA0IHRocm91Z2ggNyBvZiB0aGlzIDMyLWJ5dGUgYnVmZmVyLiBDcnVjaWFsbHksIHRoaXMgaXMgKm5vdCogYW4gb3V0LW9mLWJvdW5kcyByZWFkOyB0aGUgcmVhZCBpcyB3aXRoaW4gdGhlIGFsbG9jYXRlZCBtZW1vcnkuCgpIb2xkIG9uLCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYnl0ZXMgNiBhbmQgNyBtaWdodCBiZSB1bmluaXRpYWxpemVkLCBidXQgbm8sIHRoZSBgbWVtc2V0YCBpbiBgZGV2X2FkZHJfaW5pdGAgZW5zdXJlcyB0aGF0IHRob3NlIGJ5dGVzIGFyZSwgaW4gZmFjdCwgaW5pdGlhbGl6ZWQgdG8gemVyby4gT2theSwgd2hhdCBpZiBhbm90aGVyIGZ1bmN0aW9uIGxpa2UgYGRldl9hZGRyX21vZGAgbW9kaWZpZXMgdGhlIG1hYyBhZGRyZXNzPyBJdCBjb3BpZXMgb25seSA2IGJ5dGVzLCBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSAzMi1ieXRlIGJ1ZmZlciB1bnRvdWNoZWQg4oCTIHN0aWxsIHplcm8uIEFuZCB3aGF0IGFib3V0IGluaGVyaXRhbmNlIHVzaW5nIGBldGhfaHdfYWRkcl9pbmhlcml0YD8gRXZlbiBoZXJlLCBgZXRoX2h3X2FkZHJfc2V0YCBpcyBjYWxsZWQsIGFuZCBpdCBjb3BpZXMganVzdCA2IGJ5dGVzIGZyb20gdGhlIHNvdXJjZSwgYW5kIHRoZSByZXN0IHJlbWFpbnMgemVyby4KClRoZXJlZm9yZSwgYnl0ZXMgNiBhbmQgNyBhcmUgKmFsd2F5cyogemVybywgb3Igc28gaXQgc2VlbXMuIFNvIHJlYWRpbmcgdGhlbSBjYW5ub3QgYmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCEgSXQmIzM5O3MgYSB2YWxpZCBhbmQgcHJlZGljdGFibGUgcmVhZC4gQnV0IHdhaXQsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi5JJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSBgZGV2LSZndDtkZXZfYWRkcmAgbWlnaHQgYmUgYXNzaWduZWQuIExldCBtZSBjcm9zcy1jaGVjayB0aGUgb3RoZXIgcGxhY2VzIHdoZXJlIGBkZXYtJmd0O2Rldl9hZGRyYCBpcyBhc3NpZ25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2FkZHIgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MTAwMjA9aW50IG5ldGlmX3ByZV9jaGFuZ2VhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICphZGRyLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwMDI1LVx0XHQuaW5mby5leHRhY2sgPSBleHRhY2ssXG5uZXQvY29yZS9kZXYuYzoxMDAyNjpcdFx0LmRldl9hZGRyID0gYWRkcixcbm5ldC9jb3JlL2Rldi5jLTEwMDI3LVx0fTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY2MT12b2lkIGRldl9hZGRyX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjYtXHRfX2h3X2FkZHJfZmx1c2goXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycyk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY2NzpcdGRldi1cdTAwM2VkZXZfYWRkciA9IE5VTEw7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY2OC19XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02Nzk9aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY5Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbGlzdCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY5ODpcdFx0ZGV2LVx1MDAzZWRldl9hZGRyID0gaGEtXHUwMDNlYWRkcjtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjk5LVx0fVxuLS1cbm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmM9Njg4PWllZWU4MDIxNTRfbGxzZWNfc2VuZF9rZXlfaWQoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTY5Ny1cdGNhc2UgTkw4MDIxNTRfS0VZX0lEX01PREVfSU1QTElDSVQ6XG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jOjY5ODpcdFx0bmxfZGV2X2FkZHIgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcobXNnLFxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYy02OTktXHRcdFx0XHRcdFx0ICAgIE5MODAyMTU0X0tFWV9JRF9BVFRSX0lNUExJQ0lUKTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM1NTM9c3RhdGljIHZvaWQgYWRkcmNvbmZfZ3JlX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzU2Ny1cdCAqL1xubmV0L2lwdjYvYWRkcmNvbmYuYzozNTY4Olx0aWYgKCEoKihfX2JlMzIgKilkZXYtXHUwMDNlZGV2X2FkZHIgPT0gMCBcdTAwMjZcdTAwMjZcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzU2OS1cdCAgICAgIGlkZXYtXHUwMDNlY25mLmFkZHJfZ2VuX21vZGUgPT0gSU42X0FERFJfR0VOX01PREVfRVVJNjQpKSB7XG4tLVxubmV0L21hYzgwMjExL3J4LmM9MTEzMT1zdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdCBpZWVlODAyMTFfcnhfbWVzaF9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTExMzMtXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG5uZXQvbWFjODAyMTEvcnguYzoxMTM0Olx0Y2hhciAqZGV2X2FkZHIgPSByeC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYuYWRkcjtcbm5ldC9tYWM4MDIxMS9yeC5jLTExMzUtXG4tLVxubmV0L21hYzgwMjE1NC9sbHNlYy5jPTEwMDU9aW50IG1hYzgwMjE1NF9sbHNlY19kZWNyeXB0KHN0cnVjdCBtYWM4MDIxNTRfbGxzZWMgKnNlYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbWFjODAyMTU0L2xsc2VjLmMtMTA2Ni1cbm5ldC9tYWM4MDIxNTQvbGxzZWMuYzoxMDY3Olx0ZGV2X2FkZHIgPSBkZXYtXHUwMDNlZGV2Lmh3YWRkcjtcbm5ldC9tYWM4MDIxNTQvbGxzZWMuYy0xMDY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ5OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERpcmVjdCBNb2RpZmljYXRpb24gb2YgYGRldi0mZ3Q7ZGV2X2FkZHJgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBuZXR3b3JrIGRldmljZSBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhpcyBzeXN0ZW0sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBkZXYtJmd0O2Rldl9hZGRyYC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gYGhhLSZndDthZGRyYCBkdXJpbmcgYGRldl9hZGRyX2luaXRgLCBidXQgdGhlbiBJIGhhZCB0aGlzIGZsYXNoIG9mIGluc2lnaHQg4oCTIHdoYXQgaWYgYSAqZHJpdmVyKiBpdHNlbGYsIGRpcmVjdGx5LCBhbHRlcnMgYGRldi0mZ3Q7ZGV2X2FkZHJgIGFmdGVyIGluaXRpYWxpemF0aW9uPyBUaGF0IHdvdWxkIGJ5cGFzcyB0aGUgZXhwZWN0ZWQgZmxvdyBhbmQgY291bGQgaW50cm9kdWNlIHNvbWUgcmVhbGx5IHN1YnRsZSwgaGFyZC10by10cmFjay1kb3duIGlzc3Vlcy4gSXQmIzM5O3Mgbm90IHNvbWV0aGluZyBJJiMzOTtkICpleHBlY3QqIHRvIHNlZSwgYnV0IHdpdGggdGhlIGNvbXBsZXhpdGllcyBvZiB0aGVzZSBkcml2ZXJzLCBpdCYjMzk7cyBjZXJ0YWlubHkgcGxhdXNpYmxlLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgb2J2aW91czogSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZHJpdmVycyB0aGF0IGFjdHVhbGx5IGRvIHRoaXMsIGFuZCBhcyBhbiBleGFtcGxlLCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIGluIG9uIGBydGw4MTM5dG9vYCB0byBzZWUgaWYgdGhhdCBjb2RlIHNwZWNpZmljYWxseSBtb2RpZmllcyBgZGV2LSZndDtkZXZfYWRkcmAgZGlyZWN0bHkuIFRoYXQgZmVlbHMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBhcmVhIHRvIHRlc3QgaW4gdGhpcyBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTkzOT1zdGF0aWMgaW50IHJ0bDgxMzlfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtMTAzMi1cdFx0ICAgIGJvYXJkX2luZm9bZW50LVx1MDAzZWRyaXZlcl9kYXRhXS5uYW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6MTAzMzpcdFx0ICAgIGlvYWRkciwgZGV2LVx1MDAzZWRldl9hZGRyLCBwZGV2LVx1MDAzZWlycSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0xMDM0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTEzNjY9c3RhdGljIHZvaWQgcnRsODEzOV9od19zdGFydCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0xMzgxLVx0LyogUmVzdG9yZSBvdXIgaWRlYSBvZiB0aGUgTUFDIGFkZHJlc3MuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzoxMzgyOlx0UlRMX1czMl9GIChNQUMwICYjNDM7IDAsIGxlMzJfdG9fY3B1ICgqKF9fbGUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDApKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzoxMzgzOlx0UlRMX1czMl9GIChNQUMwICYjNDM7IDQsIGxlMTZfdG9fY3B1ICgqKF9fbGUxNiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDQpKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0xMzg0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTIyMjA9c3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMzMtXHRSVExfVzhfRihDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzoyMjM0Olx0UlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi1cdTAwM2VkZXZfYWRkcikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6MjIzNTpcdFJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtXHUwMDNlZGV2X2FkZHIgJiM0MzsgNCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtMjIzNi1cdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDgyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlYnVnZ2luZyB0aGUgUlRMODEzOSBNQUMgQWRkcmVzcyBTZXR0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biBob3cgdGhlIFJUTDgxMzkgbmV0d29yayBpbnRlcmZhY2Ugc2V0cyBpdHMgTUFDIGFkZHJlc3MuIEkga25vdyBmcm9tIHRoZSBjb2RlIHRoYXQgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBpcyByZXNwb25zaWJsZSBmb3IgdGhpcy4gQnV0IHRoZSBmdW5jdGlvbiBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIGl0c2VsZiBkb2VzbiYjMzk7dCBzZWVtIHRvIGRpcmVjdGx5IGhhbmRsZSB0aGUgTUFDIGFkZHJlc3MgYXNzaWdubWVudCwgaXQgY2FsbHMgYGV0aF9tYWNfYWRkcihkZXYsIHApYCB0byBhY3R1YWxseSBzZXQgdGhlIGFkZHJlc3MuCgpTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyB1bHRpbWF0ZWx5IGJlaW5nIHNldC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCB0byBmb2xsb3cgdGhlIGNhbGwgdG8gYGV0aF9tYWNfYWRkcmAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBleHBlY3QgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBpcyBsaWtlbHkgcGFzc2luZyB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIHRvIGBldGhfbWFjX2FkZHJgLCBhbmQgdGhlbiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGBldGhfbWFjX2FkZHJgIGFjdHVhbGx5IGhhbmRsZXMgdGhlIGRldmljZSBhbmQgcGFja2V0IHN0cnVjdHVyZSB0byBzZXQgdGhlIGFkZHJlc3MuIEkmIzM5O20gaG9waW5nIEkgY2FuIHRyYWNlIHRoaXMgcXVpY2tseSB0byBpZGVudGlmeSB0aGUgaXNzdWUgSSYjMzk7bSBjaGFzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjIwOlx0c3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuMjIyMTpcdHtcbjIyMjI6XHRcdHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjIyMjM6XHRcdHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtXHUwMDNlbW1pb19hZGRyO1xuMjIyNDpcdFx0c3RydWN0IHNvY2thZGRyICphZGRyID0gcDtcbjIyMjU6XHRcbjIyMjY6XHRcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLVx1MDAzZXNhX2RhdGEpKVxuMjIyNzpcdFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4yMjI4Olx0XG4yMjI5Olx0XHRldGhfaHdfYWRkcl9zZXQoZGV2LCBhZGRyLVx1MDAzZXNhX2RhdGEpO1xuMjIzMDpcdFxuMjIzMTpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0cC1cdTAwM2Vsb2NrKTtcbjIyMzI6XHRcbjIyMzM6XHRcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTtcbjIyMzQ6XHRcdFJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGdldF91bmFsaWduZWRfbGUzMihkZXYtXHUwMDNlZGV2X2FkZHIpKTtcbjIyMzU6XHRcdFJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtXHUwMDNlZGV2X2FkZHIgJiM0MzsgNCkpO1xuMjIzNjpcdFx0UlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTtcbjIyMzc6XHRcbjIyMzg6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZ0cC1cdTAwM2Vsb2NrKTtcbjIyMzk6XHRcbjIyNDA6XHRcdHJldHVybiAwO1xuMjI0MTpcdH1cbjIyNDI6XHRcbjIyNDM6XHRzdGF0aWMgaW50IHJ0bDgxMzlfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4yMjQ0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMyMQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE3MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQUMgQWRkcmVzcyBIYW5kbGluZyBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluaXRpYWxseSwgdGhlIGNvZGUgaGFkIHRoZXNlIGxpbmVzOgpgYGBjCglSVExfVzMyX0YoTUFDMCAmIzQzOyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgMCkpKTsKCVJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LSZndDtkZXZfYWRkciAmIzQzOyA0KSkpOwpgYGAKVGhlIGludGVudGlvbiB3YXMgdG8gd3JpdGUgdGhlIE1BQyBhZGRyZXNzIHRvIGhhcmR3YXJlIHJlZ2lzdGVycy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHB1bGxpbmcgNCBieXRlcyBmcm9tIGBkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDBgIGFuZCBgZGV2LSZndDtkZXZfYWRkciAmIzQzOyA0YC4gVGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIHRoYXQgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIGEgcG9pbnRlciB0byBhIDMyLWJ5dGUgYXJyYXkgaW5pdGlhbGl6ZWQgdG8gemVyby4gU28gd2hlbiByZWFkaW5nIGZyb20gYGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNGAsIHdlJiMzOTtyZSByZWFkaW5nIGJ5dGVzIDQsIDUsIDYsIGFuZCA3LCBhbmQgYnl0ZXMgNiBhbmQgNyB3b3VsZCBhbHdheXMgYmUgemVyby4gSG93ZXZlciwgYE1BQzAgJiM0MzsgNGAgaXMgYSAzMi1iaXQgcmVnaXN0ZXIsIGFuZCB3ZSYjMzk7cmUgd3JpdGluZyBhIDMyLWJpdCB2YWx1ZSB0byBpdC4KClRoZSBtYWluIGlzc3VlIEkgc2VlIGhlcmUgaXMgdGhlICpwb3RlbnRpYWwqIGZvciB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIG9sZCBjb2RlIHdhcyBkb2luZyBhbiB1bmFsaWduZWQgcmVhZCBvZiBhIGB1MzJgIGZyb20gYSBtZW1vcnkgbG9jYXRpb24gd2hpY2ggaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgNC1ieXRlIGFsaWduZWQuIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgdW5hbGlnbmVkIGFjY2Vzc2VzIGFyZSBub3QgaGFuZGxlZCBncmFjZWZ1bGx5LCB0aGlzIHdvdWxkIGxlYWQgdG8gZXhjZXB0aW9ucyBvciBjcmFzaGVzLiBUaGUgcGF0Y2gmIzM5O3MgZml4IGludm9sdmVzIHJlcGxhY2luZyB0aGUgY29kZSB3aXRoOgpgYGBjCglSVExfVzMyX0YoTUFDMCAmIzQzOyAwLCBnZXRfdW5hbGlnbmVkX2xlMzIoZGV2LSZndDtkZXZfYWRkcikpOwoJUlRMX1czMl9GKE1BQzAgJiM0MzsgNCwgZ2V0X3VuYWxpZ25lZF9sZTE2KGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNCkpOwpgYGAKTm93LCBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgYXJlIHVzZWQuIFRoZSBzZWNvbmQgbGluZSBub3cgcmVhZHMgb25seSAyIGJ5dGVzIGFuZCB0aGVuIHplcm8tZXh0ZW5kcyBpdCB0byAzMiBiaXRzLCB3aGljaCBpcyBmaW5lIHNpbmNlIGJ5dGVzIDYgYW5kIDcgZnJvbSB0aGUgcHJldmlvdXMgY29kZSB3ZXJlIGFsd2F5cyB6ZXJvcyBhbnl3YXkuCgpMZXQmIzM5O3MgdHJhY2UgYGRldi0mZ3Q7ZGV2X2FkZHJgLiBUaGlzIHBvaW50ZXIgYWN0dWFsbHkgcG9pbnRzIHRvIGBoYS0mZ3Q7YWRkcmAsIGFuZCBgaGFgIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYC4gVGhlIGBoYS0mZ3Q7YWRkcmAgbG9jYXRpb24gY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgYG5ldGRldl9od19hZGRyYCBzdHJ1Y3Q6CmBgYGMKc3RydWN0IG5ldGRldl9od19hZGRyIHsKCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsgLy8gMTYgYnl0ZXMKCXN0cnVjdCByYl9ub2RlCQlub2RlOyAvLyAyNCBieXRlcwoJdW5zaWduZWQgY2hhcgkJYWRkcltNQVhfQUREUl9MRU5dOyAvLyAzMiBieXRlcwouLi4KYGBgCmBhZGRyYCBzdGFydHMgYXQgYW4gb2Zmc2V0IG9mIDQwICgxNiAmIzQzOyAyNCksIHdoaWNoIG1lYW5zIGl0JiMzOTtzIDgtYnl0ZSBhbGlnbmVkIG9uIGEgNjQtYml0IGFyY2hpdGVjdHVyZS4gVGhlcmVmb3JlLCBgZGV2LSZndDtkZXZfYWRkcmAgaXMgOC1ieXRlIGFsaWduZWQsIHdoaWNoIG1lYW5zIGBkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDRgIGlzIDQtYnl0ZSBhbGlnbmVkLiBTbywgdGhlIG9yaWdpbmFsIGNvZGUgKndhcyogNC1ieXRlIGFsaWduZWQuIFNvLCB3aHkgdGhlIGNoYW5nZT8KClRoZSByZWFzb24gY291bGQgYmUgYWJvdXQgc3RyaWN0IGFsaWFzaW5nLCBhbmQgcG9zc2libHkgc29tZSB0b29scyBhcmUgZmxhZ2dpbmcgaXQgYXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBBbHNvLCB0aGVyZSBtaWdodCBiZSBvdGhlciBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhlIGFsaWdubWVudCBpcyBub3QgZ3VhcmFudGVlZC4KCkJ1dCBoZXJlJiMzOTtzIGEgY3J1Y2lhbCBwb2ludDogVGhlIG9sZCBjb2RlIHVzZXMgYGNwdV90b19sZTMyYC4gVGhlIG9yaWdpbmFsIGNvZGUgcmVhZHMgYnl0ZXMgYXMgYSBgdTMyYC4gSWYgdGhlIE1BQyBhZGRyZXNzIGlzIGAwMDoxMToyMjozMzo0NDo1NWAsIGEgbGl0dGxlLWVuZGlhbiBtYWNoaW5lIHdvdWxkIHJlYWQgYDB4MzMyMjExMDBgLCB3aGljaCB0aGUgZnVuY3Rpb24gY29udmVydHMgdG8gdGhlIHNhbWUgdmFsdWUgYDB4MzMyMjExMDBgLiBPbiBhIGJpZy1lbmRpYW4gbWFjaGluZSwgdGhlIHJlYWQgd291bGQgYmUgYDB4MDAxMTIyMzNgLCB3aGljaCBnZXRzIGNvbnZlcnRlZCB0byBgMHgzMzIyMTEwMGAuIFRoZXJlZm9yZSwgaXQgKnNlZW1zKiB0aGF0IGBjcHVfdG9fbGUzMmAgaGFuZGxlcyB0aGUgYnl0ZSBvcmRlciBjb3JyZWN0bHkgb24gYm90aCBhcmNoaXRlY3R1cmVzLiBCdXQgbGV0JiMzOTtzIHZlcmlmeSBob3cgYFJUTF9XMzJfRmAgaXRzZWxmIHdvcmtzLCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIFJUTF9XMzJfRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTY2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxMzlfZXRodG9vbF9vcHM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtNjY1LSNkZWZpbmUgUlRMX1cxNl9GKHJlZywgdmFsMTYpXHRkbyB7IGlvd3JpdGUxNiAoKHZhbDE2KSwgaW9hZGRyICYjNDM7IChyZWcpKTsgaW9yZWFkMTYgKGlvYWRkciAmIzQzOyAocmVnKSk7IH0gd2hpbGUgKDApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo2NjY6I2RlZmluZSBSVExfVzMyX0YocmVnLCB2YWwzMilcdGRvIHsgaW93cml0ZTMyICgodmFsMzIpLCBpb2FkZHIgJiM0MzsgKHJlZykpOyBpb3JlYWQzMiAoaW9hZGRyICYjNDM7IChyZWcpKTsgfSB3aGlsZSAoMClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTY2Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCeXRlIE9yZGVyIGFuZCBNZW1vcnkgQWNjZXNzIGluIFBDSSBCdXMgV3JpdGVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgaW93cml0ZTMyYCB0YWtlcyBhIGB1MzJgIGluIENQVSBieXRlIG9yZGVyIGFuZCB3cml0ZXMgaXQgYXMgbGl0dGxlLWVuZGlhbiB0byB0aGUgUENJIGJ1cy4gIFNvLCB3aGF0ZXZlciBJIHBhc3MgaXQsIGB2YWwzMmAsIG5lZWRzIHRvIGJlIGluIENQVSBieXRlIG9yZGVyLCBnb3QgaXQuCgpUaGUgb2xkIGNvZGUgd2FzIGRvaW5nOiBgUlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDApKSk7YC4gIEhhbmcgb24uLi4gYGNwdV90b19sZTMyYCByZXR1cm5zIGEgYF9fbGUzMmAsIHdoaWNoIGlzICphbHJlYWR5KiBsaXR0bGUtZW5kaWFuLiBQYXNzaW5nIHRoYXQgZGlyZWN0bHkgdG8gYGlvd3JpdGUzMmAgaXMgbGlrZWx5IGEgcHJvYmxlbSBvbiBiaWctZW5kaWFuIG1hY2hpbmVzISBMZXQmIzM5O3MgdHJhY2UgaXQgdGhyb3VnaDoKCk9uIGEgYmlnLWVuZGlhbiBtYWNoaW5lLCBpZiBgKih1MzIgKilkZXYtJmd0O2Rldl9hZGRyYCBpcyBgMHgwMDExMjIzM2AsIHRoZW4gYGNwdV90b19sZTMyKDB4MDAxMTIyMzMpYCBiZWNvbWVzIGAweDMzMjIxMTAwYCAod2hpY2ggaXMgYSBgX19sZTMyYCkuIFRoZW4gYGlvd3JpdGUzMigweDMzMjIxMTAwKWAgKnN3YXBzKiBpdCBiYWNrIHRvIGAweDAwMTEyMjMzYCBvbiB0aGUgYnVzLiBUaGlzIG1lYW5zIHRoZSBidXMgKnNlZXMqIGAwMCAxMSAyMiAzM2AgaW4gbWVtb3J5IG9yZGVyISBJcyB0aGF0IHJpZ2h0PyBEbyBJIHJlbWVtYmVyIHRoZSBoYXJkd2FyZSBleHBlY3RhdGlvbnMgY29ycmVjdGx5PyBZZXMsIHRoZSBoYXJkd2FyZSAqZXhwZWN0cyogdGhlIE1BQyBhZGRyZXNzIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIsIHNvIGAwMCAxMSAyMiAzM2AgaXMgdGhlIGNvcnJlY3QgbGl0dGxlLWVuZGlhbiBvcmRlciB0aGF0IG5lZWRzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGJ1cy4KCkJ1dCB3aGF0IGFib3V0IGEgbGl0dGxlLWVuZGlhbiBtYWNoaW5lPyBJZiBgKih1MzIgKilkZXYtJmd0O2Rldl9hZGRyYCBpcyBgMHgzMzIyMTEwMGAsIHRoZW4gYGNwdV90b19sZTMyKDB4MzMyMjExMDApYCBpcyBzdGlsbCBgMHgzMzIyMTEwMGAuIEFuZCBgaW93cml0ZTMyKDB4MzMyMjExMDApYCB3cml0ZXMgYDB4MzMyMjExMDBgIHRvIHRoZSBidXMsIHdoaWNoIGluIGxpdHRsZS1lbmRpYW4gbWVtb3J5IG9yZGVyIGlzIGAwMCAxMSAyMiAzM2AuIFNvIGl0IGFjdHVhbGx5IHdvcmtzIQoKU28gdGhlIG9sZCBjb2RlIHdhcyBjb3JyZWN0IG9uIGJvdGggYXJjaGl0ZWN0dXJlcywgKmJ1dCogaXQgdXNlZCBgY3B1X3RvX2xlMzJgIGFuZCBgaW93cml0ZTMyYCBpbmNvcnJlY3RseSwgbGVhZGluZyB0byBTcGFyc2Ugd2FybmluZ3MgKGJlY2F1c2UgYGlvd3JpdGUzMmAgd2FudHMgYSBgdTMyYCwgbm90IGEgYF9fbGUzMmApLiBUaGUgcHJvcGVyIHNvbHV0aW9uIHRvIHNpbGVuY2UgdGhlIHdhcm5pbmdzIGlzIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYC4KCmBnZXRfdW5hbGlnbmVkX2xlMzIoZGV2LSZndDtkZXZfYWRkcilgIHJlYWRzIGZvdXIgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgcHJvdmlkZWQgYWRkcmVzcyBhbmQgcmV0dXJucyB0aGVtIGFzIGEgYHUzMmAgaW4gdGhlICpDUFUmIzM5O3MqIG5hdGl2ZSBieXRlIG9yZGVyLiBUaGVuLCB3aGVuIEkgd3JpdGUgdGhpcyByZXN1bHQgd2l0aCBgaW93cml0ZTMyYCAod2hpY2ggZXhwZWN0cyBhIENQVS1uYXRpdmUgYnl0ZSBvcmRlciBhbmQgd3JpdGVzIGluIGxpdHRsZS1lbmRpYW4pLCBJIGdldCB0aGUgY29ycmVjdCB2YWx1ZSBvbiB0aGUgYnVzLiBMZXQmIzM5O3MgdHJhY2UgYWdhaW4uLi4KCk9uIExFOiBgZ2V0X3VuYWxpZ25lZF9sZTMyYCByZWFkcyBgMHgzMzIyMTEwMGAsIGFuZCByZXR1cm5zIGAweDMzMjIxMTAwYC4gVGhlbiBgaW93cml0ZTMyKDB4MzMyMjExMDApYCB3cml0ZXMgYDAwIDExIDIyIDMzYCB0byB0aGUgYnVzLiBPbiBCRTogYGdldF91bmFsaWduZWRfbGUzMmAgcmVhZHMgYDAwIDExIDIyIDMzYCwgYW5kIHJldHVybnMgYDB4MzMyMjExMDBgLiAgVGhlbiBgaW93cml0ZTMyKDB4MzMyMjExMDApYCBzd2FwcyBpdCB0byBgMHgwMDExMjIzM2AgKHdoaWNoIGluIG1lbW9yeSBvcmRlciBpcyBgMDAgMTEgMjIgMzNgKSBvbiB0aGUgYnVzLiAgU28gaXQgd29ya3MhIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGNvbnZlcnRzIGxpdHRsZSBlbmRpYW4gdG8gQ1BVIGJ5dGUgb3JkZXIuIFRoYXQmIzM5O3MgdGhlIGNvcnJlY3QgYXBwcm9hY2guCgpCdXQgbm93LCB3aGF0IGFib3V0IHRoZSBuZXh0IGxpbmU/IFRoZSBvcmlnaW5hbCBjb2RlIHNhaWQ6IGBSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNCkpKTtgLCBidXQgdGhlIGNvZGUgd2FzIGNoYW5nZWQgdG8gYFJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDQpKTtgLiBXaHkgZGlkIHRoZXkgdXNlIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGluc3RlYWQgb2YgYGdldF91bmFsaWduZWQKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdHtcbiA2ODE6XHRcdHVuc2lnbmVkIGNoYXIgYWRkcltNQVhfQUREUl9MRU5dO1xuIDY4MjpcdFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiA2ODM6XHRcdGludCBlcnI7XG4gNjg0Olx0XG4gNjg1Olx0XHQvKiBydG5sX211dGV4IG11c3QgYmUgaGVsZCBoZXJlICovXG4gNjg2Olx0XG4gNjg3Olx0XHRfX2h3X2FkZHJfaW5pdChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzKTtcbiA2ODg6XHRcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xuIDY4OTpcdFx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksXG4gNjkwOlx0XHRcdFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcbiA2OTE6XHRcdGlmICghZXJyKSB7XG4gNjkyOlx0XHRcdC8qXG4gNjkzOlx0XHRcdCAqIEdldCB0aGUgZmlyc3QgKHByZXZpb3VzbHkgY3JlYXRlZCkgYWRkcmVzcyBmcm9tIHRoZSBsaXN0XG4gNjk0Olx0XHRcdCAqIGFuZCBzZXQgZGV2X2FkZHIgcG9pbnRlciB0byB0aGlzIGxvY2F0aW9uLlxuIDY5NTpcdFx0XHQgKi9cbiA2OTY6XHRcdFx0aGEgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNmRldi1cdTAwM2VkZXZfYWRkcnMubGlzdCxcbiA2OTc6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbGlzdCk7XG4gNjk4Olx0XHRcdGRldi1cdTAwM2VkZXZfYWRkciA9IGhhLVx1MDAzZWFkZHI7XG4gNjk5Olx0XHR9XG4gNzAwOlx0XHRyZXR1cm4gZXJyO1xuIDcwMTpcdH1cbiA3MDI6XHRcbiA3MDM6XHR2b2lkIGRldl9hZGRyX21vZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuIDcwNDpcdFx0XHQgIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzdGVwLWJ5LXN0ZXAuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKWAgbGluZS4gVGhlIGludGVudCBpcyBjbGVhcjogemVybyBvdXQgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGBhZGRyYC4gVGhlIGludGVyZXN0aW5nIGRldGFpbCBoZXJlLCBhcyBJIHNlZSBpdCwgaXMgdGhlIHNpemUgYmVpbmcgemVyb2VkLiBgc2l6ZW9mKGFkZHIpYCBldmFsdWF0ZXMgdG8gYE1BWF9BRERSX0xFTmAsIHdoaWNoIHdlIGtub3cgaXMgMzIuIFNvLCB3ZSYjMzk7cmUgZXhwbGljaXRseSB6ZXJvaW5nIDMyIGJ5dGVzIG9mIG1lbW9yeSwgcHJlc3VtYWJseSB0byBpbml0aWFsaXplIGBhZGRyYC4gVGhhdCBtYWtlcyBzZW5zZSwgbGF5aW5nIGEgY2xlYW4gZm91bmRhdGlvbiBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCB0aGUgYWRkcmVzcyBkYXRhLgoKTm93LCBpbW1lZGlhdGVseSBhZnRlciB0aGlzIHplcm9pbmcgb3BlcmF0aW9uLCBgX19od19hZGRyX2FkZGAgaXMgYmVpbmcgaW52b2tlZCwgYW5kIGl0JiMzOTtzIGJlaW5nIHBhc3NlZCB0aGUgYGFkZHJgIGFuZCBhbiBgYWRkcl9sZW5gIG9mIDMyLiBUaGlzIHByb21wdHMgYSB0aG9yb3VnaCBpbnNwZWN0aW9uIG9mIGBfX2h3X2FkZHJfYWRkYC4gVGhlIHplcm9pbmcgc3VnZ2VzdHMgaXQmIzM5O3MgYSBwcmUtZW1wdGl2ZSBtZW1vcnkgY2xlYXJpbmcgZm9yIHRoaXMgZnVuY3Rpb24uIElzIGl0IGV4cGVjdGluZyBhIGZ1bGx5IGNsZWFyZWQgYnVmZmVyLCBvciBpcyBpdCBnb2luZyB0byB3cml0ZSBpbnRvIGl0PyBFaXRoZXIgd2F5LCB0aGUgcHJlY2VkaW5nIGBtZW1zZXRgIHByb3ZpZGVzIGEga25vd24gc3RhcnRpbmcgc3RhdGUgYW5kIGdpdmVzIHVzIHRoZSBjYXBhYmlsaXR5IHRvIGtub3cgd2hhdCBzdGF0ZSB0aGUgYnVmZmVyIGlzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBpbnRlcm5hbHMgb2YgYF9faHdfYWRkcl9hZGRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h3X2FkZHJfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUzPV9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc1OnN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzMi1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM0LVx0XHRcdCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzc6XHRyZXR1cm4gX19od19hZGRyX2FkZF9leChsaXN0LCBhZGRyLCBhZGRyX2xlbiwgYWRkcl90eXBlLCBmYWxzZSwgZmFsc2UsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cdFx0XHRcdDAsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTIxMj1zdGF0aWMgaW50IF9faHdfYWRkcl9zeW5jX29uZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4Olx0ZXJyID0gX19od19hZGRyX2FkZF9leCh0b19saXN0LCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXHUwMDNldHlwZSxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE5LVx0XHRcdCAgICAgICBmYWxzZSwgdHJ1ZSwgaGEtXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY3OT1pbnQgZGV2X2FkZHJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjg4LVx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4OTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTAtXHRcdFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTcyOT1pbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MzgtXHRcdHJldHVybiBlcnI7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjczOTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLCBhZGRyX3R5cGUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NDAtXHRpZiAoIWVycilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzk3Olx0ZXJyID0gX19od19hZGRyX2FkZF9leChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVx0XHRcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MTktXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTc3PWludCBkZXZfbWNfYWRkX2V4Y2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFx1MDAyNmRldi1cdTAwM2VtYywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODMtXHRcdFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCB0cnVlLCBmYWxzZSxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk5ODpcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXHUwMDI2ZGV2LVx1MDAzZW1jLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cdFx0XHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTQyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgQWRkcmVzcyBDcmVhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgX19od19hZGRyX2FkZF9leGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBoYXJkd2FyZSBhZGRyZXNzZXMgYXJlIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgaXQgY2FsbHMgYF9faHdfYWRkcl9jcmVhdGVgLiBOb3csIGluc2lkZSBgX19od19hZGRyX2NyZWF0ZWAsIHRoZSBjb2RlIGFsbG9jYXRlcyBtZW1vcnkgdXNpbmcgYGttYWxsb2NgIGFuZCB0aGVuIHVzZXMgYG1lbWNweWAgdG8gY29weSB0aGUgaGFyZHdhcmUgYWRkcmVzcyBkYXRhLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBgYWRkcl9sZW5gIGlzIDMyIGJ5dGVzLCBhcyBkZXRlcm1pbmVkIGVhcmxpZXIgYnkgYGRldl9hZGRyX2luaXRgLCBhbmQgdGhlIHNvdXJjZSBgYWRkcmAgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9zLiBTbywgdGhhdCBtZWFucyB0aGUgYGhhLSZndDthZGRyYCBmaWVsZCB3aXRoaW4gdGhlIG5ld2x5IGNyZWF0ZWQgaGFyZHdhcmUgYWRkcmVzcyBzdHJ1Y3R1cmUgaXMgKmd1YXJhbnRlZWQqIHRvIGJlIHplcm9lZCBvdXQgYWZ0ZXIgdGhlIGBtZW1jcHlgLgoKVGhlcmVmb3JlLCB0aGUgaW5pdGlhbCBoeXBvdGhlc2lzIHRoYXQgdGhlIHJlYWQgb2YgYnl0ZXMgNiBhbmQgNyBvZiBgZGV2LSZndDtkZXZfYWRkcmAgY291bGQgY2F1c2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpcyBpbmNvcnJlY3Q7IHRoZSByZXN1bHRpbmcgdmFsdWVzIHNob3VsZCBiZSB6ZXJvLiBJdCYjMzk7cyBub3QgYSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbi4gVGhhdCYjMzk7cyBhIHJlbGllZiEKCkJ1dCB3YWl0Li4uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIElzIHRoZXJlIGFub3RoZXIgcG9zc2liaWxpdHk/IENvdWxkIGBkZXYtJmd0O2Rldl9hZGRyYCBiZSBvdmVyd3JpdHRlbiBieSBhIGRyaXZlciBhdCBhIGxhdGVyIHBvaW50PyBJdCYjMzk7cyBwb3NzaWJsZSBhIGRyaXZlciBtaWdodCBhc3NpZ24gaXRzIG93biBidWZmZXIgdG8gYGRldi0mZ3Q7ZGV2X2FkZHJgLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYW4gaXNzdWUuIFRpbWUgdG8gY2hlY2sgdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggZm9yIGFueSBpbnN0YW5jZXMgd2hlcmUgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIGRpcmVjdGx5IGFzc2lnbmVkIGEgbmV3IHZhbHVlLiBHb3R0YSBydWxlIG91dCB0aGF0IHBvdGVudGlhbCBzY2VuYXJpby4gR290dGEga2VlcCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldi1cdTAwM2VkZXZfYWRkciA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE5ldHdvcmsgRGV2aWNlIEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgTUFDIGFkZHJlc3MgaXMgcmVhZCBhbmQgd3JpdHRlbiB0byB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLCBzcGVjaWZpY2FsbHkgY29uc2lkZXJpbmcgYWxpZ25tZW50IGFuZCBlbmRpYW5uZXNzLiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IHRoZSBjaGFuZ2UgZnJvbSBkaXJlY3QgY2FzdGluZyBhbmQgZGVyZWZlcmVuY2luZyAoYCoodTMyICopZGV2LSZndDtkZXZfYWRkcmApIHRvIHVzaW5nIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCB3YXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1dCB0aGF0JiMzOTtzIG5vdCBpdC4gYGRldi0mZ3Q7ZGV2X2FkZHJgICphbHdheXMqIHBvaW50cyB0byBhIDMyLWJ5dGUgcmVnaW9uLCB6ZXJvLWluaXRpYWxpemVkLCBhbmQgYW55IG1vZGlmaWNhdGlvbnMgYXJlIGNhcmVmdWxseSBjb250cm9sbGVkIHRocm91Z2ggYGV0aF9od19hZGRyX3NldGAgb3IgYGRldl9hZGRyX21vZGAsIHNvIHRoZSBwYWRkaW5nIGJ5dGVzIGJleW9uZCB0aGUgNi1ieXRlIE1BQyBhZGRyZXNzIGFyZSBhbHdheXMgemVyby4gQWxzbywgaXQmIzM5O3MgYWx3YXlzIDQtYnl0ZSBhbGlnbmVkIG9uIGJvdGggMzItYml0IGFuZCA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgc28gYWxpZ25tZW50IHdhc24mIzM5O3QgdGhlIGlzc3VlLCB3aGljaCBpbml0aWFsbHkgc3VycHJpc2VkIG1lLgoKVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgc2VlbXMgdG8gYmUgZW5kaWFubmVzcyBhbmQgc3RyaWN0IGFsaWFzaW5nLiBDYXN0aW5nIGB1bnNpZ25lZCBjaGFyICpgIHRvIGB1MzIgKmAgaXMgYSBzdHJpY3QgYWxpYXNpbmcgdmlvbGF0aW9uLiBBbHNvLCBkZXJlZmVyZW5jaW5nIHRoZSBjYXN0IGB1MzIgKmAgbWlnaHQgbm90IHdvcmsgY29ycmVjdGx5IG9uIGJpZy1lbmRpYW4gYXJjaGl0ZWN0dXJlcy4KCk9uIExpdHRsZSBFbmRpYW4sIHRoZSBvbGQgY29kZSB3b3JrZWQgYXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIG9uIEJpZyBFbmRpYW4sIHRoZSBvbGQgY29kZSAqd2FzKiBzdWJ0bHkgYnJva2VuLiBMZXQmIzM5O3MgdHJhY2UgaXQuCk9uIEJpZyBFbmRpYW4sIGAqKHUzMiAqKWRldi0mZ3Q7ZGV2X2FkZHJgIHdvdWxkIHJlYWQgdGhlIGJ5dGVzIGluIHRoZSB3cm9uZyBvcmRlci4gIGBjcHVfdG9fbGUzMmAgd291bGQgZml4IHRoZSBieXRlIG9yZGVyLCBidXQgdGhlbiBgaW93cml0ZTMyYCAob3IgYF9fcmF3X3dyaXRlbGAgYWZ0ZXIgYXBwbHlpbmcgYGNwdV90b19sZTMyYCkgd291bGQgc3dhcCB0aGUgYnl0ZXMgKmFnYWluKiBkdWUgdG8gdGhlIGV4cGVjdGVkIG5hdGl2ZSBlbmRpYW5uZXNzIG9mIGBpb3dyaXRlMzJgLiBUaGF0IHdvdWxkIHRoZW4gd3JpdGUgYSBNQUMgYWRkcmVzcyBpbiB0aGUgd3Jvbmcgb3JkZXIuIFRoaXMgd291bGQgd3JpdGUgTUFDIGFkZHJlc3MgYnl0ZXMgaW4gcmV2ZXJzZWQgYnl0ZSBvcmRlciBvbiBCaWcgRW5kaWFuIG1hY2hpbmVzLiBgZ2V0X3VuYWxpZ25lZF9sZTMyYCByZWFkcyBhIGxpdHRsZS1lbmRpYW4gMzItYml0IHZhbHVlIGluIG1lbW9yeSBhbmQgcmV0dXJucyBpdCBhcyBhIENQVS1lbmRpYW4gdmFsdWUuIFRoaXMgd2lsbCByZXNvbHZlIHRoZSBlcnJvci4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGxpa2VseSBmaXhlcyB0aGUgZW5kaWFubmVzcyBpc3N1ZS4gQWRkaXRpb25hbGx5LCBpdCByZXNvbHZlcyB0aGUgc3RyaWN0IGFsaWFzaW5nIGFuZCBwb3RlbnRpYWxseSBhbiB1bmFsaWduZWQgYWNjZXNzIHdhcm5pbmcgKGV2ZW4gdGhvdWdoIGluIHByYWN0aWNlIGl0IGlzIGFsaWduZWQpLiBUaGUgY2hhbmdlIHRvIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGZvciB0aGUgc2Vjb25kIHBhcnQgaXMgYmVjYXVzZSByZWFkaW5nIGJ5dGVzIDYgYW5kIDcgKG91dHNpZGUgb2YgdGhlIDYtYnl0ZSBNQUMpIGlzIHVuZGVzaXJhYmxlIGZyb20gYSBjb2RlIHNhZmV0eSBwZXJzcGVjdGl2ZS4gRXZlbiB0aG91Z2ggdGhlc2UgYnl0ZXMgYXJlIGFsd2F5cyAwLCByZWFkaW5nIHRoZW0gaXMgbm90IGlkZWFsLiBJdCYjMzk7cyBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBiZWNhdXNlIHRoZXkgYXJlIHplcm9lZCBhbmQgZXhpc3QgaW4gYWxsb2NhdGVkIG1lbW9yeS4gVGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGEgZ29vZC1wcmFjdGljZSBmaXggZm9yIGVuZGlhbm5lc3MsIHN0cmljdCBhbGlhc2luZywgYW5kIHRvIGF2b2lkIHJlYWRpbmcgbWVtb3J5IHRoYXQmIzM5O3MgY29uY2VwdHVhbGx5IG91dC1vZi1ib3VuZHMuIEFsc28sIEtNU0FOIGFuZCBvdGhlciBtZW1vcnkgc2FuaXRpemVycyB3b24mIzM5O3QgY29tcGxhaW4gYmVjYXVzZSBvZiB0aGUgemVyb2luZyBpbiBgZGV2X2FkZHJfaW5pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl9hZGRyX2ZsdXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY0Mj12b2lkIGRldl9hZGRyX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NTMtLyoqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY1NDogKlx0ZGV2X2FkZHJfZmx1c2ggLSBGbHVzaCBkZXZpY2UgYWRkcmVzcyBsaXN0XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY1NS0gKlx0QGRldjogZGV2aWNlXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjAtICovXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY2MTp2b2lkIGRldl9hZGRyX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY2Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgZGV2X2FkZHJfZmx1c2hgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgY29kZSBpbmRpY2F0ZXMgd2UmIzM5O3JlIGFib3V0IHRvIGV4YW1pbmUgYGRldl9hZGRyX2ZsdXNoYC4gSnVzdCB0aGUgbmFtZSBpdHNlbGYgaGludHMgYXQgc29tZSBzb3J0IG9mIGZsdXNoaW5nIG9wZXJhdGlvbiByZWxhdGVkIHRvIGRldmljZSBhZGRyZXNzZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgY2FuIGltbWVkaWF0ZWx5IHN0YXJ0IGh5cG90aGVzaXppbmcg4oCTIGlzIHRoaXMgcmVsYXRlZCB0byBBUlAgY2FjaGUgaW52YWxpZGF0aW9uPyBQZXJoYXBzIHNvbWV0aGluZyBpbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGNoYW5nZXM/IE9yIG1heWJlIGV2ZW4gbW9yZSBmdW5kYW1lbnRhbCwgbGlrZSBjbGVhcmluZyBzdGFsZSBlbnRyaWVzIGluIGEgaGFyZHdhcmUgYWRkcmVzcyB0YWJsZT8gSSYjMzk7bGwgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgdG8gZm9ybSBhIHByb3BlciBoeXBvdGhlc2lzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdG8gcXVpY2tseSBmb3JtIGEgbWVudGFsIGNoZWNrbGlzdCBvZiByZWxhdGVkIGFyZWFzIGxpa2UgZHJpdmVyIGFyY2hpdGVjdHVyZSwgbmV0d29ya2luZyBwcm90b2NvbHMsIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjU0Olx0ICpcdGRldl9hZGRyX2ZsdXNoIC0gRmx1c2ggZGV2aWNlIGFkZHJlc3MgbGlzdFxuIDY1NTpcdCAqXHRAZGV2OiBkZXZpY2VcbiA2NTY6XHQgKlxuIDY1NzpcdCAqXHRGbHVzaCBkZXZpY2UgYWRkcmVzcyBsaXN0IGFuZCByZXNldCAtXHUwMDNlZGV2X2FkZHIuXG4gNjU4Olx0ICpcbiA2NTk6XHQgKlx0VGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHJ0bmxfbXV0ZXguXG4gNjYwOlx0ICovXG4gNjYxOlx0dm9pZCBkZXZfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDY2MjpcdHtcbiA2NjM6XHRcdC8qIHJ0bmxfbXV0ZXggbXVzdCBiZSBoZWxkIGhlcmUgKi9cbiA2NjQ6XHRcdGRldl9hZGRyX2NoZWNrKGRldik7XG4gNjY1Olx0XG4gNjY2Olx0XHRfX2h3X2FkZHJfZmx1c2goXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycyk7XG4gNjY3Olx0XHRkZXYtXHUwMDNlZGV2X2FkZHIgPSBOVUxMO1xuIDY2ODpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5MzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgZGV2X2FkZHJfZmx1c2hgIHNldHMgYGRldi0mZ3Q7ZGV2X2FkZHJgIHRvIGBOVUxMYCwgYW5kIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGluIGBmcmVlX25ldGRldmAuIFNvLCB5b3UmIzM5O2QgdGhpbmsgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIG5ldmVyIHJlLWFzc2lnbmVkIGFmdGVyIGBkZXZfYWRkcl9pbml0YCwgd2hpY2ggc2hvdWxkIHplcm8gaXQuIEJ1dCB3YWl0Li4uIHdoYXQgYWJvdXQgdmlydHVhbCBkZXZpY2VzPyBEZXZpY2VzIGxpa2UgYm9uZGluZyBvciBWTEFOIGludGVyZmFjZXMgY2FuIG1vZGlmeSB0aGVpciBNQUMgYWRkcmVzc2VzIHVzaW5nIGBkZXZfYWRkcl9tb2RgLCBidXQgdGhhdCBmdW5jdGlvbiBvbmx5IG1vZGlmaWVzIHRoZSBmaXJzdCBzaXggYnl0ZXMuCgpTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgaXQgKnBvc3NpYmxlKiB0aGF0IGBkZXYtJmd0O2Rldl9hZGRyYCBpc24mIzM5O3QgZnVsbHkgemVyb2VkPyBMZXQmIzM5O3MgZGlnIGRlZXBlci4gVGhlIGNvZGUgZm9yIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgaXMgcmlnaHQgdGhlcmUuICBJIHNlZSB0aGF0IGl0IHVzZXMgYGV0aF9od19hZGRyX3NldChkZXYsIGFkZHItJmd0O3NhX2RhdGEpYC4gIEFoYSEgYGV0aF9od19hZGRyX3NldGAgY29waWVzIDYgYnl0ZXMgZnJvbSBgYWRkci0mZ3Q7c2FfZGF0YWAgdG8gYGRldi0mZ3Q7ZGV2X2FkZHJgLiBCdXQgd2hlcmUgZG9lcyBgYWRkcmAgY29tZSBmcm9tPyAgSXQgY29tZXMgZnJvbSB1c2VyIHNwYWNlLCB2aWEgYGlvY3RsYCBvciBgbmV0bGlua2AuCgpBbmQgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiAgSWYgdXNlciBzcGFjZSBwYXNzZXMgYSBgc29ja2FkZHJgIHN0cnVjdHVyZSB3aGVyZSB0aGUgdHJhaWxpbmcgYnl0ZXMgb2YgYHNhX2RhdGFgIGFyZSAqdW5pbml0aWFsaXplZCosIHdlIGhhdmUgYSBwb3RlbnRpYWwgaXNzdWUuIFJlbWVtYmVyLCBgc2FfZGF0YWAgaXMgMTQgYnl0ZXMsIGJ1dCBgZXRoX2h3X2FkZHJfc2V0YCAqb25seSogY29waWVzIHRoZSBmaXJzdCA2LiBTbywgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSBiZXlvbmQgdGhlIGZpcnN0IDYgYnl0ZXMgaW4gYHNhX2RhdGFgIHdvdWxkbiYjMzk7dCBiZSBjb3BpZWQuIFNpbmNlIGBkZXYtJmd0O2Rldl9hZGRyYCB3YXMgemVyb2VkIGF0IGluaXRpYWxpemF0aW9uLCB0aGUgcmVtYWluaW5nIGJ5dGVzIChieXRlcyA2IGFuZCA3KSBvZiBgZGV2LSZndDtkZXZfYWRkcmAgd291bGQgKnN0aWxsKiBiZSB6ZXJvZWQuCgpIb3dldmVyLCBpZiBLTVNBTiB3ZXJlIHRvIHJlcG9ydCBhbiB1bmluaXRpYWxpemVkIHZhbHVlLCBpdCB3b3VsZCBwb2ludCB0byB0aGlzIGZ1bmN0aW9uIGFzIGEgbG9jYXRpb24uCgpMZXQmIzM5O3MgZG8gc29tZSBzZWFyY2hpbmcgZm9yIEtNU0FOIHJlcG9ydHMgcmVsYXRlZCB0byBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIHRvIGRldGVybWluZSB3aGV0aGVyIGEgdnVsbmVyYWJpbGl0eSBleGlzdHMgaW4gdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTM5X3NldF9tYWNfYWRkcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz02NDY9c3RhdGljIHZvaWQgcnRsODEzOV9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy02NDctI2VuZGlmXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo2NDg6c3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTY0OS1zdGF0aWMgaW50IHJ0bDgxMzlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTkyMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxMzlfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjctXHQubmRvX3ZhbGlkYXRlX2FkZHJcdD0gZXRoX3ZhbGlkYXRlX2FkZHIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo5Mjg6XHQubmRvX3NldF9tYWNfYWRkcmVzcyBcdD0gcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjktXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBydGw4MTM5X3N0YXJ0X3htaXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM9MjIwOT1zdGF0aWMgdm9pZCBydGw4MTM5X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzoyMjIwOnN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTU1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBLTVNBTiBSZXBvcnRzIGluIHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJvb3QgY2F1c2UgZm9yIGEgcG90ZW50aWFsIEtNU0FOIHJlcG9ydCByZWxhdGVkIHRvIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AuIFRoZSBjZW50cmFsIGlzc3VlIHNlZW1zIHRvIGJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiBgZGV2LSZndDtkZXZfYWRkcmAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGlzIGNvdWxkIHN0ZW0gZnJvbSB0aGUgYnl0ZXMgYXQgb2Zmc2V0cyA2IGFuZCA3IHdpdGhpbiBgZGV2LSZndDtkZXZfYWRkcmAgbm90IGJlaW5nIGluaXRpYWxpemVkLiBIb3dldmVyLCBJIGtub3cgZnJvbSBgZGV2X2FkZHJfaW5pdGAgdGhhdCB0aG9zZSBieXRlcyBzaG91bGQgYmUgc2V0IHRvIHplcm8uCgpJIGhhZCB0byBjbGFyaWZ5IHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBJcyBgZGV2X2FkZHJfaW5pdGAgQUxXQVlTIGNhbGxlZD8gWWVzLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGBhbGxvY19uZXRkZXZfbXFzYC4gQ291bGQgdGhlcmUgYmUgYSBjYXNlIHdoZXJlIGBkZXYtJmd0O2Rldl9hZGRyYCBpcyBhbGxvY2F0ZWQgZGlmZmVyZW50bHksIHNwZWNpZmljYWxseSwgbm90IGFzIGEgMzItYnl0ZSBhcnJheSBhcyBJIGFzc3VtZT8gSSBydWxlZCBvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGBkZXYtJmd0O2Rldl9hZGRyYCBiZWluZyBtb2RpZmllZCBkaXJlY3RseSAoZS5nLiwgYGRldi0mZ3Q7ZGV2X2FkZHIgPSBzb21lX2J1ZmZlcmApIGJlY2F1c2UgSSBmb3VuZCBubyBzdWNoIGRpcmVjdCBhc3NpZ25tZW50cyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeS4KCkkgY29uc2lkZXJlZCBgZGV2X2FkZHJfbW9kYCwgd2hpY2ggbW9kaWZpZXMgdGhlIGBoYS0mZ3Q7YWRkcmAgKmluIHBsYWNlKi4gVGhpcyBpc24mIzM5O3QgdGhlIGlzc3VlLiBCdXQsIGRvZXMgYGRldi0mZ3Q7ZGV2X2FkZHJgIHBvaW50IHRvIGEgZGlmZmVyZW50IGJ1ZmZlciBvdGhlciB0aGFuIGBoYS0mZ3Q7YWRkcmA/IE5vdCBhY2NvcmRpbmcgdG8gdGhlIGNvZGU7IHRoZSBgZGV2X2FkZHJfaW5pdGAgZnVuY3Rpb24gc2V0cyB0aGluZ3MgdXAgY29ycmVjdGx5IGFuZCB0aGlzIGlzIHRoZSBvbmx5IGNvZGUgc2V0dGluZyB1cCB0aGUgZGV2aWNlIGFkZHJlc3MuIFRoZSBNQUMgYWRkcmVzcyBpcyBhIDMyLWJ5dGUgYXJyYXkgdG8gaGFuZGxlIHRoaXMuCgpUaGUgcXVlc3Rpb24gdGhlbiBldm9sdmVkIGludG8gd2h5IHRoZXkgY2hhbmdlZCB0aGUgY29kZSB0byBgZ2V0X3VuYWxpZ25lZF9sZTE2YC4gVGhpcyBjaGFuZ2UgaGFzIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIHByZXZpb3VzIGFwcHJvYWNoIHdpdGggYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBsb29rZWQgbGlrZSBpdCB3b3VsZCByZWFkIGJ5dGVzIDQsIDUsIDYsIDcgYW5kIGl0IHdvdWxkIG5vdCBjcmFzaCBiZWNhdXNlIHRoZSBhcnJheSBpcyAzMiBieXRlcyBhbmQgdGhlIDZ0aCBhbmQgN3RoIGJ5dGVzIGFyZSAwLiBOb3cgSSYjMzk7bSByZW1pbmRlZCB0aGF0IEtBU0FOIGRldGVjdHMgb3V0LW9mLWJvdW5kcyByZWFkcywgYnV0IHNpbmNlIGBkZXYtJmd0O2Rldl9hZGRyYCBpcyBhIDMyLWJ5dGUgYXJyYXksIEtBU0FOIGRvZXNuJiMzOTt0IGRldGVjdCBpdC4gS01TQU4sIGhvd2V2ZXIsIGRldGVjdHMgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGFyZSBieXRlcyA2IGFuZCA3IHVuaW5pdGlhbGl6ZWQ/IE5vLiBJIGNoZWNrZWQgYWdhaW4gYGRldl9hZGRyX2luaXRgLCB3aGljaCB6ZXJvZXMgYWxsIDMyIGJ5dGVzIG9mIHRoZSBNQUMgYWRkcmVzcy4gSSBmb3VuZCBgX19od19hZGRyX2FkZGAgdGFrZXMgMzIgYnl0ZXMuIFRoZW4gaXQmIzM5O3MgY29waWVkIHRvIGBoYS0mZ3Q7YWRkcmAgd2l0aCAzMiBieXRlcy4gU28gaXQmIzM5O3MgemVyb2VkLgoKSSBuZWVkIHRvIGNvbmZpcm0gYWxsIHRoZSBpbml0aWFsaXphdGlvbiBwYXRocy4gV2hhdCBpZiB0aGUgYWRkcmVzcyBtb2RpZmljYXRpb24gdmlhIGBldGhfaHdfYWRkcl9zZXRgIGNoYW5nZXMgdGhlIHZhbHVlIGFmdGVyIHRoZSBpbml0aWFsIHplcm9pbmc/IFRoaXMgZnVuY3Rpb24gY29waWVzIDYgYnl0ZXMgdG8gYGhhLSZndDthZGRyYCwgYnV0IHRoZSByZW1haW5pbmcgYnl0ZXMgcmVtYWluIGFzIDAuIFNvLCBhZ2FpbiwgaXQmIzM5O3MgaW5pdGlhbGl6ZWQuCgpTbywgaXMgdGhlcmUgQU5ZIGNhc2Ugd2hlcmUgYGhhLSZndDthZGRyYCBpcyBpbml0aWFsaXplZCB0byBsZXNzIHRoYW4gMzIgYnl0ZXM/IFdoYXQgYWJvdXQgdGhlIGNhbGwgdG8gYF9faHdfYWRkcl9jcmVhdGVgPyBJbiBgZGV2X2FkZHJfaW5pdGAsIHRoZSBzaXplIGlzIDMyLiBPa2F5LCBzbyB3aGF0IGlmIGBkZXZfYWRkcl9tb2RgIGNhbGxzIGBfX2h3X2FkZHJfaW5zZXJ0YCB3aXRoIGxlbmd0aCA2PyBJIHNlZSB0aGUgaW5zZXJ0IGRvZXNuJiMzOTt0IG1vZGlmeSB0aGUgZGF0YSwgc28gaXQgd29uJiMzOTt0IGltcGFjdCBgaGEtJmd0O2FkZHJgLiBBbHNvLCBkb2VzIGBkZXYtJmd0O2Rldl9hZGRyYCBldmVyIHBvaW50IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBgaGFgPyBJIHNlYXJjaGVkIGFuZCBJJiMzOTttIHJlbWluZGVkIGBkZXYtJmd0O2Rldl9hZGRyYCBhbHdheXMgcG9pbnRzIHRvIGBoYS0mZ3Q7YWRkcmAsIHdoaWNoIGlzIGNyZWF0ZWQgaW4gYGRldl9hZGRyX2luaXRgLiBTbyBhZ2FpbiwgaXQgaXMgYWx3YXlzIHplcm9lZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciBwbGFjZSB0aGF0JiMzOTtzIHNldHRpbmcgdGhpcyB2YWx1ZTogYGRldl9hZGRyX3NldGAuCgpJJiMzOTt2ZSBleGhhdXN0ZWQgYWxsIHBsYXVzaWJsZSBleHBsYW5hdGlvbnMuIFRoZSBLTVNBTiByZXBvcnQgbXVzdCBoYXZlIGJlZW4gYSBmYWxzZSBwb3NpdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2FkZHIgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMDAyMD1pbnQgbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTAwMjUtXHRcdC5pbmZvLmV4dGFjayA9IGV4dGFjayxcbm5ldC9jb3JlL2Rldi5jOjEwMDI2Olx0XHQuZGV2X2FkZHIgPSBhZGRyLFxubmV0L2NvcmUvZGV2LmMtMTAwMjctXHR9O1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NjYxPXZvaWQgZGV2X2FkZHJfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY2Ni1cdF9faHdfYWRkcl9mbHVzaChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NjY3Olx0ZGV2LVx1MDAzZWRldl9hZGRyID0gTlVMTDtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjY4LX1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY3OT1pbnQgZGV2X2FkZHJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjk3LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyLCBsaXN0KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njk4Olx0XHRkZXYtXHUwMDNlZGV2X2FkZHIgPSBoYS1cdTAwM2VhZGRyO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODczCgkJCQkJCQlvdXRwdXQ6IDM2MQoJCQkJCQkJdGhvdWdodHM6IDQyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlciwgYmVnaW5zIHdpdGggdmVyaWZ5aW5nIHRoZSBjb3JlIGFzc2VydGlvbjogaXMgYGRldi0mZ3Q7ZGV2X2FkZHJgIHRydWx5IGluaXRpYWxpemVkPyBUaGUgY29kZSBjbGVhcmx5IHNldHMgaXQgaW4gYGRldl9hZGRyX2luaXRgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGlzIGlzIGNyaXRpY2FsLiBTaW5jZSBJIGtub3cgYGRldl9hZGRyX2luaXRgIGlzIGNvbnNpc3RlbnRseSBjYWxsZWQsIHRoZSBidWZmZXIgKnNob3VsZCogYWx3YXlzIGJlIGluaXRpYWxpemVkLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBkb2VzIHRoZSAqcGF0Y2gqIGNoYW5nZSB0aGlzLCBvciBpbnRyb2R1Y2UgYSBuZXcgcGF0aCB3aGVyZSB0aGlzIGluaXRpYWxpemF0aW9uIGlzIHNraXBwZWQ/CgpUaGUgS01TQU4gcXVlc3Rpb24gcmV2b2x2ZXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJZiB0aGUgcGF0Y2ggZml4ZWQgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGVuIEtNU0FOIHdvdWxkIGJlIGltcG9ydGFudC4gQnV0IGlmIHRoZSBwYXRjaCBvbmx5ICpwcmV2ZW50cyogdGhlIHJlYWQsIHRoZW4gS01TQU4gaXMgbGlrZWx5IGlycmVsZXZhbnQsIHNpbmNlIEtNU0FOIGNhbiYjMzk7dCAqZGV0ZWN0KiB0aGF0IHRoZSByZWFkIGRvZXNuJiMzOTt0IGhhcHBlbi4KCkkgc3RhcnRlZCBkaWdnaW5nIGludG8gdGhlIHBhdGNoLCBhbmQgdGhlIGtleSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIHVzZWQgYW5kIHNldC4gSSBsb29rZWQgYXQgdGhlIGRlZmluaXRpb24gb2YgYGRldi0mZ3Q7ZGV2X2FkZHJgLCBjb25maXJtaW5nIGl0JiMzOTtzIGEgcG9pbnRlciwgYW5kIHdoZXJlIGl0JiMzOTtzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgaXMgYSBjbHVlLiBUaGVuIEkgZm9jdXNlZCBvbiB0aGUgc3BlY2lmaWMgY29kZSBpbiB0aGF0IGZ1bmN0aW9uLCB0aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQ6CgpgYGBjCi0JUlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDApKSk7Ci0JUlRMX1czMl9GKE1BQzAgJiM0MzsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDQpKSk7CiYjNDM7CVJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGdldF91bmFsaWduZWRfbGUzMihkZXYtJmd0O2Rldl9hZGRyKSk7CiYjNDM7CVJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDQpKTsKYGBgCgpUaGUgb2xkIGNvZGUgbG9va3Mgc3VzcGljaW91cy4gSXQgcmVhZHMgYSBgdTMyYCBmcm9tIGFuIGFkZHJlc3MgdGhhdCBjb25jZXB0dWFsbHkgcmVwcmVzZW50cyBhIDYtYnl0ZSBNQUMgYWRkcmVzcywgbWVhbmluZyBpdCBtaWdodCByZWFkIGJleW9uZCB0aGUgTUFDLiBUaGUgc2l6ZSBvZiBgZGV2LSZndDtkZXZfYWRkcmAgaXMgY3JpdGljYWw7IHRoZSBhc3N1bXB0aW9uIHNlZW1zIHRvIGJlIHRoYXQgaXQmIzM5O3Mgc2l6ZWQgZXhhY3RseSBmb3IgYSBNQUMgYWRkcmVzcywgYnV0IGlzIHRoYXQgY29ycmVjdD8gSSB3ZW50IG9uIHRvIHZlcmlmeSB0aGlzLCBieSBzZWFyY2hpbmcgdGhlIGNvZGUgd2hlcmUgYGRldi0mZ3Q7ZGV2X2FkZHJgIGdldHMgYXNzaWduZWQgKGFuZCB0aGUgYW5zd2VyIGlzIGBhbGxvY19uZXRkZXZfbXFzYCkuIFNpbmNlIGl0IGNhbGxzIGBkZXZfYWRkcl9pbml0YCwgdGhpcyBtYWtlcyBhbGwgb2YgdGhpcyBtdWNoIGVhc2llciwgYmVjYXVzZSB0aGUgc2l6ZSBpcyBhIGtub3duIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVkIHZhbHVlLgoKVGhlIEtNU0FOIGltcGxpY2F0aW9ucyBjb21lIHRvIGZvY3VzOyBpZiB0aGUgYWxsb2NhdGlvbiBmb3IgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIGdyZWF0ZXIgdGhhbiA2IGJ5dGVzLCB0aGVuIHJlYWRpbmcgYmV5b25kIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCBub3QgYW4gdW5pbml0aWFsaXplZCByZWFkIChiZWNhdXNlLCB3aXRoIGBkZXZfYWRkcl9pbml0YCwgdGhlc2UgZXh0cmEgYnl0ZXMgZ2V0IHplcm9lZCwgYW5kIEtNU0FOIHdvdWxkIG5vdCBjYXRjaCBhIHplcm8gcmVhZCkuIFNpbmNlIGBkZXYtJmd0O2Rldl9hZGRyYCBpcyBpbml0aWFsaXplZCwgaXQgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQuIElmIHRoZSByZWFkICppcyogb3V0IG9mIGJvdW5kcywgYnV0IHRoZSBidWZmZXIgaXMgemVybywgS01TQU4gd291bGQgbm90IGNhdGNoIHRoaXMuIElmIHRoZSBidWZmZXIgKndlcmUqIDYgYnl0ZXMsIEtBU0FOICp3b3VsZCogY2F0Y2ggaXQgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgdGhlbiBLTVNBTiAqbWlnaHQqIGNhdGNoIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuCgpUaGUgbW9yZSBJIGxvb2tlZCBhdCBpdCwgdGhlIG1vcmUgSSYjMzk7bSBjb252aW5jZWQgdGhlIGlzc3VlIGlzIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1dCBpcyBhY3R1YWxseSByZWxhdGVkIHRvICpsb2dpY2FsKiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIG9sZCBjb2RlIHdhcyBsb2dpY2FsbHkgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIE1BQyBhZGRyZXNzLiBUaGUgbmV3IGNvZGUgZml4ZXMgdGhpcyBieSBjaGFuZ2luZyBob3cgdGhlIE1BQyBhZGRyZXNzIGlzIHJlYWQsIGJ1dCBldmVuIGluIHRoZSBvbGQgY29kZSwgS01TQU4gd291bGRuJiMzOTt0IGNhdGNoIGFueXRoaW5nLCBiZWNhdXNlIHRoZSBtZW1vcnkgaXMgKmluaXRpYWxpemVkKi4gSSBjb25maXJtZWQgdGhhdCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCBpcyBhIHNhZmUgd2F5IHRvIHJlYWQgdGhlIGxhc3QgMiBieXRlcy4gVGhlIG9sZCBjb2RlIGNhc3RzIGBkZXYtJmd0O2Rldl9hZGRyYCB0byBhIGB1MzIqYCBhbmQgZGVyZWZlcmVuY2VzIGl0LiBUaGlzIHBvdGVudGlhbGx5IHZpb2xhdGVkIHN0cmljdCBhbGlhc2luZyBydWxlcyBvciBjb3VsZCByZXN1bHQgaW4gYWxpZ25tZW50IGlzc3Vlcy4gVGhlIHBhdGNoLCBjb3JyZWN0bHksIHJlbW92ZXMgdGhpcyBwb3RlbnRpYWwgYWxpYXNpbmcgcHJvYmxlbS4gQWxzbywgdGhpcyByZXNvbHZlcyBhIHBvdGVudGlhbCBTcGFyc2Ugd2FybmluZywgd2hpY2ggaXMgYWx3YXlzIGdvb2QuCgpJbiBzaG9ydCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpY2FsIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgZml4ZXMgc3RyaWN0IGFsaWFzaW5nIHZpb2xhdGlvbnMgYW5kL29yIHBvdGVudGlhbCBhbGlnbm1lbnQgcHJvYmxlbXMuIEl0IGlzIE5PVCBmaXhpbmcgYW4gKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSByZWFkLiBUaGVyZWZvcmUsIG5vIEtNU0FOIHNlc3Npb24gaXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgaW5zdGVhZCBvZiBkaXJlY3RseSBjYXN0aW5nIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHRvIGB1MzIgKmAgYW5kIGRlcmVmZXJlbmNpbmcgaXQuIFRoZSBvbGQgY29kZSByZWFkIDQgYnl0ZXMgZnJvbSBgZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDRgIChieXRlcyA0LCA1LCA2LCBhbmQgNyksIHdoaWNoIGxvZ2ljYWxseSBleGNlZWRzIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MgbGVuZ3RoLiBcblxuSG93ZXZlciwgYGRldi1cdTAwM2VkZXZfYWRkcmAgcG9pbnRzIHRvIGBoYS1cdTAwM2VhZGRyYCB3aXRoaW4gYSBgc3RydWN0IG5ldGRldl9od19hZGRyYCwgd2hpY2ggaXMgYSAzMi1ieXRlIGFycmF5IChgTUFYX0FERFJfTEVOYCkuIFRoaXMgZW50aXJlIDMyLWJ5dGUgYXJyYXkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfYWRkcl9pbml0KClgIHVzaW5nIGBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKWAuIEJlY2F1c2UgdGhlIHBhZGRpbmcgYnl0ZXMgKGJ5dGVzIDYgYW5kIDcpIGFyZSBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLCByZWFkaW5nIHRoZW0gZG9lcyBub3QgY29uc3RpdHV0ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gd291bGQgbm90IGRldGVjdCBhbnkgaXNzdWUgaGVyZS5cblxuRnVydGhlcm1vcmUsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgYWxsb2NhdGlvbiBpcyAzMiBieXRlcywgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGVpdGhlci4gVGhlIHBhdGNoIHByaW1hcmlseSByZXNvbHZlcyBhIGxvZ2ljYWwgb3V0LW9mLWJvdW5kcyByZWFkLCBwb3RlbnRpYWwgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcywgYW5kIFNwYXJzZSB3YXJuaW5ncyByZWxhdGVkIHRvIGVuZGlhbm5lc3MgdHlwZXMgKHBhc3NpbmcgYF9fbGUzMmAgdG8gYGlvd3JpdGUzMmAgd2hpY2ggZXhwZWN0cyBgdTMyYCkuIFxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCB0byB1c2UgYGdldF91bmFsaWduZWRfbGUzMmAgYW5kIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGluc3RlYWQgb2YgZGlyZWN0bHkgY2FzdGluZyBgZGV2LVx1MDAzZWRldl9hZGRyYCB0byBgdTMyICpgIGFuZCBkZXJlZmVyZW5jaW5nIGl0LiBUaGUgb2xkIGNvZGUgcmVhZCA0IGJ5dGVzIGZyb20gYGRldi1cdTAwM2VkZXZfYWRkciAmIzQzOyA0YCAoYnl0ZXMgNCwgNSwgNiwgYW5kIDcpLCB3aGljaCBsb2dpY2FsbHkgZXhjZWVkcyB0aGUgNi1ieXRlIE1BQyBhZGRyZXNzIGxlbmd0aC4gXG5cbkhvd2V2ZXIsIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHBvaW50cyB0byBgaGEtXHUwMDNlYWRkcmAgd2l0aGluIGEgYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAsIHdoaWNoIGlzIGEgMzItYnl0ZSBhcnJheSAoYE1BWF9BRERSX0xFTmApLiBUaGlzIGVudGlyZSAzMi1ieXRlIGFycmF5IGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBpbiBgZGV2X2FkZHJfaW5pdCgpYCB1c2luZyBgbWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSlgLiBCZWNhdXNlIHRoZSBwYWRkaW5nIGJ5dGVzIChieXRlcyA2IGFuZCA3KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdG8gemVybywgcmVhZGluZyB0aGVtIGRvZXMgbm90IGNvbnN0aXR1dGUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYW55IGlzc3VlIGhlcmUuXG5cbkZ1cnRoZXJtb3JlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGFsbG9jYXRpb24gaXMgMzIgYnl0ZXMsIEtBU0FOIGRvZXMgbm90IGRldGVjdCB0aGlzIGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBlaXRoZXIuIFRoZSBwYXRjaCBwcmltYXJpbHkgcmVzb2x2ZXMgYSBsb2dpY2FsIG91dC1vZi1ib3VuZHMgcmVhZCwgcG90ZW50aWFsIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMsIGFuZCBTcGFyc2Ugd2FybmluZ3MgcmVsYXRlZCB0byBlbmRpYW5uZXNzIHR5cGVzIChwYXNzaW5nIGBfX2xlMzJgIHRvIGBpb3dyaXRlMzJgIHdoaWNoIGV4cGVjdHMgYHUzMmApLiBcblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzc6MjUuNzEwNTI1MzQ3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2NDAzODg4NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIjgxMzlUT09cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTM5X3NldF9tYWNfYWRkcmVzc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCB0byB1c2UgYGdldF91bmFsaWduZWRfbGUzMmAgYW5kIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGluc3RlYWQgb2YgZGlyZWN0bHkgY2FzdGluZyBgZGV2LVxcdTAwM2VkZXZfYWRkcmAgdG8gYHUzMiAqYCBhbmQgZGVyZWZlcmVuY2luZyBpdC4gVGhlIG9sZCBjb2RlIHJlYWQgNCBieXRlcyBmcm9tIGBkZXYtXFx1MDAzZWRldl9hZGRyICsgNGAgKGJ5dGVzIDQsIDUsIDYsIGFuZCA3KSwgd2hpY2ggbG9naWNhbGx5IGV4Y2VlZHMgdGhlIDYtYnl0ZSBNQUMgYWRkcmVzcyBsZW5ndGguIFxcblxcbkhvd2V2ZXIsIGBkZXYtXFx1MDAzZWRldl9hZGRyYCBwb2ludHMgdG8gYGhhLVxcdTAwM2VhZGRyYCB3aXRoaW4gYSBgc3RydWN0IG5ldGRldl9od19hZGRyYCwgd2hpY2ggaXMgYSAzMi1ieXRlIGFycmF5IChgTUFYX0FERFJfTEVOYCkuIFRoaXMgZW50aXJlIDMyLWJ5dGUgYXJyYXkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfYWRkcl9pbml0KClgIHVzaW5nIGBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKWAuIEJlY2F1c2UgdGhlIHBhZGRpbmcgYnl0ZXMgKGJ5dGVzIDYgYW5kIDcpIGFyZSBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLCByZWFkaW5nIHRoZW0gZG9lcyBub3QgY29uc3RpdHV0ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gd291bGQgbm90IGRldGVjdCBhbnkgaXNzdWUgaGVyZS5cXG5cXG5GdXJ0aGVybW9yZSwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBhbGxvY2F0aW9uIGlzIDMyIGJ5dGVzLCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgdGhpcyBhcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZWl0aGVyLiBUaGUgcGF0Y2ggcHJpbWFyaWx5IHJlc29sdmVzIGEgbG9naWNhbCBvdXQtb2YtYm91bmRzIHJlYWQsIHBvdGVudGlhbCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzLCBhbmQgU3BhcnNlIHdhcm5pbmdzIHJlbGF0ZWQgdG8gZW5kaWFubmVzcyB0eXBlcyAocGFzc2luZyBgX19sZTMyYCB0byBgaW93cml0ZTMyYCB3aGljaCBleHBlY3RzIGB1MzJgKS4gXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzc6MjUuNzEwNTMxMTE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY5MzgxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmQ1ZGQzMjNhN2YzNjBkMWE2OTAxY2FjMDg1MWIzMzQ3NTRmNjRhOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxMzozNzoyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jXFxuaW5kZXggODI0MWJjZjc2NjY0NC4uMTczNjU5OWQ3MjQ0MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jXFxuQEAgLTExMiw2ICsxMTIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vaXJxLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4gXFxuIC8qIERlZmF1bHQgTWVzc2FnZSBsZXZlbCAqL1xcbiAjZGVmaW5lIFJUTDgxMzlfREVGX01TR19FTkFCTEUgICAoTkVUSUZfTVNHX0RSViAgIHwgXFxcXFxcbkBAIC0yMjMwLDggKzIyMzEsOCBAQCBzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnRwLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTtcXG4tXFx0UlRMX1czMl9GKE1BQzAgKyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cXHUwMDNlZGV2X2FkZHIgKyAwKSkpO1xcbi1cXHRSVExfVzMyX0YoTUFDMCArIDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVxcdTAwM2VkZXZfYWRkciArIDQpKSk7XFxuK1xcdFJUTF9XMzJfRihNQUMwICsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi1cXHUwMDNlZGV2X2FkZHIpKTtcXG4rXFx0UlRMX1czMl9GKE1BQzAgKyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVxcdTAwM2VkZXZfYWRkciArIDQpKTtcXG4gXFx0UlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2dHAtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozNzoyNy4xODA4MTkyMThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NzQ3MTA1NDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI4MTM5VE9PXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODEzOV9zZXRfbWFjX2FkZHJlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmQ1ZGQzMjNhN2YzNjBkMWE2OTAxY2FjMDg1MWIzMzQ3NTRmNjRhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDEzOjM3OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1xuaW5kZXggODI0MWJjZjc2NjY0NC4uMTczNjU5OWQ3MjQ0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1xuQEAgLTExMiw2ICsxMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2lycS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAvKiBEZWZhdWx0IE1lc3NhZ2UgbGV2ZWwgKi9cbiAjZGVmaW5lIFJUTDgxMzlfREVGX01TR19FTkFCTEUgICAoTkVUSUZfTVNHX0RSViAgIHwgXFxcbkBAIC0yMjMwLDggKzIyMzEsOCBAQCBzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnRwLVx1MDAzZWxvY2spO1xuIFxuIFx0UlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spO1xuLVx0UlRMX1czMl9GKE1BQzAgKyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciArIDApKSk7XG4tXHRSVExfVzMyX0YoTUFDMCArIDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICsgNCkpKTtcbitcdFJUTF9XMzJfRihNQUMwICsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi1cdTAwM2VkZXZfYWRkcikpO1xuK1x0UlRMX1czMl9GKE1BQzAgKyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVx1MDAzZWRldl9hZGRyICsgNCkpO1xuIFx0UlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZ0cC1cdTAwM2Vsb2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM3OjI3LjE4MDgyMDg3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjcyNjM3NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jYC4gVGhlIGNoYW5nZSBpcyBpbiBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIHJlcGxhY2VkIHNvbWUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgdW5hbGlnbmVkIHBvaW50ZXIgY2FzdHMgd2l0aCBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAuIEdvb2QgcHJhY3RpY2UsIGRlZmluaXRlbHkgYSBzZW5zaWJsZSBtb3ZlIHRvIGltcHJvdmUgcG9ydGFiaWxpdHkgYW5kIGF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvci5cblxuTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgZHJpdmVyIHNvbGVseSBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGNhcmQsIG9yIGlzIGl0IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGVuY291bnRlcmVkIGluIGEgdmlydHVhbGl6ZWQgc2V0dXA/IFRoZSBSVEw4MTM5IGlzIGEgcHJldHR5IHViaXF1aXRvdXMgbmV0d29yayBjYXJkLCBoaXN0b3JpY2FsbHkgc3BlYWtpbmcuIEFuZCB5ZXAsIGNvbmZpcm1lZCDigJMgUUVNVSBhY3R1YWxseSBoYXMgZXhwbGljaXQgZW11bGF0aW9uIGZvciBpdCB3aXRoIHRoZSBgLWRldmljZSBydGw4MTM5YCBvcHRpb24uIFRoYXQgbWVhbnMgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgd2lkZSByYW5nZSBvZiBlbnZpcm9ubWVudHMsIGluY2x1ZGluZyBWTXMsIHNvIHRoaXMgcGF0Y2ggY291bGQgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdC4gVGltZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byBzZWUgaG93IGA4MTM5dG9vLmNgIGZpdHMgaW50byB0aGUga2VybmVsIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjczLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzc6NDAuNDUzNDYxMDE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDg1MTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCI4MTM5dG9vLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHXzgxMzlDUCkgKz0gODEzOWNwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHXzgxMzlUT08pICs9IDgxMzl0b28ub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGUtOC1yODE2OS15ICs9IHI4MTY5X21haW4ubyByODE2OV9maXJtd2FyZS5vIHI4MTY5X3BoeV9jb25maWcub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozNzo0MC41NTgzMTcyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NTQyMTYzNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBJJ20gbG9va2luZyBhdCBpcyBgQ09ORklHXzgxMzlUT09gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGlzIGJhY2sgdG8gaXRzIHNvdXJjZSwgdGhlIEtjb25maWcgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNldHRpbmcgcmVwcmVzZW50cyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gb3BlbiBhbmQgYW5hbHl6ZSB0aGF0IHNwZWNpZmljIEtjb25maWcgZmlsZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZXhwZXJ0aXNlIGFsbG93cyBtZSB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29udGV4dCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGRldGFpbHMgaXMga2V5IHRvIGludGVycHJldGluZyB3aGF0J3MgYmVlbiBkZWZpbmVkLiBJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgaG93IGA4MTM5VE9PYCBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IGVmZmVjdHMgaXQgaGFzIG9uIHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGJlaGF2aW9yLiBJIGNhbiBsaWtlbHkgcXVpY2tseSBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpbiBLY29uZmlnIGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozNzo1Ni4xMDA0ODMyMThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyOTc4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIDgxMzlUT09cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz0yMD1jb25maWcgODEzOUNQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjMyOmNvbmZpZyA4MTM5VE9PXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTMzLVxcdHRyaXN0YXRlIFxcXCJSZWFsVGVrIFJUTC04MTI5LzgxMzAvODEzOSBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjQ0OmNvbmZpZyA4MTM5VE9PX1BJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00NS1cXHRib29sIFxcXCJVc2UgUElPIGluc3RlYWQgb2YgTU1JT1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy01My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6NTQ6Y29uZmlnIDgxMzlUT09fVFVORV9UV0lTVEVSXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHVuY29tbW9uIFJUTC04MTM5IHJldi4gSyAoYXV0b21hdGljIGNoYW5uZWwgZXF1YWxpemF0aW9uKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy02NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6NjU6Y29uZmlnIDgxMzlUT09fODEyOVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy02Ni1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBvbGRlciBSVEwtODEyOS84MTMwIGJvYXJkc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzc6NTYuMTYyNzkwNTE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1MzY2MTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBEZXBlbmRlbmNpZXMgZm9yIDgxMzlUT08qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYXNzb2NpYXRlZCB3aXRoIGA4MTM5VE9PYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBsaWJyYXJpZXMsIG1vZHVsZXMsIG90aGVyIGNvbXBvbmVudHMsIG9yIGV2ZW4gZXh0ZXJuYWwgc2VydmljZXMgdGhpcyBwYXJ0aWN1bGFyIGVsZW1lbnQgcmVsaWVzIHVwb24uIElzIGl0IGEgY29yZSBpbnRlcm5hbCBtb2R1bGUsIGFuIGV4dGVybmFsIGxpYnJhcnkgaW50ZWdyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWMgY29udGV4dCBpc24ndCBnaXZlbiwgc28gSSdtIHRoaW5raW5nIGJyb2FkbHkgYWJvdXQgdGhlIHBvc3NpYmxlIGRlcGVuZGVuY3kgdHlwZXMuIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gdHJvdWJsZXNob290IGEgYnVnLCBtYWtlIGEgY2hhbmdlLCBvciBhc3Nlc3MgdGhlIGltcGFjdCBvZiBhIHBsYW5uZWQgdXBkYXRlLiBEZXBlbmRpbmcgb24gdGhlIHN5c3RlbSwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyBJJ2QgdHlwaWNhbGx5IGdvIGFib3V0IGludmVzdGlnYXRpbmcgdGhpcy4gUGVyaGFwcyBJJ2xsIHVzZSBhIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG9vbCwgZXhwbG9yZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgb3Igc3RhcnQgd2l0aCBzb3VyY2UgY29kZSBpbnNwZWN0aW9uIHRvIGRldGVybWluZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGEgc3RyYXRlZ3kgdG8gc3RhcnQgdHJhY2luZyB0aGVzZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDIsIk91dHB1dFRva2VucyI6NzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODowMC42MTY0NTQwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzgxNDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgODEzOVRPT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTIwPWNvbmZpZyA4MTM5Q1BcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0zMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MzI6Y29uZmlnIDgxMzlUT09cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIlJlYWxUZWsgUlRMLTgxMjkvODEzMC84MTM5IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6NDQ6Y29uZmlnIDgxMzlUT09fUElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTQ1LVxcdGJvb2wgXFxcIlVzZSBQSU8gaW5zdGVhZCBvZiBNTUlPXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo1NDpjb25maWcgODEzOVRPT19UVU5FX1RXSVNURVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdW5jb21tb24gUlRMLTgxMzkgcmV2LiBLIChhdXRvbWF0aWMgY2hhbm5lbCBlcXVhbGl6YXRpb24pXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo2NTpjb25maWcgODEzOVRPT184MTI5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTY2LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIG9sZGVyIFJUTC04MTI5LzgxMzAgYm9hcmRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODowMC42OTAyODczMjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMyOlxcdGNvbmZpZyA4MTM5VE9PXFxuICAzMzpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVhbFRlayBSVEwtODEyOS84MTMwLzgxMzkgUENJIEZhc3QgRXRoZXJuZXQgQWRhcHRlciBzdXBwb3J0XFxcIlxcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDM1OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMzY6XFx0XFx0c2VsZWN0IE1JSVxcbiAgMzc6XFx0XFx0aGVscFxcbiAgMzg6XFx0XFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgRmFzdCBFdGhlcm5ldCBQQ0kgbmV0d29yayBjYXJkcyBiYXNlZCBvblxcbiAgMzk6XFx0XFx0ICB0aGUgUlRMIDgxMjkvODEzMC84MTM5IGNoaXBzLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhvc2UsIHNheSBZIGhlcmUuXFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNDI6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCA4MTM5dG9vLiAgVGhpcyBpcyByZWNvbW1lbmRlZC5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIDgxMzlUT09fUElPXFxuICA0NTpcXHRcXHRib29sIFxcXCJVc2UgUElPIGluc3RlYWQgb2YgTU1JT1xcXCJcXG4gIDQ2OlxcdFxcdGRlZmF1bHQgeVxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiA4MTM5VE9PIFxcdTAwMjZcXHUwMDI2ICFOT19JT1BPUlRfTUFQXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaW5zdHJ1Y3RzIHRoZSBkcml2ZXIgdG8gdXNlIHByb2dyYW1tZWQgSS9PIHBvcnRzIChQSU8pIGluc3RlYWRcXG4gIDUwOlxcdFxcdCAgb2YgUENJIHNoYXJlZCBtZW1vcnkgKE1NSU8pLiAgVGhpcyBjYW4gcG9zc2libHkgc29sdmUgc29tZSBwcm9ibGVtc1xcbiAgNTE6XFx0XFx0ICBpbiBjYXNlIHlvdXIgbWFpbmJvYXJkIGhhcyBtZW1vcnkgY29uc2lzdGVuY3kgaXNzdWVzLiAgSWYgdW5zdXJlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODowMC42OTA0MjI4NDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0NjU0NDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIE1pbm9yIE5ldHdvcmsgRHJpdmVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHRvIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGVmaW5pdGVseS4gV2UncmUgZml4aW5nIHBvdGVudGlhbCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcywgd2hpY2gsIGxldCdzIGJlIGhvbmVzdCwgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGNyYXNoZXMgb3IgZXZlbiBqdXN0IHN1YnRseSBpbmNvcnJlY3QgTUFDIGFkZHJlc3NlcyBvbiBjZXJ0YWluIGFyY2hpdGVjdHVyZXMuIFRoZSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgd2FycmFudHMgZnV6emluZyBhdHRlbnRpb24uXG5cbkl0J3MgYSBzdHJhaWdodGZvcndhcmQgZml4LCByZWFsbHkuIFN3YXBwaW5nIG91dCB0aGUgcmF3IGNhc3RzIGZvciBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAuIFByZXR0eSBjbGVhbi4gQnV0ICppcyogaXQgcmVhY2hhYmxlPyBZZXAsIHRocm91Z2ggYG5kb19zZXRfbWFjX2FkZHJlc3NgLiBHb29kLCBnb29kLiBPa2F5LCB3b3J0aCBmdXp6aW5nPyBZZXMsIGl04oCZcyBhIGJ1ZyBmaXggKHVuYWxpZ25lZCBhY2Nlc3MpIGFuZCBpdCBjaGFuZ2VzIGV4ZWN1dGlvbiBmbG93ICh1c2luZyB0aGUgdW5hbGlnbmVkIGFjY2VzcyBoZWxwZXJzIGlzIGRpZmZlcmVudCksIHNvIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5XYWl0IGEgc2Vjb25kLCB0aG91Z2guIExldCdzIHN0ZXAgYmFjay4gVGhlICpjb3JlKiBjaGFuZ2UgaXMganVzdCB0aGF0IHVuYWxpZ25lZCBhY2Nlc3MgZml4LiBSaWdodC4gU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IFllcyEgQmVjYXVzZSBpdCdzIHN0aWxsIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgKm1lYW50KiB0byBjaGFuZ2UgdGhlIGRyaXZlcidzIGJlaGF2aW91ciBhbmQgZml4IHNvbWV0aGluZywgc28gZXZlbiBzZWVtaW5nbHkgc2ltcGxlIGNoYW5nZXMgbmVlZCB0byBiZSB0ZXN0ZWQuIExldCdzIG1ha2Ugc3VyZSB3ZSBleGFtaW5lIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgY2FyZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDU4LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM4OjA2LjEzNjk2OTg3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NzY2MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bDgxMzlfc2V0X21hY19hZGRyZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTY0Nj1zdGF0aWMgdm9pZCBydGw4MTM5X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy02NDctI2VuZGlmXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6NjQ4OnN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtNjQ5LXN0YXRpYyBpbnQgcnRsODEzOV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz05MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTM5X25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjctXFx0Lm5kb192YWxpZGF0ZV9hZGRyXFx0PSBldGhfdmFsaWRhdGVfYWRkcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo5Mjg6XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXFx0PSBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjktXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBydGw4MTM5X3N0YXJ0X3htaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz0yMjA5PXN0YXRpYyB2b2lkIHJ0bDgxMzlfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMjE5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjIyMjA6c3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODowNi4yNTE3NDA2NThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NjE2ODgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLCB3aGljaCBJIGtub3cgaXMgdGhlIGBuZG9fc2V0X21hY19hZGRyZXNzYCBjYWxsYmFjay4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoYXQgaXQncyByZXBsYWNpbmcgdW5hbGlnbmVkIHBvaW50ZXIgY2FzdHMgd2l0aCBjYWxscyB0byBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggaXMgaW1wb3J0YW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYENPTkZJR184MTM5VE9PYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGNvbnNpZGVyOyB5ZXMgaXQgaXMuIFRoZSBmb2N1c2VkIHN5bWJvbCBpcyBkZWZpbml0ZWx5IGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AuXG5cbk5vdywgdGhlIHByb21wdCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggKm9ubHkqIGludm9sdmVzIGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgKmRvbid0KiBhbHRlciBleGVjdXRpb24gZmxvdy4gVGhhdCdzIHRoZSBjcnV4IG9mIGl0LiBEb2VzIHRoaXMgYWN0dWFsbHkgY2hhbmdlIGhvdyB0aGUgY29kZSAqcnVucyo/IE9uIHg4NiwgcHJvYmFibHkgbm90OyB0aG9zZSBjYWxscyBhcmUganVzdCBjYXN0cywgdGhlIHVuYWxpZ25lZCBhY2Nlc3MgaXMgaGFuZGxlZC4gSG93ZXZlciwgb24gYXJjaGl0ZWN0dXJlcyB0aGF0ICpkb24ndCogc3VwcG9ydCB1bmFsaWduZWQgYWNjZXNzLCBpdCBhYnNvbHV0ZWx5IGRvZXM6IGl0J3MgZG9pbmcgYnl0ZS1ieS1ieXRlIHJlYWRzLiBUaGlzIGlzIGFuIGltcG9ydGFudCBkaXN0aW5jdGlvbi5cblxuQnV0IHdhaXQsIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIGEgTUFDIGFkZHJlc3MuIFRoYXQncyA2IGJ5dGVzLiBJdCdzICpwcm9iYWJseSogYWxpZ25lZCB0byBhdCBsZWFzdCAyIGJ5dGVzLCBtYXliZSBldmVuIDQgYnl0ZXMsIGJ1dCBtYXliZSBub3Qgb24gYWxsIGFyY2hpdGVjdHVyZXMuXG5cbkkgbmVlZCB0byByZWNhbGwgdGhhdCBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgYXJlIGlubGluZSBmdW5jdGlvbnMvbWFjcm9zLiBTbyBpdCdzIHN0aWxsIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcywgaW4gZXNzZW5jZSwgYSBidWcgZml4IHRvIGhhbmRsZSB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5TbywgdGhlIGZvY3VzIHN5bWJvbCBpcyBzdGlsbCBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLiBJIHNob3VsZCBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGA4MTM5VE9PYCwgYW5kIG5vdyBJIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQncyBpdC4gWWVzLCBgODEzOVRPT2AgZGVwZW5kcyBvbiBgUENJYCwgYnV0IHRoYXQncyBhIHN0YW5kYXJkIGNvbmZpZywgc28gbm8gd29ycmllcyB0aGVyZS4gSSdtIGdvaW5nIHRvIGFkZCBgODEzOVRPT2AgdG8gdGhlIGZpbmFsIG91dHB1dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3MiwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6MTQuNTA3OTEyNTU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTU4MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI4MTM5VE9PXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODEzOV9zZXRfbWFjX2FkZHJlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI4MTM5VE9PXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODEzOV9zZXRfbWFjX2FkZHJlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6MTQuNjUxODc4MDA0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjc0NjI1MjIzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODoxNC42NTI0NDAyOTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzI3NDYxOTU0OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgaW5zdGVhZCBvZiBkaXJlY3RseSBjYXN0aW5nIGBkZXYtXFx1MDAzZWRldl9hZGRyYCB0byBgdTMyICpgIGFuZCBkZXJlZmVyZW5jaW5nIGl0LiBUaGUgb2xkIGNvZGUgcmVhZCA0IGJ5dGVzIGZyb20gYGRldi1cXHUwMDNlZGV2X2FkZHIgKyA0YCAoYnl0ZXMgNCwgNSwgNiwgYW5kIDcpLCB3aGljaCBsb2dpY2FsbHkgZXhjZWVkcyB0aGUgNi1ieXRlIE1BQyBhZGRyZXNzIGxlbmd0aC4gXFxuXFxuSG93ZXZlciwgYGRldi1cXHUwMDNlZGV2X2FkZHJgIHBvaW50cyB0byBgaGEtXFx1MDAzZWFkZHJgIHdpdGhpbiBhIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgLCB3aGljaCBpcyBhIDMyLWJ5dGUgYXJyYXkgKGBNQVhfQUREUl9MRU5gKS4gVGhpcyBlbnRpcmUgMzItYnl0ZSBhcnJheSBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYGRldl9hZGRyX2luaXQoKWAgdXNpbmcgYG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpYC4gQmVjYXVzZSB0aGUgcGFkZGluZyBieXRlcyAoYnl0ZXMgNiBhbmQgNykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHRvIHplcm8sIHJlYWRpbmcgdGhlbSBkb2VzIG5vdCBjb25zdGl0dXRlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGFueSBpc3N1ZSBoZXJlLlxcblxcbkZ1cnRoZXJtb3JlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGFsbG9jYXRpb24gaXMgMzIgYnl0ZXMsIEtBU0FOIGRvZXMgbm90IGRldGVjdCB0aGlzIGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBlaXRoZXIuIFRoZSBwYXRjaCBwcmltYXJpbHkgcmVzb2x2ZXMgYSBsb2dpY2FsIG91dC1vZi1ib3VuZHMgcmVhZCwgcG90ZW50aWFsIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMsIGFuZCBTcGFyc2Ugd2FybmluZ3MgcmVsYXRlZCB0byBlbmRpYW5uZXNzIHR5cGVzIChwYXNzaW5nIGBfX2xlMzJgIHRvIGBpb3dyaXRlMzJgIHdoaWNoIGV4cGVjdHMgYHUzMmApLiBcXG5cXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkNWRkMzIzYTdmMzYwZDFhNjkwMWNhYzA4NTFiMzM0NzU0ZjY0YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxMzozNzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNcbmluZGV4IDgyNDFiY2Y3NjY2NDQuLjE3MzY1OTlkNzI0NDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNcbkBAIC0xMTIsNiArMTEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9pcnEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gXG4gLyogRGVmYXVsdCBNZXNzYWdlIGxldmVsICovXG4gI2RlZmluZSBSVEw4MTM5X0RFRl9NU0dfRU5BQkxFICAgKE5FVElGX01TR19EUlYgICB8IFxcXG5AQCAtMjIzMCw4ICsyMjMxLDggQEAgc3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0cC1cdTAwM2Vsb2NrKTtcbiBcbiBcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTtcbi1cdFJUTF9XMzJfRihNQUMwICsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtXHUwMDNlZGV2X2FkZHIgKyAwKSkpO1xuLVx0UlRMX1czMl9GKE1BQzAgKyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciArIDQpKSk7XG4rXHRSVExfVzMyX0YoTUFDMCArIDAsIGdldF91bmFsaWduZWRfbGUzMihkZXYtXHUwMDNlZGV2X2FkZHIpKTtcbitcdFJUTF9XMzJfRihNQUMwICsgNCwgZ2V0X3VuYWxpZ25lZF9sZTE2KGRldi1cdTAwM2VkZXZfYWRkciArIDQpKTtcbiBcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7XG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2dHAtXHUwMDNlbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODoxNC42NTI0NDEyMDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY3MzUxMjUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWFsdGVrIEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgZnVuY3Rpb24gd2l0aGluIHRoZSBgODEzOXRvby5jYCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrYCBkaXJlY3RvcnkuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyB3cml0dGVuIHRvIHRoZSBSZWFsdGVrIDgxMzkncyBoYXJkd2FyZSByZWdpc3RlcnMuXG5cbkluaXRpYWxseSwgdGhlIGNvZGUgd2FzIG1ha2luZyB1bmFsaWduZWQgYWNjZXNzZXMgd2l0aCB0aGVzZSBsaW5lczpcblxuYGBgY1xuXHRSVExfVzMyX0YoTUFDMCArIDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICsgMCkpKTtcblx0UlRMX1czMl9GKE1BQzAgKyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciArIDQpKSk7XG5gYGBcblxuQW5kIG5vdyBpdCBpcyB0aGlzOlxuXG5gYGBjXG5cdFJUTF9XMzJfRihNQUMwICsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi1cdTAwM2VkZXZfYWRkcikpO1xuXHRSVExfVzMyX0YoTUFDMCArIDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtXHUwMDNlZGV2X2FkZHIgKyA0KSk7XG5gYGBcblxuVGhlIGtleSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlLCB3aGVuIHJlYWRpbmcgYXQgdGhlIG9mZnNldCBgZGV2LVx1MDAzZWRldl9hZGRyICsgNGAsIHdhcyBhdHRlbXB0aW5nIHRvIHJlYWQgYSA0LWJ5dGUgdmFsdWUgKGB1MzJgKS4gSG93ZXZlciwgYSBzdGFuZGFyZCBNQUMgYWRkcmVzcyBpcyBvbmx5IDYgYnl0ZXMgbG9uZy4gVGhpcyBtZWFucyB0aGUgY29kZSB3YXMgcG90ZW50aWFsbHkgcmVhZGluZyBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGUgTUFDIGFkZHJlc3MgYnVmZmVyLlxuXG5TcGVjaWZpY2FsbHksIGlmIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIGEgNi1ieXRlIGFycmF5LCB0aGVuIGBkZXYtXHUwMDNlZGV2X2FkZHIgKyA0YCBwb2ludHMgdG8gdGhlIGxhc3QgdHdvIGJ5dGVzLiBSZWFkaW5nIGEgYHUzMmAgZnJvbSB0aGF0IGxvY2F0aW9uIHdvdWxkIGhhdmUgcmVhZCBieXRlcyA0LCA1LCA2LCBhbmQgNywgd2hpY2ggbWVhbnMgdGhhdCBieXRlcyA2IGFuZCA3IHdlcmUgb3V0IG9mIGJvdW5kcy4gVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuIEtBU0FOICpzaG91bGQqIGJlIGFibGUgdG8gY2F0Y2ggdGhpcyBzb3J0IG9mIHRoaW5nLCBlc3BlY2lhbGx5IGlmIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIHBsYWNlZCBhdCB0aGUgZW5kIG9mIGFuIGFsbG9jYXRpb24uXG5cblRoaW5raW5nIHRoaXMgdGhyb3VnaCwgYGRldi1cdTAwM2VkZXZfYWRkcmAgaW4gYSBgbmV0X2RldmljZWAgc3RydWN0IGlzICp1c3VhbGx5KiBhIHBvaW50ZXIgdG8gYSBidWZmZXIuIEhvd2V2ZXIsIG1vZGVybiBrZXJuZWxzIG9mdGVuIGFsbG9jYXRlIHNwYWNlIGlubGluZSBhcyBhbiBhcnJheSwgbGlrZWx5IGBNQVhfQUREUl9MRU5gIGJ5dGVzIChvZnRlbiAzMikuIFRoaXMgaXMgY3JpdGljYWwuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBuZXRfZGV2aWNlYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGJ1ZmZlcidzIHNpemUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgcHJvYmxlbS5cblxuVGhlIHBhdGNoIGlzIGZpeGluZyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIGVycm9yLiBUaGUgY2hhbmdlIHRvIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCBjb3JyZWN0cyB0aGUgb3ZlcnJlYWQ6IDQgYnl0ZXMgLVx1MDAzZSAyIGJ5dGVzLiBUaGlzIG1ha2VzIHRoZSBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHdoYXQgaXQncyBzdXBwb3NlZCB0byBhY2Nlc3MsIHdoaWNoIGlzIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MuIEdvb2QgY2F0Y2gsIGFuZCB0aGUgZml4IGxvb2tzIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6MjMuMzI1OTU3ODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTM4ODg0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnNpZ25lZCBjaGFyLipkZXZfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOTYtXFx0LyogSW50ZXJmYWNlIGFkZHJlc3MgaW5mbyB1c2VkIGluIGV0aF90eXBlX3RyYW5zKCkgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzOTc6XFx0Y29uc3QgdW5zaWduZWQgY2hhclxcdCpkZXZfYWRkcjtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOTgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMzMTA9c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvIHtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMzMTEtXFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9pbmZvIGluZm87IC8qIG11c3QgYmUgZmlyc3QgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMzMTI6XFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGV2X2FkZHI7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMzEzLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM4OjIzLjQ0NTM1MDkzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzExODM2MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGRldl9hZGRyYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGBkZXZfYWRkcmAgaXMgY2xlYXJseSBhIHBvaW50ZXIuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGRvZXMgdGhpcyBwb2ludGVyIGFjdHVhbGx5IHBvaW50PyBJcyBpdCBqdXN0IGEgY29udmVuaWVudCB3cmFwcGVyIGZvciBzb21ldGhpbmcgYWxyZWFkeSB3aXRoaW4gdGhlIGBkZXZgIHN0cnVjdHVyZSwgbGlrZSBwZXJoYXBzIGBkZXYtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZWAsIG9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIHNpZ25pZmljYW50PyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgaXQncyBwcm9iYWJseSAqbm90KiBqdXN0IGEgZGlyZWN0IGxpbmsgdG8gYW4gZXhpc3RpbmcgbWVtYmVyLiBJdCdzIG1vcmUgbGlrZWx5IGVpdGhlciBwb2ludGluZyB0byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgb3IsIG1vcmUgY29udGV4dHVhbGx5LCBzb21lIHJlZ2lvbiAqaW5zaWRlKiB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdHVyZSBpdHNlbGYuXG5cblRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBpcyB0byBwaW5wb2ludCB0aGUgYWxsb2NhdGlvbiBvZiBgZGV2X2FkZHJgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBsaWUuIEtub3dpbmcgd2hlcmUgaXQncyBhbGxvY2F0ZWQgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgYWJvdXQgaXRzIGV4cGVjdGVkIGxpZmV0aW1lLCBzY29wZSwgYW5kIGhvdyBJIHNob3VsZCBiZSB0cmVhdGluZyB0aGUgbWVtb3J5IGl0IHJlZmVyZW5jZXMuIFRpbWUgdG8gdHJhY2sgZG93biB0aGF0IGFsbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODoyNy4xNTcxODkxMDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTQzODAwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkciA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTEwMDIwPWludCBuZXRpZl9wcmVfY2hhbmdlYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwMDI1LVxcdFxcdC5pbmZvLmV4dGFjayA9IGV4dGFjayxcXG5uZXQvY29yZS9kZXYuYzoxMDAyNjpcXHRcXHQuZGV2X2FkZHIgPSBhZGRyLFxcbm5ldC9jb3JlL2Rldi5jLTEwMDI3LVxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM4OjI3LjI2MjYzMTkyNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzc3NTM1MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBhbGxvY19uZXRkZXZfbXFzYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbXVsdGktcXVldWUgZGV2aWNlIGFsbG9jYXRpb24gaXMgaGFuZGxlZC4gVGltZSB0byBkaWcgaW50byB0aGUgYGFsbG9jX25ldGRldl9tcXNgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2NvcmUvZGV2LmNgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLCBkZXRlcm1pbmluZyB0aGUgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzIGFuZCBhbGxvY2F0aW5nIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGZvciBtdWx0aXBsZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBxdWV1ZXMuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGhvdyBpdCBjYWxjdWxhdGVzIHF1ZXVlIG51bWJlcnMgYmFzZWQgb24gTklDIGNhcGFiaWxpdGllcywgYW5kIGhvdyBpdCBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24gZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IHNldHMgdXAgdGhlIGBuZXRfZGV2aWNlYCBzdHJ1Y3QgYW5kIGluaXRpYWxpemVzIHRoZSByZWxldmFudCBtZW1iZXJzIHRvIGhhbmRsZSB0aGUgbXVsdGktcXVldWUgZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgaXQgbWFuYWdlcyB0aGUgaXJxIGFsbG9jYXRpb25zIGFuZCBiaW5kaW5nIHRvIHRoZSBxdWV1ZXMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB3aGVyZSBJJ2xsIGZpbmQgY2x1ZXMgdG8gYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgcGFydGljdWxhcmx5IHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcG90ZW50aWFsIGZhbGxiYWNrIG1lY2hhbmlzbXMgaWYgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcXVldWVzIGNhbm5vdCBiZSBhbGxvY2F0ZWQuIFJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM4OjM1LjY0MDE3MDcwOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzODU3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NTI2PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbmV0ZGV2X3htaXRfbG9ja19rZXlbQVJSQVlfU0laRShuZXRkZXZfbG9ja190eXBlKV07XFxubmV0L2NvcmUvZGV2LmM6NTI3OnN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbmV0ZGV2X2FkZHJfbG9ja19rZXlbQVJSQVlfU0laRShuZXRkZXZfbG9ja190eXBlKV07XFxubmV0L2NvcmUvZGV2LmMtNTI4LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfc2V0X2FkZHJfbG9ja2RlcF9jbGFzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTU2LVxcdGxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKFxcdTAwMjZkZXYtXFx1MDAzZWFkZHJfbGlzdF9sb2NrLFxcbm5ldC9jb3JlL2Rldi5jOjU1NzpcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmV0ZGV2X2FkZHJfbG9ja19rZXlbaV0sXFxubmV0L2NvcmUvZGV2LmMtNTU4LVxcdFxcdFxcdFxcdCAgIG5ldGRldl9sb2NrX25hbWVbaV0pO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIxNj1pbnQgbmV0ZGV2X2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgaW50IGlmaW5kZXgpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjM2LVxcbm5ldC9jb3JlL2Rldi5jOjEyMzc6c3RhdGljIGJvb2wgZGV2X2FkZHJfY21wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHR5cGUsXFxubmV0L2NvcmUvZGV2LmMtMTIzOC1cXHRcXHRcXHQgY29uc3QgY2hhciAqaGEpXFxubmV0L2NvcmUvZGV2LmMtMTIzOS17XFxubmV0L2NvcmUvZGV2LmM6MTI0MDpcXHRyZXR1cm4gZGV2LVxcdTAwM2V0eXBlID09IHR5cGUgXFx1MDAyNlxcdTAwMjYgIW1lbWNtcChkZXYtXFx1MDAzZWRldl9hZGRyLCBoYSwgZGV2LVxcdTAwM2VhZGRyX2xlbik7XFxubmV0L2NvcmUvZGV2LmMtMTI0MS19XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjU3PXN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0Ynlod2FkZHJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyNjItXFx0Zm9yX2VhY2hfbmV0ZGV2X3JjdShuZXQsIGRldilcXG5uZXQvY29yZS9kZXYuYzoxMjYzOlxcdFxcdGlmIChkZXZfYWRkcl9jbXAoZGV2LCB0eXBlLCBoYSkpXFxubmV0L2NvcmUvZGV2LmMtMTI2NC1cXHRcXHRcXHRyZXR1cm4gZGV2O1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTI4Mj1zdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldGJ5aHdhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyODgtXFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KVxcbm5ldC9jb3JlL2Rldi5jOjEyODk6XFx0XFx0aWYgKGRldl9hZGRyX2NtcChkZXYsIHR5cGUsIGhhKSlcXG5uZXQvY29yZS9kZXYuYy0xMjkwLVxcdFxcdFxcdHJldHVybiBkZXY7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xNjg5PXN0YXRpYyBpbnQgX19kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xNjk0LVxcdEFTU0VSVF9SVE5MKCk7XFxubmV0L2NvcmUvZGV2LmM6MTY5NTpcXHRkZXZfYWRkcl9jaGVjayhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTE2OTYtXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xNzMzLVxcdFxcdGRldl9hY3RpdmF0ZShkZXYpO1xcbm5ldC9jb3JlL2Rldi5jOjE3MzQ6XFx0XFx0YWRkX2RldmljZV9yYW5kb21uZXNzKGRldi1cXHUwMDNlZGV2X2FkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldi5jLTE3MzUtXFx0fVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTUwNj11MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTU0MS1cXHRldGggPSAoc3RydWN0IGV0aGhkciAqKXhkcC1cXHUwMDNlZGF0YTtcXG5uZXQvY29yZS9kZXYuYzo1NTQyOlxcdG9yaWdfaG9zdCA9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cXHUwMDNlaF9kZXN0LCBza2ItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbm5ldC9jb3JlL2Rldi5jLTU1NDMtXFx0b3JpZ19iY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyXzY0Yml0cyhldGgtXFx1MDAzZWhfZGVzdCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NTgyLVxcdCAgICAob3JpZ19ob3N0ICE9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cXHUwMDNlaF9kZXN0LFxcbm5ldC9jb3JlL2Rldi5jOjU1ODM6XFx0XFx0XFx0XFx0XFx0XFx0ICBza2ItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpKSB8fFxcbm5ldC9jb3JlL2Rldi5jLTU1ODQtXFx0ICAgIChvcmlnX2JjYXN0ICE9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyXzY0Yml0cyhldGgtXFx1MDAzZWhfZGVzdCkpKSB7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDAyMD1pbnQgbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFkZHIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDAyNS1cXHRcXHQuaW5mby5leHRhY2sgPSBleHRhY2ssXFxubmV0L2NvcmUvZGV2LmM6MTAwMjY6XFx0XFx0LmRldl9hZGRyID0gYWRkcixcXG5uZXQvY29yZS9kZXYuYy0xMDAyNy1cXHR9O1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTAwMzU9aW50IG5ldGlmX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc3MsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDA0OS1cXHRcXHRyZXR1cm4gZXJyO1xcbm5ldC9jb3JlL2Rldi5jOjEwMDUwOlxcdGlmIChtZW1jbXAoZGV2LVxcdTAwM2VkZXZfYWRkciwgc3MtXFx1MDAzZV9fZGF0YSwgZGV2LVxcdTAwM2VhZGRyX2xlbikpIHtcXG5uZXQvY29yZS9kZXYuYy0xMDA1MS1cXHRcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcyk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDA1Ni1cXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7XFxubmV0L2NvcmUvZGV2LmM6MTAwNTc6XFx0YWRkX2RldmljZV9yYW5kb21uZXNzKGRldi1cXHUwMDNlZGV2X2FkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldi5jLTEwMDU4LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTAwNjAtXFxubmV0L2NvcmUvZGV2LmM6MTAwNjE6REVDTEFSRV9SV1NFTShkZXZfYWRkcl9zZW0pO1xcbm5ldC9jb3JlL2Rldi5jLTEwMDYyLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTAwNjQ9aW50IG5ldGlmX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmRldl9uYW1lKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTAwNjktXFxubmV0L2NvcmUvZGV2LmM6MTAwNzA6XFx0ZG93bl9yZWFkKFxcdTAwMjZkZXZfYWRkcl9zZW0pO1xcbm5ldC9jb3JlL2Rldi5jLTEwMDcxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwMDgwLVxcdGVsc2VcXG5uZXQvY29yZS9kZXYuYzoxMDA4MTpcXHRcXHRtZW1jcHkoc2EtXFx1MDAzZXNhX2RhdGEsIGRldi1cXHUwMDNlZGV2X2FkZHIsXFxubmV0L2NvcmUvZGV2LmMtMTAwODItXFx0XFx0ICAgICAgIG1pbl90KHNpemVfdCwgc2l6ZSwgZGV2LVxcdTAwM2VhZGRyX2xlbikpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTAwODYtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubmV0L2NvcmUvZGV2LmM6MTAwODc6XFx0dXBfcmVhZChcXHUwMDI2ZGV2X2FkZHJfc2VtKTtcXG5uZXQvY29yZS9kZXYuYy0xMDA4OC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTEzODQ9aW50IHJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTE1MjktXFxubmV0L2NvcmUvZGV2LmM6MTE1MzA6XFx0YWRkX2RldmljZV9yYW5kb21uZXNzKGRldi1cXHUwMDNlZGV2X2FkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldi5jLTExNTMxLVxcbm5ldC9jb3JlL2Rldi5jLTExNTMyLVxcdC8qIElmIHRoZSBkZXZpY2UgaGFzIHBlcm1hbmVudCBkZXZpY2UgYWRkcmVzcywgZHJpdmVyIHNob3VsZFxcbm5ldC9jb3JlL2Rldi5jOjExNTMzOlxcdCAqIHNldCBkZXZfYWRkciBhbmQgYWxzbyBhZGRyX2Fzc2lnbl90eXBlIHNob3VsZCBiZSBzZXQgdG9cXG5uZXQvY29yZS9kZXYuYy0xMTUzNC1cXHQgKiBORVRfQUREUl9QRVJNIChkZWZhdWx0IHZhbHVlKS5cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTExNTM2LVxcdGlmIChkZXYtXFx1MDAzZWFkZHJfYXNzaWduX3R5cGUgPT0gTkVUX0FERFJfUEVSTSlcXG5uZXQvY29yZS9kZXYuYzoxMTUzNzpcXHRcXHRtZW1jcHkoZGV2LVxcdTAwM2VwZXJtX2FkZHIsIGRldi1cXHUwMDNlZGV2X2FkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldi5jLTExNTM4LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIwOTQ9c3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIxMzMtXFxubmV0L2NvcmUvZGV2LmM6MTIxMzQ6XFx0aWYgKGRldl9hZGRyX2luaXQoZGV2KSlcXG5uZXQvY29yZS9kZXYuYy0xMjEzNS1cXHRcXHRnb3RvIGZyZWVfcGNwdTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyMjU5PXZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyMjgzLVxcdC8qIEZsdXNoIGRldmljZSBhZGRyZXNzZXMgKi9cXG5uZXQvY29yZS9kZXYuYzoxMjI4NDpcXHRkZXZfYWRkcl9mbHVzaChkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTEyMjg1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODozNS43MDg1NjIwMDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg1NjcwNzI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gZGV2X2FkZHJfaW5pdCoqXG5cbk9rYXksIHNvIGBkZXZfYWRkcl9pbml0YCBpcyB1cC4gTGV0J3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIE15IHRhc2sgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGUgYGRldl9hZGRyYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YWx1ZXMgb3IgcHJvY2Vzc2VzIGl0IGludm9sdmVzIGFuZCB3aGF0IGVmZmVjdCB0aGlzIGluaXRpYWxpemF0aW9uIGhhcyBvbiB0aGUgc3lzdGVtLiBUaW1lIHRvIGdvIGxpbmUtYnktbGluZS4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6NDUuNTY1MjcyNjM4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzkyMjMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkcl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02NjE9dm9pZCBkZXZfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NzAtLyoqXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2NzE6ICpcXHRkZXZfYWRkcl9pbml0IC0gSW5pdCBkZXZpY2UgYWRkcmVzcyBsaXN0XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NzItICpcXHRAZGV2OiBkZXZpY2VcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjc4LSAqL1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njc5OmludCBkZXZfYWRkcl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02ODAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODo0NS42NDkxOTkyOTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MTY5NzIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgZGV2X2FkZHJfaW5pdGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBteSBtaW5kIGlzOiBcIkxldCdzIHJlYWQgYGRldl9hZGRyX2luaXRgLlwiIFNpbXBsZSwgZGlyZWN0LCBhbmQgcHJhZ21hdGljLiBBcyBhbiBleHBlcnQsIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMgYWJvdXQgd2hhdCB0aGlzIGZ1bmN0aW9uICptaWdodCogYmUgZG9pbmcuIEJhc2VkIG9uIHRoZSBuYW1lLCBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGRldmljZSBhZGRyZXNzIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSdtIGxpa2VseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYWRkcmVzc2VzIGFyZSBzZXQsIGlmIHRoZXkgYXJlIGRldGVybWluZWQgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSwgaG93IGNvbmZsaWN0cyBhcmUgaGFuZGxlZCwgYW5kIHdoYXQgZXJyb3IgY2hlY2tpbmcgaXMgaW4gcGxhY2UuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgbXkgYXNzdW1wdGlvbnMgaG9sZCB0cnVlIGFuZCBzdGFydCB0byBidWlsZCBhbiBtZW50YWwgbWFwIG9mIGhvdyB0aGlzIHBpZWNlcyBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTcwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6NDkuMDMwODk5MzQyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3MDpcXHQvKipcXG4gNjcxOlxcdCAqXFx0ZGV2X2FkZHJfaW5pdCAtIEluaXQgZGV2aWNlIGFkZHJlc3MgbGlzdFxcbiA2NzI6XFx0ICpcXHRAZGV2OiBkZXZpY2VcXG4gNjczOlxcdCAqXFxuIDY3NDpcXHQgKlxcdEluaXQgZGV2aWNlIGFkZHJlc3MgbGlzdCBhbmQgY3JlYXRlIHRoZSBmaXJzdCBlbGVtZW50LFxcbiA2NzU6XFx0ICpcXHR1c2VkIGJ5IC1cXHUwMDNlZGV2X2FkZHIuXFxuIDY3NjpcXHQgKlxcbiA2Nzc6XFx0ICpcXHRUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcnRubF9tdXRleC5cXG4gNjc4OlxcdCAqL1xcbiA2Nzk6XFx0aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNjgwOlxcdHtcXG4gNjgxOlxcdFxcdHVuc2lnbmVkIGNoYXIgYWRkcltNQVhfQUREUl9MRU5dO1xcbiA2ODI6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4gNjgzOlxcdFxcdGludCBlcnI7XFxuIDY4NDpcXHRcXG4gNjg1OlxcdFxcdC8qIHJ0bmxfbXV0ZXggbXVzdCBiZSBoZWxkIGhlcmUgKi9cXG4gNjg2OlxcdFxcbiA2ODc6XFx0XFx0X19od19hZGRyX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzKTtcXG4gNjg4OlxcdFxcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xcbiA2ODk6XFx0XFx0ZXJyID0gX19od19hZGRyX2FkZChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMsIGFkZHIsIHNpemVvZihhZGRyKSxcXG4gNjkwOlxcdFxcdFxcdFxcdCAgICBORVRERVZfSFdfQUREUl9UX0xBTik7XFxuIDY5MTpcXHRcXHRpZiAoIWVycikge1xcbiA2OTI6XFx0XFx0XFx0LypcXG4gNjkzOlxcdFxcdFxcdCAqIEdldCB0aGUgZmlyc3QgKHByZXZpb3VzbHkgY3JlYXRlZCkgYWRkcmVzcyBmcm9tIHRoZSBsaXN0XFxuIDY5NDpcXHRcXHRcXHQgKiBhbmQgc2V0IGRldl9hZGRyIHBvaW50ZXIgdG8gdGhpcyBsb2NhdGlvbi5cXG4gNjk1OlxcdFxcdFxcdCAqL1xcbiA2OTY6XFx0XFx0XFx0aGEgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycy5saXN0LFxcbiA2OTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyLCBsaXN0KTtcXG4gNjk4OlxcdFxcdFxcdGRldi1cXHUwMDNlZGV2X2FkZHIgPSBoYS1cXHUwMDNlYWRkcjtcXG4gNjk5OlxcdFxcdH1cXG4gNzAwOlxcdFxcdHJldHVybiBlcnI7XFxuIDcwMTpcXHR9XFxuIDcwMjpcXHRcXG4gNzAzOlxcdHZvaWQgZGV2X2FkZHJfbW9kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsXFxuIDcwNDpcXHRcXHRcXHQgIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXFxuIDcwNTpcXHR7XFxuIDcwNjpcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbiA3MDc6XFx0XFxuIDcwODpcXHRcXHRkZXZfYWRkcl9jaGVjayhkZXYpO1xcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRoYSA9IGNvbnRhaW5lcl9vZihkZXYtXFx1MDAzZWRldl9hZGRyLCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIGFkZHJbMF0pO1xcbiA3MTE6XFx0XFx0cmJfZXJhc2UoXFx1MDAyNmhhLVxcdTAwM2Vub2RlLCBcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMudHJlZSk7XFxuIDcxMjpcXHRcXHRtZW1jcHkoXFx1MDAyNmhhLVxcdTAwM2VhZGRyW29mZnNldF0sIGFkZHIsIGxlbik7XFxuIDcxMzpcXHRcXHRtZW1jcHkoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJfc2hhZG93W29mZnNldF0sIGFkZHIsIGxlbik7XFxuIDcxNDpcXHRcXHRXQVJOX09OKF9faHdfYWRkcl9pbnNlcnQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBoYSwgZGV2LVxcdTAwM2VhZGRyX2xlbikpO1xcbiA3MTU6XFx0fVxcbiA3MTY6XFx0RVhQT1JUX1NZTUJPTChkZXZfYWRkcl9tb2QpO1xcbiA3MTc6XFx0XFxuIDcxODpcXHQvKipcXG4gNzE5OlxcdCAqXFx0ZGV2X2FkZHJfYWRkIC0gQWRkIGEgZGV2aWNlIGFkZHJlc3NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6NDkuMDMxMDQ0NjAyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NDk0OTQ2NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGRldmljZSBkcml2ZXIgZGV2ZWxvcG1lbnQ6XG5cbioqQW5hbHl6aW5nIEFkZHJlc3MgQWxsb2NhdGlvbiBpbiB0aGUgRHJpdmVyKipcblxuUmlnaHQsIHNvIGBkZXYtXHUwMDNlZGV2X2FkZHJgLCB0aGF0IGRldmljZSBhZGRyZXNzIHBvaW50ZXIsIGl0J3MgYWN0dWFsbHkgcG9pbnRpbmcgZGlyZWN0bHkgdG8gYGhhLVx1MDAzZWFkZHJgLiAgQW5kIEkgcmVtZW1iZXIgZnJvbSBteSBkaWdnaW5nIGFyb3VuZCwgYGhhLVx1MDAzZWFkZHJgIGl0c2VsZiBnZXRzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGBfX2h3X2FkZHJfYWRkYCBmdW5jdGlvbi4gIFRoYXQncyB0aGUga2V5IGNvbm5lY3Rpb24uIFNvIHRoZSBkZXZpY2UgYWRkcmVzcyBpc24ndCBqdXN0IGZsb2F0aW5nIG91dCB0aGVyZSwgaXTigJlzIGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGhhcmR3YXJlIGFkZHJlc3Mgc3RydWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGFsbG9jYXRpb24gZGV0YWlscyBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGVyZSwgd2hpY2ggbWVhbnMgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBfX2h3X2FkZHJfYWRkYCBmdW5jdGlvbi4gSSB3aWxsIGNoZWNrIGZvciBhbnkgcGVjdWxpYXJpdGllcyB0aGF0IG1heSBoYXZlIGNvbWUgdXAgZHVyaW5nIGRlYnVnZ2luZyBwcmV2aW91c2x5LiBMZXQncyBzZWUgaG93IHRoYXQgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM5OjEzLjUyNTk5NDE4M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIG5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMgLSBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIG5ldCBkZXZpY2UgbGlzdHNcXG4gICA0OlxcdCAqIENvcHlyaWdodCAoYykgMjAxMCBKaXJpIFBpcmtvIFxcdTAwM2NqcGlya29AcmVkaGF0LmNvbVxcdTAwM2VcXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKiBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggdW5pY2FzdCwgbXVsdGljYXN0IGFuZCBkZXZpY2VcXG4gICA3OlxcdCAqIGFkZHJlc3NlcyBsaXN0cy5cXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXFx1MDAzZVxcbiAgMTY6XFx0XFxuICAxNzpcXHQjaW5jbHVkZSBcXFwiZGV2LmhcXFwiXFxuICAxODpcXHRcXG4gIDE5OlxcdC8qXFxuICAyMDpcXHQgKiBHZW5lcmFsIGxpc3QgaGFuZGxpbmcgZnVuY3Rpb25zXFxuICAyMTpcXHQgKi9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0c3RhdGljIGludCBfX2h3X2FkZHJfaW5zZXJ0KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbiAgMjQ6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqbmV3LCBpbnQgYWRkcl9sZW4pXFxuICAyNTpcXHR7XFxuICAyNjpcXHRcXHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFxcdTAwMjZsaXN0LVxcdTAwM2V0cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMO1xcbiAgMjc6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0d2hpbGUgKCppbnNfcG9pbnQpIHtcXG4gIDMwOlxcdFxcdFxcdGludCBkaWZmO1xcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRcXHRoYSA9IHJiX2VudHJ5KCppbnNfcG9pbnQsIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbm9kZSk7XFxuICAzMzpcXHRcXHRcXHRkaWZmID0gbWVtY21wKG5ldy1cXHUwMDNlYWRkciwgaGEtXFx1MDAzZWFkZHIsIGFkZHJfbGVuKTtcXG4gIDM0OlxcdFxcdFxcdGlmIChkaWZmID09IDApXFxuICAzNTpcXHRcXHRcXHRcXHRkaWZmID0gbWVtY21wKFxcdTAwMjZuZXctXFx1MDAzZXR5cGUsIFxcdTAwMjZoYS1cXHUwMDNldHlwZSwgc2l6ZW9mKG5ldy1cXHUwMDNldHlwZSkpO1xcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHRcXHRwYXJlbnQgPSAqaW5zX3BvaW50O1xcbiAgMzg6XFx0XFx0XFx0aWYgKGRpZmYgXFx1MDAzYyAwKVxcbiAgMzk6XFx0XFx0XFx0XFx0aW5zX3BvaW50ID0gXFx1MDAyNnBhcmVudC1cXHUwMDNlcmJfbGVmdDtcXG4gIDQwOlxcdFxcdFxcdGVsc2UgaWYgKGRpZmYgXFx1MDAzZSAwKVxcbiAgNDE6XFx0XFx0XFx0XFx0aW5zX3BvaW50ID0gXFx1MDAyNnBhcmVudC1cXHUwMDNlcmJfcmlnaHQ7XFxuICA0MjpcXHRcXHRcXHRlbHNlXFxuICA0MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gIDQ0OlxcdFxcdH1cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0cmJfbGlua19ub2RlX3JjdShcXHUwMDI2bmV3LVxcdTAwM2Vub2RlLCBwYXJlbnQsIGluc19wb2ludCk7XFxuICA0NzpcXHRcXHRyYl9pbnNlcnRfY29sb3IoXFx1MDAyNm5ldy1cXHUwMDNlbm9kZSwgXFx1MDAyNmxpc3QtXFx1MDAzZXRyZWUpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRyZXR1cm4gMDtcXG4gIDUwOlxcdH1cXG4gIDUxOlxcdFxcbiAgNTI6XFx0c3RhdGljIHN0cnVjdCBuZXRkZXZfaHdfYWRkcipcXG4gIDUzOlxcdF9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbiAgNTQ6XFx0XFx0XFx0IHVuc2lnbmVkIGNoYXIgYWRkcl90eXBlLCBib29sIGdsb2JhbCwgYm9vbCBzeW5jKVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4gIDU3OlxcdFxcdGludCBhbGxvY19zaXplO1xcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHRhbGxvY19zaXplID0gc2l6ZW9mKCpoYSk7XFxuICA2MDpcXHRcXHRpZiAoYWxsb2Nfc2l6ZSBcXHUwMDNjIEwxX0NBQ0hFX0JZVEVTKVxcbiAgNjE6XFx0XFx0XFx0YWxsb2Nfc2l6ZSA9IEwxX0NBQ0hFX0JZVEVTO1xcbiAgNjI6XFx0XFx0aGEgPSBrbWFsbG9jKGFsbG9jX3NpemUsIEdGUF9BVE9NSUMpO1xcbiAgNjM6XFx0XFx0aWYgKCFoYSlcXG4gIDY0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgNjU6XFx0XFx0bWVtY3B5KGhhLVxcdTAwM2VhZGRyLCBhZGRyLCBhZGRyX2xlbik7XFxuICA2NjpcXHRcXHRoYS1cXHUwMDNldHlwZSA9IGFkZHJfdHlwZTtcXG4gIDY3OlxcdFxcdGhhLVxcdTAwM2VyZWZjb3VudCA9IDE7XFxuICA2ODpcXHRcXHRoYS1cXHUwMDNlZ2xvYmFsX3VzZSA9IGdsb2JhbDtcXG4gIDY5OlxcdFxcdGhhLVxcdTAwM2VzeW5jZWQgPSBzeW5jID8gMSA6IDA7XFxuICA3MDpcXHRcXHRoYS1cXHUwMDNlc3luY19jbnQgPSAwO1xcbiAgNzE6XFx0XFxuICA3MjpcXHRcXHRyZXR1cm4gaGE7XFxuICA3MzpcXHR9XFxuICA3NDpcXHRcXG4gIDc1OlxcdHN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG4gIDc2OlxcdFxcdFxcdFxcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuICA3NzpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUsIGJvb2wgZ2xvYmFsLCBib29sIHN5bmMsXFxuICA3ODpcXHRcXHRcXHRcXHQgICAgaW50IHN5bmNfY291bnQsIGJvb2wgZXhjbHVzaXZlKVxcbiAgNzk6XFx0e1xcbiAgODA6XFx0XFx0c3RydWN0IHJiX25vZGUgKippbnNfcG9pbnQgPSBcXHUwMDI2bGlzdC1cXHUwMDNldHJlZS5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDtcXG4gIDgxOlxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdGlmIChhZGRyX2xlbiBcXHUwMDNlIE1BWF9BRERSX0xFTilcXG4gIDg0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHR3aGlsZSAoKmluc19wb2ludCkge1xcbiAgODc6XFx0XFx0XFx0aW50IGRpZmY7XFxuICA4ODpcXHRcXG4gIDg5OlxcdFxcdFxcdGhhID0gcmJfZW50cnkoKmluc19wb2ludCwgc3RydWN0IG5ldGRldl9od19hZGRyLCBub2RlKTtcXG4gIDkwOlxcdFxcdFxcdGRpZmYgPSBtZW1jbXAoYWRkciwgaGEtXFx1MDAzZWFkZHIsIGFkZHJfbGVuKTtcXG4gIDkxOlxcdFxcdFxcdGlmIChkaWZmID09IDApXFxuICA5MjpcXHRcXHRcXHRcXHRkaWZmID0gbWVtY21wKFxcdTAwMjZhZGRyX3R5cGUsIFxcdTAwMjZoYS1cXHUwMDNldHlwZSwgc2l6ZW9mKGFkZHJfdHlwZSkpO1xcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHRcXHRwYXJlbnQgPSAqaW5zX3BvaW50O1xcbiAgOTU6XFx0XFx0XFx0aWYgKGRpZmYgXFx1MDAzYyAwKSB7XFxuICA5NjpcXHRcXHRcXHRcXHRpbnNfcG9pbnQgPSBcXHUwMDI2cGFyZW50LVxcdTAwM2VyYl9sZWZ0O1xcbiAgOTc6XFx0XFx0XFx0fSBlbHNlIGlmIChkaWZmIFxcdTAwM2UgMCkge1xcbiAgOTg6XFx0XFx0XFx0XFx0aW5zX3BvaW50ID0gXFx1MDAyNnBhcmVudC1cXHUwMDNlcmJfcmlnaHQ7XFxuICA5OTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAxMDA6XFx0XFx0XFx0XFx0aWYgKGV4Y2x1c2l2ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzk6MTMuNTI2MjE1MDEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTE1MTc1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyBOZXR3b3JrIERldmljZSBIYXJkd2FyZSBBZGRyZXNzZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBoYS1cdTAwM2VhZGRyYCBjb25zdHJ1Y3QgYW5kIGl0J3MgY2xlYXJseSBwYXJ0IG9mIGEgYG5ldGRldl9od19hZGRyYCBzdHJ1Y3QuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBzdHJ1Y3R1cmUgdG8gc2VlIGhvdyB0aGlzIGBoYS1cdTAwM2VhZGRyYCBmaWVsZCBpcyBiZWluZyB1c2VkLiBUaGlzIGNvdWxkIGJlIGNydWNpYWwgaW4gdW5kZXJzdGFuZGluZyBhIGN1cnJlbnQgaXNzdWUgb3IgZGVzaWduLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhZGRyZXNzIG1hbmlwdWxhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgSSBrbm93IHdoYXQgSSdtIGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzk6MTcuMDE3NzM1NzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1Njg0MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBuZXRkZXZfaHdfYWRkciBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjM1PXN0cnVjdCBza19idWZmO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM2LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzgtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM5OjE3LjA3MzQyNDU5NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk5MzI4NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgKipcblxuT2theSwgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAuIFRoaXMgaXMgYSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlLCBjbGVhcmx5IGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBhZGRyZXNzZXMgd2l0aGluIHRoZSBuZXR3b3JrIGRldmljZSBjb250ZXh0LiBJJ20gYXNzdW1pbmcgdGhpcyB3aWxsIGJlIHVzZWQgZm9yIE1BQyBhZGRyZXNzZXMsIG11bHRpY2FzdCBNQUMgYWRkcmVzc2VzLCBvciBwb3NzaWJseSBldmVuIG90aGVyIGhhcmR3YXJlLXNwZWNpZmljIGlkZW50aWZpZXJzIG1hbmFnZWQgYnkgdGhlIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbXBvbmVudHMuIElzIGl0IHNpbXBseSBhIGNvbnRhaW5lciBmb3IgdGhlIGFkZHJlc3MgaXRzZWxmLCBvciBkb2VzIGl0IGhvbGQgYXNzb2NpYXRlZCBtZXRhZGF0YSBsaWtlIGZsYWdzIChlLmcuLCBwZXJtYW5lbnQsIHRlbXBvcmFyeSwgZXRjLikgb3IgcGVyaGFwcyByZWZlcmVuY2UgY291bnRzPyBBcmUgdGhlcmUgYW55IHBvaW50ZXJzIGluIHRoZSBzdHJ1Y3R1cmUgdGhhdCBtYW5hZ2UgdGhlIG1lbW9yeSBmb3IgdGhlIGhhcmR3YXJlIGFkZHJlc3MgaXRzZWxmPyBJIGV4cGVjdCB0aGVyZSB0byBiZSBhIGZpZWxkIGRlZmluaW5nIHRoZSBsZW5ndGggb2YgdGhlIGFkZHJlc3MsIGFzIGRpZmZlcmVudCBoYXJkd2FyZSB0eXBlcyBjYW4gaGF2ZSBkaWZmZXJlbnQgYWRkcmVzcyBzaXplcyAoZS5nLiwgRXRoZXJuZXQgdnMuIHNvbWUgb2JzY3VyZSBlbWJlZGRlZCBuZXR3b3JrKS4gSSdsbCB3YW50IHRvIGNoZWNrIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgdmVyc2lvbmVkIG9yIGlmIHRoZXJlIGFyZSBhbnkgZXh0ZW5zaW9uIGZpZWxkcyBhZGRlZCBmb3IgZnV0dXJlIGZlYXR1cmVzLCBhbmQgaG93IHRoYXQgaXMgaGFuZGxlZC4gTGV0J3Mgc2VlIGhvdyB0aGlzIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFuZCB1c2VkIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozOToyMS4yNzI3NTU3MjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjM3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM3OlxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XFxuIDIzODpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG4gMjM5OlxcdFxcdHN0cnVjdCByYl9ub2RlXFx0XFx0bm9kZTtcXG4gMjQwOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRhZGRyW01BWF9BRERSX0xFTl07XFxuIDI0MTpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0dHlwZTtcXG4gMjQyOlxcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9MQU5cXHRcXHQxXFxuIDI0MzpcXHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfU0FOXFx0XFx0MlxcbiAyNDQ6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX1VOSUNBU1RcXHQzXFxuIDI0NTpcXHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNUXFx0NFxcbiAyNDY6XFx0XFx0Ym9vbFxcdFxcdFxcdGdsb2JhbF91c2U7XFxuIDI0NzpcXHRcXHRpbnRcXHRcXHRcXHRzeW5jX2NudDtcXG4gMjQ4OlxcdFxcdGludFxcdFxcdFxcdHJlZmNvdW50O1xcbiAyNDk6XFx0XFx0aW50XFx0XFx0XFx0c3luY2VkO1xcbiAyNTA6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0cmN1X2hlYWQ7XFxuIDI1MTpcXHR9O1xcbiAyNTI6XFx0XFxuIDI1MzpcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCB7XFxuIDI1NDpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG4gMjU1OlxcdFxcdGludFxcdFxcdFxcdGNvdW50O1xcbiAyNTY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM5OjIxLjI3MzA5NDU4OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMwNzg1MTMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyBpbiBOZXR3b3JrIERyaXZlciBNQUMgQWRkcmVzcyBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYE1BWF9BRERSX0xFTmAgaXMgZGVmaW5lZCBhcyAzMiwgd2hpY2ggbWVhbnMgdGhlIGhhcmR3YXJlIGFkZHJlc3MgYnVmZmVyLCBgaGEtXHUwMDNlYWRkcmAsIGlzIGEgMzItYnl0ZSBhcnJheS4gVGhlIGBfX2h3X2FkZHJfY3JlYXRlYCBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhpcyBzdHJ1Y3R1cmUgdXNpbmcgYGttYWxsb2NgLiBOb3csIGEgY3J1Y2lhbCBwb2ludDogYGttYWxsb2NgIGRvZXNuJ3QgemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnkuICBJdCBqdXN0IGdpdmVzIHlvdSBhIGNodW5rIG9mIG1lbW9yeS4gIFNvLCBpZiBgYWRkcl9sZW5gIHBhc3NlZCB0byBgX19od19hZGRyX2NyZWF0ZWAgaXMgbGVzcyB0aGFuIDMyLCB3aGljaCBpdCBpcyBpbiB0aGUgY2FzZSBvZiBhIHN0YW5kYXJkIEV0aGVybmV0IE1BQyBhZGRyZXNzICg2IGJ5dGVzKSwgdGhlICpyZW1haW5pbmcqIGJ5dGVzIG9mIGBoYS1cdTAwM2VhZGRyYCB3aWxsIGJlIHVuaW5pdGlhbGl6ZWQuIFNwZWNpZmljYWxseSwgdGhlIGJ5dGVzIGZyb20gaW5kZXggNiB1cCB0byAzMSB3aWxsIGJlIGdhcmJhZ2UuXG5cbk5vdywgbG9va2luZyBhdCBob3cgdGhlIE1BQyBhZGRyZXNzIGlzIGFjdHVhbGx5ICp1c2VkKiBpbiB0aGUgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBmdW5jdGlvbjpcbmBgYGNcblx0UlRMX1czMl9GKE1BQzAgKyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciArIDApKSk7XG5cdFJUTF9XMzJfRihNQUMwICsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtXHUwMDNlZGV2X2FkZHIgKyA0KSkpO1xuYGBgXG5XZSdyZSByZWFkaW5nIGZyb20gYGRldi1cdTAwM2VkZXZfYWRkcmAsIHdoaWNoICpwb2ludHMqIHRvIG91ciBgaGEtXHUwMDNlYWRkcmAuIFRoZSBvcmlnaW5hbCBjb2RlIHJlYWRzIGZyb20gYGRldi1cdTAwM2VkZXZfYWRkciArIDRgLCBhbmQgdGhhdCByZWFkcyA0IGJ5dGVzIHN0YXJ0aW5nIGF0IGluZGV4IDQgKGJ5dGVzIDQsIDUsIDYsIDcpLiBCeXRlcyA0IGFuZCA1IGFyZSBwYXJ0IG9mIHRoZSBNQUMgYWRkcmVzcywgc28gdGhleSBhcmUgaW5pdGlhbGl6ZWQuIEhvd2V2ZXIsIGJ5dGVzIDYgYW5kIDcgYXJlIFVOSU5JVElBTElaRUQuIFRoYXQgY291bGQgYmUgYSBwcm9ibGVtISAgV2UncmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuSG93ZXZlciwgYGRldl9hZGRyX2luaXRgIHNlZW1zIHRvIGluaXRpYWxpemUgdGhlIGZpcnN0IE1BQyBhZGRyZXNzIGZ1bGx5IVxuYGBgY1xuXHR1bnNpZ25lZCBjaGFyIGFkZHJbTUFYX0FERFJfTEVOXTtcblx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSk7XG5cdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxuXHRcdFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcbmBgYFxuSGVyZSwgd2UgY3JlYXRlIGEgMzItYnl0ZSBhcnJheSwgYGFkZHJgLCBhbmQgemVybyBpdCBvdXQsIGFuZCB0aGVuIHdlIGFkZCBpdCBhcyBhbiBhZGRyZXNzLiAgQ3J1Y2lhbGx5LCBgX19od19hZGRyX2FkZGAgaXMgZ2l2ZW4gYSBgYWRkcl9sZW5gIG9mIDMyLCBzbyB0aGlzIGZpcnN0IGFkZHJlc3MgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdG8gemVyby4gIFNvIHdlIGFyZSBzYWZlIGhlcmUhXG5cbkJ1dCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgTUFDIGFkZHJlc3MgaXMgKmNoYW5nZWQqPyBgbmV0aWZfc2V0X21hY19hZGRyZXNzYCBjYWxscyBgZGV2X2FkZHJfbW9kYCwgd2hpY2ggdXNlcyBgbWVtY3B5YCB0byB1cGRhdGUgdGhlIE1BQyBhZGRyZXNzLlxuYGBgY1xuXHRtZW1jcHkoXHUwMDI2aGEtXHUwMDNlYWRkcltvZmZzZXRdLCBhZGRyLCBsZW4pO1xuYGBgXG5UaGlzIG92ZXJ3cml0ZXMgdGhlIGV4aXN0aW5nIGBoYS1cdTAwM2VhZGRyYCBpbiBwbGFjZS4gVGhpcyBtZWFucyB0aGF0ICpvbmx5KiB0aGUgTUFDIGFkZHJlc3MgYnl0ZXMgZ2V0IHVwZGF0ZWQsIGFuZCB0aGUgb3RoZXIgYnl0ZXMgcmVtYWluIHdoYXRldmVyIGdhcmJhZ2Ugd2FzIHRoZXJlIGJlZm9yZSwgdW5sZXNzIHdlIHNwZWNpZmljYWxseSBpbml0aWFsaXplIHRoZW0uXG5cbkFuZCBmaW5hbGx5LCB3ZSBoYXZlIHRoZSBjYXNlIHdoZXJlIGEgZHJpdmVyIGRpcmVjdGx5IHNldHMgdGhlIE1BQyBhZGRyZXNzLiAgTWFueSBkcml2ZXJzIGRvIGBldGhfaHdfYWRkcl9zZXQoZGV2LCBtYWNfYWRkcilgLiBXZSdkIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGV0aF9od19hZGRyX3NldGAgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaXMuIElzIHRoZXJlIGFueSBpbml0aWFsaXphdGlvbiBoYXBwZW5pbmcgdGhlcmU/ICBBcmUgd2Ugc2FmZT8gV2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgZXRoX2h3X2FkZHJfc2V0YCBmb3IgYSBkZWZpbml0aXZlIGFuc3dlci4gSXQncyBwb3NzaWJsZSBmb3IgdGhpcyBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIHNhbWUgcHJvYmxlbSBhcyB0aGUgb3JpZ2luYWwgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozOTozMi41ODA5NDg4NDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDkyMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aF9od19hZGRyX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTMwMj1zdGF0aWMgaW5saW5lIHZvaWQgZXRoZXJfYWRkcl9jb3B5KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzE3LS8qKlxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDozMTg6ICogZXRoX2h3X2FkZHJfc2V0IC0gQXNzaWduIEV0aGVybmV0IGFkZHJlc3MgdG8gYSBuZXRfZGV2aWNlXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTMxOS0gKiBAZGV2OiBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzIzLSAqL1xcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDozMjQ6c3RhdGljIGlubGluZSB2b2lkIGV0aF9od19hZGRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcilcXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzI1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaD0zMzc9c3RhdGljIGlubGluZSB2b2lkIGV0aF9od19hZGRyX2luaGVyaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRzdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zNDAtXFx0ZHN0LVxcdTAwM2VhZGRyX2Fzc2lnbl90eXBlID0gc3JjLVxcdTAwM2VhZGRyX2Fzc2lnbl90eXBlO1xcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDozNDE6XFx0ZXRoX2h3X2FkZHJfc2V0KGRzdCwgc3JjLVxcdTAwM2VkZXZfYWRkcik7XFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTM0Mi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg9NjA0PXN0YXRpYyBpbmxpbmUgdm9pZCBldGhfaHdfYWRkcl9nZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJhc2VfYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC02MTEtXFx0dTY0X3RvX2V0aGVyX2FkZHIodSwgYWRkcik7XFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjYxMjpcXHRldGhfaHdfYWRkcl9zZXQoZGV2LCBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNjEzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzk6MzIuNjU4NDQ1NDE3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDQ0NjQ4NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGBldGhfaHdfYWRkcl9zZXRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGV0aF9od19hZGRyX3NldGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpdHMgcm9sZS4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBzZXR0aW5nIHRoZSBoYXJkd2FyZSBhZGRyZXNzIOKAkyB0aGUgTUFDIGFkZHJlc3MsIHByZXN1bWFibHkg4oCTIG9mIGFuIEV0aGVybmV0IGludGVyZmFjZS4gVGhhdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4ganVzdCB0aGUgbmFtZS5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRleHQuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gbGlrZWx5IHRvIGJlIHVzZWQ/IElzIGl0IHBhcnQgb2YgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gSXMgaXQgYSB1c2VyLXNwYWNlIHV0aWxpdHkgZnVuY3Rpb24gdG8gY29uZmlndXJlIHRoZSBuZXR3b3JrIGludGVyZmFjZT8gT3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgZGVlcGx5IGVtYmVkZGVkIGluIHRoZSBuZXR3b3JrIHN0YWNrPyBLbm93aW5nIHRoZSBlbnZpcm9ubWVudCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zLlxuXG5JIHdhbnQgdG8ga25vdyBpdHMgaW5wdXRzLiBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgZXhwZWN0PyBBIG5ldHdvcmsgaW50ZXJmYWNlIGRlc2NyaXB0b3IsIHN1cmVseSwgYnV0IHdoYXQgYWJvdXQgdGhlIGFkZHJlc3MgaXRzZWxmPyBJcyBpdCBhIHNpbXBsZSBieXRlIGFycmF5PyBBIHN0YW5kYXJkaXplZCBzdHJ1Y3Q/IEFueSBlcnJvciBoYW5kbGluZyBpbnB1dHM/IEFueSBsaW1pdGF0aW9ucyBvbiB3aGF0J3MgYWxsb3dlZD8gTXkgdGhvdWdodHMgYXJlIHJhY2luZyBmb3J3YXJkIG5vdywgYW50aWNpcGF0aW5nIGhvdyBpdCBoYW5kbGVzIG1hbGZvcm1lZCBhZGRyZXNzZXMsIG9yIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIHJlcXVlc3RzLlxuXG5UaGUgZXhlY3V0aW9uIGZsb3cgaXMgbmV4dC4gSG93IGRvZXMgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IGdvIGFib3V0IHNldHRpbmcgdGhlIGFkZHJlc3M/IERvZXMgaXQgZGlyZWN0bHkgbWFuaXB1bGF0ZSByZWdpc3RlcnMgb24gdGhlIE5ldHdvcmsgSW50ZXJmYWNlIENvbnRyb2xsZXIgKE5JQyk/IERvZXMgaXQgdXRpbGl6ZSBzb21lIGtpbmQgb2Ygc3lzdGVtIGNhbGwgb3IgYSBrZXJuZWwgQVBJPyBEb2VzIGl0IGdvIHRocm91Z2ggYW55IGxldmVsIG9mIGFic3RyYWN0aW9uPyBLbm93aW5nIHRoaXMgd2lsbCByZXZlYWwgdGhlIGxldmVsIG9mIGZsZXhpYmlsaXR5LiBXaWxsIGl0IGhhbmRsZSBhbGwgdHlwZXMgb2YgYWRkcmVzc2VzICh1bmljYXN0LCBtdWx0aWNhc3QpPyBPciBkb2VzIGl0IGhhdmUgc29tZSByZXN0cmljdGlvbnM/XG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgZXJyb3IgaGFuZGxpbmcuIEhvdyByb2J1c3QgaXMgaXQ/IFdoYXQgZmFpbHVyZSBtb2RlcyBkb2VzIGl0IGFudGljaXBhdGU/IERvZXMgaXQgcmV0dXJuIGVycm9yIGNvZGVzLCB0aHJvdyBleGNlcHRpb25zLCBvciBqdXN0IHNpbGVudGx5IGZhaWw/IERvZXMgaXQgY29uc2lkZXIgdGhlIHRpbWluZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIGVudmlyb25tZW50PyBLbm93aW5nIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IEkgdXNlIGl0IG9yIHdoYXQgYXNzdW1wdGlvbnMgSSBjYW4gbWFrZSBpZiBpbXBsZW1lbnRpbmcgYSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9uLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiBpdHMgYmVoYXZpb3IsIGxpbWl0YXRpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdsbCBuZWVkIHRvIGxvb2sgYmV5b25kIHRoZSBjb2RlIGl0c2VsZiwgY29uc2lkZXJpbmcgdGhlIHBsYXRmb3JtLCBkcml2ZXIsIGFuZCB0aGUgdXNlci1mYWNpbmcgaW1wbGljYXRpb25zIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgcXVpY2sgZXhhbWluYXRpb24gbmVlZHMgdG8gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNvdXJjZSwgdGhlIGRvY3VtZW50YXRpb24sIG9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIGl0cyB0cnVlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozOTo0My43MDMwOTcwNjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMTgsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTg6XFx0ICogZXRoX2h3X2FkZHJfc2V0IC0gQXNzaWduIEV0aGVybmV0IGFkZHJlc3MgdG8gYSBuZXRfZGV2aWNlXFxuIDMxOTpcXHQgKiBAZGV2OiBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlXFxuIDMyMDpcXHQgKiBAYWRkcjogYWRkcmVzcyB0byBhc3NpZ25cXG4gMzIxOlxcdCAqXFxuIDMyMjpcXHQgKiBBc3NpZ24gZ2l2ZW4gYWRkcmVzcyB0byB0aGUgbmV0X2RldmljZSwgYWRkcl9hc3NpZ25fdHlwZSBpcyBub3QgY2hhbmdlZC5cXG4gMzIzOlxcdCAqL1xcbiAzMjQ6XFx0c3RhdGljIGlubGluZSB2b2lkIGV0aF9od19hZGRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcilcXG4gMzI1OlxcdHtcXG4gMzI2OlxcdFxcdF9fZGV2X2FkZHJfc2V0KGRldiwgYWRkciwgRVRIX0FMRU4pO1xcbiAzMjc6XFx0fVxcbiAzMjg6XFx0XFxuIDMyOTpcXHQvKipcXG4gMzMwOlxcdCAqIGV0aF9od19hZGRyX2luaGVyaXQgLSBDb3B5IGRldl9hZGRyIGZyb20gYW5vdGhlciBuZXRfZGV2aWNlXFxuIDMzMTpcXHQgKiBAZHN0OiBwb2ludGVyIHRvIG5ldF9kZXZpY2UgdG8gY29weSBkZXZfYWRkciB0b1xcbiAzMzI6XFx0ICogQHNyYzogcG9pbnRlciB0byBuZXRfZGV2aWNlIHRvIGNvcHkgZGV2X2FkZHIgZnJvbVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozOTo0My43MDMyMzIxOThaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExMTg5NjE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgX19kZXZfYWRkcl9zZXRgIHNpdHVhdGlvbjpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBgX19kZXZfYWRkcl9zZXRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBnZXQgaW50byB0aGUgY29kZSBmb3IgYF9fZGV2X2FkZHJfc2V0YC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgbGluZSBieSBsaW5lLCByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBsb2dpYy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgY29tcG9uZW50cywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCdzIHdvcmtpbmcgd2l0aCwgYW5kIHRoZSBjb3JlIHB1cnBvc2UgaXQncyBzZXJ2aW5nLiBLbm93aW5nIG15IG5ldHdvcmtpbmcgYW5kIGRldmljZSBkcml2ZXIgYmFja2dyb3VuZCwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgYXNwZWN0cyBsaWtlIG1hbmlwdWxhdGluZyBNQUMgYWRkcmVzc2VzLCBoYW5kbGluZyBhZGRyZXNzIGFzc2lnbm1lbnQgd2l0aGluIGEgZGV2aWNlIHN0cnVjdHVyZSwgYW5kIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IHNhZmV0eS4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaWYgYXQgYWxsLCBvciBpZiBpdCBwcmltYXJpbHkgbWFuYWdlcyB0aGUgc29mdHdhcmUgcmVwcmVzZW50YXRpb24gb2YgYSBkZXZpY2UncyBhZGRyZXNzIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGRldmljZSBkcml2ZXIgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzk6NDguODE1MTMxNjA5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDMzNzc0MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19kZXZfYWRkcl9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTUwOTQ9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MDk1Ol9fZGV2X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDk2LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NTEwMD1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTEwMS17XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MTAyOlxcdF9fZGV2X2FkZHJfc2V0KGRldiwgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbik7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTAzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzk6NDkuNjU4NTEyODdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMTgyMzI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgX19kZXZfYWRkcl9zZXRgIHNpdHVhdGlvbjpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBgX19kZXZfYWRkcl9zZXRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBnZXQgaW50byB0aGUgY29kZSBmb3IgYF9fZGV2X2FkZHJfc2V0YC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgbGluZSBieSBsaW5lLCByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBsb2dpYy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgY29tcG9uZW50cywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCdzIHdvcmtpbmcgd2l0aCwgYW5kIHRoZSBjb3JlIHB1cnBvc2UgaXQncyBzZXJ2aW5nLiBLbm93aW5nIG15IG5ldHdvcmtpbmcgYW5kIGRldmljZSBkcml2ZXIgYmFja2dyb3VuZCwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgYXNwZWN0cyBsaWtlIG1hbmlwdWxhdGluZyBNQUMgYWRkcmVzc2VzLCBoYW5kbGluZyBhZGRyZXNzIGFzc2lnbm1lbnQgd2l0aGluIGEgZGV2aWNlIHN0cnVjdHVyZSwgYW5kIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IHNhZmV0eS4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaWYgYXQgYWxsLCBvciBpZiBpdCBwcmltYXJpbHkgbWFuYWdlcyB0aGUgc29mdHdhcmUgcmVwcmVzZW50YXRpb24gb2YgYSBkZXZpY2UncyBhZGRyZXNzIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGRldmljZSBkcml2ZXIgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc2OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM5OjUzLjc4MDMzOTM3NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MDk0LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDk0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZFxcbjUwOTU6XFx0X19kZXZfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbilcXG41MDk2OlxcdHtcXG41MDk3OlxcdFxcdGRldl9hZGRyX21vZChkZXYsIDAsIGFkZHIsIGxlbik7XFxuNTA5ODpcXHR9XFxuNTA5OTpcXHRcXG41MTAwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpXFxuNTEwMTpcXHR7XFxuNTEwMjpcXHRcXHRfX2Rldl9hZGRyX3NldChkZXYsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbjUxMDM6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozOTo1My43ODA4NTc4OTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY0ODYyMzk0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNQUMgQWRkcmVzcyBNb2RpZmljYXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRldl9hZGRyX21vZGAgZnVuY3Rpb24sIGFuZCBpdCdzIGNhbGxlZCB3aXRoIGFuIG9mZnNldCBvZiAwIGFuZCBhIGxlbmd0aCBvZiA2LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgbW9kaWZ5aW5nIGEgTUFDIGFkZHJlc3MsIHJpZ2h0PyAgVGhlIGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgb3ZlcndyaXRlIHRoZSBmaXJzdCA2IGJ5dGVzIG9mIGBoYS1cdTAwM2VhZGRyYCB3aXRoIGBtZW1jcHlgLiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IHRoaXMgd291bGQgbWVhbiB0aGUgcmVtYWluaW5nIDI2IGJ5dGVzIG9mIGBoYS1cdTAwM2VhZGRyYCB3b3VsZCByZW1haW4gemVyb2VkLCBiZWNhdXNlIG9mIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uIGluIGBkZXZfYWRkcl9pbml0YC4gVGhpcyBsb29rcyBjb3JyZWN0IGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIG1vZGlmeWluZyB0aGUgYWRkcmVzcyBpbi1wbGFjZS5cblxuQnV0IHRoZW4gSSBoYWQgYSBtb21lbnQgb2YgZG91YnQuICBJcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgaGEtXHUwMDNlYWRkcmAgY291bGQgYmUgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgIGFuZCAqbm90KiBiZSB6ZXJvLWluaXRpYWxpemVkPyAgSSBpbW1lZGlhdGVseSByZWNhbGxlZCB0aGUgYF9faHdfYWRkcl9hZGRfZXhgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGF0IGBfX2h3X2FkZHJfY3JlYXRlYCBhbGxvY2F0ZXMgYGhhYCB3aXRoIGBrbWFsbG9jYCBhbmQgb25seSBjb3BpZXMgdGhlIHN1cHBsaWVkIGBhZGRyX2xlbmAgYnl0ZXMuICBTbyBpZiBgX19od19hZGRyX2FkZGAgaXMgY2FsbGVkIHdpdGggYSBsZW5ndGggb2YgNiwgd291bGRuJ3QgdGhhdCBtZWFuIHRoZSByZXN0IHdvdWxkIGJlIHVuaW5pdGlhbGl6ZWQ/XG5cbk15IHRob3VnaHQgdHJhaW4gY29udGludWVkIGFuZCBJIHdlbnQgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRvIGVuc3VyZSBteSBhc3N1bXB0aW9uIHJlZ2FyZGluZyBkYXRhIGluaXRpYWxpemF0aW9uLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgdGhlIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIHNldCBvbmNlIGluIGBkZXZfYWRkcl9pbml0YCBhbmQgbmV2ZXIgY2hhbmdlZCB0byBwb2ludCB0byBhIGRpZmZlcmVudCBgaGFgLCBhbmQgdGhhdCB0aGlzIGluaXRpYWwgYGhhYCBpcyB6ZXJvZWQuICBUaGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGV4aXN0aW5nIG9uZSBpbiBwbGFjZS4gSSBoYWQgdG8gZW5zdXJlIHRoYXQgdGhlIHBvaW50ZXIgd2FzIG5vdCBzd2l0Y2hlZCBhdCBhbnkgdGltZS5cblxuQnV0IEkgaGFkIHRvIGRvdWJsZSBjaGVjayEgVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmcm9tIGEgc3l6LWNsdXN0ZXIsIGFuZCBJIHdhc24ndCBzdXJlIGlmIHRoZXJlIHdhcyBhbiBvbGRlciBrZXJuZWwgdmVyc2lvbiB3aGVyZSBgZGV2LVx1MDAzZWRldl9hZGRyYCB3YXMgYW4gYXJyYXkuIFRpbWUgdG8gY2hlY2sgYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgIGZvciBob3cgYGRldl9hZGRyYCBpcyBkZWZpbmVkLiBUaGlzIHNob3VsZCBjbGVhciB1cCB0aGF0IHRob3VnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTkxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDA6MTAuMjY3MDk5OTAyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDUzMTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTgxOD1lbnVtIG5ldGRldl9yZWdfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xOTU4LSAqXFx0QG1jOlxcdFxcdFxcdG11bHRpY2FzdCBtYWMgYWRkcmVzc2VzXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxOTU5OiAqXFx0QGRldl9hZGRyczpcXHRcXHRsaXN0IG9mIGRldmljZSBodyBhZGRyZXNzZXNcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NjAtICpcXHRAcXVldWVzX2tzZXQ6XFx0XFx0R3JvdXAgb2YgYWxsIEtvYmplY3RzIGluIHRoZSBUeCBhbmQgUlggcXVldWVzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NzctICpcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE5Nzg6ICpcXHRAZGV2X2FkZHI6XFx0SHcgYWRkcmVzcyAoYmVmb3JlIGJjYXN0LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk3OS0gKlxcdFxcdFxcdGJlY2F1c2UgbW9zdCBwYWNrZXRzIGFyZSB1bmljYXN0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMTI1LSAqXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMTI2OiAqXFx0QGRldl9hZGRyX3NoYWRvdzpcXHRDb3B5IG9mIEBkZXZfYWRkciB0byBjYXRjaCBkaXJlY3Qgd3JpdGVzLlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjEyNy0gKlxcdEBsaW5rd2F0Y2hfZGV2X3RyYWNrZXI6XFx0cmVmY291bnQgdHJhY2tlciB1c2VkIGJ5IGxpbmt3YXRjaC5cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzMzktXFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3RcXHRtYztcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzNDA6XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3RcXHRkZXZfYWRkcnM7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzQxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzk2LVxcdC8qIEludGVyZmFjZSBhZGRyZXNzIGluZm8gdXNlZCBpbiBldGhfdHlwZV90cmFucygpICovXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzk3OlxcdGNvbnN0IHVuc2lnbmVkIGNoYXJcXHQqZGV2X2FkZHI7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzk4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTQ0LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjU0NTpcXHR1OCBkZXZfYWRkcl9zaGFkb3dbTUFYX0FERFJfTEVOXTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI1NDYtXFx0bmV0ZGV2aWNlX3RyYWNrZXJcXHRsaW5rd2F0Y2hfZGV2X3RyYWNrZXI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMzMTA9c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvIHtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMzMTEtXFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9pbmZvIGluZm87IC8qIG11c3QgYmUgZmlyc3QgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMzMTI6XFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGV2X2FkZHI7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMzEzLX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTUwMTc9c3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2FkZHJfdW5sb2NrX2JoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwMjItLypcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUwMjM6ICogZGV2X2FkZHJzIHdhbGtlci4gU2hvdWxkIGJlIHVzZWQgb25seSBmb3IgcmVhZCBhY2Nlc3MuIENhbGwgd2l0aFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTAyNC0gKiByY3VfcmVhZF9sb2NrIGhlbGQuXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDI1LSAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTAyNjojZGVmaW5lIGZvcl9lYWNoX2Rldl9hZGRyKGRldiwgaGEpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUwMjc6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaGEsIFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycy5saXN0LCBsaXN0KVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTAyOC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NTA4NT12b2lkIF9faHdfYWRkcl9saXN0X3JlY29uY2lsZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqcmVhbF9saXN0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDkwLS8qIEZ1bmN0aW9ucyB1c2VkIGZvciBkZXZpY2UgYWRkcmVzc2VzIGhhbmRsaW5nICovXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MDkxOnZvaWQgZGV2X2FkZHJfbW9kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDkyLVxcdFxcdCAgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTUwOTQ9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MDk1Ol9fZGV2X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDk2LXtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUwOTc6XFx0ZGV2X2FkZHJfbW9kKGRldiwgMCwgYWRkciwgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwOTgtfVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTA5OS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUxMDA6c3RhdGljIGlubGluZSB2b2lkIGRldl9hZGRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcilcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUxMDEte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTEwMjpcXHRfX2Rldl9hZGRyX3NldChkZXYsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTEwMy19XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTA0LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTEwNTppbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTA2LVxcdFxcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MTA3OmludCBkZXZfYWRkcl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUxMDgtXFx0XFx0IHVuc2lnbmVkIGNoYXIgYWRkcl90eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDA6MTAuMzQ3NjM1NDQxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMTc1NjI3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNYWMgQWRkcmVzcyBSZWFkKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgZGV2X2FkZHJgIGlzIGNsZWFybHkgYSBwb2ludGVyLCBhbmQgYWZ0ZXIgZXhhbWluaW5nIGBkZXZfYWRkcl9pbml0YCwgSSBjYW4gc2VlIHRoYXQgaXQgaW5pdGlhbGl6ZXMgYSAzMi1ieXRlIGJ1ZmZlciwgbmFtZWQgYGFkZHJgLCB0byBhbGwgemVyb3MgdXNpbmcgYG1lbXNldGAuIFRoZSBwb2ludGVyIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIHRoZW4gc2V0IHRvIHBvaW50IHRvIHRoaXMgYGFkZHJgIGJ1ZmZlci4gU28gd2hlbiBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIGF0dGVtcHRzIHRvIHJlYWQgNCBieXRlcyBzdGFydGluZyBhdCBhbiBvZmZzZXQgb2YgKzQsIGl0J3MgYWNjZXNzaW5nIGJ5dGVzIDQgdGhyb3VnaCA3IG9mIHRoaXMgMzItYnl0ZSBidWZmZXIuIENydWNpYWxseSwgdGhpcyBpcyAqbm90KiBhbiBvdXQtb2YtYm91bmRzIHJlYWQ7IHRoZSByZWFkIGlzIHdpdGhpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeS5cblxuSG9sZCBvbiwgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGJ5dGVzIDYgYW5kIDcgbWlnaHQgYmUgdW5pbml0aWFsaXplZCwgYnV0IG5vLCB0aGUgYG1lbXNldGAgaW4gYGRldl9hZGRyX2luaXRgIGVuc3VyZXMgdGhhdCB0aG9zZSBieXRlcyBhcmUsIGluIGZhY3QsIGluaXRpYWxpemVkIHRvIHplcm8uIE9rYXksIHdoYXQgaWYgYW5vdGhlciBmdW5jdGlvbiBsaWtlIGBkZXZfYWRkcl9tb2RgIG1vZGlmaWVzIHRoZSBtYWMgYWRkcmVzcz8gSXQgY29waWVzIG9ubHkgNiBieXRlcywgbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgMzItYnl0ZSBidWZmZXIgdW50b3VjaGVkIOKAkyBzdGlsbCB6ZXJvLiBBbmQgd2hhdCBhYm91dCBpbmhlcml0YW5jZSB1c2luZyBgZXRoX2h3X2FkZHJfaW5oZXJpdGA/IEV2ZW4gaGVyZSwgYGV0aF9od19hZGRyX3NldGAgaXMgY2FsbGVkLCBhbmQgaXQgY29waWVzIGp1c3QgNiBieXRlcyBmcm9tIHRoZSBzb3VyY2UsIGFuZCB0aGUgcmVzdCByZW1haW5zIHplcm8uXG5cblRoZXJlZm9yZSwgYnl0ZXMgNiBhbmQgNyBhcmUgKmFsd2F5cyogemVybywgb3Igc28gaXQgc2VlbXMuIFNvIHJlYWRpbmcgdGhlbSBjYW5ub3QgYmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCEgSXQncyBhIHZhbGlkIGFuZCBwcmVkaWN0YWJsZSByZWFkLiBCdXQgd2FpdCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLkknbSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgd2hlcmUgYGRldi1cdTAwM2VkZXZfYWRkcmAgbWlnaHQgYmUgYXNzaWduZWQuIExldCBtZSBjcm9zcy1jaGVjayB0aGUgb3RoZXIgcGxhY2VzIHdoZXJlIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIGFzc2lnbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYyNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MDoxOS4zNjUyMDEyODRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjQ2MjM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkciA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MTAwMjA9aW50IG5ldGlmX3ByZV9jaGFuZ2VhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICphZGRyLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTAwMjUtXFx0XFx0LmluZm8uZXh0YWNrID0gZXh0YWNrLFxcbm5ldC9jb3JlL2Rldi5jOjEwMDI2OlxcdFxcdC5kZXZfYWRkciA9IGFkZHIsXFxubmV0L2NvcmUvZGV2LmMtMTAwMjctXFx0fTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NjYxPXZvaWQgZGV2X2FkZHJfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjY2LVxcdF9faHdfYWRkcl9mbHVzaChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NjY3OlxcdGRldi1cXHUwMDNlZGV2X2FkZHIgPSBOVUxMO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjY4LX1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9Njc5PWludCBkZXZfYWRkcl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY5Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIGxpc3QpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njk4OlxcdFxcdGRldi1cXHUwMDNlZGV2X2FkZHIgPSBoYS1cXHUwMDNlYWRkcjtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY5OS1cXHR9XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jPTY4OD1pZWVlODAyMTU0X2xsc2VjX3NlbmRfa2V5X2lkKHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTY5Ny1cXHRjYXNlIE5MODAyMTU0X0tFWV9JRF9NT0RFX0lNUExJQ0lUOlxcbm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmM6Njk4OlxcdFxcdG5sX2Rldl9hZGRyID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKG1zZyxcXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTY5OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgTkw4MDIxNTRfS0VZX0lEX0FUVFJfSU1QTElDSVQpO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNTUzPXN0YXRpYyB2b2lkIGFkZHJjb25mX2dyZV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzU2Ny1cXHQgKi9cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM1Njg6XFx0aWYgKCEoKihfX2JlMzIgKilkZXYtXFx1MDAzZWRldl9hZGRyID09IDAgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM1NjktXFx0ICAgICAgaWRldi1cXHUwMDNlY25mLmFkZHJfZ2VuX21vZGUgPT0gSU42X0FERFJfR0VOX01PREVfRVVJNjQpKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz0xMTMxPXN0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0IGllZWU4MDIxMV9yeF9tZXNoX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy0xMTMzLVxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9tYWM4MDIxMS9yeC5jOjExMzQ6XFx0Y2hhciAqZGV2X2FkZHIgPSByeC1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZi5hZGRyO1xcbm5ldC9tYWM4MDIxMS9yeC5jLTExMzUtXFxuLS1cXG5uZXQvbWFjODAyMTU0L2xsc2VjLmM9MTAwNT1pbnQgbWFjODAyMTU0X2xsc2VjX2RlY3J5cHQoc3RydWN0IG1hYzgwMjE1NF9sbHNlYyAqc2VjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21hYzgwMjE1NC9sbHNlYy5jLTEwNjYtXFxubmV0L21hYzgwMjE1NC9sbHNlYy5jOjEwNjc6XFx0ZGV2X2FkZHIgPSBkZXYtXFx1MDAzZWRldi5od2FkZHI7XFxubmV0L21hYzgwMjE1NC9sbHNlYy5jLTEwNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQwOjE5LjQ3NzY3MDE2NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTAxNzM2Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERpcmVjdCBNb2RpZmljYXRpb24gb2YgYGRldi1cdTAwM2VkZXZfYWRkcmAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBuZXR3b3JrIGRldmljZSBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhpcyBzeXN0ZW0sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBkZXYtXHUwMDNlZGV2X2FkZHJgLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCdzIGluaXRpYWxpemVkIHRvIGBoYS1cdTAwM2VhZGRyYCBkdXJpbmcgYGRldl9hZGRyX2luaXRgLCBidXQgdGhlbiBJIGhhZCB0aGlzIGZsYXNoIG9mIGluc2lnaHQg4oCTIHdoYXQgaWYgYSAqZHJpdmVyKiBpdHNlbGYsIGRpcmVjdGx5LCBhbHRlcnMgYGRldi1cdTAwM2VkZXZfYWRkcmAgYWZ0ZXIgaW5pdGlhbGl6YXRpb24/IFRoYXQgd291bGQgYnlwYXNzIHRoZSBleHBlY3RlZCBmbG93IGFuZCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSByZWFsbHkgc3VidGxlLCBoYXJkLXRvLXRyYWNrLWRvd24gaXNzdWVzLiBJdCdzIG5vdCBzb21ldGhpbmcgSSdkICpleHBlY3QqIHRvIHNlZSwgYnV0IHdpdGggdGhlIGNvbXBsZXhpdGllcyBvZiB0aGVzZSBkcml2ZXJzLCBpdCdzIGNlcnRhaW5seSBwbGF1c2libGUuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIG9idmlvdXM6IEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGRyaXZlcnMgdGhhdCBhY3R1YWxseSBkbyB0aGlzLCBhbmQgYXMgYW4gZXhhbXBsZSwgSSdtIGdvaW5nIHRvIGZvY3VzIGluIG9uIGBydGw4MTM5dG9vYCB0byBzZWUgaWYgdGhhdCBjb2RlIHNwZWNpZmljYWxseSBtb2RpZmllcyBgZGV2LVx1MDAzZWRldl9hZGRyYCBkaXJlY3RseS4gVGhhdCBmZWVscyBsaWtlIGEgbG9naWNhbCBuZXh0IGFyZWEgdG8gdGVzdCBpbiB0aGlzIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDA6MjYuNTc5NDEwMzMyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTExMDM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz05Mzk9c3RhdGljIGludCBydGw4MTM5X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtMTAzMi1cXHRcXHQgICAgYm9hcmRfaW5mb1tlbnQtXFx1MDAzZWRyaXZlcl9kYXRhXS5uYW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjEwMzM6XFx0XFx0ICAgIGlvYWRkciwgZGV2LVxcdTAwM2VkZXZfYWRkciwgcGRldi1cXHUwMDNlaXJxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0xMDM0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM9MTM2Nj1zdGF0aWMgdm9pZCBydGw4MTM5X2h3X3N0YXJ0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtMTM4MS1cXHQvKiBSZXN0b3JlIG91ciBpZGVhIG9mIHRoZSBNQUMgYWRkcmVzcy4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzoxMzgyOlxcdFJUTF9XMzJfRiAoTUFDMCArIDAsIGxlMzJfdG9fY3B1ICgqKF9fbGUzMiAqKSAoZGV2LVxcdTAwM2VkZXZfYWRkciArIDApKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6MTM4MzpcXHRSVExfVzMyX0YgKE1BQzAgKyA0LCBsZTE2X3RvX2NwdSAoKihfX2xlMTYgKikgKGRldi1cXHUwMDNlZGV2X2FkZHIgKyA0KSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTEzODQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz0yMjIwPXN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMzMtXFx0UlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjIyMzQ6XFx0UlRMX1czMl9GKE1BQzAgKyAwLCBnZXRfdW5hbGlnbmVkX2xlMzIoZGV2LVxcdTAwM2VkZXZfYWRkcikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjIyMzU6XFx0UlRMX1czMl9GKE1BQzAgKyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVxcdTAwM2VkZXZfYWRkciArIDQpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMjM2LVxcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQwOjI2LjY0ODUyNDk1OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzE0NjE2MzQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyB0aGUgUlRMODEzOSBNQUMgQWRkcmVzcyBTZXR0aW5nKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gaG93IHRoZSBSVEw4MTM5IG5ldHdvcmsgaW50ZXJmYWNlIHNldHMgaXRzIE1BQyBhZGRyZXNzLiBJIGtub3cgZnJvbSB0aGUgY29kZSB0aGF0IGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMuIEJ1dCB0aGUgZnVuY3Rpb24gYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBpdHNlbGYgZG9lc24ndCBzZWVtIHRvIGRpcmVjdGx5IGhhbmRsZSB0aGUgTUFDIGFkZHJlc3MgYXNzaWdubWVudCwgaXQgY2FsbHMgYGV0aF9tYWNfYWRkcihkZXYsIHApYCB0byBhY3R1YWxseSBzZXQgdGhlIGFkZHJlc3MuXG5cblNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE1BQyBhZGRyZXNzIGlzIHVsdGltYXRlbHkgYmVpbmcgc2V0LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgdG8gZm9sbG93IHRoZSBjYWxsIHRvIGBldGhfbWFjX2FkZHJgIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy4gSSBleHBlY3QgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBpcyBsaWtlbHkgcGFzc2luZyB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIHRvIGBldGhfbWFjX2FkZHJgLCBhbmQgdGhlbiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgYGV0aF9tYWNfYWRkcmAgYWN0dWFsbHkgaGFuZGxlcyB0aGUgZGV2aWNlIGFuZCBwYWNrZXQgc3RydWN0dXJlIHRvIHNldCB0aGUgYWRkcmVzcy4gSSdtIGhvcGluZyBJIGNhbiB0cmFjZSB0aGlzIHF1aWNrbHkgdG8gaWRlbnRpZnkgdGhlIGlzc3VlIEknbSBjaGFzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ4MiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQwOjQzLjc5NDcwMTQyOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIyMDpcXHRzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXFxuMjIyMTpcXHR7XFxuMjIyMjpcXHRcXHRzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuMjIyMzpcXHRcXHR2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLVxcdTAwM2VtbWlvX2FkZHI7XFxuMjIyNDpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwO1xcbjIyMjU6XFx0XFxuMjIyNjpcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci1cXHUwMDNlc2FfZGF0YSkpXFxuMjIyNzpcXHRcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuMjIyODpcXHRcXG4yMjI5OlxcdFxcdGV0aF9od19hZGRyX3NldChkZXYsIGFkZHItXFx1MDAzZXNhX2RhdGEpO1xcbjIyMzA6XFx0XFxuMjIzMTpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZ0cC1cXHUwMDNlbG9jayk7XFxuMjIzMjpcXHRcXG4yMjMzOlxcdFxcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTtcXG4yMjM0OlxcdFxcdFJUTF9XMzJfRihNQUMwICsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi1cXHUwMDNlZGV2X2FkZHIpKTtcXG4yMjM1OlxcdFxcdFJUTF9XMzJfRihNQUMwICsgNCwgZ2V0X3VuYWxpZ25lZF9sZTE2KGRldi1cXHUwMDNlZGV2X2FkZHIgKyA0KSk7XFxuMjIzNjpcXHRcXHRSVExfVzhfRihDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spO1xcbjIyMzc6XFx0XFxuMjIzODpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnRwLVxcdTAwM2Vsb2NrKTtcXG4yMjM5OlxcdFxcbjIyNDA6XFx0XFx0cmV0dXJuIDA7XFxuMjI0MTpcXHR9XFxuMjI0MjpcXHRcXG4yMjQzOlxcdHN0YXRpYyBpbnQgcnRsODEzOV9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4yMjQ0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDA6NDMuNzk1MDk2MTU4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMDgzMzQyMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUFDIEFkZHJlc3MgSGFuZGxpbmcgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW5pdGlhbGx5LCB0aGUgY29kZSBoYWQgdGhlc2UgbGluZXM6XG5gYGBjXG5cdFJUTF9XMzJfRihNQUMwICsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtXHUwMDNlZGV2X2FkZHIgKyAwKSkpO1xuXHRSVExfVzMyX0YoTUFDMCArIDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICsgNCkpKTtcbmBgYFxuVGhlIGludGVudGlvbiB3YXMgdG8gd3JpdGUgdGhlIE1BQyBhZGRyZXNzIHRvIGhhcmR3YXJlIHJlZ2lzdGVycy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHB1bGxpbmcgNCBieXRlcyBmcm9tIGBkZXYtXHUwMDNlZGV2X2FkZHIgKyAwYCBhbmQgYGRldi1cdTAwM2VkZXZfYWRkciArIDRgLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBgZGV2LVx1MDAzZWRldl9hZGRyYCBpcyBhIHBvaW50ZXIgdG8gYSAzMi1ieXRlIGFycmF5IGluaXRpYWxpemVkIHRvIHplcm8uIFNvIHdoZW4gcmVhZGluZyBmcm9tIGBkZXYtXHUwMDNlZGV2X2FkZHIgKyA0YCwgd2UncmUgcmVhZGluZyBieXRlcyA0LCA1LCA2LCBhbmQgNywgYW5kIGJ5dGVzIDYgYW5kIDcgd291bGQgYWx3YXlzIGJlIHplcm8uIEhvd2V2ZXIsIGBNQUMwICsgNGAgaXMgYSAzMi1iaXQgcmVnaXN0ZXIsIGFuZCB3ZSdyZSB3cml0aW5nIGEgMzItYml0IHZhbHVlIHRvIGl0LlxuXG5UaGUgbWFpbiBpc3N1ZSBJIHNlZSBoZXJlIGlzIHRoZSAqcG90ZW50aWFsKiBmb3IgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MuIFRoZSBvbGQgY29kZSB3YXMgZG9pbmcgYW4gdW5hbGlnbmVkIHJlYWQgb2YgYSBgdTMyYCBmcm9tIGEgbWVtb3J5IGxvY2F0aW9uIHdoaWNoIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIDQtYnl0ZSBhbGlnbmVkLiBPbiBhcmNoaXRlY3R1cmVzIHdoZXJlIHVuYWxpZ25lZCBhY2Nlc3NlcyBhcmUgbm90IGhhbmRsZWQgZ3JhY2VmdWxseSwgdGhpcyB3b3VsZCBsZWFkIHRvIGV4Y2VwdGlvbnMgb3IgY3Jhc2hlcy4gVGhlIHBhdGNoJ3MgZml4IGludm9sdmVzIHJlcGxhY2luZyB0aGUgY29kZSB3aXRoOlxuYGBgY1xuXHRSVExfVzMyX0YoTUFDMCArIDAsIGdldF91bmFsaWduZWRfbGUzMihkZXYtXHUwMDNlZGV2X2FkZHIpKTtcblx0UlRMX1czMl9GKE1BQzAgKyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVx1MDAzZWRldl9hZGRyICsgNCkpO1xuYGBgXG5Ob3csIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCBhcmUgdXNlZC4gVGhlIHNlY29uZCBsaW5lIG5vdyByZWFkcyBvbmx5IDIgYnl0ZXMgYW5kIHRoZW4gemVyby1leHRlbmRzIGl0IHRvIDMyIGJpdHMsIHdoaWNoIGlzIGZpbmUgc2luY2UgYnl0ZXMgNiBhbmQgNyBmcm9tIHRoZSBwcmV2aW91cyBjb2RlIHdlcmUgYWx3YXlzIHplcm9zIGFueXdheS5cblxuTGV0J3MgdHJhY2UgYGRldi1cdTAwM2VkZXZfYWRkcmAuIFRoaXMgcG9pbnRlciBhY3R1YWxseSBwb2ludHMgdG8gYGhhLVx1MDAzZWFkZHJgLCBhbmQgYGhhYCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AuIFRoZSBgaGEtXHUwMDNlYWRkcmAgbG9jYXRpb24gY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgYG5ldGRldl9od19hZGRyYCBzdHJ1Y3Q6XG5gYGBjXG5zdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xuXHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0OyAvLyAxNiBieXRlc1xuXHRzdHJ1Y3QgcmJfbm9kZVx0XHRub2RlOyAvLyAyNCBieXRlc1xuXHR1bnNpZ25lZCBjaGFyXHRcdGFkZHJbTUFYX0FERFJfTEVOXTsgLy8gMzIgYnl0ZXNcbi4uLlxuYGBgXG5gYWRkcmAgc3RhcnRzIGF0IGFuIG9mZnNldCBvZiA0MCAoMTYgKyAyNCksIHdoaWNoIG1lYW5zIGl0J3MgOC1ieXRlIGFsaWduZWQgb24gYSA2NC1iaXQgYXJjaGl0ZWN0dXJlLiBUaGVyZWZvcmUsIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIDgtYnl0ZSBhbGlnbmVkLCB3aGljaCBtZWFucyBgZGV2LVx1MDAzZWRldl9hZGRyICsgNGAgaXMgNC1ieXRlIGFsaWduZWQuIFNvLCB0aGUgb3JpZ2luYWwgY29kZSAqd2FzKiA0LWJ5dGUgYWxpZ25lZC4gU28sIHdoeSB0aGUgY2hhbmdlP1xuXG5UaGUgcmVhc29uIGNvdWxkIGJlIGFib3V0IHN0cmljdCBhbGlhc2luZywgYW5kIHBvc3NpYmx5IHNvbWUgdG9vbHMgYXJlIGZsYWdnaW5nIGl0IGFzIHVuZGVmaW5lZCBiZWhhdmlvci4gQWxzbywgdGhlcmUgbWlnaHQgYmUgb3RoZXIgaW1wbGVtZW50YXRpb25zIHdoZXJlIHRoZSBhbGlnbm1lbnQgaXMgbm90IGd1YXJhbnRlZWQuXG5cbkJ1dCBoZXJlJ3MgYSBjcnVjaWFsIHBvaW50OiBUaGUgb2xkIGNvZGUgdXNlcyBgY3B1X3RvX2xlMzJgLiBUaGUgb3JpZ2luYWwgY29kZSByZWFkcyBieXRlcyBhcyBhIGB1MzJgLiBJZiB0aGUgTUFDIGFkZHJlc3MgaXMgYDAwOjExOjIyOjMzOjQ0OjU1YCwgYSBsaXR0bGUtZW5kaWFuIG1hY2hpbmUgd291bGQgcmVhZCBgMHgzMzIyMTEwMGAsIHdoaWNoIHRoZSBmdW5jdGlvbiBjb252ZXJ0cyB0byB0aGUgc2FtZSB2YWx1ZSBgMHgzMzIyMTEwMGAuIE9uIGEgYmlnLWVuZGlhbiBtYWNoaW5lLCB0aGUgcmVhZCB3b3VsZCBiZSBgMHgwMDExMjIzM2AsIHdoaWNoIGdldHMgY29udmVydGVkIHRvIGAweDMzMjIxMTAwYC4gVGhlcmVmb3JlLCBpdCAqc2VlbXMqIHRoYXQgYGNwdV90b19sZTMyYCBoYW5kbGVzIHRoZSBieXRlIG9yZGVyIGNvcnJlY3RseSBvbiBib3RoIGFyY2hpdGVjdHVyZXMuIEJ1dCBsZXQncyB2ZXJpZnkgaG93IGBSVExfVzMyX0ZgIGl0c2VsZiB3b3JrcywgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDE6MDMuODc4NDQzMTQ0WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzY0NDM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIFJUTF9XMzJfRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz02NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTM5X2V0aHRvb2xfb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtNjY1LSNkZWZpbmUgUlRMX1cxNl9GKHJlZywgdmFsMTYpXFx0ZG8geyBpb3dyaXRlMTYgKCh2YWwxNiksIGlvYWRkciArIChyZWcpKTsgaW9yZWFkMTYgKGlvYWRkciArIChyZWcpKTsgfSB3aGlsZSAoMClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo2NjY6I2RlZmluZSBSVExfVzMyX0YocmVnLCB2YWwzMilcXHRkbyB7IGlvd3JpdGUzMiAoKHZhbDMyKSwgaW9hZGRyICsgKHJlZykpOyBpb3JlYWQzMiAoaW9hZGRyICsgKHJlZykpOyB9IHdoaWxlICgwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTY2Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDE6MDMuOTU2MDk0MzkzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MDE2OTQ3OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCeXRlIE9yZGVyIGFuZCBNZW1vcnkgQWNjZXNzIGluIFBDSSBCdXMgV3JpdGVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGlvd3JpdGUzMmAgdGFrZXMgYSBgdTMyYCBpbiBDUFUgYnl0ZSBvcmRlciBhbmQgd3JpdGVzIGl0IGFzIGxpdHRsZS1lbmRpYW4gdG8gdGhlIFBDSSBidXMuICBTbywgd2hhdGV2ZXIgSSBwYXNzIGl0LCBgdmFsMzJgLCBuZWVkcyB0byBiZSBpbiBDUFUgYnl0ZSBvcmRlciwgZ290IGl0LlxuXG5UaGUgb2xkIGNvZGUgd2FzIGRvaW5nOiBgUlRMX1czMl9GKE1BQzAgKyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciArIDApKSk7YC4gIEhhbmcgb24uLi4gYGNwdV90b19sZTMyYCByZXR1cm5zIGEgYF9fbGUzMmAsIHdoaWNoIGlzICphbHJlYWR5KiBsaXR0bGUtZW5kaWFuLiBQYXNzaW5nIHRoYXQgZGlyZWN0bHkgdG8gYGlvd3JpdGUzMmAgaXMgbGlrZWx5IGEgcHJvYmxlbSBvbiBiaWctZW5kaWFuIG1hY2hpbmVzISBMZXQncyB0cmFjZSBpdCB0aHJvdWdoOlxuXG5PbiBhIGJpZy1lbmRpYW4gbWFjaGluZSwgaWYgYCoodTMyICopZGV2LVx1MDAzZWRldl9hZGRyYCBpcyBgMHgwMDExMjIzM2AsIHRoZW4gYGNwdV90b19sZTMyKDB4MDAxMTIyMzMpYCBiZWNvbWVzIGAweDMzMjIxMTAwYCAod2hpY2ggaXMgYSBgX19sZTMyYCkuIFRoZW4gYGlvd3JpdGUzMigweDMzMjIxMTAwKWAgKnN3YXBzKiBpdCBiYWNrIHRvIGAweDAwMTEyMjMzYCBvbiB0aGUgYnVzLiBUaGlzIG1lYW5zIHRoZSBidXMgKnNlZXMqIGAwMCAxMSAyMiAzM2AgaW4gbWVtb3J5IG9yZGVyISBJcyB0aGF0IHJpZ2h0PyBEbyBJIHJlbWVtYmVyIHRoZSBoYXJkd2FyZSBleHBlY3RhdGlvbnMgY29ycmVjdGx5PyBZZXMsIHRoZSBoYXJkd2FyZSAqZXhwZWN0cyogdGhlIE1BQyBhZGRyZXNzIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIsIHNvIGAwMCAxMSAyMiAzM2AgaXMgdGhlIGNvcnJlY3QgbGl0dGxlLWVuZGlhbiBvcmRlciB0aGF0IG5lZWRzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGJ1cy5cblxuQnV0IHdoYXQgYWJvdXQgYSBsaXR0bGUtZW5kaWFuIG1hY2hpbmU/IElmIGAqKHUzMiAqKWRldi1cdTAwM2VkZXZfYWRkcmAgaXMgYDB4MzMyMjExMDBgLCB0aGVuIGBjcHVfdG9fbGUzMigweDMzMjIxMTAwKWAgaXMgc3RpbGwgYDB4MzMyMjExMDBgLiBBbmQgYGlvd3JpdGUzMigweDMzMjIxMTAwKWAgd3JpdGVzIGAweDMzMjIxMTAwYCB0byB0aGUgYnVzLCB3aGljaCBpbiBsaXR0bGUtZW5kaWFuIG1lbW9yeSBvcmRlciBpcyBgMDAgMTEgMjIgMzNgLiBTbyBpdCBhY3R1YWxseSB3b3JrcyFcblxuU28gdGhlIG9sZCBjb2RlIHdhcyBjb3JyZWN0IG9uIGJvdGggYXJjaGl0ZWN0dXJlcywgKmJ1dCogaXQgdXNlZCBgY3B1X3RvX2xlMzJgIGFuZCBgaW93cml0ZTMyYCBpbmNvcnJlY3RseSwgbGVhZGluZyB0byBTcGFyc2Ugd2FybmluZ3MgKGJlY2F1c2UgYGlvd3JpdGUzMmAgd2FudHMgYSBgdTMyYCwgbm90IGEgYF9fbGUzMmApLiBUaGUgcHJvcGVyIHNvbHV0aW9uIHRvIHNpbGVuY2UgdGhlIHdhcm5pbmdzIGlzIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYC5cblxuYGdldF91bmFsaWduZWRfbGUzMihkZXYtXHUwMDNlZGV2X2FkZHIpYCByZWFkcyBmb3VyIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0IGZyb20gdGhlIHByb3ZpZGVkIGFkZHJlc3MgYW5kIHJldHVybnMgdGhlbSBhcyBhIGB1MzJgIGluIHRoZSAqQ1BVJ3MqIG5hdGl2ZSBieXRlIG9yZGVyLiBUaGVuLCB3aGVuIEkgd3JpdGUgdGhpcyByZXN1bHQgd2l0aCBgaW93cml0ZTMyYCAod2hpY2ggZXhwZWN0cyBhIENQVS1uYXRpdmUgYnl0ZSBvcmRlciBhbmQgd3JpdGVzIGluIGxpdHRsZS1lbmRpYW4pLCBJIGdldCB0aGUgY29ycmVjdCB2YWx1ZSBvbiB0aGUgYnVzLiBMZXQncyB0cmFjZSBhZ2Fpbi4uLlxuXG5PbiBMRTogYGdldF91bmFsaWduZWRfbGUzMmAgcmVhZHMgYDB4MzMyMjExMDBgLCBhbmQgcmV0dXJucyBgMHgzMzIyMTEwMGAuIFRoZW4gYGlvd3JpdGUzMigweDMzMjIxMTAwKWAgd3JpdGVzIGAwMCAxMSAyMiAzM2AgdG8gdGhlIGJ1cy4gT24gQkU6IGBnZXRfdW5hbGlnbmVkX2xlMzJgIHJlYWRzIGAwMCAxMSAyMiAzM2AsIGFuZCByZXR1cm5zIGAweDMzMjIxMTAwYC4gIFRoZW4gYGlvd3JpdGUzMigweDMzMjIxMTAwKWAgc3dhcHMgaXQgdG8gYDB4MDAxMTIyMzNgICh3aGljaCBpbiBtZW1vcnkgb3JkZXIgaXMgYDAwIDExIDIyIDMzYCkgb24gdGhlIGJ1cy4gIFNvIGl0IHdvcmtzISBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBjb252ZXJ0cyBsaXR0bGUgZW5kaWFuIHRvIENQVSBieXRlIG9yZGVyLiBUaGF0J3MgdGhlIGNvcnJlY3QgYXBwcm9hY2guXG5cbkJ1dCBub3csIHdoYXQgYWJvdXQgdGhlIG5leHQgbGluZT8gVGhlIG9yaWdpbmFsIGNvZGUgc2FpZDogYFJUTF9XMzJfRihNQUMwICsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtXHUwMDNlZGV2X2FkZHIgKyA0KSkpO2AsIGJ1dCB0aGUgY29kZSB3YXMgY2hhbmdlZCB0byBgUlRMX1czMl9GKE1BQzAgKyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVx1MDAzZWRldl9hZGRyICsgNCkpO2AuIFdoeSBkaWQgdGhleSB1c2UgYGdldF91bmFsaWduZWRfbGUxNmAgaW5zdGVhZCBvZiBgZ2V0X3VuYWxpZ25lZFxuXG4iLCJJbnB1dFRva2VucyI6MjMyMDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQxOjIwLjk3MzA0NDc1OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4MDpcXHR7XFxuIDY4MTpcXHRcXHR1bnNpZ25lZCBjaGFyIGFkZHJbTUFYX0FERFJfTEVOXTtcXG4gNjgyOlxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuIDY4MzpcXHRcXHRpbnQgZXJyO1xcbiA2ODQ6XFx0XFxuIDY4NTpcXHRcXHQvKiBydG5sX211dGV4IG11c3QgYmUgaGVsZCBoZXJlICovXFxuIDY4NjpcXHRcXG4gNjg3OlxcdFxcdF9faHdfYWRkcl9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycyk7XFxuIDY4ODpcXHRcXHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcXG4gNjg5OlxcdFxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksXFxuIDY5MDpcXHRcXHRcXHRcXHQgICAgTkVUREVWX0hXX0FERFJfVF9MQU4pO1xcbiA2OTE6XFx0XFx0aWYgKCFlcnIpIHtcXG4gNjkyOlxcdFxcdFxcdC8qXFxuIDY5MzpcXHRcXHRcXHQgKiBHZXQgdGhlIGZpcnN0IChwcmV2aW91c2x5IGNyZWF0ZWQpIGFkZHJlc3MgZnJvbSB0aGUgbGlzdFxcbiA2OTQ6XFx0XFx0XFx0ICogYW5kIHNldCBkZXZfYWRkciBwb2ludGVyIHRvIHRoaXMgbG9jYXRpb24uXFxuIDY5NTpcXHRcXHRcXHQgKi9cXG4gNjk2OlxcdFxcdFxcdGhhID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMubGlzdCxcXG4gNjk3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbGlzdCk7XFxuIDY5ODpcXHRcXHRcXHRkZXYtXFx1MDAzZWRldl9hZGRyID0gaGEtXFx1MDAzZWFkZHI7XFxuIDY5OTpcXHRcXHR9XFxuIDcwMDpcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MDE6XFx0fVxcbiA3MDI6XFx0XFxuIDcwMzpcXHR2b2lkIGRldl9hZGRyX21vZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxcbiA3MDQ6XFx0XFx0XFx0ICBjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MToyMC45NzMxMzg5NzhaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2MTc4Mzk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzdGVwLWJ5LXN0ZXAuIEknbSBsb29raW5nIGF0IHRoaXMgYG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpYCBsaW5lLiBUaGUgaW50ZW50IGlzIGNsZWFyOiB6ZXJvIG91dCB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYGFkZHJgLiBUaGUgaW50ZXJlc3RpbmcgZGV0YWlsIGhlcmUsIGFzIEkgc2VlIGl0LCBpcyB0aGUgc2l6ZSBiZWluZyB6ZXJvZWQuIGBzaXplb2YoYWRkcilgIGV2YWx1YXRlcyB0byBgTUFYX0FERFJfTEVOYCwgd2hpY2ggd2Uga25vdyBpcyAzMi4gU28sIHdlJ3JlIGV4cGxpY2l0bHkgemVyb2luZyAzMiBieXRlcyBvZiBtZW1vcnksIHByZXN1bWFibHkgdG8gaW5pdGlhbGl6ZSBgYWRkcmAuIFRoYXQgbWFrZXMgc2Vuc2UsIGxheWluZyBhIGNsZWFuIGZvdW5kYXRpb24gYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggdGhlIGFkZHJlc3MgZGF0YS5cblxuTm93LCBpbW1lZGlhdGVseSBhZnRlciB0aGlzIHplcm9pbmcgb3BlcmF0aW9uLCBgX19od19hZGRyX2FkZGAgaXMgYmVpbmcgaW52b2tlZCwgYW5kIGl0J3MgYmVpbmcgcGFzc2VkIHRoZSBgYWRkcmAgYW5kIGFuIGBhZGRyX2xlbmAgb2YgMzIuIFRoaXMgcHJvbXB0cyBhIHRob3JvdWdoIGluc3BlY3Rpb24gb2YgYF9faHdfYWRkcl9hZGRgLiBUaGUgemVyb2luZyBzdWdnZXN0cyBpdCdzIGEgcHJlLWVtcHRpdmUgbWVtb3J5IGNsZWFyaW5nIGZvciB0aGlzIGZ1bmN0aW9uLiBJcyBpdCBleHBlY3RpbmcgYSBmdWxseSBjbGVhcmVkIGJ1ZmZlciwgb3IgaXMgaXQgZ29pbmcgdG8gd3JpdGUgaW50byBpdD8gRWl0aGVyIHdheSwgdGhlIHByZWNlZGluZyBgbWVtc2V0YCBwcm92aWRlcyBhIGtub3duIHN0YXJ0aW5nIHN0YXRlIGFuZCBnaXZlcyB1cyB0aGUgY2FwYWJpbGl0eSB0byBrbm93IHdoYXQgc3RhdGUgdGhlIGJ1ZmZlciBpcy4gVGltZSB0byBkaWcgaW50byB0aGUgaW50ZXJuYWxzIG9mIGBfX2h3X2FkZHJfYWRkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4NjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQxOjI1LjczNDkyNjYxMloiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjkxNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHdfYWRkcl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUzPV9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NC1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc1OnN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc2LVxcdFxcdFxcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzMi1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMzpzdGF0aWMgaW50IF9faHdfYWRkcl9hZGQoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzQtXFx0XFx0XFx0IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM2LXtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzNzpcXHRyZXR1cm4gX19od19hZGRyX2FkZF9leChsaXN0LCBhZGRyLCBhZGRyX2xlbiwgYWRkcl90eXBlLCBmYWxzZSwgZmFsc2UsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzgtXFx0XFx0XFx0XFx0MCwgZmFsc2UpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0yMTI9c3RhdGljIGludCBfX2h3X2FkZHJfc3luY19vbmUoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnRvX2xpc3QsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjIxODpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KHRvX2xpc3QsIGhhLVxcdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXFx1MDAzZXR5cGUsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMTktXFx0XFx0XFx0ICAgICAgIGZhbHNlLCB0cnVlLCBoYS1cXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9Njc5PWludCBkZXZfYWRkcl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY4OC1cXHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4OTpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjkwLVxcdFxcdFxcdCAgICBORVRERVZfSFdfQUREUl9UX0xBTik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTcyOT1pbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTczOC1cXHRcXHRyZXR1cm4gZXJyO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NzM5OlxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLCBhZGRyX3R5cGUpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQwLVxcdGlmICghZXJyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz03OTI9aW50IGRldl91Y19hZGRfZXhjbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3OTc6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2V1YywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc5OC1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9VTklDQVNULCB0cnVlLCBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTgxOS1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjgyMDpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkKFxcdTAwMjZkZXYtXFx1MDAzZXVjLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVxcdFxcdFxcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05Nzc9aW50IGRldl9tY19hZGRfZXhjbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODEtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2VtYywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4My1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIHRydWUsIGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05OTI9c3RhdGljIGludCBfX2Rldl9tY19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6OTk4OlxcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXFx1MDAyNmRldi1cXHUwMDNlbWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05OTktXFx0XFx0XFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCBnbG9iYWwsIGZhbHNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MToyNS44NDI2MjM1NjNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA4NTYwNzMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhhcmR3YXJlIEFkZHJlc3MgQ3JlYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBfX2h3X2FkZHJfYWRkX2V4YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGhhcmR3YXJlIGFkZHJlc3NlcyBhcmUgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSBpdCBjYWxscyBgX19od19hZGRyX2NyZWF0ZWAuIE5vdywgaW5zaWRlIGBfX2h3X2FkZHJfY3JlYXRlYCwgdGhlIGNvZGUgYWxsb2NhdGVzIG1lbW9yeSB1c2luZyBga21hbGxvY2AgYW5kIHRoZW4gdXNlcyBgbWVtY3B5YCB0byBjb3B5IHRoZSBoYXJkd2FyZSBhZGRyZXNzIGRhdGEuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGF0IGBhZGRyX2xlbmAgaXMgMzIgYnl0ZXMsIGFzIGRldGVybWluZWQgZWFybGllciBieSBgZGV2X2FkZHJfaW5pdGAsIGFuZCB0aGUgc291cmNlIGBhZGRyYCBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MuIFNvLCB0aGF0IG1lYW5zIHRoZSBgaGEtXHUwMDNlYWRkcmAgZmllbGQgd2l0aGluIHRoZSBuZXdseSBjcmVhdGVkIGhhcmR3YXJlIGFkZHJlc3Mgc3RydWN0dXJlIGlzICpndWFyYW50ZWVkKiB0byBiZSB6ZXJvZWQgb3V0IGFmdGVyIHRoZSBgbWVtY3B5YC5cblxuVGhlcmVmb3JlLCB0aGUgaW5pdGlhbCBoeXBvdGhlc2lzIHRoYXQgdGhlIHJlYWQgb2YgYnl0ZXMgNiBhbmQgNyBvZiBgZGV2LVx1MDAzZWRldl9hZGRyYCBjb3VsZCBjYXVzZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGlzIGluY29ycmVjdDsgdGhlIHJlc3VsdGluZyB2YWx1ZXMgc2hvdWxkIGJlIHplcm8uIEl0J3Mgbm90IGEgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb24uIFRoYXQncyBhIHJlbGllZiFcblxuQnV0IHdhaXQuLi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXMgdGhlcmUgYW5vdGhlciBwb3NzaWJpbGl0eT8gQ291bGQgYGRldi1cdTAwM2VkZXZfYWRkcmAgYmUgb3ZlcndyaXR0ZW4gYnkgYSBkcml2ZXIgYXQgYSBsYXRlciBwb2ludD8gSXQncyBwb3NzaWJsZSBhIGRyaXZlciBtaWdodCBhc3NpZ24gaXRzIG93biBidWZmZXIgdG8gYGRldi1cdTAwM2VkZXZfYWRkcmAsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBhbiBpc3N1ZS4gVGltZSB0byBjaGVjayB0aGUgY29kZWJhc2UgYW5kIHNlYXJjaCBmb3IgYW55IGluc3RhbmNlcyB3aGVyZSBgZGV2LVx1MDAzZWRldl9hZGRyYCBpcyBkaXJlY3RseSBhc3NpZ25lZCBhIG5ldyB2YWx1ZS4gR290dGEgcnVsZSBvdXQgdGhhdCBwb3RlbnRpYWwgc2NlbmFyaW8uIEdvdHRhIGtlZXAgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDE6MzMuOTI4MjM0MzQ1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg3NzgxMzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldi1cXHUwMDNlZGV2X2FkZHIgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQxOjM0LjE3NzAyMzY1MloiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM5NjgxOTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBOZXR3b3JrIERldmljZSBBZGRyZXNzIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGFuZCB3cml0dGVuIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMsIHNwZWNpZmljYWxseSBjb25zaWRlcmluZyBhbGlnbm1lbnQgYW5kIGVuZGlhbm5lc3MuIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgdGhlIGNoYW5nZSBmcm9tIGRpcmVjdCBjYXN0aW5nIGFuZCBkZXJlZmVyZW5jaW5nIChgKih1MzIgKilkZXYtXHUwMDNlZGV2X2FkZHJgKSB0byB1c2luZyBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgd2FzIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidXQgdGhhdCdzIG5vdCBpdC4gYGRldi1cdTAwM2VkZXZfYWRkcmAgKmFsd2F5cyogcG9pbnRzIHRvIGEgMzItYnl0ZSByZWdpb24sIHplcm8taW5pdGlhbGl6ZWQsIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBhcmUgY2FyZWZ1bGx5IGNvbnRyb2xsZWQgdGhyb3VnaCBgZXRoX2h3X2FkZHJfc2V0YCBvciBgZGV2X2FkZHJfbW9kYCwgc28gdGhlIHBhZGRpbmcgYnl0ZXMgYmV5b25kIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MgYXJlIGFsd2F5cyB6ZXJvLiBBbHNvLCBpdCdzIGFsd2F5cyA0LWJ5dGUgYWxpZ25lZCBvbiBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHNvIGFsaWdubWVudCB3YXNuJ3QgdGhlIGlzc3VlLCB3aGljaCBpbml0aWFsbHkgc3VycHJpc2VkIG1lLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBzZWVtcyB0byBiZSBlbmRpYW5uZXNzIGFuZCBzdHJpY3QgYWxpYXNpbmcuIENhc3RpbmcgYHVuc2lnbmVkIGNoYXIgKmAgdG8gYHUzMiAqYCBpcyBhIHN0cmljdCBhbGlhc2luZyB2aW9sYXRpb24uIEFsc28sIGRlcmVmZXJlbmNpbmcgdGhlIGNhc3QgYHUzMiAqYCBtaWdodCBub3Qgd29yayBjb3JyZWN0bHkgb24gYmlnLWVuZGlhbiBhcmNoaXRlY3R1cmVzLlxuXG5PbiBMaXR0bGUgRW5kaWFuLCB0aGUgb2xkIGNvZGUgd29ya2VkIGFzIGV4cGVjdGVkLiBIb3dldmVyLCBvbiBCaWcgRW5kaWFuLCB0aGUgb2xkIGNvZGUgKndhcyogc3VidGx5IGJyb2tlbi4gTGV0J3MgdHJhY2UgaXQuXG5PbiBCaWcgRW5kaWFuLCBgKih1MzIgKilkZXYtXHUwMDNlZGV2X2FkZHJgIHdvdWxkIHJlYWQgdGhlIGJ5dGVzIGluIHRoZSB3cm9uZyBvcmRlci4gIGBjcHVfdG9fbGUzMmAgd291bGQgZml4IHRoZSBieXRlIG9yZGVyLCBidXQgdGhlbiBgaW93cml0ZTMyYCAob3IgYF9fcmF3X3dyaXRlbGAgYWZ0ZXIgYXBwbHlpbmcgYGNwdV90b19sZTMyYCkgd291bGQgc3dhcCB0aGUgYnl0ZXMgKmFnYWluKiBkdWUgdG8gdGhlIGV4cGVjdGVkIG5hdGl2ZSBlbmRpYW5uZXNzIG9mIGBpb3dyaXRlMzJgLiBUaGF0IHdvdWxkIHRoZW4gd3JpdGUgYSBNQUMgYWRkcmVzcyBpbiB0aGUgd3Jvbmcgb3JkZXIuIFRoaXMgd291bGQgd3JpdGUgTUFDIGFkZHJlc3MgYnl0ZXMgaW4gcmV2ZXJzZWQgYnl0ZSBvcmRlciBvbiBCaWcgRW5kaWFuIG1hY2hpbmVzLiBgZ2V0X3VuYWxpZ25lZF9sZTMyYCByZWFkcyBhIGxpdHRsZS1lbmRpYW4gMzItYml0IHZhbHVlIGluIG1lbW9yeSBhbmQgcmV0dXJucyBpdCBhcyBhIENQVS1lbmRpYW4gdmFsdWUuIFRoaXMgd2lsbCByZXNvbHZlIHRoZSBlcnJvci5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggbGlrZWx5IGZpeGVzIHRoZSBlbmRpYW5uZXNzIGlzc3VlLiBBZGRpdGlvbmFsbHksIGl0IHJlc29sdmVzIHRoZSBzdHJpY3QgYWxpYXNpbmcgYW5kIHBvdGVudGlhbGx5IGFuIHVuYWxpZ25lZCBhY2Nlc3Mgd2FybmluZyAoZXZlbiB0aG91Z2ggaW4gcHJhY3RpY2UgaXQgaXMgYWxpZ25lZCkuIFRoZSBjaGFuZ2UgdG8gYGdldF91bmFsaWduZWRfbGUxNmAgZm9yIHRoZSBzZWNvbmQgcGFydCBpcyBiZWNhdXNlIHJlYWRpbmcgYnl0ZXMgNiBhbmQgNyAob3V0c2lkZSBvZiB0aGUgNi1ieXRlIE1BQykgaXMgdW5kZXNpcmFibGUgZnJvbSBhIGNvZGUgc2FmZXR5IHBlcnNwZWN0aXZlLiBFdmVuIHRob3VnaCB0aGVzZSBieXRlcyBhcmUgYWx3YXlzIDAsIHJlYWRpbmcgdGhlbSBpcyBub3QgaWRlYWwuIEl0J3Mgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYmVjYXVzZSB0aGV5IGFyZSB6ZXJvZWQgYW5kIGV4aXN0IGluIGFsbG9jYXRlZCBtZW1vcnkuIFRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhIGdvb2QtcHJhY3RpY2UgZml4IGZvciBlbmRpYW5uZXNzLCBzdHJpY3QgYWxpYXNpbmcsIGFuZCB0byBhdm9pZCByZWFkaW5nIG1lbW9yeSB0aGF0J3MgY29uY2VwdHVhbGx5IG91dC1vZi1ib3VuZHMuIEFsc28sIEtNU0FOIGFuZCBvdGhlciBtZW1vcnkgc2FuaXRpemVycyB3b24ndCBjb21wbGFpbiBiZWNhdXNlIG9mIHRoZSB6ZXJvaW5nIGluIGBkZXZfYWRkcl9pbml0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxMzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQyOjE1LjU3Mzg0NjMwN1oiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxMjkzMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2FkZHJfZmx1c2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY0Mj12b2lkIGRldl9hZGRyX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY1My0vKipcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY1NDogKlxcdGRldl9hZGRyX2ZsdXNoIC0gRmx1c2ggZGV2aWNlIGFkZHJlc3MgbGlzdFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjU1LSAqXFx0QGRldjogZGV2aWNlXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY2MC0gKi9cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY2MTp2b2lkIGRldl9hZGRyX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MjoxNS42NTc5ODI0MjVaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0MzMzNDM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgZGV2X2FkZHJfZmx1c2hgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIGNvZGUgaW5kaWNhdGVzIHdlJ3JlIGFib3V0IHRvIGV4YW1pbmUgYGRldl9hZGRyX2ZsdXNoYC4gSnVzdCB0aGUgbmFtZSBpdHNlbGYgaGludHMgYXQgc29tZSBzb3J0IG9mIGZsdXNoaW5nIG9wZXJhdGlvbiByZWxhdGVkIHRvIGRldmljZSBhZGRyZXNzZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgY2FuIGltbWVkaWF0ZWx5IHN0YXJ0IGh5cG90aGVzaXppbmcg4oCTIGlzIHRoaXMgcmVsYXRlZCB0byBBUlAgY2FjaGUgaW52YWxpZGF0aW9uPyBQZXJoYXBzIHNvbWV0aGluZyBpbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGNoYW5nZXM/IE9yIG1heWJlIGV2ZW4gbW9yZSBmdW5kYW1lbnRhbCwgbGlrZSBjbGVhcmluZyBzdGFsZSBlbnRyaWVzIGluIGEgaGFyZHdhcmUgYWRkcmVzcyB0YWJsZT8gSSdsbCBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB0byBmb3JtIGEgcHJvcGVyIGh5cG90aGVzaXMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0byBxdWlja2x5IGZvcm0gYSBtZW50YWwgY2hlY2tsaXN0IG9mIHJlbGF0ZWQgYXJlYXMgbGlrZSBkcml2ZXIgYXJjaGl0ZWN0dXJlLCBuZXR3b3JraW5nIHByb3RvY29scywgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDI6MjEuMTAxMzIyMjMyWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1NCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY1NDpcXHQgKlxcdGRldl9hZGRyX2ZsdXNoIC0gRmx1c2ggZGV2aWNlIGFkZHJlc3MgbGlzdFxcbiA2NTU6XFx0ICpcXHRAZGV2OiBkZXZpY2VcXG4gNjU2OlxcdCAqXFxuIDY1NzpcXHQgKlxcdEZsdXNoIGRldmljZSBhZGRyZXNzIGxpc3QgYW5kIHJlc2V0IC1cXHUwMDNlZGV2X2FkZHIuXFxuIDY1ODpcXHQgKlxcbiA2NTk6XFx0ICpcXHRUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcnRubF9tdXRleC5cXG4gNjYwOlxcdCAqL1xcbiA2NjE6XFx0dm9pZCBkZXZfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA2NjI6XFx0e1xcbiA2NjM6XFx0XFx0LyogcnRubF9tdXRleCBtdXN0IGJlIGhlbGQgaGVyZSAqL1xcbiA2NjQ6XFx0XFx0ZGV2X2FkZHJfY2hlY2soZGV2KTtcXG4gNjY1OlxcdFxcbiA2NjY6XFx0XFx0X19od19hZGRyX2ZsdXNoKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycyk7XFxuIDY2NzpcXHRcXHRkZXYtXFx1MDAzZWRldl9hZGRyID0gTlVMTDtcXG4gNjY4OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDI6MjEuMTAxNDc0MTkyWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2OTc4OTc0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBkZXZfYWRkcl9mbHVzaGAgc2V0cyBgZGV2LVx1MDAzZWRldl9hZGRyYCB0byBgTlVMTGAsIGFuZCBpdCdzIG9ubHkgY2FsbGVkIGluIGBmcmVlX25ldGRldmAuIFNvLCB5b3UnZCB0aGluayBgZGV2LVx1MDAzZWRldl9hZGRyYCBpcyBuZXZlciByZS1hc3NpZ25lZCBhZnRlciBgZGV2X2FkZHJfaW5pdGAsIHdoaWNoIHNob3VsZCB6ZXJvIGl0LiBCdXQgd2FpdC4uLiB3aGF0IGFib3V0IHZpcnR1YWwgZGV2aWNlcz8gRGV2aWNlcyBsaWtlIGJvbmRpbmcgb3IgVkxBTiBpbnRlcmZhY2VzIGNhbiBtb2RpZnkgdGhlaXIgTUFDIGFkZHJlc3NlcyB1c2luZyBgZGV2X2FkZHJfbW9kYCwgYnV0IHRoYXQgZnVuY3Rpb24gb25seSBtb2RpZmllcyB0aGUgZmlyc3Qgc2l4IGJ5dGVzLlxuXG5TbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgaXQgKnBvc3NpYmxlKiB0aGF0IGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzbid0IGZ1bGx5IHplcm9lZD8gTGV0J3MgZGlnIGRlZXBlci4gVGhlIGNvZGUgZm9yIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgaXMgcmlnaHQgdGhlcmUuICBJIHNlZSB0aGF0IGl0IHVzZXMgYGV0aF9od19hZGRyX3NldChkZXYsIGFkZHItXHUwMDNlc2FfZGF0YSlgLiAgQWhhISBgZXRoX2h3X2FkZHJfc2V0YCBjb3BpZXMgNiBieXRlcyBmcm9tIGBhZGRyLVx1MDAzZXNhX2RhdGFgIHRvIGBkZXYtXHUwMDNlZGV2X2FkZHJgLiBCdXQgd2hlcmUgZG9lcyBgYWRkcmAgY29tZSBmcm9tPyAgSXQgY29tZXMgZnJvbSB1c2VyIHNwYWNlLCB2aWEgYGlvY3RsYCBvciBgbmV0bGlua2AuXG5cbkFuZCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIElmIHVzZXIgc3BhY2UgcGFzc2VzIGEgYHNvY2thZGRyYCBzdHJ1Y3R1cmUgd2hlcmUgdGhlIHRyYWlsaW5nIGJ5dGVzIG9mIGBzYV9kYXRhYCBhcmUgKnVuaW5pdGlhbGl6ZWQqLCB3ZSBoYXZlIGEgcG90ZW50aWFsIGlzc3VlLiBSZW1lbWJlciwgYHNhX2RhdGFgIGlzIDE0IGJ5dGVzLCBidXQgYGV0aF9od19hZGRyX3NldGAgKm9ubHkqIGNvcGllcyB0aGUgZmlyc3QgNi4gU28sIGFueSB1bmluaXRpYWxpemVkIGRhdGEgYmV5b25kIHRoZSBmaXJzdCA2IGJ5dGVzIGluIGBzYV9kYXRhYCB3b3VsZG4ndCBiZSBjb3BpZWQuIFNpbmNlIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHdhcyB6ZXJvZWQgYXQgaW5pdGlhbGl6YXRpb24sIHRoZSByZW1haW5pbmcgYnl0ZXMgKGJ5dGVzIDYgYW5kIDcpIG9mIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHdvdWxkICpzdGlsbCogYmUgemVyb2VkLlxuXG5Ib3dldmVyLCBpZiBLTVNBTiB3ZXJlIHRvIHJlcG9ydCBhbiB1bmluaXRpYWxpemVkIHZhbHVlLCBpdCB3b3VsZCBwb2ludCB0byB0aGlzIGZ1bmN0aW9uIGFzIGEgbG9jYXRpb24uXG5cbkxldCdzIGRvIHNvbWUgc2VhcmNoaW5nIGZvciBLTVNBTiByZXBvcnRzIHJlbGF0ZWQgdG8gYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHZ1bG5lcmFiaWxpdHkgZXhpc3RzIGluIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5MzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MjozMC43OTkzNzQ4MDlaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjQzMjkzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRsODEzOV9zZXRfbWFjX2FkZHJlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTY0Nj1zdGF0aWMgdm9pZCBydGw4MTM5X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy02NDctI2VuZGlmXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6NjQ4OnN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtNjQ5LXN0YXRpYyBpbnQgcnRsODEzOV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz05MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTM5X25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjctXFx0Lm5kb192YWxpZGF0ZV9hZGRyXFx0PSBldGhfdmFsaWRhdGVfYWRkcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo5Mjg6XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXFx0PSBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjktXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBydGw4MTM5X3N0YXJ0X3htaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz0yMjA5PXN0YXRpYyB2b2lkIHJ0bDgxMzlfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMjE5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjIyMjA6c3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MjozMy4xNjM3MDg0MDRaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI1MjI5NjU5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBLTVNBTiBSZXBvcnRzIGluIHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByb290IGNhdXNlIGZvciBhIHBvdGVudGlhbCBLTVNBTiByZXBvcnQgcmVsYXRlZCB0byBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLiBUaGUgY2VudHJhbCBpc3N1ZSBzZWVtcyB0byBiZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gYGRldi1cdTAwM2VkZXZfYWRkcmAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGlzIGNvdWxkIHN0ZW0gZnJvbSB0aGUgYnl0ZXMgYXQgb2Zmc2V0cyA2IGFuZCA3IHdpdGhpbiBgZGV2LVx1MDAzZWRldl9hZGRyYCBub3QgYmVpbmcgaW5pdGlhbGl6ZWQuIEhvd2V2ZXIsIEkga25vdyBmcm9tIGBkZXZfYWRkcl9pbml0YCB0aGF0IHRob3NlIGJ5dGVzIHNob3VsZCBiZSBzZXQgdG8gemVyby5cblxuSSBoYWQgdG8gY2xhcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSXMgYGRldl9hZGRyX2luaXRgIEFMV0FZUyBjYWxsZWQ/IFllcywgaXQncyBjYWxsZWQgZHVyaW5nIGBhbGxvY19uZXRkZXZfbXFzYC4gQ291bGQgdGhlcmUgYmUgYSBjYXNlIHdoZXJlIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIGFsbG9jYXRlZCBkaWZmZXJlbnRseSwgc3BlY2lmaWNhbGx5LCBub3QgYXMgYSAzMi1ieXRlIGFycmF5IGFzIEkgYXNzdW1lPyBJIHJ1bGVkIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgYGRldi1cdTAwM2VkZXZfYWRkcmAgYmVpbmcgbW9kaWZpZWQgZGlyZWN0bHkgKGUuZy4sIGBkZXYtXHUwMDNlZGV2X2FkZHIgPSBzb21lX2J1ZmZlcmApIGJlY2F1c2UgSSBmb3VuZCBubyBzdWNoIGRpcmVjdCBhc3NpZ25tZW50cyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeS5cblxuSSBjb25zaWRlcmVkIGBkZXZfYWRkcl9tb2RgLCB3aGljaCBtb2RpZmllcyB0aGUgYGhhLVx1MDAzZWFkZHJgICppbiBwbGFjZSouIFRoaXMgaXNuJ3QgdGhlIGlzc3VlLiBCdXQsIGRvZXMgYGRldi1cdTAwM2VkZXZfYWRkcmAgcG9pbnQgdG8gYSBkaWZmZXJlbnQgYnVmZmVyIG90aGVyIHRoYW4gYGhhLVx1MDAzZWFkZHJgPyBOb3QgYWNjb3JkaW5nIHRvIHRoZSBjb2RlOyB0aGUgYGRldl9hZGRyX2luaXRgIGZ1bmN0aW9uIHNldHMgdGhpbmdzIHVwIGNvcnJlY3RseSBhbmQgdGhpcyBpcyB0aGUgb25seSBjb2RlIHNldHRpbmcgdXAgdGhlIGRldmljZSBhZGRyZXNzLiBUaGUgTUFDIGFkZHJlc3MgaXMgYSAzMi1ieXRlIGFycmF5IHRvIGhhbmRsZSB0aGlzLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBldm9sdmVkIGludG8gd2h5IHRoZXkgY2hhbmdlZCB0aGUgY29kZSB0byBgZ2V0X3VuYWxpZ25lZF9sZTE2YC4gVGhpcyBjaGFuZ2UgaGFzIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIHByZXZpb3VzIGFwcHJvYWNoIHdpdGggYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBsb29rZWQgbGlrZSBpdCB3b3VsZCByZWFkIGJ5dGVzIDQsIDUsIDYsIDcgYW5kIGl0IHdvdWxkIG5vdCBjcmFzaCBiZWNhdXNlIHRoZSBhcnJheSBpcyAzMiBieXRlcyBhbmQgdGhlIDZ0aCBhbmQgN3RoIGJ5dGVzIGFyZSAwLiBOb3cgSSdtIHJlbWluZGVkIHRoYXQgS0FTQU4gZGV0ZWN0cyBvdXQtb2YtYm91bmRzIHJlYWRzLCBidXQgc2luY2UgYGRldi1cdTAwM2VkZXZfYWRkcmAgaXMgYSAzMi1ieXRlIGFycmF5LCBLQVNBTiBkb2Vzbid0IGRldGVjdCBpdC4gS01TQU4sIGhvd2V2ZXIsIGRldGVjdHMgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGFyZSBieXRlcyA2IGFuZCA3IHVuaW5pdGlhbGl6ZWQ/IE5vLiBJIGNoZWNrZWQgYWdhaW4gYGRldl9hZGRyX2luaXRgLCB3aGljaCB6ZXJvZXMgYWxsIDMyIGJ5dGVzIG9mIHRoZSBNQUMgYWRkcmVzcy4gSSBmb3VuZCBgX19od19hZGRyX2FkZGAgdGFrZXMgMzIgYnl0ZXMuIFRoZW4gaXQncyBjb3BpZWQgdG8gYGhhLVx1MDAzZWFkZHJgIHdpdGggMzIgYnl0ZXMuIFNvIGl0J3MgemVyb2VkLlxuXG5JIG5lZWQgdG8gY29uZmlybSBhbGwgdGhlIGluaXRpYWxpemF0aW9uIHBhdGhzLiBXaGF0IGlmIHRoZSBhZGRyZXNzIG1vZGlmaWNhdGlvbiB2aWEgYGV0aF9od19hZGRyX3NldGAgY2hhbmdlcyB0aGUgdmFsdWUgYWZ0ZXIgdGhlIGluaXRpYWwgemVyb2luZz8gVGhpcyBmdW5jdGlvbiBjb3BpZXMgNiBieXRlcyB0byBgaGEtXHUwMDNlYWRkcmAsIGJ1dCB0aGUgcmVtYWluaW5nIGJ5dGVzIHJlbWFpbiBhcyAwLiBTbywgYWdhaW4sIGl0J3MgaW5pdGlhbGl6ZWQuXG5cblNvLCBpcyB0aGVyZSBBTlkgY2FzZSB3aGVyZSBgaGEtXHUwMDNlYWRkcmAgaXMgaW5pdGlhbGl6ZWQgdG8gbGVzcyB0aGFuIDMyIGJ5dGVzPyBXaGF0IGFib3V0IHRoZSBjYWxsIHRvIGBfX2h3X2FkZHJfY3JlYXRlYD8gSW4gYGRldl9hZGRyX2luaXRgLCB0aGUgc2l6ZSBpcyAzMi4gT2theSwgc28gd2hhdCBpZiBgZGV2X2FkZHJfbW9kYCBjYWxscyBgX19od19hZGRyX2luc2VydGAgd2l0aCBsZW5ndGggNj8gSSBzZWUgdGhlIGluc2VydCBkb2Vzbid0IG1vZGlmeSB0aGUgZGF0YSwgc28gaXQgd29uJ3QgaW1wYWN0IGBoYS1cdTAwM2VhZGRyYC4gQWxzbywgZG9lcyBgZGV2LVx1MDAzZWRldl9hZGRyYCBldmVyIHBvaW50IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBgaGFgPyBJIHNlYXJjaGVkIGFuZCBJJ20gcmVtaW5kZWQgYGRldi1cdTAwM2VkZXZfYWRkcmAgYWx3YXlzIHBvaW50cyB0byBgaGEtXHUwMDNlYWRkcmAsIHdoaWNoIGlzIGNyZWF0ZWQgaW4gYGRldl9hZGRyX2luaXRgLiBTbyBhZ2FpbiwgaXQgaXMgYWx3YXlzIHplcm9lZC4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGlzbid0IGFub3RoZXIgcGxhY2UgdGhhdCdzIHNldHRpbmcgdGhpcyB2YWx1ZTogYGRldl9hZGRyX3NldGAuXG5cbkkndmUgZXhoYXVzdGVkIGFsbCBwbGF1c2libGUgZXhwbGFuYXRpb25zLiBUaGUgS01TQU4gcmVwb3J0IG11c3QgaGF2ZSBiZWVuIGEgZmFsc2UgcG9zaXRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NTU1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0Mjo1NS42ODY2NzkwNjJaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjExNTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkciA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz0xMDAyMD1pbnQgbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFkZHIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDAyNS1cXHRcXHQuaW5mby5leHRhY2sgPSBleHRhY2ssXFxubmV0L2NvcmUvZGV2LmM6MTAwMjY6XFx0XFx0LmRldl9hZGRyID0gYWRkcixcXG5uZXQvY29yZS9kZXYuYy0xMDAyNy1cXHR9O1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02NjE9dm9pZCBkZXZfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjYtXFx0X19od19hZGRyX2ZsdXNoKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2Njc6XFx0ZGV2LVxcdTAwM2VkZXZfYWRkciA9IE5VTEw7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjgtfVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02Nzk9aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjk3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbGlzdCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2OTg6XFx0XFx0ZGV2LVxcdTAwM2VkZXZfYWRkciA9IGhhLVxcdTAwM2VhZGRyO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjk5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDI6NTUuODM4ODAzOTU5WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Mjc1NTYxMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcywgYXMgYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyLCBiZWdpbnMgd2l0aCB2ZXJpZnlpbmcgdGhlIGNvcmUgYXNzZXJ0aW9uOiBpcyBgZGV2LVx1MDAzZWRldl9hZGRyYCB0cnVseSBpbml0aWFsaXplZD8gVGhlIGNvZGUgY2xlYXJseSBzZXRzIGl0IGluIGBkZXZfYWRkcl9pbml0YCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gVGhpcyBpcyBjcml0aWNhbC4gU2luY2UgSSBrbm93IGBkZXZfYWRkcl9pbml0YCBpcyBjb25zaXN0ZW50bHkgY2FsbGVkLCB0aGUgYnVmZmVyICpzaG91bGQqIGFsd2F5cyBiZSBpbml0aWFsaXplZC4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgZG9lcyB0aGUgKnBhdGNoKiBjaGFuZ2UgdGhpcywgb3IgaW50cm9kdWNlIGEgbmV3IHBhdGggd2hlcmUgdGhpcyBpbml0aWFsaXphdGlvbiBpcyBza2lwcGVkP1xuXG5UaGUgS01TQU4gcXVlc3Rpb24gcmV2b2x2ZXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJZiB0aGUgcGF0Y2ggZml4ZWQgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGVuIEtNU0FOIHdvdWxkIGJlIGltcG9ydGFudC4gQnV0IGlmIHRoZSBwYXRjaCBvbmx5ICpwcmV2ZW50cyogdGhlIHJlYWQsIHRoZW4gS01TQU4gaXMgbGlrZWx5IGlycmVsZXZhbnQsIHNpbmNlIEtNU0FOIGNhbid0ICpkZXRlY3QqIHRoYXQgdGhlIHJlYWQgZG9lc24ndCBoYXBwZW4uXG5cbkkgc3RhcnRlZCBkaWdnaW5nIGludG8gdGhlIHBhdGNoLCBhbmQgdGhlIGtleSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgYGRldi1cdTAwM2VkZXZfYWRkcmAgaXMgdXNlZCBhbmQgc2V0LiBJIGxvb2tlZCBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgZGV2LVx1MDAzZWRldl9hZGRyYCwgY29uZmlybWluZyBpdCdzIGEgcG9pbnRlciwgYW5kIHdoZXJlIGl0J3MgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBpcyBhIGNsdWUuIFRoZW4gSSBmb2N1c2VkIG9uIHRoZSBzcGVjaWZpYyBjb2RlIGluIHRoYXQgZnVuY3Rpb24sIHRoYXQncyBiZWluZyBjaGFuZ2VkOlxuXG5gYGBjXG4tXHRSVExfVzMyX0YoTUFDMCArIDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICsgMCkpKTtcbi1cdFJUTF9XMzJfRihNQUMwICsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtXHUwMDNlZGV2X2FkZHIgKyA0KSkpO1xuK1x0UlRMX1czMl9GKE1BQzAgKyAwLCBnZXRfdW5hbGlnbmVkX2xlMzIoZGV2LVx1MDAzZWRldl9hZGRyKSk7XG4rXHRSVExfVzMyX0YoTUFDMCArIDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtXHUwMDNlZGV2X2FkZHIgKyA0KSk7XG5gYGBcblxuVGhlIG9sZCBjb2RlIGxvb2tzIHN1c3BpY2lvdXMuIEl0IHJlYWRzIGEgYHUzMmAgZnJvbSBhbiBhZGRyZXNzIHRoYXQgY29uY2VwdHVhbGx5IHJlcHJlc2VudHMgYSA2LWJ5dGUgTUFDIGFkZHJlc3MsIG1lYW5pbmcgaXQgbWlnaHQgcmVhZCBiZXlvbmQgdGhlIE1BQy4gVGhlIHNpemUgb2YgYGRldi1cdTAwM2VkZXZfYWRkcmAgaXMgY3JpdGljYWw7IHRoZSBhc3N1bXB0aW9uIHNlZW1zIHRvIGJlIHRoYXQgaXQncyBzaXplZCBleGFjdGx5IGZvciBhIE1BQyBhZGRyZXNzLCBidXQgaXMgdGhhdCBjb3JyZWN0PyBJIHdlbnQgb24gdG8gdmVyaWZ5IHRoaXMsIGJ5IHNlYXJjaGluZyB0aGUgY29kZSB3aGVyZSBgZGV2LVx1MDAzZWRldl9hZGRyYCBnZXRzIGFzc2lnbmVkIChhbmQgdGhlIGFuc3dlciBpcyBgYWxsb2NfbmV0ZGV2X21xc2ApLiBTaW5jZSBpdCBjYWxscyBgZGV2X2FkZHJfaW5pdGAsIHRoaXMgbWFrZXMgYWxsIG9mIHRoaXMgbXVjaCBlYXNpZXIsIGJlY2F1c2UgdGhlIHNpemUgaXMgYSBrbm93biBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB2YWx1ZS5cblxuVGhlIEtNU0FOIGltcGxpY2F0aW9ucyBjb21lIHRvIGZvY3VzOyBpZiB0aGUgYWxsb2NhdGlvbiBmb3IgYGRldi1cdTAwM2VkZXZfYWRkcmAgaXMgZ3JlYXRlciB0aGFuIDYgYnl0ZXMsIHRoZW4gcmVhZGluZyBiZXlvbmQgdGhlIDYtYnl0ZSBNQUMgYWRkcmVzcyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIG5vdCBhbiB1bmluaXRpYWxpemVkIHJlYWQgKGJlY2F1c2UsIHdpdGggYGRldl9hZGRyX2luaXRgLCB0aGVzZSBleHRyYSBieXRlcyBnZXQgemVyb2VkLCBhbmQgS01TQU4gd291bGQgbm90IGNhdGNoIGEgemVybyByZWFkKS4gU2luY2UgYGRldi1cdTAwM2VkZXZfYWRkcmAgaXMgaW5pdGlhbGl6ZWQsIGl0IGlzICphbHdheXMqIGluaXRpYWxpemVkLiBJZiB0aGUgcmVhZCAqaXMqIG91dCBvZiBib3VuZHMsIGJ1dCB0aGUgYnVmZmVyIGlzIHplcm8sIEtNU0FOIHdvdWxkIG5vdCBjYXRjaCB0aGlzLiBJZiB0aGUgYnVmZmVyICp3ZXJlKiA2IGJ5dGVzLCBLQVNBTiAqd291bGQqIGNhdGNoIGl0IGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIHRoZW4gS01TQU4gKm1pZ2h0KiBjYXRjaCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLlxuXG5UaGUgbW9yZSBJIGxvb2tlZCBhdCBpdCwgdGhlIG1vcmUgSSdtIGNvbnZpbmNlZCB0aGUgaXNzdWUgaXMgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYnV0IGlzIGFjdHVhbGx5IHJlbGF0ZWQgdG8gKmxvZ2ljYWwqIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgb2xkIGNvZGUgd2FzIGxvZ2ljYWxseSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgTUFDIGFkZHJlc3MuIFRoZSBuZXcgY29kZSBmaXhlcyB0aGlzIGJ5IGNoYW5naW5nIGhvdyB0aGUgTUFDIGFkZHJlc3MgaXMgcmVhZCwgYnV0IGV2ZW4gaW4gdGhlIG9sZCBjb2RlLCBLTVNBTiB3b3VsZG4ndCBjYXRjaCBhbnl0aGluZywgYmVjYXVzZSB0aGUgbWVtb3J5IGlzICppbml0aWFsaXplZCouIEkgY29uZmlybWVkIHRoYXQgYGdldF91bmFsaWduZWRfbGUxNmAgaXMgYSBzYWZlIHdheSB0byByZWFkIHRoZSBsYXN0IDIgYnl0ZXMuIFRoZSBvbGQgY29kZSBjYXN0cyBgZGV2LVx1MDAzZWRldl9hZGRyYCB0byBhIGB1MzIqYCBhbmQgZGVyZWZlcmVuY2VzIGl0LiBUaGlzIHBvdGVudGlhbGx5IHZpb2xhdGVkIHN0cmljdCBhbGlhc2luZyBydWxlcyBvciBjb3VsZCByZXN1bHQgaW4gYWxpZ25tZW50IGlzc3Vlcy4gVGhlIHBhdGNoLCBjb3JyZWN0bHksIHJlbW92ZXMgdGhpcyBwb3RlbnRpYWwgYWxpYXNpbmcgcHJvYmxlbS4gQWxzbywgdGhpcyByZXNvbHZlcyBhIHBvdGVudGlhbCBTcGFyc2Ugd2FybmluZywgd2hpY2ggaXMgYWx3YXlzIGdvb2QuXG5cbkluIHNob3J0LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgb3V0LW9mLWJvdW5kcyByZWFkIGFuZCBmaXhlcyBzdHJpY3QgYWxpYXNpbmcgdmlvbGF0aW9ucyBhbmQvb3IgcG90ZW50aWFsIGFsaWdubWVudCBwcm9ibGVtcy4gSXQgaXMgTk9UIGZpeGluZyBhbiAqdW5pbml0aWFsaXplZCogbWVtb3J5IHJlYWQuIFRoZXJlZm9yZSwgbm8gS01TQU4gc2Vzc2lvbiBpcyBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODczLCJPdXRwdXRUb2tlbnMiOjM2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDM6NDIuMTE0MzY4NjI5WiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgaW5zdGVhZCBvZiBkaXJlY3RseSBjYXN0aW5nIGBkZXYtXFx1MDAzZWRldl9hZGRyYCB0byBgdTMyICpgIGFuZCBkZXJlZmVyZW5jaW5nIGl0LiBUaGUgb2xkIGNvZGUgcmVhZCA0IGJ5dGVzIGZyb20gYGRldi1cXHUwMDNlZGV2X2FkZHIgKyA0YCAoYnl0ZXMgNCwgNSwgNiwgYW5kIDcpLCB3aGljaCBsb2dpY2FsbHkgZXhjZWVkcyB0aGUgNi1ieXRlIE1BQyBhZGRyZXNzIGxlbmd0aC4gXFxuXFxuSG93ZXZlciwgYGRldi1cXHUwMDNlZGV2X2FkZHJgIHBvaW50cyB0byBgaGEtXFx1MDAzZWFkZHJgIHdpdGhpbiBhIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgLCB3aGljaCBpcyBhIDMyLWJ5dGUgYXJyYXkgKGBNQVhfQUREUl9MRU5gKS4gVGhpcyBlbnRpcmUgMzItYnl0ZSBhcnJheSBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYGRldl9hZGRyX2luaXQoKWAgdXNpbmcgYG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpYC4gQmVjYXVzZSB0aGUgcGFkZGluZyBieXRlcyAoYnl0ZXMgNiBhbmQgNykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHRvIHplcm8sIHJlYWRpbmcgdGhlbSBkb2VzIG5vdCBjb25zdGl0dXRlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGFueSBpc3N1ZSBoZXJlLlxcblxcbkZ1cnRoZXJtb3JlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGFsbG9jYXRpb24gaXMgMzIgYnl0ZXMsIEtBU0FOIGRvZXMgbm90IGRldGVjdCB0aGlzIGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBlaXRoZXIuIFRoZSBwYXRjaCBwcmltYXJpbHkgcmVzb2x2ZXMgYSBsb2dpY2FsIG91dC1vZi1ib3VuZHMgcmVhZCwgcG90ZW50aWFsIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMsIGFuZCBTcGFyc2Ugd2FybmluZ3MgcmVsYXRlZCB0byBlbmRpYW5uZXNzIHR5cGVzIChwYXNzaW5nIGBfX2xlMzJgIHRvIGBpb3dyaXRlMzJgIHdoaWNoIGV4cGVjdHMgYHUzMmApLiBcXG5cXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgdG8gdXNlIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNhc3RpbmcgYGRldi1cXHUwMDNlZGV2X2FkZHJgIHRvIGB1MzIgKmAgYW5kIGRlcmVmZXJlbmNpbmcgaXQuIFRoZSBvbGQgY29kZSByZWFkIDQgYnl0ZXMgZnJvbSBgZGV2LVxcdTAwM2VkZXZfYWRkciArIDRgIChieXRlcyA0LCA1LCA2LCBhbmQgNyksIHdoaWNoIGxvZ2ljYWxseSBleGNlZWRzIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MgbGVuZ3RoLiBcXG5cXG5Ib3dldmVyLCBgZGV2LVxcdTAwM2VkZXZfYWRkcmAgcG9pbnRzIHRvIGBoYS1cXHUwMDNlYWRkcmAgd2l0aGluIGEgYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAsIHdoaWNoIGlzIGEgMzItYnl0ZSBhcnJheSAoYE1BWF9BRERSX0xFTmApLiBUaGlzIGVudGlyZSAzMi1ieXRlIGFycmF5IGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBpbiBgZGV2X2FkZHJfaW5pdCgpYCB1c2luZyBgbWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSlgLiBCZWNhdXNlIHRoZSBwYWRkaW5nIGJ5dGVzIChieXRlcyA2IGFuZCA3KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdG8gemVybywgcmVhZGluZyB0aGVtIGRvZXMgbm90IGNvbnN0aXR1dGUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYW55IGlzc3VlIGhlcmUuXFxuXFxuRnVydGhlcm1vcmUsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgYWxsb2NhdGlvbiBpcyAzMiBieXRlcywgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGVpdGhlci4gVGhlIHBhdGNoIHByaW1hcmlseSByZXNvbHZlcyBhIGxvZ2ljYWwgb3V0LW9mLWJvdW5kcyByZWFkLCBwb3RlbnRpYWwgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcywgYW5kIFNwYXJzZSB3YXJuaW5ncyByZWxhdGVkIHRvIGVuZGlhbm5lc3MgdHlwZXMgKHBhc3NpbmcgYF9fbGUzMmAgdG8gYGlvd3JpdGUzMmAgd2hpY2ggZXhwZWN0cyBgdTMyYCkuIFxcblxcblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhlc2UgY2hhbmdlcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8c8cb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 12:45:31 +0000 UTC FinishedAt: 2026-08-24 13:43:43 +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": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "8139TOO" ], "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": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "8139TOO" ], "series_id": "9136fc9b-b784-4f81-aa58-17b3b6d3def0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl8139_set_mac_address" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzgxMzlUT08mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTM5X3NldF9tYWNfYWRkcmVzcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgdG8gdXNlIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNhc3RpbmcgYGRldi1cdTAwM2VkZXZfYWRkcmAgdG8gYHUzMiAqYCBhbmQgZGVyZWZlcmVuY2luZyBpdC4gVGhlIG9sZCBjb2RlIHJlYWQgNCBieXRlcyBmcm9tIGBkZXYtXHUwMDNlZGV2X2FkZHIgJiM0MzsgNGAgKGJ5dGVzIDQsIDUsIDYsIGFuZCA3KSwgd2hpY2ggbG9naWNhbGx5IGV4Y2VlZHMgdGhlIDYtYnl0ZSBNQUMgYWRkcmVzcyBsZW5ndGguIFxuXG5Ib3dldmVyLCBgZGV2LVx1MDAzZWRldl9hZGRyYCBwb2ludHMgdG8gYGhhLVx1MDAzZWFkZHJgIHdpdGhpbiBhIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgLCB3aGljaCBpcyBhIDMyLWJ5dGUgYXJyYXkgKGBNQVhfQUREUl9MRU5gKS4gVGhpcyBlbnRpcmUgMzItYnl0ZSBhcnJheSBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYGRldl9hZGRyX2luaXQoKWAgdXNpbmcgYG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpYC4gQmVjYXVzZSB0aGUgcGFkZGluZyBieXRlcyAoYnl0ZXMgNiBhbmQgNykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHRvIHplcm8sIHJlYWRpbmcgdGhlbSBkb2VzIG5vdCBjb25zdGl0dXRlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGFueSBpc3N1ZSBoZXJlLlxuXG5GdXJ0aGVybW9yZSwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBhbGxvY2F0aW9uIGlzIDMyIGJ5dGVzLCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgdGhpcyBhcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZWl0aGVyLiBUaGUgcGF0Y2ggcHJpbWFyaWx5IHJlc29sdmVzIGEgbG9naWNhbCBvdXQtb2YtYm91bmRzIHJlYWQsIHBvdGVudGlhbCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzLCBhbmQgU3BhcnNlIHdhcm5pbmdzIHJlbGF0ZWQgdG8gZW5kaWFubmVzcyB0eXBlcyAocGFzc2luZyBgX19sZTMyYCB0byBgaW93cml0ZTMyYCB3aGljaCBleHBlY3RzIGB1MzJgKS4gXG5cblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhlc2UgY2hhbmdlcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGluIHRoZSBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyBmdW5jdGlvbiBieSB1c2luZyBnZXRfdW5hbGlnbmVkX2xlMzIgYW5kIGdldF91bmFsaWduZWRfbGUxNi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWZmZWN0cyBob3cgdGhlIE1BQyBhZGRyZXNzIGlzIHJlYWQgZnJvbSBtZW1vcnksIGVzcGVjaWFsbHkgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzLiBUaGUgcnRsODEzOSBkcml2ZXIgaXMgZm9yIGEgY29tbW9uIG5ldHdvcmsgY2FyZCB0aGF0IGlzIGVtdWxhdGVkIGluIFFFTVUsIG1ha2luZyBpdCByZWFjaGFibGUgYW5kIGZ1enphYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmQ1ZGQzMjNhN2YzNjBkMWE2OTAxY2FjMDg1MWIzMzQ3NTRmNjRhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDEzOjM3OjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNcbmluZGV4IDgyNDFiY2Y3NjY2NDQuLjE3MzY1OTlkNzI0NDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNcbkBAIC0xMTIsNiAmIzQzOzExMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl92bGFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vaXJxLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAvKiBEZWZhdWx0IE1lc3NhZ2UgbGV2ZWwgKi9cbiAjZGVmaW5lIFJUTDgxMzlfREVGX01TR19FTkFCTEUgICAoTkVUSUZfTVNHX0RSViAgIHwgXFxcbkBAIC0yMjMwLDggJiM0MzsyMjMxLDggQEAgc3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0cC1cdTAwM2Vsb2NrKTtcbiBcbiBcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTtcbi1cdFJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDApKSk7XG4tXHRSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciAmIzQzOyA0KSkpO1xuJiM0MztcdFJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGdldF91bmFsaWduZWRfbGUzMihkZXYtXHUwMDNlZGV2X2FkZHIpKTtcbiYjNDM7XHRSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDQpKTtcbiBcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7XG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2dHAtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzgxMzlUT08mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTM5X3NldF9tYWNfYWRkcmVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkNWRkMzIzYTdmMzYwZDFhNjkwMWNhYzA4NTFiMzM0NzU0ZjY0YTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAyNCAxMzozNzoyMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMKaW5kZXggODI0MWJjZjc2NjY0NC4uMTczNjU5OWQ3MjQ0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMKQEAgLTExMiw2ICYjNDM7MTEyLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9nZnAuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pZl92bGFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL2lycS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKIAogLyogRGVmYXVsdCBNZXNzYWdlIGxldmVsICovCiAjZGVmaW5lIFJUTDgxMzlfREVGX01TR19FTkFCTEUgICAoTkVUSUZfTVNHX0RSViAgIHwgXApAQCAtMjIzMCw4ICYjNDM7MjIzMSw4IEBAIHN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIAlzcGluX2xvY2tfaXJxKCZhbXA7dHAtJmd0O2xvY2spOwogCiAJUlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwotCVJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LSZndDtkZXZfYWRkciAmIzQzOyAwKSkpOwotCVJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LSZndDtkZXZfYWRkciAmIzQzOyA0KSkpOwomIzQzOwlSVExfVzMyX0YoTUFDMCAmIzQzOyAwLCBnZXRfdW5hbGlnbmVkX2xlMzIoZGV2LSZndDtkZXZfYWRkcikpOwomIzQzOwlSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LSZndDtkZXZfYWRkciAmIzQzOyA0KSk7CiAJUlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmYW1wO3RwLSZndDtsb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jYC4gVGhlIGNoYW5nZSBpcyBpbiBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSByZXBsYWNlZCBzb21lIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIHVuYWxpZ25lZCBwb2ludGVyIGNhc3RzIHdpdGggYGdldF91bmFsaWduZWRfbGUzMmAgYW5kIGBnZXRfdW5hbGlnbmVkX2xlMTZgLiBHb29kIHByYWN0aWNlLCBkZWZpbml0ZWx5IGEgc2Vuc2libGUgbW92ZSB0byBpbXByb3ZlIHBvcnRhYmlsaXR5IGFuZCBhdm9pZCB1bmRlZmluZWQgYmVoYXZpb3IuCgpOb3csIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIHRoaXMgYSBkcml2ZXIgc29sZWx5IGZvciBhIHNwZWNpZmljIHBoeXNpY2FsIFBDSWUgY2FyZCwgb3IgaXMgaXQgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgZW5jb3VudGVyZWQgaW4gYSB2aXJ0dWFsaXplZCBzZXR1cD8gVGhlIFJUTDgxMzkgaXMgYSBwcmV0dHkgdWJpcXVpdG91cyBuZXR3b3JrIGNhcmQsIGhpc3RvcmljYWxseSBzcGVha2luZy4gQW5kIHllcCwgY29uZmlybWVkIOKAkyBRRU1VIGFjdHVhbGx5IGhhcyBleHBsaWNpdCBlbXVsYXRpb24gZm9yIGl0IHdpdGggdGhlIGAtZGV2aWNlIHJ0bDgxMzlgIG9wdGlvbi4gVGhhdCBtZWFucyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gYSB3aWRlIHJhbmdlIG9mIGVudmlyb25tZW50cywgaW5jbHVkaW5nIFZNcywgc28gdGhpcyBwYXRjaCBjb3VsZCBoYXZlIGEgc2lnbmlmaWNhbnQgaW1wYWN0LiBUaW1lIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHRvIHNlZSBob3cgYDgxMzl0b28uY2AgZml0cyBpbnRvIHRoZSBrZXJuZWwgYnVpbGQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ODEzOXRvby5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHXzgxMzlDUCkgJiM0Mzs9IDgxMzljcC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHXzgxMzlUT08pICYjNDM7PSA4MTM5dG9vLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGUtOC1yODE2OS15ICYjNDM7PSByODE2OV9tYWluLm8gcjgxNjlfZmlybXdhcmUubyByODE2OV9waHlfY29uZmlnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODM5CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIEkmIzM5O20gbG9va2luZyBhdCBpcyBgQ09ORklHXzgxMzlUT09gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGlzIGJhY2sgdG8gaXRzIHNvdXJjZSwgdGhlIEtjb25maWcgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNldHRpbmcgcmVwcmVzZW50cyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIG9wZW4gYW5kIGFuYWx5emUgdGhhdCBzcGVjaWZpYyBLY29uZmlnIGZpbGUgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIE15IGV4cGVydGlzZSBhbGxvd3MgbWUgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIGNvbnRleHQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBkZXRhaWxzIGlzIGtleSB0byBpbnRlcnByZXRpbmcgd2hhdCYjMzk7cyBiZWVuIGRlZmluZWQuIEkgbmVlZCB0byBrbm93IHByZWNpc2VseSBob3cgYDgxMzlUT09gIGlzIGRlZmluZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcywgYW5kIHdoYXQgZWZmZWN0cyBpdCBoYXMgb24gdGhlIHN5c3RlbSYjMzk7cyBvdmVyYWxsIGJlaGF2aW9yLiBJIGNhbiBsaWtlbHkgcXVpY2tseSBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpbiBLY29uZmlnIGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIDgxMzlUT08mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTIwPWNvbmZpZyA4MTM5Q1Bcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MzI6Y29uZmlnIDgxMzlUT09cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O1JlYWxUZWsgUlRMLTgxMjkvODEzMC84MTM5IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo0NDpjb25maWcgODEzOVRPT19QSU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00NS1cdGJvb2wgXCYjMzQ7VXNlIFBJTyBpbnN0ZWFkIG9mIE1NSU9cJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6NTQ6Y29uZmlnIDgxMzlUT09fVFVORV9UV0lTVEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHVuY29tbW9uIFJUTC04MTM5IHJldi4gSyAoYXV0b21hdGljIGNoYW5uZWwgZXF1YWxpemF0aW9uKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy02NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo2NTpjb25maWcgODEzOVRPT184MTI5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNjYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIG9sZGVyIFJUTC04MTI5LzgxMzAgYm9hcmRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ0MgoJCQkJCQkJb3V0cHV0OiA3OAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgRGVwZW5kZW5jaWVzIGZvciA4MTM5VE9PKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYXNzb2NpYXRlZCB3aXRoIGA4MTM5VE9PYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBsaWJyYXJpZXMsIG1vZHVsZXMsIG90aGVyIGNvbXBvbmVudHMsIG9yIGV2ZW4gZXh0ZXJuYWwgc2VydmljZXMgdGhpcyBwYXJ0aWN1bGFyIGVsZW1lbnQgcmVsaWVzIHVwb24uIElzIGl0IGEgY29yZSBpbnRlcm5hbCBtb2R1bGUsIGFuIGV4dGVybmFsIGxpYnJhcnkgaW50ZWdyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWMgY29udGV4dCBpc24mIzM5O3QgZ2l2ZW4sIHNvIEkmIzM5O20gdGhpbmtpbmcgYnJvYWRseSBhYm91dCB0aGUgcG9zc2libGUgZGVwZW5kZW5jeSB0eXBlcy4gS25vd2luZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byB0cm91Ymxlc2hvb3QgYSBidWcsIG1ha2UgYSBjaGFuZ2UsIG9yIGFzc2VzcyB0aGUgaW1wYWN0IG9mIGEgcGxhbm5lZCB1cGRhdGUuIERlcGVuZGluZyBvbiB0aGUgc3lzdGVtLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBJJiMzOTtkIHR5cGljYWxseSBnbyBhYm91dCBpbnZlc3RpZ2F0aW5nIHRoaXMuIFBlcmhhcHMgSSYjMzk7bGwgdXNlIGEgZGVwZW5kZW5jeSBhbmFseXNpcyB0b29sLCBleHBsb3JlIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLCBvciBzdGFydCB3aXRoIHNvdXJjZSBjb2RlIGluc3BlY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGEgc3RyYXRlZ3kgdG8gc3RhcnQgdHJhY2luZyB0aGVzZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIDgxMzlUT08mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTIwPWNvbmZpZyA4MTM5Q1Bcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMzEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MzI6Y29uZmlnIDgxMzlUT09cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0zMy1cdHRyaXN0YXRlIFwmIzM0O1JlYWxUZWsgUlRMLTgxMjkvODEzMC84MTM5IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo0NDpjb25maWcgODEzOVRPT19QSU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00NS1cdGJvb2wgXCYjMzQ7VXNlIFBJTyBpbnN0ZWFkIG9mIE1NSU9cJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6NTQ6Y29uZmlnIDgxMzlUT09fVFVORV9UV0lTVEVSXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNTUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHVuY29tbW9uIFJUTC04MTM5IHJldi4gSyAoYXV0b21hdGljIGNoYW5uZWwgZXF1YWxpemF0aW9uKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy02NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo2NTpjb25maWcgODEzOVRPT184MTI5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNjYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIG9sZGVyIFJUTC04MTI5LzgxMzAgYm9hcmRzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMyOlx0Y29uZmlnIDgxMzlUT09cbiAgMzM6XHRcdHRyaXN0YXRlIFwmIzM0O1JlYWxUZWsgUlRMLTgxMjkvODEzMC84MTM5IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuICAzNDpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMzU6XHRcdHNlbGVjdCBDUkMzMlxuICAzNjpcdFx0c2VsZWN0IE1JSVxuICAzNzpcdFx0aGVscFxuICAzODpcdFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgRmFzdCBFdGhlcm5ldCBQQ0kgbmV0d29yayBjYXJkcyBiYXNlZCBvblxuICAzOTpcdFx0ICB0aGUgUlRMIDgxMjkvODEzMC84MTM5IGNoaXBzLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhvc2UsIHNheSBZIGhlcmUuXG4gIDQwOlx0XG4gIDQxOlx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNDI6XHRcdCAgd2lsbCBiZSBjYWxsZWQgODEzOXRvby4gIFRoaXMgaXMgcmVjb21tZW5kZWQuXG4gIDQzOlx0XG4gIDQ0Olx0Y29uZmlnIDgxMzlUT09fUElPXG4gIDQ1Olx0XHRib29sIFwmIzM0O1VzZSBQSU8gaW5zdGVhZCBvZiBNTUlPXCYjMzQ7XG4gIDQ2Olx0XHRkZWZhdWx0IHlcbiAgNDc6XHRcdGRlcGVuZHMgb24gODEzOVRPTyBcdTAwMjZcdTAwMjYgIU5PX0lPUE9SVF9NQVBcbiAgNDg6XHRcdGhlbHBcbiAgNDk6XHRcdCAgVGhpcyBpbnN0cnVjdHMgdGhlIGRyaXZlciB0byB1c2UgcHJvZ3JhbW1lZCBJL08gcG9ydHMgKFBJTykgaW5zdGVhZFxuICA1MDpcdFx0ICBvZiBQQ0kgc2hhcmVkIG1lbW9yeSAoTU1JTykuICBUaGlzIGNhbiBwb3NzaWJseSBzb2x2ZSBzb21lIHByb2JsZW1zXG4gIDUxOlx0XHQgIGluIGNhc2UgeW91ciBtYWluYm9hcmQgaGFzIG1lbW9yeSBjb25zaXN0ZW5jeSBpc3N1ZXMuICBJZiB1bnN1cmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NTgKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgYSBNaW5vciBOZXR3b3JrIERyaXZlciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHRvIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkuIFdlJiMzOTtyZSBmaXhpbmcgcG90ZW50aWFsIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzLCB3aGljaCwgbGV0JiMzOTtzIGJlIGhvbmVzdCwgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGNyYXNoZXMgb3IgZXZlbiBqdXN0IHN1YnRseSBpbmNvcnJlY3QgTUFDIGFkZHJlc3NlcyBvbiBjZXJ0YWluIGFyY2hpdGVjdHVyZXMuIFRoZSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgd2FycmFudHMgZnV6emluZyBhdHRlbnRpb24uCgpJdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXgsIHJlYWxseS4gU3dhcHBpbmcgb3V0IHRoZSByYXcgY2FzdHMgZm9yIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YC4gUHJldHR5IGNsZWFuLiBCdXQgKmlzKiBpdCByZWFjaGFibGU/IFllcCwgdGhyb3VnaCBgbmRvX3NldF9tYWNfYWRkcmVzc2AuIEdvb2QsIGdvb2QuIE9rYXksIHdvcnRoIGZ1enppbmc/IFllcywgaXTigJlzIGEgYnVnIGZpeCAodW5hbGlnbmVkIGFjY2VzcykgYW5kIGl0IGNoYW5nZXMgZXhlY3V0aW9uIGZsb3cgKHVzaW5nIHRoZSB1bmFsaWduZWQgYWNjZXNzIGhlbHBlcnMgaXMgZGlmZmVyZW50KSwgc28gcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgpXYWl0IGEgc2Vjb25kLCB0aG91Z2guIExldCYjMzk7cyBzdGVwIGJhY2suIFRoZSAqY29yZSogY2hhbmdlIGlzIGp1c3QgdGhhdCB1bmFsaWduZWQgYWNjZXNzIGZpeC4gUmlnaHQuIFNvLCBpcyBpdCB3b3J0aCBmdXp6aW5nPyBZZXMhIEJlY2F1c2UgaXQmIzM5O3Mgc3RpbGwgYSBmdW5jdGlvbmFsIGNoYW5nZTsgaXQmIzM5O3MgKm1lYW50KiB0byBjaGFuZ2UgdGhlIGRyaXZlciYjMzk7cyBiZWhhdmlvdXIgYW5kIGZpeCBzb21ldGhpbmcsIHNvIGV2ZW4gc2VlbWluZ2x5IHNpbXBsZSBjaGFuZ2VzIG5lZWQgdG8gYmUgdGVzdGVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGV4YW1pbmUgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bDgxMzlfc2V0X21hY19hZGRyZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM9NjQ2PXN0YXRpYyB2b2lkIHJ0bDgxMzlfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtNjQ3LSNlbmRpZlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6NjQ4OnN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy02NDktc3RhdGljIGludCBydGw4MTM5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz05MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTM5X25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtOTI3LVx0Lm5kb192YWxpZGF0ZV9hZGRyXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6OTI4Olx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXHQ9IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtOTI5LVx0Lm5kb19zdGFydF94bWl0XHRcdD0gcnRsODEzOV9zdGFydF94bWl0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTIyMDk9c3RhdGljIHZvaWQgcnRsODEzOV9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMjE5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6MjIyMDpzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMjIxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ3MgoJCQkJCQkJb3V0cHV0OiAxNDkKCQkJCQkJCXRob3VnaHRzOiA0MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLCB3aGljaCBJIGtub3cgaXMgdGhlIGBuZG9fc2V0X21hY19hZGRyZXNzYCBjYWxsYmFjay4gSXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSwgd2hpY2ggaXMgZ29vZC4gVGhlIGtleSBjaGFuZ2UgaGVyZSBpcyB0aGF0IGl0JiMzOTtzIHJlcGxhY2luZyB1bmFsaWduZWQgcG9pbnRlciBjYXN0cyB3aXRoIGNhbGxzIHRvIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBpcyBpbXBvcnRhbnQuCgpJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYENPTkZJR184MTM5VE9PYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGNvbnNpZGVyOyB5ZXMgaXQgaXMuIFRoZSBmb2N1c2VkIHN5bWJvbCBpcyBkZWZpbml0ZWx5IGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AuCgpOb3csIHRoZSBwcm9tcHQgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoICpvbmx5KiBpbnZvbHZlcyBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0ICpkb24mIzM5O3QqIGFsdGVyIGV4ZWN1dGlvbiBmbG93LiBUaGF0JiMzOTtzIHRoZSBjcnV4IG9mIGl0LiBEb2VzIHRoaXMgYWN0dWFsbHkgY2hhbmdlIGhvdyB0aGUgY29kZSAqcnVucyo/IE9uIHg4NiwgcHJvYmFibHkgbm90OyB0aG9zZSBjYWxscyBhcmUganVzdCBjYXN0cywgdGhlIHVuYWxpZ25lZCBhY2Nlc3MgaXMgaGFuZGxlZC4gSG93ZXZlciwgb24gYXJjaGl0ZWN0dXJlcyB0aGF0ICpkb24mIzM5O3QqIHN1cHBvcnQgdW5hbGlnbmVkIGFjY2VzcywgaXQgYWJzb2x1dGVseSBkb2VzOiBpdCYjMzk7cyBkb2luZyBieXRlLWJ5LWJ5dGUgcmVhZHMuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRpc3RpbmN0aW9uLgoKQnV0IHdhaXQsIGBkZXYtJmd0O2Rldl9hZGRyYCBpcyBhIE1BQyBhZGRyZXNzLiBUaGF0JiMzOTtzIDYgYnl0ZXMuIEl0JiMzOTtzICpwcm9iYWJseSogYWxpZ25lZCB0byBhdCBsZWFzdCAyIGJ5dGVzLCBtYXliZSBldmVuIDQgYnl0ZXMsIGJ1dCBtYXliZSBub3Qgb24gYWxsIGFyY2hpdGVjdHVyZXMuCgpJIG5lZWQgdG8gcmVjYWxsIHRoYXQgYGdldF91bmFsaWduZWRfbGUzMmAgYW5kIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGFyZSBpbmxpbmUgZnVuY3Rpb25zL21hY3Jvcy4gU28gaXQmIzM5O3Mgc3RpbGwgd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzLCBpbiBlc3NlbmNlLCBhIGJ1ZyBmaXggdG8gaGFuZGxlIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzLgoKVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKU28sIHRoZSBmb2N1cyBzeW1ib2wgaXMgc3RpbGwgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYC4gSSBzaG91bGQgc2V0IGBFbmFibGVDb25maWdzYCB0byBgODEzOVRPT2AsIGFuZCBub3cgSSBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0JiMzOTtzIGl0LiBZZXMsIGA4MTM5VE9PYCBkZXBlbmRzIG9uIGBQQ0lgLCBidXQgdGhhdCYjMzk7cyBhIHN0YW5kYXJkIGNvbmZpZywgc28gbm8gd29ycmllcyB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byBhZGQgYDgxMzlUT09gIHRvIHRoZSBmaW5hbCBvdXRwdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDs4MTM5VE9PJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsODEzOV9zZXRfbWFjX2FkZHJlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaW4gdGhlIHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzIGZ1bmN0aW9uIGJ5IHVzaW5nIGdldF91bmFsaWduZWRfbGUzMiBhbmQgZ2V0X3VuYWxpZ25lZF9sZTE2LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZmZlY3RzIGhvdyB0aGUgTUFDIGFkZHJlc3MgaXMgcmVhZCBmcm9tIG1lbW9yeSwgZXNwZWNpYWxseSBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgZG8gbm90IHN1cHBvcnQgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MuIFRoZSBydGw4MTM5IGRyaXZlciBpcyBmb3IgYSBjb21tb24gbmV0d29yayBjYXJkIHRoYXQgaXMgZW11bGF0ZWQgaW4gUUVNVSwgbWFraW5nIGl0IHJlYWNoYWJsZSBhbmQgZnV6emFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0OzgxMzlUT08mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTM5X3NldF9tYWNfYWRkcmVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgaW5zdGVhZCBvZiBkaXJlY3RseSBjYXN0aW5nIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHRvIGB1MzIgKmAgYW5kIGRlcmVmZXJlbmNpbmcgaXQuIFRoZSBvbGQgY29kZSByZWFkIDQgYnl0ZXMgZnJvbSBgZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDRgIChieXRlcyA0LCA1LCA2LCBhbmQgNyksIHdoaWNoIGxvZ2ljYWxseSBleGNlZWRzIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MgbGVuZ3RoLiBcblxuSG93ZXZlciwgYGRldi1cdTAwM2VkZXZfYWRkcmAgcG9pbnRzIHRvIGBoYS1cdTAwM2VhZGRyYCB3aXRoaW4gYSBgc3RydWN0IG5ldGRldl9od19hZGRyYCwgd2hpY2ggaXMgYSAzMi1ieXRlIGFycmF5IChgTUFYX0FERFJfTEVOYCkuIFRoaXMgZW50aXJlIDMyLWJ5dGUgYXJyYXkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfYWRkcl9pbml0KClgIHVzaW5nIGBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKWAuIEJlY2F1c2UgdGhlIHBhZGRpbmcgYnl0ZXMgKGJ5dGVzIDYgYW5kIDcpIGFyZSBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLCByZWFkaW5nIHRoZW0gZG9lcyBub3QgY29uc3RpdHV0ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gd291bGQgbm90IGRldGVjdCBhbnkgaXNzdWUgaGVyZS5cblxuRnVydGhlcm1vcmUsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgYWxsb2NhdGlvbiBpcyAzMiBieXRlcywgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGVpdGhlci4gVGhlIHBhdGNoIHByaW1hcmlseSByZXNvbHZlcyBhIGxvZ2ljYWwgb3V0LW9mLWJvdW5kcyByZWFkLCBwb3RlbnRpYWwgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcywgYW5kIFNwYXJzZSB3YXJuaW5ncyByZWxhdGVkIHRvIGVuZGlhbm5lc3MgdHlwZXMgKHBhc3NpbmcgYF9fbGUzMmAgdG8gYGlvd3JpdGUzMmAgd2hpY2ggZXhwZWN0cyBgdTMyYCkuIFxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyZDVkZDMyM2E3ZjM2MGQxYTY5MDFjYWMwODUxYjMzNDc1NGY2NGE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTM6Mzc6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jCmluZGV4IDgyNDFiY2Y3NjY2NDQuLjE3MzY1OTlkNzI0NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jCkBAIC0xMTIsNiAmIzQzOzExMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZ2ZwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfdmxhbi5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9pcnEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiAKIC8qIERlZmF1bHQgTWVzc2FnZSBsZXZlbCAqLwogI2RlZmluZSBSVEw4MTM5X0RFRl9NU0dfRU5BQkxFICAgKE5FVElGX01TR19EUlYgICB8IFwKQEAgLTIyMzAsOCAmIzQzOzIyMzEsOCBAQCBzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCiAJc3Bpbl9sb2NrX2lycSgmYW1wO3RwLSZndDtsb2NrKTsKIAogCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKLQlSVExfVzMyX0YoTUFDMCAmIzQzOyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgMCkpKTsKLQlSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNCkpKTsKJiM0MzsJUlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi0mZ3Q7ZGV2X2FkZHIpKTsKJiM0MzsJUlRMX1czMl9GKE1BQzAgJiM0MzsgNCwgZ2V0X3VuYWxpZ25lZF9sZTE2KGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNCkpOwogCVJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CiAKIAlzcGluX3VubG9ja19pcnEoJmFtcDt0cC0mZ3Q7bG9jayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjcwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFJlYWx0ZWsgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYDgxMzl0b28uY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRla2AgZGlyZWN0b3J5LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIGhvdyB0aGUgTUFDIGFkZHJlc3MgaXMgd3JpdHRlbiB0byB0aGUgUmVhbHRlayA4MTM5JiMzOTtzIGhhcmR3YXJlIHJlZ2lzdGVycy4KCkluaXRpYWxseSwgdGhlIGNvZGUgd2FzIG1ha2luZyB1bmFsaWduZWQgYWNjZXNzZXMgd2l0aCB0aGVzZSBsaW5lczoKCmBgYGMKCVJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LSZndDtkZXZfYWRkciAmIzQzOyAwKSkpOwoJUlRMX1czMl9GKE1BQzAgJiM0MzsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDQpKSk7CmBgYAoKQW5kIG5vdyBpdCBpcyB0aGlzOgoKYGBgYwoJUlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi0mZ3Q7ZGV2X2FkZHIpKTsKCVJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDQpKTsKYGBgCgpUaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUsIHdoZW4gcmVhZGluZyBhdCB0aGUgb2Zmc2V0IGBkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDRgLCB3YXMgYXR0ZW1wdGluZyB0byByZWFkIGEgNC1ieXRlIHZhbHVlIChgdTMyYCkuIEhvd2V2ZXIsIGEgc3RhbmRhcmQgTUFDIGFkZHJlc3MgaXMgb25seSA2IGJ5dGVzIGxvbmcuIFRoaXMgbWVhbnMgdGhlIGNvZGUgd2FzIHBvdGVudGlhbGx5IHJlYWRpbmcgYmV5b25kIHRoZSBib3VuZHMgb2YgdGhlIE1BQyBhZGRyZXNzIGJ1ZmZlci4KClNwZWNpZmljYWxseSwgaWYgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIGEgNi1ieXRlIGFycmF5LCB0aGVuIGBkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDRgIHBvaW50cyB0byB0aGUgbGFzdCB0d28gYnl0ZXMuIFJlYWRpbmcgYSBgdTMyYCBmcm9tIHRoYXQgbG9jYXRpb24gd291bGQgaGF2ZSByZWFkIGJ5dGVzIDQsIDUsIDYsIGFuZCA3LCB3aGljaCBtZWFucyB0aGF0IGJ5dGVzIDYgYW5kIDcgd2VyZSBvdXQgb2YgYm91bmRzLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gS0FTQU4gKnNob3VsZCogYmUgYWJsZSB0byBjYXRjaCB0aGlzIHNvcnQgb2YgdGhpbmcsIGVzcGVjaWFsbHkgaWYgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIHBsYWNlZCBhdCB0aGUgZW5kIG9mIGFuIGFsbG9jYXRpb24uCgpUaGlua2luZyB0aGlzIHRocm91Z2gsIGBkZXYtJmd0O2Rldl9hZGRyYCBpbiBhIGBuZXRfZGV2aWNlYCBzdHJ1Y3QgaXMgKnVzdWFsbHkqIGEgcG9pbnRlciB0byBhIGJ1ZmZlci4gSG93ZXZlciwgbW9kZXJuIGtlcm5lbHMgb2Z0ZW4gYWxsb2NhdGUgc3BhY2UgaW5saW5lIGFzIGFuIGFycmF5LCBsaWtlbHkgYE1BWF9BRERSX0xFTmAgYnl0ZXMgKG9mdGVuIDMyKS4gVGhpcyBpcyBjcml0aWNhbC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG5ldF9kZXZpY2VgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgYnVmZmVyJiMzOTtzIHNpemUuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIHByb2JsZW0uCgpUaGUgcGF0Y2ggaXMgZml4aW5nIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgZXJyb3IuIFRoZSBjaGFuZ2UgdG8gYGdldF91bmFsaWduZWRfbGUzMmAgYW5kIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGNvcnJlY3RzIHRoZSBvdmVycmVhZDogNCBieXRlcyAtJmd0OyAyIGJ5dGVzLiBUaGlzIG1ha2VzIHRoZSBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHdoYXQgaXQmIzM5O3Mgc3VwcG9zZWQgdG8gYWNjZXNzLCB3aGljaCBpcyB0aGUgNi1ieXRlIE1BQyBhZGRyZXNzLiBHb29kIGNhdGNoLCBhbmQgdGhlIGZpeCBsb29rcyBzb3VuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5zaWduZWQgY2hhci4qZGV2X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzk2LVx0LyogSW50ZXJmYWNlIGFkZHJlc3MgaW5mbyB1c2VkIGluIGV0aF90eXBlX3RyYW5zKCkgKi9cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM5NzpcdGNvbnN0IHVuc2lnbmVkIGNoYXJcdCpkZXZfYWRkcjtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM5OC1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMzMTA9c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvIHtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzMxMS1cdHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfaW5mbyBpbmZvOyAvKiBtdXN0IGJlIGZpcnN0ICovXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMzMTI6XHRjb25zdCB1bnNpZ25lZCBjaGFyICpkZXZfYWRkcjtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzMxMy19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBkZXZfYWRkcmAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGBkZXZfYWRkcmAgaXMgY2xlYXJseSBhIHBvaW50ZXIuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGRvZXMgdGhpcyBwb2ludGVyIGFjdHVhbGx5IHBvaW50PyBJcyBpdCBqdXN0IGEgY29udmVuaWVudCB3cmFwcGVyIGZvciBzb21ldGhpbmcgYWxyZWFkeSB3aXRoaW4gdGhlIGBkZXZgIHN0cnVjdHVyZSwgbGlrZSBwZXJoYXBzIGBkZXYtJmd0O2FkZHJfYXNzaWduX3R5cGVgLCBvciBpcyBpdCBzb21ldGhpbmcgbW9yZSBzaWduaWZpY2FudD8gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IGl0JiMzOTtzIHByb2JhYmx5ICpub3QqIGp1c3QgYSBkaXJlY3QgbGluayB0byBhbiBleGlzdGluZyBtZW1iZXIuIEl0JiMzOTtzIG1vcmUgbGlrZWx5IGVpdGhlciBwb2ludGluZyB0byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgb3IsIG1vcmUgY29udGV4dHVhbGx5LCBzb21lIHJlZ2lvbiAqaW5zaWRlKiB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdHVyZSBpdHNlbGYuCgpUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBJIGRpZyB0b28gZGVlcCwgaXMgdG8gcGlucG9pbnQgdGhlIGFsbG9jYXRpb24gb2YgYGRldl9hZGRyYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBpbnNpZ2h0cyB3aWxsIGxpZS4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBhbGxvY2F0ZWQgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgYWJvdXQgaXRzIGV4cGVjdGVkIGxpZmV0aW1lLCBzY29wZSwgYW5kIGhvdyBJIHNob3VsZCBiZSB0cmVhdGluZyB0aGUgbWVtb3J5IGl0IHJlZmVyZW5jZXMuIFRpbWUgdG8gdHJhY2sgZG93biB0aGF0IGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl9hZGRyID0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMDAyMD1pbnQgbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTAwMjUtXHRcdC5pbmZvLmV4dGFjayA9IGV4dGFjayxcbm5ldC9jb3JlL2Rldi5jOjEwMDI2Olx0XHQuZGV2X2FkZHIgPSBhZGRyLFxubmV0L2NvcmUvZGV2LmMtMTAwMjctXHR9O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTMwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYWxsb2NfbmV0ZGV2X21xc2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtdWx0aS1xdWV1ZSBkZXZpY2UgYWxsb2NhdGlvbiBpcyBoYW5kbGVkLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgYWxsb2NfbmV0ZGV2X21xc2AgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9kZXYuY2AuIEkmIzM5O20gZ3Vlc3NpbmcgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLCBkZXRlcm1pbmluZyB0aGUgZGV2aWNlJiMzOTtzIGNhcGFiaWxpdGllcyBhbmQgYWxsb2NhdGluZyB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcyBmb3IgbXVsdGlwbGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcXVldWVzLiBJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaG93IGl0IGNhbGN1bGF0ZXMgcXVldWUgbnVtYmVycyBiYXNlZCBvbiBOSUMgY2FwYWJpbGl0aWVzLCBhbmQgaG93IGl0IGhhbmRsZXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBmcm9tIHRoZSBrZXJuZWwmIzM5O3MgcGVyc3BlY3RpdmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBzZXRzIHVwIHRoZSBgbmV0X2RldmljZWAgc3RydWN0IGFuZCBpbml0aWFsaXplcyB0aGUgcmVsZXZhbnQgbWVtYmVycyB0byBoYW5kbGUgdGhlIG11bHRpLXF1ZXVlIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaG93IGl0IG1hbmFnZXMgdGhlIGlycSBhbGxvY2F0aW9ucyBhbmQgYmluZGluZyB0byB0aGUgcXVldWVzLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBhbmQgd2hlcmUgSSYjMzk7bGwgZmluZCBjbHVlcyB0byBhbnkgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBxdWV1ZSBtYW5hZ2VtZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBwYXJ0aWN1bGFybHkgdGhlIGVycm9yIGhhbmRsaW5nIGFuZCBwb3RlbnRpYWwgZmFsbGJhY2sgbWVjaGFuaXNtcyBpZiB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBxdWV1ZXMgY2Fubm90IGJlIGFsbG9jYXRlZC4gUmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz01MjY9c3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBuZXRkZXZfeG1pdF9sb2NrX2tleVtBUlJBWV9TSVpFKG5ldGRldl9sb2NrX3R5cGUpXTtcbm5ldC9jb3JlL2Rldi5jOjUyNzpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IG5ldGRldl9hZGRyX2xvY2tfa2V5W0FSUkFZX1NJWkUobmV0ZGV2X2xvY2tfdHlwZSldO1xubmV0L2NvcmUvZGV2LmMtNTI4LVxuLS1cbm5ldC9jb3JlL2Rldi5jPTU1MT1zdGF0aWMgaW5saW5lIHZvaWQgbmV0ZGV2X3NldF9hZGRyX2xvY2tkZXBfY2xhc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy01NTYtXHRsb2NrZGVwX3NldF9jbGFzc19hbmRfbmFtZShcdTAwMjZkZXYtXHUwMDNlYWRkcl9saXN0X2xvY2ssXG5uZXQvY29yZS9kZXYuYzo1NTc6XHRcdFx0XHQgICBcdTAwMjZuZXRkZXZfYWRkcl9sb2NrX2tleVtpXSxcbm5ldC9jb3JlL2Rldi5jLTU1OC1cdFx0XHRcdCAgIG5ldGRldl9sb2NrX25hbWVbaV0pO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyMTY9aW50IG5ldGRldl9nZXRfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKm5hbWUsIGludCBpZmluZGV4KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyMzYtXG5uZXQvY29yZS9kZXYuYzoxMjM3OnN0YXRpYyBib29sIGRldl9hZGRyX2NtcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB0eXBlLFxubmV0L2NvcmUvZGV2LmMtMTIzOC1cdFx0XHQgY29uc3QgY2hhciAqaGEpXG5uZXQvY29yZS9kZXYuYy0xMjM5LXtcbm5ldC9jb3JlL2Rldi5jOjEyNDA6XHRyZXR1cm4gZGV2LVx1MDAzZXR5cGUgPT0gdHlwZSBcdTAwMjZcdTAwMjYgIW1lbWNtcChkZXYtXHUwMDNlZGV2X2FkZHIsIGhhLCBkZXYtXHUwMDNlYWRkcl9sZW4pO1xubmV0L2NvcmUvZGV2LmMtMTI0MS19XG4tLVxubmV0L2NvcmUvZGV2LmM9MTI1Nz1zdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldGJ5aHdhZGRyX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIHNob3J0IHR5cGUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI2Mi1cdGZvcl9lYWNoX25ldGRldl9yY3UobmV0LCBkZXYpXG5uZXQvY29yZS9kZXYuYzoxMjYzOlx0XHRpZiAoZGV2X2FkZHJfY21wKGRldiwgdHlwZSwgaGEpKVxubmV0L2NvcmUvZGV2LmMtMTI2NC1cdFx0XHRyZXR1cm4gZGV2O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEyODI9c3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRieWh3YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIHNob3J0IHR5cGUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTI4OC1cdGZvcl9lYWNoX25ldGRldihuZXQsIGRldilcbm5ldC9jb3JlL2Rldi5jOjEyODk6XHRcdGlmIChkZXZfYWRkcl9jbXAoZGV2LCB0eXBlLCBoYSkpXG5uZXQvY29yZS9kZXYuYy0xMjkwLVx0XHRcdHJldHVybiBkZXY7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTY4OT1zdGF0aWMgaW50IF9fZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE2OTQtXHRBU1NFUlRfUlROTCgpO1xubmV0L2NvcmUvZGV2LmM6MTY5NTpcdGRldl9hZGRyX2NoZWNrKGRldik7XG5uZXQvY29yZS9kZXYuYy0xNjk2LVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE3MzMtXHRcdGRldl9hY3RpdmF0ZShkZXYpO1xubmV0L2NvcmUvZGV2LmM6MTczNDpcdFx0YWRkX2RldmljZV9yYW5kb21uZXNzKGRldi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldi5jLTE3MzUtXHR9XG4tLVxubmV0L2NvcmUvZGV2LmM9NTUwNj11MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTU1NDEtXHRldGggPSAoc3RydWN0IGV0aGhkciAqKXhkcC1cdTAwM2VkYXRhO1xubmV0L2NvcmUvZGV2LmM6NTU0MjpcdG9yaWdfaG9zdCA9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cdTAwM2VoX2Rlc3QsIHNrYi1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xubmV0L2NvcmUvZGV2LmMtNTU0My1cdG9yaWdfYmNhc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcl82NGJpdHMoZXRoLVx1MDAzZWhfZGVzdCk7XG4tLVxubmV0L2NvcmUvZGV2LmMtNTU4Mi1cdCAgICAob3JpZ19ob3N0ICE9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cdTAwM2VoX2Rlc3QsXG5uZXQvY29yZS9kZXYuYzo1NTgzOlx0XHRcdFx0XHRcdCAgc2tiLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcikpIHx8XG5uZXQvY29yZS9kZXYuYy01NTg0LVx0ICAgIChvcmlnX2JjYXN0ICE9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyXzY0Yml0cyhldGgtXHUwMDNlaF9kZXN0KSkpIHtcbi0tXG5uZXQvY29yZS9kZXYuYz0xMDAyMD1pbnQgbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTAwMjUtXHRcdC5pbmZvLmV4dGFjayA9IGV4dGFjayxcbm5ldC9jb3JlL2Rldi5jOjEwMDI2Olx0XHQuZGV2X2FkZHIgPSBhZGRyLFxubmV0L2NvcmUvZGV2LmMtMTAwMjctXHR9O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEwMDM1PWludCBuZXRpZl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNzLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwMDQ5LVx0XHRyZXR1cm4gZXJyO1xubmV0L2NvcmUvZGV2LmM6MTAwNTA6XHRpZiAobWVtY21wKGRldi1cdTAwM2VkZXZfYWRkciwgc3MtXHUwMDNlX19kYXRhLCBkZXYtXHUwMDNlYWRkcl9sZW4pKSB7XG5uZXQvY29yZS9kZXYuYy0xMDA1MS1cdFx0ZXJyID0gb3BzLVx1MDAzZW5kb19zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcyk7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTAwNTYtXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7XG5uZXQvY29yZS9kZXYuYzoxMDA1NzpcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhkZXYtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VhZGRyX2xlbik7XG5uZXQvY29yZS9kZXYuYy0xMDA1OC1cdHJldHVybiAwO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTEwMDYwLVxubmV0L2NvcmUvZGV2LmM6MTAwNjE6REVDTEFSRV9SV1NFTShkZXZfYWRkcl9zZW0pO1xubmV0L2NvcmUvZGV2LmMtMTAwNjItXG4tLVxubmV0L2NvcmUvZGV2LmM9MTAwNjQ9aW50IG5ldGlmX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmRldl9uYW1lKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwMDY5LVxubmV0L2NvcmUvZGV2LmM6MTAwNzA6XHRkb3duX3JlYWQoXHUwMDI2ZGV2X2FkZHJfc2VtKTtcbm5ldC9jb3JlL2Rldi5jLTEwMDcxLVx0cmN1X3JlYWRfbG9jaygpO1xuLS1cbm5ldC9jb3JlL2Rldi5jLTEwMDgwLVx0ZWxzZVxubmV0L2NvcmUvZGV2LmM6MTAwODE6XHRcdG1lbWNweShzYS1cdTAwM2VzYV9kYXRhLCBkZXYtXHUwMDNlZGV2X2FkZHIsXG5uZXQvY29yZS9kZXYuYy0xMDA4Mi1cdFx0ICAgICAgIG1pbl90KHNpemVfdCwgc2l6ZSwgZGV2LVx1MDAzZWFkZHJfbGVuKSk7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTAwODYtXHRyY3VfcmVhZF91bmxvY2soKTtcbm5ldC9jb3JlL2Rldi5jOjEwMDg3Olx0dXBfcmVhZChcdTAwMjZkZXZfYWRkcl9zZW0pO1xubmV0L2NvcmUvZGV2LmMtMTAwODgtXHRyZXR1cm4gcmV0O1xuLS1cbm5ldC9jb3JlL2Rldi5jPTExMzg0PWludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXYuYy0xMTUyOS1cbm5ldC9jb3JlL2Rldi5jOjExNTMwOlx0YWRkX2RldmljZV9yYW5kb21uZXNzKGRldi1cdTAwM2VkZXZfYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuKTtcbm5ldC9jb3JlL2Rldi5jLTExNTMxLVxubmV0L2NvcmUvZGV2LmMtMTE1MzItXHQvKiBJZiB0aGUgZGV2aWNlIGhhcyBwZXJtYW5lbnQgZGV2aWNlIGFkZHJlc3MsIGRyaXZlciBzaG91bGRcbm5ldC9jb3JlL2Rldi5jOjExNTMzOlx0ICogc2V0IGRldl9hZGRyIGFuZCBhbHNvIGFkZHJfYXNzaWduX3R5cGUgc2hvdWxkIGJlIHNldCB0b1xubmV0L2NvcmUvZGV2LmMtMTE1MzQtXHQgKiBORVRfQUREUl9QRVJNIChkZWZhdWx0IHZhbHVlKS5cbi0tXG5uZXQvY29yZS9kZXYuYy0xMTUzNi1cdGlmIChkZXYtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9PSBORVRfQUREUl9QRVJNKVxubmV0L2NvcmUvZGV2LmM6MTE1Mzc6XHRcdG1lbWNweShkZXYtXHUwMDNlcGVybV9hZGRyLCBkZXYtXHUwMDNlZGV2X2FkZHIsIGRldi1cdTAwM2VhZGRyX2xlbik7XG5uZXQvY29yZS9kZXYuYy0xMTUzOC1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMjA5ND1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2X21xcyhpbnQgc2l6ZW9mX3ByaXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTIxMzMtXG5uZXQvY29yZS9kZXYuYzoxMjEzNDpcdGlmIChkZXZfYWRkcl9pbml0KGRldikpXG5uZXQvY29yZS9kZXYuYy0xMjEzNS1cdFx0Z290byBmcmVlX3BjcHU7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTIyNTk9dm9pZCBmcmVlX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEyMjgzLVx0LyogRmx1c2ggZGV2aWNlIGFkZHJlc3NlcyAqL1xubmV0L2NvcmUvZGV2LmM6MTIyODQ6XHRkZXZfYWRkcl9mbHVzaChkZXYpO1xubmV0L2NvcmUvZGV2LmMtMTIyODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2MjMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gZGV2X2FkZHJfaW5pdCoqCgpPa2F5LCBzbyBgZGV2X2FkZHJfaW5pdGAgaXMgdXAuIExldCYjMzk7cyBnZXQgcmlnaHQgZG93biB0byBpdC4gTXkgdGFzayBpcyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgaG93IHRoZSBgZGV2X2FkZHJgIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHZhbHVlcyBvciBwcm9jZXNzZXMgaXQgaW52b2x2ZXMgYW5kIHdoYXQgZWZmZWN0IHRoaXMgaW5pdGlhbGl6YXRpb24gaGFzIG9uIHRoZSBzeXN0ZW0uIFRpbWUgdG8gZ28gbGluZS1ieS1saW5lLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGlzIHRoaW5nIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfYWRkcl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY2MT12b2lkIGRldl9hZGRyX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NzAtLyoqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY3MTogKlx0ZGV2X2FkZHJfaW5pdCAtIEluaXQgZGV2aWNlIGFkZHJlc3MgbGlzdFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NzItICpcdEBkZXY6IGRldmljZVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjc4LSAqL1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2Nzk6aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjgwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk3MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBpbml0aWFsIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIGBkZXZfYWRkcl9pbml0YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBteSBtaW5kIGlzOiAmIzM0O0xldCYjMzk7cyByZWFkIGBkZXZfYWRkcl9pbml0YC4mIzM0OyBTaW1wbGUsIGRpcmVjdCwgYW5kIHByYWdtYXRpYy4gQXMgYW4gZXhwZXJ0LCBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgaHlwb3RoZXNlcyBhYm91dCB3aGF0IHRoaXMgZnVuY3Rpb24gKm1pZ2h0KiBiZSBkb2luZy4gQmFzZWQgb24gdGhlIG5hbWUsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGRldmljZSBhZGRyZXNzIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSYjMzk7bSBsaWtlbHkgaW50ZXJlc3RlZCBpbiBob3cgdGhlIGFkZHJlc3NlcyBhcmUgc2V0LCBpZiB0aGV5IGFyZSBkZXRlcm1pbmVkIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHksIGhvdyBjb25mbGljdHMgYXJlIGhhbmRsZWQsIGFuZCB3aGF0IGVycm9yIGNoZWNraW5nIGlzIGluIHBsYWNlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGlmIG15IGFzc3VtcHRpb25zIGhvbGQgdHJ1ZSBhbmQgc3RhcnQgdG8gYnVpbGQgYW4gbWVudGFsIG1hcCBvZiBob3cgdGhpcyBwaWVjZXMgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHQvKipcbiA2NzE6XHQgKlx0ZGV2X2FkZHJfaW5pdCAtIEluaXQgZGV2aWNlIGFkZHJlc3MgbGlzdFxuIDY3MjpcdCAqXHRAZGV2OiBkZXZpY2VcbiA2NzM6XHQgKlxuIDY3NDpcdCAqXHRJbml0IGRldmljZSBhZGRyZXNzIGxpc3QgYW5kIGNyZWF0ZSB0aGUgZmlyc3QgZWxlbWVudCxcbiA2NzU6XHQgKlx0dXNlZCBieSAtXHUwMDNlZGV2X2FkZHIuXG4gNjc2Olx0ICpcbiA2Nzc6XHQgKlx0VGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHJ0bmxfbXV0ZXguXG4gNjc4Olx0ICovXG4gNjc5Olx0aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiA2ODA6XHR7XG4gNjgxOlx0XHR1bnNpZ25lZCBjaGFyIGFkZHJbTUFYX0FERFJfTEVOXTtcbiA2ODI6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gNjgzOlx0XHRpbnQgZXJyO1xuIDY4NDpcdFxuIDY4NTpcdFx0LyogcnRubF9tdXRleCBtdXN0IGJlIGhlbGQgaGVyZSAqL1xuIDY4NjpcdFxuIDY4NzpcdFx0X19od19hZGRyX2luaXQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycyk7XG4gNjg4Olx0XHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcbiA2ODk6XHRcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxuIDY5MDpcdFx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX0xBTik7XG4gNjkxOlx0XHRpZiAoIWVycikge1xuIDY5MjpcdFx0XHQvKlxuIDY5MzpcdFx0XHQgKiBHZXQgdGhlIGZpcnN0IChwcmV2aW91c2x5IGNyZWF0ZWQpIGFkZHJlc3MgZnJvbSB0aGUgbGlzdFxuIDY5NDpcdFx0XHQgKiBhbmQgc2V0IGRldl9hZGRyIHBvaW50ZXIgdG8gdGhpcyBsb2NhdGlvbi5cbiA2OTU6XHRcdFx0ICovXG4gNjk2Olx0XHRcdGhhID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzLmxpc3QsXG4gNjk3Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIGxpc3QpO1xuIDY5ODpcdFx0XHRkZXYtXHUwMDNlZGV2X2FkZHIgPSBoYS1cdTAwM2VhZGRyO1xuIDY5OTpcdFx0fVxuIDcwMDpcdFx0cmV0dXJuIGVycjtcbiA3MDE6XHR9XG4gNzAyOlx0XG4gNzAzOlx0dm9pZCBkZXZfYWRkcl9tb2Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG9mZnNldCxcbiA3MDQ6XHRcdFx0ICBjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKVxuIDcwNTpcdHtcbiA3MDY6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gNzA3Olx0XG4gNzA4Olx0XHRkZXZfYWRkcl9jaGVjayhkZXYpO1xuIDcwOTpcdFxuIDcxMDpcdFx0aGEgPSBjb250YWluZXJfb2YoZGV2LVx1MDAzZWRldl9hZGRyLCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIGFkZHJbMF0pO1xuIDcxMTpcdFx0cmJfZXJhc2UoXHUwMDI2aGEtXHUwMDNlbm9kZSwgXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycy50cmVlKTtcbiA3MTI6XHRcdG1lbWNweShcdTAwMjZoYS1cdTAwM2VhZGRyW29mZnNldF0sIGFkZHIsIGxlbik7XG4gNzEzOlx0XHRtZW1jcHkoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRyX3NoYWRvd1tvZmZzZXRdLCBhZGRyLCBsZW4pO1xuIDcxNDpcdFx0V0FSTl9PTihfX2h3X2FkZHJfaW5zZXJ0KFx1MDAyNmRldi1cdTAwM2VkZXZfYWRkcnMsIGhhLCBkZXYtXHUwMDNlYWRkcl9sZW4pKTtcbiA3MTU6XHR9XG4gNzE2Olx0RVhQT1JUX1NZTUJPTChkZXZfYWRkcl9tb2QpO1xuIDcxNzpcdFxuIDcxODpcdC8qKlxuIDcxOTpcdCAqXHRkZXZfYWRkcl9hZGQgLSBBZGQgYSBkZXZpY2UgYWRkcmVzc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTU3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgbmV0d29yayBkZXZpY2UgZHJpdmVyIGRldmVsb3BtZW50OgoKKipBbmFseXppbmcgQWRkcmVzcyBBbGxvY2F0aW9uIGluIHRoZSBEcml2ZXIqKgoKUmlnaHQsIHNvIGBkZXYtJmd0O2Rldl9hZGRyYCwgdGhhdCBkZXZpY2UgYWRkcmVzcyBwb2ludGVyLCBpdCYjMzk7cyBhY3R1YWxseSBwb2ludGluZyBkaXJlY3RseSB0byBgaGEtJmd0O2FkZHJgLiAgQW5kIEkgcmVtZW1iZXIgZnJvbSBteSBkaWdnaW5nIGFyb3VuZCwgYGhhLSZndDthZGRyYCBpdHNlbGYgZ2V0cyBhbGxvY2F0ZWQgd2l0aGluIHRoZSBgX19od19hZGRyX2FkZGAgZnVuY3Rpb24uICBUaGF0JiMzOTtzIHRoZSBrZXkgY29ubmVjdGlvbi4gU28gdGhlIGRldmljZSBhZGRyZXNzIGlzbiYjMzk7dCBqdXN0IGZsb2F0aW5nIG91dCB0aGVyZSwgaXTigJlzIGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGhhcmR3YXJlIGFkZHJlc3Mgc3RydWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGFsbG9jYXRpb24gZGV0YWlscyBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGVyZSwgd2hpY2ggbWVhbnMgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBfX2h3X2FkZHJfYWRkYCBmdW5jdGlvbi4gSSB3aWxsIGNoZWNrIGZvciBhbnkgcGVjdWxpYXJpdGllcyB0aGF0IG1heSBoYXZlIGNvbWUgdXAgZHVyaW5nIGRlYnVnZ2luZyBwcmV2aW91c2x5LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0IGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIG5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMgLSBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIG5ldCBkZXZpY2UgbGlzdHNcbiAgIDQ6XHQgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSmlyaSBQaXJrbyBcdTAwM2NqcGlya29AcmVkaGF0LmNvbVx1MDAzZVxuICAgNTpcdCAqXG4gICA2Olx0ICogVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3Igd29ya2luZyB3aXRoIHVuaWNhc3QsIG11bHRpY2FzdCBhbmQgZGV2aWNlXG4gICA3Olx0ICogYWRkcmVzc2VzIGxpc3RzLlxuICAgODpcdCAqL1xuICAgOTpcdFxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcdTAwM2VcbiAgMTU6XHQjaW5jbHVkZSBcdTAwM2NrdW5pdC92aXNpYmlsaXR5LmhcdTAwM2VcbiAgMTY6XHRcbiAgMTc6XHQjaW5jbHVkZSBcJiMzNDtkZXYuaFwmIzM0O1xuICAxODpcdFxuICAxOTpcdC8qXG4gIDIwOlx0ICogR2VuZXJhbCBsaXN0IGhhbmRsaW5nIGZ1bmN0aW9uc1xuICAyMTpcdCAqL1xuICAyMjpcdFxuICAyMzpcdHN0YXRpYyBpbnQgX19od19hZGRyX2luc2VydChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbiAgMjQ6XHRcdFx0XHQgICAgc3RydWN0IG5ldGRldl9od19hZGRyICpuZXcsIGludCBhZGRyX2xlbilcbiAgMjU6XHR7XG4gIDI2Olx0XHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFx1MDAyNmxpc3QtXHUwMDNldHJlZS5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDtcbiAgMjc6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gIDI4Olx0XG4gIDI5Olx0XHR3aGlsZSAoKmluc19wb2ludCkge1xuICAzMDpcdFx0XHRpbnQgZGlmZjtcbiAgMzE6XHRcbiAgMzI6XHRcdFx0aGEgPSByYl9lbnRyeSgqaW5zX3BvaW50LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIG5vZGUpO1xuICAzMzpcdFx0XHRkaWZmID0gbWVtY21wKG5ldy1cdTAwM2VhZGRyLCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbik7XG4gIDM0Olx0XHRcdGlmIChkaWZmID09IDApXG4gIDM1Olx0XHRcdFx0ZGlmZiA9IG1lbWNtcChcdTAwMjZuZXctXHUwMDNldHlwZSwgXHUwMDI2aGEtXHUwMDNldHlwZSwgc2l6ZW9mKG5ldy1cdTAwM2V0eXBlKSk7XG4gIDM2Olx0XG4gIDM3Olx0XHRcdHBhcmVudCA9ICppbnNfcG9pbnQ7XG4gIDM4Olx0XHRcdGlmIChkaWZmIFx1MDAzYyAwKVxuICAzOTpcdFx0XHRcdGluc19wb2ludCA9IFx1MDAyNnBhcmVudC1cdTAwM2VyYl9sZWZ0O1xuICA0MDpcdFx0XHRlbHNlIGlmIChkaWZmIFx1MDAzZSAwKVxuICA0MTpcdFx0XHRcdGluc19wb2ludCA9IFx1MDAyNnBhcmVudC1cdTAwM2VyYl9yaWdodDtcbiAgNDI6XHRcdFx0ZWxzZVxuICA0MzpcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuICA0NDpcdFx0fVxuICA0NTpcdFxuICA0NjpcdFx0cmJfbGlua19ub2RlX3JjdShcdTAwMjZuZXctXHUwMDNlbm9kZSwgcGFyZW50LCBpbnNfcG9pbnQpO1xuICA0NzpcdFx0cmJfaW5zZXJ0X2NvbG9yKFx1MDAyNm5ldy1cdTAwM2Vub2RlLCBcdTAwMjZsaXN0LVx1MDAzZXRyZWUpO1xuICA0ODpcdFxuICA0OTpcdFx0cmV0dXJuIDA7XG4gIDUwOlx0fVxuICA1MTpcdFxuICA1MjpcdHN0YXRpYyBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIqXG4gIDUzOlx0X19od19hZGRyX2NyZWF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4gIDU0Olx0XHRcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSwgYm9vbCBnbG9iYWwsIGJvb2wgc3luYylcbiAgNTU6XHR7XG4gIDU2Olx0XHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xuICA1NzpcdFx0aW50IGFsbG9jX3NpemU7XG4gIDU4Olx0XG4gIDU5Olx0XHRhbGxvY19zaXplID0gc2l6ZW9mKCpoYSk7XG4gIDYwOlx0XHRpZiAoYWxsb2Nfc2l6ZSBcdTAwM2MgTDFfQ0FDSEVfQllURVMpXG4gIDYxOlx0XHRcdGFsbG9jX3NpemUgPSBMMV9DQUNIRV9CWVRFUztcbiAgNjI6XHRcdGhhID0ga21hbGxvYyhhbGxvY19zaXplLCBHRlBfQVRPTUlDKTtcbiAgNjM6XHRcdGlmICghaGEpXG4gIDY0Olx0XHRcdHJldHVybiBOVUxMO1xuICA2NTpcdFx0bWVtY3B5KGhhLVx1MDAzZWFkZHIsIGFkZHIsIGFkZHJfbGVuKTtcbiAgNjY6XHRcdGhhLVx1MDAzZXR5cGUgPSBhZGRyX3R5cGU7XG4gIDY3Olx0XHRoYS1cdTAwM2VyZWZjb3VudCA9IDE7XG4gIDY4Olx0XHRoYS1cdTAwM2VnbG9iYWxfdXNlID0gZ2xvYmFsO1xuICA2OTpcdFx0aGEtXHUwMDNlc3luY2VkID0gc3luYyA/IDEgOiAwO1xuICA3MDpcdFx0aGEtXHUwMDNlc3luY19jbnQgPSAwO1xuICA3MTpcdFxuICA3MjpcdFx0cmV0dXJuIGhhO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgaW50IF9faHdfYWRkcl9hZGRfZXgoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXG4gIDc2Olx0XHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbiAgNzc6XHRcdFx0XHQgICAgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUsIGJvb2wgZ2xvYmFsLCBib29sIHN5bmMsXG4gIDc4Olx0XHRcdFx0ICAgIGludCBzeW5jX2NvdW50LCBib29sIGV4Y2x1c2l2ZSlcbiAgNzk6XHR7XG4gIDgwOlx0XHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFx1MDAyNmxpc3QtXHUwMDNldHJlZS5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDtcbiAgODE6XHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4gIDgyOlx0XG4gIDgzOlx0XHRpZiAoYWRkcl9sZW4gXHUwMDNlIE1BWF9BRERSX0xFTilcbiAgODQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gIDg1Olx0XG4gIDg2Olx0XHR3aGlsZSAoKmluc19wb2ludCkge1xuICA4NzpcdFx0XHRpbnQgZGlmZjtcbiAgODg6XHRcbiAgODk6XHRcdFx0aGEgPSByYl9lbnRyeSgqaW5zX3BvaW50LCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIG5vZGUpO1xuICA5MDpcdFx0XHRkaWZmID0gbWVtY21wKGFkZHIsIGhhLVx1MDAzZWFkZHIsIGFkZHJfbGVuKTtcbiAgOTE6XHRcdFx0aWYgKGRpZmYgPT0gMClcbiAgOTI6XHRcdFx0XHRkaWZmID0gbWVtY21wKFx1MDAyNmFkZHJfdHlwZSwgXHUwMDI2aGEtXHUwMDNldHlwZSwgc2l6ZW9mKGFkZHJfdHlwZSkpO1xuICA5MzpcdFxuICA5NDpcdFx0XHRwYXJlbnQgPSAqaW5zX3BvaW50O1xuICA5NTpcdFx0XHRpZiAoZGlmZiBcdTAwM2MgMCkge1xuICA5NjpcdFx0XHRcdGluc19wb2ludCA9IFx1MDAyNnBhcmVudC1cdTAwM2VyYl9sZWZ0O1xuICA5NzpcdFx0XHR9IGVsc2UgaWYgKGRpZmYgXHUwMDNlIDApIHtcbiAgOTg6XHRcdFx0XHRpbnNfcG9pbnQgPSBcdTAwMjZwYXJlbnQtXHUwMDNlcmJfcmlnaHQ7XG4gIDk5Olx0XHRcdH0gZWxzZSB7XG4gMTAwOlx0XHRcdFx0aWYgKGV4Y2x1c2l2ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTYxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyBOZXR3b3JrIERldmljZSBIYXJkd2FyZSBBZGRyZXNzZXMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGhhLSZndDthZGRyYCBjb25zdHJ1Y3QgYW5kIGl0JiMzOTtzIGNsZWFybHkgcGFydCBvZiBhIGBuZXRkZXZfaHdfYWRkcmAgc3RydWN0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgYW5kIHZlcmlmeSB0aGUgZXhhY3QgZGVmaW5pdGlvbiBvZiBgc3RydWN0IG5ldGRldl9od19hZGRyYC4gSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIHN0cnVjdHVyZSB0byBzZWUgaG93IHRoaXMgYGhhLSZndDthZGRyYCBmaWVsZCBpcyBiZWluZyB1c2VkLiBUaGlzIGNvdWxkIGJlIGNydWNpYWwgaW4gdW5kZXJzdGFuZGluZyBhIGN1cnJlbnQgaXNzdWUgb3IgZGVzaWduLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhZGRyZXNzIG1hbmlwdWxhdGlvbi4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgbWFrZSBzdXJlIEkga25vdyB3aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTIzNT1zdHJ1Y3Qgc2tfYnVmZjtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM2LVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzc6c3RydWN0IG5ldGRldl9od19hZGRyIHtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM4LVx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgLiBUaGlzIGlzIGEgY3J1Y2lhbCBkYXRhIHN0cnVjdHVyZSwgY2xlYXJseSBkZWFsaW5nIHdpdGggaGFyZHdhcmUgYWRkcmVzc2VzIHdpdGhpbiB0aGUgbmV0d29yayBkZXZpY2UgY29udGV4dC4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIHdpbGwgYmUgdXNlZCBmb3IgTUFDIGFkZHJlc3NlcywgbXVsdGljYXN0IE1BQyBhZGRyZXNzZXMsIG9yIHBvc3NpYmx5IGV2ZW4gb3RoZXIgaGFyZHdhcmUtc3BlY2lmaWMgaWRlbnRpZmllcnMgbWFuYWdlZCBieSB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcG9uZW50cy4gSXMgaXQgc2ltcGx5IGEgY29udGFpbmVyIGZvciB0aGUgYWRkcmVzcyBpdHNlbGYsIG9yIGRvZXMgaXQgaG9sZCBhc3NvY2lhdGVkIG1ldGFkYXRhIGxpa2UgZmxhZ3MgKGUuZy4sIHBlcm1hbmVudCwgdGVtcG9yYXJ5LCBldGMuKSBvciBwZXJoYXBzIHJlZmVyZW5jZSBjb3VudHM/IEFyZSB0aGVyZSBhbnkgcG9pbnRlcnMgaW4gdGhlIHN0cnVjdHVyZSB0aGF0IG1hbmFnZSB0aGUgbWVtb3J5IGZvciB0aGUgaGFyZHdhcmUgYWRkcmVzcyBpdHNlbGY/IEkgZXhwZWN0IHRoZXJlIHRvIGJlIGEgZmllbGQgZGVmaW5pbmcgdGhlIGxlbmd0aCBvZiB0aGUgYWRkcmVzcywgYXMgZGlmZmVyZW50IGhhcmR3YXJlIHR5cGVzIGNhbiBoYXZlIGRpZmZlcmVudCBhZGRyZXNzIHNpemVzIChlLmcuLCBFdGhlcm5ldCB2cy4gc29tZSBvYnNjdXJlIGVtYmVkZGVkIG5ldHdvcmspLiBJJiMzOTtsbCB3YW50IHRvIGNoZWNrIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgdmVyc2lvbmVkIG9yIGlmIHRoZXJlIGFyZSBhbnkgZXh0ZW5zaW9uIGZpZWxkcyBhZGRlZCBmb3IgZnV0dXJlIGZlYXR1cmVzLCBhbmQgaG93IHRoYXQgaXMgaGFuZGxlZC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBhbmQgdXNlZCBieSB0aGUgc3Vycm91bmRpbmcgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNzpcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XG4gMjM4Olx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuIDIzOTpcdFx0c3RydWN0IHJiX25vZGVcdFx0bm9kZTtcbiAyNDA6XHRcdHVuc2lnbmVkIGNoYXJcdFx0YWRkcltNQVhfQUREUl9MRU5dO1xuIDI0MTpcdFx0dW5zaWduZWQgY2hhclx0XHR0eXBlO1xuIDI0MjpcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9MQU5cdFx0MVxuIDI0MzpcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9TQU5cdFx0MlxuIDI0NDpcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9VTklDQVNUXHQzXG4gMjQ1Olx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX01VTFRJQ0FTVFx0NFxuIDI0NjpcdFx0Ym9vbFx0XHRcdGdsb2JhbF91c2U7XG4gMjQ3Olx0XHRpbnRcdFx0XHRzeW5jX2NudDtcbiAyNDg6XHRcdGludFx0XHRcdHJlZmNvdW50O1xuIDI0OTpcdFx0aW50XHRcdFx0c3luY2VkO1xuIDI1MDpcdFx0c3RydWN0IHJjdV9oZWFkXHRcdHJjdV9oZWFkO1xuIDI1MTpcdH07XG4gMjUyOlx0XG4gMjUzOlx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3Qge1xuIDI1NDpcdFx0c3RydWN0IGxpc3RfaGVhZFx0bGlzdDtcbiAyNTU6XHRcdGludFx0XHRcdGNvdW50O1xuIDI1NjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUwMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyBpbiBOZXR3b3JrIERyaXZlciBNQUMgQWRkcmVzcyBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBgTUFYX0FERFJfTEVOYCBpcyBkZWZpbmVkIGFzIDMyLCB3aGljaCBtZWFucyB0aGUgaGFyZHdhcmUgYWRkcmVzcyBidWZmZXIsIGBoYS0mZ3Q7YWRkcmAsIGlzIGEgMzItYnl0ZSBhcnJheS4gVGhlIGBfX2h3X2FkZHJfY3JlYXRlYCBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhpcyBzdHJ1Y3R1cmUgdXNpbmcgYGttYWxsb2NgLiBOb3csIGEgY3J1Y2lhbCBwb2ludDogYGttYWxsb2NgIGRvZXNuJiMzOTt0IHplcm8taW5pdGlhbGl6ZSB0aGUgbWVtb3J5LiAgSXQganVzdCBnaXZlcyB5b3UgYSBjaHVuayBvZiBtZW1vcnkuICBTbywgaWYgYGFkZHJfbGVuYCBwYXNzZWQgdG8gYF9faHdfYWRkcl9jcmVhdGVgIGlzIGxlc3MgdGhhbiAzMiwgd2hpY2ggaXQgaXMgaW4gdGhlIGNhc2Ugb2YgYSBzdGFuZGFyZCBFdGhlcm5ldCBNQUMgYWRkcmVzcyAoNiBieXRlcyksIHRoZSAqcmVtYWluaW5nKiBieXRlcyBvZiBgaGEtJmd0O2FkZHJgIHdpbGwgYmUgdW5pbml0aWFsaXplZC4gU3BlY2lmaWNhbGx5LCB0aGUgYnl0ZXMgZnJvbSBpbmRleCA2IHVwIHRvIDMxIHdpbGwgYmUgZ2FyYmFnZS4KCk5vdywgbG9va2luZyBhdCBob3cgdGhlIE1BQyBhZGRyZXNzIGlzIGFjdHVhbGx5ICp1c2VkKiBpbiB0aGUgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBmdW5jdGlvbjoKYGBgYwoJUlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDApKSk7CglSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNCkpKTsKYGBgCldlJiMzOTtyZSByZWFkaW5nIGZyb20gYGRldi0mZ3Q7ZGV2X2FkZHJgLCB3aGljaCAqcG9pbnRzKiB0byBvdXIgYGhhLSZndDthZGRyYC4gVGhlIG9yaWdpbmFsIGNvZGUgcmVhZHMgZnJvbSBgZGV2LSZndDtkZXZfYWRkciAmIzQzOyA0YCwgYW5kIHRoYXQgcmVhZHMgNCBieXRlcyBzdGFydGluZyBhdCBpbmRleCA0IChieXRlcyA0LCA1LCA2LCA3KS4gQnl0ZXMgNCBhbmQgNSBhcmUgcGFydCBvZiB0aGUgTUFDIGFkZHJlc3MsIHNvIHRoZXkgYXJlIGluaXRpYWxpemVkLiBIb3dldmVyLCBieXRlcyA2IGFuZCA3IGFyZSBVTklOSVRJQUxJWkVELiBUaGF0IGNvdWxkIGJlIGEgcHJvYmxlbSEgIFdlJiMzOTtyZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKSG93ZXZlciwgYGRldl9hZGRyX2luaXRgIHNlZW1zIHRvIGluaXRpYWxpemUgdGhlIGZpcnN0IE1BQyBhZGRyZXNzIGZ1bGx5IQpgYGBjCgl1bnNpZ25lZCBjaGFyIGFkZHJbTUFYX0FERFJfTEVOXTsKCW1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpOwoJZXJyID0gX19od19hZGRyX2FkZCgmYW1wO2Rldi0mZ3Q7ZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksCgkJCSAgICBORVRERVZfSFdfQUREUl9UX0xBTik7CmBgYApIZXJlLCB3ZSBjcmVhdGUgYSAzMi1ieXRlIGFycmF5LCBgYWRkcmAsIGFuZCB6ZXJvIGl0IG91dCwgYW5kIHRoZW4gd2UgYWRkIGl0IGFzIGFuIGFkZHJlc3MuICBDcnVjaWFsbHksIGBfX2h3X2FkZHJfYWRkYCBpcyBnaXZlbiBhIGBhZGRyX2xlbmAgb2YgMzIsIHNvIHRoaXMgZmlyc3QgYWRkcmVzcyBpcyBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLiAgU28gd2UgYXJlIHNhZmUgaGVyZSEKCkJ1dCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgTUFDIGFkZHJlc3MgaXMgKmNoYW5nZWQqPyBgbmV0aWZfc2V0X21hY19hZGRyZXNzYCBjYWxscyBgZGV2X2FkZHJfbW9kYCwgd2hpY2ggdXNlcyBgbWVtY3B5YCB0byB1cGRhdGUgdGhlIE1BQyBhZGRyZXNzLgpgYGBjCgltZW1jcHkoJmFtcDtoYS0mZ3Q7YWRkcltvZmZzZXRdLCBhZGRyLCBsZW4pOwpgYGAKVGhpcyBvdmVyd3JpdGVzIHRoZSBleGlzdGluZyBgaGEtJmd0O2FkZHJgIGluIHBsYWNlLiBUaGlzIG1lYW5zIHRoYXQgKm9ubHkqIHRoZSBNQUMgYWRkcmVzcyBieXRlcyBnZXQgdXBkYXRlZCwgYW5kIHRoZSBvdGhlciBieXRlcyByZW1haW4gd2hhdGV2ZXIgZ2FyYmFnZSB3YXMgdGhlcmUgYmVmb3JlLCB1bmxlc3Mgd2Ugc3BlY2lmaWNhbGx5IGluaXRpYWxpemUgdGhlbS4KCkFuZCBmaW5hbGx5LCB3ZSBoYXZlIHRoZSBjYXNlIHdoZXJlIGEgZHJpdmVyIGRpcmVjdGx5IHNldHMgdGhlIE1BQyBhZGRyZXNzLiAgTWFueSBkcml2ZXJzIGRvIGBldGhfaHdfYWRkcl9zZXQoZGV2LCBtYWNfYWRkcilgLiBXZSYjMzk7ZCBuZWVkIHRvIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBldGhfaHdfYWRkcl9zZXRgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGlzLiBJcyB0aGVyZSBhbnkgaW5pdGlhbGl6YXRpb24gaGFwcGVuaW5nIHRoZXJlPyAgQXJlIHdlIHNhZmU/IFdlIG5lZWQgdG8gaW52ZXN0aWdhdGUgYGV0aF9od19hZGRyX3NldGAgZm9yIGEgZGVmaW5pdGl2ZSBhbnN3ZXIuIEl0JiMzOTtzIHBvc3NpYmxlIGZvciB0aGlzIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgc2FtZSBwcm9ibGVtIGFzIHRoZSBvcmlnaW5hbCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtldGhfaHdfYWRkcl9zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTMwMj1zdGF0aWMgaW5saW5lIHZvaWQgZXRoZXJfYWRkcl9jb3B5KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpXG4tLVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTMxNy0vKipcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDozMTg6ICogZXRoX2h3X2FkZHJfc2V0IC0gQXNzaWduIEV0aGVybmV0IGFkZHJlc3MgdG8gYSBuZXRfZGV2aWNlXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzE5LSAqIEBkZXY6IHBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmVcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzIzLSAqL1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjMyNDpzdGF0aWMgaW5saW5lIHZvaWQgZXRoX2h3X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyKVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTMyNS17XG4tLVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTMzNz1zdGF0aWMgaW5saW5lIHZvaWQgZXRoX2h3X2FkZHJfaW5oZXJpdChzdHJ1Y3QgbmV0X2RldmljZSAqZHN0LFxuLS1cbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zNDAtXHRkc3QtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IHNyYy1cdTAwM2VhZGRyX2Fzc2lnbl90eXBlO1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjM0MTpcdGV0aF9od19hZGRyX3NldChkc3QsIHNyYy1cdTAwM2VkZXZfYWRkcik7XG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzQyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg9NjA0PXN0YXRpYyBpbmxpbmUgdm9pZCBldGhfaHdfYWRkcl9nZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJhc2VfYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNjExLVx0dTY0X3RvX2V0aGVyX2FkZHIodSwgYWRkcik7XG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6NjEyOlx0ZXRoX2h3X2FkZHJfc2V0KGRldiwgYWRkcik7XG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNjEzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1MjgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGBldGhfaHdfYWRkcl9zZXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgZXRoX2h3X2FkZHJfc2V0YCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyByb2xlLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgaXQmIzM5O3MgcmVsYXRlZCB0byBzZXR0aW5nIHRoZSBoYXJkd2FyZSBhZGRyZXNzIOKAkyB0aGUgTUFDIGFkZHJlc3MsIHByZXN1bWFibHkg4oCTIG9mIGFuIEV0aGVybmV0IGludGVyZmFjZS4gVGhhdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIGdvIGRlZXBlciB0aGFuIGp1c3QgdGhlIG5hbWUuCgpNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0aGlua2luZyBhYm91dCB0aGUgY29udGV4dC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBsaWtlbHkgdG8gYmUgdXNlZD8gSXMgaXQgcGFydCBvZiB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlPyBJcyBpdCBhIHVzZXItc3BhY2UgdXRpbGl0eSBmdW5jdGlvbiB0byBjb25maWd1cmUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlPyBPciBpcyBpdCBzb21ldGhpbmcgbW9yZSBkZWVwbHkgZW1iZWRkZWQgaW4gdGhlIG5ldHdvcmsgc3RhY2s/IEtub3dpbmcgdGhlIGVudmlyb25tZW50IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuCgpJIHdhbnQgdG8ga25vdyBpdHMgaW5wdXRzLiBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgZXhwZWN0PyBBIG5ldHdvcmsgaW50ZXJmYWNlIGRlc2NyaXB0b3IsIHN1cmVseSwgYnV0IHdoYXQgYWJvdXQgdGhlIGFkZHJlc3MgaXRzZWxmPyBJcyBpdCBhIHNpbXBsZSBieXRlIGFycmF5PyBBIHN0YW5kYXJkaXplZCBzdHJ1Y3Q/IEFueSBlcnJvciBoYW5kbGluZyBpbnB1dHM/IEFueSBsaW1pdGF0aW9ucyBvbiB3aGF0JiMzOTtzIGFsbG93ZWQ/IE15IHRob3VnaHRzIGFyZSByYWNpbmcgZm9yd2FyZCBub3csIGFudGljaXBhdGluZyBob3cgaXQgaGFuZGxlcyBtYWxmb3JtZWQgYWRkcmVzc2VzLCBvciBwb3RlbnRpYWxseSBjb25mbGljdGluZyByZXF1ZXN0cy4KClRoZSBleGVjdXRpb24gZmxvdyBpcyBuZXh0LiBIb3cgZG9lcyB0aGUgZnVuY3Rpb24gYWN0dWFsbHkgZ28gYWJvdXQgc2V0dGluZyB0aGUgYWRkcmVzcz8gRG9lcyBpdCBkaXJlY3RseSBtYW5pcHVsYXRlIHJlZ2lzdGVycyBvbiB0aGUgTmV0d29yayBJbnRlcmZhY2UgQ29udHJvbGxlciAoTklDKT8gRG9lcyBpdCB1dGlsaXplIHNvbWUga2luZCBvZiBzeXN0ZW0gY2FsbCBvciBhIGtlcm5lbCBBUEk/IERvZXMgaXQgZ28gdGhyb3VnaCBhbnkgbGV2ZWwgb2YgYWJzdHJhY3Rpb24/IEtub3dpbmcgdGhpcyB3aWxsIHJldmVhbCB0aGUgbGV2ZWwgb2YgZmxleGliaWxpdHkuIFdpbGwgaXQgaGFuZGxlIGFsbCB0eXBlcyBvZiBhZGRyZXNzZXMgKHVuaWNhc3QsIG11bHRpY2FzdCk/IE9yIGRvZXMgaXQgaGF2ZSBzb21lIHJlc3RyaWN0aW9ucz8KCkkmIzM5O20gYWxzbyBjdXJpb3VzIGFib3V0IGVycm9yIGhhbmRsaW5nLiBIb3cgcm9idXN0IGlzIGl0PyBXaGF0IGZhaWx1cmUgbW9kZXMgZG9lcyBpdCBhbnRpY2lwYXRlPyBEb2VzIGl0IHJldHVybiBlcnJvciBjb2RlcywgdGhyb3cgZXhjZXB0aW9ucywgb3IganVzdCBzaWxlbnRseSBmYWlsPyBEb2VzIGl0IGNvbnNpZGVyIHRoZSB0aW1pbmcgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aGluIHRoZSBlbnZpcm9ubWVudD8gS25vd2luZyB0aGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBJIHVzZSBpdCBvciB3aGF0IGFzc3VtcHRpb25zIEkgY2FuIG1ha2UgaWYgaW1wbGVtZW50aW5nIGEgY29tcGxlbWVudGFyeSBmdW5jdGlvbi4KClVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgbWVudGFsIG1vZGVsIG9mIGl0cyBiZWhhdmlvciwgbGltaXRhdGlvbnMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYmV5b25kIHRoZSBjb2RlIGl0c2VsZiwgY29uc2lkZXJpbmcgdGhlIHBsYXRmb3JtLCBkcml2ZXIsIGFuZCB0aGUgdXNlci1mYWNpbmcgaW1wbGljYXRpb25zIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgcXVpY2sgZXhhbWluYXRpb24gbmVlZHMgdG8gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNvdXJjZSwgdGhlIGRvY3VtZW50YXRpb24sIG9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIGl0cyB0cnVlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxODpcdCAqIGV0aF9od19hZGRyX3NldCAtIEFzc2lnbiBFdGhlcm5ldCBhZGRyZXNzIHRvIGEgbmV0X2RldmljZVxuIDMxOTpcdCAqIEBkZXY6IHBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmVcbiAzMjA6XHQgKiBAYWRkcjogYWRkcmVzcyB0byBhc3NpZ25cbiAzMjE6XHQgKlxuIDMyMjpcdCAqIEFzc2lnbiBnaXZlbiBhZGRyZXNzIHRvIHRoZSBuZXRfZGV2aWNlLCBhZGRyX2Fzc2lnbl90eXBlIGlzIG5vdCBjaGFuZ2VkLlxuIDMyMzpcdCAqL1xuIDMyNDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBldGhfaHdfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpXG4gMzI1Olx0e1xuIDMyNjpcdFx0X19kZXZfYWRkcl9zZXQoZGV2LCBhZGRyLCBFVEhfQUxFTik7XG4gMzI3Olx0fVxuIDMyODpcdFxuIDMyOTpcdC8qKlxuIDMzMDpcdCAqIGV0aF9od19hZGRyX2luaGVyaXQgLSBDb3B5IGRldl9hZGRyIGZyb20gYW5vdGhlciBuZXRfZGV2aWNlXG4gMzMxOlx0ICogQGRzdDogcG9pbnRlciB0byBuZXRfZGV2aWNlIHRvIGNvcHkgZGV2X2FkZHIgdG9cbiAzMzI6XHQgKiBAc3JjOiBwb2ludGVyIHRvIG5ldF9kZXZpY2UgdG8gY29weSBkZXZfYWRkciBmcm9tXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzMwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgX19kZXZfYWRkcl9zZXRgIHNpdHVhdGlvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgYF9fZGV2X2FkZHJfc2V0YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIGdldCBpbnRvIHRoZSBjb2RlIGZvciBgX19kZXZfYWRkcl9zZXRgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgbGluZSBieSBsaW5lLCByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBsb2dpYy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IGNvbXBvbmVudHMsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3Mgd29ya2luZyB3aXRoLCBhbmQgdGhlIGNvcmUgcHVycG9zZSBpdCYjMzk7cyBzZXJ2aW5nLiBLbm93aW5nIG15IG5ldHdvcmtpbmcgYW5kIGRldmljZSBkcml2ZXIgYmFja2dyb3VuZCwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGFzcGVjdHMgbGlrZSBtYW5pcHVsYXRpbmcgTUFDIGFkZHJlc3NlcywgaGFuZGxpbmcgYWRkcmVzcyBhc3NpZ25tZW50IHdpdGhpbiBhIGRldmljZSBzdHJ1Y3R1cmUsIGFuZCBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBpZiBhdCBhbGwsIG9yIGlmIGl0IHByaW1hcmlseSBtYW5hZ2VzIHRoZSBzb2Z0d2FyZSByZXByZXNlbnRhdGlvbiBvZiBhIGRldmljZSYjMzk7cyBhZGRyZXNzIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGRldmljZSBkcml2ZXIgZWNvc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2Rldl9hZGRyX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD01MDk0PXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MDk1Ol9fZGV2X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwOTYte1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NTEwMD1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTAxLXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTEwMjpcdF9fZGV2X2FkZHJfc2V0KGRldiwgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuKTtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTEwMy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzY4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgX19kZXZfYWRkcl9zZXRgIHNpdHVhdGlvbjoKCioqVW5kZXJzdGFuZGluZyB0aGUgYF9fZGV2X2FkZHJfc2V0YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgSSB3YW50IHRvIGRvIGlzIGdldCBpbnRvIHRoZSBjb2RlIGZvciBgX19kZXZfYWRkcl9zZXRgLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgbGluZSBieSBsaW5lLCByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBsb2dpYy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUga2V5IGNvbXBvbmVudHMsIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3Mgd29ya2luZyB3aXRoLCBhbmQgdGhlIGNvcmUgcHVycG9zZSBpdCYjMzk7cyBzZXJ2aW5nLiBLbm93aW5nIG15IG5ldHdvcmtpbmcgYW5kIGRldmljZSBkcml2ZXIgYmFja2dyb3VuZCwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIGFzcGVjdHMgbGlrZSBtYW5pcHVsYXRpbmcgTUFDIGFkZHJlc3NlcywgaGFuZGxpbmcgYWRkcmVzcyBhc3NpZ25tZW50IHdpdGhpbiBhIGRldmljZSBzdHJ1Y3R1cmUsIGFuZCBwb3RlbnRpYWxseSBkZWFsaW5nIHdpdGggbG9ja2luZyBtZWNoYW5pc21zIHRvIGVuc3VyZSBjb25jdXJyZW5jeSBzYWZldHkuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBpZiBhdCBhbGwsIG9yIGlmIGl0IHByaW1hcmlseSBtYW5hZ2VzIHRoZSBzb2Z0d2FyZSByZXByZXNlbnRhdGlvbiBvZiBhIGRldmljZSYjMzk7cyBhZGRyZXNzIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGRldmljZSBkcml2ZXIgZWNvc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDk0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwOTQ6XHRzdGF0aWMgaW5saW5lIHZvaWRcbjUwOTU6XHRfX2Rldl9hZGRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKVxuNTA5NjpcdHtcbjUwOTc6XHRcdGRldl9hZGRyX21vZChkZXYsIDAsIGFkZHIsIGxlbik7XG41MDk4Olx0fVxuNTA5OTpcdFxuNTEwMDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpXG41MTAxOlx0e1xuNTEwMjpcdFx0X19kZXZfYWRkcl9zZXQoZGV2LCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4pO1xuNTEwMzpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxOTEKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQUMgQWRkcmVzcyBNb2RpZmljYXRpb24gUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZGV2X2FkZHJfbW9kYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCB3aXRoIGFuIG9mZnNldCBvZiAwIGFuZCBhIGxlbmd0aCBvZiA2LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgbW9kaWZ5aW5nIGEgTUFDIGFkZHJlc3MsIHJpZ2h0PyAgVGhlIGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgb3ZlcndyaXRlIHRoZSBmaXJzdCA2IGJ5dGVzIG9mIGBoYS0mZ3Q7YWRkcmAgd2l0aCBgbWVtY3B5YC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCB0aGlzIHdvdWxkIG1lYW4gdGhlIHJlbWFpbmluZyAyNiBieXRlcyBvZiBgaGEtJmd0O2FkZHJgIHdvdWxkIHJlbWFpbiB6ZXJvZWQsIGJlY2F1c2Ugb2YgdGhlIHplcm8taW5pdGlhbGl6YXRpb24gaW4gYGRldl9hZGRyX2luaXRgLiBUaGlzIGxvb2tzIGNvcnJlY3QgYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgbW9kaWZ5aW5nIHRoZSBhZGRyZXNzIGluLXBsYWNlLgoKQnV0IHRoZW4gSSBoYWQgYSBtb21lbnQgb2YgZG91YnQuICBJcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgaGEtJmd0O2FkZHJgIGNvdWxkIGJlIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYCBhbmQgKm5vdCogYmUgemVyby1pbml0aWFsaXplZD8gIEkgaW1tZWRpYXRlbHkgcmVjYWxsZWQgdGhlIGBfX2h3X2FkZHJfYWRkX2V4YCBmdW5jdGlvbi4gSXQgc2VlbXMgdGhhdCBgX19od19hZGRyX2NyZWF0ZWAgYWxsb2NhdGVzIGBoYWAgd2l0aCBga21hbGxvY2AgYW5kIG9ubHkgY29waWVzIHRoZSBzdXBwbGllZCBgYWRkcl9sZW5gIGJ5dGVzLiAgU28gaWYgYF9faHdfYWRkcl9hZGRgIGlzIGNhbGxlZCB3aXRoIGEgbGVuZ3RoIG9mIDYsIHdvdWxkbiYjMzk7dCB0aGF0IG1lYW4gdGhlIHJlc3Qgd291bGQgYmUgdW5pbml0aWFsaXplZD8KCk15IHRob3VnaHQgdHJhaW4gY29udGludWVkIGFuZCBJIHdlbnQgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRvIGVuc3VyZSBteSBhc3N1bXB0aW9uIHJlZ2FyZGluZyBkYXRhIGluaXRpYWxpemF0aW9uLiBJJiMzOTttIHJlYXNvbmFibHkgY29uZmlkZW50IHRoZSBgZGV2LSZndDtkZXZfYWRkcmAgaXMgc2V0IG9uY2UgaW4gYGRldl9hZGRyX2luaXRgIGFuZCBuZXZlciBjaGFuZ2VkIHRvIHBvaW50IHRvIGEgZGlmZmVyZW50IGBoYWAsIGFuZCB0aGF0IHRoaXMgaW5pdGlhbCBgaGFgIGlzIHplcm9lZC4gIFRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgZXhpc3Rpbmcgb25lIGluIHBsYWNlLiBJIGhhZCB0byBlbnN1cmUgdGhhdCB0aGUgcG9pbnRlciB3YXMgbm90IHN3aXRjaGVkIGF0IGFueSB0aW1lLgoKQnV0IEkgaGFkIHRvIGRvdWJsZSBjaGVjayEgVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmcm9tIGEgc3l6LWNsdXN0ZXIsIGFuZCBJIHdhc24mIzM5O3Qgc3VyZSBpZiB0aGVyZSB3YXMgYW4gb2xkZXIga2VybmVsIHZlcnNpb24gd2hlcmUgYGRldi0mZ3Q7ZGV2X2FkZHJgIHdhcyBhbiBhcnJheS4gVGltZSB0byBjaGVjayBgaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaGAgZm9yIGhvdyBgZGV2X2FkZHJgIGlzIGRlZmluZWQuIFRoaXMgc2hvdWxkIGNsZWFyIHVwIHRoYXQgdGhvdWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTgxOD1lbnVtIG5ldGRldl9yZWdfc3RhdGUge1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk1OC0gKlx0QG1jOlx0XHRcdG11bHRpY2FzdCBtYWMgYWRkcmVzc2VzXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE5NTk6ICpcdEBkZXZfYWRkcnM6XHRcdGxpc3Qgb2YgZGV2aWNlIGh3IGFkZHJlc3Nlc1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xOTYwLSAqXHRAcXVldWVzX2tzZXQ6XHRcdEdyb3VwIG9mIGFsbCBLb2JqZWN0cyBpbiB0aGUgVHggYW5kIFJYIHF1ZXVlc1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk3Ny0gKlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxOTc4OiAqXHRAZGV2X2FkZHI6XHRIdyBhZGRyZXNzIChiZWZvcmUgYmNhc3QsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NzktICpcdFx0XHRiZWNhdXNlIG1vc3QgcGFja2V0cyBhcmUgdW5pY2FzdClcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIxMjUtICpcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjEyNjogKlx0QGRldl9hZGRyX3NoYWRvdzpcdENvcHkgb2YgQGRldl9hZGRyIHRvIGNhdGNoIGRpcmVjdCB3cml0ZXMuXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIxMjctICpcdEBsaW5rd2F0Y2hfZGV2X3RyYWNrZXI6XHRyZWZjb3VudCB0cmFja2VyIHVzZWQgYnkgbGlua3dhdGNoLlxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XG4tLVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzM5LVx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3RcdG1jO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzQwOlx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3RcdGRldl9hZGRycztcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM0MS1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOTYtXHQvKiBJbnRlcmZhY2UgYWRkcmVzcyBpbmZvIHVzZWQgaW4gZXRoX3R5cGVfdHJhbnMoKSAqL1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzk3Olx0Y29uc3QgdW5zaWduZWQgY2hhclx0KmRldl9hZGRyO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzk4LVxuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjU0NC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjU0NTpcdHU4IGRldl9hZGRyX3NoYWRvd1tNQVhfQUREUl9MRU5dO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTQ2LVx0bmV0ZGV2aWNlX3RyYWNrZXJcdGxpbmt3YXRjaF9kZXZfdHJhY2tlcjtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMzMTA9c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvIHtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzMxMS1cdHN0cnVjdCBuZXRkZXZfbm90aWZpZXJfaW5mbyBpbmZvOyAvKiBtdXN0IGJlIGZpcnN0ICovXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMzMTI6XHRjb25zdCB1bnNpZ25lZCBjaGFyICpkZXZfYWRkcjtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzMxMy19O1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NTAxNz1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfYWRkcl91bmxvY2tfYmgoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwMjItLypcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTAyMzogKiBkZXZfYWRkcnMgd2Fsa2VyLiBTaG91bGQgYmUgdXNlZCBvbmx5IGZvciByZWFkIGFjY2Vzcy4gQ2FsbCB3aXRoXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwMjQtICogcmN1X3JlYWRfbG9jayBoZWxkLlxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDI1LSAqL1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MDI2OiNkZWZpbmUgZm9yX2VhY2hfZGV2X2FkZHIoZGV2LCBoYSkgXFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTAyNzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaGEsIFx1MDAyNmRldi1cdTAwM2VkZXZfYWRkcnMubGlzdCwgbGlzdClcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTAyOC1cbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTUwODU9dm9pZCBfX2h3X2FkZHJfbGlzdF9yZWNvbmNpbGUoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnJlYWxfbGlzdCxcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwOTAtLyogRnVuY3Rpb25zIHVzZWQgZm9yIGRldmljZSBhZGRyZXNzZXMgaGFuZGxpbmcgKi9cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTA5MTp2b2lkIGRldl9hZGRyX21vZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDkyLVx0XHQgIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NTA5ND1zdGF0aWMgaW5saW5lIHZvaWRcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTA5NTpfX2Rldl9hZGRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDk2LXtcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTA5NzpcdGRldl9hZGRyX21vZChkZXYsIDAsIGFkZHIsIGxlbik7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwOTgtfVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDk5LVxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MTAwOnN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUxMDEte1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MTAyOlx0X19kZXZfYWRkcl9zZXQoZGV2LCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4pO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTAzLX1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTEwNC1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTEwNTppbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUxMDYtXHRcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSk7XG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUxMDc6aW50IGRldl9hZGRyX2RlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTA4LVx0XHQgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjYyNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hYyBBZGRyZXNzIFJlYWQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYGRldl9hZGRyYCBpcyBjbGVhcmx5IGEgcG9pbnRlciwgYW5kIGFmdGVyIGV4YW1pbmluZyBgZGV2X2FkZHJfaW5pdGAsIEkgY2FuIHNlZSB0aGF0IGl0IGluaXRpYWxpemVzIGEgMzItYnl0ZSBidWZmZXIsIG5hbWVkIGBhZGRyYCwgdG8gYWxsIHplcm9zIHVzaW5nIGBtZW1zZXRgLiBUaGUgcG9pbnRlciBgZGV2LSZndDtkZXZfYWRkcmAgaXMgdGhlbiBzZXQgdG8gcG9pbnQgdG8gdGhpcyBgYWRkcmAgYnVmZmVyLiBTbyB3aGVuIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgYXR0ZW1wdHMgdG8gcmVhZCA0IGJ5dGVzIHN0YXJ0aW5nIGF0IGFuIG9mZnNldCBvZiAmIzQzOzQsIGl0JiMzOTtzIGFjY2Vzc2luZyBieXRlcyA0IHRocm91Z2ggNyBvZiB0aGlzIDMyLWJ5dGUgYnVmZmVyLiBDcnVjaWFsbHksIHRoaXMgaXMgKm5vdCogYW4gb3V0LW9mLWJvdW5kcyByZWFkOyB0aGUgcmVhZCBpcyB3aXRoaW4gdGhlIGFsbG9jYXRlZCBtZW1vcnkuCgpIb2xkIG9uLCBteSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYnl0ZXMgNiBhbmQgNyBtaWdodCBiZSB1bmluaXRpYWxpemVkLCBidXQgbm8sIHRoZSBgbWVtc2V0YCBpbiBgZGV2X2FkZHJfaW5pdGAgZW5zdXJlcyB0aGF0IHRob3NlIGJ5dGVzIGFyZSwgaW4gZmFjdCwgaW5pdGlhbGl6ZWQgdG8gemVyby4gT2theSwgd2hhdCBpZiBhbm90aGVyIGZ1bmN0aW9uIGxpa2UgYGRldl9hZGRyX21vZGAgbW9kaWZpZXMgdGhlIG1hYyBhZGRyZXNzPyBJdCBjb3BpZXMgb25seSA2IGJ5dGVzLCBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZSAzMi1ieXRlIGJ1ZmZlciB1bnRvdWNoZWQg4oCTIHN0aWxsIHplcm8uIEFuZCB3aGF0IGFib3V0IGluaGVyaXRhbmNlIHVzaW5nIGBldGhfaHdfYWRkcl9pbmhlcml0YD8gRXZlbiBoZXJlLCBgZXRoX2h3X2FkZHJfc2V0YCBpcyBjYWxsZWQsIGFuZCBpdCBjb3BpZXMganVzdCA2IGJ5dGVzIGZyb20gdGhlIHNvdXJjZSwgYW5kIHRoZSByZXN0IHJlbWFpbnMgemVyby4KClRoZXJlZm9yZSwgYnl0ZXMgNiBhbmQgNyBhcmUgKmFsd2F5cyogemVybywgb3Igc28gaXQgc2VlbXMuIFNvIHJlYWRpbmcgdGhlbSBjYW5ub3QgYmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCEgSXQmIzM5O3MgYSB2YWxpZCBhbmQgcHJlZGljdGFibGUgcmVhZC4gQnV0IHdhaXQsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uLi5JJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSBgZGV2LSZndDtkZXZfYWRkcmAgbWlnaHQgYmUgYXNzaWduZWQuIExldCBtZSBjcm9zcy1jaGVjayB0aGUgb3RoZXIgcGxhY2VzIHdoZXJlIGBkZXYtJmd0O2Rldl9hZGRyYCBpcyBhc3NpZ25lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2FkZHIgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MTAwMjA9aW50IG5ldGlmX3ByZV9jaGFuZ2VhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICphZGRyLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwMDI1LVx0XHQuaW5mby5leHRhY2sgPSBleHRhY2ssXG5uZXQvY29yZS9kZXYuYzoxMDAyNjpcdFx0LmRldl9hZGRyID0gYWRkcixcbm5ldC9jb3JlL2Rldi5jLTEwMDI3LVx0fTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY2MT12b2lkIGRldl9hZGRyX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjYtXHRfX2h3X2FkZHJfZmx1c2goXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycyk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY2NzpcdGRldi1cdTAwM2VkZXZfYWRkciA9IE5VTEw7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY2OC19XG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02Nzk9aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY5Ny1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbGlzdCk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY5ODpcdFx0ZGV2LVx1MDAzZWRldl9hZGRyID0gaGEtXHUwMDNlYWRkcjtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjk5LVx0fVxuLS1cbm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmM9Njg4PWllZWU4MDIxNTRfbGxzZWNfc2VuZF9rZXlfaWQoc3RydWN0IHNrX2J1ZmYgKm1zZyxcbi0tXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTY5Ny1cdGNhc2UgTkw4MDIxNTRfS0VZX0lEX01PREVfSU1QTElDSVQ6XG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jOjY5ODpcdFx0bmxfZGV2X2FkZHIgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcobXNnLFxubmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYy02OTktXHRcdFx0XHRcdFx0ICAgIE5MODAyMTU0X0tFWV9JRF9BVFRSX0lNUExJQ0lUKTtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTM1NTM9c3RhdGljIHZvaWQgYWRkcmNvbmZfZ3JlX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtMzU2Ny1cdCAqL1xubmV0L2lwdjYvYWRkcmNvbmYuYzozNTY4Olx0aWYgKCEoKihfX2JlMzIgKilkZXYtXHUwMDNlZGV2X2FkZHIgPT0gMCBcdTAwMjZcdTAwMjZcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzU2OS1cdCAgICAgIGlkZXYtXHUwMDNlY25mLmFkZHJfZ2VuX21vZGUgPT0gSU42X0FERFJfR0VOX01PREVfRVVJNjQpKSB7XG4tLVxubmV0L21hYzgwMjExL3J4LmM9MTEzMT1zdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdCBpZWVlODAyMTFfcnhfbWVzaF9jaGVjayhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KVxuLS1cbm5ldC9tYWM4MDIxMS9yeC5jLTExMzMtXHRzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtXHUwMDNlc2tiLVx1MDAzZWRhdGE7XG5uZXQvbWFjODAyMTEvcnguYzoxMTM0Olx0Y2hhciAqZGV2X2FkZHIgPSByeC1cdTAwM2VzZGF0YS1cdTAwM2V2aWYuYWRkcjtcbm5ldC9tYWM4MDIxMS9yeC5jLTExMzUtXG4tLVxubmV0L21hYzgwMjE1NC9sbHNlYy5jPTEwMDU9aW50IG1hYzgwMjE1NF9sbHNlY19kZWNyeXB0KHN0cnVjdCBtYWM4MDIxNTRfbGxzZWMgKnNlYywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbWFjODAyMTU0L2xsc2VjLmMtMTA2Ni1cbm5ldC9tYWM4MDIxNTQvbGxzZWMuYzoxMDY3Olx0ZGV2X2FkZHIgPSBkZXYtXHUwMDNlZGV2Lmh3YWRkcjtcbm5ldC9tYWM4MDIxNTQvbGxzZWMuYy0xMDY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ5OAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERpcmVjdCBNb2RpZmljYXRpb24gb2YgYGRldi0mZ3Q7ZGV2X2FkZHJgKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBuZXR3b3JrIGRldmljZSBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhpcyBzeXN0ZW0sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBkZXYtJmd0O2Rldl9hZGRyYC4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaXQmIzM5O3MgaW5pdGlhbGl6ZWQgdG8gYGhhLSZndDthZGRyYCBkdXJpbmcgYGRldl9hZGRyX2luaXRgLCBidXQgdGhlbiBJIGhhZCB0aGlzIGZsYXNoIG9mIGluc2lnaHQg4oCTIHdoYXQgaWYgYSAqZHJpdmVyKiBpdHNlbGYsIGRpcmVjdGx5LCBhbHRlcnMgYGRldi0mZ3Q7ZGV2X2FkZHJgIGFmdGVyIGluaXRpYWxpemF0aW9uPyBUaGF0IHdvdWxkIGJ5cGFzcyB0aGUgZXhwZWN0ZWQgZmxvdyBhbmQgY291bGQgaW50cm9kdWNlIHNvbWUgcmVhbGx5IHN1YnRsZSwgaGFyZC10by10cmFjay1kb3duIGlzc3Vlcy4gSXQmIzM5O3Mgbm90IHNvbWV0aGluZyBJJiMzOTtkICpleHBlY3QqIHRvIHNlZSwgYnV0IHdpdGggdGhlIGNvbXBsZXhpdGllcyBvZiB0aGVzZSBkcml2ZXJzLCBpdCYjMzk7cyBjZXJ0YWlubHkgcGxhdXNpYmxlLgoKU28sIHRoZSBuZXh0IHN0ZXAgaXMgb2J2aW91czogSSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZHJpdmVycyB0aGF0IGFjdHVhbGx5IGRvIHRoaXMsIGFuZCBhcyBhbiBleGFtcGxlLCBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIGluIG9uIGBydGw4MTM5dG9vYCB0byBzZWUgaWYgdGhhdCBjb2RlIHNwZWNpZmljYWxseSBtb2RpZmllcyBgZGV2LSZndDtkZXZfYWRkcmAgZGlyZWN0bHkuIFRoYXQgZmVlbHMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBhcmVhIHRvIHRlc3QgaW4gdGhpcyBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZfYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTkzOT1zdGF0aWMgaW50IHJ0bDgxMzlfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtMTAzMi1cdFx0ICAgIGJvYXJkX2luZm9bZW50LVx1MDAzZWRyaXZlcl9kYXRhXS5uYW1lLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6MTAzMzpcdFx0ICAgIGlvYWRkciwgZGV2LVx1MDAzZWRldl9hZGRyLCBwZGV2LVx1MDAzZWlycSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0xMDM0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTEzNjY9c3RhdGljIHZvaWQgcnRsODEzOV9od19zdGFydCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0xMzgxLVx0LyogUmVzdG9yZSBvdXIgaWRlYSBvZiB0aGUgTUFDIGFkZHJlc3MuICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzoxMzgyOlx0UlRMX1czMl9GIChNQUMwICYjNDM7IDAsIGxlMzJfdG9fY3B1ICgqKF9fbGUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDApKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzoxMzgzOlx0UlRMX1czMl9GIChNQUMwICYjNDM7IDQsIGxlMTZfdG9fY3B1ICgqKF9fbGUxNiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDQpKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0xMzg0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTIyMjA9c3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMzMtXHRSVExfVzhfRihDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzoyMjM0Olx0UlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi1cdTAwM2VkZXZfYWRkcikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6MjIzNTpcdFJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtXHUwMDNlZGV2X2FkZHIgJiM0MzsgNCkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtMjIzNi1cdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NDgyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlYnVnZ2luZyB0aGUgUlRMODEzOSBNQUMgQWRkcmVzcyBTZXR0aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biBob3cgdGhlIFJUTDgxMzkgbmV0d29yayBpbnRlcmZhY2Ugc2V0cyBpdHMgTUFDIGFkZHJlc3MuIEkga25vdyBmcm9tIHRoZSBjb2RlIHRoYXQgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBpcyByZXNwb25zaWJsZSBmb3IgdGhpcy4gQnV0IHRoZSBmdW5jdGlvbiBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIGl0c2VsZiBkb2VzbiYjMzk7dCBzZWVtIHRvIGRpcmVjdGx5IGhhbmRsZSB0aGUgTUFDIGFkZHJlc3MgYXNzaWdubWVudCwgaXQgY2FsbHMgYGV0aF9tYWNfYWRkcihkZXYsIHApYCB0byBhY3R1YWxseSBzZXQgdGhlIGFkZHJlc3MuCgpTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyB1bHRpbWF0ZWx5IGJlaW5nIHNldC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY2AgZmlsZSBhbmQgc3BlY2lmaWNhbGx5IGV4YW1pbmUgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCB0byBmb2xsb3cgdGhlIGNhbGwgdG8gYGV0aF9tYWNfYWRkcmAgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4gSSBleHBlY3QgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBpcyBsaWtlbHkgcGFzc2luZyB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIHRvIGBldGhfbWFjX2FkZHJgLCBhbmQgdGhlbiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IGBldGhfbWFjX2FkZHJgIGFjdHVhbGx5IGhhbmRsZXMgdGhlIGRldmljZSBhbmQgcGFja2V0IHN0cnVjdHVyZSB0byBzZXQgdGhlIGFkZHJlc3MuIEkmIzM5O20gaG9waW5nIEkgY2FuIHRyYWNlIHRoaXMgcXVpY2tseSB0byBpZGVudGlmeSB0aGUgaXNzdWUgSSYjMzk7bSBjaGFzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjIwOlx0c3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuMjIyMTpcdHtcbjIyMjI6XHRcdHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjIyMjM6XHRcdHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtXHUwMDNlbW1pb19hZGRyO1xuMjIyNDpcdFx0c3RydWN0IHNvY2thZGRyICphZGRyID0gcDtcbjIyMjU6XHRcbjIyMjY6XHRcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLVx1MDAzZXNhX2RhdGEpKVxuMjIyNzpcdFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG4yMjI4Olx0XG4yMjI5Olx0XHRldGhfaHdfYWRkcl9zZXQoZGV2LCBhZGRyLVx1MDAzZXNhX2RhdGEpO1xuMjIzMDpcdFxuMjIzMTpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0cC1cdTAwM2Vsb2NrKTtcbjIyMzI6XHRcbjIyMzM6XHRcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTtcbjIyMzQ6XHRcdFJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGdldF91bmFsaWduZWRfbGUzMihkZXYtXHUwMDNlZGV2X2FkZHIpKTtcbjIyMzU6XHRcdFJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtXHUwMDNlZGV2X2FkZHIgJiM0MzsgNCkpO1xuMjIzNjpcdFx0UlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTtcbjIyMzc6XHRcbjIyMzg6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZ0cC1cdTAwM2Vsb2NrKTtcbjIyMzk6XHRcbjIyNDA6XHRcdHJldHVybiAwO1xuMjI0MTpcdH1cbjIyNDI6XHRcbjIyNDM6XHRzdGF0aWMgaW50IHJ0bDgxMzlfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4yMjQ0Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMyMQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE3MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNQUMgQWRkcmVzcyBIYW5kbGluZyBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEluaXRpYWxseSwgdGhlIGNvZGUgaGFkIHRoZXNlIGxpbmVzOgpgYGBjCglSVExfVzMyX0YoTUFDMCAmIzQzOyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgMCkpKTsKCVJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LSZndDtkZXZfYWRkciAmIzQzOyA0KSkpOwpgYGAKVGhlIGludGVudGlvbiB3YXMgdG8gd3JpdGUgdGhlIE1BQyBhZGRyZXNzIHRvIGhhcmR3YXJlIHJlZ2lzdGVycy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHB1bGxpbmcgNCBieXRlcyBmcm9tIGBkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDBgIGFuZCBgZGV2LSZndDtkZXZfYWRkciAmIzQzOyA0YC4gVGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIHRoYXQgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIGEgcG9pbnRlciB0byBhIDMyLWJ5dGUgYXJyYXkgaW5pdGlhbGl6ZWQgdG8gemVyby4gU28gd2hlbiByZWFkaW5nIGZyb20gYGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNGAsIHdlJiMzOTtyZSByZWFkaW5nIGJ5dGVzIDQsIDUsIDYsIGFuZCA3LCBhbmQgYnl0ZXMgNiBhbmQgNyB3b3VsZCBhbHdheXMgYmUgemVyby4gSG93ZXZlciwgYE1BQzAgJiM0MzsgNGAgaXMgYSAzMi1iaXQgcmVnaXN0ZXIsIGFuZCB3ZSYjMzk7cmUgd3JpdGluZyBhIDMyLWJpdCB2YWx1ZSB0byBpdC4KClRoZSBtYWluIGlzc3VlIEkgc2VlIGhlcmUgaXMgdGhlICpwb3RlbnRpYWwqIGZvciB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIG9sZCBjb2RlIHdhcyBkb2luZyBhbiB1bmFsaWduZWQgcmVhZCBvZiBhIGB1MzJgIGZyb20gYSBtZW1vcnkgbG9jYXRpb24gd2hpY2ggaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgNC1ieXRlIGFsaWduZWQuIE9uIGFyY2hpdGVjdHVyZXMgd2hlcmUgdW5hbGlnbmVkIGFjY2Vzc2VzIGFyZSBub3QgaGFuZGxlZCBncmFjZWZ1bGx5LCB0aGlzIHdvdWxkIGxlYWQgdG8gZXhjZXB0aW9ucyBvciBjcmFzaGVzLiBUaGUgcGF0Y2gmIzM5O3MgZml4IGludm9sdmVzIHJlcGxhY2luZyB0aGUgY29kZSB3aXRoOgpgYGBjCglSVExfVzMyX0YoTUFDMCAmIzQzOyAwLCBnZXRfdW5hbGlnbmVkX2xlMzIoZGV2LSZndDtkZXZfYWRkcikpOwoJUlRMX1czMl9GKE1BQzAgJiM0MzsgNCwgZ2V0X3VuYWxpZ25lZF9sZTE2KGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNCkpOwpgYGAKTm93LCBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgYXJlIHVzZWQuIFRoZSBzZWNvbmQgbGluZSBub3cgcmVhZHMgb25seSAyIGJ5dGVzIGFuZCB0aGVuIHplcm8tZXh0ZW5kcyBpdCB0byAzMiBiaXRzLCB3aGljaCBpcyBmaW5lIHNpbmNlIGJ5dGVzIDYgYW5kIDcgZnJvbSB0aGUgcHJldmlvdXMgY29kZSB3ZXJlIGFsd2F5cyB6ZXJvcyBhbnl3YXkuCgpMZXQmIzM5O3MgdHJhY2UgYGRldi0mZ3Q7ZGV2X2FkZHJgLiBUaGlzIHBvaW50ZXIgYWN0dWFsbHkgcG9pbnRzIHRvIGBoYS0mZ3Q7YWRkcmAsIGFuZCBgaGFgIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYC4gVGhlIGBoYS0mZ3Q7YWRkcmAgbG9jYXRpb24gY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgYG5ldGRldl9od19hZGRyYCBzdHJ1Y3Q6CmBgYGMKc3RydWN0IG5ldGRldl9od19hZGRyIHsKCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsgLy8gMTYgYnl0ZXMKCXN0cnVjdCByYl9ub2RlCQlub2RlOyAvLyAyNCBieXRlcwoJdW5zaWduZWQgY2hhcgkJYWRkcltNQVhfQUREUl9MRU5dOyAvLyAzMiBieXRlcwouLi4KYGBgCmBhZGRyYCBzdGFydHMgYXQgYW4gb2Zmc2V0IG9mIDQwICgxNiAmIzQzOyAyNCksIHdoaWNoIG1lYW5zIGl0JiMzOTtzIDgtYnl0ZSBhbGlnbmVkIG9uIGEgNjQtYml0IGFyY2hpdGVjdHVyZS4gVGhlcmVmb3JlLCBgZGV2LSZndDtkZXZfYWRkcmAgaXMgOC1ieXRlIGFsaWduZWQsIHdoaWNoIG1lYW5zIGBkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDRgIGlzIDQtYnl0ZSBhbGlnbmVkLiBTbywgdGhlIG9yaWdpbmFsIGNvZGUgKndhcyogNC1ieXRlIGFsaWduZWQuIFNvLCB3aHkgdGhlIGNoYW5nZT8KClRoZSByZWFzb24gY291bGQgYmUgYWJvdXQgc3RyaWN0IGFsaWFzaW5nLCBhbmQgcG9zc2libHkgc29tZSB0b29scyBhcmUgZmxhZ2dpbmcgaXQgYXMgdW5kZWZpbmVkIGJlaGF2aW9yLiBBbHNvLCB0aGVyZSBtaWdodCBiZSBvdGhlciBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhlIGFsaWdubWVudCBpcyBub3QgZ3VhcmFudGVlZC4KCkJ1dCBoZXJlJiMzOTtzIGEgY3J1Y2lhbCBwb2ludDogVGhlIG9sZCBjb2RlIHVzZXMgYGNwdV90b19sZTMyYC4gVGhlIG9yaWdpbmFsIGNvZGUgcmVhZHMgYnl0ZXMgYXMgYSBgdTMyYC4gSWYgdGhlIE1BQyBhZGRyZXNzIGlzIGAwMDoxMToyMjozMzo0NDo1NWAsIGEgbGl0dGxlLWVuZGlhbiBtYWNoaW5lIHdvdWxkIHJlYWQgYDB4MzMyMjExMDBgLCB3aGljaCB0aGUgZnVuY3Rpb24gY29udmVydHMgdG8gdGhlIHNhbWUgdmFsdWUgYDB4MzMyMjExMDBgLiBPbiBhIGJpZy1lbmRpYW4gbWFjaGluZSwgdGhlIHJlYWQgd291bGQgYmUgYDB4MDAxMTIyMzNgLCB3aGljaCBnZXRzIGNvbnZlcnRlZCB0byBgMHgzMzIyMTEwMGAuIFRoZXJlZm9yZSwgaXQgKnNlZW1zKiB0aGF0IGBjcHVfdG9fbGUzMmAgaGFuZGxlcyB0aGUgYnl0ZSBvcmRlciBjb3JyZWN0bHkgb24gYm90aCBhcmNoaXRlY3R1cmVzLiBCdXQgbGV0JiMzOTtzIHZlcmlmeSBob3cgYFJUTF9XMzJfRmAgaXRzZWxmIHdvcmtzLCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIFJUTF9XMzJfRiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTY2MD1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxMzlfZXRodG9vbF9vcHM7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtNjY1LSNkZWZpbmUgUlRMX1cxNl9GKHJlZywgdmFsMTYpXHRkbyB7IGlvd3JpdGUxNiAoKHZhbDE2KSwgaW9hZGRyICYjNDM7IChyZWcpKTsgaW9yZWFkMTYgKGlvYWRkciAmIzQzOyAocmVnKSk7IH0gd2hpbGUgKDApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo2NjY6I2RlZmluZSBSVExfVzMyX0YocmVnLCB2YWwzMilcdGRvIHsgaW93cml0ZTMyICgodmFsMzIpLCBpb2FkZHIgJiM0MzsgKHJlZykpOyBpb3JlYWQzMiAoaW9hZGRyICYjNDM7IChyZWcpKTsgfSB3aGlsZSAoMClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTY2Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyMDkKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMjEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCeXRlIE9yZGVyIGFuZCBNZW1vcnkgQWNjZXNzIGluIFBDSSBCdXMgV3JpdGVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBgaW93cml0ZTMyYCB0YWtlcyBhIGB1MzJgIGluIENQVSBieXRlIG9yZGVyIGFuZCB3cml0ZXMgaXQgYXMgbGl0dGxlLWVuZGlhbiB0byB0aGUgUENJIGJ1cy4gIFNvLCB3aGF0ZXZlciBJIHBhc3MgaXQsIGB2YWwzMmAsIG5lZWRzIHRvIGJlIGluIENQVSBieXRlIG9yZGVyLCBnb3QgaXQuCgpUaGUgb2xkIGNvZGUgd2FzIGRvaW5nOiBgUlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDApKSk7YC4gIEhhbmcgb24uLi4gYGNwdV90b19sZTMyYCByZXR1cm5zIGEgYF9fbGUzMmAsIHdoaWNoIGlzICphbHJlYWR5KiBsaXR0bGUtZW5kaWFuLiBQYXNzaW5nIHRoYXQgZGlyZWN0bHkgdG8gYGlvd3JpdGUzMmAgaXMgbGlrZWx5IGEgcHJvYmxlbSBvbiBiaWctZW5kaWFuIG1hY2hpbmVzISBMZXQmIzM5O3MgdHJhY2UgaXQgdGhyb3VnaDoKCk9uIGEgYmlnLWVuZGlhbiBtYWNoaW5lLCBpZiBgKih1MzIgKilkZXYtJmd0O2Rldl9hZGRyYCBpcyBgMHgwMDExMjIzM2AsIHRoZW4gYGNwdV90b19sZTMyKDB4MDAxMTIyMzMpYCBiZWNvbWVzIGAweDMzMjIxMTAwYCAod2hpY2ggaXMgYSBgX19sZTMyYCkuIFRoZW4gYGlvd3JpdGUzMigweDMzMjIxMTAwKWAgKnN3YXBzKiBpdCBiYWNrIHRvIGAweDAwMTEyMjMzYCBvbiB0aGUgYnVzLiBUaGlzIG1lYW5zIHRoZSBidXMgKnNlZXMqIGAwMCAxMSAyMiAzM2AgaW4gbWVtb3J5IG9yZGVyISBJcyB0aGF0IHJpZ2h0PyBEbyBJIHJlbWVtYmVyIHRoZSBoYXJkd2FyZSBleHBlY3RhdGlvbnMgY29ycmVjdGx5PyBZZXMsIHRoZSBoYXJkd2FyZSAqZXhwZWN0cyogdGhlIE1BQyBhZGRyZXNzIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIsIHNvIGAwMCAxMSAyMiAzM2AgaXMgdGhlIGNvcnJlY3QgbGl0dGxlLWVuZGlhbiBvcmRlciB0aGF0IG5lZWRzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGJ1cy4KCkJ1dCB3aGF0IGFib3V0IGEgbGl0dGxlLWVuZGlhbiBtYWNoaW5lPyBJZiBgKih1MzIgKilkZXYtJmd0O2Rldl9hZGRyYCBpcyBgMHgzMzIyMTEwMGAsIHRoZW4gYGNwdV90b19sZTMyKDB4MzMyMjExMDApYCBpcyBzdGlsbCBgMHgzMzIyMTEwMGAuIEFuZCBgaW93cml0ZTMyKDB4MzMyMjExMDApYCB3cml0ZXMgYDB4MzMyMjExMDBgIHRvIHRoZSBidXMsIHdoaWNoIGluIGxpdHRsZS1lbmRpYW4gbWVtb3J5IG9yZGVyIGlzIGAwMCAxMSAyMiAzM2AuIFNvIGl0IGFjdHVhbGx5IHdvcmtzIQoKU28gdGhlIG9sZCBjb2RlIHdhcyBjb3JyZWN0IG9uIGJvdGggYXJjaGl0ZWN0dXJlcywgKmJ1dCogaXQgdXNlZCBgY3B1X3RvX2xlMzJgIGFuZCBgaW93cml0ZTMyYCBpbmNvcnJlY3RseSwgbGVhZGluZyB0byBTcGFyc2Ugd2FybmluZ3MgKGJlY2F1c2UgYGlvd3JpdGUzMmAgd2FudHMgYSBgdTMyYCwgbm90IGEgYF9fbGUzMmApLiBUaGUgcHJvcGVyIHNvbHV0aW9uIHRvIHNpbGVuY2UgdGhlIHdhcm5pbmdzIGlzIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYC4KCmBnZXRfdW5hbGlnbmVkX2xlMzIoZGV2LSZndDtkZXZfYWRkcilgIHJlYWRzIGZvdXIgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgZnJvbSB0aGUgcHJvdmlkZWQgYWRkcmVzcyBhbmQgcmV0dXJucyB0aGVtIGFzIGEgYHUzMmAgaW4gdGhlICpDUFUmIzM5O3MqIG5hdGl2ZSBieXRlIG9yZGVyLiBUaGVuLCB3aGVuIEkgd3JpdGUgdGhpcyByZXN1bHQgd2l0aCBgaW93cml0ZTMyYCAod2hpY2ggZXhwZWN0cyBhIENQVS1uYXRpdmUgYnl0ZSBvcmRlciBhbmQgd3JpdGVzIGluIGxpdHRsZS1lbmRpYW4pLCBJIGdldCB0aGUgY29ycmVjdCB2YWx1ZSBvbiB0aGUgYnVzLiBMZXQmIzM5O3MgdHJhY2UgYWdhaW4uLi4KCk9uIExFOiBgZ2V0X3VuYWxpZ25lZF9sZTMyYCByZWFkcyBgMHgzMzIyMTEwMGAsIGFuZCByZXR1cm5zIGAweDMzMjIxMTAwYC4gVGhlbiBgaW93cml0ZTMyKDB4MzMyMjExMDApYCB3cml0ZXMgYDAwIDExIDIyIDMzYCB0byB0aGUgYnVzLiBPbiBCRTogYGdldF91bmFsaWduZWRfbGUzMmAgcmVhZHMgYDAwIDExIDIyIDMzYCwgYW5kIHJldHVybnMgYDB4MzMyMjExMDBgLiAgVGhlbiBgaW93cml0ZTMyKDB4MzMyMjExMDApYCBzd2FwcyBpdCB0byBgMHgwMDExMjIzM2AgKHdoaWNoIGluIG1lbW9yeSBvcmRlciBpcyBgMDAgMTEgMjIgMzNgKSBvbiB0aGUgYnVzLiAgU28gaXQgd29ya3MhIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGNvbnZlcnRzIGxpdHRsZSBlbmRpYW4gdG8gQ1BVIGJ5dGUgb3JkZXIuIFRoYXQmIzM5O3MgdGhlIGNvcnJlY3QgYXBwcm9hY2guCgpCdXQgbm93LCB3aGF0IGFib3V0IHRoZSBuZXh0IGxpbmU/IFRoZSBvcmlnaW5hbCBjb2RlIHNhaWQ6IGBSVExfVzMyX0YoTUFDMCAmIzQzOyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi0mZ3Q7ZGV2X2FkZHIgJiM0MzsgNCkpKTtgLCBidXQgdGhlIGNvZGUgd2FzIGNoYW5nZWQgdG8gYFJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDQpKTtgLiBXaHkgZGlkIHRoZXkgdXNlIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGluc3RlYWQgb2YgYGdldF91bmFsaWduZWQKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdHtcbiA2ODE6XHRcdHVuc2lnbmVkIGNoYXIgYWRkcltNQVhfQUREUl9MRU5dO1xuIDY4MjpcdFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiA2ODM6XHRcdGludCBlcnI7XG4gNjg0Olx0XG4gNjg1Olx0XHQvKiBydG5sX211dGV4IG11c3QgYmUgaGVsZCBoZXJlICovXG4gNjg2Olx0XG4gNjg3Olx0XHRfX2h3X2FkZHJfaW5pdChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzKTtcbiA2ODg6XHRcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xuIDY4OTpcdFx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksXG4gNjkwOlx0XHRcdFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcbiA2OTE6XHRcdGlmICghZXJyKSB7XG4gNjkyOlx0XHRcdC8qXG4gNjkzOlx0XHRcdCAqIEdldCB0aGUgZmlyc3QgKHByZXZpb3VzbHkgY3JlYXRlZCkgYWRkcmVzcyBmcm9tIHRoZSBsaXN0XG4gNjk0Olx0XHRcdCAqIGFuZCBzZXQgZGV2X2FkZHIgcG9pbnRlciB0byB0aGlzIGxvY2F0aW9uLlxuIDY5NTpcdFx0XHQgKi9cbiA2OTY6XHRcdFx0aGEgPSBsaXN0X2ZpcnN0X2VudHJ5KFx1MDAyNmRldi1cdTAwM2VkZXZfYWRkcnMubGlzdCxcbiA2OTc6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbGlzdCk7XG4gNjk4Olx0XHRcdGRldi1cdTAwM2VkZXZfYWRkciA9IGhhLVx1MDAzZWFkZHI7XG4gNjk5Olx0XHR9XG4gNzAwOlx0XHRyZXR1cm4gZXJyO1xuIDcwMTpcdH1cbiA3MDI6XHRcbiA3MDM6XHR2b2lkIGRldl9hZGRyX21vZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuIDcwNDpcdFx0XHQgIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1ODY2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzdGVwLWJ5LXN0ZXAuIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKWAgbGluZS4gVGhlIGludGVudCBpcyBjbGVhcjogemVybyBvdXQgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGBhZGRyYC4gVGhlIGludGVyZXN0aW5nIGRldGFpbCBoZXJlLCBhcyBJIHNlZSBpdCwgaXMgdGhlIHNpemUgYmVpbmcgemVyb2VkLiBgc2l6ZW9mKGFkZHIpYCBldmFsdWF0ZXMgdG8gYE1BWF9BRERSX0xFTmAsIHdoaWNoIHdlIGtub3cgaXMgMzIuIFNvLCB3ZSYjMzk7cmUgZXhwbGljaXRseSB6ZXJvaW5nIDMyIGJ5dGVzIG9mIG1lbW9yeSwgcHJlc3VtYWJseSB0byBpbml0aWFsaXplIGBhZGRyYC4gVGhhdCBtYWtlcyBzZW5zZSwgbGF5aW5nIGEgY2xlYW4gZm91bmRhdGlvbiBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCB0aGUgYWRkcmVzcyBkYXRhLgoKTm93LCBpbW1lZGlhdGVseSBhZnRlciB0aGlzIHplcm9pbmcgb3BlcmF0aW9uLCBgX19od19hZGRyX2FkZGAgaXMgYmVpbmcgaW52b2tlZCwgYW5kIGl0JiMzOTtzIGJlaW5nIHBhc3NlZCB0aGUgYGFkZHJgIGFuZCBhbiBgYWRkcl9sZW5gIG9mIDMyLiBUaGlzIHByb21wdHMgYSB0aG9yb3VnaCBpbnNwZWN0aW9uIG9mIGBfX2h3X2FkZHJfYWRkYC4gVGhlIHplcm9pbmcgc3VnZ2VzdHMgaXQmIzM5O3MgYSBwcmUtZW1wdGl2ZSBtZW1vcnkgY2xlYXJpbmcgZm9yIHRoaXMgZnVuY3Rpb24uIElzIGl0IGV4cGVjdGluZyBhIGZ1bGx5IGNsZWFyZWQgYnVmZmVyLCBvciBpcyBpdCBnb2luZyB0byB3cml0ZSBpbnRvIGl0PyBFaXRoZXIgd2F5LCB0aGUgcHJlY2VkaW5nIGBtZW1zZXRgIHByb3ZpZGVzIGEga25vd24gc3RhcnRpbmcgc3RhdGUgYW5kIGdpdmVzIHVzIHRoZSBjYXBhYmlsaXR5IHRvIGtub3cgd2hhdCBzdGF0ZSB0aGUgYnVmZmVyIGlzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBpbnRlcm5hbHMgb2YgYF9faHdfYWRkcl9hZGRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2h3X2FkZHJfYWRkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUzPV9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQtXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc1OnN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzYtXHRcdFx0ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzMi1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MTMzOnN0YXRpYyBpbnQgX19od19hZGRyX2FkZChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM0LVx0XHRcdCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzYte1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzoxMzc6XHRyZXR1cm4gX19od19hZGRyX2FkZF9leChsaXN0LCBhZGRyLCBhZGRyX2xlbiwgYWRkcl90eXBlLCBmYWxzZSwgZmFsc2UsXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzOC1cdFx0XHRcdDAsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTIxMj1zdGF0aWMgaW50IF9faHdfYWRkcl9zeW5jX29uZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqdG9fbGlzdCxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6MjE4Olx0ZXJyID0gX19od19hZGRyX2FkZF9leCh0b19saXN0LCBoYS1cdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXHUwMDNldHlwZSxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMjE5LVx0XHRcdCAgICAgICBmYWxzZSwgdHJ1ZSwgaGEtXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY3OT1pbnQgZGV2X2FkZHJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjg4LVx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSk7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4OTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTAtXHRcdFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTcyOT1pbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03MzgtXHRcdHJldHVybiBlcnI7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjczOTpcdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLCBhZGRyX3R5cGUpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NDAtXHRpZiAoIWVycilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTc5Mj1pbnQgZGV2X3VjX2FkZF9leGNsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Nzk3Olx0ZXJyID0gX19od19hZGRyX2FkZF9leChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzk4LVx0XHRcdCAgICAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QsIHRydWUsIGZhbHNlLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy04MTktXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6ODIwOlx0ZXJyID0gX19od19hZGRyX2FkZChcdTAwMjZkZXYtXHUwMDNldWMsIGFkZHIsIGRldi1cdTAwM2VhZGRyX2xlbixcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVx0XHRcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9OTc3PWludCBkZXZfbWNfYWRkX2V4Y2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4MS1cdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KFx1MDAyNmRldi1cdTAwM2VtYywgYWRkciwgZGV2LVx1MDAzZWFkZHJfbGVuLFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODMtXHRcdFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCB0cnVlLCBmYWxzZSxcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTk5Mj1zdGF0aWMgaW50IF9fZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLFxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjk5ODpcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXHUwMDI2ZGV2LVx1MDAzZW1jLCBhZGRyLCBkZXYtXHUwMDNlYWRkcl9sZW4sXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk5OS1cdFx0XHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIGdsb2JhbCwgZmFsc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTQyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgQWRkcmVzcyBDcmVhdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgX19od19hZGRyX2FkZF9leGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyBoYXJkd2FyZSBhZGRyZXNzZXMgYXJlIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgaXQgY2FsbHMgYF9faHdfYWRkcl9jcmVhdGVgLiBOb3csIGluc2lkZSBgX19od19hZGRyX2NyZWF0ZWAsIHRoZSBjb2RlIGFsbG9jYXRlcyBtZW1vcnkgdXNpbmcgYGttYWxsb2NgIGFuZCB0aGVuIHVzZXMgYG1lbWNweWAgdG8gY29weSB0aGUgaGFyZHdhcmUgYWRkcmVzcyBkYXRhLiBUaGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBgYWRkcl9sZW5gIGlzIDMyIGJ5dGVzLCBhcyBkZXRlcm1pbmVkIGVhcmxpZXIgYnkgYGRldl9hZGRyX2luaXRgLCBhbmQgdGhlIHNvdXJjZSBgYWRkcmAgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9zLiBTbywgdGhhdCBtZWFucyB0aGUgYGhhLSZndDthZGRyYCBmaWVsZCB3aXRoaW4gdGhlIG5ld2x5IGNyZWF0ZWQgaGFyZHdhcmUgYWRkcmVzcyBzdHJ1Y3R1cmUgaXMgKmd1YXJhbnRlZWQqIHRvIGJlIHplcm9lZCBvdXQgYWZ0ZXIgdGhlIGBtZW1jcHlgLgoKVGhlcmVmb3JlLCB0aGUgaW5pdGlhbCBoeXBvdGhlc2lzIHRoYXQgdGhlIHJlYWQgb2YgYnl0ZXMgNiBhbmQgNyBvZiBgZGV2LSZndDtkZXZfYWRkcmAgY291bGQgY2F1c2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBpcyBpbmNvcnJlY3Q7IHRoZSByZXN1bHRpbmcgdmFsdWVzIHNob3VsZCBiZSB6ZXJvLiBJdCYjMzk7cyBub3QgYSBtZW1vcnkgc2FmZXR5IHZpb2xhdGlvbi4gVGhhdCYjMzk7cyBhIHJlbGllZiEKCkJ1dCB3YWl0Li4uIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIElzIHRoZXJlIGFub3RoZXIgcG9zc2liaWxpdHk/IENvdWxkIGBkZXYtJmd0O2Rldl9hZGRyYCBiZSBvdmVyd3JpdHRlbiBieSBhIGRyaXZlciBhdCBhIGxhdGVyIHBvaW50PyBJdCYjMzk7cyBwb3NzaWJsZSBhIGRyaXZlciBtaWdodCBhc3NpZ24gaXRzIG93biBidWZmZXIgdG8gYGRldi0mZ3Q7ZGV2X2FkZHJgLCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgYW4gaXNzdWUuIFRpbWUgdG8gY2hlY2sgdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggZm9yIGFueSBpbnN0YW5jZXMgd2hlcmUgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIGRpcmVjdGx5IGFzc2lnbmVkIGEgbmV3IHZhbHVlLiBHb3R0YSBydWxlIG91dCB0aGF0IHBvdGVudGlhbCBzY2VuYXJpby4gR290dGEga2VlcCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldi1cdTAwM2VkZXZfYWRkciA9JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxMzcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0NDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE5ldHdvcmsgRGV2aWNlIEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgaXNzdWUgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUgTUFDIGFkZHJlc3MgaXMgcmVhZCBhbmQgd3JpdHRlbiB0byB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLCBzcGVjaWZpY2FsbHkgY29uc2lkZXJpbmcgYWxpZ25tZW50IGFuZCBlbmRpYW5uZXNzLiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IHRoZSBjaGFuZ2UgZnJvbSBkaXJlY3QgY2FzdGluZyBhbmQgZGVyZWZlcmVuY2luZyAoYCoodTMyICopZGV2LSZndDtkZXZfYWRkcmApIHRvIHVzaW5nIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCB3YXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGJ1dCB0aGF0JiMzOTtzIG5vdCBpdC4gYGRldi0mZ3Q7ZGV2X2FkZHJgICphbHdheXMqIHBvaW50cyB0byBhIDMyLWJ5dGUgcmVnaW9uLCB6ZXJvLWluaXRpYWxpemVkLCBhbmQgYW55IG1vZGlmaWNhdGlvbnMgYXJlIGNhcmVmdWxseSBjb250cm9sbGVkIHRocm91Z2ggYGV0aF9od19hZGRyX3NldGAgb3IgYGRldl9hZGRyX21vZGAsIHNvIHRoZSBwYWRkaW5nIGJ5dGVzIGJleW9uZCB0aGUgNi1ieXRlIE1BQyBhZGRyZXNzIGFyZSBhbHdheXMgemVyby4gQWxzbywgaXQmIzM5O3MgYWx3YXlzIDQtYnl0ZSBhbGlnbmVkIG9uIGJvdGggMzItYml0IGFuZCA2NC1iaXQgYXJjaGl0ZWN0dXJlcywgc28gYWxpZ25tZW50IHdhc24mIzM5O3QgdGhlIGlzc3VlLCB3aGljaCBpbml0aWFsbHkgc3VycHJpc2VkIG1lLgoKVGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgc2VlbXMgdG8gYmUgZW5kaWFubmVzcyBhbmQgc3RyaWN0IGFsaWFzaW5nLiBDYXN0aW5nIGB1bnNpZ25lZCBjaGFyICpgIHRvIGB1MzIgKmAgaXMgYSBzdHJpY3QgYWxpYXNpbmcgdmlvbGF0aW9uLiBBbHNvLCBkZXJlZmVyZW5jaW5nIHRoZSBjYXN0IGB1MzIgKmAgbWlnaHQgbm90IHdvcmsgY29ycmVjdGx5IG9uIGJpZy1lbmRpYW4gYXJjaGl0ZWN0dXJlcy4KCk9uIExpdHRsZSBFbmRpYW4sIHRoZSBvbGQgY29kZSB3b3JrZWQgYXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIG9uIEJpZyBFbmRpYW4sIHRoZSBvbGQgY29kZSAqd2FzKiBzdWJ0bHkgYnJva2VuLiBMZXQmIzM5O3MgdHJhY2UgaXQuCk9uIEJpZyBFbmRpYW4sIGAqKHUzMiAqKWRldi0mZ3Q7ZGV2X2FkZHJgIHdvdWxkIHJlYWQgdGhlIGJ5dGVzIGluIHRoZSB3cm9uZyBvcmRlci4gIGBjcHVfdG9fbGUzMmAgd291bGQgZml4IHRoZSBieXRlIG9yZGVyLCBidXQgdGhlbiBgaW93cml0ZTMyYCAob3IgYF9fcmF3X3dyaXRlbGAgYWZ0ZXIgYXBwbHlpbmcgYGNwdV90b19sZTMyYCkgd291bGQgc3dhcCB0aGUgYnl0ZXMgKmFnYWluKiBkdWUgdG8gdGhlIGV4cGVjdGVkIG5hdGl2ZSBlbmRpYW5uZXNzIG9mIGBpb3dyaXRlMzJgLiBUaGF0IHdvdWxkIHRoZW4gd3JpdGUgYSBNQUMgYWRkcmVzcyBpbiB0aGUgd3Jvbmcgb3JkZXIuIFRoaXMgd291bGQgd3JpdGUgTUFDIGFkZHJlc3MgYnl0ZXMgaW4gcmV2ZXJzZWQgYnl0ZSBvcmRlciBvbiBCaWcgRW5kaWFuIG1hY2hpbmVzLiBgZ2V0X3VuYWxpZ25lZF9sZTMyYCByZWFkcyBhIGxpdHRsZS1lbmRpYW4gMzItYml0IHZhbHVlIGluIG1lbW9yeSBhbmQgcmV0dXJucyBpdCBhcyBhIENQVS1lbmRpYW4gdmFsdWUuIFRoaXMgd2lsbCByZXNvbHZlIHRoZSBlcnJvci4KClRoZXJlZm9yZSwgdGhlIHBhdGNoIGxpa2VseSBmaXhlcyB0aGUgZW5kaWFubmVzcyBpc3N1ZS4gQWRkaXRpb25hbGx5LCBpdCByZXNvbHZlcyB0aGUgc3RyaWN0IGFsaWFzaW5nIGFuZCBwb3RlbnRpYWxseSBhbiB1bmFsaWduZWQgYWNjZXNzIHdhcm5pbmcgKGV2ZW4gdGhvdWdoIGluIHByYWN0aWNlIGl0IGlzIGFsaWduZWQpLiBUaGUgY2hhbmdlIHRvIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGZvciB0aGUgc2Vjb25kIHBhcnQgaXMgYmVjYXVzZSByZWFkaW5nIGJ5dGVzIDYgYW5kIDcgKG91dHNpZGUgb2YgdGhlIDYtYnl0ZSBNQUMpIGlzIHVuZGVzaXJhYmxlIGZyb20gYSBjb2RlIHNhZmV0eSBwZXJzcGVjdGl2ZS4gRXZlbiB0aG91Z2ggdGhlc2UgYnl0ZXMgYXJlIGFsd2F5cyAwLCByZWFkaW5nIHRoZW0gaXMgbm90IGlkZWFsLiBJdCYjMzk7cyBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBiZWNhdXNlIHRoZXkgYXJlIHplcm9lZCBhbmQgZXhpc3QgaW4gYWxsb2NhdGVkIG1lbW9yeS4gVGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGEgZ29vZC1wcmFjdGljZSBmaXggZm9yIGVuZGlhbm5lc3MsIHN0cmljdCBhbGlhc2luZywgYW5kIHRvIGF2b2lkIHJlYWRpbmcgbWVtb3J5IHRoYXQmIzM5O3MgY29uY2VwdHVhbGx5IG91dC1vZi1ib3VuZHMuIEFsc28sIEtNU0FOIGFuZCBvdGhlciBtZW1vcnkgc2FuaXRpemVycyB3b24mIzM5O3QgY29tcGxhaW4gYmVjYXVzZSBvZiB0aGUgemVyb2luZyBpbiBgZGV2X2FkZHJfaW5pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl9hZGRyX2ZsdXNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY0Mj12b2lkIGRldl9hZGRyX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NTMtLyoqXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY1NDogKlx0ZGV2X2FkZHJfZmx1c2ggLSBGbHVzaCBkZXZpY2UgYWRkcmVzcyBsaXN0XG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY1NS0gKlx0QGRldjogZGV2aWNlXG4tLVxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjAtICovXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY2MTp2b2lkIGRldl9hZGRyX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY2Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNDkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgZGV2X2FkZHJfZmx1c2hgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgY29kZSBpbmRpY2F0ZXMgd2UmIzM5O3JlIGFib3V0IHRvIGV4YW1pbmUgYGRldl9hZGRyX2ZsdXNoYC4gSnVzdCB0aGUgbmFtZSBpdHNlbGYgaGludHMgYXQgc29tZSBzb3J0IG9mIGZsdXNoaW5nIG9wZXJhdGlvbiByZWxhdGVkIHRvIGRldmljZSBhZGRyZXNzZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgY2FuIGltbWVkaWF0ZWx5IHN0YXJ0IGh5cG90aGVzaXppbmcg4oCTIGlzIHRoaXMgcmVsYXRlZCB0byBBUlAgY2FjaGUgaW52YWxpZGF0aW9uPyBQZXJoYXBzIHNvbWV0aGluZyBpbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGNoYW5nZXM/IE9yIG1heWJlIGV2ZW4gbW9yZSBmdW5kYW1lbnRhbCwgbGlrZSBjbGVhcmluZyBzdGFsZSBlbnRyaWVzIGluIGEgaGFyZHdhcmUgYWRkcmVzcyB0YWJsZT8gSSYjMzk7bGwgbmVlZCB0byBzZWUgdGhlIGNvbnRleHQgdG8gZm9ybSBhIHByb3BlciBoeXBvdGhlc2lzLiBNeSBleHBlcnRpc2UgdGVsbHMgbWUgdG8gcXVpY2tseSBmb3JtIGEgbWVudGFsIGNoZWNrbGlzdCBvZiByZWxhdGVkIGFyZWFzIGxpa2UgZHJpdmVyIGFyY2hpdGVjdHVyZSwgbmV0d29ya2luZyBwcm90b2NvbHMsIGFuZCBtZW1vcnkgbWFuYWdlbWVudC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjU0Olx0ICpcdGRldl9hZGRyX2ZsdXNoIC0gRmx1c2ggZGV2aWNlIGFkZHJlc3MgbGlzdFxuIDY1NTpcdCAqXHRAZGV2OiBkZXZpY2VcbiA2NTY6XHQgKlxuIDY1NzpcdCAqXHRGbHVzaCBkZXZpY2UgYWRkcmVzcyBsaXN0IGFuZCByZXNldCAtXHUwMDNlZGV2X2FkZHIuXG4gNjU4Olx0ICpcbiA2NTk6XHQgKlx0VGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHJ0bmxfbXV0ZXguXG4gNjYwOlx0ICovXG4gNjYxOlx0dm9pZCBkZXZfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDY2MjpcdHtcbiA2NjM6XHRcdC8qIHJ0bmxfbXV0ZXggbXVzdCBiZSBoZWxkIGhlcmUgKi9cbiA2NjQ6XHRcdGRldl9hZGRyX2NoZWNrKGRldik7XG4gNjY1Olx0XG4gNjY2Olx0XHRfX2h3X2FkZHJfZmx1c2goXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycyk7XG4gNjY3Olx0XHRkZXYtXHUwMDNlZGV2X2FkZHIgPSBOVUxMO1xuIDY2ODpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5MzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgZGV2X2FkZHJfZmx1c2hgIHNldHMgYGRldi0mZ3Q7ZGV2X2FkZHJgIHRvIGBOVUxMYCwgYW5kIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGluIGBmcmVlX25ldGRldmAuIFNvLCB5b3UmIzM5O2QgdGhpbmsgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIG5ldmVyIHJlLWFzc2lnbmVkIGFmdGVyIGBkZXZfYWRkcl9pbml0YCwgd2hpY2ggc2hvdWxkIHplcm8gaXQuIEJ1dCB3YWl0Li4uIHdoYXQgYWJvdXQgdmlydHVhbCBkZXZpY2VzPyBEZXZpY2VzIGxpa2UgYm9uZGluZyBvciBWTEFOIGludGVyZmFjZXMgY2FuIG1vZGlmeSB0aGVpciBNQUMgYWRkcmVzc2VzIHVzaW5nIGBkZXZfYWRkcl9tb2RgLCBidXQgdGhhdCBmdW5jdGlvbiBvbmx5IG1vZGlmaWVzIHRoZSBmaXJzdCBzaXggYnl0ZXMuCgpTbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgaXQgKnBvc3NpYmxlKiB0aGF0IGBkZXYtJmd0O2Rldl9hZGRyYCBpc24mIzM5O3QgZnVsbHkgemVyb2VkPyBMZXQmIzM5O3MgZGlnIGRlZXBlci4gVGhlIGNvZGUgZm9yIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgaXMgcmlnaHQgdGhlcmUuICBJIHNlZSB0aGF0IGl0IHVzZXMgYGV0aF9od19hZGRyX3NldChkZXYsIGFkZHItJmd0O3NhX2RhdGEpYC4gIEFoYSEgYGV0aF9od19hZGRyX3NldGAgY29waWVzIDYgYnl0ZXMgZnJvbSBgYWRkci0mZ3Q7c2FfZGF0YWAgdG8gYGRldi0mZ3Q7ZGV2X2FkZHJgLiBCdXQgd2hlcmUgZG9lcyBgYWRkcmAgY29tZSBmcm9tPyAgSXQgY29tZXMgZnJvbSB1c2VyIHNwYWNlLCB2aWEgYGlvY3RsYCBvciBgbmV0bGlua2AuCgpBbmQgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nLiAgSWYgdXNlciBzcGFjZSBwYXNzZXMgYSBgc29ja2FkZHJgIHN0cnVjdHVyZSB3aGVyZSB0aGUgdHJhaWxpbmcgYnl0ZXMgb2YgYHNhX2RhdGFgIGFyZSAqdW5pbml0aWFsaXplZCosIHdlIGhhdmUgYSBwb3RlbnRpYWwgaXNzdWUuIFJlbWVtYmVyLCBgc2FfZGF0YWAgaXMgMTQgYnl0ZXMsIGJ1dCBgZXRoX2h3X2FkZHJfc2V0YCAqb25seSogY29waWVzIHRoZSBmaXJzdCA2LiBTbywgYW55IHVuaW5pdGlhbGl6ZWQgZGF0YSBiZXlvbmQgdGhlIGZpcnN0IDYgYnl0ZXMgaW4gYHNhX2RhdGFgIHdvdWxkbiYjMzk7dCBiZSBjb3BpZWQuIFNpbmNlIGBkZXYtJmd0O2Rldl9hZGRyYCB3YXMgemVyb2VkIGF0IGluaXRpYWxpemF0aW9uLCB0aGUgcmVtYWluaW5nIGJ5dGVzIChieXRlcyA2IGFuZCA3KSBvZiBgZGV2LSZndDtkZXZfYWRkcmAgd291bGQgKnN0aWxsKiBiZSB6ZXJvZWQuCgpIb3dldmVyLCBpZiBLTVNBTiB3ZXJlIHRvIHJlcG9ydCBhbiB1bmluaXRpYWxpemVkIHZhbHVlLCBpdCB3b3VsZCBwb2ludCB0byB0aGlzIGZ1bmN0aW9uIGFzIGEgbG9jYXRpb24uCgpMZXQmIzM5O3MgZG8gc29tZSBzZWFyY2hpbmcgZm9yIEtNU0FOIHJlcG9ydHMgcmVsYXRlZCB0byBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIHRvIGRldGVybWluZSB3aGV0aGVyIGEgdnVsbmVyYWJpbGl0eSBleGlzdHMgaW4gdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTM5X3NldF9tYWNfYWRkcmVzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz02NDY9c3RhdGljIHZvaWQgcnRsODEzOV9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy02NDctI2VuZGlmXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo2NDg6c3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTY0OS1zdGF0aWMgaW50IHJ0bDgxMzlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTkyMz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bDgxMzlfbmV0ZGV2X29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjctXHQubmRvX3ZhbGlkYXRlX2FkZHJcdD0gZXRoX3ZhbGlkYXRlX2FkZHIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo5Mjg6XHQubmRvX3NldF9tYWNfYWRkcmVzcyBcdD0gcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjktXHQubmRvX3N0YXJ0X3htaXRcdFx0PSBydGw4MTM5X3N0YXJ0X3htaXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM9MjIwOT1zdGF0aWMgdm9pZCBydGw4MTM5X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMTktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzoyMjIwOnN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMjEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTU1NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBLTVNBTiBSZXBvcnRzIGluIHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJvb3QgY2F1c2UgZm9yIGEgcG90ZW50aWFsIEtNU0FOIHJlcG9ydCByZWxhdGVkIHRvIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AuIFRoZSBjZW50cmFsIGlzc3VlIHNlZW1zIHRvIGJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiBgZGV2LSZndDtkZXZfYWRkcmAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGlzIGNvdWxkIHN0ZW0gZnJvbSB0aGUgYnl0ZXMgYXQgb2Zmc2V0cyA2IGFuZCA3IHdpdGhpbiBgZGV2LSZndDtkZXZfYWRkcmAgbm90IGJlaW5nIGluaXRpYWxpemVkLiBIb3dldmVyLCBJIGtub3cgZnJvbSBgZGV2X2FkZHJfaW5pdGAgdGhhdCB0aG9zZSBieXRlcyBzaG91bGQgYmUgc2V0IHRvIHplcm8uCgpJIGhhZCB0byBjbGFyaWZ5IHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBJcyBgZGV2X2FkZHJfaW5pdGAgQUxXQVlTIGNhbGxlZD8gWWVzLCBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIGBhbGxvY19uZXRkZXZfbXFzYC4gQ291bGQgdGhlcmUgYmUgYSBjYXNlIHdoZXJlIGBkZXYtJmd0O2Rldl9hZGRyYCBpcyBhbGxvY2F0ZWQgZGlmZmVyZW50bHksIHNwZWNpZmljYWxseSwgbm90IGFzIGEgMzItYnl0ZSBhcnJheSBhcyBJIGFzc3VtZT8gSSBydWxlZCBvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGBkZXYtJmd0O2Rldl9hZGRyYCBiZWluZyBtb2RpZmllZCBkaXJlY3RseSAoZS5nLiwgYGRldi0mZ3Q7ZGV2X2FkZHIgPSBzb21lX2J1ZmZlcmApIGJlY2F1c2UgSSBmb3VuZCBubyBzdWNoIGRpcmVjdCBhc3NpZ25tZW50cyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeS4KCkkgY29uc2lkZXJlZCBgZGV2X2FkZHJfbW9kYCwgd2hpY2ggbW9kaWZpZXMgdGhlIGBoYS0mZ3Q7YWRkcmAgKmluIHBsYWNlKi4gVGhpcyBpc24mIzM5O3QgdGhlIGlzc3VlLiBCdXQsIGRvZXMgYGRldi0mZ3Q7ZGV2X2FkZHJgIHBvaW50IHRvIGEgZGlmZmVyZW50IGJ1ZmZlciBvdGhlciB0aGFuIGBoYS0mZ3Q7YWRkcmA/IE5vdCBhY2NvcmRpbmcgdG8gdGhlIGNvZGU7IHRoZSBgZGV2X2FkZHJfaW5pdGAgZnVuY3Rpb24gc2V0cyB0aGluZ3MgdXAgY29ycmVjdGx5IGFuZCB0aGlzIGlzIHRoZSBvbmx5IGNvZGUgc2V0dGluZyB1cCB0aGUgZGV2aWNlIGFkZHJlc3MuIFRoZSBNQUMgYWRkcmVzcyBpcyBhIDMyLWJ5dGUgYXJyYXkgdG8gaGFuZGxlIHRoaXMuCgpUaGUgcXVlc3Rpb24gdGhlbiBldm9sdmVkIGludG8gd2h5IHRoZXkgY2hhbmdlZCB0aGUgY29kZSB0byBgZ2V0X3VuYWxpZ25lZF9sZTE2YC4gVGhpcyBjaGFuZ2UgaGFzIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIHByZXZpb3VzIGFwcHJvYWNoIHdpdGggYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBsb29rZWQgbGlrZSBpdCB3b3VsZCByZWFkIGJ5dGVzIDQsIDUsIDYsIDcgYW5kIGl0IHdvdWxkIG5vdCBjcmFzaCBiZWNhdXNlIHRoZSBhcnJheSBpcyAzMiBieXRlcyBhbmQgdGhlIDZ0aCBhbmQgN3RoIGJ5dGVzIGFyZSAwLiBOb3cgSSYjMzk7bSByZW1pbmRlZCB0aGF0IEtBU0FOIGRldGVjdHMgb3V0LW9mLWJvdW5kcyByZWFkcywgYnV0IHNpbmNlIGBkZXYtJmd0O2Rldl9hZGRyYCBpcyBhIDMyLWJ5dGUgYXJyYXksIEtBU0FOIGRvZXNuJiMzOTt0IGRldGVjdCBpdC4gS01TQU4sIGhvd2V2ZXIsIGRldGVjdHMgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGFyZSBieXRlcyA2IGFuZCA3IHVuaW5pdGlhbGl6ZWQ/IE5vLiBJIGNoZWNrZWQgYWdhaW4gYGRldl9hZGRyX2luaXRgLCB3aGljaCB6ZXJvZXMgYWxsIDMyIGJ5dGVzIG9mIHRoZSBNQUMgYWRkcmVzcy4gSSBmb3VuZCBgX19od19hZGRyX2FkZGAgdGFrZXMgMzIgYnl0ZXMuIFRoZW4gaXQmIzM5O3MgY29waWVkIHRvIGBoYS0mZ3Q7YWRkcmAgd2l0aCAzMiBieXRlcy4gU28gaXQmIzM5O3MgemVyb2VkLgoKSSBuZWVkIHRvIGNvbmZpcm0gYWxsIHRoZSBpbml0aWFsaXphdGlvbiBwYXRocy4gV2hhdCBpZiB0aGUgYWRkcmVzcyBtb2RpZmljYXRpb24gdmlhIGBldGhfaHdfYWRkcl9zZXRgIGNoYW5nZXMgdGhlIHZhbHVlIGFmdGVyIHRoZSBpbml0aWFsIHplcm9pbmc/IFRoaXMgZnVuY3Rpb24gY29waWVzIDYgYnl0ZXMgdG8gYGhhLSZndDthZGRyYCwgYnV0IHRoZSByZW1haW5pbmcgYnl0ZXMgcmVtYWluIGFzIDAuIFNvLCBhZ2FpbiwgaXQmIzM5O3MgaW5pdGlhbGl6ZWQuCgpTbywgaXMgdGhlcmUgQU5ZIGNhc2Ugd2hlcmUgYGhhLSZndDthZGRyYCBpcyBpbml0aWFsaXplZCB0byBsZXNzIHRoYW4gMzIgYnl0ZXM/IFdoYXQgYWJvdXQgdGhlIGNhbGwgdG8gYF9faHdfYWRkcl9jcmVhdGVgPyBJbiBgZGV2X2FkZHJfaW5pdGAsIHRoZSBzaXplIGlzIDMyLiBPa2F5LCBzbyB3aGF0IGlmIGBkZXZfYWRkcl9tb2RgIGNhbGxzIGBfX2h3X2FkZHJfaW5zZXJ0YCB3aXRoIGxlbmd0aCA2PyBJIHNlZSB0aGUgaW5zZXJ0IGRvZXNuJiMzOTt0IG1vZGlmeSB0aGUgZGF0YSwgc28gaXQgd29uJiMzOTt0IGltcGFjdCBgaGEtJmd0O2FkZHJgLiBBbHNvLCBkb2VzIGBkZXYtJmd0O2Rldl9hZGRyYCBldmVyIHBvaW50IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBgaGFgPyBJIHNlYXJjaGVkIGFuZCBJJiMzOTttIHJlbWluZGVkIGBkZXYtJmd0O2Rldl9hZGRyYCBhbHdheXMgcG9pbnRzIHRvIGBoYS0mZ3Q7YWRkcmAsIHdoaWNoIGlzIGNyZWF0ZWQgaW4gYGRldl9hZGRyX2luaXRgLiBTbyBhZ2FpbiwgaXQgaXMgYWx3YXlzIHplcm9lZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBpc24mIzM5O3QgYW5vdGhlciBwbGFjZSB0aGF0JiMzOTtzIHNldHRpbmcgdGhpcyB2YWx1ZTogYGRldl9hZGRyX3NldGAuCgpJJiMzOTt2ZSBleGhhdXN0ZWQgYWxsIHBsYXVzaWJsZSBleHBsYW5hdGlvbnMuIFRoZSBLTVNBTiByZXBvcnQgbXVzdCBoYXZlIGJlZW4gYSBmYWxzZSBwb3NpdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2FkZHIgPSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMDAyMD1pbnQgbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFkZHIsXG4tLVxubmV0L2NvcmUvZGV2LmMtMTAwMjUtXHRcdC5pbmZvLmV4dGFjayA9IGV4dGFjayxcbm5ldC9jb3JlL2Rldi5jOjEwMDI2Olx0XHQuZGV2X2FkZHIgPSBhZGRyLFxubmV0L2NvcmUvZGV2LmMtMTAwMjctXHR9O1xuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NjYxPXZvaWQgZGV2X2FkZHJfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY2Ni1cdF9faHdfYWRkcl9mbHVzaChcdTAwMjZkZXYtXHUwMDNlZGV2X2FkZHJzKTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NjY3Olx0ZGV2LVx1MDAzZWRldl9hZGRyID0gTlVMTDtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjY4LX1cbi0tXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY3OT1pbnQgZGV2X2FkZHJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjk3LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyLCBsaXN0KTtcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njk4Olx0XHRkZXYtXHUwMDNlZGV2X2FkZHIgPSBoYS1cdTAwM2VhZGRyO1xubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02OTktXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODczCgkJCQkJCQlvdXRwdXQ6IDM2MQoJCQkJCQkJdGhvdWdodHM6IDQyNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGEgc2Vhc29uZWQga2VybmVsIGRldmVsb3BlciwgYmVnaW5zIHdpdGggdmVyaWZ5aW5nIHRoZSBjb3JlIGFzc2VydGlvbjogaXMgYGRldi0mZ3Q7ZGV2X2FkZHJgIHRydWx5IGluaXRpYWxpemVkPyBUaGUgY29kZSBjbGVhcmx5IHNldHMgaXQgaW4gYGRldl9hZGRyX2luaXRgLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBUaGlzIGlzIGNyaXRpY2FsLiBTaW5jZSBJIGtub3cgYGRldl9hZGRyX2luaXRgIGlzIGNvbnNpc3RlbnRseSBjYWxsZWQsIHRoZSBidWZmZXIgKnNob3VsZCogYWx3YXlzIGJlIGluaXRpYWxpemVkLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBkb2VzIHRoZSAqcGF0Y2gqIGNoYW5nZSB0aGlzLCBvciBpbnRyb2R1Y2UgYSBuZXcgcGF0aCB3aGVyZSB0aGlzIGluaXRpYWxpemF0aW9uIGlzIHNraXBwZWQ/CgpUaGUgS01TQU4gcXVlc3Rpb24gcmV2b2x2ZXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJZiB0aGUgcGF0Y2ggZml4ZWQgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGVuIEtNU0FOIHdvdWxkIGJlIGltcG9ydGFudC4gQnV0IGlmIHRoZSBwYXRjaCBvbmx5ICpwcmV2ZW50cyogdGhlIHJlYWQsIHRoZW4gS01TQU4gaXMgbGlrZWx5IGlycmVsZXZhbnQsIHNpbmNlIEtNU0FOIGNhbiYjMzk7dCAqZGV0ZWN0KiB0aGF0IHRoZSByZWFkIGRvZXNuJiMzOTt0IGhhcHBlbi4KCkkgc3RhcnRlZCBkaWdnaW5nIGludG8gdGhlIHBhdGNoLCBhbmQgdGhlIGtleSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIHVzZWQgYW5kIHNldC4gSSBsb29rZWQgYXQgdGhlIGRlZmluaXRpb24gb2YgYGRldi0mZ3Q7ZGV2X2FkZHJgLCBjb25maXJtaW5nIGl0JiMzOTtzIGEgcG9pbnRlciwgYW5kIHdoZXJlIGl0JiMzOTtzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgaXMgYSBjbHVlLiBUaGVuIEkgZm9jdXNlZCBvbiB0aGUgc3BlY2lmaWMgY29kZSBpbiB0aGF0IGZ1bmN0aW9uLCB0aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQ6CgpgYGBjCi0JUlRMX1czMl9GKE1BQzAgJiM0MzsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDApKSk7Ci0JUlRMX1czMl9GKE1BQzAgJiM0MzsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDQpKSk7CiYjNDM7CVJUTF9XMzJfRihNQUMwICYjNDM7IDAsIGdldF91bmFsaWduZWRfbGUzMihkZXYtJmd0O2Rldl9hZGRyKSk7CiYjNDM7CVJUTF9XMzJfRihNQUMwICYjNDM7IDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtJmd0O2Rldl9hZGRyICYjNDM7IDQpKTsKYGBgCgpUaGUgb2xkIGNvZGUgbG9va3Mgc3VzcGljaW91cy4gSXQgcmVhZHMgYSBgdTMyYCBmcm9tIGFuIGFkZHJlc3MgdGhhdCBjb25jZXB0dWFsbHkgcmVwcmVzZW50cyBhIDYtYnl0ZSBNQUMgYWRkcmVzcywgbWVhbmluZyBpdCBtaWdodCByZWFkIGJleW9uZCB0aGUgTUFDLiBUaGUgc2l6ZSBvZiBgZGV2LSZndDtkZXZfYWRkcmAgaXMgY3JpdGljYWw7IHRoZSBhc3N1bXB0aW9uIHNlZW1zIHRvIGJlIHRoYXQgaXQmIzM5O3Mgc2l6ZWQgZXhhY3RseSBmb3IgYSBNQUMgYWRkcmVzcywgYnV0IGlzIHRoYXQgY29ycmVjdD8gSSB3ZW50IG9uIHRvIHZlcmlmeSB0aGlzLCBieSBzZWFyY2hpbmcgdGhlIGNvZGUgd2hlcmUgYGRldi0mZ3Q7ZGV2X2FkZHJgIGdldHMgYXNzaWduZWQgKGFuZCB0aGUgYW5zd2VyIGlzIGBhbGxvY19uZXRkZXZfbXFzYCkuIFNpbmNlIGl0IGNhbGxzIGBkZXZfYWRkcl9pbml0YCwgdGhpcyBtYWtlcyBhbGwgb2YgdGhpcyBtdWNoIGVhc2llciwgYmVjYXVzZSB0aGUgc2l6ZSBpcyBhIGtub3duIGFuZCBleHBsaWNpdGx5IGluaXRpYWxpemVkIHZhbHVlLgoKVGhlIEtNU0FOIGltcGxpY2F0aW9ucyBjb21lIHRvIGZvY3VzOyBpZiB0aGUgYWxsb2NhdGlvbiBmb3IgYGRldi0mZ3Q7ZGV2X2FkZHJgIGlzIGdyZWF0ZXIgdGhhbiA2IGJ5dGVzLCB0aGVuIHJlYWRpbmcgYmV5b25kIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGFuZCBub3QgYW4gdW5pbml0aWFsaXplZCByZWFkIChiZWNhdXNlLCB3aXRoIGBkZXZfYWRkcl9pbml0YCwgdGhlc2UgZXh0cmEgYnl0ZXMgZ2V0IHplcm9lZCwgYW5kIEtNU0FOIHdvdWxkIG5vdCBjYXRjaCBhIHplcm8gcmVhZCkuIFNpbmNlIGBkZXYtJmd0O2Rldl9hZGRyYCBpcyBpbml0aWFsaXplZCwgaXQgaXMgKmFsd2F5cyogaW5pdGlhbGl6ZWQuIElmIHRoZSByZWFkICppcyogb3V0IG9mIGJvdW5kcywgYnV0IHRoZSBidWZmZXIgaXMgemVybywgS01TQU4gd291bGQgbm90IGNhdGNoIHRoaXMuIElmIHRoZSBidWZmZXIgKndlcmUqIDYgYnl0ZXMsIEtBU0FOICp3b3VsZCogY2F0Y2ggaXQgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkLCBhbmQgdGhlbiBLTVNBTiAqbWlnaHQqIGNhdGNoIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQuCgpUaGUgbW9yZSBJIGxvb2tlZCBhdCBpdCwgdGhlIG1vcmUgSSYjMzk7bSBjb252aW5jZWQgdGhlIGlzc3VlIGlzIG5vdCByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1dCBpcyBhY3R1YWxseSByZWxhdGVkIHRvICpsb2dpY2FsKiBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhlIG9sZCBjb2RlIHdhcyBsb2dpY2FsbHkgcmVhZGluZyBwYXN0IHRoZSBlbmQgb2YgdGhlIE1BQyBhZGRyZXNzLiBUaGUgbmV3IGNvZGUgZml4ZXMgdGhpcyBieSBjaGFuZ2luZyBob3cgdGhlIE1BQyBhZGRyZXNzIGlzIHJlYWQsIGJ1dCBldmVuIGluIHRoZSBvbGQgY29kZSwgS01TQU4gd291bGRuJiMzOTt0IGNhdGNoIGFueXRoaW5nLCBiZWNhdXNlIHRoZSBtZW1vcnkgaXMgKmluaXRpYWxpemVkKi4gSSBjb25maXJtZWQgdGhhdCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCBpcyBhIHNhZmUgd2F5IHRvIHJlYWQgdGhlIGxhc3QgMiBieXRlcy4gVGhlIG9sZCBjb2RlIGNhc3RzIGBkZXYtJmd0O2Rldl9hZGRyYCB0byBhIGB1MzIqYCBhbmQgZGVyZWZlcmVuY2VzIGl0LiBUaGlzIHBvdGVudGlhbGx5IHZpb2xhdGVkIHN0cmljdCBhbGlhc2luZyBydWxlcyBvciBjb3VsZCByZXN1bHQgaW4gYWxpZ25tZW50IGlzc3Vlcy4gVGhlIHBhdGNoLCBjb3JyZWN0bHksIHJlbW92ZXMgdGhpcyBwb3RlbnRpYWwgYWxpYXNpbmcgcHJvYmxlbS4gQWxzbywgdGhpcyByZXNvbHZlcyBhIHBvdGVudGlhbCBTcGFyc2Ugd2FybmluZywgd2hpY2ggaXMgYWx3YXlzIGdvb2QuCgpJbiBzaG9ydCwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpY2FsIG91dC1vZi1ib3VuZHMgcmVhZCBhbmQgZml4ZXMgc3RyaWN0IGFsaWFzaW5nIHZpb2xhdGlvbnMgYW5kL29yIHBvdGVudGlhbCBhbGlnbm1lbnQgcHJvYmxlbXMuIEl0IGlzIE5PVCBmaXhpbmcgYW4gKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSByZWFkLiBUaGVyZWZvcmUsIG5vIEtNU0FOIHNlc3Npb24gaXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgaW5zdGVhZCBvZiBkaXJlY3RseSBjYXN0aW5nIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHRvIGB1MzIgKmAgYW5kIGRlcmVmZXJlbmNpbmcgaXQuIFRoZSBvbGQgY29kZSByZWFkIDQgYnl0ZXMgZnJvbSBgZGV2LVx1MDAzZWRldl9hZGRyICYjNDM7IDRgIChieXRlcyA0LCA1LCA2LCBhbmQgNyksIHdoaWNoIGxvZ2ljYWxseSBleGNlZWRzIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MgbGVuZ3RoLiBcblxuSG93ZXZlciwgYGRldi1cdTAwM2VkZXZfYWRkcmAgcG9pbnRzIHRvIGBoYS1cdTAwM2VhZGRyYCB3aXRoaW4gYSBgc3RydWN0IG5ldGRldl9od19hZGRyYCwgd2hpY2ggaXMgYSAzMi1ieXRlIGFycmF5IChgTUFYX0FERFJfTEVOYCkuIFRoaXMgZW50aXJlIDMyLWJ5dGUgYXJyYXkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfYWRkcl9pbml0KClgIHVzaW5nIGBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKWAuIEJlY2F1c2UgdGhlIHBhZGRpbmcgYnl0ZXMgKGJ5dGVzIDYgYW5kIDcpIGFyZSBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLCByZWFkaW5nIHRoZW0gZG9lcyBub3QgY29uc3RpdHV0ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gd291bGQgbm90IGRldGVjdCBhbnkgaXNzdWUgaGVyZS5cblxuRnVydGhlcm1vcmUsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgYWxsb2NhdGlvbiBpcyAzMiBieXRlcywgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGVpdGhlci4gVGhlIHBhdGNoIHByaW1hcmlseSByZXNvbHZlcyBhIGxvZ2ljYWwgb3V0LW9mLWJvdW5kcyByZWFkLCBwb3RlbnRpYWwgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcywgYW5kIFNwYXJzZSB3YXJuaW5ncyByZWxhdGVkIHRvIGVuZGlhbm5lc3MgdHlwZXMgKHBhc3NpbmcgYF9fbGUzMmAgdG8gYGlvd3JpdGUzMmAgd2hpY2ggZXhwZWN0cyBgdTMyYCkuIFxuXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCB0byB1c2UgYGdldF91bmFsaWduZWRfbGUzMmAgYW5kIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGluc3RlYWQgb2YgZGlyZWN0bHkgY2FzdGluZyBgZGV2LVx1MDAzZWRldl9hZGRyYCB0byBgdTMyICpgIGFuZCBkZXJlZmVyZW5jaW5nIGl0LiBUaGUgb2xkIGNvZGUgcmVhZCA0IGJ5dGVzIGZyb20gYGRldi1cdTAwM2VkZXZfYWRkciAmIzQzOyA0YCAoYnl0ZXMgNCwgNSwgNiwgYW5kIDcpLCB3aGljaCBsb2dpY2FsbHkgZXhjZWVkcyB0aGUgNi1ieXRlIE1BQyBhZGRyZXNzIGxlbmd0aC4gXG5cbkhvd2V2ZXIsIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHBvaW50cyB0byBgaGEtXHUwMDNlYWRkcmAgd2l0aGluIGEgYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAsIHdoaWNoIGlzIGEgMzItYnl0ZSBhcnJheSAoYE1BWF9BRERSX0xFTmApLiBUaGlzIGVudGlyZSAzMi1ieXRlIGFycmF5IGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBpbiBgZGV2X2FkZHJfaW5pdCgpYCB1c2luZyBgbWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSlgLiBCZWNhdXNlIHRoZSBwYWRkaW5nIGJ5dGVzIChieXRlcyA2IGFuZCA3KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdG8gemVybywgcmVhZGluZyB0aGVtIGRvZXMgbm90IGNvbnN0aXR1dGUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYW55IGlzc3VlIGhlcmUuXG5cbkZ1cnRoZXJtb3JlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGFsbG9jYXRpb24gaXMgMzIgYnl0ZXMsIEtBU0FOIGRvZXMgbm90IGRldGVjdCB0aGlzIGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBlaXRoZXIuIFRoZSBwYXRjaCBwcmltYXJpbHkgcmVzb2x2ZXMgYSBsb2dpY2FsIG91dC1vZi1ib3VuZHMgcmVhZCwgcG90ZW50aWFsIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMsIGFuZCBTcGFyc2Ugd2FybmluZ3MgcmVsYXRlZCB0byBlbmRpYW5uZXNzIHR5cGVzIChwYXNzaW5nIGBfX2xlMzJgIHRvIGBpb3dyaXRlMzJgIHdoaWNoIGV4cGVjdHMgYHUzMmApLiBcblxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzc6MjUuNzEwNTI1MzQ3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2NDAzODg4NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIjgxMzlUT09cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTM5X3NldF9tYWNfYWRkcmVzc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCB0byB1c2UgYGdldF91bmFsaWduZWRfbGUzMmAgYW5kIGBnZXRfdW5hbGlnbmVkX2xlMTZgIGluc3RlYWQgb2YgZGlyZWN0bHkgY2FzdGluZyBgZGV2LVxcdTAwM2VkZXZfYWRkcmAgdG8gYHUzMiAqYCBhbmQgZGVyZWZlcmVuY2luZyBpdC4gVGhlIG9sZCBjb2RlIHJlYWQgNCBieXRlcyBmcm9tIGBkZXYtXFx1MDAzZWRldl9hZGRyICsgNGAgKGJ5dGVzIDQsIDUsIDYsIGFuZCA3KSwgd2hpY2ggbG9naWNhbGx5IGV4Y2VlZHMgdGhlIDYtYnl0ZSBNQUMgYWRkcmVzcyBsZW5ndGguIFxcblxcbkhvd2V2ZXIsIGBkZXYtXFx1MDAzZWRldl9hZGRyYCBwb2ludHMgdG8gYGhhLVxcdTAwM2VhZGRyYCB3aXRoaW4gYSBgc3RydWN0IG5ldGRldl9od19hZGRyYCwgd2hpY2ggaXMgYSAzMi1ieXRlIGFycmF5IChgTUFYX0FERFJfTEVOYCkuIFRoaXMgZW50aXJlIDMyLWJ5dGUgYXJyYXkgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGluIGBkZXZfYWRkcl9pbml0KClgIHVzaW5nIGBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKWAuIEJlY2F1c2UgdGhlIHBhZGRpbmcgYnl0ZXMgKGJ5dGVzIDYgYW5kIDcpIGFyZSBmdWxseSBpbml0aWFsaXplZCB0byB6ZXJvLCByZWFkaW5nIHRoZW0gZG9lcyBub3QgY29uc3RpdHV0ZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIFRoZXJlZm9yZSwgS01TQU4gd291bGQgbm90IGRldGVjdCBhbnkgaXNzdWUgaGVyZS5cXG5cXG5GdXJ0aGVybW9yZSwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBhbGxvY2F0aW9uIGlzIDMyIGJ5dGVzLCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgdGhpcyBhcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgZWl0aGVyLiBUaGUgcGF0Y2ggcHJpbWFyaWx5IHJlc29sdmVzIGEgbG9naWNhbCBvdXQtb2YtYm91bmRzIHJlYWQsIHBvdGVudGlhbCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzLCBhbmQgU3BhcnNlIHdhcm5pbmdzIHJlbGF0ZWQgdG8gZW5kaWFubmVzcyB0eXBlcyAocGFzc2luZyBgX19sZTMyYCB0byBgaW93cml0ZTMyYCB3aGljaCBleHBlY3RzIGB1MzJgKS4gXFxuXFxuU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzc6MjUuNzEwNTMxMTE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY5MzgxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmQ1ZGQzMjNhN2YzNjBkMWE2OTAxY2FjMDg1MWIzMzQ3NTRmNjRhOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxMzozNzoyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jXFxuaW5kZXggODI0MWJjZjc2NjY0NC4uMTczNjU5OWQ3MjQ0MCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jXFxuQEAgLTExMiw2ICsxMTIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZ2ZwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl92bGFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vaXJxLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4gXFxuIC8qIERlZmF1bHQgTWVzc2FnZSBsZXZlbCAqL1xcbiAjZGVmaW5lIFJUTDgxMzlfREVGX01TR19FTkFCTEUgICAoTkVUSUZfTVNHX0RSViAgIHwgXFxcXFxcbkBAIC0yMjMwLDggKzIyMzEsOCBAQCBzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnRwLVxcdTAwM2Vsb2NrKTtcXG4gXFxuIFxcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTtcXG4tXFx0UlRMX1czMl9GKE1BQzAgKyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cXHUwMDNlZGV2X2FkZHIgKyAwKSkpO1xcbi1cXHRSVExfVzMyX0YoTUFDMCArIDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVxcdTAwM2VkZXZfYWRkciArIDQpKSk7XFxuK1xcdFJUTF9XMzJfRihNQUMwICsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi1cXHUwMDNlZGV2X2FkZHIpKTtcXG4rXFx0UlRMX1czMl9GKE1BQzAgKyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVxcdTAwM2VkZXZfYWRkciArIDQpKTtcXG4gXFx0UlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTtcXG4gXFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2dHAtXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozNzoyNy4xODA4MTkyMThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NzQ3MTA1NDE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI4MTM5VE9PXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODEzOV9zZXRfbWFjX2FkZHJlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmQ1ZGQzMjNhN2YzNjBkMWE2OTAxY2FjMDg1MWIzMzQ3NTRmNjRhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDEzOjM3OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1xuaW5kZXggODI0MWJjZjc2NjY0NC4uMTczNjU5OWQ3MjQ0MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1xuQEAgLTExMiw2ICsxMTIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2lycS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiBcbiAvKiBEZWZhdWx0IE1lc3NhZ2UgbGV2ZWwgKi9cbiAjZGVmaW5lIFJUTDgxMzlfREVGX01TR19FTkFCTEUgICAoTkVUSUZfTVNHX0RSViAgIHwgXFxcbkBAIC0yMjMwLDggKzIyMzEsOCBAQCBzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNnRwLVx1MDAzZWxvY2spO1xuIFxuIFx0UlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spO1xuLVx0UlRMX1czMl9GKE1BQzAgKyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciArIDApKSk7XG4tXHRSVExfVzMyX0YoTUFDMCArIDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICsgNCkpKTtcbitcdFJUTF9XMzJfRihNQUMwICsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi1cdTAwM2VkZXZfYWRkcikpO1xuK1x0UlRMX1czMl9GKE1BQzAgKyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVx1MDAzZWRldl9hZGRyICsgNCkpO1xuIFx0UlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZ0cC1cdTAwM2Vsb2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM3OjI3LjE4MDgyMDg3OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMjcyNjM3NzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jYC4gVGhlIGNoYW5nZSBpcyBpbiBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLCBhbmQgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIHJlcGxhY2VkIHNvbWUgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgdW5hbGlnbmVkIHBvaW50ZXIgY2FzdHMgd2l0aCBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAuIEdvb2QgcHJhY3RpY2UsIGRlZmluaXRlbHkgYSBzZW5zaWJsZSBtb3ZlIHRvIGltcHJvdmUgcG9ydGFiaWxpdHkgYW5kIGF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvci5cblxuTm93LCBiZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyB0aGlzIGEgZHJpdmVyIHNvbGVseSBmb3IgYSBzcGVjaWZpYyBwaHlzaWNhbCBQQ0llIGNhcmQsIG9yIGlzIGl0IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIGVuY291bnRlcmVkIGluIGEgdmlydHVhbGl6ZWQgc2V0dXA/IFRoZSBSVEw4MTM5IGlzIGEgcHJldHR5IHViaXF1aXRvdXMgbmV0d29yayBjYXJkLCBoaXN0b3JpY2FsbHkgc3BlYWtpbmcuIEFuZCB5ZXAsIGNvbmZpcm1lZCDigJMgUUVNVSBhY3R1YWxseSBoYXMgZXhwbGljaXQgZW11bGF0aW9uIGZvciBpdCB3aXRoIHRoZSBgLWRldmljZSBydGw4MTM5YCBvcHRpb24uIFRoYXQgbWVhbnMgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGEgd2lkZSByYW5nZSBvZiBlbnZpcm9ubWVudHMsIGluY2x1ZGluZyBWTXMsIHNvIHRoaXMgcGF0Y2ggY291bGQgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdC4gVGltZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiB0byBzZWUgaG93IGA4MTM5dG9vLmNgIGZpdHMgaW50byB0aGUga2VybmVsIGJ1aWxkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjczLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzc6NDAuNDUzNDYxMDE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNDg1MTkwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCI4MTM5dG9vLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlPTY9b2JqLSQoQ09ORklHXzgxMzlDUCkgKz0gODEzOWNwLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHXzgxMzlUT08pICs9IDgxMzl0b28ub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGUtOC1yODE2OS15ICs9IHI4MTY5X21haW4ubyByODE2OV9maXJtd2FyZS5vIHI4MTY5X3BoeV9jb25maWcub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozNzo0MC41NTgzMTcyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NTQyMTYzNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBJJ20gbG9va2luZyBhdCBpcyBgQ09ORklHXzgxMzlUT09gLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGlzIGJhY2sgdG8gaXRzIHNvdXJjZSwgdGhlIEtjb25maWcgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHNldHRpbmcgcmVwcmVzZW50cyB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBJJ2xsIG5lZWQgdG8gb3BlbiBhbmQgYW5hbHl6ZSB0aGF0IHNwZWNpZmljIEtjb25maWcgZmlsZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgZXhwZXJ0aXNlIGFsbG93cyBtZSB0byBxdWlja2x5IGFzc2VzcyB0aGUgY29udGV4dCBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24sIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGRldGFpbHMgaXMga2V5IHRvIGludGVycHJldGluZyB3aGF0J3MgYmVlbiBkZWZpbmVkLiBJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgaG93IGA4MTM5VE9PYCBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGF0IGVmZmVjdHMgaXQgaGFzIG9uIHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGJlaGF2aW9yLiBJIGNhbiBsaWtlbHkgcXVpY2tseSBwaW5wb2ludCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpbiBLY29uZmlnIGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MzksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozNzo1Ni4xMDA0ODMyMThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyOTc4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIDgxMzlUT09cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz0yMD1jb25maWcgODEzOUNQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjMyOmNvbmZpZyA4MTM5VE9PXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTMzLVxcdHRyaXN0YXRlIFxcXCJSZWFsVGVrIFJUTC04MTI5LzgxMzAvODEzOSBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNDMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjQ0OmNvbmZpZyA4MTM5VE9PX1BJT1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00NS1cXHRib29sIFxcXCJVc2UgUElPIGluc3RlYWQgb2YgTU1JT1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy01My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6NTQ6Y29uZmlnIDgxMzlUT09fVFVORV9UV0lTVEVSXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHVuY29tbW9uIFJUTC04MTM5IHJldi4gSyAoYXV0b21hdGljIGNoYW5uZWwgZXF1YWxpemF0aW9uKVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy02NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6NjU6Y29uZmlnIDgxMzlUT09fODEyOVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy02Ni1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBvbGRlciBSVEwtODEyOS84MTMwIGJvYXJkc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzc6NTYuMTYyNzkwNTE1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1MzY2MTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBEZXBlbmRlbmNpZXMgZm9yIDgxMzlUT08qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGluaXRpYWwgdGhvdWdodCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYXNzb2NpYXRlZCB3aXRoIGA4MTM5VE9PYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBsaWJyYXJpZXMsIG1vZHVsZXMsIG90aGVyIGNvbXBvbmVudHMsIG9yIGV2ZW4gZXh0ZXJuYWwgc2VydmljZXMgdGhpcyBwYXJ0aWN1bGFyIGVsZW1lbnQgcmVsaWVzIHVwb24uIElzIGl0IGEgY29yZSBpbnRlcm5hbCBtb2R1bGUsIGFuIGV4dGVybmFsIGxpYnJhcnkgaW50ZWdyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgc3BlY2lmaWMgY29udGV4dCBpc24ndCBnaXZlbiwgc28gSSdtIHRoaW5raW5nIGJyb2FkbHkgYWJvdXQgdGhlIHBvc3NpYmxlIGRlcGVuZGVuY3kgdHlwZXMuIEtub3dpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGFic29sdXRlbHkgY3JpdGljYWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gdHJvdWJsZXNob290IGEgYnVnLCBtYWtlIGEgY2hhbmdlLCBvciBhc3Nlc3MgdGhlIGltcGFjdCBvZiBhIHBsYW5uZWQgdXBkYXRlLiBEZXBlbmRpbmcgb24gdGhlIHN5c3RlbSwgSSdtIHRoaW5raW5nIGFib3V0IGhvdyBJJ2QgdHlwaWNhbGx5IGdvIGFib3V0IGludmVzdGlnYXRpbmcgdGhpcy4gUGVyaGFwcyBJJ2xsIHVzZSBhIGRlcGVuZGVuY3kgYW5hbHlzaXMgdG9vbCwgZXhwbG9yZSB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiwgb3Igc3RhcnQgd2l0aCBzb3VyY2UgY29kZSBpbnNwZWN0aW9uIHRvIGRldGVybWluZSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGEgc3RyYXRlZ3kgdG8gc3RhcnQgdHJhY2luZyB0aGVzZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDIsIk91dHB1dFRva2VucyI6NzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODowMC42MTY0NTQwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzgxNDAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgODEzOVRPT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTIwPWNvbmZpZyA4MTM5Q1BcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0zMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6MzI6Y29uZmlnIDgxMzlUT09cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMzMtXFx0dHJpc3RhdGUgXFxcIlJlYWxUZWsgUlRMLTgxMjkvODEzMC84MTM5IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy00My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6NDQ6Y29uZmlnIDgxMzlUT09fUElPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTQ1LVxcdGJvb2wgXFxcIlVzZSBQSU8gaW5zdGVhZCBvZiBNTUlPXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo1NDpjb25maWcgODEzOVRPT19UVU5FX1RXSVNURVJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgdW5jb21tb24gUlRMLTgxMzkgcmV2LiBLIChhdXRvbWF0aWMgY2hhbm5lbCBlcXVhbGl6YXRpb24pXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTY0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo2NTpjb25maWcgODEzOVRPT184MTI5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTY2LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIG9sZGVyIFJUTC04MTI5LzgxMzAgYm9hcmRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODowMC42OTAyODczMjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzIyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDMyOlxcdGNvbmZpZyA4MTM5VE9PXFxuICAzMzpcXHRcXHR0cmlzdGF0ZSBcXFwiUmVhbFRlayBSVEwtODEyOS84MTMwLzgxMzkgUENJIEZhc3QgRXRoZXJuZXQgQWRhcHRlciBzdXBwb3J0XFxcIlxcbiAgMzQ6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDM1OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMzY6XFx0XFx0c2VsZWN0IE1JSVxcbiAgMzc6XFx0XFx0aGVscFxcbiAgMzg6XFx0XFx0ICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgRmFzdCBFdGhlcm5ldCBQQ0kgbmV0d29yayBjYXJkcyBiYXNlZCBvblxcbiAgMzk6XFx0XFx0ICB0aGUgUlRMIDgxMjkvODEzMC84MTM5IGNoaXBzLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhvc2UsIHNheSBZIGhlcmUuXFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAgNDI6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCA4MTM5dG9vLiAgVGhpcyBpcyByZWNvbW1lbmRlZC5cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0Y29uZmlnIDgxMzlUT09fUElPXFxuICA0NTpcXHRcXHRib29sIFxcXCJVc2UgUElPIGluc3RlYWQgb2YgTU1JT1xcXCJcXG4gIDQ2OlxcdFxcdGRlZmF1bHQgeVxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiA4MTM5VE9PIFxcdTAwMjZcXHUwMDI2ICFOT19JT1BPUlRfTUFQXFxuICA0ODpcXHRcXHRoZWxwXFxuICA0OTpcXHRcXHQgIFRoaXMgaW5zdHJ1Y3RzIHRoZSBkcml2ZXIgdG8gdXNlIHByb2dyYW1tZWQgSS9PIHBvcnRzIChQSU8pIGluc3RlYWRcXG4gIDUwOlxcdFxcdCAgb2YgUENJIHNoYXJlZCBtZW1vcnkgKE1NSU8pLiAgVGhpcyBjYW4gcG9zc2libHkgc29sdmUgc29tZSBwcm9ibGVtc1xcbiAgNTE6XFx0XFx0ICBpbiBjYXNlIHlvdXIgbWFpbmJvYXJkIGhhcyBtZW1vcnkgY29uc2lzdGVuY3kgaXNzdWVzLiAgSWYgdW5zdXJlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODowMC42OTA0MjI4NDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0NjU0NDQzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBhIE1pbm9yIE5ldHdvcmsgRHJpdmVyIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIHRvIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgZGVmaW5pdGVseS4gV2UncmUgZml4aW5nIHBvdGVudGlhbCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcywgd2hpY2gsIGxldCdzIGJlIGhvbmVzdCwgY291bGQgbGVhZCB0byBzb21lIG5hc3R5IGNyYXNoZXMgb3IgZXZlbiBqdXN0IHN1YnRseSBpbmNvcnJlY3QgTUFDIGFkZHJlc3NlcyBvbiBjZXJ0YWluIGFyY2hpdGVjdHVyZXMuIFRoZSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyB3aGV0aGVyIHRoaXMgd2FycmFudHMgZnV6emluZyBhdHRlbnRpb24uXG5cbkl0J3MgYSBzdHJhaWdodGZvcndhcmQgZml4LCByZWFsbHkuIFN3YXBwaW5nIG91dCB0aGUgcmF3IGNhc3RzIGZvciBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAuIFByZXR0eSBjbGVhbi4gQnV0ICppcyogaXQgcmVhY2hhYmxlPyBZZXAsIHRocm91Z2ggYG5kb19zZXRfbWFjX2FkZHJlc3NgLiBHb29kLCBnb29kLiBPa2F5LCB3b3J0aCBmdXp6aW5nPyBZZXMsIGl04oCZcyBhIGJ1ZyBmaXggKHVuYWxpZ25lZCBhY2Nlc3MpIGFuZCBpdCBjaGFuZ2VzIGV4ZWN1dGlvbiBmbG93ICh1c2luZyB0aGUgdW5hbGlnbmVkIGFjY2VzcyBoZWxwZXJzIGlzIGRpZmZlcmVudCksIHNvIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLlxuXG5XYWl0IGEgc2Vjb25kLCB0aG91Z2guIExldCdzIHN0ZXAgYmFjay4gVGhlICpjb3JlKiBjaGFuZ2UgaXMganVzdCB0aGF0IHVuYWxpZ25lZCBhY2Nlc3MgZml4LiBSaWdodC4gU28sIGlzIGl0IHdvcnRoIGZ1enppbmc/IFllcyEgQmVjYXVzZSBpdCdzIHN0aWxsIGEgZnVuY3Rpb25hbCBjaGFuZ2U7IGl0J3MgKm1lYW50KiB0byBjaGFuZ2UgdGhlIGRyaXZlcidzIGJlaGF2aW91ciBhbmQgZml4IHNvbWV0aGluZywgc28gZXZlbiBzZWVtaW5nbHkgc2ltcGxlIGNoYW5nZXMgbmVlZCB0byBiZSB0ZXN0ZWQuIExldCdzIG1ha2Ugc3VyZSB3ZSBleGFtaW5lIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgY2FyZWZ1bGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDU4LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM4OjA2LjEzNjk2OTg3NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NzY2MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0bDgxMzlfc2V0X21hY19hZGRyZXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTY0Nj1zdGF0aWMgdm9pZCBydGw4MTM5X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy02NDctI2VuZGlmXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6NjQ4OnN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtNjQ5LXN0YXRpYyBpbnQgcnRsODEzOV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz05MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTM5X25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjctXFx0Lm5kb192YWxpZGF0ZV9hZGRyXFx0PSBldGhfdmFsaWRhdGVfYWRkcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo5Mjg6XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXFx0PSBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjktXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBydGw4MTM5X3N0YXJ0X3htaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz0yMjA5PXN0YXRpYyB2b2lkIHJ0bDgxMzlfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMjE5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjIyMjA6c3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODowNi4yNTE3NDA2NThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI1NjE2ODgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLCB3aGljaCBJIGtub3cgaXMgdGhlIGBuZG9fc2V0X21hY19hZGRyZXNzYCBjYWxsYmFjay4gSXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLCB3aGljaCBpcyBnb29kLiBUaGUga2V5IGNoYW5nZSBoZXJlIGlzIHRoYXQgaXQncyByZXBsYWNpbmcgdW5hbGlnbmVkIHBvaW50ZXIgY2FzdHMgd2l0aCBjYWxscyB0byBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgYXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggaXMgaW1wb3J0YW50LlxuXG5JIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYENPTkZJR184MTM5VE9PYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIHRvIGNvbnNpZGVyOyB5ZXMgaXQgaXMuIFRoZSBmb2N1c2VkIHN5bWJvbCBpcyBkZWZpbml0ZWx5IGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AuXG5cbk5vdywgdGhlIHByb21wdCBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgcGF0Y2ggKm9ubHkqIGludm9sdmVzIGNoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgKmRvbid0KiBhbHRlciBleGVjdXRpb24gZmxvdy4gVGhhdCdzIHRoZSBjcnV4IG9mIGl0LiBEb2VzIHRoaXMgYWN0dWFsbHkgY2hhbmdlIGhvdyB0aGUgY29kZSAqcnVucyo/IE9uIHg4NiwgcHJvYmFibHkgbm90OyB0aG9zZSBjYWxscyBhcmUganVzdCBjYXN0cywgdGhlIHVuYWxpZ25lZCBhY2Nlc3MgaXMgaGFuZGxlZC4gSG93ZXZlciwgb24gYXJjaGl0ZWN0dXJlcyB0aGF0ICpkb24ndCogc3VwcG9ydCB1bmFsaWduZWQgYWNjZXNzLCBpdCBhYnNvbHV0ZWx5IGRvZXM6IGl0J3MgZG9pbmcgYnl0ZS1ieS1ieXRlIHJlYWRzLiBUaGlzIGlzIGFuIGltcG9ydGFudCBkaXN0aW5jdGlvbi5cblxuQnV0IHdhaXQsIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIGEgTUFDIGFkZHJlc3MuIFRoYXQncyA2IGJ5dGVzLiBJdCdzICpwcm9iYWJseSogYWxpZ25lZCB0byBhdCBsZWFzdCAyIGJ5dGVzLCBtYXliZSBldmVuIDQgYnl0ZXMsIGJ1dCBtYXliZSBub3Qgb24gYWxsIGFyY2hpdGVjdHVyZXMuXG5cbkkgbmVlZCB0byByZWNhbGwgdGhhdCBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgYXJlIGlubGluZSBmdW5jdGlvbnMvbWFjcm9zLiBTbyBpdCdzIHN0aWxsIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcywgaW4gZXNzZW5jZSwgYSBidWcgZml4IHRvIGhhbmRsZSB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5TbywgdGhlIGZvY3VzIHN5bWJvbCBpcyBzdGlsbCBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLiBJIHNob3VsZCBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGA4MTM5VE9PYCwgYW5kIG5vdyBJIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQncyBpdC4gWWVzLCBgODEzOVRPT2AgZGVwZW5kcyBvbiBgUENJYCwgYnV0IHRoYXQncyBhIHN0YW5kYXJkIGNvbmZpZywgc28gbm8gd29ycmllcyB0aGVyZS4gSSdtIGdvaW5nIHRvIGFkZCBgODEzOVRPT2AgdG8gdGhlIGZpbmFsIG91dHB1dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3MiwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6MTQuNTA3OTEyNTU4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTU4MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI4MTM5VE9PXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODEzOV9zZXRfbWFjX2FkZHJlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCI4MTM5VE9PXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsODEzOV9zZXRfbWFjX2FkZHJlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB0aGUgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3MgZnVuY3Rpb24gYnkgdXNpbmcgZ2V0X3VuYWxpZ25lZF9sZTMyIGFuZCBnZXRfdW5hbGlnbmVkX2xlMTYuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFmZmVjdHMgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gbWVtb3J5LCBlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzcy4gVGhlIHJ0bDgxMzkgZHJpdmVyIGlzIGZvciBhIGNvbW1vbiBuZXR3b3JrIGNhcmQgdGhhdCBpcyBlbXVsYXRlZCBpbiBRRU1VLCBtYWtpbmcgaXQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6MTQuNjUxODc4MDA0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjc0NjI1MjIzNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODoxNC42NTI0NDAyOTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzI3NDYxOTU0OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgaW5zdGVhZCBvZiBkaXJlY3RseSBjYXN0aW5nIGBkZXYtXFx1MDAzZWRldl9hZGRyYCB0byBgdTMyICpgIGFuZCBkZXJlZmVyZW5jaW5nIGl0LiBUaGUgb2xkIGNvZGUgcmVhZCA0IGJ5dGVzIGZyb20gYGRldi1cXHUwMDNlZGV2X2FkZHIgKyA0YCAoYnl0ZXMgNCwgNSwgNiwgYW5kIDcpLCB3aGljaCBsb2dpY2FsbHkgZXhjZWVkcyB0aGUgNi1ieXRlIE1BQyBhZGRyZXNzIGxlbmd0aC4gXFxuXFxuSG93ZXZlciwgYGRldi1cXHUwMDNlZGV2X2FkZHJgIHBvaW50cyB0byBgaGEtXFx1MDAzZWFkZHJgIHdpdGhpbiBhIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgLCB3aGljaCBpcyBhIDMyLWJ5dGUgYXJyYXkgKGBNQVhfQUREUl9MRU5gKS4gVGhpcyBlbnRpcmUgMzItYnl0ZSBhcnJheSBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYGRldl9hZGRyX2luaXQoKWAgdXNpbmcgYG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpYC4gQmVjYXVzZSB0aGUgcGFkZGluZyBieXRlcyAoYnl0ZXMgNiBhbmQgNykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHRvIHplcm8sIHJlYWRpbmcgdGhlbSBkb2VzIG5vdCBjb25zdGl0dXRlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGFueSBpc3N1ZSBoZXJlLlxcblxcbkZ1cnRoZXJtb3JlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGFsbG9jYXRpb24gaXMgMzIgYnl0ZXMsIEtBU0FOIGRvZXMgbm90IGRldGVjdCB0aGlzIGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBlaXRoZXIuIFRoZSBwYXRjaCBwcmltYXJpbHkgcmVzb2x2ZXMgYSBsb2dpY2FsIG91dC1vZi1ib3VuZHMgcmVhZCwgcG90ZW50aWFsIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMsIGFuZCBTcGFyc2Ugd2FybmluZ3MgcmVsYXRlZCB0byBlbmRpYW5uZXNzIHR5cGVzIChwYXNzaW5nIGBfX2xlMzJgIHRvIGBpb3dyaXRlMzJgIHdoaWNoIGV4cGVjdHMgYHUzMmApLiBcXG5cXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkNWRkMzIzYTdmMzYwZDFhNjkwMWNhYzA4NTFiMzM0NzU0ZjY0YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxMzozNzoyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNcbmluZGV4IDgyNDFiY2Y3NjY2NDQuLjE3MzY1OTlkNzI0NDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNcbkBAIC0xMTIsNiArMTEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX3ZsYW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9pcnEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gXG4gLyogRGVmYXVsdCBNZXNzYWdlIGxldmVsICovXG4gI2RlZmluZSBSVEw4MTM5X0RFRl9NU0dfRU5BQkxFICAgKE5FVElGX01TR19EUlYgICB8IFxcXG5AQCAtMjIzMCw4ICsyMjMxLDggQEAgc3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZ0cC1cdTAwM2Vsb2NrKTtcbiBcbiBcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTtcbi1cdFJUTF9XMzJfRihNQUMwICsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtXHUwMDNlZGV2X2FkZHIgKyAwKSkpO1xuLVx0UlRMX1czMl9GKE1BQzAgKyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciArIDQpKSk7XG4rXHRSVExfVzMyX0YoTUFDMCArIDAsIGdldF91bmFsaWduZWRfbGUzMihkZXYtXHUwMDNlZGV2X2FkZHIpKTtcbitcdFJUTF9XMzJfRihNQUMwICsgNCwgZ2V0X3VuYWxpZ25lZF9sZTE2KGRldi1cdTAwM2VkZXZfYWRkciArIDQpKTtcbiBcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7XG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2dHAtXHUwMDNlbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODoxNC42NTI0NDEyMDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY3MzUxMjUwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBSZWFsdGVrIEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgZnVuY3Rpb24gd2l0aGluIHRoZSBgODEzOXRvby5jYCBkcml2ZXIsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrYCBkaXJlY3RvcnkuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyB3cml0dGVuIHRvIHRoZSBSZWFsdGVrIDgxMzkncyBoYXJkd2FyZSByZWdpc3RlcnMuXG5cbkluaXRpYWxseSwgdGhlIGNvZGUgd2FzIG1ha2luZyB1bmFsaWduZWQgYWNjZXNzZXMgd2l0aCB0aGVzZSBsaW5lczpcblxuYGBgY1xuXHRSVExfVzMyX0YoTUFDMCArIDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICsgMCkpKTtcblx0UlRMX1czMl9GKE1BQzAgKyA0LCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciArIDQpKSk7XG5gYGBcblxuQW5kIG5vdyBpdCBpcyB0aGlzOlxuXG5gYGBjXG5cdFJUTF9XMzJfRihNQUMwICsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi1cdTAwM2VkZXZfYWRkcikpO1xuXHRSVExfVzMyX0YoTUFDMCArIDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtXHUwMDNlZGV2X2FkZHIgKyA0KSk7XG5gYGBcblxuVGhlIGtleSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlLCB3aGVuIHJlYWRpbmcgYXQgdGhlIG9mZnNldCBgZGV2LVx1MDAzZWRldl9hZGRyICsgNGAsIHdhcyBhdHRlbXB0aW5nIHRvIHJlYWQgYSA0LWJ5dGUgdmFsdWUgKGB1MzJgKS4gSG93ZXZlciwgYSBzdGFuZGFyZCBNQUMgYWRkcmVzcyBpcyBvbmx5IDYgYnl0ZXMgbG9uZy4gVGhpcyBtZWFucyB0aGUgY29kZSB3YXMgcG90ZW50aWFsbHkgcmVhZGluZyBiZXlvbmQgdGhlIGJvdW5kcyBvZiB0aGUgTUFDIGFkZHJlc3MgYnVmZmVyLlxuXG5TcGVjaWZpY2FsbHksIGlmIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIGEgNi1ieXRlIGFycmF5LCB0aGVuIGBkZXYtXHUwMDNlZGV2X2FkZHIgKyA0YCBwb2ludHMgdG8gdGhlIGxhc3QgdHdvIGJ5dGVzLiBSZWFkaW5nIGEgYHUzMmAgZnJvbSB0aGF0IGxvY2F0aW9uIHdvdWxkIGhhdmUgcmVhZCBieXRlcyA0LCA1LCA2LCBhbmQgNywgd2hpY2ggbWVhbnMgdGhhdCBieXRlcyA2IGFuZCA3IHdlcmUgb3V0IG9mIGJvdW5kcy4gVGhpcyBpcyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIHZ1bG5lcmFiaWxpdHkuIEtBU0FOICpzaG91bGQqIGJlIGFibGUgdG8gY2F0Y2ggdGhpcyBzb3J0IG9mIHRoaW5nLCBlc3BlY2lhbGx5IGlmIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIHBsYWNlZCBhdCB0aGUgZW5kIG9mIGFuIGFsbG9jYXRpb24uXG5cblRoaW5raW5nIHRoaXMgdGhyb3VnaCwgYGRldi1cdTAwM2VkZXZfYWRkcmAgaW4gYSBgbmV0X2RldmljZWAgc3RydWN0IGlzICp1c3VhbGx5KiBhIHBvaW50ZXIgdG8gYSBidWZmZXIuIEhvd2V2ZXIsIG1vZGVybiBrZXJuZWxzIG9mdGVuIGFsbG9jYXRlIHNwYWNlIGlubGluZSBhcyBhbiBhcnJheSwgbGlrZWx5IGBNQVhfQUREUl9MRU5gIGJ5dGVzIChvZnRlbiAzMikuIFRoaXMgaXMgY3JpdGljYWwuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCBuZXRfZGV2aWNlYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGJ1ZmZlcidzIHNpemUuIFRoYXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgcHJvYmxlbS5cblxuVGhlIHBhdGNoIGlzIGZpeGluZyBhIGNsYXNzaWMgb3V0LW9mLWJvdW5kcyByZWFkIGVycm9yLiBUaGUgY2hhbmdlIHRvIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCBjb3JyZWN0cyB0aGUgb3ZlcnJlYWQ6IDQgYnl0ZXMgLVx1MDAzZSAyIGJ5dGVzLiBUaGlzIG1ha2VzIHRoZSBtZW1vcnkgYWNjZXNzIHdpdGhpbiB0aGUgYm91bmRzIG9mIHdoYXQgaXQncyBzdXBwb3NlZCB0byBhY2Nlc3MsIHdoaWNoIGlzIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MuIEdvb2QgY2F0Y2gsIGFuZCB0aGUgZml4IGxvb2tzIHNvdW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjcwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6MjMuMzI1OTU3ODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTM4ODg0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnNpZ25lZCBjaGFyLipkZXZfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOTYtXFx0LyogSW50ZXJmYWNlIGFkZHJlc3MgaW5mbyB1c2VkIGluIGV0aF90eXBlX3RyYW5zKCkgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzOTc6XFx0Y29uc3QgdW5zaWduZWQgY2hhclxcdCpkZXZfYWRkcjtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzOTgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMzMTA9c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvIHtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMzMTEtXFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9pbmZvIGluZm87IC8qIG11c3QgYmUgZmlyc3QgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMzMTI6XFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGV2X2FkZHI7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMzEzLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM4OjIzLjQ0NTM1MDkzMloiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzExODM2MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGRldl9hZGRyYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIGBkZXZfYWRkcmAgaXMgY2xlYXJseSBhIHBvaW50ZXIuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCAqd2hlcmUqIGRvZXMgdGhpcyBwb2ludGVyIGFjdHVhbGx5IHBvaW50PyBJcyBpdCBqdXN0IGEgY29udmVuaWVudCB3cmFwcGVyIGZvciBzb21ldGhpbmcgYWxyZWFkeSB3aXRoaW4gdGhlIGBkZXZgIHN0cnVjdHVyZSwgbGlrZSBwZXJoYXBzIGBkZXYtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZWAsIG9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIHNpZ25pZmljYW50PyBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRoYXQgaXQncyBwcm9iYWJseSAqbm90KiBqdXN0IGEgZGlyZWN0IGxpbmsgdG8gYW4gZXhpc3RpbmcgbWVtYmVyLiBJdCdzIG1vcmUgbGlrZWx5IGVpdGhlciBwb2ludGluZyB0byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgb3IsIG1vcmUgY29udGV4dHVhbGx5LCBzb21lIHJlZ2lvbiAqaW5zaWRlKiB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdHVyZSBpdHNlbGYuXG5cblRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBpcyB0byBwaW5wb2ludCB0aGUgYWxsb2NhdGlvbiBvZiBgZGV2X2FkZHJgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBsaWUuIEtub3dpbmcgd2hlcmUgaXQncyBhbGxvY2F0ZWQgd2lsbCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgYWJvdXQgaXRzIGV4cGVjdGVkIGxpZmV0aW1lLCBzY29wZSwgYW5kIGhvdyBJIHNob3VsZCBiZSB0cmVhdGluZyB0aGUgbWVtb3J5IGl0IHJlZmVyZW5jZXMuIFRpbWUgdG8gdHJhY2sgZG93biB0aGF0IGFsbG9jYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODoyNy4xNTcxODkxMDJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTQzODAwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkciA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTEwMDIwPWludCBuZXRpZl9wcmVfY2hhbmdlYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwMDI1LVxcdFxcdC5pbmZvLmV4dGFjayA9IGV4dGFjayxcXG5uZXQvY29yZS9kZXYuYzoxMDAyNjpcXHRcXHQuZGV2X2FkZHIgPSBhZGRyLFxcbm5ldC9jb3JlL2Rldi5jLTEwMDI3LVxcdH07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM4OjI3LjI2MjYzMTkyNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4Mzc3NTM1MDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBhbGxvY19uZXRkZXZfbXFzYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbXVsdGktcXVldWUgZGV2aWNlIGFsbG9jYXRpb24gaXMgaGFuZGxlZC4gVGltZSB0byBkaWcgaW50byB0aGUgYGFsbG9jX25ldGRldl9tcXNgIGZ1bmN0aW9uIHdpdGhpbiBgbmV0L2NvcmUvZGV2LmNgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLCBkZXRlcm1pbmluZyB0aGUgZGV2aWNlJ3MgY2FwYWJpbGl0aWVzIGFuZCBhbGxvY2F0aW5nIHRoZSBuZWNlc3NhcnkgcmVzb3VyY2VzIGZvciBtdWx0aXBsZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBxdWV1ZXMuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGhvdyBpdCBjYWxjdWxhdGVzIHF1ZXVlIG51bWJlcnMgYmFzZWQgb24gTklDIGNhcGFiaWxpdGllcywgYW5kIGhvdyBpdCBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24gZnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IHNldHMgdXAgdGhlIGBuZXRfZGV2aWNlYCBzdHJ1Y3QgYW5kIGluaXRpYWxpemVzIHRoZSByZWxldmFudCBtZW1iZXJzIHRvIGhhbmRsZSB0aGUgbXVsdGktcXVldWUgZnVuY3Rpb25hbGl0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBob3cgaXQgbWFuYWdlcyB0aGUgaXJxIGFsbG9jYXRpb25zIGFuZCBiaW5kaW5nIHRvIHRoZSBxdWV1ZXMuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zIGFuZCB3aGVyZSBJJ2xsIGZpbmQgY2x1ZXMgdG8gYW55IHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gcXVldWUgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdywgcGFydGljdWxhcmx5IHRoZSBlcnJvciBoYW5kbGluZyBhbmQgcG90ZW50aWFsIGZhbGxiYWNrIG1lY2hhbmlzbXMgaWYgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgcXVldWVzIGNhbm5vdCBiZSBhbGxvY2F0ZWQuIFJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEzMCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM4OjM1LjY0MDE3MDcwOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzODU3MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NTI2PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbmV0ZGV2X3htaXRfbG9ja19rZXlbQVJSQVlfU0laRShuZXRkZXZfbG9ja190eXBlKV07XFxubmV0L2NvcmUvZGV2LmM6NTI3OnN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbmV0ZGV2X2FkZHJfbG9ja19rZXlbQVJSQVlfU0laRShuZXRkZXZfbG9ja190eXBlKV07XFxubmV0L2NvcmUvZGV2LmMtNTI4LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfc2V0X2FkZHJfbG9ja2RlcF9jbGFzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTU2LVxcdGxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKFxcdTAwMjZkZXYtXFx1MDAzZWFkZHJfbGlzdF9sb2NrLFxcbm5ldC9jb3JlL2Rldi5jOjU1NzpcXHRcXHRcXHRcXHQgICBcXHUwMDI2bmV0ZGV2X2FkZHJfbG9ja19rZXlbaV0sXFxubmV0L2NvcmUvZGV2LmMtNTU4LVxcdFxcdFxcdFxcdCAgIG5ldGRldl9sb2NrX25hbWVbaV0pO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIxNj1pbnQgbmV0ZGV2X2dldF9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY2hhciAqbmFtZSwgaW50IGlmaW5kZXgpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMjM2LVxcbm5ldC9jb3JlL2Rldi5jOjEyMzc6c3RhdGljIGJvb2wgZGV2X2FkZHJfY21wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHR5cGUsXFxubmV0L2NvcmUvZGV2LmMtMTIzOC1cXHRcXHRcXHQgY29uc3QgY2hhciAqaGEpXFxubmV0L2NvcmUvZGV2LmMtMTIzOS17XFxubmV0L2NvcmUvZGV2LmM6MTI0MDpcXHRyZXR1cm4gZGV2LVxcdTAwM2V0eXBlID09IHR5cGUgXFx1MDAyNlxcdTAwMjYgIW1lbWNtcChkZXYtXFx1MDAzZWRldl9hZGRyLCBoYSwgZGV2LVxcdTAwM2VhZGRyX2xlbik7XFxubmV0L2NvcmUvZGV2LmMtMTI0MS19XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMjU3PXN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0Ynlod2FkZHJfcmN1KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyNjItXFx0Zm9yX2VhY2hfbmV0ZGV2X3JjdShuZXQsIGRldilcXG5uZXQvY29yZS9kZXYuYzoxMjYzOlxcdFxcdGlmIChkZXZfYWRkcl9jbXAoZGV2LCB0eXBlLCBoYSkpXFxubmV0L2NvcmUvZGV2LmMtMTI2NC1cXHRcXHRcXHRyZXR1cm4gZGV2O1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTI4Mj1zdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldGJ5aHdhZGRyKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgc2hvcnQgdHlwZSxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyODgtXFx0Zm9yX2VhY2hfbmV0ZGV2KG5ldCwgZGV2KVxcbm5ldC9jb3JlL2Rldi5jOjEyODk6XFx0XFx0aWYgKGRldl9hZGRyX2NtcChkZXYsIHR5cGUsIGhhKSlcXG5uZXQvY29yZS9kZXYuYy0xMjkwLVxcdFxcdFxcdHJldHVybiBkZXY7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xNjg5PXN0YXRpYyBpbnQgX19kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xNjk0LVxcdEFTU0VSVF9SVE5MKCk7XFxubmV0L2NvcmUvZGV2LmM6MTY5NTpcXHRkZXZfYWRkcl9jaGVjayhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTE2OTYtXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xNzMzLVxcdFxcdGRldl9hY3RpdmF0ZShkZXYpO1xcbm5ldC9jb3JlL2Rldi5jOjE3MzQ6XFx0XFx0YWRkX2RldmljZV9yYW5kb21uZXNzKGRldi1cXHUwMDNlZGV2X2FkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldi5jLTE3MzUtXFx0fVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTUwNj11MzIgYnBmX3Byb2dfcnVuX2dlbmVyaWNfeGRwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZHBfYnVmZiAqeGRwLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTU0MS1cXHRldGggPSAoc3RydWN0IGV0aGhkciAqKXhkcC1cXHUwMDNlZGF0YTtcXG5uZXQvY29yZS9kZXYuYzo1NTQyOlxcdG9yaWdfaG9zdCA9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cXHUwMDNlaF9kZXN0LCBza2ItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpO1xcbm5ldC9jb3JlL2Rldi5jLTU1NDMtXFx0b3JpZ19iY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyXzY0Yml0cyhldGgtXFx1MDAzZWhfZGVzdCk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy01NTgyLVxcdCAgICAob3JpZ19ob3N0ICE9IGV0aGVyX2FkZHJfZXF1YWxfNjRiaXRzKGV0aC1cXHUwMDNlaF9kZXN0LFxcbm5ldC9jb3JlL2Rldi5jOjU1ODM6XFx0XFx0XFx0XFx0XFx0XFx0ICBza2ItXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIpKSB8fFxcbm5ldC9jb3JlL2Rldi5jLTU1ODQtXFx0ICAgIChvcmlnX2JjYXN0ICE9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyXzY0Yml0cyhldGgtXFx1MDAzZWhfZGVzdCkpKSB7XFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDAyMD1pbnQgbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFkZHIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDAyNS1cXHRcXHQuaW5mby5leHRhY2sgPSBleHRhY2ssXFxubmV0L2NvcmUvZGV2LmM6MTAwMjY6XFx0XFx0LmRldl9hZGRyID0gYWRkcixcXG5uZXQvY29yZS9kZXYuYy0xMDAyNy1cXHR9O1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTAwMzU9aW50IG5ldGlmX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc3MsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDA0OS1cXHRcXHRyZXR1cm4gZXJyO1xcbm5ldC9jb3JlL2Rldi5jOjEwMDUwOlxcdGlmIChtZW1jbXAoZGV2LVxcdTAwM2VkZXZfYWRkciwgc3MtXFx1MDAzZV9fZGF0YSwgZGV2LVxcdTAwM2VhZGRyX2xlbikpIHtcXG5uZXQvY29yZS9kZXYuYy0xMDA1MS1cXHRcXHRlcnIgPSBvcHMtXFx1MDAzZW5kb19zZXRfbWFjX2FkZHJlc3MoZGV2LCBzcyk7XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDA1Ni1cXHRjYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0NIQU5HRUFERFIsIGRldik7XFxubmV0L2NvcmUvZGV2LmM6MTAwNTc6XFx0YWRkX2RldmljZV9yYW5kb21uZXNzKGRldi1cXHUwMDNlZGV2X2FkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldi5jLTEwMDU4LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTAwNjAtXFxubmV0L2NvcmUvZGV2LmM6MTAwNjE6REVDTEFSRV9SV1NFTShkZXZfYWRkcl9zZW0pO1xcbm5ldC9jb3JlL2Rldi5jLTEwMDYyLVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTAwNjQ9aW50IG5ldGlmX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzdHJ1Y3QgbmV0ICpuZXQsIGNoYXIgKmRldl9uYW1lKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTAwNjktXFxubmV0L2NvcmUvZGV2LmM6MTAwNzA6XFx0ZG93bl9yZWFkKFxcdTAwMjZkZXZfYWRkcl9zZW0pO1xcbm5ldC9jb3JlL2Rldi5jLTEwMDcxLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwMDgwLVxcdGVsc2VcXG5uZXQvY29yZS9kZXYuYzoxMDA4MTpcXHRcXHRtZW1jcHkoc2EtXFx1MDAzZXNhX2RhdGEsIGRldi1cXHUwMDNlZGV2X2FkZHIsXFxubmV0L2NvcmUvZGV2LmMtMTAwODItXFx0XFx0ICAgICAgIG1pbl90KHNpemVfdCwgc2l6ZSwgZGV2LVxcdTAwM2VhZGRyX2xlbikpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTAwODYtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxubmV0L2NvcmUvZGV2LmM6MTAwODc6XFx0dXBfcmVhZChcXHUwMDI2ZGV2X2FkZHJfc2VtKTtcXG5uZXQvY29yZS9kZXYuYy0xMDA4OC1cXHRyZXR1cm4gcmV0O1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTEzODQ9aW50IHJlZ2lzdGVyX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTE1MjktXFxubmV0L2NvcmUvZGV2LmM6MTE1MzA6XFx0YWRkX2RldmljZV9yYW5kb21uZXNzKGRldi1cXHUwMDNlZGV2X2FkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldi5jLTExNTMxLVxcbm5ldC9jb3JlL2Rldi5jLTExNTMyLVxcdC8qIElmIHRoZSBkZXZpY2UgaGFzIHBlcm1hbmVudCBkZXZpY2UgYWRkcmVzcywgZHJpdmVyIHNob3VsZFxcbm5ldC9jb3JlL2Rldi5jOjExNTMzOlxcdCAqIHNldCBkZXZfYWRkciBhbmQgYWxzbyBhZGRyX2Fzc2lnbl90eXBlIHNob3VsZCBiZSBzZXQgdG9cXG5uZXQvY29yZS9kZXYuYy0xMTUzNC1cXHQgKiBORVRfQUREUl9QRVJNIChkZWZhdWx0IHZhbHVlKS5cXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTExNTM2LVxcdGlmIChkZXYtXFx1MDAzZWFkZHJfYXNzaWduX3R5cGUgPT0gTkVUX0FERFJfUEVSTSlcXG5uZXQvY29yZS9kZXYuYzoxMTUzNzpcXHRcXHRtZW1jcHkoZGV2LVxcdTAwM2VwZXJtX2FkZHIsIGRldi1cXHUwMDNlZGV2X2FkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbm5ldC9jb3JlL2Rldi5jLTExNTM4LVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTIwOTQ9c3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldl9tcXMoaW50IHNpemVvZl9wcml2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTIxMzMtXFxubmV0L2NvcmUvZGV2LmM6MTIxMzQ6XFx0aWYgKGRldl9hZGRyX2luaXQoZGV2KSlcXG5uZXQvY29yZS9kZXYuYy0xMjEzNS1cXHRcXHRnb3RvIGZyZWVfcGNwdTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEyMjU5PXZvaWQgZnJlZV9uZXRkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEyMjgzLVxcdC8qIEZsdXNoIGRldmljZSBhZGRyZXNzZXMgKi9cXG5uZXQvY29yZS9kZXYuYzoxMjI4NDpcXHRkZXZfYWRkcl9mbHVzaChkZXYpO1xcbm5ldC9jb3JlL2Rldi5jLTEyMjg1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODozNS43MDg1NjIwMDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTg1NjcwNzI3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gZGV2X2FkZHJfaW5pdCoqXG5cbk9rYXksIHNvIGBkZXZfYWRkcl9pbml0YCBpcyB1cC4gTGV0J3MgZ2V0IHJpZ2h0IGRvd24gdG8gaXQuIE15IHRhc2sgaXMgdG8gZmlndXJlIG91dCBleGFjdGx5IGhvdyB0aGUgYGRldl9hZGRyYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB2YWx1ZXMgb3IgcHJvY2Vzc2VzIGl0IGludm9sdmVzIGFuZCB3aGF0IGVmZmVjdCB0aGlzIGluaXRpYWxpemF0aW9uIGhhcyBvbiB0aGUgc3lzdGVtLiBUaW1lIHRvIGdvIGxpbmUtYnktbGluZS4gTGV0J3Mgc2VlIGhvdyB0aGlzIHRoaW5nIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjIzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6NDUuNTY1MjcyNjM4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzkyMjMzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkcl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02NjE9dm9pZCBkZXZfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NzAtLyoqXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2NzE6ICpcXHRkZXZfYWRkcl9pbml0IC0gSW5pdCBkZXZpY2UgYWRkcmVzcyBsaXN0XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NzItICpcXHRAZGV2OiBkZXZpY2VcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjc4LSAqL1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njc5OmludCBkZXZfYWRkcl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02ODAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozODo0NS42NDkxOTkyOTdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MTY5NzIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGluaXRpYWwgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBgZGV2X2FkZHJfaW5pdGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBteSBtaW5kIGlzOiBcIkxldCdzIHJlYWQgYGRldl9hZGRyX2luaXRgLlwiIFNpbXBsZSwgZGlyZWN0LCBhbmQgcHJhZ21hdGljLiBBcyBhbiBleHBlcnQsIEknbSBhbHJlYWR5IGZvcm11bGF0aW5nIGh5cG90aGVzZXMgYWJvdXQgd2hhdCB0aGlzIGZ1bmN0aW9uICptaWdodCogYmUgZG9pbmcuIEJhc2VkIG9uIHRoZSBuYW1lLCBJJ20gZXhwZWN0aW5nIHNvbWV0aGluZyByZWxhdGVkIHRvIGRldmljZSBhZGRyZXNzIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBzeXN0ZW0gY29uZmlndXJhdGlvbi4gSSdtIGxpa2VseSBpbnRlcmVzdGVkIGluIGhvdyB0aGUgYWRkcmVzc2VzIGFyZSBzZXQsIGlmIHRoZXkgYXJlIGRldGVybWluZWQgc3RhdGljYWxseSBvciBkeW5hbWljYWxseSwgaG93IGNvbmZsaWN0cyBhcmUgaGFuZGxlZCwgYW5kIHdoYXQgZXJyb3IgY2hlY2tpbmcgaXMgaW4gcGxhY2UuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgaWYgbXkgYXNzdW1wdGlvbnMgaG9sZCB0cnVlIGFuZCBzdGFydCB0byBidWlsZCBhbiBtZW50YWwgbWFwIG9mIGhvdyB0aGlzIHBpZWNlcyBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTcwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6NDkuMDMwODk5MzQyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MzE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY3MDpcXHQvKipcXG4gNjcxOlxcdCAqXFx0ZGV2X2FkZHJfaW5pdCAtIEluaXQgZGV2aWNlIGFkZHJlc3MgbGlzdFxcbiA2NzI6XFx0ICpcXHRAZGV2OiBkZXZpY2VcXG4gNjczOlxcdCAqXFxuIDY3NDpcXHQgKlxcdEluaXQgZGV2aWNlIGFkZHJlc3MgbGlzdCBhbmQgY3JlYXRlIHRoZSBmaXJzdCBlbGVtZW50LFxcbiA2NzU6XFx0ICpcXHR1c2VkIGJ5IC1cXHUwMDNlZGV2X2FkZHIuXFxuIDY3NjpcXHQgKlxcbiA2Nzc6XFx0ICpcXHRUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcnRubF9tdXRleC5cXG4gNjc4OlxcdCAqL1xcbiA2Nzk6XFx0aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNjgwOlxcdHtcXG4gNjgxOlxcdFxcdHVuc2lnbmVkIGNoYXIgYWRkcltNQVhfQUREUl9MRU5dO1xcbiA2ODI6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4gNjgzOlxcdFxcdGludCBlcnI7XFxuIDY4NDpcXHRcXG4gNjg1OlxcdFxcdC8qIHJ0bmxfbXV0ZXggbXVzdCBiZSBoZWxkIGhlcmUgKi9cXG4gNjg2OlxcdFxcbiA2ODc6XFx0XFx0X19od19hZGRyX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzKTtcXG4gNjg4OlxcdFxcdG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpO1xcbiA2ODk6XFx0XFx0ZXJyID0gX19od19hZGRyX2FkZChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMsIGFkZHIsIHNpemVvZihhZGRyKSxcXG4gNjkwOlxcdFxcdFxcdFxcdCAgICBORVRERVZfSFdfQUREUl9UX0xBTik7XFxuIDY5MTpcXHRcXHRpZiAoIWVycikge1xcbiA2OTI6XFx0XFx0XFx0LypcXG4gNjkzOlxcdFxcdFxcdCAqIEdldCB0aGUgZmlyc3QgKHByZXZpb3VzbHkgY3JlYXRlZCkgYWRkcmVzcyBmcm9tIHRoZSBsaXN0XFxuIDY5NDpcXHRcXHRcXHQgKiBhbmQgc2V0IGRldl9hZGRyIHBvaW50ZXIgdG8gdGhpcyBsb2NhdGlvbi5cXG4gNjk1OlxcdFxcdFxcdCAqL1xcbiA2OTY6XFx0XFx0XFx0aGEgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycy5saXN0LFxcbiA2OTc6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGRldl9od19hZGRyLCBsaXN0KTtcXG4gNjk4OlxcdFxcdFxcdGRldi1cXHUwMDNlZGV2X2FkZHIgPSBoYS1cXHUwMDNlYWRkcjtcXG4gNjk5OlxcdFxcdH1cXG4gNzAwOlxcdFxcdHJldHVybiBlcnI7XFxuIDcwMTpcXHR9XFxuIDcwMjpcXHRcXG4gNzAzOlxcdHZvaWQgZGV2X2FkZHJfbW9kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsXFxuIDcwNDpcXHRcXHRcXHQgIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXFxuIDcwNTpcXHR7XFxuIDcwNjpcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbiA3MDc6XFx0XFxuIDcwODpcXHRcXHRkZXZfYWRkcl9jaGVjayhkZXYpO1xcbiA3MDk6XFx0XFxuIDcxMDpcXHRcXHRoYSA9IGNvbnRhaW5lcl9vZihkZXYtXFx1MDAzZWRldl9hZGRyLCBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIGFkZHJbMF0pO1xcbiA3MTE6XFx0XFx0cmJfZXJhc2UoXFx1MDAyNmhhLVxcdTAwM2Vub2RlLCBcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMudHJlZSk7XFxuIDcxMjpcXHRcXHRtZW1jcHkoXFx1MDAyNmhhLVxcdTAwM2VhZGRyW29mZnNldF0sIGFkZHIsIGxlbik7XFxuIDcxMzpcXHRcXHRtZW1jcHkoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJfc2hhZG93W29mZnNldF0sIGFkZHIsIGxlbik7XFxuIDcxNDpcXHRcXHRXQVJOX09OKF9faHdfYWRkcl9pbnNlcnQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBoYSwgZGV2LVxcdTAwM2VhZGRyX2xlbikpO1xcbiA3MTU6XFx0fVxcbiA3MTY6XFx0RVhQT1JUX1NZTUJPTChkZXZfYWRkcl9tb2QpO1xcbiA3MTc6XFx0XFxuIDcxODpcXHQvKipcXG4gNzE5OlxcdCAqXFx0ZGV2X2FkZHJfYWRkIC0gQWRkIGEgZGV2aWNlIGFkZHJlc3NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzg6NDkuMDMxMDQ0NjAyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI0NDk0OTQ2NDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBuZXR3b3JrIGRldmljZSBkcml2ZXIgZGV2ZWxvcG1lbnQ6XG5cbioqQW5hbHl6aW5nIEFkZHJlc3MgQWxsb2NhdGlvbiBpbiB0aGUgRHJpdmVyKipcblxuUmlnaHQsIHNvIGBkZXYtXHUwMDNlZGV2X2FkZHJgLCB0aGF0IGRldmljZSBhZGRyZXNzIHBvaW50ZXIsIGl0J3MgYWN0dWFsbHkgcG9pbnRpbmcgZGlyZWN0bHkgdG8gYGhhLVx1MDAzZWFkZHJgLiAgQW5kIEkgcmVtZW1iZXIgZnJvbSBteSBkaWdnaW5nIGFyb3VuZCwgYGhhLVx1MDAzZWFkZHJgIGl0c2VsZiBnZXRzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGBfX2h3X2FkZHJfYWRkYCBmdW5jdGlvbi4gIFRoYXQncyB0aGUga2V5IGNvbm5lY3Rpb24uIFNvIHRoZSBkZXZpY2UgYWRkcmVzcyBpc24ndCBqdXN0IGZsb2F0aW5nIG91dCB0aGVyZSwgaXTigJlzIGluZXh0cmljYWJseSBsaW5rZWQgdG8gdGhlIGhhcmR3YXJlIGFkZHJlc3Mgc3RydWN0dXJlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGFsbG9jYXRpb24gZGV0YWlscyBhbmQgYW55IGRlcGVuZGVuY2llcyB0aGVyZSwgd2hpY2ggbWVhbnMgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBfX2h3X2FkZHJfYWRkYCBmdW5jdGlvbi4gSSB3aWxsIGNoZWNrIGZvciBhbnkgcGVjdWxpYXJpdGllcyB0aGF0IG1heSBoYXZlIGNvbWUgdXAgZHVyaW5nIGRlYnVnZ2luZyBwcmV2aW91c2x5LiBMZXQncyBzZWUgaG93IHRoYXQgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NTcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM5OjEzLjUyNTk5NDE4M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTgxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIG5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMgLSBGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIG5ldCBkZXZpY2UgbGlzdHNcXG4gICA0OlxcdCAqIENvcHlyaWdodCAoYykgMjAxMCBKaXJpIFBpcmtvIFxcdTAwM2NqcGlya29AcmVkaGF0LmNvbVxcdTAwM2VcXG4gICA1OlxcdCAqXFxuICAgNjpcXHQgKiBUaGlzIGZpbGUgY29udGFpbnMgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggdW5pY2FzdCwgbXVsdGljYXN0IGFuZCBkZXZpY2VcXG4gICA3OlxcdCAqIGFkZHJlc3NlcyBsaXN0cy5cXG4gICA4OlxcdCAqL1xcbiAgIDk6XFx0XFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbGlzdC5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaW5sb2NrLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNja3VuaXQvdmlzaWJpbGl0eS5oXFx1MDAzZVxcbiAgMTY6XFx0XFxuICAxNzpcXHQjaW5jbHVkZSBcXFwiZGV2LmhcXFwiXFxuICAxODpcXHRcXG4gIDE5OlxcdC8qXFxuICAyMDpcXHQgKiBHZW5lcmFsIGxpc3QgaGFuZGxpbmcgZnVuY3Rpb25zXFxuICAyMTpcXHQgKi9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0c3RhdGljIGludCBfX2h3X2FkZHJfaW5zZXJ0KHN0cnVjdCBuZXRkZXZfaHdfYWRkcl9saXN0ICpsaXN0LFxcbiAgMjQ6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqbmV3LCBpbnQgYWRkcl9sZW4pXFxuICAyNTpcXHR7XFxuICAyNjpcXHRcXHRzdHJ1Y3QgcmJfbm9kZSAqKmluc19wb2ludCA9IFxcdTAwMjZsaXN0LVxcdTAwM2V0cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMO1xcbiAgMjc6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4gIDI4OlxcdFxcbiAgMjk6XFx0XFx0d2hpbGUgKCppbnNfcG9pbnQpIHtcXG4gIDMwOlxcdFxcdFxcdGludCBkaWZmO1xcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRcXHRoYSA9IHJiX2VudHJ5KCppbnNfcG9pbnQsIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbm9kZSk7XFxuICAzMzpcXHRcXHRcXHRkaWZmID0gbWVtY21wKG5ldy1cXHUwMDNlYWRkciwgaGEtXFx1MDAzZWFkZHIsIGFkZHJfbGVuKTtcXG4gIDM0OlxcdFxcdFxcdGlmIChkaWZmID09IDApXFxuICAzNTpcXHRcXHRcXHRcXHRkaWZmID0gbWVtY21wKFxcdTAwMjZuZXctXFx1MDAzZXR5cGUsIFxcdTAwMjZoYS1cXHUwMDNldHlwZSwgc2l6ZW9mKG5ldy1cXHUwMDNldHlwZSkpO1xcbiAgMzY6XFx0XFxuICAzNzpcXHRcXHRcXHRwYXJlbnQgPSAqaW5zX3BvaW50O1xcbiAgMzg6XFx0XFx0XFx0aWYgKGRpZmYgXFx1MDAzYyAwKVxcbiAgMzk6XFx0XFx0XFx0XFx0aW5zX3BvaW50ID0gXFx1MDAyNnBhcmVudC1cXHUwMDNlcmJfbGVmdDtcXG4gIDQwOlxcdFxcdFxcdGVsc2UgaWYgKGRpZmYgXFx1MDAzZSAwKVxcbiAgNDE6XFx0XFx0XFx0XFx0aW5zX3BvaW50ID0gXFx1MDAyNnBhcmVudC1cXHUwMDNlcmJfcmlnaHQ7XFxuICA0MjpcXHRcXHRcXHRlbHNlXFxuICA0MzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gIDQ0OlxcdFxcdH1cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0XFx0cmJfbGlua19ub2RlX3JjdShcXHUwMDI2bmV3LVxcdTAwM2Vub2RlLCBwYXJlbnQsIGluc19wb2ludCk7XFxuICA0NzpcXHRcXHRyYl9pbnNlcnRfY29sb3IoXFx1MDAyNm5ldy1cXHUwMDNlbm9kZSwgXFx1MDAyNmxpc3QtXFx1MDAzZXRyZWUpO1xcbiAgNDg6XFx0XFxuICA0OTpcXHRcXHRyZXR1cm4gMDtcXG4gIDUwOlxcdH1cXG4gIDUxOlxcdFxcbiAgNTI6XFx0c3RhdGljIHN0cnVjdCBuZXRkZXZfaHdfYWRkcipcXG4gIDUzOlxcdF9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbiAgNTQ6XFx0XFx0XFx0IHVuc2lnbmVkIGNoYXIgYWRkcl90eXBlLCBib29sIGdsb2JhbCwgYm9vbCBzeW5jKVxcbiAgNTU6XFx0e1xcbiAgNTY6XFx0XFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcXG4gIDU3OlxcdFxcdGludCBhbGxvY19zaXplO1xcbiAgNTg6XFx0XFxuICA1OTpcXHRcXHRhbGxvY19zaXplID0gc2l6ZW9mKCpoYSk7XFxuICA2MDpcXHRcXHRpZiAoYWxsb2Nfc2l6ZSBcXHUwMDNjIEwxX0NBQ0hFX0JZVEVTKVxcbiAgNjE6XFx0XFx0XFx0YWxsb2Nfc2l6ZSA9IEwxX0NBQ0hFX0JZVEVTO1xcbiAgNjI6XFx0XFx0aGEgPSBrbWFsbG9jKGFsbG9jX3NpemUsIEdGUF9BVE9NSUMpO1xcbiAgNjM6XFx0XFx0aWYgKCFoYSlcXG4gIDY0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAgNjU6XFx0XFx0bWVtY3B5KGhhLVxcdTAwM2VhZGRyLCBhZGRyLCBhZGRyX2xlbik7XFxuICA2NjpcXHRcXHRoYS1cXHUwMDNldHlwZSA9IGFkZHJfdHlwZTtcXG4gIDY3OlxcdFxcdGhhLVxcdTAwM2VyZWZjb3VudCA9IDE7XFxuICA2ODpcXHRcXHRoYS1cXHUwMDNlZ2xvYmFsX3VzZSA9IGdsb2JhbDtcXG4gIDY5OlxcdFxcdGhhLVxcdTAwM2VzeW5jZWQgPSBzeW5jID8gMSA6IDA7XFxuICA3MDpcXHRcXHRoYS1cXHUwMDNlc3luY19jbnQgPSAwO1xcbiAgNzE6XFx0XFxuICA3MjpcXHRcXHRyZXR1cm4gaGE7XFxuICA3MzpcXHR9XFxuICA3NDpcXHRcXG4gIDc1OlxcdHN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG4gIDc2OlxcdFxcdFxcdFxcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuICA3NzpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgY2hhciBhZGRyX3R5cGUsIGJvb2wgZ2xvYmFsLCBib29sIHN5bmMsXFxuICA3ODpcXHRcXHRcXHRcXHQgICAgaW50IHN5bmNfY291bnQsIGJvb2wgZXhjbHVzaXZlKVxcbiAgNzk6XFx0e1xcbiAgODA6XFx0XFx0c3RydWN0IHJiX25vZGUgKippbnNfcG9pbnQgPSBcXHUwMDI2bGlzdC1cXHUwMDNldHJlZS5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDtcXG4gIDgxOlxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdGlmIChhZGRyX2xlbiBcXHUwMDNlIE1BWF9BRERSX0xFTilcXG4gIDg0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHR3aGlsZSAoKmluc19wb2ludCkge1xcbiAgODc6XFx0XFx0XFx0aW50IGRpZmY7XFxuICA4ODpcXHRcXG4gIDg5OlxcdFxcdFxcdGhhID0gcmJfZW50cnkoKmluc19wb2ludCwgc3RydWN0IG5ldGRldl9od19hZGRyLCBub2RlKTtcXG4gIDkwOlxcdFxcdFxcdGRpZmYgPSBtZW1jbXAoYWRkciwgaGEtXFx1MDAzZWFkZHIsIGFkZHJfbGVuKTtcXG4gIDkxOlxcdFxcdFxcdGlmIChkaWZmID09IDApXFxuICA5MjpcXHRcXHRcXHRcXHRkaWZmID0gbWVtY21wKFxcdTAwMjZhZGRyX3R5cGUsIFxcdTAwMjZoYS1cXHUwMDNldHlwZSwgc2l6ZW9mKGFkZHJfdHlwZSkpO1xcbiAgOTM6XFx0XFxuICA5NDpcXHRcXHRcXHRwYXJlbnQgPSAqaW5zX3BvaW50O1xcbiAgOTU6XFx0XFx0XFx0aWYgKGRpZmYgXFx1MDAzYyAwKSB7XFxuICA5NjpcXHRcXHRcXHRcXHRpbnNfcG9pbnQgPSBcXHUwMDI2cGFyZW50LVxcdTAwM2VyYl9sZWZ0O1xcbiAgOTc6XFx0XFx0XFx0fSBlbHNlIGlmIChkaWZmIFxcdTAwM2UgMCkge1xcbiAgOTg6XFx0XFx0XFx0XFx0aW5zX3BvaW50ID0gXFx1MDAyNnBhcmVudC1cXHUwMDNlcmJfcmlnaHQ7XFxuICA5OTpcXHRcXHRcXHR9IGVsc2Uge1xcbiAxMDA6XFx0XFx0XFx0XFx0aWYgKGV4Y2x1c2l2ZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzk6MTMuNTI2MjE1MDEzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0OTE1MTc1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRGlzc2VjdGluZyBOZXR3b3JrIERldmljZSBIYXJkd2FyZSBBZGRyZXNzZXMqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBoYS1cdTAwM2VhZGRyYCBjb25zdHJ1Y3QgYW5kIGl0J3MgY2xlYXJseSBwYXJ0IG9mIGEgYG5ldGRldl9od19hZGRyYCBzdHJ1Y3QuIEknbSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IGFuZCB2ZXJpZnkgdGhlIGV4YWN0IGRlZmluaXRpb24gb2YgYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBzdHJ1Y3R1cmUgdG8gc2VlIGhvdyB0aGlzIGBoYS1cdTAwM2VhZGRyYCBmaWVsZCBpcyBiZWluZyB1c2VkLiBUaGlzIGNvdWxkIGJlIGNydWNpYWwgaW4gdW5kZXJzdGFuZGluZyBhIGN1cnJlbnQgaXNzdWUgb3IgZGVzaWduLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBhZGRyZXNzIG1hbmlwdWxhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBtYWtlIHN1cmUgSSBrbm93IHdoYXQgSSdtIGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzk6MTcuMDE3NzM1NzhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1Njg0MTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBuZXRkZXZfaHdfYWRkciBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjM1PXN0cnVjdCBza19idWZmO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjM2LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjM3OnN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzgtXFx0c3RydWN0IGxpc3RfaGVhZFxcdGxpc3Q7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM5OjE3LjA3MzQyNDU5NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk5MzI4NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgKipcblxuT2theSwgbGV0J3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAuIFRoaXMgaXMgYSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlLCBjbGVhcmx5IGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBhZGRyZXNzZXMgd2l0aGluIHRoZSBuZXR3b3JrIGRldmljZSBjb250ZXh0LiBJJ20gYXNzdW1pbmcgdGhpcyB3aWxsIGJlIHVzZWQgZm9yIE1BQyBhZGRyZXNzZXMsIG11bHRpY2FzdCBNQUMgYWRkcmVzc2VzLCBvciBwb3NzaWJseSBldmVuIG90aGVyIGhhcmR3YXJlLXNwZWNpZmljIGlkZW50aWZpZXJzIG1hbmFnZWQgYnkgdGhlIGRyaXZlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbXBvbmVudHMuIElzIGl0IHNpbXBseSBhIGNvbnRhaW5lciBmb3IgdGhlIGFkZHJlc3MgaXRzZWxmLCBvciBkb2VzIGl0IGhvbGQgYXNzb2NpYXRlZCBtZXRhZGF0YSBsaWtlIGZsYWdzIChlLmcuLCBwZXJtYW5lbnQsIHRlbXBvcmFyeSwgZXRjLikgb3IgcGVyaGFwcyByZWZlcmVuY2UgY291bnRzPyBBcmUgdGhlcmUgYW55IHBvaW50ZXJzIGluIHRoZSBzdHJ1Y3R1cmUgdGhhdCBtYW5hZ2UgdGhlIG1lbW9yeSBmb3IgdGhlIGhhcmR3YXJlIGFkZHJlc3MgaXRzZWxmPyBJIGV4cGVjdCB0aGVyZSB0byBiZSBhIGZpZWxkIGRlZmluaW5nIHRoZSBsZW5ndGggb2YgdGhlIGFkZHJlc3MsIGFzIGRpZmZlcmVudCBoYXJkd2FyZSB0eXBlcyBjYW4gaGF2ZSBkaWZmZXJlbnQgYWRkcmVzcyBzaXplcyAoZS5nLiwgRXRoZXJuZXQgdnMuIHNvbWUgb2JzY3VyZSBlbWJlZGRlZCBuZXR3b3JrKS4gSSdsbCB3YW50IHRvIGNoZWNrIGlmIHRoZSBzdHJ1Y3R1cmUgaXMgdmVyc2lvbmVkIG9yIGlmIHRoZXJlIGFyZSBhbnkgZXh0ZW5zaW9uIGZpZWxkcyBhZGRlZCBmb3IgZnV0dXJlIGZlYXR1cmVzLCBhbmQgaG93IHRoYXQgaXMgaGFuZGxlZC4gTGV0J3Mgc2VlIGhvdyB0aGlzIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGFuZCB1c2VkIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MDYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozOToyMS4yNzI3NTU3MjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzI5MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMjM3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM3OlxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciB7XFxuIDIzODpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG4gMjM5OlxcdFxcdHN0cnVjdCByYl9ub2RlXFx0XFx0bm9kZTtcXG4gMjQwOlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHRhZGRyW01BWF9BRERSX0xFTl07XFxuIDI0MTpcXHRcXHR1bnNpZ25lZCBjaGFyXFx0XFx0dHlwZTtcXG4gMjQyOlxcdCNkZWZpbmUgTkVUREVWX0hXX0FERFJfVF9MQU5cXHRcXHQxXFxuIDI0MzpcXHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfU0FOXFx0XFx0MlxcbiAyNDQ6XFx0I2RlZmluZSBORVRERVZfSFdfQUREUl9UX1VOSUNBU1RcXHQzXFxuIDI0NTpcXHQjZGVmaW5lIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNUXFx0NFxcbiAyNDY6XFx0XFx0Ym9vbFxcdFxcdFxcdGdsb2JhbF91c2U7XFxuIDI0NzpcXHRcXHRpbnRcXHRcXHRcXHRzeW5jX2NudDtcXG4gMjQ4OlxcdFxcdGludFxcdFxcdFxcdHJlZmNvdW50O1xcbiAyNDk6XFx0XFx0aW50XFx0XFx0XFx0c3luY2VkO1xcbiAyNTA6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0cmN1X2hlYWQ7XFxuIDI1MTpcXHR9O1xcbiAyNTI6XFx0XFxuIDI1MzpcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCB7XFxuIDI1NDpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkXFx0bGlzdDtcXG4gMjU1OlxcdFxcdGludFxcdFxcdFxcdGNvdW50O1xcbiAyNTY6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM5OjIxLjI3MzA5NDU4OVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMwNzg1MTMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyBpbiBOZXR3b3JrIERyaXZlciBNQUMgQWRkcmVzcyBIYW5kbGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYE1BWF9BRERSX0xFTmAgaXMgZGVmaW5lZCBhcyAzMiwgd2hpY2ggbWVhbnMgdGhlIGhhcmR3YXJlIGFkZHJlc3MgYnVmZmVyLCBgaGEtXHUwMDNlYWRkcmAsIGlzIGEgMzItYnl0ZSBhcnJheS4gVGhlIGBfX2h3X2FkZHJfY3JlYXRlYCBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhpcyBzdHJ1Y3R1cmUgdXNpbmcgYGttYWxsb2NgLiBOb3csIGEgY3J1Y2lhbCBwb2ludDogYGttYWxsb2NgIGRvZXNuJ3QgemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnkuICBJdCBqdXN0IGdpdmVzIHlvdSBhIGNodW5rIG9mIG1lbW9yeS4gIFNvLCBpZiBgYWRkcl9sZW5gIHBhc3NlZCB0byBgX19od19hZGRyX2NyZWF0ZWAgaXMgbGVzcyB0aGFuIDMyLCB3aGljaCBpdCBpcyBpbiB0aGUgY2FzZSBvZiBhIHN0YW5kYXJkIEV0aGVybmV0IE1BQyBhZGRyZXNzICg2IGJ5dGVzKSwgdGhlICpyZW1haW5pbmcqIGJ5dGVzIG9mIGBoYS1cdTAwM2VhZGRyYCB3aWxsIGJlIHVuaW5pdGlhbGl6ZWQuIFNwZWNpZmljYWxseSwgdGhlIGJ5dGVzIGZyb20gaW5kZXggNiB1cCB0byAzMSB3aWxsIGJlIGdhcmJhZ2UuXG5cbk5vdywgbG9va2luZyBhdCBob3cgdGhlIE1BQyBhZGRyZXNzIGlzIGFjdHVhbGx5ICp1c2VkKiBpbiB0aGUgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBmdW5jdGlvbjpcbmBgYGNcblx0UlRMX1czMl9GKE1BQzAgKyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciArIDApKSk7XG5cdFJUTF9XMzJfRihNQUMwICsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtXHUwMDNlZGV2X2FkZHIgKyA0KSkpO1xuYGBgXG5XZSdyZSByZWFkaW5nIGZyb20gYGRldi1cdTAwM2VkZXZfYWRkcmAsIHdoaWNoICpwb2ludHMqIHRvIG91ciBgaGEtXHUwMDNlYWRkcmAuIFRoZSBvcmlnaW5hbCBjb2RlIHJlYWRzIGZyb20gYGRldi1cdTAwM2VkZXZfYWRkciArIDRgLCBhbmQgdGhhdCByZWFkcyA0IGJ5dGVzIHN0YXJ0aW5nIGF0IGluZGV4IDQgKGJ5dGVzIDQsIDUsIDYsIDcpLiBCeXRlcyA0IGFuZCA1IGFyZSBwYXJ0IG9mIHRoZSBNQUMgYWRkcmVzcywgc28gdGhleSBhcmUgaW5pdGlhbGl6ZWQuIEhvd2V2ZXIsIGJ5dGVzIDYgYW5kIDcgYXJlIFVOSU5JVElBTElaRUQuIFRoYXQgY291bGQgYmUgYSBwcm9ibGVtISAgV2UncmUgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuSG93ZXZlciwgYGRldl9hZGRyX2luaXRgIHNlZW1zIHRvIGluaXRpYWxpemUgdGhlIGZpcnN0IE1BQyBhZGRyZXNzIGZ1bGx5IVxuYGBgY1xuXHR1bnNpZ25lZCBjaGFyIGFkZHJbTUFYX0FERFJfTEVOXTtcblx0bWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSk7XG5cdGVyciA9IF9faHdfYWRkcl9hZGQoXHUwMDI2ZGV2LVx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxuXHRcdFx0ICAgIE5FVERFVl9IV19BRERSX1RfTEFOKTtcbmBgYFxuSGVyZSwgd2UgY3JlYXRlIGEgMzItYnl0ZSBhcnJheSwgYGFkZHJgLCBhbmQgemVybyBpdCBvdXQsIGFuZCB0aGVuIHdlIGFkZCBpdCBhcyBhbiBhZGRyZXNzLiAgQ3J1Y2lhbGx5LCBgX19od19hZGRyX2FkZGAgaXMgZ2l2ZW4gYSBgYWRkcl9sZW5gIG9mIDMyLCBzbyB0aGlzIGZpcnN0IGFkZHJlc3MgaXMgZnVsbHkgaW5pdGlhbGl6ZWQgdG8gemVyby4gIFNvIHdlIGFyZSBzYWZlIGhlcmUhXG5cbkJ1dCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgTUFDIGFkZHJlc3MgaXMgKmNoYW5nZWQqPyBgbmV0aWZfc2V0X21hY19hZGRyZXNzYCBjYWxscyBgZGV2X2FkZHJfbW9kYCwgd2hpY2ggdXNlcyBgbWVtY3B5YCB0byB1cGRhdGUgdGhlIE1BQyBhZGRyZXNzLlxuYGBgY1xuXHRtZW1jcHkoXHUwMDI2aGEtXHUwMDNlYWRkcltvZmZzZXRdLCBhZGRyLCBsZW4pO1xuYGBgXG5UaGlzIG92ZXJ3cml0ZXMgdGhlIGV4aXN0aW5nIGBoYS1cdTAwM2VhZGRyYCBpbiBwbGFjZS4gVGhpcyBtZWFucyB0aGF0ICpvbmx5KiB0aGUgTUFDIGFkZHJlc3MgYnl0ZXMgZ2V0IHVwZGF0ZWQsIGFuZCB0aGUgb3RoZXIgYnl0ZXMgcmVtYWluIHdoYXRldmVyIGdhcmJhZ2Ugd2FzIHRoZXJlIGJlZm9yZSwgdW5sZXNzIHdlIHNwZWNpZmljYWxseSBpbml0aWFsaXplIHRoZW0uXG5cbkFuZCBmaW5hbGx5LCB3ZSBoYXZlIHRoZSBjYXNlIHdoZXJlIGEgZHJpdmVyIGRpcmVjdGx5IHNldHMgdGhlIE1BQyBhZGRyZXNzLiAgTWFueSBkcml2ZXJzIGRvIGBldGhfaHdfYWRkcl9zZXQoZGV2LCBtYWNfYWRkcilgLiBXZSdkIG5lZWQgdG8gZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGV0aF9od19hZGRyX3NldGAgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoaXMuIElzIHRoZXJlIGFueSBpbml0aWFsaXphdGlvbiBoYXBwZW5pbmcgdGhlcmU/ICBBcmUgd2Ugc2FmZT8gV2UgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgZXRoX2h3X2FkZHJfc2V0YCBmb3IgYSBkZWZpbml0aXZlIGFuc3dlci4gSXQncyBwb3NzaWJsZSBmb3IgdGhpcyBmdW5jdGlvbiB0byBjcmVhdGUgdGhlIHNhbWUgcHJvYmxlbSBhcyB0aGUgb3JpZ2luYWwgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1MDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozOTozMi41ODA5NDg4NDhaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDkyMzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV0aF9od19hZGRyX3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTMwMj1zdGF0aWMgaW5saW5lIHZvaWQgZXRoZXJfYWRkcl9jb3B5KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzE3LS8qKlxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDozMTg6ICogZXRoX2h3X2FkZHJfc2V0IC0gQXNzaWduIEV0aGVybmV0IGFkZHJlc3MgdG8gYSBuZXRfZGV2aWNlXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTMxOS0gKiBAZGV2OiBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzIzLSAqL1xcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDozMjQ6c3RhdGljIGlubGluZSB2b2lkIGV0aF9od19hZGRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcilcXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzI1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaD0zMzc9c3RhdGljIGlubGluZSB2b2lkIGV0aF9od19hZGRyX2luaGVyaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRzdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zNDAtXFx0ZHN0LVxcdTAwM2VhZGRyX2Fzc2lnbl90eXBlID0gc3JjLVxcdTAwM2VhZGRyX2Fzc2lnbl90eXBlO1xcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDozNDE6XFx0ZXRoX2h3X2FkZHJfc2V0KGRzdCwgc3JjLVxcdTAwM2VkZXZfYWRkcik7XFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTM0Mi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg9NjA0PXN0YXRpYyBpbmxpbmUgdm9pZCBldGhfaHdfYWRkcl9nZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJhc2VfYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC02MTEtXFx0dTY0X3RvX2V0aGVyX2FkZHIodSwgYWRkcik7XFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjYxMjpcXHRldGhfaHdfYWRkcl9zZXQoZGV2LCBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNjEzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzk6MzIuNjU4NDQ1NDE3WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDQ0NjQ4NDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQsIGluIHRoZSBmaXJzdCBwZXJzb24gYW5kIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIGBldGhfaHdfYWRkcl9zZXRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGV0aF9od19hZGRyX3NldGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IGRldGVybWluZSBpdHMgcm9sZS4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBzZXR0aW5nIHRoZSBoYXJkd2FyZSBhZGRyZXNzIOKAkyB0aGUgTUFDIGFkZHJlc3MsIHByZXN1bWFibHkg4oCTIG9mIGFuIEV0aGVybmV0IGludGVyZmFjZS4gVGhhdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gZ28gZGVlcGVyIHRoYW4ganVzdCB0aGUgbmFtZS5cblxuTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRleHQuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gbGlrZWx5IHRvIGJlIHVzZWQ/IElzIGl0IHBhcnQgb2YgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZT8gSXMgaXQgYSB1c2VyLXNwYWNlIHV0aWxpdHkgZnVuY3Rpb24gdG8gY29uZmlndXJlIHRoZSBuZXR3b3JrIGludGVyZmFjZT8gT3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgZGVlcGx5IGVtYmVkZGVkIGluIHRoZSBuZXR3b3JrIHN0YWNrPyBLbm93aW5nIHRoZSBlbnZpcm9ubWVudCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyBwb3RlbnRpYWwgaW1wbGljYXRpb25zLlxuXG5JIHdhbnQgdG8ga25vdyBpdHMgaW5wdXRzLiBXaGF0IGtpbmQgb2YgZGF0YSBzdHJ1Y3R1cmVzIGRvZXMgaXQgZXhwZWN0PyBBIG5ldHdvcmsgaW50ZXJmYWNlIGRlc2NyaXB0b3IsIHN1cmVseSwgYnV0IHdoYXQgYWJvdXQgdGhlIGFkZHJlc3MgaXRzZWxmPyBJcyBpdCBhIHNpbXBsZSBieXRlIGFycmF5PyBBIHN0YW5kYXJkaXplZCBzdHJ1Y3Q/IEFueSBlcnJvciBoYW5kbGluZyBpbnB1dHM/IEFueSBsaW1pdGF0aW9ucyBvbiB3aGF0J3MgYWxsb3dlZD8gTXkgdGhvdWdodHMgYXJlIHJhY2luZyBmb3J3YXJkIG5vdywgYW50aWNpcGF0aW5nIGhvdyBpdCBoYW5kbGVzIG1hbGZvcm1lZCBhZGRyZXNzZXMsIG9yIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIHJlcXVlc3RzLlxuXG5UaGUgZXhlY3V0aW9uIGZsb3cgaXMgbmV4dC4gSG93IGRvZXMgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IGdvIGFib3V0IHNldHRpbmcgdGhlIGFkZHJlc3M/IERvZXMgaXQgZGlyZWN0bHkgbWFuaXB1bGF0ZSByZWdpc3RlcnMgb24gdGhlIE5ldHdvcmsgSW50ZXJmYWNlIENvbnRyb2xsZXIgKE5JQyk/IERvZXMgaXQgdXRpbGl6ZSBzb21lIGtpbmQgb2Ygc3lzdGVtIGNhbGwgb3IgYSBrZXJuZWwgQVBJPyBEb2VzIGl0IGdvIHRocm91Z2ggYW55IGxldmVsIG9mIGFic3RyYWN0aW9uPyBLbm93aW5nIHRoaXMgd2lsbCByZXZlYWwgdGhlIGxldmVsIG9mIGZsZXhpYmlsaXR5LiBXaWxsIGl0IGhhbmRsZSBhbGwgdHlwZXMgb2YgYWRkcmVzc2VzICh1bmljYXN0LCBtdWx0aWNhc3QpPyBPciBkb2VzIGl0IGhhdmUgc29tZSByZXN0cmljdGlvbnM/XG5cbkknbSBhbHNvIGN1cmlvdXMgYWJvdXQgZXJyb3IgaGFuZGxpbmcuIEhvdyByb2J1c3QgaXMgaXQ/IFdoYXQgZmFpbHVyZSBtb2RlcyBkb2VzIGl0IGFudGljaXBhdGU/IERvZXMgaXQgcmV0dXJuIGVycm9yIGNvZGVzLCB0aHJvdyBleGNlcHRpb25zLCBvciBqdXN0IHNpbGVudGx5IGZhaWw/IERvZXMgaXQgY29uc2lkZXIgdGhlIHRpbWluZyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIGVudmlyb25tZW50PyBLbm93aW5nIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IEkgdXNlIGl0IG9yIHdoYXQgYXNzdW1wdGlvbnMgSSBjYW4gbWFrZSBpZiBpbXBsZW1lbnRpbmcgYSBjb21wbGVtZW50YXJ5IGZ1bmN0aW9uLlxuXG5VbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIGNvbXBsZXRlIG1lbnRhbCBtb2RlbCBvZiBpdHMgYmVoYXZpb3IsIGxpbWl0YXRpb25zLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdsbCBuZWVkIHRvIGxvb2sgYmV5b25kIHRoZSBjb2RlIGl0c2VsZiwgY29uc2lkZXJpbmcgdGhlIHBsYXRmb3JtLCBkcml2ZXIsIGFuZCB0aGUgdXNlci1mYWNpbmcgaW1wbGljYXRpb25zIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuIFRoaXMgcXVpY2sgZXhhbWluYXRpb24gbmVlZHMgdG8gZGV0ZXJtaW5lIGlmIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIHNvdXJjZSwgdGhlIGRvY3VtZW50YXRpb24sIG9yIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGdyYXNwIGl0cyB0cnVlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozOTo0My43MDMwOTcwNjhaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyNzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMTgsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTg6XFx0ICogZXRoX2h3X2FkZHJfc2V0IC0gQXNzaWduIEV0aGVybmV0IGFkZHJlc3MgdG8gYSBuZXRfZGV2aWNlXFxuIDMxOTpcXHQgKiBAZGV2OiBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlXFxuIDMyMDpcXHQgKiBAYWRkcjogYWRkcmVzcyB0byBhc3NpZ25cXG4gMzIxOlxcdCAqXFxuIDMyMjpcXHQgKiBBc3NpZ24gZ2l2ZW4gYWRkcmVzcyB0byB0aGUgbmV0X2RldmljZSwgYWRkcl9hc3NpZ25fdHlwZSBpcyBub3QgY2hhbmdlZC5cXG4gMzIzOlxcdCAqL1xcbiAzMjQ6XFx0c3RhdGljIGlubGluZSB2b2lkIGV0aF9od19hZGRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcilcXG4gMzI1OlxcdHtcXG4gMzI2OlxcdFxcdF9fZGV2X2FkZHJfc2V0KGRldiwgYWRkciwgRVRIX0FMRU4pO1xcbiAzMjc6XFx0fVxcbiAzMjg6XFx0XFxuIDMyOTpcXHQvKipcXG4gMzMwOlxcdCAqIGV0aF9od19hZGRyX2luaGVyaXQgLSBDb3B5IGRldl9hZGRyIGZyb20gYW5vdGhlciBuZXRfZGV2aWNlXFxuIDMzMTpcXHQgKiBAZHN0OiBwb2ludGVyIHRvIG5ldF9kZXZpY2UgdG8gY29weSBkZXZfYWRkciB0b1xcbiAzMzI6XFx0ICogQHNyYzogcG9pbnRlciB0byBuZXRfZGV2aWNlIHRvIGNvcHkgZGV2X2FkZHIgZnJvbVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozOTo0My43MDMyMzIxOThaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTExMTg5NjE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgX19kZXZfYWRkcl9zZXRgIHNpdHVhdGlvbjpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBgX19kZXZfYWRkcl9zZXRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBnZXQgaW50byB0aGUgY29kZSBmb3IgYF9fZGV2X2FkZHJfc2V0YC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgbGluZSBieSBsaW5lLCByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBsb2dpYy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgY29tcG9uZW50cywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCdzIHdvcmtpbmcgd2l0aCwgYW5kIHRoZSBjb3JlIHB1cnBvc2UgaXQncyBzZXJ2aW5nLiBLbm93aW5nIG15IG5ldHdvcmtpbmcgYW5kIGRldmljZSBkcml2ZXIgYmFja2dyb3VuZCwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgYXNwZWN0cyBsaWtlIG1hbmlwdWxhdGluZyBNQUMgYWRkcmVzc2VzLCBoYW5kbGluZyBhZGRyZXNzIGFzc2lnbm1lbnQgd2l0aGluIGEgZGV2aWNlIHN0cnVjdHVyZSwgYW5kIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IHNhZmV0eS4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaWYgYXQgYWxsLCBvciBpZiBpdCBwcmltYXJpbHkgbWFuYWdlcyB0aGUgc29mdHdhcmUgcmVwcmVzZW50YXRpb24gb2YgYSBkZXZpY2UncyBhZGRyZXNzIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGRldmljZSBkcml2ZXIgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzMzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzk6NDguODE1MTMxNjA5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDMzNzc0MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19kZXZfYWRkcl9zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTUwOTQ9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MDk1Ol9fZGV2X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDk2LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NTEwMD1zdGF0aWMgaW5saW5lIHZvaWQgZGV2X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyKVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTEwMS17XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MTAyOlxcdF9fZGV2X2FkZHJfc2V0KGRldiwgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbik7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTAzLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6Mzk6NDkuNjU4NTEyODdaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyMTgyMzI2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgX19kZXZfYWRkcl9zZXRgIHNpdHVhdGlvbjpcblxuKipVbmRlcnN0YW5kaW5nIHRoZSBgX19kZXZfYWRkcl9zZXRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIEkgd2FudCB0byBkbyBpcyBnZXQgaW50byB0aGUgY29kZSBmb3IgYF9fZGV2X2FkZHJfc2V0YC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgbGluZSBieSBsaW5lLCByZWFsbHkgZGlnZ2luZyBpbnRvIHRoZSBsb2dpYy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBrZXkgY29tcG9uZW50cywgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCdzIHdvcmtpbmcgd2l0aCwgYW5kIHRoZSBjb3JlIHB1cnBvc2UgaXQncyBzZXJ2aW5nLiBLbm93aW5nIG15IG5ldHdvcmtpbmcgYW5kIGRldmljZSBkcml2ZXIgYmFja2dyb3VuZCwgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHNvbWUgYXNwZWN0cyBsaWtlIG1hbmlwdWxhdGluZyBNQUMgYWRkcmVzc2VzLCBoYW5kbGluZyBhZGRyZXNzIGFzc2lnbm1lbnQgd2l0aGluIGEgZGV2aWNlIHN0cnVjdHVyZSwgYW5kIHBvdGVudGlhbGx5IGRlYWxpbmcgd2l0aCBsb2NraW5nIG1lY2hhbmlzbXMgdG8gZW5zdXJlIGNvbmN1cnJlbmN5IHNhZmV0eS4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaWYgYXQgYWxsLCBvciBpZiBpdCBwcmltYXJpbHkgbWFuYWdlcyB0aGUgc29mdHdhcmUgcmVwcmVzZW50YXRpb24gb2YgYSBkZXZpY2UncyBhZGRyZXNzIHdpdGhpbiB0aGUga2VybmVsLiBUaGUgZ29hbCBpcyB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGRldmljZSBkcml2ZXIgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc2OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjM5OjUzLjc4MDMzOTM3NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTYwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MDk0LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDk0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZFxcbjUwOTU6XFx0X19kZXZfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbilcXG41MDk2OlxcdHtcXG41MDk3OlxcdFxcdGRldl9hZGRyX21vZChkZXYsIDAsIGFkZHIsIGxlbik7XFxuNTA5ODpcXHR9XFxuNTA5OTpcXHRcXG41MTAwOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBkZXZfYWRkcl9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIpXFxuNTEwMTpcXHR7XFxuNTEwMjpcXHRcXHRfX2Rldl9hZGRyX3NldChkZXYsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbjUxMDM6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzozOTo1My43ODA4NTc4OTVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY0ODYyMzk0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNQUMgQWRkcmVzcyBNb2RpZmljYXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGRldl9hZGRyX21vZGAgZnVuY3Rpb24sIGFuZCBpdCdzIGNhbGxlZCB3aXRoIGFuIG9mZnNldCBvZiAwIGFuZCBhIGxlbmd0aCBvZiA2LCB3aGljaCBtYWtlcyBzZW5zZSBmb3IgbW9kaWZ5aW5nIGEgTUFDIGFkZHJlc3MsIHJpZ2h0PyAgVGhlIGZpcnN0IHRoaW5nIGl0IGRvZXMgaXMgb3ZlcndyaXRlIHRoZSBmaXJzdCA2IGJ5dGVzIG9mIGBoYS1cdTAwM2VhZGRyYCB3aXRoIGBtZW1jcHlgLiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IHRoaXMgd291bGQgbWVhbiB0aGUgcmVtYWluaW5nIDI2IGJ5dGVzIG9mIGBoYS1cdTAwM2VhZGRyYCB3b3VsZCByZW1haW4gemVyb2VkLCBiZWNhdXNlIG9mIHRoZSB6ZXJvLWluaXRpYWxpemF0aW9uIGluIGBkZXZfYWRkcl9pbml0YC4gVGhpcyBsb29rcyBjb3JyZWN0IGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIG1vZGlmeWluZyB0aGUgYWRkcmVzcyBpbi1wbGFjZS5cblxuQnV0IHRoZW4gSSBoYWQgYSBtb21lbnQgb2YgZG91YnQuICBJcyB0aGVyZSAqYW55KiBzY2VuYXJpbyB3aGVyZSBgaGEtXHUwMDNlYWRkcmAgY291bGQgYmUgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgIGFuZCAqbm90KiBiZSB6ZXJvLWluaXRpYWxpemVkPyAgSSBpbW1lZGlhdGVseSByZWNhbGxlZCB0aGUgYF9faHdfYWRkcl9hZGRfZXhgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGF0IGBfX2h3X2FkZHJfY3JlYXRlYCBhbGxvY2F0ZXMgYGhhYCB3aXRoIGBrbWFsbG9jYCBhbmQgb25seSBjb3BpZXMgdGhlIHN1cHBsaWVkIGBhZGRyX2xlbmAgYnl0ZXMuICBTbyBpZiBgX19od19hZGRyX2FkZGAgaXMgY2FsbGVkIHdpdGggYSBsZW5ndGggb2YgNiwgd291bGRuJ3QgdGhhdCBtZWFuIHRoZSByZXN0IHdvdWxkIGJlIHVuaW5pdGlhbGl6ZWQ/XG5cbk15IHRob3VnaHQgdHJhaW4gY29udGludWVkIGFuZCBJIHdlbnQgdGhyb3VnaCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRvIGVuc3VyZSBteSBhc3N1bXB0aW9uIHJlZ2FyZGluZyBkYXRhIGluaXRpYWxpemF0aW9uLiBJJ20gcmVhc29uYWJseSBjb25maWRlbnQgdGhlIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIHNldCBvbmNlIGluIGBkZXZfYWRkcl9pbml0YCBhbmQgbmV2ZXIgY2hhbmdlZCB0byBwb2ludCB0byBhIGRpZmZlcmVudCBgaGFgLCBhbmQgdGhhdCB0aGlzIGluaXRpYWwgYGhhYCBpcyB6ZXJvZWQuICBUaGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIGV4aXN0aW5nIG9uZSBpbiBwbGFjZS4gSSBoYWQgdG8gZW5zdXJlIHRoYXQgdGhlIHBvaW50ZXIgd2FzIG5vdCBzd2l0Y2hlZCBhdCBhbnkgdGltZS5cblxuQnV0IEkgaGFkIHRvIGRvdWJsZSBjaGVjayEgVGhpcyBwYXRjaCBzZWVtcyB0byBiZSBmcm9tIGEgc3l6LWNsdXN0ZXIsIGFuZCBJIHdhc24ndCBzdXJlIGlmIHRoZXJlIHdhcyBhbiBvbGRlciBrZXJuZWwgdmVyc2lvbiB3aGVyZSBgZGV2LVx1MDAzZWRldl9hZGRyYCB3YXMgYW4gYXJyYXkuIFRpbWUgdG8gY2hlY2sgYGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhgIGZvciBob3cgYGRldl9hZGRyYCBpcyBkZWZpbmVkLiBUaGlzIHNob3VsZCBjbGVhciB1cCB0aGF0IHRob3VnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTkxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDA6MTAuMjY3MDk5OTAyWiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDUzMTU2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTgxOD1lbnVtIG5ldGRldl9yZWdfc3RhdGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0xOTU4LSAqXFx0QG1jOlxcdFxcdFxcdG11bHRpY2FzdCBtYWMgYWRkcmVzc2VzXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxOTU5OiAqXFx0QGRldl9hZGRyczpcXHRcXHRsaXN0IG9mIGRldmljZSBodyBhZGRyZXNzZXNcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NjAtICpcXHRAcXVldWVzX2tzZXQ6XFx0XFx0R3JvdXAgb2YgYWxsIEtvYmplY3RzIGluIHRoZSBUeCBhbmQgUlggcXVldWVzXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE5NzctICpcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE5Nzg6ICpcXHRAZGV2X2FkZHI6XFx0SHcgYWRkcmVzcyAoYmVmb3JlIGJjYXN0LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTk3OS0gKlxcdFxcdFxcdGJlY2F1c2UgbW9zdCBwYWNrZXRzIGFyZSB1bmljYXN0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMTI1LSAqXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMTI2OiAqXFx0QGRldl9hZGRyX3NoYWRvdzpcXHRDb3B5IG9mIEBkZXZfYWRkciB0byBjYXRjaCBkaXJlY3Qgd3JpdGVzLlxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMjEyNy0gKlxcdEBsaW5rd2F0Y2hfZGV2X3RyYWNrZXI6XFx0cmVmY291bnQgdHJhY2tlciB1c2VkIGJ5IGxpbmt3YXRjaC5cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MjE1OD1zdHJ1Y3QgbmV0X2RldmljZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTIzMzktXFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3RcXHRtYztcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjIzNDA6XFx0c3RydWN0IG5ldGRldl9od19hZGRyX2xpc3RcXHRkZXZfYWRkcnM7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzQxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzk2LVxcdC8qIEludGVyZmFjZSBhZGRyZXNzIGluZm8gdXNlZCBpbiBldGhfdHlwZV90cmFucygpICovXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoyMzk3OlxcdGNvbnN0IHVuc2lnbmVkIGNoYXJcXHQqZGV2X2FkZHI7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yMzk4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0yNTQ0LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MjU0NTpcXHR1OCBkZXZfYWRkcl9zaGFkb3dbTUFYX0FERFJfTEVOXTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTI1NDYtXFx0bmV0ZGV2aWNlX3RyYWNrZXJcXHRsaW5rd2F0Y2hfZGV2X3RyYWNrZXI7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTMzMTA9c3RydWN0IG5ldGRldl9ub3RpZmllcl9wcmVfY2hhbmdlYWRkcl9pbmZvIHtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTMzMTEtXFx0c3RydWN0IG5ldGRldl9ub3RpZmllcl9pbmZvIGluZm87IC8qIG11c3QgYmUgZmlyc3QgKi9cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjMzMTI6XFx0Y29uc3QgdW5zaWduZWQgY2hhciAqZGV2X2FkZHI7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zMzEzLX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTUwMTc9c3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2FkZHJfdW5sb2NrX2JoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwMjItLypcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUwMjM6ICogZGV2X2FkZHJzIHdhbGtlci4gU2hvdWxkIGJlIHVzZWQgb25seSBmb3IgcmVhZCBhY2Nlc3MuIENhbGwgd2l0aFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTAyNC0gKiByY3VfcmVhZF9sb2NrIGhlbGQuXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDI1LSAqL1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTAyNjojZGVmaW5lIGZvcl9lYWNoX2Rldl9hZGRyKGRldiwgaGEpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUwMjc6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaGEsIFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycy5saXN0LCBsaXN0KVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTAyOC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9NTA4NT12b2lkIF9faHdfYWRkcl9saXN0X3JlY29uY2lsZShzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqcmVhbF9saXN0LFxcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDkwLS8qIEZ1bmN0aW9ucyB1c2VkIGZvciBkZXZpY2UgYWRkcmVzc2VzIGhhbmRsaW5nICovXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MDkxOnZvaWQgZGV2X2FkZHJfbW9kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBvZmZzZXQsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDkyLVxcdFxcdCAgY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTUwOTQ9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MDk1Ol9fZGV2X2FkZHJfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MDk2LXtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUwOTc6XFx0ZGV2X2FkZHJfbW9kKGRldiwgMCwgYWRkciwgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUwOTgtfVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTA5OS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjUxMDA6c3RhdGljIGlubGluZSB2b2lkIGRldl9hZGRyX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYWRkcilcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUxMDEte1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTEwMjpcXHRfX2Rldl9hZGRyX3NldChkZXYsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4pO1xcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtNTEwMy19XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTA0LVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6NTEwNTppbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC01MTA2LVxcdFxcdCB1bnNpZ25lZCBjaGFyIGFkZHJfdHlwZSk7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDo1MTA3OmludCBkZXZfYWRkcl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTUxMDgtXFx0XFx0IHVuc2lnbmVkIGNoYXIgYWRkcl90eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDA6MTAuMzQ3NjM1NDQxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMTc1NjI3NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNYWMgQWRkcmVzcyBSZWFkKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgZGV2X2FkZHJgIGlzIGNsZWFybHkgYSBwb2ludGVyLCBhbmQgYWZ0ZXIgZXhhbWluaW5nIGBkZXZfYWRkcl9pbml0YCwgSSBjYW4gc2VlIHRoYXQgaXQgaW5pdGlhbGl6ZXMgYSAzMi1ieXRlIGJ1ZmZlciwgbmFtZWQgYGFkZHJgLCB0byBhbGwgemVyb3MgdXNpbmcgYG1lbXNldGAuIFRoZSBwb2ludGVyIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIHRoZW4gc2V0IHRvIHBvaW50IHRvIHRoaXMgYGFkZHJgIGJ1ZmZlci4gU28gd2hlbiBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIGF0dGVtcHRzIHRvIHJlYWQgNCBieXRlcyBzdGFydGluZyBhdCBhbiBvZmZzZXQgb2YgKzQsIGl0J3MgYWNjZXNzaW5nIGJ5dGVzIDQgdGhyb3VnaCA3IG9mIHRoaXMgMzItYnl0ZSBidWZmZXIuIENydWNpYWxseSwgdGhpcyBpcyAqbm90KiBhbiBvdXQtb2YtYm91bmRzIHJlYWQ7IHRoZSByZWFkIGlzIHdpdGhpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeS5cblxuSG9sZCBvbiwgbXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IGJ5dGVzIDYgYW5kIDcgbWlnaHQgYmUgdW5pbml0aWFsaXplZCwgYnV0IG5vLCB0aGUgYG1lbXNldGAgaW4gYGRldl9hZGRyX2luaXRgIGVuc3VyZXMgdGhhdCB0aG9zZSBieXRlcyBhcmUsIGluIGZhY3QsIGluaXRpYWxpemVkIHRvIHplcm8uIE9rYXksIHdoYXQgaWYgYW5vdGhlciBmdW5jdGlvbiBsaWtlIGBkZXZfYWRkcl9tb2RgIG1vZGlmaWVzIHRoZSBtYWMgYWRkcmVzcz8gSXQgY29waWVzIG9ubHkgNiBieXRlcywgbGVhdmluZyB0aGUgcmVzdCBvZiB0aGUgMzItYnl0ZSBidWZmZXIgdW50b3VjaGVkIOKAkyBzdGlsbCB6ZXJvLiBBbmQgd2hhdCBhYm91dCBpbmhlcml0YW5jZSB1c2luZyBgZXRoX2h3X2FkZHJfaW5oZXJpdGA/IEV2ZW4gaGVyZSwgYGV0aF9od19hZGRyX3NldGAgaXMgY2FsbGVkLCBhbmQgaXQgY29waWVzIGp1c3QgNiBieXRlcyBmcm9tIHRoZSBzb3VyY2UsIGFuZCB0aGUgcmVzdCByZW1haW5zIHplcm8uXG5cblRoZXJlZm9yZSwgYnl0ZXMgNiBhbmQgNyBhcmUgKmFsd2F5cyogemVybywgb3Igc28gaXQgc2VlbXMuIFNvIHJlYWRpbmcgdGhlbSBjYW5ub3QgYmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCEgSXQncyBhIHZhbGlkIGFuZCBwcmVkaWN0YWJsZSByZWFkLiBCdXQgd2FpdCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4uLkknbSBnb2luZyB0byBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgd2hlcmUgYGRldi1cdTAwM2VkZXZfYWRkcmAgbWlnaHQgYmUgYXNzaWduZWQuIExldCBtZSBjcm9zcy1jaGVjayB0aGUgb3RoZXIgcGxhY2VzIHdoZXJlIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIGFzc2lnbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjYyNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MDoxOS4zNjUyMDEyODRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjQ2MjM2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkciA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MTAwMjA9aW50IG5ldGlmX3ByZV9jaGFuZ2VhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICphZGRyLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTAwMjUtXFx0XFx0LmluZm8uZXh0YWNrID0gZXh0YWNrLFxcbm5ldC9jb3JlL2Rldi5jOjEwMDI2OlxcdFxcdC5kZXZfYWRkciA9IGFkZHIsXFxubmV0L2NvcmUvZGV2LmMtMTAwMjctXFx0fTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9NjYxPXZvaWQgZGV2X2FkZHJfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjY2LVxcdF9faHdfYWRkcl9mbHVzaChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NjY3OlxcdGRldi1cXHUwMDNlZGV2X2FkZHIgPSBOVUxMO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjY4LX1cXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9Njc5PWludCBkZXZfYWRkcl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY5Ny1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIsIGxpc3QpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6Njk4OlxcdFxcdGRldi1cXHUwMDNlZGV2X2FkZHIgPSBoYS1cXHUwMDNlYWRkcjtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY5OS1cXHR9XFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jPTY4OD1pZWVlODAyMTU0X2xsc2VjX3NlbmRfa2V5X2lkKHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTY5Ny1cXHRjYXNlIE5MODAyMTU0X0tFWV9JRF9NT0RFX0lNUExJQ0lUOlxcbm5ldC9pZWVlODAyMTU0L25sODAyMTU0LmM6Njk4OlxcdFxcdG5sX2Rldl9hZGRyID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKG1zZyxcXG5uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jLTY5OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgTkw4MDIxNTRfS0VZX0lEX0FUVFJfSU1QTElDSVQpO1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz0zNTUzPXN0YXRpYyB2b2lkIGFkZHJjb25mX2dyZV9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtMzU2Ny1cXHQgKi9cXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjM1Njg6XFx0aWYgKCEoKihfX2JlMzIgKilkZXYtXFx1MDAzZWRldl9hZGRyID09IDAgXFx1MDAyNlxcdTAwMjZcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTM1NjktXFx0ICAgICAgaWRldi1cXHUwMDNlY25mLmFkZHJfZ2VuX21vZGUgPT0gSU42X0FERFJfR0VOX01PREVfRVVJNjQpKSB7XFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYz0xMTMxPXN0YXRpYyBpZWVlODAyMTFfcnhfcmVzdWx0IGllZWU4MDIxMV9yeF9tZXNoX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpXFxuLS1cXG5uZXQvbWFjODAyMTEvcnguYy0xMTMzLVxcdHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC1cXHUwMDNlc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9tYWM4MDIxMS9yeC5jOjExMzQ6XFx0Y2hhciAqZGV2X2FkZHIgPSByeC1cXHUwMDNlc2RhdGEtXFx1MDAzZXZpZi5hZGRyO1xcbm5ldC9tYWM4MDIxMS9yeC5jLTExMzUtXFxuLS1cXG5uZXQvbWFjODAyMTU0L2xsc2VjLmM9MTAwNT1pbnQgbWFjODAyMTU0X2xsc2VjX2RlY3J5cHQoc3RydWN0IG1hYzgwMjE1NF9sbHNlYyAqc2VjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L21hYzgwMjE1NC9sbHNlYy5jLTEwNjYtXFxubmV0L21hYzgwMjE1NC9sbHNlYy5jOjEwNjc6XFx0ZGV2X2FkZHIgPSBkZXYtXFx1MDAzZWRldi5od2FkZHI7XFxubmV0L21hYzgwMjE1NC9sbHNlYy5jLTEwNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQwOjE5LjQ3NzY3MDE2NloiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTAxNzM2Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIERpcmVjdCBNb2RpZmljYXRpb24gb2YgYGRldi1cdTAwM2VkZXZfYWRkcmAqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBuZXR3b3JrIGRldmljZSBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgaW4gdGhpcyBzeXN0ZW0sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGBkZXYtXHUwMDNlZGV2X2FkZHJgLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCdzIGluaXRpYWxpemVkIHRvIGBoYS1cdTAwM2VhZGRyYCBkdXJpbmcgYGRldl9hZGRyX2luaXRgLCBidXQgdGhlbiBJIGhhZCB0aGlzIGZsYXNoIG9mIGluc2lnaHQg4oCTIHdoYXQgaWYgYSAqZHJpdmVyKiBpdHNlbGYsIGRpcmVjdGx5LCBhbHRlcnMgYGRldi1cdTAwM2VkZXZfYWRkcmAgYWZ0ZXIgaW5pdGlhbGl6YXRpb24/IFRoYXQgd291bGQgYnlwYXNzIHRoZSBleHBlY3RlZCBmbG93IGFuZCBjb3VsZCBpbnRyb2R1Y2Ugc29tZSByZWFsbHkgc3VidGxlLCBoYXJkLXRvLXRyYWNrLWRvd24gaXNzdWVzLiBJdCdzIG5vdCBzb21ldGhpbmcgSSdkICpleHBlY3QqIHRvIHNlZSwgYnV0IHdpdGggdGhlIGNvbXBsZXhpdGllcyBvZiB0aGVzZSBkcml2ZXJzLCBpdCdzIGNlcnRhaW5seSBwbGF1c2libGUuXG5cblNvLCB0aGUgbmV4dCBzdGVwIGlzIG9idmlvdXM6IEkgbmVlZCB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGRyaXZlcnMgdGhhdCBhY3R1YWxseSBkbyB0aGlzLCBhbmQgYXMgYW4gZXhhbXBsZSwgSSdtIGdvaW5nIHRvIGZvY3VzIGluIG9uIGBydGw4MTM5dG9vYCB0byBzZWUgaWYgdGhhdCBjb2RlIHNwZWNpZmljYWxseSBtb2RpZmllcyBgZGV2LVx1MDAzZWRldl9hZGRyYCBkaXJlY3RseS4gVGhhdCBmZWVscyBsaWtlIGEgbG9naWNhbCBuZXh0IGFyZWEgdG8gdGVzdCBpbiB0aGlzIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDk4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDA6MjYuNTc5NDEwMzMyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTExMDM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz05Mzk9c3RhdGljIGludCBydGw4MTM5X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtMTAzMi1cXHRcXHQgICAgYm9hcmRfaW5mb1tlbnQtXFx1MDAzZWRyaXZlcl9kYXRhXS5uYW1lLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjEwMzM6XFx0XFx0ICAgIGlvYWRkciwgZGV2LVxcdTAwM2VkZXZfYWRkciwgcGRldi1cXHUwMDNlaXJxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0xMDM0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM9MTM2Nj1zdGF0aWMgdm9pZCBydGw4MTM5X2h3X3N0YXJ0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtMTM4MS1cXHQvKiBSZXN0b3JlIG91ciBpZGVhIG9mIHRoZSBNQUMgYWRkcmVzcy4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzoxMzgyOlxcdFJUTF9XMzJfRiAoTUFDMCArIDAsIGxlMzJfdG9fY3B1ICgqKF9fbGUzMiAqKSAoZGV2LVxcdTAwM2VkZXZfYWRkciArIDApKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6MTM4MzpcXHRSVExfVzMyX0YgKE1BQzAgKyA0LCBsZTE2X3RvX2NwdSAoKihfX2xlMTYgKikgKGRldi1cXHUwMDNlZGV2X2FkZHIgKyA0KSkpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTEzODQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz0yMjIwPXN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMzMtXFx0UlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjIyMzQ6XFx0UlRMX1czMl9GKE1BQzAgKyAwLCBnZXRfdW5hbGlnbmVkX2xlMzIoZGV2LVxcdTAwM2VkZXZfYWRkcikpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjIyMzU6XFx0UlRMX1czMl9GKE1BQzAgKyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVxcdTAwM2VkZXZfYWRkciArIDQpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMjM2LVxcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfTG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQwOjI2LjY0ODUyNDk1OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzE0NjE2MzQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlYnVnZ2luZyB0aGUgUlRMODEzOSBNQUMgQWRkcmVzcyBTZXR0aW5nKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gaG93IHRoZSBSVEw4MTM5IG5ldHdvcmsgaW50ZXJmYWNlIHNldHMgaXRzIE1BQyBhZGRyZXNzLiBJIGtub3cgZnJvbSB0aGUgY29kZSB0aGF0IGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMuIEJ1dCB0aGUgZnVuY3Rpb24gYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBpdHNlbGYgZG9lc24ndCBzZWVtIHRvIGRpcmVjdGx5IGhhbmRsZSB0aGUgTUFDIGFkZHJlc3MgYXNzaWdubWVudCwgaXQgY2FsbHMgYGV0aF9tYWNfYWRkcihkZXYsIHApYCB0byBhY3R1YWxseSBzZXQgdGhlIGFkZHJlc3MuXG5cblNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE1BQyBhZGRyZXNzIGlzIHVsdGltYXRlbHkgYmVpbmcgc2V0LiBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSBleGFtaW5lIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgdG8gZm9sbG93IHRoZSBjYWxsIHRvIGBldGhfbWFjX2FkZHJgIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy4gSSBleHBlY3QgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBpcyBsaWtlbHkgcGFzc2luZyB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIHRvIGBldGhfbWFjX2FkZHJgLCBhbmQgdGhlbiBJJ2xsIG5lZWQgdG8gbG9vayBhdCBob3cgYGV0aF9tYWNfYWRkcmAgYWN0dWFsbHkgaGFuZGxlcyB0aGUgZGV2aWNlIGFuZCBwYWNrZXQgc3RydWN0dXJlIHRvIHNldCB0aGUgYWRkcmVzcy4gSSdtIGhvcGluZyBJIGNhbiB0cmFjZSB0aGlzIHF1aWNrbHkgdG8gaWRlbnRpZnkgdGhlIGlzc3VlIEknbSBjaGFzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ4MiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQwOjQzLjc5NDcwMTQyOFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODk5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjIyMDpcXHRzdGF0aWMgaW50IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXFxuMjIyMTpcXHR7XFxuMjIyMjpcXHRcXHRzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuMjIyMzpcXHRcXHR2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLVxcdTAwM2VtbWlvX2FkZHI7XFxuMjIyNDpcXHRcXHRzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwO1xcbjIyMjU6XFx0XFxuMjIyNjpcXHRcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci1cXHUwMDNlc2FfZGF0YSkpXFxuMjIyNzpcXHRcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuMjIyODpcXHRcXG4yMjI5OlxcdFxcdGV0aF9od19hZGRyX3NldChkZXYsIGFkZHItXFx1MDAzZXNhX2RhdGEpO1xcbjIyMzA6XFx0XFxuMjIzMTpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZ0cC1cXHUwMDNlbG9jayk7XFxuMjIzMjpcXHRcXG4yMjMzOlxcdFxcdFJUTF9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTtcXG4yMjM0OlxcdFxcdFJUTF9XMzJfRihNQUMwICsgMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGRldi1cXHUwMDNlZGV2X2FkZHIpKTtcXG4yMjM1OlxcdFxcdFJUTF9XMzJfRihNQUMwICsgNCwgZ2V0X3VuYWxpZ25lZF9sZTE2KGRldi1cXHUwMDNlZGV2X2FkZHIgKyA0KSk7XFxuMjIzNjpcXHRcXHRSVExfVzhfRihDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spO1xcbjIyMzc6XFx0XFxuMjIzODpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnRwLVxcdTAwM2Vsb2NrKTtcXG4yMjM5OlxcdFxcbjIyNDA6XFx0XFx0cmV0dXJuIDA7XFxuMjI0MTpcXHR9XFxuMjI0MjpcXHRcXG4yMjQzOlxcdHN0YXRpYyBpbnQgcnRsODEzOV9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4yMjQ0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDA6NDMuNzk1MDk2MTU4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMDgzMzQyMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUFDIEFkZHJlc3MgSGFuZGxpbmcgQ29kZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSW5pdGlhbGx5LCB0aGUgY29kZSBoYWQgdGhlc2UgbGluZXM6XG5gYGBjXG5cdFJUTF9XMzJfRihNQUMwICsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtXHUwMDNlZGV2X2FkZHIgKyAwKSkpO1xuXHRSVExfVzMyX0YoTUFDMCArIDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICsgNCkpKTtcbmBgYFxuVGhlIGludGVudGlvbiB3YXMgdG8gd3JpdGUgdGhlIE1BQyBhZGRyZXNzIHRvIGhhcmR3YXJlIHJlZ2lzdGVycy4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHB1bGxpbmcgNCBieXRlcyBmcm9tIGBkZXYtXHUwMDNlZGV2X2FkZHIgKyAwYCBhbmQgYGRldi1cdTAwM2VkZXZfYWRkciArIDRgLiBUaGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMgdGhhdCBgZGV2LVx1MDAzZWRldl9hZGRyYCBpcyBhIHBvaW50ZXIgdG8gYSAzMi1ieXRlIGFycmF5IGluaXRpYWxpemVkIHRvIHplcm8uIFNvIHdoZW4gcmVhZGluZyBmcm9tIGBkZXYtXHUwMDNlZGV2X2FkZHIgKyA0YCwgd2UncmUgcmVhZGluZyBieXRlcyA0LCA1LCA2LCBhbmQgNywgYW5kIGJ5dGVzIDYgYW5kIDcgd291bGQgYWx3YXlzIGJlIHplcm8uIEhvd2V2ZXIsIGBNQUMwICsgNGAgaXMgYSAzMi1iaXQgcmVnaXN0ZXIsIGFuZCB3ZSdyZSB3cml0aW5nIGEgMzItYml0IHZhbHVlIHRvIGl0LlxuXG5UaGUgbWFpbiBpc3N1ZSBJIHNlZSBoZXJlIGlzIHRoZSAqcG90ZW50aWFsKiBmb3IgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MuIFRoZSBvbGQgY29kZSB3YXMgZG9pbmcgYW4gdW5hbGlnbmVkIHJlYWQgb2YgYSBgdTMyYCBmcm9tIGEgbWVtb3J5IGxvY2F0aW9uIHdoaWNoIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIDQtYnl0ZSBhbGlnbmVkLiBPbiBhcmNoaXRlY3R1cmVzIHdoZXJlIHVuYWxpZ25lZCBhY2Nlc3NlcyBhcmUgbm90IGhhbmRsZWQgZ3JhY2VmdWxseSwgdGhpcyB3b3VsZCBsZWFkIHRvIGV4Y2VwdGlvbnMgb3IgY3Jhc2hlcy4gVGhlIHBhdGNoJ3MgZml4IGludm9sdmVzIHJlcGxhY2luZyB0aGUgY29kZSB3aXRoOlxuYGBgY1xuXHRSVExfVzMyX0YoTUFDMCArIDAsIGdldF91bmFsaWduZWRfbGUzMihkZXYtXHUwMDNlZGV2X2FkZHIpKTtcblx0UlRMX1czMl9GKE1BQzAgKyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVx1MDAzZWRldl9hZGRyICsgNCkpO1xuYGBgXG5Ob3csIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCBhcmUgdXNlZC4gVGhlIHNlY29uZCBsaW5lIG5vdyByZWFkcyBvbmx5IDIgYnl0ZXMgYW5kIHRoZW4gemVyby1leHRlbmRzIGl0IHRvIDMyIGJpdHMsIHdoaWNoIGlzIGZpbmUgc2luY2UgYnl0ZXMgNiBhbmQgNyBmcm9tIHRoZSBwcmV2aW91cyBjb2RlIHdlcmUgYWx3YXlzIHplcm9zIGFueXdheS5cblxuTGV0J3MgdHJhY2UgYGRldi1cdTAwM2VkZXZfYWRkcmAuIFRoaXMgcG9pbnRlciBhY3R1YWxseSBwb2ludHMgdG8gYGhhLVx1MDAzZWFkZHJgLCBhbmQgYGhhYCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AuIFRoZSBgaGEtXHUwMDNlYWRkcmAgbG9jYXRpb24gY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgYG5ldGRldl9od19hZGRyYCBzdHJ1Y3Q6XG5gYGBjXG5zdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIge1xuXHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0OyAvLyAxNiBieXRlc1xuXHRzdHJ1Y3QgcmJfbm9kZVx0XHRub2RlOyAvLyAyNCBieXRlc1xuXHR1bnNpZ25lZCBjaGFyXHRcdGFkZHJbTUFYX0FERFJfTEVOXTsgLy8gMzIgYnl0ZXNcbi4uLlxuYGBgXG5gYWRkcmAgc3RhcnRzIGF0IGFuIG9mZnNldCBvZiA0MCAoMTYgKyAyNCksIHdoaWNoIG1lYW5zIGl0J3MgOC1ieXRlIGFsaWduZWQgb24gYSA2NC1iaXQgYXJjaGl0ZWN0dXJlLiBUaGVyZWZvcmUsIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIDgtYnl0ZSBhbGlnbmVkLCB3aGljaCBtZWFucyBgZGV2LVx1MDAzZWRldl9hZGRyICsgNGAgaXMgNC1ieXRlIGFsaWduZWQuIFNvLCB0aGUgb3JpZ2luYWwgY29kZSAqd2FzKiA0LWJ5dGUgYWxpZ25lZC4gU28sIHdoeSB0aGUgY2hhbmdlP1xuXG5UaGUgcmVhc29uIGNvdWxkIGJlIGFib3V0IHN0cmljdCBhbGlhc2luZywgYW5kIHBvc3NpYmx5IHNvbWUgdG9vbHMgYXJlIGZsYWdnaW5nIGl0IGFzIHVuZGVmaW5lZCBiZWhhdmlvci4gQWxzbywgdGhlcmUgbWlnaHQgYmUgb3RoZXIgaW1wbGVtZW50YXRpb25zIHdoZXJlIHRoZSBhbGlnbm1lbnQgaXMgbm90IGd1YXJhbnRlZWQuXG5cbkJ1dCBoZXJlJ3MgYSBjcnVjaWFsIHBvaW50OiBUaGUgb2xkIGNvZGUgdXNlcyBgY3B1X3RvX2xlMzJgLiBUaGUgb3JpZ2luYWwgY29kZSByZWFkcyBieXRlcyBhcyBhIGB1MzJgLiBJZiB0aGUgTUFDIGFkZHJlc3MgaXMgYDAwOjExOjIyOjMzOjQ0OjU1YCwgYSBsaXR0bGUtZW5kaWFuIG1hY2hpbmUgd291bGQgcmVhZCBgMHgzMzIyMTEwMGAsIHdoaWNoIHRoZSBmdW5jdGlvbiBjb252ZXJ0cyB0byB0aGUgc2FtZSB2YWx1ZSBgMHgzMzIyMTEwMGAuIE9uIGEgYmlnLWVuZGlhbiBtYWNoaW5lLCB0aGUgcmVhZCB3b3VsZCBiZSBgMHgwMDExMjIzM2AsIHdoaWNoIGdldHMgY29udmVydGVkIHRvIGAweDMzMjIxMTAwYC4gVGhlcmVmb3JlLCBpdCAqc2VlbXMqIHRoYXQgYGNwdV90b19sZTMyYCBoYW5kbGVzIHRoZSBieXRlIG9yZGVyIGNvcnJlY3RseSBvbiBib3RoIGFyY2hpdGVjdHVyZXMuIEJ1dCBsZXQncyB2ZXJpZnkgaG93IGBSVExfVzMyX0ZgIGl0c2VsZiB3b3JrcywgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMjEsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDE6MDMuODc4NDQzMTQ0WiIsIlNlcSI6NDksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzY0NDM1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIFJUTF9XMzJfRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz02NjA9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTM5X2V0aHRvb2xfb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtNjY1LSNkZWZpbmUgUlRMX1cxNl9GKHJlZywgdmFsMTYpXFx0ZG8geyBpb3dyaXRlMTYgKCh2YWwxNiksIGlvYWRkciArIChyZWcpKTsgaW9yZWFkMTYgKGlvYWRkciArIChyZWcpKTsgfSB3aGlsZSAoMClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo2NjY6I2RlZmluZSBSVExfVzMyX0YocmVnLCB2YWwzMilcXHRkbyB7IGlvd3JpdGUzMiAoKHZhbDMyKSwgaW9hZGRyICsgKHJlZykpOyBpb3JlYWQzMiAoaW9hZGRyICsgKHJlZykpOyB9IHdoaWxlICgwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTY2Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDE6MDMuOTU2MDk0MzkzWiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MDE2OTQ3OTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCeXRlIE9yZGVyIGFuZCBNZW1vcnkgQWNjZXNzIGluIFBDSSBCdXMgV3JpdGVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgYGlvd3JpdGUzMmAgdGFrZXMgYSBgdTMyYCBpbiBDUFUgYnl0ZSBvcmRlciBhbmQgd3JpdGVzIGl0IGFzIGxpdHRsZS1lbmRpYW4gdG8gdGhlIFBDSSBidXMuICBTbywgd2hhdGV2ZXIgSSBwYXNzIGl0LCBgdmFsMzJgLCBuZWVkcyB0byBiZSBpbiBDUFUgYnl0ZSBvcmRlciwgZ290IGl0LlxuXG5UaGUgb2xkIGNvZGUgd2FzIGRvaW5nOiBgUlRMX1czMl9GKE1BQzAgKyAwLCBjcHVfdG9fbGUzMiAoKih1MzIgKikgKGRldi1cdTAwM2VkZXZfYWRkciArIDApKSk7YC4gIEhhbmcgb24uLi4gYGNwdV90b19sZTMyYCByZXR1cm5zIGEgYF9fbGUzMmAsIHdoaWNoIGlzICphbHJlYWR5KiBsaXR0bGUtZW5kaWFuLiBQYXNzaW5nIHRoYXQgZGlyZWN0bHkgdG8gYGlvd3JpdGUzMmAgaXMgbGlrZWx5IGEgcHJvYmxlbSBvbiBiaWctZW5kaWFuIG1hY2hpbmVzISBMZXQncyB0cmFjZSBpdCB0aHJvdWdoOlxuXG5PbiBhIGJpZy1lbmRpYW4gbWFjaGluZSwgaWYgYCoodTMyICopZGV2LVx1MDAzZWRldl9hZGRyYCBpcyBgMHgwMDExMjIzM2AsIHRoZW4gYGNwdV90b19sZTMyKDB4MDAxMTIyMzMpYCBiZWNvbWVzIGAweDMzMjIxMTAwYCAod2hpY2ggaXMgYSBgX19sZTMyYCkuIFRoZW4gYGlvd3JpdGUzMigweDMzMjIxMTAwKWAgKnN3YXBzKiBpdCBiYWNrIHRvIGAweDAwMTEyMjMzYCBvbiB0aGUgYnVzLiBUaGlzIG1lYW5zIHRoZSBidXMgKnNlZXMqIGAwMCAxMSAyMiAzM2AgaW4gbWVtb3J5IG9yZGVyISBJcyB0aGF0IHJpZ2h0PyBEbyBJIHJlbWVtYmVyIHRoZSBoYXJkd2FyZSBleHBlY3RhdGlvbnMgY29ycmVjdGx5PyBZZXMsIHRoZSBoYXJkd2FyZSAqZXhwZWN0cyogdGhlIE1BQyBhZGRyZXNzIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIsIHNvIGAwMCAxMSAyMiAzM2AgaXMgdGhlIGNvcnJlY3QgbGl0dGxlLWVuZGlhbiBvcmRlciB0aGF0IG5lZWRzIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGJ1cy5cblxuQnV0IHdoYXQgYWJvdXQgYSBsaXR0bGUtZW5kaWFuIG1hY2hpbmU/IElmIGAqKHUzMiAqKWRldi1cdTAwM2VkZXZfYWRkcmAgaXMgYDB4MzMyMjExMDBgLCB0aGVuIGBjcHVfdG9fbGUzMigweDMzMjIxMTAwKWAgaXMgc3RpbGwgYDB4MzMyMjExMDBgLiBBbmQgYGlvd3JpdGUzMigweDMzMjIxMTAwKWAgd3JpdGVzIGAweDMzMjIxMTAwYCB0byB0aGUgYnVzLCB3aGljaCBpbiBsaXR0bGUtZW5kaWFuIG1lbW9yeSBvcmRlciBpcyBgMDAgMTEgMjIgMzNgLiBTbyBpdCBhY3R1YWxseSB3b3JrcyFcblxuU28gdGhlIG9sZCBjb2RlIHdhcyBjb3JyZWN0IG9uIGJvdGggYXJjaGl0ZWN0dXJlcywgKmJ1dCogaXQgdXNlZCBgY3B1X3RvX2xlMzJgIGFuZCBgaW93cml0ZTMyYCBpbmNvcnJlY3RseSwgbGVhZGluZyB0byBTcGFyc2Ugd2FybmluZ3MgKGJlY2F1c2UgYGlvd3JpdGUzMmAgd2FudHMgYSBgdTMyYCwgbm90IGEgYF9fbGUzMmApLiBUaGUgcHJvcGVyIHNvbHV0aW9uIHRvIHNpbGVuY2UgdGhlIHdhcm5pbmdzIGlzIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYC5cblxuYGdldF91bmFsaWduZWRfbGUzMihkZXYtXHUwMDNlZGV2X2FkZHIpYCByZWFkcyBmb3VyIGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0IGZyb20gdGhlIHByb3ZpZGVkIGFkZHJlc3MgYW5kIHJldHVybnMgdGhlbSBhcyBhIGB1MzJgIGluIHRoZSAqQ1BVJ3MqIG5hdGl2ZSBieXRlIG9yZGVyLiBUaGVuLCB3aGVuIEkgd3JpdGUgdGhpcyByZXN1bHQgd2l0aCBgaW93cml0ZTMyYCAod2hpY2ggZXhwZWN0cyBhIENQVS1uYXRpdmUgYnl0ZSBvcmRlciBhbmQgd3JpdGVzIGluIGxpdHRsZS1lbmRpYW4pLCBJIGdldCB0aGUgY29ycmVjdCB2YWx1ZSBvbiB0aGUgYnVzLiBMZXQncyB0cmFjZSBhZ2Fpbi4uLlxuXG5PbiBMRTogYGdldF91bmFsaWduZWRfbGUzMmAgcmVhZHMgYDB4MzMyMjExMDBgLCBhbmQgcmV0dXJucyBgMHgzMzIyMTEwMGAuIFRoZW4gYGlvd3JpdGUzMigweDMzMjIxMTAwKWAgd3JpdGVzIGAwMCAxMSAyMiAzM2AgdG8gdGhlIGJ1cy4gT24gQkU6IGBnZXRfdW5hbGlnbmVkX2xlMzJgIHJlYWRzIGAwMCAxMSAyMiAzM2AsIGFuZCByZXR1cm5zIGAweDMzMjIxMTAwYC4gIFRoZW4gYGlvd3JpdGUzMigweDMzMjIxMTAwKWAgc3dhcHMgaXQgdG8gYDB4MDAxMTIyMzNgICh3aGljaCBpbiBtZW1vcnkgb3JkZXIgaXMgYDAwIDExIDIyIDMzYCkgb24gdGhlIGJ1cy4gIFNvIGl0IHdvcmtzISBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBjb252ZXJ0cyBsaXR0bGUgZW5kaWFuIHRvIENQVSBieXRlIG9yZGVyLiBUaGF0J3MgdGhlIGNvcnJlY3QgYXBwcm9hY2guXG5cbkJ1dCBub3csIHdoYXQgYWJvdXQgdGhlIG5leHQgbGluZT8gVGhlIG9yaWdpbmFsIGNvZGUgc2FpZDogYFJUTF9XMzJfRihNQUMwICsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtXHUwMDNlZGV2X2FkZHIgKyA0KSkpO2AsIGJ1dCB0aGUgY29kZSB3YXMgY2hhbmdlZCB0byBgUlRMX1czMl9GKE1BQzAgKyA0LCBnZXRfdW5hbGlnbmVkX2xlMTYoZGV2LVx1MDAzZWRldl9hZGRyICsgNCkpO2AuIFdoeSBkaWQgdGhleSB1c2UgYGdldF91bmFsaWduZWRfbGUxNmAgaW5zdGVhZCBvZiBgZ2V0X3VuYWxpZ25lZFxuXG4iLCJJbnB1dFRva2VucyI6MjMyMDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQxOjIwLjk3MzA0NDc1OFoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY4MDpcXHR7XFxuIDY4MTpcXHRcXHR1bnNpZ25lZCBjaGFyIGFkZHJbTUFYX0FERFJfTEVOXTtcXG4gNjgyOlxcdFxcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XFxuIDY4MzpcXHRcXHRpbnQgZXJyO1xcbiA2ODQ6XFx0XFxuIDY4NTpcXHRcXHQvKiBydG5sX211dGV4IG11c3QgYmUgaGVsZCBoZXJlICovXFxuIDY4NjpcXHRcXG4gNjg3OlxcdFxcdF9faHdfYWRkcl9pbml0KFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycyk7XFxuIDY4ODpcXHRcXHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcXG4gNjg5OlxcdFxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBzaXplb2YoYWRkciksXFxuIDY5MDpcXHRcXHRcXHRcXHQgICAgTkVUREVWX0hXX0FERFJfVF9MQU4pO1xcbiA2OTE6XFx0XFx0aWYgKCFlcnIpIHtcXG4gNjkyOlxcdFxcdFxcdC8qXFxuIDY5MzpcXHRcXHRcXHQgKiBHZXQgdGhlIGZpcnN0IChwcmV2aW91c2x5IGNyZWF0ZWQpIGFkZHJlc3MgZnJvbSB0aGUgbGlzdFxcbiA2OTQ6XFx0XFx0XFx0ICogYW5kIHNldCBkZXZfYWRkciBwb2ludGVyIHRvIHRoaXMgbG9jYXRpb24uXFxuIDY5NTpcXHRcXHRcXHQgKi9cXG4gNjk2OlxcdFxcdFxcdGhhID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfYWRkcnMubGlzdCxcXG4gNjk3OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbGlzdCk7XFxuIDY5ODpcXHRcXHRcXHRkZXYtXFx1MDAzZWRldl9hZGRyID0gaGEtXFx1MDAzZWFkZHI7XFxuIDY5OTpcXHRcXHR9XFxuIDcwMDpcXHRcXHRyZXR1cm4gZXJyO1xcbiA3MDE6XFx0fVxcbiA3MDI6XFx0XFxuIDcwMzpcXHR2b2lkIGRldl9hZGRyX21vZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxcbiA3MDQ6XFx0XFx0XFx0ICBjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MToyMC45NzMxMzg5NzhaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2MTc4Mzk2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzdGVwLWJ5LXN0ZXAuIEknbSBsb29raW5nIGF0IHRoaXMgYG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpYCBsaW5lLiBUaGUgaW50ZW50IGlzIGNsZWFyOiB6ZXJvIG91dCB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYGFkZHJgLiBUaGUgaW50ZXJlc3RpbmcgZGV0YWlsIGhlcmUsIGFzIEkgc2VlIGl0LCBpcyB0aGUgc2l6ZSBiZWluZyB6ZXJvZWQuIGBzaXplb2YoYWRkcilgIGV2YWx1YXRlcyB0byBgTUFYX0FERFJfTEVOYCwgd2hpY2ggd2Uga25vdyBpcyAzMi4gU28sIHdlJ3JlIGV4cGxpY2l0bHkgemVyb2luZyAzMiBieXRlcyBvZiBtZW1vcnksIHByZXN1bWFibHkgdG8gaW5pdGlhbGl6ZSBgYWRkcmAuIFRoYXQgbWFrZXMgc2Vuc2UsIGxheWluZyBhIGNsZWFuIGZvdW5kYXRpb24gYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggdGhlIGFkZHJlc3MgZGF0YS5cblxuTm93LCBpbW1lZGlhdGVseSBhZnRlciB0aGlzIHplcm9pbmcgb3BlcmF0aW9uLCBgX19od19hZGRyX2FkZGAgaXMgYmVpbmcgaW52b2tlZCwgYW5kIGl0J3MgYmVpbmcgcGFzc2VkIHRoZSBgYWRkcmAgYW5kIGFuIGBhZGRyX2xlbmAgb2YgMzIuIFRoaXMgcHJvbXB0cyBhIHRob3JvdWdoIGluc3BlY3Rpb24gb2YgYF9faHdfYWRkcl9hZGRgLiBUaGUgemVyb2luZyBzdWdnZXN0cyBpdCdzIGEgcHJlLWVtcHRpdmUgbWVtb3J5IGNsZWFyaW5nIGZvciB0aGlzIGZ1bmN0aW9uLiBJcyBpdCBleHBlY3RpbmcgYSBmdWxseSBjbGVhcmVkIGJ1ZmZlciwgb3IgaXMgaXQgZ29pbmcgdG8gd3JpdGUgaW50byBpdD8gRWl0aGVyIHdheSwgdGhlIHByZWNlZGluZyBgbWVtc2V0YCBwcm92aWRlcyBhIGtub3duIHN0YXJ0aW5nIHN0YXRlIGFuZCBnaXZlcyB1cyB0aGUgY2FwYWJpbGl0eSB0byBrbm93IHdoYXQgc3RhdGUgdGhlIGJ1ZmZlciBpcy4gVGltZSB0byBkaWcgaW50byB0aGUgaW50ZXJuYWxzIG9mIGBfX2h3X2FkZHJfYWRkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU4NjYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQxOjI1LjczNDkyNjYxMloiLCJTZXEiOjUzLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NjkxNjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9faHdfYWRkcl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTUzPV9faHdfYWRkcl9jcmVhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGFkZHJfbGVuLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03NC1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjc1OnN0YXRpYyBpbnQgX19od19hZGRyX2FkZF9leChzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJfbGlzdCAqbGlzdCxcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc2LVxcdFxcdFxcdCAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW4sXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTEzMi1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzMzpzdGF0aWMgaW50IF9faHdfYWRkcl9hZGQoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKmxpc3QsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzQtXFx0XFx0XFx0IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtMTM2LXtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjEzNzpcXHRyZXR1cm4gX19od19hZGRyX2FkZF9leChsaXN0LCBhZGRyLCBhZGRyX2xlbiwgYWRkcl90eXBlLCBmYWxzZSwgZmFsc2UsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0xMzgtXFx0XFx0XFx0XFx0MCwgZmFsc2UpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz0yMTI9c3RhdGljIGludCBfX2h3X2FkZHJfc3luY19vbmUoc3RydWN0IG5ldGRldl9od19hZGRyX2xpc3QgKnRvX2xpc3QsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTIxNy1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjIxODpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkX2V4KHRvX2xpc3QsIGhhLVxcdTAwM2VhZGRyLCBhZGRyX2xlbiwgaGEtXFx1MDAzZXR5cGUsXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy0yMTktXFx0XFx0XFx0ICAgICAgIGZhbHNlLCB0cnVlLCBoYS1cXHUwMDNlc3luY19jbnQsIGZhbHNlKTtcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9Njc5PWludCBkZXZfYWRkcl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY4OC1cXHRtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY4OTpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycywgYWRkciwgc2l6ZW9mKGFkZHIpLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjkwLVxcdFxcdFxcdCAgICBORVRERVZfSFdfQUREUl9UX0xBTik7XFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTcyOT1pbnQgZGV2X2FkZHJfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTczOC1cXHRcXHRyZXR1cm4gZXJyO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6NzM5OlxcdGVyciA9IF9faHdfYWRkcl9hZGQoXFx1MDAyNmRldi1cXHUwMDNlZGV2X2FkZHJzLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLCBhZGRyX3R5cGUpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNzQwLVxcdGlmICghZXJyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz03OTI9aW50IGRldl91Y19hZGRfZXhjbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy03OTYtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo3OTc6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2V1YywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTc5OC1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9VTklDQVNULCB0cnVlLCBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM9ODE1PWludCBkZXZfdWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTgxOS1cXHRuZXRpZl9hZGRyX2xvY2tfYmgoZGV2KTtcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjgyMDpcXHRlcnIgPSBfX2h3X2FkZHJfYWRkKFxcdTAwMjZkZXYtXFx1MDAzZXVjLCBhZGRyLCBkZXYtXFx1MDAzZWFkZHJfbGVuLFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtODIxLVxcdFxcdFxcdCAgICBORVRERVZfSFdfQUREUl9UX1VOSUNBU1QpO1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05Nzc9aW50IGRldl9tY19hZGRfZXhjbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05ODEtXFx0bmV0aWZfYWRkcl9sb2NrX2JoKGRldik7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo5ODI6XFx0ZXJyID0gX19od19hZGRyX2FkZF9leChcXHUwMDI2ZGV2LVxcdTAwM2VtYywgYWRkciwgZGV2LVxcdTAwM2VhZGRyX2xlbixcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTk4My1cXHRcXHRcXHQgICAgICAgTkVUREVWX0hXX0FERFJfVF9NVUxUSUNBU1QsIHRydWUsIGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz05OTI9c3RhdGljIGludCBfX2Rldl9tY19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcixcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtOTk3LVxcdG5ldGlmX2FkZHJfbG9ja19iaChkZXYpO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmM6OTk4OlxcdGVyciA9IF9faHdfYWRkcl9hZGRfZXgoXFx1MDAyNmRldi1cXHUwMDNlbWMsIGFkZHIsIGRldi1cXHUwMDNlYWRkcl9sZW4sXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy05OTktXFx0XFx0XFx0ICAgICAgIE5FVERFVl9IV19BRERSX1RfTVVMVElDQVNULCBnbG9iYWwsIGZhbHNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MToyNS44NDI2MjM1NjNaIiwiU2VxIjo1NCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA4NTYwNzMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhhcmR3YXJlIEFkZHJlc3MgQ3JlYXRpb24gUHJvY2VzcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBfX2h3X2FkZHJfYWRkX2V4YCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGhhcmR3YXJlIGFkZHJlc3NlcyBhcmUgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSBpdCBjYWxscyBgX19od19hZGRyX2NyZWF0ZWAuIE5vdywgaW5zaWRlIGBfX2h3X2FkZHJfY3JlYXRlYCwgdGhlIGNvZGUgYWxsb2NhdGVzIG1lbW9yeSB1c2luZyBga21hbGxvY2AgYW5kIHRoZW4gdXNlcyBgbWVtY3B5YCB0byBjb3B5IHRoZSBoYXJkd2FyZSBhZGRyZXNzIGRhdGEuIFRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGF0IGBhZGRyX2xlbmAgaXMgMzIgYnl0ZXMsIGFzIGRldGVybWluZWQgZWFybGllciBieSBgZGV2X2FkZHJfaW5pdGAsIGFuZCB0aGUgc291cmNlIGBhZGRyYCBpcyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MuIFNvLCB0aGF0IG1lYW5zIHRoZSBgaGEtXHUwMDNlYWRkcmAgZmllbGQgd2l0aGluIHRoZSBuZXdseSBjcmVhdGVkIGhhcmR3YXJlIGFkZHJlc3Mgc3RydWN0dXJlIGlzICpndWFyYW50ZWVkKiB0byBiZSB6ZXJvZWQgb3V0IGFmdGVyIHRoZSBgbWVtY3B5YC5cblxuVGhlcmVmb3JlLCB0aGUgaW5pdGlhbCBoeXBvdGhlc2lzIHRoYXQgdGhlIHJlYWQgb2YgYnl0ZXMgNiBhbmQgNyBvZiBgZGV2LVx1MDAzZWRldl9hZGRyYCBjb3VsZCBjYXVzZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIGlzIGluY29ycmVjdDsgdGhlIHJlc3VsdGluZyB2YWx1ZXMgc2hvdWxkIGJlIHplcm8uIEl0J3Mgbm90IGEgbWVtb3J5IHNhZmV0eSB2aW9sYXRpb24uIFRoYXQncyBhIHJlbGllZiFcblxuQnV0IHdhaXQuLi4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXMgdGhlcmUgYW5vdGhlciBwb3NzaWJpbGl0eT8gQ291bGQgYGRldi1cdTAwM2VkZXZfYWRkcmAgYmUgb3ZlcndyaXR0ZW4gYnkgYSBkcml2ZXIgYXQgYSBsYXRlciBwb2ludD8gSXQncyBwb3NzaWJsZSBhIGRyaXZlciBtaWdodCBhc3NpZ24gaXRzIG93biBidWZmZXIgdG8gYGRldi1cdTAwM2VkZXZfYWRkcmAsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBhbiBpc3N1ZS4gVGltZSB0byBjaGVjayB0aGUgY29kZWJhc2UgYW5kIHNlYXJjaCBmb3IgYW55IGluc3RhbmNlcyB3aGVyZSBgZGV2LVx1MDAzZWRldl9hZGRyYCBpcyBkaXJlY3RseSBhc3NpZ25lZCBhIG5ldyB2YWx1ZS4gR290dGEgcnVsZSBvdXQgdGhhdCBwb3RlbnRpYWwgc2NlbmFyaW8uIEdvdHRhIGtlZXAgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc1NDIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDE6MzMuOTI4MjM0MzQ1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDg3NzgxMzcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldi1cXHUwMDNlZGV2X2FkZHIgPVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQxOjM0LjE3NzAyMzY1MloiLCJTZXEiOjU2LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTM5NjgxOTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBOZXR3b3JrIERldmljZSBBZGRyZXNzIEhhbmRsaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBpc3N1ZSByZXZvbHZlcyBhcm91bmQgaG93IHRoZSBNQUMgYWRkcmVzcyBpcyByZWFkIGFuZCB3cml0dGVuIHRvIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMsIHNwZWNpZmljYWxseSBjb25zaWRlcmluZyBhbGlnbm1lbnQgYW5kIGVuZGlhbm5lc3MuIEluaXRpYWxseSwgSSB0aG91Z2h0IHRoYXQgdGhlIGNoYW5nZSBmcm9tIGRpcmVjdCBjYXN0aW5nIGFuZCBkZXJlZmVyZW5jaW5nIChgKih1MzIgKilkZXYtXHUwMDNlZGV2X2FkZHJgKSB0byB1c2luZyBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgd2FzIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBidXQgdGhhdCdzIG5vdCBpdC4gYGRldi1cdTAwM2VkZXZfYWRkcmAgKmFsd2F5cyogcG9pbnRzIHRvIGEgMzItYnl0ZSByZWdpb24sIHplcm8taW5pdGlhbGl6ZWQsIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBhcmUgY2FyZWZ1bGx5IGNvbnRyb2xsZWQgdGhyb3VnaCBgZXRoX2h3X2FkZHJfc2V0YCBvciBgZGV2X2FkZHJfbW9kYCwgc28gdGhlIHBhZGRpbmcgYnl0ZXMgYmV5b25kIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MgYXJlIGFsd2F5cyB6ZXJvLiBBbHNvLCBpdCdzIGFsd2F5cyA0LWJ5dGUgYWxpZ25lZCBvbiBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHNvIGFsaWdubWVudCB3YXNuJ3QgdGhlIGlzc3VlLCB3aGljaCBpbml0aWFsbHkgc3VycHJpc2VkIG1lLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBzZWVtcyB0byBiZSBlbmRpYW5uZXNzIGFuZCBzdHJpY3QgYWxpYXNpbmcuIENhc3RpbmcgYHVuc2lnbmVkIGNoYXIgKmAgdG8gYHUzMiAqYCBpcyBhIHN0cmljdCBhbGlhc2luZyB2aW9sYXRpb24uIEFsc28sIGRlcmVmZXJlbmNpbmcgdGhlIGNhc3QgYHUzMiAqYCBtaWdodCBub3Qgd29yayBjb3JyZWN0bHkgb24gYmlnLWVuZGlhbiBhcmNoaXRlY3R1cmVzLlxuXG5PbiBMaXR0bGUgRW5kaWFuLCB0aGUgb2xkIGNvZGUgd29ya2VkIGFzIGV4cGVjdGVkLiBIb3dldmVyLCBvbiBCaWcgRW5kaWFuLCB0aGUgb2xkIGNvZGUgKndhcyogc3VidGx5IGJyb2tlbi4gTGV0J3MgdHJhY2UgaXQuXG5PbiBCaWcgRW5kaWFuLCBgKih1MzIgKilkZXYtXHUwMDNlZGV2X2FkZHJgIHdvdWxkIHJlYWQgdGhlIGJ5dGVzIGluIHRoZSB3cm9uZyBvcmRlci4gIGBjcHVfdG9fbGUzMmAgd291bGQgZml4IHRoZSBieXRlIG9yZGVyLCBidXQgdGhlbiBgaW93cml0ZTMyYCAob3IgYF9fcmF3X3dyaXRlbGAgYWZ0ZXIgYXBwbHlpbmcgYGNwdV90b19sZTMyYCkgd291bGQgc3dhcCB0aGUgYnl0ZXMgKmFnYWluKiBkdWUgdG8gdGhlIGV4cGVjdGVkIG5hdGl2ZSBlbmRpYW5uZXNzIG9mIGBpb3dyaXRlMzJgLiBUaGF0IHdvdWxkIHRoZW4gd3JpdGUgYSBNQUMgYWRkcmVzcyBpbiB0aGUgd3Jvbmcgb3JkZXIuIFRoaXMgd291bGQgd3JpdGUgTUFDIGFkZHJlc3MgYnl0ZXMgaW4gcmV2ZXJzZWQgYnl0ZSBvcmRlciBvbiBCaWcgRW5kaWFuIG1hY2hpbmVzLiBgZ2V0X3VuYWxpZ25lZF9sZTMyYCByZWFkcyBhIGxpdHRsZS1lbmRpYW4gMzItYml0IHZhbHVlIGluIG1lbW9yeSBhbmQgcmV0dXJucyBpdCBhcyBhIENQVS1lbmRpYW4gdmFsdWUuIFRoaXMgd2lsbCByZXNvbHZlIHRoZSBlcnJvci5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggbGlrZWx5IGZpeGVzIHRoZSBlbmRpYW5uZXNzIGlzc3VlLiBBZGRpdGlvbmFsbHksIGl0IHJlc29sdmVzIHRoZSBzdHJpY3QgYWxpYXNpbmcgYW5kIHBvdGVudGlhbGx5IGFuIHVuYWxpZ25lZCBhY2Nlc3Mgd2FybmluZyAoZXZlbiB0aG91Z2ggaW4gcHJhY3RpY2UgaXQgaXMgYWxpZ25lZCkuIFRoZSBjaGFuZ2UgdG8gYGdldF91bmFsaWduZWRfbGUxNmAgZm9yIHRoZSBzZWNvbmQgcGFydCBpcyBiZWNhdXNlIHJlYWRpbmcgYnl0ZXMgNiBhbmQgNyAob3V0c2lkZSBvZiB0aGUgNi1ieXRlIE1BQykgaXMgdW5kZXNpcmFibGUgZnJvbSBhIGNvZGUgc2FmZXR5IHBlcnNwZWN0aXZlLiBFdmVuIHRob3VnaCB0aGVzZSBieXRlcyBhcmUgYWx3YXlzIDAsIHJlYWRpbmcgdGhlbSBpcyBub3QgaWRlYWwuIEl0J3Mgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYmVjYXVzZSB0aGV5IGFyZSB6ZXJvZWQgYW5kIGV4aXN0IGluIGFsbG9jYXRlZCBtZW1vcnkuIFRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBhIGdvb2QtcHJhY3RpY2UgZml4IGZvciBlbmRpYW5uZXNzLCBzdHJpY3QgYWxpYXNpbmcsIGFuZCB0byBhdm9pZCByZWFkaW5nIG1lbW9yeSB0aGF0J3MgY29uY2VwdHVhbGx5IG91dC1vZi1ib3VuZHMuIEFsc28sIEtNU0FOIGFuZCBvdGhlciBtZW1vcnkgc2FuaXRpemVycyB3b24ndCBjb21wbGFpbiBiZWNhdXNlIG9mIHRoZSB6ZXJvaW5nIGluIGBkZXZfYWRkcl9pbml0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxMzcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDEzOjQyOjE1LjU3Mzg0NjMwN1oiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQxMjkzMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X2FkZHJfZmx1c2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jPTY0Mj12b2lkIGRldl9hZGRyX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY1My0vKipcXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY1NDogKlxcdGRldl9hZGRyX2ZsdXNoIC0gRmx1c2ggZGV2aWNlIGFkZHJlc3MgbGlzdFxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjU1LSAqXFx0QGRldjogZGV2aWNlXFxuLS1cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jLTY2MC0gKi9cXG5uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jOjY2MTp2b2lkIGRldl9hZGRyX2ZsdXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MjoxNS42NTc5ODI0MjVaIiwiU2VxIjo1OCwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ0MzMzNDM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBgZGV2X2FkZHJfZmx1c2hgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIGNvZGUgaW5kaWNhdGVzIHdlJ3JlIGFib3V0IHRvIGV4YW1pbmUgYGRldl9hZGRyX2ZsdXNoYC4gSnVzdCB0aGUgbmFtZSBpdHNlbGYgaGludHMgYXQgc29tZSBzb3J0IG9mIGZsdXNoaW5nIG9wZXJhdGlvbiByZWxhdGVkIHRvIGRldmljZSBhZGRyZXNzZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkgY2FuIGltbWVkaWF0ZWx5IHN0YXJ0IGh5cG90aGVzaXppbmcg4oCTIGlzIHRoaXMgcmVsYXRlZCB0byBBUlAgY2FjaGUgaW52YWxpZGF0aW9uPyBQZXJoYXBzIHNvbWV0aGluZyBpbiB0aGUgY29udGV4dCBvZiBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9uIGNoYW5nZXM/IE9yIG1heWJlIGV2ZW4gbW9yZSBmdW5kYW1lbnRhbCwgbGlrZSBjbGVhcmluZyBzdGFsZSBlbnRyaWVzIGluIGEgaGFyZHdhcmUgYWRkcmVzcyB0YWJsZT8gSSdsbCBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCB0byBmb3JtIGEgcHJvcGVyIGh5cG90aGVzaXMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0byBxdWlja2x5IGZvcm0gYSBtZW50YWwgY2hlY2tsaXN0IG9mIHJlbGF0ZWQgYXJlYXMgbGlrZSBkcml2ZXIgYXJjaGl0ZWN0dXJlLCBuZXR3b3JraW5nIHByb3RvY29scywgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LiBMZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDI6MjEuMTAxMzIyMjMyWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1NCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY1NDpcXHQgKlxcdGRldl9hZGRyX2ZsdXNoIC0gRmx1c2ggZGV2aWNlIGFkZHJlc3MgbGlzdFxcbiA2NTU6XFx0ICpcXHRAZGV2OiBkZXZpY2VcXG4gNjU2OlxcdCAqXFxuIDY1NzpcXHQgKlxcdEZsdXNoIGRldmljZSBhZGRyZXNzIGxpc3QgYW5kIHJlc2V0IC1cXHUwMDNlZGV2X2FkZHIuXFxuIDY1ODpcXHQgKlxcbiA2NTk6XFx0ICpcXHRUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgcnRubF9tdXRleC5cXG4gNjYwOlxcdCAqL1xcbiA2NjE6XFx0dm9pZCBkZXZfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiA2NjI6XFx0e1xcbiA2NjM6XFx0XFx0LyogcnRubF9tdXRleCBtdXN0IGJlIGhlbGQgaGVyZSAqL1xcbiA2NjQ6XFx0XFx0ZGV2X2FkZHJfY2hlY2soZGV2KTtcXG4gNjY1OlxcdFxcbiA2NjY6XFx0XFx0X19od19hZGRyX2ZsdXNoKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycyk7XFxuIDY2NzpcXHRcXHRkZXYtXFx1MDAzZWRldl9hZGRyID0gTlVMTDtcXG4gNjY4OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDI6MjEuMTAxNDc0MTkyWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2OTc4OTc0MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IGluIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBkZXZfYWRkcl9mbHVzaGAgc2V0cyBgZGV2LVx1MDAzZWRldl9hZGRyYCB0byBgTlVMTGAsIGFuZCBpdCdzIG9ubHkgY2FsbGVkIGluIGBmcmVlX25ldGRldmAuIFNvLCB5b3UnZCB0aGluayBgZGV2LVx1MDAzZWRldl9hZGRyYCBpcyBuZXZlciByZS1hc3NpZ25lZCBhZnRlciBgZGV2X2FkZHJfaW5pdGAsIHdoaWNoIHNob3VsZCB6ZXJvIGl0LiBCdXQgd2FpdC4uLiB3aGF0IGFib3V0IHZpcnR1YWwgZGV2aWNlcz8gRGV2aWNlcyBsaWtlIGJvbmRpbmcgb3IgVkxBTiBpbnRlcmZhY2VzIGNhbiBtb2RpZnkgdGhlaXIgTUFDIGFkZHJlc3NlcyB1c2luZyBgZGV2X2FkZHJfbW9kYCwgYnV0IHRoYXQgZnVuY3Rpb24gb25seSBtb2RpZmllcyB0aGUgZmlyc3Qgc2l4IGJ5dGVzLlxuXG5TbywgdGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogaXMgaXQgKnBvc3NpYmxlKiB0aGF0IGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzbid0IGZ1bGx5IHplcm9lZD8gTGV0J3MgZGlnIGRlZXBlci4gVGhlIGNvZGUgZm9yIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgaXMgcmlnaHQgdGhlcmUuICBJIHNlZSB0aGF0IGl0IHVzZXMgYGV0aF9od19hZGRyX3NldChkZXYsIGFkZHItXHUwMDNlc2FfZGF0YSlgLiAgQWhhISBgZXRoX2h3X2FkZHJfc2V0YCBjb3BpZXMgNiBieXRlcyBmcm9tIGBhZGRyLVx1MDAzZXNhX2RhdGFgIHRvIGBkZXYtXHUwMDNlZGV2X2FkZHJgLiBCdXQgd2hlcmUgZG9lcyBgYWRkcmAgY29tZSBmcm9tPyAgSXQgY29tZXMgZnJvbSB1c2VyIHNwYWNlLCB2aWEgYGlvY3RsYCBvciBgbmV0bGlua2AuXG5cbkFuZCBoZXJlJ3Mgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIElmIHVzZXIgc3BhY2UgcGFzc2VzIGEgYHNvY2thZGRyYCBzdHJ1Y3R1cmUgd2hlcmUgdGhlIHRyYWlsaW5nIGJ5dGVzIG9mIGBzYV9kYXRhYCBhcmUgKnVuaW5pdGlhbGl6ZWQqLCB3ZSBoYXZlIGEgcG90ZW50aWFsIGlzc3VlLiBSZW1lbWJlciwgYHNhX2RhdGFgIGlzIDE0IGJ5dGVzLCBidXQgYGV0aF9od19hZGRyX3NldGAgKm9ubHkqIGNvcGllcyB0aGUgZmlyc3QgNi4gU28sIGFueSB1bmluaXRpYWxpemVkIGRhdGEgYmV5b25kIHRoZSBmaXJzdCA2IGJ5dGVzIGluIGBzYV9kYXRhYCB3b3VsZG4ndCBiZSBjb3BpZWQuIFNpbmNlIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHdhcyB6ZXJvZWQgYXQgaW5pdGlhbGl6YXRpb24sIHRoZSByZW1haW5pbmcgYnl0ZXMgKGJ5dGVzIDYgYW5kIDcpIG9mIGBkZXYtXHUwMDNlZGV2X2FkZHJgIHdvdWxkICpzdGlsbCogYmUgemVyb2VkLlxuXG5Ib3dldmVyLCBpZiBLTVNBTiB3ZXJlIHRvIHJlcG9ydCBhbiB1bmluaXRpYWxpemVkIHZhbHVlLCBpdCB3b3VsZCBwb2ludCB0byB0aGlzIGZ1bmN0aW9uIGFzIGEgbG9jYXRpb24uXG5cbkxldCdzIGRvIHNvbWUgc2VhcmNoaW5nIGZvciBLTVNBTiByZXBvcnRzIHJlbGF0ZWQgdG8gYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCB0byBkZXRlcm1pbmUgd2hldGhlciBhIHZ1bG5lcmFiaWxpdHkgZXhpc3RzIGluIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM5MzksIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MjozMC43OTkzNzQ4MDlaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjQzMjkzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicnRsODEzOV9zZXRfbWFjX2FkZHJlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jPTY0Nj1zdGF0aWMgdm9pZCBydGw4MTM5X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy02NDctI2VuZGlmXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmM6NjQ4OnN0YXRpYyBpbnQgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5dG9vLmMtNjQ5LXN0YXRpYyBpbnQgcnRsODEzOV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz05MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGw4MTM5X25ldGRldl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjctXFx0Lm5kb192YWxpZGF0ZV9hZGRyXFx0PSBldGhfdmFsaWRhdGVfYWRkcixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYzo5Mjg6XFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXFx0PSBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy05MjktXFx0Lm5kb19zdGFydF94bWl0XFx0XFx0PSBydGw4MTM5X3N0YXJ0X3htaXQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYz0yMjA5PXN0YXRpYyB2b2lkIHJ0bDgxMzlfcG9sbF9jb250cm9sbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzl0b28uYy0yMjE5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jOjIyMjA6c3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvODEzOXRvby5jLTIyMjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0MjozMy4xNjM3MDg0MDRaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI1MjI5NjU5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBLTVNBTiBSZXBvcnRzIGluIHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSByb290IGNhdXNlIGZvciBhIHBvdGVudGlhbCBLTVNBTiByZXBvcnQgcmVsYXRlZCB0byBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgLiBUaGUgY2VudHJhbCBpc3N1ZSBzZWVtcyB0byBiZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3aXRoaW4gYGRldi1cdTAwM2VkZXZfYWRkcmAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCB0aGlzIGNvdWxkIHN0ZW0gZnJvbSB0aGUgYnl0ZXMgYXQgb2Zmc2V0cyA2IGFuZCA3IHdpdGhpbiBgZGV2LVx1MDAzZWRldl9hZGRyYCBub3QgYmVpbmcgaW5pdGlhbGl6ZWQuIEhvd2V2ZXIsIEkga25vdyBmcm9tIGBkZXZfYWRkcl9pbml0YCB0aGF0IHRob3NlIGJ5dGVzIHNob3VsZCBiZSBzZXQgdG8gemVyby5cblxuSSBoYWQgdG8gY2xhcmlmeSB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gSXMgYGRldl9hZGRyX2luaXRgIEFMV0FZUyBjYWxsZWQ/IFllcywgaXQncyBjYWxsZWQgZHVyaW5nIGBhbGxvY19uZXRkZXZfbXFzYC4gQ291bGQgdGhlcmUgYmUgYSBjYXNlIHdoZXJlIGBkZXYtXHUwMDNlZGV2X2FkZHJgIGlzIGFsbG9jYXRlZCBkaWZmZXJlbnRseSwgc3BlY2lmaWNhbGx5LCBub3QgYXMgYSAzMi1ieXRlIGFycmF5IGFzIEkgYXNzdW1lPyBJIHJ1bGVkIG91dCB0aGUgcG9zc2liaWxpdHkgb2YgYGRldi1cdTAwM2VkZXZfYWRkcmAgYmVpbmcgbW9kaWZpZWQgZGlyZWN0bHkgKGUuZy4sIGBkZXYtXHUwMDNlZGV2X2FkZHIgPSBzb21lX2J1ZmZlcmApIGJlY2F1c2UgSSBmb3VuZCBubyBzdWNoIGRpcmVjdCBhc3NpZ25tZW50cyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeS5cblxuSSBjb25zaWRlcmVkIGBkZXZfYWRkcl9tb2RgLCB3aGljaCBtb2RpZmllcyB0aGUgYGhhLVx1MDAzZWFkZHJgICppbiBwbGFjZSouIFRoaXMgaXNuJ3QgdGhlIGlzc3VlLiBCdXQsIGRvZXMgYGRldi1cdTAwM2VkZXZfYWRkcmAgcG9pbnQgdG8gYSBkaWZmZXJlbnQgYnVmZmVyIG90aGVyIHRoYW4gYGhhLVx1MDAzZWFkZHJgPyBOb3QgYWNjb3JkaW5nIHRvIHRoZSBjb2RlOyB0aGUgYGRldl9hZGRyX2luaXRgIGZ1bmN0aW9uIHNldHMgdGhpbmdzIHVwIGNvcnJlY3RseSBhbmQgdGhpcyBpcyB0aGUgb25seSBjb2RlIHNldHRpbmcgdXAgdGhlIGRldmljZSBhZGRyZXNzLiBUaGUgTUFDIGFkZHJlc3MgaXMgYSAzMi1ieXRlIGFycmF5IHRvIGhhbmRsZSB0aGlzLlxuXG5UaGUgcXVlc3Rpb24gdGhlbiBldm9sdmVkIGludG8gd2h5IHRoZXkgY2hhbmdlZCB0aGUgY29kZSB0byBgZ2V0X3VuYWxpZ25lZF9sZTE2YC4gVGhpcyBjaGFuZ2UgaGFzIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhlIHByZXZpb3VzIGFwcHJvYWNoIHdpdGggYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBsb29rZWQgbGlrZSBpdCB3b3VsZCByZWFkIGJ5dGVzIDQsIDUsIDYsIDcgYW5kIGl0IHdvdWxkIG5vdCBjcmFzaCBiZWNhdXNlIHRoZSBhcnJheSBpcyAzMiBieXRlcyBhbmQgdGhlIDZ0aCBhbmQgN3RoIGJ5dGVzIGFyZSAwLiBOb3cgSSdtIHJlbWluZGVkIHRoYXQgS0FTQU4gZGV0ZWN0cyBvdXQtb2YtYm91bmRzIHJlYWRzLCBidXQgc2luY2UgYGRldi1cdTAwM2VkZXZfYWRkcmAgaXMgYSAzMi1ieXRlIGFycmF5LCBLQVNBTiBkb2Vzbid0IGRldGVjdCBpdC4gS01TQU4sIGhvd2V2ZXIsIGRldGVjdHMgcmVhZHMgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGFyZSBieXRlcyA2IGFuZCA3IHVuaW5pdGlhbGl6ZWQ/IE5vLiBJIGNoZWNrZWQgYWdhaW4gYGRldl9hZGRyX2luaXRgLCB3aGljaCB6ZXJvZXMgYWxsIDMyIGJ5dGVzIG9mIHRoZSBNQUMgYWRkcmVzcy4gSSBmb3VuZCBgX19od19hZGRyX2FkZGAgdGFrZXMgMzIgYnl0ZXMuIFRoZW4gaXQncyBjb3BpZWQgdG8gYGhhLVx1MDAzZWFkZHJgIHdpdGggMzIgYnl0ZXMuIFNvIGl0J3MgemVyb2VkLlxuXG5JIG5lZWQgdG8gY29uZmlybSBhbGwgdGhlIGluaXRpYWxpemF0aW9uIHBhdGhzLiBXaGF0IGlmIHRoZSBhZGRyZXNzIG1vZGlmaWNhdGlvbiB2aWEgYGV0aF9od19hZGRyX3NldGAgY2hhbmdlcyB0aGUgdmFsdWUgYWZ0ZXIgdGhlIGluaXRpYWwgemVyb2luZz8gVGhpcyBmdW5jdGlvbiBjb3BpZXMgNiBieXRlcyB0byBgaGEtXHUwMDNlYWRkcmAsIGJ1dCB0aGUgcmVtYWluaW5nIGJ5dGVzIHJlbWFpbiBhcyAwLiBTbywgYWdhaW4sIGl0J3MgaW5pdGlhbGl6ZWQuXG5cblNvLCBpcyB0aGVyZSBBTlkgY2FzZSB3aGVyZSBgaGEtXHUwMDNlYWRkcmAgaXMgaW5pdGlhbGl6ZWQgdG8gbGVzcyB0aGFuIDMyIGJ5dGVzPyBXaGF0IGFib3V0IHRoZSBjYWxsIHRvIGBfX2h3X2FkZHJfY3JlYXRlYD8gSW4gYGRldl9hZGRyX2luaXRgLCB0aGUgc2l6ZSBpcyAzMi4gT2theSwgc28gd2hhdCBpZiBgZGV2X2FkZHJfbW9kYCBjYWxscyBgX19od19hZGRyX2luc2VydGAgd2l0aCBsZW5ndGggNj8gSSBzZWUgdGhlIGluc2VydCBkb2Vzbid0IG1vZGlmeSB0aGUgZGF0YSwgc28gaXQgd29uJ3QgaW1wYWN0IGBoYS1cdTAwM2VhZGRyYC4gQWxzbywgZG9lcyBgZGV2LVx1MDAzZWRldl9hZGRyYCBldmVyIHBvaW50IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBgaGFgPyBJIHNlYXJjaGVkIGFuZCBJJ20gcmVtaW5kZWQgYGRldi1cdTAwM2VkZXZfYWRkcmAgYWx3YXlzIHBvaW50cyB0byBgaGEtXHUwMDNlYWRkcmAsIHdoaWNoIGlzIGNyZWF0ZWQgaW4gYGRldl9hZGRyX2luaXRgLiBTbyBhZ2FpbiwgaXQgaXMgYWx3YXlzIHplcm9lZC4gTGV0J3MgbWFrZSBzdXJlIHRoZXJlIGlzbid0IGFub3RoZXIgcGxhY2UgdGhhdCdzIHNldHRpbmcgdGhpcyB2YWx1ZTogYGRldl9hZGRyX3NldGAuXG5cbkkndmUgZXhoYXVzdGVkIGFsbCBwbGF1c2libGUgZXhwbGFuYXRpb25zLiBUaGUgS01TQU4gcmVwb3J0IG11c3QgaGF2ZSBiZWVuIGEgZmFsc2UgcG9zaXRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NTU1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMzo0Mjo1NS42ODY2NzkwNjJaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjExNTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfYWRkciA9XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz0xMDAyMD1pbnQgbmV0aWZfcHJlX2NoYW5nZWFkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmFkZHIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDAyNS1cXHRcXHQuaW5mby5leHRhY2sgPSBleHRhY2ssXFxubmV0L2NvcmUvZGV2LmM6MTAwMjY6XFx0XFx0LmRldl9hZGRyID0gYWRkcixcXG5uZXQvY29yZS9kZXYuYy0xMDAyNy1cXHR9O1xcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02NjE9dm9pZCBkZXZfYWRkcl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjYtXFx0X19od19hZGRyX2ZsdXNoKFxcdTAwMjZkZXYtXFx1MDAzZWRldl9hZGRycyk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2Njc6XFx0ZGV2LVxcdTAwM2VkZXZfYWRkciA9IE5VTEw7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYy02NjgtfVxcbi0tXFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYz02Nzk9aW50IGRldl9hZGRyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjk3LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRkZXZfaHdfYWRkciwgbGlzdCk7XFxubmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYzo2OTg6XFx0XFx0ZGV2LVxcdTAwM2VkZXZfYWRkciA9IGhhLVxcdTAwM2VhZGRyO1xcbm5ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMtNjk5LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDI6NTUuODM4ODAzOTU5WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2Mjc1NTYxMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcywgYXMgYSBzZWFzb25lZCBrZXJuZWwgZGV2ZWxvcGVyLCBiZWdpbnMgd2l0aCB2ZXJpZnlpbmcgdGhlIGNvcmUgYXNzZXJ0aW9uOiBpcyBgZGV2LVx1MDAzZWRldl9hZGRyYCB0cnVseSBpbml0aWFsaXplZD8gVGhlIGNvZGUgY2xlYXJseSBzZXRzIGl0IGluIGBkZXZfYWRkcl9pbml0YCwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgYWxsb2NhdGVkIG1lbW9yeS4gVGhpcyBpcyBjcml0aWNhbC4gU2luY2UgSSBrbm93IGBkZXZfYWRkcl9pbml0YCBpcyBjb25zaXN0ZW50bHkgY2FsbGVkLCB0aGUgYnVmZmVyICpzaG91bGQqIGFsd2F5cyBiZSBpbml0aWFsaXplZC4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgZG9lcyB0aGUgKnBhdGNoKiBjaGFuZ2UgdGhpcywgb3IgaW50cm9kdWNlIGEgbmV3IHBhdGggd2hlcmUgdGhpcyBpbml0aWFsaXphdGlvbiBpcyBza2lwcGVkP1xuXG5UaGUgS01TQU4gcXVlc3Rpb24gcmV2b2x2ZXMgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJZiB0aGUgcGF0Y2ggZml4ZWQgYSByZWFkIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB0aGVuIEtNU0FOIHdvdWxkIGJlIGltcG9ydGFudC4gQnV0IGlmIHRoZSBwYXRjaCBvbmx5ICpwcmV2ZW50cyogdGhlIHJlYWQsIHRoZW4gS01TQU4gaXMgbGlrZWx5IGlycmVsZXZhbnQsIHNpbmNlIEtNU0FOIGNhbid0ICpkZXRlY3QqIHRoYXQgdGhlIHJlYWQgZG9lc24ndCBoYXBwZW4uXG5cbkkgc3RhcnRlZCBkaWdnaW5nIGludG8gdGhlIHBhdGNoLCBhbmQgdGhlIGtleSBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgYGRldi1cdTAwM2VkZXZfYWRkcmAgaXMgdXNlZCBhbmQgc2V0LiBJIGxvb2tlZCBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgZGV2LVx1MDAzZWRldl9hZGRyYCwgY29uZmlybWluZyBpdCdzIGEgcG9pbnRlciwgYW5kIHdoZXJlIGl0J3MgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzYCBpcyBhIGNsdWUuIFRoZW4gSSBmb2N1c2VkIG9uIHRoZSBzcGVjaWZpYyBjb2RlIGluIHRoYXQgZnVuY3Rpb24sIHRoYXQncyBiZWluZyBjaGFuZ2VkOlxuXG5gYGBjXG4tXHRSVExfVzMyX0YoTUFDMCArIDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LVx1MDAzZWRldl9hZGRyICsgMCkpKTtcbi1cdFJUTF9XMzJfRihNQUMwICsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtXHUwMDNlZGV2X2FkZHIgKyA0KSkpO1xuK1x0UlRMX1czMl9GKE1BQzAgKyAwLCBnZXRfdW5hbGlnbmVkX2xlMzIoZGV2LVx1MDAzZWRldl9hZGRyKSk7XG4rXHRSVExfVzMyX0YoTUFDMCArIDQsIGdldF91bmFsaWduZWRfbGUxNihkZXYtXHUwMDNlZGV2X2FkZHIgKyA0KSk7XG5gYGBcblxuVGhlIG9sZCBjb2RlIGxvb2tzIHN1c3BpY2lvdXMuIEl0IHJlYWRzIGEgYHUzMmAgZnJvbSBhbiBhZGRyZXNzIHRoYXQgY29uY2VwdHVhbGx5IHJlcHJlc2VudHMgYSA2LWJ5dGUgTUFDIGFkZHJlc3MsIG1lYW5pbmcgaXQgbWlnaHQgcmVhZCBiZXlvbmQgdGhlIE1BQy4gVGhlIHNpemUgb2YgYGRldi1cdTAwM2VkZXZfYWRkcmAgaXMgY3JpdGljYWw7IHRoZSBhc3N1bXB0aW9uIHNlZW1zIHRvIGJlIHRoYXQgaXQncyBzaXplZCBleGFjdGx5IGZvciBhIE1BQyBhZGRyZXNzLCBidXQgaXMgdGhhdCBjb3JyZWN0PyBJIHdlbnQgb24gdG8gdmVyaWZ5IHRoaXMsIGJ5IHNlYXJjaGluZyB0aGUgY29kZSB3aGVyZSBgZGV2LVx1MDAzZWRldl9hZGRyYCBnZXRzIGFzc2lnbmVkIChhbmQgdGhlIGFuc3dlciBpcyBgYWxsb2NfbmV0ZGV2X21xc2ApLiBTaW5jZSBpdCBjYWxscyBgZGV2X2FkZHJfaW5pdGAsIHRoaXMgbWFrZXMgYWxsIG9mIHRoaXMgbXVjaCBlYXNpZXIsIGJlY2F1c2UgdGhlIHNpemUgaXMgYSBrbm93biBhbmQgZXhwbGljaXRseSBpbml0aWFsaXplZCB2YWx1ZS5cblxuVGhlIEtNU0FOIGltcGxpY2F0aW9ucyBjb21lIHRvIGZvY3VzOyBpZiB0aGUgYWxsb2NhdGlvbiBmb3IgYGRldi1cdTAwM2VkZXZfYWRkcmAgaXMgZ3JlYXRlciB0aGFuIDYgYnl0ZXMsIHRoZW4gcmVhZGluZyBiZXlvbmQgdGhlIDYtYnl0ZSBNQUMgYWRkcmVzcyBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgYW5kIG5vdCBhbiB1bmluaXRpYWxpemVkIHJlYWQgKGJlY2F1c2UsIHdpdGggYGRldl9hZGRyX2luaXRgLCB0aGVzZSBleHRyYSBieXRlcyBnZXQgemVyb2VkLCBhbmQgS01TQU4gd291bGQgbm90IGNhdGNoIGEgemVybyByZWFkKS4gU2luY2UgYGRldi1cdTAwM2VkZXZfYWRkcmAgaXMgaW5pdGlhbGl6ZWQsIGl0IGlzICphbHdheXMqIGluaXRpYWxpemVkLiBJZiB0aGUgcmVhZCAqaXMqIG91dCBvZiBib3VuZHMsIGJ1dCB0aGUgYnVmZmVyIGlzIHplcm8sIEtNU0FOIHdvdWxkIG5vdCBjYXRjaCB0aGlzLiBJZiB0aGUgYnVmZmVyICp3ZXJlKiA2IGJ5dGVzLCBLQVNBTiAqd291bGQqIGNhdGNoIGl0IGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgYW5kIHRoZW4gS01TQU4gKm1pZ2h0KiBjYXRjaCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLlxuXG5UaGUgbW9yZSBJIGxvb2tlZCBhdCBpdCwgdGhlIG1vcmUgSSdtIGNvbnZpbmNlZCB0aGUgaXNzdWUgaXMgbm90IHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYnV0IGlzIGFjdHVhbGx5IHJlbGF0ZWQgdG8gKmxvZ2ljYWwqIG91dC1vZi1ib3VuZHMgYWNjZXNzLiBUaGUgb2xkIGNvZGUgd2FzIGxvZ2ljYWxseSByZWFkaW5nIHBhc3QgdGhlIGVuZCBvZiB0aGUgTUFDIGFkZHJlc3MuIFRoZSBuZXcgY29kZSBmaXhlcyB0aGlzIGJ5IGNoYW5naW5nIGhvdyB0aGUgTUFDIGFkZHJlc3MgaXMgcmVhZCwgYnV0IGV2ZW4gaW4gdGhlIG9sZCBjb2RlLCBLTVNBTiB3b3VsZG4ndCBjYXRjaCBhbnl0aGluZywgYmVjYXVzZSB0aGUgbWVtb3J5IGlzICppbml0aWFsaXplZCouIEkgY29uZmlybWVkIHRoYXQgYGdldF91bmFsaWduZWRfbGUxNmAgaXMgYSBzYWZlIHdheSB0byByZWFkIHRoZSBsYXN0IDIgYnl0ZXMuIFRoZSBvbGQgY29kZSBjYXN0cyBgZGV2LVx1MDAzZWRldl9hZGRyYCB0byBhIGB1MzIqYCBhbmQgZGVyZWZlcmVuY2VzIGl0LiBUaGlzIHBvdGVudGlhbGx5IHZpb2xhdGVkIHN0cmljdCBhbGlhc2luZyBydWxlcyBvciBjb3VsZCByZXN1bHQgaW4gYWxpZ25tZW50IGlzc3Vlcy4gVGhlIHBhdGNoLCBjb3JyZWN0bHksIHJlbW92ZXMgdGhpcyBwb3RlbnRpYWwgYWxpYXNpbmcgcHJvYmxlbS4gQWxzbywgdGhpcyByZXNvbHZlcyBhIHBvdGVudGlhbCBTcGFyc2Ugd2FybmluZywgd2hpY2ggaXMgYWx3YXlzIGdvb2QuXG5cbkluIHNob3J0LCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljYWwgb3V0LW9mLWJvdW5kcyByZWFkIGFuZCBmaXhlcyBzdHJpY3QgYWxpYXNpbmcgdmlvbGF0aW9ucyBhbmQvb3IgcG90ZW50aWFsIGFsaWdubWVudCBwcm9ibGVtcy4gSXQgaXMgTk9UIGZpeGluZyBhbiAqdW5pbml0aWFsaXplZCogbWVtb3J5IHJlYWQuIFRoZXJlZm9yZSwgbm8gS01TQU4gc2Vzc2lvbiBpcyBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4ODczLCJPdXRwdXRUb2tlbnMiOjM2MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTM6NDM6NDIuMTE0MzY4NjI5WiIsIlNlcSI6NjUsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgcnRsODEzOV9zZXRfbWFjX2FkZHJlc3NgIHRvIHVzZSBgZ2V0X3VuYWxpZ25lZF9sZTMyYCBhbmQgYGdldF91bmFsaWduZWRfbGUxNmAgaW5zdGVhZCBvZiBkaXJlY3RseSBjYXN0aW5nIGBkZXYtXFx1MDAzZWRldl9hZGRyYCB0byBgdTMyICpgIGFuZCBkZXJlZmVyZW5jaW5nIGl0LiBUaGUgb2xkIGNvZGUgcmVhZCA0IGJ5dGVzIGZyb20gYGRldi1cXHUwMDNlZGV2X2FkZHIgKyA0YCAoYnl0ZXMgNCwgNSwgNiwgYW5kIDcpLCB3aGljaCBsb2dpY2FsbHkgZXhjZWVkcyB0aGUgNi1ieXRlIE1BQyBhZGRyZXNzIGxlbmd0aC4gXFxuXFxuSG93ZXZlciwgYGRldi1cXHUwMDNlZGV2X2FkZHJgIHBvaW50cyB0byBgaGEtXFx1MDAzZWFkZHJgIHdpdGhpbiBhIGBzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHJgLCB3aGljaCBpcyBhIDMyLWJ5dGUgYXJyYXkgKGBNQVhfQUREUl9MRU5gKS4gVGhpcyBlbnRpcmUgMzItYnl0ZSBhcnJheSBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgaW4gYGRldl9hZGRyX2luaXQoKWAgdXNpbmcgYG1lbXNldChhZGRyLCAwLCBzaXplb2YoYWRkcikpYC4gQmVjYXVzZSB0aGUgcGFkZGluZyBieXRlcyAoYnl0ZXMgNiBhbmQgNykgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHRvIHplcm8sIHJlYWRpbmcgdGhlbSBkb2VzIG5vdCBjb25zdGl0dXRlIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhlcmVmb3JlLCBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IGFueSBpc3N1ZSBoZXJlLlxcblxcbkZ1cnRoZXJtb3JlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIGFsbG9jYXRpb24gaXMgMzIgYnl0ZXMsIEtBU0FOIGRvZXMgbm90IGRldGVjdCB0aGlzIGFzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBlaXRoZXIuIFRoZSBwYXRjaCBwcmltYXJpbHkgcmVzb2x2ZXMgYSBsb2dpY2FsIG91dC1vZi1ib3VuZHMgcmVhZCwgcG90ZW50aWFsIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMsIGFuZCBTcGFyc2Ugd2FybmluZ3MgcmVsYXRlZCB0byBlbmRpYW5uZXNzIHR5cGVzIChwYXNzaW5nIGBfX2xlMzJgIHRvIGBpb3dyaXRlMzJgIHdoaWNoIGV4cGVjdHMgYHUzMmApLiBcXG5cXG5TaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBydGw4MTM5X3NldF9tYWNfYWRkcmVzc2AgdG8gdXNlIGBnZXRfdW5hbGlnbmVkX2xlMzJgIGFuZCBgZ2V0X3VuYWxpZ25lZF9sZTE2YCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNhc3RpbmcgYGRldi1cXHUwMDNlZGV2X2FkZHJgIHRvIGB1MzIgKmAgYW5kIGRlcmVmZXJlbmNpbmcgaXQuIFRoZSBvbGQgY29kZSByZWFkIDQgYnl0ZXMgZnJvbSBgZGV2LVxcdTAwM2VkZXZfYWRkciArIDRgIChieXRlcyA0LCA1LCA2LCBhbmQgNyksIHdoaWNoIGxvZ2ljYWxseSBleGNlZWRzIHRoZSA2LWJ5dGUgTUFDIGFkZHJlc3MgbGVuZ3RoLiBcXG5cXG5Ib3dldmVyLCBgZGV2LVxcdTAwM2VkZXZfYWRkcmAgcG9pbnRzIHRvIGBoYS1cXHUwMDNlYWRkcmAgd2l0aGluIGEgYHN0cnVjdCBuZXRkZXZfaHdfYWRkcmAsIHdoaWNoIGlzIGEgMzItYnl0ZSBhcnJheSAoYE1BWF9BRERSX0xFTmApLiBUaGlzIGVudGlyZSAzMi1ieXRlIGFycmF5IGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBpbiBgZGV2X2FkZHJfaW5pdCgpYCB1c2luZyBgbWVtc2V0KGFkZHIsIDAsIHNpemVvZihhZGRyKSlgLiBCZWNhdXNlIHRoZSBwYWRkaW5nIGJ5dGVzIChieXRlcyA2IGFuZCA3KSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdG8gemVybywgcmVhZGluZyB0aGVtIGRvZXMgbm90IGNvbnN0aXR1dGUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBUaGVyZWZvcmUsIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgYW55IGlzc3VlIGhlcmUuXFxuXFxuRnVydGhlcm1vcmUsIGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgYWxsb2NhdGlvbiBpcyAzMiBieXRlcywgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHRoaXMgYXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGVpdGhlci4gVGhlIHBhdGNoIHByaW1hcmlseSByZXNvbHZlcyBhIGxvZ2ljYWwgb3V0LW9mLWJvdW5kcyByZWFkLCBwb3RlbnRpYWwgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcywgYW5kIFNwYXJzZSB3YXJuaW5ncyByZWxhdGVkIHRvIGVuZGlhbm5lc3MgdHlwZXMgKHBhc3NpbmcgYF9fbGUzMmAgdG8gYGlvd3JpdGUzMmAgd2hpY2ggZXhwZWN0cyBgdTMyYCkuIFxcblxcblNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhlc2UgY2hhbmdlcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow8c8cb[1] Phase: Succeeded StartedAt: 2026-08-24 13:43:53 +0000 UTC FinishedAt: 2026-08-24 13:43:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 13:43:53 +0000 UTC FinishedAt: 2026-08-24 13:43:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2] Phase: Succeeded StartedAt: 2026-08-24 13:43:53 +0000 UTC FinishedAt: 2026-08-24 14:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 13:43:53 +0000 UTC FinishedAt: 2026-08-24 14:29:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 13:43:53 +0000 UTC FinishedAt: 2026-08-24 13:44:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 13:43:53 +0000 UTC FinishedAt: 2026-08-24 13:43:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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-workflow8c8cb/series-workflow8c8cb-convert-artifact-412453755/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 13:44:04 +0000 UTC FinishedAt: 2026-08-24 14:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 13:44:04 +0000 UTC FinishedAt: 2026-08-24 14:04:26 +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:*a3cf872d-2384-454a-90b2-85dea5dd5ef7,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-workflow8c8cb/series-workflow8c8cb-convert-artifact-412453755/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": "d6c71a66-98b6-4695-9b7f-68ab51a41fb6", "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-workflow8c8cb/series-workflow8c8cb-build-action-748174009/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 13:44:04 +0000 UTC FinishedAt: 2026-08-24 14:04:05 +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:*a3cf872d-2384-454a-90b2-85dea5dd5ef7,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-workflow8c8cb/series-workflow8c8cb-convert-artifact-412453755/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": "d6c71a66-98b6-4695-9b7f-68ab51a41fb6", "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-workflow8c8cb/series-workflow8c8cb-build-action-748174009/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:04:26 +0000 UTC FinishedAt: 2026-08-24 14:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:04:26 +0000 UTC FinishedAt: 2026-08-24 14:04:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:04:26 +0000 UTC FinishedAt: 2026-08-24 14:04:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:04:26 +0000 UTC FinishedAt: 2026-08-24 14:04:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-workflow8c8cb/series-workflow8c8cb-convert-artifact-1593278674/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:04:48 +0000 UTC FinishedAt: 2026-08-24 14:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:04:48 +0000 UTC FinishedAt: 2026-08-24 14:06:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d6c71a66-98b6-4695-9b7f-68ab51a41fb6,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-workflow8c8cb/series-workflow8c8cb-build-action-748174009/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-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:06:41 +0000 UTC FinishedAt: 2026-08-24 14:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:06:41 +0000 UTC FinishedAt: 2026-08-24 14:06:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:06:41 +0000 UTC FinishedAt: 2026-08-24 14:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:06:41 +0000 UTC FinishedAt: 2026-08-24 14:26:11 +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:*a3cf872d-2384-454a-90b2-85dea5dd5ef7,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-workflow8c8cb/series-workflow8c8cb-convert-artifact-1593278674/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": "c35faaf5-0e42-4cb2-b5d9-505431668b19", "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-workflow8c8cb/series-workflow8c8cb-build-action-2740322150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:06:41 +0000 UTC FinishedAt: 2026-08-24 14:25:59 +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:*a3cf872d-2384-454a-90b2-85dea5dd5ef7,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-workflow8c8cb/series-workflow8c8cb-convert-artifact-1593278674/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": "c35faaf5-0e42-4cb2-b5d9-505431668b19", "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-workflow8c8cb/series-workflow8c8cb-build-action-2740322150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:26:11 +0000 UTC FinishedAt: 2026-08-24 14:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:26:11 +0000 UTC FinishedAt: 2026-08-24 14:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:26:11 +0000 UTC FinishedAt: 2026-08-24 14:28:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:26:11 +0000 UTC FinishedAt: 2026-08-24 14:27:55 +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:*c35faaf5-0e42-4cb2-b5d9-505431668b19,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-workflow8c8cb/series-workflow8c8cb-build-action-2740322150/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-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:28:05 +0000 UTC FinishedAt: 2026-08-24 14:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:28:05 +0000 UTC FinishedAt: 2026-08-24 14:29:52 +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":["rtl8139_set_mac_address"],"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:*d6c71a66-98b6-4695-9b7f-68ab51a41fb6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c35faaf5-0e42-4cb2-b5d9-505431668b19,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-workflow8c8cb/series-workflow8c8cb-build-action-748174009/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-workflow8c8cb/series-workflow8c8cb-build-action-2740322150/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:28:05 +0000 UTC FinishedAt: 2026-08-24 14:28:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:28:05 +0000 UTC FinishedAt: 2026-08-24 14:28:24 +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":["rtl8139_set_mac_address"],"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-workflow8c8cb/series-workflow8c8cb-convert-artifact-1626367015/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:28:05 +0000 UTC FinishedAt: 2026-08-24 14:28:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:28:05 +0000 UTC FinishedAt: 2026-08-24 14:28:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:28:05 +0000 UTC FinishedAt: 2026-08-24 14:28:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:28:37 +0000 UTC FinishedAt: 2026-08-24 14:29:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c8cb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"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":["rtl8139_set_mac_address"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["8139TOO"],"series_id":"9136fc9b-b784-4f81-aa58-17b3b6d3def0","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-08-24 14:28:37 +0000 UTC FinishedAt: 2026-08-24 14:29:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d6c71a66-98b6-4695-9b7f-68ab51a41fb6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c35faaf5-0e42-4cb2-b5d9-505431668b19,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-workflow8c8cb/series-workflow8c8cb-build-action-748174009/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-workflow8c8cb/series-workflow8c8cb-build-action-2740322150/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-workflow8c8cb/series-workflow8c8cb-convert-artifact-1626367015/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,}