Name: series-workflowmn25g Phase: Succeeded StartedAt: 2026-08-25 06:20:38 +0000 UTC FinishedAt: 2026-08-25 10:09:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[0] Phase: Succeeded StartedAt: 2026-08-25 06:20:38 +0000 UTC FinishedAt: 2026-08-25 06:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 06:20:38 +0000 UTC FinishedAt: 2026-08-25 06:24:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK" ], "series_id": "89f4ac20-c124-454c-a88f-b40367c96353" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "null_add_dev", "nullb_device_power_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudWxsX2FkZF9kZXYmIzM0OywKICAgICYjMzQ7bnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgYG51bGxfYmxrYCBkcml2ZXIsIGRpc2FibGluZyBgc2hhcmVkX3RhZ3NgIGlmIHRoZSBkZXZpY2UgaXMgbWVtb3J5LWJhY2tlZC9ibG9ja2luZyBidXQgdGhlIGdsb2JhbCBgZ19ibG9ja2luZ2AgaXMgbm90IHNldC4gVGhpcyBjaGFuZ2Ugb25seSBtb2RpZmllcyBib29sZWFuIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYW5kIHByaW50cyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBudWxsX2JsayB0ZXN0IGJsb2NrIGRyaXZlciB0byBkaXNhYmxlIHNoYXJlZF90YWdzIHdoZW4gYSBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGRldmljZSBpcyB1c2VkIHdpdGhvdXQgZ2xvYmFsIGJsb2NraW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBzZXR1cCBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIChudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUpIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gRnV6emluZyB0aGlzIHBhdGggZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbiBmaXggaXMgcm9idXN0IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYmxvY2sgbGF5ZXIgdGFnIHNldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYTIxM2I2OGU3ZTU2YWUwNDM4ZjFjNTBlMTM0MTQzODMzZmJiZjkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDY6MjI6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuaW5kZXggZjhjMGZkNTdlMDQxYS4uMGRjN2ZkMTA2ZGI4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuQEAgLTE5MTIsNiAmIzQzOzE5MTIsMTIgQEAgc3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxuIFx0XHRkZXYtXHUwMDNlYmxvY2tpbmcgPSB0cnVlO1xuIFx0ZWxzZSAvKiBjYWNoZSBpcyBtZWFuaW5nbGVzcyAqL1xuIFx0XHRkZXYtXHUwMDNlY2FjaGVfc2l6ZSA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlc2hhcmVkX3RhZ3MgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VibG9ja2luZyBcdTAwMjZcdTAwMjYgIWdfYmxvY2tpbmcpIHtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7c2hhcmVkX3RhZ3MgZGlzYWJsZWQ6IG1lbW9yeV9iYWNrZWQvYmxvY2tpbmcgZGV2aWNlIHJlcXVpcmVzIHBlci1kZXZpY2UgdGFnIHNldCBmb3IgQkxLX01RX0ZfQkxPQ0tJTkdcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2LVx1MDAzZXNoYXJlZF90YWdzID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGRldi1cdTAwM2VjYWNoZV9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgVUxPTkdfTUFYIC8gMTAyNCAvIDEwMjQsXG4gXHRcdFx0XHRcdFx0ZGV2LVx1MDAzZWNhY2hlX3NpemUpO1xuIFx0ZGV2LVx1MDAzZW1icHMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDEwMjQgKiA0MCwgZGV2LVx1MDAzZW1icHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnVsbF9hZGRfZGV2JiMzNDssCiAgICAmIzM0O251bGxiX2RldmljZV9wb3dlcl9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBudWxsX2JsayB0ZXN0IGJsb2NrIGRyaXZlciB0byBkaXNhYmxlIHNoYXJlZF90YWdzIHdoZW4gYSBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGRldmljZSBpcyB1c2VkIHdpdGhvdXQgZ2xvYmFsIGJsb2NraW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBzZXR1cCBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIChudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUpIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gRnV6emluZyB0aGlzIHBhdGggZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbiBmaXggaXMgcm9idXN0IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYmxvY2sgbGF5ZXIgdGFnIHNldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTIxM2I2OGU3ZTU2YWUwNDM4ZjFjNTBlMTM0MTQzODMzZmJiZjkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDY6MjI6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYyBiL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jCmluZGV4IGY4YzBmZDU3ZTA0MWEuLjBkYzdmZDEwNmRiODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jCkBAIC0xOTEyLDYgJiM0MzsxOTEyLDEyIEBAIHN0YXRpYyBpbnQgbnVsbF92YWxpZGF0ZV9jb25mKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldikKIAkJZGV2LSZndDtibG9ja2luZyA9IHRydWU7CiAJZWxzZSAvKiBjYWNoZSBpcyBtZWFuaW5nbGVzcyAqLwogCQlkZXYtJmd0O2NhY2hlX3NpemUgPSAwOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDtzaGFyZWRfdGFncyAmYW1wOyZhbXA7IGRldi0mZ3Q7YmxvY2tpbmcgJmFtcDsmYW1wOyAhZ19ibG9ja2luZykgewomIzQzOwkJcHJfaW5mbygmIzM0O3NoYXJlZF90YWdzIGRpc2FibGVkOiBtZW1vcnlfYmFja2VkL2Jsb2NraW5nIGRldmljZSByZXF1aXJlcyBwZXItZGV2aWNlIHRhZyBzZXQgZm9yIEJMS19NUV9GX0JMT0NLSU5HXG4mIzM0Oyk7CiYjNDM7CQlkZXYtJmd0O3NoYXJlZF90YWdzID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKIAlkZXYtJmd0O2NhY2hlX3NpemUgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBVTE9OR19NQVggLyAxMDI0IC8gMTAyNCwKIAkJCQkJCWRldi0mZ3Q7Y2FjaGVfc2l6ZSk7CiAJZGV2LSZndDttYnBzID0gbWluX3QodW5zaWduZWQgaW50LCAxMDI0ICogNDAsIGRldi0mZ3Q7bWJwcyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgbnVsbF9ibGsgRHJpdmVyIEFmdGVyIGEgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gSSBzZWUgYSBwYXRjaCBoYXMgYmVlbiBhcHBsaWVkIHRvIGBkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY2AuIEl0JiMzOTtzIHR3ZWFraW5nIHRoZSBgbnVsbF92YWxpZGF0ZV9jb25mYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGRpc2FibGluZyBgc2hhcmVkX3RhZ3NgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczogd2hlbiBgZGV2LSZndDtzaGFyZWRfdGFnc2AgaXMgYWxyZWFkeSB0cnVlLCBgZGV2LSZndDtibG9ja2luZ2AgaXMgdHJ1ZSwgYW5kIGBnX2Jsb2NraW5nYCBpcyAqbm90KiB0cnVlLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGBudWxsX2Jsa2AgZHJpdmVyLiBUaGlzIHBhcnRpY3VsYXIgZHJpdmVyIGlzIHR5cGljYWxseSB1c2VkIGFzIGEgdGVzdCBibG9jayBkZXZpY2UuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGVzc2VudGlhbGx5IHJlY29uZmlndXJpbmcgdGhlIGBudWxsYl9kZXZpY2VgIGJ5IHNldHRpbmcgYGRldi0mZ3Q7c2hhcmVkX3RhZ3NgIHRvIGBmYWxzZWAuCgpUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoaXMgbW9kaWZpY2F0aW9uIHdvcnRoIGZ1enppbmc/IENvbnNpZGVyaW5nIHRoYXQgYG51bGxfYmxrYCBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGJsb2NrIGRldmljZSwgYW5kIGl0IGNhbiBiZSBpbnN0YW50aWF0ZWQgdGhyb3VnaCBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycywgSSYjMzk7ZCBzYXkgeWVzLCBhYnNvbHV0ZWx5LiBXZSBuZWVkIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBgbnVsbF92YWxpZGF0ZV9jb25mYCBpcyByZWFjaGFibGUgZ2l2ZW4gdGhlIG5ldyBjb25maWd1cmF0aW9ucy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gdHJpZ2dlciB0aGlzIGFsdGVyZWQgY29kZSBwYXRoLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNvbmZpZ3VyYXRpb25zIHdpbGwgZ3VpZGUgdGhlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnVsbF92YWxpZGF0ZV9jb25mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTg2ND1zdGF0aWMgaW50IG51bGxfc2V0dXBfdGFnc2V0KHN0cnVjdCBudWxsYiAqbnVsbGIpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTg4NC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE4ODU6c3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTg4Ni17XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTk2MT1zdGF0aWMgaW50IG51bGxfYWRkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk3Mi1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5NzM6XHRydiA9IG51bGxfdmFsaWRhdGVfY29uZihkZXYpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk3NC1cdGlmIChydilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBgbnVsbF9ibGtgIENvbmZpZ3VyYXRpb24gSXNzdWUqKgoKT2theSwgc28gYG51bGxfYWRkX2RldmAganVzdCBnb3QgY2FsbGVkLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgbnVsbF92YWxpZGF0ZV9jb25mYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgaW4gdGhlIGRldmljZSBhZGRpdGlvbiBzZXF1ZW5jZSwgYW5kIHNvbWV0aGluZyBpbiB0aGUgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGlzIGxpa2VseSByZWxldmFudCB0byB0aGUgYG51bGxfYmxrYCBkZXZpY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQgY29uZmlnIG9wdGlvbnMgc3BlY2lmaWNhbGx5IGVuYWJsZSBvciBpbmZsdWVuY2UgdGhlIGBudWxsX2Jsa2AgZnVuY3Rpb25hbGl0eT8mIzM0OyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMuIEkgc2hvdWxkIGRpdmUgaW50byBgbnVsbF92YWxpZGF0ZV9jb25mYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFyZSBiZWluZyBjaGVja2VkLiBLbm93aW5nIHdoaWNoIGNvbmZpZyBvcHRpb25zIGxlYWQgdG8gdGhhdCBjb2RlIHBhdGggaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2h5IHRoZSBkZXZpY2UgYWRkaXRpb24gbWlnaHQgYmUgZmFpbGluZyBvciBiZWhhdmluZyB1bmV4cGVjdGVkbHkuIEkgc3VzcGVjdCBJIG5lZWQgdG8gY2hlY2sgd2hpY2ggc3BlY2lmaWMgc2V0dGluZ3MgYXJlIGNyaXRpY2FsIHRvIHN1Y2Nlc3NmdWxseSBzdGFydGluZyB1cCB0aGUgYG51bGxfYmxrYCBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTlVMTF9CTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzo2OmNvbmZpZyBCTEtfREVWX05VTExfQkxLXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O051bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctOS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzoxMDpjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBCTEtfREVWX05VTExfQkxLYC4gTXkgZmlyc3QgdGhvdWdodCBpczogdGhhdCYjMzk7cyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgaGFyZGx5IHRoZSB3aG9sZSBzdG9yeS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLCBpbXBsaWVkLCBvciBwb3RlbnRpYWxseSBpbiBjb25mbGljdCB3aXRoIHRoaXMgb25lLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYSBzZWVtaW5nbHkgc2ltcGxlIHNldHRpbmcgbGlrZSB0aGlzIG9mdGVuIGhhcyBjYXNjYWRpbmcgZWZmZWN0cywgc2V0dGluZyBvZmYgYSBjaGFpbiByZWFjdGlvbiBvZiBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgbm90aGluZyBpcyBvdmVybG9va2VkOyBhbmQgYXZvaWQgY3JlYXRpbmcgYSB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE51bGwgYmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBCTEtfREVWX05VTExfQkxLXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgQ09ORklHRlNfRlNcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbiAgMTE6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9OVUxMX0JMSyBcdTAwMjZcdTAwMjYgRkFVTFRfSU5KRUNUSU9OX0NPTkZJR0ZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTnVsbCBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgbnVsbGAgYmxvY2sgZGV2aWNlIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb25zdGFudCBgQkxLX0RFVl9OVUxMX0JMS2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGRlZmluaW5nIHRoZSBibG9jayBkZXZpY2UuIE5vdGhpbmcgY29tcGxpY2F0ZWQgaGVyZSwgd2hpY2ggaXMgZ29vZC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBudWxsX3ZhbGlkYXRlX2NvbmZgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBpcyBhcHByb3ByaWF0ZSwgZ2l2ZW4gaXQmIzM5O3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseS4gSXQgbG9va3MgbGlrZSB0aGUgY2FsbGVyIGlzIGluZGVlZCBgbnVsbF9hZGRfZGV2YC4gTm93LCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG51bGxfYWRkX2RldmAgaXMgYWxzbyBwcm9wZXJseSBzY29wZWQgYXMgc3RhdGljLiBJdCBtYWtlcyBzZW5zZSwgZnJvbSBhIGNvZGUgb3JnYW5pemF0aW9uIGFuZCBzZWN1cml0eSBzdGFuZHBvaW50LCB0aGF0IGl0IHNob3VsZCBiZS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudWxsX2FkZF9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNzU9c3RhdGljIHZvaWQgbnVsbF9kZWxfZGV2KHN0cnVjdCBudWxsYiAqbnVsbGIpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6Mjc2OnN0YXRpYyBpbnQgbnVsbF9hZGRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNzctc3RhdGljIHN0cnVjdCBudWxsYiAqbnVsbF9maW5kX2Rldl9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTQ4ND1zdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUwMC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjUwMTpcdFx0cmV0ID0gbnVsbF9hZGRfZGV2KGRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MDItXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xOTQ4PXN0YXRpYyBib29sIG51bGxfc2V0dXBfZmF1bHQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTYwLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTk2MTpzdGF0aWMgaW50IG51bGxfYWRkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTYyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yMTAyPXN0YXRpYyBpbnQgbnVsbF9jcmVhdGVfZGV2KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjExMS1cdG11dGV4X2xvY2soXHUwMDI2bG9jayk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMTEyOlx0cmV0ID0gbnVsbF9hZGRfZGV2KGRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMTEzLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhpcyBjb2RlIHNuaXBwZXQ6CgoqKkFuYWx5emluZyBEZXZpY2UgSW5pdGlhbGl6YXRpb24gYW5kIFBvd2VyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGBudWxsYCBibG9jayBkZXZpY2UgZHJpdmVyIGlzIHN0cnVjdHVyZWQuIEZpcnN0LCBgbnVsbF9hZGRfZGV2YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIOKAkyBpdCYjMzk7cyBsaWtlbHkgaW50ZXJuYWwgdG8gdGhpcyBtb2R1bGUgYW5kIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgY2FsbHMuIFRoZW4sIGBudWxsX2NyZWF0ZV9kZXZgIGdldHMgY2FsbGVkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGF0JiMzOTtzIHdoZXJlIHlvdSYjMzk7ZCBleHBlY3QgdGhlIGRldmljZSB0byBiZSBzZXQgdXAuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdDogYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gY29uZmlnZnMsIGltcGx5aW5nIHRoYXQmIzM5O3MgaG93IGRldmljZSBwb3dlciBzZXR0aW5ncyBhcmUgbWFuYWdlZC4gQmVmb3JlIGRpdmluZyBkZWVwLCBsZXQgbWUgdmVyaWZ5IHNvbWV0aGluZzogaXMgYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgYWxzbyBzdGF0aWM/IFl1cCwgaXQgaXMsIHdoaWNoIGFkZHMgdG8gdGhlIGludGVybmFsIG1vZHVsZSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkOyB0aGUgc3RhdGljIG9uZXMgYXJlIGxpa2VseSB0byBiZSBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgaW50ZXJuYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnVsbF9jcmVhdGVfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjA4Nj1zdGF0aWMgc3RydWN0IG51bGxiICpudWxsX2ZpbmRfZGV2X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMTAxLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjEwMjpzdGF0aWMgaW50IG51bGxfY3JlYXRlX2Rldih2b2lkKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjEwMy17XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjEzMT1zdGF0aWMgaW50IF9faW5pdCBudWxsX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMTgzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZGV2aWNlczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIxODQ6XHRcdHJldCA9IG51bGxfY3JlYXRlX2RldigpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjE4NS1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIENvbmZpZ0ZTIEV4cG9ydGVkIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBDb25maWdGUyBvcGVyYXRpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGV4cG9zZWQuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdC4uLiB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgZG9jdW1lbnRhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdyYW51bGFyaXR5IG9mIHdoYXQmIzM5O3MgYXZhaWxhYmxlIHRvIG1lIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIFdoYXQgY2FuIEkgY29udHJvbCwgYW5kIGhvdz8gVGhpcyB3aWxsIGluZm9ybSBob3cgSSBhcHByb2FjaCBhbnkgY3VzdG9tIG1vZHVsZSBkZXNpZ24gb3IgaW50ZXJhY3Rpb24gSSYjMzk7bSBwbGFubmluZy4gSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJpbWl0aXZlcyBiZWZvcmUgSSBzdGFydCB3cml0aW5nIGNvZGUuIEFyZSB0aGVyZSBhbnkgZ290Y2hhcyBJIG5lZWQgdG8gYW50aWNpcGF0ZT8gVGltZSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnZnNfaXRlbV9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NjM3PXN0YXRpYyB2b2lkIG51bGxiX2RldmljZV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NDQtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo2NDU6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbnVsbGJfZGV2aWNlX29wcyA9IHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTY0Ni1cdC5yZWxlYXNlXHQ9IG51bGxiX2RldmljZV9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDUyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbnVsbF9ibGtgJiMzOTtzIENvcmUqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYW5kIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcyBhcmUgd2l0aGluIHRoaXMgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyLiYjMzQ7IEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgZmlsZSBwYXRoIOKAkyB0aGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZHJpdmVyJiMzOTtzIGNvcmUgaW5pdGlhbGl6YXRpb24sIHJlZ2lzdHJhdGlvbiwgYW5kIHBvdGVudGlhbGx5IGl0cyBkZXZpY2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCBgbW9kdWxlX2luaXRgIGNhbGxzIHRvIGdldCB0aGluZ3Mgcm9sbGluZywgYG1vZHVsZV9leGl0YCBmb3IgY2xlYW51cCwgYW5kIGZ1bmN0aW9ucyB0aGF0IHJlZ2lzdGVyIHRoZSBibG9jayBkZXZpY2Ugd2l0aCB0aGUga2VybmVsLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHNvbWUga2luZCBvZiBgc3RydWN0IGdlbmRpc2tgIGFsbG9jYXRpb24gYW5kIHBvcHVsYXRpb24sIGFsb25nIHdpdGggdGhlIGRldmljZSBvcGVyYXRpb25zIHRoYXQgd2lsbCBoYW5kbGUgcmVxdWVzdHMsIGV2ZW4gaWYgdGhvc2Ugb3BlcmF0aW9ucyBhcmUganVzdCBkdW1teSBmdW5jdGlvbnMgb3IgZG8gbm90aGluZy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IGl0IGhhbmRsZXMgcmVxdWVzdHMgc2luY2UgdGhpcyBkcml2ZXIgc2VydmVzIGFzIGEgYmxvY2sgaG9sZS4gQXJlIHRoZXkgaW1tZWRpYXRlbHkgY29tcGxldGVkIHdpdGggYSBzdWNjZXNzIG9yIGZhaWx1cmUsIG9yIGFyZSB0aGV5IGp1c3QgZHVtcGVkIHRvIHRoZSB2b2lkPyBQZXJoYXBzLCBJJiMzOTtsbCBzZWUgc29tZSBjb21tZW50cyBpbmRpY2F0aW5nIHdoYXQgaXMgbmVlZGVkIHRvIGJlIGltcGxlbWVudGVkLiBGaW5hbGx5LCBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBvciBwYXJhbWV0ZXJzIHRoYXQgdGhlIGRyaXZlciB1c2VzLCBwYXJ0aWN1bGFybHkgZm9yIHNldHRpbmcgdXAgdGhlICYjMzQ7bnVsbCYjMzQ7IGJlaGF2aW9yLiBBbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcyBhcmUgYWxzbyBvbiBteSByYWRhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyB0aGUgTW9kdWxlIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBzbyBpdCYjMzk7cyBhIHNlbGYtY29udGFpbmVkIG1vZHVsZSwgbm8gZXh0ZXJuYWwgc3ltYm9scywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgY29tcGxldGVseSBpbmRlcGVuZGVudCwgbGlrZWx5IG1hbmFnaW5nIGl0cyBvd24gcmVzb3VyY2VzIGFuZCBub3QgcmVseWluZyBvbiBvdGhlciBtb2R1bGVzIGZvciBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2R1bGUmIzM5O3MgbGlmZSBjeWNsZSBpcyBhbGwgYWJvdXQgdGhlIGluaXQgYW5kIHRoZW4gdGhlIENvbmZpZ0ZTIG9wZXJhdGlvbnMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHBhdHRlcm4gZm9yIENvbmZpZ0ZTIGRldmljZXMuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZGV2aWNlIGhhbmRsZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgdGhlIGNvcmUgb3BlcmF0aW9ucy4gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBpbnRvIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGFuZCBgbnVsbGJfZGV2aWNlX29wc2AgZnVuY3Rpb25zLiBUaG9zZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGl0IGRvZXMgYW5kIGhvdyBpdCYjMzk7cyBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz00Nzk9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3Bvd2VyX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTQ4My1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjQ4NDpzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNDg1LVx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQ29uZmlnRlMgUG93ZXIgQXR0cmlidXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgQ29uZmlnRlMgYXR0cmlidXRlIGNvbnRyb2xsaW5nIHBvd2VyIG1hbmFnZW1lbnQuIFRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlOyB0aGVyZSBhcmUgYSBsb3Qgb2Ygd2F5cyBwb3dlciBpcyBoYW5kbGVkLCBzbyAmIzM0O3Bvd2VyJiMzNDsgYWxvbmUgaXMgdG9vIGdlbmVyYWwuIEkga25vdyBDb25maWdGUyBvZmZlcnMgYSBoaWdobHkgZmxleGlibGUgYXBwcm9hY2ggdG8gZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3dlciBtYW5hZ2VtZW50IGlzIGEgY3J1Y2lhbCBhcmVhIHdoZXJlIHRoaXMgZmxleGliaWxpdHkgY2FuIGJlIGxldmVyYWdlZC4gSSBoYXZlIHRvIGZpbmQgdGhlIGNvcnJlY3QgYXR0cmlidXRlIG5hbWUgb3IgcGF0aCB3aXRoaW4gdGhlIENvbmZpZ0ZTIGZpbGVzeXN0ZW0gdGhhdCBkZWFscyB3aXRoIHBvd2VyLXJlbGF0ZWQgc2V0dGluZ3MuIFRoaXMgY291bGQgaW52b2x2ZSBzZXR0aW5ncyBmb3IgZGV2aWNlIHN0YXRlcywgcG93ZXIgbW9kZXMgKGUuZy4sIHN1c3BlbmQsIHN0YW5kYnksIGFjdGl2ZSksIHZvbHRhZ2UgcmVndWxhdGlvbiwgb3IgZXZlbiBjbG9jayBnYXRpbmcsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgZGV2aWNlIHR5cGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGNvbmZpZ3VyaW5nLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIGl0IHdpbGwgZGVwZW5kIG9uIHRoZSBkcml2ZXIgYW5kIGRldmljZSBpdHNlbGYsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gSXMgdGhlcmUgYSBjb25zaXN0ZW50IG5hbWluZyBzY2hlbWUgdGhhdCBJIGNhbiBsZXZlcmFnZT8gT3Igd2lsbCBJIGhhdmUgdG8gZGVsdmUgaW50byB0aGUgZHJpdmVyIHNvdXJjZSBjb2RlPyBIb3BlZnVsbHksIHRoaXMgaXMgd2VsbC1kb2N1bWVudGVkIGluIHRoZSByZWxldmFudCBkcml2ZXIgZG9jdW1lbnRhdGlvbiBhbmQvb3Iga2VybmVsIGRvY3VtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0dXJucyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHRlNfQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTM1Mj1udWxsYl9kZXZpY2VfIyNOQU1FIyNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpwYWdlLFx0XFxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0zNzEtfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzozNzI6Q09ORklHRlNfQVRUUihudWxsYl9kZXZpY2VfLCBOQU1FKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTM3My1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz00ODQ9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MjItXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1MjM6Q09ORklHRlNfQVRUUihudWxsYl9kZXZpY2VfLCBwb3dlcik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MjQtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTMyPXN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV9iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU3NS19XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NzY6Q09ORklHRlNfQVRUUihudWxsYl9kZXZpY2VfLCBiYWRibG9ja3MpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc3LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTc4PXN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV96b25lX3JlYWRvbmx5X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01ODQtfVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTg1OkNPTkZJR0ZTX0FUVFJfV08obnVsbGJfZGV2aWNlXywgem9uZV9yZWFkb25seSk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01ODYtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01ODc9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3pvbmVfb2ZmbGluZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTkzLX1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU5NDpDT05GSUdGU19BVFRSX1dPKG51bGxiX2RldmljZV8sIHpvbmVfb2ZmbGluZSk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01OTUtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NzE5PXN0YXRpYyBzc2l6ZV90IG1lbWJfZ3JvdXBfZmVhdHVyZXNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKnBhZ2UpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzQ0LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NzQ1OkNPTkZJR0ZTX0FUVFJfUk8obWVtYl9ncm91cF8sIGZlYXR1cmVzKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTc0Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcyNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBudWxsYiBEcml2ZXI6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbnVsbGJgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQuIEl0IHNlZW1zIHRoYXQgdGhlIGBjb25maWdmc2AgYXR0cmlidXRlIGBwb3dlcmAgaXMgdGhlIGtleSB0cmlnZ2VyLCB3aGljaCBsZWFkcyB0byBgbnVsbF9hZGRfZGV2YCBiZWluZyBjYWxsZWQuIFRoaXMgbWVhbnMgSSBzaG91bGQgcmVhbGx5IGJlIGZvY3VzaW5nIG9uIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGhhbmRsaW5nIHRoZSBwb3dlciBhdHRyaWJ1dGUuIGBudWxsX2luaXRgIGlzIHRoZSBtb2R1bGUgaW5pdCwgYnV0IHRoYXQmIzM5O3Mgb25seSBjYWxsZWQgb25jZSwgc28gbm90IHVzZWZ1bCBmb3Igb25nb2luZyBmdXp6aW5nLgoKSGFuZyBvbiBhIHNlY29uZOKApiBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBpcyAqc3RhdGljKi4gRGFtbiEgVGhhdCBsaW1pdHMgaXRzIHVzZWZ1bG5lc3MsIGFzIHN5emthbGxlciBuZWVkcyBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIHRvIHRhcmdldC4gSSBzaG91bGQgZ28gYmFjayBhbmQgY2hlY2sgYG51bGxfYWRkX2RldmAgYW5kIGBudWxsX3ZhbGlkYXRlX2NvbmZgIGFnYWluLiBJZiB0aGV5JiMzOTtyZSBhbHNvIHN0YXRpYyBhbmQgaW5saW5lZCwgdGhleSB3aWxsIG5vdCBiZSBnb29kIGZ1enppbmcgdGFyZ2V0cy4KCkJ1dCB3YWl0LCBJIGRvbiYjMzk7dCB0aGluayBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBpcyBpbmxpbmVkLiBJdCYjMzk7cyB1c2VkIGFzIGEgY2FsbGJhY2sgaW4gYSBzdHJ1Y3R1cmUsIHNvIGl0IGxpa2VseSBoYXMgYSBkaXN0aW5jdCBhZGRyZXNzLiBUaGUgYENPTkZJR0ZTX0FUVFJgIG1hY3JvIGNyZWF0ZXMgYSBzdHJ1Y3R1cmUgd2l0aCBmdW5jdGlvbiBwb2ludGVycy4gU28gZGVmaW5pdGVseSBub3QgaW5saW5lZCEKCkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHNpZ25hdHVyZSBvZiBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBqdXN0IHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDgwOlx0e1xuIDQ4MTpcdFx0cmV0dXJuIG51bGxiX2RldmljZV9ib29sX2F0dHJfc2hvdyh0b19udWxsYl9kZXZpY2UoaXRlbSktXHUwMDNlcG93ZXIsIHBhZ2UpO1xuIDQ4MjpcdH1cbiA0ODM6XHRcbiA0ODQ6XHRzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIDQ4NTpcdFx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4gNDg2Olx0e1xuIDQ4NzpcdFx0c3RydWN0IG51bGxiX2RldmljZSAqZGV2ID0gdG9fbnVsbGJfZGV2aWNlKGl0ZW0pO1xuIDQ4ODpcdFx0Ym9vbCBuZXdwID0gZmFsc2U7XG4gNDg5Olx0XHRzc2l6ZV90IHJldDtcbiA0OTA6XHRcbiA0OTE6XHRcdHJldCA9IG51bGxiX2RldmljZV9ib29sX2F0dHJfc3RvcmUoXHUwMDI2bmV3cCwgcGFnZSwgY291bnQpO1xuIDQ5MjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA0OTM6XHRcdFx0cmV0dXJuIHJldDtcbiA0OTQ6XHRcbiA0OTU6XHRcdHJldCA9IGNvdW50O1xuIDQ5NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZsb2NrKTtcbiA0OTc6XHRcdGlmICghZGV2LVx1MDAzZXBvd2VyIFx1MDAyNlx1MDAyNiBuZXdwKSB7XG4gNDk4Olx0XHRcdGlmICh0ZXN0X2FuZF9zZXRfYml0KE5VTExCX0RFVl9GTF9VUCwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKSlcbiA0OTk6XHRcdFx0XHRnb3RvIG91dDtcbiA1MDA6XHRcbiA1MDE6XHRcdFx0cmV0ID0gbnVsbF9hZGRfZGV2KGRldik7XG4gNTAyOlx0XHRcdGlmIChyZXQpIHtcbiA1MDM6XHRcdFx0XHRjbGVhcl9iaXQoTlVMTEJfREVWX0ZMX1VQLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuIDUwNDpcdFx0XHRcdGdvdG8gb3V0O1xuIDUwNTpcdFx0XHR9XG4gNTA2Olx0XG4gNTA3Olx0XHRcdHNldF9iaXQoTlVMTEJfREVWX0ZMX0NPTkZJR1VSRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4gNTA4Olx0XHRcdGRldi1cdTAwM2Vwb3dlciA9IG5ld3A7XG4gNTA5Olx0XHRcdHJldCA9IGNvdW50O1xuIDUxMDpcdFx0fSBlbHNlIGlmIChkZXYtXHUwMDNlcG93ZXIgXHUwMDI2XHUwMDI2ICFuZXdwKSB7XG4gNTExOlx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTlVMTEJfREVWX0ZMX1VQLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gNTEyOlx0XHRcdFx0ZGV2LVx1MDAzZXBvd2VyID0gbmV3cDtcbiA1MTM6XHRcdFx0XHRudWxsX2RlbF9kZXYoZGV2LVx1MDAzZW51bGxiKTtcbiA1MTQ6XHRcdFx0fVxuIDUxNTpcdFx0XHRjbGVhcl9iaXQoTlVMTEJfREVWX0ZMX0NPTkZJR1VSRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4gNTE2Olx0XHR9XG4gNTE3Olx0XG4gNTE4Olx0b3V0OlxuIDUxOTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTAxCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgUG90ZW50aWFsIENvZGUgSG90c3BvdHMqKgoKQWxyaWdodCwgYmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBiZWVuIGRvaW5nIGxhdGVseSwgYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgc2VlbXMgbGlrZSBhIHByZXR0eSBzb2xpZCBzdGFydGluZyBwb2ludCB3aGVuIGxvb2tpbmcgYXQgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gSG93ZXZlciwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgbnVsbF9hZGRfZGV2YC4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgYWdhaW5zdCBpbXBhY3RpbmcgcGVyZm9ybWFuY2Ugc2lnbmlmaWNhbnRseSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIGlubGluZWQsIGJ1dCBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIHF1aXRlIGEgc3Vic3RhbnRpYWwgZnVuY3Rpb24uIFRoZXJlZm9yZSBpdCBtaWdodCBiZSB3b3J0aCBpbnZlc3RpZ2F0aW5nLCBldmVuIGlmIGl0IGlzIHN0YXRpYy4gSeKAmWxsIG5lZWQgdG8gY29uZmlybSBpZiBpdOKAmXMgdHJ1bHkgaW5saW5lZCBvciBub3QuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBiaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGJpZ2dlciBmdW5jdGlvbnMgaW4gYG51bGxfYmxrYCB0aGF0IGFyZW4mIzM5O3Qgc3RhdGljLiBJdCYjMzk7cyBlYXN5IHRvIG92ZXJsb29rIHRoaW5ncyB3aGVuIHlvdSBnZXQgdHVubmVsIHZpc2lvbiBvbiBhIHNwZWNpZmljIGZ1bmN0aW9uLCBzbyBsZXQgbWUgcXVpY2tseSBzY2FuIHRoYXQgbW9kdWxlIGFuZCBsb29rIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoZXkgYXJlIG1vc3QgbGlrZWx5IHRoZSBuZXh0IGNhbmRpZGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOyBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIyLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIzOnN0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIobnVsbF90aW1lb3V0X2F0dHIpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjQ6c3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihudWxsX3JlcXVldWVfYXR0cik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNTpzdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG51bGxfaW5pdF9oY3R4X2F0dHIpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjYtI2VuZGlmXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NjE9c3RydWN0IG51bGxiX3BhZ2Uge1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTY3LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6Njg6c3RhdGljIExJU1RfSEVBRChudWxsYl9saXN0KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTY5LXN0YXRpYyBzdHJ1Y3QgbXV0ZXggbG9jaztcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTcwPXN0YXRpYyBpbnQgbnVsbF9tYWpvcjtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjcxOnN0YXRpYyBERUZJTkVfSURBKG51bGxiX2luZGV4ZXMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzItc3RhdGljIHN0cnVjdCBibGtfbXFfdGFnX3NldCB0YWdfc2V0O1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTExNzY9c3RhdGljIHZvaWQgY29weV9mcm9tX251bGxiKHN0cnVjdCBudWxsYiAqbnVsbGIsIHZvaWQgKmRlc3QsIGxvZmZfdCBwb3MsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTIwMC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEyMDE6YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2Rpc2NhcmQoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTIwMi1cdFx0XHRcdCBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTMxNT1zdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV90aHJvdHRsZWQoc3RydWN0IG51bGxiX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDUtICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzQ2OmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9iYWRibG9ja3Moc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzQ3LVx0XHRcdFx0ICAgdW5zaWduZWQgaW50ICpucl9zZWN0b3JzKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNzEtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzcyOmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9tZW1vcnlfYmFja2VkKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzczLVx0XHRcdFx0ICAgICAgIHNlY3Rvcl90IHNlY3Rvciwgc2VjdG9yX3QgbnJfc2VjdG9ycylcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMzk1PXN0YXRpYyBpbmxpbmUgdm9pZCBudWxsYl9jb21wbGV0ZV9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MjItXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDIzOmJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3NfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDI0LVx0XHRcdCAgICAgIHNlY3Rvcl90IHNlY3RvciwgdW5zaWduZWQgaW50IG5yX3NlY3RvcnMpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTExNT1zdHJ1Y3QgbnVsbGIge1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzEtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTMyOmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9kaXNjYXJkKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEzMy1cdFx0XHRcdCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxMzQ6YmxrX3N0YXR1c190IG51bGxfcHJvY2Vzc19jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzUtXHRcdFx0ICAgICAgc2VjdG9yX3Qgc2VjdG9yLCB1bnNpZ25lZCBpbnQgbnJfc2VjdG9ycyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTM2OmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9iYWRibG9ja3Moc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTM3LVx0XHRcdFx0ICAgdW5zaWduZWQgaW50ICpucl9zZWN0b3JzKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxMzg6YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX21lbW9yeV9iYWNrZWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzktXHRcdFx0XHQgICAgICAgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQxLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE0MjppbnQgbnVsbF9pbml0X3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQzOmludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNDQ6dm9pZCBudWxsX2ZyZWVfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQ1OmludCBudWxsX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0Ni1cdFx0ICAgICAgdW5zaWduZWQgaW50IG5yX3pvbmVzLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0Ny1cdFx0ICAgICAgc3RydWN0IGJsa19yZXBvcnRfem9uZXNfYXJncyAqYXJncyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQ4OmJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3Nfem9uZWRfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQ5LVx0XHRcdFx0ICAgIHNlY3Rvcl90IHNlY3Rvciwgc2VjdG9yX3QgbnJfc2VjdG9ycyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTUwOnNpemVfdCBudWxsX3pvbmVfdmFsaWRfcmVhZF9sZW4oc3RydWN0IG51bGxiICpudWxsYixcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNTEtXHRcdFx0XHRzZWN0b3JfdCBzZWN0b3IsIHVuc2lnbmVkIGludCBsZW4pO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE1Mjpzc2l6ZV90IHpvbmVfY29uZF9zdG9yZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTUzLVx0XHRcdHNpemVfdCBjb3VudCwgZW51bSBibGtfem9uZV9jb25kIGNvbmQpO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYz00Mj1zdGF0aWMgaW5saW5lIHZvaWQgbnVsbF91bmxvY2tfem9uZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTUwLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjUxOmludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy01Mi1cdFx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE3NC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoxNzU6aW50IG51bGxfcmVnaXN0ZXJfem9uZWRfZGV2KHN0cnVjdCBudWxsYiAqbnVsbGIpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTc2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTg2LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjE4Nzp2b2lkIG51bGxfZnJlZV96b25lZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4OC17XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE5Mi1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoxOTM6aW50IG51bGxfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTk0LVx0XHR1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTIzOS0gKi9cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoyNDA6c2l6ZV90IG51bGxfem9uZV92YWxpZF9yZWFkX2xlbihzdHJ1Y3QgbnVsbGIgKm51bGxiLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTI0MS1cdFx0XHRcdHNlY3Rvcl90IHNlY3RvciwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9NjQ2PXN0YXRpYyBibGtfc3RhdHVzX3QgbnVsbF96b25lX21nbXQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA3LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjcwODpibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX3pvbmVkX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTcwOS1cdFx0XHRcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTc0Mj1zdGF0aWMgdm9pZCBudWxsX3NldF96b25lX2NvbmQoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03NzctICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6Nzc4OnNzaXplX3Qgem9uZV9jb25kX3N0b3JlKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcGFnZSxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03NzktXHRcdFx0c2l6ZV90IGNvdW50LCBlbnVtIGJsa196b25lX2NvbmQgY29uZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NTkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBsaWVzIHdpdGhpbiBgbnVsbF92YWxpZGF0ZV9jb25mYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYG51bGxfYWRkX2RldmAuIEkgc2VlIHRoYXQgYG51bGxfYWRkX2RldmAgaXMgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgKHRocm91Z2ggY29uZmlnZnMpIGFuZCBgbnVsbF9jcmVhdGVfZGV2YCAoZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbikuIFRoaXMgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBkaXNhYmxlcyBgc2hhcmVkX3RhZ3NgIGlmIGBkZXYtJmd0O2Jsb2NraW5nYCBpcyB0cnVlIGJ1dCBgZ19ibG9ja2luZ2AgaXNuJiMzOTt0LiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGltcHJvdmVtZW50IGluIGhvdyB0aGUgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyZWQuIEdpdmVuIHRoYXQgaXQmIzM5O3MgZml4aW5nIGEgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcHJvYmxlbSBpbiBhIHRlc3QgZHJpdmVyLCBmdXp6aW5nIHNvdW5kcyBsaWtlIGEgZ29vZCBpZGVhLgoKU2luY2UgYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBjb25maWd1cmluZyB0aGUgZGV2aWNlIGR5bmFtaWNhbGx5IHRocm91Z2ggY29uZmlnZnMsIHRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0LiBXYWl0IGEgbWludXRlLCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB0aGlzIGNoYW5nZSBxdWl0ZSBlYXNpbHkgdmlhIGNvbmZpZ2ZzLCBzbyB0aGF04oCZcyBnb29kIG5ld3MhIExldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGlzIHRoZSBiZXN0IGZ1bmN0aW9uIHRvIHRhcmdldC4KCkhtbSwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyB1c2VkIGFzIGEgY2FsbGJhY2sgaW4gYGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9uc2Agb3IgYGNvbmZpZ2ZzX2F0dHJpYnV0ZWAsIHNvIGl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSBpbmxpbmVkIGFuZCBzeXprYWxsZXIgKnNob3VsZCogYmUgYWJsZSB0byBmaW5kIGl0LCBldmVuIHRob3VnaCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhIGJpdCBoYXJkZXIgdG8gcmVzb2x2ZS4gQnV0IHN5emthbGxlciBnZW5lcmFsbHkgcHJlZmVycyBub24tc3RhdGljIGZ1bmN0aW9uc+KApiBJcyB0aGVyZSBhIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gcGF0aD8KCmBudWxsX2FkZF9kZXZgIGlzIHN0YXRpYywgYXMgaXMgYG51bGxfdmFsaWRhdGVfY29uZmAuIFdoYXQgYWJvdXQgYG51bGxfcHJvY2Vzc19jbWRgPyBUaGF0JiMzOTtzIG5vdCBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBJTyBwYXRoLCBhbmQgdGhpcyBjaGFuZ2UgaXMgc3BlY2lmaWNhbGx5IGFib3V0IGNvbmZpZ3VyYXRpb24uIElmIHRoZXJlIGFyZSBubyBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gcGF0aCwgSSBjYW4ganVzdCB1c2UgYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgb3IgYG51bGxfYWRkX2RldmAuIFdhaXQuLi4gc3l6a2FsbGVyIGNhbiBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5ICphcmVuJiMzOTt0KiBpbmxpbmVkLiBPa2F5LCBsZXQgbWUgY2hlY2sgaWYgYG51bGxfYWRkX2RldmAgaXMgaW5saW5lZC4gR2l2ZW4gaXRzIHNpemUsIGl0JiMzOTtzIHByb2JhYmx5IG5vdC4gSSYjMzk7bGwgY2hlY2sgdGhlIHNpemUganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk2MDpcdFxuMTk2MTpcdHN0YXRpYyBpbnQgbnVsbF9hZGRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcbjE5NjI6XHR7XG4xOTYzOlx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHtcbjE5NjQ6XHRcdFx0LmxvZ2ljYWxfYmxvY2tfc2l6ZVx0PSBkZXYtXHUwMDNlYmxvY2tzaXplLFxuMTk2NTpcdFx0XHQucGh5c2ljYWxfYmxvY2tfc2l6ZVx0PSBkZXYtXHUwMDNlYmxvY2tzaXplLFxuMTk2NjpcdFx0XHQubWF4X2h3X3NlY3RvcnNcdFx0PSBkZXYtXHUwMDNlbWF4X3NlY3RvcnMsXG4xOTY3Olx0XHRcdC5kbWFfYWxpZ25tZW50XHRcdD0gMSxcbjE5Njg6XHRcdH07XG4xOTY5Olx0XG4xOTcwOlx0XHRzdHJ1Y3QgbnVsbGIgKm51bGxiO1xuMTk3MTpcdFx0aW50IHJ2O1xuMTk3MjpcdFxuMTk3MzpcdFx0cnYgPSBudWxsX3ZhbGlkYXRlX2NvbmYoZGV2KTtcbjE5NzQ6XHRcdGlmIChydilcbjE5NzU6XHRcdFx0cmV0dXJuIHJ2O1xuMTk3NjpcdFxuMTk3NzpcdFx0bnVsbGIgPSBremFsbG9jX25vZGUoc2l6ZW9mKCpudWxsYiksIEdGUF9LRVJORUwsIGRldi1cdTAwM2Vob21lX25vZGUpO1xuMTk3ODpcdFx0aWYgKCFudWxsYikge1xuMTk3OTpcdFx0XHRydiA9IC1FTk9NRU07XG4xOTgwOlx0XHRcdGdvdG8gb3V0O1xuMTk4MTpcdFx0fVxuMTk4MjpcdFx0bnVsbGItXHUwMDNlZGV2ID0gZGV2O1xuMTk4MzpcdFx0ZGV2LVx1MDAzZW51bGxiID0gbnVsbGI7XG4xOTg0Olx0XG4xOTg1Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZudWxsYi1cdTAwM2Vsb2NrKTtcbjE5ODY6XHRcbjE5ODc6XHRcdHJ2ID0gc2V0dXBfcXVldWVzKG51bGxiKTtcbjE5ODg6XHRcdGlmIChydilcbjE5ODk6XHRcdFx0Z290byBvdXRfZnJlZV9udWxsYjtcbjE5OTA6XHRcbjE5OTE6XHRcdHJ2ID0gbnVsbF9zZXR1cF90YWdzZXQobnVsbGIpO1xuMTk5MjpcdFx0aWYgKHJ2KVxuMTk5MzpcdFx0XHRnb3RvIG91dF9jbGVhbnVwX3F1ZXVlcztcbjE5OTQ6XHRcbjE5OTU6XHRcdGlmIChkZXYtXHUwMDNldmlydF9ib3VuZGFyeSlcbjE5OTY6XHRcdFx0bGltLnZpcnRfYm91bmRhcnlfbWFzayA9IFBBR0VfU0laRSAtIDE7XG4xOTk3Olx0XHRudWxsX2NvbmZpZ19kaXNjYXJkKG51bGxiLCBcdTAwMjZsaW0pO1xuMTk5ODpcdFx0aWYgKGRldi1cdTAwM2V6b25lZCkge1xuMTk5OTpcdFx0XHRydiA9IG51bGxfaW5pdF96b25lZF9kZXYoZGV2LCBcdTAwMjZsaW0pO1xuMjAwMDpcdFx0XHRpZiAocnYpXG4yMDAxOlx0XHRcdFx0Z290byBvdXRfY2xlYW51cF90YWdzO1xuMjAwMjpcdFx0fVxuMjAwMzpcdFxuMjAwNDpcdFx0aWYgKGRldi1cdTAwM2VjYWNoZV9zaXplIFx1MDAzZSAwKSB7XG4yMDA1Olx0XHRcdHNldF9iaXQoTlVMTEJfREVWX0ZMX0NBQ0hFLCBcdTAwMjZudWxsYi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MpO1xuMjAwNjpcdFx0XHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEU7XG4yMDA3Olx0XHRcdGlmIChkZXYtXHUwMDNlZnVhKVxuMjAwODpcdFx0XHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7XG4yMDA5Olx0XHR9XG4yMDEwOlx0XG4yMDExOlx0XHRpZiAoZGV2LVx1MDAzZXJvdGF0aW9uYWwpXG4yMDEyOlx0XHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xuMjAxMzpcdFxuMjAxNDpcdFx0bnVsbGItXHUwMDNlZGlzayA9IGJsa19tcV9hbGxvY19kaXNrKG51bGxiLVx1MDAzZXRhZ19zZXQsIFx1MDAyNmxpbSwgbnVsbGIpO1xuMjAxNTpcdFx0aWYgKElTX0VSUihudWxsYi1cdTAwM2VkaXNrKSkge1xuMjAxNjpcdFx0XHRydiA9IFBUUl9FUlIobnVsbGItXHUwMDNlZGlzayk7XG4yMDE3Olx0XHRcdGdvdG8gb3V0X2NsZWFudXBfem9uZTtcbjIwMTg6XHRcdH1cbjIwMTk6XHRcdG51bGxiLVx1MDAzZXEgPSBudWxsYi1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlO1xuMjAyMDpcdFxuMjAyMTpcdFx0aWYgKGRldi1cdTAwM2VtYnBzKSB7XG4yMDIyOlx0XHRcdHNldF9iaXQoTlVMTEJfREVWX0ZMX1RIUk9UVExFRCwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbjIwMjM6XHRcdFx0bnVsbGJfc2V0dXBfYnd0aW1lcihudWxsYik7XG4yMDI0Olx0XHR9XG4yMDI1Olx0XG4yMDI2Olx0XHRudWxsYi1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YSA9IG51bGxiO1xuMjAyNzpcdFxuMjAyODpcdFx0cnYgPSBpZGFfYWxsb2MoXHUwMDI2bnVsbGJfaW5kZXhlcywgR0ZQX0tFUk5FTCk7XG4yMDI5Olx0XHRpZiAocnYgXHUwMDNjIDApXG4yMDMwOlx0XHRcdGdvdG8gb3V0X2NsZWFudXBfZGlzaztcbjIwMzE6XHRcbjIwMzI6XHRcdG51bGxiLVx1MDAzZWluZGV4ID0gcnY7XG4yMDMzOlx0XHRkZXYtXHUwMDNlaW5kZXggPSBydjtcbjIwMzQ6XHRcbjIwMzU6XHRcdGlmIChjb25maWdfaXRlbV9uYW1lKFx1MDAyNmRldi1cdTAwM2Vncm91cC5jZ19pdGVtKSkge1xuMjAzNjpcdFx0XHQvKiBVc2UgY29uZmlnZnMgZGlyIG5hbWUgYXMgdGhlIGRldmljZSBuYW1lICovXG4yMDM3Olx0XHRcdHNucHJpbnRmKG51bGxiLVx1MDAzZWRpc2tfbmFtZSwgc2l6ZW9mKG51bGxiLVx1MDAzZWRpc2tfbmFtZSksXG4yMDM4Olx0XHRcdFx0IFwmIzM0OyVzXCYjMzQ7LCBjb25maWdfaXRlbV9uYW1lKFx1MDAyNmRldi1cdTAwM2Vncm91cC5jZ19pdGVtKSk7XG4yMDM5Olx0XHR9IGVsc2Uge1xuMjA0MDpcdFx0XHRzcHJpbnRmKG51bGxiLVx1MDAzZWRpc2tfbmFtZSwgXCYjMzQ7bnVsbGIlZFwmIzM0OywgbnVsbGItXHUwMDNlaW5kZXgpO1xuMjA0MTpcdFx0fVxuMjA0MjpcdFxuMjA0MzpcdFx0c2V0X2NhcGFjaXR5KG51bGxiLVx1MDAzZWRpc2ssXG4yMDQ0Olx0XHRcdCgoc2VjdG9yX3QpbnVsbGItXHUwMDNlZGV2LVx1MDAzZXNpemUgKiBTWl8xTSkgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVCk7XG4yMDQ1Olx0XHRudWxsYi1cdTAwM2VkaXNrLVx1MDAzZW1ham9yID0gbnVsbF9tYWpvcjtcbjIwNDY6XHRcdG51bGxiLVx1MDAzZWRpc2stXHUwMDNlZmlyc3RfbWlub3IgPSBudWxsYi1cdTAwM2VpbmRleDtcbjIwNDc6XHRcdG51bGxiLVx1MDAzZWRpc2stXHUwMDNlbWlub3JzID0gMTtcbjIwNDg6XHRcdG51bGxiLVx1MDAzZWRpc2stXHUwMDNlZm9wcyA9IFx1MDAyNm51bGxfb3BzO1xuMjA0OTpcdFx0bnVsbGItXHUwMDNlZGlzay1cdTAwM2Vwcml2YXRlX2RhdGEgPSBudWxsYjtcbjIwNTA6XHRcdHN0cnNjcHkobnVsbGItXHUwMDNlZGlzay1cdTAwM2VkaXNrX25hbWUsIG51bGxiLVx1MDAzZWRpc2tfbmFtZSk7XG4yMDUxOlx0XG4yMDUyOlx0XHRpZiAobnVsbGItXHUwMDNlZGV2LVx1MDAzZXpvbmVkKSB7XG4yMDUzOlx0XHRcdHJ2ID0gbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYobnVsbGIpO1xuMjA1NDpcdFx0XHRpZiAocnYpXG4yMDU1Olx0XHRcdFx0Z290byBvdXRfaWRhX2ZyZWU7XG4yMDU2Olx0XHR9XG4yMDU3Olx0XG4yMDU4Olx0XHRydiA9IGFkZF9kaXNrKG51bGxiLVx1MDAzZWRpc2spO1xuMjA1OTpcdFx0aWYgKHJ2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk5MQoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAzODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE51bGwgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYG51bGxfYWRkX2RldmAgaXNuJiMzOTt0IGlubGluZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGEgZm9jdXMgZnVuY3Rpb24uIEFuZCBoZXksIFN5emthbGxlciBjYW4gYWxzbyB0YXJnZXQgYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWA/IFBlcmZlY3QsIEkmIzM5O2xsIHByb3ZpZGUgYm90aC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSB0ZXN0IHBsYW4gZm9yIHRoaXMuCgpUaGUgbWFpbiBjb25maWd1cmF0aW9uIGlzIGBCTEtfREVWX05VTExfQkxLYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MuIFRoZSBwYXRjaCBtZW50aW9ucyBgc2hhcmVkX3RhZ3NgLCBgYmxvY2tpbmdgLCBhbmQgYGdfYmxvY2tpbmdgLiBUaG9zZSBhbGwgc2VlbSB0byBiZSBwYXJ0IG9mIHRoZSBgbnVsbF9ibGtgIGRldmljZSwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhvc2UuIEkgc2hvdWxkIGFsc28gY29uZmlybSB0aGF0IGBDT05GSUdGU19GU2AgaXMgbmVlZGVkLCBidXQgaXQgc2VlbXMgdGhhdCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgQkxLX0RFVl9OVUxMX0JMS2AsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIFNvLCBgQkxLX0RFVl9OVUxMX0JMS2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgb24gaXRzIG93bi4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gWWVzLCBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGlzIHRoZSBjcml0aWNhbCBvbmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoLgpgYGBjCiAJaWYgKGRldi0mZ3Q7c2hhcmVkX3RhZ3MgJmFtcDsmYW1wOyBkZXYtJmd0O2Jsb2NraW5nICZhbXA7JmFtcDsgIWdfYmxvY2tpbmcpIHsKIAkJcHJfaW5mbygmIzM0O3NoYXJlZF90YWdzIGRpc2FibGVkOiBtZW1vcnlfYmFja2VkL2Jsb2NraW5nIGRldmljZSByZXF1aXJlcyBwZXItZGV2aWNlIHRhZyBzZXQgZm9yIEJMS19NUV9GX0JMT0NLSU5HXG4mIzM0Oyk7CiAJCWRldi0mZ3Q7c2hhcmVkX3RhZ3MgPSBmYWxzZTsKIAl9CmBgYApPa2F5LCB0aGlzIGlzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIGVzc2VudGlhbGx5IG1vZGlmeWluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgbnVsbF9ibGsgZGV2aWNlIHRvIHByZXZlbnQgYSBjcmFzaCBvciBpbmNvcnJlY3QgYmVoYXZpb3Igd2hlbiBgc2hhcmVkX3RhZ3NgIGlzIHVzZWQgd2l0aCBhIGJsb2NraW5nIGRldmljZSBidXQgYGdfYmxvY2tpbmdgIGlzIGZhbHNlLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gbWFrZSBzdXJlIHRoaXMgZml4IHdvcmtzIGFzIGludGVuZGVkIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMuCgpTbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHkgYG51bGxfYWRkX2RldmAgYW5kIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgLiBBbmQgZm9yIGNvbmZpZ3VyYXRpb25zLCBgQkxLX0RFVl9OVUxMX0JMS2AgaXMgdGhlIGtleSBvbmUgdG8gZW5hYmxlLgoKTGV0JiMzOTtzIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnVsbF9hZGRfZGV2JiMzNDssCiAgICAmIzM0O251bGxiX2RldmljZV9wb3dlcl9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBudWxsX2JsayB0ZXN0IGJsb2NrIGRyaXZlciB0byBkaXNhYmxlIHNoYXJlZF90YWdzIHdoZW4gYSBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGRldmljZSBpcyB1c2VkIHdpdGhvdXQgZ2xvYmFsIGJsb2NraW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBzZXR1cCBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIChudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUpIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gRnV6emluZyB0aGlzIHBhdGggZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbiBmaXggaXMgcm9idXN0IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYmxvY2sgbGF5ZXIgdGFnIHNldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudWxsX2FkZF9kZXYmIzM0OywKICAgICYjMzQ7bnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIG51bGxfYmxrIHRlc3QgYmxvY2sgZHJpdmVyIHRvIGRpc2FibGUgc2hhcmVkX3RhZ3Mgd2hlbiBhIG1lbW9yeS1iYWNrZWQvYmxvY2tpbmcgZGV2aWNlIGlzIHVzZWQgd2l0aG91dCBnbG9iYWwgYmxvY2tpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyJiMzOTtzIHNldHVwIHBhdGgsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29uZmlnZnMgKG51bGxiX2RldmljZV9wb3dlcl9zdG9yZSkgb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBGdXp6aW5nIHRoaXMgcGF0aCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9uIGZpeCBpcyByb2J1c3QgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBibG9jayBsYXllciB0YWcgc2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgZGlzYWJsaW5nIGBzaGFyZWRfdGFnc2AgaWYgdGhlIGRldmljZSBpcyBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGJ1dCB0aGUgZ2xvYmFsIGBnX2Jsb2NraW5nYCBpcyBub3Qgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IG1vZGlmaWVzIGJvb2xlYW4gY29uZmlndXJhdGlvbiBmbGFncyBhbmQgcHJpbnRzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNhMjEzYjY4ZTdlNTZhZTA0MzhmMWM1MGUxMzQxNDM4MzNmYmJmOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAwNjoyMjo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jIGIvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMKaW5kZXggZjhjMGZkNTdlMDQxYS4uMGRjN2ZkMTA2ZGI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMKQEAgLTE5MTIsNiAmIzQzOzE5MTIsMTIgQEAgc3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KQogCQlkZXYtJmd0O2Jsb2NraW5nID0gdHJ1ZTsKIAllbHNlIC8qIGNhY2hlIGlzIG1lYW5pbmdsZXNzICovCiAJCWRldi0mZ3Q7Y2FjaGVfc2l6ZSA9IDA7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O3NoYXJlZF90YWdzICZhbXA7JmFtcDsgZGV2LSZndDtibG9ja2luZyAmYW1wOyZhbXA7ICFnX2Jsb2NraW5nKSB7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7c2hhcmVkX3RhZ3MgZGlzYWJsZWQ6IG1lbW9yeV9iYWNrZWQvYmxvY2tpbmcgZGV2aWNlIHJlcXVpcmVzIHBlci1kZXZpY2UgdGFnIHNldCBmb3IgQkxLX01RX0ZfQkxPQ0tJTkdcbiYjMzQ7KTsKJiM0MzsJCWRldi0mZ3Q7c2hhcmVkX3RhZ3MgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwogCWRldi0mZ3Q7Y2FjaGVfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIFVMT05HX01BWCAvIDEwMjQgLyAxMDI0LAogCQkJCQkJZGV2LSZndDtjYWNoZV9zaXplKTsKIAlkZXYtJmd0O21icHMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDEwMjQgKiA0MCwgZGV2LSZndDttYnBzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODEKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogMzk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE51bGxfYmxrIENvbmZpZ3VyYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jYCwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHdpdGhpbiB0aGUgYG51bGxfdmFsaWRhdGVfY29uZmAgZnVuY3Rpb24uIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiByZWFsbHkuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBtYWtpbmcgc3VyZSB0aGF0IGlmIGEgYG51bGxfYmxrYCBkZXZpY2UgaXMgY29uZmlndXJlZCBmb3IgYm90aCBtZW1vcnktYmFja2VkIG9wZXJhdGlvbiBhbmQgYmxvY2tpbmcgbW9kZSAoYGRldi0mZ3Q7YmxvY2tpbmdgIGlzIHRydWUpLCBidXQgdGhlIGdsb2JhbCBgZ19ibG9ja2luZ2AgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gYHNoYXJlZF90YWdzYCBnZXRzIGRpc2FibGVkLgoKSSYjMzk7dmUgbG9va2VkIGF0IHRoZSBjb2RlLiBUaGlzIHNlZW1zIGhhcm1sZXNzLCBmdW5kYW1lbnRhbGx5LiBJdCYjMzk7cyBqdXN0IGEgYm9vbGVhbiBmbGFnIGJlaW5nIG1vZGlmaWVkIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLiBUaGVyZSYjMzk7cyBubyBjcmVhdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgaGFyYm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBOb3RoaW5nIGlzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gVGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdGhhdCBtaWdodCBsZWFkIHRvIGEgdnVsbmVyYWJpbGl0eS4gSXQmIzM5O3Mgc2ltcGx5IGEgc2FmZXR5IGNoZWNrIHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24uCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4uLiBSaWdodCwgYGRldmAgaXMgYSBgc3RydWN0IG51bGxiX2RldmljZWAsIGFuZCBgc2hhcmVkX3RhZ3NgIGlzIGEgYm9vbGVhbiB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuIFRoaXMgaXMgYWxsIGNsZWFybHkgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uLiBUaGVyZSYjMzk7cyBubyBpbmRpY2F0aW9uIG9mIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBwYXRjaCBpcyBqdXN0IGEgYm9vbGVhbiBmbGFnIG1vZGlmaWNhdGlvbiBhbmQgYW4gaW5mbyBwcmludC4KCkdpdmVuIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBkb2VzbiYjMzk7dCB3YXJyYW50IEtNU0FOIGludmVzdGlnYXRpb24uIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgaGVyZS4gVGhpcyBjaGFuZ2Ugc2VlbXMgc2FmZSBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gSSYjMzk7bGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBvbmUuIEkgYW0gY29uZmlkZW50IHRoYXQgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBiZSBoYW5kbGVkIGJ5IG90aGVyIGRlYnVnIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgZGlzYWJsaW5nIGBzaGFyZWRfdGFnc2AgaWYgdGhlIGRldmljZSBpcyBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGJ1dCB0aGUgZ2xvYmFsIGBnX2Jsb2NraW5nYCBpcyBub3Qgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IG1vZGlmaWVzIGJvb2xlYW4gY29uZmlndXJhdGlvbiBmbGFncyBhbmQgcHJpbnRzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgZGlzYWJsaW5nIGBzaGFyZWRfdGFnc2AgaWYgdGhlIGRldmljZSBpcyBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGJ1dCB0aGUgZ2xvYmFsIGBnX2Jsb2NraW5nYCBpcyBub3Qgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IG1vZGlmaWVzIGJvb2xlYW4gY29uZmlndXJhdGlvbiBmbGFncyBhbmQgcHJpbnRzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIyOjU5LjQ0ODc4NTA3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzgxODE2NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudWxsX2FkZF9kZXZcIixcbiAgICBcIm51bGxiX2RldmljZV9wb3dlcl9zdG9yZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgYG51bGxfYmxrYCBkcml2ZXIsIGRpc2FibGluZyBgc2hhcmVkX3RhZ3NgIGlmIHRoZSBkZXZpY2UgaXMgbWVtb3J5LWJhY2tlZC9ibG9ja2luZyBidXQgdGhlIGdsb2JhbCBgZ19ibG9ja2luZ2AgaXMgbm90IHNldC4gVGhpcyBjaGFuZ2Ugb25seSBtb2RpZmllcyBib29sZWFuIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYW5kIHByaW50cyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIG51bGxfYmxrIHRlc3QgYmxvY2sgZHJpdmVyIHRvIGRpc2FibGUgc2hhcmVkX3RhZ3Mgd2hlbiBhIG1lbW9yeS1iYWNrZWQvYmxvY2tpbmcgZGV2aWNlIGlzIHVzZWQgd2l0aG91dCBnbG9iYWwgYmxvY2tpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyJ3Mgc2V0dXAgcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb25maWdmcyAobnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlKSBvciBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIEZ1enppbmcgdGhpcyBwYXRoIGVuc3VyZXMgdGhlIGNvbmZpZ3VyYXRpb24gZml4IGlzIHJvYnVzdCBhbmQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGJsb2NrIGxheWVyIHRhZyBzZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMjo1OS40NDg3ODkyNTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTUzNDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhMjEzYjY4ZTdlNTZhZTA0MzhmMWM1MGUxMzQxNDM4MzNmYmJmOTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDY6MjI6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xcbmluZGV4IGY4YzBmZDU3ZTA0MWEuLjBkYzdmZDEwNmRiODEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xcbkBAIC0xOTEyLDYgKzE5MTIsMTIgQEAgc3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxcbiBcXHRcXHRkZXYtXFx1MDAzZWJsb2NraW5nID0gdHJ1ZTtcXG4gXFx0ZWxzZSAvKiBjYWNoZSBpcyBtZWFuaW5nbGVzcyAqL1xcbiBcXHRcXHRkZXYtXFx1MDAzZWNhY2hlX3NpemUgPSAwO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlc2hhcmVkX3RhZ3MgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VibG9ja2luZyBcXHUwMDI2XFx1MDAyNiAhZ19ibG9ja2luZykge1xcbitcXHRcXHRwcl9pbmZvKFxcXCJzaGFyZWRfdGFncyBkaXNhYmxlZDogbWVtb3J5X2JhY2tlZC9ibG9ja2luZyBkZXZpY2UgcmVxdWlyZXMgcGVyLWRldmljZSB0YWcgc2V0IGZvciBCTEtfTVFfRl9CTE9DS0lOR1xcXFxuXFxcIik7XFxuK1xcdFxcdGRldi1cXHUwMDNlc2hhcmVkX3RhZ3MgPSBmYWxzZTtcXG4rXFx0fVxcbitcXG4gXFx0ZGV2LVxcdTAwM2VjYWNoZV9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgVUxPTkdfTUFYIC8gMTAyNCAvIDEwMjQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGRldi1cXHUwMDNlY2FjaGVfc2l6ZSk7XFxuIFxcdGRldi1cXHUwMDNlbWJwcyA9IG1pbl90KHVuc2lnbmVkIGludCwgMTAyNCAqIDQwLCBkZXYtXFx1MDAzZW1icHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMjo1OS45MjExMzg2MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NjA5MDk0MDgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05VTExfQkxLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnVsbF9hZGRfZGV2XCIsXG4gICAgXCJudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBudWxsX2JsayB0ZXN0IGJsb2NrIGRyaXZlciB0byBkaXNhYmxlIHNoYXJlZF90YWdzIHdoZW4gYSBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGRldmljZSBpcyB1c2VkIHdpdGhvdXQgZ2xvYmFsIGJsb2NraW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlcidzIHNldHVwIHBhdGgsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29uZmlnZnMgKG51bGxiX2RldmljZV9wb3dlcl9zdG9yZSkgb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBGdXp6aW5nIHRoaXMgcGF0aCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9uIGZpeCBpcyByb2J1c3QgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBibG9jayBsYXllciB0YWcgc2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2EyMTNiNjhlN2U1NmFlMDQzOGYxYzUwZTEzNDE0MzgzM2ZiYmY5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA2OjIyOjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuaW5kZXggZjhjMGZkNTdlMDQxYS4uMGRjN2ZkMTA2ZGI4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuQEAgLTE5MTIsNiArMTkxMiwxMiBAQCBzdGF0aWMgaW50IG51bGxfdmFsaWRhdGVfY29uZihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG4gXHRcdGRldi1cdTAwM2VibG9ja2luZyA9IHRydWU7XG4gXHRlbHNlIC8qIGNhY2hlIGlzIG1lYW5pbmdsZXNzICovXG4gXHRcdGRldi1cdTAwM2VjYWNoZV9zaXplID0gMDtcbitcbitcdGlmIChkZXYtXHUwMDNlc2hhcmVkX3RhZ3MgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VibG9ja2luZyBcdTAwMjZcdTAwMjYgIWdfYmxvY2tpbmcpIHtcbitcdFx0cHJfaW5mbyhcInNoYXJlZF90YWdzIGRpc2FibGVkOiBtZW1vcnlfYmFja2VkL2Jsb2NraW5nIGRldmljZSByZXF1aXJlcyBwZXItZGV2aWNlIHRhZyBzZXQgZm9yIEJMS19NUV9GX0JMT0NLSU5HXFxuXCIpO1xuK1x0XHRkZXYtXHUwMDNlc2hhcmVkX3RhZ3MgPSBmYWxzZTtcbitcdH1cbitcbiBcdGRldi1cdTAwM2VjYWNoZV9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgVUxPTkdfTUFYIC8gMTAyNCAvIDEwMjQsXG4gXHRcdFx0XHRcdFx0ZGV2LVx1MDAzZWNhY2hlX3NpemUpO1xuIFx0ZGV2LVx1MDAzZW1icHMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDEwMjQgKiA0MCwgZGV2LVx1MDAzZW1icHMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjI6NTkuOTIxMTQwMDY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMTAyMDA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBudWxsX2JsayBEcml2ZXIgQWZ0ZXIgYSBDb25maWd1cmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEkgc2VlIGEgcGF0Y2ggaGFzIGJlZW4gYXBwbGllZCB0byBgZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNgLiBJdCdzIHR3ZWFraW5nIHRoZSBgbnVsbF92YWxpZGF0ZV9jb25mYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGRpc2FibGluZyBgc2hhcmVkX3RhZ3NgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczogd2hlbiBgZGV2LVx1MDAzZXNoYXJlZF90YWdzYCBpcyBhbHJlYWR5IHRydWUsIGBkZXYtXHUwMDNlYmxvY2tpbmdgIGlzIHRydWUsIGFuZCBgZ19ibG9ja2luZ2AgaXMgKm5vdCogdHJ1ZS4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlci4gVGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyB0eXBpY2FsbHkgdXNlZCBhcyBhIHRlc3QgYmxvY2sgZGV2aWNlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGVzc2VudGlhbGx5IHJlY29uZmlndXJpbmcgdGhlIGBudWxsYl9kZXZpY2VgIGJ5IHNldHRpbmcgYGRldi1cdTAwM2VzaGFyZWRfdGFnc2AgdG8gYGZhbHNlYC5cblxuVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBpcyB0aGlzIG1vZGlmaWNhdGlvbiB3b3J0aCBmdXp6aW5nPyBDb25zaWRlcmluZyB0aGF0IGBudWxsX2Jsa2AgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBibG9jayBkZXZpY2UsIGFuZCBpdCBjYW4gYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggY29uZmlnZnMgb3IgbW9kdWxlIHBhcmFtZXRlcnMsIEknZCBzYXkgeWVzLCBhYnNvbHV0ZWx5LiBXZSBuZWVkIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIGBudWxsX3ZhbGlkYXRlX2NvbmZgIGlzIHJlYWNoYWJsZSBnaXZlbiB0aGUgbmV3IGNvbmZpZ3VyYXRpb25zLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBhbHRlcmVkIGNvZGUgcGF0aC4gVW5kZXJzdGFuZGluZyB0aG9zZSBjb25maWd1cmF0aW9ucyB3aWxsIGd1aWRlIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MDQuNDUyMTYzMTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzE1Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bGxfdmFsaWRhdGVfY29uZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xODY0PXN0YXRpYyBpbnQgbnVsbF9zZXR1cF90YWdzZXQoc3RydWN0IG51bGxiICpudWxsYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE4ODQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTg4NTpzdGF0aWMgaW50IG51bGxfdmFsaWRhdGVfY29uZihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTg4Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xOTYxPXN0YXRpYyBpbnQgbnVsbF9hZGRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5NzItXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTk3MzpcXHRydiA9IG51bGxfdmFsaWRhdGVfY29uZihkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5NzQtXFx0aWYgKHJ2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzowNC41MDE4ODI5NTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDExMDI3ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRGVidWdnaW5nIGEgUG90ZW50aWFsIGBudWxsX2Jsa2AgQ29uZmlndXJhdGlvbiBJc3N1ZSoqXG5cbk9rYXksIHNvIGBudWxsX2FkZF9kZXZgIGp1c3QgZ290IGNhbGxlZCwgYW5kIGl0J3MgY2FsbGluZyBgbnVsbF92YWxpZGF0ZV9jb25mYC4gVGhhdCBtZWFucyB3ZSdyZSBpbiB0aGUgZGV2aWNlIGFkZGl0aW9uIHNlcXVlbmNlLCBhbmQgc29tZXRoaW5nIGluIHRoZSBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24gaXMgbGlrZWx5IHJlbGV2YW50IHRvIHRoZSBgbnVsbF9ibGtgIGRldmljZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgZW5hYmxlIG9yIGluZmx1ZW5jZSB0aGUgYG51bGxfYmxrYCBmdW5jdGlvbmFsaXR5P1wiIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgZW5hYmxpbmcgY29uZGl0aW9ucy4gSSBzaG91bGQgZGl2ZSBpbnRvIGBudWxsX3ZhbGlkYXRlX2NvbmZgIHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYXJlIGJlaW5nIGNoZWNrZWQuIEtub3dpbmcgd2hpY2ggY29uZmlnIG9wdGlvbnMgbGVhZCB0byB0aGF0IGNvZGUgcGF0aCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB3aHkgdGhlIGRldmljZSBhZGRpdGlvbiBtaWdodCBiZSBmYWlsaW5nIG9yIGJlaGF2aW5nIHVuZXhwZWN0ZWRseS4gSSBzdXNwZWN0IEkgbmVlZCB0byBjaGVjayB3aGljaCBzcGVjaWZpYyBzZXR0aW5ncyBhcmUgY3JpdGljYWwgdG8gc3VjY2Vzc2Z1bGx5IHN0YXJ0aW5nIHVwIHRoZSBgbnVsbF9ibGtgIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjA5LjkxMjkxMjg4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM2NjQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9OVUxMX0JMS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6Njpjb25maWcgQkxLX0RFVl9OVUxMX0JMS1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTktXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEwOmNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MDkuOTY0Mjg4NDY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMjE3ODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYEJMS19ERVZfTlVMTF9CTEtgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB0aGF0J3MgYSBzdGFydGluZyBwb2ludCwgYnV0IGhhcmRseSB0aGUgd2hvbGUgc3RvcnkuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCwgaW1wbGllZCwgb3IgcG90ZW50aWFsbHkgaW4gY29uZmxpY3Qgd2l0aCB0aGlzIG9uZS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGEgc2VlbWluZ2x5IHNpbXBsZSBzZXR0aW5nIGxpa2UgdGhpcyBvZnRlbiBoYXMgY2FzY2FkaW5nIGVmZmVjdHMsIHNldHRpbmcgb2ZmIGEgY2hhaW4gcmVhY3Rpb24gb2YgZGVwZW5kZW5jaWVzLiBMZXQncyBtYWtlIHN1cmUgbm90aGluZyBpcyBvdmVybG9va2VkOyBhbmQgYXZvaWQgY3JlYXRpbmcgYSB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MTMuMjg2NDY4Njc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBOdWxsIGJsb2NrIGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQkxLX0RFVl9OVUxMX0JMS1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk51bGwgdGVzdCBibG9jayBkcml2ZXJcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgQ09ORklHRlNfRlNcXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuICAxMTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9OVUxMX0JMSyBcXHUwMDI2XFx1MDAyNiBGQVVMVF9JTkpFQ1RJT05fQ09ORklHRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MTMuMjg2NTI0MTQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI2NTE3ODY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE51bGwgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBudWxsYCBibG9jayBkZXZpY2UgaW1wbGVtZW50YXRpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGNvbnN0YW50IGBCTEtfREVWX05VTExfQkxLYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgZGVmaW5pbmcgdGhlIGJsb2NrIGRldmljZS4gTm90aGluZyBjb21wbGljYXRlZCBoZXJlLCB3aGljaCBpcyBnb29kLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBgbnVsbF92YWxpZGF0ZV9jb25mYCBpcyBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaXMgYXBwcm9wcmlhdGUsIGdpdmVuIGl0J3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseS4gSXQgbG9va3MgbGlrZSB0aGUgY2FsbGVyIGlzIGluZGVlZCBgbnVsbF9hZGRfZGV2YC4gTm93LCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG51bGxfYWRkX2RldmAgaXMgYWxzbyBwcm9wZXJseSBzY29wZWQgYXMgc3RhdGljLiBJdCBtYWtlcyBzZW5zZSwgZnJvbSBhIGNvZGUgb3JnYW5pemF0aW9uIGFuZCBzZWN1cml0eSBzdGFuZHBvaW50LCB0aGF0IGl0IHNob3VsZCBiZS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzoyMS41NTE3MDUxNDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDU1NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bGxfYWRkX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNzU9c3RhdGljIHZvaWQgbnVsbF9kZWxfZGV2KHN0cnVjdCBudWxsYiAqbnVsbGIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI3NjpzdGF0aWMgaW50IG51bGxfYWRkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTI3Ny1zdGF0aWMgc3RydWN0IG51bGxiICpudWxsX2ZpbmRfZGV2X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz00ODQ9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUwMC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1MDE6XFx0XFx0cmV0ID0gbnVsbF9hZGRfZGV2KGRldik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTAyLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE5NDg9c3RhdGljIGJvb2wgbnVsbF9zZXR1cF9mYXVsdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk2MC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxOTYxOnN0YXRpYyBpbnQgbnVsbF9hZGRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTYyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTIxMDI9c3RhdGljIGludCBudWxsX2NyZWF0ZV9kZXYodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIxMTEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2bG9jayk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjExMjpcXHRyZXQgPSBudWxsX2FkZF9kZXYoZGV2KTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMTEzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjIxLjYyNDc3MDU2M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjE3MjY5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhpcyBjb2RlIHNuaXBwZXQ6XG5cbioqQW5hbHl6aW5nIERldmljZSBJbml0aWFsaXphdGlvbiBhbmQgUG93ZXIgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIGBudWxsYCBibG9jayBkZXZpY2UgZHJpdmVyIGlzIHN0cnVjdHVyZWQuIEZpcnN0LCBgbnVsbF9hZGRfZGV2YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIOKAkyBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byB0aGlzIG1vZHVsZSBhbmQgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCBjYWxscy4gVGhlbiwgYG51bGxfY3JlYXRlX2RldmAgZ2V0cyBjYWxsZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoYXQncyB3aGVyZSB5b3UnZCBleHBlY3QgdGhlIGRldmljZSB0byBiZSBzZXQgdXAuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdDogYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gY29uZmlnZnMsIGltcGx5aW5nIHRoYXQncyBob3cgZGV2aWNlIHBvd2VyIHNldHRpbmdzIGFyZSBtYW5hZ2VkLiBCZWZvcmUgZGl2aW5nIGRlZXAsIGxldCBtZSB2ZXJpZnkgc29tZXRoaW5nOiBpcyBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBhbHNvIHN0YXRpYz8gWXVwLCBpdCBpcywgd2hpY2ggYWRkcyB0byB0aGUgaW50ZXJuYWwgbW9kdWxlIHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBleHBvcnRlZDsgdGhlIHN0YXRpYyBvbmVzIGFyZSBsaWtlbHkgdG8gYmUgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzoyNy44NDIwNDIyODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTMyNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bGxfY3JlYXRlX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yMDg2PXN0YXRpYyBzdHJ1Y3QgbnVsbGIgKm51bGxfZmluZF9kZXZfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjEwMS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMTAyOnN0YXRpYyBpbnQgbnVsbF9jcmVhdGVfZGV2KHZvaWQpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjEwMy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yMTMxPXN0YXRpYyBpbnQgX19pbml0IG51bGxfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjE4My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZGV2aWNlczsgaSsrKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjE4NDpcXHRcXHRyZXQgPSBudWxsX2NyZWF0ZV9kZXYoKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMTg1LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjI3Ljg5MjU4MDI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDAwMTIxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIENvbmZpZ0ZTIEV4cG9ydGVkIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgQ29uZmlnRlMgb3BlcmF0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSBleHBvc2VkLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0Li4uIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0IGRvY3VtZW50YXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBncmFudWxhcml0eSBvZiB3aGF0J3MgYXZhaWxhYmxlIHRvIG1lIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIFdoYXQgY2FuIEkgY29udHJvbCwgYW5kIGhvdz8gVGhpcyB3aWxsIGluZm9ybSBob3cgSSBhcHByb2FjaCBhbnkgY3VzdG9tIG1vZHVsZSBkZXNpZ24gb3IgaW50ZXJhY3Rpb24gSSdtIHBsYW5uaW5nLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmltaXRpdmVzIGJlZm9yZSBJIHN0YXJ0IHdyaXRpbmcgY29kZS4gQXJlIHRoZXJlIGFueSBnb3RjaGFzIEkgbmVlZCB0byBhbnRpY2lwYXRlPyBUaW1lIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MzEuMzMyNTk0ODYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIzMTM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWdmc19pdGVtX29wZXJhdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NjM3PXN0YXRpYyB2b2lkIG51bGxiX2RldmljZV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTY0NC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo2NDU6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbnVsbGJfZGV2aWNlX29wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NDYtXFx0LnJlbGVhc2VcXHQ9IG51bGxiX2RldmljZV9yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzozMS4zNzk4MzE1MThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3MjY2MDY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbnVsbF9ibGtgJ3MgQ29yZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYW5kIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcyBhcmUgd2l0aGluIHRoaXMgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyLlwiIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBmaWxlIHBhdGgg4oCTIHRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBkcml2ZXIncyBjb3JlIGluaXRpYWxpemF0aW9uLCByZWdpc3RyYXRpb24sIGFuZCBwb3RlbnRpYWxseSBpdHMgZGV2aWNlIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRvIGZpbmQgYG1vZHVsZV9pbml0YCBjYWxscyB0byBnZXQgdGhpbmdzIHJvbGxpbmcsIGBtb2R1bGVfZXhpdGAgZm9yIGNsZWFudXAsIGFuZCBmdW5jdGlvbnMgdGhhdCByZWdpc3RlciB0aGUgYmxvY2sgZGV2aWNlIHdpdGggdGhlIGtlcm5lbC4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHNvbWUga2luZCBvZiBgc3RydWN0IGdlbmRpc2tgIGFsbG9jYXRpb24gYW5kIHBvcHVsYXRpb24sIGFsb25nIHdpdGggdGhlIGRldmljZSBvcGVyYXRpb25zIHRoYXQgd2lsbCBoYW5kbGUgcmVxdWVzdHMsIGV2ZW4gaWYgdGhvc2Ugb3BlcmF0aW9ucyBhcmUganVzdCBkdW1teSBmdW5jdGlvbnMgb3IgZG8gbm90aGluZy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgaXQgaGFuZGxlcyByZXF1ZXN0cyBzaW5jZSB0aGlzIGRyaXZlciBzZXJ2ZXMgYXMgYSBibG9jayBob2xlLiBBcmUgdGhleSBpbW1lZGlhdGVseSBjb21wbGV0ZWQgd2l0aCBhIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgb3IgYXJlIHRoZXkganVzdCBkdW1wZWQgdG8gdGhlIHZvaWQ/IFBlcmhhcHMsIEknbGwgc2VlIHNvbWUgY29tbWVudHMgaW5kaWNhdGluZyB3aGF0IGlzIG5lZWRlZCB0byBiZSBpbXBsZW1lbnRlZC4gRmluYWxseSwgSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBvciBwYXJhbWV0ZXJzIHRoYXQgdGhlIGRyaXZlciB1c2VzLCBwYXJ0aWN1bGFybHkgZm9yIHNldHRpbmcgdXAgdGhlIFwibnVsbFwiIGJlaGF2aW9yLiBBbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcyBhcmUgYWxzbyBvbiBteSByYWRhci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjM1LjI1MjQ5OTgxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMzgyNDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjM1LjMwMTU0NjA3M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg1NzQ4NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBNb2R1bGUgU3RydWN0dXJlKipcblxuQWxyaWdodCwgc28gaXQncyBhIHNlbGYtY29udGFpbmVkIG1vZHVsZSwgbm8gZXh0ZXJuYWwgc3ltYm9scywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQncyBkZXNpZ25lZCB0byBiZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50LCBsaWtlbHkgbWFuYWdpbmcgaXRzIG93biByZXNvdXJjZXMgYW5kIG5vdCByZWx5aW5nIG9uIG90aGVyIG1vZHVsZXMgZm9yIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhlIG1vZHVsZSdzIGxpZmUgY3ljbGUgaXMgYWxsIGFib3V0IHRoZSBpbml0IGFuZCB0aGVuIHRoZSBDb25maWdGUyBvcGVyYXRpb25zLiBUaGF0J3MgYSBjbGFzc2ljIHBhdHRlcm4gZm9yIENvbmZpZ0ZTIGRldmljZXMuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZGV2aWNlIGhhbmRsZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgdGhlIGNvcmUgb3BlcmF0aW9ucy4gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBpbnRvIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGFuZCBgbnVsbGJfZGV2aWNlX29wc2AgZnVuY3Rpb25zLiBUaG9zZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGl0IGRvZXMgYW5kIGhvdyBpdCdzIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzozOS4yODcyOTgwMzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTc3MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bGxiX2RldmljZV9wb3dlcl9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz00Nzk9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3Bvd2VyX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNDgzLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjQ4NDpzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTQ4NS1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MzkuMzM5MjgxNjg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTAwNzAwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDb25maWdGUyBQb3dlciBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIENvbmZpZ0ZTIGF0dHJpYnV0ZSBjb250cm9sbGluZyBwb3dlciBtYW5hZ2VtZW50LiBUaW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZTsgdGhlcmUgYXJlIGEgbG90IG9mIHdheXMgcG93ZXIgaXMgaGFuZGxlZCwgc28gXCJwb3dlclwiIGFsb25lIGlzIHRvbyBnZW5lcmFsLiBJIGtub3cgQ29uZmlnRlMgb2ZmZXJzIGEgaGlnaGx5IGZsZXhpYmxlIGFwcHJvYWNoIHRvIGRldmljZSBjb25maWd1cmF0aW9uLCBhbmQgcG93ZXIgbWFuYWdlbWVudCBpcyBhIGNydWNpYWwgYXJlYSB3aGVyZSB0aGlzIGZsZXhpYmlsaXR5IGNhbiBiZSBsZXZlcmFnZWQuIEkgaGF2ZSB0byBmaW5kIHRoZSBjb3JyZWN0IGF0dHJpYnV0ZSBuYW1lIG9yIHBhdGggd2l0aGluIHRoZSBDb25maWdGUyBmaWxlc3lzdGVtIHRoYXQgZGVhbHMgd2l0aCBwb3dlci1yZWxhdGVkIHNldHRpbmdzLiBUaGlzIGNvdWxkIGludm9sdmUgc2V0dGluZ3MgZm9yIGRldmljZSBzdGF0ZXMsIHBvd2VyIG1vZGVzIChlLmcuLCBzdXNwZW5kLCBzdGFuZGJ5LCBhY3RpdmUpLCB2b2x0YWdlIHJlZ3VsYXRpb24sIG9yIGV2ZW4gY2xvY2sgZ2F0aW5nLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGRldmljZSB0eXBlIEknbSBpbnRlcmVzdGVkIGluIGNvbmZpZ3VyaW5nLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIGl0IHdpbGwgZGVwZW5kIG9uIHRoZSBkcml2ZXIgYW5kIGRldmljZSBpdHNlbGYsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gSXMgdGhlcmUgYSBjb25zaXN0ZW50IG5hbWluZyBzY2hlbWUgdGhhdCBJIGNhbiBsZXZlcmFnZT8gT3Igd2lsbCBJIGhhdmUgdG8gZGVsdmUgaW50byB0aGUgZHJpdmVyIHNvdXJjZSBjb2RlPyBIb3BlZnVsbHksIHRoaXMgaXMgd2VsbC1kb2N1bWVudGVkIGluIHRoZSByZWxldmFudCBkcml2ZXIgZG9jdW1lbnRhdGlvbiBhbmQvb3Iga2VybmVsIGRvY3VtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IHR1cm5zIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzg1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6NDMuMTg5MzU0NDI4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUzOTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdGU19BVFRSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTM1Mj1udWxsYl9kZXZpY2VfIyNOQU1FIyNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpwYWdlLFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTM3MS19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjM3MjpDT05GSUdGU19BVFRSKG51bGxiX2RldmljZV8sIE5BTUUpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTM3My1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTQ4ND1zdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTIyLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjUyMzpDT05GSUdGU19BVFRSKG51bGxiX2RldmljZV8sIHBvd2VyKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MjQtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01MzI9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NzUtfVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU3NjpDT05GSUdGU19BVFRSKG51bGxiX2RldmljZV8sIGJhZGJsb2Nrcyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc3LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTU3OD1zdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2Vfem9uZV9yZWFkb25seV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01ODQtfVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU4NTpDT05GSUdGU19BVFRSX1dPKG51bGxiX2RldmljZV8sIHpvbmVfcmVhZG9ubHkpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU4Ni1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01ODc9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3pvbmVfb2ZmbGluZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01OTMtfVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU5NDpDT05GSUdGU19BVFRSX1dPKG51bGxiX2RldmljZV8sIHpvbmVfb2ZmbGluZSk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTk1LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NzE5PXN0YXRpYyBzc2l6ZV90IG1lbWJfZ3JvdXBfZmVhdHVyZXNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKnBhZ2UpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03NDQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NzQ1OkNPTkZJR0ZTX0FUVFJfUk8obWVtYl9ncm91cF8sIGZlYXR1cmVzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03NDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjQzLjIzODkwMDEzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTUwOTY1OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIG51bGxiIERyaXZlcjogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbnVsbGJgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQuIEl0IHNlZW1zIHRoYXQgdGhlIGBjb25maWdmc2AgYXR0cmlidXRlIGBwb3dlcmAgaXMgdGhlIGtleSB0cmlnZ2VyLCB3aGljaCBsZWFkcyB0byBgbnVsbF9hZGRfZGV2YCBiZWluZyBjYWxsZWQuIFRoaXMgbWVhbnMgSSBzaG91bGQgcmVhbGx5IGJlIGZvY3VzaW5nIG9uIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGJlY2F1c2UgdGhhdCdzIHdoYXQncyBoYW5kbGluZyB0aGUgcG93ZXIgYXR0cmlidXRlLiBgbnVsbF9pbml0YCBpcyB0aGUgbW9kdWxlIGluaXQsIGJ1dCB0aGF0J3Mgb25seSBjYWxsZWQgb25jZSwgc28gbm90IHVzZWZ1bCBmb3Igb25nb2luZyBmdXp6aW5nLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGlzICpzdGF0aWMqLiBEYW1uISBUaGF0IGxpbWl0cyBpdHMgdXNlZnVsbmVzcywgYXMgc3l6a2FsbGVyIG5lZWRzIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgdG8gdGFyZ2V0LiBJIHNob3VsZCBnbyBiYWNrIGFuZCBjaGVjayBgbnVsbF9hZGRfZGV2YCBhbmQgYG51bGxfdmFsaWRhdGVfY29uZmAgYWdhaW4uIElmIHRoZXkncmUgYWxzbyBzdGF0aWMgYW5kIGlubGluZWQsIHRoZXkgd2lsbCBub3QgYmUgZ29vZCBmdXp6aW5nIHRhcmdldHMuXG5cbkJ1dCB3YWl0LCBJIGRvbid0IHRoaW5rIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGlzIGlubGluZWQuIEl0J3MgdXNlZCBhcyBhIGNhbGxiYWNrIGluIGEgc3RydWN0dXJlLCBzbyBpdCBsaWtlbHkgaGFzIGEgZGlzdGluY3QgYWRkcmVzcy4gVGhlIGBDT05GSUdGU19BVFRSYCBtYWNybyBjcmVhdGVzIGEgc3RydWN0dXJlIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMuIFNvIGRlZmluaXRlbHkgbm90IGlubGluZWQhXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHNpZ25hdHVyZSBvZiBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBqdXN0IHRvIGJlIHN1cmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzo0OS4zODk4NjgyNDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHR7XFxuIDQ4MTpcXHRcXHRyZXR1cm4gbnVsbGJfZGV2aWNlX2Jvb2xfYXR0cl9zaG93KHRvX251bGxiX2RldmljZShpdGVtKS1cXHUwMDNlcG93ZXIsIHBhZ2UpO1xcbiA0ODI6XFx0fVxcbiA0ODM6XFx0XFxuIDQ4NDpcXHRzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiA0ODU6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuIDQ4NjpcXHR7XFxuIDQ4NzpcXHRcXHRzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYgPSB0b19udWxsYl9kZXZpY2UoaXRlbSk7XFxuIDQ4ODpcXHRcXHRib29sIG5ld3AgPSBmYWxzZTtcXG4gNDg5OlxcdFxcdHNzaXplX3QgcmV0O1xcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRyZXQgPSBudWxsYl9kZXZpY2VfYm9vbF9hdHRyX3N0b3JlKFxcdTAwMjZuZXdwLCBwYWdlLCBjb3VudCk7XFxuIDQ5MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNDkzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdFxcdHJldCA9IGNvdW50O1xcbiA0OTY6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bG9jayk7XFxuIDQ5NzpcXHRcXHRpZiAoIWRldi1cXHUwMDNlcG93ZXIgXFx1MDAyNlxcdTAwMjYgbmV3cCkge1xcbiA0OTg6XFx0XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoTlVMTEJfREVWX0ZMX1VQLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncykpXFxuIDQ5OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTAwOlxcdFxcbiA1MDE6XFx0XFx0XFx0cmV0ID0gbnVsbF9hZGRfZGV2KGRldik7XFxuIDUwMjpcXHRcXHRcXHRpZiAocmV0KSB7XFxuIDUwMzpcXHRcXHRcXHRcXHRjbGVhcl9iaXQoTlVMTEJfREVWX0ZMX1VQLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuIDUwNDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTA1OlxcdFxcdFxcdH1cXG4gNTA2OlxcdFxcbiA1MDc6XFx0XFx0XFx0c2V0X2JpdChOVUxMQl9ERVZfRkxfQ09ORklHVVJFRCwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbiA1MDg6XFx0XFx0XFx0ZGV2LVxcdTAwM2Vwb3dlciA9IG5ld3A7XFxuIDUwOTpcXHRcXHRcXHRyZXQgPSBjb3VudDtcXG4gNTEwOlxcdFxcdH0gZWxzZSBpZiAoZGV2LVxcdTAwM2Vwb3dlciBcXHUwMDI2XFx1MDAyNiAhbmV3cCkge1xcbiA1MTE6XFx0XFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOVUxMQl9ERVZfRkxfVVAsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKSkge1xcbiA1MTI6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2Vwb3dlciA9IG5ld3A7XFxuIDUxMzpcXHRcXHRcXHRcXHRudWxsX2RlbF9kZXYoZGV2LVxcdTAwM2VudWxsYik7XFxuIDUxNDpcXHRcXHRcXHR9XFxuIDUxNTpcXHRcXHRcXHRjbGVhcl9iaXQoTlVMTEJfREVWX0ZMX0NPTkZJR1VSRUQsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKTtcXG4gNTE2OlxcdFxcdH1cXG4gNTE3OlxcdFxcbiA1MTg6XFx0b3V0OlxcbiA1MTk6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6NDkuMzg5OTk1OTg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NjM0MTA4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIFBvdGVudGlhbCBDb2RlIEhvdHNwb3RzKipcblxuQWxyaWdodCwgYmFzZWQgb24gd2hhdCBJJ3ZlIGJlZW4gZG9pbmcgbGF0ZWx5LCBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBzZWVtcyBsaWtlIGEgcHJldHR5IHNvbGlkIHN0YXJ0aW5nIHBvaW50IHdoZW4gbG9va2luZyBhdCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBIb3dldmVyLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBudWxsX2FkZF9kZXZgLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHJlZCBmbGFnIGFnYWluc3QgaW1wYWN0aW5nIHBlcmZvcm1hbmNlIHNpZ25pZmljYW50bHkgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBpbmxpbmVkLCBidXQgSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBxdWl0ZSBhIHN1YnN0YW50aWFsIGZ1bmN0aW9uLiBUaGVyZWZvcmUgaXQgbWlnaHQgYmUgd29ydGggaW52ZXN0aWdhdGluZywgZXZlbiBpZiBpdCBpcyBzdGF0aWMuIEnigJlsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXTigJlzIHRydWx5IGlubGluZWQgb3Igbm90LlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhIGJpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBiaWdnZXIgZnVuY3Rpb25zIGluIGBudWxsX2Jsa2AgdGhhdCBhcmVuJ3Qgc3RhdGljLiBJdCdzIGVhc3kgdG8gb3Zlcmxvb2sgdGhpbmdzIHdoZW4geW91IGdldCB0dW5uZWwgdmlzaW9uIG9uIGEgc3BlY2lmaWMgZnVuY3Rpb24sIHNvIGxldCBtZSBxdWlja2x5IHNjYW4gdGhhdCBtb2R1bGUgYW5kIGxvb2sgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhleSBhcmUgbW9zdCBsaWtlbHkgdGhlIG5leHQgY2FuZGlkYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkwMSwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6NTUuMTUzNDA5MzAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDU1NjA2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIyLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMzpzdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG51bGxfdGltZW91dF9hdHRyKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNDpzdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG51bGxfcmVxdWV1ZV9hdHRyKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNTpzdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG51bGxfaW5pdF9oY3R4X2F0dHIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTI2LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NjE9c3RydWN0IG51bGxiX3BhZ2Uge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNjctXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6Njg6c3RhdGljIExJU1RfSEVBRChudWxsYl9saXN0KTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02OS1zdGF0aWMgc3RydWN0IG11dGV4IGxvY2s7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NzA9c3RhdGljIGludCBudWxsX21ham9yO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjcxOnN0YXRpYyBERUZJTkVfSURBKG51bGxiX2luZGV4ZXMpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTcyLXN0YXRpYyBzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgdGFnX3NldDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTExNzY9c3RhdGljIHZvaWQgY29weV9mcm9tX251bGxiKHN0cnVjdCBudWxsYiAqbnVsbGIsIHZvaWQgKmRlc3QsIGxvZmZfdCBwb3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMjAwLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEyMDE6YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2Rpc2NhcmQoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEyMDItXFx0XFx0XFx0XFx0IHNlY3Rvcl90IHNlY3Rvciwgc2VjdG9yX3QgbnJfc2VjdG9ycylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzMTU9c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfdGhyb3R0bGVkKHN0cnVjdCBudWxsYl9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDUtICovXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM0NjpibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDctXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50ICpucl9zZWN0b3JzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM3MS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzcyOmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9tZW1vcnlfYmFja2VkKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM3My1cXHRcXHRcXHRcXHQgICAgICAgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0b3JfdCBucl9zZWN0b3JzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM5NT1zdGF0aWMgaW5saW5lIHZvaWQgbnVsbGJfY29tcGxldGVfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MjItXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQyMzpibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MjQtXFx0XFx0XFx0ICAgICAgc2VjdG9yX3Qgc2VjdG9yLCB1bnNpZ25lZCBpbnQgbnJfc2VjdG9ycylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD0xMTU9c3RydWN0IG51bGxiIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzEtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjEzMjpibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfZGlzY2FyZChzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIHNlY3Rvcl90IHNlY3RvcixcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTMzLVxcdFxcdFxcdFxcdCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTM0OmJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3NfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEzNS1cXHRcXHRcXHQgICAgICBzZWN0b3JfdCBzZWN0b3IsIHVuc2lnbmVkIGludCBucl9zZWN0b3JzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTM2OmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9iYWRibG9ja3Moc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEzNy1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgKm5yX3NlY3RvcnMpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxMzg6YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX21lbW9yeV9iYWNrZWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTM5LVxcdFxcdFxcdFxcdCAgICAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0MS0jaWZkZWYgQ09ORklHX0JMS19ERVZfWk9ORURcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQyOmludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQzOmludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQ0OnZvaWQgbnVsbF9mcmVlX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNDU6aW50IG51bGxfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0Ni1cXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbnJfem9uZXMsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0Ny1cXHRcXHQgICAgICBzdHJ1Y3QgYmxrX3JlcG9ydF96b25lc19hcmdzICphcmdzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQ4OmJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3Nfem9uZWRfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0OS1cXHRcXHRcXHRcXHQgICAgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTUwOnNpemVfdCBudWxsX3pvbmVfdmFsaWRfcmVhZF9sZW4oc3RydWN0IG51bGxiICpudWxsYixcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTUxLVxcdFxcdFxcdFxcdHNlY3Rvcl90IHNlY3RvciwgdW5zaWduZWQgaW50IGxlbik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE1Mjpzc2l6ZV90IHpvbmVfY29uZF9zdG9yZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE1My1cXHRcXHRcXHRzaXplX3QgY291bnQsIGVudW0gYmxrX3pvbmVfY29uZCBjb25kKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYz00Mj1zdGF0aWMgaW5saW5lIHZvaWQgbnVsbF91bmxvY2tfem9uZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNTAtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjUxOmludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNTItXFx0XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE3NC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTc1OmludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xNzYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4Ni1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTg3OnZvaWQgbnVsbF9mcmVlX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTkyLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoxOTM6aW50IG51bGxfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE5NC1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMjM5LSAqL1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoyNDA6c2l6ZV90IG51bGxfem9uZV92YWxpZF9yZWFkX2xlbihzdHJ1Y3QgbnVsbGIgKm51bGxiLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0yNDEtXFx0XFx0XFx0XFx0c2VjdG9yX3Qgc2VjdG9yLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTY0Nj1zdGF0aWMgYmxrX3N0YXR1c190IG51bGxfem9uZV9tZ210KHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA3LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3MDg6YmxrX3N0YXR1c190IG51bGxfcHJvY2Vzc196b25lZF9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA5LVxcdFxcdFxcdFxcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9NzQyPXN0YXRpYyB2b2lkIG51bGxfc2V0X3pvbmVfY29uZChzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzc3LSAqL1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3Nzg6c3NpemVfdCB6b25lX2NvbmRfc3RvcmUoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03NzktXFx0XFx0XFx0c2l6ZV90IGNvdW50LCBlbnVtIGJsa196b25lX2NvbmQgY29uZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6NTUuNDU4OTc0MzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU0MDc1NzUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gQ2hhbmdlKipcblxuT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgbGllcyB3aXRoaW4gYG51bGxfdmFsaWRhdGVfY29uZmAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBudWxsX2FkZF9kZXZgLiBJIHNlZSB0aGF0IGBudWxsX2FkZF9kZXZgIGlzIGNhbGxlZCBmcm9tIHR3byBwbGFjZXM6IGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgICh0aHJvdWdoIGNvbmZpZ2ZzKSBhbmQgYG51bGxfY3JlYXRlX2RldmAgKGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24pLiBUaGlzIG1vZGlmaWNhdGlvbiBzcGVjaWZpY2FsbHkgZGlzYWJsZXMgYHNoYXJlZF90YWdzYCBpZiBgZGV2LVx1MDAzZWJsb2NraW5nYCBpcyB0cnVlIGJ1dCBgZ19ibG9ja2luZ2AgaXNuJ3QuIFRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQgaW4gaG93IHRoZSBkcml2ZXIncyBjb25maWd1cmVkLiBHaXZlbiB0aGF0IGl0J3MgZml4aW5nIGEgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcHJvYmxlbSBpbiBhIHRlc3QgZHJpdmVyLCBmdXp6aW5nIHNvdW5kcyBsaWtlIGEgZ29vZCBpZGVhLlxuXG5TaW5jZSBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UgZHluYW1pY2FsbHkgdGhyb3VnaCBjb25maWdmcywgdGhhdCdzIHdoZXJlIEkgc2hvdWxkIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydC4gV2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBjaGFuZ2UgcXVpdGUgZWFzaWx5IHZpYSBjb25maWdmcywgc28gdGhhdOKAmXMgZ29vZCBuZXdzISBMZXQncyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGlzIHRoZSBiZXN0IGZ1bmN0aW9uIHRvIHRhcmdldC5cblxuSG1tLCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQncyB1c2VkIGFzIGEgY2FsbGJhY2sgaW4gYGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9uc2Agb3IgYGNvbmZpZ2ZzX2F0dHJpYnV0ZWAsIHNvIGl0J3Mgbm90IGdvaW5nIHRvIGJlIGlubGluZWQgYW5kIHN5emthbGxlciAqc2hvdWxkKiBiZSBhYmxlIHRvIGZpbmQgaXQsIGV2ZW4gdGhvdWdoIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGEgYml0IGhhcmRlciB0byByZXNvbHZlLiBCdXQgc3l6a2FsbGVyIGdlbmVyYWxseSBwcmVmZXJzIG5vbi1zdGF0aWMgZnVuY3Rpb25z4oCmIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBwYXRoP1xuXG5gbnVsbF9hZGRfZGV2YCBpcyBzdGF0aWMsIGFzIGlzIGBudWxsX3ZhbGlkYXRlX2NvbmZgLiBXaGF0IGFib3V0IGBudWxsX3Byb2Nlc3NfY21kYD8gVGhhdCdzIG5vdCBzdGF0aWMsIGJ1dCBpdCdzIHBhcnQgb2YgdGhlIElPIHBhdGgsIGFuZCB0aGlzIGNoYW5nZSBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgY29uZmlndXJhdGlvbi4gSWYgdGhlcmUgYXJlIG5vIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBwYXRoLCBJIGNhbiBqdXN0IHVzZSBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBvciBgbnVsbF9hZGRfZGV2YC4gV2FpdC4uLiBzeXprYWxsZXIgY2FuIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkgKmFyZW4ndCogaW5saW5lZC4gT2theSwgbGV0IG1lIGNoZWNrIGlmIGBudWxsX2FkZF9kZXZgIGlzIGlubGluZWQuIEdpdmVuIGl0cyBzaXplLCBpdCdzIHByb2JhYmx5IG5vdC4gSSdsbCBjaGVjayB0aGUgc2l6ZSBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTU5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjI0OjA0Ljk5OTczNzI1OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NjA6XFx0XFxuMTk2MTpcXHRzdGF0aWMgaW50IG51bGxfYWRkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXFxuMTk2MjpcXHR7XFxuMTk2MzpcXHRcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHtcXG4xOTY0OlxcdFxcdFxcdC5sb2dpY2FsX2Jsb2NrX3NpemVcXHQ9IGRldi1cXHUwMDNlYmxvY2tzaXplLFxcbjE5NjU6XFx0XFx0XFx0LnBoeXNpY2FsX2Jsb2NrX3NpemVcXHQ9IGRldi1cXHUwMDNlYmxvY2tzaXplLFxcbjE5NjY6XFx0XFx0XFx0Lm1heF9od19zZWN0b3JzXFx0XFx0PSBkZXYtXFx1MDAzZW1heF9zZWN0b3JzLFxcbjE5Njc6XFx0XFx0XFx0LmRtYV9hbGlnbm1lbnRcXHRcXHQ9IDEsXFxuMTk2ODpcXHRcXHR9O1xcbjE5Njk6XFx0XFxuMTk3MDpcXHRcXHRzdHJ1Y3QgbnVsbGIgKm51bGxiO1xcbjE5NzE6XFx0XFx0aW50IHJ2O1xcbjE5NzI6XFx0XFxuMTk3MzpcXHRcXHRydiA9IG51bGxfdmFsaWRhdGVfY29uZihkZXYpO1xcbjE5NzQ6XFx0XFx0aWYgKHJ2KVxcbjE5NzU6XFx0XFx0XFx0cmV0dXJuIHJ2O1xcbjE5NzY6XFx0XFxuMTk3NzpcXHRcXHRudWxsYiA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKm51bGxiKSwgR0ZQX0tFUk5FTCwgZGV2LVxcdTAwM2Vob21lX25vZGUpO1xcbjE5Nzg6XFx0XFx0aWYgKCFudWxsYikge1xcbjE5Nzk6XFx0XFx0XFx0cnYgPSAtRU5PTUVNO1xcbjE5ODA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTk4MTpcXHRcXHR9XFxuMTk4MjpcXHRcXHRudWxsYi1cXHUwMDNlZGV2ID0gZGV2O1xcbjE5ODM6XFx0XFx0ZGV2LVxcdTAwM2VudWxsYiA9IG51bGxiO1xcbjE5ODQ6XFx0XFxuMTk4NTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bnVsbGItXFx1MDAzZWxvY2spO1xcbjE5ODY6XFx0XFxuMTk4NzpcXHRcXHRydiA9IHNldHVwX3F1ZXVlcyhudWxsYik7XFxuMTk4ODpcXHRcXHRpZiAocnYpXFxuMTk4OTpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX251bGxiO1xcbjE5OTA6XFx0XFxuMTk5MTpcXHRcXHRydiA9IG51bGxfc2V0dXBfdGFnc2V0KG51bGxiKTtcXG4xOTkyOlxcdFxcdGlmIChydilcXG4xOTkzOlxcdFxcdFxcdGdvdG8gb3V0X2NsZWFudXBfcXVldWVzO1xcbjE5OTQ6XFx0XFxuMTk5NTpcXHRcXHRpZiAoZGV2LVxcdTAwM2V2aXJ0X2JvdW5kYXJ5KVxcbjE5OTY6XFx0XFx0XFx0bGltLnZpcnRfYm91bmRhcnlfbWFzayA9IFBBR0VfU0laRSAtIDE7XFxuMTk5NzpcXHRcXHRudWxsX2NvbmZpZ19kaXNjYXJkKG51bGxiLCBcXHUwMDI2bGltKTtcXG4xOTk4OlxcdFxcdGlmIChkZXYtXFx1MDAzZXpvbmVkKSB7XFxuMTk5OTpcXHRcXHRcXHRydiA9IG51bGxfaW5pdF96b25lZF9kZXYoZGV2LCBcXHUwMDI2bGltKTtcXG4yMDAwOlxcdFxcdFxcdGlmIChydilcXG4yMDAxOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2NsZWFudXBfdGFncztcXG4yMDAyOlxcdFxcdH1cXG4yMDAzOlxcdFxcbjIwMDQ6XFx0XFx0aWYgKGRldi1cXHUwMDNlY2FjaGVfc2l6ZSBcXHUwMDNlIDApIHtcXG4yMDA1OlxcdFxcdFxcdHNldF9iaXQoTlVMTEJfREVWX0ZMX0NBQ0hFLCBcXHUwMDI2bnVsbGItXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MpO1xcbjIwMDY6XFx0XFx0XFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xcbjIwMDc6XFx0XFx0XFx0aWYgKGRldi1cXHUwMDNlZnVhKVxcbjIwMDg6XFx0XFx0XFx0XFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX0ZVQTtcXG4yMDA5OlxcdFxcdH1cXG4yMDEwOlxcdFxcbjIwMTE6XFx0XFx0aWYgKGRldi1cXHUwMDNlcm90YXRpb25hbClcXG4yMDEyOlxcdFxcdFxcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xcbjIwMTM6XFx0XFxuMjAxNDpcXHRcXHRudWxsYi1cXHUwMDNlZGlzayA9IGJsa19tcV9hbGxvY19kaXNrKG51bGxiLVxcdTAwM2V0YWdfc2V0LCBcXHUwMDI2bGltLCBudWxsYik7XFxuMjAxNTpcXHRcXHRpZiAoSVNfRVJSKG51bGxiLVxcdTAwM2VkaXNrKSkge1xcbjIwMTY6XFx0XFx0XFx0cnYgPSBQVFJfRVJSKG51bGxiLVxcdTAwM2VkaXNrKTtcXG4yMDE3OlxcdFxcdFxcdGdvdG8gb3V0X2NsZWFudXBfem9uZTtcXG4yMDE4OlxcdFxcdH1cXG4yMDE5OlxcdFxcdG51bGxiLVxcdTAwM2VxID0gbnVsbGItXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlO1xcbjIwMjA6XFx0XFxuMjAyMTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VtYnBzKSB7XFxuMjAyMjpcXHRcXHRcXHRzZXRfYml0KE5VTExCX0RFVl9GTF9USFJPVFRMRUQsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKTtcXG4yMDIzOlxcdFxcdFxcdG51bGxiX3NldHVwX2J3dGltZXIobnVsbGIpO1xcbjIwMjQ6XFx0XFx0fVxcbjIwMjU6XFx0XFxuMjAyNjpcXHRcXHRudWxsYi1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhID0gbnVsbGI7XFxuMjAyNzpcXHRcXG4yMDI4OlxcdFxcdHJ2ID0gaWRhX2FsbG9jKFxcdTAwMjZudWxsYl9pbmRleGVzLCBHRlBfS0VSTkVMKTtcXG4yMDI5OlxcdFxcdGlmIChydiBcXHUwMDNjIDApXFxuMjAzMDpcXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwX2Rpc2s7XFxuMjAzMTpcXHRcXG4yMDMyOlxcdFxcdG51bGxiLVxcdTAwM2VpbmRleCA9IHJ2O1xcbjIwMzM6XFx0XFx0ZGV2LVxcdTAwM2VpbmRleCA9IHJ2O1xcbjIwMzQ6XFx0XFxuMjAzNTpcXHRcXHRpZiAoY29uZmlnX2l0ZW1fbmFtZShcXHUwMDI2ZGV2LVxcdTAwM2Vncm91cC5jZ19pdGVtKSkge1xcbjIwMzY6XFx0XFx0XFx0LyogVXNlIGNvbmZpZ2ZzIGRpciBuYW1lIGFzIHRoZSBkZXZpY2UgbmFtZSAqL1xcbjIwMzc6XFx0XFx0XFx0c25wcmludGYobnVsbGItXFx1MDAzZWRpc2tfbmFtZSwgc2l6ZW9mKG51bGxiLVxcdTAwM2VkaXNrX25hbWUpLFxcbjIwMzg6XFx0XFx0XFx0XFx0IFxcXCIlc1xcXCIsIGNvbmZpZ19pdGVtX25hbWUoXFx1MDAyNmRldi1cXHUwMDNlZ3JvdXAuY2dfaXRlbSkpO1xcbjIwMzk6XFx0XFx0fSBlbHNlIHtcXG4yMDQwOlxcdFxcdFxcdHNwcmludGYobnVsbGItXFx1MDAzZWRpc2tfbmFtZSwgXFxcIm51bGxiJWRcXFwiLCBudWxsYi1cXHUwMDNlaW5kZXgpO1xcbjIwNDE6XFx0XFx0fVxcbjIwNDI6XFx0XFxuMjA0MzpcXHRcXHRzZXRfY2FwYWNpdHkobnVsbGItXFx1MDAzZWRpc2ssXFxuMjA0NDpcXHRcXHRcXHQoKHNlY3Rvcl90KW51bGxiLVxcdTAwM2VkZXYtXFx1MDAzZXNpemUgKiBTWl8xTSkgXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZUKTtcXG4yMDQ1OlxcdFxcdG51bGxiLVxcdTAwM2VkaXNrLVxcdTAwM2VtYWpvciA9IG51bGxfbWFqb3I7XFxuMjA0NjpcXHRcXHRudWxsYi1cXHUwMDNlZGlzay1cXHUwMDNlZmlyc3RfbWlub3IgPSBudWxsYi1cXHUwMDNlaW5kZXg7XFxuMjA0NzpcXHRcXHRudWxsYi1cXHUwMDNlZGlzay1cXHUwMDNlbWlub3JzID0gMTtcXG4yMDQ4OlxcdFxcdG51bGxiLVxcdTAwM2VkaXNrLVxcdTAwM2Vmb3BzID0gXFx1MDAyNm51bGxfb3BzO1xcbjIwNDk6XFx0XFx0bnVsbGItXFx1MDAzZWRpc2stXFx1MDAzZXByaXZhdGVfZGF0YSA9IG51bGxiO1xcbjIwNTA6XFx0XFx0c3Ryc2NweShudWxsYi1cXHUwMDNlZGlzay1cXHUwMDNlZGlza19uYW1lLCBudWxsYi1cXHUwMDNlZGlza19uYW1lKTtcXG4yMDUxOlxcdFxcbjIwNTI6XFx0XFx0aWYgKG51bGxiLVxcdTAwM2VkZXYtXFx1MDAzZXpvbmVkKSB7XFxuMjA1MzpcXHRcXHRcXHRydiA9IG51bGxfcmVnaXN0ZXJfem9uZWRfZGV2KG51bGxiKTtcXG4yMDU0OlxcdFxcdFxcdGlmIChydilcXG4yMDU1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2lkYV9mcmVlO1xcbjIwNTY6XFx0XFx0fVxcbjIwNTc6XFx0XFxuMjA1ODpcXHRcXHRydiA9IGFkZF9kaXNrKG51bGxiLVxcdTAwM2VkaXNrKTtcXG4yMDU5OlxcdFxcdGlmIChydilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjQ6MDQuOTk5ODc3MDQ5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTI5Nzc3ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBOdWxsIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYG51bGxfYWRkX2RldmAgaXNuJ3QgaW5saW5lZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgYSBmb2N1cyBmdW5jdGlvbi4gQW5kIGhleSwgU3l6a2FsbGVyIGNhbiBhbHNvIHRhcmdldCBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYD8gUGVyZmVjdCwgSSdsbCBwcm92aWRlIGJvdGguIExldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHRlc3QgcGxhbiBmb3IgdGhpcy5cblxuVGhlIG1haW4gY29uZmlndXJhdGlvbiBpcyBgQkxLX0RFVl9OVUxMX0JMS2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBUaGUgcGF0Y2ggbWVudGlvbnMgYHNoYXJlZF90YWdzYCwgYGJsb2NraW5nYCwgYW5kIGBnX2Jsb2NraW5nYC4gVGhvc2UgYWxsIHNlZW0gdG8gYmUgcGFydCBvZiB0aGUgYG51bGxfYmxrYCBkZXZpY2UsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhvc2UuIEkgc2hvdWxkIGFsc28gY29uZmlybSB0aGF0IGBDT05GSUdGU19GU2AgaXMgbmVlZGVkLCBidXQgaXQgc2VlbXMgdGhhdCBpdCdzIHNlbGVjdGVkIGJ5IGBCTEtfREVWX05VTExfQkxLYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gU28sIGBCTEtfREVWX05VTExfQkxLYCBzaG91bGQgYmUgc3VmZmljaWVudCBvbiBpdHMgb3duLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBZZXMsIGBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS2AgaXMgdGhlIGNyaXRpY2FsIG9uZS5cblxuQWxyaWdodCwgbGV0J3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoLlxuYGBgY1xuIFx0aWYgKGRldi1cdTAwM2VzaGFyZWRfdGFncyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWJsb2NraW5nIFx1MDAyNlx1MDAyNiAhZ19ibG9ja2luZykge1xuIFx0XHRwcl9pbmZvKFwic2hhcmVkX3RhZ3MgZGlzYWJsZWQ6IG1lbW9yeV9iYWNrZWQvYmxvY2tpbmcgZGV2aWNlIHJlcXVpcmVzIHBlci1kZXZpY2UgdGFnIHNldCBmb3IgQkxLX01RX0ZfQkxPQ0tJTkdcXG5cIik7XG4gXHRcdGRldi1cdTAwM2VzaGFyZWRfdGFncyA9IGZhbHNlO1xuIFx0fVxuYGBgXG5Pa2F5LCB0aGlzIGlzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgZXNzZW50aWFsbHkgbW9kaWZ5aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBudWxsX2JsayBkZXZpY2UgdG8gcHJldmVudCBhIGNyYXNoIG9yIGluY29ycmVjdCBiZWhhdmlvciB3aGVuIGBzaGFyZWRfdGFnc2AgaXMgdXNlZCB3aXRoIGEgYmxvY2tpbmcgZGV2aWNlIGJ1dCBgZ19ibG9ja2luZ2AgaXMgZmFsc2UuIERlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBtYWtlIHN1cmUgdGhpcyBmaXggd29ya3MgYXMgaW50ZW5kZWQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzLlxuXG5TbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHkgYG51bGxfYWRkX2RldmAgYW5kIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgLiBBbmQgZm9yIGNvbmZpZ3VyYXRpb25zLCBgQkxLX0RFVl9OVUxMX0JMS2AgaXMgdGhlIGtleSBvbmUgdG8gZW5hYmxlLlxuXG5MZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5MSwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyNDoxNS45Mjk2NTY5MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQxOTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm51bGxfYWRkX2RldlwiLFxuICAgIFwibnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgbnVsbF9ibGsgdGVzdCBibG9jayBkcml2ZXIgdG8gZGlzYWJsZSBzaGFyZWRfdGFncyB3aGVuIGEgbWVtb3J5LWJhY2tlZC9ibG9ja2luZyBkZXZpY2UgaXMgdXNlZCB3aXRob3V0IGdsb2JhbCBibG9ja2luZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIncyBzZXR1cCBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIChudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUpIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gRnV6emluZyB0aGlzIHBhdGggZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbiBmaXggaXMgcm9idXN0IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYmxvY2sgbGF5ZXIgdGFnIHNldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm51bGxfYWRkX2RldlwiLFxuICAgIFwibnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgbnVsbF9ibGsgdGVzdCBibG9jayBkcml2ZXIgdG8gZGlzYWJsZSBzaGFyZWRfdGFncyB3aGVuIGEgbWVtb3J5LWJhY2tlZC9ibG9ja2luZyBkZXZpY2UgaXMgdXNlZCB3aXRob3V0IGdsb2JhbCBibG9ja2luZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIncyBzZXR1cCBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIChudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUpIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gRnV6emluZyB0aGlzIHBhdGggZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbiBmaXggaXMgcm9idXN0IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYmxvY2sgbGF5ZXIgdGFnIHNldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjI0OjE2LjAxMjA4MzIyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxODUwNDI4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjI0OjE2LjAxMjY3MzkzMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MjE3OTEwNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgZGlzYWJsaW5nIGBzaGFyZWRfdGFnc2AgaWYgdGhlIGRldmljZSBpcyBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGJ1dCB0aGUgZ2xvYmFsIGBnX2Jsb2NraW5nYCBpcyBub3Qgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IG1vZGlmaWVzIGJvb2xlYW4gY29uZmlndXJhdGlvbiBmbGFncyBhbmQgcHJpbnRzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2EyMTNiNjhlN2U1NmFlMDQzOGYxYzUwZTEzNDE0MzgzM2ZiYmY5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA2OjIyOjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuaW5kZXggZjhjMGZkNTdlMDQxYS4uMGRjN2ZkMTA2ZGI4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuQEAgLTE5MTIsNiArMTkxMiwxMiBAQCBzdGF0aWMgaW50IG51bGxfdmFsaWRhdGVfY29uZihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG4gXHRcdGRldi1cdTAwM2VibG9ja2luZyA9IHRydWU7XG4gXHRlbHNlIC8qIGNhY2hlIGlzIG1lYW5pbmdsZXNzICovXG4gXHRcdGRldi1cdTAwM2VjYWNoZV9zaXplID0gMDtcbitcbitcdGlmIChkZXYtXHUwMDNlc2hhcmVkX3RhZ3MgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VibG9ja2luZyBcdTAwMjZcdTAwMjYgIWdfYmxvY2tpbmcpIHtcbitcdFx0cHJfaW5mbyhcInNoYXJlZF90YWdzIGRpc2FibGVkOiBtZW1vcnlfYmFja2VkL2Jsb2NraW5nIGRldmljZSByZXF1aXJlcyBwZXItZGV2aWNlIHRhZyBzZXQgZm9yIEJMS19NUV9GX0JMT0NLSU5HXFxuXCIpO1xuK1x0XHRkZXYtXHUwMDNlc2hhcmVkX3RhZ3MgPSBmYWxzZTtcbitcdH1cbitcbiBcdGRldi1cdTAwM2VjYWNoZV9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgVUxPTkdfTUFYIC8gMTAyNCAvIDEwMjQsXG4gXHRcdFx0XHRcdFx0ZGV2LVx1MDAzZWNhY2hlX3NpemUpO1xuIFx0ZGV2LVx1MDAzZW1icHMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDEwMjQgKiA0MCwgZGV2LVx1MDAzZW1icHMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjQ6MTYuMDEyNjc0NjEyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMTc4ODgwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTnVsbF9ibGsgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY2AsIHNwZWNpZmljYWxseSBhZGRpbmcgYSBjaGVjayB3aXRoaW4gdGhlIGBudWxsX3ZhbGlkYXRlX2NvbmZgIGZ1bmN0aW9uLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiByZWFsbHkuIEVzc2VudGlhbGx5LCBpdCdzIG1ha2luZyBzdXJlIHRoYXQgaWYgYSBgbnVsbF9ibGtgIGRldmljZSBpcyBjb25maWd1cmVkIGZvciBib3RoIG1lbW9yeS1iYWNrZWQgb3BlcmF0aW9uIGFuZCBibG9ja2luZyBtb2RlIChgZGV2LVx1MDAzZWJsb2NraW5nYCBpcyB0cnVlKSwgYnV0IHRoZSBnbG9iYWwgYGdfYmxvY2tpbmdgIGlzbid0IGVuYWJsZWQsIHRoZW4gYHNoYXJlZF90YWdzYCBnZXRzIGRpc2FibGVkLlxuXG5JJ3ZlIGxvb2tlZCBhdCB0aGUgY29kZS4gVGhpcyBzZWVtcyBoYXJtbGVzcywgZnVuZGFtZW50YWxseS4gSXQncyBqdXN0IGEgYm9vbGVhbiBmbGFnIGJlaW5nIG1vZGlmaWVkIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLiBUaGVyZSdzIG5vIGNyZWF0aW9uIG9mIG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBoYXJib3IgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vdGhpbmcgaXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHRoYXQgbWlnaHQgbGVhZCB0byBhIHZ1bG5lcmFiaWxpdHkuIEl0J3Mgc2ltcGx5IGEgc2FmZXR5IGNoZWNrIHdpdGhpbiB0aGUgZHJpdmVyJ3MgY29uZmlndXJhdGlvbi5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuLi4gUmlnaHQsIGBkZXZgIGlzIGEgYHN0cnVjdCBudWxsYl9kZXZpY2VgLCBhbmQgYHNoYXJlZF90YWdzYCBpcyBhIGJvb2xlYW4gd2l0aGluIHRoYXQgc3RydWN0dXJlLiBUaGlzIGlzIGFsbCBjbGVhcmx5IGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbi4gVGhlcmUncyBubyBpbmRpY2F0aW9uIG9mIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBwYXRjaCBpcyBqdXN0IGEgYm9vbGVhbiBmbGFnIG1vZGlmaWNhdGlvbiBhbmQgYW4gaW5mbyBwcmludC5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgZG9lc24ndCB3YXJyYW50IEtNU0FOIGludmVzdGlnYXRpb24uIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgaGVyZS4gVGhpcyBjaGFuZ2Ugc2VlbXMgc2FmZSBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIG9uZS4gSSBhbSBjb25maWRlbnQgdGhhdCBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGJlIGhhbmRsZWQgYnkgb3RoZXIgZGVidWcgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODEsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjQ6MjQuMjMwNTY1NjI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgZGlzYWJsaW5nIGBzaGFyZWRfdGFnc2AgaWYgdGhlIGRldmljZSBpcyBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGJ1dCB0aGUgZ2xvYmFsIGBnX2Jsb2NraW5nYCBpcyBub3Qgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IG1vZGlmaWVzIGJvb2xlYW4gY29uZmlndXJhdGlvbiBmbGFncyBhbmQgcHJpbnRzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgYG51bGxfYmxrYCBkcml2ZXIsIGRpc2FibGluZyBgc2hhcmVkX3RhZ3NgIGlmIHRoZSBkZXZpY2UgaXMgbWVtb3J5LWJhY2tlZC9ibG9ja2luZyBidXQgdGhlIGdsb2JhbCBgZ19ibG9ja2luZ2AgaXMgbm90IHNldC4gVGhpcyBjaGFuZ2Ugb25seSBtb2RpZmllcyBib29sZWFuIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYW5kIHByaW50cyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn25g[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 06:20:38 +0000 UTC FinishedAt: 2026-08-25 06:24:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "2f1baf1fc8929e6c48370be543ad028ac7ad4131", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_NULL_BLK" ], "series_id": "89f4ac20-c124-454c-a88f-b40367c96353" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "null_add_dev", "nullb_device_power_store" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudWxsX2FkZF9kZXYmIzM0OywKICAgICYjMzQ7bnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgYG51bGxfYmxrYCBkcml2ZXIsIGRpc2FibGluZyBgc2hhcmVkX3RhZ3NgIGlmIHRoZSBkZXZpY2UgaXMgbWVtb3J5LWJhY2tlZC9ibG9ja2luZyBidXQgdGhlIGdsb2JhbCBgZ19ibG9ja2luZ2AgaXMgbm90IHNldC4gVGhpcyBjaGFuZ2Ugb25seSBtb2RpZmllcyBib29sZWFuIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYW5kIHByaW50cyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBudWxsX2JsayB0ZXN0IGJsb2NrIGRyaXZlciB0byBkaXNhYmxlIHNoYXJlZF90YWdzIHdoZW4gYSBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGRldmljZSBpcyB1c2VkIHdpdGhvdXQgZ2xvYmFsIGJsb2NraW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBzZXR1cCBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIChudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUpIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gRnV6emluZyB0aGlzIHBhdGggZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbiBmaXggaXMgcm9idXN0IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYmxvY2sgbGF5ZXIgdGFnIHNldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYTIxM2I2OGU3ZTU2YWUwNDM4ZjFjNTBlMTM0MTQzODMzZmJiZjkxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDY6MjI6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuaW5kZXggZjhjMGZkNTdlMDQxYS4uMGRjN2ZkMTA2ZGI4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuQEAgLTE5MTIsNiAmIzQzOzE5MTIsMTIgQEAgc3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxuIFx0XHRkZXYtXHUwMDNlYmxvY2tpbmcgPSB0cnVlO1xuIFx0ZWxzZSAvKiBjYWNoZSBpcyBtZWFuaW5nbGVzcyAqL1xuIFx0XHRkZXYtXHUwMDNlY2FjaGVfc2l6ZSA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChkZXYtXHUwMDNlc2hhcmVkX3RhZ3MgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VibG9ja2luZyBcdTAwMjZcdTAwMjYgIWdfYmxvY2tpbmcpIHtcbiYjNDM7XHRcdHByX2luZm8oXCYjMzQ7c2hhcmVkX3RhZ3MgZGlzYWJsZWQ6IG1lbW9yeV9iYWNrZWQvYmxvY2tpbmcgZGV2aWNlIHJlcXVpcmVzIHBlci1kZXZpY2UgdGFnIHNldCBmb3IgQkxLX01RX0ZfQkxPQ0tJTkdcXG5cJiMzNDspO1xuJiM0MztcdFx0ZGV2LVx1MDAzZXNoYXJlZF90YWdzID0gZmFsc2U7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGRldi1cdTAwM2VjYWNoZV9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgVUxPTkdfTUFYIC8gMTAyNCAvIDEwMjQsXG4gXHRcdFx0XHRcdFx0ZGV2LVx1MDAzZWNhY2hlX3NpemUpO1xuIFx0ZGV2LVx1MDAzZW1icHMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDEwMjQgKiA0MCwgZGV2LVx1MDAzZW1icHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnVsbF9hZGRfZGV2JiMzNDssCiAgICAmIzM0O251bGxiX2RldmljZV9wb3dlcl9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBudWxsX2JsayB0ZXN0IGJsb2NrIGRyaXZlciB0byBkaXNhYmxlIHNoYXJlZF90YWdzIHdoZW4gYSBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGRldmljZSBpcyB1c2VkIHdpdGhvdXQgZ2xvYmFsIGJsb2NraW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBzZXR1cCBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIChudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUpIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gRnV6emluZyB0aGlzIHBhdGggZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbiBmaXggaXMgcm9idXN0IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYmxvY2sgbGF5ZXIgdGFnIHNldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYTIxM2I2OGU3ZTU2YWUwNDM4ZjFjNTBlMTM0MTQzODMzZmJiZjkxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDY6MjI6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYyBiL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jCmluZGV4IGY4YzBmZDU3ZTA0MWEuLjBkYzdmZDEwNmRiODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jCkBAIC0xOTEyLDYgJiM0MzsxOTEyLDEyIEBAIHN0YXRpYyBpbnQgbnVsbF92YWxpZGF0ZV9jb25mKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldikKIAkJZGV2LSZndDtibG9ja2luZyA9IHRydWU7CiAJZWxzZSAvKiBjYWNoZSBpcyBtZWFuaW5nbGVzcyAqLwogCQlkZXYtJmd0O2NhY2hlX3NpemUgPSAwOwomIzQzOwomIzQzOwlpZiAoZGV2LSZndDtzaGFyZWRfdGFncyAmYW1wOyZhbXA7IGRldi0mZ3Q7YmxvY2tpbmcgJmFtcDsmYW1wOyAhZ19ibG9ja2luZykgewomIzQzOwkJcHJfaW5mbygmIzM0O3NoYXJlZF90YWdzIGRpc2FibGVkOiBtZW1vcnlfYmFja2VkL2Jsb2NraW5nIGRldmljZSByZXF1aXJlcyBwZXItZGV2aWNlIHRhZyBzZXQgZm9yIEJMS19NUV9GX0JMT0NLSU5HXG4mIzM0Oyk7CiYjNDM7CQlkZXYtJmd0O3NoYXJlZF90YWdzID0gZmFsc2U7CiYjNDM7CX0KJiM0MzsKIAlkZXYtJmd0O2NhY2hlX3NpemUgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBVTE9OR19NQVggLyAxMDI0IC8gMTAyNCwKIAkJCQkJCWRldi0mZ3Q7Y2FjaGVfc2l6ZSk7CiAJZGV2LSZndDttYnBzID0gbWluX3QodW5zaWduZWQgaW50LCAxMDI0ICogNDAsIGRldi0mZ3Q7bWJwcyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgbnVsbF9ibGsgRHJpdmVyIEFmdGVyIGEgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKgoKT2theSwgc28gSSBzZWUgYSBwYXRjaCBoYXMgYmVlbiBhcHBsaWVkIHRvIGBkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY2AuIEl0JiMzOTtzIHR3ZWFraW5nIHRoZSBgbnVsbF92YWxpZGF0ZV9jb25mYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGRpc2FibGluZyBgc2hhcmVkX3RhZ3NgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczogd2hlbiBgZGV2LSZndDtzaGFyZWRfdGFnc2AgaXMgYWxyZWFkeSB0cnVlLCBgZGV2LSZndDtibG9ja2luZ2AgaXMgdHJ1ZSwgYW5kIGBnX2Jsb2NraW5nYCBpcyAqbm90KiB0cnVlLiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGBudWxsX2Jsa2AgZHJpdmVyLiBUaGlzIHBhcnRpY3VsYXIgZHJpdmVyIGlzIHR5cGljYWxseSB1c2VkIGFzIGEgdGVzdCBibG9jayBkZXZpY2UuIEl0IGxvb2tzIGxpa2Ugd2UmIzM5O3JlIGVzc2VudGlhbGx5IHJlY29uZmlndXJpbmcgdGhlIGBudWxsYl9kZXZpY2VgIGJ5IHNldHRpbmcgYGRldi0mZ3Q7c2hhcmVkX3RhZ3NgIHRvIGBmYWxzZWAuCgpUaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoaXMgbW9kaWZpY2F0aW9uIHdvcnRoIGZ1enppbmc/IENvbnNpZGVyaW5nIHRoYXQgYG51bGxfYmxrYCBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGJsb2NrIGRldmljZSwgYW5kIGl0IGNhbiBiZSBpbnN0YW50aWF0ZWQgdGhyb3VnaCBjb25maWdmcyBvciBtb2R1bGUgcGFyYW1ldGVycywgSSYjMzk7ZCBzYXkgeWVzLCBhYnNvbHV0ZWx5LiBXZSBuZWVkIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBgbnVsbF92YWxpZGF0ZV9jb25mYCBpcyByZWFjaGFibGUgZ2l2ZW4gdGhlIG5ldyBjb25maWd1cmF0aW9ucy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB3aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGFyZSBuZWVkZWQgdG8gdHJpZ2dlciB0aGlzIGFsdGVyZWQgY29kZSBwYXRoLiBVbmRlcnN0YW5kaW5nIHRob3NlIGNvbmZpZ3VyYXRpb25zIHdpbGwgZ3VpZGUgdGhlIGZ1enppbmcgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnVsbF92YWxpZGF0ZV9jb25mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTg2ND1zdGF0aWMgaW50IG51bGxfc2V0dXBfdGFnc2V0KHN0cnVjdCBudWxsYiAqbnVsbGIpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTg4NC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE4ODU6c3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTg4Ni17XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTk2MT1zdGF0aWMgaW50IG51bGxfYWRkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk3Mi1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjE5NzM6XHRydiA9IG51bGxfdmFsaWRhdGVfY29uZihkZXYpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk3NC1cdGlmIChydilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBgbnVsbF9ibGtgIENvbmZpZ3VyYXRpb24gSXNzdWUqKgoKT2theSwgc28gYG51bGxfYWRkX2RldmAganVzdCBnb3QgY2FsbGVkLCBhbmQgaXQmIzM5O3MgY2FsbGluZyBgbnVsbF92YWxpZGF0ZV9jb25mYC4gVGhhdCBtZWFucyB3ZSYjMzk7cmUgaW4gdGhlIGRldmljZSBhZGRpdGlvbiBzZXF1ZW5jZSwgYW5kIHNvbWV0aGluZyBpbiB0aGUgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGlzIGxpa2VseSByZWxldmFudCB0byB0aGUgYG51bGxfYmxrYCBkZXZpY2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doYXQgY29uZmlnIG9wdGlvbnMgc3BlY2lmaWNhbGx5IGVuYWJsZSBvciBpbmZsdWVuY2UgdGhlIGBudWxsX2Jsa2AgZnVuY3Rpb25hbGl0eT8mIzM0OyBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMuIEkgc2hvdWxkIGRpdmUgaW50byBgbnVsbF92YWxpZGF0ZV9jb25mYCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFyZSBiZWluZyBjaGVja2VkLiBLbm93aW5nIHdoaWNoIGNvbmZpZyBvcHRpb25zIGxlYWQgdG8gdGhhdCBjb2RlIHBhdGggaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2h5IHRoZSBkZXZpY2UgYWRkaXRpb24gbWlnaHQgYmUgZmFpbGluZyBvciBiZWhhdmluZyB1bmV4cGVjdGVkbHkuIEkgc3VzcGVjdCBJIG5lZWQgdG8gY2hlY2sgd2hpY2ggc3BlY2lmaWMgc2V0dGluZ3MgYXJlIGNyaXRpY2FsIHRvIHN1Y2Nlc3NmdWxseSBzdGFydGluZyB1cCB0aGUgYG51bGxfYmxrYCBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEJMS19ERVZfTlVMTF9CTEsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzo2OmNvbmZpZyBCTEtfREVWX05VTExfQkxLXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O051bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctOS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZzoxMDpjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy0xMS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTQ1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaXMgc2V0IHRvIGBCTEtfREVWX05VTExfQkxLYC4gTXkgZmlyc3QgdGhvdWdodCBpczogdGhhdCYjMzk7cyBhIHN0YXJ0aW5nIHBvaW50LCBidXQgaGFyZGx5IHRoZSB3aG9sZSBzdG9yeS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkLCBpbXBsaWVkLCBvciBwb3RlbnRpYWxseSBpbiBjb25mbGljdCB3aXRoIHRoaXMgb25lLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgYSBzZWVtaW5nbHkgc2ltcGxlIHNldHRpbmcgbGlrZSB0aGlzIG9mdGVuIGhhcyBjYXNjYWRpbmcgZWZmZWN0cywgc2V0dGluZyBvZmYgYSBjaGFpbiByZWFjdGlvbiBvZiBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBtYWtlIHN1cmUgbm90aGluZyBpcyBvdmVybG9va2VkOyBhbmQgYXZvaWQgY3JlYXRpbmcgYSB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE51bGwgYmxvY2sgZGV2aWNlIGRyaXZlciBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBCTEtfREVWX05VTExfQkxLXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXCYjMzQ7XG4gICA4Olx0XHRzZWxlY3QgQ09ORklHRlNfRlNcbiAgIDk6XHRcbiAgMTA6XHRjb25maWcgQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbiAgMTE6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmYXVsdCBpbmplY3Rpb24gZm9yIE51bGwgdGVzdCBibG9jayBkcml2ZXJcJiMzNDtcbiAgMTI6XHRcdGRlcGVuZHMgb24gQkxLX0RFVl9OVUxMX0JMSyBcdTAwMjZcdTAwMjYgRkFVTFRfSU5KRUNUSU9OX0NPTkZJR0ZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ4NwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTnVsbCBCbG9jayBEZXZpY2UgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgbnVsbGAgYmxvY2sgZGV2aWNlIGltcGxlbWVudGF0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBjb25zdGFudCBgQkxLX0RFVl9OVUxMX0JMS2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGRlZmluaW5nIHRoZSBibG9jayBkZXZpY2UuIE5vdGhpbmcgY29tcGxpY2F0ZWQgaGVyZSwgd2hpY2ggaXMgZ29vZC4KCkkgbmVlZCB0byBjb25maXJtIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBudWxsX3ZhbGlkYXRlX2NvbmZgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCB3aGljaCBpcyBhcHByb3ByaWF0ZSwgZ2l2ZW4gaXQmIzM5O3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseS4gSXQgbG9va3MgbGlrZSB0aGUgY2FsbGVyIGlzIGluZGVlZCBgbnVsbF9hZGRfZGV2YC4gTm93LCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG51bGxfYWRkX2RldmAgaXMgYWxzbyBwcm9wZXJseSBzY29wZWQgYXMgc3RhdGljLiBJdCBtYWtlcyBzZW5zZSwgZnJvbSBhIGNvZGUgb3JnYW5pemF0aW9uIGFuZCBzZWN1cml0eSBzdGFuZHBvaW50LCB0aGF0IGl0IHNob3VsZCBiZS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudWxsX2FkZF9kZXYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNzU9c3RhdGljIHZvaWQgbnVsbF9kZWxfZGV2KHN0cnVjdCBudWxsYiAqbnVsbGIpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6Mjc2OnN0YXRpYyBpbnQgbnVsbF9hZGRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yNzctc3RhdGljIHN0cnVjdCBudWxsYiAqbnVsbF9maW5kX2Rldl9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTQ4ND1zdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUwMC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjUwMTpcdFx0cmV0ID0gbnVsbF9hZGRfZGV2KGRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MDItXHRcdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xOTQ4PXN0YXRpYyBib29sIG51bGxfc2V0dXBfZmF1bHQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTYwLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTk2MTpzdGF0aWMgaW50IG51bGxfYWRkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTYyLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yMTAyPXN0YXRpYyBpbnQgbnVsbF9jcmVhdGVfZGV2KHZvaWQpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjExMS1cdG11dGV4X2xvY2soXHUwMDI2bG9jayk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMTEyOlx0cmV0ID0gbnVsbF9hZGRfZGV2KGRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMTEzLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTU4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhpcyBjb2RlIHNuaXBwZXQ6CgoqKkFuYWx5emluZyBEZXZpY2UgSW5pdGlhbGl6YXRpb24gYW5kIFBvd2VyIE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGBudWxsYCBibG9jayBkZXZpY2UgZHJpdmVyIGlzIHN0cnVjdHVyZWQuIEZpcnN0LCBgbnVsbF9hZGRfZGV2YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIOKAkyBpdCYjMzk7cyBsaWtlbHkgaW50ZXJuYWwgdG8gdGhpcyBtb2R1bGUgYW5kIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgY2FsbHMuIFRoZW4sIGBudWxsX2NyZWF0ZV9kZXZgIGdldHMgY2FsbGVkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlOyB0aGF0JiMzOTtzIHdoZXJlIHlvdSYjMzk7ZCBleHBlY3QgdGhlIGRldmljZSB0byBiZSBzZXQgdXAuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdDogYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gY29uZmlnZnMsIGltcGx5aW5nIHRoYXQmIzM5O3MgaG93IGRldmljZSBwb3dlciBzZXR0aW5ncyBhcmUgbWFuYWdlZC4gQmVmb3JlIGRpdmluZyBkZWVwLCBsZXQgbWUgdmVyaWZ5IHNvbWV0aGluZzogaXMgYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgYWxzbyBzdGF0aWM/IFl1cCwgaXQgaXMsIHdoaWNoIGFkZHMgdG8gdGhlIGludGVybmFsIG1vZHVsZSBzdHJ1Y3R1cmUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkOyB0aGUgc3RhdGljIG9uZXMgYXJlIGxpa2VseSB0byBiZSBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgaW50ZXJuYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bnVsbF9jcmVhdGVfZGV2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjA4Nj1zdGF0aWMgc3RydWN0IG51bGxiICpudWxsX2ZpbmRfZGV2X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSlcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMTAxLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjEwMjpzdGF0aWMgaW50IG51bGxfY3JlYXRlX2Rldih2b2lkKVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjEwMy17XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MjEzMT1zdGF0aWMgaW50IF9faW5pdCBudWxsX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMTgzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZGV2aWNlczsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIxODQ6XHRcdHJldCA9IG51bGxfY3JlYXRlX2RldigpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjE4NS1cdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDcyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIENvbmZpZ0ZTIEV4cG9ydGVkIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBDb25maWdGUyBvcGVyYXRpb25zIHRoYXQgYXJlIGFjdHVhbGx5IGV4cG9zZWQuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdC4uLiB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgZG9jdW1lbnRhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdyYW51bGFyaXR5IG9mIHdoYXQmIzM5O3MgYXZhaWxhYmxlIHRvIG1lIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIFdoYXQgY2FuIEkgY29udHJvbCwgYW5kIGhvdz8gVGhpcyB3aWxsIGluZm9ybSBob3cgSSBhcHByb2FjaCBhbnkgY3VzdG9tIG1vZHVsZSBkZXNpZ24gb3IgaW50ZXJhY3Rpb24gSSYjMzk7bSBwbGFubmluZy4gSSBuZWVkIGEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgcHJpbWl0aXZlcyBiZWZvcmUgSSBzdGFydCB3cml0aW5nIGNvZGUuIEFyZSB0aGVyZSBhbnkgZ290Y2hhcyBJIG5lZWQgdG8gYW50aWNpcGF0ZT8gVGltZSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnZnNfaXRlbV9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NjM3PXN0YXRpYyB2b2lkIG51bGxiX2RldmljZV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NDQtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo2NDU6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbnVsbGJfZGV2aWNlX29wcyA9IHtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTY0Ni1cdC5yZWxlYXNlXHQ9IG51bGxiX2RldmljZV9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDUyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbnVsbF9ibGtgJiMzOTtzIENvcmUqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O0FscmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYW5kIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcyBhcmUgd2l0aGluIHRoaXMgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyLiYjMzQ7IEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGUgZmlsZSBwYXRoIOKAkyB0aGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgZHJpdmVyJiMzOTtzIGNvcmUgaW5pdGlhbGl6YXRpb24sIHJlZ2lzdHJhdGlvbiwgYW5kIHBvdGVudGlhbGx5IGl0cyBkZXZpY2Ugb3BlcmF0aW9ucyBhcmUgZGVmaW5lZC4gSSBleHBlY3QgdG8gZmluZCBgbW9kdWxlX2luaXRgIGNhbGxzIHRvIGdldCB0aGluZ3Mgcm9sbGluZywgYG1vZHVsZV9leGl0YCBmb3IgY2xlYW51cCwgYW5kIGZ1bmN0aW9ucyB0aGF0IHJlZ2lzdGVyIHRoZSBibG9jayBkZXZpY2Ugd2l0aCB0aGUga2VybmVsLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHNvbWUga2luZCBvZiBgc3RydWN0IGdlbmRpc2tgIGFsbG9jYXRpb24gYW5kIHBvcHVsYXRpb24sIGFsb25nIHdpdGggdGhlIGRldmljZSBvcGVyYXRpb25zIHRoYXQgd2lsbCBoYW5kbGUgcmVxdWVzdHMsIGV2ZW4gaWYgdGhvc2Ugb3BlcmF0aW9ucyBhcmUganVzdCBkdW1teSBmdW5jdGlvbnMgb3IgZG8gbm90aGluZy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IGl0IGhhbmRsZXMgcmVxdWVzdHMgc2luY2UgdGhpcyBkcml2ZXIgc2VydmVzIGFzIGEgYmxvY2sgaG9sZS4gQXJlIHRoZXkgaW1tZWRpYXRlbHkgY29tcGxldGVkIHdpdGggYSBzdWNjZXNzIG9yIGZhaWx1cmUsIG9yIGFyZSB0aGV5IGp1c3QgZHVtcGVkIHRvIHRoZSB2b2lkPyBQZXJoYXBzLCBJJiMzOTtsbCBzZWUgc29tZSBjb21tZW50cyBpbmRpY2F0aW5nIHdoYXQgaXMgbmVlZGVkIHRvIGJlIGltcGxlbWVudGVkLiBGaW5hbGx5LCBJJiMzOTtsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBvciBwYXJhbWV0ZXJzIHRoYXQgdGhlIGRyaXZlciB1c2VzLCBwYXJ0aWN1bGFybHkgZm9yIHNldHRpbmcgdXAgdGhlICYjMzQ7bnVsbCYjMzQ7IGJlaGF2aW9yLiBBbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcyBhcmUgYWxzbyBvbiBteSByYWRhci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9udWxsX2Jsay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDAwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkFuYWx5emluZyB0aGUgTW9kdWxlIFN0cnVjdHVyZSoqCgpBbHJpZ2h0LCBzbyBpdCYjMzk7cyBhIHNlbGYtY29udGFpbmVkIG1vZHVsZSwgbm8gZXh0ZXJuYWwgc3ltYm9scywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQmIzM5O3MgZGVzaWduZWQgdG8gYmUgY29tcGxldGVseSBpbmRlcGVuZGVudCwgbGlrZWx5IG1hbmFnaW5nIGl0cyBvd24gcmVzb3VyY2VzIGFuZCBub3QgcmVseWluZyBvbiBvdGhlciBtb2R1bGVzIGZvciBjb3JlIGZ1bmN0aW9uYWxpdHkuIFRoZSBtb2R1bGUmIzM5O3MgbGlmZSBjeWNsZSBpcyBhbGwgYWJvdXQgdGhlIGluaXQgYW5kIHRoZW4gdGhlIENvbmZpZ0ZTIG9wZXJhdGlvbnMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHBhdHRlcm4gZm9yIENvbmZpZ0ZTIGRldmljZXMuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZGV2aWNlIGhhbmRsZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgdGhlIGNvcmUgb3BlcmF0aW9ucy4gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBpbnRvIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGFuZCBgbnVsbGJfZGV2aWNlX29wc2AgZnVuY3Rpb25zLiBUaG9zZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGl0IGRvZXMgYW5kIGhvdyBpdCYjMzk7cyBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz00Nzk9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3Bvd2VyX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTQ4My1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjQ4NDpzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNDg1LVx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3ODUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgQ29uZmlnRlMgUG93ZXIgQXR0cmlidXRlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgQ29uZmlnRlMgYXR0cmlidXRlIGNvbnRyb2xsaW5nIHBvd2VyIG1hbmFnZW1lbnQuIFRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlOyB0aGVyZSBhcmUgYSBsb3Qgb2Ygd2F5cyBwb3dlciBpcyBoYW5kbGVkLCBzbyAmIzM0O3Bvd2VyJiMzNDsgYWxvbmUgaXMgdG9vIGdlbmVyYWwuIEkga25vdyBDb25maWdGUyBvZmZlcnMgYSBoaWdobHkgZmxleGlibGUgYXBwcm9hY2ggdG8gZGV2aWNlIGNvbmZpZ3VyYXRpb24sIGFuZCBwb3dlciBtYW5hZ2VtZW50IGlzIGEgY3J1Y2lhbCBhcmVhIHdoZXJlIHRoaXMgZmxleGliaWxpdHkgY2FuIGJlIGxldmVyYWdlZC4gSSBoYXZlIHRvIGZpbmQgdGhlIGNvcnJlY3QgYXR0cmlidXRlIG5hbWUgb3IgcGF0aCB3aXRoaW4gdGhlIENvbmZpZ0ZTIGZpbGVzeXN0ZW0gdGhhdCBkZWFscyB3aXRoIHBvd2VyLXJlbGF0ZWQgc2V0dGluZ3MuIFRoaXMgY291bGQgaW52b2x2ZSBzZXR0aW5ncyBmb3IgZGV2aWNlIHN0YXRlcywgcG93ZXIgbW9kZXMgKGUuZy4sIHN1c3BlbmQsIHN0YW5kYnksIGFjdGl2ZSksIHZvbHRhZ2UgcmVndWxhdGlvbiwgb3IgZXZlbiBjbG9jayBnYXRpbmcsIGRlcGVuZGluZyBvbiB0aGUgc3BlY2lmaWMgZGV2aWNlIHR5cGUgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGNvbmZpZ3VyaW5nLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIGl0IHdpbGwgZGVwZW5kIG9uIHRoZSBkcml2ZXIgYW5kIGRldmljZSBpdHNlbGYsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gSXMgdGhlcmUgYSBjb25zaXN0ZW50IG5hbWluZyBzY2hlbWUgdGhhdCBJIGNhbiBsZXZlcmFnZT8gT3Igd2lsbCBJIGhhdmUgdG8gZGVsdmUgaW50byB0aGUgZHJpdmVyIHNvdXJjZSBjb2RlPyBIb3BlZnVsbHksIHRoaXMgaXMgd2VsbC1kb2N1bWVudGVkIGluIHRoZSByZWxldmFudCBkcml2ZXIgZG9jdW1lbnRhdGlvbiBhbmQvb3Iga2VybmVsIGRvY3VtZW50YXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0dXJucyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHRlNfQVRUUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTM1Mj1udWxsYl9kZXZpY2VfIyNOQU1FIyNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpwYWdlLFx0XFxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0zNzEtfVx0XHRcdFx0XHRcdFx0XHRcdFxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzozNzI6Q09ORklHRlNfQVRUUihudWxsYl9kZXZpY2VfLCBOQU1FKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTM3My1cbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz00ODQ9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MjItXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1MjM6Q09ORklHRlNfQVRUUihudWxsYl9kZXZpY2VfLCBwb3dlcik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MjQtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTMyPXN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV9iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU3NS19XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1NzY6Q09ORklHRlNfQVRUUihudWxsYl9kZXZpY2VfLCBiYWRibG9ja3MpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc3LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NTc4PXN0YXRpYyBzc2l6ZV90IG51bGxiX2RldmljZV96b25lX3JlYWRvbmx5X3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01ODQtfVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NTg1OkNPTkZJR0ZTX0FUVFJfV08obnVsbGJfZGV2aWNlXywgem9uZV9yZWFkb25seSk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01ODYtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01ODc9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3pvbmVfb2ZmbGluZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTkzLX1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU5NDpDT05GSUdGU19BVFRSX1dPKG51bGxiX2RldmljZV8sIHpvbmVfb2ZmbGluZSk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01OTUtXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NzE5PXN0YXRpYyBzc2l6ZV90IG1lbWJfZ3JvdXBfZmVhdHVyZXNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKnBhZ2UpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzQ0LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NzQ1OkNPTkZJR0ZTX0FUVFJfUk8obWVtYl9ncm91cF8sIGZlYXR1cmVzKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTc0Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjcyNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBudWxsYiBEcml2ZXI6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbnVsbGJgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQuIEl0IHNlZW1zIHRoYXQgdGhlIGBjb25maWdmc2AgYXR0cmlidXRlIGBwb3dlcmAgaXMgdGhlIGtleSB0cmlnZ2VyLCB3aGljaCBsZWFkcyB0byBgbnVsbF9hZGRfZGV2YCBiZWluZyBjYWxsZWQuIFRoaXMgbWVhbnMgSSBzaG91bGQgcmVhbGx5IGJlIGZvY3VzaW5nIG9uIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGJlY2F1c2UgdGhhdCYjMzk7cyB3aGF0JiMzOTtzIGhhbmRsaW5nIHRoZSBwb3dlciBhdHRyaWJ1dGUuIGBudWxsX2luaXRgIGlzIHRoZSBtb2R1bGUgaW5pdCwgYnV0IHRoYXQmIzM5O3Mgb25seSBjYWxsZWQgb25jZSwgc28gbm90IHVzZWZ1bCBmb3Igb25nb2luZyBmdXp6aW5nLgoKSGFuZyBvbiBhIHNlY29uZOKApiBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBpcyAqc3RhdGljKi4gRGFtbiEgVGhhdCBsaW1pdHMgaXRzIHVzZWZ1bG5lc3MsIGFzIHN5emthbGxlciBuZWVkcyBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIHRvIHRhcmdldC4gSSBzaG91bGQgZ28gYmFjayBhbmQgY2hlY2sgYG51bGxfYWRkX2RldmAgYW5kIGBudWxsX3ZhbGlkYXRlX2NvbmZgIGFnYWluLiBJZiB0aGV5JiMzOTtyZSBhbHNvIHN0YXRpYyBhbmQgaW5saW5lZCwgdGhleSB3aWxsIG5vdCBiZSBnb29kIGZ1enppbmcgdGFyZ2V0cy4KCkJ1dCB3YWl0LCBJIGRvbiYjMzk7dCB0aGluayBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBpcyBpbmxpbmVkLiBJdCYjMzk7cyB1c2VkIGFzIGEgY2FsbGJhY2sgaW4gYSBzdHJ1Y3R1cmUsIHNvIGl0IGxpa2VseSBoYXMgYSBkaXN0aW5jdCBhZGRyZXNzLiBUaGUgYENPTkZJR0ZTX0FUVFJgIG1hY3JvIGNyZWF0ZXMgYSBzdHJ1Y3R1cmUgd2l0aCBmdW5jdGlvbiBwb2ludGVycy4gU28gZGVmaW5pdGVseSBub3QgaW5saW5lZCEKCkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHNpZ25hdHVyZSBvZiBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBqdXN0IHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDgwOlx0e1xuIDQ4MTpcdFx0cmV0dXJuIG51bGxiX2RldmljZV9ib29sX2F0dHJfc2hvdyh0b19udWxsYl9kZXZpY2UoaXRlbSktXHUwMDNlcG93ZXIsIHBhZ2UpO1xuIDQ4MjpcdH1cbiA0ODM6XHRcbiA0ODQ6XHRzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIDQ4NTpcdFx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXG4gNDg2Olx0e1xuIDQ4NzpcdFx0c3RydWN0IG51bGxiX2RldmljZSAqZGV2ID0gdG9fbnVsbGJfZGV2aWNlKGl0ZW0pO1xuIDQ4ODpcdFx0Ym9vbCBuZXdwID0gZmFsc2U7XG4gNDg5Olx0XHRzc2l6ZV90IHJldDtcbiA0OTA6XHRcbiA0OTE6XHRcdHJldCA9IG51bGxiX2RldmljZV9ib29sX2F0dHJfc3RvcmUoXHUwMDI2bmV3cCwgcGFnZSwgY291bnQpO1xuIDQ5MjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA0OTM6XHRcdFx0cmV0dXJuIHJldDtcbiA0OTQ6XHRcbiA0OTU6XHRcdHJldCA9IGNvdW50O1xuIDQ5NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZsb2NrKTtcbiA0OTc6XHRcdGlmICghZGV2LVx1MDAzZXBvd2VyIFx1MDAyNlx1MDAyNiBuZXdwKSB7XG4gNDk4Olx0XHRcdGlmICh0ZXN0X2FuZF9zZXRfYml0KE5VTExCX0RFVl9GTF9VUCwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKSlcbiA0OTk6XHRcdFx0XHRnb3RvIG91dDtcbiA1MDA6XHRcbiA1MDE6XHRcdFx0cmV0ID0gbnVsbF9hZGRfZGV2KGRldik7XG4gNTAyOlx0XHRcdGlmIChyZXQpIHtcbiA1MDM6XHRcdFx0XHRjbGVhcl9iaXQoTlVMTEJfREVWX0ZMX1VQLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpO1xuIDUwNDpcdFx0XHRcdGdvdG8gb3V0O1xuIDUwNTpcdFx0XHR9XG4gNTA2Olx0XG4gNTA3Olx0XHRcdHNldF9iaXQoTlVMTEJfREVWX0ZMX0NPTkZJR1VSRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4gNTA4Olx0XHRcdGRldi1cdTAwM2Vwb3dlciA9IG5ld3A7XG4gNTA5Olx0XHRcdHJldCA9IGNvdW50O1xuIDUxMDpcdFx0fSBlbHNlIGlmIChkZXYtXHUwMDNlcG93ZXIgXHUwMDI2XHUwMDI2ICFuZXdwKSB7XG4gNTExOlx0XHRcdGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTlVMTEJfREVWX0ZMX1VQLCBcdTAwMjZkZXYtXHUwMDNlZmxhZ3MpKSB7XG4gNTEyOlx0XHRcdFx0ZGV2LVx1MDAzZXBvd2VyID0gbmV3cDtcbiA1MTM6XHRcdFx0XHRudWxsX2RlbF9kZXYoZGV2LVx1MDAzZW51bGxiKTtcbiA1MTQ6XHRcdFx0fVxuIDUxNTpcdFx0XHRjbGVhcl9iaXQoTlVMTEJfREVWX0ZMX0NPTkZJR1VSRUQsIFx1MDAyNmRldi1cdTAwM2VmbGFncyk7XG4gNTE2Olx0XHR9XG4gNTE3Olx0XG4gNTE4Olx0b3V0OlxuIDUxOTpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTAxCgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgUG90ZW50aWFsIENvZGUgSG90c3BvdHMqKgoKQWxyaWdodCwgYmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBiZWVuIGRvaW5nIGxhdGVseSwgYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgc2VlbXMgbGlrZSBhIHByZXR0eSBzb2xpZCBzdGFydGluZyBwb2ludCB3aGVuIGxvb2tpbmcgYXQgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gSG93ZXZlciwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgbnVsbF9hZGRfZGV2YC4gSXQmIzM5O3Mgc3RhdGljLCB3aGljaCBpcyB1c3VhbGx5IGEgcmVkIGZsYWcgYWdhaW5zdCBpbXBhY3RpbmcgcGVyZm9ybWFuY2Ugc2lnbmlmaWNhbnRseSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIGlubGluZWQsIGJ1dCBJIHNlZW0gdG8gcmVjYWxsIGl0IGJlaW5nIHF1aXRlIGEgc3Vic3RhbnRpYWwgZnVuY3Rpb24uIFRoZXJlZm9yZSBpdCBtaWdodCBiZSB3b3J0aCBpbnZlc3RpZ2F0aW5nLCBldmVuIGlmIGl0IGlzIHN0YXRpYy4gSeKAmWxsIG5lZWQgdG8gY29uZmlybSBpZiBpdOKAmXMgdHJ1bHkgaW5saW5lZCBvciBub3QuCgpOb3csIGxldCYjMzk7cyBzdGVwIGJhY2sgYSBiaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGJpZ2dlciBmdW5jdGlvbnMgaW4gYG51bGxfYmxrYCB0aGF0IGFyZW4mIzM5O3Qgc3RhdGljLiBJdCYjMzk7cyBlYXN5IHRvIG92ZXJsb29rIHRoaW5ncyB3aGVuIHlvdSBnZXQgdHVubmVsIHZpc2lvbiBvbiBhIHNwZWNpZmljIGZ1bmN0aW9uLCBzbyBsZXQgbWUgcXVpY2tseSBzY2FuIHRoYXQgbW9kdWxlIGFuZCBsb29rIGZvciBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoZXkgYXJlIG1vc3QgbGlrZWx5IHRoZSBuZXh0IGNhbmRpZGF0ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16QS1aMC05X10mIzQzOyBbYS16QS1aMC05X10mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIyLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjIzOnN0YXRpYyBERUNMQVJFX0ZBVUxUX0FUVFIobnVsbF90aW1lb3V0X2F0dHIpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjQ6c3RhdGljIERFQ0xBUkVfRkFVTFRfQVRUUihudWxsX3JlcXVldWVfYXR0cik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNTpzdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG51bGxfaW5pdF9oY3R4X2F0dHIpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjYtI2VuZGlmXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NjE9c3RydWN0IG51bGxiX3BhZ2Uge1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTY3LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6Njg6c3RhdGljIExJU1RfSEVBRChudWxsYl9saXN0KTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTY5LXN0YXRpYyBzdHJ1Y3QgbXV0ZXggbG9jaztcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTcwPXN0YXRpYyBpbnQgbnVsbF9tYWpvcjtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjcxOnN0YXRpYyBERUZJTkVfSURBKG51bGxiX2luZGV4ZXMpO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNzItc3RhdGljIHN0cnVjdCBibGtfbXFfdGFnX3NldCB0YWdfc2V0O1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTExNzY9c3RhdGljIHZvaWQgY29weV9mcm9tX251bGxiKHN0cnVjdCBudWxsYiAqbnVsbGIsIHZvaWQgKmRlc3QsIGxvZmZfdCBwb3MsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTIwMC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEyMDE6YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2Rpc2NhcmQoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTIwMi1cdFx0XHRcdCBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTMxNT1zdGF0aWMgaW5saW5lIGJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV90aHJvdHRsZWQoc3RydWN0IG51bGxiX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDUtICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzQ2OmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9iYWRibG9ja3Moc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzQ3LVx0XHRcdFx0ICAgdW5zaWduZWQgaW50ICpucl9zZWN0b3JzKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNzEtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzcyOmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9tZW1vcnlfYmFja2VkKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMzczLVx0XHRcdFx0ICAgICAgIHNlY3Rvcl90IHNlY3Rvciwgc2VjdG9yX3QgbnJfc2VjdG9ycylcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xMzk1PXN0YXRpYyBpbmxpbmUgdm9pZCBudWxsYl9jb21wbGV0ZV9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kKVxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MjItXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxNDIzOmJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3NfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xNDI0LVx0XHRcdCAgICAgIHNlY3Rvcl90IHNlY3RvciwgdW5zaWduZWQgaW50IG5yX3NlY3RvcnMpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oPTExNT1zdHJ1Y3QgbnVsbGIge1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzEtXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTMyOmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9kaXNjYXJkKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgc2VjdG9yX3Qgc2VjdG9yLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEzMy1cdFx0XHRcdCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxMzQ6YmxrX3N0YXR1c190IG51bGxfcHJvY2Vzc19jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzUtXHRcdFx0ICAgICAgc2VjdG9yX3Qgc2VjdG9yLCB1bnNpZ25lZCBpbnQgbnJfc2VjdG9ycyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTM2OmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9iYWRibG9ja3Moc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTM3LVx0XHRcdFx0ICAgdW5zaWduZWQgaW50ICpucl9zZWN0b3JzKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxMzg6YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX21lbW9yeV9iYWNrZWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzktXHRcdFx0XHQgICAgICAgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQxLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9aT05FRFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE0MjppbnQgbnVsbF9pbml0X3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIHN0cnVjdCBxdWV1ZV9saW1pdHMgKmxpbSk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQzOmludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKTtcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNDQ6dm9pZCBudWxsX2ZyZWVfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldik7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQ1OmludCBudWxsX3JlcG9ydF96b25lcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9yLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0Ni1cdFx0ICAgICAgdW5zaWduZWQgaW50IG5yX3pvbmVzLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0Ny1cdFx0ICAgICAgc3RydWN0IGJsa19yZXBvcnRfem9uZXNfYXJncyAqYXJncyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQ4OmJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3Nfem9uZWRfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTQ5LVx0XHRcdFx0ICAgIHNlY3Rvcl90IHNlY3Rvciwgc2VjdG9yX3QgbnJfc2VjdG9ycyk7XG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTUwOnNpemVfdCBudWxsX3pvbmVfdmFsaWRfcmVhZF9sZW4oc3RydWN0IG51bGxiICpudWxsYixcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xNTEtXHRcdFx0XHRzZWN0b3JfdCBzZWN0b3IsIHVuc2lnbmVkIGludCBsZW4pO1xuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE1Mjpzc2l6ZV90IHpvbmVfY29uZF9zdG9yZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTUzLVx0XHRcdHNpemVfdCBjb3VudCwgZW51bSBibGtfem9uZV9jb25kIGNvbmQpO1xuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYz00Mj1zdGF0aWMgaW5saW5lIHZvaWQgbnVsbF91bmxvY2tfem9uZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTUwLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjUxOmludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy01Mi1cdFx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzICpsaW0pXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE3NC1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoxNzU6aW50IG51bGxfcmVnaXN0ZXJfem9uZWRfZGV2KHN0cnVjdCBudWxsYiAqbnVsbGIpXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTc2LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTg2LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjE4Nzp2b2lkIG51bGxfZnJlZV96b25lZF9kZXYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4OC17XG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE5Mi1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoxOTM6aW50IG51bGxfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTk0LVx0XHR1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTIzOS0gKi9cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoyNDA6c2l6ZV90IG51bGxfem9uZV92YWxpZF9yZWFkX2xlbihzdHJ1Y3QgbnVsbGIgKm51bGxiLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTI0MS1cdFx0XHRcdHNlY3Rvcl90IHNlY3RvciwgdW5zaWduZWQgaW50IGxlbilcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9NjQ2PXN0YXRpYyBibGtfc3RhdHVzX3QgbnVsbF96b25lX21nbXQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcbi0tXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA3LVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjcwODpibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX3pvbmVkX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTcwOS1cdFx0XHRcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpXG4tLVxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTc0Mj1zdGF0aWMgdm9pZCBudWxsX3NldF96b25lX2NvbmQoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03NzctICovXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6Nzc4OnNzaXplX3Qgem9uZV9jb25kX3N0b3JlKHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcGFnZSxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03NzktXHRcdFx0c2l6ZV90IGNvdW50LCBlbnVtIGJsa196b25lX2NvbmQgY29uZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA1NTkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0MTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIENoYW5nZSoqCgpPa2F5LCBzbyB0aGUgY29yZSBvZiB0aGlzIGNoYW5nZSBsaWVzIHdpdGhpbiBgbnVsbF92YWxpZGF0ZV9jb25mYCwgd2hpY2ggaW4gdHVybiBpcyBjYWxsZWQgYnkgYG51bGxfYWRkX2RldmAuIEkgc2VlIHRoYXQgYG51bGxfYWRkX2RldmAgaXMgY2FsbGVkIGZyb20gdHdvIHBsYWNlczogYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgKHRocm91Z2ggY29uZmlnZnMpIGFuZCBgbnVsbF9jcmVhdGVfZGV2YCAoZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbikuIFRoaXMgbW9kaWZpY2F0aW9uIHNwZWNpZmljYWxseSBkaXNhYmxlcyBgc2hhcmVkX3RhZ3NgIGlmIGBkZXYtJmd0O2Jsb2NraW5nYCBpcyB0cnVlIGJ1dCBgZ19ibG9ja2luZ2AgaXNuJiMzOTt0LiBUaGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGltcHJvdmVtZW50IGluIGhvdyB0aGUgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyZWQuIEdpdmVuIHRoYXQgaXQmIzM5O3MgZml4aW5nIGEgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcHJvYmxlbSBpbiBhIHRlc3QgZHJpdmVyLCBmdXp6aW5nIHNvdW5kcyBsaWtlIGEgZ29vZCBpZGVhLgoKU2luY2UgYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBjb25maWd1cmluZyB0aGUgZGV2aWNlIGR5bmFtaWNhbGx5IHRocm91Z2ggY29uZmlnZnMsIHRoYXQmIzM5O3Mgd2hlcmUgSSBzaG91bGQgZm9jdXMgdGhlIGZ1enppbmcgZWZmb3J0LiBXYWl0IGEgbWludXRlLCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gdHJpZ2dlciB0aGlzIGNoYW5nZSBxdWl0ZSBlYXNpbHkgdmlhIGNvbmZpZ2ZzLCBzbyB0aGF04oCZcyBnb29kIG5ld3MhIExldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGlzIHRoZSBiZXN0IGZ1bmN0aW9uIHRvIHRhcmdldC4KCkhtbSwgaXQmIzM5O3MgYSBzdGF0aWMgZnVuY3Rpb24sIGJ1dCBpdCYjMzk7cyB1c2VkIGFzIGEgY2FsbGJhY2sgaW4gYGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9uc2Agb3IgYGNvbmZpZ2ZzX2F0dHJpYnV0ZWAsIHNvIGl0JiMzOTtzIG5vdCBnb2luZyB0byBiZSBpbmxpbmVkIGFuZCBzeXprYWxsZXIgKnNob3VsZCogYmUgYWJsZSB0byBmaW5kIGl0LCBldmVuIHRob3VnaCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhIGJpdCBoYXJkZXIgdG8gcmVzb2x2ZS4gQnV0IHN5emthbGxlciBnZW5lcmFsbHkgcHJlZmVycyBub24tc3RhdGljIGZ1bmN0aW9uc+KApiBJcyB0aGVyZSBhIG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gcGF0aD8KCmBudWxsX2FkZF9kZXZgIGlzIHN0YXRpYywgYXMgaXMgYG51bGxfdmFsaWRhdGVfY29uZmAuIFdoYXQgYWJvdXQgYG51bGxfcHJvY2Vzc19jbWRgPyBUaGF0JiMzOTtzIG5vdCBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBJTyBwYXRoLCBhbmQgdGhpcyBjaGFuZ2UgaXMgc3BlY2lmaWNhbGx5IGFib3V0IGNvbmZpZ3VyYXRpb24uIElmIHRoZXJlIGFyZSBubyBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gcGF0aCwgSSBjYW4ganVzdCB1c2UgYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgb3IgYG51bGxfYWRkX2RldmAuIFdhaXQuLi4gc3l6a2FsbGVyIGNhbiBoYW5kbGUgc3RhdGljIGZ1bmN0aW9ucyBpZiB0aGV5ICphcmVuJiMzOTt0KiBpbmxpbmVkLiBPa2F5LCBsZXQgbWUgY2hlY2sgaWYgYG51bGxfYWRkX2RldmAgaXMgaW5saW5lZC4gR2l2ZW4gaXRzIHNpemUsIGl0JiMzOTtzIHByb2JhYmx5IG5vdC4gSSYjMzk7bGwgY2hlY2sgdGhlIHNpemUganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk2MDpcdFxuMTk2MTpcdHN0YXRpYyBpbnQgbnVsbF9hZGRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcbjE5NjI6XHR7XG4xOTYzOlx0XHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHtcbjE5NjQ6XHRcdFx0LmxvZ2ljYWxfYmxvY2tfc2l6ZVx0PSBkZXYtXHUwMDNlYmxvY2tzaXplLFxuMTk2NTpcdFx0XHQucGh5c2ljYWxfYmxvY2tfc2l6ZVx0PSBkZXYtXHUwMDNlYmxvY2tzaXplLFxuMTk2NjpcdFx0XHQubWF4X2h3X3NlY3RvcnNcdFx0PSBkZXYtXHUwMDNlbWF4X3NlY3RvcnMsXG4xOTY3Olx0XHRcdC5kbWFfYWxpZ25tZW50XHRcdD0gMSxcbjE5Njg6XHRcdH07XG4xOTY5Olx0XG4xOTcwOlx0XHRzdHJ1Y3QgbnVsbGIgKm51bGxiO1xuMTk3MTpcdFx0aW50IHJ2O1xuMTk3MjpcdFxuMTk3MzpcdFx0cnYgPSBudWxsX3ZhbGlkYXRlX2NvbmYoZGV2KTtcbjE5NzQ6XHRcdGlmIChydilcbjE5NzU6XHRcdFx0cmV0dXJuIHJ2O1xuMTk3NjpcdFxuMTk3NzpcdFx0bnVsbGIgPSBremFsbG9jX25vZGUoc2l6ZW9mKCpudWxsYiksIEdGUF9LRVJORUwsIGRldi1cdTAwM2Vob21lX25vZGUpO1xuMTk3ODpcdFx0aWYgKCFudWxsYikge1xuMTk3OTpcdFx0XHRydiA9IC1FTk9NRU07XG4xOTgwOlx0XHRcdGdvdG8gb3V0O1xuMTk4MTpcdFx0fVxuMTk4MjpcdFx0bnVsbGItXHUwMDNlZGV2ID0gZGV2O1xuMTk4MzpcdFx0ZGV2LVx1MDAzZW51bGxiID0gbnVsbGI7XG4xOTg0Olx0XG4xOTg1Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZudWxsYi1cdTAwM2Vsb2NrKTtcbjE5ODY6XHRcbjE5ODc6XHRcdHJ2ID0gc2V0dXBfcXVldWVzKG51bGxiKTtcbjE5ODg6XHRcdGlmIChydilcbjE5ODk6XHRcdFx0Z290byBvdXRfZnJlZV9udWxsYjtcbjE5OTA6XHRcbjE5OTE6XHRcdHJ2ID0gbnVsbF9zZXR1cF90YWdzZXQobnVsbGIpO1xuMTk5MjpcdFx0aWYgKHJ2KVxuMTk5MzpcdFx0XHRnb3RvIG91dF9jbGVhbnVwX3F1ZXVlcztcbjE5OTQ6XHRcbjE5OTU6XHRcdGlmIChkZXYtXHUwMDNldmlydF9ib3VuZGFyeSlcbjE5OTY6XHRcdFx0bGltLnZpcnRfYm91bmRhcnlfbWFzayA9IFBBR0VfU0laRSAtIDE7XG4xOTk3Olx0XHRudWxsX2NvbmZpZ19kaXNjYXJkKG51bGxiLCBcdTAwMjZsaW0pO1xuMTk5ODpcdFx0aWYgKGRldi1cdTAwM2V6b25lZCkge1xuMTk5OTpcdFx0XHRydiA9IG51bGxfaW5pdF96b25lZF9kZXYoZGV2LCBcdTAwMjZsaW0pO1xuMjAwMDpcdFx0XHRpZiAocnYpXG4yMDAxOlx0XHRcdFx0Z290byBvdXRfY2xlYW51cF90YWdzO1xuMjAwMjpcdFx0fVxuMjAwMzpcdFxuMjAwNDpcdFx0aWYgKGRldi1cdTAwM2VjYWNoZV9zaXplIFx1MDAzZSAwKSB7XG4yMDA1Olx0XHRcdHNldF9iaXQoTlVMTEJfREVWX0ZMX0NBQ0hFLCBcdTAwMjZudWxsYi1cdTAwM2VkZXYtXHUwMDNlZmxhZ3MpO1xuMjAwNjpcdFx0XHRsaW0uZmVhdHVyZXMgfD0gQkxLX0ZFQVRfV1JJVEVfQ0FDSEU7XG4yMDA3Olx0XHRcdGlmIChkZXYtXHUwMDNlZnVhKVxuMjAwODpcdFx0XHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9GVUE7XG4yMDA5Olx0XHR9XG4yMDEwOlx0XG4yMDExOlx0XHRpZiAoZGV2LVx1MDAzZXJvdGF0aW9uYWwpXG4yMDEyOlx0XHRcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xuMjAxMzpcdFxuMjAxNDpcdFx0bnVsbGItXHUwMDNlZGlzayA9IGJsa19tcV9hbGxvY19kaXNrKG51bGxiLVx1MDAzZXRhZ19zZXQsIFx1MDAyNmxpbSwgbnVsbGIpO1xuMjAxNTpcdFx0aWYgKElTX0VSUihudWxsYi1cdTAwM2VkaXNrKSkge1xuMjAxNjpcdFx0XHRydiA9IFBUUl9FUlIobnVsbGItXHUwMDNlZGlzayk7XG4yMDE3Olx0XHRcdGdvdG8gb3V0X2NsZWFudXBfem9uZTtcbjIwMTg6XHRcdH1cbjIwMTk6XHRcdG51bGxiLVx1MDAzZXEgPSBudWxsYi1cdTAwM2VkaXNrLVx1MDAzZXF1ZXVlO1xuMjAyMDpcdFxuMjAyMTpcdFx0aWYgKGRldi1cdTAwM2VtYnBzKSB7XG4yMDIyOlx0XHRcdHNldF9iaXQoTlVMTEJfREVWX0ZMX1RIUk9UVExFRCwgXHUwMDI2ZGV2LVx1MDAzZWZsYWdzKTtcbjIwMjM6XHRcdFx0bnVsbGJfc2V0dXBfYnd0aW1lcihudWxsYik7XG4yMDI0Olx0XHR9XG4yMDI1Olx0XG4yMDI2Olx0XHRudWxsYi1cdTAwM2VxLVx1MDAzZXF1ZXVlZGF0YSA9IG51bGxiO1xuMjAyNzpcdFxuMjAyODpcdFx0cnYgPSBpZGFfYWxsb2MoXHUwMDI2bnVsbGJfaW5kZXhlcywgR0ZQX0tFUk5FTCk7XG4yMDI5Olx0XHRpZiAocnYgXHUwMDNjIDApXG4yMDMwOlx0XHRcdGdvdG8gb3V0X2NsZWFudXBfZGlzaztcbjIwMzE6XHRcbjIwMzI6XHRcdG51bGxiLVx1MDAzZWluZGV4ID0gcnY7XG4yMDMzOlx0XHRkZXYtXHUwMDNlaW5kZXggPSBydjtcbjIwMzQ6XHRcbjIwMzU6XHRcdGlmIChjb25maWdfaXRlbV9uYW1lKFx1MDAyNmRldi1cdTAwM2Vncm91cC5jZ19pdGVtKSkge1xuMjAzNjpcdFx0XHQvKiBVc2UgY29uZmlnZnMgZGlyIG5hbWUgYXMgdGhlIGRldmljZSBuYW1lICovXG4yMDM3Olx0XHRcdHNucHJpbnRmKG51bGxiLVx1MDAzZWRpc2tfbmFtZSwgc2l6ZW9mKG51bGxiLVx1MDAzZWRpc2tfbmFtZSksXG4yMDM4Olx0XHRcdFx0IFwmIzM0OyVzXCYjMzQ7LCBjb25maWdfaXRlbV9uYW1lKFx1MDAyNmRldi1cdTAwM2Vncm91cC5jZ19pdGVtKSk7XG4yMDM5Olx0XHR9IGVsc2Uge1xuMjA0MDpcdFx0XHRzcHJpbnRmKG51bGxiLVx1MDAzZWRpc2tfbmFtZSwgXCYjMzQ7bnVsbGIlZFwmIzM0OywgbnVsbGItXHUwMDNlaW5kZXgpO1xuMjA0MTpcdFx0fVxuMjA0MjpcdFxuMjA0MzpcdFx0c2V0X2NhcGFjaXR5KG51bGxiLVx1MDAzZWRpc2ssXG4yMDQ0Olx0XHRcdCgoc2VjdG9yX3QpbnVsbGItXHUwMDNlZGV2LVx1MDAzZXNpemUgKiBTWl8xTSkgXHUwMDNlXHUwMDNlIFNFQ1RPUl9TSElGVCk7XG4yMDQ1Olx0XHRudWxsYi1cdTAwM2VkaXNrLVx1MDAzZW1ham9yID0gbnVsbF9tYWpvcjtcbjIwNDY6XHRcdG51bGxiLVx1MDAzZWRpc2stXHUwMDNlZmlyc3RfbWlub3IgPSBudWxsYi1cdTAwM2VpbmRleDtcbjIwNDc6XHRcdG51bGxiLVx1MDAzZWRpc2stXHUwMDNlbWlub3JzID0gMTtcbjIwNDg6XHRcdG51bGxiLVx1MDAzZWRpc2stXHUwMDNlZm9wcyA9IFx1MDAyNm51bGxfb3BzO1xuMjA0OTpcdFx0bnVsbGItXHUwMDNlZGlzay1cdTAwM2Vwcml2YXRlX2RhdGEgPSBudWxsYjtcbjIwNTA6XHRcdHN0cnNjcHkobnVsbGItXHUwMDNlZGlzay1cdTAwM2VkaXNrX25hbWUsIG51bGxiLVx1MDAzZWRpc2tfbmFtZSk7XG4yMDUxOlx0XG4yMDUyOlx0XHRpZiAobnVsbGItXHUwMDNlZGV2LVx1MDAzZXpvbmVkKSB7XG4yMDUzOlx0XHRcdHJ2ID0gbnVsbF9yZWdpc3Rlcl96b25lZF9kZXYobnVsbGIpO1xuMjA1NDpcdFx0XHRpZiAocnYpXG4yMDU1Olx0XHRcdFx0Z290byBvdXRfaWRhX2ZyZWU7XG4yMDU2Olx0XHR9XG4yMDU3Olx0XG4yMDU4Olx0XHRydiA9IGFkZF9kaXNrKG51bGxiLVx1MDAzZWRpc2spO1xuMjA1OTpcdFx0aWYgKHJ2KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk5MQoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAzODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE51bGwgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYG51bGxfYWRkX2RldmAgaXNuJiMzOTt0IGlubGluZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgbWFrZXMgaXQgYSBzb2xpZCBjYW5kaWRhdGUgZm9yIGEgZm9jdXMgZnVuY3Rpb24uIEFuZCBoZXksIFN5emthbGxlciBjYW4gYWxzbyB0YXJnZXQgYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWA/IFBlcmZlY3QsIEkmIzM5O2xsIHByb3ZpZGUgYm90aC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSB0ZXN0IHBsYW4gZm9yIHRoaXMuCgpUaGUgbWFpbiBjb25maWd1cmF0aW9uIGlzIGBCTEtfREVWX05VTExfQkxLYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3MuIFRoZSBwYXRjaCBtZW50aW9ucyBgc2hhcmVkX3RhZ3NgLCBgYmxvY2tpbmdgLCBhbmQgYGdfYmxvY2tpbmdgLiBUaG9zZSBhbGwgc2VlbSB0byBiZSBwYXJ0IG9mIHRoZSBgbnVsbF9ibGtgIGRldmljZSwgYnV0IEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhvc2UuIEkgc2hvdWxkIGFsc28gY29uZmlybSB0aGF0IGBDT05GSUdGU19GU2AgaXMgbmVlZGVkLCBidXQgaXQgc2VlbXMgdGhhdCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgQkxLX0RFVl9OVUxMX0JMS2AsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIFNvLCBgQkxLX0RFVl9OVUxMX0JMS2Agc2hvdWxkIGJlIHN1ZmZpY2llbnQgb24gaXRzIG93bi4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gWWVzLCBgQ09ORklHX0JMS19ERVZfTlVMTF9CTEtgIGlzIHRoZSBjcml0aWNhbCBvbmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoLgpgYGBjCiAJaWYgKGRldi0mZ3Q7c2hhcmVkX3RhZ3MgJmFtcDsmYW1wOyBkZXYtJmd0O2Jsb2NraW5nICZhbXA7JmFtcDsgIWdfYmxvY2tpbmcpIHsKIAkJcHJfaW5mbygmIzM0O3NoYXJlZF90YWdzIGRpc2FibGVkOiBtZW1vcnlfYmFja2VkL2Jsb2NraW5nIGRldmljZSByZXF1aXJlcyBwZXItZGV2aWNlIHRhZyBzZXQgZm9yIEJMS19NUV9GX0JMT0NLSU5HXG4mIzM0Oyk7CiAJCWRldi0mZ3Q7c2hhcmVkX3RhZ3MgPSBmYWxzZTsKIAl9CmBgYApPa2F5LCB0aGlzIGlzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIGVzc2VudGlhbGx5IG1vZGlmeWluZyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgbnVsbF9ibGsgZGV2aWNlIHRvIHByZXZlbnQgYSBjcmFzaCBvciBpbmNvcnJlY3QgYmVoYXZpb3Igd2hlbiBgc2hhcmVkX3RhZ3NgIGlzIHVzZWQgd2l0aCBhIGJsb2NraW5nIGRldmljZSBidXQgYGdfYmxvY2tpbmdgIGlzIGZhbHNlLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgdG8gbWFrZSBzdXJlIHRoaXMgZml4IHdvcmtzIGFzIGludGVuZGVkIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBpc3N1ZXMuCgpTbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHkgYG51bGxfYWRkX2RldmAgYW5kIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgLiBBbmQgZm9yIGNvbmZpZ3VyYXRpb25zLCBgQkxLX0RFVl9OVUxMX0JMS2AgaXMgdGhlIGtleSBvbmUgdG8gZW5hYmxlLgoKTGV0JiMzOTtzIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX05VTExfQkxLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bnVsbF9hZGRfZGV2JiMzNDssCiAgICAmIzM0O251bGxiX2RldmljZV9wb3dlcl9zdG9yZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBudWxsX2JsayB0ZXN0IGJsb2NrIGRyaXZlciB0byBkaXNhYmxlIHNoYXJlZF90YWdzIHdoZW4gYSBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGRldmljZSBpcyB1c2VkIHdpdGhvdXQgZ2xvYmFsIGJsb2NraW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlciYjMzk7cyBzZXR1cCBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIChudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUpIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gRnV6emluZyB0aGlzIHBhdGggZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbiBmaXggaXMgcm9idXN0IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYmxvY2sgbGF5ZXIgdGFnIHNldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTlVMTF9CTEsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtudWxsX2FkZF9kZXYmIzM0OywKICAgICYjMzQ7bnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIG51bGxfYmxrIHRlc3QgYmxvY2sgZHJpdmVyIHRvIGRpc2FibGUgc2hhcmVkX3RhZ3Mgd2hlbiBhIG1lbW9yeS1iYWNrZWQvYmxvY2tpbmcgZGV2aWNlIGlzIHVzZWQgd2l0aG91dCBnbG9iYWwgYmxvY2tpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyJiMzOTtzIHNldHVwIHBhdGgsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29uZmlnZnMgKG51bGxiX2RldmljZV9wb3dlcl9zdG9yZSkgb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBGdXp6aW5nIHRoaXMgcGF0aCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9uIGZpeCBpcyByb2J1c3QgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBibG9jayBsYXllciB0YWcgc2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDY6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgZGlzYWJsaW5nIGBzaGFyZWRfdGFnc2AgaWYgdGhlIGRldmljZSBpcyBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGJ1dCB0aGUgZ2xvYmFsIGBnX2Jsb2NraW5nYCBpcyBub3Qgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IG1vZGlmaWVzIGJvb2xlYW4gY29uZmlndXJhdGlvbiBmbGFncyBhbmQgcHJpbnRzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNhMjEzYjY4ZTdlNTZhZTA0MzhmMWM1MGUxMzQxNDM4MzNmYmJmOTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAwNjoyMjo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jIGIvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMKaW5kZXggZjhjMGZkNTdlMDQxYS4uMGRjN2ZkMTA2ZGI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMKQEAgLTE5MTIsNiAmIzQzOzE5MTIsMTIgQEAgc3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KQogCQlkZXYtJmd0O2Jsb2NraW5nID0gdHJ1ZTsKIAllbHNlIC8qIGNhY2hlIGlzIG1lYW5pbmdsZXNzICovCiAJCWRldi0mZ3Q7Y2FjaGVfc2l6ZSA9IDA7CiYjNDM7CiYjNDM7CWlmIChkZXYtJmd0O3NoYXJlZF90YWdzICZhbXA7JmFtcDsgZGV2LSZndDtibG9ja2luZyAmYW1wOyZhbXA7ICFnX2Jsb2NraW5nKSB7CiYjNDM7CQlwcl9pbmZvKCYjMzQ7c2hhcmVkX3RhZ3MgZGlzYWJsZWQ6IG1lbW9yeV9iYWNrZWQvYmxvY2tpbmcgZGV2aWNlIHJlcXVpcmVzIHBlci1kZXZpY2UgdGFnIHNldCBmb3IgQkxLX01RX0ZfQkxPQ0tJTkdcbiYjMzQ7KTsKJiM0MzsJCWRldi0mZ3Q7c2hhcmVkX3RhZ3MgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwogCWRldi0mZ3Q7Y2FjaGVfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIFVMT05HX01BWCAvIDEwMjQgLyAxMDI0LAogCQkJCQkJZGV2LSZndDtjYWNoZV9zaXplKTsKIAlkZXYtJmd0O21icHMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDEwMjQgKiA0MCwgZGV2LSZndDttYnBzKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA2OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODEKCQkJCQkJCW91dHB1dDogMTYyCgkJCQkJCQl0aG91Z2h0czogMzk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE51bGxfYmxrIENvbmZpZ3VyYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jYCwgc3BlY2lmaWNhbGx5IGFkZGluZyBhIGNoZWNrIHdpdGhpbiB0aGUgYG51bGxfdmFsaWRhdGVfY29uZmAgZnVuY3Rpb24uIEl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiByZWFsbHkuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBtYWtpbmcgc3VyZSB0aGF0IGlmIGEgYG51bGxfYmxrYCBkZXZpY2UgaXMgY29uZmlndXJlZCBmb3IgYm90aCBtZW1vcnktYmFja2VkIG9wZXJhdGlvbiBhbmQgYmxvY2tpbmcgbW9kZSAoYGRldi0mZ3Q7YmxvY2tpbmdgIGlzIHRydWUpLCBidXQgdGhlIGdsb2JhbCBgZ19ibG9ja2luZ2AgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gYHNoYXJlZF90YWdzYCBnZXRzIGRpc2FibGVkLgoKSSYjMzk7dmUgbG9va2VkIGF0IHRoZSBjb2RlLiBUaGlzIHNlZW1zIGhhcm1sZXNzLCBmdW5kYW1lbnRhbGx5LiBJdCYjMzk7cyBqdXN0IGEgYm9vbGVhbiBmbGFnIGJlaW5nIG1vZGlmaWVkIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLiBUaGVyZSYjMzk7cyBubyBjcmVhdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgaGFyYm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBOb3RoaW5nIGlzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZS4gVGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXBlbmRzIG9uIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdGhhdCBtaWdodCBsZWFkIHRvIGEgdnVsbmVyYWJpbGl0eS4gSXQmIzM5O3Mgc2ltcGx5IGEgc2FmZXR5IGNoZWNrIHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24uCgpMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4uLiBSaWdodCwgYGRldmAgaXMgYSBgc3RydWN0IG51bGxiX2RldmljZWAsIGFuZCBgc2hhcmVkX3RhZ3NgIGlzIGEgYm9vbGVhbiB3aXRoaW4gdGhhdCBzdHJ1Y3R1cmUuIFRoaXMgaXMgYWxsIGNsZWFybHkgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uLiBUaGVyZSYjMzk7cyBubyBpbmRpY2F0aW9uIG9mIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBwYXRjaCBpcyBqdXN0IGEgYm9vbGVhbiBmbGFnIG1vZGlmaWNhdGlvbiBhbmQgYW4gaW5mbyBwcmludC4KCkdpdmVuIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBkb2VzbiYjMzk7dCB3YXJyYW50IEtNU0FOIGludmVzdGlnYXRpb24uIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgaGVyZS4gVGhpcyBjaGFuZ2Ugc2VlbXMgc2FmZSBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gSSYjMzk7bGwgc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcyBvbmUuIEkgYW0gY29uZmlkZW50IHRoYXQgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBiZSBoYW5kbGVkIGJ5IG90aGVyIGRlYnVnIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgZGlzYWJsaW5nIGBzaGFyZWRfdGFnc2AgaWYgdGhlIGRldmljZSBpcyBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGJ1dCB0aGUgZ2xvYmFsIGBnX2Jsb2NraW5nYCBpcyBub3Qgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IG1vZGlmaWVzIGJvb2xlYW4gY29uZmlndXJhdGlvbiBmbGFncyBhbmQgcHJpbnRzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgZGlzYWJsaW5nIGBzaGFyZWRfdGFnc2AgaWYgdGhlIGRldmljZSBpcyBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGJ1dCB0aGUgZ2xvYmFsIGBnX2Jsb2NraW5nYCBpcyBub3Qgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IG1vZGlmaWVzIGJvb2xlYW4gY29uZmlndXJhdGlvbiBmbGFncyBhbmQgcHJpbnRzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIyOjU5LjQ0ODc4NTA3MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NzgxODE2NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTlVMTF9CTEtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJudWxsX2FkZF9kZXZcIixcbiAgICBcIm51bGxiX2RldmljZV9wb3dlcl9zdG9yZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgYG51bGxfYmxrYCBkcml2ZXIsIGRpc2FibGluZyBgc2hhcmVkX3RhZ3NgIGlmIHRoZSBkZXZpY2UgaXMgbWVtb3J5LWJhY2tlZC9ibG9ja2luZyBidXQgdGhlIGdsb2JhbCBgZ19ibG9ja2luZ2AgaXMgbm90IHNldC4gVGhpcyBjaGFuZ2Ugb25seSBtb2RpZmllcyBib29sZWFuIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYW5kIHByaW50cyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24gbG9naWMgaW4gdGhlIG51bGxfYmxrIHRlc3QgYmxvY2sgZHJpdmVyIHRvIGRpc2FibGUgc2hhcmVkX3RhZ3Mgd2hlbiBhIG1lbW9yeS1iYWNrZWQvYmxvY2tpbmcgZGV2aWNlIGlzIHVzZWQgd2l0aG91dCBnbG9iYWwgYmxvY2tpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgZHJpdmVyJ3Mgc2V0dXAgcGF0aCwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb25maWdmcyAobnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlKSBvciBtb2R1bGUgaW5pdGlhbGl6YXRpb24uIEZ1enppbmcgdGhpcyBwYXRoIGVuc3VyZXMgdGhlIGNvbmZpZ3VyYXRpb24gZml4IGlzIHJvYnVzdCBhbmQgcHJldmVudHMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGJsb2NrIGxheWVyIHRhZyBzZXRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMjo1OS40NDg3ODkyNTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTUzNDI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGNhMjEzYjY4ZTdlNTZhZTA0MzhmMWM1MGUxMzQxNDM4MzNmYmJmOTFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDY6MjI6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xcbmluZGV4IGY4YzBmZDU3ZTA0MWEuLjBkYzdmZDEwNmRiODEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNcXG4rKysgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xcbkBAIC0xOTEyLDYgKzE5MTIsMTIgQEAgc3RhdGljIGludCBudWxsX3ZhbGlkYXRlX2NvbmYoc3RydWN0IG51bGxiX2RldmljZSAqZGV2KVxcbiBcXHRcXHRkZXYtXFx1MDAzZWJsb2NraW5nID0gdHJ1ZTtcXG4gXFx0ZWxzZSAvKiBjYWNoZSBpcyBtZWFuaW5nbGVzcyAqL1xcbiBcXHRcXHRkZXYtXFx1MDAzZWNhY2hlX3NpemUgPSAwO1xcbitcXG4rXFx0aWYgKGRldi1cXHUwMDNlc2hhcmVkX3RhZ3MgXFx1MDAyNlxcdTAwMjYgZGV2LVxcdTAwM2VibG9ja2luZyBcXHUwMDI2XFx1MDAyNiAhZ19ibG9ja2luZykge1xcbitcXHRcXHRwcl9pbmZvKFxcXCJzaGFyZWRfdGFncyBkaXNhYmxlZDogbWVtb3J5X2JhY2tlZC9ibG9ja2luZyBkZXZpY2UgcmVxdWlyZXMgcGVyLWRldmljZSB0YWcgc2V0IGZvciBCTEtfTVFfRl9CTE9DS0lOR1xcXFxuXFxcIik7XFxuK1xcdFxcdGRldi1cXHUwMDNlc2hhcmVkX3RhZ3MgPSBmYWxzZTtcXG4rXFx0fVxcbitcXG4gXFx0ZGV2LVxcdTAwM2VjYWNoZV9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgVUxPTkdfTUFYIC8gMTAyNCAvIDEwMjQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGRldi1cXHUwMDNlY2FjaGVfc2l6ZSk7XFxuIFxcdGRldi1cXHUwMDNlbWJwcyA9IG1pbl90KHVuc2lnbmVkIGludCwgMTAyNCAqIDQwLCBkZXYtXFx1MDAzZW1icHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMjo1OS45MjExMzg2MDZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NjA5MDk0MDgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX05VTExfQkxLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibnVsbF9hZGRfZGV2XCIsXG4gICAgXCJudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGxvZ2ljIGluIHRoZSBudWxsX2JsayB0ZXN0IGJsb2NrIGRyaXZlciB0byBkaXNhYmxlIHNoYXJlZF90YWdzIHdoZW4gYSBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGRldmljZSBpcyB1c2VkIHdpdGhvdXQgZ2xvYmFsIGJsb2NraW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGRyaXZlcidzIHNldHVwIHBhdGgsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29uZmlnZnMgKG51bGxiX2RldmljZV9wb3dlcl9zdG9yZSkgb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uLiBGdXp6aW5nIHRoaXMgcGF0aCBlbnN1cmVzIHRoZSBjb25maWd1cmF0aW9uIGZpeCBpcyByb2J1c3QgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBibG9jayBsYXllciB0YWcgc2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2EyMTNiNjhlN2U1NmFlMDQzOGYxYzUwZTEzNDE0MzgzM2ZiYmY5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA2OjIyOjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuaW5kZXggZjhjMGZkNTdlMDQxYS4uMGRjN2ZkMTA2ZGI4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuQEAgLTE5MTIsNiArMTkxMiwxMiBAQCBzdGF0aWMgaW50IG51bGxfdmFsaWRhdGVfY29uZihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG4gXHRcdGRldi1cdTAwM2VibG9ja2luZyA9IHRydWU7XG4gXHRlbHNlIC8qIGNhY2hlIGlzIG1lYW5pbmdsZXNzICovXG4gXHRcdGRldi1cdTAwM2VjYWNoZV9zaXplID0gMDtcbitcbitcdGlmIChkZXYtXHUwMDNlc2hhcmVkX3RhZ3MgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VibG9ja2luZyBcdTAwMjZcdTAwMjYgIWdfYmxvY2tpbmcpIHtcbitcdFx0cHJfaW5mbyhcInNoYXJlZF90YWdzIGRpc2FibGVkOiBtZW1vcnlfYmFja2VkL2Jsb2NraW5nIGRldmljZSByZXF1aXJlcyBwZXItZGV2aWNlIHRhZyBzZXQgZm9yIEJMS19NUV9GX0JMT0NLSU5HXFxuXCIpO1xuK1x0XHRkZXYtXHUwMDNlc2hhcmVkX3RhZ3MgPSBmYWxzZTtcbitcdH1cbitcbiBcdGRldi1cdTAwM2VjYWNoZV9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgVUxPTkdfTUFYIC8gMTAyNCAvIDEwMjQsXG4gXHRcdFx0XHRcdFx0ZGV2LVx1MDAzZWNhY2hlX3NpemUpO1xuIFx0ZGV2LVx1MDAzZW1icHMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDEwMjQgKiA0MCwgZGV2LVx1MDAzZW1icHMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjI6NTkuOTIxMTQwMDY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUzMTAyMDA5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBudWxsX2JsayBEcml2ZXIgQWZ0ZXIgYSBDb25maWd1cmF0aW9uIENoYW5nZSoqXG5cbk9rYXksIHNvIEkgc2VlIGEgcGF0Y2ggaGFzIGJlZW4gYXBwbGllZCB0byBgZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNgLiBJdCdzIHR3ZWFraW5nIHRoZSBgbnVsbF92YWxpZGF0ZV9jb25mYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGRpc2FibGluZyBgc2hhcmVkX3RhZ3NgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczogd2hlbiBgZGV2LVx1MDAzZXNoYXJlZF90YWdzYCBpcyBhbHJlYWR5IHRydWUsIGBkZXYtXHUwMDNlYmxvY2tpbmdgIGlzIHRydWUsIGFuZCBgZ19ibG9ja2luZ2AgaXMgKm5vdCogdHJ1ZS4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlci4gVGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBpcyB0eXBpY2FsbHkgdXNlZCBhcyBhIHRlc3QgYmxvY2sgZGV2aWNlLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGVzc2VudGlhbGx5IHJlY29uZmlndXJpbmcgdGhlIGBudWxsYl9kZXZpY2VgIGJ5IHNldHRpbmcgYGRldi1cdTAwM2VzaGFyZWRfdGFnc2AgdG8gYGZhbHNlYC5cblxuVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBpcyB0aGlzIG1vZGlmaWNhdGlvbiB3b3J0aCBmdXp6aW5nPyBDb25zaWRlcmluZyB0aGF0IGBudWxsX2Jsa2AgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBibG9jayBkZXZpY2UsIGFuZCBpdCBjYW4gYmUgaW5zdGFudGlhdGVkIHRocm91Z2ggY29uZmlnZnMgb3IgbW9kdWxlIHBhcmFtZXRlcnMsIEknZCBzYXkgeWVzLCBhYnNvbHV0ZWx5LiBXZSBuZWVkIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIGBudWxsX3ZhbGlkYXRlX2NvbmZgIGlzIHJlYWNoYWJsZSBnaXZlbiB0aGUgbmV3IGNvbmZpZ3VyYXRpb25zLiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gaWRlbnRpZnkgd2hhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgbmVlZGVkIHRvIHRyaWdnZXIgdGhpcyBhbHRlcmVkIGNvZGUgcGF0aC4gVW5kZXJzdGFuZGluZyB0aG9zZSBjb25maWd1cmF0aW9ucyB3aWxsIGd1aWRlIHRoZSBmdXp6aW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MDQuNDUyMTYzMTAzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NzE1Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bGxfdmFsaWRhdGVfY29uZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xODY0PXN0YXRpYyBpbnQgbnVsbF9zZXR1cF90YWdzZXQoc3RydWN0IG51bGxiICpudWxsYilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE4ODQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTg4NTpzdGF0aWMgaW50IG51bGxfdmFsaWRhdGVfY29uZihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTg4Ni17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0xOTYxPXN0YXRpYyBpbnQgbnVsbF9hZGRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5NzItXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTk3MzpcXHRydiA9IG51bGxfdmFsaWRhdGVfY29uZihkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE5NzQtXFx0aWYgKHJ2KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzowNC41MDE4ODI5NTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDExMDI3ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqRGVidWdnaW5nIGEgUG90ZW50aWFsIGBudWxsX2Jsa2AgQ29uZmlndXJhdGlvbiBJc3N1ZSoqXG5cbk9rYXksIHNvIGBudWxsX2FkZF9kZXZgIGp1c3QgZ290IGNhbGxlZCwgYW5kIGl0J3MgY2FsbGluZyBgbnVsbF92YWxpZGF0ZV9jb25mYC4gVGhhdCBtZWFucyB3ZSdyZSBpbiB0aGUgZGV2aWNlIGFkZGl0aW9uIHNlcXVlbmNlLCBhbmQgc29tZXRoaW5nIGluIHRoZSBjb25maWd1cmF0aW9uIHZhbGlkYXRpb24gaXMgbGlrZWx5IHJlbGV2YW50IHRvIHRoZSBgbnVsbF9ibGtgIGRldmljZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hhdCBjb25maWcgb3B0aW9ucyBzcGVjaWZpY2FsbHkgZW5hYmxlIG9yIGluZmx1ZW5jZSB0aGUgYG51bGxfYmxrYCBmdW5jdGlvbmFsaXR5P1wiIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgZW5hYmxpbmcgY29uZGl0aW9ucy4gSSBzaG91bGQgZGl2ZSBpbnRvIGBudWxsX3ZhbGlkYXRlX2NvbmZgIHRvIHNlZSB3aGF0IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgYXJlIGJlaW5nIGNoZWNrZWQuIEtub3dpbmcgd2hpY2ggY29uZmlnIG9wdGlvbnMgbGVhZCB0byB0aGF0IGNvZGUgcGF0aCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB3aHkgdGhlIGRldmljZSBhZGRpdGlvbiBtaWdodCBiZSBmYWlsaW5nIG9yIGJlaGF2aW5nIHVuZXhwZWN0ZWRseS4gSSBzdXNwZWN0IEkgbmVlZCB0byBjaGVjayB3aGljaCBzcGVjaWZpYyBzZXR0aW5ncyBhcmUgY3JpdGljYWwgdG8gc3VjY2Vzc2Z1bGx5IHN0YXJ0aW5nIHVwIHRoZSBgbnVsbF9ibGtgIGRldmljZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjA5LjkxMjkxMjg4OVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTM2NjQxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQkxLX0RFVl9OVUxMX0JMS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWctNS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL0tjb25maWc6Njpjb25maWcgQkxLX0RFVl9OVUxMX0JMS1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJOdWxsIHRlc3QgYmxvY2sgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnLTktXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnOjEwOmNvbmZpZyBCTEtfREVWX05VTExfQkxLX0ZBVUxUX0lOSkVDVElPTlxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvS2NvbmZpZy0xMS1cXHRib29sIFxcXCJTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MDkuOTY0Mjg4NDY1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMjE3ODQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiBpcyBzZXQgdG8gYEJMS19ERVZfTlVMTF9CTEtgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB0aGF0J3MgYSBzdGFydGluZyBwb2ludCwgYnV0IGhhcmRseSB0aGUgd2hvbGUgc3RvcnkuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB3aGF0IG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXF1aXJlZCwgaW1wbGllZCwgb3IgcG90ZW50aWFsbHkgaW4gY29uZmxpY3Qgd2l0aCB0aGlzIG9uZS4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGEgc2VlbWluZ2x5IHNpbXBsZSBzZXR0aW5nIGxpa2UgdGhpcyBvZnRlbiBoYXMgY2FzY2FkaW5nIGVmZmVjdHMsIHNldHRpbmcgb2ZmIGEgY2hhaW4gcmVhY3Rpb24gb2YgZGVwZW5kZW5jaWVzLiBMZXQncyBtYWtlIHN1cmUgbm90aGluZyBpcyBvdmVybG9va2VkOyBhbmQgYXZvaWQgY3JlYXRpbmcgYSB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTQ1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MTMuMjg2NDY4Njc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBOdWxsIGJsb2NrIGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgQkxLX0RFVl9OVUxMX0JMS1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIk51bGwgdGVzdCBibG9jayBkcml2ZXJcXFwiXFxuICAgODpcXHRcXHRzZWxlY3QgQ09ORklHRlNfRlNcXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIEJMS19ERVZfTlVMTF9CTEtfRkFVTFRfSU5KRUNUSU9OXFxuICAxMTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZhdWx0IGluamVjdGlvbiBmb3IgTnVsbCB0ZXN0IGJsb2NrIGRyaXZlclxcXCJcXG4gIDEyOlxcdFxcdGRlcGVuZHMgb24gQkxLX0RFVl9OVUxMX0JMSyBcXHUwMDI2XFx1MDAyNiBGQVVMVF9JTkpFQ1RJT05fQ09ORklHRlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MTMuMjg2NTI0MTQ2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI2NTE3ODY5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE51bGwgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGBudWxsYCBibG9jayBkZXZpY2UgaW1wbGVtZW50YXRpb24uIEl0IHNlZW1zIGxpa2UgdGhlIGNvbnN0YW50IGBCTEtfREVWX05VTExfQkxLYCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgZGVmaW5pbmcgdGhlIGJsb2NrIGRldmljZS4gTm90aGluZyBjb21wbGljYXRlZCBoZXJlLCB3aGljaCBpcyBnb29kLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBgbnVsbF92YWxpZGF0ZV9jb25mYCBpcyBkZWNsYXJlZCBgc3RhdGljYCwgd2hpY2ggaXMgYXBwcm9wcmlhdGUsIGdpdmVuIGl0J3Mgb25seSBjYWxsZWQgaW50ZXJuYWxseS4gSXQgbG9va3MgbGlrZSB0aGUgY2FsbGVyIGlzIGluZGVlZCBgbnVsbF9hZGRfZGV2YC4gTm93LCBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG51bGxfYWRkX2RldmAgaXMgYWxzbyBwcm9wZXJseSBzY29wZWQgYXMgc3RhdGljLiBJdCBtYWtlcyBzZW5zZSwgZnJvbSBhIGNvZGUgb3JnYW5pemF0aW9uIGFuZCBzZWN1cml0eSBzdGFuZHBvaW50LCB0aGF0IGl0IHNob3VsZCBiZS4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDg3LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzoyMS41NTE3MDUxNDhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDU1NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bGxfYWRkX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yNzU9c3RhdGljIHZvaWQgbnVsbF9kZWxfZGV2KHN0cnVjdCBudWxsYiAqbnVsbGIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjI3NjpzdGF0aWMgaW50IG51bGxfYWRkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTI3Ny1zdGF0aWMgc3RydWN0IG51bGxiICpudWxsX2ZpbmRfZGV2X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz00ODQ9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTUwMC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo1MDE6XFx0XFx0cmV0ID0gbnVsbF9hZGRfZGV2KGRldik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTAyLVxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTE5NDg9c3RhdGljIGJvb2wgbnVsbF9zZXR1cF9mYXVsdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTk2MC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxOTYxOnN0YXRpYyBpbnQgbnVsbF9hZGRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldilcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xOTYyLXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTIxMDI9c3RhdGljIGludCBudWxsX2NyZWF0ZV9kZXYodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIxMTEtXFx0bXV0ZXhfbG9jayhcXHUwMDI2bG9jayk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjExMjpcXHRyZXQgPSBudWxsX2FkZF9kZXYoZGV2KTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMTEzLVxcdG11dGV4X3VubG9jayhcXHUwMDI2bG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjIxLjYyNDc3MDU2M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjE3MjY5NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBJIGFuYWx5emUgdGhpcyBjb2RlIHNuaXBwZXQ6XG5cbioqQW5hbHl6aW5nIERldmljZSBJbml0aWFsaXphdGlvbiBhbmQgUG93ZXIgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGlzIGBudWxsYCBibG9jayBkZXZpY2UgZHJpdmVyIGlzIHN0cnVjdHVyZWQuIEZpcnN0LCBgbnVsbF9hZGRfZGV2YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYCwgd2hpY2ggaXMgcHJldHR5IHN0YW5kYXJkIOKAkyBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byB0aGlzIG1vZHVsZSBhbmQgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCBjYWxscy4gVGhlbiwgYG51bGxfY3JlYXRlX2RldmAgZ2V0cyBjYWxsZWQgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggbWFrZXMgc2Vuc2U7IHRoYXQncyB3aGVyZSB5b3UnZCBleHBlY3QgdGhlIGRldmljZSB0byBiZSBzZXQgdXAuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdDogYG51bGxiX2RldmljZV9wb3dlcl9zdG9yZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gY29uZmlnZnMsIGltcGx5aW5nIHRoYXQncyBob3cgZGV2aWNlIHBvd2VyIHNldHRpbmdzIGFyZSBtYW5hZ2VkLiBCZWZvcmUgZGl2aW5nIGRlZXAsIGxldCBtZSB2ZXJpZnkgc29tZXRoaW5nOiBpcyBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBhbHNvIHN0YXRpYz8gWXVwLCBpdCBpcywgd2hpY2ggYWRkcyB0byB0aGUgaW50ZXJuYWwgbW9kdWxlIHN0cnVjdHVyZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBleHBvcnRlZDsgdGhlIHN0YXRpYyBvbmVzIGFyZSBsaWtlbHkgdG8gYmUgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGludGVybmFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzoyNy44NDIwNDIyODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNTMyNjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bGxfY3JlYXRlX2RldlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yMDg2PXN0YXRpYyBzdHJ1Y3QgbnVsbGIgKm51bGxfZmluZF9kZXZfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjEwMS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMTAyOnN0YXRpYyBpbnQgbnVsbF9jcmVhdGVfZGV2KHZvaWQpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjEwMy17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz0yMTMxPXN0YXRpYyBpbnQgX19pbml0IG51bGxfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMjE4My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZGV2aWNlczsgaSsrKSB7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MjE4NDpcXHRcXHRyZXQgPSBudWxsX2NyZWF0ZV9kZXYoKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0yMTg1LVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjI3Ljg5MjU4MDI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDAwMTIxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIENvbmZpZ0ZTIEV4cG9ydGVkIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgQ29uZmlnRlMgb3BlcmF0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSBleHBvc2VkLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0Li4uIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0IGRvY3VtZW50YXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBncmFudWxhcml0eSBvZiB3aGF0J3MgYXZhaWxhYmxlIHRvIG1lIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuIFdoYXQgY2FuIEkgY29udHJvbCwgYW5kIGhvdz8gVGhpcyB3aWxsIGluZm9ybSBob3cgSSBhcHByb2FjaCBhbnkgY3VzdG9tIG1vZHVsZSBkZXNpZ24gb3IgaW50ZXJhY3Rpb24gSSdtIHBsYW5uaW5nLiBJIG5lZWQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwcmltaXRpdmVzIGJlZm9yZSBJIHN0YXJ0IHdyaXRpbmcgY29kZS4gQXJlIHRoZXJlIGFueSBnb3RjaGFzIEkgbmVlZCB0byBhbnRpY2lwYXRlPyBUaW1lIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MzEuMzMyNTk0ODYxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzIzMTM2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWdmc19pdGVtX29wZXJhdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NjM3PXN0YXRpYyB2b2lkIG51bGxiX2RldmljZV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTY0NC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzo2NDU6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgbnVsbGJfZGV2aWNlX29wcyA9IHtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02NDYtXFx0LnJlbGVhc2VcXHQ9IG51bGxiX2RldmljZV9yZWxlYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzozMS4zNzk4MzE1MThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg3MjY2MDY1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgbnVsbF9ibGtgJ3MgQ29yZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlzc2VjdCBgZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJBbHJpZ2h0LCBsZXQncyBzZWUgd2hhdCB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYW5kIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcyBhcmUgd2l0aGluIHRoaXMgbnVsbCBibG9jayBkZXZpY2UgZHJpdmVyLlwiIEknbSBtZW50YWxseSBwYXJzaW5nIHRoZSBmaWxlIHBhdGgg4oCTIHRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBkcml2ZXIncyBjb3JlIGluaXRpYWxpemF0aW9uLCByZWdpc3RyYXRpb24sIGFuZCBwb3RlbnRpYWxseSBpdHMgZGV2aWNlIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRvIGZpbmQgYG1vZHVsZV9pbml0YCBjYWxscyB0byBnZXQgdGhpbmdzIHJvbGxpbmcsIGBtb2R1bGVfZXhpdGAgZm9yIGNsZWFudXAsIGFuZCBmdW5jdGlvbnMgdGhhdCByZWdpc3RlciB0aGUgYmxvY2sgZGV2aWNlIHdpdGggdGhlIGtlcm5lbC4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHNvbWUga2luZCBvZiBgc3RydWN0IGdlbmRpc2tgIGFsbG9jYXRpb24gYW5kIHBvcHVsYXRpb24sIGFsb25nIHdpdGggdGhlIGRldmljZSBvcGVyYXRpb25zIHRoYXQgd2lsbCBoYW5kbGUgcmVxdWVzdHMsIGV2ZW4gaWYgdGhvc2Ugb3BlcmF0aW9ucyBhcmUganVzdCBkdW1teSBmdW5jdGlvbnMgb3IgZG8gbm90aGluZy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgaXQgaGFuZGxlcyByZXF1ZXN0cyBzaW5jZSB0aGlzIGRyaXZlciBzZXJ2ZXMgYXMgYSBibG9jayBob2xlLiBBcmUgdGhleSBpbW1lZGlhdGVseSBjb21wbGV0ZWQgd2l0aCBhIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgb3IgYXJlIHRoZXkganVzdCBkdW1wZWQgdG8gdGhlIHZvaWQ/IFBlcmhhcHMsIEknbGwgc2VlIHNvbWUgY29tbWVudHMgaW5kaWNhdGluZyB3aGF0IGlzIG5lZWRlZCB0byBiZSBpbXBsZW1lbnRlZC4gRmluYWxseSwgSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBvciBwYXJhbWV0ZXJzIHRoYXQgdGhlIGRyaXZlciB1c2VzLCBwYXJ0aWN1bGFybHkgZm9yIHNldHRpbmcgdXAgdGhlIFwibnVsbFwiIGJlaGF2aW9yLiBBbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgZWRnZSBjYXNlcyBhcmUgYWxzbyBvbiBteSByYWRhci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA1MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjM1LjI1MjQ5OTgxN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwMzgyNDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjM1LjMwMTU0NjA3M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg1NzQ4NDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBNb2R1bGUgU3RydWN0dXJlKipcblxuQWxyaWdodCwgc28gaXQncyBhIHNlbGYtY29udGFpbmVkIG1vZHVsZSwgbm8gZXh0ZXJuYWwgc3ltYm9scywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgbWVhbnMgaXQncyBkZXNpZ25lZCB0byBiZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50LCBsaWtlbHkgbWFuYWdpbmcgaXRzIG93biByZXNvdXJjZXMgYW5kIG5vdCByZWx5aW5nIG9uIG90aGVyIG1vZHVsZXMgZm9yIGNvcmUgZnVuY3Rpb25hbGl0eS4gVGhlIG1vZHVsZSdzIGxpZmUgY3ljbGUgaXMgYWxsIGFib3V0IHRoZSBpbml0IGFuZCB0aGVuIHRoZSBDb25maWdGUyBvcGVyYXRpb25zLiBUaGF0J3MgYSBjbGFzc2ljIHBhdHRlcm4gZm9yIENvbmZpZ0ZTIGRldmljZXMuIE5vdyBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgZGV2aWNlIGhhbmRsZXMgcG93ZXIgbWFuYWdlbWVudCBhbmQgdGhlIGNvcmUgb3BlcmF0aW9ucy4gSSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBpbnRvIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGFuZCBgbnVsbGJfZGV2aWNlX29wc2AgZnVuY3Rpb25zLiBUaG9zZSBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGl0IGRvZXMgYW5kIGhvdyBpdCdzIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzozOS4yODcyOTgwMzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxOTc3MDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm51bGxiX2RldmljZV9wb3dlcl9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz00Nzk9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3Bvd2VyX3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjaGFyICpwYWdlKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNDgzLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjQ4NDpzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTQ4NS1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6MzkuMzM5MjgxNjg0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTAwNzAwNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDb25maWdGUyBQb3dlciBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIENvbmZpZ0ZTIGF0dHJpYnV0ZSBjb250cm9sbGluZyBwb3dlciBtYW5hZ2VtZW50LiBUaW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZTsgdGhlcmUgYXJlIGEgbG90IG9mIHdheXMgcG93ZXIgaXMgaGFuZGxlZCwgc28gXCJwb3dlclwiIGFsb25lIGlzIHRvbyBnZW5lcmFsLiBJIGtub3cgQ29uZmlnRlMgb2ZmZXJzIGEgaGlnaGx5IGZsZXhpYmxlIGFwcHJvYWNoIHRvIGRldmljZSBjb25maWd1cmF0aW9uLCBhbmQgcG93ZXIgbWFuYWdlbWVudCBpcyBhIGNydWNpYWwgYXJlYSB3aGVyZSB0aGlzIGZsZXhpYmlsaXR5IGNhbiBiZSBsZXZlcmFnZWQuIEkgaGF2ZSB0byBmaW5kIHRoZSBjb3JyZWN0IGF0dHJpYnV0ZSBuYW1lIG9yIHBhdGggd2l0aGluIHRoZSBDb25maWdGUyBmaWxlc3lzdGVtIHRoYXQgZGVhbHMgd2l0aCBwb3dlci1yZWxhdGVkIHNldHRpbmdzLiBUaGlzIGNvdWxkIGludm9sdmUgc2V0dGluZ3MgZm9yIGRldmljZSBzdGF0ZXMsIHBvd2VyIG1vZGVzIChlLmcuLCBzdXNwZW5kLCBzdGFuZGJ5LCBhY3RpdmUpLCB2b2x0YWdlIHJlZ3VsYXRpb24sIG9yIGV2ZW4gY2xvY2sgZ2F0aW5nLCBkZXBlbmRpbmcgb24gdGhlIHNwZWNpZmljIGRldmljZSB0eXBlIEknbSBpbnRlcmVzdGVkIGluIGNvbmZpZ3VyaW5nLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIGl0IHdpbGwgZGVwZW5kIG9uIHRoZSBkcml2ZXIgYW5kIGRldmljZSBpdHNlbGYsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gSXMgdGhlcmUgYSBjb25zaXN0ZW50IG5hbWluZyBzY2hlbWUgdGhhdCBJIGNhbiBsZXZlcmFnZT8gT3Igd2lsbCBJIGhhdmUgdG8gZGVsdmUgaW50byB0aGUgZHJpdmVyIHNvdXJjZSBjb2RlPyBIb3BlZnVsbHksIHRoaXMgaXMgd2VsbC1kb2N1bWVudGVkIGluIHRoZSByZWxldmFudCBkcml2ZXIgZG9jdW1lbnRhdGlvbiBhbmQvb3Iga2VybmVsIGRvY3VtZW50YXRpb24uIExldCdzIHNlZSB3aGF0IHR1cm5zIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzg1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6NDMuMTg5MzU0NDI4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUzOTY4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdGU19BVFRSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTM1Mj1udWxsYl9kZXZpY2VfIyNOQU1FIyNfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLCBjb25zdCBjaGFyICpwYWdlLFxcdFxcXFxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTM3MS19XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjM3MjpDT05GSUdGU19BVFRSKG51bGxiX2RldmljZV8sIE5BTUUpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTM3My1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTQ4ND1zdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTIyLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjUyMzpDT05GSUdGU19BVFRSKG51bGxiX2RldmljZV8sIHBvd2VyKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01MjQtXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01MzI9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01NzUtfVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU3NjpDT05GSUdGU19BVFRSKG51bGxiX2RldmljZV8sIGJhZGJsb2Nrcyk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTc3LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTU3OD1zdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2Vfem9uZV9yZWFkb25seV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01ODQtfVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU4NTpDT05GSUdGU19BVFRSX1dPKG51bGxiX2RldmljZV8sIHpvbmVfcmVhZG9ubHkpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTU4Ni1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYz01ODc9c3RhdGljIHNzaXplX3QgbnVsbGJfZGV2aWNlX3pvbmVfb2ZmbGluZV9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy01OTMtfVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjU5NDpDT05GSUdGU19BVFRSX1dPKG51bGxiX2RldmljZV8sIHpvbmVfb2ZmbGluZSk7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNTk1LVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NzE5PXN0YXRpYyBzc2l6ZV90IG1lbWJfZ3JvdXBfZmVhdHVyZXNfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sIGNoYXIgKnBhZ2UpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03NDQtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6NzQ1OkNPTkZJR0ZTX0FUVFJfUk8obWVtYl9ncm91cF8sIGZlYXR1cmVzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy03NDYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjIzOjQzLjIzODkwMDEzNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTUwOTY1OTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIG51bGxiIERyaXZlcjogSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbnVsbGJgIGRyaXZlciBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcgaXQuIEl0IHNlZW1zIHRoYXQgdGhlIGBjb25maWdmc2AgYXR0cmlidXRlIGBwb3dlcmAgaXMgdGhlIGtleSB0cmlnZ2VyLCB3aGljaCBsZWFkcyB0byBgbnVsbF9hZGRfZGV2YCBiZWluZyBjYWxsZWQuIFRoaXMgbWVhbnMgSSBzaG91bGQgcmVhbGx5IGJlIGZvY3VzaW5nIG9uIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGJlY2F1c2UgdGhhdCdzIHdoYXQncyBoYW5kbGluZyB0aGUgcG93ZXIgYXR0cmlidXRlLiBgbnVsbF9pbml0YCBpcyB0aGUgbW9kdWxlIGluaXQsIGJ1dCB0aGF0J3Mgb25seSBjYWxsZWQgb25jZSwgc28gbm90IHVzZWZ1bCBmb3Igb25nb2luZyBmdXp6aW5nLlxuXG5IYW5nIG9uIGEgc2Vjb25k4oCmIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGlzICpzdGF0aWMqLiBEYW1uISBUaGF0IGxpbWl0cyBpdHMgdXNlZnVsbmVzcywgYXMgc3l6a2FsbGVyIG5lZWRzIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgdG8gdGFyZ2V0LiBJIHNob3VsZCBnbyBiYWNrIGFuZCBjaGVjayBgbnVsbF9hZGRfZGV2YCBhbmQgYG51bGxfdmFsaWRhdGVfY29uZmAgYWdhaW4uIElmIHRoZXkncmUgYWxzbyBzdGF0aWMgYW5kIGlubGluZWQsIHRoZXkgd2lsbCBub3QgYmUgZ29vZCBmdXp6aW5nIHRhcmdldHMuXG5cbkJ1dCB3YWl0LCBJIGRvbid0IHRoaW5rIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGlzIGlubGluZWQuIEl0J3MgdXNlZCBhcyBhIGNhbGxiYWNrIGluIGEgc3RydWN0dXJlLCBzbyBpdCBsaWtlbHkgaGFzIGEgZGlzdGluY3QgYWRkcmVzcy4gVGhlIGBDT05GSUdGU19BVFRSYCBtYWNybyBjcmVhdGVzIGEgc3RydWN0dXJlIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMuIFNvIGRlZmluaXRlbHkgbm90IGlubGluZWQhXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHNpZ25hdHVyZSBvZiBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBqdXN0IHRvIGJlIHN1cmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyNSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyMzo0OS4zODk4NjgyNDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI2MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ4MDpcXHR7XFxuIDQ4MTpcXHRcXHRyZXR1cm4gbnVsbGJfZGV2aWNlX2Jvb2xfYXR0cl9zaG93KHRvX251bGxiX2RldmljZShpdGVtKS1cXHUwMDNlcG93ZXIsIHBhZ2UpO1xcbiA0ODI6XFx0fVxcbiA0ODM6XFx0XFxuIDQ4NDpcXHRzdGF0aWMgc3NpemVfdCBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiA0ODU6XFx0XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpwYWdlLCBzaXplX3QgY291bnQpXFxuIDQ4NjpcXHR7XFxuIDQ4NzpcXHRcXHRzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYgPSB0b19udWxsYl9kZXZpY2UoaXRlbSk7XFxuIDQ4ODpcXHRcXHRib29sIG5ld3AgPSBmYWxzZTtcXG4gNDg5OlxcdFxcdHNzaXplX3QgcmV0O1xcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRyZXQgPSBudWxsYl9kZXZpY2VfYm9vbF9hdHRyX3N0b3JlKFxcdTAwMjZuZXdwLCBwYWdlLCBjb3VudCk7XFxuIDQ5MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNDkzOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdFxcdHJldCA9IGNvdW50O1xcbiA0OTY6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2bG9jayk7XFxuIDQ5NzpcXHRcXHRpZiAoIWRldi1cXHUwMDNlcG93ZXIgXFx1MDAyNlxcdTAwMjYgbmV3cCkge1xcbiA0OTg6XFx0XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoTlVMTEJfREVWX0ZMX1VQLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncykpXFxuIDQ5OTpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTAwOlxcdFxcbiA1MDE6XFx0XFx0XFx0cmV0ID0gbnVsbF9hZGRfZGV2KGRldik7XFxuIDUwMjpcXHRcXHRcXHRpZiAocmV0KSB7XFxuIDUwMzpcXHRcXHRcXHRcXHRjbGVhcl9iaXQoTlVMTEJfREVWX0ZMX1VQLCBcXHUwMDI2ZGV2LVxcdTAwM2VmbGFncyk7XFxuIDUwNDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gNTA1OlxcdFxcdFxcdH1cXG4gNTA2OlxcdFxcbiA1MDc6XFx0XFx0XFx0c2V0X2JpdChOVUxMQl9ERVZfRkxfQ09ORklHVVJFRCwgXFx1MDAyNmRldi1cXHUwMDNlZmxhZ3MpO1xcbiA1MDg6XFx0XFx0XFx0ZGV2LVxcdTAwM2Vwb3dlciA9IG5ld3A7XFxuIDUwOTpcXHRcXHRcXHRyZXQgPSBjb3VudDtcXG4gNTEwOlxcdFxcdH0gZWxzZSBpZiAoZGV2LVxcdTAwM2Vwb3dlciBcXHUwMDI2XFx1MDAyNiAhbmV3cCkge1xcbiA1MTE6XFx0XFx0XFx0aWYgKHRlc3RfYW5kX2NsZWFyX2JpdChOVUxMQl9ERVZfRkxfVVAsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKSkge1xcbiA1MTI6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2Vwb3dlciA9IG5ld3A7XFxuIDUxMzpcXHRcXHRcXHRcXHRudWxsX2RlbF9kZXYoZGV2LVxcdTAwM2VudWxsYik7XFxuIDUxNDpcXHRcXHRcXHR9XFxuIDUxNTpcXHRcXHRcXHRjbGVhcl9iaXQoTlVMTEJfREVWX0ZMX0NPTkZJR1VSRUQsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKTtcXG4gNTE2OlxcdFxcdH1cXG4gNTE3OlxcdFxcbiA1MTg6XFx0b3V0OlxcbiA1MTk6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZsb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6NDkuMzg5OTk1OTg5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NjM0MTA4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRXhhbWluaW5nIFBvdGVudGlhbCBDb2RlIEhvdHNwb3RzKipcblxuQWxyaWdodCwgYmFzZWQgb24gd2hhdCBJJ3ZlIGJlZW4gZG9pbmcgbGF0ZWx5LCBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBzZWVtcyBsaWtlIGEgcHJldHR5IHNvbGlkIHN0YXJ0aW5nIHBvaW50IHdoZW4gbG9va2luZyBhdCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBIb3dldmVyLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBudWxsX2FkZF9kZXZgLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHJlZCBmbGFnIGFnYWluc3QgaW1wYWN0aW5nIHBlcmZvcm1hbmNlIHNpZ25pZmljYW50bHkgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBpbmxpbmVkLCBidXQgSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBxdWl0ZSBhIHN1YnN0YW50aWFsIGZ1bmN0aW9uLiBUaGVyZWZvcmUgaXQgbWlnaHQgYmUgd29ydGggaW52ZXN0aWdhdGluZywgZXZlbiBpZiBpdCBpcyBzdGF0aWMuIEnigJlsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXTigJlzIHRydWx5IGlubGluZWQgb3Igbm90LlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhIGJpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBiaWdnZXIgZnVuY3Rpb25zIGluIGBudWxsX2Jsa2AgdGhhdCBhcmVuJ3Qgc3RhdGljLiBJdCdzIGVhc3kgdG8gb3Zlcmxvb2sgdGhpbmdzIHdoZW4geW91IGdldCB0dW5uZWwgdmlzaW9uIG9uIGEgc3BlY2lmaWMgZnVuY3Rpb24sIHNvIGxldCBtZSBxdWlja2x5IHNjYW4gdGhhdCBtb2R1bGUgYW5kIGxvb2sgZm9yIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucy4gVGhleSBhcmUgbW9zdCBsaWtlbHkgdGhlIG5leHQgY2FuZGlkYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkwMSwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6NTUuMTUzNDA5MzAzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDU1NjA2MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXlthLXpBLVowLTlfXSsgW2EtekEtWjAtOV9dK1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTIyLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS19GQVVMVF9JTkpFQ1RJT05cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyMzpzdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG51bGxfdGltZW91dF9hdHRyKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNDpzdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG51bGxfcmVxdWV1ZV9hdHRyKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoyNTpzdGF0aWMgREVDTEFSRV9GQVVMVF9BVFRSKG51bGxfaW5pdF9oY3R4X2F0dHIpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTI2LSNlbmRpZlxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NjE9c3RydWN0IG51bGxiX3BhZ2Uge1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtNjctXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6Njg6c3RhdGljIExJU1RfSEVBRChudWxsYl9saXN0KTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy02OS1zdGF0aWMgc3RydWN0IG11dGV4IGxvY2s7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9NzA9c3RhdGljIGludCBudWxsX21ham9yO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjcxOnN0YXRpYyBERUZJTkVfSURBKG51bGxiX2luZGV4ZXMpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTcyLXN0YXRpYyBzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgdGFnX3NldDtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTExNzY9c3RhdGljIHZvaWQgY29weV9mcm9tX251bGxiKHN0cnVjdCBudWxsYiAqbnVsbGIsIHZvaWQgKmRlc3QsIGxvZmZfdCBwb3MsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYy0xMjAwLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jOjEyMDE6YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX2Rpc2NhcmQoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEyMDItXFx0XFx0XFx0XFx0IHNlY3Rvcl90IHNlY3Rvciwgc2VjdG9yX3QgbnJfc2VjdG9ycylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jPTEzMTU9c3RhdGljIGlubGluZSBibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfdGhyb3R0bGVkKHN0cnVjdCBudWxsYl9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDUtICovXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTM0NjpibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfYmFkYmxvY2tzKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgc2VjdG9yX3Qgc2VjdG9yLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTEzNDctXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50ICpucl9zZWN0b3JzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM3MS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uYzoxMzcyOmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9tZW1vcnlfYmFja2VkKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMtMTM3My1cXHRcXHRcXHRcXHQgICAgICAgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0b3JfdCBucl9zZWN0b3JzKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM9MTM5NT1zdGF0aWMgaW5saW5lIHZvaWQgbnVsbGJfY29tcGxldGVfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MjItXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmM6MTQyMzpibGtfc3RhdHVzX3QgbnVsbF9wcm9jZXNzX2NtZChzdHJ1Y3QgbnVsbGJfY21kICpjbWQsIGVudW0gcmVxX29wIG9wLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jLTE0MjQtXFx0XFx0XFx0ICAgICAgc2VjdG9yX3Qgc2VjdG9yLCB1bnNpZ25lZCBpbnQgbnJfc2VjdG9ycylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaD0xMTU9c3RydWN0IG51bGxiIHtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaC0xMzEtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjEzMjpibGtfc3RhdHVzX3QgbnVsbF9oYW5kbGVfZGlzY2FyZChzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIHNlY3Rvcl90IHNlY3RvcixcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTMzLVxcdFxcdFxcdFxcdCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTM0OmJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3NfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEzNS1cXHRcXHRcXHQgICAgICBzZWN0b3JfdCBzZWN0b3IsIHVuc2lnbmVkIGludCBucl9zZWN0b3JzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTM2OmJsa19zdGF0dXNfdCBudWxsX2hhbmRsZV9iYWRibG9ja3Moc3RydWN0IG51bGxiX2NtZCAqY21kLCBzZWN0b3JfdCBzZWN0b3IsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTEzNy1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgKm5yX3NlY3RvcnMpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxMzg6YmxrX3N0YXR1c190IG51bGxfaGFuZGxlX21lbW9yeV9iYWNrZWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTM5LVxcdFxcdFxcdFxcdCAgICAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpO1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0MS0jaWZkZWYgQ09ORklHX0JMS19ERVZfWk9ORURcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQyOmludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldiwgc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQzOmludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQ0OnZvaWQgbnVsbF9mcmVlX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvbnVsbF9ibGsuaDoxNDU6aW50IG51bGxfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0Ni1cXHRcXHQgICAgICB1bnNpZ25lZCBpbnQgbnJfem9uZXMsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0Ny1cXHRcXHQgICAgICBzdHJ1Y3QgYmxrX3JlcG9ydF96b25lc19hcmdzICphcmdzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTQ4OmJsa19zdGF0dXNfdCBudWxsX3Byb2Nlc3Nfem9uZWRfY21kKHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE0OS1cXHRcXHRcXHRcXHQgICAgc2VjdG9yX3Qgc2VjdG9yLCBzZWN0b3JfdCBucl9zZWN0b3JzKTtcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmg6MTUwOnNpemVfdCBudWxsX3pvbmVfdmFsaWRfcmVhZF9sZW4oc3RydWN0IG51bGxiICpudWxsYixcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL251bGxfYmxrLmgtMTUxLVxcdFxcdFxcdFxcdHNlY3Rvcl90IHNlY3RvciwgdW5zaWduZWQgaW50IGxlbik7XFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oOjE1Mjpzc2l6ZV90IHpvbmVfY29uZF9zdG9yZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnBhZ2UsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay9udWxsX2Jsay5oLTE1My1cXHRcXHRcXHRzaXplX3QgY291bnQsIGVudW0gYmxrX3pvbmVfY29uZCBjb25kKTtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYz00Mj1zdGF0aWMgaW5saW5lIHZvaWQgbnVsbF91bmxvY2tfem9uZShzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNTAtXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jOjUxOmludCBudWxsX2luaXRfem9uZWRfZGV2KHN0cnVjdCBudWxsYl9kZXZpY2UgKmRldixcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNTItXFx0XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE3NC1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTc1OmludCBudWxsX3JlZ2lzdGVyX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGIgKm51bGxiKVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0xNzYte1xcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4Ni1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM6MTg3OnZvaWQgbnVsbF9mcmVlX3pvbmVkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE4OC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMTkyLVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoxOTM6aW50IG51bGxfcmVwb3J0X3pvbmVzKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzZWN0b3IsXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jLTE5NC1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfem9uZXMsIHN0cnVjdCBibGtfcmVwb3J0X3pvbmVzX2FyZ3MgKmFyZ3MpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtMjM5LSAqL1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzoyNDA6c2l6ZV90IG51bGxfem9uZV92YWxpZF9yZWFkX2xlbihzdHJ1Y3QgbnVsbGIgKm51bGxiLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy0yNDEtXFx0XFx0XFx0XFx0c2VjdG9yX3Qgc2VjdG9yLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxuZHJpdmVycy9ibG9jay9udWxsX2Jsay96b25lZC5jPTY0Nj1zdGF0aWMgYmxrX3N0YXR1c190IG51bGxfem9uZV9tZ210KHN0cnVjdCBudWxsYl9jbWQgKmNtZCwgZW51bSByZXFfb3Agb3AsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA3LVxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3MDg6YmxrX3N0YXR1c190IG51bGxfcHJvY2Vzc196b25lZF9jbWQoc3RydWN0IG51bGxiX2NtZCAqY21kLCBlbnVtIHJlcV9vcCBvcCxcXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzA5LVxcdFxcdFxcdFxcdCAgICBzZWN0b3JfdCBzZWN0b3IsIHNlY3Rvcl90IG5yX3NlY3RvcnMpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmM9NzQyPXN0YXRpYyB2b2lkIG51bGxfc2V0X3pvbmVfY29uZChzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL251bGxfYmxrL3pvbmVkLmMtNzc3LSAqL1xcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYzo3Nzg6c3NpemVfdCB6b25lX2NvbmRfc3RvcmUoc3RydWN0IG51bGxiX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpwYWdlLFxcbmRyaXZlcnMvYmxvY2svbnVsbF9ibGsvem9uZWQuYy03NzktXFx0XFx0XFx0c2l6ZV90IGNvdW50LCBlbnVtIGJsa196b25lX2NvbmQgY29uZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjM6NTUuNDU4OTc0MzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTU0MDc1NzUzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gQ2hhbmdlKipcblxuT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgbGllcyB3aXRoaW4gYG51bGxfdmFsaWRhdGVfY29uZmAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBudWxsX2FkZF9kZXZgLiBJIHNlZSB0aGF0IGBudWxsX2FkZF9kZXZgIGlzIGNhbGxlZCBmcm9tIHR3byBwbGFjZXM6IGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgICh0aHJvdWdoIGNvbmZpZ2ZzKSBhbmQgYG51bGxfY3JlYXRlX2RldmAgKGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24pLiBUaGlzIG1vZGlmaWNhdGlvbiBzcGVjaWZpY2FsbHkgZGlzYWJsZXMgYHNoYXJlZF90YWdzYCBpZiBgZGV2LVx1MDAzZWJsb2NraW5nYCBpcyB0cnVlIGJ1dCBgZ19ibG9ja2luZ2AgaXNuJ3QuIFRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQgaW4gaG93IHRoZSBkcml2ZXIncyBjb25maWd1cmVkLiBHaXZlbiB0aGF0IGl0J3MgZml4aW5nIGEgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gcHJvYmxlbSBpbiBhIHRlc3QgZHJpdmVyLCBmdXp6aW5nIHNvdW5kcyBsaWtlIGEgZ29vZCBpZGVhLlxuXG5TaW5jZSBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2UgZHluYW1pY2FsbHkgdGhyb3VnaCBjb25maWdmcywgdGhhdCdzIHdoZXJlIEkgc2hvdWxkIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydC4gV2FpdCBhIG1pbnV0ZSwgc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIHRyaWdnZXIgdGhpcyBjaGFuZ2UgcXVpdGUgZWFzaWx5IHZpYSBjb25maWdmcywgc28gdGhhdOKAmXMgZ29vZCBuZXdzISBMZXQncyBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgIGlzIHRoZSBiZXN0IGZ1bmN0aW9uIHRvIHRhcmdldC5cblxuSG1tLCBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBidXQgaXQncyB1c2VkIGFzIGEgY2FsbGJhY2sgaW4gYGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9uc2Agb3IgYGNvbmZpZ2ZzX2F0dHJpYnV0ZWAsIHNvIGl0J3Mgbm90IGdvaW5nIHRvIGJlIGlubGluZWQgYW5kIHN5emthbGxlciAqc2hvdWxkKiBiZSBhYmxlIHRvIGZpbmQgaXQsIGV2ZW4gdGhvdWdoIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGEgYml0IGhhcmRlciB0byByZXNvbHZlLiBCdXQgc3l6a2FsbGVyIGdlbmVyYWxseSBwcmVmZXJzIG5vbi1zdGF0aWMgZnVuY3Rpb25z4oCmIElzIHRoZXJlIGEgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBwYXRoP1xuXG5gbnVsbF9hZGRfZGV2YCBpcyBzdGF0aWMsIGFzIGlzIGBudWxsX3ZhbGlkYXRlX2NvbmZgLiBXaGF0IGFib3V0IGBudWxsX3Byb2Nlc3NfY21kYD8gVGhhdCdzIG5vdCBzdGF0aWMsIGJ1dCBpdCdzIHBhcnQgb2YgdGhlIElPIHBhdGgsIGFuZCB0aGlzIGNoYW5nZSBpcyBzcGVjaWZpY2FsbHkgYWJvdXQgY29uZmlndXJhdGlvbi4gSWYgdGhlcmUgYXJlIG5vIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiBwYXRoLCBJIGNhbiBqdXN0IHVzZSBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYCBvciBgbnVsbF9hZGRfZGV2YC4gV2FpdC4uLiBzeXprYWxsZXIgY2FuIGhhbmRsZSBzdGF0aWMgZnVuY3Rpb25zIGlmIHRoZXkgKmFyZW4ndCogaW5saW5lZC4gT2theSwgbGV0IG1lIGNoZWNrIGlmIGBudWxsX2FkZF9kZXZgIGlzIGlubGluZWQuIEdpdmVuIGl0cyBzaXplLCBpdCdzIHByb2JhYmx5IG5vdC4gSSdsbCBjaGVjayB0aGUgc2l6ZSBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTU5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjI0OjA0Ljk5OTczNzI1OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzg2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk2MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE5NjA6XFx0XFxuMTk2MTpcXHRzdGF0aWMgaW50IG51bGxfYWRkX2RldihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXFxuMTk2MjpcXHR7XFxuMTk2MzpcXHRcXHRzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHtcXG4xOTY0OlxcdFxcdFxcdC5sb2dpY2FsX2Jsb2NrX3NpemVcXHQ9IGRldi1cXHUwMDNlYmxvY2tzaXplLFxcbjE5NjU6XFx0XFx0XFx0LnBoeXNpY2FsX2Jsb2NrX3NpemVcXHQ9IGRldi1cXHUwMDNlYmxvY2tzaXplLFxcbjE5NjY6XFx0XFx0XFx0Lm1heF9od19zZWN0b3JzXFx0XFx0PSBkZXYtXFx1MDAzZW1heF9zZWN0b3JzLFxcbjE5Njc6XFx0XFx0XFx0LmRtYV9hbGlnbm1lbnRcXHRcXHQ9IDEsXFxuMTk2ODpcXHRcXHR9O1xcbjE5Njk6XFx0XFxuMTk3MDpcXHRcXHRzdHJ1Y3QgbnVsbGIgKm51bGxiO1xcbjE5NzE6XFx0XFx0aW50IHJ2O1xcbjE5NzI6XFx0XFxuMTk3MzpcXHRcXHRydiA9IG51bGxfdmFsaWRhdGVfY29uZihkZXYpO1xcbjE5NzQ6XFx0XFx0aWYgKHJ2KVxcbjE5NzU6XFx0XFx0XFx0cmV0dXJuIHJ2O1xcbjE5NzY6XFx0XFxuMTk3NzpcXHRcXHRudWxsYiA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKm51bGxiKSwgR0ZQX0tFUk5FTCwgZGV2LVxcdTAwM2Vob21lX25vZGUpO1xcbjE5Nzg6XFx0XFx0aWYgKCFudWxsYikge1xcbjE5Nzk6XFx0XFx0XFx0cnYgPSAtRU5PTUVNO1xcbjE5ODA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTk4MTpcXHRcXHR9XFxuMTk4MjpcXHRcXHRudWxsYi1cXHUwMDNlZGV2ID0gZGV2O1xcbjE5ODM6XFx0XFx0ZGV2LVxcdTAwM2VudWxsYiA9IG51bGxiO1xcbjE5ODQ6XFx0XFxuMTk4NTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2bnVsbGItXFx1MDAzZWxvY2spO1xcbjE5ODY6XFx0XFxuMTk4NzpcXHRcXHRydiA9IHNldHVwX3F1ZXVlcyhudWxsYik7XFxuMTk4ODpcXHRcXHRpZiAocnYpXFxuMTk4OTpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX251bGxiO1xcbjE5OTA6XFx0XFxuMTk5MTpcXHRcXHRydiA9IG51bGxfc2V0dXBfdGFnc2V0KG51bGxiKTtcXG4xOTkyOlxcdFxcdGlmIChydilcXG4xOTkzOlxcdFxcdFxcdGdvdG8gb3V0X2NsZWFudXBfcXVldWVzO1xcbjE5OTQ6XFx0XFxuMTk5NTpcXHRcXHRpZiAoZGV2LVxcdTAwM2V2aXJ0X2JvdW5kYXJ5KVxcbjE5OTY6XFx0XFx0XFx0bGltLnZpcnRfYm91bmRhcnlfbWFzayA9IFBBR0VfU0laRSAtIDE7XFxuMTk5NzpcXHRcXHRudWxsX2NvbmZpZ19kaXNjYXJkKG51bGxiLCBcXHUwMDI2bGltKTtcXG4xOTk4OlxcdFxcdGlmIChkZXYtXFx1MDAzZXpvbmVkKSB7XFxuMTk5OTpcXHRcXHRcXHRydiA9IG51bGxfaW5pdF96b25lZF9kZXYoZGV2LCBcXHUwMDI2bGltKTtcXG4yMDAwOlxcdFxcdFxcdGlmIChydilcXG4yMDAxOlxcdFxcdFxcdFxcdGdvdG8gb3V0X2NsZWFudXBfdGFncztcXG4yMDAyOlxcdFxcdH1cXG4yMDAzOlxcdFxcbjIwMDQ6XFx0XFx0aWYgKGRldi1cXHUwMDNlY2FjaGVfc2l6ZSBcXHUwMDNlIDApIHtcXG4yMDA1OlxcdFxcdFxcdHNldF9iaXQoTlVMTEJfREVWX0ZMX0NBQ0hFLCBcXHUwMDI2bnVsbGItXFx1MDAzZWRldi1cXHUwMDNlZmxhZ3MpO1xcbjIwMDY6XFx0XFx0XFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX1dSSVRFX0NBQ0hFO1xcbjIwMDc6XFx0XFx0XFx0aWYgKGRldi1cXHUwMDNlZnVhKVxcbjIwMDg6XFx0XFx0XFx0XFx0bGltLmZlYXR1cmVzIHw9IEJMS19GRUFUX0ZVQTtcXG4yMDA5OlxcdFxcdH1cXG4yMDEwOlxcdFxcbjIwMTE6XFx0XFx0aWYgKGRldi1cXHUwMDNlcm90YXRpb25hbClcXG4yMDEyOlxcdFxcdFxcdGxpbS5mZWF0dXJlcyB8PSBCTEtfRkVBVF9ST1RBVElPTkFMO1xcbjIwMTM6XFx0XFxuMjAxNDpcXHRcXHRudWxsYi1cXHUwMDNlZGlzayA9IGJsa19tcV9hbGxvY19kaXNrKG51bGxiLVxcdTAwM2V0YWdfc2V0LCBcXHUwMDI2bGltLCBudWxsYik7XFxuMjAxNTpcXHRcXHRpZiAoSVNfRVJSKG51bGxiLVxcdTAwM2VkaXNrKSkge1xcbjIwMTY6XFx0XFx0XFx0cnYgPSBQVFJfRVJSKG51bGxiLVxcdTAwM2VkaXNrKTtcXG4yMDE3OlxcdFxcdFxcdGdvdG8gb3V0X2NsZWFudXBfem9uZTtcXG4yMDE4OlxcdFxcdH1cXG4yMDE5OlxcdFxcdG51bGxiLVxcdTAwM2VxID0gbnVsbGItXFx1MDAzZWRpc2stXFx1MDAzZXF1ZXVlO1xcbjIwMjA6XFx0XFxuMjAyMTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VtYnBzKSB7XFxuMjAyMjpcXHRcXHRcXHRzZXRfYml0KE5VTExCX0RFVl9GTF9USFJPVFRMRUQsIFxcdTAwMjZkZXYtXFx1MDAzZWZsYWdzKTtcXG4yMDIzOlxcdFxcdFxcdG51bGxiX3NldHVwX2J3dGltZXIobnVsbGIpO1xcbjIwMjQ6XFx0XFx0fVxcbjIwMjU6XFx0XFxuMjAyNjpcXHRcXHRudWxsYi1cXHUwMDNlcS1cXHUwMDNlcXVldWVkYXRhID0gbnVsbGI7XFxuMjAyNzpcXHRcXG4yMDI4OlxcdFxcdHJ2ID0gaWRhX2FsbG9jKFxcdTAwMjZudWxsYl9pbmRleGVzLCBHRlBfS0VSTkVMKTtcXG4yMDI5OlxcdFxcdGlmIChydiBcXHUwMDNjIDApXFxuMjAzMDpcXHRcXHRcXHRnb3RvIG91dF9jbGVhbnVwX2Rpc2s7XFxuMjAzMTpcXHRcXG4yMDMyOlxcdFxcdG51bGxiLVxcdTAwM2VpbmRleCA9IHJ2O1xcbjIwMzM6XFx0XFx0ZGV2LVxcdTAwM2VpbmRleCA9IHJ2O1xcbjIwMzQ6XFx0XFxuMjAzNTpcXHRcXHRpZiAoY29uZmlnX2l0ZW1fbmFtZShcXHUwMDI2ZGV2LVxcdTAwM2Vncm91cC5jZ19pdGVtKSkge1xcbjIwMzY6XFx0XFx0XFx0LyogVXNlIGNvbmZpZ2ZzIGRpciBuYW1lIGFzIHRoZSBkZXZpY2UgbmFtZSAqL1xcbjIwMzc6XFx0XFx0XFx0c25wcmludGYobnVsbGItXFx1MDAzZWRpc2tfbmFtZSwgc2l6ZW9mKG51bGxiLVxcdTAwM2VkaXNrX25hbWUpLFxcbjIwMzg6XFx0XFx0XFx0XFx0IFxcXCIlc1xcXCIsIGNvbmZpZ19pdGVtX25hbWUoXFx1MDAyNmRldi1cXHUwMDNlZ3JvdXAuY2dfaXRlbSkpO1xcbjIwMzk6XFx0XFx0fSBlbHNlIHtcXG4yMDQwOlxcdFxcdFxcdHNwcmludGYobnVsbGItXFx1MDAzZWRpc2tfbmFtZSwgXFxcIm51bGxiJWRcXFwiLCBudWxsYi1cXHUwMDNlaW5kZXgpO1xcbjIwNDE6XFx0XFx0fVxcbjIwNDI6XFx0XFxuMjA0MzpcXHRcXHRzZXRfY2FwYWNpdHkobnVsbGItXFx1MDAzZWRpc2ssXFxuMjA0NDpcXHRcXHRcXHQoKHNlY3Rvcl90KW51bGxiLVxcdTAwM2VkZXYtXFx1MDAzZXNpemUgKiBTWl8xTSkgXFx1MDAzZVxcdTAwM2UgU0VDVE9SX1NISUZUKTtcXG4yMDQ1OlxcdFxcdG51bGxiLVxcdTAwM2VkaXNrLVxcdTAwM2VtYWpvciA9IG51bGxfbWFqb3I7XFxuMjA0NjpcXHRcXHRudWxsYi1cXHUwMDNlZGlzay1cXHUwMDNlZmlyc3RfbWlub3IgPSBudWxsYi1cXHUwMDNlaW5kZXg7XFxuMjA0NzpcXHRcXHRudWxsYi1cXHUwMDNlZGlzay1cXHUwMDNlbWlub3JzID0gMTtcXG4yMDQ4OlxcdFxcdG51bGxiLVxcdTAwM2VkaXNrLVxcdTAwM2Vmb3BzID0gXFx1MDAyNm51bGxfb3BzO1xcbjIwNDk6XFx0XFx0bnVsbGItXFx1MDAzZWRpc2stXFx1MDAzZXByaXZhdGVfZGF0YSA9IG51bGxiO1xcbjIwNTA6XFx0XFx0c3Ryc2NweShudWxsYi1cXHUwMDNlZGlzay1cXHUwMDNlZGlza19uYW1lLCBudWxsYi1cXHUwMDNlZGlza19uYW1lKTtcXG4yMDUxOlxcdFxcbjIwNTI6XFx0XFx0aWYgKG51bGxiLVxcdTAwM2VkZXYtXFx1MDAzZXpvbmVkKSB7XFxuMjA1MzpcXHRcXHRcXHRydiA9IG51bGxfcmVnaXN0ZXJfem9uZWRfZGV2KG51bGxiKTtcXG4yMDU0OlxcdFxcdFxcdGlmIChydilcXG4yMDU1OlxcdFxcdFxcdFxcdGdvdG8gb3V0X2lkYV9mcmVlO1xcbjIwNTY6XFx0XFx0fVxcbjIwNTc6XFx0XFxuMjA1ODpcXHRcXHRydiA9IGFkZF9kaXNrKG51bGxiLVxcdTAwM2VkaXNrKTtcXG4yMDU5OlxcdFxcdGlmIChydilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjQ6MDQuOTk5ODc3MDQ5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTI5Nzc3ODE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBOdWxsIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYG51bGxfYWRkX2RldmAgaXNuJ3QgaW5saW5lZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBtYWtlcyBpdCBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgYSBmb2N1cyBmdW5jdGlvbi4gQW5kIGhleSwgU3l6a2FsbGVyIGNhbiBhbHNvIHRhcmdldCBgbnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlYD8gUGVyZmVjdCwgSSdsbCBwcm92aWRlIGJvdGguIExldCdzIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHRlc3QgcGxhbiBmb3IgdGhpcy5cblxuVGhlIG1haW4gY29uZmlndXJhdGlvbiBpcyBgQkxLX0RFVl9OVUxMX0JMS2AuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWdzLiBUaGUgcGF0Y2ggbWVudGlvbnMgYHNoYXJlZF90YWdzYCwgYGJsb2NraW5nYCwgYW5kIGBnX2Jsb2NraW5nYC4gVGhvc2UgYWxsIHNlZW0gdG8gYmUgcGFydCBvZiB0aGUgYG51bGxfYmxrYCBkZXZpY2UsIGJ1dCBJJ2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhvc2UuIEkgc2hvdWxkIGFsc28gY29uZmlybSB0aGF0IGBDT05GSUdGU19GU2AgaXMgbmVlZGVkLCBidXQgaXQgc2VlbXMgdGhhdCBpdCdzIHNlbGVjdGVkIGJ5IGBCTEtfREVWX05VTExfQkxLYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gU28sIGBCTEtfREVWX05VTExfQkxLYCBzaG91bGQgYmUgc3VmZmljaWVudCBvbiBpdHMgb3duLlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBZZXMsIGBDT05GSUdfQkxLX0RFVl9OVUxMX0JMS2AgaXMgdGhlIGNyaXRpY2FsIG9uZS5cblxuQWxyaWdodCwgbGV0J3MgcmUtZXhhbWluZSB0aGlzIHBhdGNoLlxuYGBgY1xuIFx0aWYgKGRldi1cdTAwM2VzaGFyZWRfdGFncyBcdTAwMjZcdTAwMjYgZGV2LVx1MDAzZWJsb2NraW5nIFx1MDAyNlx1MDAyNiAhZ19ibG9ja2luZykge1xuIFx0XHRwcl9pbmZvKFwic2hhcmVkX3RhZ3MgZGlzYWJsZWQ6IG1lbW9yeV9iYWNrZWQvYmxvY2tpbmcgZGV2aWNlIHJlcXVpcmVzIHBlci1kZXZpY2UgdGFnIHNldCBmb3IgQkxLX01RX0ZfQkxPQ0tJTkdcXG5cIik7XG4gXHRcdGRldi1cdTAwM2VzaGFyZWRfdGFncyA9IGZhbHNlO1xuIFx0fVxuYGBgXG5Pa2F5LCB0aGlzIGlzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgZXNzZW50aWFsbHkgbW9kaWZ5aW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBudWxsX2JsayBkZXZpY2UgdG8gcHJldmVudCBhIGNyYXNoIG9yIGluY29ycmVjdCBiZWhhdmlvciB3aGVuIGBzaGFyZWRfdGFnc2AgaXMgdXNlZCB3aXRoIGEgYmxvY2tpbmcgZGV2aWNlIGJ1dCBgZ19ibG9ja2luZ2AgaXMgZmFsc2UuIERlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBtYWtlIHN1cmUgdGhpcyBmaXggd29ya3MgYXMgaW50ZW5kZWQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzLlxuXG5TbywgdGhlIGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHkgYG51bGxfYWRkX2RldmAgYW5kIGBudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmVgLiBBbmQgZm9yIGNvbmZpZ3VyYXRpb25zLCBgQkxLX0RFVl9OVUxMX0JMS2AgaXMgdGhlIGtleSBvbmUgdG8gZW5hYmxlLlxuXG5MZXQncyBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjk5MSwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNjoyNDoxNS45Mjk2NTY5MjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQxOTg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm51bGxfYWRkX2RldlwiLFxuICAgIFwibnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgbnVsbF9ibGsgdGVzdCBibG9jayBkcml2ZXIgdG8gZGlzYWJsZSBzaGFyZWRfdGFncyB3aGVuIGEgbWVtb3J5LWJhY2tlZC9ibG9ja2luZyBkZXZpY2UgaXMgdXNlZCB3aXRob3V0IGdsb2JhbCBibG9ja2luZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIncyBzZXR1cCBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIChudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUpIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gRnV6emluZyB0aGlzIHBhdGggZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbiBmaXggaXMgcm9idXN0IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYmxvY2sgbGF5ZXIgdGFnIHNldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxLX0RFVl9OVUxMX0JMS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm51bGxfYWRkX2RldlwiLFxuICAgIFwibnVsbGJfZGV2aWNlX3Bvd2VyX3N0b3JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBsb2dpYyBpbiB0aGUgbnVsbF9ibGsgdGVzdCBibG9jayBkcml2ZXIgdG8gZGlzYWJsZSBzaGFyZWRfdGFncyB3aGVuIGEgbWVtb3J5LWJhY2tlZC9ibG9ja2luZyBkZXZpY2UgaXMgdXNlZCB3aXRob3V0IGdsb2JhbCBibG9ja2luZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBkcml2ZXIncyBzZXR1cCBwYXRoLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvbmZpZ2ZzIChudWxsYl9kZXZpY2VfcG93ZXJfc3RvcmUpIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbi4gRnV6emluZyB0aGlzIHBhdGggZW5zdXJlcyB0aGUgY29uZmlndXJhdGlvbiBmaXggaXMgcm9idXN0IGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggYmxvY2sgbGF5ZXIgdGFnIHNldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjI0OjE2LjAxMjA4MzIyMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIxODUwNDI4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA2OjI0OjE2LjAxMjY3MzkzMloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MjE3OTEwNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgZGlzYWJsaW5nIGBzaGFyZWRfdGFnc2AgaWYgdGhlIGRldmljZSBpcyBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGJ1dCB0aGUgZ2xvYmFsIGBnX2Jsb2NraW5nYCBpcyBub3Qgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IG1vZGlmaWVzIGJvb2xlYW4gY29uZmlndXJhdGlvbiBmbGFncyBhbmQgcHJpbnRzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2EyMTNiNjhlN2U1NmFlMDQzOGYxYzUwZTEzNDE0MzgzM2ZiYmY5MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA2OjIyOjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9udWxsX2Jsay9tYWluLmMgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuaW5kZXggZjhjMGZkNTdlMDQxYS4uMGRjN2ZkMTA2ZGI4MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmxvY2svbnVsbF9ibGsvbWFpbi5jXG4rKysgYi9kcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY1xuQEAgLTE5MTIsNiArMTkxMiwxMiBAQCBzdGF0aWMgaW50IG51bGxfdmFsaWRhdGVfY29uZihzdHJ1Y3QgbnVsbGJfZGV2aWNlICpkZXYpXG4gXHRcdGRldi1cdTAwM2VibG9ja2luZyA9IHRydWU7XG4gXHRlbHNlIC8qIGNhY2hlIGlzIG1lYW5pbmdsZXNzICovXG4gXHRcdGRldi1cdTAwM2VjYWNoZV9zaXplID0gMDtcbitcbitcdGlmIChkZXYtXHUwMDNlc2hhcmVkX3RhZ3MgXHUwMDI2XHUwMDI2IGRldi1cdTAwM2VibG9ja2luZyBcdTAwMjZcdTAwMjYgIWdfYmxvY2tpbmcpIHtcbitcdFx0cHJfaW5mbyhcInNoYXJlZF90YWdzIGRpc2FibGVkOiBtZW1vcnlfYmFja2VkL2Jsb2NraW5nIGRldmljZSByZXF1aXJlcyBwZXItZGV2aWNlIHRhZyBzZXQgZm9yIEJMS19NUV9GX0JMT0NLSU5HXFxuXCIpO1xuK1x0XHRkZXYtXHUwMDNlc2hhcmVkX3RhZ3MgPSBmYWxzZTtcbitcdH1cbitcbiBcdGRldi1cdTAwM2VjYWNoZV9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgVUxPTkdfTUFYIC8gMTAyNCAvIDEwMjQsXG4gXHRcdFx0XHRcdFx0ZGV2LVx1MDAzZWNhY2hlX3NpemUpO1xuIFx0ZGV2LVx1MDAzZW1icHMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIDEwMjQgKiA0MCwgZGV2LVx1MDAzZW1icHMpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjQ6MTYuMDEyNjc0NjEyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMTc4ODgwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTnVsbF9ibGsgQ29uZmlndXJhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL2Jsb2NrL251bGxfYmxrL21haW4uY2AsIHNwZWNpZmljYWxseSBhZGRpbmcgYSBjaGVjayB3aXRoaW4gdGhlIGBudWxsX3ZhbGlkYXRlX2NvbmZgIGZ1bmN0aW9uLiBJdCdzIGEgc3RyYWlnaHRmb3J3YXJkIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiByZWFsbHkuIEVzc2VudGlhbGx5LCBpdCdzIG1ha2luZyBzdXJlIHRoYXQgaWYgYSBgbnVsbF9ibGtgIGRldmljZSBpcyBjb25maWd1cmVkIGZvciBib3RoIG1lbW9yeS1iYWNrZWQgb3BlcmF0aW9uIGFuZCBibG9ja2luZyBtb2RlIChgZGV2LVx1MDAzZWJsb2NraW5nYCBpcyB0cnVlKSwgYnV0IHRoZSBnbG9iYWwgYGdfYmxvY2tpbmdgIGlzbid0IGVuYWJsZWQsIHRoZW4gYHNoYXJlZF90YWdzYCBnZXRzIGRpc2FibGVkLlxuXG5JJ3ZlIGxvb2tlZCBhdCB0aGUgY29kZS4gVGhpcyBzZWVtcyBoYXJtbGVzcywgZnVuZGFtZW50YWxseS4gSXQncyBqdXN0IGEgYm9vbGVhbiBmbGFnIGJlaW5nIG1vZGlmaWVkIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLiBUaGVyZSdzIG5vIGNyZWF0aW9uIG9mIG5ldyBkYXRhIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBoYXJib3IgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vdGhpbmcgaXMgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlLiBUaGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHRoYXQgbWlnaHQgbGVhZCB0byBhIHZ1bG5lcmFiaWxpdHkuIEl0J3Mgc2ltcGx5IGEgc2FmZXR5IGNoZWNrIHdpdGhpbiB0aGUgZHJpdmVyJ3MgY29uZmlndXJhdGlvbi5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuLi4gUmlnaHQsIGBkZXZgIGlzIGEgYHN0cnVjdCBudWxsYl9kZXZpY2VgLCBhbmQgYHNoYXJlZF90YWdzYCBpcyBhIGJvb2xlYW4gd2l0aGluIHRoYXQgc3RydWN0dXJlLiBUaGlzIGlzIGFsbCBjbGVhcmx5IGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbi4gVGhlcmUncyBubyBpbmRpY2F0aW9uIG9mIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBwYXRjaCBpcyBqdXN0IGEgYm9vbGVhbiBmbGFnIG1vZGlmaWNhdGlvbiBhbmQgYW4gaW5mbyBwcmludC5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgZG9lc24ndCB3YXJyYW50IEtNU0FOIGludmVzdGlnYXRpb24uIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgaGVyZS4gVGhpcyBjaGFuZ2Ugc2VlbXMgc2FmZSBmcm9tIGEgbWVtb3J5IHNhZmV0eSBwZXJzcGVjdGl2ZS4gSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzIG9uZS4gSSBhbSBjb25maWRlbnQgdGhhdCBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGJlIGhhbmRsZWQgYnkgb3RoZXIgZGVidWcgdG9vbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODEsIk91dHB1dFRva2VucyI6MTYyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDY6MjQ6MjQuMjMwNTY1NjI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIGNoZWNrIGluIHRoZSBgbnVsbF9ibGtgIGRyaXZlciwgZGlzYWJsaW5nIGBzaGFyZWRfdGFnc2AgaWYgdGhlIGRldmljZSBpcyBtZW1vcnktYmFja2VkL2Jsb2NraW5nIGJ1dCB0aGUgZ2xvYmFsIGBnX2Jsb2NraW5nYCBpcyBub3Qgc2V0LiBUaGlzIGNoYW5nZSBvbmx5IG1vZGlmaWVzIGJvb2xlYW4gY29uZmlndXJhdGlvbiBmbGFncyBhbmQgcHJpbnRzIGFuIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGxpa2VseSBiZSBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBjaGVjayBpbiB0aGUgYG51bGxfYmxrYCBkcml2ZXIsIGRpc2FibGluZyBgc2hhcmVkX3RhZ3NgIGlmIHRoZSBkZXZpY2UgaXMgbWVtb3J5LWJhY2tlZC9ibG9ja2luZyBidXQgdGhlIGdsb2JhbCBgZ19ibG9ja2luZ2AgaXMgbm90IHNldC4gVGhpcyBjaGFuZ2Ugb25seSBtb2RpZmllcyBib29sZWFuIGNvbmZpZ3VyYXRpb24gZmxhZ3MgYW5kIHByaW50cyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBsaWtlbHkgYmUgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn25g[1] Phase: Succeeded StartedAt: 2026-08-25 06:24:36 +0000 UTC FinishedAt: 2026-08-25 06:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 06:24:36 +0000 UTC FinishedAt: 2026-08-25 06:24:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2] Phase: Succeeded StartedAt: 2026-08-25 06:24:36 +0000 UTC FinishedAt: 2026-08-25 10:09:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 06:24:36 +0000 UTC FinishedAt: 2026-08-25 10:09:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 06:24:36 +0000 UTC FinishedAt: 2026-08-25 06:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 06:24:36 +0000 UTC FinishedAt: 2026-08-25 06:24:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowmn25g/series-workflowmn25g-convert-artifact-2183483759/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 06:24:46 +0000 UTC FinishedAt: 2026-08-25 06:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 06:24:46 +0000 UTC FinishedAt: 2026-08-25 06:42:55 +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:*b2f255a6-dd87-4bc1-9369-6bd83ece9dc1,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-workflowmn25g/series-workflowmn25g-convert-artifact-2183483759/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": "2da7886b-f1ae-45e5-9c29-bd3c696a2c9b", "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-workflowmn25g/series-workflowmn25g-build-action-4196666933/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 06:24:46 +0000 UTC FinishedAt: 2026-08-25 06:42:45 +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:*b2f255a6-dd87-4bc1-9369-6bd83ece9dc1,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-workflowmn25g/series-workflowmn25g-convert-artifact-2183483759/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": "2da7886b-f1ae-45e5-9c29-bd3c696a2c9b", "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-workflowmn25g/series-workflowmn25g-build-action-4196666933/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 06:42:55 +0000 UTC FinishedAt: 2026-08-25 06:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 06:42:55 +0000 UTC FinishedAt: 2026-08-25 06:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 06:42:55 +0000 UTC FinishedAt: 2026-08-25 06:43:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 06:42:55 +0000 UTC FinishedAt: 2026-08-25 06:42:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowmn25g/series-workflowmn25g-convert-artifact-4175407550/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 06:43:05 +0000 UTC FinishedAt: 2026-08-25 06:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 06:43:05 +0000 UTC FinishedAt: 2026-08-25 06:44:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2da7886b-f1ae-45e5-9c29-bd3c696a2c9b,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-workflowmn25g/series-workflowmn25g-build-action-4196666933/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-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 06:45:08 +0000 UTC FinishedAt: 2026-08-25 06:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 06:45:08 +0000 UTC FinishedAt: 2026-08-25 06:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 06:45:08 +0000 UTC FinishedAt: 2026-08-25 07:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 06:45:08 +0000 UTC FinishedAt: 2026-08-25 07:01:02 +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:*b2f255a6-dd87-4bc1-9369-6bd83ece9dc1,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-workflowmn25g/series-workflowmn25g-convert-artifact-4175407550/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": "3e27a224-8f4e-46a7-874e-49b79528f54d", "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-workflowmn25g/series-workflowmn25g-build-action-1933206290/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 06:45:08 +0000 UTC FinishedAt: 2026-08-25 07:00:52 +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:*b2f255a6-dd87-4bc1-9369-6bd83ece9dc1,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-workflowmn25g/series-workflowmn25g-convert-artifact-4175407550/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": "3e27a224-8f4e-46a7-874e-49b79528f54d", "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-workflowmn25g/series-workflowmn25g-build-action-1933206290/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 07:01:02 +0000 UTC FinishedAt: 2026-08-25 07:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 07:01:02 +0000 UTC FinishedAt: 2026-08-25 07:01:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 07:01:02 +0000 UTC FinishedAt: 2026-08-25 07:03:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 07:01:02 +0000 UTC FinishedAt: 2026-08-25 07:02:56 +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:*3e27a224-8f4e-46a7-874e-49b79528f54d,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-workflowmn25g/series-workflowmn25g-build-action-1933206290/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-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 07:03:06 +0000 UTC FinishedAt: 2026-08-25 10:09:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 07:03:06 +0000 UTC FinishedAt: 2026-08-25 10:09:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"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:*2da7886b-f1ae-45e5-9c29-bd3c696a2c9b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e27a224-8f4e-46a7-874e-49b79528f54d,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-workflowmn25g/series-workflowmn25g-build-action-4196666933/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-workflowmn25g/series-workflowmn25g-build-action-1933206290/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 07:03:06 +0000 UTC FinishedAt: 2026-08-25 07:03:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 07:03:06 +0000 UTC FinishedAt: 2026-08-25 07:03:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"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-workflowmn25g/series-workflowmn25g-convert-artifact-1311024067/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 07:03:06 +0000 UTC FinishedAt: 2026-08-25 07:03:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 07:03:06 +0000 UTC FinishedAt: 2026-08-25 07:03:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 07:03:07 +0000 UTC FinishedAt: 2026-08-25 07:03:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 07:03:17 +0000 UTC FinishedAt: 2026-08-25 10:09:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmn25g[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["null_add_dev","nullb_device_power_store"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"2f1baf1fc8929e6c48370be543ad028ac7ad4131","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_NULL_BLK"],"series_id":"89f4ac20-c124-454c-a88f-b40367c96353","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 07:03:17 +0000 UTC FinishedAt: 2026-08-25 10:09:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2da7886b-f1ae-45e5-9c29-bd3c696a2c9b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e27a224-8f4e-46a7-874e-49b79528f54d,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-workflowmn25g/series-workflowmn25g-build-action-4196666933/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-workflowmn25g/series-workflowmn25g-build-action-1933206290/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-workflowmn25g/series-workflowmn25g-convert-artifact-1311024067/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,}