Name: series-workflowq8z9s Phase: Succeeded StartedAt: 2026-09-11 07:00:32 +0000 UTC FinishedAt: 2026-09-11 11:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[0] Phase: Succeeded StartedAt: 2026-09-11 07:00:32 +0000 UTC FinishedAt: 2026-09-11 07:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 07:00:32 +0000 UTC FinishedAt: 2026-09-11 07:49:32 +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": "f95dd9a1506d45f80485a6b518963d84cad9d533", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f95dd9a1506d45f80485a6b518963d84cad9d533", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK" ], "series_id": "68d98ed4-bc7f-4146-ad45-126fd15599e7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "part_write_streams_store", "part_set_write_streams", "part_write_streams_show", "part_put_write_streams", "blk_partition_remap", "drop_partition" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFydF93cml0ZV9zdHJlYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O3BhcnRfc2V0X3dyaXRlX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7cGFydF93cml0ZV9zdHJlYW1zX3Nob3cmIzM0OywKICAgICYjMzQ7cGFydF9wdXRfd3JpdGVfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDtibGtfcGFydGl0aW9uX3JlbWFwJiMzNDssCiAgICAmIzM0O2Ryb3BfcGFydGl0aW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzeXNmcyBjb25maWd1cmF0aW9uIGFuZCBibG9jayBsYXllciByZW1hcHBpbmcgZm9yIHdyaXRlIHN0cmVhbXMgb24gcGFydGl0aW9uIGJsb2NrIGRldmljZXMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjpcbi0gSW5vZGVzL2JkZXZzIGFyZSBhbGxvY2F0ZWQgdmlhIGBiZGV2X2FsbG9jX2lub2RlYCB3aGljaCBleHBsaWNpdGx5IHplcm9lcyB0aGUgYHN0cnVjdCBibG9ja19kZXZpY2VgIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIHN0YXJ0IGF0IHplcm8vTlVMTC5cbi0gYHN0cnVjdCBnZW5kaXNrYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAsIGVuc3VyaW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBiaXRtYXAgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cbi0gV2hlbiBgbWFwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jYCBpbiBgcGFydF9zZXRfd3JpdGVfc3RyZWFtcygpYCwgZXZlcnkgZWxlbWVudCBpbiBgbWFwWzAgLi4gbnItMV1gIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYWNyb3NzIHRoZSBsb29wIGJyYW5jaGVzIGJlZm9yZSBzd2FwcGluZyBpbnRvIGBiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLlxuXG4yLiBVc2VyIFNwYWNlIENvbW11bmljYXRpb246XG4tIFRoZSBvbmx5IGludGVyZmFjZSBleHBvc2luZyBkYXRhIHRvIHVzZXJzcGFjZSBpcyBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCB3aGljaCB1c2VzIGBzeXNmc19lbWl0KClgIHRvIGZvcm1hdCB0aGUgaW50ZWdlciBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgaW50byBhIHN0cmluZy4gTm8gYmluYXJ5IHN0cnVjdHVyZXMgb3IgcGFkZGVkIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuXG4zLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBvciBtZW1vcnkgbGVha3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy5cbi0gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHdyaXRlIHN0cmVhbSByZXNlcnZhdGlvbiBhbmQgcmVtYXBwaW5nIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSBwYXJ0aXRpb25zLiBJdCBhZGRzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSAod3JpdGVfc3RyZWFtcykgdG8gcGFydGl0aW9ucywgaW1wbGVtZW50cyBzdHJlYW0gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gdHJhY2tpbmcgb24gdGhlIHVuZGVybHlpbmcgZGlzaywgYW5kIHVwZGF0ZXMgYmlvIHBhcnRpdGlvbiByZW1hcHBpbmcgdG8gbWFwIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW1zIHRvIGRpc2sgd3JpdGUgc3RyZWFtcy4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MTNkNmY2ZDY4Y2ZjNDU0ZmZiMDJlMDk4YzMxZjZmZTc5NTBlMjY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDc6NDY6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrXG5pbmRleCA5MDBiM2ZjNGM3MmQwLi40NDJmNGMyMjFiZGVhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2tcbkBAIC0yMTgsNiAmIzQzOzIxOCwyNSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0c2FtZSBhcyB0aGUgZm9ybWF0IG9mIC9zeXMvYmxvY2svXHUwMDNjZGlza1x1MDAzZS9zdGF0LlxuIFxuIFxuJiM0MztXaGF0Olx0XHQvc3lzL2Jsb2NrL1x1MDAzY2Rpc2tcdTAwM2UvXHUwMDNjcGFydGl0aW9uXHUwMDNlL3dyaXRlX3N0cmVhbXNcbiYjNDM7RGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjZcbiYjNDM7Q29udGFjdDpcdEtlb3Nlb25nIFBhcmsgXHUwMDNja2Vvc3VuZy5wYXJrQHNhbXN1bmcuY29tXHUwMDNlXG4mIzQzO0Rlc2NyaXB0aW9uOlxuJiM0MztcdFx0W1JXXSBOdW1iZXIgb2YgdGhlIGRpc2smIzM5O3Mgd3JpdGUgc3RyZWFtcyByZXNlcnZlZCBmb3IgdGhlXG4mIzQzO1x0XHRwYXJ0aXRpb24uIFdyaXRpbmcgTiByZXNlcnZlcyBOIGRpc2sgd3JpdGUgc3RyZWFtcyB0aGF0IG5vXG4mIzQzO1x0XHRvdGhlciBwYXJ0aXRpb24gY2FuIHVzZSBhbmQgZXhwb3NlcyB0aGVtIGFzIHRoZSBwYXJ0aXRpb24mIzM5O3NcbiYjNDM7XHRcdHdyaXRlIHN0cmVhbXMgMSB0byBOLiBXcml0aW5nIDAgZ2l2ZXMgdGhlbSBiYWNrLiBBdCBtb3N0XG4mIzQzO1x0XHQvc3lzL2Jsb2NrL1x1MDAzY2Rpc2tcdTAwM2UvcXVldWUvbWF4X3dyaXRlX3N0cmVhbXMgc3RyZWFtcywgYW5kIG5ldmVyXG4mIzQzO1x0XHRtb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhblxuJiM0MztcdFx0b25seSBiZSBjaGFuZ2VkIHdoaWxlIHRoZSBwYXJ0aXRpb24gaXMgbm90IG9wZW4sIGFuZCBhIGNoYW5nZVxuJiM0MztcdFx0a2VlcHMgdGhlIHN0cmVhbSBudW1iZXJzIHRoYXQgc3Vydml2ZSBpdCBwb2ludGluZyBhdCB0aGUgc2FtZVxuJiM0MztcdFx0ZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3NcbiYjNDM7XHRcdHJlc2VydmVkIGhlcmUsIGFuZCB0aGUgcmVzZXJ2YXRpb24gaXMgbG9zdCB3aGVuIHRoZSBwYXJ0aXRpb25cbiYjNDM7XHRcdGlzIHJlbW92ZWQsIGluY2x1ZGluZyBieSBhIHBhcnRpdGlvbiB0YWJsZSByZXNjYW4uIEkvTyB0b1xuJiM0MztcdFx0dGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdFxuJiM0MztcdFx0Y2FuIHdyaXRlIHRvIGFueSBzZWN0b3Igb2YgYSBwYXJ0aXRpb24uXG4mIzQzO1xuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2Jsb2NrL1x1MDAzY2Rpc2tcdTAwM2UvcXVldWUvYWRkX3JhbmRvbVxuIERhdGU6XHRcdEp1bmUgMjAxMFxuIENvbnRhY3Q6XHRsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmNcbmluZGV4IGNkODMyMzA4Mzc0MDYuLjczMDZhNGVmMGE4NjcgMTAwNjQ0XG4tLS0gYS9ibG9jay9iZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JkZXYuY1xuQEAgLTQzOCw2ICYjNDM7NDM4LDcgQEAgc3RhdGljIHZvaWQgYmRldl9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXG4gXHRmcmVlX3BlcmNwdShiZGV2LVx1MDAzZWJkX3N0YXRzKTtcbiBcdGtmcmVlKGJkZXYtXHUwMDNlYmRfbWV0YV9pbmZvKTtcbiYjNDM7XHRrZnJlZShiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXApO1xuIFx0c2VjdXJpdHlfYmRldl9mcmVlKGJkZXYpO1xuIFxuIFx0aWYgKCFiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSkge1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jXG5pbmRleCAxOTZiY2NmMjdmNThkLi4zYjZmMDliMzk0M2Y0IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNvcmUuY1xuQEAgLTYxNiw3ICYjNDM7NjE2LDggQEAgc3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pXG4gfVxuIFxuIC8qXG4tICogUmVtYXAgYmxvY2sgbiBvZiBwYXJ0aXRpb24gcCB0byBibG9jayBuJiM0MztzdGFydChwKSBvZiB0aGUgZGlzay5cbiYjNDM7ICogUmVtYXAgYmxvY2sgbiBvZiBwYXJ0aXRpb24gcCB0byBibG9jayBuJiM0MztzdGFydChwKSBvZiB0aGUgZGlzaywgYW5kIHRoZVxuJiM0MzsgKiB3cml0ZSBzdHJlYW1zIG9mIHBhcnRpdGlvbiBwIHRvIHRoZSBkaXNrIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZW0uXG4gICovXG4gc3RhdGljIGludCBibGtfcGFydGl0aW9uX3JlbWFwKHN0cnVjdCBiaW8gKmJpbylcbiB7XG5AQCAtNjMwLDYgJiM0Mzs2MzEsMTMgQEAgc3RhdGljIGludCBibGtfcGFydGl0aW9uX3JlbWFwKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0XHRcdCAgICAgIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciAtXG4gXHRcdFx0XHQgICAgICBwLVx1MDAzZWJkX3N0YXJ0X3NlY3QpO1xuIFx0fVxuJiM0MztcdGlmIChiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIFx1MDAyNlx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIFx1MDAzZSBwLVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXMpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtID1cbiYjNDM7XHRcdFx0cC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2Jpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gLSAxXTtcbiYjNDM7XHR9XG4gXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLjc3ODUyZWIyYWNiZWMgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbkBAIC0yMDUsNiAmIzQzOzIwNSwxMzAgQEAgc3RhdGljIHNzaXplX3QgcGFydF9kaXNjYXJkX2FsaWdubWVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGJkZXZfZGlzY2FyZF9hbGlnbm1lbnQoZGV2X3RvX2JkZXYoZGV2KSkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgcGFydF93cml0ZV9zdHJlYW1zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0OywgZGV2X3RvX2JkZXYoZGV2KS1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogR2l2ZSB0aGUgd3JpdGUgc3RyZWFtcyBvZiBAcGFydCBiYWNrIHRvIHRoZSBkaXNrLiAgQ2FsbGVkIGZyb21cbiYjNDM7ICogZHJvcF9wYXJ0aXRpb24oKSB3aXRoIG9wZW5fbXV0ZXggaGVsZDsgdGhlIG1hcCBpcyBsZWZ0IGFsb25lIGJlY2F1c2UgYVxuJiM0MzsgKiB3cml0ZSByYWNpbmcgd2l0aCBkZWxfZ2VuZGlzaygpIHN0aWxsIHVzZXMgaXQgdW50aWwgdGhlIGJkZXYgaXMgZnJlZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHBhcnQtXHUwMDNlYmRfZGlzaztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuJiM0MztcdFx0XHQgICAgZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQsIHU4IG5yKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBwYXJ0LVx1MDAzZWJkX2Rpc2s7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCxcbiYjNDM7XHRcdFx0XHQgYmRldl9saW1pdHMocGFydCktXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXMsIFU4X01BWCk7XG4mIzQzO1x0dTggKm1hcCA9IE5VTEw7XG4mIzQzO1x0dW5zaWduZWQgaW50IGksIGlkLCBucl9mcmVlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdHU4IGN1cjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5yIFx1MDAzZSBtYXgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5yKSB7XG4mIzQzO1x0XHRtYXAgPSBrbWFsbG9jKG5yLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghbWFwKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0LyogdGhlIHBhcnRpdGlvbiBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIG11dGV4ICovXG4mIzQzO1x0aWYgKHhhX2xvYWQoXHUwMDI2ZGlzay1cdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpICE9IHBhcnQpIHtcbiYjNDM7XHRcdHJldCA9IC1FTlhJTztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3VyID0gcGFydC1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zO1xuJiM0MztcbiYjNDM7XHQvKiBhIG5vLW9wIGNoYW5nZSBpcyBhbGxvd2VkIHdoaWxlIG9wZW4gKi9cbiYjNDM7XHRpZiAobnIgPT0gY3VyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBzdHJlYW1zIG11c3Qgbm90IGNoYW5nZSB1bmRlciBhIHVzZXIgb2YgdGhlIHBhcnRpdGlvbiAqL1xuJiM0MztcdGlmIChhdG9taWNfcmVhZChcdTAwMjZwYXJ0LVx1MDAzZWJkX29wZW5lcnMpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5yX2ZyZWUgPSBtYXggLSBiaXRtYXBfd2VpZ2h0KGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCwgbWF4ICYjNDM7IDEpO1xuJiM0MztcdGlmIChuciBcdTAwM2UgY3VyIFx1MDAyNlx1MDAyNiBuciAtIGN1ciBcdTAwM2UgbnJfZnJlZSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT1NQQztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLZWVwIHRoZSBzdHJlYW1zIHRoYXQgc3RheSwgc28gdGhhdCBhIHBhcnRpdGlvbiBrZWVwcyB3cml0aW5nXG4mIzQzO1x0ICogdGhyb3VnaCB0aGUgc2FtZSBkaXNrIHN0cmVhbXMgYW5kIGl0cyBkYXRhIHN0YXlzIHRvZ2V0aGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbihjdXIsIG5yKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRtYXBbaV0gPSBwYXJ0LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV07XG4mIzQzO1xuJiM0MztcdGlmIChuciBcdTAwM2MgY3VyKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSBucjsgaSBcdTAwM2MgY3VyOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuJiM0MztcdFx0XHRcdCAgICBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRmb3IgKGkgPSBjdXI7IGkgXHUwMDNjIG5yOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsXG4mIzQzO1x0XHRcdFx0XHRcdG1heCAmIzQzOyAxLCAxKTtcbiYjNDM7XHRcdFx0X19zZXRfYml0KGlkLCBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuJiM0MztcdFx0XHRtYXBbaV0gPSBpZDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3YXAocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwLCBtYXApO1xuJiM0MztcdHBhcnQtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdGtmcmVlKG1hcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtlcm5mc19ub2RlICprbjtcbiYjNDM7XHR1OCBucjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3RydG91OChidWYsIDEwLCBcdTAwMjZucik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogZHJvcF9wYXJ0aXRpb24oKSByZW1vdmVzIHRoaXMgYXR0cmlidXRlIHdpdGggb3Blbl9tdXRleCBoZWxkLCBzb1xuJiM0MztcdCAqIGRvbiYjMzk7dCBob2xkIHRoZSBhY3RpdmUgcmVmZXJlbmNlIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBtdXRleC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRrbiA9IHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKFx1MDAyNmRldi1cdTAwM2Vrb2JqLCBcdTAwMjZhdHRyLVx1MDAzZWF0dHIpO1xuJiM0MztcdGlmICgha24pXG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKGRldl90b19iZGV2KGRldiksIG5yKTtcbiYjNDM7XHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBERVZJQ0VfQVRUUihwYXJ0aXRpb24sIDA0NDQsIHBhcnRfcGFydGl0aW9uX3Nob3csIE5VTEwpO1xuIHN0YXRpYyBERVZJQ0VfQVRUUihzdGFydCwgMDQ0NCwgcGFydF9zdGFydF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoc2l6ZSwgMDQ0NCwgcGFydF9zaXplX3Nob3csIE5VTEwpO1xuQEAgLTIxMyw2ICYjNDM7MzM3LDggQEAgc3RhdGljIERFVklDRV9BVFRSKGFsaWdubWVudF9vZmZzZXQsIDA0NDQsIHBhcnRfYWxpZ25tZW50X29mZnNldF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoZGlzY2FyZF9hbGlnbm1lbnQsIDA0NDQsIHBhcnRfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdywgTlVMTCk7XG4gc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoaW5mbGlnaHQsIDA0NDQsIHBhcnRfaW5mbGlnaHRfc2hvdywgTlVMTCk7XG4mIzQzO3N0YXRpYyBERVZJQ0VfQVRUUih3cml0ZV9zdHJlYW1zLCAwNjQ0LCBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyxcbiYjNDM7XHRcdCAgIHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZSk7XG4gI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVFxuIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9mYWlsID1cbiBcdF9fQVRUUihtYWtlLWl0LWZhaWwsIDA2NDQsIHBhcnRfZmFpbF9zaG93LCBwYXJ0X2ZhaWxfc3RvcmUpO1xuQEAgLTIyNyw2ICYjNDM7MzUzLDcgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBhcnRfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX2Rpc2NhcmRfYWxpZ25tZW50LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9zdGF0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9pbmZsaWdodC5hdHRyLFxuJiM0MztcdFx1MDAyNmRldl9hdHRyX3dyaXRlX3N0cmVhbXMuYXR0cixcbiAjaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUXG4gXHRcdTAwMjZkZXZfYXR0cl9mYWlsLmF0dHIsXG4gI2VuZGlmXG5AQCAtMjc0LDYgJiM0Mzs0MDEsNyBAQCB2b2lkIGRyb3BfcGFydGl0aW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwYXJ0LVx1MDAzZWJkX2Rpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4gXG4mIzQzO1x0cGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTtcbiBcdHhhX2VyYXNlKFx1MDAyNnBhcnQtXHUwMDNlYmRfZGlzay1cdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpO1xuIFx0a29iamVjdF9wdXQocGFydC1cdTAwM2ViZF9ob2xkZXJfZGlyKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuaW5kZXggOThlMjFiNGNiZjMyOC4uMGJiZmEyNzA4MDk5MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC03MSw2ICYjNDM7NzEsOSBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlIHtcbiBcbiBcdHN0cnVjdCBwYXJ0aXRpb25fbWV0YV9pbmZvICpiZF9tZXRhX2luZm87XG4gXHRpbnRcdFx0XHRiZF93cml0ZXJzO1xuJiM0MztcdC8qIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW0gcyBpcyBkaXNrIHN0cmVhbSBiZF93cml0ZV9zdHJlYW1fbWFwW3MgLSAxXSAqL1xuJiM0MztcdHU4XHRcdFx0YmRfbnJfd3JpdGVfc3RyZWFtcztcbiYjNDM7XHR1OFx0XHRcdCpiZF93cml0ZV9zdHJlYW1fbWFwO1xuICNpZmRlZiBDT05GSUdfU0VDVVJJVFlcbiBcdHZvaWRcdFx0XHQqYmRfc2VjdXJpdHk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLjVkMjQxZDdiMDgwMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTc4LDYgJiM0MzsxNzgsOCBAQCBzdHJ1Y3QgZ2VuZGlzayB7XG4gXG4gXHRzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDtcdC8qIG9wZW4vY2xvc2UgbXV0ZXggKi9cbiBcdHVuc2lnbmVkIG9wZW5fcGFydGl0aW9ucztcdC8qIG51bWJlciBvZiBvcGVuIHBhcnRpdGlvbnMgKi9cbiYjNDM7XHQvKiByZXNlcnZlZCBieSBwYXJ0aXRpb25zLCBiaXQgTiA9IHN0cmVhbSBOICgwIHVudXNlZCksIG9wZW5fbXV0ZXggKi9cbiYjNDM7XHRERUNMQVJFX0JJVE1BUCh3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBVOF9NQVggJiM0MzsgMSk7XG4gXG4gXHRzdHJ1Y3QgYmFja2luZ19kZXZfaW5mb1x0KmJkaTtcbiBcdHN0cnVjdCBrb2JqZWN0IHF1ZXVlX2tvYmo7XHQvKiB0aGUgcXVldWUvIGRpcmVjdG9yeSAqL1xuQEAgLTEzMDMsNyAmIzQzOzEzMDUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZGV2X21heF9zZWdtZW50cyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHtcbiBcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gYmRldi1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zO1xuIFx0cmV0dXJuIGJkZXZfbGltaXRzKGJkZXYpLVx1MDAzZW1heF93cml0ZV9zdHJlYW1zO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhcnRfd3JpdGVfc3RyZWFtc19zdG9yZSYjMzQ7LAogICAgJiMzNDtwYXJ0X3NldF93cml0ZV9zdHJlYW1zJiMzNDssCiAgICAmIzM0O3BhcnRfd3JpdGVfc3RyZWFtc19zaG93JiMzNDssCiAgICAmIzM0O3BhcnRfcHV0X3dyaXRlX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7YmxrX3BhcnRpdGlvbl9yZW1hcCYjMzQ7LAogICAgJiMzNDtkcm9wX3BhcnRpdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHdyaXRlIHN0cmVhbSByZXNlcnZhdGlvbiBhbmQgcmVtYXBwaW5nIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSBwYXJ0aXRpb25zLiBJdCBhZGRzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSAod3JpdGVfc3RyZWFtcykgdG8gcGFydGl0aW9ucywgaW1wbGVtZW50cyBzdHJlYW0gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gdHJhY2tpbmcgb24gdGhlIHVuZGVybHlpbmcgZGlzaywgYW5kIHVwZGF0ZXMgYmlvIHBhcnRpdGlvbiByZW1hcHBpbmcgdG8gbWFwIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW1zIHRvIGRpc2sgd3JpdGUgc3RyZWFtcy4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MTNkNmY2ZDY4Y2ZjNDU0ZmZiMDJlMDk4YzMxZjZmZTc5NTBlMjY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDc6NDY6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2sgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2sKaW5kZXggOTAwYjNmYzRjNzJkMC4uNDQyZjRjMjIxYmRlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9jawpAQCAtMjE4LDYgJiM0MzsyMTgsMjUgQEAgRGVzY3JpcHRpb246CiAJCXNhbWUgYXMgdGhlIGZvcm1hdCBvZiAvc3lzL2Jsb2NrLyZsdDtkaXNrJmd0Oy9zdGF0LgogCiAKJiM0MztXaGF0OgkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvJmx0O3BhcnRpdGlvbiZndDsvd3JpdGVfc3RyZWFtcwomIzQzO0RhdGU6CQlTZXB0ZW1iZXIgMjAyNgomIzQzO0NvbnRhY3Q6CUtlb3Nlb25nIFBhcmsgJmx0O2tlb3N1bmcucGFya0BzYW1zdW5nLmNvbSZndDsKJiM0MztEZXNjcmlwdGlvbjoKJiM0MzsJCVtSV10gTnVtYmVyIG9mIHRoZSBkaXNrJiMzOTtzIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZQomIzQzOwkJcGFydGl0aW9uLiBXcml0aW5nIE4gcmVzZXJ2ZXMgTiBkaXNrIHdyaXRlIHN0cmVhbXMgdGhhdCBubwomIzQzOwkJb3RoZXIgcGFydGl0aW9uIGNhbiB1c2UgYW5kIGV4cG9zZXMgdGhlbSBhcyB0aGUgcGFydGl0aW9uJiMzOTtzCiYjNDM7CQl3cml0ZSBzdHJlYW1zIDEgdG8gTi4gV3JpdGluZyAwIGdpdmVzIHRoZW0gYmFjay4gQXQgbW9zdAomIzQzOwkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvcXVldWUvbWF4X3dyaXRlX3N0cmVhbXMgc3RyZWFtcywgYW5kIG5ldmVyCiYjNDM7CQltb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhbgomIzQzOwkJb25seSBiZSBjaGFuZ2VkIHdoaWxlIHRoZSBwYXJ0aXRpb24gaXMgbm90IG9wZW4sIGFuZCBhIGNoYW5nZQomIzQzOwkJa2VlcHMgdGhlIHN0cmVhbSBudW1iZXJzIHRoYXQgc3Vydml2ZSBpdCBwb2ludGluZyBhdCB0aGUgc2FtZQomIzQzOwkJZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3MKJiM0MzsJCXJlc2VydmVkIGhlcmUsIGFuZCB0aGUgcmVzZXJ2YXRpb24gaXMgbG9zdCB3aGVuIHRoZSBwYXJ0aXRpb24KJiM0MzsJCWlzIHJlbW92ZWQsIGluY2x1ZGluZyBieSBhIHBhcnRpdGlvbiB0YWJsZSByZXNjYW4uIEkvTyB0bwomIzQzOwkJdGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdAomIzQzOwkJY2FuIHdyaXRlIHRvIGFueSBzZWN0b3Igb2YgYSBwYXJ0aXRpb24uCiYjNDM7CiYjNDM7CiBXaGF0OgkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvcXVldWUvYWRkX3JhbmRvbQogRGF0ZToJCUp1bmUgMjAxMAogQ29udGFjdDoJbGludXgtYmxvY2tAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmMKaW5kZXggY2Q4MzIzMDgzNzQwNi4uNzMwNmE0ZWYwYTg2NyAxMDA2NDQKLS0tIGEvYmxvY2svYmRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JkZXYuYwpAQCAtNDM4LDYgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAogCWZyZWVfcGVyY3B1KGJkZXYtJmd0O2JkX3N0YXRzKTsKIAlrZnJlZShiZGV2LSZndDtiZF9tZXRhX2luZm8pOwomIzQzOwlrZnJlZShiZGV2LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwKTsKIAlzZWN1cml0eV9iZGV2X2ZyZWUoYmRldik7CiAKIAlpZiAoIWJkZXZfaXNfcGFydGl0aW9uKGJkZXYpKSB7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCAxOTZiY2NmMjdmNThkLi4zYjZmMDliMzk0M2Y0IDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTYxNiw3ICYjNDM7NjE2LDggQEAgc3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pCiB9CiAKIC8qCi0gKiBSZW1hcCBibG9jayBuIG9mIHBhcnRpdGlvbiBwIHRvIGJsb2NrIG4mIzQzO3N0YXJ0KHApIG9mIHRoZSBkaXNrLgomIzQzOyAqIFJlbWFwIGJsb2NrIG4gb2YgcGFydGl0aW9uIHAgdG8gYmxvY2sgbiYjNDM7c3RhcnQocCkgb2YgdGhlIGRpc2ssIGFuZCB0aGUKJiM0MzsgKiB3cml0ZSBzdHJlYW1zIG9mIHBhcnRpdGlvbiBwIHRvIHRoZSBkaXNrIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZW0uCiAgKi8KIHN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC02MzAsNiAmIzQzOzYzMSwxMyBAQCBzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKQogCQkJCSAgICAgIGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgLQogCQkJCSAgICAgIHAtJmd0O2JkX3N0YXJ0X3NlY3QpOwogCX0KJiM0MzsJaWYgKGJpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtICZhbXA7JmFtcDsgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFKSB7CiYjNDM7CQlpZiAodW5saWtlbHkoYmlvLSZndDtiaV93cml0ZV9zdHJlYW0gJmd0OyBwLSZndDtiZF9ucl93cml0ZV9zdHJlYW1zKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWJpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtID0KJiM0MzsJCQlwLSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2Jpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtIC0gMV07CiYjNDM7CX0KIAliaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwppbmRleCBiNWM1OWI3OWNhN2NiLi43Nzg1MmViMmFjYmVjIDEwMDY0NAotLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwpAQCAtMjA1LDYgJiM0MzsyMDUsMTMwIEBAIHN0YXRpYyBzc2l6ZV90IHBhcnRfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgYmRldl9kaXNjYXJkX2FsaWdubWVudChkZXZfdG9fYmRldihkZXYpKSk7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgZGV2X3RvX2JkZXYoZGV2KS0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogR2l2ZSB0aGUgd3JpdGUgc3RyZWFtcyBvZiBAcGFydCBiYWNrIHRvIHRoZSBkaXNrLiAgQ2FsbGVkIGZyb20KJiM0MzsgKiBkcm9wX3BhcnRpdGlvbigpIHdpdGggb3Blbl9tdXRleCBoZWxkOyB0aGUgbWFwIGlzIGxlZnQgYWxvbmUgYmVjYXVzZSBhCiYjNDM7ICogd3JpdGUgcmFjaW5nIHdpdGggZGVsX2dlbmRpc2soKSBzdGlsbCB1c2VzIGl0IHVudGlsIHRoZSBiZGV2IGlzIGZyZWVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC0mZ3Q7YmRfZGlzazsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBhcnQtJmd0O2JkX25yX3dyaXRlX3N0cmVhbXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJX19jbGVhcl9iaXQocGFydC0mZ3Q7YmRfd3JpdGVfc3RyZWFtX21hcFtpXSwKJiM0MzsJCQkgICAgZGlzay0mZ3Q7d3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0LCB1OCBucikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC0mZ3Q7YmRfZGlzazsKJiM0MzsJdW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCwKJiM0MzsJCQkJIGJkZXZfbGltaXRzKHBhcnQpLSZndDttYXhfd3JpdGVfc3RyZWFtcywgVThfTUFYKTsKJiM0MzsJdTggKm1hcCA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGludCBpLCBpZCwgbnJfZnJlZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CXU4IGN1cjsKJiM0MzsKJiM0MzsJaWYgKG5yICZndDsgbWF4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChucikgewomIzQzOwkJbWFwID0ga21hbGxvYyhuciwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIW1hcCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CiYjNDM7CS8qIHRoZSBwYXJ0aXRpb24gbWF5IGhhdmUgYmVlbiBkcm9wcGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBtdXRleCAqLwomIzQzOwlpZiAoeGFfbG9hZCgmYW1wO2Rpc2stJmd0O3BhcnRfdGJsLCBiZGV2X3BhcnRubyhwYXJ0KSkgIT0gcGFydCkgewomIzQzOwkJcmV0ID0gLUVOWElPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3VyID0gcGFydC0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtczsKJiM0MzsKJiM0MzsJLyogYSBuby1vcCBjaGFuZ2UgaXMgYWxsb3dlZCB3aGlsZSBvcGVuICovCiYjNDM7CWlmIChuciA9PSBjdXIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogdGhlIHN0cmVhbXMgbXVzdCBub3QgY2hhbmdlIHVuZGVyIGEgdXNlciBvZiB0aGUgcGFydGl0aW9uICovCiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO3BhcnQtJmd0O2JkX29wZW5lcnMpKSB7CiYjNDM7CQlyZXQgPSAtRUJVU1k7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlucl9mcmVlID0gbWF4IC0gYml0bWFwX3dlaWdodChkaXNrLSZndDt3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggJiM0MzsgMSk7CiYjNDM7CWlmIChuciAmZ3Q7IGN1ciAmYW1wOyZhbXA7IG5yIC0gY3VyICZndDsgbnJfZnJlZSkgewomIzQzOwkJcmV0ID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtlZXAgdGhlIHN0cmVhbXMgdGhhdCBzdGF5LCBzbyB0aGF0IGEgcGFydGl0aW9uIGtlZXBzIHdyaXRpbmcKJiM0MzsJICogdGhyb3VnaCB0aGUgc2FtZSBkaXNrIHN0cmVhbXMgYW5kIGl0cyBkYXRhIHN0YXlzIHRvZ2V0aGVyLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1pbihjdXIsIG5yKTsgaSYjNDM7JiM0MzspCiYjNDM7CQltYXBbaV0gPSBwYXJ0LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2ldOwomIzQzOwomIzQzOwlpZiAobnIgJmx0OyBjdXIpIHsKJiM0MzsJCWZvciAoaSA9IG5yOyBpICZsdDsgY3VyOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlfX2NsZWFyX2JpdChwYXJ0LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2ldLAomIzQzOwkJCQkgICAgZGlzay0mZ3Q7d3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmb3IgKGkgPSBjdXI7IGkgJmx0OyBucjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLSZndDt3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLAomIzQzOwkJCQkJCW1heCAmIzQzOyAxLCAxKTsKJiM0MzsJCQlfX3NldF9iaXQoaWQsIGRpc2stJmd0O3dyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpOwomIzQzOwkJCW1hcFtpXSA9IGlkOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXN3YXAocGFydC0mZ3Q7YmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTsKJiM0MzsJcGFydC0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yOwomIzQzOwomIzQzO291dDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CWtmcmVlKG1hcCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGtlcm5mc19ub2RlICprbjsKJiM0MzsJdTggbnI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b3U4KGJ1ZiwgMTAsICZhbXA7bnIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogZHJvcF9wYXJ0aXRpb24oKSByZW1vdmVzIHRoaXMgYXR0cmlidXRlIHdpdGggb3Blbl9tdXRleCBoZWxkLCBzbwomIzQzOwkgKiBkb24mIzM5O3QgaG9sZCB0aGUgYWN0aXZlIHJlZmVyZW5jZSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbXV0ZXguCiYjNDM7CSAqLwomIzQzOwlrbiA9IHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKCZhbXA7ZGV2LSZndDtrb2JqLCAmYW1wO2F0dHItJmd0O2F0dHIpOwomIzQzOwlpZiAoIWtuKQomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsKJiM0MzsJcmV0ID0gcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhkZXZfdG9fYmRldihkZXYpLCBucik7CiYjNDM7CXN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIERFVklDRV9BVFRSKHBhcnRpdGlvbiwgMDQ0NCwgcGFydF9wYXJ0aXRpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhcnQsIDA0NDQsIHBhcnRfc3RhcnRfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc2l6ZSwgMDQ0NCwgcGFydF9zaXplX3Nob3csIE5VTEwpOwpAQCAtMjEzLDYgJiM0MzszMzcsOCBAQCBzdGF0aWMgREVWSUNFX0FUVFIoYWxpZ25tZW50X29mZnNldCwgMDQ0NCwgcGFydF9hbGlnbm1lbnRfb2Zmc2V0X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGRpc2NhcmRfYWxpZ25tZW50LCAwNDQ0LCBwYXJ0X2Rpc2NhcmRfYWxpZ25tZW50X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTsKJiM0MztzdGF0aWMgREVWSUNFX0FUVFIod3JpdGVfc3RyZWFtcywgMDY0NCwgcGFydF93cml0ZV9zdHJlYW1zX3Nob3csCiYjNDM7CQkgICBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUpOwogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2ZhaWwgPQogCV9fQVRUUihtYWtlLWl0LWZhaWwsIDA2NDQsIHBhcnRfZmFpbF9zaG93LCBwYXJ0X2ZhaWxfc3RvcmUpOwpAQCAtMjI3LDYgJiM0MzszNTMsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGFydF9hdHRyc1tdID0gewogCSZhbXA7ZGV2X2F0dHJfZGlzY2FyZF9hbGlnbm1lbnQuYXR0ciwKIAkmYW1wO2Rldl9hdHRyX3N0YXQuYXR0ciwKIAkmYW1wO2Rldl9hdHRyX2luZmxpZ2h0LmF0dHIsCiYjNDM7CSZhbXA7ZGV2X2F0dHJfd3JpdGVfc3RyZWFtcy5hdHRyLAogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogCSZhbXA7ZGV2X2F0dHJfZmFpbC5hdHRyLAogI2VuZGlmCkBAIC0yNzQsNiAmIzQzOzQwMSw3IEBAIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCkKIHsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGFydC0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiAKJiM0MzsJcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTsKIAl4YV9lcmFzZSgmYW1wO3BhcnQtJmd0O2JkX2Rpc2stJmd0O3BhcnRfdGJsLCBiZGV2X3BhcnRubyhwYXJ0KSk7CiAJa29iamVjdF9wdXQocGFydC0mZ3Q7YmRfaG9sZGVyX2Rpcik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCmluZGV4IDk4ZTIxYjRjYmYzMjguLjBiYmZhMjcwODA5OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaApAQCAtNzEsNiAmIzQzOzcxLDkgQEAgc3RydWN0IGJsb2NrX2RldmljZSB7CiAKIAlzdHJ1Y3QgcGFydGl0aW9uX21ldGFfaW5mbyAqYmRfbWV0YV9pbmZvOwogCWludAkJCWJkX3dyaXRlcnM7CiYjNDM7CS8qIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW0gcyBpcyBkaXNrIHN0cmVhbSBiZF93cml0ZV9zdHJlYW1fbWFwW3MgLSAxXSAqLwomIzQzOwl1OAkJCWJkX25yX3dyaXRlX3N0cmVhbXM7CiYjNDM7CXU4CQkJKmJkX3dyaXRlX3N0cmVhbV9tYXA7CiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCiAJdm9pZAkJCSpiZF9zZWN1cml0eTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNGY3OTA1YzM0MTJiOC4uNWQyNDFkN2IwODAyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xNzgsNiAmIzQzOzE3OCw4IEBAIHN0cnVjdCBnZW5kaXNrIHsKIAogCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwkvKiBvcGVuL2Nsb3NlIG11dGV4ICovCiAJdW5zaWduZWQgb3Blbl9wYXJ0aXRpb25zOwkvKiBudW1iZXIgb2Ygb3BlbiBwYXJ0aXRpb25zICovCiYjNDM7CS8qIHJlc2VydmVkIGJ5IHBhcnRpdGlvbnMsIGJpdCBOID0gc3RyZWFtIE4gKDAgdW51c2VkKSwgb3Blbl9tdXRleCAqLwomIzQzOwlERUNMQVJFX0JJVE1BUCh3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBVOF9NQVggJiM0MzsgMSk7CiAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbwkqYmRpOwogCXN0cnVjdCBrb2JqZWN0IHF1ZXVlX2tvYmo7CS8qIHRoZSBxdWV1ZS8gZGlyZWN0b3J5ICovCkBAIC0xMzAzLDcgJiM0MzsxMzA1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9tYXhfc2VnbWVudHMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewogCWlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gYmRldi0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtczsKIAlyZXR1cm4gYmRldl9saW1pdHMoYmRldiktJmd0O21heF93cml0ZV9zdHJlYW1zOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXcml0ZSBTdHJlYW0gUmVtYXBwaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgZGlmZjogaXQmIzM5O3MgaGl0dGluZyB0aGUgY29yZSBibG9jayBsYXllciwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSBhY3Jvc3MgYSBmZXcgZmlsZXM6IHRoZSBBQkkgZG9jdW1lbnRhdGlvbiwgYGJkZXYuY2AsIGBibGstY29yZS5jYCwgYW5kIGBwYXJ0aXRpb25zL2NvcmUuY2AsIHBsdXMgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMuIFRoaXMgbG9va3MgbGlrZSBhIHRpZ2h0bHkgY291cGxlZCBzZXQgb2YgY2hhbmdlcywgc28gdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSBvZiBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgY29tcG9uZW50cy4KCkZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgbm93IGEgbWVjaGFuaXNtIHRvIHJlbWFwIHdyaXRlIHN0cmVhbXMuIGBiZGV2X2ZyZWVfaW5vZGVgIGluIGBiZGV2LmNgIGlzIGZyZWVpbmcgYSBgYmRfd3JpdGVfc3RyZWFtX21hcGAsIHdoaWNoIHBvaW50cyB0b3dhcmQgc3RhdGUgYmVpbmcgbWFuYWdlZCBoZXJlLiBJbiBgYmxrLWNvcmUuY2AsIHRoZSBuZXcgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGZ1bmN0aW9uIHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHNwZWNpZmljIGxvZ2ljIGZvciByZW1hcHBpbmcgYXQgdGhlIHBhcnRpdGlvbiBsZXZlbC4gVGhlIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gYHBhcnRpdGlvbnMvY29yZS5jYCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgYHdyaXRlX3N0cmVhbXNgIHN5c2ZzIGF0dHJpYnV0ZXMgKGdldC9zZXQpLCBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMgKGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIGBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zYCwgZXRjLiksIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaW50ZXJmYWNlIGZvciB0aGlzIGZlYXR1cmUuIFRoZSB1cGRhdGVzIHRvIHRoZSBgc3RydWN0IGJsb2NrX2RldmljZWAgaW4gYGJsa190eXBlcy5oYCBhbmQgdGhlIGBzdHJ1Y3QgZ2VuZGlza2AgaW4gYGJsa2Rldi5oYCBjb25maXJtIG5ldyBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxhZ3MuCgpOb3csIGlzIHRoaXMgZnV6emFibGU/IEFic29sdXRlbHkuIFRoaXMgaXMgdGhlIGJsb2NrIGxheWVyLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCBkaXNrIGRldmljZXMgYW5kIHBhcnRpdGlvbnMuIEFueWJvZHkgY2FuIGNyZWF0ZSBwYXJ0aXRpb25zLCByaWdodD8gVXNpbmcgbG9vcGJhY2ssIHJhbWRpc2ssIG51bGxfYmxrLCBvciBldmVuIHRoZSBzY3NpX2RlYnVnIGRyaXZlci4gVGhlIHdyaXRlIHN0cmVhbSBzeXNmcyBpbnRlcmZhY2UgaXMgZGVmaW5pdGVseSB1c2VyLWFjY2Vzc2libGUsIGl0IGxvb2tzIGxpa2UgaXQgY2FuIGJlIHdyaXR0ZW4gdG8gdmlhIGAvc3lzL2Jsb2NrLyZsdDtkaXNrJmd0Oy8mbHQ7cGFydGl0aW9uJmd0Oy93cml0ZV9zdHJlYW1zYC4gVXNlcnMgY2FuICphbHNvKiBzZXQgdXAgd3JpdGUgc3RyZWFtcyB2aWEgbWV0aG9kcyBsaWtlIEZfU0VUX1JXX0hJTlQsIHN0YXR4LCBpb191cmluZywgb3IgZXZlbiByYXcgYmxvY2sgd3JpdGVzLCB3aGljaCBpcyBhIGJpZyBkZWFsIGluIHRlcm1zIG9mIGF0dGFjayBzdXJmYWNlLiBUaGlzIGlzIGEgY2xlYXIgYFdvcnRoRnV6emluZz10cnVlYCBzaXR1YXRpb24uIFRoaXMgYWZmZWN0cyBJL08gcGF0aCwgcGFydGl0aW9uIG1hbmFnZW1lbnQuLi4gYWxsIGNvcmUga2VybmVsIHN1YnN5c3RlbXMuCgpOZXh0LCBJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcHBlciBhbmQgZXhwbG9yZSBgYmxvY2svYCBhbmQgYGJsb2NrL3BhcnRpdGlvbnMvYCB0byB1bmRlcnN0YW5kIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBhbmQgaWRlbnRpZnkgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIGZvY3VzIHN5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy00LSNcbmJsb2NrL0tjb25maWc6NTptZW51Y29uZmlnIEJMT0NLXG5ibG9jay9LY29uZmlnLTYtICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBibG9jayBsYXllclwmIzM0OyBpZiBFWFBFUlRcbi0tXG5ibG9jay9LY29uZmlnLTI2LVxuYmxvY2svS2NvbmZpZzoyNzppZiBCTE9DS1xuYmxvY2svS2NvbmZpZy0yOC1cbmJsb2NrL0tjb25maWc6Mjk6Y29uZmlnIEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxuYmxvY2svS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTIxND1jb25maWcgQkxLX1BNXG4tLVxuYmxvY2svS2NvbmZpZy0yMTctIyBkbyBub3QgdXNlIGluIG5ldyBjb2RlXG5ibG9jay9LY29uZmlnOjIxODpjb25maWcgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcbmJsb2NrL0tjb25maWctMjE5LVx0Ym9vbFxuLS1cbmJsb2NrL0tjb25maWc9MjMyPXNvdXJjZSBcJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWRcJiMzNDtcbmJsb2NrL0tjb25maWctMjMzLVxuYmxvY2svS2NvbmZpZzoyMzQ6ZW5kaWYgIyBCTE9DS1xuLS1cbmJsb2NrL01ha2VmaWxlPTQwPW9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0spXHQmIzQzOz0gYmxrLWNyeXB0by1mYWxsYmFjay5vXG5ibG9jay9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQpXHQmIzQzOz0gaG9sZGVyLm9cbi0tXG5ibG9jay9iYWRibG9ja3MuYz02NzM9c3RhdGljIGJvb2wgY2FuX2Zyb250X292ZXJ3cml0ZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNzAyLVxuYmxvY2svYmFkYmxvY2tzLmM6NzAzOlx0aWYgKChiYi1cdTAwM2Vjb3VudCAmIzQzOyAoKmV4dHJhKSkgXHUwMDNlIE1BWF9CQURCTE9DS1MpXG5ibG9jay9iYWRibG9ja3MuYy03MDQtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDQ5PXN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTEzMC1cdFx0XHQvKiBTcGxpdHRpbmcgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjExMzE6XHRcdFx0aWYgKChiYi1cdTAwM2Vjb3VudCAmIzQzOyAxKSBcdTAwM2M9IE1BWF9CQURCTE9DS1MpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMzItXHRcdFx0XHRsZW4gPSBmcm9udF9zcGxpdHRpbmdfY2xlYXIoYmIsIHByZXYsIFx1MDAyNmJhZCk7XG4tLVxuYmxvY2svYmRldi5jPTQzNT1zdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5ibG9jay9iZGV2LmMtNDQ5LVxuYmxvY2svYmRldi5jOjQ1MDpcdGlmIChNQUpPUihiZGV2LVx1MDAzZWJkX2RldikgPT0gQkxPQ0tfRVhUX01BSk9SKVxuYmxvY2svYmRldi5jLTQ1MS1cdFx0YmxrX2ZyZWVfZXh0X21pbm9yKE1JTk9SKGJkZXYtXHUwMDNlYmRfZGV2KSk7XG4tLVxuYmxvY2svYmRldi5jPTgyOD1pbnQgYmRldl9wZXJtaXNzaW9uKGRldl90IGRldiwgYmxrX21vZGVfdCBtb2RlLCB2b2lkICpob2xkZXIpXG4tLVxuYmxvY2svYmRldi5jLTgzMS1cbmJsb2NrL2JkZXYuYzo4MzI6XHRyZXQgPSBkZXZjZ3JvdXBfY2hlY2tfcGVybWlzc2lvbihERVZDR19ERVZfQkxPQ0ssXG5ibG9jay9iZGV2LmMtODMzLVx0XHRcdE1BSk9SKGRldiksIE1JTk9SKGRldiksXG4tLVxuYmxvY2svYmRldi5jPTg2ND1zdHJ1Y3QgYmxvY2tfZGV2aWNlICpibGtkZXZfZ2V0X25vX29wZW4oZGV2X3QgZGV2LCBib29sIGF1dG9sb2FkKVxuLS1cbmJsb2NrL2JkZXYuYy04NjktXHRpbm9kZSA9IGlsb29rdXAoYmxvY2tkZXZfc3VwZXJibG9jaywgZGV2KTtcbmJsb2NrL2JkZXYuYzo4NzA6XHRpZiAoIWlub2RlIFx1MDAyNlx1MDAyNiBhdXRvbG9hZCBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfQkxPQ0tfTEVHQUNZX0FVVE9MT0FEKSkge1xuYmxvY2svYmRldi5jLTg3MS1cdFx0YmxrX3JlcXVlc3RfbW9kdWxlKGRldik7XG4tLVxuYmxvY2svYmRldi5jPTk3Mj1pbnQgYmRldl9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwgdm9pZCAqaG9sZGVyLFxuLS1cbmJsb2NrL2JkZXYuYy0xMDE4LVx0XHQgICAgIWJkZXZfdGVzdF9mbGFnKGJkZXYsIEJEX1dSSVRFX0hPTERFUikgXHUwMDI2XHUwMDI2XG5ibG9jay9iZGV2LmM6MTAxOTpcdFx0ICAgIChkaXNrLVx1MDAzZWV2ZW50X2ZsYWdzIFx1MDAyNiBESVNLX0VWRU5UX0ZMQUdfQkxPQ0tfT05fRVhDTF9XUklURSkpIHtcbmJsb2NrL2JkZXYuYy0xMDIwLVx0XHRcdGJkZXZfc2V0X2ZsYWcoYmRldiwgQkRfV1JJVEVfSE9MREVSKTtcbi0tXG5ibG9jay9iaW8taW50ZWdyaXR5LWF1dG8uYz04Mz12b2lkIGJpb19pbnRlZ3JpdHlfcHJlcChzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBhY3Rpb24pXG4tLVxuYmxvY2svYmlvLWludGVncml0eS1hdXRvLmMtODktXHRiaWQtXHUwMDNlYmlvID0gYmlvO1xuYmxvY2svYmlvLWludGVncml0eS1hdXRvLmM6OTA6XHRiaWQtXHUwMDNlYmlwLmJpcF9mbGFncyB8PSBCSVBfQkxPQ0tfSU5URUdSSVRZO1xuYmxvY2svYmlvLWludGVncml0eS1hdXRvLmMtOTEtXHRiaW9faW50ZWdyaXR5X2FsbG9jX2J1ZihiaW8sIEdGUF9OT0lPLCBhY3Rpb24gXHUwMDI2IEJJX0FDVF9aRVJPKTtcbi0tXG5ibG9jay9ibGstY29yZS5jPTEyNzQ9dm9pZCBfX2Jsa19mbHVzaF9wbHVnKHN0cnVjdCBibGtfcGx1ZyAqcGx1ZywgYm9vbCBmcm9tX3NjaGVkdWxlKVxuLS1cbmJsb2NrL2Jsay1jb3JlLmMtMTI4OC1cdHBsdWctXHUwMDNlY3VyX2t0aW1lID0gMDtcbmJsb2NrL2Jsay1jb3JlLmM6MTI4OTpcdGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UEZfQkxPQ0tfVFM7XG5ibG9jay9ibGstY29yZS5jLTEyOTAtfVxuLS1cbmJsb2NrL2Jsay1tcS1kZWJ1Z2ZzLmM9MTg1PXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBoY3R4X2ZsYWdfbmFtZVtdID0ge1xuLS1cbmJsb2NrL2Jsay1tcS1kZWJ1Z2ZzLmMtMTg4LVx0SENUWF9GTEFHX05BTUUoVEFHX0hDVFhfU0hBUkVEKSxcbmJsb2NrL2Jsay1tcS1kZWJ1Z2ZzLmM6MTg5Olx0SENUWF9GTEFHX05BTUUoQkxPQ0tJTkcpLFxuYmxvY2svYmxrLW1xLWRlYnVnZnMuYy0xOTAtXHRIQ1RYX0ZMQUdfTkFNRShUQUdfUlIpLFxuLS1cbmJsb2NrL2Jsay1tcS5jPTI4MT12b2lkIGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZShzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldClcbmJsb2NrL2Jsay1tcS5jLTI4Mi17XG5ibG9jay9ibGstbXEuYzoyODM6XHRpZiAoc2V0LVx1MDAzZWZsYWdzIFx1MDAyNiBCTEtfTVFfRl9CTE9DS0lORylcbmJsb2NrL2Jsay1tcS5jLTI4NC1cdFx0c3luY2hyb25pemVfc3JjdShzZXQtXHUwMDNlc3JjdSk7XG4tLVxuYmxvY2svYmxrLW1xLmM9NjYxPXN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYmxrX29wZl90IG9wZixcbi0tXG5ibG9jay9ibGstbXEuYy02OTUtXHRibGtfcXVldWVfZXhpdChxKTtcbmJsb2NrL2Jsay1tcS5jOjY5NjpcdHJldHVybiBFUlJfUFRSKC1FV09VTERCTE9DSyk7XG5ibG9jay9ibGstbXEuYy02OTctfVxuLS1cbmJsb2NrL2Jsay1tcS5jPTcwMD1zdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5ibG9jay9ibGstbXEuYy03NjEtXG5ibG9jay9ibGstbXEuYzo3NjI6XHRyZXQgPSAtRVdPVUxEQkxPQ0s7XG5ibG9jay9ibGstbXEuYy03NjMtXHR0YWcgPSBibGtfbXFfZ2V0X3RhZyhcdTAwMjZkYXRhKTtcbi0tXG5ibG9jay9ibGstbXEuYz0xMjM2PXN0YXRpYyB2b2lkIF9fYmxrX21xX2NvbXBsZXRlX3JlcXVlc3RfcmVtb3RlKHZvaWQgKmRhdGEpXG5ibG9jay9ibGstbXEuYy0xMjM3LXtcbmJsb2NrL2Jsay1tcS5jOjEyMzg6XHRfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKEJMT0NLX1NPRlRJUlEpO1xuYmxvY2svYmxrLW1xLmMtMTIzOS19XG4tLVxuYmxvY2svYmxrLW1xLmM9MTI3Nz1zdGF0aWMgdm9pZCBibGtfbXFfcmFpc2Vfc29mdGlycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmxrLW1xLmMtMTI4My1cdGlmIChsbGlzdF9hZGQoXHUwMDI2cnEtXHUwMDNlaXBpX2xpc3QsIGxpc3QpKVxuYmxvY2svYmxrLW1xLmM6MTI4NDpcdFx0cmFpc2Vfc29mdGlycShCTE9DS19TT0ZUSVJRKTtcbmJsb2NrL2Jsay1tcS5jLTEyODUtXHRwcmVlbXB0X2VuYWJsZSgpO1xuLS1cbmJsb2NrL2Jsay1tcS5jPTE0MTU9dm9pZCBibGtfZXhlY3V0ZV9ycV9ub3dhaXQoc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGF0X2hlYWQpXG4tLVxuYmxvY2svYmxrLW1xLmMtMTQyOS1cdGJsa19tcV9pbnNlcnRfcmVxdWVzdChycSwgYXRfaGVhZCA/IEJMS19NUV9JTlNFUlRfQVRfSEVBRCA6IDApO1xuYmxvY2svYmxrLW1xLmM6MTQzMDpcdGJsa19tcV9ydW5faHdfcXVldWUoaGN0eCwgaGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpO1xuYmxvY2svYmxrLW1xLmMtMTQzMS19XG4tLVxuYmxvY2svYmxrLW1xLmM9MjMyMT12b2lkIGJsa19tcV9ydW5faHdfcXVldWUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIGJvb2wgYXN5bmMpXG4tLVxuYmxvY2svYmxrLW1xLmMtMjMyOS1cbmJsb2NrL2Jsay1tcS5jOjIzMzA6XHRtaWdodF9zbGVlcF9pZighYXN5bmMgXHUwMDI2XHUwMDI2IGhjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKTtcbmJsb2NrL2Jsay1tcS5jLTIzMzEtXG4tLVxuYmxvY2svYmxrLW1xLmM9MjQ4MT12b2lkIGJsa19tcV9zdGFydF9od19xdWV1ZShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eClcbi0tXG5ibG9jay9ibGstbXEuYy0yNDg0LVxuYmxvY2svYmxrLW1xLmM6MjQ4NTpcdGJsa19tcV9ydW5faHdfcXVldWUoaGN0eCwgaGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpO1xuYmxvY2svYmxrLW1xLmMtMjQ4Ni19XG4tLVxuYmxvY2svYmxrLW1xLmM9MjUxNT12b2lkIGJsa19tcV9zdGFydF9zdG9wcGVkX2h3X3F1ZXVlcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYm9vbCBhc3luYylcbi0tXG5ibG9jay9ibGstbXEuYy0yNTIxLVx0XHRibGtfbXFfc3RhcnRfc3RvcHBlZF9od19xdWV1ZShoY3R4LCBhc3luYyB8fFxuYmxvY2svYmxrLW1xLmM6MjUyMjpcdFx0XHRcdFx0KGhjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSk7XG5ibG9jay9ibGstbXEuYy0yNTIzLX1cbi0tXG5ibG9jay9ibGstbXEuYz00ODM0PWludCBibGtfbXFfYWxsb2NfdGFnX3NldChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldClcbi0tXG5ibG9jay9ibGstbXEuYy00ODc4LVxuYmxvY2svYmxrLW1xLmM6NDg3OTpcdGlmIChzZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSB7XG5ibG9jay9ibGstbXEuYy00ODgwLVx0XHRzZXQtXHUwMDNlc3JjdSA9IGttYWxsb2Nfb2JqKCpzZXQtXHUwMDNlc3JjdSk7XG4tLVxuYmxvY2svYmxrLW1xLmMtNDkyOS1vdXRfY2xlYW51cF9zcmN1OlxuYmxvY2svYmxrLW1xLmM6NDkzMDpcdGlmIChzZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKVxuYmxvY2svYmxrLW1xLmMtNDkzMS1cdFx0Y2xlYW51cF9zcmN1X3N0cnVjdChzZXQtXHUwMDNlc3JjdSk7XG5ibG9jay9ibGstbXEuYy00OTMyLW91dF9mcmVlX3NyY3U6XG5ibG9jay9ibGstbXEuYzo0OTMzOlx0aWYgKHNldC1cdTAwM2VmbGFncyBcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpXG5ibG9jay9ibGstbXEuYy00OTM0LVx0XHRrZnJlZShzZXQtXHUwMDNlc3JjdSk7XG4tLVxuYmxvY2svYmxrLW1xLmM9NDk1NT12b2lkIGJsa19tcV9mcmVlX3RhZ19zZXQoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpXG4tLVxuYmxvY2svYmxrLW1xLmMtNDk3Ni1cdGNsZWFudXBfc3JjdV9zdHJ1Y3QoXHUwMDI2c2V0LVx1MDAzZXRhZ3Nfc3JjdSk7XG5ibG9jay9ibGstbXEuYzo0OTc3Olx0aWYgKHNldC1cdTAwM2VmbGFncyBcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpIHtcbmJsb2NrL2Jsay1tcS5jLTQ5NzgtXHRcdHNyY3VfYmFycmllcihzZXQtXHUwMDNlc3JjdSk7XG4tLVxuYmxvY2svYmxrLW1xLmM9NTI4MT1zdGF0aWMgaW50IF9faW5pdCBibGtfbXFfaW5pdCh2b2lkKVxuLS1cbmJsb2NrL2Jsay1tcS5jLTUyODktXHRcdFx0IF9fYmxrX21xX2NvbXBsZXRlX3JlcXVlc3RfcmVtb3RlLCBOVUxMKTtcbmJsb2NrL2Jsay1tcS5jOjUyOTA6XHRvcGVuX3NvZnRpcnEoQkxPQ0tfU09GVElSUSwgYmxrX2RvbmVfc29mdGlycSk7XG5ibG9jay9ibGstbXEuYy01MjkxLVxuYmxvY2svYmxrLW1xLmM6NTI5MjpcdGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQkxPQ0tfU09GVElSUV9ERUFELFxuYmxvY2svYmxrLW1xLmMtNTI5My1cdFx0XHRcdCAgXCYjMzQ7YmxvY2svc29mdGlycTpkZWFkXCYjMzQ7LCBOVUxMLFxuLS1cbmJsb2NrL2Jsay1tcS5oPTQ0MD1kbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG5ibG9jay9ibGstbXEuaDo0NDE6XHRpZiAoKHEpLVx1MDAzZXRhZ19zZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSB7XHRcdFxcXG5ibG9jay9ibGstbXEuaC00NDItXHRcdHN0cnVjdCBibGtfbXFfdGFnX3NldCAqX190YWdfc2V0ID0gKHEpLVx1MDAzZXRhZ19zZXQ7IFxcXG4tLVxuYmxvY2svYmxrLXBtLmgtMi1cbmJsb2NrL2Jsay1wbS5oOjM6I2lmbmRlZiBfQkxPQ0tfQkxLX1BNX0hfXG5ibG9jay9ibGstcG0uaDo0OiNkZWZpbmUgX0JMT0NLX0JMS19QTV9IX1xuYmxvY2svYmxrLXBtLmgtNS1cbi0tXG5ibG9jay9ibGstcG0uaD0zMD1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3BtX21hcmtfbGFzdF9idXN5KHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5ibG9jay9ibGstcG0uaC0zNC1cbmJsb2NrL2Jsay1wbS5oOjM1OiNlbmRpZiAvKiBfQkxPQ0tfQkxLX1BNX0hfICovXG4tLVxuYmxvY2svYmxrLmg9MjYxPXN0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW50ZWdyaXR5X2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGsuaC0yNjQtXG5ibG9jay9ibGsuaDoyNjU6XHRpZiAoYmlwIFx1MDAyNlx1MDAyNiAoYmlwLVx1MDAzZWJpcF9mbGFncyBcdTAwMjYgQklQX0JMT0NLX0lOVEVHUklUWSkpXG5ibG9jay9ibGsuaC0yNjYtXHRcdHJldHVybiBfX2Jpb19pbnRlZ3JpdHlfZW5kaW8oYmlvKTtcbi0tXG5ibG9jay9ibGsuaD03MTc9c3RhdGljIGlubGluZSB1NjQgYmxrX3RpbWVfZ2V0X25zKHZvaWQpXG4tLVxuYmxvY2svYmxrLmgtNzI5LVx0ICpcbmJsb2NrL2Jsay5oOjczMDpcdCAqIGN1cl9rdGltZSBjYW4gYmUgemVyb2VkIGJ5IHByZS1lbXB0aW9uIHRoZSBtb21lbnQgUEZfQkxPQ0tfVFMgaXMgc2V0LlxuYmxvY2svYmxrLmgtNzMxLVx0ICovXG4tLVxuYmxvY2svYmxrLmgtNzM1LVx0XHRXUklURV9PTkNFKHBsdWctXHUwMDNlY3VyX2t0aW1lLCBub3cpO1xuYmxvY2svYmxrLmg6NzM2Olx0XHQvKiBFbnN1cmUgUEZfQkxPQ0tfVFMgaXMgc2V0IGFmdGVyIGN1cl9rdGltZS4gKi9cbmJsb2NrL2Jsay5oLTczNy1cdFx0YmFycmllcigpO1xuYmxvY2svYmxrLmg6NzM4Olx0XHRjdXJyZW50LVx1MDAzZWZsYWdzIHw9IFBGX0JMT0NLX1RTO1xuYmxvY2svYmxrLmgtNzM5LVx0fVxuLS1cbmJsb2NrL2JzZy1saWIuYz0zNjI9c3RydWN0IHJlcXVlc3RfcXVldWUgKmJzZ19zZXR1cF9xdWV1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuYmxvY2svYnNnLWxpYi5jLTM4My1cdHNldC1cdTAwM2VjbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnNnX2pvYikgJiM0MzsgZGRfam9iX3NpemU7XG5ibG9jay9ic2ctbGliLmM6Mzg0Olx0c2V0LVx1MDAzZWZsYWdzID0gQkxLX01RX0ZfQkxPQ0tJTkc7XG5ibG9jay9ic2ctbGliLmMtMzg1LVx0aWYgKGJsa19tcV9hbGxvY190YWdfc2V0KHNldCkpXG4tLVxuYmxvY2svZ2VuaGQuYz0xNzg9c3RhdGljIHN0cnVjdCBibGtfbWFqb3JfbmFtZSB7XG4tLVxuYmxvY2svZ2VuaGQuYy0xODEtXHRjaGFyIG5hbWVbMTZdO1xuYmxvY2svZ2VuaGQuYzoxODI6I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcbmJsb2NrL2dlbmhkLmMtMTgzLVx0dm9pZCAoKnByb2JlKShkZXZfdCBkZXZ0KTtcbi0tXG5ibG9jay9nZW5oZC5jPTIzND1pbnQgX19yZWdpc3Rlcl9ibGtkZXYodW5zaWduZWQgaW50IG1ham9yLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmJsb2NrL2dlbmhkLmMtMjczLVx0cC1cdTAwM2VtYWpvciA9IG1ham9yO1xuYmxvY2svZ2VuaGQuYzoyNzQ6I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcbmJsb2NrL2dlbmhkLmMtMjc1LVx0cC1cdTAwM2Vwcm9iZSA9IHByb2JlO1xuLS1cbmJsb2NrL2dlbmhkLmM9NDI3PXN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2dlbmhkLmMtNDg0LVx0XHRcdGdvdG8gb3V0O1xuYmxvY2svZ2VuaGQuYzo0ODU6XHRcdGRpc2stXHUwMDNlbWFqb3IgPSBCTE9DS19FWFRfTUFKT1I7XG5ibG9jay9nZW5oZC5jLTQ4Ni1cdFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vciA9IHJldDtcbi0tXG5ibG9jay9nZW5oZC5jLTU3MS1vdXRfZnJlZV9leHRfbWlub3I6XG5ibG9jay9nZW5oZC5jOjU3MjpcdGlmIChkaXNrLVx1MDAzZW1ham9yID09IEJMT0NLX0VYVF9NQUpPUilcbmJsb2NrL2dlbmhkLmMtNTczLVx0XHRibGtfZnJlZV9leHRfbWlub3IoZGlzay1cdTAwM2VmaXJzdF9taW5vcik7XG4tLVxuYmxvY2svZ2VuaGQuYz04Njc9c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtODc4LVxuYmxvY2svZ2VuaGQuYzo4Nzk6I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcbmJsb2NrL2dlbmhkLmMtODgwLXN0YXRpYyBib29sIGJsa19wcm9iZV9kZXYoZGV2X3QgZGV2dClcbi0tXG5ibG9jay9nZW5oZC5jPTg5Nz12b2lkIGJsa19yZXF1ZXN0X21vZHVsZShkZXZfdCBkZXZ0KVxuLS1cbmJsb2NrL2dlbmhkLmMtOTEwLX1cbmJsb2NrL2dlbmhkLmM6OTExOiNlbmRpZiAvKiBDT05GSUdfQkxPQ0tfTEVHQUNZX0FVVE9MT0FEICovXG5ibG9jay9nZW5oZC5jLTkxMi1cbi0tXG5ibG9jay9nZW5oZC5jPTk5OT1zdGF0aWMgaW50IF9faW5pdCBnZW5oZF9kZXZpY2VfaW5pdCh2b2lkKVxuLS1cbmJsb2NrL2dlbmhkLmMtMTAwNy1cbmJsb2NrL2dlbmhkLmM6MTAwODpcdHJlZ2lzdGVyX2Jsa2RldihCTE9DS19FWFRfTUFKT1IsIFwmIzM0O2Jsa2V4dFwmIzM0Oyk7XG5ibG9jay9nZW5oZC5jLTEwMDktXG4tLVxuYmxvY2svZ2VuaGQuYz0xNDU0PXN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsXG4tLVxuYmxvY2svZ2VuaGQuYy0xNDkzLVx0bG9ja2RlcF9pbml0X21hcChcdTAwMjZkaXNrLVx1MDAzZWxvY2tkZXBfbWFwLCBcJiMzNDsoYmlvIGNvbXBsZXRpb24pXCYjMzQ7LCBsa2NsYXNzLCAwKTtcbmJsb2NrL2dlbmhkLmM6MTQ5NDojaWZkZWYgQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEXG5ibG9jay9nZW5oZC5jLTE0OTUtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkaXNrLVx1MDAzZXNsYXZlX2JkZXZzKTtcbi0tXG5ibG9jay9pb2N0bC5jPTk4MT1pbnQgYmxrZGV2X3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5ibG9jay9pb2N0bC5jLTk5OC1cdGJpYy1cdTAwM2VyZXMgPSAwO1xuYmxvY2svaW9jdGwuYzo5OTk6XHRiaWMtXHUwMDNlbm93YWl0ID0gaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XG5ibG9jay9pb2N0bC5jLTEwMDAtXG5ibG9jay9pb2N0bC5jLTEwMDEtXHRzd2l0Y2ggKGNtZF9vcCkge1xuYmxvY2svaW9jdGwuYzoxMDAyOlx0Y2FzZSBCTE9DS19VUklOR19DTURfRElTQ0FSRDpcbmJsb2NrL2lvY3RsLmMtMTAwMy1cdFx0cmV0dXJuIGJsa2Rldl9jbWRfZGlzY2FyZChjbWQpO1xuYmxvY2svaW9jdGwuYzoxMDA0Olx0Y2FzZSBCTE9DS19VUklOR19DTURfWk9ORV9SRVNFVF9BTEw6XG5ibG9jay9pb2N0bC5jLTEwMDUtXHRcdHJldHVybiBibGtkZXZfY21kX3pvbmVfcmVzZXRfYWxsKGNtZCk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZS01LVxuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19CTE9DSykgJiM0Mzs9IGNvcmUub1xuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZS03LW9iai0kKENPTkZJR19BQ09STl9QQVJUSVRJT04pICYjNDM7PSBhY29ybi5vXG4tLVxuYmxvY2svcGFydGl0aW9ucy9hY29ybi5jPTE1Nj1pbnQgYWRmc3BhcnRfY2hlY2tfQ1VNQU5BKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9hY29ybi5jLTIwNC1cdFx0Zmlyc3Rfc2VjdG9yICYjNDM7PSBucl9zZWN0cztcbmJsb2NrL3BhcnRpdGlvbnMvYWNvcm4uYzoyMDU6XHRcdHN0YXJ0X2JsayAmIzQzOz0gbnJfc2VjdHMgXHUwMDNlXHUwMDNlIChCTE9DS19TSVpFX0JJVFMgLSA5KTtcbmJsb2NrL3BhcnRpdGlvbnMvYWNvcm4uYy0yMDYtXHRcdG5yX3NlY3RzID0gMDsgLyogaG1tIC0gc2hvdWxkIGJlIHBhcnRpdGlvbiBzaXplICovXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9NDIzPXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICphZGRfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBpbnQgcGFydG5vLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTQ4MS1cdFx0XHRnb3RvIG91dF9wdXQ7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo0ODI6XHRcdGRldnQgPSBNS0RFVihCTE9DS19FWFRfTUFKT1IsIGVycik7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy00ODMtXHR9XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz02Nz1zdGF0aWMgYm9vbCBsZG1fcGFyc2VfcHJpdmhlYWQoY29uc3QgdTggKmRhdGEsIHN0cnVjdCBwcml2aGVhZCAqcGgpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTItLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExMzogKiBsZG1fcGFyc2VfdG9jYmxvY2sgLSBSZWFkIHRoZSBMRE0gRGF0YWJhc2UgVE9DQkxPQ0sgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExNDogKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTUtICogQHRvYzogICBJbi1tZW1vcnkgdG9jIHN0cnVjdHVyZSBpbiB3aGljaCB0byByZXR1cm4gcGFyc2VkIGluZm9ybWF0aW9uXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExNi0gKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTc6ICogVGhpcyBwYXJzZXMgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyAodGFibGUgb2YgY29udGVudHMpIHN0cnVjdHVyZSBzdXBwbGllZFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTgtICogaW4gQGRhdGEgYW5kIHNldHMgdXAgdGhlIGluLW1lbW9yeSB0b2NibG9jayBzdHJ1Y3R1cmUgQHRvYyB3aXRoIHRoZSBvYnRhaW5lZFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTIyLSAqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEyMzogKiBSZXR1cm46ICAmIzM5O3RydWUmIzM5OyAgIEB0b2MgY29udGFpbnMgdGhlIFRPQ0JMT0NLIGRhdGFcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTI0LSAqICAgICAgICAgICYjMzk7ZmFsc2UmIzM5OyAgQHRvYyBjb250ZW50cyBhcmUgdW5kZWZpbmVkXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0xMjY9c3RhdGljIGJvb2wgbGRtX3BhcnNlX3RvY2Jsb2NrIChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHRvY2Jsb2NrICp0b2MpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMjktXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEzMDpcdGlmIChNQUdJQ19UT0NCTE9DSyAhPSBnZXRfdW5hbGlnbmVkX2JlNjQoZGF0YSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTMxOlx0XHRsZG1fY3JpdCAoXCYjMzQ7Q2Fubm90IGZpbmQgVE9DQkxPQ0ssIGRhdGFiYXNlIG1heSBiZSBjb3JydXB0LlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEzMi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTM5LVx0XHRcdHNpemVvZiAodG9jLVx1MDAzZWJpdG1hcDFfbmFtZSkpICE9IDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTQwOlx0XHRsZG1fY3JpdCAoXCYjMzQ7VE9DQkxPQ0smIzM5O3MgZmlyc3QgYml0bWFwIGlzICYjMzk7JXMmIzM5Oywgc2hvdWxkIGJlICYjMzk7JXMmIzM5Oy5cJiMzNDssXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE0MS1cdFx0XHRcdFRPQ19CSVRNQVAxLCB0b2MtXHUwMDNlYml0bWFwMV9uYW1lKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE0OC1cdFx0XHRzaXplb2YgKHRvYy1cdTAwM2ViaXRtYXAyX25hbWUpKSAhPSAwKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE0OTpcdFx0bGRtX2NyaXQgKFwmIzM0O1RPQ0JMT0NLJiMzOTtzIHNlY29uZCBiaXRtYXAgaXMgJiMzOTslcyYjMzk7LCBzaG91bGQgYmUgJiMzOTslcyYjMzk7LlwmIzM0OyxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTUwLVx0XHRcdFx0VE9DX0JJVE1BUDIsIHRvYy1cdTAwM2ViaXRtYXAyX25hbWUpO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTUyLVx0fVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNTM6XHRsZG1fZGVidWcgKFwmIzM0O1BhcnNlZCBUT0NCTE9DSyBzdWNjZXNzZnVsbHkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTU0LVx0cmV0dXJuIHRydWU7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0yNjM9c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3ByaXZoZWFkcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzQ3LSAqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM0ODogKiBSZXR1cm46ICAmIzM5O3RydWUmIzM5OyAgIEB0b2MxIGNvbnRhaW5zIHZhbGlkYXRlZCBUT0NCTE9DSyBpbmZvXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM0OS0gKiAgICAgICAgICAmIzM5O2ZhbHNlJiMzOTsgIEB0b2MxIGNvbnRlbnRzIGFyZSB1bmRlZmluZWRcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTM1MT1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdG9jYmxvY2tzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNzItXHQvKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzM6XHQgKiBUcnkgdG8gcmVhZCBhbmQgcGFyc2UgYWxsIGZvdXIgVE9DQkxPQ0tzLlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNzQtXHQgKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzU6XHQgKiBXaW5kb3dzIFZpc3RhIExETSB2Mi4xMiBkb2VzIG5vdCBhbHdheXMgaGF2ZSBhbGwgZm91ciBUT0NCTE9DS3Mgc29cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzc2Olx0ICogc2tpcCBhbnkgdGhhdCBmYWlsIGFzIGxvbmcgYXMgd2UgZ2V0IGF0IGxlYXN0IG9uZSB2YWxpZCBUT0NCTE9DSy5cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzc3LVx0ICovXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODAtXHRcdGlmICghZGF0YSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozODE6XHRcdFx0bGRtX2Vycm9yKFwmIzM0O0Rpc2sgcmVhZCBmYWlsZWQgZm9yIFRPQ0JMT0NLICVkLlwmIzM0OywgaSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4Mi1cdFx0XHRjb250aW51ZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4OC1cdGlmICghbnJfdGJzKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM4OTpcdFx0bGRtX2NyaXQoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgYSB2YWxpZCBUT0NCTE9DSy5cJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zOTAtXHRcdGdvdG8gZXJyO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zOTEtXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM5MjpcdC8qIFJhbmdlIGNoZWNrIHRoZSBUT0NCTE9DSyBhZ2FpbnN0IGEgcHJpdmhlYWQuICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM5My1cdGlmICgoKHRiWzBdLVx1MDAzZWJpdG1hcDFfc3RhcnQgJiM0MzsgdGJbMF0tXHUwMDNlYml0bWFwMV9zaXplKSBcdTAwM2UgcGgtXHUwMDNlY29uZmlnX3NpemUpIHx8XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zOTgtXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM5OTpcdC8qIENvbXBhcmUgYWxsIGxvYWRlZCBUT0NCTE9DS3MuICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMC1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yX3RiczsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDAxLVx0XHRpZiAoIWxkbV9jb21wYXJlX3RvY2Jsb2Nrcyh0YlswXSwgdGJbaV0pKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQwMjpcdFx0XHRsZG1fY3JpdChcJiMzNDtUT0NCTE9DS3MgMCBhbmQgJWQgZG8gbm90IG1hdGNoLlwmIzM0OywgaSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMy1cdFx0XHRnb3RvIGVycjtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwNS1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDA2Olx0bGRtX2RlYnVnKFwmIzM0O1ZhbGlkYXRlZCAlZCBUT0NCTE9DS3Mgc3VjY2Vzc2Z1bGx5LlwmIzM0OywgbnJfdGJzKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDA3LVx0cmVzdWx0ID0gdHJ1ZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTQyNT1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdm1kYihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDYxLVx0aWYgKCh2bS1cdTAwM2V2YmxrX3NpemUgKiB2bS1cdTAwM2VsYXN0X3ZibGtfc2VxKSBcdTAwM2UgKHRvYy1cdTAwM2ViaXRtYXAxX3NpemUgXHUwMDNjXHUwMDNjIDkpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQ2MjpcdFx0bGRtX2NyaXQgKFwmIzM0O1ZNREIgZXhjZWVkcyBhbGxvd2VkIHNpemUgc3BlY2lmaWVkIGJ5IFRPQ0JMT0NLLiAgXCYjMzQ7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ2My1cdFx0XHRcdFwmIzM0O0RhdGFiYXNlIGlzIGNvcnJ1cHQuICBBYm9ydGluZy5cJiMzNDspO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmg9MjE9c3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmgtMjYtI2RlZmluZSBNQUdJQ19QUklWSEVBRFx0MHg1MDUyNDk1NjQ4NDU0MTQ0VUxMXHQvKiBQUklWSEVBRCAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uaDoyNzojZGVmaW5lIE1BR0lDX1RPQ0JMT0NLXHQweDU0NEY0MzQyNEM0RjQzNEJVTExcdC8qIFRPQ0JMT0NLICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5oLTI4LVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmgtODMtI2RlZmluZSBUT0NfQklUTUFQMVx0XHRcJiMzNDtjb25maWdcJiMzNDtcdC8qIE5hbWVzIG9mIHRoZSB0d28gZGVmaW5lZCAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uaDo4NDojZGVmaW5lIFRPQ19CSVRNQVAyXHRcdFwmIzM0O2xvZ1wmIzM0O1x0XHQvKiBiaXRtYXBzIGluIHRoZSBUT0NCTE9DSy4gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmgtODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MDgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29yZSBibG9jayBkZXZpY2UgY29tcG9uZW50cyBhcmUgYmVpbmcgY29tcGlsZWQuIE15IGZpcnN0IHN0b3AgaXMgZ29pbmcgdG8gYmUgYGJsb2NrL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIHJlY2lwZSBmb3IgYnVpbGRpbmcgYGJkZXYub2AsIGBibGstY29yZS5vYCwgYW5kIGFueXRoaW5nIHdpdGhpbiB0aGUgYHBhcnRpdGlvbnMvYCBkaXJlY3RvcnkuIFRoYXQgTWFrZWZpbGUgd2lsbCBnaXZlIG1lIHRoZSBsb3ctZG93biBvbiB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxlciBmbGFncywgYW5kIHRoZSBvdmVyYWxsIGJ1aWxkIHByb2Nlc3MuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmRhbWVudGFsIHBpZWNlcyBvZiBteSBibG9jayBsYXllciBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmoteXxjb3JlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9Nj1DT05URVhUX0FOQUxZU0lTIDo9IHlcbmJsb2NrL01ha2VmaWxlLTctXG5ibG9jay9NYWtlZmlsZTo4Om9iai15XHRcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXG5ibG9jay9NYWtlZmlsZS05LVx0XHRcdGJsay1mbHVzaC5vIGJsay1zZXR0aW5ncy5vIGJsay1pb2MubyBibGstbWFwLm8gXFxcbi0tXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTUtXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JMT0NLKSAmIzQzOz0gY29yZS5vXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX0FDT1JOX1BBUlRJVElPTikgJiM0Mzs9IGFjb3JuLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkzNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX0JMT0NLYCBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZW4gYEJMT0NLYCBzZWVtcyB0byBiZSB0aGUgZGVmYXVsdCwgc3RhbmRhcmQgbWVudWNvbmZpZyBvcHRpb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSBhcmUgYW55IG1vcmUgZmluZS1ncmFpbmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdyaXRlIHN0cmVhbXMgb3IgYW55dGhpbmcgc2ltaWxhciB0aGF0IEkgbWlnaHQgYmUgYWJsZSB0byB0d2Vhay4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBJIGNhbiBjdXN0b21pemUgd3JpdGUgYmVoYXZpb3IuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd3JpdGUgc3RyZWFtcy4gVGltZSB0byBncmVwIGZvciBhbnl0aGluZyBjb250YWluaW5nICYjMzQ7d3JpdGVfc3RyZWFtcyYjMzQ7IGluIHRoZSBgYmxvY2svYCBkaXJlY3RvcnkgYW5kIHVuZGVyIGBpbmNsdWRlL2xpbnV4L2AuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgbWUgdG8gc29tZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBvciByZWxhdGVkIGNvZGUgdGhhdCBJIGNhbiBleGFtaW5lIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3cml0ZV9zdHJlYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jb3JlLmM9NjIyPXN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNvcmUuYy02MzQtXHRpZiAoYmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSBcdTAwMjZcdTAwMjYgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFKSB7XG5ibG9jay9ibGstY29yZS5jOjYzNTpcdFx0aWYgKHVubGlrZWx5KGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gXHUwMDNlIHAtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcykpXG5ibG9jay9ibGstY29yZS5jLTYzNi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5ibG9jay9ibGstc3lzZnMuYz0yMjI9UVVFVUVfU1lTRlNfTElNSVRfU0hPVyhtYXhfc2VnbWVudF9zaXplKVxuYmxvY2svYmxrLXN5c2ZzLmM6MjIzOlFVRVVFX1NZU0ZTX0xJTUlUX1NIT1cobWF4X3dyaXRlX3N0cmVhbXMpXG5ibG9jay9ibGstc3lzZnMuYy0yMjQtUVVFVUVfU1lTRlNfTElNSVRfU0hPVyh3cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHkpXG4tLVxuYmxvY2svYmxrLXN5c2ZzLmM9NjE4PVFVRVVFX0xJTV9ST19FTlRSWShxdWV1ZV9tYXhfc2VnbWVudF9zaXplLCBcJiMzNDttYXhfc2VnbWVudF9zaXplXCYjMzQ7KTtcbmJsb2NrL2Jsay1zeXNmcy5jOjYxOTpRVUVVRV9MSU1fUk9fRU5UUlkocXVldWVfbWF4X3dyaXRlX3N0cmVhbXMsIFwmIzM0O21heF93cml0ZV9zdHJlYW1zXCYjMzQ7KTtcbmJsb2NrL2Jsay1zeXNmcy5jLTYyMC1RVUVVRV9MSU1fUk9fRU5UUlkocXVldWVfd3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5LCBcJiMzNDt3cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHlcJiMzNDspO1xuLS1cbmJsb2NrL2Jsay1zeXNmcy5jPTczNT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3QgcXVldWVfYXR0cnNbXSA9IHtcbi0tXG5ibG9jay9ibGstc3lzZnMuYy03NDQtXHRcdTAwMjZxdWV1ZV9tYXhfc2VnbWVudF9zaXplX2VudHJ5LmF0dHIsXG5ibG9jay9ibGstc3lzZnMuYzo3NDU6XHRcdTAwMjZxdWV1ZV9tYXhfd3JpdGVfc3RyZWFtc19lbnRyeS5hdHRyLFxuYmxvY2svYmxrLXN5c2ZzLmMtNzQ2LVx0XHUwMDI2cXVldWVfd3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5X2VudHJ5LmF0dHIsXG4tLVxuYmxvY2svZm9wcy5jPTM5ND1zdGF0aWMgc3NpemVfdCBibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmJsb2NrL2ZvcHMuYy00MDUtXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUpIHtcbmJsb2NrL2ZvcHMuYzo0MDY6XHRcdHUxNiBtYXhfd3JpdGVfc3RyZWFtcyA9IGJkZXZfbWF4X3dyaXRlX3N0cmVhbXMoYmRldik7XG5ibG9jay9mb3BzLmMtNDA3LVxuYmxvY2svZm9wcy5jLTQwOC1cdFx0aWYgKGlvY2ItXHUwMDNla2lfd3JpdGVfc3RyZWFtKSB7XG5ibG9jay9mb3BzLmM6NDA5Olx0XHRcdGlmIChpb2NiLVx1MDAzZWtpX3dyaXRlX3N0cmVhbSBcdTAwM2UgbWF4X3dyaXRlX3N0cmVhbXMpXG5ibG9jay9mb3BzLmMtNDEwLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5ibG9jay9mb3BzLmM6NDExOlx0XHR9IGVsc2UgaWYgKG1heF93cml0ZV9zdHJlYW1zKSB7XG5ibG9jay9mb3BzLmMtNDEyLVx0XHRcdGVudW0gcndfaGludCB3cml0ZV9oaW50ID1cbi0tXG5ibG9jay9mb3BzLmMtNDE5LVx0XHRcdCAqL1xuYmxvY2svZm9wcy5jOjQyMDpcdFx0XHRpZiAod3JpdGVfaGludCBcdTAwM2M9IG1heF93cml0ZV9zdHJlYW1zKVxuYmxvY2svZm9wcy5jLTQyMS1cdFx0XHRcdGlvY2ItXHUwMDNla2lfd3JpdGVfc3RyZWFtID0gd3JpdGVfaGludDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0yMDI9c3RhdGljIHNzaXplX3QgcGFydF9kaXNjYXJkX2FsaWdubWVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMDctXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMDg6c3RhdGljIHNzaXplX3QgcGFydF93cml0ZV9zdHJlYW1zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjA5LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMTAte1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjExOlx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0OywgZGV2X3RvX2JkZXYoZGV2KS1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIxMi19XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjE4LSAqL1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjE5OnN0YXRpYyB2b2lkIHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydClcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIyMC17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI1LVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjI2Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFydC1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zOyBpJiM0MzsmIzQzOylcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIyNy1cdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjI4Olx0XHRcdCAgICBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI5LX1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzMC1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIzMTpzdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMzIte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzNC1cdHVuc2lnbmVkIGludCBtYXggPSBtaW5fdCh1bnNpZ25lZCBpbnQsXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMzU6XHRcdFx0XHQgYmRldl9saW1pdHMocGFydCktXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXMsIFU4X01BWCk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMzYtXHR1OCAqbWFwID0gTlVMTDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNTctXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyNTg6XHRjdXIgPSBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNTktXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjY5LVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjcwOlx0bnJfZnJlZSA9IG1heCAtIGJpdG1hcF93ZWlnaHQoZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggJiM0MzsgMSk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNzEtXHRpZiAobnIgXHUwMDNlIGN1ciBcdTAwMjZcdTAwMjYgbnIgLSBjdXIgXHUwMDNlIG5yX2ZyZWUpIHtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODUtXHRcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjg2Olx0XHRcdFx0ICAgIGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODctXHR9IGVsc2Uge1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjg4LVx0XHRmb3IgKGkgPSBjdXI7IGkgXHUwMDNjIG5yOyBpJiM0MzsmIzQzOykge1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjg5Olx0XHRcdGlkID0gZmluZF9uZXh0X3plcm9fYml0KGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI5MC1cdFx0XHRcdFx0XHRtYXggJiM0MzsgMSwgMSk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyOTE6XHRcdFx0X19zZXRfYml0KGlkLCBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjkyLVx0XHRcdG1hcFtpXSA9IGlkO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI5Ni1cdHN3YXAocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwLCBtYXApO1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjk3Olx0cGFydC1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zID0gbnI7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTgtXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMzA1LVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MzA2OnN0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0zMDctXHRcdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTMyNS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjMyNjpcdHJldCA9IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoZGV2X3RvX2JkZXYoZGV2KSwgbnIpO1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMzI3LVx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MzM5PXN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjM0MDpzdGF0aWMgREVWSUNFX0FUVFIod3JpdGVfc3RyZWFtcywgMDY0NCwgcGFydF93cml0ZV9zdHJlYW1zX3Nob3csXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzozNDE6XHRcdCAgIHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZSk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0zNDItI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTM0Nz1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGFydF9hdHRyc1tdID0ge1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTM1NS1cdFx1MDAyNmRldl9hdHRyX2luZmxpZ2h0LmF0dHIsXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzozNTY6XHRcdTAwMjZkZXZfYXR0cl93cml0ZV9zdHJlYW1zLmF0dHIsXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0zNTctI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTQwMD12b2lkIGRyb3BfcGFydGl0aW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNDAzLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6NDA0Olx0cGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTQwNS1cdHhhX2VyYXNlKFx1MDAyNnBhcnQtXHUwMDNlYmRfZGlzay1cdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzExCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBXcml0ZSBTdHJlYW0gU3VwcG9ydCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IGV4aXN0aW5nIHN1cHBvcnQgZm9yIHdyaXRlIHN0cmVhbXMgaW4gdGhlIGJsb2NrIGRldmljZSBsYXllciwgb3Igc3BlY2lmaWNhbGx5LCBpZiBudWxsX2JsayBpcyBwbGF5aW5nIGJhbGwuIFRoZSBmaXJzdCBzdGVwIGlzIHByZXR0eSBjbGVhcjogSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIGh1bnQgZG93biBpbnN0YW5jZXMgb2YgYG1heF93cml0ZV9zdHJlYW1zYCBpbiB0aGUga2VybmVsIHNvdXJjZSwgZm9jdXNpbmcgb24gdGhlIGJsb2NrIGRldmljZSBkcml2ZXJzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBkcml2ZXJzL2Jsb2NrL2AsIG9idmlvdXNseSwgYnV0IEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNlYXJjaCBpZiBuZWVkZWQuIEl0JiMzOTtzIGEga2V5IGluZGljYXRvciBmb3IgdGhpcyBmZWF0dXJlLCBzbyBmaW5kaW5nIGl0IHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIGNsdWUgYXMgdG8gd2hpY2ggZGV2aWNlcyBhcmUgY2FwYWJsZSBvZiBzdXBwb3J0aW5nIHRoZSBmZWF0dXJlLiBUaGlzIGZlZWxzIGxpa2UgdGhlIHJpZ2h0IGFuZ2xlIHRvIHN0YXJ0IGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heF93cml0ZV9zdHJlYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzOTg9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ5Mi1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDkzOlx0bGltLm1heF93cml0ZV9zdHJlYW1zID0gbnMtXHUwMDNlaGVhZC1cdTAwM2Vucl9wbGlkcztcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDk0LVx0bGltLndyaXRlX3N0cmVhbV9ncmFudWxhcml0eSA9IG5zLVx1MDAzZWhlYWQtXHUwMDNld3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5O1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTM5PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI2MTAtXHRcdFx0bnZtZV9pbml0X2ludGVncml0eShucy1cdTAwM2VoZWFkLCBcdTAwMjZsaW0sIGluZm8pO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI2MTE6XHRcdGxpbS5tYXhfd3JpdGVfc3RyZWFtcyA9IG5zX2xpbS1cdTAwM2VtYXhfd3JpdGVfc3RyZWFtcztcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNjEyLVx0XHRsaW0ud3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5ID0gbnNfbGltLVx1MDAzZXdyaXRlX3N0cmVhbV9ncmFudWxhcml0eTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQgYW5kIHVzaW5nIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQmxvY2sgRHJpdmVyIEludGVyYWN0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCBiZXlvbmQgdGhlIGltbWVkaWF0ZSBpc3N1ZSwgd2UgbmVlZCB0byB0YWtlIGEgd2lkZXIgbG9vayBhdCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gcnVuIGEgYGdyZXBgIGZvciBgbnVsbF9ibGtgIGFuZCBhbnkgb3RoZXIgYmxvY2sgZHJpdmVycyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBJIHdhbnQgdG8gYmUgdGhvcm91Z2ggYW5kIGNvbnNpZGVyIGFsbCBwb3NzaWJpbGl0aWVzLiBJdCYjMzk7cyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uLCBlc3BlY2lhbGx5IHdoZW4gdHJvdWJsZXNob290aW5nLCBzbyBsZXQmIzM5O3MgZ2V0IGEgY29tcHJlaGVuc2l2ZSBsaXN0IHRvIHJ1bGUgb3V0IGxlc3Mgb2J2aW91cyBpc3N1ZXMuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heF93cml0ZV9zdHJlYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zeXNmcy5jPTIyMj1RVUVVRV9TWVNGU19MSU1JVF9TSE9XKG1heF9zZWdtZW50X3NpemUpXG5ibG9jay9ibGstc3lzZnMuYzoyMjM6UVVFVUVfU1lTRlNfTElNSVRfU0hPVyhtYXhfd3JpdGVfc3RyZWFtcylcbmJsb2NrL2Jsay1zeXNmcy5jLTIyNC1RVUVVRV9TWVNGU19MSU1JVF9TSE9XKHdyaXRlX3N0cmVhbV9ncmFudWxhcml0eSlcbi0tXG5ibG9jay9ibGstc3lzZnMuYz02MTg9UVVFVUVfTElNX1JPX0VOVFJZKHF1ZXVlX21heF9zZWdtZW50X3NpemUsIFwmIzM0O21heF9zZWdtZW50X3NpemVcJiMzNDspO1xuYmxvY2svYmxrLXN5c2ZzLmM6NjE5OlFVRVVFX0xJTV9ST19FTlRSWShxdWV1ZV9tYXhfd3JpdGVfc3RyZWFtcywgXCYjMzQ7bWF4X3dyaXRlX3N0cmVhbXNcJiMzNDspO1xuYmxvY2svYmxrLXN5c2ZzLmMtNjIwLVFVRVVFX0xJTV9ST19FTlRSWShxdWV1ZV93cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHksIFwmIzM0O3dyaXRlX3N0cmVhbV9ncmFudWxhcml0eVwmIzM0Oyk7XG4tLVxuYmxvY2svYmxrLXN5c2ZzLmM9NzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpjb25zdCBxdWV1ZV9hdHRyc1tdID0ge1xuLS1cbmJsb2NrL2Jsay1zeXNmcy5jLTc0NC1cdFx1MDAyNnF1ZXVlX21heF9zZWdtZW50X3NpemVfZW50cnkuYXR0cixcbmJsb2NrL2Jsay1zeXNmcy5jOjc0NTpcdFx1MDAyNnF1ZXVlX21heF93cml0ZV9zdHJlYW1zX2VudHJ5LmF0dHIsXG5ibG9jay9ibGstc3lzZnMuYy03NDYtXHRcdTAwMjZxdWV1ZV93cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHlfZW50cnkuYXR0cixcbi0tXG5ibG9jay9mb3BzLmM9Mzk0PXN0YXRpYyBzc2l6ZV90IGJsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuYmxvY2svZm9wcy5jLTQwNS1cdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSkge1xuYmxvY2svZm9wcy5jOjQwNjpcdFx0dTE2IG1heF93cml0ZV9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcbmJsb2NrL2ZvcHMuYy00MDctXG5ibG9jay9mb3BzLmMtNDA4LVx0XHRpZiAoaW9jYi1cdTAwM2VraV93cml0ZV9zdHJlYW0pIHtcbmJsb2NrL2ZvcHMuYzo0MDk6XHRcdFx0aWYgKGlvY2ItXHUwMDNla2lfd3JpdGVfc3RyZWFtIFx1MDAzZSBtYXhfd3JpdGVfc3RyZWFtcylcbmJsb2NrL2ZvcHMuYy00MTAtXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmJsb2NrL2ZvcHMuYzo0MTE6XHRcdH0gZWxzZSBpZiAobWF4X3dyaXRlX3N0cmVhbXMpIHtcbmJsb2NrL2ZvcHMuYy00MTItXHRcdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQgPVxuLS1cbmJsb2NrL2ZvcHMuYy00MTktXHRcdFx0ICovXG5ibG9jay9mb3BzLmM6NDIwOlx0XHRcdGlmICh3cml0ZV9oaW50IFx1MDAzYz0gbWF4X3dyaXRlX3N0cmVhbXMpXG5ibG9jay9mb3BzLmMtNDIxLVx0XHRcdFx0aW9jYi1cdTAwM2VraV93cml0ZV9zdHJlYW0gPSB3cml0ZV9oaW50O1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTIzMT1zdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjM0LVx0dW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIzNTpcdFx0XHRcdCBiZGV2X2xpbWl0cyhwYXJ0KS1cdTAwM2VtYXhfd3JpdGVfc3RyZWFtcywgVThfTUFYKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzNi1cdHU4ICptYXAgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIENvZGUgSW5zcGVjdGlvbiBTdHJhdGVneSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGVyZSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgd3JpdGUgc3RyZWFtIG1hbmFnZW1lbnQgcmVzaWRlLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMgSSBzZWUgbGlzdGVkOiBgcGFydF93cml0ZV9zdHJlYW1zX3N0b3JlYCwgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgLCBgcGFydF9wdXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIGBibGtfcGFydGl0aW9uX3JlbWFwYCwgYW5kIGBkcm9wX3BhcnRpdGlvbmAuIEkmIzM5O2xsIHdhbnQgdG8gdHJhY2UgdGhlaXIgY2FsbHMsIGhvdyB0aGV5JiMzOTtyZSBzdHJ1Y3R1cmVkLCBhbmQgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbnMgd2VyZSBtYWRlLiBUaGUgaW5jbHVzaW9uIG9mIGBiZGV2X2ZyZWVfaW5vZGVgIGFsc28gcGlxdWVzIG15IGludGVyZXN0LCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGFzc3VtcHRpb25zIGhlcmUuIEFyZSB3ZSB3b3JraW5nIHdpdGggYSBnZW5lcmljIHNldHVwLCBvciBhcmUgd2UgdGFyZ2V0aW5nIHNwZWNpZmljIGRldmljZSB0eXBlcyBsaWtlIGBCTEtfREVWX05VTExfQkxLYCwgYE5WTUVfQ09SRWAsIGBCTEtfREVWX0xPT1BgLCBvciBgQkxLX0RFVl9SQU1gPyBUaGUgcHJlc2VuY2Ugb2YgYEJMT0NLYCBjb25maWcgc3VnZ2VzdHMgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBjb3JlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLCBzbyB0aGUgc2NvcGUgbWF5IGJlIG1vcmUgdGFyZ2V0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcy4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgcGFydGl0aW9uaW5nIG9yIHRoZSBibG9jayBzeXNmcyBpbiBnZW5lcmFsLiBTbyBgYmxvY2svS2NvbmZpZ2Agd2lsbCBuZWVkIGEgY2xvc2UgbG9vay4gVGhpcyBhcHByb2FjaCBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEJsb2NrIGxheWVyIGNvcmUgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51Y29uZmlnIEJMT0NLXG4gICA2Olx0ICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBibG9jayBsYXllclwmIzM0OyBpZiBFWFBFUlRcbiAgIDc6XHQgICAgICAgZGVmYXVsdCB5XG4gICA4Olx0ICAgICAgIHNlbGVjdCBGU19JT01BUFxuICAgOTpcdCAgICAgICBzZWxlY3QgU0JJVE1BUFxuICAxMDpcdCAgICAgICBoZWxwXG4gIDExOlx0XHQgUHJvdmlkZSBibG9jayBsYXllciBzdXBwb3J0IGZvciB0aGUga2VybmVsLlxuICAxMjpcdFxuICAxMzpcdFx0IERpc2FibGUgdGhpcyBvcHRpb24gdG8gcmVtb3ZlIHRoZSBibG9jayBsYXllciBzdXBwb3J0IGZyb20gdGhlXG4gIDE0Olx0XHQga2VybmVsLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGVtYmVkZGVkIGRldmljZXMuXG4gIDE1Olx0XG4gIDE2Olx0XHQgSWYgdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQ6XG4gIDE3Olx0XG4gIDE4Olx0XHQgICAtIGJsb2NrIGRldmljZSBmaWxlcyB3aWxsIGJlY29tZSB1bnVzYWJsZVxuICAxOTpcdFx0ICAgLSBzb21lIGZpbGVzeXN0ZW1zIChzdWNoIGFzIGV4dDMpIHdpbGwgYmVjb21lIHVuYXZhaWxhYmxlLlxuICAyMDpcdFxuICAyMTpcdFx0IEFsc28sIFNDU0kgY2hhcmFjdGVyIGRldmljZXMgYW5kIFVTQiBzdG9yYWdlIHdpbGwgYmUgZGlzYWJsZWQgc2luY2VcbiAgMjI6XHRcdCB0aGV5IG1ha2UgdXNlIG9mIHZhcmlvdXMgYmxvY2sgbGF5ZXIgZGVmaW5pdGlvbnMgYW5kIGZhY2lsaXRpZXMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgU2F5IFkgaGVyZSB1bmxlc3MgeW91IGtub3cgeW91IHJlYWxseSBkb24mIzM5O3Qgd2FudCB0byBtb3VudCBkaXNrcyBhbmRcbiAgMjU6XHRcdCBzdWNobGlrZS5cbiAgMjY6XHRcbiAgMjc6XHRpZiBCTE9DS1xuICAyODpcdFxuICAyOTpcdGNvbmZpZyBCTE9DS19MRUdBQ1lfQVVUT0xPQURcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcJiMzNDtcbiAgMzE6XHRcdGRlZmF1bHQgeVxuICAzMjpcdFx0aGVscFxuICAzMzpcdFx0ICBFbmFibGUgbG9hZGluZyBtb2R1bGVzIGFuZCBjcmVhdGluZyBibG9jayBkZXZpY2UgaW5zdGFuY2VzIGJhc2VkIG9uXG4gIDM0Olx0XHQgIGFjY2Vzc2VzIHRocm91Z2ggdGhlaXIgZGV2aWNlIHNwZWNpYWwgZmlsZS4gIFRoaXMgaXMgYSBoaXN0b3JpYyBMaW51eFxuICAzNTpcdFx0ICBmZWF0dXJlIGFuZCBtYWtlcyBubyBzZW5zZSBpbiBhIHVkZXYgd29ybGQgd2hlcmUgZGV2aWNlIGZpbGVzIGFyZVxuICAzNjpcdFx0ICBjcmVhdGVkIG9uIGRlbWFuZCwgYnV0IHNjcmlwdHMgdGhhdCBtYW51YWxseSBjcmVhdGUgZGV2aWNlIG5vZGVzIGFuZFxuICAzNzpcdFx0ICB0aGVuIGNhbGwgbG9zZXR1cCBtaWdodCByZWx5IG9uIHRoaXMgYmVoYXZpb3IuXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4gIDQwOlx0XHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODE3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBEZXZpY2UgUGFydGl0aW9uaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBgQ09ORklHX0JMT0NLYCBpcyBvbiBieSBkZWZhdWx0LCBhbmQgc2VlbXMgdG8gYmUgZXNzZW50aWFsIGZvciBldmVyeXRoaW5nIGluIHRoZSBgYmxvY2svYCBkaXJlY3RvcnkuIFJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IEkgbmVlZCB0byB2ZXJpZnkgaWYgYHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZWAsIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCwgYHBhcnRfcHV0X3dyaXRlX3N0cmVhbXNgLCBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCBhbmQgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGFyZSBhbGwgdGhlIGNvcnJlY3QgRm9jdXNTeW1ib2xzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciBlYWNoLiBBbmQgdGhlbiBJIGhhdmUgdG8gc2VlIGlmIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCBpcyBpbmxpbmVkIG9yIHN0YXRpYzsgdGhhdCBraW5kIG9mIGRldGFpbCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb21waWxlciBoYW5kbGVzIGl0LgoKTG9va2luZyBpbiBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLCBJIHNlZTogYHBhcnRfd3JpdGVfc3RyZWFtc19zaG93YCwgYHBhcnRfcHV0X3dyaXRlX3N0cmVhbXNgLCBgcGFydF9zZXRfd3JpdGVfc3RyZWFtc2AsIGFuZCBgcGFydF93cml0ZV9zdHJlYW1zX3N0b3JlYCwgYWxsIGNhbmRpZGF0ZXMuIGBibGtfcGFydGl0aW9uX3JlbWFwYCBpcyBvdmVyIGluIGBibG9jay9ibGstY29yZS5jYCBhbmQgYGJkZXZfZnJlZV9pbm9kZWAgaW4gYGJsb2NrL2JkZXYuY2AsIGFuZCBmaW5hbGx5IGBkcm9wX3BhcnRpdGlvbmAgaW4gYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gR290IGl0LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGlzIGRvaW5nLiBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGl0JiMzOTtzIHN0YXRpYyBpbmxpbmUgb3IganVzdCBzdGF0aWMuIEhtbSwgaW4gYGJsb2NrL2Jsay1jb3JlLmNgLCBJIHNlZTogYHN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pYC4gV2FpdCBhIG1pbnV0ZSwgdGhlIGRpZmYgSSBzYXcgYmVmb3JlIGhhZCBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbiBgYmlvX2NoZWNrX2VvZGAgb24gbGluZSA2MTYsIGJ1dCBgYmxrX3BhcnRpdGlvbl9yZW1hcGAgb24gbGluZSA2MjIgaXMganVzdCBgc3RhdGljIGludGAuIEludGVyZXN0aW5nLiBJdCYjMzk7cyBub3QgaW5saW5lZCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSBub3QuIFRpbWUgdG8gdHJhY2sgZG93biB3aGVyZSBgYmxrX3BhcnRpdGlvbl9yZW1hcGAgaXMgY2FsbGVkIGluIGBibG9jay9ibGstY29yZS5jYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19wYXJ0aXRpb25fcmVtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNvcmUuYz01OTk9c3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNvcmUuYy02MjEtICovXG5ibG9jay9ibGstY29yZS5jOjYyMjpzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxuYmxvY2svYmxrLWNvcmUuYy02MjMte1xuLS1cbmJsb2NrL2Jsay1jb3JlLmM9ODI1PXZvaWQgc3VibWl0X2Jpb19ub2FjY3Qoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1jb3JlLmMtODUzLVx0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oYmRldikgXHUwMDI2XHUwMDI2XG5ibG9jay9ibGstY29yZS5jOjg1NDpcdFx0ICAgIHVubGlrZWx5KGJsa19wYXJ0aXRpb25fcmVtYXAoYmlvKSkpXG5ibG9jay9ibGstY29yZS5jLTg1NS1cdFx0XHRnb3RvIGVuZF9pbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MjQKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJsb2NrIExheWVyIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gSSBzZWUgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGJlaW5nIGNhbGxlZCB3aXRoaW4gYHN1Ym1pdF9iaW9fbm9hY2N0YCwgd2hpY2ggaXMgYSBrZXkgcG9pbnQgdG8gc3RhcnQgd2l0aC4gVGhlbiwgSSYjMzk7dmUgZ290IGEgbGlzdCBvZiByZWxldmFudCBmdW5jdGlvbnM6IGBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVgLCBgcGFydF9zZXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zYCwgYHBhcnRfd3JpdGVfc3RyZWFtc19zaG93YCwgYGJsa19wYXJ0aXRpb25fcmVtYXBgLCBhbmQgYGRyb3BfcGFydGl0aW9uYC4gSSBuZWVkIHRvIGVuc3VyZSBhIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGludGVyYWN0LgoKTGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgcXVpY2tseS4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUgLSBnb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3QuIEVuYWJsZUNvbmZpZ3MgaXMgc2V0IHRvIFsmIzM0O0JMT0NLJiMzNDtdLCB3aGljaCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHkuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdCBvbiwgY29udGFpbmluZyBhbGwgdGhlIGZ1bmN0aW9ucyBJIGlkZW50aWZpZWQgYXMgY2VudHJhbCB0byB0aGlzIGNoYW5nZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBhYm91dCB3cml0ZSBzdHJlYW0gbWFuYWdlbWVudCBvbiBibG9jayBkZXZpY2UgcGFydGl0aW9ucywgdXNpbmcgYSBuZXcgc3lzZnMgYXR0cmlidXRlLiBJdCB0b3VjaGVzIHBhcnRpdGlvbiBsaWZlY3ljbGUgbWFuYWdlbWVudCwgaW5vZGUgY2xlYW51cCAoc3BlY2lmaWNhbGx5IGBiZGV2X2ZyZWVfaW5vZGVgKSwgYW5kIHRoZSBiaW8gc3VibWlzc2lvbiBwcm9jZXNzIHdpdGggYGJsa19wYXJ0aXRpb25fcmVtYXBgLiBUaGUgY29kZSBpcyBmdW5kYW1lbnRhbGx5IHBhcnQgb2YgdGhlIGNvcmUgYmxvY2sgbGF5ZXIsIHNvIGl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCB1c2VyLXNwYWNlIGludGVyYWN0aW9ucyB3aXRoIGJsb2NrIGRldmljZXMgYW5kIHN5c2ZzLiBUaGF0IHNlZW1zIHJlYXNvbmFibGUuCgpJIHNob3VsZCB2ZXJpZnkgdGhlIGNvbmZpZyBhbmQgc3ltYm9sIG5hbWVzIG9uZSBtb3JlIHRpbWUuIFRoZSBjb25maWcgY2hlY2tzIG91dCBhcyBgQkxPQ0tgLiBUaGUgc3ltYm9scyBsaXN0ZWQgYXJlIGFsbCBwcmVzZW50IGFuZCBhY2NvdW50ZWQgZm9yLgoKRXZlcnl0aGluZyBsb29rcyBjbGVhbiBhbmQgd2VsbC1kZWZpbmVkLCBpdCBzZWVtcy4gSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUmIzM0OywKICAgICYjMzQ7cGFydF9zZXRfd3JpdGVfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDtwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyYjMzQ7LAogICAgJiMzNDtwYXJ0X3B1dF93cml0ZV9zdHJlYW1zJiMzNDssCiAgICAmIzM0O2Jsa19wYXJ0aXRpb25fcmVtYXAmIzM0OywKICAgICYjMzQ7ZHJvcF9wYXJ0aXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB3cml0ZSBzdHJlYW0gcmVzZXJ2YXRpb24gYW5kIHJlbWFwcGluZyBzdXBwb3J0IGZvciBibG9jayBkZXZpY2UgcGFydGl0aW9ucy4gSXQgYWRkcyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUgKHdyaXRlX3N0cmVhbXMpIHRvIHBhcnRpdGlvbnMsIGltcGxlbWVudHMgc3RyZWFtIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRyYWNraW5nIG9uIHRoZSB1bmRlcmx5aW5nIGRpc2ssIGFuZCB1cGRhdGVzIGJpbyBwYXJ0aXRpb24gcmVtYXBwaW5nIHRvIG1hcCBwYXJ0aXRpb24gd3JpdGUgc3RyZWFtcyB0byBkaXNrIHdyaXRlIHN0cmVhbXMuIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGJsb2NrIEkvTyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhcnRfd3JpdGVfc3RyZWFtc19zdG9yZSYjMzQ7LAogICAgJiMzNDtwYXJ0X3NldF93cml0ZV9zdHJlYW1zJiMzNDssCiAgICAmIzM0O3BhcnRfd3JpdGVfc3RyZWFtc19zaG93JiMzNDssCiAgICAmIzM0O3BhcnRfcHV0X3dyaXRlX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7YmxrX3BhcnRpdGlvbl9yZW1hcCYjMzQ7LAogICAgJiMzNDtkcm9wX3BhcnRpdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHdyaXRlIHN0cmVhbSByZXNlcnZhdGlvbiBhbmQgcmVtYXBwaW5nIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSBwYXJ0aXRpb25zLiBJdCBhZGRzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSAod3JpdGVfc3RyZWFtcykgdG8gcGFydGl0aW9ucywgaW1wbGVtZW50cyBzdHJlYW0gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gdHJhY2tpbmcgb24gdGhlIHVuZGVybHlpbmcgZGlzaywgYW5kIHVwZGF0ZXMgYmlvIHBhcnRpdGlvbiByZW1hcHBpbmcgdG8gbWFwIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW1zIHRvIGRpc2sgd3JpdGUgc3RyZWFtcy4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN5c2ZzIGNvbmZpZ3VyYXRpb24gYW5kIGJsb2NrIGxheWVyIHJlbWFwcGluZyBmb3Igd3JpdGUgc3RyZWFtcyBvbiBwYXJ0aXRpb24gYmxvY2sgZGV2aWNlcy5cblxuMS4gTWVtb3J5IEluaXRpYWxpemF0aW9uOlxuLSBJbm9kZXMvYmRldnMgYXJlIGFsbG9jYXRlZCB2aWEgYGJkZXZfYWxsb2NfaW5vZGVgIHdoaWNoIGV4cGxpY2l0bHkgemVyb2VzIHRoZSBgc3RydWN0IGJsb2NrX2RldmljZWAgd2l0aCBgbWVtc2V0YCwgZW5zdXJpbmcgYGJkX25yX3dyaXRlX3N0cmVhbXNgIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgc3RhcnQgYXQgemVyby9OVUxMLlxuLSBgc3RydWN0IGdlbmRpc2tgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19ub2RlYCwgZW5zdXJpbmcgYHdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRgIGJpdG1hcCBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLlxuLSBXaGVuIGBtYXBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIGluIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKClgLCBldmVyeSBlbGVtZW50IGluIGBtYXBbMCAuLiBuci0xXWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhY3Jvc3MgdGhlIGxvb3AgYnJhbmNoZXMgYmVmb3JlIHN3YXBwaW5nIGludG8gYGJkZXYtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcGAuXG5cbjIuIFVzZXIgU3BhY2UgQ29tbXVuaWNhdGlvbjpcbi0gVGhlIG9ubHkgaW50ZXJmYWNlIGV4cG9zaW5nIGRhdGEgdG8gdXNlcnNwYWNlIGlzIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIHdoaWNoIHVzZXMgYHN5c2ZzX2VtaXQoKWAgdG8gZm9ybWF0IHRoZSBpbnRlZ2VyIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBpbnRvIGEgc3RyaW5nLiBObyBiaW5hcnkgc3RydWN0dXJlcyBvciBwYWRkZWQgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cbjMuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVudCBhY2Nlc3MsIG9yIG1lbW9yeSBsZWFrcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLlxuLSBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIGtlcm5lbCBpbmZvLWxlYWtzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MTNkNmY2ZDY4Y2ZjNDU0ZmZiMDJlMDk4YzMxZjZmZTc5NTBlMjY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDc6NDY6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2sgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2sKaW5kZXggOTAwYjNmYzRjNzJkMC4uNDQyZjRjMjIxYmRlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9jawpAQCAtMjE4LDYgJiM0MzsyMTgsMjUgQEAgRGVzY3JpcHRpb246CiAJCXNhbWUgYXMgdGhlIGZvcm1hdCBvZiAvc3lzL2Jsb2NrLyZsdDtkaXNrJmd0Oy9zdGF0LgogCiAKJiM0MztXaGF0OgkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvJmx0O3BhcnRpdGlvbiZndDsvd3JpdGVfc3RyZWFtcwomIzQzO0RhdGU6CQlTZXB0ZW1iZXIgMjAyNgomIzQzO0NvbnRhY3Q6CUtlb3Nlb25nIFBhcmsgJmx0O2tlb3N1bmcucGFya0BzYW1zdW5nLmNvbSZndDsKJiM0MztEZXNjcmlwdGlvbjoKJiM0MzsJCVtSV10gTnVtYmVyIG9mIHRoZSBkaXNrJiMzOTtzIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZQomIzQzOwkJcGFydGl0aW9uLiBXcml0aW5nIE4gcmVzZXJ2ZXMgTiBkaXNrIHdyaXRlIHN0cmVhbXMgdGhhdCBubwomIzQzOwkJb3RoZXIgcGFydGl0aW9uIGNhbiB1c2UgYW5kIGV4cG9zZXMgdGhlbSBhcyB0aGUgcGFydGl0aW9uJiMzOTtzCiYjNDM7CQl3cml0ZSBzdHJlYW1zIDEgdG8gTi4gV3JpdGluZyAwIGdpdmVzIHRoZW0gYmFjay4gQXQgbW9zdAomIzQzOwkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvcXVldWUvbWF4X3dyaXRlX3N0cmVhbXMgc3RyZWFtcywgYW5kIG5ldmVyCiYjNDM7CQltb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhbgomIzQzOwkJb25seSBiZSBjaGFuZ2VkIHdoaWxlIHRoZSBwYXJ0aXRpb24gaXMgbm90IG9wZW4sIGFuZCBhIGNoYW5nZQomIzQzOwkJa2VlcHMgdGhlIHN0cmVhbSBudW1iZXJzIHRoYXQgc3Vydml2ZSBpdCBwb2ludGluZyBhdCB0aGUgc2FtZQomIzQzOwkJZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3MKJiM0MzsJCXJlc2VydmVkIGhlcmUsIGFuZCB0aGUgcmVzZXJ2YXRpb24gaXMgbG9zdCB3aGVuIHRoZSBwYXJ0aXRpb24KJiM0MzsJCWlzIHJlbW92ZWQsIGluY2x1ZGluZyBieSBhIHBhcnRpdGlvbiB0YWJsZSByZXNjYW4uIEkvTyB0bwomIzQzOwkJdGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdAomIzQzOwkJY2FuIHdyaXRlIHRvIGFueSBzZWN0b3Igb2YgYSBwYXJ0aXRpb24uCiYjNDM7CiYjNDM7CiBXaGF0OgkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvcXVldWUvYWRkX3JhbmRvbQogRGF0ZToJCUp1bmUgMjAxMAogQ29udGFjdDoJbGludXgtYmxvY2tAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmMKaW5kZXggY2Q4MzIzMDgzNzQwNi4uNzMwNmE0ZWYwYTg2NyAxMDA2NDQKLS0tIGEvYmxvY2svYmRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JkZXYuYwpAQCAtNDM4LDYgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAogCWZyZWVfcGVyY3B1KGJkZXYtJmd0O2JkX3N0YXRzKTsKIAlrZnJlZShiZGV2LSZndDtiZF9tZXRhX2luZm8pOwomIzQzOwlrZnJlZShiZGV2LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwKTsKIAlzZWN1cml0eV9iZGV2X2ZyZWUoYmRldik7CiAKIAlpZiAoIWJkZXZfaXNfcGFydGl0aW9uKGJkZXYpKSB7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCAxOTZiY2NmMjdmNThkLi4zYjZmMDliMzk0M2Y0IDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTYxNiw3ICYjNDM7NjE2LDggQEAgc3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pCiB9CiAKIC8qCi0gKiBSZW1hcCBibG9jayBuIG9mIHBhcnRpdGlvbiBwIHRvIGJsb2NrIG4mIzQzO3N0YXJ0KHApIG9mIHRoZSBkaXNrLgomIzQzOyAqIFJlbWFwIGJsb2NrIG4gb2YgcGFydGl0aW9uIHAgdG8gYmxvY2sgbiYjNDM7c3RhcnQocCkgb2YgdGhlIGRpc2ssIGFuZCB0aGUKJiM0MzsgKiB3cml0ZSBzdHJlYW1zIG9mIHBhcnRpdGlvbiBwIHRvIHRoZSBkaXNrIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZW0uCiAgKi8KIHN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC02MzAsNiAmIzQzOzYzMSwxMyBAQCBzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKQogCQkJCSAgICAgIGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgLQogCQkJCSAgICAgIHAtJmd0O2JkX3N0YXJ0X3NlY3QpOwogCX0KJiM0MzsJaWYgKGJpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtICZhbXA7JmFtcDsgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFKSB7CiYjNDM7CQlpZiAodW5saWtlbHkoYmlvLSZndDtiaV93cml0ZV9zdHJlYW0gJmd0OyBwLSZndDtiZF9ucl93cml0ZV9zdHJlYW1zKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWJpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtID0KJiM0MzsJCQlwLSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2Jpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtIC0gMV07CiYjNDM7CX0KIAliaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwppbmRleCBiNWM1OWI3OWNhN2NiLi43Nzg1MmViMmFjYmVjIDEwMDY0NAotLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwpAQCAtMjA1LDYgJiM0MzsyMDUsMTMwIEBAIHN0YXRpYyBzc2l6ZV90IHBhcnRfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgYmRldl9kaXNjYXJkX2FsaWdubWVudChkZXZfdG9fYmRldihkZXYpKSk7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgZGV2X3RvX2JkZXYoZGV2KS0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogR2l2ZSB0aGUgd3JpdGUgc3RyZWFtcyBvZiBAcGFydCBiYWNrIHRvIHRoZSBkaXNrLiAgQ2FsbGVkIGZyb20KJiM0MzsgKiBkcm9wX3BhcnRpdGlvbigpIHdpdGggb3Blbl9tdXRleCBoZWxkOyB0aGUgbWFwIGlzIGxlZnQgYWxvbmUgYmVjYXVzZSBhCiYjNDM7ICogd3JpdGUgcmFjaW5nIHdpdGggZGVsX2dlbmRpc2soKSBzdGlsbCB1c2VzIGl0IHVudGlsIHRoZSBiZGV2IGlzIGZyZWVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC0mZ3Q7YmRfZGlzazsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBhcnQtJmd0O2JkX25yX3dyaXRlX3N0cmVhbXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJX19jbGVhcl9iaXQocGFydC0mZ3Q7YmRfd3JpdGVfc3RyZWFtX21hcFtpXSwKJiM0MzsJCQkgICAgZGlzay0mZ3Q7d3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0LCB1OCBucikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC0mZ3Q7YmRfZGlzazsKJiM0MzsJdW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCwKJiM0MzsJCQkJIGJkZXZfbGltaXRzKHBhcnQpLSZndDttYXhfd3JpdGVfc3RyZWFtcywgVThfTUFYKTsKJiM0MzsJdTggKm1hcCA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGludCBpLCBpZCwgbnJfZnJlZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CXU4IGN1cjsKJiM0MzsKJiM0MzsJaWYgKG5yICZndDsgbWF4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChucikgewomIzQzOwkJbWFwID0ga21hbGxvYyhuciwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIW1hcCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CiYjNDM7CS8qIHRoZSBwYXJ0aXRpb24gbWF5IGhhdmUgYmVlbiBkcm9wcGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBtdXRleCAqLwomIzQzOwlpZiAoeGFfbG9hZCgmYW1wO2Rpc2stJmd0O3BhcnRfdGJsLCBiZGV2X3BhcnRubyhwYXJ0KSkgIT0gcGFydCkgewomIzQzOwkJcmV0ID0gLUVOWElPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3VyID0gcGFydC0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtczsKJiM0MzsKJiM0MzsJLyogYSBuby1vcCBjaGFuZ2UgaXMgYWxsb3dlZCB3aGlsZSBvcGVuICovCiYjNDM7CWlmIChuciA9PSBjdXIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogdGhlIHN0cmVhbXMgbXVzdCBub3QgY2hhbmdlIHVuZGVyIGEgdXNlciBvZiB0aGUgcGFydGl0aW9uICovCiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO3BhcnQtJmd0O2JkX29wZW5lcnMpKSB7CiYjNDM7CQlyZXQgPSAtRUJVU1k7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlucl9mcmVlID0gbWF4IC0gYml0bWFwX3dlaWdodChkaXNrLSZndDt3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggJiM0MzsgMSk7CiYjNDM7CWlmIChuciAmZ3Q7IGN1ciAmYW1wOyZhbXA7IG5yIC0gY3VyICZndDsgbnJfZnJlZSkgewomIzQzOwkJcmV0ID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtlZXAgdGhlIHN0cmVhbXMgdGhhdCBzdGF5LCBzbyB0aGF0IGEgcGFydGl0aW9uIGtlZXBzIHdyaXRpbmcKJiM0MzsJICogdGhyb3VnaCB0aGUgc2FtZSBkaXNrIHN0cmVhbXMgYW5kIGl0cyBkYXRhIHN0YXlzIHRvZ2V0aGVyLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1pbihjdXIsIG5yKTsgaSYjNDM7JiM0MzspCiYjNDM7CQltYXBbaV0gPSBwYXJ0LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2ldOwomIzQzOwomIzQzOwlpZiAobnIgJmx0OyBjdXIpIHsKJiM0MzsJCWZvciAoaSA9IG5yOyBpICZsdDsgY3VyOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlfX2NsZWFyX2JpdChwYXJ0LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2ldLAomIzQzOwkJCQkgICAgZGlzay0mZ3Q7d3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmb3IgKGkgPSBjdXI7IGkgJmx0OyBucjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLSZndDt3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLAomIzQzOwkJCQkJCW1heCAmIzQzOyAxLCAxKTsKJiM0MzsJCQlfX3NldF9iaXQoaWQsIGRpc2stJmd0O3dyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpOwomIzQzOwkJCW1hcFtpXSA9IGlkOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXN3YXAocGFydC0mZ3Q7YmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTsKJiM0MzsJcGFydC0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yOwomIzQzOwomIzQzO291dDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CWtmcmVlKG1hcCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGtlcm5mc19ub2RlICprbjsKJiM0MzsJdTggbnI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b3U4KGJ1ZiwgMTAsICZhbXA7bnIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogZHJvcF9wYXJ0aXRpb24oKSByZW1vdmVzIHRoaXMgYXR0cmlidXRlIHdpdGggb3Blbl9tdXRleCBoZWxkLCBzbwomIzQzOwkgKiBkb24mIzM5O3QgaG9sZCB0aGUgYWN0aXZlIHJlZmVyZW5jZSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbXV0ZXguCiYjNDM7CSAqLwomIzQzOwlrbiA9IHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKCZhbXA7ZGV2LSZndDtrb2JqLCAmYW1wO2F0dHItJmd0O2F0dHIpOwomIzQzOwlpZiAoIWtuKQomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsKJiM0MzsJcmV0ID0gcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhkZXZfdG9fYmRldihkZXYpLCBucik7CiYjNDM7CXN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIERFVklDRV9BVFRSKHBhcnRpdGlvbiwgMDQ0NCwgcGFydF9wYXJ0aXRpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhcnQsIDA0NDQsIHBhcnRfc3RhcnRfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc2l6ZSwgMDQ0NCwgcGFydF9zaXplX3Nob3csIE5VTEwpOwpAQCAtMjEzLDYgJiM0MzszMzcsOCBAQCBzdGF0aWMgREVWSUNFX0FUVFIoYWxpZ25tZW50X29mZnNldCwgMDQ0NCwgcGFydF9hbGlnbm1lbnRfb2Zmc2V0X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGRpc2NhcmRfYWxpZ25tZW50LCAwNDQ0LCBwYXJ0X2Rpc2NhcmRfYWxpZ25tZW50X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTsKJiM0MztzdGF0aWMgREVWSUNFX0FUVFIod3JpdGVfc3RyZWFtcywgMDY0NCwgcGFydF93cml0ZV9zdHJlYW1zX3Nob3csCiYjNDM7CQkgICBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUpOwogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2ZhaWwgPQogCV9fQVRUUihtYWtlLWl0LWZhaWwsIDA2NDQsIHBhcnRfZmFpbF9zaG93LCBwYXJ0X2ZhaWxfc3RvcmUpOwpAQCAtMjI3LDYgJiM0MzszNTMsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGFydF9hdHRyc1tdID0gewogCSZhbXA7ZGV2X2F0dHJfZGlzY2FyZF9hbGlnbm1lbnQuYXR0ciwKIAkmYW1wO2Rldl9hdHRyX3N0YXQuYXR0ciwKIAkmYW1wO2Rldl9hdHRyX2luZmxpZ2h0LmF0dHIsCiYjNDM7CSZhbXA7ZGV2X2F0dHJfd3JpdGVfc3RyZWFtcy5hdHRyLAogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogCSZhbXA7ZGV2X2F0dHJfZmFpbC5hdHRyLAogI2VuZGlmCkBAIC0yNzQsNiAmIzQzOzQwMSw3IEBAIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCkKIHsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGFydC0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiAKJiM0MzsJcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTsKIAl4YV9lcmFzZSgmYW1wO3BhcnQtJmd0O2JkX2Rpc2stJmd0O3BhcnRfdGJsLCBiZGV2X3BhcnRubyhwYXJ0KSk7CiAJa29iamVjdF9wdXQocGFydC0mZ3Q7YmRfaG9sZGVyX2Rpcik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCmluZGV4IDk4ZTIxYjRjYmYzMjguLjBiYmZhMjcwODA5OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaApAQCAtNzEsNiAmIzQzOzcxLDkgQEAgc3RydWN0IGJsb2NrX2RldmljZSB7CiAKIAlzdHJ1Y3QgcGFydGl0aW9uX21ldGFfaW5mbyAqYmRfbWV0YV9pbmZvOwogCWludAkJCWJkX3dyaXRlcnM7CiYjNDM7CS8qIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW0gcyBpcyBkaXNrIHN0cmVhbSBiZF93cml0ZV9zdHJlYW1fbWFwW3MgLSAxXSAqLwomIzQzOwl1OAkJCWJkX25yX3dyaXRlX3N0cmVhbXM7CiYjNDM7CXU4CQkJKmJkX3dyaXRlX3N0cmVhbV9tYXA7CiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCiAJdm9pZAkJCSpiZF9zZWN1cml0eTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNGY3OTA1YzM0MTJiOC4uNWQyNDFkN2IwODAyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xNzgsNiAmIzQzOzE3OCw4IEBAIHN0cnVjdCBnZW5kaXNrIHsKIAogCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwkvKiBvcGVuL2Nsb3NlIG11dGV4ICovCiAJdW5zaWduZWQgb3Blbl9wYXJ0aXRpb25zOwkvKiBudW1iZXIgb2Ygb3BlbiBwYXJ0aXRpb25zICovCiYjNDM7CS8qIHJlc2VydmVkIGJ5IHBhcnRpdGlvbnMsIGJpdCBOID0gc3RyZWFtIE4gKDAgdW51c2VkKSwgb3Blbl9tdXRleCAqLwomIzQzOwlERUNMQVJFX0JJVE1BUCh3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBVOF9NQVggJiM0MzsgMSk7CiAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbwkqYmRpOwogCXN0cnVjdCBrb2JqZWN0IHF1ZXVlX2tvYmo7CS8qIHRoZSBxdWV1ZS8gZGlyZWN0b3J5ICovCkBAIC0xMzAzLDcgJiM0MzsxMzA1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9tYXhfc2VnbWVudHMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewogCWlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gYmRldi0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtczsKIAlyZXR1cm4gYmRldl9saW1pdHMoYmRldiktJmd0O21heF93cml0ZV9zdHJlYW1zOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjc1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCYjMzk7cyBhIHN0YW5kYXJkIGtlcm5lbCByZXZpZXcgcmVxdWVzdCwgc28gbm8gbmVlZCB0byBvdmVydGhpbmsgaXQuICBJIG5lZWQgdG8gcHJvdmlkZSBhIGBOZWVkc0tNU0FOYCBib29sZWFuIGFuZCBhIGBLTVNBTlJlYXNvbmluZ2AgZXhwbGFuYXRpb24uIEkgaGF2ZSBteSB0b29scywgYGdyZXBwZXJgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AgYXQgdGhlIHJlYWR5LgoKRmlyc3QsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSSBzZWUgYSBkb2N1bWVudGF0aW9uIHVwZGF0ZSBpbiBgRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrYCBmb3IgYHdyaXRlX3N0cmVhbXNgLCBhbmQgY2hhbmdlcyBpbiBgYmxvY2svYmRldi5jYCwgYGJsb2NrL2Jsay1jb3JlLmNgLCBhbmQgYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gIEEga2V5IGFyZWEgZm9yIEtNU0FOIGNvbmNlcm5zIGlzIG1lbW9yeSBjb3JydXB0aW9uLiAgSSBzZWUgYSBga2ZyZWVgIGNhbGwgZm9yIGBiZGV2LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwYCBpbiBgYmRldl9mcmVlX2lub2RlYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJkZXZgIGNvbWVzIGZyb20uIFVzdWFsbHksIGl0JiMzOTtzIGVpdGhlciBgYmRldl9hbGxvY2Agb3Igc2xhYiBhbGxvY2F0aW9uLgoKTG9va2luZyBhdCBgYmxvY2svYmxrLWNvcmUuY2AsIHRoZXJlJiMzOTtzIGEgdXNlIG9mIGBiaW8tJmd0O2JpX3dyaXRlX3N0cmVhbWAgYW5kIGBwLSZndDtiZF93cml0ZV9zdHJlYW1fbWFwYCB3aXRoaW4gYGJsa19wYXJ0aXRpb25fcmVtYXBgLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIGNvZGUgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBtYXkgYmUgb3V0IG9mIGJvdW5kcyB3cml0ZXMgdGhhdCBsZWFkIHRvIGNvcnJ1cHRpb24uCgpOb3csIGBibG9jay9wYXJ0aXRpb25zL2NvcmUuY2AgY29udGFpbnMgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgd2l0aCB0aGUgdXNlIG9mICBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCBgcGFydF9wdXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYC4gVGhlIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCBmdW5jdGlvbiB1c2VzIGBrbWFsbG9jYCB0byBhbGxvY2F0ZSBhIG1hcCwgYW5kIHRoZW4gY29waWVzIHNvbWUgdmFsdWVzIGZyb20gYHBhcnQtJmd0O2JkX3dyaXRlX3N0cmVhbV9tYXBgIGJlZm9yZSBwb3B1bGF0aW5nIG90aGVyIGluZGljZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYG1hcGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuICBJJiMzOTttIHJ1bm5pbmcgdGhyb3VnaCB0aGUgbG9naWMgb2YgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgIGNhcmVmdWxseS4gIE9rYXksIEkgdGhpbmsgSSYjMzk7dmUgZ290IGl0LiBJdCBsb29rcyBsaWtlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBgbnJgIGlzIGdyZWF0ZXIgb3Igc21hbGxlciB0aGFuIGBjdXJgLCBhbGwgaW5kaWNlcyBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkIGBtYXBgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGBzd2FwYCBhbmQgc3Vic2VxdWVudCBga2ZyZWVgLiAgU28sIHRoZXJlJiMzOTtzIG5vIG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC93cml0ZSB2dWxuZXJhYmlsaXR5IHRoZXJlLgoKTm93IGxldCYjMzk7cyBjaGVjayB0aGUgY2FsbCBzaXRlIG9mIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVgLiBUaGF0JiMzOTtzIHdoZXJlIHdlIGdldCB0aGUgdmFsdWVzIGZvciBgbnJgLiAgSXQgY2FsbHMgYGtzdHJ0b3U4YCB3aGljaCB0YWtlcyB0aGUgbnVtYmVyIGZyb20gc3lzZnMsIGFuZCB0aGVuIGNhbGxzIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYC4KCkZpbmFsbHksIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGJsb2NrX2RldmljZWAuIEkgd2lsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYGJkZXZfYWxsb2NfaW5vZGVgIGFuZCBgYmRldl9hbGxvY2AuCgpOb3cgSSBoYXZlIGEgbXVjaCBiZXR0ZXIgcGljdHVyZS4gVGhlIGNvZGUgKmRvZXMqIG1hbmlwdWxhdGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBgd3JpdGVfc3RyZWFtc2AsIGFuZCBpdCYjMzk7cyBhY2Nlc3NlZCB2aWEgc3lzZnMsIGJ1dCBpdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBzdWdnZXN0IGFuIGVhc3ktdG8tZXhwbG9pdCB2dWxuZXJhYmlsaXR5LiBUaGVyZSBpcyBhIHBvdGVudGlhbCwgaG93ZXZlciwgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiB0aGUgc3RyZWFtcyBtYXAgYW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmNvcnJlY3QgaW5wdXQgZnJvbSBzeXNmcy4KCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JkX3dyaXRlX3N0cmVhbV9tYXB8YmRldl9hbGxvY19pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZGV2LmM9NDE4PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmRldl9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xuYmxvY2svYmRldi5jLTQxOS1cbmJsb2NrL2JkZXYuYzo0MjA6c3RhdGljIHN0cnVjdCBpbm9kZSAqYmRldl9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuYmxvY2svYmRldi5jLTQyMS17XG4tLVxuYmxvY2svYmRldi5jPTQzNT1zdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5ibG9jay9iZGV2LmMtNDQwLVx0a2ZyZWUoYmRldi1cdTAwM2ViZF9tZXRhX2luZm8pO1xuYmxvY2svYmRldi5jOjQ0MTpcdGtmcmVlKGJkZXYtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCk7XG5ibG9jay9iZGV2LmMtNDQyLVx0c2VjdXJpdHlfYmRldl9mcmVlKGJkZXYpO1xuLS1cbmJsb2NrL2JkZXYuYz00NjM9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJkZXZfc29wcyA9IHtcbmJsb2NrL2JkZXYuYy00NjQtXHQuc3RhdGZzID0gc2ltcGxlX3N0YXRmcyxcbmJsb2NrL2JkZXYuYzo0NjU6XHQuYWxsb2NfaW5vZGUgPSBiZGV2X2FsbG9jX2lub2RlLFxuYmxvY2svYmRldi5jLTQ2Ni1cdC5mcmVlX2lub2RlID0gYmRldl9mcmVlX2lub2RlLFxuLS1cbmJsb2NrL2Jsay1jb3JlLmM9NjIyPXN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNvcmUuYy02MzgtXHRcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxuYmxvY2svYmxrLWNvcmUuYzo2Mzk6XHRcdFx0cC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2Jpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gLSAxXTtcbmJsb2NrL2Jsay1jb3JlLmMtNjQwLVx0fVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTIxOT1zdGF0aWMgdm9pZCBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFydC1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zOyBpJiM0MzsmIzQzOylcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIyNzpcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI4LVx0XHRcdCAgICBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTIzMT1zdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjgwLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluKGN1ciwgbnIpOyBpJiM0MzsmIzQzOylcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI4MTpcdFx0bWFwW2ldID0gcGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldO1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjgyLVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4NC1cdFx0Zm9yIChpID0gbnI7IGkgXHUwMDNjIGN1cjsgaSYjNDM7JiM0MzspXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyODU6XHRcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjg2LVx0XHRcdFx0ICAgIGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjk1LVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjk2Olx0c3dhcChwYXJ0LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXAsIG1hcCk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTctXHRwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXMgPSBucjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCBsaW5lIG9mIHRoaW5raW5nLCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhbmQgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEZWNvbnN0cnVjdGluZyBgYmRldl9hbGxvY19pbm9kZWAgd2l0aCBSZWFkLUZpbGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBiZGV2X2FsbG9jX2lub2RlYCwgYW5kIG15IGluaXRpYWwgaW1wdWxzZSBpcyB0byBkaXZlIHJpZ2h0IGluIHdpdGggYHJlYWQtZmlsZWAuIFRoaXMgZnVuY3Rpb24sIEkga25vdywgaXMgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGJsb2NrIGRldmljZSBpbm9kZSBhbGxvY2F0aW9uIHB1enpsZS4gSSYjMzk7bSBwcm9iYWJseSBkZWFsaW5nIHdpdGggc29tZSBsZXZlbCBvZiBvbi1kaXNrIHN0cnVjdHVyZXMsIG1heWJlIGktbm9kZSBhbGxvY2F0aW9uLiBJJiMzOTttIHRoaW5raW5nIEkgY2FuIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSBzb3VyY2Ugd2l0aCBgcmVhZC1maWxlYC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBpdHMgcm9sZSwgdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgcG9zc2libHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgZGVzaWduIGNob2ljZXMgYXQgcGxheS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuIExldCYjMzk7cyBnZXQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9iZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxNTpcdCAqL1xuIDQxNjpcdFxuIDQxNzpcdHN0YXRpYyAgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX01VVEVYKGJkZXZfbG9jayk7XG4gNDE4Olx0c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpiZGV2X2NhY2hlcCBfX3JvX2FmdGVyX2luaXQ7XG4gNDE5Olx0XG4gNDIwOlx0c3RhdGljIHN0cnVjdCBpbm9kZSAqYmRldl9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIDQyMTpcdHtcbiA0MjI6XHRcdHN0cnVjdCBiZGV2X2lub2RlICplaSA9IGFsbG9jX2lub2RlX3NiKHNiLCBiZGV2X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG4gNDIzOlx0XG4gNDI0Olx0XHRpZiAoIWVpKVxuIDQyNTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0MjY6XHRcdG1lbXNldChcdTAwMjZlaS1cdTAwM2ViZGV2LCAwLCBzaXplb2YoZWktXHUwMDNlYmRldikpO1xuIDQyNzpcdFxuIDQyODpcdFx0aWYgKHNlY3VyaXR5X2JkZXZfYWxsb2MoXHUwMDI2ZWktXHUwMDNlYmRldikpIHtcbiA0Mjk6XHRcdFx0a21lbV9jYWNoZV9mcmVlKGJkZXZfY2FjaGVwLCBlaSk7XG4gNDMwOlx0XHRcdHJldHVybiBOVUxMO1xuIDQzMTpcdFx0fVxuIDQzMjpcdFx0cmV0dXJuIFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZTtcbiA0MzM6XHR9XG4gNDM0Olx0XG4gNDM1Olx0c3RhdGljIHZvaWQgYmRldl9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gNDM2Olx0e1xuIDQzNzpcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IElfQkRFVihpbm9kZSk7XG4gNDM4Olx0XG4gNDM5Olx0XHRmcmVlX3BlcmNwdShiZGV2LVx1MDAzZWJkX3N0YXRzKTtcbiA0NDA6XHRcdGtmcmVlKGJkZXYtXHUwMDNlYmRfbWV0YV9pbmZvKTtcbiA0NDE6XHRcdGtmcmVlKGJkZXYtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCk7XG4gNDQyOlx0XHRzZWN1cml0eV9iZGV2X2ZyZWUoYmRldik7XG4gNDQzOlx0XG4gNDQ0Olx0XHRpZiAoIWJkZXZfaXNfcGFydGl0aW9uKGJkZXYpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhlIGtlcm5lbCBjb2RlOgoKKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIElub2RlIEluaXRpYWxpemF0aW9uIGFuZCBEaXNrIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBiZGV2X2FsbG9jX2lub2RlYCBhbmQgbm90aWNlZCB0aGF0IGBtZW1zZXQoJmFtcDtlaS0mZ3Q7YmRldiwgMCwgc2l6ZW9mKGVpLSZndDtiZGV2KSlgIGlzIGNhbGxlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGBiZF9ucl93cml0ZV9zdHJlYW1zYCBpcyBiZWluZyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgdG8gTlVMTC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgbGlmZWN5Y2xlIGFuZCB1bmRlcnN0YW5kIHRoZSBhbGxvY2F0aW9uLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGdlbmRpc2tgIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBibG9jayBkZXZpY2UgaXMgYWxsb2NhdGVkIGFuZCBzZXQgdXAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgZ2VuZGlza2Agc3RydWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQuIE15IG5leHQgbW92ZSBpcyB0byB1c2UgYGdyZXBgIChvciBzb21lIHNpbWlsYXIgdG9vbCwgb2J2aW91c2x5KSBhbmQgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgY2FsbHMgdG8gZWl0aGVyIGBhbGxvY19kaXNrYCBvciBgX19hbGxvY19kaXNrX25vZGVgLiBUaGF0IHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IHdoZXJlIGFuZCBob3cgdGhlIGBnZW5kaXNrYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgY3JlYXRlZCwgYW5kIHRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgc3RydWN0dXJlcyBJJiMzOTttIGxvb2tpbmcgYXQgYXJlIGludGVyY29ubmVjdGVkLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MjE5PXN0YXRpYyB2b2lkIHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydClcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMjctXHRcdF9fY2xlYXJfYml0KHBhcnQtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtpXSxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIyODpcdFx0XHQgICAgZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIyOS19XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MjMxPXN0YXRpYyBpbnQgcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0LCB1OCBucilcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNjktXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyNzA6XHRucl9mcmVlID0gbWF4IC0gYml0bWFwX3dlaWdodChkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsIG1heCAmIzQzOyAxKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI3MS1cdGlmIChuciBcdTAwM2UgY3VyIFx1MDAyNlx1MDAyNiBuciAtIGN1ciBcdTAwM2UgbnJfZnJlZSkge1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4NS1cdFx0XHRfX2NsZWFyX2JpdChwYXJ0LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV0sXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyODY6XHRcdFx0XHQgICAgZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4Ny1cdH0gZWxzZSB7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODgtXHRcdGZvciAoaSA9IGN1cjsgaSBcdTAwM2MgbnI7IGkmIzQzOyYjNDM7KSB7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyODk6XHRcdFx0aWQgPSBmaW5kX25leHRfemVyb19iaXQoZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjkwLVx0XHRcdFx0XHRcdG1heCAmIzQzOyAxLCAxKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI5MTpcdFx0XHRfX3NldF9iaXQoaWQsIGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTItXHRcdFx0bWFwW2ldID0gaWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NjQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIERpc2sgR2VuZXJhdGlvbiBpbiBgYmxvY2svZ2VuaGQuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlIGBnZW5kaXNrYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBibG9jay9nZW5oZC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jay4gVGhpcyBzdHJ1Y3R1cmUgaXMgY2VudHJhbCB0byBob3cgdGhlIGtlcm5lbCBtb2RlbHMgYW5kIGludGVyYWN0cyB3aXRoIGJsb2NrIGRldmljZXMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGFsbG9jYXRpb24gaXMgY3JpdGljYWwuIEtub3dpbmcgaXRzIGxpZmVjeWNsZSwgd2hlbiBpdCYjMzk7cyBjcmVhdGVkLCBwb3B1bGF0ZWQsIGFuZCB1bHRpbWF0ZWx5IHJlbGVhc2VkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3RvcmFnZSBzdWJzeXN0ZW0gZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBnZW5lcmljIGRpc2sgc3RydWN0dXJlcyBhcmUgaGFuZGxlZC4gV2hlcmUgZG9lcyBtZW1vcnkgZm9yIHRoZXNlIHN0cnVjdHVyZXMgY29tZSBmcm9tPyBBcmUgdGhleSBkeW5hbWljYWxseSBhbGxvY2F0ZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGFsbG9jYXRpb24gc3RyYXRlZ2llcz8gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiB0aGUgbG93LWxldmVsIGRpc2sgbWFuYWdlbWVudCBwcm9jZXNzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGdlbmRpc2sgXFwqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svZ2VuaGQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9nZW5oZC5jPTU3PXN0YXRpYyBERUZJTkVfSURBKGV4dF9kZXZ0X2lkYSk7XG5ibG9jay9nZW5oZC5jLTU4LVxuYmxvY2svZ2VuaGQuYzo1OTp2b2lkIHNldF9jYXBhY2l0eShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9ycylcbmJsb2NrL2dlbmhkLmMtNjAte1xuLS1cbmJsb2NrL2dlbmhkLmM9NzA9RVhQT1JUX1NZTUJPTChzZXRfY2FwYWNpdHkpO1xuLS1cbmJsb2NrL2dlbmhkLmMtNzUtICovXG5ibG9jay9nZW5oZC5jOjc2OmJvb2wgc2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNpemUpXG5ibG9jay9nZW5oZC5jLTc3LXtcbi0tXG5ibG9jay9nZW5oZC5jPTMzNz12b2lkIGJsa19mcmVlX2V4dF9taW5vcih1bnNpZ25lZCBpbnQgbWlub3IpXG4tLVxuYmxvY2svZ2VuaGQuYy0zNDEtXG5ibG9jay9nZW5oZC5jOjM0Mjp2b2lkIGRpc2tfdWV2ZW50KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBlbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbilcbmJsb2NrL2dlbmhkLmMtMzQzLXtcbi0tXG5ibG9jay9nZW5oZC5jPTM2MT1FWFBPUlRfU1lNQk9MX0dQTChkaXNrX3VldmVudCk7XG5ibG9jay9nZW5oZC5jLTM2Mi1cbmJsb2NrL2dlbmhkLmM6MzYzOmludCBkaXNrX3NjYW5fcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxuYmxvY2svZ2VuaGQuYy0zNjQte1xuLS1cbmJsb2NrL2dlbmhkLmMtNDA0LVxuYmxvY2svZ2VuaGQuYzo0MDU6c3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9nZW5oZC5jLTQwNi17XG4tLVxuYmxvY2svZ2VuaGQuYy00MjYtXG5ibG9jay9nZW5oZC5jOjQyNzpzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbmJsb2NrL2dlbmhkLmMtNDI4LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzLFxuLS1cbmJsb2NrL2dlbmhkLmMtNTg3LSAqL1xuYmxvY2svZ2VuaGQuYzo1ODg6aW50IF9fbXVzdF9jaGVjayBhZGRfZGlza19md25vZGUoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbmJsb2NrL2dlbmhkLmMtNTg5LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipncm91cHMsXG4tLVxuYmxvY2svZ2VuaGQuYz02MTY9RVhQT1JUX1NZTUJPTF9HUEwoYWRkX2Rpc2tfZndub2RlKTtcbi0tXG5ibG9jay9nZW5oZC5jLTYyNi0gKi9cbmJsb2NrL2dlbmhkLmM6NjI3OmludCBfX211c3RfY2hlY2sgZGV2aWNlX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9nZW5oZC5jLTYyOC1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKVxuLS1cbmJsb2NrL2dlbmhkLmM9NjMyPUVYUE9SVF9TWU1CT0woZGV2aWNlX2FkZF9kaXNrKTtcbmJsb2NrL2dlbmhkLmMtNjMzLVxuYmxvY2svZ2VuaGQuYzo2MzQ6c3RhdGljIHZvaWQgYmxrX3JlcG9ydF9kaXNrX2RlYWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgc3VycHJpc2UpXG5ibG9jay9nZW5oZC5jLTYzNS17XG4tLVxuYmxvY2svZ2VuaGQuYy02NTktXG5ibG9jay9nZW5oZC5jOjY2MDpzdGF0aWMgYm9vbCBfX2Jsa19tYXJrX2Rpc2tfZGVhZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbmJsb2NrL2dlbmhkLmMtNjYxLXtcbi0tXG5ibG9jay9nZW5oZC5jLTY4OC0gKi9cbmJsb2NrL2dlbmhkLmM6Njg5OnZvaWQgYmxrX21hcmtfZGlza19kZWFkKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svZ2VuaGQuYy02OTAte1xuLS1cbmJsb2NrL2dlbmhkLmM9Njk1PUVYUE9SVF9TWU1CT0xfR1BMKGJsa19tYXJrX2Rpc2tfZGVhZCk7XG5ibG9jay9nZW5oZC5jLTY5Ni1cbmJsb2NrL2dlbmhkLmM6Njk3OnN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9nZW5oZC5jLTY5OC17XG4tLVxuYmxvY2svZ2VuaGQuYz03ODQ9c3RhdGljIHZvaWQgZGlzYWJsZV9lbHZfc3dpdGNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuLS1cbmJsb2NrL2dlbmhkLmMtODEyLSAqL1xuYmxvY2svZ2VuaGQuYzo4MTM6dm9pZCBkZWxfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbmJsb2NrL2dlbmhkLmMtODE0LXtcbi0tXG5ibG9jay9nZW5oZC5jPTgzMj1FWFBPUlRfU1lNQk9MKGRlbF9nZW5kaXNrKTtcbi0tXG5ibG9jay9nZW5oZC5jLTg0My0gKi9cbmJsb2NrL2dlbmhkLmM6ODQ0OnZvaWQgaW52YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svZ2VuaGQuYy04NDUte1xuLS1cbmJsb2NrL2dlbmhkLmM9ODU1PXN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtODU4LXtcbmJsb2NrL2dlbmhkLmM6ODU5Olx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xuYmxvY2svZ2VuaGQuYy04NjAtXG4tLVxuYmxvY2svZ2VuaGQuYz04Njc9c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtODcwLXtcbmJsb2NrL2dlbmhkLmM6ODcxOlx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xuYmxvY2svZ2VuaGQuYy04NzItXG4tLVxuYmxvY2svZ2VuaGQuYz05NzA9c3RhdGljIGludCBzaG93X3BhcnRpdGlvbihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXG5ibG9jay9nZW5oZC5jLTk3MS17XG5ibG9jay9nZW5oZC5jOjk3MjpcdHN0cnVjdCBnZW5kaXNrICpzZ3AgPSB2O1xuYmxvY2svZ2VuaGQuYy05NzMtXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0O1xuLS1cbmJsb2NrL2dlbmhkLmM9MTAxNz1zdGF0aWMgc3NpemVfdCBkaXNrX3JhbmdlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtMTAxOS17XG5ibG9jay9nZW5oZC5jOjEwMjA6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XG5ibG9jay9nZW5oZC5jLTEwMjEtXG4tLVxuYmxvY2svZ2VuaGQuYz0xMDI1PXN0YXRpYyBzc2l6ZV90IGRpc2tfZXh0X3JhbmdlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtMTAyNy17XG5ibG9jay9nZW5oZC5jOjEwMjg6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XG5ibG9jay9nZW5oZC5jLTEwMjktXG4tLVxuYmxvY2svZ2VuaGQuYz0xMDM0PXN0YXRpYyBzc2l6ZV90IGRpc2tfcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtMTAzNi17XG5ibG9jay9nZW5oZC5jOjEwMzc6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XG5ibG9jay9nZW5oZC5jLTEwMzgtXG4tLVxuYmxvY2svZ2VuaGQuYz0xMDQzPXN0YXRpYyBzc2l6ZV90IGRpc2tfaGlkZGVuX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtMTA0NS17XG5ibG9jay9nZW5oZC5jOjEwNDY6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XG5ibG9jay9nZW5oZC5jLTEwNDctXG4tLVxuYmxvY2svZ2VuaGQuYz0xMDUyPXN0YXRpYyBzc2l6ZV90IGRpc2tfcm9fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYmxvY2svZ2VuaGQuYy0xMDU0LXtcbmJsb2NrL2dlbmhkLmM6MTA1NTpcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcbmJsb2NrL2dlbmhkLmMtMTA1Ni1cbi0tXG5ibG9jay9nZW5oZC5jPTExMzQ9c3RhdGljIHNzaXplX3QgZGlza19hbGlnbm1lbnRfb2Zmc2V0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtMTEzNy17XG5ibG9jay9nZW5oZC5jOjExMzg6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XG5ibG9jay9nZW5oZC5jLTExMzktXG4tLVxuYmxvY2svZ2VuaGQuYz0xMTQzPXN0YXRpYyBzc2l6ZV90IGRpc2tfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYmxvY2svZ2VuaGQuYy0xMTQ2LXtcbmJsb2NrL2dlbmhkLmM6MTE0NzpcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcbmJsb2NrL2dlbmhkLmMtMTE0OC1cbi0tXG5ibG9jay9nZW5oZC5jPTExNTI9c3RhdGljIHNzaXplX3QgZGlza3NlcV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5ibG9jay9nZW5oZC5jLTExNTQte1xuYmxvY2svZ2VuaGQuYzoxMTU1Olx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xuYmxvY2svZ2VuaGQuYy0xMTU2LVxuLS1cbmJsb2NrL2dlbmhkLmM9MTI0MD1zdGF0aWMgdW1vZGVfdCBkaXNrX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBuKVxuLS1cbmJsb2NrL2dlbmhkLmMtMTI0Mi1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCB0eXBlb2YoKmRldiksIGtvYmopO1xuYmxvY2svZ2VuaGQuYzoxMjQzOlx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xuYmxvY2svZ2VuaGQuYy0xMjQ0LVxuLS1cbmJsb2NrL2dlbmhkLmM9MTI4MD1zdGF0aWMgdm9pZCBkaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuYmxvY2svZ2VuaGQuYy0xMjgxLXtcbmJsb2NrL2dlbmhkLmM6MTI4MjpcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcbmJsb2NrL2dlbmhkLmMtMTI4My1cbi0tXG5ibG9jay9nZW5oZC5jPTEzMjQ9c3RhdGljIGludCBibG9ja191ZXZlbnQoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpXG5ibG9jay9nZW5oZC5jLTEzMjUte1xuYmxvY2svZ2VuaGQuYzoxMzI2Olx0Y29uc3Qgc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xuYmxvY2svZ2VuaGQuYy0xMzI3LVxuLS1cbmJsb2NrL2dlbmhkLmM9MTMzNj1zdGF0aWMgY2hhciAqYmxvY2tfZGV2bm9kZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHVtb2RlX3QgKm1vZGUsXG4tLVxuYmxvY2svZ2VuaGQuYy0xMzM4LXtcbmJsb2NrL2dlbmhkLmM6MTMzOTpcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcbmJsb2NrL2dlbmhkLmMtMTM0MC1cbi0tXG5ibG9jay9nZW5oZC5jPTEzNjE9c3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXG5ibG9jay9nZW5oZC5jLTEzNjIte1xuYmxvY2svZ2VuaGQuYzoxMzYzOlx0c3RydWN0IGdlbmRpc2sgKmdwID0gdjtcbmJsb2NrL2dlbmhkLmMtMTM2NC1cdHN0cnVjdCBibG9ja19kZXZpY2UgKmhkO1xuLS1cbmJsb2NrL2dlbmhkLmM9MTQzNz1tb2R1bGVfaW5pdChwcm9jX2dlbmhkX2luaXQpO1xuLS1cbmJsb2NrL2dlbmhkLmMtMTQzOS1cbmJsb2NrL2dlbmhkLmM6MTQ0MDpkZXZfdCBwYXJ0X2RldnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IHBhcnRubylcbmJsb2NrL2dlbmhkLmMtMTQ0MS17XG4tLVxuYmxvY2svZ2VuaGQuYy0xNDUzLVxuYmxvY2svZ2VuaGQuYzoxNDU0OnN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsXG5ibG9jay9nZW5oZC5jLTE0NTUtXHRcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqbGtjbGFzcylcbmJsb2NrL2dlbmhkLmMtMTQ1Ni17XG5ibG9jay9nZW5oZC5jOjE0NTc6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaztcbmJsb2NrL2dlbmhkLmMtMTQ1OC1cbi0tXG5ibG9jay9nZW5oZC5jLTE1MTktXG5ibG9jay9nZW5oZC5jOjE1MjA6c3RydWN0IGdlbmRpc2sgKl9fYmxrX2FsbG9jX2Rpc2soc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBpbnQgbm9kZSxcbmJsb2NrL2dlbmhkLmMtMTUyMS1cdFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxuLS1cbmJsb2NrL2dlbmhkLmMtMTUyNC1cdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xuYmxvY2svZ2VuaGQuYzoxNTI1Olx0c3RydWN0IGdlbmRpc2sgKmRpc2s7XG5ibG9jay9nZW5oZC5jLTE1MjYtXG4tLVxuYmxvY2svZ2VuaGQuYz0xNTM5PUVYUE9SVF9TWU1CT0woX19ibGtfYWxsb2NfZGlzayk7XG4tLVxuYmxvY2svZ2VuaGQuYy0xNTUzLSAqL1xuYmxvY2svZ2VuaGQuYzoxNTU0OnZvaWQgcHV0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9nZW5oZC5jLTE1NTUte1xuLS1cbmJsb2NrL2dlbmhkLmM9MTU1OT1FWFBPUlRfU1lNQk9MKHB1dF9kaXNrKTtcbmJsb2NrL2dlbmhkLmMtMTU2MC1cbmJsb2NrL2dlbmhkLmM6MTU2MTpzdGF0aWMgdm9pZCBzZXRfZGlza19yb191ZXZlbnQoc3RydWN0IGdlbmRpc2sgKmdkLCBpbnQgcm8pXG5ibG9jay9nZW5oZC5jLTE1NjIte1xuLS1cbmJsb2NrL2dlbmhkLmMtMTU3OS0gKi9cbmJsb2NrL2dlbmhkLmM6MTU4MDp2b2lkIHNldF9kaXNrX3JvKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIHJlYWRfb25seSlcbmJsb2NrL2dlbmhkLmMtMTU4MS17XG4tLVxuYmxvY2svZ2VuaGQuYz0xNTkxPUVYUE9SVF9TWU1CT0woc2V0X2Rpc2tfcm8pO1xuYmxvY2svZ2VuaGQuYy0xNTkyLVxuYmxvY2svZ2VuaGQuYzoxNTkzOnZvaWQgaW5jX2Rpc2tzZXEoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9nZW5oZC5jLTE1OTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc4MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYF9fYWxsb2NfZGlza19ub2RlYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBfX2FsbG9jX2Rpc2tfbm9kZWAsIHNwZWNpZmljYWxseSBpbiBgYmxvY2svZ2VuaGQuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZXNlIGRpc2sgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgYXQgYSBsb3cgbGV2ZWwuIFRoaXMgZnVuY3Rpb24gaXMgZnVuZGFtZW50YWwsIG9idmlvdXNseSwgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZGV0YWlscywgZXNwZWNpYWxseSBhbnkgbnVhbmNlcyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLCBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggbW9kZXJuIHN0b3JhZ2UgZGV2aWNlcyBvciBhZHZhbmNlZCBxdWV1ZWluZyBtZWNoYW5pc21zLiBJJiMzOTttIHBhcnRpY3VsYXJseSBjdXJpb3VzIGFib3V0IGhvdyBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIG1lbW9yeSBhbGxvY2F0aW9uLCB0aGUgYXNzaWdubWVudCBvZiBkZXZpY2UgbnVtYmVycywgYW5kIHRoZSBzZXR0aW5nIG9mIGJhc2ljIGF0dHJpYnV0ZXMgbGlrZSB0aGUgbmFtZSBhbmQgbWFqb3IvbWlub3IgbnVtYmVycy4gSXQmIzM5O3MgYWxzbyB3b3J0aCBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBvciBob29rcyB0aGF0IGFyZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbi4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgdXNlZnVsIGNsdWVzIGFib3V0IGhvdHBsdWcgc3VwcG9ydCwgb3IgcGVyaGFwcyBoaW50cyByZWxhdGluZyB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHNoYXJlZCByZXNvdXJjZXMgb24gdGhlIGRpc2suIFVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBgZ2VuZGlza2Agc3RydWN0dXJlIGlzIGJlaW5nIHNldCB1cCBiZWZvcmUgaXQmIzM5O3MgcGFzc2VkIG9mZiBmb3IgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gc3RhcnQgc2Nyb2xsaW5nIHRocm91Z2ggdGhlIGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9nZW5oZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDU0Olx0c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcbjE0NTU6XHRcdFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxuMTQ1NjpcdHtcbjE0NTc6XHRcdHN0cnVjdCBnZW5kaXNrICpkaXNrO1xuMTQ1ODpcdFxuMTQ1OTpcdFx0ZGlzayA9IGt6YWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IGdlbmRpc2spLCBHRlBfS0VSTkVMLCBub2RlX2lkKTtcbjE0NjA6XHRcdGlmICghZGlzaylcbjE0NjE6XHRcdFx0cmV0dXJuIE5VTEw7XG4xNDYyOlx0XG4xNDYzOlx0XHRpZiAoYmlvc2V0X2luaXQoXHUwMDI2ZGlzay1cdTAwM2ViaW9fc3BsaXQsIEJJT19QT09MX1NJWkUsIDAsIDApKVxuMTQ2NDpcdFx0XHRnb3RvIG91dF9mcmVlX2Rpc2s7XG4xNDY1Olx0XG4xNDY2Olx0XHRkaXNrLVx1MDAzZWJkaSA9IGJkaV9hbGxvYyhub2RlX2lkKTtcbjE0Njc6XHRcdGlmICghZGlzay1cdTAwM2ViZGkpXG4xNDY4Olx0XHRcdGdvdG8gb3V0X2ZyZWVfYmlvc2V0O1xuMTQ2OTpcdFxuMTQ3MDpcdFx0LyogYmRldl9hbGxvYygpIG1pZ2h0IG5lZWQgdGhlIHF1ZXVlLCBzZXQgYmVmb3JlIHRoZSBmaXJzdCBjYWxsICovXG4xNDcxOlx0XHRkaXNrLVx1MDAzZXF1ZXVlID0gcTtcbjE0NzI6XHRcbjE0NzM6XHRcdGRpc2stXHUwMDNlcGFydDAgPSBiZGV2X2FsbG9jKGRpc2ssIDApO1xuMTQ3NDpcdFx0aWYgKCFkaXNrLVx1MDAzZXBhcnQwKVxuMTQ3NTpcdFx0XHRnb3RvIG91dF9mcmVlX2JkaTtcbjE0NzY6XHRcbjE0Nzc6XHRcdGRpc2stXHUwMDNlbm9kZV9pZCA9IG5vZGVfaWQ7XG4xNDc4Olx0XHRtdXRleF9pbml0KFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4xNDc5Olx0XHR4YV9pbml0KFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwpO1xuMTQ4MDpcdFx0aWYgKHhhX2luc2VydChcdTAwMjZkaXNrLVx1MDAzZXBhcnRfdGJsLCAwLCBkaXNrLVx1MDAzZXBhcnQwLCBHRlBfS0VSTkVMKSlcbjE0ODE6XHRcdFx0Z290byBvdXRfZGVzdHJveV9wYXJ0X3RibDtcbjE0ODI6XHRcbjE0ODM6XHRcdGlmIChibGtjZ19pbml0X2Rpc2soZGlzaykpXG4xNDg0Olx0XHRcdGdvdG8gb3V0X2VyYXNlX3BhcnQwO1xuMTQ4NTpcdFxuMTQ4NjpcdFx0ZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuMTQ4NzpcdFx0cmFuZF9pbml0aWFsaXplX2Rpc2soZGlzayk7XG4xNDg4Olx0XHRkaXNrX3RvX2RldihkaXNrKS1cdTAwM2VjbGFzcyA9IFx1MDAyNmJsb2NrX2NsYXNzO1xuMTQ4OTpcdFx0ZGlza190b19kZXYoZGlzayktXHUwMDNldHlwZSA9IFx1MDAyNmRpc2tfdHlwZTtcbjE0OTA6XHRcdGRldmljZV9pbml0aWFsaXplKGRpc2tfdG9fZGV2KGRpc2spKTtcbjE0OTE6XHRcdGluY19kaXNrc2VxKGRpc2spO1xuMTQ5MjpcdFx0cS1cdTAwM2VkaXNrID0gZGlzaztcbjE0OTM6XHRcdGxvY2tkZXBfaW5pdF9tYXAoXHUwMDI2ZGlzay1cdTAwM2Vsb2NrZGVwX21hcCwgXCYjMzQ7KGJpbyBjb21wbGV0aW9uKVwmIzM0OywgbGtjbGFzcywgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzM0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCB3aXRoaW4gdGhlIEtlcm5lbCYjMzk7cyBEaXNrIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBnZW5kaXNrYCBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCBoYW5kbGVzIHdyaXRlIHN0cmVhbXMuIEkga25vdyB0aGF0IGBremFsbG9jX25vZGVgIGlzIHVzZWQgZm9yIGFsbG9jYXRpb24sIG1lYW5pbmcgdGhhdCBgZGlzay0mZ3Q7d3JpdGVfc3RyZWFtc19yZXNlcnZlZGAgZ2V0cyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFuZCBpdCYjMzk7cyBhIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGBiaW9fd3JpdGVfc3RyZWFtYCBhbmQgaG93IHRoZSBrZXJuZWwgYWN0dWFsbHkgdXRpbGl6ZXMgaXQuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBhIGNvbm5lY3Rpb24gdG8gY29uY3VycmVuY3kgb3IgcGVyaGFwcyBJL08gcHJpb3JpdGl6YXRpb24uIFRpbWUgdG8gZ2V0IHNvbWUgYW5zd2Vycy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIChvciBteSBwcmVmZXJyZWQgdG9vbCkgdG8gcGlucG9pbnQgd2hlcmUgYGJpX3dyaXRlX3N0cmVhbWAgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgYW5kIGhvdyBgYmRldl9tYXhfd3JpdGVfc3RyZWFtc2AgZmlndXJlcyBpbnRvIGFsbCBvZiB0aGlzLiBUaGlzIGlzIHRoZSBrZXkuIFRob3NlIHR3byBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyB0byB1bmRlcnN0YW5kIHRoZSByZXNlcnZhdGlvbiBhbmQgdXNhZ2UgcGF0dGVybnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaV93cml0ZV9zdHJlYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MjE3PXZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvX3ZlYyAqdGFibGUsXG4tLVxuYmxvY2svYmlvLmMtMjI1LVx0YmlvLVx1MDAzZWJpX3dyaXRlX2hpbnQgPSAwO1xuYmxvY2svYmlvLmM6MjI2Olx0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IDA7XG5ibG9jay9iaW8uYy0yMjctXHRiaW8tXHUwMDNlYmlfc3RhdHVzID0gMDtcbi0tXG5ibG9jay9iaW8uYz04NTY9c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcbi0tXG5ibG9jay9iaW8uYy04NjAtXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfaGludDtcbmJsb2NrL2Jpby5jOjg2MTpcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBiaW9fc3JjLVx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcbmJsb2NrL2Jpby5jLTg2Mi1cdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbi0tXG5ibG9jay9ibGstY29yZS5jPTYyMj1zdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1jb3JlLmMtNjMzLVx0fVxuYmxvY2svYmxrLWNvcmUuYzo2MzQ6XHRpZiAoYmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSBcdTAwMjZcdTAwMjYgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFKSB7XG5ibG9jay9ibGstY29yZS5jOjYzNTpcdFx0aWYgKHVubGlrZWx5KGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gXHUwMDNlIHAtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcykpXG5ibG9jay9ibGstY29yZS5jLTYzNi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmJsb2NrL2Jsay1jb3JlLmMtNjM3LVxuYmxvY2svYmxrLWNvcmUuYzo2Mzg6XHRcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxuYmxvY2svYmxrLWNvcmUuYzo2Mzk6XHRcdFx0cC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2Jpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gLSAxXTtcbmJsb2NrL2Jsay1jb3JlLmMtNjQwLVx0fVxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xODctXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludFx0PSBiaW9fc3JjLVx1MDAzZWJpX3dyaXRlX2hpbnQ7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MTg4Olx0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbVx0PSBiaW9fc3JjLVx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xODktXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3JcdD0gYmlvX3NyYy1cdTAwM2ViaV9pdGVyLmJpX3NlY3Rvcjtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz03NzQ9c3RhdGljIHN0cnVjdCByZXF1ZXN0ICphdHRlbXB0X21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTc4NC1cdFx0cmV0dXJuIE5VTEw7XG5ibG9jay9ibGstbWVyZ2UuYzo3ODU6XHRpZiAocmVxLVx1MDAzZWJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gIT0gbmV4dC1cdTAwM2ViaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtKVxuYmxvY2svYmxrLW1lcmdlLmMtNzg2LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz04OTU9Ym9vbCBibGtfcnFfbWVyZ2Vfb2soc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtOTEwLVx0XHRyZXR1cm4gZmFsc2U7XG5ibG9jay9ibGstbWVyZ2UuYzo5MTE6XHRpZiAocnEtXHUwMDNlYmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSAhPSBiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtKVxuYmxvY2svYmxrLW1lcmdlLmMtOTEyLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYmxvY2svZm9wcy5jPTU1PXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmJsb2NrL2ZvcHMuYy04MS1cdGJpby5iaV93cml0ZV9oaW50ID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApLVx1MDAzZWlfd3JpdGVfaGludDtcbmJsb2NrL2ZvcHMuYzo4MjpcdGJpby5iaV93cml0ZV9zdHJlYW0gPSBpb2NiLVx1MDAzZWtpX3dyaXRlX3N0cmVhbTtcbmJsb2NrL2ZvcHMuYy04My1cdGJpby5iaV9pb3ByaW8gPSBpb2NiLVx1MDAzZWtpX2lvcHJpbztcbi0tXG5ibG9jay9mb3BzLmM9MTc1PXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5ibG9jay9mb3BzLmMtMjEzLVx0XHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKS1cdTAwM2VpX3dyaXRlX2hpbnQ7XG5ibG9jay9mb3BzLmM6MjE0Olx0XHRiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gaW9jYi1cdTAwM2VraV93cml0ZV9zdHJlYW07XG5ibG9jay9mb3BzLmMtMjE1LVx0XHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IGRpbztcbi0tXG5ibG9jay9mb3BzLmM9MzIyPXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19hc3luYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuYmxvY2svZm9wcy5jLTM0MC1cdGJpby1cdTAwM2ViaV93cml0ZV9oaW50ID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApLVx1MDAzZWlfd3JpdGVfaGludDtcbmJsb2NrL2ZvcHMuYzozNDE6XHRiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gaW9jYi1cdTAwM2VraV93cml0ZV9zdHJlYW07XG5ibG9jay9mb3BzLmMtMzQyLVx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGJsa2Rldl9iaW9fZW5kX2lvX2FzeW5jO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGJkZXZfbWF4X3dyaXRlX3N0cmVhbXNgIFVzYWdlIEFjcm9zcyB0aGUgS2VybmVsKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYGJkZXZfbWF4X3dyaXRlX3N0cmVhbXNgIGlzIGFjdHVhbGx5ICp1c2VkKiB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyBpdHMgY2FsbGVycy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dHMgd2hlcmUgaXRzIHZhbHVlIGlzIGJlaW5nIHNldCwgcmVhZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksICphY3RlZCB1cG9uKiBpcyBjcml0aWNhbC4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGlmIHdlIHdlcmUgdG8gYWRqdXN0IGl0LCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGluZm9ybSBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcy4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBmaW5kaW5nIHRoZSBmdW5jdGlvbnMgdGhhdCAqY2FsbCogaXQ7IEkmIzM5O20gYWZ0ZXIgdGhlICpzZW1hbnRpY3MqIG9mIHRob3NlIGNhbGxzLiBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRob3NlIHJlYWRzIGFuZCB3cml0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyB3aGVyZSB0aGUgY3VycmVudCB2YWx1ZSBtaWdodCBiZSBvdmVybHkgY29uc2VydmF0aXZlIG9yLCBjb252ZXJzZWx5LCB0b28gYWdncmVzc2l2ZT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBwYXR0ZXJucyB0byBlbWVyZ2UsIHBlcmhhcHMgcmV2ZWFsaW5nIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHJpcGUgZm9yIHR1bmluZy4gSSYjMzk7bGwgYmUga2VlcGluZyBhIGtlZW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoIHJlc3BlY3QgdG8gY29uY3VycmVuY3kgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoaXMgYW5hbHlzaXMgaXMgZnVuZGFtZW50YWwgYmVmb3JlIEkgY29uc2lkZXIgY2hhbmdlcyB0byB0aGUgc2V0dGluZyYjMzk7cyB2YWx1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmRldl9tYXhfd3JpdGVfc3RyZWFtcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9mb3BzLmM9Mzk0PXN0YXRpYyBzc2l6ZV90IGJsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuYmxvY2svZm9wcy5jLTQwNS1cdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSkge1xuYmxvY2svZm9wcy5jOjQwNjpcdFx0dTE2IG1heF93cml0ZV9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcbmJsb2NrL2ZvcHMuYy00MDctXG4tLVxuZnMvZjJmcy9maWxlLmM9NTQ2ND1zdGF0aWMgYm9vbCBmMmZzX3ZhbGlkX3dyaXRlX3N0cmVhbShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHU4IHdyaXRlX3N0cmVhbSlcbi0tXG5mcy9mMmZzL2ZpbGUuYy01NDcwLVx0aWYgKCFmMmZzX2lzX211bHRpX2RldmljZShzYmkpKVxuZnMvZjJmcy9maWxlLmM6NTQ3MTpcdFx0cmV0dXJuIHdyaXRlX3N0cmVhbSBcdTAwM2M9IGJkZXZfbWF4X3dyaXRlX3N0cmVhbXMoc2JpLVx1MDAzZXNiLVx1MDAzZXNfYmRldik7XG5mcy9mMmZzL2ZpbGUuYy01NDcyLVxuZnMvZjJmcy9maWxlLmMtNTQ3My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNiaS1cdTAwM2VzX25kZXZzOyBpJiM0MzsmIzQzOylcbmZzL2YyZnMvZmlsZS5jOjU0NzQ6XHRcdGlmICh3cml0ZV9zdHJlYW0gXHUwMDNlIGJkZXZfbWF4X3dyaXRlX3N0cmVhbXMoRkRFVihpKS5iZGV2KSlcbmZzL2YyZnMvZmlsZS5jLTU0NzUtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL2YyZnMvc2VnbWVudC5jPTM3NDI9dTggZjJmc19pb190eXBlX3RvX3dyaXRlX3N0cmVhbShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmZzL2YyZnMvc2VnbWVudC5jLTM3NDQte1xuZnMvZjJmcy9zZWdtZW50LmM6Mzc0NTpcdHVuc2lnbmVkIHNob3J0IG5yID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcbmZzL2YyZnMvc2VnbWVudC5jLTM3NDYtXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMzAwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJkZXZfbWF4X3NlZ21lbnRzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMzA0LVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxMzA1OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMzA2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgRmlsZXN5c3RlbSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYSBmaWxlc3lzdGVtIGlzc3VlLCBhbmQgbXkgaW50dWl0aW9uIGlzIGxlYWRpbmcgbWUgdG8gdGhlIGBibG9jay9mb3BzLmNgIGZpbGUuIFRoaXMgc2VlbXMgbGlrZSBhIGxpa2VseSBsb2NhdGlvbiBmb3Igc29tZSBjb3JlIGJsb2NrIGRldmljZSBmaWxlIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGxpbmUgNDA1IG1pZ2h0IGhvbGQgc29tZSBjbHVlIOKAkyBwZXJoYXBzIGEgY3J1Y2lhbCBmdW5jdGlvbiBjYWxsLCBhIHBvdGVudGlhbCBlcnJvciBjaGVjaywgb3Igc29tZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24uIExldCBtZSB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgcmVsYXRlZCB0byB0aGUgY3VycmVudCBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2ZvcHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XHRcdHJldHVybiAwO1xuIDQwMTpcdFxuIDQwMjpcdFx0aWYgKGJsa2Rldl9kaW9faW52YWxpZChiZGV2LCBpb2NiLCBpdGVyKSlcbiA0MDM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDA0Olx0XG4gNDA1Olx0XHRpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUpIHtcbiA0MDY6XHRcdFx0dTE2IG1heF93cml0ZV9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcbiA0MDc6XHRcbiA0MDg6XHRcdFx0aWYgKGlvY2ItXHUwMDNla2lfd3JpdGVfc3RyZWFtKSB7XG4gNDA5Olx0XHRcdFx0aWYgKGlvY2ItXHUwMDNla2lfd3JpdGVfc3RyZWFtIFx1MDAzZSBtYXhfd3JpdGVfc3RyZWFtcylcbiA0MTA6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQxMTpcdFx0XHR9IGVsc2UgaWYgKG1heF93cml0ZV9zdHJlYW1zKSB7XG4gNDEyOlx0XHRcdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQgPVxuIDQxMzpcdFx0XHRcdFx0ZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApLVx1MDAzZWlfd3JpdGVfaGludDtcbiA0MTQ6XHRcbiA0MTU6XHRcdFx0XHQvKlxuIDQxNjpcdFx0XHRcdCAqIEp1c3QgdXNlIHRoZSB3cml0ZSBoaW50IGFzIHdyaXRlIHN0cmVhbSBmb3IgYmxvY2tcbiA0MTc6XHRcdFx0XHQgKiBkZXZpY2Ugd3JpdGVzLiAgVGhpcyBhc3N1bWVzIG5vIGZpbGUgc3lzdGVtIGlzXG4gNDE4Olx0XHRcdFx0ICogbW91bnRlZCB0aGF0IHdvdWxkIHVzZSB0aGUgc3RyZWFtcyBkaWZmZXJlbnRseS5cbiA0MTk6XHRcdFx0XHQgKi9cbiA0MjA6XHRcdFx0XHRpZiAod3JpdGVfaGludCBcdTAwM2M9IG1heF93cml0ZV9zdHJlYW1zKVxuIDQyMTpcdFx0XHRcdFx0aW9jYi1cdTAwM2VraV93cml0ZV9zdHJlYW0gPSB3cml0ZV9oaW50O1xuIDQyMjpcdFx0XHR9XG4gNDIzOlx0XHR9XG4gNDI0Olx0XG4gNDI1Olx0XHRucl9wYWdlcyA9IGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MgJiM0MzsgMSk7XG4gNDI2Olx0XHRpZiAobGlrZWx5KG5yX3BhZ2VzIFx1MDAzYz0gQklPX01BWF9WRUNTIFx1MDAyNlx1MDAyNlxuIDQyNzpcdFx0XHQgICAhKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfSEFTX01FVEFEQVRBKSkpIHtcbiA0Mjg6XHRcdFx0aWYgKGlzX3N5bmNfa2lvY2IoaW9jYikpXG4gNDI5Olx0XHRcdFx0cmV0dXJuIF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoaW9jYiwgaXRlciwgYmRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NzIKCQkJCQkJCW91dHB1dDogMzUxCgkJCQkJCQl0aG91Z2h0czogMTU5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiBXcml0ZSBTdHJlYW1zIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLiBUaGUgcGF0Y2ggc2VlbXMgdG8gaW1wbGVtZW50IHNvbWUgZm9ybSBvZiB3cml0ZSBzdHJlYW0gc3VwcG9ydCwgbGlrZWx5IGZvciBlbmhhbmNlZCBJL08gbWFuYWdlbWVudCBhdCB0aGUgYmxvY2sgZGV2aWNlIGxldmVsLiBTcGVjaWZpY2FsbHk6CgoxLiAgV2UmIzM5O3JlIGRvY3VtZW50aW5nIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSwgYC9zeXMvYmxvY2svJmx0O2Rpc2smZ3Q7LyZsdDtwYXJ0aXRpb24mZ3Q7L3dyaXRlX3N0cmVhbXNgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCjIuICBgYmRldi5jYCBpcyBnZXR0aW5nIGEgYGtmcmVlYCBmb3IgdGhlIGBiZF93cml0ZV9zdHJlYW1fbWFwYCBpbiBgYmRldl9mcmVlX2lub2RlYCwgd2hpY2ggdGVsbHMgbWUgdGhpcyBtYXAgaXMgYWxsb2NhdGVkIHNvbWV3aGVyZS4KMy4gIGBibGstY29yZS5jYCBoYXMgYSBwYXJ0aXRpb24gcmVtYXAgZnVuY3Rpb24gdGhhdCBjaGVja3MgYW5kICp1c2VzKiBgYmlvLSZndDtiaV93cml0ZV9zdHJlYW1gIGFnYWluc3QgYHAtJmd0O2JkX25yX3dyaXRlX3N0cmVhbXNgLCBhbmQgdGhlbiBsb29rcyB1cCB0aGUgcmVtYXBwZWQgc3RyZWFtIGZyb20gYSBgYmRfd3JpdGVfc3RyZWFtX21hcGAuIFRoaXMgaXMgY3JpdGljYWwsIGFzIGl0JiMzOTtzIHdoZXJlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGFjY2Vzc2VkLgo0LiAgYGNvcmUuY2AgYWRkcyBzeXNmcyBhdHRyaWJ1dGVzIGZvciB0aGUgd3JpdGUgc3RyZWFtcywgd2l0aCBmdW5jdGlvbnMgdG8gc2hvdyB0aGUgbnVtYmVyIG9mIHN0cmVhbXMgKGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2ApLCBjbGVhciByZXNlcnZlZCBiaXRzLCBzZXQgdGhlIG1hcCBhbmQgcmVzZXJ2ZSBzdHJlYW1zLCBhbmQgc3RvcmUgdGhlIG51bWJlciBvZiBzdHJlYW1zLiBBbmQsIGltcG9ydGFudGx5LCB0aGUgZHJvcCBwYXJ0aXRpb24gY29kZSBjbGVhbnMgdXAgb3VyIHN0cmVhbXMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gaGFwcGVucy4KNS4gIFRoZXJlIGFyZSBjaGFuZ2VzIHRvIGBibGtfdHlwZXMuaGAgYW5kIGBibGtkZXYuaGAgYWRkaW5nIHRoZSBuZWNlc3NhcnkgZmllbGRzIHRvIHRoZSBgYmxvY2tfZGV2aWNlYCBhbmQgYGdlbmRpc2tgIHN0cnVjdHMuIFNwZWNpZmljYWxseSwgYGJkX25yX3dyaXRlX3N0cmVhbXNgIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgaW4gdGhlIGBibG9ja19kZXZpY2VgIHN0cnVjdCwgYW5kIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBpbiB0aGUgYGdlbmRpc2tgIHN0cnVjdC4KCk5vdywgbGV0JiMzOTtzIHB1dCBvbiB0aGUgS01TQU4gaGF0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcy4KCiogICAqKkNyaXRlcmlvbiAxOioqICBLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/IFRoZSBzeXNmcyBvdXRwdXQgaXMgdGhlIG9ubHkgdGhpbmcgZXhwb3NlZCwgc3BlY2lmaWNhbGx5IGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AuIEl0IHVzZXMgYHN5c2ZzX2VtaXRgIHdpdGggYSBmb3JtYXR0ZWQgc3RyaW5nIGFuZCBgJXVgICh3aGljaCBpcyBzYWZlKSwgc28gbm8gcmF3IHN0cnVjdHVyZSBkYXRhIGlzIGNvcGllZC4gTm8gcHJvYmxlbXMgaGVyZS4KKiAgICoqQ3JpdGVyaW9uIDI6KiogQ29uZGl0aW9uYWwgbG9naWMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhPyBXZSYjMzk7dmUgZ290IGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgLiBIb3dldmVyLCBgYmRldmAgaXMgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLCBhbmQgYGdlbmRpc2tgIGlzIHplcm8gYWxsb2NhdGVkLiBJbiBgcGFydF9zZXRfd3JpdGVfc3RyZWFtc2AsIHRoZSBtYXAgaXMgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgLCBhbmQgdGhlbiB3ZSBsb29wIGZpbGxpbmcgdGhlIGRhdGEuIFRoaXMgbWVhbnMgYWxsIGJ5dGVzIGFyZSB3cml0dGVuIGJlZm9yZSBiZWluZyB1c2VkLiBJbiBgYmxrX3BhcnRpdGlvbl9yZW1hcGAsIGBiaW8tJmd0O2JpX3dyaXRlX3N0cmVhbWAgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSB2YWxpZCByYW5nZSBhbmQgdGhlbiBpbmRleGVkIGludG8gdGhlIG1hcCB3aGljaCBpcyAqZnVsbHkqIGluaXRpYWxpemVkLiBUaGlzIGNoZWNrcyBvdXQuCiogICAqKkNyaXRlcmlvbiAzOioqIEFsbG9jYXRpb25zIGFuZCBpbml0aWFsaXphdGlvbnMuICBUaGUgc3RydWN0dXJlcyBgYmRldmAgYW5kIGBnZW5kaXNrYCBhcmUgZWl0aGVyIHplcm9lZCwgb3IgYWxsb2NhdGVkIGFuZCAqZnVsbHkqIHBvcHVsYXRlZCBiZWZvcmUgdXNlLiBObyBpc3N1ZS4KKiAgICoqQ3JpdGVyaW9uIDQ6KiogQm91bmRzIGNoZWNrcyBhbmQgbGVuZ3Rocy4gV2UmIzM5O3JlIG5vdyByZXR1cm5pbmcgdGhlIGFjdHVhbCBudW1iZXIgb2Ygd3JpdGUgc3RyZWFtcywgYW5kIHRoZXNlIGNoZWNrcyBhcmUgaGFwcGVuaW5nLCBidXQgd2UmIzM5O3JlIG9ubHkgcmV0dXJuaW5nIGZ1bGx5IGluaXRpYWxpemVkIGRhdGEsIGFuZCBib3VuZHMgYXJlIGNoZWNrZWQgcHJvcGVybHkuIFNvIHRoZSBjaGVja3MgYWdhaW5zdCB0aGVzZSB2YWx1ZXMgaXMgZmluZSwgc2luY2UgdGhlIHZhbHVlcyBhcmUgc2V0IGJlZm9yZSB0aGUgY2hlY2tzLgoKT2theSwgYXJlIHRoZXJlICpvdGhlciogaXNzdWVzPyBTdGFuZGFyZCBtZW1vcnkgc2FmZXR5PyBTdXJlLCBvdXQtb2YtYm91bmRzIGFjY2VzcywgVUFGIG9uIHRoZSBtYXAsIGNvbmN1cnJlbmN5IHByb2JsZW1zIGNvdWxkIGJlIHRoZXJlLiBCdXQgdGhvc2UgYXJlIHN0YW5kYXJkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIFVCU2FuIHdvdWxkIGhhbmRsZS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4KCkxvb2tpbmcgYXQgaXQgY2xvc2VseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MsIGFuZCBhbGwgYWxsb2NhdGlvbnMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEV2ZXJ5IGJ5dGUgd3JpdHRlbiBpcyBpbml0aWFsaXplZC4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBLTVNBTiBjb25jZXJucy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGF0Y2guCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2s6CiogICBNYWtlIHN1cmUgd2UgY2hlY2sgYWxsIHRoZSBmaWVsZHM6IGBiZGV2LSZndDtiZF9ucl93cml0ZV9zdHJlYW1zYCwgYGJkZXYtJmd0O2JkX3dyaXRlX3N0cmVhbV9tYXBgLCBhbmQgYGRpc2stJmd0O3dyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRgLgoqICAgQ2hlY2sgdGhlIHBhdGhzIGZvciBzeXNmcyBzaG93IGFuZCBzdG9yZSwgcGFydGl0aW9uIHJlbWFwLCBhbmQgYmRldiBmcmVlLgoKSSYjMzk7bSBjb25maWRlbnQuIFRoZSByZWFzb25pbmcgc2VlbXMgc291bmQuIE5vIEtNU0FOLiBMZXQmIzM5O3Mgc2VuZCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzeXNmcyBjb25maWd1cmF0aW9uIGFuZCBibG9jayBsYXllciByZW1hcHBpbmcgZm9yIHdyaXRlIHN0cmVhbXMgb24gcGFydGl0aW9uIGJsb2NrIGRldmljZXMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjpcbi0gSW5vZGVzL2JkZXZzIGFyZSBhbGxvY2F0ZWQgdmlhIGBiZGV2X2FsbG9jX2lub2RlYCB3aGljaCBleHBsaWNpdGx5IHplcm9lcyB0aGUgYHN0cnVjdCBibG9ja19kZXZpY2VgIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIHN0YXJ0IGF0IHplcm8vTlVMTC5cbi0gYHN0cnVjdCBnZW5kaXNrYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAsIGVuc3VyaW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBiaXRtYXAgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cbi0gV2hlbiBgbWFwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jYCBpbiBgcGFydF9zZXRfd3JpdGVfc3RyZWFtcygpYCwgZXZlcnkgZWxlbWVudCBpbiBgbWFwWzAgLi4gbnItMV1gIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYWNyb3NzIHRoZSBsb29wIGJyYW5jaGVzIGJlZm9yZSBzd2FwcGluZyBpbnRvIGBiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLlxuXG4yLiBVc2VyIFNwYWNlIENvbW11bmljYXRpb246XG4tIFRoZSBvbmx5IGludGVyZmFjZSBleHBvc2luZyBkYXRhIHRvIHVzZXJzcGFjZSBpcyBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCB3aGljaCB1c2VzIGBzeXNmc19lbWl0KClgIHRvIGZvcm1hdCB0aGUgaW50ZWdlciBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgaW50byBhIHN0cmluZy4gTm8gYmluYXJ5IHN0cnVjdHVyZXMgb3IgcGFkZGVkIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuXG4zLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBvciBtZW1vcnkgbGVha3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy5cbi0gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzeXNmcyBjb25maWd1cmF0aW9uIGFuZCBibG9jayBsYXllciByZW1hcHBpbmcgZm9yIHdyaXRlIHN0cmVhbXMgb24gcGFydGl0aW9uIGJsb2NrIGRldmljZXMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjpcbi0gSW5vZGVzL2JkZXZzIGFyZSBhbGxvY2F0ZWQgdmlhIGBiZGV2X2FsbG9jX2lub2RlYCB3aGljaCBleHBsaWNpdGx5IHplcm9lcyB0aGUgYHN0cnVjdCBibG9ja19kZXZpY2VgIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIHN0YXJ0IGF0IHplcm8vTlVMTC5cbi0gYHN0cnVjdCBnZW5kaXNrYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAsIGVuc3VyaW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBiaXRtYXAgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cbi0gV2hlbiBgbWFwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jYCBpbiBgcGFydF9zZXRfd3JpdGVfc3RyZWFtcygpYCwgZXZlcnkgZWxlbWVudCBpbiBgbWFwWzAgLi4gbnItMV1gIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYWNyb3NzIHRoZSBsb29wIGJyYW5jaGVzIGJlZm9yZSBzd2FwcGluZyBpbnRvIGBiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLlxuXG4yLiBVc2VyIFNwYWNlIENvbW11bmljYXRpb246XG4tIFRoZSBvbmx5IGludGVyZmFjZSBleHBvc2luZyBkYXRhIHRvIHVzZXJzcGFjZSBpcyBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCB3aGljaCB1c2VzIGBzeXNmc19lbWl0KClgIHRvIGZvcm1hdCB0aGUgaW50ZWdlciBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgaW50byBhIHN0cmluZy4gTm8gYmluYXJ5IHN0cnVjdHVyZXMgb3IgcGFkZGVkIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuXG4zLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBvciBtZW1vcnkgbGVha3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy5cbi0gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0Njo1NS4yOTE3NzQ2ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUwMjA1NzY2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVcIixcbiAgICBcInBhcnRfc2V0X3dyaXRlX3N0cmVhbXNcIixcbiAgICBcInBhcnRfd3JpdGVfc3RyZWFtc19zaG93XCIsXG4gICAgXCJwYXJ0X3B1dF93cml0ZV9zdHJlYW1zXCIsXG4gICAgXCJibGtfcGFydGl0aW9uX3JlbWFwXCIsXG4gICAgXCJkcm9wX3BhcnRpdGlvblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzeXNmcyBjb25maWd1cmF0aW9uIGFuZCBibG9jayBsYXllciByZW1hcHBpbmcgZm9yIHdyaXRlIHN0cmVhbXMgb24gcGFydGl0aW9uIGJsb2NrIGRldmljZXMuXFxuXFxuMS4gTWVtb3J5IEluaXRpYWxpemF0aW9uOlxcbi0gSW5vZGVzL2JkZXZzIGFyZSBhbGxvY2F0ZWQgdmlhIGBiZGV2X2FsbG9jX2lub2RlYCB3aGljaCBleHBsaWNpdGx5IHplcm9lcyB0aGUgYHN0cnVjdCBibG9ja19kZXZpY2VgIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIHN0YXJ0IGF0IHplcm8vTlVMTC5cXG4tIGBzdHJ1Y3QgZ2VuZGlza2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX25vZGVgLCBlbnN1cmluZyBgd3JpdGVfc3RyZWFtc19yZXNlcnZlZGAgYml0bWFwIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuLSBXaGVuIGBtYXBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIGluIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKClgLCBldmVyeSBlbGVtZW50IGluIGBtYXBbMCAuLiBuci0xXWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhY3Jvc3MgdGhlIGxvb3AgYnJhbmNoZXMgYmVmb3JlIHN3YXBwaW5nIGludG8gYGJkZXYtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLlxcblxcbjIuIFVzZXIgU3BhY2UgQ29tbXVuaWNhdGlvbjpcXG4tIFRoZSBvbmx5IGludGVyZmFjZSBleHBvc2luZyBkYXRhIHRvIHVzZXJzcGFjZSBpcyBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCB3aGljaCB1c2VzIGBzeXNmc19lbWl0KClgIHRvIGZvcm1hdCB0aGUgaW50ZWdlciBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgaW50byBhIHN0cmluZy4gTm8gYmluYXJ5IHN0cnVjdHVyZXMgb3IgcGFkZGVkIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcbjMuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBvciBtZW1vcnkgbGVha3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy5cXG4tIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hlcywgb3Iga2VybmVsIGluZm8tbGVha3MgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHdyaXRlIHN0cmVhbSByZXNlcnZhdGlvbiBhbmQgcmVtYXBwaW5nIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSBwYXJ0aXRpb25zLiBJdCBhZGRzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSAod3JpdGVfc3RyZWFtcykgdG8gcGFydGl0aW9ucywgaW1wbGVtZW50cyBzdHJlYW0gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gdHJhY2tpbmcgb24gdGhlIHVuZGVybHlpbmcgZGlzaywgYW5kIHVwZGF0ZXMgYmlvIHBhcnRpdGlvbiByZW1hcHBpbmcgdG8gbWFwIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW1zIHRvIGRpc2sgd3JpdGUgc3RyZWFtcy4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ2OjU1LjI5MTc3OTIxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDQ1NjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxM2Q2ZjZkNjhjZmM0NTRmZmIwMmUwOThjMzFmNmZlNzk1MGUyNjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDc6NDY6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrXFxuaW5kZXggOTAwYjNmYzRjNzJkMC4uNDQyZjRjMjIxYmRlYSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2tcXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2tcXG5AQCAtMjE4LDYgKzIxOCwyNSBAQCBEZXNjcmlwdGlvbjpcXG4gXFx0XFx0c2FtZSBhcyB0aGUgZm9ybWF0IG9mIC9zeXMvYmxvY2svXFx1MDAzY2Rpc2tcXHUwMDNlL3N0YXQuXFxuIFxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2Jsb2NrL1xcdTAwM2NkaXNrXFx1MDAzZS9cXHUwMDNjcGFydGl0aW9uXFx1MDAzZS93cml0ZV9zdHJlYW1zXFxuK0RhdGU6XFx0XFx0U2VwdGVtYmVyIDIwMjZcXG4rQ29udGFjdDpcXHRLZW9zZW9uZyBQYXJrIFxcdTAwM2NrZW9zdW5nLnBhcmtAc2Ftc3VuZy5jb21cXHUwMDNlXFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHRbUlddIE51bWJlciBvZiB0aGUgZGlzaydzIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZVxcbitcXHRcXHRwYXJ0aXRpb24uIFdyaXRpbmcgTiByZXNlcnZlcyBOIGRpc2sgd3JpdGUgc3RyZWFtcyB0aGF0IG5vXFxuK1xcdFxcdG90aGVyIHBhcnRpdGlvbiBjYW4gdXNlIGFuZCBleHBvc2VzIHRoZW0gYXMgdGhlIHBhcnRpdGlvbidzXFxuK1xcdFxcdHdyaXRlIHN0cmVhbXMgMSB0byBOLiBXcml0aW5nIDAgZ2l2ZXMgdGhlbSBiYWNrLiBBdCBtb3N0XFxuK1xcdFxcdC9zeXMvYmxvY2svXFx1MDAzY2Rpc2tcXHUwMDNlL3F1ZXVlL21heF93cml0ZV9zdHJlYW1zIHN0cmVhbXMsIGFuZCBuZXZlclxcbitcXHRcXHRtb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhblxcbitcXHRcXHRvbmx5IGJlIGNoYW5nZWQgd2hpbGUgdGhlIHBhcnRpdGlvbiBpcyBub3Qgb3BlbiwgYW5kIGEgY2hhbmdlXFxuK1xcdFxcdGtlZXBzIHRoZSBzdHJlYW0gbnVtYmVycyB0aGF0IHN1cnZpdmUgaXQgcG9pbnRpbmcgYXQgdGhlIHNhbWVcXG4rXFx0XFx0ZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3NcXG4rXFx0XFx0cmVzZXJ2ZWQgaGVyZSwgYW5kIHRoZSByZXNlcnZhdGlvbiBpcyBsb3N0IHdoZW4gdGhlIHBhcnRpdGlvblxcbitcXHRcXHRpcyByZW1vdmVkLCBpbmNsdWRpbmcgYnkgYSBwYXJ0aXRpb24gdGFibGUgcmVzY2FuLiBJL08gdG9cXG4rXFx0XFx0dGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdFxcbitcXHRcXHRjYW4gd3JpdGUgdG8gYW55IHNlY3RvciBvZiBhIHBhcnRpdGlvbi5cXG4rXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMvYmxvY2svXFx1MDAzY2Rpc2tcXHUwMDNlL3F1ZXVlL2FkZF9yYW5kb21cXG4gRGF0ZTpcXHRcXHRKdW5lIDIwMTBcXG4gQ29udGFjdDpcXHRsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5vcmdcXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXFxuaW5kZXggY2Q4MzIzMDgzNzQwNi4uNzMwNmE0ZWYwYTg2NyAxMDA2NDRcXG4tLS0gYS9ibG9jay9iZGV2LmNcXG4rKysgYi9ibG9jay9iZGV2LmNcXG5AQCAtNDM4LDYgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIGJkZXZfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXG4gXFx0ZnJlZV9wZXJjcHUoYmRldi1cXHUwMDNlYmRfc3RhdHMpO1xcbiBcXHRrZnJlZShiZGV2LVxcdTAwM2ViZF9tZXRhX2luZm8pO1xcbitcXHRrZnJlZShiZGV2LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwKTtcXG4gXFx0c2VjdXJpdHlfYmRldl9mcmVlKGJkZXYpO1xcbiBcXG4gXFx0aWYgKCFiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSkge1xcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xcbmluZGV4IDE5NmJjY2YyN2Y1OGQuLjNiNmYwOWIzOTQzZjQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xcbisrKyBiL2Jsb2NrL2Jsay1jb3JlLmNcXG5AQCAtNjE2LDcgKzYxNiw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJpb19jaGVja19lb2Qoc3RydWN0IGJpbyAqYmlvKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBSZW1hcCBibG9jayBuIG9mIHBhcnRpdGlvbiBwIHRvIGJsb2NrIG4rc3RhcnQocCkgb2YgdGhlIGRpc2suXFxuKyAqIFJlbWFwIGJsb2NrIG4gb2YgcGFydGl0aW9uIHAgdG8gYmxvY2sgbitzdGFydChwKSBvZiB0aGUgZGlzaywgYW5kIHRoZVxcbisgKiB3cml0ZSBzdHJlYW1zIG9mIHBhcnRpdGlvbiBwIHRvIHRoZSBkaXNrIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZW0uXFxuICAqL1xcbiBzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxcbiB7XFxuQEAgLTYzMCw2ICs2MzEsMTMgQEAgc3RhdGljIGludCBibGtfcGFydGl0aW9uX3JlbWFwKHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0XFx0XFx0XFx0ICAgICAgYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciAtXFxuIFxcdFxcdFxcdFxcdCAgICAgIHAtXFx1MDAzZWJkX3N0YXJ0X3NlY3QpO1xcbiBcXHR9XFxuK1xcdGlmIChiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSBcXHUwMDI2XFx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtIFxcdTAwM2UgcC1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxcbitcXHRcXHRcXHRwLVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2Jpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtIC0gMV07XFxuK1xcdH1cXG4gXFx0YmlvX3NldF9mbGFnKGJpbywgQklPX1JFTUFQUEVEKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLjc3ODUyZWIyYWNiZWMgMTAwNjQ0XFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xcbkBAIC0yMDUsNiArMjA1LDEzMCBAQCBzdGF0aWMgc3NpemVfdCBwYXJ0X2Rpc2NhcmRfYWxpZ25tZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgYmRldl9kaXNjYXJkX2FsaWdubWVudChkZXZfdG9fYmRldihkZXYpKSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuK3tcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGRldl90b19iZGV2KGRldiktXFx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXMpO1xcbit9XFxuK1xcbisvKlxcbisgKiBHaXZlIHRoZSB3cml0ZSBzdHJlYW1zIG9mIEBwYXJ0IGJhY2sgdG8gdGhlIGRpc2suICBDYWxsZWQgZnJvbVxcbisgKiBkcm9wX3BhcnRpdGlvbigpIHdpdGggb3Blbl9tdXRleCBoZWxkOyB0aGUgbWFwIGlzIGxlZnQgYWxvbmUgYmVjYXVzZSBhXFxuKyAqIHdyaXRlIHJhY2luZyB3aXRoIGRlbF9nZW5kaXNrKCkgc3RpbGwgdXNlcyBpdCB1bnRpbCB0aGUgYmRldiBpcyBmcmVlZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydClcXG4re1xcbitcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHBhcnQtXFx1MDAzZWJkX2Rpc2s7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGFydC1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtczsgaSsrKVxcbitcXHRcXHRfX2NsZWFyX2JpdChwYXJ0LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxcbitcXHRcXHRcXHQgICAgZGlzay1cXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0LCB1OCBucilcXG4re1xcbitcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHBhcnQtXFx1MDAzZWJkX2Rpc2s7XFxuK1xcdHVuc2lnbmVkIGludCBtYXggPSBtaW5fdCh1bnNpZ25lZCBpbnQsXFxuK1xcdFxcdFxcdFxcdCBiZGV2X2xpbWl0cyhwYXJ0KS1cXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXMsIFU4X01BWCk7XFxuK1xcdHU4ICptYXAgPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBpbnQgaSwgaWQsIG5yX2ZyZWU7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHR1OCBjdXI7XFxuK1xcbitcXHRpZiAobnIgXFx1MDAzZSBtYXgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKG5yKSB7XFxuK1xcdFxcdG1hcCA9IGttYWxsb2MobnIsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIW1hcClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXG4rXFx0LyogdGhlIHBhcnRpdGlvbiBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIG11dGV4ICovXFxuK1xcdGlmICh4YV9sb2FkKFxcdTAwMjZkaXNrLVxcdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpICE9IHBhcnQpIHtcXG4rXFx0XFx0cmV0ID0gLUVOWElPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0Y3VyID0gcGFydC1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcztcXG4rXFxuK1xcdC8qIGEgbm8tb3AgY2hhbmdlIGlzIGFsbG93ZWQgd2hpbGUgb3BlbiAqL1xcbitcXHRpZiAobnIgPT0gY3VyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIHRoZSBzdHJlYW1zIG11c3Qgbm90IGNoYW5nZSB1bmRlciBhIHVzZXIgb2YgdGhlIHBhcnRpdGlvbiAqL1xcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnBhcnQtXFx1MDAzZWJkX29wZW5lcnMpKSB7XFxuK1xcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG5yX2ZyZWUgPSBtYXggLSBiaXRtYXBfd2VpZ2h0KGRpc2stXFx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsIG1heCArIDEpO1xcbitcXHRpZiAobnIgXFx1MDAzZSBjdXIgXFx1MDAyNlxcdTAwMjYgbnIgLSBjdXIgXFx1MDAzZSBucl9mcmVlKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9TUEM7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBLZWVwIHRoZSBzdHJlYW1zIHRoYXQgc3RheSwgc28gdGhhdCBhIHBhcnRpdGlvbiBrZWVwcyB3cml0aW5nXFxuK1xcdCAqIHRocm91Z2ggdGhlIHNhbWUgZGlzayBzdHJlYW1zIGFuZCBpdHMgZGF0YSBzdGF5cyB0b2dldGhlci5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaW4oY3VyLCBucik7IGkrKylcXG4rXFx0XFx0bWFwW2ldID0gcGFydC1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtpXTtcXG4rXFxuK1xcdGlmIChuciBcXHUwMDNjIGN1cikge1xcbitcXHRcXHRmb3IgKGkgPSBucjsgaSBcXHUwMDNjIGN1cjsgaSsrKVxcbitcXHRcXHRcXHRfX2NsZWFyX2JpdChwYXJ0LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxcbitcXHRcXHRcXHRcXHQgICAgZGlzay1cXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGZvciAoaSA9IGN1cjsgaSBcXHUwMDNjIG5yOyBpKyspIHtcXG4rXFx0XFx0XFx0aWQgPSBmaW5kX25leHRfemVyb19iaXQoZGlzay1cXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bWF4ICsgMSwgMSk7XFxuK1xcdFxcdFxcdF9fc2V0X2JpdChpZCwgZGlzay1cXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XFxuK1xcdFxcdFxcdG1hcFtpXSA9IGlkO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHN3YXAocGFydC1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTtcXG4rXFx0cGFydC1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yO1xcbitcXG4rb3V0OlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXHRrZnJlZShtYXApO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgcGFydF93cml0ZV9zdHJlYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa247XFxuK1xcdHU4IG5yO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvdTgoYnVmLCAxMCwgXFx1MDAyNm5yKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGRyb3BfcGFydGl0aW9uKCkgcmVtb3ZlcyB0aGlzIGF0dHJpYnV0ZSB3aXRoIG9wZW5fbXV0ZXggaGVsZCwgc29cXG4rXFx0ICogZG9uJ3QgaG9sZCB0aGUgYWN0aXZlIHJlZmVyZW5jZSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbXV0ZXguXFxuK1xcdCAqL1xcbitcXHRrbiA9IHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKFxcdTAwMjZkZXYtXFx1MDAzZWtvYmosIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyKTtcXG4rXFx0aWYgKCFrbilcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFxuK1xcdHJldCA9IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoZGV2X3RvX2JkZXYoZGV2KSwgbnIpO1xcbitcXHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcXG4rXFxuK1xcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcXG4rfVxcbitcXG4gc3RhdGljIERFVklDRV9BVFRSKHBhcnRpdGlvbiwgMDQ0NCwgcGFydF9wYXJ0aXRpb25fc2hvdywgTlVMTCk7XFxuIHN0YXRpYyBERVZJQ0VfQVRUUihzdGFydCwgMDQ0NCwgcGFydF9zdGFydF9zaG93LCBOVUxMKTtcXG4gc3RhdGljIERFVklDRV9BVFRSKHNpemUsIDA0NDQsIHBhcnRfc2l6ZV9zaG93LCBOVUxMKTtcXG5AQCAtMjEzLDYgKzMzNyw4IEBAIHN0YXRpYyBERVZJQ0VfQVRUUihhbGlnbm1lbnRfb2Zmc2V0LCAwNDQ0LCBwYXJ0X2FsaWdubWVudF9vZmZzZXRfc2hvdywgTlVMTCk7XFxuIHN0YXRpYyBERVZJQ0VfQVRUUihkaXNjYXJkX2FsaWdubWVudCwgMDQ0NCwgcGFydF9kaXNjYXJkX2FsaWdubWVudF9zaG93LCBOVUxMKTtcXG4gc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTtcXG4gc3RhdGljIERFVklDRV9BVFRSKGluZmxpZ2h0LCAwNDQ0LCBwYXJ0X2luZmxpZ2h0X3Nob3csIE5VTEwpO1xcbitzdGF0aWMgREVWSUNFX0FUVFIod3JpdGVfc3RyZWFtcywgMDY0NCwgcGFydF93cml0ZV9zdHJlYW1zX3Nob3csXFxuK1xcdFxcdCAgIHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZSk7XFxuICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1RcXG4gc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2ZhaWwgPVxcbiBcXHRfX0FUVFIobWFrZS1pdC1mYWlsLCAwNjQ0LCBwYXJ0X2ZhaWxfc2hvdywgcGFydF9mYWlsX3N0b3JlKTtcXG5AQCAtMjI3LDYgKzM1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwYXJ0X2F0dHJzW10gPSB7XFxuIFxcdFxcdTAwMjZkZXZfYXR0cl9kaXNjYXJkX2FsaWdubWVudC5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfc3RhdC5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfaW5mbGlnaHQuYXR0cixcXG4rXFx0XFx1MDAyNmRldl9hdHRyX3dyaXRlX3N0cmVhbXMuYXR0cixcXG4gI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfZmFpbC5hdHRyLFxcbiAjZW5kaWZcXG5AQCAtMjc0LDYgKzQwMSw3IEBAIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydClcXG4ge1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwYXJ0LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4gXFxuK1xcdHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMocGFydCk7XFxuIFxcdHhhX2VyYXNlKFxcdTAwMjZwYXJ0LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpO1xcbiBcXHRrb2JqZWN0X3B1dChwYXJ0LVxcdTAwM2ViZF9ob2xkZXJfZGlyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXFxuaW5kZXggOThlMjFiNGNiZjMyOC4uMGJiZmEyNzA4MDk5MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxcbkBAIC03MSw2ICs3MSw5IEBAIHN0cnVjdCBibG9ja19kZXZpY2Uge1xcbiBcXG4gXFx0c3RydWN0IHBhcnRpdGlvbl9tZXRhX2luZm8gKmJkX21ldGFfaW5mbztcXG4gXFx0aW50XFx0XFx0XFx0YmRfd3JpdGVycztcXG4rXFx0LyogcGFydGl0aW9uIHdyaXRlIHN0cmVhbSBzIGlzIGRpc2sgc3RyZWFtIGJkX3dyaXRlX3N0cmVhbV9tYXBbcyAtIDFdICovXFxuK1xcdHU4XFx0XFx0XFx0YmRfbnJfd3JpdGVfc3RyZWFtcztcXG4rXFx0dThcXHRcXHRcXHQqYmRfd3JpdGVfc3RyZWFtX21hcDtcXG4gI2lmZGVmIENPTkZJR19TRUNVUklUWVxcbiBcXHR2b2lkXFx0XFx0XFx0KmJkX3NlY3VyaXR5O1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li41ZDI0MWQ3YjA4MDJiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTE3OCw2ICsxNzgsOCBAQCBzdHJ1Y3QgZ2VuZGlzayB7XFxuIFxcbiBcXHRzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDtcXHQvKiBvcGVuL2Nsb3NlIG11dGV4ICovXFxuIFxcdHVuc2lnbmVkIG9wZW5fcGFydGl0aW9ucztcXHQvKiBudW1iZXIgb2Ygb3BlbiBwYXJ0aXRpb25zICovXFxuK1xcdC8qIHJlc2VydmVkIGJ5IHBhcnRpdGlvbnMsIGJpdCBOID0gc3RyZWFtIE4gKDAgdW51c2VkKSwgb3Blbl9tdXRleCAqL1xcbitcXHRERUNMQVJFX0JJVE1BUCh3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBVOF9NQVggKyAxKTtcXG4gXFxuIFxcdHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvXFx0KmJkaTtcXG4gXFx0c3RydWN0IGtvYmplY3QgcXVldWVfa29iajtcXHQvKiB0aGUgcXVldWUvIGRpcmVjdG9yeSAqL1xcbkBAIC0xMzAzLDcgKzEzMDUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZGV2X21heF9zZWdtZW50cyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGJkZXZfbWF4X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4ge1xcbiBcXHRpZiAoYmRldl9pc19wYXJ0aXRpb24oYmRldikpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gYmRldi1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcztcXG4gXFx0cmV0dXJuIGJkZXZfbGltaXRzKGJkZXYpLVxcdTAwM2VtYXhfd3JpdGVfc3RyZWFtcztcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDY6NTYuNzMzMTk0MzcyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NDI3MDExNTI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZVwiLFxuICAgIFwicGFydF9zZXRfd3JpdGVfc3RyZWFtc1wiLFxuICAgIFwicGFydF93cml0ZV9zdHJlYW1zX3Nob3dcIixcbiAgICBcInBhcnRfcHV0X3dyaXRlX3N0cmVhbXNcIixcbiAgICBcImJsa19wYXJ0aXRpb25fcmVtYXBcIixcbiAgICBcImRyb3BfcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB3cml0ZSBzdHJlYW0gcmVzZXJ2YXRpb24gYW5kIHJlbWFwcGluZyBzdXBwb3J0IGZvciBibG9jayBkZXZpY2UgcGFydGl0aW9ucy4gSXQgYWRkcyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUgKHdyaXRlX3N0cmVhbXMpIHRvIHBhcnRpdGlvbnMsIGltcGxlbWVudHMgc3RyZWFtIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRyYWNraW5nIG9uIHRoZSB1bmRlcmx5aW5nIGRpc2ssIGFuZCB1cGRhdGVzIGJpbyBwYXJ0aXRpb24gcmVtYXBwaW5nIHRvIG1hcCBwYXJ0aXRpb24gd3JpdGUgc3RyZWFtcyB0byBkaXNrIHdyaXRlIHN0cmVhbXMuIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGJsb2NrIEkvTyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxM2Q2ZjZkNjhjZmM0NTRmZmIwMmUwOThjMzFmNmZlNzk1MGUyNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNzo0Njo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9jayBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9ja1xuaW5kZXggOTAwYjNmYzRjNzJkMC4uNDQyZjRjMjIxYmRlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9ja1xuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrXG5AQCAtMjE4LDYgKzIxOCwyNSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0c2FtZSBhcyB0aGUgZm9ybWF0IG9mIC9zeXMvYmxvY2svXHUwMDNjZGlza1x1MDAzZS9zdGF0LlxuIFxuIFxuK1doYXQ6XHRcdC9zeXMvYmxvY2svXHUwMDNjZGlza1x1MDAzZS9cdTAwM2NwYXJ0aXRpb25cdTAwM2Uvd3JpdGVfc3RyZWFtc1xuK0RhdGU6XHRcdFNlcHRlbWJlciAyMDI2XG4rQ29udGFjdDpcdEtlb3Nlb25nIFBhcmsgXHUwMDNja2Vvc3VuZy5wYXJrQHNhbXN1bmcuY29tXHUwMDNlXG4rRGVzY3JpcHRpb246XG4rXHRcdFtSV10gTnVtYmVyIG9mIHRoZSBkaXNrJ3Mgd3JpdGUgc3RyZWFtcyByZXNlcnZlZCBmb3IgdGhlXG4rXHRcdHBhcnRpdGlvbi4gV3JpdGluZyBOIHJlc2VydmVzIE4gZGlzayB3cml0ZSBzdHJlYW1zIHRoYXQgbm9cbitcdFx0b3RoZXIgcGFydGl0aW9uIGNhbiB1c2UgYW5kIGV4cG9zZXMgdGhlbSBhcyB0aGUgcGFydGl0aW9uJ3NcbitcdFx0d3JpdGUgc3RyZWFtcyAxIHRvIE4uIFdyaXRpbmcgMCBnaXZlcyB0aGVtIGJhY2suIEF0IG1vc3RcbitcdFx0L3N5cy9ibG9jay9cdTAwM2NkaXNrXHUwMDNlL3F1ZXVlL21heF93cml0ZV9zdHJlYW1zIHN0cmVhbXMsIGFuZCBuZXZlclxuK1x0XHRtb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhblxuK1x0XHRvbmx5IGJlIGNoYW5nZWQgd2hpbGUgdGhlIHBhcnRpdGlvbiBpcyBub3Qgb3BlbiwgYW5kIGEgY2hhbmdlXG4rXHRcdGtlZXBzIHRoZSBzdHJlYW0gbnVtYmVycyB0aGF0IHN1cnZpdmUgaXQgcG9pbnRpbmcgYXQgdGhlIHNhbWVcbitcdFx0ZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3NcbitcdFx0cmVzZXJ2ZWQgaGVyZSwgYW5kIHRoZSByZXNlcnZhdGlvbiBpcyBsb3N0IHdoZW4gdGhlIHBhcnRpdGlvblxuK1x0XHRpcyByZW1vdmVkLCBpbmNsdWRpbmcgYnkgYSBwYXJ0aXRpb24gdGFibGUgcmVzY2FuLiBJL08gdG9cbitcdFx0dGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdFxuK1x0XHRjYW4gd3JpdGUgdG8gYW55IHNlY3RvciBvZiBhIHBhcnRpdGlvbi5cbitcbitcbiBXaGF0Olx0XHQvc3lzL2Jsb2NrL1x1MDAzY2Rpc2tcdTAwM2UvcXVldWUvYWRkX3JhbmRvbVxuIERhdGU6XHRcdEp1bmUgMjAxMFxuIENvbnRhY3Q6XHRsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmNcbmluZGV4IGNkODMyMzA4Mzc0MDYuLjczMDZhNGVmMGE4NjcgMTAwNjQ0XG4tLS0gYS9ibG9jay9iZGV2LmNcbisrKyBiL2Jsb2NrL2JkZXYuY1xuQEAgLTQzOCw2ICs0MzgsNyBAQCBzdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcbiBcdGZyZWVfcGVyY3B1KGJkZXYtXHUwMDNlYmRfc3RhdHMpO1xuIFx0a2ZyZWUoYmRldi1cdTAwM2ViZF9tZXRhX2luZm8pO1xuK1x0a2ZyZWUoYmRldi1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwKTtcbiBcdHNlY3VyaXR5X2JkZXZfZnJlZShiZGV2KTtcbiBcbiBcdGlmICghYmRldl9pc19wYXJ0aXRpb24oYmRldikpIHtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xuaW5kZXggMTk2YmNjZjI3ZjU4ZC4uM2I2ZjA5YjM5NDNmNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jb3JlLmNcbisrKyBiL2Jsb2NrL2Jsay1jb3JlLmNcbkBAIC02MTYsNyArNjE2LDggQEAgc3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pXG4gfVxuIFxuIC8qXG4tICogUmVtYXAgYmxvY2sgbiBvZiBwYXJ0aXRpb24gcCB0byBibG9jayBuK3N0YXJ0KHApIG9mIHRoZSBkaXNrLlxuKyAqIFJlbWFwIGJsb2NrIG4gb2YgcGFydGl0aW9uIHAgdG8gYmxvY2sgbitzdGFydChwKSBvZiB0aGUgZGlzaywgYW5kIHRoZVxuKyAqIHdyaXRlIHN0cmVhbXMgb2YgcGFydGl0aW9uIHAgdG8gdGhlIGRpc2sgd3JpdGUgc3RyZWFtcyByZXNlcnZlZCBmb3IgdGhlbS5cbiAgKi9cbiBzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxuIHtcbkBAIC02MzAsNiArNjMxLDEzIEBAIHN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdFx0XHQgICAgICBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgLVxuIFx0XHRcdFx0ICAgICAgcC1cdTAwM2ViZF9zdGFydF9zZWN0KTtcbiBcdH1cbitcdGlmIChiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIFx1MDAyNlx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcbitcdFx0aWYgKHVubGlrZWx5KGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gXHUwMDNlIHAtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxuK1x0XHRcdHAtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIC0gMV07XG4rXHR9XG4gXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLjc3ODUyZWIyYWNiZWMgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuKysrIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbkBAIC0yMDUsNiArMjA1LDEzMCBAQCBzdGF0aWMgc3NpemVfdCBwYXJ0X2Rpc2NhcmRfYWxpZ25tZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiV1XFxuXCIsIGJkZXZfZGlzY2FyZF9hbGlnbm1lbnQoZGV2X3RvX2JkZXYoZGV2KSkpO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbit7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXVcXG5cIiwgZGV2X3RvX2JkZXYoZGV2KS1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKTtcbit9XG4rXG4rLypcbisgKiBHaXZlIHRoZSB3cml0ZSBzdHJlYW1zIG9mIEBwYXJ0IGJhY2sgdG8gdGhlIGRpc2suICBDYWxsZWQgZnJvbVxuKyAqIGRyb3BfcGFydGl0aW9uKCkgd2l0aCBvcGVuX211dGV4IGhlbGQ7IHRoZSBtYXAgaXMgbGVmdCBhbG9uZSBiZWNhdXNlIGFcbisgKiB3cml0ZSByYWNpbmcgd2l0aCBkZWxfZ2VuZGlzaygpIHN0aWxsIHVzZXMgaXQgdW50aWwgdGhlIGJkZXYgaXMgZnJlZWQuXG4rICovXG4rc3RhdGljIHZvaWQgcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxuK3tcbitcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC1cdTAwM2ViZF9kaXNrO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7IGkrKylcbitcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuK1x0XHRcdCAgICBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuK31cbitcbitzdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXG4re1xuK1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBwYXJ0LVx1MDAzZWJkX2Rpc2s7XG4rXHR1bnNpZ25lZCBpbnQgbWF4ID0gbWluX3QodW5zaWduZWQgaW50LFxuK1x0XHRcdFx0IGJkZXZfbGltaXRzKHBhcnQpLVx1MDAzZW1heF93cml0ZV9zdHJlYW1zLCBVOF9NQVgpO1xuK1x0dTggKm1hcCA9IE5VTEw7XG4rXHR1bnNpZ25lZCBpbnQgaSwgaWQsIG5yX2ZyZWU7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHU4IGN1cjtcbitcbitcdGlmIChuciBcdTAwM2UgbWF4KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChucikge1xuK1x0XHRtYXAgPSBrbWFsbG9jKG5yLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFtYXApXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHQvKiB0aGUgcGFydGl0aW9uIG1heSBoYXZlIGJlZW4gZHJvcHBlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbXV0ZXggKi9cbitcdGlmICh4YV9sb2FkKFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIGJkZXZfcGFydG5vKHBhcnQpKSAhPSBwYXJ0KSB7XG4rXHRcdHJldCA9IC1FTlhJTztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRjdXIgPSBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XG4rXG4rXHQvKiBhIG5vLW9wIGNoYW5nZSBpcyBhbGxvd2VkIHdoaWxlIG9wZW4gKi9cbitcdGlmIChuciA9PSBjdXIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogdGhlIHN0cmVhbXMgbXVzdCBub3QgY2hhbmdlIHVuZGVyIGEgdXNlciBvZiB0aGUgcGFydGl0aW9uICovXG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2cGFydC1cdTAwM2ViZF9vcGVuZXJzKSkge1xuK1x0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bnJfZnJlZSA9IG1heCAtIGJpdG1hcF93ZWlnaHQoZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggKyAxKTtcbitcdGlmIChuciBcdTAwM2UgY3VyIFx1MDAyNlx1MDAyNiBuciAtIGN1ciBcdTAwM2UgbnJfZnJlZSkge1xuK1x0XHRyZXQgPSAtRU5PU1BDO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBLZWVwIHRoZSBzdHJlYW1zIHRoYXQgc3RheSwgc28gdGhhdCBhIHBhcnRpdGlvbiBrZWVwcyB3cml0aW5nXG4rXHQgKiB0aHJvdWdoIHRoZSBzYW1lIGRpc2sgc3RyZWFtcyBhbmQgaXRzIGRhdGEgc3RheXMgdG9nZXRoZXIuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbihjdXIsIG5yKTsgaSsrKVxuK1x0XHRtYXBbaV0gPSBwYXJ0LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV07XG4rXG4rXHRpZiAobnIgXHUwMDNjIGN1cikge1xuK1x0XHRmb3IgKGkgPSBucjsgaSBcdTAwM2MgY3VyOyBpKyspXG4rXHRcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuK1x0XHRcdFx0ICAgIGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRmb3IgKGkgPSBjdXI7IGkgXHUwMDNjIG5yOyBpKyspIHtcbitcdFx0XHRpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsXG4rXHRcdFx0XHRcdFx0bWF4ICsgMSwgMSk7XG4rXHRcdFx0X19zZXRfYml0KGlkLCBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuK1x0XHRcdG1hcFtpXSA9IGlkO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRzd2FwKHBhcnQtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTtcbitcdHBhcnQtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yO1xuK1xuK291dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0a2ZyZWUobWFwKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuK1x0XHRcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzdHJ1Y3Qga2VybmZzX25vZGUgKmtuO1xuK1x0dTggbnI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0ga3N0cnRvdTgoYnVmLCAxMCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qXG4rXHQgKiBkcm9wX3BhcnRpdGlvbigpIHJlbW92ZXMgdGhpcyBhdHRyaWJ1dGUgd2l0aCBvcGVuX211dGV4IGhlbGQsIHNvXG4rXHQgKiBkb24ndCBob2xkIHRoZSBhY3RpdmUgcmVmZXJlbmNlIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBtdXRleC5cbitcdCAqL1xuK1x0a24gPSBzeXNmc19icmVha19hY3RpdmVfcHJvdGVjdGlvbihcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyKTtcbitcdGlmICgha24pXG4rXHRcdHJldHVybiAtRU5YSU87XG4rXG4rXHRyZXQgPSBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKGRldl90b19iZGV2KGRldiksIG5yKTtcbitcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xuK1xuK1x0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuK31cbitcbiBzdGF0aWMgREVWSUNFX0FUVFIocGFydGl0aW9uLCAwNDQ0LCBwYXJ0X3BhcnRpdGlvbl9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhcnQsIDA0NDQsIHBhcnRfc3RhcnRfc2hvdywgTlVMTCk7XG4gc3RhdGljIERFVklDRV9BVFRSKHNpemUsIDA0NDQsIHBhcnRfc2l6ZV9zaG93LCBOVUxMKTtcbkBAIC0yMTMsNiArMzM3LDggQEAgc3RhdGljIERFVklDRV9BVFRSKGFsaWdubWVudF9vZmZzZXQsIDA0NDQsIHBhcnRfYWxpZ25tZW50X29mZnNldF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoZGlzY2FyZF9hbGlnbm1lbnQsIDA0NDQsIHBhcnRfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdywgTlVMTCk7XG4gc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoaW5mbGlnaHQsIDA0NDQsIHBhcnRfaW5mbGlnaHRfc2hvdywgTlVMTCk7XG4rc3RhdGljIERFVklDRV9BVFRSKHdyaXRlX3N0cmVhbXMsIDA2NDQsIHBhcnRfd3JpdGVfc3RyZWFtc19zaG93LFxuK1x0XHQgICBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUpO1xuICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1RcbiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfZmFpbCA9XG4gXHRfX0FUVFIobWFrZS1pdC1mYWlsLCAwNjQ0LCBwYXJ0X2ZhaWxfc2hvdywgcGFydF9mYWlsX3N0b3JlKTtcbkBAIC0yMjcsNiArMzUzLDcgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBhcnRfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX2Rpc2NhcmRfYWxpZ25tZW50LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9zdGF0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9pbmZsaWdodC5hdHRyLFxuK1x0XHUwMDI2ZGV2X2F0dHJfd3JpdGVfc3RyZWFtcy5hdHRyLFxuICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1RcbiBcdFx1MDAyNmRldl9hdHRyX2ZhaWwuYXR0cixcbiAjZW5kaWZcbkBAIC0yNzQsNiArNDAxLDcgQEAgdm9pZCBkcm9wX3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGFydC1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuIFxuK1x0cGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTtcbiBcdHhhX2VyYXNlKFx1MDAyNnBhcnQtXHUwMDNlYmRfZGlzay1cdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpO1xuIFx0a29iamVjdF9wdXQocGFydC1cdTAwM2ViZF9ob2xkZXJfZGlyKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuaW5kZXggOThlMjFiNGNiZjMyOC4uMGJiZmEyNzA4MDk5MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC03MSw2ICs3MSw5IEBAIHN0cnVjdCBibG9ja19kZXZpY2Uge1xuIFxuIFx0c3RydWN0IHBhcnRpdGlvbl9tZXRhX2luZm8gKmJkX21ldGFfaW5mbztcbiBcdGludFx0XHRcdGJkX3dyaXRlcnM7XG4rXHQvKiBwYXJ0aXRpb24gd3JpdGUgc3RyZWFtIHMgaXMgZGlzayBzdHJlYW0gYmRfd3JpdGVfc3RyZWFtX21hcFtzIC0gMV0gKi9cbitcdHU4XHRcdFx0YmRfbnJfd3JpdGVfc3RyZWFtcztcbitcdHU4XHRcdFx0KmJkX3dyaXRlX3N0cmVhbV9tYXA7XG4gI2lmZGVmIENPTkZJR19TRUNVUklUWVxuIFx0dm9pZFx0XHRcdCpiZF9zZWN1cml0eTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggNGY3OTA1YzM0MTJiOC4uNWQyNDFkN2IwODAyYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0xNzgsNiArMTc4LDggQEAgc3RydWN0IGdlbmRpc2sge1xuIFxuIFx0c3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7XHQvKiBvcGVuL2Nsb3NlIG11dGV4ICovXG4gXHR1bnNpZ25lZCBvcGVuX3BhcnRpdGlvbnM7XHQvKiBudW1iZXIgb2Ygb3BlbiBwYXJ0aXRpb25zICovXG4rXHQvKiByZXNlcnZlZCBieSBwYXJ0aXRpb25zLCBiaXQgTiA9IHN0cmVhbSBOICgwIHVudXNlZCksIG9wZW5fbXV0ZXggKi9cbitcdERFQ0xBUkVfQklUTUFQKHdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsIFU4X01BWCArIDEpO1xuIFxuIFx0c3RydWN0IGJhY2tpbmdfZGV2X2luZm9cdCpiZGk7XG4gXHRzdHJ1Y3Qga29iamVjdCBxdWV1ZV9rb2JqO1x0LyogdGhlIHF1ZXVlLyBkaXJlY3RvcnkgKi9cbkBAIC0xMzAzLDcgKzEzMDUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZGV2X21heF9zZWdtZW50cyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHtcbiBcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBiZGV2LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XG4gXHRyZXR1cm4gYmRldl9saW1pdHMoYmRldiktXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXM7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDY6NTYuNzMzMTk2ODQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU0Njk1MzU5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXcml0ZSBTdHJlYW0gUmVtYXBwaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGRpZmY6IGl0J3MgaGl0dGluZyB0aGUgY29yZSBibG9jayBsYXllciwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSBhY3Jvc3MgYSBmZXcgZmlsZXM6IHRoZSBBQkkgZG9jdW1lbnRhdGlvbiwgYGJkZXYuY2AsIGBibGstY29yZS5jYCwgYW5kIGBwYXJ0aXRpb25zL2NvcmUuY2AsIHBsdXMgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMuIFRoaXMgbG9va3MgbGlrZSBhIHRpZ2h0bHkgY291cGxlZCBzZXQgb2YgY2hhbmdlcywgc28gdGhlcmUncyBhIGdvb2QgY2hhbmNlIG9mIGludGVycGxheSBiZXR3ZWVuIHRoZSBjb21wb25lbnRzLlxuXG5Gcm9tIHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoZXJlIGlzIG5vdyBhIG1lY2hhbmlzbSB0byByZW1hcCB3cml0ZSBzdHJlYW1zLiBgYmRldl9mcmVlX2lub2RlYCBpbiBgYmRldi5jYCBpcyBmcmVlaW5nIGEgYGJkX3dyaXRlX3N0cmVhbV9tYXBgLCB3aGljaCBwb2ludHMgdG93YXJkIHN0YXRlIGJlaW5nIG1hbmFnZWQgaGVyZS4gSW4gYGJsay1jb3JlLmNgLCB0aGUgbmV3IGBibGtfcGFydGl0aW9uX3JlbWFwYCBmdW5jdGlvbiBzdWdnZXN0cyB0aGVyZSdzIHNwZWNpZmljIGxvZ2ljIGZvciByZW1hcHBpbmcgYXQgdGhlIHBhcnRpdGlvbiBsZXZlbC4gVGhlIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gYHBhcnRpdGlvbnMvY29yZS5jYCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgYHdyaXRlX3N0cmVhbXNgIHN5c2ZzIGF0dHJpYnV0ZXMgKGdldC9zZXQpLCBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMgKGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIGBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zYCwgZXRjLiksIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaW50ZXJmYWNlIGZvciB0aGlzIGZlYXR1cmUuIFRoZSB1cGRhdGVzIHRvIHRoZSBgc3RydWN0IGJsb2NrX2RldmljZWAgaW4gYGJsa190eXBlcy5oYCBhbmQgdGhlIGBzdHJ1Y3QgZ2VuZGlza2AgaW4gYGJsa2Rldi5oYCBjb25maXJtIG5ldyBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxhZ3MuXG5cbk5vdywgaXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyB0aGUgYmxvY2sgbGF5ZXIsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggZGlzayBkZXZpY2VzIGFuZCBwYXJ0aXRpb25zLiBBbnlib2R5IGNhbiBjcmVhdGUgcGFydGl0aW9ucywgcmlnaHQ/IFVzaW5nIGxvb3BiYWNrLCByYW1kaXNrLCBudWxsX2Jsaywgb3IgZXZlbiB0aGUgc2NzaV9kZWJ1ZyBkcml2ZXIuIFRoZSB3cml0ZSBzdHJlYW0gc3lzZnMgaW50ZXJmYWNlIGlzIGRlZmluaXRlbHkgdXNlci1hY2Nlc3NpYmxlLCBpdCBsb29rcyBsaWtlIGl0IGNhbiBiZSB3cml0dGVuIHRvIHZpYSBgL3N5cy9ibG9jay9cdTAwM2NkaXNrXHUwMDNlL1x1MDAzY3BhcnRpdGlvblx1MDAzZS93cml0ZV9zdHJlYW1zYC4gVXNlcnMgY2FuICphbHNvKiBzZXQgdXAgd3JpdGUgc3RyZWFtcyB2aWEgbWV0aG9kcyBsaWtlIEZfU0VUX1JXX0hJTlQsIHN0YXR4LCBpb191cmluZywgb3IgZXZlbiByYXcgYmxvY2sgd3JpdGVzLCB3aGljaCBpcyBhIGJpZyBkZWFsIGluIHRlcm1zIG9mIGF0dGFjayBzdXJmYWNlLiBUaGlzIGlzIGEgY2xlYXIgYFdvcnRoRnV6emluZz10cnVlYCBzaXR1YXRpb24uIFRoaXMgYWZmZWN0cyBJL08gcGF0aCwgcGFydGl0aW9uIG1hbmFnZW1lbnQuLi4gYWxsIGNvcmUga2VybmVsIHN1YnN5c3RlbXMuXG5cbk5leHQsIEknbGwgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXBwZXIgYW5kIGV4cGxvcmUgYGJsb2NrL2AgYW5kIGBibG9jay9wYXJ0aXRpb25zL2AgdG8gdW5kZXJzdGFuZCBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgYW5kIGlkZW50aWZ5IGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciBmb2N1cyBzeW1ib2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDYzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6MTIuMjAyNzM0NzkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODg4OTQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCTE9DS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZy00LSNcXG5ibG9jay9LY29uZmlnOjU6bWVudWNvbmZpZyBCTE9DS1xcbmJsb2NrL0tjb25maWctNi0gICAgICAgYm9vbCBcXFwiRW5hYmxlIHRoZSBibG9jayBsYXllclxcXCIgaWYgRVhQRVJUXFxuLS1cXG5ibG9jay9LY29uZmlnLTI2LVxcbmJsb2NrL0tjb25maWc6Mjc6aWYgQkxPQ0tcXG5ibG9jay9LY29uZmlnLTI4LVxcbmJsb2NrL0tjb25maWc6Mjk6Y29uZmlnIEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxcbmJsb2NrL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiTGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnPTIxND1jb25maWcgQkxLX1BNXFxuLS1cXG5ibG9jay9LY29uZmlnLTIxNy0jIGRvIG5vdCB1c2UgaW4gbmV3IGNvZGVcXG5ibG9jay9LY29uZmlnOjIxODpjb25maWcgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcXG5ibG9jay9LY29uZmlnLTIxOS1cXHRib29sXFxuLS1cXG5ibG9jay9LY29uZmlnPTIzMj1zb3VyY2UgXFxcImJsb2NrL0tjb25maWcuaW9zY2hlZFxcXCJcXG5ibG9jay9LY29uZmlnLTIzMy1cXG5ibG9jay9LY29uZmlnOjIzNDplbmRpZiAjIEJMT0NLXFxuLS1cXG5ibG9jay9NYWtlZmlsZT00MD1vYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLKVxcdCs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xcbmJsb2NrL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcXHQrPSBob2xkZXIub1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NjczPXN0YXRpYyBib29sIGNhbl9mcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNzAyLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjcwMzpcXHRpZiAoKGJiLVxcdTAwM2Vjb3VudCArICgqZXh0cmEpKSBcXHUwMDNlIE1BWF9CQURCTE9DS1MpXFxuYmxvY2svYmFkYmxvY2tzLmMtNzA0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTEwNDk9c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMzAtXFx0XFx0XFx0LyogU3BsaXR0aW5nICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTEzMTpcXHRcXHRcXHRpZiAoKGJiLVxcdTAwM2Vjb3VudCArIDEpIFxcdTAwM2M9IE1BWF9CQURCTE9DS1MpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xMTMyLVxcdFxcdFxcdFxcdGxlbiA9IGZyb250X3NwbGl0dGluZ19jbGVhcihiYiwgcHJldiwgXFx1MDAyNmJhZCk7XFxuLS1cXG5ibG9jay9iZGV2LmM9NDM1PXN0YXRpYyB2b2lkIGJkZXZfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuYmxvY2svYmRldi5jLTQ0OS1cXG5ibG9jay9iZGV2LmM6NDUwOlxcdGlmIChNQUpPUihiZGV2LVxcdTAwM2ViZF9kZXYpID09IEJMT0NLX0VYVF9NQUpPUilcXG5ibG9jay9iZGV2LmMtNDUxLVxcdFxcdGJsa19mcmVlX2V4dF9taW5vcihNSU5PUihiZGV2LVxcdTAwM2ViZF9kZXYpKTtcXG4tLVxcbmJsb2NrL2JkZXYuYz04Mjg9aW50IGJkZXZfcGVybWlzc2lvbihkZXZfdCBkZXYsIGJsa19tb2RlX3QgbW9kZSwgdm9pZCAqaG9sZGVyKVxcbi0tXFxuYmxvY2svYmRldi5jLTgzMS1cXG5ibG9jay9iZGV2LmM6ODMyOlxcdHJldCA9IGRldmNncm91cF9jaGVja19wZXJtaXNzaW9uKERFVkNHX0RFVl9CTE9DSyxcXG5ibG9jay9iZGV2LmMtODMzLVxcdFxcdFxcdE1BSk9SKGRldiksIE1JTk9SKGRldiksXFxuLS1cXG5ibG9jay9iZGV2LmM9ODY0PXN0cnVjdCBibG9ja19kZXZpY2UgKmJsa2Rldl9nZXRfbm9fb3BlbihkZXZfdCBkZXYsIGJvb2wgYXV0b2xvYWQpXFxuLS1cXG5ibG9jay9iZGV2LmMtODY5LVxcdGlub2RlID0gaWxvb2t1cChibG9ja2Rldl9zdXBlcmJsb2NrLCBkZXYpO1xcbmJsb2NrL2JkZXYuYzo4NzA6XFx0aWYgKCFpbm9kZSBcXHUwMDI2XFx1MDAyNiBhdXRvbG9hZCBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQUQpKSB7XFxuYmxvY2svYmRldi5jLTg3MS1cXHRcXHRibGtfcmVxdWVzdF9tb2R1bGUoZGV2KTtcXG4tLVxcbmJsb2NrL2JkZXYuYz05NzI9aW50IGJkZXZfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsIHZvaWQgKmhvbGRlcixcXG4tLVxcbmJsb2NrL2JkZXYuYy0xMDE4LVxcdFxcdCAgICAhYmRldl90ZXN0X2ZsYWcoYmRldiwgQkRfV1JJVEVfSE9MREVSKSBcXHUwMDI2XFx1MDAyNlxcbmJsb2NrL2JkZXYuYzoxMDE5OlxcdFxcdCAgICAoZGlzay1cXHUwMDNlZXZlbnRfZmxhZ3MgXFx1MDAyNiBESVNLX0VWRU5UX0ZMQUdfQkxPQ0tfT05fRVhDTF9XUklURSkpIHtcXG5ibG9jay9iZGV2LmMtMTAyMC1cXHRcXHRcXHRiZGV2X3NldF9mbGFnKGJkZXYsIEJEX1dSSVRFX0hPTERFUik7XFxuLS1cXG5ibG9jay9iaW8taW50ZWdyaXR5LWF1dG8uYz04Mz12b2lkIGJpb19pbnRlZ3JpdHlfcHJlcChzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBhY3Rpb24pXFxuLS1cXG5ibG9jay9iaW8taW50ZWdyaXR5LWF1dG8uYy04OS1cXHRiaWQtXFx1MDAzZWJpbyA9IGJpbztcXG5ibG9jay9iaW8taW50ZWdyaXR5LWF1dG8uYzo5MDpcXHRiaWQtXFx1MDAzZWJpcC5iaXBfZmxhZ3MgfD0gQklQX0JMT0NLX0lOVEVHUklUWTtcXG5ibG9jay9iaW8taW50ZWdyaXR5LWF1dG8uYy05MS1cXHRiaW9faW50ZWdyaXR5X2FsbG9jX2J1ZihiaW8sIEdGUF9OT0lPLCBhY3Rpb24gXFx1MDAyNiBCSV9BQ1RfWkVSTyk7XFxuLS1cXG5ibG9jay9ibGstY29yZS5jPTEyNzQ9dm9pZCBfX2Jsa19mbHVzaF9wbHVnKHN0cnVjdCBibGtfcGx1ZyAqcGx1ZywgYm9vbCBmcm9tX3NjaGVkdWxlKVxcbi0tXFxuYmxvY2svYmxrLWNvcmUuYy0xMjg4LVxcdHBsdWctXFx1MDAzZWN1cl9rdGltZSA9IDA7XFxuYmxvY2svYmxrLWNvcmUuYzoxMjg5OlxcdGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5QRl9CTE9DS19UUztcXG5ibG9jay9ibGstY29yZS5jLTEyOTAtfVxcbi0tXFxuYmxvY2svYmxrLW1xLWRlYnVnZnMuYz0xODU9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGhjdHhfZmxhZ19uYW1lW10gPSB7XFxuLS1cXG5ibG9jay9ibGstbXEtZGVidWdmcy5jLTE4OC1cXHRIQ1RYX0ZMQUdfTkFNRShUQUdfSENUWF9TSEFSRUQpLFxcbmJsb2NrL2Jsay1tcS1kZWJ1Z2ZzLmM6MTg5OlxcdEhDVFhfRkxBR19OQU1FKEJMT0NLSU5HKSxcXG5ibG9jay9ibGstbXEtZGVidWdmcy5jLTE5MC1cXHRIQ1RYX0ZMQUdfTkFNRShUQUdfUlIpLFxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MjgxPXZvaWQgYmxrX21xX3dhaXRfcXVpZXNjZV9kb25lKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0KVxcbmJsb2NrL2Jsay1tcS5jLTI4Mi17XFxuYmxvY2svYmxrLW1xLmM6MjgzOlxcdGlmIChzZXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpXFxuYmxvY2svYmxrLW1xLmMtMjg0LVxcdFxcdHN5bmNocm9uaXplX3NyY3Uoc2V0LVxcdTAwM2VzcmN1KTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTY2MT1zdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX2FsbG9jX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19vcGZfdCBvcGYsXFxuLS1cXG5ibG9jay9ibGstbXEuYy02OTUtXFx0YmxrX3F1ZXVlX2V4aXQocSk7XFxuYmxvY2svYmxrLW1xLmM6Njk2OlxcdHJldHVybiBFUlJfUFRSKC1FV09VTERCTE9DSyk7XFxuYmxvY2svYmxrLW1xLmMtNjk3LX1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTcwMD1zdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTc2MS1cXG5ibG9jay9ibGstbXEuYzo3NjI6XFx0cmV0ID0gLUVXT1VMREJMT0NLO1xcbmJsb2NrL2Jsay1tcS5jLTc2My1cXHR0YWcgPSBibGtfbXFfZ2V0X3RhZyhcXHUwMDI2ZGF0YSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0xMjM2PXN0YXRpYyB2b2lkIF9fYmxrX21xX2NvbXBsZXRlX3JlcXVlc3RfcmVtb3RlKHZvaWQgKmRhdGEpXFxuYmxvY2svYmxrLW1xLmMtMTIzNy17XFxuYmxvY2svYmxrLW1xLmM6MTIzODpcXHRfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKEJMT0NLX1NPRlRJUlEpO1xcbmJsb2NrL2Jsay1tcS5jLTEyMzktfVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MTI3Nz1zdGF0aWMgdm9pZCBibGtfbXFfcmFpc2Vfc29mdGlycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5ibG9jay9ibGstbXEuYy0xMjgzLVxcdGlmIChsbGlzdF9hZGQoXFx1MDAyNnJxLVxcdTAwM2VpcGlfbGlzdCwgbGlzdCkpXFxuYmxvY2svYmxrLW1xLmM6MTI4NDpcXHRcXHRyYWlzZV9zb2Z0aXJxKEJMT0NLX1NPRlRJUlEpO1xcbmJsb2NrL2Jsay1tcS5jLTEyODUtXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTE0MTU9dm9pZCBibGtfZXhlY3V0ZV9ycV9ub3dhaXQoc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGF0X2hlYWQpXFxuLS1cXG5ibG9jay9ibGstbXEuYy0xNDI5LVxcdGJsa19tcV9pbnNlcnRfcmVxdWVzdChycSwgYXRfaGVhZCA/IEJMS19NUV9JTlNFUlRfQVRfSEVBRCA6IDApO1xcbmJsb2NrL2Jsay1tcS5jOjE0MzA6XFx0YmxrX21xX3J1bl9od19xdWV1ZShoY3R4LCBoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKTtcXG5ibG9jay9ibGstbXEuYy0xNDMxLX1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTIzMjE9dm9pZCBibGtfbXFfcnVuX2h3X3F1ZXVlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBib29sIGFzeW5jKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjMyOS1cXG5ibG9jay9ibGstbXEuYzoyMzMwOlxcdG1pZ2h0X3NsZWVwX2lmKCFhc3luYyBcXHUwMDI2XFx1MDAyNiBoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKTtcXG5ibG9jay9ibGstbXEuYy0yMzMxLVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MjQ4MT12b2lkIGJsa19tcV9zdGFydF9od19xdWV1ZShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eClcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTI0ODQtXFxuYmxvY2svYmxrLW1xLmM6MjQ4NTpcXHRibGtfbXFfcnVuX2h3X3F1ZXVlKGhjdHgsIGhjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpO1xcbmJsb2NrL2Jsay1tcS5jLTI0ODYtfVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MjUxNT12b2lkIGJsa19tcV9zdGFydF9zdG9wcGVkX2h3X3F1ZXVlcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYm9vbCBhc3luYylcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTI1MjEtXFx0XFx0YmxrX21xX3N0YXJ0X3N0b3BwZWRfaHdfcXVldWUoaGN0eCwgYXN5bmMgfHxcXG5ibG9jay9ibGstbXEuYzoyNTIyOlxcdFxcdFxcdFxcdFxcdChoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSk7XFxuYmxvY2svYmxrLW1xLmMtMjUyMy19XFxuLS1cXG5ibG9jay9ibGstbXEuYz00ODM0PWludCBibGtfbXFfYWxsb2NfdGFnX3NldChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldClcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQ4NzgtXFxuYmxvY2svYmxrLW1xLmM6NDg3OTpcXHRpZiAoc2V0LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSB7XFxuYmxvY2svYmxrLW1xLmMtNDg4MC1cXHRcXHRzZXQtXFx1MDAzZXNyY3UgPSBrbWFsbG9jX29iaigqc2V0LVxcdTAwM2VzcmN1KTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQ5Mjktb3V0X2NsZWFudXBfc3JjdTpcXG5ibG9jay9ibGstbXEuYzo0OTMwOlxcdGlmIChzZXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpXFxuYmxvY2svYmxrLW1xLmMtNDkzMS1cXHRcXHRjbGVhbnVwX3NyY3Vfc3RydWN0KHNldC1cXHUwMDNlc3JjdSk7XFxuYmxvY2svYmxrLW1xLmMtNDkzMi1vdXRfZnJlZV9zcmN1OlxcbmJsb2NrL2Jsay1tcS5jOjQ5MzM6XFx0aWYgKHNldC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCTEtfTVFfRl9CTE9DS0lORylcXG5ibG9jay9ibGstbXEuYy00OTM0LVxcdFxcdGtmcmVlKHNldC1cXHUwMDNlc3JjdSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz00OTU1PXZvaWQgYmxrX21xX2ZyZWVfdGFnX3NldChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldClcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQ5NzYtXFx0Y2xlYW51cF9zcmN1X3N0cnVjdChcXHUwMDI2c2V0LVxcdTAwM2V0YWdzX3NyY3UpO1xcbmJsb2NrL2Jsay1tcS5jOjQ5Nzc6XFx0aWYgKHNldC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCTEtfTVFfRl9CTE9DS0lORykge1xcbmJsb2NrL2Jsay1tcS5jLTQ5NzgtXFx0XFx0c3JjdV9iYXJyaWVyKHNldC1cXHUwMDNlc3JjdSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz01MjgxPXN0YXRpYyBpbnQgX19pbml0IGJsa19tcV9pbml0KHZvaWQpXFxuLS1cXG5ibG9jay9ibGstbXEuYy01Mjg5LVxcdFxcdFxcdCBfX2Jsa19tcV9jb21wbGV0ZV9yZXF1ZXN0X3JlbW90ZSwgTlVMTCk7XFxuYmxvY2svYmxrLW1xLmM6NTI5MDpcXHRvcGVuX3NvZnRpcnEoQkxPQ0tfU09GVElSUSwgYmxrX2RvbmVfc29mdGlycSk7XFxuYmxvY2svYmxrLW1xLmMtNTI5MS1cXG5ibG9jay9ibGstbXEuYzo1MjkyOlxcdGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQkxPQ0tfU09GVElSUV9ERUFELFxcbmJsb2NrL2Jsay1tcS5jLTUyOTMtXFx0XFx0XFx0XFx0ICBcXFwiYmxvY2svc29mdGlycTpkZWFkXFxcIiwgTlVMTCxcXG4tLVxcbmJsb2NrL2Jsay1tcS5oPTQ0MD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmJsb2NrL2Jsay1tcS5oOjQ0MTpcXHRpZiAoKHEpLVxcdTAwM2V0YWdfc2V0LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSB7XFx0XFx0XFxcXFxcbmJsb2NrL2Jsay1tcS5oLTQ0Mi1cXHRcXHRzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKl9fdGFnX3NldCA9IChxKS1cXHUwMDNldGFnX3NldDsgXFxcXFxcbi0tXFxuYmxvY2svYmxrLXBtLmgtMi1cXG5ibG9jay9ibGstcG0uaDozOiNpZm5kZWYgX0JMT0NLX0JMS19QTV9IX1xcbmJsb2NrL2Jsay1wbS5oOjQ6I2RlZmluZSBfQkxPQ0tfQkxLX1BNX0hfXFxuYmxvY2svYmxrLXBtLmgtNS1cXG4tLVxcbmJsb2NrL2Jsay1wbS5oPTMwPXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfcG1fbWFya19sYXN0X2J1c3koc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmxrLXBtLmgtMzQtXFxuYmxvY2svYmxrLXBtLmg6MzU6I2VuZGlmIC8qIF9CTE9DS19CTEtfUE1fSF8gKi9cXG4tLVxcbmJsb2NrL2Jsay5oPTI2MT1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX2ludGVncml0eV9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGsuaC0yNjQtXFxuYmxvY2svYmxrLmg6MjY1OlxcdGlmIChiaXAgXFx1MDAyNlxcdTAwMjYgKGJpcC1cXHUwMDNlYmlwX2ZsYWdzIFxcdTAwMjYgQklQX0JMT0NLX0lOVEVHUklUWSkpXFxuYmxvY2svYmxrLmgtMjY2LVxcdFxcdHJldHVybiBfX2Jpb19pbnRlZ3JpdHlfZW5kaW8oYmlvKTtcXG4tLVxcbmJsb2NrL2Jsay5oPTcxNz1zdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZClcXG4tLVxcbmJsb2NrL2Jsay5oLTcyOS1cXHQgKlxcbmJsb2NrL2Jsay5oOjczMDpcXHQgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC5cXG5ibG9jay9ibGsuaC03MzEtXFx0ICovXFxuLS1cXG5ibG9jay9ibGsuaC03MzUtXFx0XFx0V1JJVEVfT05DRShwbHVnLVxcdTAwM2VjdXJfa3RpbWUsIG5vdyk7XFxuYmxvY2svYmxrLmg6NzM2OlxcdFxcdC8qIEVuc3VyZSBQRl9CTE9DS19UUyBpcyBzZXQgYWZ0ZXIgY3VyX2t0aW1lLiAqL1xcbmJsb2NrL2Jsay5oLTczNy1cXHRcXHRiYXJyaWVyKCk7XFxuYmxvY2svYmxrLmg6NzM4OlxcdFxcdGN1cnJlbnQtXFx1MDAzZWZsYWdzIHw9IFBGX0JMT0NLX1RTO1xcbmJsb2NrL2Jsay5oLTczOS1cXHR9XFxuLS1cXG5ibG9jay9ic2ctbGliLmM9MzYyPXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpic2dfc2V0dXBfcXVldWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuYmxvY2svYnNnLWxpYi5jLTM4My1cXHRzZXQtXFx1MDAzZWNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBic2dfam9iKSArIGRkX2pvYl9zaXplO1xcbmJsb2NrL2JzZy1saWIuYzozODQ6XFx0c2V0LVxcdTAwM2VmbGFncyA9IEJMS19NUV9GX0JMT0NLSU5HO1xcbmJsb2NrL2JzZy1saWIuYy0zODUtXFx0aWYgKGJsa19tcV9hbGxvY190YWdfc2V0KHNldCkpXFxuLS1cXG5ibG9jay9nZW5oZC5jPTE3OD1zdGF0aWMgc3RydWN0IGJsa19tYWpvcl9uYW1lIHtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTgxLVxcdGNoYXIgbmFtZVsxNl07XFxuYmxvY2svZ2VuaGQuYzoxODI6I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcXG5ibG9jay9nZW5oZC5jLTE4My1cXHR2b2lkICgqcHJvYmUpKGRldl90IGRldnQpO1xcbi0tXFxuYmxvY2svZ2VuaGQuYz0yMzQ9aW50IF9fcmVnaXN0ZXJfYmxrZGV2KHVuc2lnbmVkIGludCBtYWpvciwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMjczLVxcdHAtXFx1MDAzZW1ham9yID0gbWFqb3I7XFxuYmxvY2svZ2VuaGQuYzoyNzQ6I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcXG5ibG9jay9nZW5oZC5jLTI3NS1cXHRwLVxcdTAwM2Vwcm9iZSA9IHByb2JlO1xcbi0tXFxuYmxvY2svZ2VuaGQuYz00Mjc9c3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9nZW5oZC5jLTQ4NC1cXHRcXHRcXHRnb3RvIG91dDtcXG5ibG9jay9nZW5oZC5jOjQ4NTpcXHRcXHRkaXNrLVxcdTAwM2VtYWpvciA9IEJMT0NLX0VYVF9NQUpPUjtcXG5ibG9jay9nZW5oZC5jLTQ4Ni1cXHRcXHRkaXNrLVxcdTAwM2VmaXJzdF9taW5vciA9IHJldDtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNTcxLW91dF9mcmVlX2V4dF9taW5vcjpcXG5ibG9jay9nZW5oZC5jOjU3MjpcXHRpZiAoZGlzay1cXHUwMDNlbWFqb3IgPT0gQkxPQ0tfRVhUX01BSk9SKVxcbmJsb2NrL2dlbmhkLmMtNTczLVxcdFxcdGJsa19mcmVlX2V4dF9taW5vcihkaXNrLVxcdTAwM2VmaXJzdF9taW5vcik7XFxuLS1cXG5ibG9jay9nZW5oZC5jPTg2Nz1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTg3OC1cXG5ibG9jay9nZW5oZC5jOjg3OTojaWZkZWYgQ09ORklHX0JMT0NLX0xFR0FDWV9BVVRPTE9BRFxcbmJsb2NrL2dlbmhkLmMtODgwLXN0YXRpYyBib29sIGJsa19wcm9iZV9kZXYoZGV2X3QgZGV2dClcXG4tLVxcbmJsb2NrL2dlbmhkLmM9ODk3PXZvaWQgYmxrX3JlcXVlc3RfbW9kdWxlKGRldl90IGRldnQpXFxuLS1cXG5ibG9jay9nZW5oZC5jLTkxMC19XFxuYmxvY2svZ2VuaGQuYzo5MTE6I2VuZGlmIC8qIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQUQgKi9cXG5ibG9jay9nZW5oZC5jLTkxMi1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9OTk5PXN0YXRpYyBpbnQgX19pbml0IGdlbmhkX2RldmljZV9pbml0KHZvaWQpXFxuLS1cXG5ibG9jay9nZW5oZC5jLTEwMDctXFxuYmxvY2svZ2VuaGQuYzoxMDA4OlxcdHJlZ2lzdGVyX2Jsa2RldihCTE9DS19FWFRfTUFKT1IsIFxcXCJibGtleHRcXFwiKTtcXG5ibG9jay9nZW5oZC5jLTEwMDktXFxuLS1cXG5ibG9jay9nZW5oZC5jPTE0NTQ9c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTQ5My1cXHRsb2NrZGVwX2luaXRfbWFwKFxcdTAwMjZkaXNrLVxcdTAwM2Vsb2NrZGVwX21hcCwgXFxcIihiaW8gY29tcGxldGlvbilcXFwiLCBsa2NsYXNzLCAwKTtcXG5ibG9jay9nZW5oZC5jOjE0OTQ6I2lmZGVmIENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRFxcbmJsb2NrL2dlbmhkLmMtMTQ5NS1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGlzay1cXHUwMDNlc2xhdmVfYmRldnMpO1xcbi0tXFxuYmxvY2svaW9jdGwuYz05ODE9aW50IGJsa2Rldl91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5ibG9jay9pb2N0bC5jLTk5OC1cXHRiaWMtXFx1MDAzZXJlcyA9IDA7XFxuYmxvY2svaW9jdGwuYzo5OTk6XFx0YmljLVxcdTAwM2Vub3dhaXQgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XFxuYmxvY2svaW9jdGwuYy0xMDAwLVxcbmJsb2NrL2lvY3RsLmMtMTAwMS1cXHRzd2l0Y2ggKGNtZF9vcCkge1xcbmJsb2NrL2lvY3RsLmM6MTAwMjpcXHRjYXNlIEJMT0NLX1VSSU5HX0NNRF9ESVNDQVJEOlxcbmJsb2NrL2lvY3RsLmMtMTAwMy1cXHRcXHRyZXR1cm4gYmxrZGV2X2NtZF9kaXNjYXJkKGNtZCk7XFxuYmxvY2svaW9jdGwuYzoxMDA0OlxcdGNhc2UgQkxPQ0tfVVJJTkdfQ01EX1pPTkVfUkVTRVRfQUxMOlxcbmJsb2NrL2lvY3RsLmMtMTAwNS1cXHRcXHRyZXR1cm4gYmxrZGV2X2NtZF96b25lX3Jlc2V0X2FsbChjbWQpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZS01LVxcbmJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkxPQ0spICs9IGNvcmUub1xcbmJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfQUNPUk5fUEFSVElUSU9OKSArPSBhY29ybi5vXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2Fjb3JuLmM9MTU2PWludCBhZGZzcGFydF9jaGVja19DVU1BTkEoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvYWNvcm4uYy0yMDQtXFx0XFx0Zmlyc3Rfc2VjdG9yICs9IG5yX3NlY3RzO1xcbmJsb2NrL3BhcnRpdGlvbnMvYWNvcm4uYzoyMDU6XFx0XFx0c3RhcnRfYmxrICs9IG5yX3NlY3RzIFxcdTAwM2VcXHUwMDNlIChCTE9DS19TSVpFX0JJVFMgLSA5KTtcXG5ibG9jay9wYXJ0aXRpb25zL2Fjb3JuLmMtMjA2LVxcdFxcdG5yX3NlY3RzID0gMDsgLyogaG1tIC0gc2hvdWxkIGJlIHBhcnRpdGlvbiBzaXplICovXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz00MjM9c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKmFkZF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8sXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy00ODEtXFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjQ4MjpcXHRcXHRkZXZ0ID0gTUtERVYoQkxPQ0tfRVhUX01BSk9SLCBlcnIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTQ4My1cXHR9XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTY3PXN0YXRpYyBib29sIGxkbV9wYXJzZV9wcml2aGVhZChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHByaXZoZWFkICpwaClcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEyLS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzOiAqIGxkbV9wYXJzZV90b2NibG9jayAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExNDogKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE1LSAqIEB0b2M6ICAgSW4tbWVtb3J5IHRvYyBzdHJ1Y3R1cmUgaW4gd2hpY2ggdG8gcmV0dXJuIHBhcnNlZCBpbmZvcm1hdGlvblxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE2LSAqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTc6ICogVGhpcyBwYXJzZXMgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyAodGFibGUgb2YgY29udGVudHMpIHN0cnVjdHVyZSBzdXBwbGllZFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE4LSAqIGluIEBkYXRhIGFuZCBzZXRzIHVwIHRoZSBpbi1tZW1vcnkgdG9jYmxvY2sgc3RydWN0dXJlIEB0b2Mgd2l0aCB0aGUgb2J0YWluZWRcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTIyLSAqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMjM6ICogUmV0dXJuOiAgJ3RydWUnICAgQHRvYyBjb250YWlucyB0aGUgVE9DQkxPQ0sgZGF0YVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTI0LSAqICAgICAgICAgICdmYWxzZScgIEB0b2MgY29udGVudHMgYXJlIHVuZGVmaW5lZFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0xMjY9c3RhdGljIGJvb2wgbGRtX3BhcnNlX3RvY2Jsb2NrIChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHRvY2Jsb2NrICp0b2MpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEyOS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEzMDpcXHRpZiAoTUFHSUNfVE9DQkxPQ0sgIT0gZ2V0X3VuYWxpZ25lZF9iZTY0KGRhdGEpKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMzE6XFx0XFx0bGRtX2NyaXQgKFxcXCJDYW5ub3QgZmluZCBUT0NCTE9DSywgZGF0YWJhc2UgbWF5IGJlIGNvcnJ1cHQuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMzItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMzktXFx0XFx0XFx0c2l6ZW9mICh0b2MtXFx1MDAzZWJpdG1hcDFfbmFtZSkpICE9IDApIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE0MDpcXHRcXHRsZG1fY3JpdCAoXFxcIlRPQ0JMT0NLJ3MgZmlyc3QgYml0bWFwIGlzICclcycsIHNob3VsZCBiZSAnJXMnLlxcXCIsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNDEtXFx0XFx0XFx0XFx0VE9DX0JJVE1BUDEsIHRvYy1cXHUwMDNlYml0bWFwMV9uYW1lKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQ4LVxcdFxcdFxcdHNpemVvZiAodG9jLVxcdTAwM2ViaXRtYXAyX25hbWUpKSAhPSAwKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNDk6XFx0XFx0bGRtX2NyaXQgKFxcXCJUT0NCTE9DSydzIHNlY29uZCBiaXRtYXAgaXMgJyVzJywgc2hvdWxkIGJlICclcycuXFxcIixcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE1MC1cXHRcXHRcXHRcXHRUT0NfQklUTUFQMiwgdG9jLVxcdTAwM2ViaXRtYXAyX25hbWUpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTItXFx0fVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTUzOlxcdGxkbV9kZWJ1ZyAoXFxcIlBhcnNlZCBUT0NCTE9DSyBzdWNjZXNzZnVsbHkuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTQtXFx0cmV0dXJuIHRydWU7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTI2Mz1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfcHJpdmhlYWRzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM0Ny0gKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzQ4OiAqIFJldHVybjogICd0cnVlJyAgIEB0b2MxIGNvbnRhaW5zIHZhbGlkYXRlZCBUT0NCTE9DSyBpbmZvXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNDktICogICAgICAgICAgJ2ZhbHNlJyAgQHRvYzEgY29udGVudHMgYXJlIHVuZGVmaW5lZFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0zNTE9c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3RvY2Jsb2NrcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNzItXFx0LypcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM3MzpcXHQgKiBUcnkgdG8gcmVhZCBhbmQgcGFyc2UgYWxsIGZvdXIgVE9DQkxPQ0tzLlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzc0LVxcdCAqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzU6XFx0ICogV2luZG93cyBWaXN0YSBMRE0gdjIuMTIgZG9lcyBub3QgYWx3YXlzIGhhdmUgYWxsIGZvdXIgVE9DQkxPQ0tzIHNvXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzY6XFx0ICogc2tpcCBhbnkgdGhhdCBmYWlsIGFzIGxvbmcgYXMgd2UgZ2V0IGF0IGxlYXN0IG9uZSB2YWxpZCBUT0NCTE9DSy5cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM3Ny1cXHQgKi9cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzgwLVxcdFxcdGlmICghZGF0YSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzgxOlxcdFxcdFxcdGxkbV9lcnJvcihcXFwiRGlzayByZWFkIGZhaWxlZCBmb3IgVE9DQkxPQ0sgJWQuXFxcIiwgaSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODItXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4OC1cXHRpZiAoIW5yX3Ricykge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzg5OlxcdFxcdGxkbV9jcml0KFxcXCJGYWlsZWQgdG8gZmluZCBhIHZhbGlkIFRPQ0JMT0NLLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzkwLVxcdFxcdGdvdG8gZXJyO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzkxLVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM5MjpcXHQvKiBSYW5nZSBjaGVjayB0aGUgVE9DQkxPQ0sgYWdhaW5zdCBhIHByaXZoZWFkLiAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzkzLVxcdGlmICgoKHRiWzBdLVxcdTAwM2ViaXRtYXAxX3N0YXJ0ICsgdGJbMF0tXFx1MDAzZWJpdG1hcDFfc2l6ZSkgXFx1MDAzZSBwaC1cXHUwMDNlY29uZmlnX3NpemUpIHx8XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM5OC1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozOTk6XFx0LyogQ29tcGFyZSBhbGwgbG9hZGVkIFRPQ0JMT0NLcy4gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMC1cXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbnJfdGJzOyBpKyspIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMS1cXHRcXHRpZiAoIWxkbV9jb21wYXJlX3RvY2Jsb2Nrcyh0YlswXSwgdGJbaV0pKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0MDI6XFx0XFx0XFx0bGRtX2NyaXQoXFxcIlRPQ0JMT0NLcyAwIGFuZCAlZCBkbyBub3QgbWF0Y2guXFxcIiwgaSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MDMtXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwNS1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0MDY6XFx0bGRtX2RlYnVnKFxcXCJWYWxpZGF0ZWQgJWQgVE9DQkxPQ0tzIHN1Y2Nlc3NmdWxseS5cXFwiLCBucl90YnMpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDA3LVxcdHJlc3VsdCA9IHRydWU7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTQyNT1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdm1kYihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NjEtXFx0aWYgKCh2bS1cXHUwMDNldmJsa19zaXplICogdm0tXFx1MDAzZWxhc3RfdmJsa19zZXEpIFxcdTAwM2UgKHRvYy1cXHUwMDNlYml0bWFwMV9zaXplIFxcdTAwM2NcXHUwMDNjIDkpKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NjI6XFx0XFx0bGRtX2NyaXQgKFxcXCJWTURCIGV4Y2VlZHMgYWxsb3dlZCBzaXplIHNwZWNpZmllZCBieSBUT0NCTE9DSy4gIFxcXCJcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ2My1cXHRcXHRcXHRcXHRcXFwiRGF0YWJhc2UgaXMgY29ycnVwdC4gIEFib3J0aW5nLlxcXCIpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uaD0yMT1zdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnM7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5oLTI2LSNkZWZpbmUgTUFHSUNfUFJJVkhFQURcXHQweDUwNTI0OTU2NDg0NTQxNDRVTExcXHQvKiBQUklWSEVBRCAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmg6Mjc6I2RlZmluZSBNQUdJQ19UT0NCTE9DS1xcdDB4NTQ0RjQzNDI0QzRGNDM0QlVMTFxcdC8qIFRPQ0JMT0NLICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uaC0yOC1cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmgtODMtI2RlZmluZSBUT0NfQklUTUFQMVxcdFxcdFxcXCJjb25maWdcXFwiXFx0LyogTmFtZXMgb2YgdGhlIHR3byBkZWZpbmVkICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uaDo4NDojZGVmaW5lIFRPQ19CSVRNQVAyXFx0XFx0XFxcImxvZ1xcXCJcXHRcXHQvKiBiaXRtYXBzIGluIHRoZSBUT0NCTE9DSy4gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5oLTg1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0NzoxMi45OTE2Mjg3MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODA5NjI4Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNvcmUgYmxvY2sgZGV2aWNlIGNvbXBvbmVudHMgYXJlIGJlaW5nIGNvbXBpbGVkLiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIGBibG9jay9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHRoZSByZWNpcGUgZm9yIGJ1aWxkaW5nIGBiZGV2Lm9gLCBgYmxrLWNvcmUub2AsIGFuZCBhbnl0aGluZyB3aXRoaW4gdGhlIGBwYXJ0aXRpb25zL2AgZGlyZWN0b3J5LiBUaGF0IE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgbG93LWRvd24gb24gdGhlIGRlcGVuZGVuY2llcywgY29tcGlsZXIgZmxhZ3MsIGFuZCB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5kYW1lbnRhbCBwaWVjZXMgb2YgbXkgYmxvY2sgbGF5ZXIgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjA4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6MTUuODAxMjU5MDIzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTg5MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai15fGNvcmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9Nj1DT05URVhUX0FOQUxZU0lTIDo9IHlcXG5ibG9jay9NYWtlZmlsZS03LVxcbmJsb2NrL01ha2VmaWxlOjg6b2JqLXlcXHRcXHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxcXFxuYmxvY2svTWFrZWZpbGUtOS1cXHRcXHRcXHRibGstZmx1c2gubyBibGstc2V0dGluZ3MubyBibGstaW9jLm8gYmxrLW1hcC5vIFxcXFxcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGUtNS1cXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JMT0NLKSArPSBjb3JlLm9cXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX0FDT1JOX1BBUlRJVElPTikgKz0gYWNvcm4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0NzoxNS44OTEyNTI0OTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjk0Mzk4MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgQ09ORklHX0JMT0NLYCBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZW4gYEJMT0NLYCBzZWVtcyB0byBiZSB0aGUgZGVmYXVsdCwgc3RhbmRhcmQgbWVudWNvbmZpZyBvcHRpb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSBhcmUgYW55IG1vcmUgZmluZS1ncmFpbmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdyaXRlIHN0cmVhbXMgb3IgYW55dGhpbmcgc2ltaWxhciB0aGF0IEkgbWlnaHQgYmUgYWJsZSB0byB0d2Vhay4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBJIGNhbiBjdXN0b21pemUgd3JpdGUgYmVoYXZpb3IuIEknbGwgbmVlZCB0byBkaWcgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB3cml0ZSBzdHJlYW1zLiBUaW1lIHRvIGdyZXAgZm9yIGFueXRoaW5nIGNvbnRhaW5pbmcgXCJ3cml0ZV9zdHJlYW1zXCIgaW4gdGhlIGBibG9jay9gIGRpcmVjdG9yeSBhbmQgdW5kZXIgYGluY2x1ZGUvbGludXgvYC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byBzb21lIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIG9yIHJlbGF0ZWQgY29kZSB0aGF0IEkgY2FuIGV4YW1pbmUgbW9yZSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkzNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjE4LjU4NTY2MTI1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1OTQ4NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGVfc3RyZWFtc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNvcmUuYz02MjI9c3RhdGljIGludCBibGtfcGFydGl0aW9uX3JlbWFwKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1jb3JlLmMtNjM0LVxcdGlmIChiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSBcXHUwMDI2XFx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcXG5ibG9jay9ibGstY29yZS5jOjYzNTpcXHRcXHRpZiAodW5saWtlbHkoYmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gXFx1MDAzZSBwLVxcdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKSlcXG5ibG9jay9ibGstY29yZS5jLTYzNi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jPTIyMj1RVUVVRV9TWVNGU19MSU1JVF9TSE9XKG1heF9zZWdtZW50X3NpemUpXFxuYmxvY2svYmxrLXN5c2ZzLmM6MjIzOlFVRVVFX1NZU0ZTX0xJTUlUX1NIT1cobWF4X3dyaXRlX3N0cmVhbXMpXFxuYmxvY2svYmxrLXN5c2ZzLmMtMjI0LVFVRVVFX1NZU0ZTX0xJTUlUX1NIT1cod3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5KVxcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmM9NjE4PVFVRVVFX0xJTV9ST19FTlRSWShxdWV1ZV9tYXhfc2VnbWVudF9zaXplLCBcXFwibWF4X3NlZ21lbnRfc2l6ZVxcXCIpO1xcbmJsb2NrL2Jsay1zeXNmcy5jOjYxOTpRVUVVRV9MSU1fUk9fRU5UUlkocXVldWVfbWF4X3dyaXRlX3N0cmVhbXMsIFxcXCJtYXhfd3JpdGVfc3RyZWFtc1xcXCIpO1xcbmJsb2NrL2Jsay1zeXNmcy5jLTYyMC1RVUVVRV9MSU1fUk9fRU5UUlkocXVldWVfd3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5LCBcXFwid3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5XFxcIik7XFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYz03MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmNvbnN0IHF1ZXVlX2F0dHJzW10gPSB7XFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy03NDQtXFx0XFx1MDAyNnF1ZXVlX21heF9zZWdtZW50X3NpemVfZW50cnkuYXR0cixcXG5ibG9jay9ibGstc3lzZnMuYzo3NDU6XFx0XFx1MDAyNnF1ZXVlX21heF93cml0ZV9zdHJlYW1zX2VudHJ5LmF0dHIsXFxuYmxvY2svYmxrLXN5c2ZzLmMtNzQ2LVxcdFxcdTAwMjZxdWV1ZV93cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHlfZW50cnkuYXR0cixcXG4tLVxcbmJsb2NrL2ZvcHMuYz0zOTQ9c3RhdGljIHNzaXplX3QgYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4tLVxcbmJsb2NrL2ZvcHMuYy00MDUtXFx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFKSB7XFxuYmxvY2svZm9wcy5jOjQwNjpcXHRcXHR1MTYgbWF4X3dyaXRlX3N0cmVhbXMgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKGJkZXYpO1xcbmJsb2NrL2ZvcHMuYy00MDctXFxuYmxvY2svZm9wcy5jLTQwOC1cXHRcXHRpZiAoaW9jYi1cXHUwMDNla2lfd3JpdGVfc3RyZWFtKSB7XFxuYmxvY2svZm9wcy5jOjQwOTpcXHRcXHRcXHRpZiAoaW9jYi1cXHUwMDNla2lfd3JpdGVfc3RyZWFtIFxcdTAwM2UgbWF4X3dyaXRlX3N0cmVhbXMpXFxuYmxvY2svZm9wcy5jLTQxMC1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5ibG9jay9mb3BzLmM6NDExOlxcdFxcdH0gZWxzZSBpZiAobWF4X3dyaXRlX3N0cmVhbXMpIHtcXG5ibG9jay9mb3BzLmMtNDEyLVxcdFxcdFxcdGVudW0gcndfaGludCB3cml0ZV9oaW50ID1cXG4tLVxcbmJsb2NrL2ZvcHMuYy00MTktXFx0XFx0XFx0ICovXFxuYmxvY2svZm9wcy5jOjQyMDpcXHRcXHRcXHRpZiAod3JpdGVfaGludCBcXHUwMDNjPSBtYXhfd3JpdGVfc3RyZWFtcylcXG5ibG9jay9mb3BzLmMtNDIxLVxcdFxcdFxcdFxcdGlvY2ItXFx1MDAzZWtpX3dyaXRlX3N0cmVhbSA9IHdyaXRlX2hpbnQ7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0yMDI9c3RhdGljIHNzaXplX3QgcGFydF9kaXNjYXJkX2FsaWdubWVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIwNy1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMDg6c3RhdGljIHNzaXplX3QgcGFydF93cml0ZV9zdHJlYW1zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIwOS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMTAte1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIxMTpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgZGV2X3RvX2JkZXYoZGV2KS1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyk7XFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjEyLX1cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIxOC0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMTk6c3RhdGljIHZvaWQgcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIyMC17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMjUtXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjI2OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwYXJ0LVxcdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zOyBpKyspXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI3LVxcdFxcdF9fY2xlYXJfYml0KHBhcnQtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV0sXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjI4OlxcdFxcdFxcdCAgICBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMjktfVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzMC1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMzE6c3RhdGljIGludCBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQsIHU4IG5yKVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzMi17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMzQtXFx0dW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCxcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMzU6XFx0XFx0XFx0XFx0IGJkZXZfbGltaXRzKHBhcnQpLVxcdTAwM2VtYXhfd3JpdGVfc3RyZWFtcywgVThfTUFYKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMzYtXFx0dTggKm1hcCA9IE5VTEw7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNTctXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjU4OlxcdGN1ciA9IHBhcnQtXFx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjU5LVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjY5LVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI3MDpcXHRucl9mcmVlID0gbWF4IC0gYml0bWFwX3dlaWdodChkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggKyAxKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNzEtXFx0aWYgKG5yIFxcdTAwM2UgY3VyIFxcdTAwMjZcXHUwMDI2IG5yIC0gY3VyIFxcdTAwM2UgbnJfZnJlZSkge1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjg1LVxcdFxcdFxcdF9fY2xlYXJfYml0KHBhcnQtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV0sXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjg2OlxcdFxcdFxcdFxcdCAgICBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODctXFx0fSBlbHNlIHtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODgtXFx0XFx0Zm9yIChpID0gY3VyOyBpIFxcdTAwM2MgbnI7IGkrKykge1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI4OTpcXHRcXHRcXHRpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI5MC1cXHRcXHRcXHRcXHRcXHRcXHRtYXggKyAxLCAxKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyOTE6XFx0XFx0XFx0X19zZXRfYml0KGlkLCBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTItXFx0XFx0XFx0bWFwW2ldID0gaWQ7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTYtXFx0c3dhcChwYXJ0LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwLCBtYXApO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI5NzpcXHRwYXJ0LVxcdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zID0gbnI7XFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjk4LVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMzA1LVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjMwNjpzdGF0aWMgc3NpemVfdCBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTMwNy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTMyNS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzozMjY6XFx0cmV0ID0gcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhkZXZfdG9fYmRldihkZXYpLCBucik7XFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMzI3LVxcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MzM5PXN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzozNDA6c3RhdGljIERFVklDRV9BVFRSKHdyaXRlX3N0cmVhbXMsIDA2NDQsIHBhcnRfd3JpdGVfc3RyZWFtc19zaG93LFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjM0MTpcXHRcXHQgICBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTM0Mi0jaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0zNDc9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBhcnRfYXR0cnNbXSA9IHtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTM1NS1cXHRcXHUwMDI2ZGV2X2F0dHJfaW5mbGlnaHQuYXR0cixcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzozNTY6XFx0XFx1MDAyNmRldl9hdHRyX3dyaXRlX3N0cmVhbXMuYXR0cixcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0zNTctI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9NDAwPXZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydClcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTQwMy1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo0MDQ6XFx0cGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy00MDUtXFx0eGFfZXJhc2UoXFx1MDAyNnBhcnQtXFx1MDAzZWJkX2Rpc2stXFx1MDAzZXBhcnRfdGJsLCBiZGV2X3BhcnRubyhwYXJ0KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjE4LjcwMDI2MTcxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NDI1MTY4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgV3JpdGUgU3RyZWFtIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgZXhpc3Rpbmcgc3VwcG9ydCBmb3Igd3JpdGUgc3RyZWFtcyBpbiB0aGUgYmxvY2sgZGV2aWNlIGxheWVyLCBvciBzcGVjaWZpY2FsbHksIGlmIG51bGxfYmxrIGlzIHBsYXlpbmcgYmFsbC4gVGhlIGZpcnN0IHN0ZXAgaXMgcHJldHR5IGNsZWFyOiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBodW50IGRvd24gaW5zdGFuY2VzIG9mIGBtYXhfd3JpdGVfc3RyZWFtc2AgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIGZvY3VzaW5nIG9uIHRoZSBibG9jayBkZXZpY2UgZHJpdmVycy4gSSdsbCBzdGFydCB3aXRoIGBkcml2ZXJzL2Jsb2NrL2AsIG9idmlvdXNseSwgYnV0IEknbGwgYnJvYWRlbiB0aGUgc2VhcmNoIGlmIG5lZWRlZC4gSXQncyBhIGtleSBpbmRpY2F0b3IgZm9yIHRoaXMgZmVhdHVyZSwgc28gZmluZGluZyBpdCB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgYSBjbHVlIGFzIHRvIHdoaWNoIGRldmljZXMgYXJlIGNhcGFibGUgb2Ygc3VwcG9ydGluZyB0aGUgZmVhdHVyZS4gVGhpcyBmZWVscyBsaWtlIHRoZSByaWdodCBhbmdsZSB0byBzdGFydCBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjIzLjI0Mjc4MDkwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNTM2MDgzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhfd3JpdGVfc3RyZWFtc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjM5OD1zdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI0OTItXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI0OTM6XFx0bGltLm1heF93cml0ZV9zdHJlYW1zID0gbnMtXFx1MDAzZWhlYWQtXFx1MDAzZW5yX3BsaWRzO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDk0LVxcdGxpbS53cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHkgPSBucy1cXHUwMDNlaGVhZC1cXHUwMDNld3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5O1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTI1Mzk9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNjEwLVxcdFxcdFxcdG52bWVfaW5pdF9pbnRlZ3JpdHkobnMtXFx1MDAzZWhlYWQsIFxcdTAwMjZsaW0sIGluZm8pO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNjExOlxcdFxcdGxpbS5tYXhfd3JpdGVfc3RyZWFtcyA9IG5zX2xpbS1cXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXM7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI2MTItXFx0XFx0bGltLndyaXRlX3N0cmVhbV9ncmFudWxhcml0eSA9IG5zX2xpbS1cXHUwMDNld3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0NzoyNC4zNDgxNTI3NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyNTU5OTU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0IGFuZCB1c2luZyBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQmxvY2sgRHJpdmVyIEludGVyYWN0aW9ucyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgYmV5b25kIHRoZSBpbW1lZGlhdGUgaXNzdWUsIHdlIG5lZWQgdG8gdGFrZSBhIHdpZGVyIGxvb2sgYXQgcG90ZW50aWFsIGludGVyYWN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gcnVuIGEgYGdyZXBgIGZvciBgbnVsbF9ibGtgIGFuZCBhbnkgb3RoZXIgYmxvY2sgZHJpdmVycyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBJIHdhbnQgdG8gYmUgdGhvcm91Z2ggYW5kIGNvbnNpZGVyIGFsbCBwb3NzaWJpbGl0aWVzLiBJdCdzIGVhc3kgdG8gZ2V0IHR1bm5lbCB2aXNpb24sIGVzcGVjaWFsbHkgd2hlbiB0cm91Ymxlc2hvb3RpbmcsIHNvIGxldCdzIGdldCBhIGNvbXByZWhlbnNpdmUgbGlzdCB0byBydWxlIG91dCBsZXNzIG9idmlvdXMgaXNzdWVzLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg0OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjI2LjI3Mzc1NTQ3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNDQxNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heF93cml0ZV9zdHJlYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstc3lzZnMuYz0yMjI9UVVFVUVfU1lTRlNfTElNSVRfU0hPVyhtYXhfc2VnbWVudF9zaXplKVxcbmJsb2NrL2Jsay1zeXNmcy5jOjIyMzpRVUVVRV9TWVNGU19MSU1JVF9TSE9XKG1heF93cml0ZV9zdHJlYW1zKVxcbmJsb2NrL2Jsay1zeXNmcy5jLTIyNC1RVUVVRV9TWVNGU19MSU1JVF9TSE9XKHdyaXRlX3N0cmVhbV9ncmFudWxhcml0eSlcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jPTYxOD1RVUVVRV9MSU1fUk9fRU5UUlkocXVldWVfbWF4X3NlZ21lbnRfc2l6ZSwgXFxcIm1heF9zZWdtZW50X3NpemVcXFwiKTtcXG5ibG9jay9ibGstc3lzZnMuYzo2MTk6UVVFVUVfTElNX1JPX0VOVFJZKHF1ZXVlX21heF93cml0ZV9zdHJlYW1zLCBcXFwibWF4X3dyaXRlX3N0cmVhbXNcXFwiKTtcXG5ibG9jay9ibGstc3lzZnMuYy02MjAtUVVFVUVfTElNX1JPX0VOVFJZKHF1ZXVlX3dyaXRlX3N0cmVhbV9ncmFudWxhcml0eSwgXFxcIndyaXRlX3N0cmVhbV9ncmFudWxhcml0eVxcXCIpO1xcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmM9NzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpjb25zdCBxdWV1ZV9hdHRyc1tdID0ge1xcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmMtNzQ0LVxcdFxcdTAwMjZxdWV1ZV9tYXhfc2VnbWVudF9zaXplX2VudHJ5LmF0dHIsXFxuYmxvY2svYmxrLXN5c2ZzLmM6NzQ1OlxcdFxcdTAwMjZxdWV1ZV9tYXhfd3JpdGVfc3RyZWFtc19lbnRyeS5hdHRyLFxcbmJsb2NrL2Jsay1zeXNmcy5jLTc0Ni1cXHRcXHUwMDI2cXVldWVfd3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5X2VudHJ5LmF0dHIsXFxuLS1cXG5ibG9jay9mb3BzLmM9Mzk0PXN0YXRpYyBzc2l6ZV90IGJsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5ibG9jay9mb3BzLmMtNDA1LVxcdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSkge1xcbmJsb2NrL2ZvcHMuYzo0MDY6XFx0XFx0dTE2IG1heF93cml0ZV9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcXG5ibG9jay9mb3BzLmMtNDA3LVxcbmJsb2NrL2ZvcHMuYy00MDgtXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX3dyaXRlX3N0cmVhbSkge1xcbmJsb2NrL2ZvcHMuYzo0MDk6XFx0XFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX3dyaXRlX3N0cmVhbSBcXHUwMDNlIG1heF93cml0ZV9zdHJlYW1zKVxcbmJsb2NrL2ZvcHMuYy00MTAtXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuYmxvY2svZm9wcy5jOjQxMTpcXHRcXHR9IGVsc2UgaWYgKG1heF93cml0ZV9zdHJlYW1zKSB7XFxuYmxvY2svZm9wcy5jLTQxMi1cXHRcXHRcXHRlbnVtIHJ3X2hpbnQgd3JpdGVfaGludCA9XFxuLS1cXG5ibG9jay9mb3BzLmMtNDE5LVxcdFxcdFxcdCAqL1xcbmJsb2NrL2ZvcHMuYzo0MjA6XFx0XFx0XFx0aWYgKHdyaXRlX2hpbnQgXFx1MDAzYz0gbWF4X3dyaXRlX3N0cmVhbXMpXFxuYmxvY2svZm9wcy5jLTQyMS1cXHRcXHRcXHRcXHRpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW0gPSB3cml0ZV9oaW50O1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MjMxPXN0YXRpYyBpbnQgcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0LCB1OCBucilcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzNC1cXHR1bnNpZ25lZCBpbnQgbWF4ID0gbWluX3QodW5zaWduZWQgaW50LFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIzNTpcXHRcXHRcXHRcXHQgYmRldl9saW1pdHMocGFydCktXFx1MDAzZW1heF93cml0ZV9zdHJlYW1zLCBVOF9NQVgpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzNi1cXHR1OCAqbWFwID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6MjYuMzk1MjAyNTAyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwODYzNTkxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBDb2RlIEluc3BlY3Rpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGVyZSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgd3JpdGUgc3RyZWFtIG1hbmFnZW1lbnQgcmVzaWRlLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMgSSBzZWUgbGlzdGVkOiBgcGFydF93cml0ZV9zdHJlYW1zX3N0b3JlYCwgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgLCBgcGFydF9wdXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIGBibGtfcGFydGl0aW9uX3JlbWFwYCwgYW5kIGBkcm9wX3BhcnRpdGlvbmAuIEknbGwgd2FudCB0byB0cmFjZSB0aGVpciBjYWxscywgaG93IHRoZXkncmUgc3RydWN0dXJlZCwgYW5kIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIHdlcmUgbWFkZS4gVGhlIGluY2x1c2lvbiBvZiBgYmRldl9mcmVlX2lub2RlYCBhbHNvIHBpcXVlcyBteSBpbnRlcmVzdCwgc28gSSdsbCBiZSBzdXJlIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0LlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYXNzdW1wdGlvbnMgaGVyZS4gQXJlIHdlIHdvcmtpbmcgd2l0aCBhIGdlbmVyaWMgc2V0dXAsIG9yIGFyZSB3ZSB0YXJnZXRpbmcgc3BlY2lmaWMgZGV2aWNlIHR5cGVzIGxpa2UgYEJMS19ERVZfTlVMTF9CTEtgLCBgTlZNRV9DT1JFYCwgYEJMS19ERVZfTE9PUGAsIG9yIGBCTEtfREVWX1JBTWA/IFRoZSBwcmVzZW5jZSBvZiBgQkxPQ0tgIGNvbmZpZyBzdWdnZXN0cyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGNvcmUgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHNvIHRoZSBzY29wZSBtYXkgYmUgbW9yZSB0YXJnZXRlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciBwYXJ0aXRpb25pbmcgb3IgdGhlIGJsb2NrIHN5c2ZzIGluIGdlbmVyYWwuIFNvIGBibG9jay9LY29uZmlnYCB3aWxsIG5lZWQgYSBjbG9zZSBsb29rLiBUaGlzIGFwcHJvYWNoIHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc3OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0NzozMi40ODE1NjY1OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEJsb2NrIGxheWVyIGNvcmUgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudWNvbmZpZyBCTE9DS1xcbiAgIDY6XFx0ICAgICAgIGJvb2wgXFxcIkVuYWJsZSB0aGUgYmxvY2sgbGF5ZXJcXFwiIGlmIEVYUEVSVFxcbiAgIDc6XFx0ICAgICAgIGRlZmF1bHQgeVxcbiAgIDg6XFx0ICAgICAgIHNlbGVjdCBGU19JT01BUFxcbiAgIDk6XFx0ICAgICAgIHNlbGVjdCBTQklUTUFQXFxuICAxMDpcXHQgICAgICAgaGVscFxcbiAgMTE6XFx0XFx0IFByb3ZpZGUgYmxvY2sgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIGtlcm5lbC5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0IERpc2FibGUgdGhpcyBvcHRpb24gdG8gcmVtb3ZlIHRoZSBibG9jayBsYXllciBzdXBwb3J0IGZyb20gdGhlXFxuICAxNDpcXHRcXHQga2VybmVsLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGVtYmVkZGVkIGRldmljZXMuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZDpcXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0ICAgLSBibG9jayBkZXZpY2UgZmlsZXMgd2lsbCBiZWNvbWUgdW51c2FibGVcXG4gIDE5OlxcdFxcdCAgIC0gc29tZSBmaWxlc3lzdGVtcyAoc3VjaCBhcyBleHQzKSB3aWxsIGJlY29tZSB1bmF2YWlsYWJsZS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0IEFsc28sIFNDU0kgY2hhcmFjdGVyIGRldmljZXMgYW5kIFVTQiBzdG9yYWdlIHdpbGwgYmUgZGlzYWJsZWQgc2luY2VcXG4gIDIyOlxcdFxcdCB0aGV5IG1ha2UgdXNlIG9mIHZhcmlvdXMgYmxvY2sgbGF5ZXIgZGVmaW5pdGlvbnMgYW5kIGZhY2lsaXRpZXMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCBTYXkgWSBoZXJlIHVubGVzcyB5b3Uga25vdyB5b3UgcmVhbGx5IGRvbid0IHdhbnQgdG8gbW91bnQgZGlza3MgYW5kXFxuICAyNTpcXHRcXHQgc3VjaGxpa2UuXFxuICAyNjpcXHRcXG4gIDI3OlxcdGlmIEJMT0NLXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBCTE9DS19MRUdBQ1lfQVVUT0xPQURcXG4gIDMwOlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBhdXRvbG9hZGluZyBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMjpcXHRcXHRoZWxwXFxuICAzMzpcXHRcXHQgIEVuYWJsZSBsb2FkaW5nIG1vZHVsZXMgYW5kIGNyZWF0aW5nIGJsb2NrIGRldmljZSBpbnN0YW5jZXMgYmFzZWQgb25cXG4gIDM0OlxcdFxcdCAgYWNjZXNzZXMgdGhyb3VnaCB0aGVpciBkZXZpY2Ugc3BlY2lhbCBmaWxlLiAgVGhpcyBpcyBhIGhpc3RvcmljIExpbnV4XFxuICAzNTpcXHRcXHQgIGZlYXR1cmUgYW5kIG1ha2VzIG5vIHNlbnNlIGluIGEgdWRldiB3b3JsZCB3aGVyZSBkZXZpY2UgZmlsZXMgYXJlXFxuICAzNjpcXHRcXHQgIGNyZWF0ZWQgb24gZGVtYW5kLCBidXQgc2NyaXB0cyB0aGF0IG1hbnVhbGx5IGNyZWF0ZSBkZXZpY2Ugbm9kZXMgYW5kXFxuICAzNzpcXHRcXHQgIHRoZW4gY2FsbCBsb3NldHVwIG1pZ2h0IHJlbHkgb24gdGhpcyBiZWhhdmlvci5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXFxuICA0MDpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjMyLjQ4MTY3MTE4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjA0MDA3OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbG9jayBEZXZpY2UgUGFydGl0aW9uaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGBDT05GSUdfQkxPQ0tgIGlzIG9uIGJ5IGRlZmF1bHQsIGFuZCBzZWVtcyB0byBiZSBlc3NlbnRpYWwgZm9yIGV2ZXJ5dGhpbmcgaW4gdGhlIGBibG9jay9gIGRpcmVjdG9yeS4gUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiBJIG5lZWQgdG8gdmVyaWZ5IGlmIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVgLCBgcGFydF9zZXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zYCwgYHBhcnRfd3JpdGVfc3RyZWFtc19zaG93YCwgYW5kIGBibGtfcGFydGl0aW9uX3JlbWFwYCBhcmUgYWxsIHRoZSBjb3JyZWN0IEZvY3VzU3ltYm9scy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciBlYWNoLiBBbmQgdGhlbiBJIGhhdmUgdG8gc2VlIGlmIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCBpcyBpbmxpbmVkIG9yIHN0YXRpYzsgdGhhdCBraW5kIG9mIGRldGFpbCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb21waWxlciBoYW5kbGVzIGl0LlxuXG5Mb29raW5nIGluIGBibG9jay9wYXJ0aXRpb25zL2NvcmUuY2AsIEkgc2VlOiBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCBgcGFydF9wdXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCwgYW5kIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVgLCBhbGwgY2FuZGlkYXRlcy4gYGJsa19wYXJ0aXRpb25fcmVtYXBgIGlzIG92ZXIgaW4gYGJsb2NrL2Jsay1jb3JlLmNgIGFuZCBgYmRldl9mcmVlX2lub2RlYCBpbiBgYmxvY2svYmRldi5jYCwgYW5kIGZpbmFsbHkgYGRyb3BfcGFydGl0aW9uYCBpbiBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLiBHb3QgaXQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoYXQgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGlzIGRvaW5nLiBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGl0J3Mgc3RhdGljIGlubGluZSBvciBqdXN0IHN0YXRpYy4gSG1tLCBpbiBgYmxvY2svYmxrLWNvcmUuY2AsIEkgc2VlOiBgc3RhdGljIGludCBibGtfcGFydGl0aW9uX3JlbWFwKHN0cnVjdCBiaW8gKmJpbylgLiBXYWl0IGEgbWludXRlLCB0aGUgZGlmZiBJIHNhdyBiZWZvcmUgaGFkIGEgYHN0YXRpYyBpbmxpbmVgIGZ1bmN0aW9uIGBiaW9fY2hlY2tfZW9kYCBvbiBsaW5lIDYxNiwgYnV0IGBibGtfcGFydGl0aW9uX3JlbWFwYCBvbiBsaW5lIDYyMiBpcyBqdXN0IGBzdGF0aWMgaW50YC4gSW50ZXJlc3RpbmcuIEl0J3Mgbm90IGlubGluZWQsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgbm90LiBUaW1lIHRvIHRyYWNrIGRvd24gd2hlcmUgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGlzIGNhbGxlZCBpbiBgYmxvY2svYmxrLWNvcmUuY2AgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODE3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6MzYuNjg1NjgyMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTA0NTI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfcGFydGl0aW9uX3JlbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY29yZS5jPTU5OT1zdGF0aWMgaW5saW5lIGludCBiaW9fY2hlY2tfZW9kKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1jb3JlLmMtNjIxLSAqL1xcbmJsb2NrL2Jsay1jb3JlLmM6NjIyOnN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pXFxuYmxvY2svYmxrLWNvcmUuYy02MjMte1xcbi0tXFxuYmxvY2svYmxrLWNvcmUuYz04MjU9dm9pZCBzdWJtaXRfYmlvX25vYWNjdChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstY29yZS5jLTg1My1cXHRcXHRpZiAoYmRldl9pc19wYXJ0aXRpb24oYmRldikgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9ibGstY29yZS5jOjg1NDpcXHRcXHQgICAgdW5saWtlbHkoYmxrX3BhcnRpdGlvbl9yZW1hcChiaW8pKSlcXG5ibG9jay9ibGstY29yZS5jLTg1NS1cXHRcXHRcXHRnb3RvIGVuZF9pbztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6MzYuODA0NzM1MTgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwODIwMjI2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQmxvY2sgTGF5ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93bi4gSSBzZWUgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGJlaW5nIGNhbGxlZCB3aXRoaW4gYHN1Ym1pdF9iaW9fbm9hY2N0YCwgd2hpY2ggaXMgYSBrZXkgcG9pbnQgdG8gc3RhcnQgd2l0aC4gVGhlbiwgSSd2ZSBnb3QgYSBsaXN0IG9mIHJlbGV2YW50IGZ1bmN0aW9uczogYHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZWAsIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCwgYHBhcnRfcHV0X3dyaXRlX3N0cmVhbXNgLCBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCBgYmxrX3BhcnRpdGlvbl9yZW1hcGAsIGFuZCBgZHJvcF9wYXJ0aXRpb25gLiBJIG5lZWQgdG8gZW5zdXJlIGEgaG9saXN0aWMgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgaW50ZXJhY3QuXG5cbkxldCdzIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgcXVpY2tseS4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUgLSBnb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdC4gRW5hYmxlQ29uZmlncyBpcyBzZXQgdG8gW1wiQkxPQ0tcIl0sIHdoaWNoIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGlzIGtpbmQgb2YgZnVuY3Rpb25hbGl0eS4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90IG9uLCBjb250YWluaW5nIGFsbCB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCBhcyBjZW50cmFsIHRvIHRoaXMgY2hhbmdlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBhYm91dCB3cml0ZSBzdHJlYW0gbWFuYWdlbWVudCBvbiBibG9jayBkZXZpY2UgcGFydGl0aW9ucywgdXNpbmcgYSBuZXcgc3lzZnMgYXR0cmlidXRlLiBJdCB0b3VjaGVzIHBhcnRpdGlvbiBsaWZlY3ljbGUgbWFuYWdlbWVudCwgaW5vZGUgY2xlYW51cCAoc3BlY2lmaWNhbGx5IGBiZGV2X2ZyZWVfaW5vZGVgKSwgYW5kIHRoZSBiaW8gc3VibWlzc2lvbiBwcm9jZXNzIHdpdGggYGJsa19wYXJ0aXRpb25fcmVtYXBgLiBUaGUgY29kZSBpcyBmdW5kYW1lbnRhbGx5IHBhcnQgb2YgdGhlIGNvcmUgYmxvY2sgbGF5ZXIsIHNvIGl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHdpdGggYmxvY2sgZGV2aWNlcyBhbmQgc3lzZnMuIFRoYXQgc2VlbXMgcmVhc29uYWJsZS5cblxuSSBzaG91bGQgdmVyaWZ5IHRoZSBjb25maWcgYW5kIHN5bWJvbCBuYW1lcyBvbmUgbW9yZSB0aW1lLiBUaGUgY29uZmlnIGNoZWNrcyBvdXQgYXMgYEJMT0NLYC4gVGhlIHN5bWJvbHMgbGlzdGVkIGFyZSBhbGwgcHJlc2VudCBhbmQgYWNjb3VudGVkIGZvci5cblxuRXZlcnl0aGluZyBsb29rcyBjbGVhbiBhbmQgd2VsbC1kZWZpbmVkLCBpdCBzZWVtcy4gSSdtIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODI0LCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0Nzo0MC44ODY3NjA0ODdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY1NDUwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFydF93cml0ZV9zdHJlYW1zX3N0b3JlXCIsXG4gICAgXCJwYXJ0X3NldF93cml0ZV9zdHJlYW1zXCIsXG4gICAgXCJwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd1wiLFxuICAgIFwicGFydF9wdXRfd3JpdGVfc3RyZWFtc1wiLFxuICAgIFwiYmxrX3BhcnRpdGlvbl9yZW1hcFwiLFxuICAgIFwiZHJvcF9wYXJ0aXRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHdyaXRlIHN0cmVhbSByZXNlcnZhdGlvbiBhbmQgcmVtYXBwaW5nIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSBwYXJ0aXRpb25zLiBJdCBhZGRzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSAod3JpdGVfc3RyZWFtcykgdG8gcGFydGl0aW9ucywgaW1wbGVtZW50cyBzdHJlYW0gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gdHJhY2tpbmcgb24gdGhlIHVuZGVybHlpbmcgZGlzaywgYW5kIHVwZGF0ZXMgYmlvIHBhcnRpdGlvbiByZW1hcHBpbmcgdG8gbWFwIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW1zIHRvIGRpc2sgd3JpdGUgc3RyZWFtcy4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVcIixcbiAgICBcInBhcnRfc2V0X3dyaXRlX3N0cmVhbXNcIixcbiAgICBcInBhcnRfd3JpdGVfc3RyZWFtc19zaG93XCIsXG4gICAgXCJwYXJ0X3B1dF93cml0ZV9zdHJlYW1zXCIsXG4gICAgXCJibGtfcGFydGl0aW9uX3JlbWFwXCIsXG4gICAgXCJkcm9wX3BhcnRpdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgd3JpdGUgc3RyZWFtIHJlc2VydmF0aW9uIGFuZCByZW1hcHBpbmcgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHBhcnRpdGlvbnMuIEl0IGFkZHMgYSBuZXcgc3lzZnMgYXR0cmlidXRlICh3cml0ZV9zdHJlYW1zKSB0byBwYXJ0aXRpb25zLCBpbXBsZW1lbnRzIHN0cmVhbSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiB0cmFja2luZyBvbiB0aGUgdW5kZXJseWluZyBkaXNrLCBhbmQgdXBkYXRlcyBiaW8gcGFydGl0aW9uIHJlbWFwcGluZyB0byBtYXAgcGFydGl0aW9uIHdyaXRlIHN0cmVhbXMgdG8gZGlzayB3cml0ZSBzdHJlYW1zLiBUaGlzIGxvZ2ljIGlzIHBhcnQgb2YgdGhlIGNvcmUgYmxvY2sgc3Vic3lzdGVtIGFuZCBpcyBmdWxseSByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBibG9jayBJL08gb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6NDEuMDAzMzEzMzk4WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTMwOTAyOTU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjQxLjAwMzg0NzM1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk5MzA4NDkyMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN5c2ZzIGNvbmZpZ3VyYXRpb24gYW5kIGJsb2NrIGxheWVyIHJlbWFwcGluZyBmb3Igd3JpdGUgc3RyZWFtcyBvbiBwYXJ0aXRpb24gYmxvY2sgZGV2aWNlcy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbm9kZXMvYmRldnMgYXJlIGFsbG9jYXRlZCB2aWEgYGJkZXZfYWxsb2NfaW5vZGVgIHdoaWNoIGV4cGxpY2l0bHkgemVyb2VzIHRoZSBgc3RydWN0IGJsb2NrX2RldmljZWAgd2l0aCBgbWVtc2V0YCwgZW5zdXJpbmcgYGJkX25yX3dyaXRlX3N0cmVhbXNgIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgc3RhcnQgYXQgemVyby9OVUxMLlxcbi0gYHN0cnVjdCBnZW5kaXNrYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAsIGVuc3VyaW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBiaXRtYXAgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG4tIFdoZW4gYG1hcGAgaXMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgaW4gYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoKWAsIGV2ZXJ5IGVsZW1lbnQgaW4gYG1hcFswIC4uIG5yLTFdYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFjcm9zcyB0aGUgbG9vcCBicmFuY2hlcyBiZWZvcmUgc3dhcHBpbmcgaW50byBgYmRldi1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcGAuXFxuXFxuMi4gVXNlciBTcGFjZSBDb21tdW5pY2F0aW9uOlxcbi0gVGhlIG9ubHkgaW50ZXJmYWNlIGV4cG9zaW5nIGRhdGEgdG8gdXNlcnNwYWNlIGlzIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIHdoaWNoIHVzZXMgYHN5c2ZzX2VtaXQoKWAgdG8gZm9ybWF0IHRoZSBpbnRlZ2VyIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBpbnRvIGEgc3RyaW5nLiBObyBiaW5hcnkgc3RydWN0dXJlcyBvciBwYWRkZWQgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuXFxuMy4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVudCBhY2Nlc3MsIG9yIG1lbW9yeSBsZWFrcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLlxcbi0gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxM2Q2ZjZkNjhjZmM0NTRmZmIwMmUwOThjMzFmNmZlNzk1MGUyNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNzo0Njo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9jayBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9ja1xuaW5kZXggOTAwYjNmYzRjNzJkMC4uNDQyZjRjMjIxYmRlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9ja1xuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrXG5AQCAtMjE4LDYgKzIxOCwyNSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0c2FtZSBhcyB0aGUgZm9ybWF0IG9mIC9zeXMvYmxvY2svXHUwMDNjZGlza1x1MDAzZS9zdGF0LlxuIFxuIFxuK1doYXQ6XHRcdC9zeXMvYmxvY2svXHUwMDNjZGlza1x1MDAzZS9cdTAwM2NwYXJ0aXRpb25cdTAwM2Uvd3JpdGVfc3RyZWFtc1xuK0RhdGU6XHRcdFNlcHRlbWJlciAyMDI2XG4rQ29udGFjdDpcdEtlb3Nlb25nIFBhcmsgXHUwMDNja2Vvc3VuZy5wYXJrQHNhbXN1bmcuY29tXHUwMDNlXG4rRGVzY3JpcHRpb246XG4rXHRcdFtSV10gTnVtYmVyIG9mIHRoZSBkaXNrJ3Mgd3JpdGUgc3RyZWFtcyByZXNlcnZlZCBmb3IgdGhlXG4rXHRcdHBhcnRpdGlvbi4gV3JpdGluZyBOIHJlc2VydmVzIE4gZGlzayB3cml0ZSBzdHJlYW1zIHRoYXQgbm9cbitcdFx0b3RoZXIgcGFydGl0aW9uIGNhbiB1c2UgYW5kIGV4cG9zZXMgdGhlbSBhcyB0aGUgcGFydGl0aW9uJ3NcbitcdFx0d3JpdGUgc3RyZWFtcyAxIHRvIE4uIFdyaXRpbmcgMCBnaXZlcyB0aGVtIGJhY2suIEF0IG1vc3RcbitcdFx0L3N5cy9ibG9jay9cdTAwM2NkaXNrXHUwMDNlL3F1ZXVlL21heF93cml0ZV9zdHJlYW1zIHN0cmVhbXMsIGFuZCBuZXZlclxuK1x0XHRtb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhblxuK1x0XHRvbmx5IGJlIGNoYW5nZWQgd2hpbGUgdGhlIHBhcnRpdGlvbiBpcyBub3Qgb3BlbiwgYW5kIGEgY2hhbmdlXG4rXHRcdGtlZXBzIHRoZSBzdHJlYW0gbnVtYmVycyB0aGF0IHN1cnZpdmUgaXQgcG9pbnRpbmcgYXQgdGhlIHNhbWVcbitcdFx0ZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3NcbitcdFx0cmVzZXJ2ZWQgaGVyZSwgYW5kIHRoZSByZXNlcnZhdGlvbiBpcyBsb3N0IHdoZW4gdGhlIHBhcnRpdGlvblxuK1x0XHRpcyByZW1vdmVkLCBpbmNsdWRpbmcgYnkgYSBwYXJ0aXRpb24gdGFibGUgcmVzY2FuLiBJL08gdG9cbitcdFx0dGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdFxuK1x0XHRjYW4gd3JpdGUgdG8gYW55IHNlY3RvciBvZiBhIHBhcnRpdGlvbi5cbitcbitcbiBXaGF0Olx0XHQvc3lzL2Jsb2NrL1x1MDAzY2Rpc2tcdTAwM2UvcXVldWUvYWRkX3JhbmRvbVxuIERhdGU6XHRcdEp1bmUgMjAxMFxuIENvbnRhY3Q6XHRsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmNcbmluZGV4IGNkODMyMzA4Mzc0MDYuLjczMDZhNGVmMGE4NjcgMTAwNjQ0XG4tLS0gYS9ibG9jay9iZGV2LmNcbisrKyBiL2Jsb2NrL2JkZXYuY1xuQEAgLTQzOCw2ICs0MzgsNyBAQCBzdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcbiBcdGZyZWVfcGVyY3B1KGJkZXYtXHUwMDNlYmRfc3RhdHMpO1xuIFx0a2ZyZWUoYmRldi1cdTAwM2ViZF9tZXRhX2luZm8pO1xuK1x0a2ZyZWUoYmRldi1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwKTtcbiBcdHNlY3VyaXR5X2JkZXZfZnJlZShiZGV2KTtcbiBcbiBcdGlmICghYmRldl9pc19wYXJ0aXRpb24oYmRldikpIHtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xuaW5kZXggMTk2YmNjZjI3ZjU4ZC4uM2I2ZjA5YjM5NDNmNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jb3JlLmNcbisrKyBiL2Jsb2NrL2Jsay1jb3JlLmNcbkBAIC02MTYsNyArNjE2LDggQEAgc3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pXG4gfVxuIFxuIC8qXG4tICogUmVtYXAgYmxvY2sgbiBvZiBwYXJ0aXRpb24gcCB0byBibG9jayBuK3N0YXJ0KHApIG9mIHRoZSBkaXNrLlxuKyAqIFJlbWFwIGJsb2NrIG4gb2YgcGFydGl0aW9uIHAgdG8gYmxvY2sgbitzdGFydChwKSBvZiB0aGUgZGlzaywgYW5kIHRoZVxuKyAqIHdyaXRlIHN0cmVhbXMgb2YgcGFydGl0aW9uIHAgdG8gdGhlIGRpc2sgd3JpdGUgc3RyZWFtcyByZXNlcnZlZCBmb3IgdGhlbS5cbiAgKi9cbiBzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxuIHtcbkBAIC02MzAsNiArNjMxLDEzIEBAIHN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdFx0XHQgICAgICBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgLVxuIFx0XHRcdFx0ICAgICAgcC1cdTAwM2ViZF9zdGFydF9zZWN0KTtcbiBcdH1cbitcdGlmIChiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIFx1MDAyNlx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcbitcdFx0aWYgKHVubGlrZWx5KGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gXHUwMDNlIHAtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxuK1x0XHRcdHAtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIC0gMV07XG4rXHR9XG4gXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLjc3ODUyZWIyYWNiZWMgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuKysrIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbkBAIC0yMDUsNiArMjA1LDEzMCBAQCBzdGF0aWMgc3NpemVfdCBwYXJ0X2Rpc2NhcmRfYWxpZ25tZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiV1XFxuXCIsIGJkZXZfZGlzY2FyZF9hbGlnbm1lbnQoZGV2X3RvX2JkZXYoZGV2KSkpO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbit7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXVcXG5cIiwgZGV2X3RvX2JkZXYoZGV2KS1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKTtcbit9XG4rXG4rLypcbisgKiBHaXZlIHRoZSB3cml0ZSBzdHJlYW1zIG9mIEBwYXJ0IGJhY2sgdG8gdGhlIGRpc2suICBDYWxsZWQgZnJvbVxuKyAqIGRyb3BfcGFydGl0aW9uKCkgd2l0aCBvcGVuX211dGV4IGhlbGQ7IHRoZSBtYXAgaXMgbGVmdCBhbG9uZSBiZWNhdXNlIGFcbisgKiB3cml0ZSByYWNpbmcgd2l0aCBkZWxfZ2VuZGlzaygpIHN0aWxsIHVzZXMgaXQgdW50aWwgdGhlIGJkZXYgaXMgZnJlZWQuXG4rICovXG4rc3RhdGljIHZvaWQgcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxuK3tcbitcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC1cdTAwM2ViZF9kaXNrO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7IGkrKylcbitcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuK1x0XHRcdCAgICBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuK31cbitcbitzdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXG4re1xuK1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBwYXJ0LVx1MDAzZWJkX2Rpc2s7XG4rXHR1bnNpZ25lZCBpbnQgbWF4ID0gbWluX3QodW5zaWduZWQgaW50LFxuK1x0XHRcdFx0IGJkZXZfbGltaXRzKHBhcnQpLVx1MDAzZW1heF93cml0ZV9zdHJlYW1zLCBVOF9NQVgpO1xuK1x0dTggKm1hcCA9IE5VTEw7XG4rXHR1bnNpZ25lZCBpbnQgaSwgaWQsIG5yX2ZyZWU7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHU4IGN1cjtcbitcbitcdGlmIChuciBcdTAwM2UgbWF4KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChucikge1xuK1x0XHRtYXAgPSBrbWFsbG9jKG5yLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFtYXApXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHQvKiB0aGUgcGFydGl0aW9uIG1heSBoYXZlIGJlZW4gZHJvcHBlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbXV0ZXggKi9cbitcdGlmICh4YV9sb2FkKFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIGJkZXZfcGFydG5vKHBhcnQpKSAhPSBwYXJ0KSB7XG4rXHRcdHJldCA9IC1FTlhJTztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRjdXIgPSBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XG4rXG4rXHQvKiBhIG5vLW9wIGNoYW5nZSBpcyBhbGxvd2VkIHdoaWxlIG9wZW4gKi9cbitcdGlmIChuciA9PSBjdXIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogdGhlIHN0cmVhbXMgbXVzdCBub3QgY2hhbmdlIHVuZGVyIGEgdXNlciBvZiB0aGUgcGFydGl0aW9uICovXG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2cGFydC1cdTAwM2ViZF9vcGVuZXJzKSkge1xuK1x0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bnJfZnJlZSA9IG1heCAtIGJpdG1hcF93ZWlnaHQoZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggKyAxKTtcbitcdGlmIChuciBcdTAwM2UgY3VyIFx1MDAyNlx1MDAyNiBuciAtIGN1ciBcdTAwM2UgbnJfZnJlZSkge1xuK1x0XHRyZXQgPSAtRU5PU1BDO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBLZWVwIHRoZSBzdHJlYW1zIHRoYXQgc3RheSwgc28gdGhhdCBhIHBhcnRpdGlvbiBrZWVwcyB3cml0aW5nXG4rXHQgKiB0aHJvdWdoIHRoZSBzYW1lIGRpc2sgc3RyZWFtcyBhbmQgaXRzIGRhdGEgc3RheXMgdG9nZXRoZXIuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbihjdXIsIG5yKTsgaSsrKVxuK1x0XHRtYXBbaV0gPSBwYXJ0LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV07XG4rXG4rXHRpZiAobnIgXHUwMDNjIGN1cikge1xuK1x0XHRmb3IgKGkgPSBucjsgaSBcdTAwM2MgY3VyOyBpKyspXG4rXHRcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuK1x0XHRcdFx0ICAgIGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRmb3IgKGkgPSBjdXI7IGkgXHUwMDNjIG5yOyBpKyspIHtcbitcdFx0XHRpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsXG4rXHRcdFx0XHRcdFx0bWF4ICsgMSwgMSk7XG4rXHRcdFx0X19zZXRfYml0KGlkLCBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuK1x0XHRcdG1hcFtpXSA9IGlkO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRzd2FwKHBhcnQtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTtcbitcdHBhcnQtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yO1xuK1xuK291dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0a2ZyZWUobWFwKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuK1x0XHRcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzdHJ1Y3Qga2VybmZzX25vZGUgKmtuO1xuK1x0dTggbnI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0ga3N0cnRvdTgoYnVmLCAxMCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qXG4rXHQgKiBkcm9wX3BhcnRpdGlvbigpIHJlbW92ZXMgdGhpcyBhdHRyaWJ1dGUgd2l0aCBvcGVuX211dGV4IGhlbGQsIHNvXG4rXHQgKiBkb24ndCBob2xkIHRoZSBhY3RpdmUgcmVmZXJlbmNlIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBtdXRleC5cbitcdCAqL1xuK1x0a24gPSBzeXNmc19icmVha19hY3RpdmVfcHJvdGVjdGlvbihcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyKTtcbitcdGlmICgha24pXG4rXHRcdHJldHVybiAtRU5YSU87XG4rXG4rXHRyZXQgPSBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKGRldl90b19iZGV2KGRldiksIG5yKTtcbitcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xuK1xuK1x0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuK31cbitcbiBzdGF0aWMgREVWSUNFX0FUVFIocGFydGl0aW9uLCAwNDQ0LCBwYXJ0X3BhcnRpdGlvbl9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhcnQsIDA0NDQsIHBhcnRfc3RhcnRfc2hvdywgTlVMTCk7XG4gc3RhdGljIERFVklDRV9BVFRSKHNpemUsIDA0NDQsIHBhcnRfc2l6ZV9zaG93LCBOVUxMKTtcbkBAIC0yMTMsNiArMzM3LDggQEAgc3RhdGljIERFVklDRV9BVFRSKGFsaWdubWVudF9vZmZzZXQsIDA0NDQsIHBhcnRfYWxpZ25tZW50X29mZnNldF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoZGlzY2FyZF9hbGlnbm1lbnQsIDA0NDQsIHBhcnRfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdywgTlVMTCk7XG4gc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoaW5mbGlnaHQsIDA0NDQsIHBhcnRfaW5mbGlnaHRfc2hvdywgTlVMTCk7XG4rc3RhdGljIERFVklDRV9BVFRSKHdyaXRlX3N0cmVhbXMsIDA2NDQsIHBhcnRfd3JpdGVfc3RyZWFtc19zaG93LFxuK1x0XHQgICBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUpO1xuICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1RcbiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfZmFpbCA9XG4gXHRfX0FUVFIobWFrZS1pdC1mYWlsLCAwNjQ0LCBwYXJ0X2ZhaWxfc2hvdywgcGFydF9mYWlsX3N0b3JlKTtcbkBAIC0yMjcsNiArMzUzLDcgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBhcnRfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX2Rpc2NhcmRfYWxpZ25tZW50LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9zdGF0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9pbmZsaWdodC5hdHRyLFxuK1x0XHUwMDI2ZGV2X2F0dHJfd3JpdGVfc3RyZWFtcy5hdHRyLFxuICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1RcbiBcdFx1MDAyNmRldl9hdHRyX2ZhaWwuYXR0cixcbiAjZW5kaWZcbkBAIC0yNzQsNiArNDAxLDcgQEAgdm9pZCBkcm9wX3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGFydC1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuIFxuK1x0cGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTtcbiBcdHhhX2VyYXNlKFx1MDAyNnBhcnQtXHUwMDNlYmRfZGlzay1cdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpO1xuIFx0a29iamVjdF9wdXQocGFydC1cdTAwM2ViZF9ob2xkZXJfZGlyKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuaW5kZXggOThlMjFiNGNiZjMyOC4uMGJiZmEyNzA4MDk5MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC03MSw2ICs3MSw5IEBAIHN0cnVjdCBibG9ja19kZXZpY2Uge1xuIFxuIFx0c3RydWN0IHBhcnRpdGlvbl9tZXRhX2luZm8gKmJkX21ldGFfaW5mbztcbiBcdGludFx0XHRcdGJkX3dyaXRlcnM7XG4rXHQvKiBwYXJ0aXRpb24gd3JpdGUgc3RyZWFtIHMgaXMgZGlzayBzdHJlYW0gYmRfd3JpdGVfc3RyZWFtX21hcFtzIC0gMV0gKi9cbitcdHU4XHRcdFx0YmRfbnJfd3JpdGVfc3RyZWFtcztcbitcdHU4XHRcdFx0KmJkX3dyaXRlX3N0cmVhbV9tYXA7XG4gI2lmZGVmIENPTkZJR19TRUNVUklUWVxuIFx0dm9pZFx0XHRcdCpiZF9zZWN1cml0eTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggNGY3OTA1YzM0MTJiOC4uNWQyNDFkN2IwODAyYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0xNzgsNiArMTc4LDggQEAgc3RydWN0IGdlbmRpc2sge1xuIFxuIFx0c3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7XHQvKiBvcGVuL2Nsb3NlIG11dGV4ICovXG4gXHR1bnNpZ25lZCBvcGVuX3BhcnRpdGlvbnM7XHQvKiBudW1iZXIgb2Ygb3BlbiBwYXJ0aXRpb25zICovXG4rXHQvKiByZXNlcnZlZCBieSBwYXJ0aXRpb25zLCBiaXQgTiA9IHN0cmVhbSBOICgwIHVudXNlZCksIG9wZW5fbXV0ZXggKi9cbitcdERFQ0xBUkVfQklUTUFQKHdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsIFU4X01BWCArIDEpO1xuIFxuIFx0c3RydWN0IGJhY2tpbmdfZGV2X2luZm9cdCpiZGk7XG4gXHRzdHJ1Y3Qga29iamVjdCBxdWV1ZV9rb2JqO1x0LyogdGhlIHF1ZXVlLyBkaXJlY3RvcnkgKi9cbkBAIC0xMzAzLDcgKzEzMDUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZGV2X21heF9zZWdtZW50cyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHtcbiBcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBiZGV2LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XG4gXHRyZXR1cm4gYmRldl9saW1pdHMoYmRldiktXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXM7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6NDEuMDAzODQ4MTY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NTgzODU3NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCdzIGEgc3RhbmRhcmQga2VybmVsIHJldmlldyByZXF1ZXN0LCBzbyBubyBuZWVkIHRvIG92ZXJ0aGluayBpdC4gIEkgbmVlZCB0byBwcm92aWRlIGEgYE5lZWRzS01TQU5gIGJvb2xlYW4gYW5kIGEgYEtNU0FOUmVhc29uaW5nYCBleHBsYW5hdGlvbi4gSSBoYXZlIG15IHRvb2xzLCBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgYHNldC1yZXN1bHRzYCBhdCB0aGUgcmVhZHkuXG5cbkZpcnN0LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSSBzZWUgYSBkb2N1bWVudGF0aW9uIHVwZGF0ZSBpbiBgRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrYCBmb3IgYHdyaXRlX3N0cmVhbXNgLCBhbmQgY2hhbmdlcyBpbiBgYmxvY2svYmRldi5jYCwgYGJsb2NrL2Jsay1jb3JlLmNgLCBhbmQgYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gIEEga2V5IGFyZWEgZm9yIEtNU0FOIGNvbmNlcm5zIGlzIG1lbW9yeSBjb3JydXB0aW9uLiAgSSBzZWUgYSBga2ZyZWVgIGNhbGwgZm9yIGBiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgIGluIGBiZGV2X2ZyZWVfaW5vZGVgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYmRldmAgY29tZXMgZnJvbS4gVXN1YWxseSwgaXQncyBlaXRoZXIgYGJkZXZfYWxsb2NgIG9yIHNsYWIgYWxsb2NhdGlvbi5cblxuTG9va2luZyBhdCBgYmxvY2svYmxrLWNvcmUuY2AsIHRoZXJlJ3MgYSB1c2Ugb2YgYGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW1gIGFuZCBgcC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwYCB3aXRoaW4gYGJsa19wYXJ0aXRpb25fcmVtYXBgLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIGNvZGUgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBtYXkgYmUgb3V0IG9mIGJvdW5kcyB3cml0ZXMgdGhhdCBsZWFkIHRvIGNvcnJ1cHRpb24uXG5cbk5vdywgYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYCBjb250YWlucyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSB3aXRoIHRoZSB1c2Ugb2YgIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIGBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zYCwgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgLiBUaGUgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgIGZ1bmN0aW9uIHVzZXMgYGttYWxsb2NgIHRvIGFsbG9jYXRlIGEgbWFwLCBhbmQgdGhlbiBjb3BpZXMgc29tZSB2YWx1ZXMgZnJvbSBgcGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwYCBiZWZvcmUgcG9wdWxhdGluZyBvdGhlciBpbmRpY2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBtYXBgIGlzIGZ1bGx5IGluaXRpYWxpemVkLiAgSSdtIHJ1bm5pbmcgdGhyb3VnaCB0aGUgbG9naWMgb2YgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgIGNhcmVmdWxseS4gIE9rYXksIEkgdGhpbmsgSSd2ZSBnb3QgaXQuIEl0IGxvb2tzIGxpa2UgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBucmAgaXMgZ3JlYXRlciBvciBzbWFsbGVyIHRoYW4gYGN1cmAsIGFsbCBpbmRpY2VzIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQgYG1hcGAgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgYHN3YXBgIGFuZCBzdWJzZXF1ZW50IGBrZnJlZWAuICBTbywgdGhlcmUncyBubyBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQvd3JpdGUgdnVsbmVyYWJpbGl0eSB0aGVyZS5cblxuTm93IGxldCdzIGNoZWNrIHRoZSBjYWxsIHNpdGUgb2YgYHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZWAuIFRoYXQncyB3aGVyZSB3ZSBnZXQgdGhlIHZhbHVlcyBmb3IgYG5yYC4gIEl0IGNhbGxzIGBrc3RydG91OGAgd2hpY2ggdGFrZXMgdGhlIG51bWJlciBmcm9tIHN5c2ZzLCBhbmQgdGhlbiBjYWxscyBgcGFydF9zZXRfd3JpdGVfc3RyZWFtc2AuXG5cbkZpbmFsbHksIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGJsb2NrX2RldmljZWAuIEkgd2lsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYGJkZXZfYWxsb2NfaW5vZGVgIGFuZCBgYmRldl9hbGxvY2AuXG5cbk5vdyBJIGhhdmUgYSBtdWNoIGJldHRlciBwaWN0dXJlLiBUaGUgY29kZSAqZG9lcyogbWFuaXB1bGF0ZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGB3cml0ZV9zdHJlYW1zYCwgYW5kIGl0J3MgYWNjZXNzZWQgdmlhIHN5c2ZzLCBidXQgaXQgZG9lc24ndCBpbW1lZGlhdGVseSBzdWdnZXN0IGFuIGVhc3ktdG8tZXhwbG9pdCB2dWxuZXJhYmlsaXR5LiBUaGVyZSBpcyBhIHBvdGVudGlhbCwgaG93ZXZlciwgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiB0aGUgc3RyZWFtcyBtYXAgYW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmNvcnJlY3QgaW5wdXQgZnJvbSBzeXNmcy5cblxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjc1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjM5LjU4NzcwOTM0NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAyODIyMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJkX3dyaXRlX3N0cmVhbV9tYXB8YmRldl9hbGxvY19pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmRldi5jPTQxOD1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmJkZXZfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcXG5ibG9jay9iZGV2LmMtNDE5LVxcbmJsb2NrL2JkZXYuYzo0MjA6c3RhdGljIHN0cnVjdCBpbm9kZSAqYmRldl9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmJsb2NrL2JkZXYuYy00MjEte1xcbi0tXFxuYmxvY2svYmRldi5jPTQzNT1zdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmJsb2NrL2JkZXYuYy00NDAtXFx0a2ZyZWUoYmRldi1cXHUwMDNlYmRfbWV0YV9pbmZvKTtcXG5ibG9jay9iZGV2LmM6NDQxOlxcdGtmcmVlKGJkZXYtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXApO1xcbmJsb2NrL2JkZXYuYy00NDItXFx0c2VjdXJpdHlfYmRldl9mcmVlKGJkZXYpO1xcbi0tXFxuYmxvY2svYmRldi5jPTQ2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmRldl9zb3BzID0ge1xcbmJsb2NrL2JkZXYuYy00NjQtXFx0LnN0YXRmcyA9IHNpbXBsZV9zdGF0ZnMsXFxuYmxvY2svYmRldi5jOjQ2NTpcXHQuYWxsb2NfaW5vZGUgPSBiZGV2X2FsbG9jX2lub2RlLFxcbmJsb2NrL2JkZXYuYy00NjYtXFx0LmZyZWVfaW5vZGUgPSBiZGV2X2ZyZWVfaW5vZGUsXFxuLS1cXG5ibG9jay9ibGstY29yZS5jPTYyMj1zdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLWNvcmUuYy02MzgtXFx0XFx0YmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxcbmJsb2NrL2Jsay1jb3JlLmM6NjM5OlxcdFxcdFxcdHAtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbYmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gLSAxXTtcXG5ibG9jay9ibGstY29yZS5jLTY0MC1cXHR9XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0yMTk9c3RhdGljIHZvaWQgcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwYXJ0LVxcdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zOyBpKyspXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjI3OlxcdFxcdF9fY2xlYXJfYml0KHBhcnQtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV0sXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI4LVxcdFxcdFxcdCAgICBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTIzMT1zdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1pbihjdXIsIG5yKTsgaSsrKVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI4MTpcXHRcXHRtYXBbaV0gPSBwYXJ0LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4Mi1cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4NC1cXHRcXHRmb3IgKGkgPSBucjsgaSBcXHUwMDNjIGN1cjsgaSsrKVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI4NTpcXHRcXHRcXHRfX2NsZWFyX2JpdChwYXJ0LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4Ni1cXHRcXHRcXHRcXHQgICAgZGlzay1cXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTUtXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjk2OlxcdHN3YXAocGFydC1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTctXFx0cGFydC1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0ODo0MC40OTA1MzY5NTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxMjgzMjA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCBsaW5lIG9mIHRoaW5raW5nLCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhbmQgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGJkZXZfYWxsb2NfaW5vZGVgIHdpdGggUmVhZC1GaWxlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJkZXZfYWxsb2NfaW5vZGVgLCBhbmQgbXkgaW5pdGlhbCBpbXB1bHNlIGlzIHRvIGRpdmUgcmlnaHQgaW4gd2l0aCBgcmVhZC1maWxlYC4gVGhpcyBmdW5jdGlvbiwgSSBrbm93LCBpcyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgYmxvY2sgZGV2aWNlIGlub2RlIGFsbG9jYXRpb24gcHV6emxlLiBJJ20gcHJvYmFibHkgZGVhbGluZyB3aXRoIHNvbWUgbGV2ZWwgb2Ygb24tZGlzayBzdHJ1Y3R1cmVzLCBtYXliZSBpLW5vZGUgYWxsb2NhdGlvbi4gSSdtIHRoaW5raW5nIEkgY2FuIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIHNvdXJjZSB3aXRoIGByZWFkLWZpbGVgLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgaXRzIHJvbGUsIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHBvc3NpYmx5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGRlc2lnbiBjaG9pY2VzIGF0IHBsYXkuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC4gTGV0J3MgZ2V0IHJlYWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0ODo0My4xMDMzNzI0NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxNTpcXHQgKi9cXG4gNDE2OlxcdFxcbiA0MTc6XFx0c3RhdGljICBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfTVVURVgoYmRldl9sb2NrKTtcXG4gNDE4OlxcdHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmRldl9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xcbiA0MTk6XFx0XFxuIDQyMDpcXHRzdGF0aWMgc3RydWN0IGlub2RlICpiZGV2X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIDQyMTpcXHR7XFxuIDQyMjpcXHRcXHRzdHJ1Y3QgYmRldl9pbm9kZSAqZWkgPSBhbGxvY19pbm9kZV9zYihzYiwgYmRldl9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHRcXHRpZiAoIWVpKVxcbiA0MjU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQyNjpcXHRcXHRtZW1zZXQoXFx1MDAyNmVpLVxcdTAwM2ViZGV2LCAwLCBzaXplb2YoZWktXFx1MDAzZWJkZXYpKTtcXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0aWYgKHNlY3VyaXR5X2JkZXZfYWxsb2MoXFx1MDAyNmVpLVxcdTAwM2ViZGV2KSkge1xcbiA0Mjk6XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGJkZXZfY2FjaGVwLCBlaSk7XFxuIDQzMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDMxOlxcdFxcdH1cXG4gNDMyOlxcdFxcdHJldHVybiBcXHUwMDI2ZWktXFx1MDAzZXZmc19pbm9kZTtcXG4gNDMzOlxcdH1cXG4gNDM0OlxcdFxcbiA0MzU6XFx0c3RhdGljIHZvaWQgYmRldl9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDQzNjpcXHR7XFxuIDQzNzpcXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gSV9CREVWKGlub2RlKTtcXG4gNDM4OlxcdFxcbiA0Mzk6XFx0XFx0ZnJlZV9wZXJjcHUoYmRldi1cXHUwMDNlYmRfc3RhdHMpO1xcbiA0NDA6XFx0XFx0a2ZyZWUoYmRldi1cXHUwMDNlYmRfbWV0YV9pbmZvKTtcXG4gNDQxOlxcdFxcdGtmcmVlKGJkZXYtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXApO1xcbiA0NDI6XFx0XFx0c2VjdXJpdHlfYmRldl9mcmVlKGJkZXYpO1xcbiA0NDM6XFx0XFxuIDQ0NDpcXHRcXHRpZiAoIWJkZXZfaXNfcGFydGl0aW9uKGJkZXYpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjQzLjEwMzQ2NDc0OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjcyMDAxODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoZSBrZXJuZWwgY29kZTpcblxuKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIElub2RlIEluaXRpYWxpemF0aW9uIGFuZCBEaXNrIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYmRldl9hbGxvY19pbm9kZWAgYW5kIG5vdGljZWQgdGhhdCBgbWVtc2V0KFx1MDAyNmVpLVx1MDAzZWJkZXYsIDAsIHNpemVvZihlaS1cdTAwM2ViZGV2KSlgIGlzIGNhbGxlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGBiZF9ucl93cml0ZV9zdHJlYW1zYCBpcyBiZWluZyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgdG8gTlVMTC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGxpZmVjeWNsZSBhbmQgdW5kZXJzdGFuZCB0aGUgYWxsb2NhdGlvbi5cblxuTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGdlbmRpc2tgIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBibG9jayBkZXZpY2UgaXMgYWxsb2NhdGVkIGFuZCBzZXQgdXAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgZ2VuZGlza2Agc3RydWN0dXJlLiBMZXQncyBzZWUgaG93IHRoYXQncyBoYW5kbGVkLiBNeSBuZXh0IG1vdmUgaXMgdG8gdXNlIGBncmVwYCAob3Igc29tZSBzaW1pbGFyIHRvb2wsIG9idmlvdXNseSkgYW5kIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGNhbGxzIHRvIGVpdGhlciBgYWxsb2NfZGlza2Agb3IgYF9fYWxsb2NfZGlza19ub2RlYC4gVGhhdCBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB3aGVyZSBhbmQgaG93IHRoZSBgZ2VuZGlza2Agc3RydWN0dXJlIGlzIGJlaW5nIGNyZWF0ZWQsIGFuZCB0aGF0IHdpbGwgZ2l2ZSBtZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgSSdtIGxvb2tpbmcgYXQgYXJlIGludGVyY29ubmVjdGVkLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjQ2Ljc3NTQ3MDczN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MjQ2NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTIxOT1zdGF0aWMgdm9pZCBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMjctXFx0XFx0X19jbGVhcl9iaXQocGFydC1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtpXSxcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMjg6XFx0XFx0XFx0ICAgIGRpc2stXFx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIyOS19XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0yMzE9c3RhdGljIGludCBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQsIHU4IG5yKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjY5LVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI3MDpcXHRucl9mcmVlID0gbWF4IC0gYml0bWFwX3dlaWdodChkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggKyAxKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNzEtXFx0aWYgKG5yIFxcdTAwM2UgY3VyIFxcdTAwMjZcXHUwMDI2IG5yIC0gY3VyIFxcdTAwM2UgbnJfZnJlZSkge1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjg1LVxcdFxcdFxcdF9fY2xlYXJfYml0KHBhcnQtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV0sXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjg2OlxcdFxcdFxcdFxcdCAgICBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODctXFx0fSBlbHNlIHtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODgtXFx0XFx0Zm9yIChpID0gY3VyOyBpIFxcdTAwM2MgbnI7IGkrKykge1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI4OTpcXHRcXHRcXHRpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI5MC1cXHRcXHRcXHRcXHRcXHRcXHRtYXggKyAxLCAxKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyOTE6XFx0XFx0XFx0X19zZXRfYml0KGlkLCBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTItXFx0XFx0XFx0bWFwW2ldID0gaWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjQ2Ljg5MjcyMTc0OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODU1OTQyMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIERpc2sgR2VuZXJhdGlvbiBpbiBgYmxvY2svZ2VuaGQuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoZSBgZ2VuZGlza2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2suIFRoaXMgc3RydWN0dXJlIGlzIGNlbnRyYWwgdG8gaG93IHRoZSBrZXJuZWwgbW9kZWxzIGFuZCBpbnRlcmFjdHMgd2l0aCBibG9jayBkZXZpY2VzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBhbGxvY2F0aW9uIGlzIGNyaXRpY2FsLiBLbm93aW5nIGl0cyBsaWZlY3ljbGUsIHdoZW4gaXQncyBjcmVhdGVkLCBwb3B1bGF0ZWQsIGFuZCB1bHRpbWF0ZWx5IHJlbGVhc2VkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3RvcmFnZSBzdWJzeXN0ZW0gZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBnZW5lcmljIGRpc2sgc3RydWN0dXJlcyBhcmUgaGFuZGxlZC4gV2hlcmUgZG9lcyBtZW1vcnkgZm9yIHRoZXNlIHN0cnVjdHVyZXMgY29tZSBmcm9tPyBBcmUgdGhleSBkeW5hbWljYWxseSBhbGxvY2F0ZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGFsbG9jYXRpb24gc3RyYXRlZ2llcz8gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiB0aGUgbG93LWxldmVsIGRpc2sgbWFuYWdlbWVudCBwcm9jZXNzLCBzbyBsZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDY0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDg6NDkuNzQ4NjY2ODA4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA4NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZ2VuZGlzayBcXFxcKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9nZW5oZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2dlbmhkLmM9NTc9c3RhdGljIERFRklORV9JREEoZXh0X2RldnRfaWRhKTtcXG5ibG9jay9nZW5oZC5jLTU4LVxcbmJsb2NrL2dlbmhkLmM6NTk6dm9pZCBzZXRfY2FwYWNpdHkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcnMpXFxuYmxvY2svZ2VuaGQuYy02MC17XFxuLS1cXG5ibG9jay9nZW5oZC5jPTcwPUVYUE9SVF9TWU1CT0woc2V0X2NhcGFjaXR5KTtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNzUtICovXFxuYmxvY2svZ2VuaGQuYzo3Njpib29sIHNldF9jYXBhY2l0eV9hbmRfbm90aWZ5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzaXplKVxcbmJsb2NrL2dlbmhkLmMtNzcte1xcbi0tXFxuYmxvY2svZ2VuaGQuYz0zMzc9dm9pZCBibGtfZnJlZV9leHRfbWlub3IodW5zaWduZWQgaW50IG1pbm9yKVxcbi0tXFxuYmxvY2svZ2VuaGQuYy0zNDEtXFxuYmxvY2svZ2VuaGQuYzozNDI6dm9pZCBkaXNrX3VldmVudChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24pXFxuYmxvY2svZ2VuaGQuYy0zNDMte1xcbi0tXFxuYmxvY2svZ2VuaGQuYz0zNjE9RVhQT1JUX1NZTUJPTF9HUEwoZGlza191ZXZlbnQpO1xcbmJsb2NrL2dlbmhkLmMtMzYyLVxcbmJsb2NrL2dlbmhkLmM6MzYzOmludCBkaXNrX3NjYW5fcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxcbmJsb2NrL2dlbmhkLmMtMzY0LXtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNDA0LVxcbmJsb2NrL2dlbmhkLmM6NDA1OnN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2dlbmhkLmMtNDA2LXtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNDI2LVxcbmJsb2NrL2dlbmhkLmM6NDI3OnN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2dlbmhkLmMtNDI4LVxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipncm91cHMsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTU4Ny0gKi9cXG5ibG9jay9nZW5oZC5jOjU4ODppbnQgX19tdXN0X2NoZWNrIGFkZF9kaXNrX2Z3bm9kZShzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2dlbmhkLmMtNTg5LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzLFxcbi0tXFxuYmxvY2svZ2VuaGQuYz02MTY9RVhQT1JUX1NZTUJPTF9HUEwoYWRkX2Rpc2tfZndub2RlKTtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNjI2LSAqL1xcbmJsb2NrL2dlbmhkLmM6NjI3OmludCBfX211c3RfY2hlY2sgZGV2aWNlX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svZ2VuaGQuYy02MjgtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipncm91cHMpXFxuLS1cXG5ibG9jay9nZW5oZC5jPTYzMj1FWFBPUlRfU1lNQk9MKGRldmljZV9hZGRfZGlzayk7XFxuYmxvY2svZ2VuaGQuYy02MzMtXFxuYmxvY2svZ2VuaGQuYzo2MzQ6c3RhdGljIHZvaWQgYmxrX3JlcG9ydF9kaXNrX2RlYWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgc3VycHJpc2UpXFxuYmxvY2svZ2VuaGQuYy02MzUte1xcbi0tXFxuYmxvY2svZ2VuaGQuYy02NTktXFxuYmxvY2svZ2VuaGQuYzo2NjA6c3RhdGljIGJvb2wgX19ibGtfbWFya19kaXNrX2RlYWQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuYmxvY2svZ2VuaGQuYy02NjEte1xcbi0tXFxuYmxvY2svZ2VuaGQuYy02ODgtICovXFxuYmxvY2svZ2VuaGQuYzo2ODk6dm9pZCBibGtfbWFya19kaXNrX2RlYWQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuYmxvY2svZ2VuaGQuYy02OTAte1xcbi0tXFxuYmxvY2svZ2VuaGQuYz02OTU9RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21hcmtfZGlza19kZWFkKTtcXG5ibG9jay9nZW5oZC5jLTY5Ni1cXG5ibG9jay9nZW5oZC5jOjY5NzpzdGF0aWMgdm9pZCBfX2RlbF9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2dlbmhkLmMtNjk4LXtcXG4tLVxcbmJsb2NrL2dlbmhkLmM9Nzg0PXN0YXRpYyB2b2lkIGRpc2FibGVfZWx2X3N3aXRjaChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODEyLSAqL1xcbmJsb2NrL2dlbmhkLmM6ODEzOnZvaWQgZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuYmxvY2svZ2VuaGQuYy04MTQte1xcbi0tXFxuYmxvY2svZ2VuaGQuYz04MzI9RVhQT1JUX1NZTUJPTChkZWxfZ2VuZGlzayk7XFxuLS1cXG5ibG9jay9nZW5oZC5jLTg0My0gKi9cXG5ibG9jay9nZW5oZC5jOjg0NDp2b2lkIGludmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9nZW5oZC5jLTg0NS17XFxuLS1cXG5ibG9jay9nZW5oZC5jPTg1NT1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODU4LXtcXG5ibG9jay9nZW5oZC5jOjg1OTpcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XFxuYmxvY2svZ2VuaGQuYy04NjAtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTg2Nz1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTg3MC17XFxuYmxvY2svZ2VuaGQuYzo4NzE6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtODcyLVxcbi0tXFxuYmxvY2svZ2VuaGQuYz05NzA9c3RhdGljIGludCBzaG93X3BhcnRpdGlvbihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXFxuYmxvY2svZ2VuaGQuYy05NzEte1xcbmJsb2NrL2dlbmhkLmM6OTcyOlxcdHN0cnVjdCBnZW5kaXNrICpzZ3AgPSB2O1xcbmJsb2NrL2dlbmhkLmMtOTczLVxcdHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQ7XFxuLS1cXG5ibG9jay9nZW5oZC5jPTEwMTc9c3RhdGljIHNzaXplX3QgZGlza19yYW5nZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTAxOS17XFxuYmxvY2svZ2VuaGQuYzoxMDIwOlxcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcXG5ibG9jay9nZW5oZC5jLTEwMjEtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTEwMjU9c3RhdGljIHNzaXplX3QgZGlza19leHRfcmFuZ2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTEwMjcte1xcbmJsb2NrL2dlbmhkLmM6MTAyODpcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XFxuYmxvY2svZ2VuaGQuYy0xMDI5LVxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMDM0PXN0YXRpYyBzc2l6ZV90IGRpc2tfcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMDM2LXtcXG5ibG9jay9nZW5oZC5jOjEwMzc6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtMTAzOC1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTA0Mz1zdGF0aWMgc3NpemVfdCBkaXNrX2hpZGRlbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTA0NS17XFxuYmxvY2svZ2VuaGQuYzoxMDQ2OlxcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcXG5ibG9jay9nZW5oZC5jLTEwNDctXFxuLS1cXG5ibG9jay9nZW5oZC5jPTEwNTI9c3RhdGljIHNzaXplX3QgZGlza19yb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTA1NC17XFxuYmxvY2svZ2VuaGQuYzoxMDU1OlxcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcXG5ibG9jay9nZW5oZC5jLTEwNTYtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTExMzQ9c3RhdGljIHNzaXplX3QgZGlza19hbGlnbm1lbnRfb2Zmc2V0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMTM3LXtcXG5ibG9jay9nZW5oZC5jOjExMzg6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtMTEzOS1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTE0Mz1zdGF0aWMgc3NpemVfdCBkaXNrX2Rpc2NhcmRfYWxpZ25tZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMTQ2LXtcXG5ibG9jay9nZW5oZC5jOjExNDc6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtMTE0OC1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTE1Mj1zdGF0aWMgc3NpemVfdCBkaXNrc2VxX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMTU0LXtcXG5ibG9jay9nZW5oZC5jOjExNTU6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtMTE1Ni1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTI0MD1zdGF0aWMgdW1vZGVfdCBkaXNrX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBuKVxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMjQyLVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCB0eXBlb2YoKmRldiksIGtvYmopO1xcbmJsb2NrL2dlbmhkLmM6MTI0MzpcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XFxuYmxvY2svZ2VuaGQuYy0xMjQ0LVxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMjgwPXN0YXRpYyB2b2lkIGRpc2tfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuYmxvY2svZ2VuaGQuYy0xMjgxLXtcXG5ibG9jay9nZW5oZC5jOjEyODI6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtMTI4My1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTMyND1zdGF0aWMgaW50IGJsb2NrX3VldmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudilcXG5ibG9jay9nZW5oZC5jLTEzMjUte1xcbmJsb2NrL2dlbmhkLmM6MTMyNjpcXHRjb25zdCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XFxuYmxvY2svZ2VuaGQuYy0xMzI3LVxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMzM2PXN0YXRpYyBjaGFyICpibG9ja19kZXZub2RlKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgdW1vZGVfdCAqbW9kZSxcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTMzOC17XFxuYmxvY2svZ2VuaGQuYzoxMzM5OlxcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcXG5ibG9jay9nZW5oZC5jLTEzNDAtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTEzNjE9c3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXFxuYmxvY2svZ2VuaGQuYy0xMzYyLXtcXG5ibG9jay9nZW5oZC5jOjEzNjM6XFx0c3RydWN0IGdlbmRpc2sgKmdwID0gdjtcXG5ibG9jay9nZW5oZC5jLTEzNjQtXFx0c3RydWN0IGJsb2NrX2RldmljZSAqaGQ7XFxuLS1cXG5ibG9jay9nZW5oZC5jPTE0Mzc9bW9kdWxlX2luaXQocHJvY19nZW5oZF9pbml0KTtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTQzOS1cXG5ibG9jay9nZW5oZC5jOjE0NDA6ZGV2X3QgcGFydF9kZXZ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pXFxuYmxvY2svZ2VuaGQuYy0xNDQxLXtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTQ1My1cXG5ibG9jay9nZW5oZC5jOjE0NTQ6c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcXG5ibG9jay9nZW5oZC5jLTE0NTUtXFx0XFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxcbmJsb2NrL2dlbmhkLmMtMTQ1Ni17XFxuYmxvY2svZ2VuaGQuYzoxNDU3OlxcdHN0cnVjdCBnZW5kaXNrICpkaXNrO1xcbmJsb2NrL2dlbmhkLmMtMTQ1OC1cXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTUxOS1cXG5ibG9jay9nZW5oZC5jOjE1MjA6c3RydWN0IGdlbmRpc2sgKl9fYmxrX2FsbG9jX2Rpc2soc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBpbnQgbm9kZSxcXG5ibG9jay9nZW5oZC5jLTE1MjEtXFx0XFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xNTI0LVxcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xcbmJsb2NrL2dlbmhkLmM6MTUyNTpcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaztcXG5ibG9jay9nZW5oZC5jLTE1MjYtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTE1Mzk9RVhQT1JUX1NZTUJPTChfX2Jsa19hbGxvY19kaXNrKTtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTU1My0gKi9cXG5ibG9jay9nZW5oZC5jOjE1NTQ6dm9pZCBwdXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9nZW5oZC5jLTE1NTUte1xcbi0tXFxuYmxvY2svZ2VuaGQuYz0xNTU5PUVYUE9SVF9TWU1CT0wocHV0X2Rpc2spO1xcbmJsb2NrL2dlbmhkLmMtMTU2MC1cXG5ibG9jay9nZW5oZC5jOjE1NjE6c3RhdGljIHZvaWQgc2V0X2Rpc2tfcm9fdWV2ZW50KHN0cnVjdCBnZW5kaXNrICpnZCwgaW50IHJvKVxcbmJsb2NrL2dlbmhkLmMtMTU2Mi17XFxuLS1cXG5ibG9jay9nZW5oZC5jLTE1NzktICovXFxuYmxvY2svZ2VuaGQuYzoxNTgwOnZvaWQgc2V0X2Rpc2tfcm8oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgcmVhZF9vbmx5KVxcbmJsb2NrL2dlbmhkLmMtMTU4MS17XFxuLS1cXG5ibG9jay9nZW5oZC5jPTE1OTE9RVhQT1JUX1NZTUJPTChzZXRfZGlza19ybyk7XFxuYmxvY2svZ2VuaGQuYy0xNTkyLVxcbmJsb2NrL2dlbmhkLmM6MTU5Mzp2b2lkIGluY19kaXNrc2VxKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2dlbmhkLmMtMTU5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjQ5LjgwOTc1NzUzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc4MDc5NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBfX2FsbG9jX2Rpc2tfbm9kZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBfX2FsbG9jX2Rpc2tfbm9kZWAsIHNwZWNpZmljYWxseSBpbiBgYmxvY2svZ2VuaGQuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZXNlIGRpc2sgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgYXQgYSBsb3cgbGV2ZWwuIFRoaXMgZnVuY3Rpb24gaXMgZnVuZGFtZW50YWwsIG9idmlvdXNseSwgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZGV0YWlscywgZXNwZWNpYWxseSBhbnkgbnVhbmNlcyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLCBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggbW9kZXJuIHN0b3JhZ2UgZGV2aWNlcyBvciBhZHZhbmNlZCBxdWV1ZWluZyBtZWNoYW5pc21zLiBJJ20gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgaG93IGl0IGhhbmRsZXMgdGhlIGluaXRpYWwgbWVtb3J5IGFsbG9jYXRpb24sIHRoZSBhc3NpZ25tZW50IG9mIGRldmljZSBudW1iZXJzLCBhbmQgdGhlIHNldHRpbmcgb2YgYmFzaWMgYXR0cmlidXRlcyBsaWtlIHRoZSBuYW1lIGFuZCBtYWpvci9taW5vciBudW1iZXJzLiBJdCdzIGFsc28gd29ydGggc2VlaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgb3IgaG9va3MgdGhhdCBhcmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24uIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHVzZWZ1bCBjbHVlcyBhYm91dCBob3RwbHVnIHN1cHBvcnQsIG9yIHBlcmhhcHMgaGludHMgcmVsYXRpbmcgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzaGFyZWQgcmVzb3VyY2VzIG9uIHRoZSBkaXNrLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgYGdlbmRpc2tgIHN0cnVjdHVyZSBpcyBiZWluZyBzZXQgdXAgYmVmb3JlIGl0J3MgcGFzc2VkIG9mZiBmb3IgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gc3RhcnQgc2Nyb2xsaW5nIHRocm91Z2ggdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3ODEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0ODo1Mi4zODc4NDA2ODNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2dlbmhkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ1NDpcXHRzdHJ1Y3QgZ2VuZGlzayAqX19hbGxvY19kaXNrX25vZGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBub2RlX2lkLFxcbjE0NTU6XFx0XFx0XFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxcbjE0NTY6XFx0e1xcbjE0NTc6XFx0XFx0c3RydWN0IGdlbmRpc2sgKmRpc2s7XFxuMTQ1ODpcXHRcXG4xNDU5OlxcdFxcdGRpc2sgPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBnZW5kaXNrKSwgR0ZQX0tFUk5FTCwgbm9kZV9pZCk7XFxuMTQ2MDpcXHRcXHRpZiAoIWRpc2spXFxuMTQ2MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDYyOlxcdFxcbjE0NjM6XFx0XFx0aWYgKGJpb3NldF9pbml0KFxcdTAwMjZkaXNrLVxcdTAwM2ViaW9fc3BsaXQsIEJJT19QT09MX1NJWkUsIDAsIDApKVxcbjE0NjQ6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9kaXNrO1xcbjE0NjU6XFx0XFxuMTQ2NjpcXHRcXHRkaXNrLVxcdTAwM2ViZGkgPSBiZGlfYWxsb2Mobm9kZV9pZCk7XFxuMTQ2NzpcXHRcXHRpZiAoIWRpc2stXFx1MDAzZWJkaSlcXG4xNDY4OlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfYmlvc2V0O1xcbjE0Njk6XFx0XFxuMTQ3MDpcXHRcXHQvKiBiZGV2X2FsbG9jKCkgbWlnaHQgbmVlZCB0aGUgcXVldWUsIHNldCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgKi9cXG4xNDcxOlxcdFxcdGRpc2stXFx1MDAzZXF1ZXVlID0gcTtcXG4xNDcyOlxcdFxcbjE0NzM6XFx0XFx0ZGlzay1cXHUwMDNlcGFydDAgPSBiZGV2X2FsbG9jKGRpc2ssIDApO1xcbjE0NzQ6XFx0XFx0aWYgKCFkaXNrLVxcdTAwM2VwYXJ0MClcXG4xNDc1OlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfYmRpO1xcbjE0NzY6XFx0XFxuMTQ3NzpcXHRcXHRkaXNrLVxcdTAwM2Vub2RlX2lkID0gbm9kZV9pZDtcXG4xNDc4OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbjE0Nzk6XFx0XFx0eGFfaW5pdChcXHUwMDI2ZGlzay1cXHUwMDNlcGFydF90YmwpO1xcbjE0ODA6XFx0XFx0aWYgKHhhX2luc2VydChcXHUwMDI2ZGlzay1cXHUwMDNlcGFydF90YmwsIDAsIGRpc2stXFx1MDAzZXBhcnQwLCBHRlBfS0VSTkVMKSlcXG4xNDgxOlxcdFxcdFxcdGdvdG8gb3V0X2Rlc3Ryb3lfcGFydF90Ymw7XFxuMTQ4MjpcXHRcXG4xNDgzOlxcdFxcdGlmIChibGtjZ19pbml0X2Rpc2soZGlzaykpXFxuMTQ4NDpcXHRcXHRcXHRnb3RvIG91dF9lcmFzZV9wYXJ0MDtcXG4xNDg1OlxcdFxcbjE0ODY6XFx0XFx0ZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbjE0ODc6XFx0XFx0cmFuZF9pbml0aWFsaXplX2Rpc2soZGlzayk7XFxuMTQ4ODpcXHRcXHRkaXNrX3RvX2RldihkaXNrKS1cXHUwMDNlY2xhc3MgPSBcXHUwMDI2YmxvY2tfY2xhc3M7XFxuMTQ4OTpcXHRcXHRkaXNrX3RvX2RldihkaXNrKS1cXHUwMDNldHlwZSA9IFxcdTAwMjZkaXNrX3R5cGU7XFxuMTQ5MDpcXHRcXHRkZXZpY2VfaW5pdGlhbGl6ZShkaXNrX3RvX2RldihkaXNrKSk7XFxuMTQ5MTpcXHRcXHRpbmNfZGlza3NlcShkaXNrKTtcXG4xNDkyOlxcdFxcdHEtXFx1MDAzZWRpc2sgPSBkaXNrO1xcbjE0OTM6XFx0XFx0bG9ja2RlcF9pbml0X21hcChcXHUwMDI2ZGlzay1cXHUwMDNlbG9ja2RlcF9tYXAsIFxcXCIoYmlvIGNvbXBsZXRpb24pXFxcIiwgbGtjbGFzcywgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjUyLjM4Nzk0NjEwM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTg1OTg3ODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRgIHdpdGhpbiB0aGUgS2VybmVsJ3MgRGlzayBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGdlbmRpc2tgIHN0cnVjdHVyZSBhbmQgaG93IGl0IGhhbmRsZXMgd3JpdGUgc3RyZWFtcy4gSSBrbm93IHRoYXQgYGt6YWxsb2Nfbm9kZWAgaXMgdXNlZCBmb3IgYWxsb2NhdGlvbiwgbWVhbmluZyB0aGF0IGBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRgIGdldHMgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9zIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFuZCBpdCdzIGEgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgYmlvX3dyaXRlX3N0cmVhbWAgYW5kIGhvdyB0aGUga2VybmVsIGFjdHVhbGx5IHV0aWxpemVzIGl0LiBJIHN1c3BlY3QgdGhlcmUncyBhIGNvbm5lY3Rpb24gdG8gY29uY3VycmVuY3kgb3IgcGVyaGFwcyBJL08gcHJpb3JpdGl6YXRpb24uIFRpbWUgdG8gZ2V0IHNvbWUgYW5zd2Vycy4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgKG9yIG15IHByZWZlcnJlZCB0b29sKSB0byBwaW5wb2ludCB3aGVyZSBgYmlfd3JpdGVfc3RyZWFtYCBpcyBiZWluZyBtYW5pcHVsYXRlZCBhbmQgaG93IGBiZGV2X21heF93cml0ZV9zdHJlYW1zYCBmaWd1cmVzIGludG8gYWxsIG9mIHRoaXMuIFRoaXMgaXMgdGhlIGtleS4gVGhvc2UgdHdvIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIHRvIHVuZGVyc3RhbmQgdGhlIHJlc2VydmF0aW9uIGFuZCB1c2FnZSBwYXR0ZXJucy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjU2LjU3MzkzNzQyOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxODIzOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpX3dyaXRlX3N0cmVhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLmM9MjE3PXZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvX3ZlYyAqdGFibGUsXFxuLS1cXG5ibG9jay9iaW8uYy0yMjUtXFx0YmlvLVxcdTAwM2ViaV93cml0ZV9oaW50ID0gMDtcXG5ibG9jay9iaW8uYzoyMjY6XFx0YmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gPSAwO1xcbmJsb2NrL2Jpby5jLTIyNy1cXHRiaW8tXFx1MDAzZWJpX3N0YXR1cyA9IDA7XFxuLS1cXG5ibG9jay9iaW8uYz04NTY9c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcXG4tLVxcbmJsb2NrL2Jpby5jLTg2MC1cXHRiaW8tXFx1MDAzZWJpX3dyaXRlX2hpbnQgPSBiaW9fc3JjLVxcdTAwM2ViaV93cml0ZV9oaW50O1xcbmJsb2NrL2Jpby5jOjg2MTpcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtXFx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcXG5ibG9jay9iaW8uYy04NjItXFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQ7XFxuLS1cXG5ibG9jay9ibGstY29yZS5jPTYyMj1zdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLWNvcmUuYy02MzMtXFx0fVxcbmJsb2NrL2Jsay1jb3JlLmM6NjM0OlxcdGlmIChiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSBcXHUwMDI2XFx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcXG5ibG9jay9ibGstY29yZS5jOjYzNTpcXHRcXHRpZiAodW5saWtlbHkoYmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gXFx1MDAzZSBwLVxcdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKSlcXG5ibG9jay9ibGstY29yZS5jLTYzNi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5ibG9jay9ibGstY29yZS5jLTYzNy1cXG5ibG9jay9ibGstY29yZS5jOjYzODpcXHRcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9XFxuYmxvY2svYmxrLWNvcmUuYzo2Mzk6XFx0XFx0XFx0cC1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSAtIDFdO1xcbmJsb2NrL2Jsay1jb3JlLmMtNjQwLVxcdH1cXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTE4Ny1cXHRiaW8tXFx1MDAzZWJpX3dyaXRlX2hpbnRcXHQ9IGJpb19zcmMtXFx1MDAzZWJpX3dyaXRlX2hpbnQ7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjE4ODpcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbVxcdD0gYmlvX3NyYy1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xODktXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvclxcdD0gYmlvX3NyYy1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3I7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz03NzQ9c3RhdGljIHN0cnVjdCByZXF1ZXN0ICphdHRlbXB0X21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtNzg0LVxcdFxcdHJldHVybiBOVUxMO1xcbmJsb2NrL2Jsay1tZXJnZS5jOjc4NTpcXHRpZiAocmVxLVxcdTAwM2ViaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSAhPSBuZXh0LVxcdTAwM2ViaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSlcXG5ibG9jay9ibGstbWVyZ2UuYy03ODYtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz04OTU9Ym9vbCBibGtfcnFfbWVyZ2Vfb2soc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy05MTAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmJsb2NrL2Jsay1tZXJnZS5jOjkxMTpcXHRpZiAocnEtXFx1MDAzZWJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtICE9IGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtKVxcbmJsb2NrL2Jsay1tZXJnZS5jLTkxMi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5ibG9jay9mb3BzLmM9NTU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5ibG9jay9mb3BzLmMtODEtXFx0YmlvLmJpX3dyaXRlX2hpbnQgPSBmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApLVxcdTAwM2VpX3dyaXRlX2hpbnQ7XFxuYmxvY2svZm9wcy5jOjgyOlxcdGJpby5iaV93cml0ZV9zdHJlYW0gPSBpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW07XFxuYmxvY2svZm9wcy5jLTgzLVxcdGJpby5iaV9pb3ByaW8gPSBpb2NiLVxcdTAwM2VraV9pb3ByaW87XFxuLS1cXG5ibG9jay9mb3BzLmM9MTc1PXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmJsb2NrL2ZvcHMuYy0yMTMtXFx0XFx0YmlvLVxcdTAwM2ViaV93cml0ZV9oaW50ID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKS1cXHUwMDNlaV93cml0ZV9oaW50O1xcbmJsb2NrL2ZvcHMuYzoyMTQ6XFx0XFx0YmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW07XFxuYmxvY2svZm9wcy5jLTIxNS1cXHRcXHRiaW8tXFx1MDAzZWJpX3ByaXZhdGUgPSBkaW87XFxuLS1cXG5ibG9jay9mb3BzLmM9MzIyPXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19hc3luYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5ibG9jay9mb3BzLmMtMzQwLVxcdGJpby1cXHUwMDNlYmlfd3JpdGVfaGludCA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCktXFx1MDAzZWlfd3JpdGVfaGludDtcXG5ibG9jay9mb3BzLmM6MzQxOlxcdGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gaW9jYi1cXHUwMDNla2lfd3JpdGVfc3RyZWFtO1xcbmJsb2NrL2ZvcHMuYy0zNDItXFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBibGtkZXZfYmlvX2VuZF9pb19hc3luYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDg6NTcuMTA1NzY3OTMzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMjM2ODk2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJkZXZfbWF4X3dyaXRlX3N0cmVhbXNgIFVzYWdlIEFjcm9zcyB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgYmRldl9tYXhfd3JpdGVfc3RyZWFtc2AgaXMgYWN0dWFsbHkgKnVzZWQqIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHRzIHdoZXJlIGl0cyB2YWx1ZSBpcyBiZWluZyBzZXQsIHJlYWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCAqYWN0ZWQgdXBvbiogaXMgY3JpdGljYWwuIEknbSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGlmIHdlIHdlcmUgdG8gYWRqdXN0IGl0LCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGluZm9ybSBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0ICpjYWxsKiBpdDsgSSdtIGFmdGVyIHRoZSAqc2VtYW50aWNzKiBvZiB0aG9zZSBjYWxscy4gV2hhdCdzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRob3NlIHJlYWRzIGFuZCB3cml0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyB3aGVyZSB0aGUgY3VycmVudCB2YWx1ZSBtaWdodCBiZSBvdmVybHkgY29uc2VydmF0aXZlIG9yLCBjb252ZXJzZWx5LCB0b28gYWdncmVzc2l2ZT8gSSdtIGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIHBhdHRlcm5zIHRvIGVtZXJnZSwgcGVyaGFwcyByZXZlYWxpbmcgYm90dGxlbmVja3Mgb3IgYXJlYXMgcmlwZSBmb3IgdHVuaW5nLiBJJ2xsIGJlIGtlZXBpbmcgYSBrZWVuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0IHRvIGNvbmN1cnJlbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBUaGlzIGFuYWx5c2lzIGlzIGZ1bmRhbWVudGFsIGJlZm9yZSBJIGNvbnNpZGVyIGNoYW5nZXMgdG8gdGhlIHNldHRpbmcncyB2YWx1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMDksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0OTowMi4xMjk0NjE3NDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzQxMzM2OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmRldl9tYXhfd3JpdGVfc3RyZWFtc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9mb3BzLmM9Mzk0PXN0YXRpYyBzc2l6ZV90IGJsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5ibG9jay9mb3BzLmMtNDA1LVxcdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSkge1xcbmJsb2NrL2ZvcHMuYzo0MDY6XFx0XFx0dTE2IG1heF93cml0ZV9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcXG5ibG9jay9mb3BzLmMtNDA3LVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9NTQ2ND1zdGF0aWMgYm9vbCBmMmZzX3ZhbGlkX3dyaXRlX3N0cmVhbShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHU4IHdyaXRlX3N0cmVhbSlcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTU0NzAtXFx0aWYgKCFmMmZzX2lzX211bHRpX2RldmljZShzYmkpKVxcbmZzL2YyZnMvZmlsZS5jOjU0NzE6XFx0XFx0cmV0dXJuIHdyaXRlX3N0cmVhbSBcXHUwMDNjPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKHNiaS1cXHUwMDNlc2ItXFx1MDAzZXNfYmRldik7XFxuZnMvZjJmcy9maWxlLmMtNTQ3Mi1cXG5mcy9mMmZzL2ZpbGUuYy01NDczLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzYmktXFx1MDAzZXNfbmRldnM7IGkrKylcXG5mcy9mMmZzL2ZpbGUuYzo1NDc0OlxcdFxcdGlmICh3cml0ZV9zdHJlYW0gXFx1MDAzZSBiZGV2X21heF93cml0ZV9zdHJlYW1zKEZERVYoaSkuYmRldikpXFxuZnMvZjJmcy9maWxlLmMtNTQ3NS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYz0zNzQyPXU4IGYyZnNfaW9fdHlwZV90b193cml0ZV9zdHJlYW0oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcXG4tLVxcbmZzL2YyZnMvc2VnbWVudC5jLTM3NDQte1xcbmZzL2YyZnMvc2VnbWVudC5jOjM3NDU6XFx0dW5zaWduZWQgc2hvcnQgbnIgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKGJkZXYpO1xcbmZzL2YyZnMvc2VnbWVudC5jLTM3NDYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTEzMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9tYXhfc2VnbWVudHMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTMwNC1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEzMDU6c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBiZGV2X21heF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMzA2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDk6MDQuNjAzNjAyMTc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDg2NjcwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBGaWxlc3lzdGVtIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYSBmaWxlc3lzdGVtIGlzc3VlLCBhbmQgbXkgaW50dWl0aW9uIGlzIGxlYWRpbmcgbWUgdG8gdGhlIGBibG9jay9mb3BzLmNgIGZpbGUuIFRoaXMgc2VlbXMgbGlrZSBhIGxpa2VseSBsb2NhdGlvbiBmb3Igc29tZSBjb3JlIGJsb2NrIGRldmljZSBmaWxlIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgbGluZSA0MDUgbWlnaHQgaG9sZCBzb21lIGNsdWUg4oCTIHBlcmhhcHMgYSBjcnVjaWFsIGZ1bmN0aW9uIGNhbGwsIGEgcG90ZW50aWFsIGVycm9yIGNoZWNrLCBvciBzb21lIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbi4gTGV0IG1lIHplcm8gaW4gb24gdGhhdCBzZWN0aW9uIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0OTowNi41MTIyNzE4MzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svZm9wcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0aWYgKGJsa2Rldl9kaW9faW52YWxpZChiZGV2LCBpb2NiLCBpdGVyKSlcXG4gNDAzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUpIHtcXG4gNDA2OlxcdFxcdFxcdHUxNiBtYXhfd3JpdGVfc3RyZWFtcyA9IGJkZXZfbWF4X3dyaXRlX3N0cmVhbXMoYmRldik7XFxuIDQwNzpcXHRcXG4gNDA4OlxcdFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW0pIHtcXG4gNDA5OlxcdFxcdFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW0gXFx1MDAzZSBtYXhfd3JpdGVfc3RyZWFtcylcXG4gNDEwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MTE6XFx0XFx0XFx0fSBlbHNlIGlmIChtYXhfd3JpdGVfc3RyZWFtcykge1xcbiA0MTI6XFx0XFx0XFx0XFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQgPVxcbiA0MTM6XFx0XFx0XFx0XFx0XFx0ZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKS1cXHUwMDNlaV93cml0ZV9oaW50O1xcbiA0MTQ6XFx0XFxuIDQxNTpcXHRcXHRcXHRcXHQvKlxcbiA0MTY6XFx0XFx0XFx0XFx0ICogSnVzdCB1c2UgdGhlIHdyaXRlIGhpbnQgYXMgd3JpdGUgc3RyZWFtIGZvciBibG9ja1xcbiA0MTc6XFx0XFx0XFx0XFx0ICogZGV2aWNlIHdyaXRlcy4gIFRoaXMgYXNzdW1lcyBubyBmaWxlIHN5c3RlbSBpc1xcbiA0MTg6XFx0XFx0XFx0XFx0ICogbW91bnRlZCB0aGF0IHdvdWxkIHVzZSB0aGUgc3RyZWFtcyBkaWZmZXJlbnRseS5cXG4gNDE5OlxcdFxcdFxcdFxcdCAqL1xcbiA0MjA6XFx0XFx0XFx0XFx0aWYgKHdyaXRlX2hpbnQgXFx1MDAzYz0gbWF4X3dyaXRlX3N0cmVhbXMpXFxuIDQyMTpcXHRcXHRcXHRcXHRcXHRpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW0gPSB3cml0ZV9oaW50O1xcbiA0MjI6XFx0XFx0XFx0fVxcbiA0MjM6XFx0XFx0fVxcbiA0MjQ6XFx0XFxuIDQyNTpcXHRcXHRucl9wYWdlcyA9IGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MgKyAxKTtcXG4gNDI2OlxcdFxcdGlmIChsaWtlbHkobnJfcGFnZXMgXFx1MDAzYz0gQklPX01BWF9WRUNTIFxcdTAwMjZcXHUwMDI2XFxuIDQyNzpcXHRcXHRcXHQgICAhKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9IQVNfTUVUQURBVEEpKSkge1xcbiA0Mjg6XFx0XFx0XFx0aWYgKGlzX3N5bmNfa2lvY2IoaW9jYikpXFxuIDQyOTpcXHRcXHRcXHRcXHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShpb2NiLCBpdGVyLCBiZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0OTowNi41MTIzNTA3MzhaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM3OTk5NjgzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgV3JpdGUgU3RyZWFtcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgY2hhbmdlZC4gVGhlIHBhdGNoIHNlZW1zIHRvIGltcGxlbWVudCBzb21lIGZvcm0gb2Ygd3JpdGUgc3RyZWFtIHN1cHBvcnQsIGxpa2VseSBmb3IgZW5oYW5jZWQgSS9PIG1hbmFnZW1lbnQgYXQgdGhlIGJsb2NrIGRldmljZSBsZXZlbC4gU3BlY2lmaWNhbGx5OlxuXG4xLiAgV2UncmUgZG9jdW1lbnRpbmcgYSBuZXcgc3lzZnMgYXR0cmlidXRlLCBgL3N5cy9ibG9jay9cdTAwM2NkaXNrXHUwMDNlL1x1MDAzY3BhcnRpdGlvblx1MDAzZS93cml0ZV9zdHJlYW1zYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuMi4gIGBiZGV2LmNgIGlzIGdldHRpbmcgYSBga2ZyZWVgIGZvciB0aGUgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIGluIGBiZGV2X2ZyZWVfaW5vZGVgLCB3aGljaCB0ZWxscyBtZSB0aGlzIG1hcCBpcyBhbGxvY2F0ZWQgc29tZXdoZXJlLlxuMy4gIGBibGstY29yZS5jYCBoYXMgYSBwYXJ0aXRpb24gcmVtYXAgZnVuY3Rpb24gdGhhdCBjaGVja3MgYW5kICp1c2VzKiBgYmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbWAgYWdhaW5zdCBgcC1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zYCwgYW5kIHRoZW4gbG9va3MgdXAgdGhlIHJlbWFwcGVkIHN0cmVhbSBmcm9tIGEgYGJkX3dyaXRlX3N0cmVhbV9tYXBgLiBUaGlzIGlzIGNyaXRpY2FsLCBhcyBpdCdzIHdoZXJlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGFjY2Vzc2VkLlxuNC4gIGBjb3JlLmNgIGFkZHMgc3lzZnMgYXR0cmlidXRlcyBmb3IgdGhlIHdyaXRlIHN0cmVhbXMsIHdpdGggZnVuY3Rpb25zIHRvIHNob3cgdGhlIG51bWJlciBvZiBzdHJlYW1zIChgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgKSwgY2xlYXIgcmVzZXJ2ZWQgYml0cywgc2V0IHRoZSBtYXAgYW5kIHJlc2VydmUgc3RyZWFtcywgYW5kIHN0b3JlIHRoZSBudW1iZXIgb2Ygc3RyZWFtcy4gQW5kLCBpbXBvcnRhbnRseSwgdGhlIGRyb3AgcGFydGl0aW9uIGNvZGUgY2xlYW5zIHVwIG91ciBzdHJlYW1zLiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIGhhcHBlbnMuXG41LiAgVGhlcmUgYXJlIGNoYW5nZXMgdG8gYGJsa190eXBlcy5oYCBhbmQgYGJsa2Rldi5oYCBhZGRpbmcgdGhlIG5lY2Vzc2FyeSBmaWVsZHMgdG8gdGhlIGBibG9ja19kZXZpY2VgIGFuZCBgZ2VuZGlza2Agc3RydWN0cy4gU3BlY2lmaWNhbGx5LCBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgYW5kIGBiZF93cml0ZV9zdHJlYW1fbWFwYCBpbiB0aGUgYGJsb2NrX2RldmljZWAgc3RydWN0LCBhbmQgYHdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRgIGluIHRoZSBgZ2VuZGlza2Agc3RydWN0LlxuXG5Ob3csIGxldCdzIHB1dCBvbiB0aGUgS01TQU4gaGF0LiBJJ20gbG9va2luZyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGxlYWtzLlxuXG4qICAgKipDcml0ZXJpb24gMToqKiAgS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyBUaGUgc3lzZnMgb3V0cHV0IGlzIHRoZSBvbmx5IHRoaW5nIGV4cG9zZWQsIHNwZWNpZmljYWxseSBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLiBJdCB1c2VzIGBzeXNmc19lbWl0YCB3aXRoIGEgZm9ybWF0dGVkIHN0cmluZyBhbmQgYCV1YCAod2hpY2ggaXMgc2FmZSksIHNvIG5vIHJhdyBzdHJ1Y3R1cmUgZGF0YSBpcyBjb3BpZWQuIE5vIHByb2JsZW1zIGhlcmUuXG4qICAgKipDcml0ZXJpb24gMjoqKiBDb25kaXRpb25hbCBsb2dpYyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGE/IFdlJ3ZlIGdvdCBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgYW5kIGBiZF93cml0ZV9zdHJlYW1fbWFwYC4gSG93ZXZlciwgYGJkZXZgIGlzIHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbiwgYW5kIGBnZW5kaXNrYCBpcyB6ZXJvIGFsbG9jYXRlZC4gSW4gYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgLCB0aGUgbWFwIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYCwgYW5kIHRoZW4gd2UgbG9vcCBmaWxsaW5nIHRoZSBkYXRhLiBUaGlzIG1lYW5zIGFsbCBieXRlcyBhcmUgd3JpdHRlbiBiZWZvcmUgYmVpbmcgdXNlZC4gSW4gYGJsa19wYXJ0aXRpb25fcmVtYXBgLCBgYmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbWAgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSB2YWxpZCByYW5nZSBhbmQgdGhlbiBpbmRleGVkIGludG8gdGhlIG1hcCB3aGljaCBpcyAqZnVsbHkqIGluaXRpYWxpemVkLiBUaGlzIGNoZWNrcyBvdXQuXG4qICAgKipDcml0ZXJpb24gMzoqKiBBbGxvY2F0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb25zLiAgVGhlIHN0cnVjdHVyZXMgYGJkZXZgIGFuZCBgZ2VuZGlza2AgYXJlIGVpdGhlciB6ZXJvZWQsIG9yIGFsbG9jYXRlZCBhbmQgKmZ1bGx5KiBwb3B1bGF0ZWQgYmVmb3JlIHVzZS4gTm8gaXNzdWUuXG4qICAgKipDcml0ZXJpb24gNDoqKiBCb3VuZHMgY2hlY2tzIGFuZCBsZW5ndGhzLiBXZSdyZSBub3cgcmV0dXJuaW5nIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHdyaXRlIHN0cmVhbXMsIGFuZCB0aGVzZSBjaGVja3MgYXJlIGhhcHBlbmluZywgYnV0IHdlJ3JlIG9ubHkgcmV0dXJuaW5nIGZ1bGx5IGluaXRpYWxpemVkIGRhdGEsIGFuZCBib3VuZHMgYXJlIGNoZWNrZWQgcHJvcGVybHkuIFNvIHRoZSBjaGVja3MgYWdhaW5zdCB0aGVzZSB2YWx1ZXMgaXMgZmluZSwgc2luY2UgdGhlIHZhbHVlcyBhcmUgc2V0IGJlZm9yZSB0aGUgY2hlY2tzLlxuXG5Pa2F5LCBhcmUgdGhlcmUgKm90aGVyKiBpc3N1ZXM/IFN0YW5kYXJkIG1lbW9yeSBzYWZldHk/IFN1cmUsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBVQUYgb24gdGhlIG1hcCwgY29uY3VycmVuY3kgcHJvYmxlbXMgY291bGQgYmUgdGhlcmUuIEJ1dCB0aG9zZSBhcmUgc3RhbmRhcmQgbWVtb3J5IGlzc3VlcyB0aGF0IEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTYW4gd291bGQgaGFuZGxlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5Mb29raW5nIGF0IGl0IGNsb3NlbHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8ga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLCBhbmQgYWxsIGFsbG9jYXRpb25zIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBFdmVyeSBieXRlIHdyaXR0ZW4gaXMgaW5pdGlhbGl6ZWQuIEknbSBub3Qgc2VlaW5nIGFueSBLTVNBTiBjb25jZXJucy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGF0Y2guXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrOlxuKiAgIE1ha2Ugc3VyZSB3ZSBjaGVjayBhbGwgdGhlIGZpZWxkczogYGJkZXYtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtc2AsIGBiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLCBhbmQgYGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZGAuXG4qICAgQ2hlY2sgdGhlIHBhdGhzIGZvciBzeXNmcyBzaG93IGFuZCBzdG9yZSwgcGFydGl0aW9uIHJlbWFwLCBhbmQgYmRldiBmcmVlLlxuXG5JJ20gY29uZmlkZW50LiBUaGUgcmVhc29uaW5nIHNlZW1zIHNvdW5kLiBObyBLTVNBTi4gTGV0J3Mgc2VuZCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NzIsIk91dHB1dFRva2VucyI6MzUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ5OjIwLjMxMjMyMTIxNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzeXNmcyBjb25maWd1cmF0aW9uIGFuZCBibG9jayBsYXllciByZW1hcHBpbmcgZm9yIHdyaXRlIHN0cmVhbXMgb24gcGFydGl0aW9uIGJsb2NrIGRldmljZXMuXFxuXFxuMS4gTWVtb3J5IEluaXRpYWxpemF0aW9uOlxcbi0gSW5vZGVzL2JkZXZzIGFyZSBhbGxvY2F0ZWQgdmlhIGBiZGV2X2FsbG9jX2lub2RlYCB3aGljaCBleHBsaWNpdGx5IHplcm9lcyB0aGUgYHN0cnVjdCBibG9ja19kZXZpY2VgIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIHN0YXJ0IGF0IHplcm8vTlVMTC5cXG4tIGBzdHJ1Y3QgZ2VuZGlza2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX25vZGVgLCBlbnN1cmluZyBgd3JpdGVfc3RyZWFtc19yZXNlcnZlZGAgYml0bWFwIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuLSBXaGVuIGBtYXBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIGluIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKClgLCBldmVyeSBlbGVtZW50IGluIGBtYXBbMCAuLiBuci0xXWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhY3Jvc3MgdGhlIGxvb3AgYnJhbmNoZXMgYmVmb3JlIHN3YXBwaW5nIGludG8gYGJkZXYtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLlxcblxcbjIuIFVzZXIgU3BhY2UgQ29tbXVuaWNhdGlvbjpcXG4tIFRoZSBvbmx5IGludGVyZmFjZSBleHBvc2luZyBkYXRhIHRvIHVzZXJzcGFjZSBpcyBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCB3aGljaCB1c2VzIGBzeXNmc19lbWl0KClgIHRvIGZvcm1hdCB0aGUgaW50ZWdlciBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgaW50byBhIHN0cmluZy4gTm8gYmluYXJ5IHN0cnVjdHVyZXMgb3IgcGFkZGVkIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcbjMuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBvciBtZW1vcnkgbGVha3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy5cXG4tIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hlcywgb3Iga2VybmVsIGluZm8tbGVha3MgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN5c2ZzIGNvbmZpZ3VyYXRpb24gYW5kIGJsb2NrIGxheWVyIHJlbWFwcGluZyBmb3Igd3JpdGUgc3RyZWFtcyBvbiBwYXJ0aXRpb24gYmxvY2sgZGV2aWNlcy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbm9kZXMvYmRldnMgYXJlIGFsbG9jYXRlZCB2aWEgYGJkZXZfYWxsb2NfaW5vZGVgIHdoaWNoIGV4cGxpY2l0bHkgemVyb2VzIHRoZSBgc3RydWN0IGJsb2NrX2RldmljZWAgd2l0aCBgbWVtc2V0YCwgZW5zdXJpbmcgYGJkX25yX3dyaXRlX3N0cmVhbXNgIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgc3RhcnQgYXQgemVyby9OVUxMLlxcbi0gYHN0cnVjdCBnZW5kaXNrYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAsIGVuc3VyaW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBiaXRtYXAgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG4tIFdoZW4gYG1hcGAgaXMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgaW4gYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoKWAsIGV2ZXJ5IGVsZW1lbnQgaW4gYG1hcFswIC4uIG5yLTFdYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFjcm9zcyB0aGUgbG9vcCBicmFuY2hlcyBiZWZvcmUgc3dhcHBpbmcgaW50byBgYmRldi1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcGAuXFxuXFxuMi4gVXNlciBTcGFjZSBDb21tdW5pY2F0aW9uOlxcbi0gVGhlIG9ubHkgaW50ZXJmYWNlIGV4cG9zaW5nIGRhdGEgdG8gdXNlcnNwYWNlIGlzIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIHdoaWNoIHVzZXMgYHN5c2ZzX2VtaXQoKWAgdG8gZm9ybWF0IHRoZSBpbnRlZ2VyIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBpbnRvIGEgc3RyaW5nLiBObyBiaW5hcnkgc3RydWN0dXJlcyBvciBwYWRkZWQgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuXFxuMy4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVudCBhY2Nlc3MsIG9yIG1lbW9yeSBsZWFrcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLlxcbi0gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowq8z9s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 07:00:32 +0000 UTC FinishedAt: 2026-09-11 07:49:22 +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": "f95dd9a1506d45f80485a6b518963d84cad9d533", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f95dd9a1506d45f80485a6b518963d84cad9d533", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLOCK" ], "series_id": "68d98ed4-bc7f-4146-ad45-126fd15599e7" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "part_write_streams_store", "part_set_write_streams", "part_write_streams_show", "part_put_write_streams", "blk_partition_remap", "drop_partition" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFydF93cml0ZV9zdHJlYW1zX3N0b3JlJiMzNDssCiAgICAmIzM0O3BhcnRfc2V0X3dyaXRlX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7cGFydF93cml0ZV9zdHJlYW1zX3Nob3cmIzM0OywKICAgICYjMzQ7cGFydF9wdXRfd3JpdGVfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDtibGtfcGFydGl0aW9uX3JlbWFwJiMzNDssCiAgICAmIzM0O2Ryb3BfcGFydGl0aW9uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzeXNmcyBjb25maWd1cmF0aW9uIGFuZCBibG9jayBsYXllciByZW1hcHBpbmcgZm9yIHdyaXRlIHN0cmVhbXMgb24gcGFydGl0aW9uIGJsb2NrIGRldmljZXMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjpcbi0gSW5vZGVzL2JkZXZzIGFyZSBhbGxvY2F0ZWQgdmlhIGBiZGV2X2FsbG9jX2lub2RlYCB3aGljaCBleHBsaWNpdGx5IHplcm9lcyB0aGUgYHN0cnVjdCBibG9ja19kZXZpY2VgIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIHN0YXJ0IGF0IHplcm8vTlVMTC5cbi0gYHN0cnVjdCBnZW5kaXNrYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAsIGVuc3VyaW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBiaXRtYXAgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cbi0gV2hlbiBgbWFwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jYCBpbiBgcGFydF9zZXRfd3JpdGVfc3RyZWFtcygpYCwgZXZlcnkgZWxlbWVudCBpbiBgbWFwWzAgLi4gbnItMV1gIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYWNyb3NzIHRoZSBsb29wIGJyYW5jaGVzIGJlZm9yZSBzd2FwcGluZyBpbnRvIGBiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLlxuXG4yLiBVc2VyIFNwYWNlIENvbW11bmljYXRpb246XG4tIFRoZSBvbmx5IGludGVyZmFjZSBleHBvc2luZyBkYXRhIHRvIHVzZXJzcGFjZSBpcyBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCB3aGljaCB1c2VzIGBzeXNmc19lbWl0KClgIHRvIGZvcm1hdCB0aGUgaW50ZWdlciBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgaW50byBhIHN0cmluZy4gTm8gYmluYXJ5IHN0cnVjdHVyZXMgb3IgcGFkZGVkIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuXG4zLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBvciBtZW1vcnkgbGVha3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy5cbi0gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHdyaXRlIHN0cmVhbSByZXNlcnZhdGlvbiBhbmQgcmVtYXBwaW5nIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSBwYXJ0aXRpb25zLiBJdCBhZGRzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSAod3JpdGVfc3RyZWFtcykgdG8gcGFydGl0aW9ucywgaW1wbGVtZW50cyBzdHJlYW0gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gdHJhY2tpbmcgb24gdGhlIHVuZGVybHlpbmcgZGlzaywgYW5kIHVwZGF0ZXMgYmlvIHBhcnRpdGlvbiByZW1hcHBpbmcgdG8gbWFwIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW1zIHRvIGRpc2sgd3JpdGUgc3RyZWFtcy4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MTNkNmY2ZDY4Y2ZjNDU0ZmZiMDJlMDk4YzMxZjZmZTc5NTBlMjY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDc6NDY6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrXG5pbmRleCA5MDBiM2ZjNGM3MmQwLi40NDJmNGMyMjFiZGVhIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2tcbkBAIC0yMTgsNiAmIzQzOzIxOCwyNSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0c2FtZSBhcyB0aGUgZm9ybWF0IG9mIC9zeXMvYmxvY2svXHUwMDNjZGlza1x1MDAzZS9zdGF0LlxuIFxuIFxuJiM0MztXaGF0Olx0XHQvc3lzL2Jsb2NrL1x1MDAzY2Rpc2tcdTAwM2UvXHUwMDNjcGFydGl0aW9uXHUwMDNlL3dyaXRlX3N0cmVhbXNcbiYjNDM7RGF0ZTpcdFx0U2VwdGVtYmVyIDIwMjZcbiYjNDM7Q29udGFjdDpcdEtlb3Nlb25nIFBhcmsgXHUwMDNja2Vvc3VuZy5wYXJrQHNhbXN1bmcuY29tXHUwMDNlXG4mIzQzO0Rlc2NyaXB0aW9uOlxuJiM0MztcdFx0W1JXXSBOdW1iZXIgb2YgdGhlIGRpc2smIzM5O3Mgd3JpdGUgc3RyZWFtcyByZXNlcnZlZCBmb3IgdGhlXG4mIzQzO1x0XHRwYXJ0aXRpb24uIFdyaXRpbmcgTiByZXNlcnZlcyBOIGRpc2sgd3JpdGUgc3RyZWFtcyB0aGF0IG5vXG4mIzQzO1x0XHRvdGhlciBwYXJ0aXRpb24gY2FuIHVzZSBhbmQgZXhwb3NlcyB0aGVtIGFzIHRoZSBwYXJ0aXRpb24mIzM5O3NcbiYjNDM7XHRcdHdyaXRlIHN0cmVhbXMgMSB0byBOLiBXcml0aW5nIDAgZ2l2ZXMgdGhlbSBiYWNrLiBBdCBtb3N0XG4mIzQzO1x0XHQvc3lzL2Jsb2NrL1x1MDAzY2Rpc2tcdTAwM2UvcXVldWUvbWF4X3dyaXRlX3N0cmVhbXMgc3RyZWFtcywgYW5kIG5ldmVyXG4mIzQzO1x0XHRtb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhblxuJiM0MztcdFx0b25seSBiZSBjaGFuZ2VkIHdoaWxlIHRoZSBwYXJ0aXRpb24gaXMgbm90IG9wZW4sIGFuZCBhIGNoYW5nZVxuJiM0MztcdFx0a2VlcHMgdGhlIHN0cmVhbSBudW1iZXJzIHRoYXQgc3Vydml2ZSBpdCBwb2ludGluZyBhdCB0aGUgc2FtZVxuJiM0MztcdFx0ZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3NcbiYjNDM7XHRcdHJlc2VydmVkIGhlcmUsIGFuZCB0aGUgcmVzZXJ2YXRpb24gaXMgbG9zdCB3aGVuIHRoZSBwYXJ0aXRpb25cbiYjNDM7XHRcdGlzIHJlbW92ZWQsIGluY2x1ZGluZyBieSBhIHBhcnRpdGlvbiB0YWJsZSByZXNjYW4uIEkvTyB0b1xuJiM0MztcdFx0dGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdFxuJiM0MztcdFx0Y2FuIHdyaXRlIHRvIGFueSBzZWN0b3Igb2YgYSBwYXJ0aXRpb24uXG4mIzQzO1xuJiM0MztcbiBXaGF0Olx0XHQvc3lzL2Jsb2NrL1x1MDAzY2Rpc2tcdTAwM2UvcXVldWUvYWRkX3JhbmRvbVxuIERhdGU6XHRcdEp1bmUgMjAxMFxuIENvbnRhY3Q6XHRsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmNcbmluZGV4IGNkODMyMzA4Mzc0MDYuLjczMDZhNGVmMGE4NjcgMTAwNjQ0XG4tLS0gYS9ibG9jay9iZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JkZXYuY1xuQEAgLTQzOCw2ICYjNDM7NDM4LDcgQEAgc3RhdGljIHZvaWQgYmRldl9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXG4gXHRmcmVlX3BlcmNwdShiZGV2LVx1MDAzZWJkX3N0YXRzKTtcbiBcdGtmcmVlKGJkZXYtXHUwMDNlYmRfbWV0YV9pbmZvKTtcbiYjNDM7XHRrZnJlZShiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXApO1xuIFx0c2VjdXJpdHlfYmRldl9mcmVlKGJkZXYpO1xuIFxuIFx0aWYgKCFiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSkge1xuZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jXG5pbmRleCAxOTZiY2NmMjdmNThkLi4zYjZmMDliMzk0M2Y0IDEwMDY0NFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svYmxrLWNvcmUuY1xuQEAgLTYxNiw3ICYjNDM7NjE2LDggQEAgc3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pXG4gfVxuIFxuIC8qXG4tICogUmVtYXAgYmxvY2sgbiBvZiBwYXJ0aXRpb24gcCB0byBibG9jayBuJiM0MztzdGFydChwKSBvZiB0aGUgZGlzay5cbiYjNDM7ICogUmVtYXAgYmxvY2sgbiBvZiBwYXJ0aXRpb24gcCB0byBibG9jayBuJiM0MztzdGFydChwKSBvZiB0aGUgZGlzaywgYW5kIHRoZVxuJiM0MzsgKiB3cml0ZSBzdHJlYW1zIG9mIHBhcnRpdGlvbiBwIHRvIHRoZSBkaXNrIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZW0uXG4gICovXG4gc3RhdGljIGludCBibGtfcGFydGl0aW9uX3JlbWFwKHN0cnVjdCBiaW8gKmJpbylcbiB7XG5AQCAtNjMwLDYgJiM0Mzs2MzEsMTMgQEAgc3RhdGljIGludCBibGtfcGFydGl0aW9uX3JlbWFwKHN0cnVjdCBiaW8gKmJpbylcbiBcdFx0XHRcdCAgICAgIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciAtXG4gXHRcdFx0XHQgICAgICBwLVx1MDAzZWJkX3N0YXJ0X3NlY3QpO1xuIFx0fVxuJiM0MztcdGlmIChiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIFx1MDAyNlx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcbiYjNDM7XHRcdGlmICh1bmxpa2VseShiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIFx1MDAzZSBwLVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXMpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtID1cbiYjNDM7XHRcdFx0cC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2Jpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gLSAxXTtcbiYjNDM7XHR9XG4gXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLjc3ODUyZWIyYWNiZWMgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbkBAIC0yMDUsNiAmIzQzOzIwNSwxMzAgQEAgc3RhdGljIHNzaXplX3QgcGFydF9kaXNjYXJkX2FsaWdubWVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbiBcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXVcXG5cJiMzNDssIGJkZXZfZGlzY2FyZF9hbGlnbm1lbnQoZGV2X3RvX2JkZXYoZGV2KSkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHNzaXplX3QgcGFydF93cml0ZV9zdHJlYW1zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0OywgZGV2X3RvX2JkZXYoZGV2KS1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogR2l2ZSB0aGUgd3JpdGUgc3RyZWFtcyBvZiBAcGFydCBiYWNrIHRvIHRoZSBkaXNrLiAgQ2FsbGVkIGZyb21cbiYjNDM7ICogZHJvcF9wYXJ0aXRpb24oKSB3aXRoIG9wZW5fbXV0ZXggaGVsZDsgdGhlIG1hcCBpcyBsZWZ0IGFsb25lIGJlY2F1c2UgYVxuJiM0MzsgKiB3cml0ZSByYWNpbmcgd2l0aCBkZWxfZ2VuZGlzaygpIHN0aWxsIHVzZXMgaXQgdW50aWwgdGhlIGJkZXYgaXMgZnJlZWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHBhcnQtXHUwMDNlYmRfZGlzaztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuJiM0MztcdFx0XHQgICAgZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQsIHU4IG5yKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBwYXJ0LVx1MDAzZWJkX2Rpc2s7XG4mIzQzO1x0dW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCxcbiYjNDM7XHRcdFx0XHQgYmRldl9saW1pdHMocGFydCktXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXMsIFU4X01BWCk7XG4mIzQzO1x0dTggKm1hcCA9IE5VTEw7XG4mIzQzO1x0dW5zaWduZWQgaW50IGksIGlkLCBucl9mcmVlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdHU4IGN1cjtcbiYjNDM7XG4mIzQzO1x0aWYgKG5yIFx1MDAzZSBtYXgpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKG5yKSB7XG4mIzQzO1x0XHRtYXAgPSBrbWFsbG9jKG5yLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmICghbWFwKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZGlzay1cdTAwM2VvcGVuX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0LyogdGhlIHBhcnRpdGlvbiBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIG11dGV4ICovXG4mIzQzO1x0aWYgKHhhX2xvYWQoXHUwMDI2ZGlzay1cdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpICE9IHBhcnQpIHtcbiYjNDM7XHRcdHJldCA9IC1FTlhJTztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Y3VyID0gcGFydC1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zO1xuJiM0MztcbiYjNDM7XHQvKiBhIG5vLW9wIGNoYW5nZSBpcyBhbGxvd2VkIHdoaWxlIG9wZW4gKi9cbiYjNDM7XHRpZiAobnIgPT0gY3VyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdC8qIHRoZSBzdHJlYW1zIG11c3Qgbm90IGNoYW5nZSB1bmRlciBhIHVzZXIgb2YgdGhlIHBhcnRpdGlvbiAqL1xuJiM0MztcdGlmIChhdG9taWNfcmVhZChcdTAwMjZwYXJ0LVx1MDAzZWJkX29wZW5lcnMpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUJVU1k7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5yX2ZyZWUgPSBtYXggLSBiaXRtYXBfd2VpZ2h0KGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCwgbWF4ICYjNDM7IDEpO1xuJiM0MztcdGlmIChuciBcdTAwM2UgY3VyIFx1MDAyNlx1MDAyNiBuciAtIGN1ciBcdTAwM2UgbnJfZnJlZSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT1NQQztcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLZWVwIHRoZSBzdHJlYW1zIHRoYXQgc3RheSwgc28gdGhhdCBhIHBhcnRpdGlvbiBrZWVwcyB3cml0aW5nXG4mIzQzO1x0ICogdGhyb3VnaCB0aGUgc2FtZSBkaXNrIHN0cmVhbXMgYW5kIGl0cyBkYXRhIHN0YXlzIHRvZ2V0aGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbihjdXIsIG5yKTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRtYXBbaV0gPSBwYXJ0LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV07XG4mIzQzO1xuJiM0MztcdGlmIChuciBcdTAwM2MgY3VyKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSBucjsgaSBcdTAwM2MgY3VyOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuJiM0MztcdFx0XHRcdCAgICBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRmb3IgKGkgPSBjdXI7IGkgXHUwMDNjIG5yOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsXG4mIzQzO1x0XHRcdFx0XHRcdG1heCAmIzQzOyAxLCAxKTtcbiYjNDM7XHRcdFx0X19zZXRfYml0KGlkLCBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuJiM0MztcdFx0XHRtYXBbaV0gPSBpZDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3YXAocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwLCBtYXApO1xuJiM0MztcdHBhcnQtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuJiM0MztcdGtmcmVlKG1hcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcbiYjNDM7XHRcdFx0XHRcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGtlcm5mc19ub2RlICprbjtcbiYjNDM7XHR1OCBucjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBrc3RydG91OChidWYsIDEwLCBcdTAwMjZucik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogZHJvcF9wYXJ0aXRpb24oKSByZW1vdmVzIHRoaXMgYXR0cmlidXRlIHdpdGggb3Blbl9tdXRleCBoZWxkLCBzb1xuJiM0MztcdCAqIGRvbiYjMzk7dCBob2xkIHRoZSBhY3RpdmUgcmVmZXJlbmNlIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBtdXRleC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRrbiA9IHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKFx1MDAyNmRldi1cdTAwM2Vrb2JqLCBcdTAwMjZhdHRyLVx1MDAzZWF0dHIpO1xuJiM0MztcdGlmICgha24pXG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKGRldl90b19iZGV2KGRldiksIG5yKTtcbiYjNDM7XHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBERVZJQ0VfQVRUUihwYXJ0aXRpb24sIDA0NDQsIHBhcnRfcGFydGl0aW9uX3Nob3csIE5VTEwpO1xuIHN0YXRpYyBERVZJQ0VfQVRUUihzdGFydCwgMDQ0NCwgcGFydF9zdGFydF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoc2l6ZSwgMDQ0NCwgcGFydF9zaXplX3Nob3csIE5VTEwpO1xuQEAgLTIxMyw2ICYjNDM7MzM3LDggQEAgc3RhdGljIERFVklDRV9BVFRSKGFsaWdubWVudF9vZmZzZXQsIDA0NDQsIHBhcnRfYWxpZ25tZW50X29mZnNldF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoZGlzY2FyZF9hbGlnbm1lbnQsIDA0NDQsIHBhcnRfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdywgTlVMTCk7XG4gc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoaW5mbGlnaHQsIDA0NDQsIHBhcnRfaW5mbGlnaHRfc2hvdywgTlVMTCk7XG4mIzQzO3N0YXRpYyBERVZJQ0VfQVRUUih3cml0ZV9zdHJlYW1zLCAwNjQ0LCBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyxcbiYjNDM7XHRcdCAgIHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZSk7XG4gI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVFxuIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9mYWlsID1cbiBcdF9fQVRUUihtYWtlLWl0LWZhaWwsIDA2NDQsIHBhcnRfZmFpbF9zaG93LCBwYXJ0X2ZhaWxfc3RvcmUpO1xuQEAgLTIyNyw2ICYjNDM7MzUzLDcgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBhcnRfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX2Rpc2NhcmRfYWxpZ25tZW50LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9zdGF0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9pbmZsaWdodC5hdHRyLFxuJiM0MztcdFx1MDAyNmRldl9hdHRyX3dyaXRlX3N0cmVhbXMuYXR0cixcbiAjaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUXG4gXHRcdTAwMjZkZXZfYXR0cl9mYWlsLmF0dHIsXG4gI2VuZGlmXG5AQCAtMjc0LDYgJiM0Mzs0MDEsNyBAQCB2b2lkIGRyb3BfcGFydGl0aW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpXG4ge1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZwYXJ0LVx1MDAzZWJkX2Rpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4gXG4mIzQzO1x0cGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTtcbiBcdHhhX2VyYXNlKFx1MDAyNnBhcnQtXHUwMDNlYmRfZGlzay1cdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpO1xuIFx0a29iamVjdF9wdXQocGFydC1cdTAwM2ViZF9ob2xkZXJfZGlyKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuaW5kZXggOThlMjFiNGNiZjMyOC4uMGJiZmEyNzA4MDk5MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC03MSw2ICYjNDM7NzEsOSBAQCBzdHJ1Y3QgYmxvY2tfZGV2aWNlIHtcbiBcbiBcdHN0cnVjdCBwYXJ0aXRpb25fbWV0YV9pbmZvICpiZF9tZXRhX2luZm87XG4gXHRpbnRcdFx0XHRiZF93cml0ZXJzO1xuJiM0MztcdC8qIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW0gcyBpcyBkaXNrIHN0cmVhbSBiZF93cml0ZV9zdHJlYW1fbWFwW3MgLSAxXSAqL1xuJiM0MztcdHU4XHRcdFx0YmRfbnJfd3JpdGVfc3RyZWFtcztcbiYjNDM7XHR1OFx0XHRcdCpiZF93cml0ZV9zdHJlYW1fbWFwO1xuICNpZmRlZiBDT05GSUdfU0VDVVJJVFlcbiBcdHZvaWRcdFx0XHQqYmRfc2VjdXJpdHk7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbmluZGV4IDRmNzkwNWMzNDEyYjguLjVkMjQxZDdiMDgwMmIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXG5AQCAtMTc4LDYgJiM0MzsxNzgsOCBAQCBzdHJ1Y3QgZ2VuZGlzayB7XG4gXG4gXHRzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDtcdC8qIG9wZW4vY2xvc2UgbXV0ZXggKi9cbiBcdHVuc2lnbmVkIG9wZW5fcGFydGl0aW9ucztcdC8qIG51bWJlciBvZiBvcGVuIHBhcnRpdGlvbnMgKi9cbiYjNDM7XHQvKiByZXNlcnZlZCBieSBwYXJ0aXRpb25zLCBiaXQgTiA9IHN0cmVhbSBOICgwIHVudXNlZCksIG9wZW5fbXV0ZXggKi9cbiYjNDM7XHRERUNMQVJFX0JJVE1BUCh3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBVOF9NQVggJiM0MzsgMSk7XG4gXG4gXHRzdHJ1Y3QgYmFja2luZ19kZXZfaW5mb1x0KmJkaTtcbiBcdHN0cnVjdCBrb2JqZWN0IHF1ZXVlX2tvYmo7XHQvKiB0aGUgcXVldWUvIGRpcmVjdG9yeSAqL1xuQEAgLTEzMDMsNyAmIzQzOzEzMDUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZGV2X21heF9zZWdtZW50cyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHtcbiBcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gYmRldi1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zO1xuIFx0cmV0dXJuIGJkZXZfbGltaXRzKGJkZXYpLVx1MDAzZW1heF93cml0ZV9zdHJlYW1zO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhcnRfd3JpdGVfc3RyZWFtc19zdG9yZSYjMzQ7LAogICAgJiMzNDtwYXJ0X3NldF93cml0ZV9zdHJlYW1zJiMzNDssCiAgICAmIzM0O3BhcnRfd3JpdGVfc3RyZWFtc19zaG93JiMzNDssCiAgICAmIzM0O3BhcnRfcHV0X3dyaXRlX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7YmxrX3BhcnRpdGlvbl9yZW1hcCYjMzQ7LAogICAgJiMzNDtkcm9wX3BhcnRpdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHdyaXRlIHN0cmVhbSByZXNlcnZhdGlvbiBhbmQgcmVtYXBwaW5nIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSBwYXJ0aXRpb25zLiBJdCBhZGRzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSAod3JpdGVfc3RyZWFtcykgdG8gcGFydGl0aW9ucywgaW1wbGVtZW50cyBzdHJlYW0gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gdHJhY2tpbmcgb24gdGhlIHVuZGVybHlpbmcgZGlzaywgYW5kIHVwZGF0ZXMgYmlvIHBhcnRpdGlvbiByZW1hcHBpbmcgdG8gbWFwIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW1zIHRvIGRpc2sgd3JpdGUgc3RyZWFtcy4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MTNkNmY2ZDY4Y2ZjNDU0ZmZiMDJlMDk4YzMxZjZmZTc5NTBlMjY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDc6NDY6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2sgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2sKaW5kZXggOTAwYjNmYzRjNzJkMC4uNDQyZjRjMjIxYmRlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9jawpAQCAtMjE4LDYgJiM0MzsyMTgsMjUgQEAgRGVzY3JpcHRpb246CiAJCXNhbWUgYXMgdGhlIGZvcm1hdCBvZiAvc3lzL2Jsb2NrLyZsdDtkaXNrJmd0Oy9zdGF0LgogCiAKJiM0MztXaGF0OgkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvJmx0O3BhcnRpdGlvbiZndDsvd3JpdGVfc3RyZWFtcwomIzQzO0RhdGU6CQlTZXB0ZW1iZXIgMjAyNgomIzQzO0NvbnRhY3Q6CUtlb3Nlb25nIFBhcmsgJmx0O2tlb3N1bmcucGFya0BzYW1zdW5nLmNvbSZndDsKJiM0MztEZXNjcmlwdGlvbjoKJiM0MzsJCVtSV10gTnVtYmVyIG9mIHRoZSBkaXNrJiMzOTtzIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZQomIzQzOwkJcGFydGl0aW9uLiBXcml0aW5nIE4gcmVzZXJ2ZXMgTiBkaXNrIHdyaXRlIHN0cmVhbXMgdGhhdCBubwomIzQzOwkJb3RoZXIgcGFydGl0aW9uIGNhbiB1c2UgYW5kIGV4cG9zZXMgdGhlbSBhcyB0aGUgcGFydGl0aW9uJiMzOTtzCiYjNDM7CQl3cml0ZSBzdHJlYW1zIDEgdG8gTi4gV3JpdGluZyAwIGdpdmVzIHRoZW0gYmFjay4gQXQgbW9zdAomIzQzOwkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvcXVldWUvbWF4X3dyaXRlX3N0cmVhbXMgc3RyZWFtcywgYW5kIG5ldmVyCiYjNDM7CQltb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhbgomIzQzOwkJb25seSBiZSBjaGFuZ2VkIHdoaWxlIHRoZSBwYXJ0aXRpb24gaXMgbm90IG9wZW4sIGFuZCBhIGNoYW5nZQomIzQzOwkJa2VlcHMgdGhlIHN0cmVhbSBudW1iZXJzIHRoYXQgc3Vydml2ZSBpdCBwb2ludGluZyBhdCB0aGUgc2FtZQomIzQzOwkJZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3MKJiM0MzsJCXJlc2VydmVkIGhlcmUsIGFuZCB0aGUgcmVzZXJ2YXRpb24gaXMgbG9zdCB3aGVuIHRoZSBwYXJ0aXRpb24KJiM0MzsJCWlzIHJlbW92ZWQsIGluY2x1ZGluZyBieSBhIHBhcnRpdGlvbiB0YWJsZSByZXNjYW4uIEkvTyB0bwomIzQzOwkJdGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdAomIzQzOwkJY2FuIHdyaXRlIHRvIGFueSBzZWN0b3Igb2YgYSBwYXJ0aXRpb24uCiYjNDM7CiYjNDM7CiBXaGF0OgkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvcXVldWUvYWRkX3JhbmRvbQogRGF0ZToJCUp1bmUgMjAxMAogQ29udGFjdDoJbGludXgtYmxvY2tAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmMKaW5kZXggY2Q4MzIzMDgzNzQwNi4uNzMwNmE0ZWYwYTg2NyAxMDA2NDQKLS0tIGEvYmxvY2svYmRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JkZXYuYwpAQCAtNDM4LDYgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAogCWZyZWVfcGVyY3B1KGJkZXYtJmd0O2JkX3N0YXRzKTsKIAlrZnJlZShiZGV2LSZndDtiZF9tZXRhX2luZm8pOwomIzQzOwlrZnJlZShiZGV2LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwKTsKIAlzZWN1cml0eV9iZGV2X2ZyZWUoYmRldik7CiAKIAlpZiAoIWJkZXZfaXNfcGFydGl0aW9uKGJkZXYpKSB7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCAxOTZiY2NmMjdmNThkLi4zYjZmMDliMzk0M2Y0IDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTYxNiw3ICYjNDM7NjE2LDggQEAgc3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pCiB9CiAKIC8qCi0gKiBSZW1hcCBibG9jayBuIG9mIHBhcnRpdGlvbiBwIHRvIGJsb2NrIG4mIzQzO3N0YXJ0KHApIG9mIHRoZSBkaXNrLgomIzQzOyAqIFJlbWFwIGJsb2NrIG4gb2YgcGFydGl0aW9uIHAgdG8gYmxvY2sgbiYjNDM7c3RhcnQocCkgb2YgdGhlIGRpc2ssIGFuZCB0aGUKJiM0MzsgKiB3cml0ZSBzdHJlYW1zIG9mIHBhcnRpdGlvbiBwIHRvIHRoZSBkaXNrIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZW0uCiAgKi8KIHN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC02MzAsNiAmIzQzOzYzMSwxMyBAQCBzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKQogCQkJCSAgICAgIGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgLQogCQkJCSAgICAgIHAtJmd0O2JkX3N0YXJ0X3NlY3QpOwogCX0KJiM0MzsJaWYgKGJpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtICZhbXA7JmFtcDsgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFKSB7CiYjNDM7CQlpZiAodW5saWtlbHkoYmlvLSZndDtiaV93cml0ZV9zdHJlYW0gJmd0OyBwLSZndDtiZF9ucl93cml0ZV9zdHJlYW1zKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWJpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtID0KJiM0MzsJCQlwLSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2Jpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtIC0gMV07CiYjNDM7CX0KIAliaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwppbmRleCBiNWM1OWI3OWNhN2NiLi43Nzg1MmViMmFjYmVjIDEwMDY0NAotLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwpAQCAtMjA1LDYgJiM0MzsyMDUsMTMwIEBAIHN0YXRpYyBzc2l6ZV90IHBhcnRfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgYmRldl9kaXNjYXJkX2FsaWdubWVudChkZXZfdG9fYmRldihkZXYpKSk7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgZGV2X3RvX2JkZXYoZGV2KS0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogR2l2ZSB0aGUgd3JpdGUgc3RyZWFtcyBvZiBAcGFydCBiYWNrIHRvIHRoZSBkaXNrLiAgQ2FsbGVkIGZyb20KJiM0MzsgKiBkcm9wX3BhcnRpdGlvbigpIHdpdGggb3Blbl9tdXRleCBoZWxkOyB0aGUgbWFwIGlzIGxlZnQgYWxvbmUgYmVjYXVzZSBhCiYjNDM7ICogd3JpdGUgcmFjaW5nIHdpdGggZGVsX2dlbmRpc2soKSBzdGlsbCB1c2VzIGl0IHVudGlsIHRoZSBiZGV2IGlzIGZyZWVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC0mZ3Q7YmRfZGlzazsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBhcnQtJmd0O2JkX25yX3dyaXRlX3N0cmVhbXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJX19jbGVhcl9iaXQocGFydC0mZ3Q7YmRfd3JpdGVfc3RyZWFtX21hcFtpXSwKJiM0MzsJCQkgICAgZGlzay0mZ3Q7d3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0LCB1OCBucikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC0mZ3Q7YmRfZGlzazsKJiM0MzsJdW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCwKJiM0MzsJCQkJIGJkZXZfbGltaXRzKHBhcnQpLSZndDttYXhfd3JpdGVfc3RyZWFtcywgVThfTUFYKTsKJiM0MzsJdTggKm1hcCA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGludCBpLCBpZCwgbnJfZnJlZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CXU4IGN1cjsKJiM0MzsKJiM0MzsJaWYgKG5yICZndDsgbWF4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChucikgewomIzQzOwkJbWFwID0ga21hbGxvYyhuciwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIW1hcCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CiYjNDM7CS8qIHRoZSBwYXJ0aXRpb24gbWF5IGhhdmUgYmVlbiBkcm9wcGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBtdXRleCAqLwomIzQzOwlpZiAoeGFfbG9hZCgmYW1wO2Rpc2stJmd0O3BhcnRfdGJsLCBiZGV2X3BhcnRubyhwYXJ0KSkgIT0gcGFydCkgewomIzQzOwkJcmV0ID0gLUVOWElPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3VyID0gcGFydC0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtczsKJiM0MzsKJiM0MzsJLyogYSBuby1vcCBjaGFuZ2UgaXMgYWxsb3dlZCB3aGlsZSBvcGVuICovCiYjNDM7CWlmIChuciA9PSBjdXIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogdGhlIHN0cmVhbXMgbXVzdCBub3QgY2hhbmdlIHVuZGVyIGEgdXNlciBvZiB0aGUgcGFydGl0aW9uICovCiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO3BhcnQtJmd0O2JkX29wZW5lcnMpKSB7CiYjNDM7CQlyZXQgPSAtRUJVU1k7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlucl9mcmVlID0gbWF4IC0gYml0bWFwX3dlaWdodChkaXNrLSZndDt3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggJiM0MzsgMSk7CiYjNDM7CWlmIChuciAmZ3Q7IGN1ciAmYW1wOyZhbXA7IG5yIC0gY3VyICZndDsgbnJfZnJlZSkgewomIzQzOwkJcmV0ID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtlZXAgdGhlIHN0cmVhbXMgdGhhdCBzdGF5LCBzbyB0aGF0IGEgcGFydGl0aW9uIGtlZXBzIHdyaXRpbmcKJiM0MzsJICogdGhyb3VnaCB0aGUgc2FtZSBkaXNrIHN0cmVhbXMgYW5kIGl0cyBkYXRhIHN0YXlzIHRvZ2V0aGVyLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1pbihjdXIsIG5yKTsgaSYjNDM7JiM0MzspCiYjNDM7CQltYXBbaV0gPSBwYXJ0LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2ldOwomIzQzOwomIzQzOwlpZiAobnIgJmx0OyBjdXIpIHsKJiM0MzsJCWZvciAoaSA9IG5yOyBpICZsdDsgY3VyOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlfX2NsZWFyX2JpdChwYXJ0LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2ldLAomIzQzOwkJCQkgICAgZGlzay0mZ3Q7d3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmb3IgKGkgPSBjdXI7IGkgJmx0OyBucjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLSZndDt3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLAomIzQzOwkJCQkJCW1heCAmIzQzOyAxLCAxKTsKJiM0MzsJCQlfX3NldF9iaXQoaWQsIGRpc2stJmd0O3dyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpOwomIzQzOwkJCW1hcFtpXSA9IGlkOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXN3YXAocGFydC0mZ3Q7YmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTsKJiM0MzsJcGFydC0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yOwomIzQzOwomIzQzO291dDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CWtmcmVlKG1hcCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGtlcm5mc19ub2RlICprbjsKJiM0MzsJdTggbnI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b3U4KGJ1ZiwgMTAsICZhbXA7bnIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogZHJvcF9wYXJ0aXRpb24oKSByZW1vdmVzIHRoaXMgYXR0cmlidXRlIHdpdGggb3Blbl9tdXRleCBoZWxkLCBzbwomIzQzOwkgKiBkb24mIzM5O3QgaG9sZCB0aGUgYWN0aXZlIHJlZmVyZW5jZSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbXV0ZXguCiYjNDM7CSAqLwomIzQzOwlrbiA9IHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKCZhbXA7ZGV2LSZndDtrb2JqLCAmYW1wO2F0dHItJmd0O2F0dHIpOwomIzQzOwlpZiAoIWtuKQomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsKJiM0MzsJcmV0ID0gcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhkZXZfdG9fYmRldihkZXYpLCBucik7CiYjNDM7CXN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIERFVklDRV9BVFRSKHBhcnRpdGlvbiwgMDQ0NCwgcGFydF9wYXJ0aXRpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhcnQsIDA0NDQsIHBhcnRfc3RhcnRfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc2l6ZSwgMDQ0NCwgcGFydF9zaXplX3Nob3csIE5VTEwpOwpAQCAtMjEzLDYgJiM0MzszMzcsOCBAQCBzdGF0aWMgREVWSUNFX0FUVFIoYWxpZ25tZW50X29mZnNldCwgMDQ0NCwgcGFydF9hbGlnbm1lbnRfb2Zmc2V0X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGRpc2NhcmRfYWxpZ25tZW50LCAwNDQ0LCBwYXJ0X2Rpc2NhcmRfYWxpZ25tZW50X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTsKJiM0MztzdGF0aWMgREVWSUNFX0FUVFIod3JpdGVfc3RyZWFtcywgMDY0NCwgcGFydF93cml0ZV9zdHJlYW1zX3Nob3csCiYjNDM7CQkgICBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUpOwogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2ZhaWwgPQogCV9fQVRUUihtYWtlLWl0LWZhaWwsIDA2NDQsIHBhcnRfZmFpbF9zaG93LCBwYXJ0X2ZhaWxfc3RvcmUpOwpAQCAtMjI3LDYgJiM0MzszNTMsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGFydF9hdHRyc1tdID0gewogCSZhbXA7ZGV2X2F0dHJfZGlzY2FyZF9hbGlnbm1lbnQuYXR0ciwKIAkmYW1wO2Rldl9hdHRyX3N0YXQuYXR0ciwKIAkmYW1wO2Rldl9hdHRyX2luZmxpZ2h0LmF0dHIsCiYjNDM7CSZhbXA7ZGV2X2F0dHJfd3JpdGVfc3RyZWFtcy5hdHRyLAogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogCSZhbXA7ZGV2X2F0dHJfZmFpbC5hdHRyLAogI2VuZGlmCkBAIC0yNzQsNiAmIzQzOzQwMSw3IEBAIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCkKIHsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGFydC0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiAKJiM0MzsJcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTsKIAl4YV9lcmFzZSgmYW1wO3BhcnQtJmd0O2JkX2Rpc2stJmd0O3BhcnRfdGJsLCBiZGV2X3BhcnRubyhwYXJ0KSk7CiAJa29iamVjdF9wdXQocGFydC0mZ3Q7YmRfaG9sZGVyX2Rpcik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCmluZGV4IDk4ZTIxYjRjYmYzMjguLjBiYmZhMjcwODA5OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaApAQCAtNzEsNiAmIzQzOzcxLDkgQEAgc3RydWN0IGJsb2NrX2RldmljZSB7CiAKIAlzdHJ1Y3QgcGFydGl0aW9uX21ldGFfaW5mbyAqYmRfbWV0YV9pbmZvOwogCWludAkJCWJkX3dyaXRlcnM7CiYjNDM7CS8qIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW0gcyBpcyBkaXNrIHN0cmVhbSBiZF93cml0ZV9zdHJlYW1fbWFwW3MgLSAxXSAqLwomIzQzOwl1OAkJCWJkX25yX3dyaXRlX3N0cmVhbXM7CiYjNDM7CXU4CQkJKmJkX3dyaXRlX3N0cmVhbV9tYXA7CiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCiAJdm9pZAkJCSpiZF9zZWN1cml0eTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNGY3OTA1YzM0MTJiOC4uNWQyNDFkN2IwODAyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xNzgsNiAmIzQzOzE3OCw4IEBAIHN0cnVjdCBnZW5kaXNrIHsKIAogCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwkvKiBvcGVuL2Nsb3NlIG11dGV4ICovCiAJdW5zaWduZWQgb3Blbl9wYXJ0aXRpb25zOwkvKiBudW1iZXIgb2Ygb3BlbiBwYXJ0aXRpb25zICovCiYjNDM7CS8qIHJlc2VydmVkIGJ5IHBhcnRpdGlvbnMsIGJpdCBOID0gc3RyZWFtIE4gKDAgdW51c2VkKSwgb3Blbl9tdXRleCAqLwomIzQzOwlERUNMQVJFX0JJVE1BUCh3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBVOF9NQVggJiM0MzsgMSk7CiAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbwkqYmRpOwogCXN0cnVjdCBrb2JqZWN0IHF1ZXVlX2tvYmo7CS8qIHRoZSBxdWV1ZS8gZGlyZWN0b3J5ICovCkBAIC0xMzAzLDcgJiM0MzsxMzA1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9tYXhfc2VnbWVudHMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewogCWlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gYmRldi0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtczsKIAlyZXR1cm4gYmRldl9saW1pdHMoYmRldiktJmd0O21heF93cml0ZV9zdHJlYW1zOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA0NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBXcml0ZSBTdHJlYW0gUmVtYXBwaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgZGlmZjogaXQmIzM5O3MgaGl0dGluZyB0aGUgY29yZSBibG9jayBsYXllciwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSBhY3Jvc3MgYSBmZXcgZmlsZXM6IHRoZSBBQkkgZG9jdW1lbnRhdGlvbiwgYGJkZXYuY2AsIGBibGstY29yZS5jYCwgYW5kIGBwYXJ0aXRpb25zL2NvcmUuY2AsIHBsdXMgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMuIFRoaXMgbG9va3MgbGlrZSBhIHRpZ2h0bHkgY291cGxlZCBzZXQgb2YgY2hhbmdlcywgc28gdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSBvZiBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgY29tcG9uZW50cy4KCkZyb20gdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgbm93IGEgbWVjaGFuaXNtIHRvIHJlbWFwIHdyaXRlIHN0cmVhbXMuIGBiZGV2X2ZyZWVfaW5vZGVgIGluIGBiZGV2LmNgIGlzIGZyZWVpbmcgYSBgYmRfd3JpdGVfc3RyZWFtX21hcGAsIHdoaWNoIHBvaW50cyB0b3dhcmQgc3RhdGUgYmVpbmcgbWFuYWdlZCBoZXJlLiBJbiBgYmxrLWNvcmUuY2AsIHRoZSBuZXcgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGZ1bmN0aW9uIHN1Z2dlc3RzIHRoZXJlJiMzOTtzIHNwZWNpZmljIGxvZ2ljIGZvciByZW1hcHBpbmcgYXQgdGhlIHBhcnRpdGlvbiBsZXZlbC4gVGhlIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gYHBhcnRpdGlvbnMvY29yZS5jYCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgYHdyaXRlX3N0cmVhbXNgIHN5c2ZzIGF0dHJpYnV0ZXMgKGdldC9zZXQpLCBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMgKGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIGBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zYCwgZXRjLiksIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaW50ZXJmYWNlIGZvciB0aGlzIGZlYXR1cmUuIFRoZSB1cGRhdGVzIHRvIHRoZSBgc3RydWN0IGJsb2NrX2RldmljZWAgaW4gYGJsa190eXBlcy5oYCBhbmQgdGhlIGBzdHJ1Y3QgZ2VuZGlza2AgaW4gYGJsa2Rldi5oYCBjb25maXJtIG5ldyBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxhZ3MuCgpOb3csIGlzIHRoaXMgZnV6emFibGU/IEFic29sdXRlbHkuIFRoaXMgaXMgdGhlIGJsb2NrIGxheWVyLCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkaXJlY3QgaW50ZXJhY3Rpb24gd2l0aCBkaXNrIGRldmljZXMgYW5kIHBhcnRpdGlvbnMuIEFueWJvZHkgY2FuIGNyZWF0ZSBwYXJ0aXRpb25zLCByaWdodD8gVXNpbmcgbG9vcGJhY2ssIHJhbWRpc2ssIG51bGxfYmxrLCBvciBldmVuIHRoZSBzY3NpX2RlYnVnIGRyaXZlci4gVGhlIHdyaXRlIHN0cmVhbSBzeXNmcyBpbnRlcmZhY2UgaXMgZGVmaW5pdGVseSB1c2VyLWFjY2Vzc2libGUsIGl0IGxvb2tzIGxpa2UgaXQgY2FuIGJlIHdyaXR0ZW4gdG8gdmlhIGAvc3lzL2Jsb2NrLyZsdDtkaXNrJmd0Oy8mbHQ7cGFydGl0aW9uJmd0Oy93cml0ZV9zdHJlYW1zYC4gVXNlcnMgY2FuICphbHNvKiBzZXQgdXAgd3JpdGUgc3RyZWFtcyB2aWEgbWV0aG9kcyBsaWtlIEZfU0VUX1JXX0hJTlQsIHN0YXR4LCBpb191cmluZywgb3IgZXZlbiByYXcgYmxvY2sgd3JpdGVzLCB3aGljaCBpcyBhIGJpZyBkZWFsIGluIHRlcm1zIG9mIGF0dGFjayBzdXJmYWNlLiBUaGlzIGlzIGEgY2xlYXIgYFdvcnRoRnV6emluZz10cnVlYCBzaXR1YXRpb24uIFRoaXMgYWZmZWN0cyBJL08gcGF0aCwgcGFydGl0aW9uIG1hbmFnZW1lbnQuLi4gYWxsIGNvcmUga2VybmVsIHN1YnN5c3RlbXMuCgpOZXh0LCBJJiMzOTtsbCBjaGVjayB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZ3JlcHBlciBhbmQgZXhwbG9yZSBgYmxvY2svYCBhbmQgYGJsb2NrL3BhcnRpdGlvbnMvYCB0byB1bmRlcnN0YW5kIGFueSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBhbmQgaWRlbnRpZnkgYW55IGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIG9yIGZvY3VzIHN5bWJvbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svS2NvbmZpZy00LSNcbmJsb2NrL0tjb25maWc6NTptZW51Y29uZmlnIEJMT0NLXG5ibG9jay9LY29uZmlnLTYtICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBibG9jayBsYXllclwmIzM0OyBpZiBFWFBFUlRcbi0tXG5ibG9jay9LY29uZmlnLTI2LVxuYmxvY2svS2NvbmZpZzoyNzppZiBCTE9DS1xuYmxvY2svS2NvbmZpZy0yOC1cbmJsb2NrL0tjb25maWc6Mjk6Y29uZmlnIEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxuYmxvY2svS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7TGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5ibG9jay9LY29uZmlnPTIxND1jb25maWcgQkxLX1BNXG4tLVxuYmxvY2svS2NvbmZpZy0yMTctIyBkbyBub3QgdXNlIGluIG5ldyBjb2RlXG5ibG9jay9LY29uZmlnOjIxODpjb25maWcgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcbmJsb2NrL0tjb25maWctMjE5LVx0Ym9vbFxuLS1cbmJsb2NrL0tjb25maWc9MjMyPXNvdXJjZSBcJiMzNDtibG9jay9LY29uZmlnLmlvc2NoZWRcJiMzNDtcbmJsb2NrL0tjb25maWctMjMzLVxuYmxvY2svS2NvbmZpZzoyMzQ6ZW5kaWYgIyBCTE9DS1xuLS1cbmJsb2NrL01ha2VmaWxlPTQwPW9iai0kKENPTkZJR19CTEtfSU5MSU5FX0VOQ1JZUFRJT05fRkFMTEJBQ0spXHQmIzQzOz0gYmxrLWNyeXB0by1mYWxsYmFjay5vXG5ibG9jay9NYWtlZmlsZTo0MTpvYmotJChDT05GSUdfQkxPQ0tfSE9MREVSX0RFUFJFQ0FURUQpXHQmIzQzOz0gaG9sZGVyLm9cbi0tXG5ibG9jay9iYWRibG9ja3MuYz02NzM9c3RhdGljIGJvb2wgY2FuX2Zyb250X292ZXJ3cml0ZShzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgaW50IHByZXYsXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtNzAyLVxuYmxvY2svYmFkYmxvY2tzLmM6NzAzOlx0aWYgKChiYi1cdTAwM2Vjb3VudCAmIzQzOyAoKmV4dHJhKSkgXHUwMDNlIE1BWF9CQURCTE9DS1MpXG5ibG9jay9iYWRibG9ja3MuYy03MDQtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5ibG9jay9iYWRibG9ja3MuYz0xMDQ5PXN0YXRpYyBib29sIF9iYWRibG9ja3NfY2xlYXIoc3RydWN0IGJhZGJsb2NrcyAqYmIsIHNlY3Rvcl90IHMsIHNlY3Rvcl90IHNlY3RvcnMpXG4tLVxuYmxvY2svYmFkYmxvY2tzLmMtMTEzMC1cdFx0XHQvKiBTcGxpdHRpbmcgKi9cbmJsb2NrL2JhZGJsb2Nrcy5jOjExMzE6XHRcdFx0aWYgKChiYi1cdTAwM2Vjb3VudCAmIzQzOyAxKSBcdTAwM2M9IE1BWF9CQURCTE9DS1MpIHtcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMzItXHRcdFx0XHRsZW4gPSBmcm9udF9zcGxpdHRpbmdfY2xlYXIoYmIsIHByZXYsIFx1MDAyNmJhZCk7XG4tLVxuYmxvY2svYmRldi5jPTQzNT1zdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5ibG9jay9iZGV2LmMtNDQ5LVxuYmxvY2svYmRldi5jOjQ1MDpcdGlmIChNQUpPUihiZGV2LVx1MDAzZWJkX2RldikgPT0gQkxPQ0tfRVhUX01BSk9SKVxuYmxvY2svYmRldi5jLTQ1MS1cdFx0YmxrX2ZyZWVfZXh0X21pbm9yKE1JTk9SKGJkZXYtXHUwMDNlYmRfZGV2KSk7XG4tLVxuYmxvY2svYmRldi5jPTgyOD1pbnQgYmRldl9wZXJtaXNzaW9uKGRldl90IGRldiwgYmxrX21vZGVfdCBtb2RlLCB2b2lkICpob2xkZXIpXG4tLVxuYmxvY2svYmRldi5jLTgzMS1cbmJsb2NrL2JkZXYuYzo4MzI6XHRyZXQgPSBkZXZjZ3JvdXBfY2hlY2tfcGVybWlzc2lvbihERVZDR19ERVZfQkxPQ0ssXG5ibG9jay9iZGV2LmMtODMzLVx0XHRcdE1BSk9SKGRldiksIE1JTk9SKGRldiksXG4tLVxuYmxvY2svYmRldi5jPTg2ND1zdHJ1Y3QgYmxvY2tfZGV2aWNlICpibGtkZXZfZ2V0X25vX29wZW4oZGV2X3QgZGV2LCBib29sIGF1dG9sb2FkKVxuLS1cbmJsb2NrL2JkZXYuYy04NjktXHRpbm9kZSA9IGlsb29rdXAoYmxvY2tkZXZfc3VwZXJibG9jaywgZGV2KTtcbmJsb2NrL2JkZXYuYzo4NzA6XHRpZiAoIWlub2RlIFx1MDAyNlx1MDAyNiBhdXRvbG9hZCBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfQkxPQ0tfTEVHQUNZX0FVVE9MT0FEKSkge1xuYmxvY2svYmRldi5jLTg3MS1cdFx0YmxrX3JlcXVlc3RfbW9kdWxlKGRldik7XG4tLVxuYmxvY2svYmRldi5jPTk3Mj1pbnQgYmRldl9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJsa19tb2RlX3QgbW9kZSwgdm9pZCAqaG9sZGVyLFxuLS1cbmJsb2NrL2JkZXYuYy0xMDE4LVx0XHQgICAgIWJkZXZfdGVzdF9mbGFnKGJkZXYsIEJEX1dSSVRFX0hPTERFUikgXHUwMDI2XHUwMDI2XG5ibG9jay9iZGV2LmM6MTAxOTpcdFx0ICAgIChkaXNrLVx1MDAzZWV2ZW50X2ZsYWdzIFx1MDAyNiBESVNLX0VWRU5UX0ZMQUdfQkxPQ0tfT05fRVhDTF9XUklURSkpIHtcbmJsb2NrL2JkZXYuYy0xMDIwLVx0XHRcdGJkZXZfc2V0X2ZsYWcoYmRldiwgQkRfV1JJVEVfSE9MREVSKTtcbi0tXG5ibG9jay9iaW8taW50ZWdyaXR5LWF1dG8uYz04Mz12b2lkIGJpb19pbnRlZ3JpdHlfcHJlcChzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBhY3Rpb24pXG4tLVxuYmxvY2svYmlvLWludGVncml0eS1hdXRvLmMtODktXHRiaWQtXHUwMDNlYmlvID0gYmlvO1xuYmxvY2svYmlvLWludGVncml0eS1hdXRvLmM6OTA6XHRiaWQtXHUwMDNlYmlwLmJpcF9mbGFncyB8PSBCSVBfQkxPQ0tfSU5URUdSSVRZO1xuYmxvY2svYmlvLWludGVncml0eS1hdXRvLmMtOTEtXHRiaW9faW50ZWdyaXR5X2FsbG9jX2J1ZihiaW8sIEdGUF9OT0lPLCBhY3Rpb24gXHUwMDI2IEJJX0FDVF9aRVJPKTtcbi0tXG5ibG9jay9ibGstY29yZS5jPTEyNzQ9dm9pZCBfX2Jsa19mbHVzaF9wbHVnKHN0cnVjdCBibGtfcGx1ZyAqcGx1ZywgYm9vbCBmcm9tX3NjaGVkdWxlKVxuLS1cbmJsb2NrL2Jsay1jb3JlLmMtMTI4OC1cdHBsdWctXHUwMDNlY3VyX2t0aW1lID0gMDtcbmJsb2NrL2Jsay1jb3JlLmM6MTI4OTpcdGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+UEZfQkxPQ0tfVFM7XG5ibG9jay9ibGstY29yZS5jLTEyOTAtfVxuLS1cbmJsb2NrL2Jsay1tcS1kZWJ1Z2ZzLmM9MTg1PXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBoY3R4X2ZsYWdfbmFtZVtdID0ge1xuLS1cbmJsb2NrL2Jsay1tcS1kZWJ1Z2ZzLmMtMTg4LVx0SENUWF9GTEFHX05BTUUoVEFHX0hDVFhfU0hBUkVEKSxcbmJsb2NrL2Jsay1tcS1kZWJ1Z2ZzLmM6MTg5Olx0SENUWF9GTEFHX05BTUUoQkxPQ0tJTkcpLFxuYmxvY2svYmxrLW1xLWRlYnVnZnMuYy0xOTAtXHRIQ1RYX0ZMQUdfTkFNRShUQUdfUlIpLFxuLS1cbmJsb2NrL2Jsay1tcS5jPTI4MT12b2lkIGJsa19tcV93YWl0X3F1aWVzY2VfZG9uZShzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldClcbmJsb2NrL2Jsay1tcS5jLTI4Mi17XG5ibG9jay9ibGstbXEuYzoyODM6XHRpZiAoc2V0LVx1MDAzZWZsYWdzIFx1MDAyNiBCTEtfTVFfRl9CTE9DS0lORylcbmJsb2NrL2Jsay1tcS5jLTI4NC1cdFx0c3luY2hyb25pemVfc3JjdShzZXQtXHUwMDNlc3JjdSk7XG4tLVxuYmxvY2svYmxrLW1xLmM9NjYxPXN0cnVjdCByZXF1ZXN0ICpibGtfbXFfYWxsb2NfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYmxrX29wZl90IG9wZixcbi0tXG5ibG9jay9ibGstbXEuYy02OTUtXHRibGtfcXVldWVfZXhpdChxKTtcbmJsb2NrL2Jsay1tcS5jOjY5NjpcdHJldHVybiBFUlJfUFRSKC1FV09VTERCTE9DSyk7XG5ibG9jay9ibGstbXEuYy02OTctfVxuLS1cbmJsb2NrL2Jsay1tcS5jPTcwMD1zdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcbi0tXG5ibG9jay9ibGstbXEuYy03NjEtXG5ibG9jay9ibGstbXEuYzo3NjI6XHRyZXQgPSAtRVdPVUxEQkxPQ0s7XG5ibG9jay9ibGstbXEuYy03NjMtXHR0YWcgPSBibGtfbXFfZ2V0X3RhZyhcdTAwMjZkYXRhKTtcbi0tXG5ibG9jay9ibGstbXEuYz0xMjM2PXN0YXRpYyB2b2lkIF9fYmxrX21xX2NvbXBsZXRlX3JlcXVlc3RfcmVtb3RlKHZvaWQgKmRhdGEpXG5ibG9jay9ibGstbXEuYy0xMjM3LXtcbmJsb2NrL2Jsay1tcS5jOjEyMzg6XHRfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKEJMT0NLX1NPRlRJUlEpO1xuYmxvY2svYmxrLW1xLmMtMTIzOS19XG4tLVxuYmxvY2svYmxrLW1xLmM9MTI3Nz1zdGF0aWMgdm9pZCBibGtfbXFfcmFpc2Vfc29mdGlycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXG4tLVxuYmxvY2svYmxrLW1xLmMtMTI4My1cdGlmIChsbGlzdF9hZGQoXHUwMDI2cnEtXHUwMDNlaXBpX2xpc3QsIGxpc3QpKVxuYmxvY2svYmxrLW1xLmM6MTI4NDpcdFx0cmFpc2Vfc29mdGlycShCTE9DS19TT0ZUSVJRKTtcbmJsb2NrL2Jsay1tcS5jLTEyODUtXHRwcmVlbXB0X2VuYWJsZSgpO1xuLS1cbmJsb2NrL2Jsay1tcS5jPTE0MTU9dm9pZCBibGtfZXhlY3V0ZV9ycV9ub3dhaXQoc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGF0X2hlYWQpXG4tLVxuYmxvY2svYmxrLW1xLmMtMTQyOS1cdGJsa19tcV9pbnNlcnRfcmVxdWVzdChycSwgYXRfaGVhZCA/IEJMS19NUV9JTlNFUlRfQVRfSEVBRCA6IDApO1xuYmxvY2svYmxrLW1xLmM6MTQzMDpcdGJsa19tcV9ydW5faHdfcXVldWUoaGN0eCwgaGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpO1xuYmxvY2svYmxrLW1xLmMtMTQzMS19XG4tLVxuYmxvY2svYmxrLW1xLmM9MjMyMT12b2lkIGJsa19tcV9ydW5faHdfcXVldWUoc3RydWN0IGJsa19tcV9od19jdHggKmhjdHgsIGJvb2wgYXN5bmMpXG4tLVxuYmxvY2svYmxrLW1xLmMtMjMyOS1cbmJsb2NrL2Jsay1tcS5jOjIzMzA6XHRtaWdodF9zbGVlcF9pZighYXN5bmMgXHUwMDI2XHUwMDI2IGhjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKTtcbmJsb2NrL2Jsay1tcS5jLTIzMzEtXG4tLVxuYmxvY2svYmxrLW1xLmM9MjQ4MT12b2lkIGJsa19tcV9zdGFydF9od19xdWV1ZShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eClcbi0tXG5ibG9jay9ibGstbXEuYy0yNDg0LVxuYmxvY2svYmxrLW1xLmM6MjQ4NTpcdGJsa19tcV9ydW5faHdfcXVldWUoaGN0eCwgaGN0eC1cdTAwM2VmbGFncyBcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpO1xuYmxvY2svYmxrLW1xLmMtMjQ4Ni19XG4tLVxuYmxvY2svYmxrLW1xLmM9MjUxNT12b2lkIGJsa19tcV9zdGFydF9zdG9wcGVkX2h3X3F1ZXVlcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYm9vbCBhc3luYylcbi0tXG5ibG9jay9ibGstbXEuYy0yNTIxLVx0XHRibGtfbXFfc3RhcnRfc3RvcHBlZF9od19xdWV1ZShoY3R4LCBhc3luYyB8fFxuYmxvY2svYmxrLW1xLmM6MjUyMjpcdFx0XHRcdFx0KGhjdHgtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSk7XG5ibG9jay9ibGstbXEuYy0yNTIzLX1cbi0tXG5ibG9jay9ibGstbXEuYz00ODM0PWludCBibGtfbXFfYWxsb2NfdGFnX3NldChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldClcbi0tXG5ibG9jay9ibGstbXEuYy00ODc4LVxuYmxvY2svYmxrLW1xLmM6NDg3OTpcdGlmIChzZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSB7XG5ibG9jay9ibGstbXEuYy00ODgwLVx0XHRzZXQtXHUwMDNlc3JjdSA9IGttYWxsb2Nfb2JqKCpzZXQtXHUwMDNlc3JjdSk7XG4tLVxuYmxvY2svYmxrLW1xLmMtNDkyOS1vdXRfY2xlYW51cF9zcmN1OlxuYmxvY2svYmxrLW1xLmM6NDkzMDpcdGlmIChzZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKVxuYmxvY2svYmxrLW1xLmMtNDkzMS1cdFx0Y2xlYW51cF9zcmN1X3N0cnVjdChzZXQtXHUwMDNlc3JjdSk7XG5ibG9jay9ibGstbXEuYy00OTMyLW91dF9mcmVlX3NyY3U6XG5ibG9jay9ibGstbXEuYzo0OTMzOlx0aWYgKHNldC1cdTAwM2VmbGFncyBcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpXG5ibG9jay9ibGstbXEuYy00OTM0LVx0XHRrZnJlZShzZXQtXHUwMDNlc3JjdSk7XG4tLVxuYmxvY2svYmxrLW1xLmM9NDk1NT12b2lkIGJsa19tcV9mcmVlX3RhZ19zZXQoc3RydWN0IGJsa19tcV90YWdfc2V0ICpzZXQpXG4tLVxuYmxvY2svYmxrLW1xLmMtNDk3Ni1cdGNsZWFudXBfc3JjdV9zdHJ1Y3QoXHUwMDI2c2V0LVx1MDAzZXRhZ3Nfc3JjdSk7XG5ibG9jay9ibGstbXEuYzo0OTc3Olx0aWYgKHNldC1cdTAwM2VmbGFncyBcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpIHtcbmJsb2NrL2Jsay1tcS5jLTQ5NzgtXHRcdHNyY3VfYmFycmllcihzZXQtXHUwMDNlc3JjdSk7XG4tLVxuYmxvY2svYmxrLW1xLmM9NTI4MT1zdGF0aWMgaW50IF9faW5pdCBibGtfbXFfaW5pdCh2b2lkKVxuLS1cbmJsb2NrL2Jsay1tcS5jLTUyODktXHRcdFx0IF9fYmxrX21xX2NvbXBsZXRlX3JlcXVlc3RfcmVtb3RlLCBOVUxMKTtcbmJsb2NrL2Jsay1tcS5jOjUyOTA6XHRvcGVuX3NvZnRpcnEoQkxPQ0tfU09GVElSUSwgYmxrX2RvbmVfc29mdGlycSk7XG5ibG9jay9ibGstbXEuYy01MjkxLVxuYmxvY2svYmxrLW1xLmM6NTI5MjpcdGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQkxPQ0tfU09GVElSUV9ERUFELFxuYmxvY2svYmxrLW1xLmMtNTI5My1cdFx0XHRcdCAgXCYjMzQ7YmxvY2svc29mdGlycTpkZWFkXCYjMzQ7LCBOVUxMLFxuLS1cbmJsb2NrL2Jsay1tcS5oPTQ0MD1kbyB7XHRcdFx0XHRcdFx0XHRcdFxcXG5ibG9jay9ibGstbXEuaDo0NDE6XHRpZiAoKHEpLVx1MDAzZXRhZ19zZXQtXHUwMDNlZmxhZ3MgXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSB7XHRcdFxcXG5ibG9jay9ibGstbXEuaC00NDItXHRcdHN0cnVjdCBibGtfbXFfdGFnX3NldCAqX190YWdfc2V0ID0gKHEpLVx1MDAzZXRhZ19zZXQ7IFxcXG4tLVxuYmxvY2svYmxrLXBtLmgtMi1cbmJsb2NrL2Jsay1wbS5oOjM6I2lmbmRlZiBfQkxPQ0tfQkxLX1BNX0hfXG5ibG9jay9ibGstcG0uaDo0OiNkZWZpbmUgX0JMT0NLX0JMS19QTV9IX1xuYmxvY2svYmxrLXBtLmgtNS1cbi0tXG5ibG9jay9ibGstcG0uaD0zMD1zdGF0aWMgaW5saW5lIHZvaWQgYmxrX3BtX21hcmtfbGFzdF9idXN5KHN0cnVjdCByZXF1ZXN0ICpycSlcbi0tXG5ibG9jay9ibGstcG0uaC0zNC1cbmJsb2NrL2Jsay1wbS5oOjM1OiNlbmRpZiAvKiBfQkxPQ0tfQkxLX1BNX0hfICovXG4tLVxuYmxvY2svYmxrLmg9MjYxPXN0YXRpYyBpbmxpbmUgYm9vbCBiaW9faW50ZWdyaXR5X2VuZGlvKHN0cnVjdCBiaW8gKmJpbylcbi0tXG5ibG9jay9ibGsuaC0yNjQtXG5ibG9jay9ibGsuaDoyNjU6XHRpZiAoYmlwIFx1MDAyNlx1MDAyNiAoYmlwLVx1MDAzZWJpcF9mbGFncyBcdTAwMjYgQklQX0JMT0NLX0lOVEVHUklUWSkpXG5ibG9jay9ibGsuaC0yNjYtXHRcdHJldHVybiBfX2Jpb19pbnRlZ3JpdHlfZW5kaW8oYmlvKTtcbi0tXG5ibG9jay9ibGsuaD03MTc9c3RhdGljIGlubGluZSB1NjQgYmxrX3RpbWVfZ2V0X25zKHZvaWQpXG4tLVxuYmxvY2svYmxrLmgtNzI5LVx0ICpcbmJsb2NrL2Jsay5oOjczMDpcdCAqIGN1cl9rdGltZSBjYW4gYmUgemVyb2VkIGJ5IHByZS1lbXB0aW9uIHRoZSBtb21lbnQgUEZfQkxPQ0tfVFMgaXMgc2V0LlxuYmxvY2svYmxrLmgtNzMxLVx0ICovXG4tLVxuYmxvY2svYmxrLmgtNzM1LVx0XHRXUklURV9PTkNFKHBsdWctXHUwMDNlY3VyX2t0aW1lLCBub3cpO1xuYmxvY2svYmxrLmg6NzM2Olx0XHQvKiBFbnN1cmUgUEZfQkxPQ0tfVFMgaXMgc2V0IGFmdGVyIGN1cl9rdGltZS4gKi9cbmJsb2NrL2Jsay5oLTczNy1cdFx0YmFycmllcigpO1xuYmxvY2svYmxrLmg6NzM4Olx0XHRjdXJyZW50LVx1MDAzZWZsYWdzIHw9IFBGX0JMT0NLX1RTO1xuYmxvY2svYmxrLmgtNzM5LVx0fVxuLS1cbmJsb2NrL2JzZy1saWIuYz0zNjI9c3RydWN0IHJlcXVlc3RfcXVldWUgKmJzZ19zZXR1cF9xdWV1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuYmxvY2svYnNnLWxpYi5jLTM4My1cdHNldC1cdTAwM2VjbWRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnNnX2pvYikgJiM0MzsgZGRfam9iX3NpemU7XG5ibG9jay9ic2ctbGliLmM6Mzg0Olx0c2V0LVx1MDAzZWZsYWdzID0gQkxLX01RX0ZfQkxPQ0tJTkc7XG5ibG9jay9ic2ctbGliLmMtMzg1LVx0aWYgKGJsa19tcV9hbGxvY190YWdfc2V0KHNldCkpXG4tLVxuYmxvY2svZ2VuaGQuYz0xNzg9c3RhdGljIHN0cnVjdCBibGtfbWFqb3JfbmFtZSB7XG4tLVxuYmxvY2svZ2VuaGQuYy0xODEtXHRjaGFyIG5hbWVbMTZdO1xuYmxvY2svZ2VuaGQuYzoxODI6I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcbmJsb2NrL2dlbmhkLmMtMTgzLVx0dm9pZCAoKnByb2JlKShkZXZfdCBkZXZ0KTtcbi0tXG5ibG9jay9nZW5oZC5jPTIzND1pbnQgX19yZWdpc3Rlcl9ibGtkZXYodW5zaWduZWQgaW50IG1ham9yLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbmJsb2NrL2dlbmhkLmMtMjczLVx0cC1cdTAwM2VtYWpvciA9IG1ham9yO1xuYmxvY2svZ2VuaGQuYzoyNzQ6I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcbmJsb2NrL2dlbmhkLmMtMjc1LVx0cC1cdTAwM2Vwcm9iZSA9IHByb2JlO1xuLS1cbmJsb2NrL2dlbmhkLmM9NDI3PXN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxuLS1cbmJsb2NrL2dlbmhkLmMtNDg0LVx0XHRcdGdvdG8gb3V0O1xuYmxvY2svZ2VuaGQuYzo0ODU6XHRcdGRpc2stXHUwMDNlbWFqb3IgPSBCTE9DS19FWFRfTUFKT1I7XG5ibG9jay9nZW5oZC5jLTQ4Ni1cdFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vciA9IHJldDtcbi0tXG5ibG9jay9nZW5oZC5jLTU3MS1vdXRfZnJlZV9leHRfbWlub3I6XG5ibG9jay9nZW5oZC5jOjU3MjpcdGlmIChkaXNrLVx1MDAzZW1ham9yID09IEJMT0NLX0VYVF9NQUpPUilcbmJsb2NrL2dlbmhkLmMtNTczLVx0XHRibGtfZnJlZV9leHRfbWlub3IoZGlzay1cdTAwM2VmaXJzdF9taW5vcik7XG4tLVxuYmxvY2svZ2VuaGQuYz04Njc9c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtODc4LVxuYmxvY2svZ2VuaGQuYzo4Nzk6I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcbmJsb2NrL2dlbmhkLmMtODgwLXN0YXRpYyBib29sIGJsa19wcm9iZV9kZXYoZGV2X3QgZGV2dClcbi0tXG5ibG9jay9nZW5oZC5jPTg5Nz12b2lkIGJsa19yZXF1ZXN0X21vZHVsZShkZXZfdCBkZXZ0KVxuLS1cbmJsb2NrL2dlbmhkLmMtOTEwLX1cbmJsb2NrL2dlbmhkLmM6OTExOiNlbmRpZiAvKiBDT05GSUdfQkxPQ0tfTEVHQUNZX0FVVE9MT0FEICovXG5ibG9jay9nZW5oZC5jLTkxMi1cbi0tXG5ibG9jay9nZW5oZC5jPTk5OT1zdGF0aWMgaW50IF9faW5pdCBnZW5oZF9kZXZpY2VfaW5pdCh2b2lkKVxuLS1cbmJsb2NrL2dlbmhkLmMtMTAwNy1cbmJsb2NrL2dlbmhkLmM6MTAwODpcdHJlZ2lzdGVyX2Jsa2RldihCTE9DS19FWFRfTUFKT1IsIFwmIzM0O2Jsa2V4dFwmIzM0Oyk7XG5ibG9jay9nZW5oZC5jLTEwMDktXG4tLVxuYmxvY2svZ2VuaGQuYz0xNDU0PXN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsXG4tLVxuYmxvY2svZ2VuaGQuYy0xNDkzLVx0bG9ja2RlcF9pbml0X21hcChcdTAwMjZkaXNrLVx1MDAzZWxvY2tkZXBfbWFwLCBcJiMzNDsoYmlvIGNvbXBsZXRpb24pXCYjMzQ7LCBsa2NsYXNzLCAwKTtcbmJsb2NrL2dlbmhkLmM6MTQ5NDojaWZkZWYgQ09ORklHX0JMT0NLX0hPTERFUl9ERVBSRUNBVEVEXG5ibG9jay9nZW5oZC5jLTE0OTUtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZkaXNrLVx1MDAzZXNsYXZlX2JkZXZzKTtcbi0tXG5ibG9jay9pb2N0bC5jPTk4MT1pbnQgYmxrZGV2X3VyaW5nX2NtZChzdHJ1Y3QgaW9fdXJpbmdfY21kICpjbWQsIHVuc2lnbmVkIGludCBpc3N1ZV9mbGFncylcbi0tXG5ibG9jay9pb2N0bC5jLTk5OC1cdGJpYy1cdTAwM2VyZXMgPSAwO1xuYmxvY2svaW9jdGwuYzo5OTk6XHRiaWMtXHUwMDNlbm93YWl0ID0gaXNzdWVfZmxhZ3MgXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XG5ibG9jay9pb2N0bC5jLTEwMDAtXG5ibG9jay9pb2N0bC5jLTEwMDEtXHRzd2l0Y2ggKGNtZF9vcCkge1xuYmxvY2svaW9jdGwuYzoxMDAyOlx0Y2FzZSBCTE9DS19VUklOR19DTURfRElTQ0FSRDpcbmJsb2NrL2lvY3RsLmMtMTAwMy1cdFx0cmV0dXJuIGJsa2Rldl9jbWRfZGlzY2FyZChjbWQpO1xuYmxvY2svaW9jdGwuYzoxMDA0Olx0Y2FzZSBCTE9DS19VUklOR19DTURfWk9ORV9SRVNFVF9BTEw6XG5ibG9jay9pb2N0bC5jLTEwMDUtXHRcdHJldHVybiBibGtkZXZfY21kX3pvbmVfcmVzZXRfYWxsKGNtZCk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZS01LVxuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19CTE9DSykgJiM0Mzs9IGNvcmUub1xuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZS03LW9iai0kKENPTkZJR19BQ09STl9QQVJUSVRJT04pICYjNDM7PSBhY29ybi5vXG4tLVxuYmxvY2svcGFydGl0aW9ucy9hY29ybi5jPTE1Nj1pbnQgYWRmc3BhcnRfY2hlY2tfQ1VNQU5BKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9hY29ybi5jLTIwNC1cdFx0Zmlyc3Rfc2VjdG9yICYjNDM7PSBucl9zZWN0cztcbmJsb2NrL3BhcnRpdGlvbnMvYWNvcm4uYzoyMDU6XHRcdHN0YXJ0X2JsayAmIzQzOz0gbnJfc2VjdHMgXHUwMDNlXHUwMDNlIChCTE9DS19TSVpFX0JJVFMgLSA5KTtcbmJsb2NrL3BhcnRpdGlvbnMvYWNvcm4uYy0yMDYtXHRcdG5yX3NlY3RzID0gMDsgLyogaG1tIC0gc2hvdWxkIGJlIHBhcnRpdGlvbiBzaXplICovXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9NDIzPXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlICphZGRfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBpbnQgcGFydG5vLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTQ4MS1cdFx0XHRnb3RvIG91dF9wdXQ7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo0ODI6XHRcdGRldnQgPSBNS0RFVihCTE9DS19FWFRfTUFKT1IsIGVycik7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy00ODMtXHR9XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz02Nz1zdGF0aWMgYm9vbCBsZG1fcGFyc2VfcHJpdmhlYWQoY29uc3QgdTggKmRhdGEsIHN0cnVjdCBwcml2aGVhZCAqcGgpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTItLyoqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExMzogKiBsZG1fcGFyc2VfdG9jYmxvY2sgLSBSZWFkIHRoZSBMRE0gRGF0YWJhc2UgVE9DQkxPQ0sgc3RydWN0dXJlXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExNDogKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTUtICogQHRvYzogICBJbi1tZW1vcnkgdG9jIHN0cnVjdHVyZSBpbiB3aGljaCB0byByZXR1cm4gcGFyc2VkIGluZm9ybWF0aW9uXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTExNi0gKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTc6ICogVGhpcyBwYXJzZXMgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyAodGFibGUgb2YgY29udGVudHMpIHN0cnVjdHVyZSBzdXBwbGllZFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMTgtICogaW4gQGRhdGEgYW5kIHNldHMgdXAgdGhlIGluLW1lbW9yeSB0b2NibG9jayBzdHJ1Y3R1cmUgQHRvYyB3aXRoIHRoZSBvYnRhaW5lZFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTIyLSAqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEyMzogKiBSZXR1cm46ICAmIzM5O3RydWUmIzM5OyAgIEB0b2MgY29udGFpbnMgdGhlIFRPQ0JMT0NLIGRhdGFcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTI0LSAqICAgICAgICAgICYjMzk7ZmFsc2UmIzM5OyAgQHRvYyBjb250ZW50cyBhcmUgdW5kZWZpbmVkXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0xMjY9c3RhdGljIGJvb2wgbGRtX3BhcnNlX3RvY2Jsb2NrIChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHRvY2Jsb2NrICp0b2MpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMjktXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEzMDpcdGlmIChNQUdJQ19UT0NCTE9DSyAhPSBnZXRfdW5hbGlnbmVkX2JlNjQoZGF0YSkpIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTMxOlx0XHRsZG1fY3JpdCAoXCYjMzQ7Q2Fubm90IGZpbmQgVE9DQkxPQ0ssIGRhdGFiYXNlIG1heSBiZSBjb3JydXB0LlwmIzM0Oyk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEzMi1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTM5LVx0XHRcdHNpemVvZiAodG9jLVx1MDAzZWJpdG1hcDFfbmFtZSkpICE9IDApIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTQwOlx0XHRsZG1fY3JpdCAoXCYjMzQ7VE9DQkxPQ0smIzM5O3MgZmlyc3QgYml0bWFwIGlzICYjMzk7JXMmIzM5Oywgc2hvdWxkIGJlICYjMzk7JXMmIzM5Oy5cJiMzNDssXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE0MS1cdFx0XHRcdFRPQ19CSVRNQVAxLCB0b2MtXHUwMDNlYml0bWFwMV9uYW1lKTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE0OC1cdFx0XHRzaXplb2YgKHRvYy1cdTAwM2ViaXRtYXAyX25hbWUpKSAhPSAwKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE0OTpcdFx0bGRtX2NyaXQgKFwmIzM0O1RPQ0JMT0NLJiMzOTtzIHNlY29uZCBiaXRtYXAgaXMgJiMzOTslcyYjMzk7LCBzaG91bGQgYmUgJiMzOTslcyYjMzk7LlwmIzM0OyxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTUwLVx0XHRcdFx0VE9DX0JJVE1BUDIsIHRvYy1cdTAwM2ViaXRtYXAyX25hbWUpO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTUyLVx0fVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNTM6XHRsZG1fZGVidWcgKFwmIzM0O1BhcnNlZCBUT0NCTE9DSyBzdWNjZXNzZnVsbHkuXCYjMzQ7KTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTU0LVx0cmV0dXJuIHRydWU7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0yNjM9c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3ByaXZoZWFkcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzQ3LSAqXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM0ODogKiBSZXR1cm46ICAmIzM5O3RydWUmIzM5OyAgIEB0b2MxIGNvbnRhaW5zIHZhbGlkYXRlZCBUT0NCTE9DSyBpbmZvXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM0OS0gKiAgICAgICAgICAmIzM5O2ZhbHNlJiMzOTsgIEB0b2MxIGNvbnRlbnRzIGFyZSB1bmRlZmluZWRcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTM1MT1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdG9jYmxvY2tzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNzItXHQvKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzM6XHQgKiBUcnkgdG8gcmVhZCBhbmQgcGFyc2UgYWxsIGZvdXIgVE9DQkxPQ0tzLlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNzQtXHQgKlxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzU6XHQgKiBXaW5kb3dzIFZpc3RhIExETSB2Mi4xMiBkb2VzIG5vdCBhbHdheXMgaGF2ZSBhbGwgZm91ciBUT0NCTE9DS3Mgc29cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzc2Olx0ICogc2tpcCBhbnkgdGhhdCBmYWlsIGFzIGxvbmcgYXMgd2UgZ2V0IGF0IGxlYXN0IG9uZSB2YWxpZCBUT0NCTE9DSy5cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzc3LVx0ICovXG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODAtXHRcdGlmICghZGF0YSkge1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozODE6XHRcdFx0bGRtX2Vycm9yKFwmIzM0O0Rpc2sgcmVhZCBmYWlsZWQgZm9yIFRPQ0JMT0NLICVkLlwmIzM0OywgaSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4Mi1cdFx0XHRjb250aW51ZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4OC1cdGlmICghbnJfdGJzKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM4OTpcdFx0bGRtX2NyaXQoXCYjMzQ7RmFpbGVkIHRvIGZpbmQgYSB2YWxpZCBUT0NCTE9DSy5cJiMzNDspO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zOTAtXHRcdGdvdG8gZXJyO1xuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zOTEtXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM5MjpcdC8qIFJhbmdlIGNoZWNrIHRoZSBUT0NCTE9DSyBhZ2FpbnN0IGEgcHJpdmhlYWQuICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM5My1cdGlmICgoKHRiWzBdLVx1MDAzZWJpdG1hcDFfc3RhcnQgJiM0MzsgdGJbMF0tXHUwMDNlYml0bWFwMV9zaXplKSBcdTAwM2UgcGgtXHUwMDNlY29uZmlnX3NpemUpIHx8XG4tLVxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zOTgtXHR9XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM5OTpcdC8qIENvbXBhcmUgYWxsIGxvYWRlZCBUT0NCTE9DS3MuICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMC1cdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yX3RiczsgaSYjNDM7JiM0MzspIHtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDAxLVx0XHRpZiAoIWxkbV9jb21wYXJlX3RvY2Jsb2Nrcyh0YlswXSwgdGJbaV0pKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQwMjpcdFx0XHRsZG1fY3JpdChcJiMzNDtUT0NCTE9DS3MgMCBhbmQgJWQgZG8gbm90IG1hdGNoLlwmIzM0OywgaSk7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMy1cdFx0XHRnb3RvIGVycjtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwNS1cdH1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6NDA2Olx0bGRtX2RlYnVnKFwmIzM0O1ZhbGlkYXRlZCAlZCBUT0NCTE9DS3Mgc3VjY2Vzc2Z1bGx5LlwmIzM0OywgbnJfdGJzKTtcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDA3LVx0cmVzdWx0ID0gdHJ1ZTtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTQyNT1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdm1kYihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDYxLVx0aWYgKCh2bS1cdTAwM2V2YmxrX3NpemUgKiB2bS1cdTAwM2VsYXN0X3ZibGtfc2VxKSBcdTAwM2UgKHRvYy1cdTAwM2ViaXRtYXAxX3NpemUgXHUwMDNjXHUwMDNjIDkpKSB7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjQ2MjpcdFx0bGRtX2NyaXQgKFwmIzM0O1ZNREIgZXhjZWVkcyBhbGxvd2VkIHNpemUgc3BlY2lmaWVkIGJ5IFRPQ0JMT0NLLiAgXCYjMzQ7XG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ2My1cdFx0XHRcdFwmIzM0O0RhdGFiYXNlIGlzIGNvcnJ1cHQuICBBYm9ydGluZy5cJiMzNDspO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmg9MjE9c3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmgtMjYtI2RlZmluZSBNQUdJQ19QUklWSEVBRFx0MHg1MDUyNDk1NjQ4NDU0MTQ0VUxMXHQvKiBQUklWSEVBRCAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uaDoyNzojZGVmaW5lIE1BR0lDX1RPQ0JMT0NLXHQweDU0NEY0MzQyNEM0RjQzNEJVTExcdC8qIFRPQ0JMT0NLICovXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5oLTI4LVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmgtODMtI2RlZmluZSBUT0NfQklUTUFQMVx0XHRcJiMzNDtjb25maWdcJiMzNDtcdC8qIE5hbWVzIG9mIHRoZSB0d28gZGVmaW5lZCAqL1xuYmxvY2svcGFydGl0aW9ucy9sZG0uaDo4NDojZGVmaW5lIFRPQ19CSVRNQVAyXHRcdFwmIzM0O2xvZ1wmIzM0O1x0XHQvKiBiaXRtYXBzIGluIHRoZSBUT0NCTE9DSy4gKi9cbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmgtODUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MDgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgY29yZSBibG9jayBkZXZpY2UgY29tcG9uZW50cyBhcmUgYmVpbmcgY29tcGlsZWQuIE15IGZpcnN0IHN0b3AgaXMgZ29pbmcgdG8gYmUgYGJsb2NrL01ha2VmaWxlYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgdGhlIHJlY2lwZSBmb3IgYnVpbGRpbmcgYGJkZXYub2AsIGBibGstY29yZS5vYCwgYW5kIGFueXRoaW5nIHdpdGhpbiB0aGUgYHBhcnRpdGlvbnMvYCBkaXJlY3RvcnkuIFRoYXQgTWFrZWZpbGUgd2lsbCBnaXZlIG1lIHRoZSBsb3ctZG93biBvbiB0aGUgZGVwZW5kZW5jaWVzLCBjb21waWxlciBmbGFncywgYW5kIHRoZSBvdmVyYWxsIGJ1aWxkIHByb2Nlc3MuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZ1bmRhbWVudGFsIHBpZWNlcyBvZiBteSBibG9jayBsYXllciBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmoteXxjb3JlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svTWFrZWZpbGU9Nj1DT05URVhUX0FOQUxZU0lTIDo9IHlcbmJsb2NrL01ha2VmaWxlLTctXG5ibG9jay9NYWtlZmlsZTo4Om9iai15XHRcdDo9IGJkZXYubyBmb3BzLm8gYmlvLm8gZWxldmF0b3IubyBibGstY29yZS5vIGJsay1zeXNmcy5vIFxcXG5ibG9jay9NYWtlZmlsZS05LVx0XHRcdGJsay1mbHVzaC5vIGJsay1zZXR0aW5ncy5vIGJsay1pb2MubyBibGstbWFwLm8gXFxcbi0tXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTUtXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JMT0NLKSAmIzQzOz0gY29yZS5vXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX0FDT1JOX1BBUlRJVElPTikgJiM0Mzs9IGFjb3JuLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkzNgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgQmxvY2sgRGV2aWNlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX0JMT0NLYCBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZW4gYEJMT0NLYCBzZWVtcyB0byBiZSB0aGUgZGVmYXVsdCwgc3RhbmRhcmQgbWVudWNvbmZpZyBvcHRpb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSBhcmUgYW55IG1vcmUgZmluZS1ncmFpbmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdyaXRlIHN0cmVhbXMgb3IgYW55dGhpbmcgc2ltaWxhciB0aGF0IEkgbWlnaHQgYmUgYWJsZSB0byB0d2Vhay4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBJIGNhbiBjdXN0b21pemUgd3JpdGUgYmVoYXZpb3IuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd3JpdGUgc3RyZWFtcy4gVGltZSB0byBncmVwIGZvciBhbnl0aGluZyBjb250YWluaW5nICYjMzQ7d3JpdGVfc3RyZWFtcyYjMzQ7IGluIHRoZSBgYmxvY2svYCBkaXJlY3RvcnkgYW5kIHVuZGVyIGBpbmNsdWRlL2xpbnV4L2AuIEhvcGVmdWxseSwgdGhpcyB3aWxsIGxlYWQgbWUgdG8gc29tZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBvciByZWxhdGVkIGNvZGUgdGhhdCBJIGNhbiBleGFtaW5lIG1vcmUgY2xvc2VseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3cml0ZV9zdHJlYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1jb3JlLmM9NjIyPXN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNvcmUuYy02MzQtXHRpZiAoYmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSBcdTAwMjZcdTAwMjYgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFKSB7XG5ibG9jay9ibGstY29yZS5jOjYzNTpcdFx0aWYgKHVubGlrZWx5KGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gXHUwMDNlIHAtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcykpXG5ibG9jay9ibGstY29yZS5jLTYzNi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5ibG9jay9ibGstc3lzZnMuYz0yMjI9UVVFVUVfU1lTRlNfTElNSVRfU0hPVyhtYXhfc2VnbWVudF9zaXplKVxuYmxvY2svYmxrLXN5c2ZzLmM6MjIzOlFVRVVFX1NZU0ZTX0xJTUlUX1NIT1cobWF4X3dyaXRlX3N0cmVhbXMpXG5ibG9jay9ibGstc3lzZnMuYy0yMjQtUVVFVUVfU1lTRlNfTElNSVRfU0hPVyh3cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHkpXG4tLVxuYmxvY2svYmxrLXN5c2ZzLmM9NjE4PVFVRVVFX0xJTV9ST19FTlRSWShxdWV1ZV9tYXhfc2VnbWVudF9zaXplLCBcJiMzNDttYXhfc2VnbWVudF9zaXplXCYjMzQ7KTtcbmJsb2NrL2Jsay1zeXNmcy5jOjYxOTpRVUVVRV9MSU1fUk9fRU5UUlkocXVldWVfbWF4X3dyaXRlX3N0cmVhbXMsIFwmIzM0O21heF93cml0ZV9zdHJlYW1zXCYjMzQ7KTtcbmJsb2NrL2Jsay1zeXNmcy5jLTYyMC1RVUVVRV9MSU1fUk9fRU5UUlkocXVldWVfd3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5LCBcJiMzNDt3cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHlcJiMzNDspO1xuLS1cbmJsb2NrL2Jsay1zeXNmcy5jPTczNT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3QgcXVldWVfYXR0cnNbXSA9IHtcbi0tXG5ibG9jay9ibGstc3lzZnMuYy03NDQtXHRcdTAwMjZxdWV1ZV9tYXhfc2VnbWVudF9zaXplX2VudHJ5LmF0dHIsXG5ibG9jay9ibGstc3lzZnMuYzo3NDU6XHRcdTAwMjZxdWV1ZV9tYXhfd3JpdGVfc3RyZWFtc19lbnRyeS5hdHRyLFxuYmxvY2svYmxrLXN5c2ZzLmMtNzQ2LVx0XHUwMDI2cXVldWVfd3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5X2VudHJ5LmF0dHIsXG4tLVxuYmxvY2svZm9wcy5jPTM5ND1zdGF0aWMgc3NpemVfdCBibGtkZXZfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuLS1cbmJsb2NrL2ZvcHMuYy00MDUtXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUpIHtcbmJsb2NrL2ZvcHMuYzo0MDY6XHRcdHUxNiBtYXhfd3JpdGVfc3RyZWFtcyA9IGJkZXZfbWF4X3dyaXRlX3N0cmVhbXMoYmRldik7XG5ibG9jay9mb3BzLmMtNDA3LVxuYmxvY2svZm9wcy5jLTQwOC1cdFx0aWYgKGlvY2ItXHUwMDNla2lfd3JpdGVfc3RyZWFtKSB7XG5ibG9jay9mb3BzLmM6NDA5Olx0XHRcdGlmIChpb2NiLVx1MDAzZWtpX3dyaXRlX3N0cmVhbSBcdTAwM2UgbWF4X3dyaXRlX3N0cmVhbXMpXG5ibG9jay9mb3BzLmMtNDEwLVx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5ibG9jay9mb3BzLmM6NDExOlx0XHR9IGVsc2UgaWYgKG1heF93cml0ZV9zdHJlYW1zKSB7XG5ibG9jay9mb3BzLmMtNDEyLVx0XHRcdGVudW0gcndfaGludCB3cml0ZV9oaW50ID1cbi0tXG5ibG9jay9mb3BzLmMtNDE5LVx0XHRcdCAqL1xuYmxvY2svZm9wcy5jOjQyMDpcdFx0XHRpZiAod3JpdGVfaGludCBcdTAwM2M9IG1heF93cml0ZV9zdHJlYW1zKVxuYmxvY2svZm9wcy5jLTQyMS1cdFx0XHRcdGlvY2ItXHUwMDNla2lfd3JpdGVfc3RyZWFtID0gd3JpdGVfaGludDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0yMDI9c3RhdGljIHNzaXplX3QgcGFydF9kaXNjYXJkX2FsaWdubWVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMDctXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMDg6c3RhdGljIHNzaXplX3QgcGFydF93cml0ZV9zdHJlYW1zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjA5LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMTAte1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjExOlx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsldVxcblwmIzM0OywgZGV2X3RvX2JkZXYoZGV2KS1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIxMi19XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjE4LSAqL1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjE5OnN0YXRpYyB2b2lkIHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydClcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIyMC17XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI1LVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjI2Olx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFydC1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zOyBpJiM0MzsmIzQzOylcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIyNy1cdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjI4Olx0XHRcdCAgICBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI5LX1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzMC1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIzMTpzdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMzIte1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzNC1cdHVuc2lnbmVkIGludCBtYXggPSBtaW5fdCh1bnNpZ25lZCBpbnQsXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMzU6XHRcdFx0XHQgYmRldl9saW1pdHMocGFydCktXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXMsIFU4X01BWCk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMzYtXHR1OCAqbWFwID0gTlVMTDtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNTctXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyNTg6XHRjdXIgPSBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNTktXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjY5LVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjcwOlx0bnJfZnJlZSA9IG1heCAtIGJpdG1hcF93ZWlnaHQoZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggJiM0MzsgMSk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNzEtXHRpZiAobnIgXHUwMDNlIGN1ciBcdTAwMjZcdTAwMjYgbnIgLSBjdXIgXHUwMDNlIG5yX2ZyZWUpIHtcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODUtXHRcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjg2Olx0XHRcdFx0ICAgIGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODctXHR9IGVsc2Uge1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjg4LVx0XHRmb3IgKGkgPSBjdXI7IGkgXHUwMDNjIG5yOyBpJiM0MzsmIzQzOykge1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjg5Olx0XHRcdGlkID0gZmluZF9uZXh0X3plcm9fYml0KGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI5MC1cdFx0XHRcdFx0XHRtYXggJiM0MzsgMSwgMSk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyOTE6XHRcdFx0X19zZXRfYml0KGlkLCBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjkyLVx0XHRcdG1hcFtpXSA9IGlkO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI5Ni1cdHN3YXAocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwLCBtYXApO1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjk3Olx0cGFydC1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zID0gbnI7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTgtXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMzA1LVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MzA2OnN0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0zMDctXHRcdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTMyNS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjMyNjpcdHJldCA9IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoZGV2X3RvX2JkZXYoZGV2KSwgbnIpO1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMzI3LVx0c3lzZnNfdW5icmVha19hY3RpdmVfcHJvdGVjdGlvbihrbik7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MzM5PXN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjM0MDpzdGF0aWMgREVWSUNFX0FUVFIod3JpdGVfc3RyZWFtcywgMDY0NCwgcGFydF93cml0ZV9zdHJlYW1zX3Nob3csXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzozNDE6XHRcdCAgIHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZSk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0zNDItI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTM0Nz1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGFydF9hdHRyc1tdID0ge1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTM1NS1cdFx1MDAyNmRldl9hdHRyX2luZmxpZ2h0LmF0dHIsXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzozNTY6XHRcdTAwMjZkZXZfYXR0cl93cml0ZV9zdHJlYW1zLmF0dHIsXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0zNTctI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVFxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTQwMD12b2lkIGRyb3BfcGFydGl0aW9uKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtNDAzLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6NDA0Olx0cGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTQwNS1cdHhhX2VyYXNlKFx1MDAyNnBhcnQtXHUwMDNlYmRfZGlzay1cdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MzExCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyBXcml0ZSBTdHJlYW0gU3VwcG9ydCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUmIzM5O3MgYW55IGV4aXN0aW5nIHN1cHBvcnQgZm9yIHdyaXRlIHN0cmVhbXMgaW4gdGhlIGJsb2NrIGRldmljZSBsYXllciwgb3Igc3BlY2lmaWNhbGx5LCBpZiBudWxsX2JsayBpcyBwbGF5aW5nIGJhbGwuIFRoZSBmaXJzdCBzdGVwIGlzIHByZXR0eSBjbGVhcjogSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIGh1bnQgZG93biBpbnN0YW5jZXMgb2YgYG1heF93cml0ZV9zdHJlYW1zYCBpbiB0aGUga2VybmVsIHNvdXJjZSwgZm9jdXNpbmcgb24gdGhlIGJsb2NrIGRldmljZSBkcml2ZXJzLiBJJiMzOTtsbCBzdGFydCB3aXRoIGBkcml2ZXJzL2Jsb2NrL2AsIG9idmlvdXNseSwgYnV0IEkmIzM5O2xsIGJyb2FkZW4gdGhlIHNlYXJjaCBpZiBuZWVkZWQuIEl0JiMzOTtzIGEga2V5IGluZGljYXRvciBmb3IgdGhpcyBmZWF0dXJlLCBzbyBmaW5kaW5nIGl0IHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIGNsdWUgYXMgdG8gd2hpY2ggZGV2aWNlcyBhcmUgY2FwYWJsZSBvZiBzdXBwb3J0aW5nIHRoZSBmZWF0dXJlLiBUaGlzIGZlZWxzIGxpa2UgdGhlIHJpZ2h0IGFuZ2xlIHRvIHN0YXJ0IGZyb20uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heF93cml0ZV9zdHJlYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTIzOTg9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvX2Jsb2NrKHN0cnVjdCBudm1lX25zICpucyxcbi0tXG5kcml2ZXJzL252bWUvaG9zdC9jb3JlLmMtMjQ5Mi1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNDkzOlx0bGltLm1heF93cml0ZV9zdHJlYW1zID0gbnMtXHUwMDNlaGVhZC1cdTAwM2Vucl9wbGlkcztcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDk0LVx0bGltLndyaXRlX3N0cmVhbV9ncmFudWxhcml0eSA9IG5zLVx1MDAzZWhlYWQtXHUwMDNld3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5O1xuLS1cbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYz0yNTM5PXN0YXRpYyBpbnQgbnZtZV91cGRhdGVfbnNfaW5mbyhzdHJ1Y3QgbnZtZV9ucyAqbnMsIHN0cnVjdCBudm1lX25zX2luZm8gKmluZm8pXG4tLVxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI2MTAtXHRcdFx0bnZtZV9pbml0X2ludGVncml0eShucy1cdTAwM2VoZWFkLCBcdTAwMjZsaW0sIGluZm8pO1xuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI2MTE6XHRcdGxpbS5tYXhfd3JpdGVfc3RyZWFtcyA9IG5zX2xpbS1cdTAwM2VtYXhfd3JpdGVfc3RyZWFtcztcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNjEyLVx0XHRsaW0ud3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5ID0gbnNfbGltLVx1MDAzZXdyaXRlX3N0cmVhbV9ncmFudWxhcml0eTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQgYW5kIHVzaW5nIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQmxvY2sgRHJpdmVyIEludGVyYWN0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nLCBiZXlvbmQgdGhlIGltbWVkaWF0ZSBpc3N1ZSwgd2UgbmVlZCB0byB0YWtlIGEgd2lkZXIgbG9vayBhdCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gcnVuIGEgYGdyZXBgIGZvciBgbnVsbF9ibGtgIGFuZCBhbnkgb3RoZXIgYmxvY2sgZHJpdmVycyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBJIHdhbnQgdG8gYmUgdGhvcm91Z2ggYW5kIGNvbnNpZGVyIGFsbCBwb3NzaWJpbGl0aWVzLiBJdCYjMzk7cyBlYXN5IHRvIGdldCB0dW5uZWwgdmlzaW9uLCBlc3BlY2lhbGx5IHdoZW4gdHJvdWJsZXNob290aW5nLCBzbyBsZXQmIzM5O3MgZ2V0IGEgY29tcHJlaGVuc2l2ZSBsaXN0IHRvIHJ1bGUgb3V0IGxlc3Mgb2J2aW91cyBpc3N1ZXMuIEJldHRlciBzYWZlIHRoYW4gc29ycnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21heF93cml0ZV9zdHJlYW1zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2Jsb2NrL2Jsay1zeXNmcy5jPTIyMj1RVUVVRV9TWVNGU19MSU1JVF9TSE9XKG1heF9zZWdtZW50X3NpemUpXG5ibG9jay9ibGstc3lzZnMuYzoyMjM6UVVFVUVfU1lTRlNfTElNSVRfU0hPVyhtYXhfd3JpdGVfc3RyZWFtcylcbmJsb2NrL2Jsay1zeXNmcy5jLTIyNC1RVUVVRV9TWVNGU19MSU1JVF9TSE9XKHdyaXRlX3N0cmVhbV9ncmFudWxhcml0eSlcbi0tXG5ibG9jay9ibGstc3lzZnMuYz02MTg9UVVFVUVfTElNX1JPX0VOVFJZKHF1ZXVlX21heF9zZWdtZW50X3NpemUsIFwmIzM0O21heF9zZWdtZW50X3NpemVcJiMzNDspO1xuYmxvY2svYmxrLXN5c2ZzLmM6NjE5OlFVRVVFX0xJTV9ST19FTlRSWShxdWV1ZV9tYXhfd3JpdGVfc3RyZWFtcywgXCYjMzQ7bWF4X3dyaXRlX3N0cmVhbXNcJiMzNDspO1xuYmxvY2svYmxrLXN5c2ZzLmMtNjIwLVFVRVVFX0xJTV9ST19FTlRSWShxdWV1ZV93cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHksIFwmIzM0O3dyaXRlX3N0cmVhbV9ncmFudWxhcml0eVwmIzM0Oyk7XG4tLVxuYmxvY2svYmxrLXN5c2ZzLmM9NzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpjb25zdCBxdWV1ZV9hdHRyc1tdID0ge1xuLS1cbmJsb2NrL2Jsay1zeXNmcy5jLTc0NC1cdFx1MDAyNnF1ZXVlX21heF9zZWdtZW50X3NpemVfZW50cnkuYXR0cixcbmJsb2NrL2Jsay1zeXNmcy5jOjc0NTpcdFx1MDAyNnF1ZXVlX21heF93cml0ZV9zdHJlYW1zX2VudHJ5LmF0dHIsXG5ibG9jay9ibGstc3lzZnMuYy03NDYtXHRcdTAwMjZxdWV1ZV93cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHlfZW50cnkuYXR0cixcbi0tXG5ibG9jay9mb3BzLmM9Mzk0PXN0YXRpYyBzc2l6ZV90IGJsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuYmxvY2svZm9wcy5jLTQwNS1cdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSkge1xuYmxvY2svZm9wcy5jOjQwNjpcdFx0dTE2IG1heF93cml0ZV9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcbmJsb2NrL2ZvcHMuYy00MDctXG5ibG9jay9mb3BzLmMtNDA4LVx0XHRpZiAoaW9jYi1cdTAwM2VraV93cml0ZV9zdHJlYW0pIHtcbmJsb2NrL2ZvcHMuYzo0MDk6XHRcdFx0aWYgKGlvY2ItXHUwMDNla2lfd3JpdGVfc3RyZWFtIFx1MDAzZSBtYXhfd3JpdGVfc3RyZWFtcylcbmJsb2NrL2ZvcHMuYy00MTAtXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmJsb2NrL2ZvcHMuYzo0MTE6XHRcdH0gZWxzZSBpZiAobWF4X3dyaXRlX3N0cmVhbXMpIHtcbmJsb2NrL2ZvcHMuYy00MTItXHRcdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQgPVxuLS1cbmJsb2NrL2ZvcHMuYy00MTktXHRcdFx0ICovXG5ibG9jay9mb3BzLmM6NDIwOlx0XHRcdGlmICh3cml0ZV9oaW50IFx1MDAzYz0gbWF4X3dyaXRlX3N0cmVhbXMpXG5ibG9jay9mb3BzLmMtNDIxLVx0XHRcdFx0aW9jYi1cdTAwM2VraV93cml0ZV9zdHJlYW0gPSB3cml0ZV9oaW50O1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTIzMT1zdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjM0LVx0dW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIzNTpcdFx0XHRcdCBiZGV2X2xpbWl0cyhwYXJ0KS1cdTAwM2VtYXhfd3JpdGVfc3RyZWFtcywgVThfTUFYKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzNi1cdHU4ICptYXAgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc3OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIENvZGUgSW5zcGVjdGlvbiBTdHJhdGVneSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGVyZSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgd3JpdGUgc3RyZWFtIG1hbmFnZW1lbnQgcmVzaWRlLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMgSSBzZWUgbGlzdGVkOiBgcGFydF93cml0ZV9zdHJlYW1zX3N0b3JlYCwgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgLCBgcGFydF9wdXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIGBibGtfcGFydGl0aW9uX3JlbWFwYCwgYW5kIGBkcm9wX3BhcnRpdGlvbmAuIEkmIzM5O2xsIHdhbnQgdG8gdHJhY2UgdGhlaXIgY2FsbHMsIGhvdyB0aGV5JiMzOTtyZSBzdHJ1Y3R1cmVkLCBhbmQgd2hlcmUgdGhlIG1vZGlmaWNhdGlvbnMgd2VyZSBtYWRlLiBUaGUgaW5jbHVzaW9uIG9mIGBiZGV2X2ZyZWVfaW5vZGVgIGFsc28gcGlxdWVzIG15IGludGVyZXN0LCBzbyBJJiMzOTtsbCBiZSBzdXJlIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGFzc3VtcHRpb25zIGhlcmUuIEFyZSB3ZSB3b3JraW5nIHdpdGggYSBnZW5lcmljIHNldHVwLCBvciBhcmUgd2UgdGFyZ2V0aW5nIHNwZWNpZmljIGRldmljZSB0eXBlcyBsaWtlIGBCTEtfREVWX05VTExfQkxLYCwgYE5WTUVfQ09SRWAsIGBCTEtfREVWX0xPT1BgLCBvciBgQkxLX0RFVl9SQU1gPyBUaGUgcHJlc2VuY2Ugb2YgYEJMT0NLYCBjb25maWcgc3VnZ2VzdHMgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBjb3JlIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLCBzbyB0aGUgc2NvcGUgbWF5IGJlIG1vcmUgdGFyZ2V0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlnIGRlcGVuZGVuY2llcy4KCkZpbmFsbHksIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgcGFydGl0aW9uaW5nIG9yIHRoZSBibG9jayBzeXNmcyBpbiBnZW5lcmFsLiBTbyBgYmxvY2svS2NvbmZpZ2Agd2lsbCBuZWVkIGEgY2xvc2UgbG9vay4gVGhpcyBhcHByb2FjaCBzaG91bGQgZ2l2ZSBtZSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIEJsb2NrIGxheWVyIGNvcmUgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRtZW51Y29uZmlnIEJMT0NLXG4gICA2Olx0ICAgICAgIGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBibG9jayBsYXllclwmIzM0OyBpZiBFWFBFUlRcbiAgIDc6XHQgICAgICAgZGVmYXVsdCB5XG4gICA4Olx0ICAgICAgIHNlbGVjdCBGU19JT01BUFxuICAgOTpcdCAgICAgICBzZWxlY3QgU0JJVE1BUFxuICAxMDpcdCAgICAgICBoZWxwXG4gIDExOlx0XHQgUHJvdmlkZSBibG9jayBsYXllciBzdXBwb3J0IGZvciB0aGUga2VybmVsLlxuICAxMjpcdFxuICAxMzpcdFx0IERpc2FibGUgdGhpcyBvcHRpb24gdG8gcmVtb3ZlIHRoZSBibG9jayBsYXllciBzdXBwb3J0IGZyb20gdGhlXG4gIDE0Olx0XHQga2VybmVsLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGVtYmVkZGVkIGRldmljZXMuXG4gIDE1Olx0XG4gIDE2Olx0XHQgSWYgdGhpcyBvcHRpb24gaXMgZGlzYWJsZWQ6XG4gIDE3Olx0XG4gIDE4Olx0XHQgICAtIGJsb2NrIGRldmljZSBmaWxlcyB3aWxsIGJlY29tZSB1bnVzYWJsZVxuICAxOTpcdFx0ICAgLSBzb21lIGZpbGVzeXN0ZW1zIChzdWNoIGFzIGV4dDMpIHdpbGwgYmVjb21lIHVuYXZhaWxhYmxlLlxuICAyMDpcdFxuICAyMTpcdFx0IEFsc28sIFNDU0kgY2hhcmFjdGVyIGRldmljZXMgYW5kIFVTQiBzdG9yYWdlIHdpbGwgYmUgZGlzYWJsZWQgc2luY2VcbiAgMjI6XHRcdCB0aGV5IG1ha2UgdXNlIG9mIHZhcmlvdXMgYmxvY2sgbGF5ZXIgZGVmaW5pdGlvbnMgYW5kIGZhY2lsaXRpZXMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgU2F5IFkgaGVyZSB1bmxlc3MgeW91IGtub3cgeW91IHJlYWxseSBkb24mIzM5O3Qgd2FudCB0byBtb3VudCBkaXNrcyBhbmRcbiAgMjU6XHRcdCBzdWNobGlrZS5cbiAgMjY6XHRcbiAgMjc6XHRpZiBCTE9DS1xuICAyODpcdFxuICAyOTpcdGNvbmZpZyBCTE9DS19MRUdBQ1lfQVVUT0xPQURcbiAgMzA6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcJiMzNDtcbiAgMzE6XHRcdGRlZmF1bHQgeVxuICAzMjpcdFx0aGVscFxuICAzMzpcdFx0ICBFbmFibGUgbG9hZGluZyBtb2R1bGVzIGFuZCBjcmVhdGluZyBibG9jayBkZXZpY2UgaW5zdGFuY2VzIGJhc2VkIG9uXG4gIDM0Olx0XHQgIGFjY2Vzc2VzIHRocm91Z2ggdGhlaXIgZGV2aWNlIHNwZWNpYWwgZmlsZS4gIFRoaXMgaXMgYSBoaXN0b3JpYyBMaW51eFxuICAzNTpcdFx0ICBmZWF0dXJlIGFuZCBtYWtlcyBubyBzZW5zZSBpbiBhIHVkZXYgd29ybGQgd2hlcmUgZGV2aWNlIGZpbGVzIGFyZVxuICAzNjpcdFx0ICBjcmVhdGVkIG9uIGRlbWFuZCwgYnV0IHNjcmlwdHMgdGhhdCBtYW51YWxseSBjcmVhdGUgZGV2aWNlIG5vZGVzIGFuZFxuICAzNzpcdFx0ICB0aGVuIGNhbGwgbG9zZXR1cCBtaWdodCByZWx5IG9uIHRoaXMgYmVoYXZpb3IuXG4gIDM4Olx0XG4gIDM5Olx0Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXG4gIDQwOlx0XHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODE3CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBCbG9jayBEZXZpY2UgUGFydGl0aW9uaW5nIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBgQ09ORklHX0JMT0NLYCBpcyBvbiBieSBkZWZhdWx0LCBhbmQgc2VlbXMgdG8gYmUgZXNzZW50aWFsIGZvciBldmVyeXRoaW5nIGluIHRoZSBgYmxvY2svYCBkaXJlY3RvcnkuIFJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IEkgbmVlZCB0byB2ZXJpZnkgaWYgYHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZWAsIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCwgYHBhcnRfcHV0X3dyaXRlX3N0cmVhbXNgLCBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCBhbmQgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGFyZSBhbGwgdGhlIGNvcnJlY3QgRm9jdXNTeW1ib2xzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciBlYWNoLiBBbmQgdGhlbiBJIGhhdmUgdG8gc2VlIGlmIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCBpcyBpbmxpbmVkIG9yIHN0YXRpYzsgdGhhdCBraW5kIG9mIGRldGFpbCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb21waWxlciBoYW5kbGVzIGl0LgoKTG9va2luZyBpbiBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLCBJIHNlZTogYHBhcnRfd3JpdGVfc3RyZWFtc19zaG93YCwgYHBhcnRfcHV0X3dyaXRlX3N0cmVhbXNgLCBgcGFydF9zZXRfd3JpdGVfc3RyZWFtc2AsIGFuZCBgcGFydF93cml0ZV9zdHJlYW1zX3N0b3JlYCwgYWxsIGNhbmRpZGF0ZXMuIGBibGtfcGFydGl0aW9uX3JlbWFwYCBpcyBvdmVyIGluIGBibG9jay9ibGstY29yZS5jYCBhbmQgYGJkZXZfZnJlZV9pbm9kZWAgaW4gYGJsb2NrL2JkZXYuY2AsIGFuZCBmaW5hbGx5IGBkcm9wX3BhcnRpdGlvbmAgaW4gYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gR290IGl0LgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHdoYXQgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGlzIGRvaW5nLiBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGl0JiMzOTtzIHN0YXRpYyBpbmxpbmUgb3IganVzdCBzdGF0aWMuIEhtbSwgaW4gYGJsb2NrL2Jsay1jb3JlLmNgLCBJIHNlZTogYHN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pYC4gV2FpdCBhIG1pbnV0ZSwgdGhlIGRpZmYgSSBzYXcgYmVmb3JlIGhhZCBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbiBgYmlvX2NoZWNrX2VvZGAgb24gbGluZSA2MTYsIGJ1dCBgYmxrX3BhcnRpdGlvbl9yZW1hcGAgb24gbGluZSA2MjIgaXMganVzdCBgc3RhdGljIGludGAuIEludGVyZXN0aW5nLiBJdCYjMzk7cyBub3QgaW5saW5lZCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSBub3QuIFRpbWUgdG8gdHJhY2sgZG93biB3aGVyZSBgYmxrX3BhcnRpdGlvbl9yZW1hcGAgaXMgY2FsbGVkIGluIGBibG9jay9ibGstY29yZS5jYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Jsa19wYXJ0aXRpb25fcmVtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLWNvcmUuYz01OTk9c3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNvcmUuYy02MjEtICovXG5ibG9jay9ibGstY29yZS5jOjYyMjpzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxuYmxvY2svYmxrLWNvcmUuYy02MjMte1xuLS1cbmJsb2NrL2Jsay1jb3JlLmM9ODI1PXZvaWQgc3VibWl0X2Jpb19ub2FjY3Qoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1jb3JlLmMtODUzLVx0XHRpZiAoYmRldl9pc19wYXJ0aXRpb24oYmRldikgXHUwMDI2XHUwMDI2XG5ibG9jay9ibGstY29yZS5jOjg1NDpcdFx0ICAgIHVubGlrZWx5KGJsa19wYXJ0aXRpb25fcmVtYXAoYmlvKSkpXG5ibG9jay9ibGstY29yZS5jLTg1NS1cdFx0XHRnb3RvIGVuZF9pbztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MjQKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogMzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJsb2NrIExheWVyIFBhdGNoKioKCk9rYXksIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93bi4gSSBzZWUgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGJlaW5nIGNhbGxlZCB3aXRoaW4gYHN1Ym1pdF9iaW9fbm9hY2N0YCwgd2hpY2ggaXMgYSBrZXkgcG9pbnQgdG8gc3RhcnQgd2l0aC4gVGhlbiwgSSYjMzk7dmUgZ290IGEgbGlzdCBvZiByZWxldmFudCBmdW5jdGlvbnM6IGBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVgLCBgcGFydF9zZXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zYCwgYHBhcnRfd3JpdGVfc3RyZWFtc19zaG93YCwgYGJsa19wYXJ0aXRpb25fcmVtYXBgLCBhbmQgYGRyb3BfcGFydGl0aW9uYC4gSSBuZWVkIHRvIGVuc3VyZSBhIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGludGVyYWN0LgoKTGV0JiMzOTtzIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgcXVpY2tseS4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUgLSBnb29kLCB0aGF0JiMzOTtzIHdoYXQgSSBleHBlY3QuIEVuYWJsZUNvbmZpZ3MgaXMgc2V0IHRvIFsmIzM0O0JMT0NLJiMzNDtdLCB3aGljaCBhbGlnbnMgcGVyZmVjdGx5IHdpdGggdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHkuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgc3BvdCBvbiwgY29udGFpbmluZyBhbGwgdGhlIGZ1bmN0aW9ucyBJIGlkZW50aWZpZWQgYXMgY2VudHJhbCB0byB0aGlzIGNoYW5nZS4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBhYm91dCB3cml0ZSBzdHJlYW0gbWFuYWdlbWVudCBvbiBibG9jayBkZXZpY2UgcGFydGl0aW9ucywgdXNpbmcgYSBuZXcgc3lzZnMgYXR0cmlidXRlLiBJdCB0b3VjaGVzIHBhcnRpdGlvbiBsaWZlY3ljbGUgbWFuYWdlbWVudCwgaW5vZGUgY2xlYW51cCAoc3BlY2lmaWNhbGx5IGBiZGV2X2ZyZWVfaW5vZGVgKSwgYW5kIHRoZSBiaW8gc3VibWlzc2lvbiBwcm9jZXNzIHdpdGggYGJsa19wYXJ0aXRpb25fcmVtYXBgLiBUaGUgY29kZSBpcyBmdW5kYW1lbnRhbGx5IHBhcnQgb2YgdGhlIGNvcmUgYmxvY2sgbGF5ZXIsIHNvIGl0JiMzOTtzIGFjY2Vzc2libGUgdGhyb3VnaCB1c2VyLXNwYWNlIGludGVyYWN0aW9ucyB3aXRoIGJsb2NrIGRldmljZXMgYW5kIHN5c2ZzLiBUaGF0IHNlZW1zIHJlYXNvbmFibGUuCgpJIHNob3VsZCB2ZXJpZnkgdGhlIGNvbmZpZyBhbmQgc3ltYm9sIG5hbWVzIG9uZSBtb3JlIHRpbWUuIFRoZSBjb25maWcgY2hlY2tzIG91dCBhcyBgQkxPQ0tgLiBUaGUgc3ltYm9scyBsaXN0ZWQgYXJlIGFsbCBwcmVzZW50IGFuZCBhY2NvdW50ZWQgZm9yLgoKRXZlcnl0aGluZyBsb29rcyBjbGVhbiBhbmQgd2VsbC1kZWZpbmVkLCBpdCBzZWVtcy4gSSYjMzk7bSBzYXRpc2ZpZWQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUmIzM0OywKICAgICYjMzQ7cGFydF9zZXRfd3JpdGVfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDtwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyYjMzQ7LAogICAgJiMzNDtwYXJ0X3B1dF93cml0ZV9zdHJlYW1zJiMzNDssCiAgICAmIzM0O2Jsa19wYXJ0aXRpb25fcmVtYXAmIzM0OywKICAgICYjMzQ7ZHJvcF9wYXJ0aXRpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB3cml0ZSBzdHJlYW0gcmVzZXJ2YXRpb24gYW5kIHJlbWFwcGluZyBzdXBwb3J0IGZvciBibG9jayBkZXZpY2UgcGFydGl0aW9ucy4gSXQgYWRkcyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUgKHdyaXRlX3N0cmVhbXMpIHRvIHBhcnRpdGlvbnMsIGltcGxlbWVudHMgc3RyZWFtIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRyYWNraW5nIG9uIHRoZSB1bmRlcmx5aW5nIGRpc2ssIGFuZCB1cGRhdGVzIGJpbyBwYXJ0aXRpb24gcmVtYXBwaW5nIHRvIG1hcCBwYXJ0aXRpb24gd3JpdGUgc3RyZWFtcyB0byBkaXNrIHdyaXRlIHN0cmVhbXMuIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGJsb2NrIEkvTyBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTE9DSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhcnRfd3JpdGVfc3RyZWFtc19zdG9yZSYjMzQ7LAogICAgJiMzNDtwYXJ0X3NldF93cml0ZV9zdHJlYW1zJiMzNDssCiAgICAmIzM0O3BhcnRfd3JpdGVfc3RyZWFtc19zaG93JiMzNDssCiAgICAmIzM0O3BhcnRfcHV0X3dyaXRlX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7YmxrX3BhcnRpdGlvbl9yZW1hcCYjMzQ7LAogICAgJiMzNDtkcm9wX3BhcnRpdGlvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHdyaXRlIHN0cmVhbSByZXNlcnZhdGlvbiBhbmQgcmVtYXBwaW5nIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSBwYXJ0aXRpb25zLiBJdCBhZGRzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSAod3JpdGVfc3RyZWFtcykgdG8gcGFydGl0aW9ucywgaW1wbGVtZW50cyBzdHJlYW0gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gdHJhY2tpbmcgb24gdGhlIHVuZGVybHlpbmcgZGlzaywgYW5kIHVwZGF0ZXMgYmlvIHBhcnRpdGlvbiByZW1hcHBpbmcgdG8gbWFwIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW1zIHRvIGRpc2sgd3JpdGUgc3RyZWFtcy4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN5c2ZzIGNvbmZpZ3VyYXRpb24gYW5kIGJsb2NrIGxheWVyIHJlbWFwcGluZyBmb3Igd3JpdGUgc3RyZWFtcyBvbiBwYXJ0aXRpb24gYmxvY2sgZGV2aWNlcy5cblxuMS4gTWVtb3J5IEluaXRpYWxpemF0aW9uOlxuLSBJbm9kZXMvYmRldnMgYXJlIGFsbG9jYXRlZCB2aWEgYGJkZXZfYWxsb2NfaW5vZGVgIHdoaWNoIGV4cGxpY2l0bHkgemVyb2VzIHRoZSBgc3RydWN0IGJsb2NrX2RldmljZWAgd2l0aCBgbWVtc2V0YCwgZW5zdXJpbmcgYGJkX25yX3dyaXRlX3N0cmVhbXNgIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgc3RhcnQgYXQgemVyby9OVUxMLlxuLSBgc3RydWN0IGdlbmRpc2tgIGlzIGFsbG9jYXRlZCB1c2luZyBga3phbGxvY19ub2RlYCwgZW5zdXJpbmcgYHdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRgIGJpdG1hcCBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLlxuLSBXaGVuIGBtYXBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIGluIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKClgLCBldmVyeSBlbGVtZW50IGluIGBtYXBbMCAuLiBuci0xXWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhY3Jvc3MgdGhlIGxvb3AgYnJhbmNoZXMgYmVmb3JlIHN3YXBwaW5nIGludG8gYGJkZXYtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcGAuXG5cbjIuIFVzZXIgU3BhY2UgQ29tbXVuaWNhdGlvbjpcbi0gVGhlIG9ubHkgaW50ZXJmYWNlIGV4cG9zaW5nIGRhdGEgdG8gdXNlcnNwYWNlIGlzIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIHdoaWNoIHVzZXMgYHN5c2ZzX2VtaXQoKWAgdG8gZm9ybWF0IHRoZSBpbnRlZ2VyIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBpbnRvIGEgc3RyaW5nLiBObyBiaW5hcnkgc3RydWN0dXJlcyBvciBwYWRkZWQgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXG5cbjMuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVudCBhY2Nlc3MsIG9yIG1lbW9yeSBsZWFrcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLlxuLSBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIGtlcm5lbCBpbmZvLWxlYWtzIGludHJvZHVjZWQuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MTNkNmY2ZDY4Y2ZjNDU0ZmZiMDJlMDk4YzMxZjZmZTc5NTBlMjY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgMTEgMDc6NDY6NTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2sgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2sKaW5kZXggOTAwYjNmYzRjNzJkMC4uNDQyZjRjMjIxYmRlYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9jawpAQCAtMjE4LDYgJiM0MzsyMTgsMjUgQEAgRGVzY3JpcHRpb246CiAJCXNhbWUgYXMgdGhlIGZvcm1hdCBvZiAvc3lzL2Jsb2NrLyZsdDtkaXNrJmd0Oy9zdGF0LgogCiAKJiM0MztXaGF0OgkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvJmx0O3BhcnRpdGlvbiZndDsvd3JpdGVfc3RyZWFtcwomIzQzO0RhdGU6CQlTZXB0ZW1iZXIgMjAyNgomIzQzO0NvbnRhY3Q6CUtlb3Nlb25nIFBhcmsgJmx0O2tlb3N1bmcucGFya0BzYW1zdW5nLmNvbSZndDsKJiM0MztEZXNjcmlwdGlvbjoKJiM0MzsJCVtSV10gTnVtYmVyIG9mIHRoZSBkaXNrJiMzOTtzIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZQomIzQzOwkJcGFydGl0aW9uLiBXcml0aW5nIE4gcmVzZXJ2ZXMgTiBkaXNrIHdyaXRlIHN0cmVhbXMgdGhhdCBubwomIzQzOwkJb3RoZXIgcGFydGl0aW9uIGNhbiB1c2UgYW5kIGV4cG9zZXMgdGhlbSBhcyB0aGUgcGFydGl0aW9uJiMzOTtzCiYjNDM7CQl3cml0ZSBzdHJlYW1zIDEgdG8gTi4gV3JpdGluZyAwIGdpdmVzIHRoZW0gYmFjay4gQXQgbW9zdAomIzQzOwkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvcXVldWUvbWF4X3dyaXRlX3N0cmVhbXMgc3RyZWFtcywgYW5kIG5ldmVyCiYjNDM7CQltb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhbgomIzQzOwkJb25seSBiZSBjaGFuZ2VkIHdoaWxlIHRoZSBwYXJ0aXRpb24gaXMgbm90IG9wZW4sIGFuZCBhIGNoYW5nZQomIzQzOwkJa2VlcHMgdGhlIHN0cmVhbSBudW1iZXJzIHRoYXQgc3Vydml2ZSBpdCBwb2ludGluZyBhdCB0aGUgc2FtZQomIzQzOwkJZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3MKJiM0MzsJCXJlc2VydmVkIGhlcmUsIGFuZCB0aGUgcmVzZXJ2YXRpb24gaXMgbG9zdCB3aGVuIHRoZSBwYXJ0aXRpb24KJiM0MzsJCWlzIHJlbW92ZWQsIGluY2x1ZGluZyBieSBhIHBhcnRpdGlvbiB0YWJsZSByZXNjYW4uIEkvTyB0bwomIzQzOwkJdGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdAomIzQzOwkJY2FuIHdyaXRlIHRvIGFueSBzZWN0b3Igb2YgYSBwYXJ0aXRpb24uCiYjNDM7CiYjNDM7CiBXaGF0OgkJL3N5cy9ibG9jay8mbHQ7ZGlzayZndDsvcXVldWUvYWRkX3JhbmRvbQogRGF0ZToJCUp1bmUgMjAxMAogQ29udGFjdDoJbGludXgtYmxvY2tAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmMKaW5kZXggY2Q4MzIzMDgzNzQwNi4uNzMwNmE0ZWYwYTg2NyAxMDA2NDQKLS0tIGEvYmxvY2svYmRldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2JkZXYuYwpAQCAtNDM4LDYgJiM0Mzs0MzgsNyBAQCBzdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAogCWZyZWVfcGVyY3B1KGJkZXYtJmd0O2JkX3N0YXRzKTsKIAlrZnJlZShiZGV2LSZndDtiZF9tZXRhX2luZm8pOwomIzQzOwlrZnJlZShiZGV2LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwKTsKIAlzZWN1cml0eV9iZGV2X2ZyZWUoYmRldik7CiAKIAlpZiAoIWJkZXZfaXNfcGFydGl0aW9uKGJkZXYpKSB7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuYwppbmRleCAxOTZiY2NmMjdmNThkLi4zYjZmMDliMzk0M2Y0IDEwMDY0NAotLS0gYS9ibG9jay9ibGstY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2Jsb2NrL2Jsay1jb3JlLmMKQEAgLTYxNiw3ICYjNDM7NjE2LDggQEAgc3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pCiB9CiAKIC8qCi0gKiBSZW1hcCBibG9jayBuIG9mIHBhcnRpdGlvbiBwIHRvIGJsb2NrIG4mIzQzO3N0YXJ0KHApIG9mIHRoZSBkaXNrLgomIzQzOyAqIFJlbWFwIGJsb2NrIG4gb2YgcGFydGl0aW9uIHAgdG8gYmxvY2sgbiYjNDM7c3RhcnQocCkgb2YgdGhlIGRpc2ssIGFuZCB0aGUKJiM0MzsgKiB3cml0ZSBzdHJlYW1zIG9mIHBhcnRpdGlvbiBwIHRvIHRoZSBkaXNrIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZW0uCiAgKi8KIHN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pCiB7CkBAIC02MzAsNiAmIzQzOzYzMSwxMyBAQCBzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKQogCQkJCSAgICAgIGJpby0mZ3Q7YmlfaXRlci5iaV9zZWN0b3IgLQogCQkJCSAgICAgIHAtJmd0O2JkX3N0YXJ0X3NlY3QpOwogCX0KJiM0MzsJaWYgKGJpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtICZhbXA7JmFtcDsgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFKSB7CiYjNDM7CQlpZiAodW5saWtlbHkoYmlvLSZndDtiaV93cml0ZV9zdHJlYW0gJmd0OyBwLSZndDtiZF9ucl93cml0ZV9zdHJlYW1zKSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCWJpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtID0KJiM0MzsJCQlwLSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2Jpby0mZ3Q7Ymlfd3JpdGVfc3RyZWFtIC0gMV07CiYjNDM7CX0KIAliaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwppbmRleCBiNWM1OWI3OWNhN2NiLi43Nzg1MmViMmFjYmVjIDEwMDY0NAotLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuYwpAQCAtMjA1LDYgJiM0MzsyMDUsMTMwIEBAIHN0YXRpYyBzc2l6ZV90IHBhcnRfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgYmRldl9kaXNjYXJkX2FsaWdubWVudChkZXZfdG9fYmRldihkZXYpKSk7CiB9CiAKJiM0MztzdGF0aWMgc3NpemVfdCBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQomIzQzO3sKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgZGV2X3RvX2JkZXYoZGV2KS0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtcyk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogR2l2ZSB0aGUgd3JpdGUgc3RyZWFtcyBvZiBAcGFydCBiYWNrIHRvIHRoZSBkaXNrLiAgQ2FsbGVkIGZyb20KJiM0MzsgKiBkcm9wX3BhcnRpdGlvbigpIHdpdGggb3Blbl9tdXRleCBoZWxkOyB0aGUgbWFwIGlzIGxlZnQgYWxvbmUgYmVjYXVzZSBhCiYjNDM7ICogd3JpdGUgcmFjaW5nIHdpdGggZGVsX2dlbmRpc2soKSBzdGlsbCB1c2VzIGl0IHVudGlsIHRoZSBiZGV2IGlzIGZyZWVkLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC0mZ3Q7YmRfZGlzazsKJiM0MzsJdW5zaWduZWQgaW50IGk7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtkaXNrLSZndDtvcGVuX211dGV4KTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBhcnQtJmd0O2JkX25yX3dyaXRlX3N0cmVhbXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJX19jbGVhcl9iaXQocGFydC0mZ3Q7YmRfd3JpdGVfc3RyZWFtX21hcFtpXSwKJiM0MzsJCQkgICAgZGlzay0mZ3Q7d3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0LCB1OCBucikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC0mZ3Q7YmRfZGlzazsKJiM0MzsJdW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCwKJiM0MzsJCQkJIGJkZXZfbGltaXRzKHBhcnQpLSZndDttYXhfd3JpdGVfc3RyZWFtcywgVThfTUFYKTsKJiM0MzsJdTggKm1hcCA9IE5VTEw7CiYjNDM7CXVuc2lnbmVkIGludCBpLCBpZCwgbnJfZnJlZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CXU4IGN1cjsKJiM0MzsKJiM0MzsJaWYgKG5yICZndDsgbWF4KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChucikgewomIzQzOwkJbWFwID0ga21hbGxvYyhuciwgR0ZQX0tFUk5FTCk7CiYjNDM7CQlpZiAoIW1hcCkKJiM0MzsJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CiYjNDM7CS8qIHRoZSBwYXJ0aXRpb24gbWF5IGhhdmUgYmVlbiBkcm9wcGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBtdXRleCAqLwomIzQzOwlpZiAoeGFfbG9hZCgmYW1wO2Rpc2stJmd0O3BhcnRfdGJsLCBiZGV2X3BhcnRubyhwYXJ0KSkgIT0gcGFydCkgewomIzQzOwkJcmV0ID0gLUVOWElPOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJY3VyID0gcGFydC0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtczsKJiM0MzsKJiM0MzsJLyogYSBuby1vcCBjaGFuZ2UgaXMgYWxsb3dlZCB3aGlsZSBvcGVuICovCiYjNDM7CWlmIChuciA9PSBjdXIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogdGhlIHN0cmVhbXMgbXVzdCBub3QgY2hhbmdlIHVuZGVyIGEgdXNlciBvZiB0aGUgcGFydGl0aW9uICovCiYjNDM7CWlmIChhdG9taWNfcmVhZCgmYW1wO3BhcnQtJmd0O2JkX29wZW5lcnMpKSB7CiYjNDM7CQlyZXQgPSAtRUJVU1k7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlucl9mcmVlID0gbWF4IC0gYml0bWFwX3dlaWdodChkaXNrLSZndDt3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggJiM0MzsgMSk7CiYjNDM7CWlmIChuciAmZ3Q7IGN1ciAmYW1wOyZhbXA7IG5yIC0gY3VyICZndDsgbnJfZnJlZSkgewomIzQzOwkJcmV0ID0gLUVOT1NQQzsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtlZXAgdGhlIHN0cmVhbXMgdGhhdCBzdGF5LCBzbyB0aGF0IGEgcGFydGl0aW9uIGtlZXBzIHdyaXRpbmcKJiM0MzsJICogdGhyb3VnaCB0aGUgc2FtZSBkaXNrIHN0cmVhbXMgYW5kIGl0cyBkYXRhIHN0YXlzIHRvZ2V0aGVyLgomIzQzOwkgKi8KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG1pbihjdXIsIG5yKTsgaSYjNDM7JiM0MzspCiYjNDM7CQltYXBbaV0gPSBwYXJ0LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2ldOwomIzQzOwomIzQzOwlpZiAobnIgJmx0OyBjdXIpIHsKJiM0MzsJCWZvciAoaSA9IG5yOyBpICZsdDsgY3VyOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlfX2NsZWFyX2JpdChwYXJ0LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwW2ldLAomIzQzOwkJCQkgICAgZGlzay0mZ3Q7d3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlmb3IgKGkgPSBjdXI7IGkgJmx0OyBucjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLSZndDt3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLAomIzQzOwkJCQkJCW1heCAmIzQzOyAxLCAxKTsKJiM0MzsJCQlfX3NldF9iaXQoaWQsIGRpc2stJmd0O3dyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpOwomIzQzOwkJCW1hcFtpXSA9IGlkOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXN3YXAocGFydC0mZ3Q7YmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTsKJiM0MzsJcGFydC0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yOwomIzQzOwomIzQzO291dDoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7ZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiYjNDM7CWtmcmVlKG1hcCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiYjNDM7CQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKJiM0MzsJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGtlcm5mc19ub2RlICprbjsKJiM0MzsJdTggbnI7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IGtzdHJ0b3U4KGJ1ZiwgMTAsICZhbXA7bnIpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogZHJvcF9wYXJ0aXRpb24oKSByZW1vdmVzIHRoaXMgYXR0cmlidXRlIHdpdGggb3Blbl9tdXRleCBoZWxkLCBzbwomIzQzOwkgKiBkb24mIzM5O3QgaG9sZCB0aGUgYWN0aXZlIHJlZmVyZW5jZSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbXV0ZXguCiYjNDM7CSAqLwomIzQzOwlrbiA9IHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKCZhbXA7ZGV2LSZndDtrb2JqLCAmYW1wO2F0dHItJmd0O2F0dHIpOwomIzQzOwlpZiAoIWtuKQomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsKJiM0MzsJcmV0ID0gcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhkZXZfdG9fYmRldihkZXYpLCBucik7CiYjNDM7CXN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIERFVklDRV9BVFRSKHBhcnRpdGlvbiwgMDQ0NCwgcGFydF9wYXJ0aXRpb25fc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhcnQsIDA0NDQsIHBhcnRfc3RhcnRfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoc2l6ZSwgMDQ0NCwgcGFydF9zaXplX3Nob3csIE5VTEwpOwpAQCAtMjEzLDYgJiM0MzszMzcsOCBAQCBzdGF0aWMgREVWSUNFX0FUVFIoYWxpZ25tZW50X29mZnNldCwgMDQ0NCwgcGFydF9hbGlnbm1lbnRfb2Zmc2V0X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGRpc2NhcmRfYWxpZ25tZW50LCAwNDQ0LCBwYXJ0X2Rpc2NhcmRfYWxpZ25tZW50X3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTsKJiM0MztzdGF0aWMgREVWSUNFX0FUVFIod3JpdGVfc3RyZWFtcywgMDY0NCwgcGFydF93cml0ZV9zdHJlYW1zX3Nob3csCiYjNDM7CQkgICBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUpOwogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2ZhaWwgPQogCV9fQVRUUihtYWtlLWl0LWZhaWwsIDA2NDQsIHBhcnRfZmFpbF9zaG93LCBwYXJ0X2ZhaWxfc3RvcmUpOwpAQCAtMjI3LDYgJiM0MzszNTMsNyBAQCBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGFydF9hdHRyc1tdID0gewogCSZhbXA7ZGV2X2F0dHJfZGlzY2FyZF9hbGlnbm1lbnQuYXR0ciwKIAkmYW1wO2Rldl9hdHRyX3N0YXQuYXR0ciwKIAkmYW1wO2Rldl9hdHRyX2luZmxpZ2h0LmF0dHIsCiYjNDM7CSZhbXA7ZGV2X2F0dHJfd3JpdGVfc3RyZWFtcy5hdHRyLAogI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVAogCSZhbXA7ZGV2X2F0dHJfZmFpbC5hdHRyLAogI2VuZGlmCkBAIC0yNzQsNiAmIzQzOzQwMSw3IEBAIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCkKIHsKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGFydC0mZ3Q7YmRfZGlzay0mZ3Q7b3Blbl9tdXRleCk7CiAKJiM0MzsJcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTsKIAl4YV9lcmFzZSgmYW1wO3BhcnQtJmd0O2JkX2Rpc2stJmd0O3BhcnRfdGJsLCBiZGV2X3BhcnRubyhwYXJ0KSk7CiAJa29iamVjdF9wdXQocGFydC0mZ3Q7YmRfaG9sZGVyX2Rpcik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oCmluZGV4IDk4ZTIxYjRjYmYzMjguLjBiYmZhMjcwODA5OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaApAQCAtNzEsNiAmIzQzOzcxLDkgQEAgc3RydWN0IGJsb2NrX2RldmljZSB7CiAKIAlzdHJ1Y3QgcGFydGl0aW9uX21ldGFfaW5mbyAqYmRfbWV0YV9pbmZvOwogCWludAkJCWJkX3dyaXRlcnM7CiYjNDM7CS8qIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW0gcyBpcyBkaXNrIHN0cmVhbSBiZF93cml0ZV9zdHJlYW1fbWFwW3MgLSAxXSAqLwomIzQzOwl1OAkJCWJkX25yX3dyaXRlX3N0cmVhbXM7CiYjNDM7CXU4CQkJKmJkX3dyaXRlX3N0cmVhbV9tYXA7CiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCiAJdm9pZAkJCSpiZF9zZWN1cml0eTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNGY3OTA1YzM0MTJiOC4uNWQyNDFkN2IwODAyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xNzgsNiAmIzQzOzE3OCw4IEBAIHN0cnVjdCBnZW5kaXNrIHsKIAogCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwkvKiBvcGVuL2Nsb3NlIG11dGV4ICovCiAJdW5zaWduZWQgb3Blbl9wYXJ0aXRpb25zOwkvKiBudW1iZXIgb2Ygb3BlbiBwYXJ0aXRpb25zICovCiYjNDM7CS8qIHJlc2VydmVkIGJ5IHBhcnRpdGlvbnMsIGJpdCBOID0gc3RyZWFtIE4gKDAgdW51c2VkKSwgb3Blbl9tdXRleCAqLwomIzQzOwlERUNMQVJFX0JJVE1BUCh3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBVOF9NQVggJiM0MzsgMSk7CiAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbwkqYmRpOwogCXN0cnVjdCBrb2JqZWN0IHF1ZXVlX2tvYmo7CS8qIHRoZSBxdWV1ZS8gZGlyZWN0b3J5ICovCkBAIC0xMzAzLDcgJiM0MzsxMzA1LDcgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9tYXhfc2VnbWVudHMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewogCWlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gYmRldi0mZ3Q7YmRfbnJfd3JpdGVfc3RyZWFtczsKIAlyZXR1cm4gYmRldl9saW1pdHMoYmRldiktJmd0O21heF93cml0ZV9zdHJlYW1zOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjc1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCYjMzk7cyBhIHN0YW5kYXJkIGtlcm5lbCByZXZpZXcgcmVxdWVzdCwgc28gbm8gbmVlZCB0byBvdmVydGhpbmsgaXQuICBJIG5lZWQgdG8gcHJvdmlkZSBhIGBOZWVkc0tNU0FOYCBib29sZWFuIGFuZCBhIGBLTVNBTlJlYXNvbmluZ2AgZXhwbGFuYXRpb24uIEkgaGF2ZSBteSB0b29scywgYGdyZXBwZXJgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AgYXQgdGhlIHJlYWR5LgoKRmlyc3QsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSSBzZWUgYSBkb2N1bWVudGF0aW9uIHVwZGF0ZSBpbiBgRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrYCBmb3IgYHdyaXRlX3N0cmVhbXNgLCBhbmQgY2hhbmdlcyBpbiBgYmxvY2svYmRldi5jYCwgYGJsb2NrL2Jsay1jb3JlLmNgLCBhbmQgYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gIEEga2V5IGFyZWEgZm9yIEtNU0FOIGNvbmNlcm5zIGlzIG1lbW9yeSBjb3JydXB0aW9uLiAgSSBzZWUgYSBga2ZyZWVgIGNhbGwgZm9yIGBiZGV2LSZndDtiZF93cml0ZV9zdHJlYW1fbWFwYCBpbiBgYmRldl9mcmVlX2lub2RlYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYGJkZXZgIGNvbWVzIGZyb20uIFVzdWFsbHksIGl0JiMzOTtzIGVpdGhlciBgYmRldl9hbGxvY2Agb3Igc2xhYiBhbGxvY2F0aW9uLgoKTG9va2luZyBhdCBgYmxvY2svYmxrLWNvcmUuY2AsIHRoZXJlJiMzOTtzIGEgdXNlIG9mIGBiaW8tJmd0O2JpX3dyaXRlX3N0cmVhbWAgYW5kIGBwLSZndDtiZF93cml0ZV9zdHJlYW1fbWFwYCB3aXRoaW4gYGJsa19wYXJ0aXRpb25fcmVtYXBgLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIGNvZGUgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBtYXkgYmUgb3V0IG9mIGJvdW5kcyB3cml0ZXMgdGhhdCBsZWFkIHRvIGNvcnJ1cHRpb24uCgpOb3csIGBibG9jay9wYXJ0aXRpb25zL2NvcmUuY2AgY29udGFpbnMgdGhlIGNvcmUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgd2l0aCB0aGUgdXNlIG9mICBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCBgcGFydF9wdXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYC4gVGhlIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCBmdW5jdGlvbiB1c2VzIGBrbWFsbG9jYCB0byBhbGxvY2F0ZSBhIG1hcCwgYW5kIHRoZW4gY29waWVzIHNvbWUgdmFsdWVzIGZyb20gYHBhcnQtJmd0O2JkX3dyaXRlX3N0cmVhbV9tYXBgIGJlZm9yZSBwb3B1bGF0aW5nIG90aGVyIGluZGljZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYG1hcGAgaXMgZnVsbHkgaW5pdGlhbGl6ZWQuICBJJiMzOTttIHJ1bm5pbmcgdGhyb3VnaCB0aGUgbG9naWMgb2YgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgIGNhcmVmdWxseS4gIE9rYXksIEkgdGhpbmsgSSYjMzk7dmUgZ290IGl0LiBJdCBsb29rcyBsaWtlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBgbnJgIGlzIGdyZWF0ZXIgb3Igc21hbGxlciB0aGFuIGBjdXJgLCBhbGwgaW5kaWNlcyBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkIGBtYXBgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIGBzd2FwYCBhbmQgc3Vic2VxdWVudCBga2ZyZWVgLiAgU28sIHRoZXJlJiMzOTtzIG5vIG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC93cml0ZSB2dWxuZXJhYmlsaXR5IHRoZXJlLgoKTm93IGxldCYjMzk7cyBjaGVjayB0aGUgY2FsbCBzaXRlIG9mIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVgLiBUaGF0JiMzOTtzIHdoZXJlIHdlIGdldCB0aGUgdmFsdWVzIGZvciBgbnJgLiAgSXQgY2FsbHMgYGtzdHJ0b3U4YCB3aGljaCB0YWtlcyB0aGUgbnVtYmVyIGZyb20gc3lzZnMsIGFuZCB0aGVuIGNhbGxzIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYC4KCkZpbmFsbHksIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGJsb2NrX2RldmljZWAuIEkgd2lsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYGJkZXZfYWxsb2NfaW5vZGVgIGFuZCBgYmRldl9hbGxvY2AuCgpOb3cgSSBoYXZlIGEgbXVjaCBiZXR0ZXIgcGljdHVyZS4gVGhlIGNvZGUgKmRvZXMqIG1hbmlwdWxhdGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBgd3JpdGVfc3RyZWFtc2AsIGFuZCBpdCYjMzk7cyBhY2Nlc3NlZCB2aWEgc3lzZnMsIGJ1dCBpdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBzdWdnZXN0IGFuIGVhc3ktdG8tZXhwbG9pdCB2dWxuZXJhYmlsaXR5LiBUaGVyZSBpcyBhIHBvdGVudGlhbCwgaG93ZXZlciwgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiB0aGUgc3RyZWFtcyBtYXAgYW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmNvcnJlY3QgaW5wdXQgZnJvbSBzeXNmcy4KCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JkX3dyaXRlX3N0cmVhbV9tYXB8YmRldl9hbGxvY19pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2Jsb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9iZGV2LmM9NDE4PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmRldl9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xuYmxvY2svYmRldi5jLTQxOS1cbmJsb2NrL2JkZXYuYzo0MjA6c3RhdGljIHN0cnVjdCBpbm9kZSAqYmRldl9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuYmxvY2svYmRldi5jLTQyMS17XG4tLVxuYmxvY2svYmRldi5jPTQzNT1zdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5ibG9jay9iZGV2LmMtNDQwLVx0a2ZyZWUoYmRldi1cdTAwM2ViZF9tZXRhX2luZm8pO1xuYmxvY2svYmRldi5jOjQ0MTpcdGtmcmVlKGJkZXYtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCk7XG5ibG9jay9iZGV2LmMtNDQyLVx0c2VjdXJpdHlfYmRldl9mcmVlKGJkZXYpO1xuLS1cbmJsb2NrL2JkZXYuYz00NjM9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJkZXZfc29wcyA9IHtcbmJsb2NrL2JkZXYuYy00NjQtXHQuc3RhdGZzID0gc2ltcGxlX3N0YXRmcyxcbmJsb2NrL2JkZXYuYzo0NjU6XHQuYWxsb2NfaW5vZGUgPSBiZGV2X2FsbG9jX2lub2RlLFxuYmxvY2svYmRldi5jLTQ2Ni1cdC5mcmVlX2lub2RlID0gYmRldl9mcmVlX2lub2RlLFxuLS1cbmJsb2NrL2Jsay1jb3JlLmM9NjIyPXN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLWNvcmUuYy02MzgtXHRcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxuYmxvY2svYmxrLWNvcmUuYzo2Mzk6XHRcdFx0cC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2Jpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gLSAxXTtcbmJsb2NrL2Jsay1jb3JlLmMtNjQwLVx0fVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTIxOT1zdGF0aWMgdm9pZCBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI2LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGFydC1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zOyBpJiM0MzsmIzQzOylcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIyNzpcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI4LVx0XHRcdCAgICBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTIzMT1zdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjgwLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWluKGN1ciwgbnIpOyBpJiM0MzsmIzQzOylcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI4MTpcdFx0bWFwW2ldID0gcGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldO1xuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjgyLVxuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4NC1cdFx0Zm9yIChpID0gbnI7IGkgXHUwMDNjIGN1cjsgaSYjNDM7JiM0MzspXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyODU6XHRcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjg2LVx0XHRcdFx0ICAgIGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjk1LVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjk2Olx0c3dhcChwYXJ0LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXAsIG1hcCk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTctXHRwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXMgPSBucjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkyNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCBsaW5lIG9mIHRoaW5raW5nLCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhbmQgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipEZWNvbnN0cnVjdGluZyBgYmRldl9hbGxvY19pbm9kZWAgd2l0aCBSZWFkLUZpbGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBiZGV2X2FsbG9jX2lub2RlYCwgYW5kIG15IGluaXRpYWwgaW1wdWxzZSBpcyB0byBkaXZlIHJpZ2h0IGluIHdpdGggYHJlYWQtZmlsZWAuIFRoaXMgZnVuY3Rpb24sIEkga25vdywgaXMgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGJsb2NrIGRldmljZSBpbm9kZSBhbGxvY2F0aW9uIHB1enpsZS4gSSYjMzk7bSBwcm9iYWJseSBkZWFsaW5nIHdpdGggc29tZSBsZXZlbCBvZiBvbi1kaXNrIHN0cnVjdHVyZXMsIG1heWJlIGktbm9kZSBhbGxvY2F0aW9uLiBJJiMzOTttIHRoaW5raW5nIEkgY2FuIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyByZXNwb25zaWJpbGl0eSBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSBzb3VyY2Ugd2l0aCBgcmVhZC1maWxlYC4gSSYjMzk7bSBob3BpbmcgdG8gcXVpY2tseSBncmFzcCBpdHMgcm9sZSwgdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG1hbmlwdWxhdGVzLCBhbmQgcG9zc2libHkgaWRlbnRpZnkgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBzdWJ0bGUgZGVzaWduIGNob2ljZXMgYXQgcGxheS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuIExldCYjMzk7cyBnZXQgcmVhZGluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9iZGV2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQxNTpcdCAqL1xuIDQxNjpcdFxuIDQxNzpcdHN0YXRpYyAgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX01VVEVYKGJkZXZfbG9jayk7XG4gNDE4Olx0c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpiZGV2X2NhY2hlcCBfX3JvX2FmdGVyX2luaXQ7XG4gNDE5Olx0XG4gNDIwOlx0c3RhdGljIHN0cnVjdCBpbm9kZSAqYmRldl9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIDQyMTpcdHtcbiA0MjI6XHRcdHN0cnVjdCBiZGV2X2lub2RlICplaSA9IGFsbG9jX2lub2RlX3NiKHNiLCBiZGV2X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG4gNDIzOlx0XG4gNDI0Olx0XHRpZiAoIWVpKVxuIDQyNTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0MjY6XHRcdG1lbXNldChcdTAwMjZlaS1cdTAwM2ViZGV2LCAwLCBzaXplb2YoZWktXHUwMDNlYmRldikpO1xuIDQyNzpcdFxuIDQyODpcdFx0aWYgKHNlY3VyaXR5X2JkZXZfYWxsb2MoXHUwMDI2ZWktXHUwMDNlYmRldikpIHtcbiA0Mjk6XHRcdFx0a21lbV9jYWNoZV9mcmVlKGJkZXZfY2FjaGVwLCBlaSk7XG4gNDMwOlx0XHRcdHJldHVybiBOVUxMO1xuIDQzMTpcdFx0fVxuIDQzMjpcdFx0cmV0dXJuIFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZTtcbiA0MzM6XHR9XG4gNDM0Olx0XG4gNDM1Olx0c3RhdGljIHZvaWQgYmRldl9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gNDM2Olx0e1xuIDQzNzpcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IElfQkRFVihpbm9kZSk7XG4gNDM4Olx0XG4gNDM5Olx0XHRmcmVlX3BlcmNwdShiZGV2LVx1MDAzZWJkX3N0YXRzKTtcbiA0NDA6XHRcdGtmcmVlKGJkZXYtXHUwMDNlYmRfbWV0YV9pbmZvKTtcbiA0NDE6XHRcdGtmcmVlKGJkZXYtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCk7XG4gNDQyOlx0XHRzZWN1cml0eV9iZGV2X2ZyZWUoYmRldik7XG4gNDQzOlx0XG4gNDQ0Olx0XHRpZiAoIWJkZXZfaXNfcGFydGl0aW9uKGJkZXYpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NDYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHJlbGF0ZXMgdG8gdGhlIGtlcm5lbCBjb2RlOgoKKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIElub2RlIEluaXRpYWxpemF0aW9uIGFuZCBEaXNrIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBiZGV2X2FsbG9jX2lub2RlYCBhbmQgbm90aWNlZCB0aGF0IGBtZW1zZXQoJmFtcDtlaS0mZ3Q7YmRldiwgMCwgc2l6ZW9mKGVpLSZndDtiZGV2KSlgIGlzIGNhbGxlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGBiZF9ucl93cml0ZV9zdHJlYW1zYCBpcyBiZWluZyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgdG8gTlVMTC4gTWFrZXMgc2Vuc2UsIHRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJJiMzOTttIHRyeWluZyB0byB0cmFjZSB0aGUgbGlmZWN5Y2xlIGFuZCB1bmRlcnN0YW5kIHRoZSBhbGxvY2F0aW9uLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGdlbmRpc2tgIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBibG9jayBkZXZpY2UgaXMgYWxsb2NhdGVkIGFuZCBzZXQgdXAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgZ2VuZGlza2Agc3RydWN0dXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGF0JiMzOTtzIGhhbmRsZWQuIE15IG5leHQgbW92ZSBpcyB0byB1c2UgYGdyZXBgIChvciBzb21lIHNpbWlsYXIgdG9vbCwgb2J2aW91c2x5KSBhbmQgc2VhcmNoIHRoZSBjb2RlYmFzZSBmb3IgY2FsbHMgdG8gZWl0aGVyIGBhbGxvY19kaXNrYCBvciBgX19hbGxvY19kaXNrX25vZGVgLiBUaGF0IHNob3VsZCBoZWxwIG1lIHBpbnBvaW50IHdoZXJlIGFuZCBob3cgdGhlIGBnZW5kaXNrYCBzdHJ1Y3R1cmUgaXMgYmVpbmcgY3JlYXRlZCwgYW5kIHRoYXQgd2lsbCBnaXZlIG1lIGNvbnRleHQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgc3RydWN0dXJlcyBJJiMzOTttIGxvb2tpbmcgYXQgYXJlIGludGVyY29ubmVjdGVkLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MjE5PXN0YXRpYyB2b2lkIHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydClcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMjctXHRcdF9fY2xlYXJfYml0KHBhcnQtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtpXSxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIyODpcdFx0XHQgICAgZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIyOS19XG4tLVxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MjMxPXN0YXRpYyBpbnQgcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0LCB1OCBucilcbi0tXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNjktXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyNzA6XHRucl9mcmVlID0gbWF4IC0gYml0bWFwX3dlaWdodChkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsIG1heCAmIzQzOyAxKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI3MS1cdGlmIChuciBcdTAwM2UgY3VyIFx1MDAyNlx1MDAyNiBuciAtIGN1ciBcdTAwM2UgbnJfZnJlZSkge1xuLS1cbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4NS1cdFx0XHRfX2NsZWFyX2JpdChwYXJ0LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV0sXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyODY6XHRcdFx0XHQgICAgZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4Ny1cdH0gZWxzZSB7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODgtXHRcdGZvciAoaSA9IGN1cjsgaSBcdTAwM2MgbnI7IGkmIzQzOyYjNDM7KSB7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyODk6XHRcdFx0aWQgPSBmaW5kX25leHRfemVyb19iaXQoZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjkwLVx0XHRcdFx0XHRcdG1heCAmIzQzOyAxLCAxKTtcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI5MTpcdFx0XHRfX3NldF9iaXQoaWQsIGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTItXHRcdFx0bWFwW2ldID0gaWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NjQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipEaXNzZWN0aW5nIERpc2sgR2VuZXJhdGlvbiBpbiBgYmxvY2svZ2VuaGQuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgdGhlIGBnZW5kaXNrYCBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBibG9jay9nZW5oZC5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9jay4gVGhpcyBzdHJ1Y3R1cmUgaXMgY2VudHJhbCB0byBob3cgdGhlIGtlcm5lbCBtb2RlbHMgYW5kIGludGVyYWN0cyB3aXRoIGJsb2NrIGRldmljZXMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGFsbG9jYXRpb24gaXMgY3JpdGljYWwuIEtub3dpbmcgaXRzIGxpZmVjeWNsZSwgd2hlbiBpdCYjMzk7cyBjcmVhdGVkLCBwb3B1bGF0ZWQsIGFuZCB1bHRpbWF0ZWx5IHJlbGVhc2VkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3RvcmFnZSBzdWJzeXN0ZW0gZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBnZW5lcmljIGRpc2sgc3RydWN0dXJlcyBhcmUgaGFuZGxlZC4gV2hlcmUgZG9lcyBtZW1vcnkgZm9yIHRoZXNlIHN0cnVjdHVyZXMgY29tZSBmcm9tPyBBcmUgdGhleSBkeW5hbWljYWxseSBhbGxvY2F0ZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGFsbG9jYXRpb24gc3RyYXRlZ2llcz8gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiB0aGUgbG93LWxldmVsIGRpc2sgbWFuYWdlbWVudCBwcm9jZXNzLCBzbyBsZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGdlbmRpc2sgXFwqJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YmxvY2svZ2VuaGQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9nZW5oZC5jPTU3PXN0YXRpYyBERUZJTkVfSURBKGV4dF9kZXZ0X2lkYSk7XG5ibG9jay9nZW5oZC5jLTU4LVxuYmxvY2svZ2VuaGQuYzo1OTp2b2lkIHNldF9jYXBhY2l0eShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgc2VjdG9yX3Qgc2VjdG9ycylcbmJsb2NrL2dlbmhkLmMtNjAte1xuLS1cbmJsb2NrL2dlbmhkLmM9NzA9RVhQT1JUX1NZTUJPTChzZXRfY2FwYWNpdHkpO1xuLS1cbmJsb2NrL2dlbmhkLmMtNzUtICovXG5ibG9jay9nZW5oZC5jOjc2OmJvb2wgc2V0X2NhcGFjaXR5X2FuZF9ub3RpZnkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNpemUpXG5ibG9jay9nZW5oZC5jLTc3LXtcbi0tXG5ibG9jay9nZW5oZC5jPTMzNz12b2lkIGJsa19mcmVlX2V4dF9taW5vcih1bnNpZ25lZCBpbnQgbWlub3IpXG4tLVxuYmxvY2svZ2VuaGQuYy0zNDEtXG5ibG9jay9nZW5oZC5jOjM0Mjp2b2lkIGRpc2tfdWV2ZW50KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBlbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbilcbmJsb2NrL2dlbmhkLmMtMzQzLXtcbi0tXG5ibG9jay9nZW5oZC5jPTM2MT1FWFBPUlRfU1lNQk9MX0dQTChkaXNrX3VldmVudCk7XG5ibG9jay9nZW5oZC5jLTM2Mi1cbmJsb2NrL2dlbmhkLmM6MzYzOmludCBkaXNrX3NjYW5fcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxuYmxvY2svZ2VuaGQuYy0zNjQte1xuLS1cbmJsb2NrL2dlbmhkLmMtNDA0LVxuYmxvY2svZ2VuaGQuYzo0MDU6c3RhdGljIHZvaWQgYWRkX2Rpc2tfZmluYWwoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9nZW5oZC5jLTQwNi17XG4tLVxuYmxvY2svZ2VuaGQuYy00MjYtXG5ibG9jay9nZW5oZC5jOjQyNzpzdGF0aWMgaW50IF9fYWRkX2Rpc2soc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbmJsb2NrL2dlbmhkLmMtNDI4LVx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzLFxuLS1cbmJsb2NrL2dlbmhkLmMtNTg3LSAqL1xuYmxvY2svZ2VuaGQuYzo1ODg6aW50IF9fbXVzdF9jaGVjayBhZGRfZGlza19md25vZGUoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayxcbmJsb2NrL2dlbmhkLmMtNTg5LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipncm91cHMsXG4tLVxuYmxvY2svZ2VuaGQuYz02MTY9RVhQT1JUX1NZTUJPTF9HUEwoYWRkX2Rpc2tfZndub2RlKTtcbi0tXG5ibG9jay9nZW5oZC5jLTYyNi0gKi9cbmJsb2NrL2dlbmhkLmM6NjI3OmludCBfX211c3RfY2hlY2sgZGV2aWNlX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXG5ibG9jay9nZW5oZC5jLTYyOC1cdFx0XHRcdCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzKVxuLS1cbmJsb2NrL2dlbmhkLmM9NjMyPUVYUE9SVF9TWU1CT0woZGV2aWNlX2FkZF9kaXNrKTtcbmJsb2NrL2dlbmhkLmMtNjMzLVxuYmxvY2svZ2VuaGQuYzo2MzQ6c3RhdGljIHZvaWQgYmxrX3JlcG9ydF9kaXNrX2RlYWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgc3VycHJpc2UpXG5ibG9jay9nZW5oZC5jLTYzNS17XG4tLVxuYmxvY2svZ2VuaGQuYy02NTktXG5ibG9jay9nZW5oZC5jOjY2MDpzdGF0aWMgYm9vbCBfX2Jsa19tYXJrX2Rpc2tfZGVhZChzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbmJsb2NrL2dlbmhkLmMtNjYxLXtcbi0tXG5ibG9jay9nZW5oZC5jLTY4OC0gKi9cbmJsb2NrL2dlbmhkLmM6Njg5OnZvaWQgYmxrX21hcmtfZGlza19kZWFkKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svZ2VuaGQuYy02OTAte1xuLS1cbmJsb2NrL2dlbmhkLmM9Njk1PUVYUE9SVF9TWU1CT0xfR1BMKGJsa19tYXJrX2Rpc2tfZGVhZCk7XG5ibG9jay9nZW5oZC5jLTY5Ni1cbmJsb2NrL2dlbmhkLmM6Njk3OnN0YXRpYyB2b2lkIF9fZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9nZW5oZC5jLTY5OC17XG4tLVxuYmxvY2svZ2VuaGQuYz03ODQ9c3RhdGljIHZvaWQgZGlzYWJsZV9lbHZfc3dpdGNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKVxuLS1cbmJsb2NrL2dlbmhkLmMtODEyLSAqL1xuYmxvY2svZ2VuaGQuYzo4MTM6dm9pZCBkZWxfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbmJsb2NrL2dlbmhkLmMtODE0LXtcbi0tXG5ibG9jay9nZW5oZC5jPTgzMj1FWFBPUlRfU1lNQk9MKGRlbF9nZW5kaXNrKTtcbi0tXG5ibG9jay9nZW5oZC5jLTg0My0gKi9cbmJsb2NrL2dlbmhkLmM6ODQ0OnZvaWQgaW52YWxpZGF0ZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxuYmxvY2svZ2VuaGQuYy04NDUte1xuLS1cbmJsb2NrL2dlbmhkLmM9ODU1PXN0YXRpYyBzc2l6ZV90IGRpc2tfYmFkYmxvY2tzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtODU4LXtcbmJsb2NrL2dlbmhkLmM6ODU5Olx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xuYmxvY2svZ2VuaGQuYy04NjAtXG4tLVxuYmxvY2svZ2VuaGQuYz04Njc9c3RhdGljIHNzaXplX3QgZGlza19iYWRibG9ja3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtODcwLXtcbmJsb2NrL2dlbmhkLmM6ODcxOlx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xuYmxvY2svZ2VuaGQuYy04NzItXG4tLVxuYmxvY2svZ2VuaGQuYz05NzA9c3RhdGljIGludCBzaG93X3BhcnRpdGlvbihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXG5ibG9jay9nZW5oZC5jLTk3MS17XG5ibG9jay9nZW5oZC5jOjk3MjpcdHN0cnVjdCBnZW5kaXNrICpzZ3AgPSB2O1xuYmxvY2svZ2VuaGQuYy05NzMtXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0O1xuLS1cbmJsb2NrL2dlbmhkLmM9MTAxNz1zdGF0aWMgc3NpemVfdCBkaXNrX3JhbmdlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtMTAxOS17XG5ibG9jay9nZW5oZC5jOjEwMjA6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XG5ibG9jay9nZW5oZC5jLTEwMjEtXG4tLVxuYmxvY2svZ2VuaGQuYz0xMDI1PXN0YXRpYyBzc2l6ZV90IGRpc2tfZXh0X3JhbmdlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtMTAyNy17XG5ibG9jay9nZW5oZC5jOjEwMjg6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XG5ibG9jay9nZW5oZC5jLTEwMjktXG4tLVxuYmxvY2svZ2VuaGQuYz0xMDM0PXN0YXRpYyBzc2l6ZV90IGRpc2tfcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtMTAzNi17XG5ibG9jay9nZW5oZC5jOjEwMzc6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XG5ibG9jay9nZW5oZC5jLTEwMzgtXG4tLVxuYmxvY2svZ2VuaGQuYz0xMDQzPXN0YXRpYyBzc2l6ZV90IGRpc2tfaGlkZGVuX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtMTA0NS17XG5ibG9jay9nZW5oZC5jOjEwNDY6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XG5ibG9jay9nZW5oZC5jLTEwNDctXG4tLVxuYmxvY2svZ2VuaGQuYz0xMDUyPXN0YXRpYyBzc2l6ZV90IGRpc2tfcm9fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYmxvY2svZ2VuaGQuYy0xMDU0LXtcbmJsb2NrL2dlbmhkLmM6MTA1NTpcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcbmJsb2NrL2dlbmhkLmMtMTA1Ni1cbi0tXG5ibG9jay9nZW5oZC5jPTExMzQ9c3RhdGljIHNzaXplX3QgZGlza19hbGlnbm1lbnRfb2Zmc2V0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmJsb2NrL2dlbmhkLmMtMTEzNy17XG5ibG9jay9nZW5oZC5jOjExMzg6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XG5ibG9jay9nZW5oZC5jLTExMzktXG4tLVxuYmxvY2svZ2VuaGQuYz0xMTQzPXN0YXRpYyBzc2l6ZV90IGRpc2tfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuYmxvY2svZ2VuaGQuYy0xMTQ2LXtcbmJsb2NrL2dlbmhkLmM6MTE0NzpcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcbmJsb2NrL2dlbmhkLmMtMTE0OC1cbi0tXG5ibG9jay9nZW5oZC5jPTExNTI9c3RhdGljIHNzaXplX3QgZGlza3NlcV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5ibG9jay9nZW5oZC5jLTExNTQte1xuYmxvY2svZ2VuaGQuYzoxMTU1Olx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xuYmxvY2svZ2VuaGQuYy0xMTU2LVxuLS1cbmJsb2NrL2dlbmhkLmM9MTI0MD1zdGF0aWMgdW1vZGVfdCBkaXNrX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBuKVxuLS1cbmJsb2NrL2dlbmhkLmMtMTI0Mi1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCB0eXBlb2YoKmRldiksIGtvYmopO1xuYmxvY2svZ2VuaGQuYzoxMjQzOlx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xuYmxvY2svZ2VuaGQuYy0xMjQ0LVxuLS1cbmJsb2NrL2dlbmhkLmM9MTI4MD1zdGF0aWMgdm9pZCBkaXNrX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuYmxvY2svZ2VuaGQuYy0xMjgxLXtcbmJsb2NrL2dlbmhkLmM6MTI4MjpcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcbmJsb2NrL2dlbmhkLmMtMTI4My1cbi0tXG5ibG9jay9nZW5oZC5jPTEzMjQ9c3RhdGljIGludCBibG9ja191ZXZlbnQoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpXG5ibG9jay9nZW5oZC5jLTEzMjUte1xuYmxvY2svZ2VuaGQuYzoxMzI2Olx0Y29uc3Qgc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xuYmxvY2svZ2VuaGQuYy0xMzI3LVxuLS1cbmJsb2NrL2dlbmhkLmM9MTMzNj1zdGF0aWMgY2hhciAqYmxvY2tfZGV2bm9kZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHVtb2RlX3QgKm1vZGUsXG4tLVxuYmxvY2svZ2VuaGQuYy0xMzM4LXtcbmJsb2NrL2dlbmhkLmM6MTMzOTpcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcbmJsb2NrL2dlbmhkLmMtMTM0MC1cbi0tXG5ibG9jay9nZW5oZC5jPTEzNjE9c3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXG5ibG9jay9nZW5oZC5jLTEzNjIte1xuYmxvY2svZ2VuaGQuYzoxMzYzOlx0c3RydWN0IGdlbmRpc2sgKmdwID0gdjtcbmJsb2NrL2dlbmhkLmMtMTM2NC1cdHN0cnVjdCBibG9ja19kZXZpY2UgKmhkO1xuLS1cbmJsb2NrL2dlbmhkLmM9MTQzNz1tb2R1bGVfaW5pdChwcm9jX2dlbmhkX2luaXQpO1xuLS1cbmJsb2NrL2dlbmhkLmMtMTQzOS1cbmJsb2NrL2dlbmhkLmM6MTQ0MDpkZXZfdCBwYXJ0X2RldnQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHU4IHBhcnRubylcbmJsb2NrL2dlbmhkLmMtMTQ0MS17XG4tLVxuYmxvY2svZ2VuaGQuYy0xNDUzLVxuYmxvY2svZ2VuaGQuYzoxNDU0OnN0cnVjdCBnZW5kaXNrICpfX2FsbG9jX2Rpc2tfbm9kZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IG5vZGVfaWQsXG5ibG9jay9nZW5oZC5jLTE0NTUtXHRcdHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqbGtjbGFzcylcbmJsb2NrL2dlbmhkLmMtMTQ1Ni17XG5ibG9jay9nZW5oZC5jOjE0NTc6XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaztcbmJsb2NrL2dlbmhkLmMtMTQ1OC1cbi0tXG5ibG9jay9nZW5oZC5jLTE1MTktXG5ibG9jay9nZW5oZC5jOjE1MjA6c3RydWN0IGdlbmRpc2sgKl9fYmxrX2FsbG9jX2Rpc2soc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBpbnQgbm9kZSxcbmJsb2NrL2dlbmhkLmMtMTUyMS1cdFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxuLS1cbmJsb2NrL2dlbmhkLmMtMTUyNC1cdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xuYmxvY2svZ2VuaGQuYzoxNTI1Olx0c3RydWN0IGdlbmRpc2sgKmRpc2s7XG5ibG9jay9nZW5oZC5jLTE1MjYtXG4tLVxuYmxvY2svZ2VuaGQuYz0xNTM5PUVYUE9SVF9TWU1CT0woX19ibGtfYWxsb2NfZGlzayk7XG4tLVxuYmxvY2svZ2VuaGQuYy0xNTUzLSAqL1xuYmxvY2svZ2VuaGQuYzoxNTU0OnZvaWQgcHV0X2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9nZW5oZC5jLTE1NTUte1xuLS1cbmJsb2NrL2dlbmhkLmM9MTU1OT1FWFBPUlRfU1lNQk9MKHB1dF9kaXNrKTtcbmJsb2NrL2dlbmhkLmMtMTU2MC1cbmJsb2NrL2dlbmhkLmM6MTU2MTpzdGF0aWMgdm9pZCBzZXRfZGlza19yb191ZXZlbnQoc3RydWN0IGdlbmRpc2sgKmdkLCBpbnQgcm8pXG5ibG9jay9nZW5oZC5jLTE1NjIte1xuLS1cbmJsb2NrL2dlbmhkLmMtMTU3OS0gKi9cbmJsb2NrL2dlbmhkLmM6MTU4MDp2b2lkIHNldF9kaXNrX3JvKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBib29sIHJlYWRfb25seSlcbmJsb2NrL2dlbmhkLmMtMTU4MS17XG4tLVxuYmxvY2svZ2VuaGQuYz0xNTkxPUVYUE9SVF9TWU1CT0woc2V0X2Rpc2tfcm8pO1xuYmxvY2svZ2VuaGQuYy0xNTkyLVxuYmxvY2svZ2VuaGQuYzoxNTkzOnZvaWQgaW5jX2Rpc2tzZXEoc3RydWN0IGdlbmRpc2sgKmRpc2spXG5ibG9jay9nZW5oZC5jLTE1OTQte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjc4MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYF9fYWxsb2NfZGlza19ub2RlYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBfX2FsbG9jX2Rpc2tfbm9kZWAsIHNwZWNpZmljYWxseSBpbiBgYmxvY2svZ2VuaGQuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZXNlIGRpc2sgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgYXQgYSBsb3cgbGV2ZWwuIFRoaXMgZnVuY3Rpb24gaXMgZnVuZGFtZW50YWwsIG9idmlvdXNseSwgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZGV0YWlscywgZXNwZWNpYWxseSBhbnkgbnVhbmNlcyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLCBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggbW9kZXJuIHN0b3JhZ2UgZGV2aWNlcyBvciBhZHZhbmNlZCBxdWV1ZWluZyBtZWNoYW5pc21zLiBJJiMzOTttIHBhcnRpY3VsYXJseSBjdXJpb3VzIGFib3V0IGhvdyBpdCBoYW5kbGVzIHRoZSBpbml0aWFsIG1lbW9yeSBhbGxvY2F0aW9uLCB0aGUgYXNzaWdubWVudCBvZiBkZXZpY2UgbnVtYmVycywgYW5kIHRoZSBzZXR0aW5nIG9mIGJhc2ljIGF0dHJpYnV0ZXMgbGlrZSB0aGUgbmFtZSBhbmQgbWFqb3IvbWlub3IgbnVtYmVycy4gSXQmIzM5O3MgYWxzbyB3b3J0aCBzZWVpbmcgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBvciBob29rcyB0aGF0IGFyZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYWxsb2NhdGlvbi4gSeKAmW0gdGhpbmtpbmcgdGhlcmUgbWlnaHQgYmUgdXNlZnVsIGNsdWVzIGFib3V0IGhvdHBsdWcgc3VwcG9ydCwgb3IgcGVyaGFwcyBoaW50cyByZWxhdGluZyB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHNoYXJlZCByZXNvdXJjZXMgb24gdGhlIGRpc2suIFVsdGltYXRlbHksIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBgZ2VuZGlza2Agc3RydWN0dXJlIGlzIGJlaW5nIHNldCB1cCBiZWZvcmUgaXQmIzM5O3MgcGFzc2VkIG9mZiBmb3IgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gc3RhcnQgc2Nyb2xsaW5nIHRocm91Z2ggdGhlIGNvZGUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtibG9jay9nZW5oZC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDU0Olx0c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcbjE0NTU6XHRcdFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxuMTQ1NjpcdHtcbjE0NTc6XHRcdHN0cnVjdCBnZW5kaXNrICpkaXNrO1xuMTQ1ODpcdFxuMTQ1OTpcdFx0ZGlzayA9IGt6YWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IGdlbmRpc2spLCBHRlBfS0VSTkVMLCBub2RlX2lkKTtcbjE0NjA6XHRcdGlmICghZGlzaylcbjE0NjE6XHRcdFx0cmV0dXJuIE5VTEw7XG4xNDYyOlx0XG4xNDYzOlx0XHRpZiAoYmlvc2V0X2luaXQoXHUwMDI2ZGlzay1cdTAwM2ViaW9fc3BsaXQsIEJJT19QT09MX1NJWkUsIDAsIDApKVxuMTQ2NDpcdFx0XHRnb3RvIG91dF9mcmVlX2Rpc2s7XG4xNDY1Olx0XG4xNDY2Olx0XHRkaXNrLVx1MDAzZWJkaSA9IGJkaV9hbGxvYyhub2RlX2lkKTtcbjE0Njc6XHRcdGlmICghZGlzay1cdTAwM2ViZGkpXG4xNDY4Olx0XHRcdGdvdG8gb3V0X2ZyZWVfYmlvc2V0O1xuMTQ2OTpcdFxuMTQ3MDpcdFx0LyogYmRldl9hbGxvYygpIG1pZ2h0IG5lZWQgdGhlIHF1ZXVlLCBzZXQgYmVmb3JlIHRoZSBmaXJzdCBjYWxsICovXG4xNDcxOlx0XHRkaXNrLVx1MDAzZXF1ZXVlID0gcTtcbjE0NzI6XHRcbjE0NzM6XHRcdGRpc2stXHUwMDNlcGFydDAgPSBiZGV2X2FsbG9jKGRpc2ssIDApO1xuMTQ3NDpcdFx0aWYgKCFkaXNrLVx1MDAzZXBhcnQwKVxuMTQ3NTpcdFx0XHRnb3RvIG91dF9mcmVlX2JkaTtcbjE0NzY6XHRcbjE0Nzc6XHRcdGRpc2stXHUwMDNlbm9kZV9pZCA9IG5vZGVfaWQ7XG4xNDc4Olx0XHRtdXRleF9pbml0KFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4xNDc5Olx0XHR4YV9pbml0KFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwpO1xuMTQ4MDpcdFx0aWYgKHhhX2luc2VydChcdTAwMjZkaXNrLVx1MDAzZXBhcnRfdGJsLCAwLCBkaXNrLVx1MDAzZXBhcnQwLCBHRlBfS0VSTkVMKSlcbjE0ODE6XHRcdFx0Z290byBvdXRfZGVzdHJveV9wYXJ0X3RibDtcbjE0ODI6XHRcbjE0ODM6XHRcdGlmIChibGtjZ19pbml0X2Rpc2soZGlzaykpXG4xNDg0Olx0XHRcdGdvdG8gb3V0X2VyYXNlX3BhcnQwO1xuMTQ4NTpcdFxuMTQ4NjpcdFx0ZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKGRpc2spO1xuMTQ4NzpcdFx0cmFuZF9pbml0aWFsaXplX2Rpc2soZGlzayk7XG4xNDg4Olx0XHRkaXNrX3RvX2RldihkaXNrKS1cdTAwM2VjbGFzcyA9IFx1MDAyNmJsb2NrX2NsYXNzO1xuMTQ4OTpcdFx0ZGlza190b19kZXYoZGlzayktXHUwMDNldHlwZSA9IFx1MDAyNmRpc2tfdHlwZTtcbjE0OTA6XHRcdGRldmljZV9pbml0aWFsaXplKGRpc2tfdG9fZGV2KGRpc2spKTtcbjE0OTE6XHRcdGluY19kaXNrc2VxKGRpc2spO1xuMTQ5MjpcdFx0cS1cdTAwM2VkaXNrID0gZGlzaztcbjE0OTM6XHRcdGxvY2tkZXBfaW5pdF9tYXAoXHUwMDI2ZGlzay1cdTAwM2Vsb2NrZGVwX21hcCwgXCYjMzQ7KGJpbyBjb21wbGV0aW9uKVwmIzM0OywgbGtjbGFzcywgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA3OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzM0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCB3aXRoaW4gdGhlIEtlcm5lbCYjMzk7cyBEaXNrIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBnZW5kaXNrYCBzdHJ1Y3R1cmUgYW5kIGhvdyBpdCBoYW5kbGVzIHdyaXRlIHN0cmVhbXMuIEkga25vdyB0aGF0IGBremFsbG9jX25vZGVgIGlzIHVzZWQgZm9yIGFsbG9jYXRpb24sIG1lYW5pbmcgdGhhdCBgZGlzay0mZ3Q7d3JpdGVfc3RyZWFtc19yZXNlcnZlZGAgZ2V0cyBpbml0aWFsaXplZCB0byBhbGwgemVyb3MgcmlnaHQgb2ZmIHRoZSBiYXQuIFRoYXQmIzM5O3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFuZCBpdCYjMzk7cyBhIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGBiaW9fd3JpdGVfc3RyZWFtYCBhbmQgaG93IHRoZSBrZXJuZWwgYWN0dWFsbHkgdXRpbGl6ZXMgaXQuIEkgc3VzcGVjdCB0aGVyZSYjMzk7cyBhIGNvbm5lY3Rpb24gdG8gY29uY3VycmVuY3kgb3IgcGVyaGFwcyBJL08gcHJpb3JpdGl6YXRpb24uIFRpbWUgdG8gZ2V0IHNvbWUgYW5zd2Vycy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIChvciBteSBwcmVmZXJyZWQgdG9vbCkgdG8gcGlucG9pbnQgd2hlcmUgYGJpX3dyaXRlX3N0cmVhbWAgaXMgYmVpbmcgbWFuaXB1bGF0ZWQgYW5kIGhvdyBgYmRldl9tYXhfd3JpdGVfc3RyZWFtc2AgZmlndXJlcyBpbnRvIGFsbCBvZiB0aGlzLiBUaGlzIGlzIHRoZSBrZXkuIFRob3NlIHR3byBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBsb2dpYyB0byB1bmRlcnN0YW5kIHRoZSByZXNlcnZhdGlvbiBhbmQgdXNhZ2UgcGF0dGVybnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaV93cml0ZV9zdHJlYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtibG9jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmlvLmM9MjE3PXZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvX3ZlYyAqdGFibGUsXG4tLVxuYmxvY2svYmlvLmMtMjI1LVx0YmlvLVx1MDAzZWJpX3dyaXRlX2hpbnQgPSAwO1xuYmxvY2svYmlvLmM6MjI2Olx0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IDA7XG5ibG9jay9iaW8uYy0yMjctXHRiaW8tXHUwMDNlYmlfc3RhdHVzID0gMDtcbi0tXG5ibG9jay9iaW8uYz04NTY9c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcbi0tXG5ibG9jay9iaW8uYy04NjAtXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IGJpb19zcmMtXHUwMDNlYmlfd3JpdGVfaGludDtcbmJsb2NrL2Jpby5jOjg2MTpcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBiaW9fc3JjLVx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcbmJsb2NrL2Jpby5jLTg2Mi1cdGJpby1cdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVx1MDAzZWJpX2J2ZWNfZ2FwX2JpdDtcbi0tXG5ibG9jay9ibGstY29yZS5jPTYyMj1zdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxuLS1cbmJsb2NrL2Jsay1jb3JlLmMtNjMzLVx0fVxuYmxvY2svYmxrLWNvcmUuYzo2MzQ6XHRpZiAoYmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSBcdTAwMjZcdTAwMjYgYmlvX29wKGJpbykgPT0gUkVRX09QX1dSSVRFKSB7XG5ibG9jay9ibGstY29yZS5jOjYzNTpcdFx0aWYgKHVubGlrZWx5KGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gXHUwMDNlIHAtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcykpXG5ibG9jay9ibGstY29yZS5jLTYzNi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbmJsb2NrL2Jsay1jb3JlLmMtNjM3LVxuYmxvY2svYmxrLWNvcmUuYzo2Mzg6XHRcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxuYmxvY2svYmxrLWNvcmUuYzo2Mzk6XHRcdFx0cC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2Jpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gLSAxXTtcbmJsb2NrL2Jsay1jb3JlLmMtNjQwLVx0fVxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxuLS1cbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xODctXHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludFx0PSBiaW9fc3JjLVx1MDAzZWJpX3dyaXRlX2hpbnQ7XG5ibG9jay9ibGstY3J5cHRvLWZhbGxiYWNrLmM6MTg4Olx0YmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbVx0PSBiaW9fc3JjLVx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xODktXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3JcdD0gYmlvX3NyYy1cdTAwM2ViaV9pdGVyLmJpX3NlY3Rvcjtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz03NzQ9c3RhdGljIHN0cnVjdCByZXF1ZXN0ICphdHRlbXB0X21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxuLS1cbmJsb2NrL2Jsay1tZXJnZS5jLTc4NC1cdFx0cmV0dXJuIE5VTEw7XG5ibG9jay9ibGstbWVyZ2UuYzo3ODU6XHRpZiAocmVxLVx1MDAzZWJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gIT0gbmV4dC1cdTAwM2ViaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtKVxuYmxvY2svYmxrLW1lcmdlLmMtNzg2LVx0XHRyZXR1cm4gTlVMTDtcbi0tXG5ibG9jay9ibGstbWVyZ2UuYz04OTU9Ym9vbCBibGtfcnFfbWVyZ2Vfb2soc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pXG4tLVxuYmxvY2svYmxrLW1lcmdlLmMtOTEwLVx0XHRyZXR1cm4gZmFsc2U7XG5ibG9jay9ibGstbWVyZ2UuYzo5MTE6XHRpZiAocnEtXHUwMDNlYmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbSAhPSBiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtKVxuYmxvY2svYmxrLW1lcmdlLmMtOTEyLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYmxvY2svZm9wcy5jPTU1PXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxuLS1cbmJsb2NrL2ZvcHMuYy04MS1cdGJpby5iaV93cml0ZV9oaW50ID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApLVx1MDAzZWlfd3JpdGVfaGludDtcbmJsb2NrL2ZvcHMuYzo4MjpcdGJpby5iaV93cml0ZV9zdHJlYW0gPSBpb2NiLVx1MDAzZWtpX3dyaXRlX3N0cmVhbTtcbmJsb2NrL2ZvcHMuYy04My1cdGJpby5iaV9pb3ByaW8gPSBpb2NiLVx1MDAzZWtpX2lvcHJpbztcbi0tXG5ibG9jay9mb3BzLmM9MTc1PXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5ibG9jay9mb3BzLmMtMjEzLVx0XHRiaW8tXHUwMDNlYmlfd3JpdGVfaGludCA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKS1cdTAwM2VpX3dyaXRlX2hpbnQ7XG5ibG9jay9mb3BzLmM6MjE0Olx0XHRiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gaW9jYi1cdTAwM2VraV93cml0ZV9zdHJlYW07XG5ibG9jay9mb3BzLmMtMjE1LVx0XHRiaW8tXHUwMDNlYmlfcHJpdmF0ZSA9IGRpbztcbi0tXG5ibG9jay9mb3BzLmM9MzIyPXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19hc3luYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4tLVxuYmxvY2svZm9wcy5jLTM0MC1cdGJpby1cdTAwM2ViaV93cml0ZV9oaW50ID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApLVx1MDAzZWlfd3JpdGVfaGludDtcbmJsb2NrL2ZvcHMuYzozNDE6XHRiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gaW9jYi1cdTAwM2VraV93cml0ZV9zdHJlYW07XG5ibG9jay9mb3BzLmMtMzQyLVx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGJsa2Rldl9iaW9fZW5kX2lvX2FzeW5jO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMwOQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYGJkZXZfbWF4X3dyaXRlX3N0cmVhbXNgIFVzYWdlIEFjcm9zcyB0aGUgS2VybmVsKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgYGJkZXZfbWF4X3dyaXRlX3N0cmVhbXNgIGlzIGFjdHVhbGx5ICp1c2VkKiB0aHJvdWdob3V0IHRoZSBrZXJuZWwuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdHJhY2luZyBpdHMgY2FsbGVycy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dHMgd2hlcmUgaXRzIHZhbHVlIGlzIGJlaW5nIHNldCwgcmVhZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksICphY3RlZCB1cG9uKiBpcyBjcml0aWNhbC4gSSYjMzk7bSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGlmIHdlIHdlcmUgdG8gYWRqdXN0IGl0LCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGluZm9ybSBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcy4gVGhpcyBpc24mIzM5O3QganVzdCBhYm91dCBmaW5kaW5nIHRoZSBmdW5jdGlvbnMgdGhhdCAqY2FsbCogaXQ7IEkmIzM5O20gYWZ0ZXIgdGhlICpzZW1hbnRpY3MqIG9mIHRob3NlIGNhbGxzLiBXaGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRob3NlIHJlYWRzIGFuZCB3cml0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyB3aGVyZSB0aGUgY3VycmVudCB2YWx1ZSBtaWdodCBiZSBvdmVybHkgY29uc2VydmF0aXZlIG9yLCBjb252ZXJzZWx5LCB0b28gYWdncmVzc2l2ZT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRlcmVzdGluZyBwYXR0ZXJucyB0byBlbWVyZ2UsIHBlcmhhcHMgcmV2ZWFsaW5nIGJvdHRsZW5lY2tzIG9yIGFyZWFzIHJpcGUgZm9yIHR1bmluZy4gSSYjMzk7bGwgYmUga2VlcGluZyBhIGtlZW4gZXllIG91dCBmb3IgYW55IHVudXN1YWwgb3IgdW5leHBlY3RlZCBpbnRlcmFjdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoIHJlc3BlY3QgdG8gY29uY3VycmVuY3kgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIFRoaXMgYW5hbHlzaXMgaXMgZnVuZGFtZW50YWwgYmVmb3JlIEkgY29uc2lkZXIgY2hhbmdlcyB0byB0aGUgc2V0dGluZyYjMzk7cyB2YWx1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmRldl9tYXhfd3JpdGVfc3RyZWFtcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtibG9jay9mb3BzLmM9Mzk0PXN0YXRpYyBzc2l6ZV90IGJsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuYmxvY2svZm9wcy5jLTQwNS1cdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSkge1xuYmxvY2svZm9wcy5jOjQwNjpcdFx0dTE2IG1heF93cml0ZV9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcbmJsb2NrL2ZvcHMuYy00MDctXG4tLVxuZnMvZjJmcy9maWxlLmM9NTQ2ND1zdGF0aWMgYm9vbCBmMmZzX3ZhbGlkX3dyaXRlX3N0cmVhbShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHU4IHdyaXRlX3N0cmVhbSlcbi0tXG5mcy9mMmZzL2ZpbGUuYy01NDcwLVx0aWYgKCFmMmZzX2lzX211bHRpX2RldmljZShzYmkpKVxuZnMvZjJmcy9maWxlLmM6NTQ3MTpcdFx0cmV0dXJuIHdyaXRlX3N0cmVhbSBcdTAwM2M9IGJkZXZfbWF4X3dyaXRlX3N0cmVhbXMoc2JpLVx1MDAzZXNiLVx1MDAzZXNfYmRldik7XG5mcy9mMmZzL2ZpbGUuYy01NDcyLVxuZnMvZjJmcy9maWxlLmMtNTQ3My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNiaS1cdTAwM2VzX25kZXZzOyBpJiM0MzsmIzQzOylcbmZzL2YyZnMvZmlsZS5jOjU0NzQ6XHRcdGlmICh3cml0ZV9zdHJlYW0gXHUwMDNlIGJkZXZfbWF4X3dyaXRlX3N0cmVhbXMoRkRFVihpKS5iZGV2KSlcbmZzL2YyZnMvZmlsZS5jLTU0NzUtXHRcdFx0cmV0dXJuIGZhbHNlO1xuLS1cbmZzL2YyZnMvc2VnbWVudC5jPTM3NDI9dTggZjJmc19pb190eXBlX3RvX3dyaXRlX3N0cmVhbShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmZzL2YyZnMvc2VnbWVudC5jLTM3NDQte1xuZnMvZjJmcy9zZWdtZW50LmM6Mzc0NTpcdHVuc2lnbmVkIHNob3J0IG5yID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcbmZzL2YyZnMvc2VnbWVudC5jLTM3NDYtXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaD0xMzAwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJkZXZfbWF4X3NlZ21lbnRzKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXG4tLVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMzA0LVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaDoxMzA1OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMzA2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgRmlsZXN5c3RlbSBPcGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gYSBmaWxlc3lzdGVtIGlzc3VlLCBhbmQgbXkgaW50dWl0aW9uIGlzIGxlYWRpbmcgbWUgdG8gdGhlIGBibG9jay9mb3BzLmNgIGZpbGUuIFRoaXMgc2VlbXMgbGlrZSBhIGxpa2VseSBsb2NhdGlvbiBmb3Igc29tZSBjb3JlIGJsb2NrIGRldmljZSBmaWxlIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGxpbmUgNDA1IG1pZ2h0IGhvbGQgc29tZSBjbHVlIOKAkyBwZXJoYXBzIGEgY3J1Y2lhbCBmdW5jdGlvbiBjYWxsLCBhIHBvdGVudGlhbCBlcnJvciBjaGVjaywgb3Igc29tZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24uIExldCBtZSB6ZXJvIGluIG9uIHRoYXQgc2VjdGlvbiBhbmQgc2VlIHdoYXQgaXQgcmV2ZWFscy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgcmVsYXRlZCB0byB0aGUgY3VycmVudCBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwNzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2Jsb2NrL2ZvcHMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XHRcdHJldHVybiAwO1xuIDQwMTpcdFxuIDQwMjpcdFx0aWYgKGJsa2Rldl9kaW9faW52YWxpZChiZGV2LCBpb2NiLCBpdGVyKSlcbiA0MDM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDA0Olx0XG4gNDA1Olx0XHRpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUpIHtcbiA0MDY6XHRcdFx0dTE2IG1heF93cml0ZV9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcbiA0MDc6XHRcbiA0MDg6XHRcdFx0aWYgKGlvY2ItXHUwMDNla2lfd3JpdGVfc3RyZWFtKSB7XG4gNDA5Olx0XHRcdFx0aWYgKGlvY2ItXHUwMDNla2lfd3JpdGVfc3RyZWFtIFx1MDAzZSBtYXhfd3JpdGVfc3RyZWFtcylcbiA0MTA6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQxMTpcdFx0XHR9IGVsc2UgaWYgKG1heF93cml0ZV9zdHJlYW1zKSB7XG4gNDEyOlx0XHRcdFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQgPVxuIDQxMzpcdFx0XHRcdFx0ZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApLVx1MDAzZWlfd3JpdGVfaGludDtcbiA0MTQ6XHRcbiA0MTU6XHRcdFx0XHQvKlxuIDQxNjpcdFx0XHRcdCAqIEp1c3QgdXNlIHRoZSB3cml0ZSBoaW50IGFzIHdyaXRlIHN0cmVhbSBmb3IgYmxvY2tcbiA0MTc6XHRcdFx0XHQgKiBkZXZpY2Ugd3JpdGVzLiAgVGhpcyBhc3N1bWVzIG5vIGZpbGUgc3lzdGVtIGlzXG4gNDE4Olx0XHRcdFx0ICogbW91bnRlZCB0aGF0IHdvdWxkIHVzZSB0aGUgc3RyZWFtcyBkaWZmZXJlbnRseS5cbiA0MTk6XHRcdFx0XHQgKi9cbiA0MjA6XHRcdFx0XHRpZiAod3JpdGVfaGludCBcdTAwM2M9IG1heF93cml0ZV9zdHJlYW1zKVxuIDQyMTpcdFx0XHRcdFx0aW9jYi1cdTAwM2VraV93cml0ZV9zdHJlYW0gPSB3cml0ZV9oaW50O1xuIDQyMjpcdFx0XHR9XG4gNDIzOlx0XHR9XG4gNDI0Olx0XG4gNDI1Olx0XHRucl9wYWdlcyA9IGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MgJiM0MzsgMSk7XG4gNDI2Olx0XHRpZiAobGlrZWx5KG5yX3BhZ2VzIFx1MDAzYz0gQklPX01BWF9WRUNTIFx1MDAyNlx1MDAyNlxuIDQyNzpcdFx0XHQgICAhKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfSEFTX01FVEFEQVRBKSkpIHtcbiA0Mjg6XHRcdFx0aWYgKGlzX3N5bmNfa2lvY2IoaW9jYikpXG4gNDI5Olx0XHRcdFx0cmV0dXJuIF9fYmxrZGV2X2RpcmVjdF9JT19zaW1wbGUoaW9jYiwgaXRlciwgYmRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4NzIKCQkJCQkJCW91dHB1dDogMzUxCgkJCQkJCQl0aG91Z2h0czogMTU5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBbmFseXNpcyBvZiBXcml0ZSBTdHJlYW1zIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24gZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWluZyBjaGFuZ2VkLiBUaGUgcGF0Y2ggc2VlbXMgdG8gaW1wbGVtZW50IHNvbWUgZm9ybSBvZiB3cml0ZSBzdHJlYW0gc3VwcG9ydCwgbGlrZWx5IGZvciBlbmhhbmNlZCBJL08gbWFuYWdlbWVudCBhdCB0aGUgYmxvY2sgZGV2aWNlIGxldmVsLiBTcGVjaWZpY2FsbHk6CgoxLiAgV2UmIzM5O3JlIGRvY3VtZW50aW5nIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSwgYC9zeXMvYmxvY2svJmx0O2Rpc2smZ3Q7LyZsdDtwYXJ0aXRpb24mZ3Q7L3dyaXRlX3N0cmVhbXNgLCB3aGljaCBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuCjIuICBgYmRldi5jYCBpcyBnZXR0aW5nIGEgYGtmcmVlYCBmb3IgdGhlIGBiZF93cml0ZV9zdHJlYW1fbWFwYCBpbiBgYmRldl9mcmVlX2lub2RlYCwgd2hpY2ggdGVsbHMgbWUgdGhpcyBtYXAgaXMgYWxsb2NhdGVkIHNvbWV3aGVyZS4KMy4gIGBibGstY29yZS5jYCBoYXMgYSBwYXJ0aXRpb24gcmVtYXAgZnVuY3Rpb24gdGhhdCBjaGVja3MgYW5kICp1c2VzKiBgYmlvLSZndDtiaV93cml0ZV9zdHJlYW1gIGFnYWluc3QgYHAtJmd0O2JkX25yX3dyaXRlX3N0cmVhbXNgLCBhbmQgdGhlbiBsb29rcyB1cCB0aGUgcmVtYXBwZWQgc3RyZWFtIGZyb20gYSBgYmRfd3JpdGVfc3RyZWFtX21hcGAuIFRoaXMgaXMgY3JpdGljYWwsIGFzIGl0JiMzOTtzIHdoZXJlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGFjY2Vzc2VkLgo0LiAgYGNvcmUuY2AgYWRkcyBzeXNmcyBhdHRyaWJ1dGVzIGZvciB0aGUgd3JpdGUgc3RyZWFtcywgd2l0aCBmdW5jdGlvbnMgdG8gc2hvdyB0aGUgbnVtYmVyIG9mIHN0cmVhbXMgKGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2ApLCBjbGVhciByZXNlcnZlZCBiaXRzLCBzZXQgdGhlIG1hcCBhbmQgcmVzZXJ2ZSBzdHJlYW1zLCBhbmQgc3RvcmUgdGhlIG51bWJlciBvZiBzdHJlYW1zLiBBbmQsIGltcG9ydGFudGx5LCB0aGUgZHJvcCBwYXJ0aXRpb24gY29kZSBjbGVhbnMgdXAgb3VyIHN0cmVhbXMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gaGFwcGVucy4KNS4gIFRoZXJlIGFyZSBjaGFuZ2VzIHRvIGBibGtfdHlwZXMuaGAgYW5kIGBibGtkZXYuaGAgYWRkaW5nIHRoZSBuZWNlc3NhcnkgZmllbGRzIHRvIHRoZSBgYmxvY2tfZGV2aWNlYCBhbmQgYGdlbmRpc2tgIHN0cnVjdHMuIFNwZWNpZmljYWxseSwgYGJkX25yX3dyaXRlX3N0cmVhbXNgIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgaW4gdGhlIGBibG9ja19kZXZpY2VgIHN0cnVjdCwgYW5kIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBpbiB0aGUgYGdlbmRpc2tgIHN0cnVjdC4KCk5vdywgbGV0JiMzOTtzIHB1dCBvbiB0aGUgS01TQU4gaGF0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBsZWFrcy4KCiogICAqKkNyaXRlcmlvbiAxOioqICBLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/IFRoZSBzeXNmcyBvdXRwdXQgaXMgdGhlIG9ubHkgdGhpbmcgZXhwb3NlZCwgc3BlY2lmaWNhbGx5IGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AuIEl0IHVzZXMgYHN5c2ZzX2VtaXRgIHdpdGggYSBmb3JtYXR0ZWQgc3RyaW5nIGFuZCBgJXVgICh3aGljaCBpcyBzYWZlKSwgc28gbm8gcmF3IHN0cnVjdHVyZSBkYXRhIGlzIGNvcGllZC4gTm8gcHJvYmxlbXMgaGVyZS4KKiAgICoqQ3JpdGVyaW9uIDI6KiogQ29uZGl0aW9uYWwgbG9naWMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhPyBXZSYjMzk7dmUgZ290IGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgLiBIb3dldmVyLCBgYmRldmAgaXMgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLCBhbmQgYGdlbmRpc2tgIGlzIHplcm8gYWxsb2NhdGVkLiBJbiBgcGFydF9zZXRfd3JpdGVfc3RyZWFtc2AsIHRoZSBtYXAgaXMgYWxsb2NhdGVkIHdpdGggYGttYWxsb2NgLCBhbmQgdGhlbiB3ZSBsb29wIGZpbGxpbmcgdGhlIGRhdGEuIFRoaXMgbWVhbnMgYWxsIGJ5dGVzIGFyZSB3cml0dGVuIGJlZm9yZSBiZWluZyB1c2VkLiBJbiBgYmxrX3BhcnRpdGlvbl9yZW1hcGAsIGBiaW8tJmd0O2JpX3dyaXRlX3N0cmVhbWAgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSB2YWxpZCByYW5nZSBhbmQgdGhlbiBpbmRleGVkIGludG8gdGhlIG1hcCB3aGljaCBpcyAqZnVsbHkqIGluaXRpYWxpemVkLiBUaGlzIGNoZWNrcyBvdXQuCiogICAqKkNyaXRlcmlvbiAzOioqIEFsbG9jYXRpb25zIGFuZCBpbml0aWFsaXphdGlvbnMuICBUaGUgc3RydWN0dXJlcyBgYmRldmAgYW5kIGBnZW5kaXNrYCBhcmUgZWl0aGVyIHplcm9lZCwgb3IgYWxsb2NhdGVkIGFuZCAqZnVsbHkqIHBvcHVsYXRlZCBiZWZvcmUgdXNlLiBObyBpc3N1ZS4KKiAgICoqQ3JpdGVyaW9uIDQ6KiogQm91bmRzIGNoZWNrcyBhbmQgbGVuZ3Rocy4gV2UmIzM5O3JlIG5vdyByZXR1cm5pbmcgdGhlIGFjdHVhbCBudW1iZXIgb2Ygd3JpdGUgc3RyZWFtcywgYW5kIHRoZXNlIGNoZWNrcyBhcmUgaGFwcGVuaW5nLCBidXQgd2UmIzM5O3JlIG9ubHkgcmV0dXJuaW5nIGZ1bGx5IGluaXRpYWxpemVkIGRhdGEsIGFuZCBib3VuZHMgYXJlIGNoZWNrZWQgcHJvcGVybHkuIFNvIHRoZSBjaGVja3MgYWdhaW5zdCB0aGVzZSB2YWx1ZXMgaXMgZmluZSwgc2luY2UgdGhlIHZhbHVlcyBhcmUgc2V0IGJlZm9yZSB0aGUgY2hlY2tzLgoKT2theSwgYXJlIHRoZXJlICpvdGhlciogaXNzdWVzPyBTdGFuZGFyZCBtZW1vcnkgc2FmZXR5PyBTdXJlLCBvdXQtb2YtYm91bmRzIGFjY2VzcywgVUFGIG9uIHRoZSBtYXAsIGNvbmN1cnJlbmN5IHByb2JsZW1zIGNvdWxkIGJlIHRoZXJlLiBCdXQgdGhvc2UgYXJlIHN0YW5kYXJkIG1lbW9yeSBpc3N1ZXMgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIFVCU2FuIHdvdWxkIGhhbmRsZS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4KCkxvb2tpbmcgYXQgaXQgY2xvc2VseSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBubyBrZXJuZWwtdG8tdXNlciBtZW1vcnkgbGVha3MsIGFuZCBhbGwgYWxsb2NhdGlvbnMgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIEV2ZXJ5IGJ5dGUgd3JpdHRlbiBpcyBpbml0aWFsaXplZC4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBLTVNBTiBjb25jZXJucy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGF0Y2guCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2s6CiogICBNYWtlIHN1cmUgd2UgY2hlY2sgYWxsIHRoZSBmaWVsZHM6IGBiZGV2LSZndDtiZF9ucl93cml0ZV9zdHJlYW1zYCwgYGJkZXYtJmd0O2JkX3dyaXRlX3N0cmVhbV9tYXBgLCBhbmQgYGRpc2stJmd0O3dyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRgLgoqICAgQ2hlY2sgdGhlIHBhdGhzIGZvciBzeXNmcyBzaG93IGFuZCBzdG9yZSwgcGFydGl0aW9uIHJlbWFwLCBhbmQgYmRldiBmcmVlLgoKSSYjMzk7bSBjb25maWRlbnQuIFRoZSByZWFzb25pbmcgc2VlbXMgc291bmQuIE5vIEtNU0FOLiBMZXQmIzM5O3Mgc2VuZCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDc6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzeXNmcyBjb25maWd1cmF0aW9uIGFuZCBibG9jayBsYXllciByZW1hcHBpbmcgZm9yIHdyaXRlIHN0cmVhbXMgb24gcGFydGl0aW9uIGJsb2NrIGRldmljZXMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjpcbi0gSW5vZGVzL2JkZXZzIGFyZSBhbGxvY2F0ZWQgdmlhIGBiZGV2X2FsbG9jX2lub2RlYCB3aGljaCBleHBsaWNpdGx5IHplcm9lcyB0aGUgYHN0cnVjdCBibG9ja19kZXZpY2VgIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIHN0YXJ0IGF0IHplcm8vTlVMTC5cbi0gYHN0cnVjdCBnZW5kaXNrYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAsIGVuc3VyaW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBiaXRtYXAgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cbi0gV2hlbiBgbWFwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jYCBpbiBgcGFydF9zZXRfd3JpdGVfc3RyZWFtcygpYCwgZXZlcnkgZWxlbWVudCBpbiBgbWFwWzAgLi4gbnItMV1gIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYWNyb3NzIHRoZSBsb29wIGJyYW5jaGVzIGJlZm9yZSBzd2FwcGluZyBpbnRvIGBiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLlxuXG4yLiBVc2VyIFNwYWNlIENvbW11bmljYXRpb246XG4tIFRoZSBvbmx5IGludGVyZmFjZSBleHBvc2luZyBkYXRhIHRvIHVzZXJzcGFjZSBpcyBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCB3aGljaCB1c2VzIGBzeXNmc19lbWl0KClgIHRvIGZvcm1hdCB0aGUgaW50ZWdlciBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgaW50byBhIHN0cmluZy4gTm8gYmluYXJ5IHN0cnVjdHVyZXMgb3IgcGFkZGVkIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuXG4zLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBvciBtZW1vcnkgbGVha3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy5cbi0gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzeXNmcyBjb25maWd1cmF0aW9uIGFuZCBibG9jayBsYXllciByZW1hcHBpbmcgZm9yIHdyaXRlIHN0cmVhbXMgb24gcGFydGl0aW9uIGJsb2NrIGRldmljZXMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjpcbi0gSW5vZGVzL2JkZXZzIGFyZSBhbGxvY2F0ZWQgdmlhIGBiZGV2X2FsbG9jX2lub2RlYCB3aGljaCBleHBsaWNpdGx5IHplcm9lcyB0aGUgYHN0cnVjdCBibG9ja19kZXZpY2VgIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIHN0YXJ0IGF0IHplcm8vTlVMTC5cbi0gYHN0cnVjdCBnZW5kaXNrYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAsIGVuc3VyaW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBiaXRtYXAgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cbi0gV2hlbiBgbWFwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jYCBpbiBgcGFydF9zZXRfd3JpdGVfc3RyZWFtcygpYCwgZXZlcnkgZWxlbWVudCBpbiBgbWFwWzAgLi4gbnItMV1gIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYWNyb3NzIHRoZSBsb29wIGJyYW5jaGVzIGJlZm9yZSBzd2FwcGluZyBpbnRvIGBiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLlxuXG4yLiBVc2VyIFNwYWNlIENvbW11bmljYXRpb246XG4tIFRoZSBvbmx5IGludGVyZmFjZSBleHBvc2luZyBkYXRhIHRvIHVzZXJzcGFjZSBpcyBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCB3aGljaCB1c2VzIGBzeXNmc19lbWl0KClgIHRvIGZvcm1hdCB0aGUgaW50ZWdlciBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgaW50byBhIHN0cmluZy4gTm8gYmluYXJ5IHN0cnVjdHVyZXMgb3IgcGFkZGVkIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuXG4zLiBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5OlxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBvciBtZW1vcnkgbGVha3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy5cbi0gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0Njo1NS4yOTE3NzQ2ODNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDUwMjA1NzY2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVcIixcbiAgICBcInBhcnRfc2V0X3dyaXRlX3N0cmVhbXNcIixcbiAgICBcInBhcnRfd3JpdGVfc3RyZWFtc19zaG93XCIsXG4gICAgXCJwYXJ0X3B1dF93cml0ZV9zdHJlYW1zXCIsXG4gICAgXCJibGtfcGFydGl0aW9uX3JlbWFwXCIsXG4gICAgXCJkcm9wX3BhcnRpdGlvblwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzeXNmcyBjb25maWd1cmF0aW9uIGFuZCBibG9jayBsYXllciByZW1hcHBpbmcgZm9yIHdyaXRlIHN0cmVhbXMgb24gcGFydGl0aW9uIGJsb2NrIGRldmljZXMuXFxuXFxuMS4gTWVtb3J5IEluaXRpYWxpemF0aW9uOlxcbi0gSW5vZGVzL2JkZXZzIGFyZSBhbGxvY2F0ZWQgdmlhIGBiZGV2X2FsbG9jX2lub2RlYCB3aGljaCBleHBsaWNpdGx5IHplcm9lcyB0aGUgYHN0cnVjdCBibG9ja19kZXZpY2VgIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIHN0YXJ0IGF0IHplcm8vTlVMTC5cXG4tIGBzdHJ1Y3QgZ2VuZGlza2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX25vZGVgLCBlbnN1cmluZyBgd3JpdGVfc3RyZWFtc19yZXNlcnZlZGAgYml0bWFwIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuLSBXaGVuIGBtYXBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIGluIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKClgLCBldmVyeSBlbGVtZW50IGluIGBtYXBbMCAuLiBuci0xXWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhY3Jvc3MgdGhlIGxvb3AgYnJhbmNoZXMgYmVmb3JlIHN3YXBwaW5nIGludG8gYGJkZXYtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLlxcblxcbjIuIFVzZXIgU3BhY2UgQ29tbXVuaWNhdGlvbjpcXG4tIFRoZSBvbmx5IGludGVyZmFjZSBleHBvc2luZyBkYXRhIHRvIHVzZXJzcGFjZSBpcyBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCB3aGljaCB1c2VzIGBzeXNmc19lbWl0KClgIHRvIGZvcm1hdCB0aGUgaW50ZWdlciBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgaW50byBhIHN0cmluZy4gTm8gYmluYXJ5IHN0cnVjdHVyZXMgb3IgcGFkZGVkIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcbjMuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBvciBtZW1vcnkgbGVha3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy5cXG4tIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hlcywgb3Iga2VybmVsIGluZm8tbGVha3MgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHdyaXRlIHN0cmVhbSByZXNlcnZhdGlvbiBhbmQgcmVtYXBwaW5nIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSBwYXJ0aXRpb25zLiBJdCBhZGRzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSAod3JpdGVfc3RyZWFtcykgdG8gcGFydGl0aW9ucywgaW1wbGVtZW50cyBzdHJlYW0gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gdHJhY2tpbmcgb24gdGhlIHVuZGVybHlpbmcgZGlzaywgYW5kIHVwZGF0ZXMgYmlvIHBhcnRpdGlvbiByZW1hcHBpbmcgdG8gbWFwIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW1zIHRvIGRpc2sgd3JpdGUgc3RyZWFtcy4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ2OjU1LjI5MTc3OTIxNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDQ1NjI0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYxM2Q2ZjZkNjhjZmM0NTRmZmIwMmUwOThjMzFmNmZlNzk1MGUyNjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDc6NDY6NTMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrXFxuaW5kZXggOTAwYjNmYzRjNzJkMC4uNDQyZjRjMjIxYmRlYSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2tcXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtYmxvY2tcXG5AQCAtMjE4LDYgKzIxOCwyNSBAQCBEZXNjcmlwdGlvbjpcXG4gXFx0XFx0c2FtZSBhcyB0aGUgZm9ybWF0IG9mIC9zeXMvYmxvY2svXFx1MDAzY2Rpc2tcXHUwMDNlL3N0YXQuXFxuIFxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2Jsb2NrL1xcdTAwM2NkaXNrXFx1MDAzZS9cXHUwMDNjcGFydGl0aW9uXFx1MDAzZS93cml0ZV9zdHJlYW1zXFxuK0RhdGU6XFx0XFx0U2VwdGVtYmVyIDIwMjZcXG4rQ29udGFjdDpcXHRLZW9zZW9uZyBQYXJrIFxcdTAwM2NrZW9zdW5nLnBhcmtAc2Ftc3VuZy5jb21cXHUwMDNlXFxuK0Rlc2NyaXB0aW9uOlxcbitcXHRcXHRbUlddIE51bWJlciBvZiB0aGUgZGlzaydzIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZVxcbitcXHRcXHRwYXJ0aXRpb24uIFdyaXRpbmcgTiByZXNlcnZlcyBOIGRpc2sgd3JpdGUgc3RyZWFtcyB0aGF0IG5vXFxuK1xcdFxcdG90aGVyIHBhcnRpdGlvbiBjYW4gdXNlIGFuZCBleHBvc2VzIHRoZW0gYXMgdGhlIHBhcnRpdGlvbidzXFxuK1xcdFxcdHdyaXRlIHN0cmVhbXMgMSB0byBOLiBXcml0aW5nIDAgZ2l2ZXMgdGhlbSBiYWNrLiBBdCBtb3N0XFxuK1xcdFxcdC9zeXMvYmxvY2svXFx1MDAzY2Rpc2tcXHUwMDNlL3F1ZXVlL21heF93cml0ZV9zdHJlYW1zIHN0cmVhbXMsIGFuZCBuZXZlclxcbitcXHRcXHRtb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhblxcbitcXHRcXHRvbmx5IGJlIGNoYW5nZWQgd2hpbGUgdGhlIHBhcnRpdGlvbiBpcyBub3Qgb3BlbiwgYW5kIGEgY2hhbmdlXFxuK1xcdFxcdGtlZXBzIHRoZSBzdHJlYW0gbnVtYmVycyB0aGF0IHN1cnZpdmUgaXQgcG9pbnRpbmcgYXQgdGhlIHNhbWVcXG4rXFx0XFx0ZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3NcXG4rXFx0XFx0cmVzZXJ2ZWQgaGVyZSwgYW5kIHRoZSByZXNlcnZhdGlvbiBpcyBsb3N0IHdoZW4gdGhlIHBhcnRpdGlvblxcbitcXHRcXHRpcyByZW1vdmVkLCBpbmNsdWRpbmcgYnkgYSBwYXJ0aXRpb24gdGFibGUgcmVzY2FuLiBJL08gdG9cXG4rXFx0XFx0dGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdFxcbitcXHRcXHRjYW4gd3JpdGUgdG8gYW55IHNlY3RvciBvZiBhIHBhcnRpdGlvbi5cXG4rXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMvYmxvY2svXFx1MDAzY2Rpc2tcXHUwMDNlL3F1ZXVlL2FkZF9yYW5kb21cXG4gRGF0ZTpcXHRcXHRKdW5lIDIwMTBcXG4gQ29udGFjdDpcXHRsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5vcmdcXG5kaWZmIC0tZ2l0IGEvYmxvY2svYmRldi5jIGIvYmxvY2svYmRldi5jXFxuaW5kZXggY2Q4MzIzMDgzNzQwNi4uNzMwNmE0ZWYwYTg2NyAxMDA2NDRcXG4tLS0gYS9ibG9jay9iZGV2LmNcXG4rKysgYi9ibG9jay9iZGV2LmNcXG5AQCAtNDM4LDYgKzQzOCw3IEBAIHN0YXRpYyB2b2lkIGJkZXZfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXG4gXFx0ZnJlZV9wZXJjcHUoYmRldi1cXHUwMDNlYmRfc3RhdHMpO1xcbiBcXHRrZnJlZShiZGV2LVxcdTAwM2ViZF9tZXRhX2luZm8pO1xcbitcXHRrZnJlZShiZGV2LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwKTtcXG4gXFx0c2VjdXJpdHlfYmRldl9mcmVlKGJkZXYpO1xcbiBcXG4gXFx0aWYgKCFiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSkge1xcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xcbmluZGV4IDE5NmJjY2YyN2Y1OGQuLjNiNmYwOWIzOTQzZjQgMTAwNjQ0XFxuLS0tIGEvYmxvY2svYmxrLWNvcmUuY1xcbisrKyBiL2Jsb2NrL2Jsay1jb3JlLmNcXG5AQCAtNjE2LDcgKzYxNiw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJpb19jaGVja19lb2Qoc3RydWN0IGJpbyAqYmlvKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBSZW1hcCBibG9jayBuIG9mIHBhcnRpdGlvbiBwIHRvIGJsb2NrIG4rc3RhcnQocCkgb2YgdGhlIGRpc2suXFxuKyAqIFJlbWFwIGJsb2NrIG4gb2YgcGFydGl0aW9uIHAgdG8gYmxvY2sgbitzdGFydChwKSBvZiB0aGUgZGlzaywgYW5kIHRoZVxcbisgKiB3cml0ZSBzdHJlYW1zIG9mIHBhcnRpdGlvbiBwIHRvIHRoZSBkaXNrIHdyaXRlIHN0cmVhbXMgcmVzZXJ2ZWQgZm9yIHRoZW0uXFxuICAqL1xcbiBzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxcbiB7XFxuQEAgLTYzMCw2ICs2MzEsMTMgQEAgc3RhdGljIGludCBibGtfcGFydGl0aW9uX3JlbWFwKHN0cnVjdCBiaW8gKmJpbylcXG4gXFx0XFx0XFx0XFx0ICAgICAgYmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvciAtXFxuIFxcdFxcdFxcdFxcdCAgICAgIHAtXFx1MDAzZWJkX3N0YXJ0X3NlY3QpO1xcbiBcXHR9XFxuK1xcdGlmIChiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSBcXHUwMDI2XFx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcXG4rXFx0XFx0aWYgKHVubGlrZWx5KGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtIFxcdTAwM2UgcC1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxcbitcXHRcXHRcXHRwLVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2Jpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtIC0gMV07XFxuK1xcdH1cXG4gXFx0YmlvX3NldF9mbGFnKGJpbywgQklPX1JFTUFQUEVEKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmMgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLjc3ODUyZWIyYWNiZWMgMTAwNjQ0XFxuLS0tIGEvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcXG4rKysgYi9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xcbkBAIC0yMDUsNiArMjA1LDEzMCBAQCBzdGF0aWMgc3NpemVfdCBwYXJ0X2Rpc2NhcmRfYWxpZ25tZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbiBcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgYmRldl9kaXNjYXJkX2FsaWdubWVudChkZXZfdG9fYmRldihkZXYpKSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuK3tcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIGRldl90b19iZGV2KGRldiktXFx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXMpO1xcbit9XFxuK1xcbisvKlxcbisgKiBHaXZlIHRoZSB3cml0ZSBzdHJlYW1zIG9mIEBwYXJ0IGJhY2sgdG8gdGhlIGRpc2suICBDYWxsZWQgZnJvbVxcbisgKiBkcm9wX3BhcnRpdGlvbigpIHdpdGggb3Blbl9tdXRleCBoZWxkOyB0aGUgbWFwIGlzIGxlZnQgYWxvbmUgYmVjYXVzZSBhXFxuKyAqIHdyaXRlIHJhY2luZyB3aXRoIGRlbF9nZW5kaXNrKCkgc3RpbGwgdXNlcyBpdCB1bnRpbCB0aGUgYmRldiBpcyBmcmVlZC5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydClcXG4re1xcbitcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHBhcnQtXFx1MDAzZWJkX2Rpc2s7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2ZGlzay1cXHUwMDNlb3Blbl9tdXRleCk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcGFydC1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtczsgaSsrKVxcbitcXHRcXHRfX2NsZWFyX2JpdChwYXJ0LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxcbitcXHRcXHRcXHQgICAgZGlzay1cXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0LCB1OCBucilcXG4re1xcbitcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHBhcnQtXFx1MDAzZWJkX2Rpc2s7XFxuK1xcdHVuc2lnbmVkIGludCBtYXggPSBtaW5fdCh1bnNpZ25lZCBpbnQsXFxuK1xcdFxcdFxcdFxcdCBiZGV2X2xpbWl0cyhwYXJ0KS1cXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXMsIFU4X01BWCk7XFxuK1xcdHU4ICptYXAgPSBOVUxMO1xcbitcXHR1bnNpZ25lZCBpbnQgaSwgaWQsIG5yX2ZyZWU7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHR1OCBjdXI7XFxuK1xcbitcXHRpZiAobnIgXFx1MDAzZSBtYXgpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKG5yKSB7XFxuK1xcdFxcdG1hcCA9IGttYWxsb2MobnIsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoIW1hcClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXG4rXFx0LyogdGhlIHBhcnRpdGlvbiBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIG11dGV4ICovXFxuK1xcdGlmICh4YV9sb2FkKFxcdTAwMjZkaXNrLVxcdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpICE9IHBhcnQpIHtcXG4rXFx0XFx0cmV0ID0gLUVOWElPO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0Y3VyID0gcGFydC1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcztcXG4rXFxuK1xcdC8qIGEgbm8tb3AgY2hhbmdlIGlzIGFsbG93ZWQgd2hpbGUgb3BlbiAqL1xcbitcXHRpZiAobnIgPT0gY3VyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdC8qIHRoZSBzdHJlYW1zIG11c3Qgbm90IGNoYW5nZSB1bmRlciBhIHVzZXIgb2YgdGhlIHBhcnRpdGlvbiAqL1xcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNnBhcnQtXFx1MDAzZWJkX29wZW5lcnMpKSB7XFxuK1xcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG5yX2ZyZWUgPSBtYXggLSBiaXRtYXBfd2VpZ2h0KGRpc2stXFx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsIG1heCArIDEpO1xcbitcXHRpZiAobnIgXFx1MDAzZSBjdXIgXFx1MDAyNlxcdTAwMjYgbnIgLSBjdXIgXFx1MDAzZSBucl9mcmVlKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9TUEM7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBLZWVwIHRoZSBzdHJlYW1zIHRoYXQgc3RheSwgc28gdGhhdCBhIHBhcnRpdGlvbiBrZWVwcyB3cml0aW5nXFxuK1xcdCAqIHRocm91Z2ggdGhlIHNhbWUgZGlzayBzdHJlYW1zIGFuZCBpdHMgZGF0YSBzdGF5cyB0b2dldGhlci5cXG4rXFx0ICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBtaW4oY3VyLCBucik7IGkrKylcXG4rXFx0XFx0bWFwW2ldID0gcGFydC1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtpXTtcXG4rXFxuK1xcdGlmIChuciBcXHUwMDNjIGN1cikge1xcbitcXHRcXHRmb3IgKGkgPSBucjsgaSBcXHUwMDNjIGN1cjsgaSsrKVxcbitcXHRcXHRcXHRfX2NsZWFyX2JpdChwYXJ0LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxcbitcXHRcXHRcXHRcXHQgICAgZGlzay1cXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGZvciAoaSA9IGN1cjsgaSBcXHUwMDNjIG5yOyBpKyspIHtcXG4rXFx0XFx0XFx0aWQgPSBmaW5kX25leHRfemVyb19iaXQoZGlzay1cXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bWF4ICsgMSwgMSk7XFxuK1xcdFxcdFxcdF9fc2V0X2JpdChpZCwgZGlzay1cXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XFxuK1xcdFxcdFxcdG1hcFtpXSA9IGlkO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHN3YXAocGFydC1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTtcXG4rXFx0cGFydC1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yO1xcbitcXG4rb3V0OlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbitcXHRrZnJlZShtYXApO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHNzaXplX3QgcGFydF93cml0ZV9zdHJlYW1zX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuK1xcdFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBrZXJuZnNfbm9kZSAqa247XFxuK1xcdHU4IG5yO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0ga3N0cnRvdTgoYnVmLCAxMCwgXFx1MDAyNm5yKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIGRyb3BfcGFydGl0aW9uKCkgcmVtb3ZlcyB0aGlzIGF0dHJpYnV0ZSB3aXRoIG9wZW5fbXV0ZXggaGVsZCwgc29cXG4rXFx0ICogZG9uJ3QgaG9sZCB0aGUgYWN0aXZlIHJlZmVyZW5jZSB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbXV0ZXguXFxuK1xcdCAqL1xcbitcXHRrbiA9IHN5c2ZzX2JyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKFxcdTAwMjZkZXYtXFx1MDAzZWtvYmosIFxcdTAwMjZhdHRyLVxcdTAwM2VhdHRyKTtcXG4rXFx0aWYgKCFrbilcXG4rXFx0XFx0cmV0dXJuIC1FTlhJTztcXG4rXFxuK1xcdHJldCA9IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoZGV2X3RvX2JkZXYoZGV2KSwgbnIpO1xcbitcXHRzeXNmc191bmJyZWFrX2FjdGl2ZV9wcm90ZWN0aW9uKGtuKTtcXG4rXFxuK1xcdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcXG4rfVxcbitcXG4gc3RhdGljIERFVklDRV9BVFRSKHBhcnRpdGlvbiwgMDQ0NCwgcGFydF9wYXJ0aXRpb25fc2hvdywgTlVMTCk7XFxuIHN0YXRpYyBERVZJQ0VfQVRUUihzdGFydCwgMDQ0NCwgcGFydF9zdGFydF9zaG93LCBOVUxMKTtcXG4gc3RhdGljIERFVklDRV9BVFRSKHNpemUsIDA0NDQsIHBhcnRfc2l6ZV9zaG93LCBOVUxMKTtcXG5AQCAtMjEzLDYgKzMzNyw4IEBAIHN0YXRpYyBERVZJQ0VfQVRUUihhbGlnbm1lbnRfb2Zmc2V0LCAwNDQ0LCBwYXJ0X2FsaWdubWVudF9vZmZzZXRfc2hvdywgTlVMTCk7XFxuIHN0YXRpYyBERVZJQ0VfQVRUUihkaXNjYXJkX2FsaWdubWVudCwgMDQ0NCwgcGFydF9kaXNjYXJkX2FsaWdubWVudF9zaG93LCBOVUxMKTtcXG4gc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTtcXG4gc3RhdGljIERFVklDRV9BVFRSKGluZmxpZ2h0LCAwNDQ0LCBwYXJ0X2luZmxpZ2h0X3Nob3csIE5VTEwpO1xcbitzdGF0aWMgREVWSUNFX0FUVFIod3JpdGVfc3RyZWFtcywgMDY0NCwgcGFydF93cml0ZV9zdHJlYW1zX3Nob3csXFxuK1xcdFxcdCAgIHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZSk7XFxuICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1RcXG4gc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX2ZhaWwgPVxcbiBcXHRfX0FUVFIobWFrZS1pdC1mYWlsLCAwNjQ0LCBwYXJ0X2ZhaWxfc2hvdywgcGFydF9mYWlsX3N0b3JlKTtcXG5AQCAtMjI3LDYgKzM1Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwYXJ0X2F0dHJzW10gPSB7XFxuIFxcdFxcdTAwMjZkZXZfYXR0cl9kaXNjYXJkX2FsaWdubWVudC5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfc3RhdC5hdHRyLFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfaW5mbGlnaHQuYXR0cixcXG4rXFx0XFx1MDAyNmRldl9hdHRyX3dyaXRlX3N0cmVhbXMuYXR0cixcXG4gI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVFxcbiBcXHRcXHUwMDI2ZGV2X2F0dHJfZmFpbC5hdHRyLFxcbiAjZW5kaWZcXG5AQCAtMjc0LDYgKzQwMSw3IEBAIHZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydClcXG4ge1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwYXJ0LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VvcGVuX211dGV4KTtcXG4gXFxuK1xcdHBhcnRfcHV0X3dyaXRlX3N0cmVhbXMocGFydCk7XFxuIFxcdHhhX2VyYXNlKFxcdTAwMjZwYXJ0LVxcdTAwM2ViZF9kaXNrLVxcdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpO1xcbiBcXHRrb2JqZWN0X3B1dChwYXJ0LVxcdTAwM2ViZF9ob2xkZXJfZGlyKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXFxuaW5kZXggOThlMjFiNGNiZjMyOC4uMGJiZmEyNzA4MDk5MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxcbkBAIC03MSw2ICs3MSw5IEBAIHN0cnVjdCBibG9ja19kZXZpY2Uge1xcbiBcXG4gXFx0c3RydWN0IHBhcnRpdGlvbl9tZXRhX2luZm8gKmJkX21ldGFfaW5mbztcXG4gXFx0aW50XFx0XFx0XFx0YmRfd3JpdGVycztcXG4rXFx0LyogcGFydGl0aW9uIHdyaXRlIHN0cmVhbSBzIGlzIGRpc2sgc3RyZWFtIGJkX3dyaXRlX3N0cmVhbV9tYXBbcyAtIDFdICovXFxuK1xcdHU4XFx0XFx0XFx0YmRfbnJfd3JpdGVfc3RyZWFtcztcXG4rXFx0dThcXHRcXHRcXHQqYmRfd3JpdGVfc3RyZWFtX21hcDtcXG4gI2lmZGVmIENPTkZJR19TRUNVUklUWVxcbiBcXHR2b2lkXFx0XFx0XFx0KmJkX3NlY3VyaXR5O1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG5pbmRleCA0Zjc5MDVjMzQxMmI4Li41ZDI0MWQ3YjA4MDJiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oXFxuQEAgLTE3OCw2ICsxNzgsOCBAQCBzdHJ1Y3QgZ2VuZGlzayB7XFxuIFxcbiBcXHRzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDtcXHQvKiBvcGVuL2Nsb3NlIG11dGV4ICovXFxuIFxcdHVuc2lnbmVkIG9wZW5fcGFydGl0aW9ucztcXHQvKiBudW1iZXIgb2Ygb3BlbiBwYXJ0aXRpb25zICovXFxuK1xcdC8qIHJlc2VydmVkIGJ5IHBhcnRpdGlvbnMsIGJpdCBOID0gc3RyZWFtIE4gKDAgdW51c2VkKSwgb3Blbl9tdXRleCAqL1xcbitcXHRERUNMQVJFX0JJVE1BUCh3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBVOF9NQVggKyAxKTtcXG4gXFxuIFxcdHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvXFx0KmJkaTtcXG4gXFx0c3RydWN0IGtvYmplY3QgcXVldWVfa29iajtcXHQvKiB0aGUgcXVldWUvIGRpcmVjdG9yeSAqL1xcbkBAIC0xMzAzLDcgKzEzMDUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZGV2X21heF9zZWdtZW50cyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGJkZXZfbWF4X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4ge1xcbiBcXHRpZiAoYmRldl9pc19wYXJ0aXRpb24oYmRldikpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gYmRldi1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcztcXG4gXFx0cmV0dXJuIGJkZXZfbGltaXRzKGJkZXYpLVxcdTAwM2VtYXhfd3JpdGVfc3RyZWFtcztcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDY6NTYuNzMzMTk0MzcyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NDI3MDExNTI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZVwiLFxuICAgIFwicGFydF9zZXRfd3JpdGVfc3RyZWFtc1wiLFxuICAgIFwicGFydF93cml0ZV9zdHJlYW1zX3Nob3dcIixcbiAgICBcInBhcnRfcHV0X3dyaXRlX3N0cmVhbXNcIixcbiAgICBcImJsa19wYXJ0aXRpb25fcmVtYXBcIixcbiAgICBcImRyb3BfcGFydGl0aW9uXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB3cml0ZSBzdHJlYW0gcmVzZXJ2YXRpb24gYW5kIHJlbWFwcGluZyBzdXBwb3J0IGZvciBibG9jayBkZXZpY2UgcGFydGl0aW9ucy4gSXQgYWRkcyBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUgKHdyaXRlX3N0cmVhbXMpIHRvIHBhcnRpdGlvbnMsIGltcGxlbWVudHMgc3RyZWFtIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHRyYWNraW5nIG9uIHRoZSB1bmRlcmx5aW5nIGRpc2ssIGFuZCB1cGRhdGVzIGJpbyBwYXJ0aXRpb24gcmVtYXBwaW5nIHRvIG1hcCBwYXJ0aXRpb24gd3JpdGUgc3RyZWFtcyB0byBkaXNrIHdyaXRlIHN0cmVhbXMuIFRoaXMgbG9naWMgaXMgcGFydCBvZiB0aGUgY29yZSBibG9jayBzdWJzeXN0ZW0gYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSB2aWEgc3lzZnMgYW5kIGJsb2NrIEkvTyBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxM2Q2ZjZkNjhjZmM0NTRmZmIwMmUwOThjMzFmNmZlNzk1MGUyNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNzo0Njo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9jayBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9ja1xuaW5kZXggOTAwYjNmYzRjNzJkMC4uNDQyZjRjMjIxYmRlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9ja1xuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrXG5AQCAtMjE4LDYgKzIxOCwyNSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0c2FtZSBhcyB0aGUgZm9ybWF0IG9mIC9zeXMvYmxvY2svXHUwMDNjZGlza1x1MDAzZS9zdGF0LlxuIFxuIFxuK1doYXQ6XHRcdC9zeXMvYmxvY2svXHUwMDNjZGlza1x1MDAzZS9cdTAwM2NwYXJ0aXRpb25cdTAwM2Uvd3JpdGVfc3RyZWFtc1xuK0RhdGU6XHRcdFNlcHRlbWJlciAyMDI2XG4rQ29udGFjdDpcdEtlb3Nlb25nIFBhcmsgXHUwMDNja2Vvc3VuZy5wYXJrQHNhbXN1bmcuY29tXHUwMDNlXG4rRGVzY3JpcHRpb246XG4rXHRcdFtSV10gTnVtYmVyIG9mIHRoZSBkaXNrJ3Mgd3JpdGUgc3RyZWFtcyByZXNlcnZlZCBmb3IgdGhlXG4rXHRcdHBhcnRpdGlvbi4gV3JpdGluZyBOIHJlc2VydmVzIE4gZGlzayB3cml0ZSBzdHJlYW1zIHRoYXQgbm9cbitcdFx0b3RoZXIgcGFydGl0aW9uIGNhbiB1c2UgYW5kIGV4cG9zZXMgdGhlbSBhcyB0aGUgcGFydGl0aW9uJ3NcbitcdFx0d3JpdGUgc3RyZWFtcyAxIHRvIE4uIFdyaXRpbmcgMCBnaXZlcyB0aGVtIGJhY2suIEF0IG1vc3RcbitcdFx0L3N5cy9ibG9jay9cdTAwM2NkaXNrXHUwMDNlL3F1ZXVlL21heF93cml0ZV9zdHJlYW1zIHN0cmVhbXMsIGFuZCBuZXZlclxuK1x0XHRtb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhblxuK1x0XHRvbmx5IGJlIGNoYW5nZWQgd2hpbGUgdGhlIHBhcnRpdGlvbiBpcyBub3Qgb3BlbiwgYW5kIGEgY2hhbmdlXG4rXHRcdGtlZXBzIHRoZSBzdHJlYW0gbnVtYmVycyB0aGF0IHN1cnZpdmUgaXQgcG9pbnRpbmcgYXQgdGhlIHNhbWVcbitcdFx0ZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3NcbitcdFx0cmVzZXJ2ZWQgaGVyZSwgYW5kIHRoZSByZXNlcnZhdGlvbiBpcyBsb3N0IHdoZW4gdGhlIHBhcnRpdGlvblxuK1x0XHRpcyByZW1vdmVkLCBpbmNsdWRpbmcgYnkgYSBwYXJ0aXRpb24gdGFibGUgcmVzY2FuLiBJL08gdG9cbitcdFx0dGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdFxuK1x0XHRjYW4gd3JpdGUgdG8gYW55IHNlY3RvciBvZiBhIHBhcnRpdGlvbi5cbitcbitcbiBXaGF0Olx0XHQvc3lzL2Jsb2NrL1x1MDAzY2Rpc2tcdTAwM2UvcXVldWUvYWRkX3JhbmRvbVxuIERhdGU6XHRcdEp1bmUgMjAxMFxuIENvbnRhY3Q6XHRsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmNcbmluZGV4IGNkODMyMzA4Mzc0MDYuLjczMDZhNGVmMGE4NjcgMTAwNjQ0XG4tLS0gYS9ibG9jay9iZGV2LmNcbisrKyBiL2Jsb2NrL2JkZXYuY1xuQEAgLTQzOCw2ICs0MzgsNyBAQCBzdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcbiBcdGZyZWVfcGVyY3B1KGJkZXYtXHUwMDNlYmRfc3RhdHMpO1xuIFx0a2ZyZWUoYmRldi1cdTAwM2ViZF9tZXRhX2luZm8pO1xuK1x0a2ZyZWUoYmRldi1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwKTtcbiBcdHNlY3VyaXR5X2JkZXZfZnJlZShiZGV2KTtcbiBcbiBcdGlmICghYmRldl9pc19wYXJ0aXRpb24oYmRldikpIHtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xuaW5kZXggMTk2YmNjZjI3ZjU4ZC4uM2I2ZjA5YjM5NDNmNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jb3JlLmNcbisrKyBiL2Jsb2NrL2Jsay1jb3JlLmNcbkBAIC02MTYsNyArNjE2LDggQEAgc3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pXG4gfVxuIFxuIC8qXG4tICogUmVtYXAgYmxvY2sgbiBvZiBwYXJ0aXRpb24gcCB0byBibG9jayBuK3N0YXJ0KHApIG9mIHRoZSBkaXNrLlxuKyAqIFJlbWFwIGJsb2NrIG4gb2YgcGFydGl0aW9uIHAgdG8gYmxvY2sgbitzdGFydChwKSBvZiB0aGUgZGlzaywgYW5kIHRoZVxuKyAqIHdyaXRlIHN0cmVhbXMgb2YgcGFydGl0aW9uIHAgdG8gdGhlIGRpc2sgd3JpdGUgc3RyZWFtcyByZXNlcnZlZCBmb3IgdGhlbS5cbiAgKi9cbiBzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxuIHtcbkBAIC02MzAsNiArNjMxLDEzIEBAIHN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdFx0XHQgICAgICBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgLVxuIFx0XHRcdFx0ICAgICAgcC1cdTAwM2ViZF9zdGFydF9zZWN0KTtcbiBcdH1cbitcdGlmIChiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIFx1MDAyNlx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcbitcdFx0aWYgKHVubGlrZWx5KGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gXHUwMDNlIHAtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxuK1x0XHRcdHAtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIC0gMV07XG4rXHR9XG4gXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLjc3ODUyZWIyYWNiZWMgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuKysrIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbkBAIC0yMDUsNiArMjA1LDEzMCBAQCBzdGF0aWMgc3NpemVfdCBwYXJ0X2Rpc2NhcmRfYWxpZ25tZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiV1XFxuXCIsIGJkZXZfZGlzY2FyZF9hbGlnbm1lbnQoZGV2X3RvX2JkZXYoZGV2KSkpO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbit7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXVcXG5cIiwgZGV2X3RvX2JkZXYoZGV2KS1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKTtcbit9XG4rXG4rLypcbisgKiBHaXZlIHRoZSB3cml0ZSBzdHJlYW1zIG9mIEBwYXJ0IGJhY2sgdG8gdGhlIGRpc2suICBDYWxsZWQgZnJvbVxuKyAqIGRyb3BfcGFydGl0aW9uKCkgd2l0aCBvcGVuX211dGV4IGhlbGQ7IHRoZSBtYXAgaXMgbGVmdCBhbG9uZSBiZWNhdXNlIGFcbisgKiB3cml0ZSByYWNpbmcgd2l0aCBkZWxfZ2VuZGlzaygpIHN0aWxsIHVzZXMgaXQgdW50aWwgdGhlIGJkZXYgaXMgZnJlZWQuXG4rICovXG4rc3RhdGljIHZvaWQgcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxuK3tcbitcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC1cdTAwM2ViZF9kaXNrO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7IGkrKylcbitcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuK1x0XHRcdCAgICBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuK31cbitcbitzdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXG4re1xuK1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBwYXJ0LVx1MDAzZWJkX2Rpc2s7XG4rXHR1bnNpZ25lZCBpbnQgbWF4ID0gbWluX3QodW5zaWduZWQgaW50LFxuK1x0XHRcdFx0IGJkZXZfbGltaXRzKHBhcnQpLVx1MDAzZW1heF93cml0ZV9zdHJlYW1zLCBVOF9NQVgpO1xuK1x0dTggKm1hcCA9IE5VTEw7XG4rXHR1bnNpZ25lZCBpbnQgaSwgaWQsIG5yX2ZyZWU7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHU4IGN1cjtcbitcbitcdGlmIChuciBcdTAwM2UgbWF4KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChucikge1xuK1x0XHRtYXAgPSBrbWFsbG9jKG5yLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFtYXApXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHQvKiB0aGUgcGFydGl0aW9uIG1heSBoYXZlIGJlZW4gZHJvcHBlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbXV0ZXggKi9cbitcdGlmICh4YV9sb2FkKFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIGJkZXZfcGFydG5vKHBhcnQpKSAhPSBwYXJ0KSB7XG4rXHRcdHJldCA9IC1FTlhJTztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRjdXIgPSBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XG4rXG4rXHQvKiBhIG5vLW9wIGNoYW5nZSBpcyBhbGxvd2VkIHdoaWxlIG9wZW4gKi9cbitcdGlmIChuciA9PSBjdXIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogdGhlIHN0cmVhbXMgbXVzdCBub3QgY2hhbmdlIHVuZGVyIGEgdXNlciBvZiB0aGUgcGFydGl0aW9uICovXG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2cGFydC1cdTAwM2ViZF9vcGVuZXJzKSkge1xuK1x0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bnJfZnJlZSA9IG1heCAtIGJpdG1hcF93ZWlnaHQoZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggKyAxKTtcbitcdGlmIChuciBcdTAwM2UgY3VyIFx1MDAyNlx1MDAyNiBuciAtIGN1ciBcdTAwM2UgbnJfZnJlZSkge1xuK1x0XHRyZXQgPSAtRU5PU1BDO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBLZWVwIHRoZSBzdHJlYW1zIHRoYXQgc3RheSwgc28gdGhhdCBhIHBhcnRpdGlvbiBrZWVwcyB3cml0aW5nXG4rXHQgKiB0aHJvdWdoIHRoZSBzYW1lIGRpc2sgc3RyZWFtcyBhbmQgaXRzIGRhdGEgc3RheXMgdG9nZXRoZXIuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbihjdXIsIG5yKTsgaSsrKVxuK1x0XHRtYXBbaV0gPSBwYXJ0LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV07XG4rXG4rXHRpZiAobnIgXHUwMDNjIGN1cikge1xuK1x0XHRmb3IgKGkgPSBucjsgaSBcdTAwM2MgY3VyOyBpKyspXG4rXHRcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuK1x0XHRcdFx0ICAgIGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRmb3IgKGkgPSBjdXI7IGkgXHUwMDNjIG5yOyBpKyspIHtcbitcdFx0XHRpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsXG4rXHRcdFx0XHRcdFx0bWF4ICsgMSwgMSk7XG4rXHRcdFx0X19zZXRfYml0KGlkLCBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuK1x0XHRcdG1hcFtpXSA9IGlkO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRzd2FwKHBhcnQtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTtcbitcdHBhcnQtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yO1xuK1xuK291dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0a2ZyZWUobWFwKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuK1x0XHRcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzdHJ1Y3Qga2VybmZzX25vZGUgKmtuO1xuK1x0dTggbnI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0ga3N0cnRvdTgoYnVmLCAxMCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qXG4rXHQgKiBkcm9wX3BhcnRpdGlvbigpIHJlbW92ZXMgdGhpcyBhdHRyaWJ1dGUgd2l0aCBvcGVuX211dGV4IGhlbGQsIHNvXG4rXHQgKiBkb24ndCBob2xkIHRoZSBhY3RpdmUgcmVmZXJlbmNlIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBtdXRleC5cbitcdCAqL1xuK1x0a24gPSBzeXNmc19icmVha19hY3RpdmVfcHJvdGVjdGlvbihcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyKTtcbitcdGlmICgha24pXG4rXHRcdHJldHVybiAtRU5YSU87XG4rXG4rXHRyZXQgPSBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKGRldl90b19iZGV2KGRldiksIG5yKTtcbitcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xuK1xuK1x0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuK31cbitcbiBzdGF0aWMgREVWSUNFX0FUVFIocGFydGl0aW9uLCAwNDQ0LCBwYXJ0X3BhcnRpdGlvbl9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhcnQsIDA0NDQsIHBhcnRfc3RhcnRfc2hvdywgTlVMTCk7XG4gc3RhdGljIERFVklDRV9BVFRSKHNpemUsIDA0NDQsIHBhcnRfc2l6ZV9zaG93LCBOVUxMKTtcbkBAIC0yMTMsNiArMzM3LDggQEAgc3RhdGljIERFVklDRV9BVFRSKGFsaWdubWVudF9vZmZzZXQsIDA0NDQsIHBhcnRfYWxpZ25tZW50X29mZnNldF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoZGlzY2FyZF9hbGlnbm1lbnQsIDA0NDQsIHBhcnRfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdywgTlVMTCk7XG4gc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoaW5mbGlnaHQsIDA0NDQsIHBhcnRfaW5mbGlnaHRfc2hvdywgTlVMTCk7XG4rc3RhdGljIERFVklDRV9BVFRSKHdyaXRlX3N0cmVhbXMsIDA2NDQsIHBhcnRfd3JpdGVfc3RyZWFtc19zaG93LFxuK1x0XHQgICBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUpO1xuICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1RcbiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfZmFpbCA9XG4gXHRfX0FUVFIobWFrZS1pdC1mYWlsLCAwNjQ0LCBwYXJ0X2ZhaWxfc2hvdywgcGFydF9mYWlsX3N0b3JlKTtcbkBAIC0yMjcsNiArMzUzLDcgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBhcnRfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX2Rpc2NhcmRfYWxpZ25tZW50LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9zdGF0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9pbmZsaWdodC5hdHRyLFxuK1x0XHUwMDI2ZGV2X2F0dHJfd3JpdGVfc3RyZWFtcy5hdHRyLFxuICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1RcbiBcdFx1MDAyNmRldl9hdHRyX2ZhaWwuYXR0cixcbiAjZW5kaWZcbkBAIC0yNzQsNiArNDAxLDcgQEAgdm9pZCBkcm9wX3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGFydC1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuIFxuK1x0cGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTtcbiBcdHhhX2VyYXNlKFx1MDAyNnBhcnQtXHUwMDNlYmRfZGlzay1cdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpO1xuIFx0a29iamVjdF9wdXQocGFydC1cdTAwM2ViZF9ob2xkZXJfZGlyKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuaW5kZXggOThlMjFiNGNiZjMyOC4uMGJiZmEyNzA4MDk5MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC03MSw2ICs3MSw5IEBAIHN0cnVjdCBibG9ja19kZXZpY2Uge1xuIFxuIFx0c3RydWN0IHBhcnRpdGlvbl9tZXRhX2luZm8gKmJkX21ldGFfaW5mbztcbiBcdGludFx0XHRcdGJkX3dyaXRlcnM7XG4rXHQvKiBwYXJ0aXRpb24gd3JpdGUgc3RyZWFtIHMgaXMgZGlzayBzdHJlYW0gYmRfd3JpdGVfc3RyZWFtX21hcFtzIC0gMV0gKi9cbitcdHU4XHRcdFx0YmRfbnJfd3JpdGVfc3RyZWFtcztcbitcdHU4XHRcdFx0KmJkX3dyaXRlX3N0cmVhbV9tYXA7XG4gI2lmZGVmIENPTkZJR19TRUNVUklUWVxuIFx0dm9pZFx0XHRcdCpiZF9zZWN1cml0eTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggNGY3OTA1YzM0MTJiOC4uNWQyNDFkN2IwODAyYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0xNzgsNiArMTc4LDggQEAgc3RydWN0IGdlbmRpc2sge1xuIFxuIFx0c3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7XHQvKiBvcGVuL2Nsb3NlIG11dGV4ICovXG4gXHR1bnNpZ25lZCBvcGVuX3BhcnRpdGlvbnM7XHQvKiBudW1iZXIgb2Ygb3BlbiBwYXJ0aXRpb25zICovXG4rXHQvKiByZXNlcnZlZCBieSBwYXJ0aXRpb25zLCBiaXQgTiA9IHN0cmVhbSBOICgwIHVudXNlZCksIG9wZW5fbXV0ZXggKi9cbitcdERFQ0xBUkVfQklUTUFQKHdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsIFU4X01BWCArIDEpO1xuIFxuIFx0c3RydWN0IGJhY2tpbmdfZGV2X2luZm9cdCpiZGk7XG4gXHRzdHJ1Y3Qga29iamVjdCBxdWV1ZV9rb2JqO1x0LyogdGhlIHF1ZXVlLyBkaXJlY3RvcnkgKi9cbkBAIC0xMzAzLDcgKzEzMDUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZGV2X21heF9zZWdtZW50cyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHtcbiBcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBiZGV2LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XG4gXHRyZXR1cm4gYmRldl9saW1pdHMoYmRldiktXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXM7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDY6NTYuNzMzMTk2ODQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU0Njk1MzU5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXcml0ZSBTdHJlYW0gUmVtYXBwaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGRpZmY6IGl0J3MgaGl0dGluZyB0aGUgY29yZSBibG9jayBsYXllciwgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGFyZSBhY3Jvc3MgYSBmZXcgZmlsZXM6IHRoZSBBQkkgZG9jdW1lbnRhdGlvbiwgYGJkZXYuY2AsIGBibGstY29yZS5jYCwgYW5kIGBwYXJ0aXRpb25zL2NvcmUuY2AsIHBsdXMgYXNzb2NpYXRlZCBoZWFkZXIgZmlsZXMuIFRoaXMgbG9va3MgbGlrZSBhIHRpZ2h0bHkgY291cGxlZCBzZXQgb2YgY2hhbmdlcywgc28gdGhlcmUncyBhIGdvb2QgY2hhbmNlIG9mIGludGVycGxheSBiZXR3ZWVuIHRoZSBjb21wb25lbnRzLlxuXG5Gcm9tIHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIHRoZXJlIGlzIG5vdyBhIG1lY2hhbmlzbSB0byByZW1hcCB3cml0ZSBzdHJlYW1zLiBgYmRldl9mcmVlX2lub2RlYCBpbiBgYmRldi5jYCBpcyBmcmVlaW5nIGEgYGJkX3dyaXRlX3N0cmVhbV9tYXBgLCB3aGljaCBwb2ludHMgdG93YXJkIHN0YXRlIGJlaW5nIG1hbmFnZWQgaGVyZS4gSW4gYGJsay1jb3JlLmNgLCB0aGUgbmV3IGBibGtfcGFydGl0aW9uX3JlbWFwYCBmdW5jdGlvbiBzdWdnZXN0cyB0aGVyZSdzIHNwZWNpZmljIGxvZ2ljIGZvciByZW1hcHBpbmcgYXQgdGhlIHBhcnRpdGlvbiBsZXZlbC4gVGhlIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gYHBhcnRpdGlvbnMvY29yZS5jYCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgYHdyaXRlX3N0cmVhbXNgIHN5c2ZzIGF0dHJpYnV0ZXMgKGdldC9zZXQpLCBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbnMgKGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIGBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zYCwgZXRjLiksIHNlZW0gdG8gYmUgdGhlIHByaW1hcnkgaW50ZXJmYWNlIGZvciB0aGlzIGZlYXR1cmUuIFRoZSB1cGRhdGVzIHRvIHRoZSBgc3RydWN0IGJsb2NrX2RldmljZWAgaW4gYGJsa190eXBlcy5oYCBhbmQgdGhlIGBzdHJ1Y3QgZ2VuZGlza2AgaW4gYGJsa2Rldi5oYCBjb25maXJtIG5ldyBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxhZ3MuXG5cbk5vdywgaXMgdGhpcyBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBpcyB0aGUgYmxvY2sgbGF5ZXIsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggZGlzayBkZXZpY2VzIGFuZCBwYXJ0aXRpb25zLiBBbnlib2R5IGNhbiBjcmVhdGUgcGFydGl0aW9ucywgcmlnaHQ/IFVzaW5nIGxvb3BiYWNrLCByYW1kaXNrLCBudWxsX2Jsaywgb3IgZXZlbiB0aGUgc2NzaV9kZWJ1ZyBkcml2ZXIuIFRoZSB3cml0ZSBzdHJlYW0gc3lzZnMgaW50ZXJmYWNlIGlzIGRlZmluaXRlbHkgdXNlci1hY2Nlc3NpYmxlLCBpdCBsb29rcyBsaWtlIGl0IGNhbiBiZSB3cml0dGVuIHRvIHZpYSBgL3N5cy9ibG9jay9cdTAwM2NkaXNrXHUwMDNlL1x1MDAzY3BhcnRpdGlvblx1MDAzZS93cml0ZV9zdHJlYW1zYC4gVXNlcnMgY2FuICphbHNvKiBzZXQgdXAgd3JpdGUgc3RyZWFtcyB2aWEgbWV0aG9kcyBsaWtlIEZfU0VUX1JXX0hJTlQsIHN0YXR4LCBpb191cmluZywgb3IgZXZlbiByYXcgYmxvY2sgd3JpdGVzLCB3aGljaCBpcyBhIGJpZyBkZWFsIGluIHRlcm1zIG9mIGF0dGFjayBzdXJmYWNlLiBUaGlzIGlzIGEgY2xlYXIgYFdvcnRoRnV6emluZz10cnVlYCBzaXR1YXRpb24uIFRoaXMgYWZmZWN0cyBJL08gcGF0aCwgcGFydGl0aW9uIG1hbmFnZW1lbnQuLi4gYWxsIGNvcmUga2VybmVsIHN1YnN5c3RlbXMuXG5cbk5leHQsIEknbGwgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGdyZXBwZXIgYW5kIGV4cGxvcmUgYGJsb2NrL2AgYW5kIGBibG9jay9wYXJ0aXRpb25zL2AgdG8gdW5kZXJzdGFuZCBhbnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgYW5kIGlkZW50aWZ5IGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvciBmb2N1cyBzeW1ib2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDYzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6MTIuMjAyNzM0NzkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODg4OTQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCTE9DS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svS2NvbmZpZy00LSNcXG5ibG9jay9LY29uZmlnOjU6bWVudWNvbmZpZyBCTE9DS1xcbmJsb2NrL0tjb25maWctNi0gICAgICAgYm9vbCBcXFwiRW5hYmxlIHRoZSBibG9jayBsYXllclxcXCIgaWYgRVhQRVJUXFxuLS1cXG5ibG9jay9LY29uZmlnLTI2LVxcbmJsb2NrL0tjb25maWc6Mjc6aWYgQkxPQ0tcXG5ibG9jay9LY29uZmlnLTI4LVxcbmJsb2NrL0tjb25maWc6Mjk6Y29uZmlnIEJMT0NLX0xFR0FDWV9BVVRPTE9BRFxcbmJsb2NrL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiTGVnYWN5IGF1dG9sb2FkaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5ibG9jay9LY29uZmlnPTIxND1jb25maWcgQkxLX1BNXFxuLS1cXG5ibG9jay9LY29uZmlnLTIxNy0jIGRvIG5vdCB1c2UgaW4gbmV3IGNvZGVcXG5ibG9jay9LY29uZmlnOjIxODpjb25maWcgQkxPQ0tfSE9MREVSX0RFUFJFQ0FURURcXG5ibG9jay9LY29uZmlnLTIxOS1cXHRib29sXFxuLS1cXG5ibG9jay9LY29uZmlnPTIzMj1zb3VyY2UgXFxcImJsb2NrL0tjb25maWcuaW9zY2hlZFxcXCJcXG5ibG9jay9LY29uZmlnLTIzMy1cXG5ibG9jay9LY29uZmlnOjIzNDplbmRpZiAjIEJMT0NLXFxuLS1cXG5ibG9jay9NYWtlZmlsZT00MD1vYmotJChDT05GSUdfQkxLX0lOTElORV9FTkNSWVBUSU9OX0ZBTExCQUNLKVxcdCs9IGJsay1jcnlwdG8tZmFsbGJhY2sub1xcbmJsb2NrL01ha2VmaWxlOjQxOm9iai0kKENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRClcXHQrPSBob2xkZXIub1xcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmM9NjczPXN0YXRpYyBib29sIGNhbl9mcm9udF9vdmVyd3JpdGUoc3RydWN0IGJhZGJsb2NrcyAqYmIsIGludCBwcmV2LFxcbi0tXFxuYmxvY2svYmFkYmxvY2tzLmMtNzAyLVxcbmJsb2NrL2JhZGJsb2Nrcy5jOjcwMzpcXHRpZiAoKGJiLVxcdTAwM2Vjb3VudCArICgqZXh0cmEpKSBcXHUwMDNlIE1BWF9CQURCTE9DS1MpXFxuYmxvY2svYmFkYmxvY2tzLmMtNzA0LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jPTEwNDk9c3RhdGljIGJvb2wgX2JhZGJsb2Nrc19jbGVhcihzdHJ1Y3QgYmFkYmxvY2tzICpiYiwgc2VjdG9yX3Qgcywgc2VjdG9yX3Qgc2VjdG9ycylcXG4tLVxcbmJsb2NrL2JhZGJsb2Nrcy5jLTExMzAtXFx0XFx0XFx0LyogU3BsaXR0aW5nICovXFxuYmxvY2svYmFkYmxvY2tzLmM6MTEzMTpcXHRcXHRcXHRpZiAoKGJiLVxcdTAwM2Vjb3VudCArIDEpIFxcdTAwM2M9IE1BWF9CQURCTE9DS1MpIHtcXG5ibG9jay9iYWRibG9ja3MuYy0xMTMyLVxcdFxcdFxcdFxcdGxlbiA9IGZyb250X3NwbGl0dGluZ19jbGVhcihiYiwgcHJldiwgXFx1MDAyNmJhZCk7XFxuLS1cXG5ibG9jay9iZGV2LmM9NDM1PXN0YXRpYyB2b2lkIGJkZXZfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuYmxvY2svYmRldi5jLTQ0OS1cXG5ibG9jay9iZGV2LmM6NDUwOlxcdGlmIChNQUpPUihiZGV2LVxcdTAwM2ViZF9kZXYpID09IEJMT0NLX0VYVF9NQUpPUilcXG5ibG9jay9iZGV2LmMtNDUxLVxcdFxcdGJsa19mcmVlX2V4dF9taW5vcihNSU5PUihiZGV2LVxcdTAwM2ViZF9kZXYpKTtcXG4tLVxcbmJsb2NrL2JkZXYuYz04Mjg9aW50IGJkZXZfcGVybWlzc2lvbihkZXZfdCBkZXYsIGJsa19tb2RlX3QgbW9kZSwgdm9pZCAqaG9sZGVyKVxcbi0tXFxuYmxvY2svYmRldi5jLTgzMS1cXG5ibG9jay9iZGV2LmM6ODMyOlxcdHJldCA9IGRldmNncm91cF9jaGVja19wZXJtaXNzaW9uKERFVkNHX0RFVl9CTE9DSyxcXG5ibG9jay9iZGV2LmMtODMzLVxcdFxcdFxcdE1BSk9SKGRldiksIE1JTk9SKGRldiksXFxuLS1cXG5ibG9jay9iZGV2LmM9ODY0PXN0cnVjdCBibG9ja19kZXZpY2UgKmJsa2Rldl9nZXRfbm9fb3BlbihkZXZfdCBkZXYsIGJvb2wgYXV0b2xvYWQpXFxuLS1cXG5ibG9jay9iZGV2LmMtODY5LVxcdGlub2RlID0gaWxvb2t1cChibG9ja2Rldl9zdXBlcmJsb2NrLCBkZXYpO1xcbmJsb2NrL2JkZXYuYzo4NzA6XFx0aWYgKCFpbm9kZSBcXHUwMDI2XFx1MDAyNiBhdXRvbG9hZCBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQUQpKSB7XFxuYmxvY2svYmRldi5jLTg3MS1cXHRcXHRibGtfcmVxdWVzdF9tb2R1bGUoZGV2KTtcXG4tLVxcbmJsb2NrL2JkZXYuYz05NzI9aW50IGJkZXZfb3BlbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBibGtfbW9kZV90IG1vZGUsIHZvaWQgKmhvbGRlcixcXG4tLVxcbmJsb2NrL2JkZXYuYy0xMDE4LVxcdFxcdCAgICAhYmRldl90ZXN0X2ZsYWcoYmRldiwgQkRfV1JJVEVfSE9MREVSKSBcXHUwMDI2XFx1MDAyNlxcbmJsb2NrL2JkZXYuYzoxMDE5OlxcdFxcdCAgICAoZGlzay1cXHUwMDNlZXZlbnRfZmxhZ3MgXFx1MDAyNiBESVNLX0VWRU5UX0ZMQUdfQkxPQ0tfT05fRVhDTF9XUklURSkpIHtcXG5ibG9jay9iZGV2LmMtMTAyMC1cXHRcXHRcXHRiZGV2X3NldF9mbGFnKGJkZXYsIEJEX1dSSVRFX0hPTERFUik7XFxuLS1cXG5ibG9jay9iaW8taW50ZWdyaXR5LWF1dG8uYz04Mz12b2lkIGJpb19pbnRlZ3JpdHlfcHJlcChzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBhY3Rpb24pXFxuLS1cXG5ibG9jay9iaW8taW50ZWdyaXR5LWF1dG8uYy04OS1cXHRiaWQtXFx1MDAzZWJpbyA9IGJpbztcXG5ibG9jay9iaW8taW50ZWdyaXR5LWF1dG8uYzo5MDpcXHRiaWQtXFx1MDAzZWJpcC5iaXBfZmxhZ3MgfD0gQklQX0JMT0NLX0lOVEVHUklUWTtcXG5ibG9jay9iaW8taW50ZWdyaXR5LWF1dG8uYy05MS1cXHRiaW9faW50ZWdyaXR5X2FsbG9jX2J1ZihiaW8sIEdGUF9OT0lPLCBhY3Rpb24gXFx1MDAyNiBCSV9BQ1RfWkVSTyk7XFxuLS1cXG5ibG9jay9ibGstY29yZS5jPTEyNzQ9dm9pZCBfX2Jsa19mbHVzaF9wbHVnKHN0cnVjdCBibGtfcGx1ZyAqcGx1ZywgYm9vbCBmcm9tX3NjaGVkdWxlKVxcbi0tXFxuYmxvY2svYmxrLWNvcmUuYy0xMjg4LVxcdHBsdWctXFx1MDAzZWN1cl9rdGltZSA9IDA7XFxuYmxvY2svYmxrLWNvcmUuYzoxMjg5OlxcdGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5QRl9CTE9DS19UUztcXG5ibG9jay9ibGstY29yZS5jLTEyOTAtfVxcbi0tXFxuYmxvY2svYmxrLW1xLWRlYnVnZnMuYz0xODU9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGhjdHhfZmxhZ19uYW1lW10gPSB7XFxuLS1cXG5ibG9jay9ibGstbXEtZGVidWdmcy5jLTE4OC1cXHRIQ1RYX0ZMQUdfTkFNRShUQUdfSENUWF9TSEFSRUQpLFxcbmJsb2NrL2Jsay1tcS1kZWJ1Z2ZzLmM6MTg5OlxcdEhDVFhfRkxBR19OQU1FKEJMT0NLSU5HKSxcXG5ibG9jay9ibGstbXEtZGVidWdmcy5jLTE5MC1cXHRIQ1RYX0ZMQUdfTkFNRShUQUdfUlIpLFxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MjgxPXZvaWQgYmxrX21xX3dhaXRfcXVpZXNjZV9kb25lKHN0cnVjdCBibGtfbXFfdGFnX3NldCAqc2V0KVxcbmJsb2NrL2Jsay1tcS5jLTI4Mi17XFxuYmxvY2svYmxrLW1xLmM6MjgzOlxcdGlmIChzZXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpXFxuYmxvY2svYmxrLW1xLmMtMjg0LVxcdFxcdHN5bmNocm9uaXplX3NyY3Uoc2V0LVxcdTAwM2VzcmN1KTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTY2MT1zdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX2FsbG9jX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJsa19vcGZfdCBvcGYsXFxuLS1cXG5ibG9jay9ibGstbXEuYy02OTUtXFx0YmxrX3F1ZXVlX2V4aXQocSk7XFxuYmxvY2svYmxrLW1xLmM6Njk2OlxcdHJldHVybiBFUlJfUFRSKC1FV09VTERCTE9DSyk7XFxuYmxvY2svYmxrLW1xLmMtNjk3LX1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTcwMD1zdHJ1Y3QgcmVxdWVzdCAqYmxrX21xX2FsbG9jX3JlcXVlc3RfaGN0eChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSxcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTc2MS1cXG5ibG9jay9ibGstbXEuYzo3NjI6XFx0cmV0ID0gLUVXT1VMREJMT0NLO1xcbmJsb2NrL2Jsay1tcS5jLTc2My1cXHR0YWcgPSBibGtfbXFfZ2V0X3RhZyhcXHUwMDI2ZGF0YSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz0xMjM2PXN0YXRpYyB2b2lkIF9fYmxrX21xX2NvbXBsZXRlX3JlcXVlc3RfcmVtb3RlKHZvaWQgKmRhdGEpXFxuYmxvY2svYmxrLW1xLmMtMTIzNy17XFxuYmxvY2svYmxrLW1xLmM6MTIzODpcXHRfX3JhaXNlX3NvZnRpcnFfaXJxb2ZmKEJMT0NLX1NPRlRJUlEpO1xcbmJsb2NrL2Jsay1tcS5jLTEyMzktfVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MTI3Nz1zdGF0aWMgdm9pZCBibGtfbXFfcmFpc2Vfc29mdGlycShzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuLS1cXG5ibG9jay9ibGstbXEuYy0xMjgzLVxcdGlmIChsbGlzdF9hZGQoXFx1MDAyNnJxLVxcdTAwM2VpcGlfbGlzdCwgbGlzdCkpXFxuYmxvY2svYmxrLW1xLmM6MTI4NDpcXHRcXHRyYWlzZV9zb2Z0aXJxKEJMT0NLX1NPRlRJUlEpO1xcbmJsb2NrL2Jsay1tcS5jLTEyODUtXFx0cHJlZW1wdF9lbmFibGUoKTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTE0MTU9dm9pZCBibGtfZXhlY3V0ZV9ycV9ub3dhaXQoc3RydWN0IHJlcXVlc3QgKnJxLCBib29sIGF0X2hlYWQpXFxuLS1cXG5ibG9jay9ibGstbXEuYy0xNDI5LVxcdGJsa19tcV9pbnNlcnRfcmVxdWVzdChycSwgYXRfaGVhZCA/IEJMS19NUV9JTlNFUlRfQVRfSEVBRCA6IDApO1xcbmJsb2NrL2Jsay1tcS5jOjE0MzA6XFx0YmxrX21xX3J1bl9od19xdWV1ZShoY3R4LCBoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKTtcXG5ibG9jay9ibGstbXEuYy0xNDMxLX1cXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTIzMjE9dm9pZCBibGtfbXFfcnVuX2h3X3F1ZXVlKHN0cnVjdCBibGtfbXFfaHdfY3R4ICpoY3R4LCBib29sIGFzeW5jKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMjMyOS1cXG5ibG9jay9ibGstbXEuYzoyMzMwOlxcdG1pZ2h0X3NsZWVwX2lmKCFhc3luYyBcXHUwMDI2XFx1MDAyNiBoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKTtcXG5ibG9jay9ibGstbXEuYy0yMzMxLVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MjQ4MT12b2lkIGJsa19tcV9zdGFydF9od19xdWV1ZShzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eClcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTI0ODQtXFxuYmxvY2svYmxrLW1xLmM6MjQ4NTpcXHRibGtfbXFfcnVuX2h3X3F1ZXVlKGhjdHgsIGhjdHgtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpO1xcbmJsb2NrL2Jsay1tcS5jLTI0ODYtfVxcbi0tXFxuYmxvY2svYmxrLW1xLmM9MjUxNT12b2lkIGJsa19tcV9zdGFydF9zdG9wcGVkX2h3X3F1ZXVlcyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYm9vbCBhc3luYylcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTI1MjEtXFx0XFx0YmxrX21xX3N0YXJ0X3N0b3BwZWRfaHdfcXVldWUoaGN0eCwgYXN5bmMgfHxcXG5ibG9jay9ibGstbXEuYzoyNTIyOlxcdFxcdFxcdFxcdFxcdChoY3R4LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSk7XFxuYmxvY2svYmxrLW1xLmMtMjUyMy19XFxuLS1cXG5ibG9jay9ibGstbXEuYz00ODM0PWludCBibGtfbXFfYWxsb2NfdGFnX3NldChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldClcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQ4NzgtXFxuYmxvY2svYmxrLW1xLmM6NDg3OTpcXHRpZiAoc2V0LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSB7XFxuYmxvY2svYmxrLW1xLmMtNDg4MC1cXHRcXHRzZXQtXFx1MDAzZXNyY3UgPSBrbWFsbG9jX29iaigqc2V0LVxcdTAwM2VzcmN1KTtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQ5Mjktb3V0X2NsZWFudXBfc3JjdTpcXG5ibG9jay9ibGstbXEuYzo0OTMwOlxcdGlmIChzZXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkxLX01RX0ZfQkxPQ0tJTkcpXFxuYmxvY2svYmxrLW1xLmMtNDkzMS1cXHRcXHRjbGVhbnVwX3NyY3Vfc3RydWN0KHNldC1cXHUwMDNlc3JjdSk7XFxuYmxvY2svYmxrLW1xLmMtNDkzMi1vdXRfZnJlZV9zcmN1OlxcbmJsb2NrL2Jsay1tcS5jOjQ5MzM6XFx0aWYgKHNldC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCTEtfTVFfRl9CTE9DS0lORylcXG5ibG9jay9ibGstbXEuYy00OTM0LVxcdFxcdGtmcmVlKHNldC1cXHUwMDNlc3JjdSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz00OTU1PXZvaWQgYmxrX21xX2ZyZWVfdGFnX3NldChzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldClcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTQ5NzYtXFx0Y2xlYW51cF9zcmN1X3N0cnVjdChcXHUwMDI2c2V0LVxcdTAwM2V0YWdzX3NyY3UpO1xcbmJsb2NrL2Jsay1tcS5jOjQ5Nzc6XFx0aWYgKHNldC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCTEtfTVFfRl9CTE9DS0lORykge1xcbmJsb2NrL2Jsay1tcS5jLTQ5NzgtXFx0XFx0c3JjdV9iYXJyaWVyKHNldC1cXHUwMDNlc3JjdSk7XFxuLS1cXG5ibG9jay9ibGstbXEuYz01MjgxPXN0YXRpYyBpbnQgX19pbml0IGJsa19tcV9pbml0KHZvaWQpXFxuLS1cXG5ibG9jay9ibGstbXEuYy01Mjg5LVxcdFxcdFxcdCBfX2Jsa19tcV9jb21wbGV0ZV9yZXF1ZXN0X3JlbW90ZSwgTlVMTCk7XFxuYmxvY2svYmxrLW1xLmM6NTI5MDpcXHRvcGVuX3NvZnRpcnEoQkxPQ0tfU09GVElSUSwgYmxrX2RvbmVfc29mdGlycSk7XFxuYmxvY2svYmxrLW1xLmMtNTI5MS1cXG5ibG9jay9ibGstbXEuYzo1MjkyOlxcdGNwdWhwX3NldHVwX3N0YXRlX25vY2FsbHMoQ1BVSFBfQkxPQ0tfU09GVElSUV9ERUFELFxcbmJsb2NrL2Jsay1tcS5jLTUyOTMtXFx0XFx0XFx0XFx0ICBcXFwiYmxvY2svc29mdGlycTpkZWFkXFxcIiwgTlVMTCxcXG4tLVxcbmJsb2NrL2Jsay1tcS5oPTQ0MD1kbyB7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbmJsb2NrL2Jsay1tcS5oOjQ0MTpcXHRpZiAoKHEpLVxcdTAwM2V0YWdfc2V0LVxcdTAwM2VmbGFncyBcXHUwMDI2IEJMS19NUV9GX0JMT0NLSU5HKSB7XFx0XFx0XFxcXFxcbmJsb2NrL2Jsay1tcS5oLTQ0Mi1cXHRcXHRzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKl9fdGFnX3NldCA9IChxKS1cXHUwMDNldGFnX3NldDsgXFxcXFxcbi0tXFxuYmxvY2svYmxrLXBtLmgtMi1cXG5ibG9jay9ibGstcG0uaDozOiNpZm5kZWYgX0JMT0NLX0JMS19QTV9IX1xcbmJsb2NrL2Jsay1wbS5oOjQ6I2RlZmluZSBfQkxPQ0tfQkxLX1BNX0hfXFxuYmxvY2svYmxrLXBtLmgtNS1cXG4tLVxcbmJsb2NrL2Jsay1wbS5oPTMwPXN0YXRpYyBpbmxpbmUgdm9pZCBibGtfcG1fbWFya19sYXN0X2J1c3koc3RydWN0IHJlcXVlc3QgKnJxKVxcbi0tXFxuYmxvY2svYmxrLXBtLmgtMzQtXFxuYmxvY2svYmxrLXBtLmg6MzU6I2VuZGlmIC8qIF9CTE9DS19CTEtfUE1fSF8gKi9cXG4tLVxcbmJsb2NrL2Jsay5oPTI2MT1zdGF0aWMgaW5saW5lIGJvb2wgYmlvX2ludGVncml0eV9lbmRpbyhzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGsuaC0yNjQtXFxuYmxvY2svYmxrLmg6MjY1OlxcdGlmIChiaXAgXFx1MDAyNlxcdTAwMjYgKGJpcC1cXHUwMDNlYmlwX2ZsYWdzIFxcdTAwMjYgQklQX0JMT0NLX0lOVEVHUklUWSkpXFxuYmxvY2svYmxrLmgtMjY2LVxcdFxcdHJldHVybiBfX2Jpb19pbnRlZ3JpdHlfZW5kaW8oYmlvKTtcXG4tLVxcbmJsb2NrL2Jsay5oPTcxNz1zdGF0aWMgaW5saW5lIHU2NCBibGtfdGltZV9nZXRfbnModm9pZClcXG4tLVxcbmJsb2NrL2Jsay5oLTcyOS1cXHQgKlxcbmJsb2NrL2Jsay5oOjczMDpcXHQgKiBjdXJfa3RpbWUgY2FuIGJlIHplcm9lZCBieSBwcmUtZW1wdGlvbiB0aGUgbW9tZW50IFBGX0JMT0NLX1RTIGlzIHNldC5cXG5ibG9jay9ibGsuaC03MzEtXFx0ICovXFxuLS1cXG5ibG9jay9ibGsuaC03MzUtXFx0XFx0V1JJVEVfT05DRShwbHVnLVxcdTAwM2VjdXJfa3RpbWUsIG5vdyk7XFxuYmxvY2svYmxrLmg6NzM2OlxcdFxcdC8qIEVuc3VyZSBQRl9CTE9DS19UUyBpcyBzZXQgYWZ0ZXIgY3VyX2t0aW1lLiAqL1xcbmJsb2NrL2Jsay5oLTczNy1cXHRcXHRiYXJyaWVyKCk7XFxuYmxvY2svYmxrLmg6NzM4OlxcdFxcdGN1cnJlbnQtXFx1MDAzZWZsYWdzIHw9IFBGX0JMT0NLX1RTO1xcbmJsb2NrL2Jsay5oLTczOS1cXHR9XFxuLS1cXG5ibG9jay9ic2ctbGliLmM9MzYyPXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpic2dfc2V0dXBfcXVldWUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLFxcbi0tXFxuYmxvY2svYnNnLWxpYi5jLTM4My1cXHRzZXQtXFx1MDAzZWNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBic2dfam9iKSArIGRkX2pvYl9zaXplO1xcbmJsb2NrL2JzZy1saWIuYzozODQ6XFx0c2V0LVxcdTAwM2VmbGFncyA9IEJMS19NUV9GX0JMT0NLSU5HO1xcbmJsb2NrL2JzZy1saWIuYy0zODUtXFx0aWYgKGJsa19tcV9hbGxvY190YWdfc2V0KHNldCkpXFxuLS1cXG5ibG9jay9nZW5oZC5jPTE3OD1zdGF0aWMgc3RydWN0IGJsa19tYWpvcl9uYW1lIHtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTgxLVxcdGNoYXIgbmFtZVsxNl07XFxuYmxvY2svZ2VuaGQuYzoxODI6I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcXG5ibG9jay9nZW5oZC5jLTE4My1cXHR2b2lkICgqcHJvYmUpKGRldl90IGRldnQpO1xcbi0tXFxuYmxvY2svZ2VuaGQuYz0yMzQ9aW50IF9fcmVnaXN0ZXJfYmxrZGV2KHVuc2lnbmVkIGludCBtYWpvciwgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMjczLVxcdHAtXFx1MDAzZW1ham9yID0gbWFqb3I7XFxuYmxvY2svZ2VuaGQuYzoyNzQ6I2lmZGVmIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQURcXG5ibG9jay9nZW5oZC5jLTI3NS1cXHRwLVxcdTAwM2Vwcm9iZSA9IHByb2JlO1xcbi0tXFxuYmxvY2svZ2VuaGQuYz00Mjc9c3RhdGljIGludCBfX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuLS1cXG5ibG9jay9nZW5oZC5jLTQ4NC1cXHRcXHRcXHRnb3RvIG91dDtcXG5ibG9jay9nZW5oZC5jOjQ4NTpcXHRcXHRkaXNrLVxcdTAwM2VtYWpvciA9IEJMT0NLX0VYVF9NQUpPUjtcXG5ibG9jay9nZW5oZC5jLTQ4Ni1cXHRcXHRkaXNrLVxcdTAwM2VmaXJzdF9taW5vciA9IHJldDtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNTcxLW91dF9mcmVlX2V4dF9taW5vcjpcXG5ibG9jay9nZW5oZC5jOjU3MjpcXHRpZiAoZGlzay1cXHUwMDNlbWFqb3IgPT0gQkxPQ0tfRVhUX01BSk9SKVxcbmJsb2NrL2dlbmhkLmMtNTczLVxcdFxcdGJsa19mcmVlX2V4dF9taW5vcihkaXNrLVxcdTAwM2VmaXJzdF9taW5vcik7XFxuLS1cXG5ibG9jay9nZW5oZC5jPTg2Nz1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTg3OC1cXG5ibG9jay9nZW5oZC5jOjg3OTojaWZkZWYgQ09ORklHX0JMT0NLX0xFR0FDWV9BVVRPTE9BRFxcbmJsb2NrL2dlbmhkLmMtODgwLXN0YXRpYyBib29sIGJsa19wcm9iZV9kZXYoZGV2X3QgZGV2dClcXG4tLVxcbmJsb2NrL2dlbmhkLmM9ODk3PXZvaWQgYmxrX3JlcXVlc3RfbW9kdWxlKGRldl90IGRldnQpXFxuLS1cXG5ibG9jay9nZW5oZC5jLTkxMC19XFxuYmxvY2svZ2VuaGQuYzo5MTE6I2VuZGlmIC8qIENPTkZJR19CTE9DS19MRUdBQ1lfQVVUT0xPQUQgKi9cXG5ibG9jay9nZW5oZC5jLTkxMi1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9OTk5PXN0YXRpYyBpbnQgX19pbml0IGdlbmhkX2RldmljZV9pbml0KHZvaWQpXFxuLS1cXG5ibG9jay9nZW5oZC5jLTEwMDctXFxuYmxvY2svZ2VuaGQuYzoxMDA4OlxcdHJlZ2lzdGVyX2Jsa2RldihCTE9DS19FWFRfTUFKT1IsIFxcXCJibGtleHRcXFwiKTtcXG5ibG9jay9nZW5oZC5jLTEwMDktXFxuLS1cXG5ibG9jay9nZW5oZC5jPTE0NTQ9c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTQ5My1cXHRsb2NrZGVwX2luaXRfbWFwKFxcdTAwMjZkaXNrLVxcdTAwM2Vsb2NrZGVwX21hcCwgXFxcIihiaW8gY29tcGxldGlvbilcXFwiLCBsa2NsYXNzLCAwKTtcXG5ibG9jay9nZW5oZC5jOjE0OTQ6I2lmZGVmIENPTkZJR19CTE9DS19IT0xERVJfREVQUkVDQVRFRFxcbmJsb2NrL2dlbmhkLmMtMTQ5NS1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZGlzay1cXHUwMDNlc2xhdmVfYmRldnMpO1xcbi0tXFxuYmxvY2svaW9jdGwuYz05ODE9aW50IGJsa2Rldl91cmluZ19jbWQoc3RydWN0IGlvX3VyaW5nX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgaXNzdWVfZmxhZ3MpXFxuLS1cXG5ibG9jay9pb2N0bC5jLTk5OC1cXHRiaWMtXFx1MDAzZXJlcyA9IDA7XFxuYmxvY2svaW9jdGwuYzo5OTk6XFx0YmljLVxcdTAwM2Vub3dhaXQgPSBpc3N1ZV9mbGFncyBcXHUwMDI2IElPX1VSSU5HX0ZfTk9OQkxPQ0s7XFxuYmxvY2svaW9jdGwuYy0xMDAwLVxcbmJsb2NrL2lvY3RsLmMtMTAwMS1cXHRzd2l0Y2ggKGNtZF9vcCkge1xcbmJsb2NrL2lvY3RsLmM6MTAwMjpcXHRjYXNlIEJMT0NLX1VSSU5HX0NNRF9ESVNDQVJEOlxcbmJsb2NrL2lvY3RsLmMtMTAwMy1cXHRcXHRyZXR1cm4gYmxrZGV2X2NtZF9kaXNjYXJkKGNtZCk7XFxuYmxvY2svaW9jdGwuYzoxMDA0OlxcdGNhc2UgQkxPQ0tfVVJJTkdfQ01EX1pPTkVfUkVTRVRfQUxMOlxcbmJsb2NrL2lvY3RsLmMtMTAwNS1cXHRcXHRyZXR1cm4gYmxrZGV2X2NtZF96b25lX3Jlc2V0X2FsbChjbWQpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9NYWtlZmlsZS01LVxcbmJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkxPQ0spICs9IGNvcmUub1xcbmJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGUtNy1vYmotJChDT05GSUdfQUNPUk5fUEFSVElUSU9OKSArPSBhY29ybi5vXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2Fjb3JuLmM9MTU2PWludCBhZGZzcGFydF9jaGVja19DVU1BTkEoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpzdGF0ZSlcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvYWNvcm4uYy0yMDQtXFx0XFx0Zmlyc3Rfc2VjdG9yICs9IG5yX3NlY3RzO1xcbmJsb2NrL3BhcnRpdGlvbnMvYWNvcm4uYzoyMDU6XFx0XFx0c3RhcnRfYmxrICs9IG5yX3NlY3RzIFxcdTAwM2VcXHUwMDNlIChCTE9DS19TSVpFX0JJVFMgLSA5KTtcXG5ibG9jay9wYXJ0aXRpb25zL2Fjb3JuLmMtMjA2LVxcdFxcdG5yX3NlY3RzID0gMDsgLyogaG1tIC0gc2hvdWxkIGJlIHBhcnRpdGlvbiBzaXplICovXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz00MjM9c3RhdGljIHN0cnVjdCBibG9ja19kZXZpY2UgKmFkZF9wYXJ0aXRpb24oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGludCBwYXJ0bm8sXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy00ODEtXFx0XFx0XFx0Z290byBvdXRfcHV0O1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjQ4MjpcXHRcXHRkZXZ0ID0gTUtERVYoQkxPQ0tfRVhUX01BSk9SLCBlcnIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTQ4My1cXHR9XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTY3PXN0YXRpYyBib29sIGxkbV9wYXJzZV9wcml2aGVhZChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHByaXZoZWFkICpwaClcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTEyLS8qKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTEzOiAqIGxkbV9wYXJzZV90b2NibG9jayAtIFJlYWQgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmVcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjExNDogKiBAZGF0YTogIFJhdyBkYXRhYmFzZSBUT0NCTE9DSyBzdHJ1Y3R1cmUgbG9hZGVkIGZyb20gdGhlIGRldmljZVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE1LSAqIEB0b2M6ICAgSW4tbWVtb3J5IHRvYyBzdHJ1Y3R1cmUgaW4gd2hpY2ggdG8gcmV0dXJuIHBhcnNlZCBpbmZvcm1hdGlvblxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE2LSAqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMTc6ICogVGhpcyBwYXJzZXMgdGhlIExETSBEYXRhYmFzZSBUT0NCTE9DSyAodGFibGUgb2YgY29udGVudHMpIHN0cnVjdHVyZSBzdXBwbGllZFxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTE4LSAqIGluIEBkYXRhIGFuZCBzZXRzIHVwIHRoZSBpbi1tZW1vcnkgdG9jYmxvY2sgc3RydWN0dXJlIEB0b2Mgd2l0aCB0aGUgb2J0YWluZWRcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTIyLSAqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMjM6ICogUmV0dXJuOiAgJ3RydWUnICAgQHRvYyBjb250YWlucyB0aGUgVE9DQkxPQ0sgZGF0YVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTI0LSAqICAgICAgICAgICdmYWxzZScgIEB0b2MgY29udGVudHMgYXJlIHVuZGVmaW5lZFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0xMjY9c3RhdGljIGJvb2wgbGRtX3BhcnNlX3RvY2Jsb2NrIChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHRvY2Jsb2NrICp0b2MpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTEyOS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjEzMDpcXHRpZiAoTUFHSUNfVE9DQkxPQ0sgIT0gZ2V0X3VuYWxpZ25lZF9iZTY0KGRhdGEpKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxMzE6XFx0XFx0bGRtX2NyaXQgKFxcXCJDYW5ub3QgZmluZCBUT0NCTE9DSywgZGF0YWJhc2UgbWF5IGJlIGNvcnJ1cHQuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMzItXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xMzktXFx0XFx0XFx0c2l6ZW9mICh0b2MtXFx1MDAzZWJpdG1hcDFfbmFtZSkpICE9IDApIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjE0MDpcXHRcXHRsZG1fY3JpdCAoXFxcIlRPQ0JMT0NLJ3MgZmlyc3QgYml0bWFwIGlzICclcycsIHNob3VsZCBiZSAnJXMnLlxcXCIsXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNDEtXFx0XFx0XFx0XFx0VE9DX0JJVE1BUDEsIHRvYy1cXHUwMDNlYml0bWFwMV9uYW1lKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMTQ4LVxcdFxcdFxcdHNpemVvZiAodG9jLVxcdTAwM2ViaXRtYXAyX25hbWUpKSAhPSAwKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzoxNDk6XFx0XFx0bGRtX2NyaXQgKFxcXCJUT0NCTE9DSydzIHNlY29uZCBiaXRtYXAgaXMgJyVzJywgc2hvdWxkIGJlICclcycuXFxcIixcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTE1MC1cXHRcXHRcXHRcXHRUT0NfQklUTUFQMiwgdG9jLVxcdTAwM2ViaXRtYXAyX25hbWUpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTItXFx0fVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MTUzOlxcdGxkbV9kZWJ1ZyAoXFxcIlBhcnNlZCBUT0NCTE9DSyBzdWNjZXNzZnVsbHkuXFxcIik7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0xNTQtXFx0cmV0dXJuIHRydWU7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTI2Mz1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfcHJpdmhlYWRzKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM0Ny0gKlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzQ4OiAqIFJldHVybjogICd0cnVlJyAgIEB0b2MxIGNvbnRhaW5zIHZhbGlkYXRlZCBUT0NCTE9DSyBpbmZvXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNDktICogICAgICAgICAgJ2ZhbHNlJyAgQHRvYzEgY29udGVudHMgYXJlIHVuZGVmaW5lZFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYz0zNTE9c3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3RvY2Jsb2NrcyhzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zNzItXFx0LypcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM3MzpcXHQgKiBUcnkgdG8gcmVhZCBhbmQgcGFyc2UgYWxsIGZvdXIgVE9DQkxPQ0tzLlxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzc0LVxcdCAqXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzU6XFx0ICogV2luZG93cyBWaXN0YSBMRE0gdjIuMTIgZG9lcyBub3QgYWx3YXlzIGhhdmUgYWxsIGZvdXIgVE9DQkxPQ0tzIHNvXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozNzY6XFx0ICogc2tpcCBhbnkgdGhhdCBmYWlsIGFzIGxvbmcgYXMgd2UgZ2V0IGF0IGxlYXN0IG9uZSB2YWxpZCBUT0NCTE9DSy5cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM3Ny1cXHQgKi9cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzgwLVxcdFxcdGlmICghZGF0YSkge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6MzgxOlxcdFxcdFxcdGxkbV9lcnJvcihcXFwiRGlzayByZWFkIGZhaWxlZCBmb3IgVE9DQkxPQ0sgJWQuXFxcIiwgaSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy0zODItXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM4OC1cXHRpZiAoIW5yX3Ricykge1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmM6Mzg5OlxcdFxcdGxkbV9jcml0KFxcXCJGYWlsZWQgdG8gZmluZCBhIHZhbGlkIFRPQ0JMT0NLLlxcXCIpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzkwLVxcdFxcdGdvdG8gZXJyO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzkxLVxcdH1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jOjM5MjpcXHQvKiBSYW5nZSBjaGVjayB0aGUgVE9DQkxPQ0sgYWdhaW5zdCBhIHByaXZoZWFkLiAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtMzkzLVxcdGlmICgoKHRiWzBdLVxcdTAwM2ViaXRtYXAxX3N0YXJ0ICsgdGJbMF0tXFx1MDAzZWJpdG1hcDFfc2l6ZSkgXFx1MDAzZSBwaC1cXHUwMDNlY29uZmlnX3NpemUpIHx8XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTM5OC1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzozOTk6XFx0LyogQ29tcGFyZSBhbGwgbG9hZGVkIFRPQ0JMT0NLcy4gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMC1cXHRmb3IgKGkgPSAxOyBpIFxcdTAwM2MgbnJfdGJzOyBpKyspIHtcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwMS1cXHRcXHRpZiAoIWxkbV9jb21wYXJlX3RvY2Jsb2Nrcyh0YlswXSwgdGJbaV0pKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0MDI6XFx0XFx0XFx0bGRtX2NyaXQoXFxcIlRPQ0JMT0NLcyAwIGFuZCAlZCBkbyBub3QgbWF0Y2guXFxcIiwgaSk7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00MDMtXFx0XFx0XFx0Z290byBlcnI7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQwNS1cXHR9XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0MDY6XFx0bGRtX2RlYnVnKFxcXCJWYWxpZGF0ZWQgJWQgVE9DQkxPQ0tzIHN1Y2Nlc3NmdWxseS5cXFwiLCBucl90YnMpO1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmMtNDA3LVxcdHJlc3VsdCA9IHRydWU7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jPTQyNT1zdGF0aWMgYm9vbCBsZG1fdmFsaWRhdGVfdm1kYihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlLFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYy00NjEtXFx0aWYgKCh2bS1cXHUwMDNldmJsa19zaXplICogdm0tXFx1MDAzZWxhc3RfdmJsa19zZXEpIFxcdTAwM2UgKHRvYy1cXHUwMDNlYml0bWFwMV9zaXplIFxcdTAwM2NcXHUwMDNjIDkpKSB7XFxuYmxvY2svcGFydGl0aW9ucy9sZG0uYzo0NjI6XFx0XFx0bGRtX2NyaXQgKFxcXCJWTURCIGV4Y2VlZHMgYWxsb3dlZCBzaXplIHNwZWNpZmllZCBieSBUT0NCTE9DSy4gIFxcXCJcXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5jLTQ2My1cXHRcXHRcXHRcXHRcXFwiRGF0YWJhc2UgaXMgY29ycnVwdC4gIEFib3J0aW5nLlxcXCIpO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uaD0yMT1zdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnM7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5oLTI2LSNkZWZpbmUgTUFHSUNfUFJJVkhFQURcXHQweDUwNTI0OTU2NDg0NTQxNDRVTExcXHQvKiBQUklWSEVBRCAqL1xcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmg6Mjc6I2RlZmluZSBNQUdJQ19UT0NCTE9DS1xcdDB4NTQ0RjQzNDI0QzRGNDM0QlVMTFxcdC8qIFRPQ0JMT0NLICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uaC0yOC1cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvbGRtLmgtODMtI2RlZmluZSBUT0NfQklUTUFQMVxcdFxcdFxcXCJjb25maWdcXFwiXFx0LyogTmFtZXMgb2YgdGhlIHR3byBkZWZpbmVkICovXFxuYmxvY2svcGFydGl0aW9ucy9sZG0uaDo4NDojZGVmaW5lIFRPQ19CSVRNQVAyXFx0XFx0XFxcImxvZ1xcXCJcXHRcXHQvKiBiaXRtYXBzIGluIHRoZSBUT0NCTE9DSy4gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2xkbS5oLTg1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0NzoxMi45OTE2Mjg3MTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODA5NjI4Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGNvcmUgYmxvY2sgZGV2aWNlIGNvbXBvbmVudHMgYXJlIGJlaW5nIGNvbXBpbGVkLiBNeSBmaXJzdCBzdG9wIGlzIGdvaW5nIHRvIGJlIGBibG9jay9NYWtlZmlsZWAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHRoZSByZWNpcGUgZm9yIGJ1aWxkaW5nIGBiZGV2Lm9gLCBgYmxrLWNvcmUub2AsIGFuZCBhbnl0aGluZyB3aXRoaW4gdGhlIGBwYXJ0aXRpb25zL2AgZGlyZWN0b3J5LiBUaGF0IE1ha2VmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgbG93LWRvd24gb24gdGhlIGRlcGVuZGVuY2llcywgY29tcGlsZXIgZmxhZ3MsIGFuZCB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5kYW1lbnRhbCBwaWVjZXMgb2YgbXkgYmxvY2sgbGF5ZXIgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjA4LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6MTUuODAxMjU5MDIzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5OTg5MjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9iai15fGNvcmUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svTWFrZWZpbGU9Nj1DT05URVhUX0FOQUxZU0lTIDo9IHlcXG5ibG9jay9NYWtlZmlsZS03LVxcbmJsb2NrL01ha2VmaWxlOjg6b2JqLXlcXHRcXHQ6PSBiZGV2Lm8gZm9wcy5vIGJpby5vIGVsZXZhdG9yLm8gYmxrLWNvcmUubyBibGstc3lzZnMubyBcXFxcXFxuYmxvY2svTWFrZWZpbGUtOS1cXHRcXHRcXHRibGstZmx1c2gubyBibGstc2V0dGluZ3MubyBibGstaW9jLm8gYmxrLW1hcC5vIFxcXFxcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvTWFrZWZpbGUtNS1cXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JMT0NLKSArPSBjb3JlLm9cXG5ibG9jay9wYXJ0aXRpb25zL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX0FDT1JOX1BBUlRJVElPTikgKz0gYWNvcm4ub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0NzoxNS44OTEyNTI0OTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjk0Mzk4MTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERldmljZSBDb25maWd1cmF0aW9uIE9wdGlvbnMqKlxuXG5BbHJpZ2h0LCBzbyBgQ09ORklHX0JMT0NLYCBpcyB0aGUgY2VudHJhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIHRoYXQgbWFrZXMgc2Vuc2UuIFRoZW4gYEJMT0NLYCBzZWVtcyB0byBiZSB0aGUgZGVmYXVsdCwgc3RhbmRhcmQgbWVudWNvbmZpZyBvcHRpb24uIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSBhcmUgYW55IG1vcmUgZmluZS1ncmFpbmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHdyaXRlIHN0cmVhbXMgb3IgYW55dGhpbmcgc2ltaWxhciB0aGF0IEkgbWlnaHQgYmUgYWJsZSB0byB0d2Vhay4gVGhlIGdvYWwgaGVyZSBpcyB0byBkZXRlcm1pbmUgd2hldGhlciBJIGNhbiBjdXN0b21pemUgd3JpdGUgYmVoYXZpb3IuIEknbGwgbmVlZCB0byBkaWcgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSB0byBnZXQgYSBnb29kIGhhbmRsZSBvbiB3cml0ZSBzdHJlYW1zLiBUaW1lIHRvIGdyZXAgZm9yIGFueXRoaW5nIGNvbnRhaW5pbmcgXCJ3cml0ZV9zdHJlYW1zXCIgaW4gdGhlIGBibG9jay9gIGRpcmVjdG9yeSBhbmQgdW5kZXIgYGluY2x1ZGUvbGludXgvYC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgbGVhZCBtZSB0byBzb21lIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIG9yIHJlbGF0ZWQgY29kZSB0aGF0IEkgY2FuIGV4YW1pbmUgbW9yZSBjbG9zZWx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzkzNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjE4LjU4NTY2MTI1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1OTQ4NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3JpdGVfc3RyZWFtc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmxrLWNvcmUuYz02MjI9c3RhdGljIGludCBibGtfcGFydGl0aW9uX3JlbWFwKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1jb3JlLmMtNjM0LVxcdGlmIChiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSBcXHUwMDI2XFx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcXG5ibG9jay9ibGstY29yZS5jOjYzNTpcXHRcXHRpZiAodW5saWtlbHkoYmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gXFx1MDAzZSBwLVxcdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKSlcXG5ibG9jay9ibGstY29yZS5jLTYzNi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jPTIyMj1RVUVVRV9TWVNGU19MSU1JVF9TSE9XKG1heF9zZWdtZW50X3NpemUpXFxuYmxvY2svYmxrLXN5c2ZzLmM6MjIzOlFVRVVFX1NZU0ZTX0xJTUlUX1NIT1cobWF4X3dyaXRlX3N0cmVhbXMpXFxuYmxvY2svYmxrLXN5c2ZzLmMtMjI0LVFVRVVFX1NZU0ZTX0xJTUlUX1NIT1cod3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5KVxcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmM9NjE4PVFVRVVFX0xJTV9ST19FTlRSWShxdWV1ZV9tYXhfc2VnbWVudF9zaXplLCBcXFwibWF4X3NlZ21lbnRfc2l6ZVxcXCIpO1xcbmJsb2NrL2Jsay1zeXNmcy5jOjYxOTpRVUVVRV9MSU1fUk9fRU5UUlkocXVldWVfbWF4X3dyaXRlX3N0cmVhbXMsIFxcXCJtYXhfd3JpdGVfc3RyZWFtc1xcXCIpO1xcbmJsb2NrL2Jsay1zeXNmcy5jLTYyMC1RVUVVRV9MSU1fUk9fRU5UUlkocXVldWVfd3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5LCBcXFwid3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5XFxcIik7XFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYz03MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmNvbnN0IHF1ZXVlX2F0dHJzW10gPSB7XFxuLS1cXG5ibG9jay9ibGstc3lzZnMuYy03NDQtXFx0XFx1MDAyNnF1ZXVlX21heF9zZWdtZW50X3NpemVfZW50cnkuYXR0cixcXG5ibG9jay9ibGstc3lzZnMuYzo3NDU6XFx0XFx1MDAyNnF1ZXVlX21heF93cml0ZV9zdHJlYW1zX2VudHJ5LmF0dHIsXFxuYmxvY2svYmxrLXN5c2ZzLmMtNzQ2LVxcdFxcdTAwMjZxdWV1ZV93cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHlfZW50cnkuYXR0cixcXG4tLVxcbmJsb2NrL2ZvcHMuYz0zOTQ9c3RhdGljIHNzaXplX3QgYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4tLVxcbmJsb2NrL2ZvcHMuYy00MDUtXFx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFKSB7XFxuYmxvY2svZm9wcy5jOjQwNjpcXHRcXHR1MTYgbWF4X3dyaXRlX3N0cmVhbXMgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKGJkZXYpO1xcbmJsb2NrL2ZvcHMuYy00MDctXFxuYmxvY2svZm9wcy5jLTQwOC1cXHRcXHRpZiAoaW9jYi1cXHUwMDNla2lfd3JpdGVfc3RyZWFtKSB7XFxuYmxvY2svZm9wcy5jOjQwOTpcXHRcXHRcXHRpZiAoaW9jYi1cXHUwMDNla2lfd3JpdGVfc3RyZWFtIFxcdTAwM2UgbWF4X3dyaXRlX3N0cmVhbXMpXFxuYmxvY2svZm9wcy5jLTQxMC1cXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5ibG9jay9mb3BzLmM6NDExOlxcdFxcdH0gZWxzZSBpZiAobWF4X3dyaXRlX3N0cmVhbXMpIHtcXG5ibG9jay9mb3BzLmMtNDEyLVxcdFxcdFxcdGVudW0gcndfaGludCB3cml0ZV9oaW50ID1cXG4tLVxcbmJsb2NrL2ZvcHMuYy00MTktXFx0XFx0XFx0ICovXFxuYmxvY2svZm9wcy5jOjQyMDpcXHRcXHRcXHRpZiAod3JpdGVfaGludCBcXHUwMDNjPSBtYXhfd3JpdGVfc3RyZWFtcylcXG5ibG9jay9mb3BzLmMtNDIxLVxcdFxcdFxcdFxcdGlvY2ItXFx1MDAzZWtpX3dyaXRlX3N0cmVhbSA9IHdyaXRlX2hpbnQ7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0yMDI9c3RhdGljIHNzaXplX3QgcGFydF9kaXNjYXJkX2FsaWdubWVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIwNy1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMDg6c3RhdGljIHNzaXplX3QgcGFydF93cml0ZV9zdHJlYW1zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIwOS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMTAte1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIxMTpcXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFxcXCIldVxcXFxuXFxcIiwgZGV2X3RvX2JkZXYoZGV2KS1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyk7XFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjEyLX1cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIxOC0gKi9cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMTk6c3RhdGljIHZvaWQgcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIyMC17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMjUtXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjI2OlxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwYXJ0LVxcdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zOyBpKyspXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI3LVxcdFxcdF9fY2xlYXJfYml0KHBhcnQtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV0sXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjI4OlxcdFxcdFxcdCAgICBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMjktfVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzMC1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMzE6c3RhdGljIGludCBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQsIHU4IG5yKVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzMi17XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMzQtXFx0dW5zaWduZWQgaW50IG1heCA9IG1pbl90KHVuc2lnbmVkIGludCxcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMzU6XFx0XFx0XFx0XFx0IGJkZXZfbGltaXRzKHBhcnQpLVxcdTAwM2VtYXhfd3JpdGVfc3RyZWFtcywgVThfTUFYKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMzYtXFx0dTggKm1hcCA9IE5VTEw7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNTctXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjU4OlxcdGN1ciA9IHBhcnQtXFx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjU5LVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjY5LVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI3MDpcXHRucl9mcmVlID0gbWF4IC0gYml0bWFwX3dlaWdodChkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggKyAxKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNzEtXFx0aWYgKG5yIFxcdTAwM2UgY3VyIFxcdTAwMjZcXHUwMDI2IG5yIC0gY3VyIFxcdTAwM2UgbnJfZnJlZSkge1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjg1LVxcdFxcdFxcdF9fY2xlYXJfYml0KHBhcnQtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV0sXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjg2OlxcdFxcdFxcdFxcdCAgICBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODctXFx0fSBlbHNlIHtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODgtXFx0XFx0Zm9yIChpID0gY3VyOyBpIFxcdTAwM2MgbnI7IGkrKykge1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI4OTpcXHRcXHRcXHRpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI5MC1cXHRcXHRcXHRcXHRcXHRcXHRtYXggKyAxLCAxKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyOTE6XFx0XFx0XFx0X19zZXRfYml0KGlkLCBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTItXFx0XFx0XFx0bWFwW2ldID0gaWQ7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTYtXFx0c3dhcChwYXJ0LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwLCBtYXApO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI5NzpcXHRwYXJ0LVxcdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zID0gbnI7XFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjk4LVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMzA1LVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjMwNjpzdGF0aWMgc3NpemVfdCBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTMwNy1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTMyNS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzozMjY6XFx0cmV0ID0gcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhkZXZfdG9fYmRldihkZXYpLCBucik7XFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMzI3LVxcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MzM5PXN0YXRpYyBERVZJQ0VfQVRUUihpbmZsaWdodCwgMDQ0NCwgcGFydF9pbmZsaWdodF9zaG93LCBOVUxMKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzozNDA6c3RhdGljIERFVklDRV9BVFRSKHdyaXRlX3N0cmVhbXMsIDA2NDQsIHBhcnRfd3JpdGVfc3RyZWFtc19zaG93LFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjM0MTpcXHRcXHQgICBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTM0Mi0jaWZkZWYgQ09ORklHX0ZBSUxfTUFLRV9SRVFVRVNUXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0zNDc9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBhcnRfYXR0cnNbXSA9IHtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTM1NS1cXHRcXHUwMDI2ZGV2X2F0dHJfaW5mbGlnaHQuYXR0cixcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzozNTY6XFx0XFx1MDAyNmRldl9hdHRyX3dyaXRlX3N0cmVhbXMuYXR0cixcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0zNTctI2lmZGVmIENPTkZJR19GQUlMX01BS0VfUkVRVUVTVFxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9NDAwPXZvaWQgZHJvcF9wYXJ0aXRpb24oc3RydWN0IGJsb2NrX2RldmljZSAqcGFydClcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTQwMy1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzo0MDQ6XFx0cGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy00MDUtXFx0eGFfZXJhc2UoXFx1MDAyNnBhcnQtXFx1MDAzZWJkX2Rpc2stXFx1MDAzZXBhcnRfdGJsLCBiZGV2X3BhcnRubyhwYXJ0KSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjE4LjcwMDI2MTcxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NDI1MTY4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgV3JpdGUgU3RyZWFtIFN1cHBvcnQqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhbnkgZXhpc3Rpbmcgc3VwcG9ydCBmb3Igd3JpdGUgc3RyZWFtcyBpbiB0aGUgYmxvY2sgZGV2aWNlIGxheWVyLCBvciBzcGVjaWZpY2FsbHksIGlmIG51bGxfYmxrIGlzIHBsYXlpbmcgYmFsbC4gVGhlIGZpcnN0IHN0ZXAgaXMgcHJldHR5IGNsZWFyOiBJJ2xsIG5lZWQgdG8gdXNlIGBncmVwYCB0byBodW50IGRvd24gaW5zdGFuY2VzIG9mIGBtYXhfd3JpdGVfc3RyZWFtc2AgaW4gdGhlIGtlcm5lbCBzb3VyY2UsIGZvY3VzaW5nIG9uIHRoZSBibG9jayBkZXZpY2UgZHJpdmVycy4gSSdsbCBzdGFydCB3aXRoIGBkcml2ZXJzL2Jsb2NrL2AsIG9idmlvdXNseSwgYnV0IEknbGwgYnJvYWRlbiB0aGUgc2VhcmNoIGlmIG5lZWRlZC4gSXQncyBhIGtleSBpbmRpY2F0b3IgZm9yIHRoaXMgZmVhdHVyZSwgc28gZmluZGluZyBpdCB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgYSBjbHVlIGFzIHRvIHdoaWNoIGRldmljZXMgYXJlIGNhcGFibGUgb2Ygc3VwcG9ydGluZyB0aGUgZmVhdHVyZS4gVGhpcyBmZWVscyBsaWtlIHRoZSByaWdodCBhbmdsZSB0byBzdGFydCBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMxMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjIzLjI0Mjc4MDkwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwNTM2MDgzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXhfd3JpdGVfc3RyZWFtc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvaG9zdC9jb3JlLmM9MjM5OD1zdGF0aWMgaW50IG52bWVfdXBkYXRlX25zX2luZm9fYmxvY2soc3RydWN0IG52bWVfbnMgKm5zLFxcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI0OTItXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jOjI0OTM6XFx0bGltLm1heF93cml0ZV9zdHJlYW1zID0gbnMtXFx1MDAzZWhlYWQtXFx1MDAzZW5yX3BsaWRzO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNDk0LVxcdGxpbS53cml0ZV9zdHJlYW1fZ3JhbnVsYXJpdHkgPSBucy1cXHUwMDNlaGVhZC1cXHUwMDNld3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5O1xcbi0tXFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jPTI1Mzk9c3RhdGljIGludCBudm1lX3VwZGF0ZV9uc19pbmZvKHN0cnVjdCBudm1lX25zICpucywgc3RydWN0IG52bWVfbnNfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYy0yNjEwLVxcdFxcdFxcdG52bWVfaW5pdF9pbnRlZ3JpdHkobnMtXFx1MDAzZWhlYWQsIFxcdTAwMjZsaW0sIGluZm8pO1xcbmRyaXZlcnMvbnZtZS9ob3N0L2NvcmUuYzoyNjExOlxcdFxcdGxpbS5tYXhfd3JpdGVfc3RyZWFtcyA9IG5zX2xpbS1cXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXM7XFxuZHJpdmVycy9udm1lL2hvc3QvY29yZS5jLTI2MTItXFx0XFx0bGltLndyaXRlX3N0cmVhbV9ncmFudWxhcml0eSA9IG5zX2xpbS1cXHUwMDNld3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0NzoyNC4zNDgxNTI3NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkyNTU5OTU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0IGFuZCB1c2luZyBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgQmxvY2sgRHJpdmVyIEludGVyYWN0aW9ucyoqXG5cbkFscmlnaHQsIEknbSB0aGlua2luZywgYmV5b25kIHRoZSBpbW1lZGlhdGUgaXNzdWUsIHdlIG5lZWQgdG8gdGFrZSBhIHdpZGVyIGxvb2sgYXQgcG90ZW50aWFsIGludGVyYWN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gcnVuIGEgYGdyZXBgIGZvciBgbnVsbF9ibGtgIGFuZCBhbnkgb3RoZXIgYmxvY2sgZHJpdmVycyB0aGF0IG1pZ2h0IGJlIGludm9sdmVkLiBJIHdhbnQgdG8gYmUgdGhvcm91Z2ggYW5kIGNvbnNpZGVyIGFsbCBwb3NzaWJpbGl0aWVzLiBJdCdzIGVhc3kgdG8gZ2V0IHR1bm5lbCB2aXNpb24sIGVzcGVjaWFsbHkgd2hlbiB0cm91Ymxlc2hvb3RpbmcsIHNvIGxldCdzIGdldCBhIGNvbXByZWhlbnNpdmUgbGlzdCB0byBydWxlIG91dCBsZXNzIG9idmlvdXMgaXNzdWVzLiBCZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg0OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjI2LjI3Mzc1NTQ3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxNDQxNjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1heF93cml0ZV9zdHJlYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstc3lzZnMuYz0yMjI9UVVFVUVfU1lTRlNfTElNSVRfU0hPVyhtYXhfc2VnbWVudF9zaXplKVxcbmJsb2NrL2Jsay1zeXNmcy5jOjIyMzpRVUVVRV9TWVNGU19MSU1JVF9TSE9XKG1heF93cml0ZV9zdHJlYW1zKVxcbmJsb2NrL2Jsay1zeXNmcy5jLTIyNC1RVUVVRV9TWVNGU19MSU1JVF9TSE9XKHdyaXRlX3N0cmVhbV9ncmFudWxhcml0eSlcXG4tLVxcbmJsb2NrL2Jsay1zeXNmcy5jPTYxOD1RVUVVRV9MSU1fUk9fRU5UUlkocXVldWVfbWF4X3NlZ21lbnRfc2l6ZSwgXFxcIm1heF9zZWdtZW50X3NpemVcXFwiKTtcXG5ibG9jay9ibGstc3lzZnMuYzo2MTk6UVVFVUVfTElNX1JPX0VOVFJZKHF1ZXVlX21heF93cml0ZV9zdHJlYW1zLCBcXFwibWF4X3dyaXRlX3N0cmVhbXNcXFwiKTtcXG5ibG9jay9ibGstc3lzZnMuYy02MjAtUVVFVUVfTElNX1JPX0VOVFJZKHF1ZXVlX3dyaXRlX3N0cmVhbV9ncmFudWxhcml0eSwgXFxcIndyaXRlX3N0cmVhbV9ncmFudWxhcml0eVxcXCIpO1xcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmM9NzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpjb25zdCBxdWV1ZV9hdHRyc1tdID0ge1xcbi0tXFxuYmxvY2svYmxrLXN5c2ZzLmMtNzQ0LVxcdFxcdTAwMjZxdWV1ZV9tYXhfc2VnbWVudF9zaXplX2VudHJ5LmF0dHIsXFxuYmxvY2svYmxrLXN5c2ZzLmM6NzQ1OlxcdFxcdTAwMjZxdWV1ZV9tYXhfd3JpdGVfc3RyZWFtc19lbnRyeS5hdHRyLFxcbmJsb2NrL2Jsay1zeXNmcy5jLTc0Ni1cXHRcXHUwMDI2cXVldWVfd3JpdGVfc3RyZWFtX2dyYW51bGFyaXR5X2VudHJ5LmF0dHIsXFxuLS1cXG5ibG9jay9mb3BzLmM9Mzk0PXN0YXRpYyBzc2l6ZV90IGJsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5ibG9jay9mb3BzLmMtNDA1LVxcdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSkge1xcbmJsb2NrL2ZvcHMuYzo0MDY6XFx0XFx0dTE2IG1heF93cml0ZV9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcXG5ibG9jay9mb3BzLmMtNDA3LVxcbmJsb2NrL2ZvcHMuYy00MDgtXFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX3dyaXRlX3N0cmVhbSkge1xcbmJsb2NrL2ZvcHMuYzo0MDk6XFx0XFx0XFx0aWYgKGlvY2ItXFx1MDAzZWtpX3dyaXRlX3N0cmVhbSBcXHUwMDNlIG1heF93cml0ZV9zdHJlYW1zKVxcbmJsb2NrL2ZvcHMuYy00MTAtXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuYmxvY2svZm9wcy5jOjQxMTpcXHRcXHR9IGVsc2UgaWYgKG1heF93cml0ZV9zdHJlYW1zKSB7XFxuYmxvY2svZm9wcy5jLTQxMi1cXHRcXHRcXHRlbnVtIHJ3X2hpbnQgd3JpdGVfaGludCA9XFxuLS1cXG5ibG9jay9mb3BzLmMtNDE5LVxcdFxcdFxcdCAqL1xcbmJsb2NrL2ZvcHMuYzo0MjA6XFx0XFx0XFx0aWYgKHdyaXRlX2hpbnQgXFx1MDAzYz0gbWF4X3dyaXRlX3N0cmVhbXMpXFxuYmxvY2svZm9wcy5jLTQyMS1cXHRcXHRcXHRcXHRpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW0gPSB3cml0ZV9oaW50O1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM9MjMxPXN0YXRpYyBpbnQgcGFydF9zZXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0LCB1OCBucilcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzNC1cXHR1bnNpZ25lZCBpbnQgbWF4ID0gbWluX3QodW5zaWduZWQgaW50LFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjIzNTpcXHRcXHRcXHRcXHQgYmRldl9saW1pdHMocGFydCktXFx1MDAzZW1heF93cml0ZV9zdHJlYW1zLCBVOF9NQVgpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIzNi1cXHR1OCAqbWFwID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6MjYuMzk1MjAyNTAyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwODYzNTkxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBDb2RlIEluc3BlY3Rpb24gU3RyYXRlZ3kqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiB3aGVyZSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBhcnRpdGlvbiBoYW5kbGluZyBhbmQgd3JpdGUgc3RyZWFtIG1hbmFnZW1lbnQgcmVzaWRlLiBNeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMgSSBzZWUgbGlzdGVkOiBgcGFydF93cml0ZV9zdHJlYW1zX3N0b3JlYCwgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgLCBgcGFydF9wdXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIGBibGtfcGFydGl0aW9uX3JlbWFwYCwgYW5kIGBkcm9wX3BhcnRpdGlvbmAuIEknbGwgd2FudCB0byB0cmFjZSB0aGVpciBjYWxscywgaG93IHRoZXkncmUgc3RydWN0dXJlZCwgYW5kIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIHdlcmUgbWFkZS4gVGhlIGluY2x1c2lvbiBvZiBgYmRldl9mcmVlX2lub2RlYCBhbHNvIHBpcXVlcyBteSBpbnRlcmVzdCwgc28gSSdsbCBiZSBzdXJlIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0LlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdW5kZXJseWluZyBibG9jayBkZXZpY2UgYXNzdW1wdGlvbnMgaGVyZS4gQXJlIHdlIHdvcmtpbmcgd2l0aCBhIGdlbmVyaWMgc2V0dXAsIG9yIGFyZSB3ZSB0YXJnZXRpbmcgc3BlY2lmaWMgZGV2aWNlIHR5cGVzIGxpa2UgYEJMS19ERVZfTlVMTF9CTEtgLCBgTlZNRV9DT1JFYCwgYEJMS19ERVZfTE9PUGAsIG9yIGBCTEtfREVWX1JBTWA/IFRoZSBwcmVzZW5jZSBvZiBgQkxPQ0tgIGNvbmZpZyBzdWdnZXN0cyB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIGNvcmUgYmxvY2sgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHNvIHRoZSBzY29wZSBtYXkgYmUgbW9yZSB0YXJnZXRlZC4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZyBkZXBlbmRlbmNpZXMuXG5cbkZpbmFsbHksIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciBwYXJ0aXRpb25pbmcgb3IgdGhlIGJsb2NrIHN5c2ZzIGluIGdlbmVyYWwuIFNvIGBibG9jay9LY29uZmlnYCB3aWxsIG5lZWQgYSBjbG9zZSBsb29rLiBUaGlzIGFwcHJvYWNoIHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc3OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0NzozMi40ODE1NjY1OTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIEJsb2NrIGxheWVyIGNvcmUgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0bWVudWNvbmZpZyBCTE9DS1xcbiAgIDY6XFx0ICAgICAgIGJvb2wgXFxcIkVuYWJsZSB0aGUgYmxvY2sgbGF5ZXJcXFwiIGlmIEVYUEVSVFxcbiAgIDc6XFx0ICAgICAgIGRlZmF1bHQgeVxcbiAgIDg6XFx0ICAgICAgIHNlbGVjdCBGU19JT01BUFxcbiAgIDk6XFx0ICAgICAgIHNlbGVjdCBTQklUTUFQXFxuICAxMDpcXHQgICAgICAgaGVscFxcbiAgMTE6XFx0XFx0IFByb3ZpZGUgYmxvY2sgbGF5ZXIgc3VwcG9ydCBmb3IgdGhlIGtlcm5lbC5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0IERpc2FibGUgdGhpcyBvcHRpb24gdG8gcmVtb3ZlIHRoZSBibG9jayBsYXllciBzdXBwb3J0IGZyb20gdGhlXFxuICAxNDpcXHRcXHQga2VybmVsLiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yIGVtYmVkZGVkIGRldmljZXMuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCBJZiB0aGlzIG9wdGlvbiBpcyBkaXNhYmxlZDpcXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0ICAgLSBibG9jayBkZXZpY2UgZmlsZXMgd2lsbCBiZWNvbWUgdW51c2FibGVcXG4gIDE5OlxcdFxcdCAgIC0gc29tZSBmaWxlc3lzdGVtcyAoc3VjaCBhcyBleHQzKSB3aWxsIGJlY29tZSB1bmF2YWlsYWJsZS5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0IEFsc28sIFNDU0kgY2hhcmFjdGVyIGRldmljZXMgYW5kIFVTQiBzdG9yYWdlIHdpbGwgYmUgZGlzYWJsZWQgc2luY2VcXG4gIDIyOlxcdFxcdCB0aGV5IG1ha2UgdXNlIG9mIHZhcmlvdXMgYmxvY2sgbGF5ZXIgZGVmaW5pdGlvbnMgYW5kIGZhY2lsaXRpZXMuXFxuICAyMzpcXHRcXG4gIDI0OlxcdFxcdCBTYXkgWSBoZXJlIHVubGVzcyB5b3Uga25vdyB5b3UgcmVhbGx5IGRvbid0IHdhbnQgdG8gbW91bnQgZGlza3MgYW5kXFxuICAyNTpcXHRcXHQgc3VjaGxpa2UuXFxuICAyNjpcXHRcXG4gIDI3OlxcdGlmIEJMT0NLXFxuICAyODpcXHRcXG4gIDI5OlxcdGNvbmZpZyBCTE9DS19MRUdBQ1lfQVVUT0xPQURcXG4gIDMwOlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBhdXRvbG9hZGluZyBzdXBwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMjpcXHRcXHRoZWxwXFxuICAzMzpcXHRcXHQgIEVuYWJsZSBsb2FkaW5nIG1vZHVsZXMgYW5kIGNyZWF0aW5nIGJsb2NrIGRldmljZSBpbnN0YW5jZXMgYmFzZWQgb25cXG4gIDM0OlxcdFxcdCAgYWNjZXNzZXMgdGhyb3VnaCB0aGVpciBkZXZpY2Ugc3BlY2lhbCBmaWxlLiAgVGhpcyBpcyBhIGhpc3RvcmljIExpbnV4XFxuICAzNTpcXHRcXHQgIGZlYXR1cmUgYW5kIG1ha2VzIG5vIHNlbnNlIGluIGEgdWRldiB3b3JsZCB3aGVyZSBkZXZpY2UgZmlsZXMgYXJlXFxuICAzNjpcXHRcXHQgIGNyZWF0ZWQgb24gZGVtYW5kLCBidXQgc2NyaXB0cyB0aGF0IG1hbnVhbGx5IGNyZWF0ZSBkZXZpY2Ugbm9kZXMgYW5kXFxuICAzNzpcXHRcXHQgIHRoZW4gY2FsbCBsb3NldHVwIG1pZ2h0IHJlbHkgb24gdGhpcyBiZWhhdmlvci5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0Y29uZmlnIEJMS19SUV9BTExPQ19USU1FXFxuICA0MDpcXHRcXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjMyLjQ4MTY3MTE4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjA0MDA3OTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCbG9jayBEZXZpY2UgUGFydGl0aW9uaW5nIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIGBDT05GSUdfQkxPQ0tgIGlzIG9uIGJ5IGRlZmF1bHQsIGFuZCBzZWVtcyB0byBiZSBlc3NlbnRpYWwgZm9yIGV2ZXJ5dGhpbmcgaW4gdGhlIGBibG9jay9gIGRpcmVjdG9yeS4gUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzOiBJIG5lZWQgdG8gdmVyaWZ5IGlmIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVgLCBgcGFydF9zZXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zYCwgYHBhcnRfd3JpdGVfc3RyZWFtc19zaG93YCwgYW5kIGBibGtfcGFydGl0aW9uX3JlbWFwYCBhcmUgYWxsIHRoZSBjb3JyZWN0IEZvY3VzU3ltYm9scy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGZvciBlYWNoLiBBbmQgdGhlbiBJIGhhdmUgdG8gc2VlIGlmIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCBpcyBpbmxpbmVkIG9yIHN0YXRpYzsgdGhhdCBraW5kIG9mIGRldGFpbCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBjb21waWxlciBoYW5kbGVzIGl0LlxuXG5Mb29raW5nIGluIGBibG9jay9wYXJ0aXRpb25zL2NvcmUuY2AsIEkgc2VlOiBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCBgcGFydF9wdXRfd3JpdGVfc3RyZWFtc2AsIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCwgYW5kIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVgLCBhbGwgY2FuZGlkYXRlcy4gYGJsa19wYXJ0aXRpb25fcmVtYXBgIGlzIG92ZXIgaW4gYGJsb2NrL2Jsay1jb3JlLmNgIGFuZCBgYmRldl9mcmVlX2lub2RlYCBpbiBgYmxvY2svYmRldi5jYCwgYW5kIGZpbmFsbHkgYGRyb3BfcGFydGl0aW9uYCBpbiBgYmxvY2svcGFydGl0aW9ucy9jb3JlLmNgLiBHb3QgaXQuXG5cbk5vdywgbGV0J3MgbmFpbCBkb3duIHdoYXQgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGlzIGRvaW5nLiBJIHNob3VsZCBjaGVjayB3aGV0aGVyIGl0J3Mgc3RhdGljIGlubGluZSBvciBqdXN0IHN0YXRpYy4gSG1tLCBpbiBgYmxvY2svYmxrLWNvcmUuY2AsIEkgc2VlOiBgc3RhdGljIGludCBibGtfcGFydGl0aW9uX3JlbWFwKHN0cnVjdCBiaW8gKmJpbylgLiBXYWl0IGEgbWludXRlLCB0aGUgZGlmZiBJIHNhdyBiZWZvcmUgaGFkIGEgYHN0YXRpYyBpbmxpbmVgIGZ1bmN0aW9uIGBiaW9fY2hlY2tfZW9kYCBvbiBsaW5lIDYxNiwgYnV0IGBibGtfcGFydGl0aW9uX3JlbWFwYCBvbiBsaW5lIDYyMiBpcyBqdXN0IGBzdGF0aWMgaW50YC4gSW50ZXJlc3RpbmcuIEl0J3Mgbm90IGlubGluZWQsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgbm90LiBUaW1lIHRvIHRyYWNrIGRvd24gd2hlcmUgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGlzIGNhbGxlZCBpbiBgYmxvY2svYmxrLWNvcmUuY2AgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODE3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6MzYuNjg1NjgyMDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTA0NTI5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfcGFydGl0aW9uX3JlbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImJsb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstY29yZS5jPTU5OT1zdGF0aWMgaW5saW5lIGludCBiaW9fY2hlY2tfZW9kKHN0cnVjdCBiaW8gKmJpbylcXG4tLVxcbmJsb2NrL2Jsay1jb3JlLmMtNjIxLSAqL1xcbmJsb2NrL2Jsay1jb3JlLmM6NjIyOnN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pXFxuYmxvY2svYmxrLWNvcmUuYy02MjMte1xcbi0tXFxuYmxvY2svYmxrLWNvcmUuYz04MjU9dm9pZCBzdWJtaXRfYmlvX25vYWNjdChzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstY29yZS5jLTg1My1cXHRcXHRpZiAoYmRldl9pc19wYXJ0aXRpb24oYmRldikgXFx1MDAyNlxcdTAwMjZcXG5ibG9jay9ibGstY29yZS5jOjg1NDpcXHRcXHQgICAgdW5saWtlbHkoYmxrX3BhcnRpdGlvbl9yZW1hcChiaW8pKSlcXG5ibG9jay9ibGstY29yZS5jLTg1NS1cXHRcXHRcXHRnb3RvIGVuZF9pbztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6MzYuODA0NzM1MTgxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQwODIwMjI2MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQmxvY2sgTGF5ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBoZXJlJ3MgdGhlIGJyZWFrZG93bi4gSSBzZWUgYGJsa19wYXJ0aXRpb25fcmVtYXBgIGJlaW5nIGNhbGxlZCB3aXRoaW4gYHN1Ym1pdF9iaW9fbm9hY2N0YCwgd2hpY2ggaXMgYSBrZXkgcG9pbnQgdG8gc3RhcnQgd2l0aC4gVGhlbiwgSSd2ZSBnb3QgYSBsaXN0IG9mIHJlbGV2YW50IGZ1bmN0aW9uczogYHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZWAsIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zYCwgYHBhcnRfcHV0X3dyaXRlX3N0cmVhbXNgLCBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCBgYmxrX3BhcnRpdGlvbl9yZW1hcGAsIGFuZCBgZHJvcF9wYXJ0aXRpb25gLiBJIG5lZWQgdG8gZW5zdXJlIGEgaG9saXN0aWMgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlc2UgaW50ZXJhY3QuXG5cbkxldCdzIHJ1biB0aHJvdWdoIHRoZSBjaGVja2xpc3QgcXVpY2tseS4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgc2V0IHRvIHRydWUgLSBnb29kLCB0aGF0J3Mgd2hhdCBJIGV4cGVjdC4gRW5hYmxlQ29uZmlncyBpcyBzZXQgdG8gW1wiQkxPQ0tcIl0sIHdoaWNoIGFsaWducyBwZXJmZWN0bHkgd2l0aCB0aGlzIGtpbmQgb2YgZnVuY3Rpb25hbGl0eS4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90IG9uLCBjb250YWluaW5nIGFsbCB0aGUgZnVuY3Rpb25zIEkgaWRlbnRpZmllZCBhcyBjZW50cmFsIHRvIHRoaXMgY2hhbmdlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHJlYXNvbmluZy4gVGhpcyBwYXRjaCBpcyBhYm91dCB3cml0ZSBzdHJlYW0gbWFuYWdlbWVudCBvbiBibG9jayBkZXZpY2UgcGFydGl0aW9ucywgdXNpbmcgYSBuZXcgc3lzZnMgYXR0cmlidXRlLiBJdCB0b3VjaGVzIHBhcnRpdGlvbiBsaWZlY3ljbGUgbWFuYWdlbWVudCwgaW5vZGUgY2xlYW51cCAoc3BlY2lmaWNhbGx5IGBiZGV2X2ZyZWVfaW5vZGVgKSwgYW5kIHRoZSBiaW8gc3VibWlzc2lvbiBwcm9jZXNzIHdpdGggYGJsa19wYXJ0aXRpb25fcmVtYXBgLiBUaGUgY29kZSBpcyBmdW5kYW1lbnRhbGx5IHBhcnQgb2YgdGhlIGNvcmUgYmxvY2sgbGF5ZXIsIHNvIGl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHdpdGggYmxvY2sgZGV2aWNlcyBhbmQgc3lzZnMuIFRoYXQgc2VlbXMgcmVhc29uYWJsZS5cblxuSSBzaG91bGQgdmVyaWZ5IHRoZSBjb25maWcgYW5kIHN5bWJvbCBuYW1lcyBvbmUgbW9yZSB0aW1lLiBUaGUgY29uZmlnIGNoZWNrcyBvdXQgYXMgYEJMT0NLYC4gVGhlIHN5bWJvbHMgbGlzdGVkIGFyZSBhbGwgcHJlc2VudCBhbmQgYWNjb3VudGVkIGZvci5cblxuRXZlcnl0aGluZyBsb29rcyBjbGVhbiBhbmQgd2VsbC1kZWZpbmVkLCBpdCBzZWVtcy4gSSdtIHNhdGlzZmllZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODI0LCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0Nzo0MC44ODY3NjA0ODdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY1NDUwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFydF93cml0ZV9zdHJlYW1zX3N0b3JlXCIsXG4gICAgXCJwYXJ0X3NldF93cml0ZV9zdHJlYW1zXCIsXG4gICAgXCJwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd1wiLFxuICAgIFwicGFydF9wdXRfd3JpdGVfc3RyZWFtc1wiLFxuICAgIFwiYmxrX3BhcnRpdGlvbl9yZW1hcFwiLFxuICAgIFwiZHJvcF9wYXJ0aXRpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHdyaXRlIHN0cmVhbSByZXNlcnZhdGlvbiBhbmQgcmVtYXBwaW5nIHN1cHBvcnQgZm9yIGJsb2NrIGRldmljZSBwYXJ0aXRpb25zLiBJdCBhZGRzIGEgbmV3IHN5c2ZzIGF0dHJpYnV0ZSAod3JpdGVfc3RyZWFtcykgdG8gcGFydGl0aW9ucywgaW1wbGVtZW50cyBzdHJlYW0gYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gdHJhY2tpbmcgb24gdGhlIHVuZGVybHlpbmcgZGlzaywgYW5kIHVwZGF0ZXMgYmlvIHBhcnRpdGlvbiByZW1hcHBpbmcgdG8gbWFwIHBhcnRpdGlvbiB3cml0ZSBzdHJlYW1zIHRvIGRpc2sgd3JpdGUgc3RyZWFtcy4gVGhpcyBsb2dpYyBpcyBwYXJ0IG9mIHRoZSBjb3JlIGJsb2NrIHN1YnN5c3RlbSBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIHZpYSBzeXNmcyBhbmQgYmxvY2sgSS9PIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkxPQ0tcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmVcIixcbiAgICBcInBhcnRfc2V0X3dyaXRlX3N0cmVhbXNcIixcbiAgICBcInBhcnRfd3JpdGVfc3RyZWFtc19zaG93XCIsXG4gICAgXCJwYXJ0X3B1dF93cml0ZV9zdHJlYW1zXCIsXG4gICAgXCJibGtfcGFydGl0aW9uX3JlbWFwXCIsXG4gICAgXCJkcm9wX3BhcnRpdGlvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgd3JpdGUgc3RyZWFtIHJlc2VydmF0aW9uIGFuZCByZW1hcHBpbmcgc3VwcG9ydCBmb3IgYmxvY2sgZGV2aWNlIHBhcnRpdGlvbnMuIEl0IGFkZHMgYSBuZXcgc3lzZnMgYXR0cmlidXRlICh3cml0ZV9zdHJlYW1zKSB0byBwYXJ0aXRpb25zLCBpbXBsZW1lbnRzIHN0cmVhbSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiB0cmFja2luZyBvbiB0aGUgdW5kZXJseWluZyBkaXNrLCBhbmQgdXBkYXRlcyBiaW8gcGFydGl0aW9uIHJlbWFwcGluZyB0byBtYXAgcGFydGl0aW9uIHdyaXRlIHN0cmVhbXMgdG8gZGlzayB3cml0ZSBzdHJlYW1zLiBUaGlzIGxvZ2ljIGlzIHBhcnQgb2YgdGhlIGNvcmUgYmxvY2sgc3Vic3lzdGVtIGFuZCBpcyBmdWxseSByZWFjaGFibGUgdmlhIHN5c2ZzIGFuZCBibG9jayBJL08gb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6NDEuMDAzMzEzMzk4WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTMwOTAyOTU4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ3OjQxLjAwMzg0NzM1OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjk5MzA4NDkyMTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN5c2ZzIGNvbmZpZ3VyYXRpb24gYW5kIGJsb2NrIGxheWVyIHJlbWFwcGluZyBmb3Igd3JpdGUgc3RyZWFtcyBvbiBwYXJ0aXRpb24gYmxvY2sgZGV2aWNlcy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbm9kZXMvYmRldnMgYXJlIGFsbG9jYXRlZCB2aWEgYGJkZXZfYWxsb2NfaW5vZGVgIHdoaWNoIGV4cGxpY2l0bHkgemVyb2VzIHRoZSBgc3RydWN0IGJsb2NrX2RldmljZWAgd2l0aCBgbWVtc2V0YCwgZW5zdXJpbmcgYGJkX25yX3dyaXRlX3N0cmVhbXNgIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgc3RhcnQgYXQgemVyby9OVUxMLlxcbi0gYHN0cnVjdCBnZW5kaXNrYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAsIGVuc3VyaW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBiaXRtYXAgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG4tIFdoZW4gYG1hcGAgaXMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgaW4gYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoKWAsIGV2ZXJ5IGVsZW1lbnQgaW4gYG1hcFswIC4uIG5yLTFdYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFjcm9zcyB0aGUgbG9vcCBicmFuY2hlcyBiZWZvcmUgc3dhcHBpbmcgaW50byBgYmRldi1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcGAuXFxuXFxuMi4gVXNlciBTcGFjZSBDb21tdW5pY2F0aW9uOlxcbi0gVGhlIG9ubHkgaW50ZXJmYWNlIGV4cG9zaW5nIGRhdGEgdG8gdXNlcnNwYWNlIGlzIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIHdoaWNoIHVzZXMgYHN5c2ZzX2VtaXQoKWAgdG8gZm9ybWF0IHRoZSBpbnRlZ2VyIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBpbnRvIGEgc3RyaW5nLiBObyBiaW5hcnkgc3RydWN0dXJlcyBvciBwYWRkZWQgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuXFxuMy4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVudCBhY2Nlc3MsIG9yIG1lbW9yeSBsZWFrcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLlxcbi0gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxM2Q2ZjZkNjhjZmM0NTRmZmIwMmUwOThjMzFmNmZlNzk1MGUyNjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwNzo0Njo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9jayBiL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9ja1xuaW5kZXggOTAwYjNmYzRjNzJkMC4uNDQyZjRjMjIxYmRlYSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1ibG9ja1xuKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrXG5AQCAtMjE4LDYgKzIxOCwyNSBAQCBEZXNjcmlwdGlvbjpcbiBcdFx0c2FtZSBhcyB0aGUgZm9ybWF0IG9mIC9zeXMvYmxvY2svXHUwMDNjZGlza1x1MDAzZS9zdGF0LlxuIFxuIFxuK1doYXQ6XHRcdC9zeXMvYmxvY2svXHUwMDNjZGlza1x1MDAzZS9cdTAwM2NwYXJ0aXRpb25cdTAwM2Uvd3JpdGVfc3RyZWFtc1xuK0RhdGU6XHRcdFNlcHRlbWJlciAyMDI2XG4rQ29udGFjdDpcdEtlb3Nlb25nIFBhcmsgXHUwMDNja2Vvc3VuZy5wYXJrQHNhbXN1bmcuY29tXHUwMDNlXG4rRGVzY3JpcHRpb246XG4rXHRcdFtSV10gTnVtYmVyIG9mIHRoZSBkaXNrJ3Mgd3JpdGUgc3RyZWFtcyByZXNlcnZlZCBmb3IgdGhlXG4rXHRcdHBhcnRpdGlvbi4gV3JpdGluZyBOIHJlc2VydmVzIE4gZGlzayB3cml0ZSBzdHJlYW1zIHRoYXQgbm9cbitcdFx0b3RoZXIgcGFydGl0aW9uIGNhbiB1c2UgYW5kIGV4cG9zZXMgdGhlbSBhcyB0aGUgcGFydGl0aW9uJ3NcbitcdFx0d3JpdGUgc3RyZWFtcyAxIHRvIE4uIFdyaXRpbmcgMCBnaXZlcyB0aGVtIGJhY2suIEF0IG1vc3RcbitcdFx0L3N5cy9ibG9jay9cdTAwM2NkaXNrXHUwMDNlL3F1ZXVlL21heF93cml0ZV9zdHJlYW1zIHN0cmVhbXMsIGFuZCBuZXZlclxuK1x0XHRtb3JlIHRoYW4gMjU1LCBjYW4gYmUgcmVzZXJ2ZWQgb24gYSBkaXNrLiBUaGUgbnVtYmVyIGNhblxuK1x0XHRvbmx5IGJlIGNoYW5nZWQgd2hpbGUgdGhlIHBhcnRpdGlvbiBpcyBub3Qgb3BlbiwgYW5kIGEgY2hhbmdlXG4rXHRcdGtlZXBzIHRoZSBzdHJlYW0gbnVtYmVycyB0aGF0IHN1cnZpdmUgaXQgcG9pbnRpbmcgYXQgdGhlIHNhbWVcbitcdFx0ZGlzayB3cml0ZSBzdHJlYW1zLiBQYXJ0aXRpb25zIGhhdmUgbm8gd3JpdGUgc3RyZWFtcyB1bmxlc3NcbitcdFx0cmVzZXJ2ZWQgaGVyZSwgYW5kIHRoZSByZXNlcnZhdGlvbiBpcyBsb3N0IHdoZW4gdGhlIHBhcnRpdGlvblxuK1x0XHRpcyByZW1vdmVkLCBpbmNsdWRpbmcgYnkgYSBwYXJ0aXRpb24gdGFibGUgcmVzY2FuLiBJL08gdG9cbitcdFx0dGhlIHdob2xlLWRpc2sgZGV2aWNlIGNhbiB1c2UgYW55IHdyaXRlIHN0cmVhbSwganVzdCBhcyBpdFxuK1x0XHRjYW4gd3JpdGUgdG8gYW55IHNlY3RvciBvZiBhIHBhcnRpdGlvbi5cbitcbitcbiBXaGF0Olx0XHQvc3lzL2Jsb2NrL1x1MDAzY2Rpc2tcdTAwM2UvcXVldWUvYWRkX3JhbmRvbVxuIERhdGU6XHRcdEp1bmUgMjAxMFxuIENvbnRhY3Q6XHRsaW51eC1ibG9ja0B2Z2VyLmtlcm5lbC5vcmdcbmRpZmYgLS1naXQgYS9ibG9jay9iZGV2LmMgYi9ibG9jay9iZGV2LmNcbmluZGV4IGNkODMyMzA4Mzc0MDYuLjczMDZhNGVmMGE4NjcgMTAwNjQ0XG4tLS0gYS9ibG9jay9iZGV2LmNcbisrKyBiL2Jsb2NrL2JkZXYuY1xuQEAgLTQzOCw2ICs0MzgsNyBAQCBzdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcbiBcdGZyZWVfcGVyY3B1KGJkZXYtXHUwMDNlYmRfc3RhdHMpO1xuIFx0a2ZyZWUoYmRldi1cdTAwM2ViZF9tZXRhX2luZm8pO1xuK1x0a2ZyZWUoYmRldi1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwKTtcbiBcdHNlY3VyaXR5X2JkZXZfZnJlZShiZGV2KTtcbiBcbiBcdGlmICghYmRldl9pc19wYXJ0aXRpb24oYmRldikpIHtcbmRpZmYgLS1naXQgYS9ibG9jay9ibGstY29yZS5jIGIvYmxvY2svYmxrLWNvcmUuY1xuaW5kZXggMTk2YmNjZjI3ZjU4ZC4uM2I2ZjA5YjM5NDNmNCAxMDA2NDRcbi0tLSBhL2Jsb2NrL2Jsay1jb3JlLmNcbisrKyBiL2Jsb2NrL2Jsay1jb3JlLmNcbkBAIC02MTYsNyArNjE2LDggQEAgc3RhdGljIGlubGluZSBpbnQgYmlvX2NoZWNrX2VvZChzdHJ1Y3QgYmlvICpiaW8pXG4gfVxuIFxuIC8qXG4tICogUmVtYXAgYmxvY2sgbiBvZiBwYXJ0aXRpb24gcCB0byBibG9jayBuK3N0YXJ0KHApIG9mIHRoZSBkaXNrLlxuKyAqIFJlbWFwIGJsb2NrIG4gb2YgcGFydGl0aW9uIHAgdG8gYmxvY2sgbitzdGFydChwKSBvZiB0aGUgZGlzaywgYW5kIHRoZVxuKyAqIHdyaXRlIHN0cmVhbXMgb2YgcGFydGl0aW9uIHAgdG8gdGhlIGRpc2sgd3JpdGUgc3RyZWFtcyByZXNlcnZlZCBmb3IgdGhlbS5cbiAgKi9cbiBzdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxuIHtcbkBAIC02MzAsNiArNjMxLDEzIEBAIHN0YXRpYyBpbnQgYmxrX3BhcnRpdGlvbl9yZW1hcChzdHJ1Y3QgYmlvICpiaW8pXG4gXHRcdFx0XHQgICAgICBiaW8tXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgLVxuIFx0XHRcdFx0ICAgICAgcC1cdTAwM2ViZF9zdGFydF9zZWN0KTtcbiBcdH1cbitcdGlmIChiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIFx1MDAyNlx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcbitcdFx0aWYgKHVubGlrZWx5KGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gXHUwMDNlIHAtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcykpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRcdGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxuK1x0XHRcdHAtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtiaW8tXHUwMDNlYmlfd3JpdGVfc3RyZWFtIC0gMV07XG4rXHR9XG4gXHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fUkVNQVBQRUQpO1xuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvY29yZS5jIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbmluZGV4IGI1YzU5Yjc5Y2E3Y2IuLjc3ODUyZWIyYWNiZWMgMTAwNjQ0XG4tLS0gYS9ibG9jay9wYXJ0aXRpb25zL2NvcmUuY1xuKysrIGIvYmxvY2svcGFydGl0aW9ucy9jb3JlLmNcbkBAIC0yMDUsNiArMjA1LDEzMCBAQCBzdGF0aWMgc3NpemVfdCBwYXJ0X2Rpc2NhcmRfYWxpZ25tZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuIFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcIiV1XFxuXCIsIGJkZXZfZGlzY2FyZF9hbGlnbm1lbnQoZGV2X3RvX2JkZXYoZGV2KSkpO1xuIH1cbiBcbitzdGF0aWMgc3NpemVfdCBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbit7XG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXVcXG5cIiwgZGV2X3RvX2JkZXYoZGV2KS1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKTtcbit9XG4rXG4rLypcbisgKiBHaXZlIHRoZSB3cml0ZSBzdHJlYW1zIG9mIEBwYXJ0IGJhY2sgdG8gdGhlIGRpc2suICBDYWxsZWQgZnJvbVxuKyAqIGRyb3BfcGFydGl0aW9uKCkgd2l0aCBvcGVuX211dGV4IGhlbGQ7IHRoZSBtYXAgaXMgbGVmdCBhbG9uZSBiZWNhdXNlIGFcbisgKiB3cml0ZSByYWNpbmcgd2l0aCBkZWxfZ2VuZGlzaygpIHN0aWxsIHVzZXMgaXQgdW50aWwgdGhlIGJkZXYgaXMgZnJlZWQuXG4rICovXG4rc3RhdGljIHZvaWQgcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxuK3tcbitcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gcGFydC1cdTAwM2ViZF9kaXNrO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7IGkrKylcbitcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuK1x0XHRcdCAgICBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuK31cbitcbitzdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXG4re1xuK1x0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBwYXJ0LVx1MDAzZWJkX2Rpc2s7XG4rXHR1bnNpZ25lZCBpbnQgbWF4ID0gbWluX3QodW5zaWduZWQgaW50LFxuK1x0XHRcdFx0IGJkZXZfbGltaXRzKHBhcnQpLVx1MDAzZW1heF93cml0ZV9zdHJlYW1zLCBVOF9NQVgpO1xuK1x0dTggKm1hcCA9IE5VTEw7XG4rXHR1bnNpZ25lZCBpbnQgaSwgaWQsIG5yX2ZyZWU7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHU4IGN1cjtcbitcbitcdGlmIChuciBcdTAwM2UgbWF4KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChucikge1xuK1x0XHRtYXAgPSBrbWFsbG9jKG5yLCBHRlBfS0VSTkVMKTtcbitcdFx0aWYgKCFtYXApXG4rXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmRpc2stXHUwMDNlb3Blbl9tdXRleCk7XG4rXG4rXHQvKiB0aGUgcGFydGl0aW9uIG1heSBoYXZlIGJlZW4gZHJvcHBlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbXV0ZXggKi9cbitcdGlmICh4YV9sb2FkKFx1MDAyNmRpc2stXHUwMDNlcGFydF90YmwsIGJkZXZfcGFydG5vKHBhcnQpKSAhPSBwYXJ0KSB7XG4rXHRcdHJldCA9IC1FTlhJTztcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRjdXIgPSBwYXJ0LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XG4rXG4rXHQvKiBhIG5vLW9wIGNoYW5nZSBpcyBhbGxvd2VkIHdoaWxlIG9wZW4gKi9cbitcdGlmIChuciA9PSBjdXIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogdGhlIHN0cmVhbXMgbXVzdCBub3QgY2hhbmdlIHVuZGVyIGEgdXNlciBvZiB0aGUgcGFydGl0aW9uICovXG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2cGFydC1cdTAwM2ViZF9vcGVuZXJzKSkge1xuK1x0XHRyZXQgPSAtRUJVU1k7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuK1x0bnJfZnJlZSA9IG1heCAtIGJpdG1hcF93ZWlnaHQoZGlzay1cdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggKyAxKTtcbitcdGlmIChuciBcdTAwM2UgY3VyIFx1MDAyNlx1MDAyNiBuciAtIGN1ciBcdTAwM2UgbnJfZnJlZSkge1xuK1x0XHRyZXQgPSAtRU5PU1BDO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qXG4rXHQgKiBLZWVwIHRoZSBzdHJlYW1zIHRoYXQgc3RheSwgc28gdGhhdCBhIHBhcnRpdGlvbiBrZWVwcyB3cml0aW5nXG4rXHQgKiB0aHJvdWdoIHRoZSBzYW1lIGRpc2sgc3RyZWFtcyBhbmQgaXRzIGRhdGEgc3RheXMgdG9nZXRoZXIuXG4rXHQgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG1pbihjdXIsIG5yKTsgaSsrKVxuK1x0XHRtYXBbaV0gPSBwYXJ0LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV07XG4rXG4rXHRpZiAobnIgXHUwMDNjIGN1cikge1xuK1x0XHRmb3IgKGkgPSBucjsgaSBcdTAwM2MgY3VyOyBpKyspXG4rXHRcdFx0X19jbGVhcl9iaXQocGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxuK1x0XHRcdFx0ICAgIGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XG4rXHR9IGVsc2Uge1xuK1x0XHRmb3IgKGkgPSBjdXI7IGkgXHUwMDNjIG5yOyBpKyspIHtcbitcdFx0XHRpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsXG4rXHRcdFx0XHRcdFx0bWF4ICsgMSwgMSk7XG4rXHRcdFx0X19zZXRfYml0KGlkLCBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xuK1x0XHRcdG1hcFtpXSA9IGlkO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRzd2FwKHBhcnQtXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTtcbitcdHBhcnQtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yO1xuK1xuK291dDpcbitcdG11dGV4X3VubG9jayhcdTAwMjZkaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuK1x0a2ZyZWUobWFwKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuK1x0XHRcdFx0XHRjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbit7XG4rXHRzdHJ1Y3Qga2VybmZzX25vZGUgKmtuO1xuK1x0dTggbnI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0ga3N0cnRvdTgoYnVmLCAxMCwgXHUwMDI2bnIpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qXG4rXHQgKiBkcm9wX3BhcnRpdGlvbigpIHJlbW92ZXMgdGhpcyBhdHRyaWJ1dGUgd2l0aCBvcGVuX211dGV4IGhlbGQsIHNvXG4rXHQgKiBkb24ndCBob2xkIHRoZSBhY3RpdmUgcmVmZXJlbmNlIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBtdXRleC5cbitcdCAqL1xuK1x0a24gPSBzeXNmc19icmVha19hY3RpdmVfcHJvdGVjdGlvbihcdTAwMjZkZXYtXHUwMDNla29iaiwgXHUwMDI2YXR0ci1cdTAwM2VhdHRyKTtcbitcdGlmICgha24pXG4rXHRcdHJldHVybiAtRU5YSU87XG4rXG4rXHRyZXQgPSBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKGRldl90b19iZGV2KGRldiksIG5yKTtcbitcdHN5c2ZzX3VuYnJlYWtfYWN0aXZlX3Byb3RlY3Rpb24oa24pO1xuK1xuK1x0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuK31cbitcbiBzdGF0aWMgREVWSUNFX0FUVFIocGFydGl0aW9uLCAwNDQ0LCBwYXJ0X3BhcnRpdGlvbl9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhcnQsIDA0NDQsIHBhcnRfc3RhcnRfc2hvdywgTlVMTCk7XG4gc3RhdGljIERFVklDRV9BVFRSKHNpemUsIDA0NDQsIHBhcnRfc2l6ZV9zaG93LCBOVUxMKTtcbkBAIC0yMTMsNiArMzM3LDggQEAgc3RhdGljIERFVklDRV9BVFRSKGFsaWdubWVudF9vZmZzZXQsIDA0NDQsIHBhcnRfYWxpZ25tZW50X29mZnNldF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoZGlzY2FyZF9hbGlnbm1lbnQsIDA0NDQsIHBhcnRfZGlzY2FyZF9hbGlnbm1lbnRfc2hvdywgTlVMTCk7XG4gc3RhdGljIERFVklDRV9BVFRSKHN0YXQsIDA0NDQsIHBhcnRfc3RhdF9zaG93LCBOVUxMKTtcbiBzdGF0aWMgREVWSUNFX0FUVFIoaW5mbGlnaHQsIDA0NDQsIHBhcnRfaW5mbGlnaHRfc2hvdywgTlVMTCk7XG4rc3RhdGljIERFVklDRV9BVFRSKHdyaXRlX3N0cmVhbXMsIDA2NDQsIHBhcnRfd3JpdGVfc3RyZWFtc19zaG93LFxuK1x0XHQgICBwYXJ0X3dyaXRlX3N0cmVhbXNfc3RvcmUpO1xuICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1RcbiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfZmFpbCA9XG4gXHRfX0FUVFIobWFrZS1pdC1mYWlsLCAwNjQ0LCBwYXJ0X2ZhaWxfc2hvdywgcGFydF9mYWlsX3N0b3JlKTtcbkBAIC0yMjcsNiArMzUzLDcgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnBhcnRfYXR0cnNbXSA9IHtcbiBcdFx1MDAyNmRldl9hdHRyX2Rpc2NhcmRfYWxpZ25tZW50LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9zdGF0LmF0dHIsXG4gXHRcdTAwMjZkZXZfYXR0cl9pbmZsaWdodC5hdHRyLFxuK1x0XHUwMDI2ZGV2X2F0dHJfd3JpdGVfc3RyZWFtcy5hdHRyLFxuICNpZmRlZiBDT05GSUdfRkFJTF9NQUtFX1JFUVVFU1RcbiBcdFx1MDAyNmRldl9hdHRyX2ZhaWwuYXR0cixcbiAjZW5kaWZcbkBAIC0yNzQsNiArNDAxLDcgQEAgdm9pZCBkcm9wX3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxuIHtcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGFydC1cdTAwM2ViZF9kaXNrLVx1MDAzZW9wZW5fbXV0ZXgpO1xuIFxuK1x0cGFydF9wdXRfd3JpdGVfc3RyZWFtcyhwYXJ0KTtcbiBcdHhhX2VyYXNlKFx1MDAyNnBhcnQtXHUwMDNlYmRfZGlzay1cdTAwM2VwYXJ0X3RibCwgYmRldl9wYXJ0bm8ocGFydCkpO1xuIFx0a29iamVjdF9wdXQocGFydC1cdTAwM2ViZF9ob2xkZXJfZGlyKTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa190eXBlcy5oIGIvaW5jbHVkZS9saW51eC9ibGtfdHlwZXMuaFxuaW5kZXggOThlMjFiNGNiZjMyOC4uMGJiZmEyNzA4MDk5MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrX3R5cGVzLmhcbkBAIC03MSw2ICs3MSw5IEBAIHN0cnVjdCBibG9ja19kZXZpY2Uge1xuIFxuIFx0c3RydWN0IHBhcnRpdGlvbl9tZXRhX2luZm8gKmJkX21ldGFfaW5mbztcbiBcdGludFx0XHRcdGJkX3dyaXRlcnM7XG4rXHQvKiBwYXJ0aXRpb24gd3JpdGUgc3RyZWFtIHMgaXMgZGlzayBzdHJlYW0gYmRfd3JpdGVfc3RyZWFtX21hcFtzIC0gMV0gKi9cbitcdHU4XHRcdFx0YmRfbnJfd3JpdGVfc3RyZWFtcztcbitcdHU4XHRcdFx0KmJkX3dyaXRlX3N0cmVhbV9tYXA7XG4gI2lmZGVmIENPTkZJR19TRUNVUklUWVxuIFx0dm9pZFx0XHRcdCpiZF9zZWN1cml0eTtcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaFxuaW5kZXggNGY3OTA1YzM0MTJiOC4uNWQyNDFkN2IwODAyYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmhcbkBAIC0xNzgsNiArMTc4LDggQEAgc3RydWN0IGdlbmRpc2sge1xuIFxuIFx0c3RydWN0IG11dGV4IG9wZW5fbXV0ZXg7XHQvKiBvcGVuL2Nsb3NlIG11dGV4ICovXG4gXHR1bnNpZ25lZCBvcGVuX3BhcnRpdGlvbnM7XHQvKiBudW1iZXIgb2Ygb3BlbiBwYXJ0aXRpb25zICovXG4rXHQvKiByZXNlcnZlZCBieSBwYXJ0aXRpb25zLCBiaXQgTiA9IHN0cmVhbSBOICgwIHVudXNlZCksIG9wZW5fbXV0ZXggKi9cbitcdERFQ0xBUkVfQklUTUFQKHdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQsIFU4X01BWCArIDEpO1xuIFxuIFx0c3RydWN0IGJhY2tpbmdfZGV2X2luZm9cdCpiZGk7XG4gXHRzdHJ1Y3Qga29iamVjdCBxdWV1ZV9rb2JqO1x0LyogdGhlIHF1ZXVlLyBkaXJlY3RvcnkgKi9cbkBAIC0xMzAzLDcgKzEzMDUsNyBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiZGV2X21heF9zZWdtZW50cyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxuIHtcbiBcdGlmIChiZGV2X2lzX3BhcnRpdGlvbihiZGV2KSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBiZGV2LVx1MDAzZWJkX25yX3dyaXRlX3N0cmVhbXM7XG4gXHRyZXR1cm4gYmRldl9saW1pdHMoYmRldiktXHUwMDNlbWF4X3dyaXRlX3N0cmVhbXM7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDc6NDEuMDAzODQ4MTY4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4NTgzODU3NDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJdCdzIGEgc3RhbmRhcmQga2VybmVsIHJldmlldyByZXF1ZXN0LCBzbyBubyBuZWVkIHRvIG92ZXJ0aGluayBpdC4gIEkgbmVlZCB0byBwcm92aWRlIGEgYE5lZWRzS01TQU5gIGJvb2xlYW4gYW5kIGEgYEtNU0FOUmVhc29uaW5nYCBleHBsYW5hdGlvbi4gSSBoYXZlIG15IHRvb2xzLCBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgYHNldC1yZXN1bHRzYCBhdCB0aGUgcmVhZHkuXG5cbkZpcnN0LCBsZXQncyBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSSBzZWUgYSBkb2N1bWVudGF0aW9uIHVwZGF0ZSBpbiBgRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWJsb2NrYCBmb3IgYHdyaXRlX3N0cmVhbXNgLCBhbmQgY2hhbmdlcyBpbiBgYmxvY2svYmRldi5jYCwgYGJsb2NrL2Jsay1jb3JlLmNgLCBhbmQgYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYC4gIEEga2V5IGFyZWEgZm9yIEtNU0FOIGNvbmNlcm5zIGlzIG1lbW9yeSBjb3JydXB0aW9uLiAgSSBzZWUgYSBga2ZyZWVgIGNhbGwgZm9yIGBiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgIGluIGBiZGV2X2ZyZWVfaW5vZGVgLCB3aGljaCBpbW1lZGlhdGVseSByYWlzZXMgYSBmbGFnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgYmRldmAgY29tZXMgZnJvbS4gVXN1YWxseSwgaXQncyBlaXRoZXIgYGJkZXZfYWxsb2NgIG9yIHNsYWIgYWxsb2NhdGlvbi5cblxuTG9va2luZyBhdCBgYmxvY2svYmxrLWNvcmUuY2AsIHRoZXJlJ3MgYSB1c2Ugb2YgYGJpby1cdTAwM2ViaV93cml0ZV9zdHJlYW1gIGFuZCBgcC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwYCB3aXRoaW4gYGJsa19wYXJ0aXRpb25fcmVtYXBgLiBUaGlzIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIGNvZGUgY2xlYXJseSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBtYXkgYmUgb3V0IG9mIGJvdW5kcyB3cml0ZXMgdGhhdCBsZWFkIHRvIGNvcnJ1cHRpb24uXG5cbk5vdywgYGJsb2NrL3BhcnRpdGlvbnMvY29yZS5jYCBjb250YWlucyB0aGUgY29yZSBvZiB0aGUgZnVuY3Rpb25hbGl0eSB3aXRoIHRoZSB1c2Ugb2YgIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIGBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zYCwgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgLiBUaGUgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgIGZ1bmN0aW9uIHVzZXMgYGttYWxsb2NgIHRvIGFsbG9jYXRlIGEgbWFwLCBhbmQgdGhlbiBjb3BpZXMgc29tZSB2YWx1ZXMgZnJvbSBgcGFydC1cdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwYCBiZWZvcmUgcG9wdWxhdGluZyBvdGhlciBpbmRpY2VzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGBtYXBgIGlzIGZ1bGx5IGluaXRpYWxpemVkLiAgSSdtIHJ1bm5pbmcgdGhyb3VnaCB0aGUgbG9naWMgb2YgYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgIGNhcmVmdWxseS4gIE9rYXksIEkgdGhpbmsgSSd2ZSBnb3QgaXQuIEl0IGxvb2tzIGxpa2UgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGBucmAgaXMgZ3JlYXRlciBvciBzbWFsbGVyIHRoYW4gYGN1cmAsIGFsbCBpbmRpY2VzIG9mIHRoZSBuZXdseSBhbGxvY2F0ZWQgYG1hcGAgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgYHN3YXBgIGFuZCBzdWJzZXF1ZW50IGBrZnJlZWAuICBTbywgdGhlcmUncyBubyBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQvd3JpdGUgdnVsbmVyYWJpbGl0eSB0aGVyZS5cblxuTm93IGxldCdzIGNoZWNrIHRoZSBjYWxsIHNpdGUgb2YgYHBhcnRfd3JpdGVfc3RyZWFtc19zdG9yZWAuIFRoYXQncyB3aGVyZSB3ZSBnZXQgdGhlIHZhbHVlcyBmb3IgYG5yYC4gIEl0IGNhbGxzIGBrc3RydG91OGAgd2hpY2ggdGFrZXMgdGhlIG51bWJlciBmcm9tIHN5c2ZzLCBhbmQgdGhlbiBjYWxscyBgcGFydF9zZXRfd3JpdGVfc3RyZWFtc2AuXG5cbkZpbmFsbHksIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc3RydWN0IGJsb2NrX2RldmljZWAuIEkgd2lsbCB1c2UgYGdyZXBwZXJgIHRvIHNlYXJjaCBmb3IgYGJkZXZfYWxsb2NfaW5vZGVgIGFuZCBgYmRldl9hbGxvY2AuXG5cbk5vdyBJIGhhdmUgYSBtdWNoIGJldHRlciBwaWN0dXJlLiBUaGUgY29kZSAqZG9lcyogbWFuaXB1bGF0ZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGB3cml0ZV9zdHJlYW1zYCwgYW5kIGl0J3MgYWNjZXNzZWQgdmlhIHN5c2ZzLCBidXQgaXQgZG9lc24ndCBpbW1lZGlhdGVseSBzdWdnZXN0IGFuIGVhc3ktdG8tZXhwbG9pdCB2dWxuZXJhYmlsaXR5LiBUaGVyZSBpcyBhIHBvdGVudGlhbCwgaG93ZXZlciwgZ2l2ZW4gdGhlIGNvbXBsZXhpdGllcyBvZiB0aGUgc3RyZWFtcyBtYXAgYW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmNvcnJlY3QgaW5wdXQgZnJvbSBzeXNmcy5cblxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mjc1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjM5LjU4NzcwOTM0NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTAyODIyMjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJkX3dyaXRlX3N0cmVhbV9tYXB8YmRldl9hbGxvY19pbm9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmRldi5jPTQxOD1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmJkZXZfY2FjaGVwIF9fcm9fYWZ0ZXJfaW5pdDtcXG5ibG9jay9iZGV2LmMtNDE5LVxcbmJsb2NrL2JkZXYuYzo0MjA6c3RhdGljIHN0cnVjdCBpbm9kZSAqYmRldl9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmJsb2NrL2JkZXYuYy00MjEte1xcbi0tXFxuYmxvY2svYmRldi5jPTQzNT1zdGF0aWMgdm9pZCBiZGV2X2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmJsb2NrL2JkZXYuYy00NDAtXFx0a2ZyZWUoYmRldi1cXHUwMDNlYmRfbWV0YV9pbmZvKTtcXG5ibG9jay9iZGV2LmM6NDQxOlxcdGtmcmVlKGJkZXYtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXApO1xcbmJsb2NrL2JkZXYuYy00NDItXFx0c2VjdXJpdHlfYmRldl9mcmVlKGJkZXYpO1xcbi0tXFxuYmxvY2svYmRldi5jPTQ2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgYmRldl9zb3BzID0ge1xcbmJsb2NrL2JkZXYuYy00NjQtXFx0LnN0YXRmcyA9IHNpbXBsZV9zdGF0ZnMsXFxuYmxvY2svYmRldi5jOjQ2NTpcXHQuYWxsb2NfaW5vZGUgPSBiZGV2X2FsbG9jX2lub2RlLFxcbmJsb2NrL2JkZXYuYy00NjYtXFx0LmZyZWVfaW5vZGUgPSBiZGV2X2ZyZWVfaW5vZGUsXFxuLS1cXG5ibG9jay9ibGstY29yZS5jPTYyMj1zdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLWNvcmUuYy02MzgtXFx0XFx0YmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gPVxcbmJsb2NrL2Jsay1jb3JlLmM6NjM5OlxcdFxcdFxcdHAtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbYmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gLSAxXTtcXG5ibG9jay9ibGstY29yZS5jLTY0MC1cXHR9XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0yMTk9c3RhdGljIHZvaWQgcGFydF9wdXRfd3JpdGVfc3RyZWFtcyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpwYXJ0KVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI2LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwYXJ0LVxcdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zOyBpKyspXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6MjI3OlxcdFxcdF9fY2xlYXJfYml0KHBhcnQtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV0sXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjI4LVxcdFxcdFxcdCAgICBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTIzMT1zdGF0aWMgaW50IHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoc3RydWN0IGJsb2NrX2RldmljZSAqcGFydCwgdTggbnIpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODAtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1pbihjdXIsIG5yKTsgaSsrKVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI4MTpcXHRcXHRtYXBbaV0gPSBwYXJ0LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4Mi1cXG4tLVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4NC1cXHRcXHRmb3IgKGkgPSBucjsgaSBcXHUwMDNjIGN1cjsgaSsrKVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI4NTpcXHRcXHRcXHRfX2NsZWFyX2JpdChwYXJ0LVxcdTAwM2ViZF93cml0ZV9zdHJlYW1fbWFwW2ldLFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI4Ni1cXHRcXHRcXHRcXHQgICAgZGlzay1cXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZCk7XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTUtXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjk2OlxcdHN3YXAocGFydC1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcCwgbWFwKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTctXFx0cGFydC1cXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtcyA9IG5yO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0ODo0MC40OTA1MzY5NTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYxMjgzMjA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCBsaW5lIG9mIHRoaW5raW5nLCBwcmVzZW50ZWQgYXMgaWYgaXQgd2VyZSBteSBvd24gdGhvdWdodCBwcm9jZXNzLCBhbmQgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGJkZXZfYWxsb2NfaW5vZGVgIHdpdGggUmVhZC1GaWxlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGJkZXZfYWxsb2NfaW5vZGVgLCBhbmQgbXkgaW5pdGlhbCBpbXB1bHNlIGlzIHRvIGRpdmUgcmlnaHQgaW4gd2l0aCBgcmVhZC1maWxlYC4gVGhpcyBmdW5jdGlvbiwgSSBrbm93LCBpcyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgYmxvY2sgZGV2aWNlIGlub2RlIGFsbG9jYXRpb24gcHV6emxlLiBJJ20gcHJvYmFibHkgZGVhbGluZyB3aXRoIHNvbWUgbGV2ZWwgb2Ygb24tZGlzayBzdHJ1Y3R1cmVzLCBtYXliZSBpLW5vZGUgYWxsb2NhdGlvbi4gSSdtIHRoaW5raW5nIEkgY2FuIHF1aWNrbHkgZ2V0IGEgaGFuZGxlIG9uIHRoZSBmdW5jdGlvbidzIHJlc3BvbnNpYmlsaXR5IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIHNvdXJjZSB3aXRoIGByZWFkLWZpbGVgLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgZ3Jhc3AgaXRzIHJvbGUsIHVuZGVyc3RhbmQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgYW5kIHBvc3NpYmx5IGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIGRlc2lnbiBjaG9pY2VzIGF0IHBsYXkuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC4gTGV0J3MgZ2V0IHJlYWRpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5MjYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0ODo0My4xMDMzNzI0NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svYmRldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxNSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxNTpcXHQgKi9cXG4gNDE2OlxcdFxcbiA0MTc6XFx0c3RhdGljICBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfTVVURVgoYmRldl9sb2NrKTtcXG4gNDE4OlxcdHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmRldl9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xcbiA0MTk6XFx0XFxuIDQyMDpcXHRzdGF0aWMgc3RydWN0IGlub2RlICpiZGV2X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIDQyMTpcXHR7XFxuIDQyMjpcXHRcXHRzdHJ1Y3QgYmRldl9pbm9kZSAqZWkgPSBhbGxvY19pbm9kZV9zYihzYiwgYmRldl9jYWNoZXAsIEdGUF9LRVJORUwpO1xcbiA0MjM6XFx0XFxuIDQyNDpcXHRcXHRpZiAoIWVpKVxcbiA0MjU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQyNjpcXHRcXHRtZW1zZXQoXFx1MDAyNmVpLVxcdTAwM2ViZGV2LCAwLCBzaXplb2YoZWktXFx1MDAzZWJkZXYpKTtcXG4gNDI3OlxcdFxcbiA0Mjg6XFx0XFx0aWYgKHNlY3VyaXR5X2JkZXZfYWxsb2MoXFx1MDAyNmVpLVxcdTAwM2ViZGV2KSkge1xcbiA0Mjk6XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGJkZXZfY2FjaGVwLCBlaSk7XFxuIDQzMDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDMxOlxcdFxcdH1cXG4gNDMyOlxcdFxcdHJldHVybiBcXHUwMDI2ZWktXFx1MDAzZXZmc19pbm9kZTtcXG4gNDMzOlxcdH1cXG4gNDM0OlxcdFxcbiA0MzU6XFx0c3RhdGljIHZvaWQgYmRldl9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDQzNjpcXHR7XFxuIDQzNzpcXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gSV9CREVWKGlub2RlKTtcXG4gNDM4OlxcdFxcbiA0Mzk6XFx0XFx0ZnJlZV9wZXJjcHUoYmRldi1cXHUwMDNlYmRfc3RhdHMpO1xcbiA0NDA6XFx0XFx0a2ZyZWUoYmRldi1cXHUwMDNlYmRfbWV0YV9pbmZvKTtcXG4gNDQxOlxcdFxcdGtmcmVlKGJkZXYtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXApO1xcbiA0NDI6XFx0XFx0c2VjdXJpdHlfYmRldl9mcmVlKGJkZXYpO1xcbiA0NDM6XFx0XFxuIDQ0NDpcXHRcXHRpZiAoIWJkZXZfaXNfcGFydGl0aW9uKGJkZXYpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjQzLjEwMzQ2NDc0OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjcyMDAxODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCByZWxhdGVzIHRvIHRoZSBrZXJuZWwgY29kZTpcblxuKipBbmFseXppbmcgQmxvY2sgRGV2aWNlIElub2RlIEluaXRpYWxpemF0aW9uIGFuZCBEaXNrIEFsbG9jYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYmRldl9hbGxvY19pbm9kZWAgYW5kIG5vdGljZWQgdGhhdCBgbWVtc2V0KFx1MDAyNmVpLVx1MDAzZWJkZXYsIDAsIHNpemVvZihlaS1cdTAwM2ViZGV2KSlgIGlzIGNhbGxlZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGBiZF9ucl93cml0ZV9zdHJlYW1zYCBpcyBiZWluZyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgdG8gTlVMTC4gTWFrZXMgc2Vuc2UsIHRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGxpZmVjeWNsZSBhbmQgdW5kZXJzdGFuZCB0aGUgYWxsb2NhdGlvbi5cblxuTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYGdlbmRpc2tgIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBibG9jayBkZXZpY2UgaXMgYWxsb2NhdGVkIGFuZCBzZXQgdXAuIFRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIHRoZSBgZ2VuZGlza2Agc3RydWN0dXJlLiBMZXQncyBzZWUgaG93IHRoYXQncyBoYW5kbGVkLiBNeSBuZXh0IG1vdmUgaXMgdG8gdXNlIGBncmVwYCAob3Igc29tZSBzaW1pbGFyIHRvb2wsIG9idmlvdXNseSkgYW5kIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGNhbGxzIHRvIGVpdGhlciBgYWxsb2NfZGlza2Agb3IgYF9fYWxsb2NfZGlza19ub2RlYC4gVGhhdCBzaG91bGQgaGVscCBtZSBwaW5wb2ludCB3aGVyZSBhbmQgaG93IHRoZSBgZ2VuZGlza2Agc3RydWN0dXJlIGlzIGJlaW5nIGNyZWF0ZWQsIGFuZCB0aGF0IHdpbGwgZ2l2ZSBtZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgSSdtIGxvb2tpbmcgYXQgYXJlIGludGVyY29ubmVjdGVkLiBGcm9tIHRoZXJlLCBJIGNhbiBnZXQgYSBiZXR0ZXIgcGljdHVyZSBvZiB0aGUgZGV2aWNlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NDYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjQ2Ljc3NTQ3MDczN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MjQ2NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYmxvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL3BhcnRpdGlvbnMvY29yZS5jPTIxOT1zdGF0aWMgdm9pZCBwYXJ0X3B1dF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQpXFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yMjctXFx0XFx0X19jbGVhcl9iaXQocGFydC1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtpXSxcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyMjg6XFx0XFx0XFx0ICAgIGRpc2stXFx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWQpO1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTIyOS19XFxuLS1cXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYz0yMzE9c3RhdGljIGludCBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQsIHU4IG5yKVxcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjY5LVxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI3MDpcXHRucl9mcmVlID0gbWF4IC0gYml0bWFwX3dlaWdodChkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLCBtYXggKyAxKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yNzEtXFx0aWYgKG5yIFxcdTAwM2UgY3VyIFxcdTAwMjZcXHUwMDI2IG5yIC0gY3VyIFxcdTAwM2UgbnJfZnJlZSkge1xcbi0tXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmMtMjg1LVxcdFxcdFxcdF9fY2xlYXJfYml0KHBhcnQtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBbaV0sXFxuYmxvY2svcGFydGl0aW9ucy9jb3JlLmM6Mjg2OlxcdFxcdFxcdFxcdCAgICBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODctXFx0fSBlbHNlIHtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yODgtXFx0XFx0Zm9yIChpID0gY3VyOyBpIFxcdTAwM2MgbnI7IGkrKykge1xcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jOjI4OTpcXHRcXHRcXHRpZCA9IGZpbmRfbmV4dF96ZXJvX2JpdChkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkLFxcbmJsb2NrL3BhcnRpdGlvbnMvY29yZS5jLTI5MC1cXHRcXHRcXHRcXHRcXHRcXHRtYXggKyAxLCAxKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYzoyOTE6XFx0XFx0XFx0X19zZXRfYml0KGlkLCBkaXNrLVxcdTAwM2V3cml0ZV9zdHJlYW1zX3Jlc2VydmVkKTtcXG5ibG9jay9wYXJ0aXRpb25zL2NvcmUuYy0yOTItXFx0XFx0XFx0bWFwW2ldID0gaWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjQ2Ljg5MjcyMTc0OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODU1OTQyMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipEaXNzZWN0aW5nIERpc2sgR2VuZXJhdGlvbiBpbiBgYmxvY2svZ2VuaGQuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHJpZ2h0IGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoZSBgZ2VuZGlza2Agc3RydWN0dXJlIGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGtlcm5lbCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYmxvY2svZ2VuaGQuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2suIFRoaXMgc3RydWN0dXJlIGlzIGNlbnRyYWwgdG8gaG93IHRoZSBrZXJuZWwgbW9kZWxzIGFuZCBpbnRlcmFjdHMgd2l0aCBibG9jayBkZXZpY2VzLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBhbGxvY2F0aW9uIGlzIGNyaXRpY2FsLiBLbm93aW5nIGl0cyBsaWZlY3ljbGUsIHdoZW4gaXQncyBjcmVhdGVkLCBwb3B1bGF0ZWQsIGFuZCB1bHRpbWF0ZWx5IHJlbGVhc2VkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc3RvcmFnZSBzdWJzeXN0ZW0gZnVuY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBnZW5lcmljIGRpc2sgc3RydWN0dXJlcyBhcmUgaGFuZGxlZC4gV2hlcmUgZG9lcyBtZW1vcnkgZm9yIHRoZXNlIHN0cnVjdHVyZXMgY29tZSBmcm9tPyBBcmUgdGhleSBkeW5hbWljYWxseSBhbGxvY2F0ZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZGlmZmVyZW50IGFsbG9jYXRpb24gc3RyYXRlZ2llcz8gVGhpcyBpcyBhIGNvcmUgcGFydCBvZiB0aGUgbG93LWxldmVsIGRpc2sgbWFuYWdlbWVudCBwcm9jZXNzLCBzbyBsZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDY0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDg6NDkuNzQ4NjY2ODA4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA4NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZ2VuZGlzayBcXFxcKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9nZW5oZC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImJsb2NrL2dlbmhkLmM9NTc9c3RhdGljIERFRklORV9JREEoZXh0X2RldnRfaWRhKTtcXG5ibG9jay9nZW5oZC5jLTU4LVxcbmJsb2NrL2dlbmhkLmM6NTk6dm9pZCBzZXRfY2FwYWNpdHkoc3RydWN0IGdlbmRpc2sgKmRpc2ssIHNlY3Rvcl90IHNlY3RvcnMpXFxuYmxvY2svZ2VuaGQuYy02MC17XFxuLS1cXG5ibG9jay9nZW5oZC5jPTcwPUVYUE9SVF9TWU1CT0woc2V0X2NhcGFjaXR5KTtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNzUtICovXFxuYmxvY2svZ2VuaGQuYzo3Njpib29sIHNldF9jYXBhY2l0eV9hbmRfbm90aWZ5KHN0cnVjdCBnZW5kaXNrICpkaXNrLCBzZWN0b3JfdCBzaXplKVxcbmJsb2NrL2dlbmhkLmMtNzcte1xcbi0tXFxuYmxvY2svZ2VuaGQuYz0zMzc9dm9pZCBibGtfZnJlZV9leHRfbWlub3IodW5zaWduZWQgaW50IG1pbm9yKVxcbi0tXFxuYmxvY2svZ2VuaGQuYy0zNDEtXFxuYmxvY2svZ2VuaGQuYzozNDI6dm9pZCBkaXNrX3VldmVudChzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24pXFxuYmxvY2svZ2VuaGQuYy0zNDMte1xcbi0tXFxuYmxvY2svZ2VuaGQuYz0zNjE9RVhQT1JUX1NZTUJPTF9HUEwoZGlza191ZXZlbnQpO1xcbmJsb2NrL2dlbmhkLmMtMzYyLVxcbmJsb2NrL2dlbmhkLmM6MzYzOmludCBkaXNrX3NjYW5fcGFydGl0aW9ucyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgYmxrX21vZGVfdCBtb2RlKVxcbmJsb2NrL2dlbmhkLmMtMzY0LXtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNDA0LVxcbmJsb2NrL2dlbmhkLmM6NDA1OnN0YXRpYyB2b2lkIGFkZF9kaXNrX2ZpbmFsKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2dlbmhkLmMtNDA2LXtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNDI2LVxcbmJsb2NrL2dlbmhkLmM6NDI3OnN0YXRpYyBpbnQgX19hZGRfZGlzayhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2dlbmhkLmMtNDI4LVxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipncm91cHMsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTU4Ny0gKi9cXG5ibG9jay9nZW5oZC5jOjU4ODppbnQgX19tdXN0X2NoZWNrIGFkZF9kaXNrX2Z3bm9kZShzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBnZW5kaXNrICpkaXNrLFxcbmJsb2NrL2dlbmhkLmMtNTg5LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqZ3JvdXBzLFxcbi0tXFxuYmxvY2svZ2VuaGQuYz02MTY9RVhQT1JUX1NZTUJPTF9HUEwoYWRkX2Rpc2tfZndub2RlKTtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtNjI2LSAqL1xcbmJsb2NrL2dlbmhkLmM6NjI3OmludCBfX211c3RfY2hlY2sgZGV2aWNlX2FkZF9kaXNrKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgc3RydWN0IGdlbmRpc2sgKmRpc2ssXFxuYmxvY2svZ2VuaGQuYy02MjgtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipncm91cHMpXFxuLS1cXG5ibG9jay9nZW5oZC5jPTYzMj1FWFBPUlRfU1lNQk9MKGRldmljZV9hZGRfZGlzayk7XFxuYmxvY2svZ2VuaGQuYy02MzMtXFxuYmxvY2svZ2VuaGQuYzo2MzQ6c3RhdGljIHZvaWQgYmxrX3JlcG9ydF9kaXNrX2RlYWQoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgc3VycHJpc2UpXFxuYmxvY2svZ2VuaGQuYy02MzUte1xcbi0tXFxuYmxvY2svZ2VuaGQuYy02NTktXFxuYmxvY2svZ2VuaGQuYzo2NjA6c3RhdGljIGJvb2wgX19ibGtfbWFya19kaXNrX2RlYWQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuYmxvY2svZ2VuaGQuYy02NjEte1xcbi0tXFxuYmxvY2svZ2VuaGQuYy02ODgtICovXFxuYmxvY2svZ2VuaGQuYzo2ODk6dm9pZCBibGtfbWFya19kaXNrX2RlYWQoc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuYmxvY2svZ2VuaGQuYy02OTAte1xcbi0tXFxuYmxvY2svZ2VuaGQuYz02OTU9RVhQT1JUX1NZTUJPTF9HUEwoYmxrX21hcmtfZGlza19kZWFkKTtcXG5ibG9jay9nZW5oZC5jLTY5Ni1cXG5ibG9jay9nZW5oZC5jOjY5NzpzdGF0aWMgdm9pZCBfX2RlbF9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2dlbmhkLmMtNjk4LXtcXG4tLVxcbmJsb2NrL2dlbmhkLmM9Nzg0PXN0YXRpYyB2b2lkIGRpc2FibGVfZWx2X3N3aXRjaChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSlcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODEyLSAqL1xcbmJsb2NrL2dlbmhkLmM6ODEzOnZvaWQgZGVsX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuYmxvY2svZ2VuaGQuYy04MTQte1xcbi0tXFxuYmxvY2svZ2VuaGQuYz04MzI9RVhQT1JUX1NZTUJPTChkZWxfZ2VuZGlzayk7XFxuLS1cXG5ibG9jay9nZW5oZC5jLTg0My0gKi9cXG5ibG9jay9nZW5oZC5jOjg0NDp2b2lkIGludmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9nZW5oZC5jLTg0NS17XFxuLS1cXG5ibG9jay9nZW5oZC5jPTg1NT1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtODU4LXtcXG5ibG9jay9nZW5oZC5jOjg1OTpcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XFxuYmxvY2svZ2VuaGQuYy04NjAtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTg2Nz1zdGF0aWMgc3NpemVfdCBkaXNrX2JhZGJsb2Nrc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTg3MC17XFxuYmxvY2svZ2VuaGQuYzo4NzE6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtODcyLVxcbi0tXFxuYmxvY2svZ2VuaGQuYz05NzA9c3RhdGljIGludCBzaG93X3BhcnRpdGlvbihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXFxuYmxvY2svZ2VuaGQuYy05NzEte1xcbmJsb2NrL2dlbmhkLmM6OTcyOlxcdHN0cnVjdCBnZW5kaXNrICpzZ3AgPSB2O1xcbmJsb2NrL2dlbmhkLmMtOTczLVxcdHN0cnVjdCBibG9ja19kZXZpY2UgKnBhcnQ7XFxuLS1cXG5ibG9jay9nZW5oZC5jPTEwMTc9c3RhdGljIHNzaXplX3QgZGlza19yYW5nZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTAxOS17XFxuYmxvY2svZ2VuaGQuYzoxMDIwOlxcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcXG5ibG9jay9nZW5oZC5jLTEwMjEtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTEwMjU9c3RhdGljIHNzaXplX3QgZGlza19leHRfcmFuZ2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5ibG9jay9nZW5oZC5jLTEwMjcte1xcbmJsb2NrL2dlbmhkLmM6MTAyODpcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XFxuYmxvY2svZ2VuaGQuYy0xMDI5LVxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMDM0PXN0YXRpYyBzc2l6ZV90IGRpc2tfcmVtb3ZhYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMDM2LXtcXG5ibG9jay9nZW5oZC5jOjEwMzc6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtMTAzOC1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTA0Mz1zdGF0aWMgc3NpemVfdCBkaXNrX2hpZGRlbl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTA0NS17XFxuYmxvY2svZ2VuaGQuYzoxMDQ2OlxcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcXG5ibG9jay9nZW5oZC5jLTEwNDctXFxuLS1cXG5ibG9jay9nZW5oZC5jPTEwNTI9c3RhdGljIHNzaXplX3QgZGlza19yb19zaG93KHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTA1NC17XFxuYmxvY2svZ2VuaGQuYzoxMDU1OlxcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcXG5ibG9jay9nZW5oZC5jLTEwNTYtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTExMzQ9c3RhdGljIHNzaXplX3QgZGlza19hbGlnbm1lbnRfb2Zmc2V0X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMTM3LXtcXG5ibG9jay9nZW5oZC5jOjExMzg6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtMTEzOS1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTE0Mz1zdGF0aWMgc3NpemVfdCBkaXNrX2Rpc2NhcmRfYWxpZ25tZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMTQ2LXtcXG5ibG9jay9nZW5oZC5jOjExNDc6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtMTE0OC1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTE1Mj1zdGF0aWMgc3NpemVfdCBkaXNrc2VxX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMTU0LXtcXG5ibG9jay9nZW5oZC5jOjExNTU6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtMTE1Ni1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTI0MD1zdGF0aWMgdW1vZGVfdCBkaXNrX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmEsIGludCBuKVxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xMjQyLVxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCB0eXBlb2YoKmRldiksIGtvYmopO1xcbmJsb2NrL2dlbmhkLmM6MTI0MzpcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XFxuYmxvY2svZ2VuaGQuYy0xMjQ0LVxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMjgwPXN0YXRpYyB2b2lkIGRpc2tfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuYmxvY2svZ2VuaGQuYy0xMjgxLXtcXG5ibG9jay9nZW5oZC5jOjEyODI6XFx0c3RydWN0IGdlbmRpc2sgKmRpc2sgPSBkZXZfdG9fZGlzayhkZXYpO1xcbmJsb2NrL2dlbmhkLmMtMTI4My1cXG4tLVxcbmJsb2NrL2dlbmhkLmM9MTMyND1zdGF0aWMgaW50IGJsb2NrX3VldmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudilcXG5ibG9jay9nZW5oZC5jLTEzMjUte1xcbmJsb2NrL2dlbmhkLmM6MTMyNjpcXHRjb25zdCBzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGRldl90b19kaXNrKGRldik7XFxuYmxvY2svZ2VuaGQuYy0xMzI3LVxcbi0tXFxuYmxvY2svZ2VuaGQuYz0xMzM2PXN0YXRpYyBjaGFyICpibG9ja19kZXZub2RlKGNvbnN0IHN0cnVjdCBkZXZpY2UgKmRldiwgdW1vZGVfdCAqbW9kZSxcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTMzOC17XFxuYmxvY2svZ2VuaGQuYzoxMzM5OlxcdHN0cnVjdCBnZW5kaXNrICpkaXNrID0gZGV2X3RvX2Rpc2soZGV2KTtcXG5ibG9jay9nZW5oZC5jLTEzNDAtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTEzNjE9c3RhdGljIGludCBkaXNrc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcWYsIHZvaWQgKnYpXFxuYmxvY2svZ2VuaGQuYy0xMzYyLXtcXG5ibG9jay9nZW5oZC5jOjEzNjM6XFx0c3RydWN0IGdlbmRpc2sgKmdwID0gdjtcXG5ibG9jay9nZW5oZC5jLTEzNjQtXFx0c3RydWN0IGJsb2NrX2RldmljZSAqaGQ7XFxuLS1cXG5ibG9jay9nZW5oZC5jPTE0Mzc9bW9kdWxlX2luaXQocHJvY19nZW5oZF9pbml0KTtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTQzOS1cXG5ibG9jay9nZW5oZC5jOjE0NDA6ZGV2X3QgcGFydF9kZXZ0KHN0cnVjdCBnZW5kaXNrICpkaXNrLCB1OCBwYXJ0bm8pXFxuYmxvY2svZ2VuaGQuYy0xNDQxLXtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTQ1My1cXG5ibG9jay9nZW5oZC5jOjE0NTQ6c3RydWN0IGdlbmRpc2sgKl9fYWxsb2NfZGlza19ub2RlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgbm9kZV9pZCxcXG5ibG9jay9nZW5oZC5jLTE0NTUtXFx0XFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxcbmJsb2NrL2dlbmhkLmMtMTQ1Ni17XFxuYmxvY2svZ2VuaGQuYzoxNDU3OlxcdHN0cnVjdCBnZW5kaXNrICpkaXNrO1xcbmJsb2NrL2dlbmhkLmMtMTQ1OC1cXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTUxOS1cXG5ibG9jay9nZW5oZC5jOjE1MjA6c3RydWN0IGdlbmRpc2sgKl9fYmxrX2FsbG9jX2Rpc2soc3RydWN0IHF1ZXVlX2xpbWl0cyAqbGltLCBpbnQgbm9kZSxcXG5ibG9jay9nZW5oZC5jLTE1MjEtXFx0XFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxcbi0tXFxuYmxvY2svZ2VuaGQuYy0xNTI0LVxcdHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxO1xcbmJsb2NrL2dlbmhkLmM6MTUyNTpcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaztcXG5ibG9jay9nZW5oZC5jLTE1MjYtXFxuLS1cXG5ibG9jay9nZW5oZC5jPTE1Mzk9RVhQT1JUX1NZTUJPTChfX2Jsa19hbGxvY19kaXNrKTtcXG4tLVxcbmJsb2NrL2dlbmhkLmMtMTU1My0gKi9cXG5ibG9jay9nZW5oZC5jOjE1NTQ6dm9pZCBwdXRfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcXG5ibG9jay9nZW5oZC5jLTE1NTUte1xcbi0tXFxuYmxvY2svZ2VuaGQuYz0xNTU5PUVYUE9SVF9TWU1CT0wocHV0X2Rpc2spO1xcbmJsb2NrL2dlbmhkLmMtMTU2MC1cXG5ibG9jay9nZW5oZC5jOjE1NjE6c3RhdGljIHZvaWQgc2V0X2Rpc2tfcm9fdWV2ZW50KHN0cnVjdCBnZW5kaXNrICpnZCwgaW50IHJvKVxcbmJsb2NrL2dlbmhkLmMtMTU2Mi17XFxuLS1cXG5ibG9jay9nZW5oZC5jLTE1NzktICovXFxuYmxvY2svZ2VuaGQuYzoxNTgwOnZvaWQgc2V0X2Rpc2tfcm8oc3RydWN0IGdlbmRpc2sgKmRpc2ssIGJvb2wgcmVhZF9vbmx5KVxcbmJsb2NrL2dlbmhkLmMtMTU4MS17XFxuLS1cXG5ibG9jay9nZW5oZC5jPTE1OTE9RVhQT1JUX1NZTUJPTChzZXRfZGlza19ybyk7XFxuYmxvY2svZ2VuaGQuYy0xNTkyLVxcbmJsb2NrL2dlbmhkLmM6MTU5Mzp2b2lkIGluY19kaXNrc2VxKHN0cnVjdCBnZW5kaXNrICpkaXNrKVxcbmJsb2NrL2dlbmhkLmMtMTU5NC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjQ5LjgwOTc1NzUzOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc4MDc5NzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBfX2FsbG9jX2Rpc2tfbm9kZWAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGBfX2FsbG9jX2Rpc2tfbm9kZWAsIHNwZWNpZmljYWxseSBpbiBgYmxvY2svZ2VuaGQuY2AuIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgaG93IHRoZXNlIGRpc2sgc3RydWN0dXJlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIG1hbmFnZWQgYXQgYSBsb3cgbGV2ZWwuIFRoaXMgZnVuY3Rpb24gaXMgZnVuZGFtZW50YWwsIG9idmlvdXNseSwgYnV0IEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZGV0YWlscywgZXNwZWNpYWxseSBhbnkgbnVhbmNlcyBJIG1pZ2h0IGJlIG92ZXJsb29raW5nLCBjb25zaWRlcmluZyBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggbW9kZXJuIHN0b3JhZ2UgZGV2aWNlcyBvciBhZHZhbmNlZCBxdWV1ZWluZyBtZWNoYW5pc21zLiBJJ20gcGFydGljdWxhcmx5IGN1cmlvdXMgYWJvdXQgaG93IGl0IGhhbmRsZXMgdGhlIGluaXRpYWwgbWVtb3J5IGFsbG9jYXRpb24sIHRoZSBhc3NpZ25tZW50IG9mIGRldmljZSBudW1iZXJzLCBhbmQgdGhlIHNldHRpbmcgb2YgYmFzaWMgYXR0cmlidXRlcyBsaWtlIHRoZSBuYW1lIGFuZCBtYWpvci9taW5vciBudW1iZXJzLiBJdCdzIGFsc28gd29ydGggc2VlaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgb3IgaG9va3MgdGhhdCBhcmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGFsbG9jYXRpb24uIEnigJltIHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHVzZWZ1bCBjbHVlcyBhYm91dCBob3RwbHVnIHN1cHBvcnQsIG9yIHBlcmhhcHMgaGludHMgcmVsYXRpbmcgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzaGFyZWQgcmVzb3VyY2VzIG9uIHRoZSBkaXNrLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgYGdlbmRpc2tgIHN0cnVjdHVyZSBpcyBiZWluZyBzZXQgdXAgYmVmb3JlIGl0J3MgcGFzc2VkIG9mZiBmb3IgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gc3RhcnQgc2Nyb2xsaW5nIHRocm91Z2ggdGhlIGNvZGUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3ODEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0ODo1Mi4zODc4NDA2ODNaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImJsb2NrL2dlbmhkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ1NCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ1NDpcXHRzdHJ1Y3QgZ2VuZGlzayAqX19hbGxvY19kaXNrX25vZGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBub2RlX2lkLFxcbjE0NTU6XFx0XFx0XFx0c3RydWN0IGxvY2tfY2xhc3Nfa2V5ICpsa2NsYXNzKVxcbjE0NTY6XFx0e1xcbjE0NTc6XFx0XFx0c3RydWN0IGdlbmRpc2sgKmRpc2s7XFxuMTQ1ODpcXHRcXG4xNDU5OlxcdFxcdGRpc2sgPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBnZW5kaXNrKSwgR0ZQX0tFUk5FTCwgbm9kZV9pZCk7XFxuMTQ2MDpcXHRcXHRpZiAoIWRpc2spXFxuMTQ2MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xNDYyOlxcdFxcbjE0NjM6XFx0XFx0aWYgKGJpb3NldF9pbml0KFxcdTAwMjZkaXNrLVxcdTAwM2ViaW9fc3BsaXQsIEJJT19QT09MX1NJWkUsIDAsIDApKVxcbjE0NjQ6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9kaXNrO1xcbjE0NjU6XFx0XFxuMTQ2NjpcXHRcXHRkaXNrLVxcdTAwM2ViZGkgPSBiZGlfYWxsb2Mobm9kZV9pZCk7XFxuMTQ2NzpcXHRcXHRpZiAoIWRpc2stXFx1MDAzZWJkaSlcXG4xNDY4OlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfYmlvc2V0O1xcbjE0Njk6XFx0XFxuMTQ3MDpcXHRcXHQvKiBiZGV2X2FsbG9jKCkgbWlnaHQgbmVlZCB0aGUgcXVldWUsIHNldCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgKi9cXG4xNDcxOlxcdFxcdGRpc2stXFx1MDAzZXF1ZXVlID0gcTtcXG4xNDcyOlxcdFxcbjE0NzM6XFx0XFx0ZGlzay1cXHUwMDNlcGFydDAgPSBiZGV2X2FsbG9jKGRpc2ssIDApO1xcbjE0NzQ6XFx0XFx0aWYgKCFkaXNrLVxcdTAwM2VwYXJ0MClcXG4xNDc1OlxcdFxcdFxcdGdvdG8gb3V0X2ZyZWVfYmRpO1xcbjE0NzY6XFx0XFxuMTQ3NzpcXHRcXHRkaXNrLVxcdTAwM2Vub2RlX2lkID0gbm9kZV9pZDtcXG4xNDc4OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmRpc2stXFx1MDAzZW9wZW5fbXV0ZXgpO1xcbjE0Nzk6XFx0XFx0eGFfaW5pdChcXHUwMDI2ZGlzay1cXHUwMDNlcGFydF90YmwpO1xcbjE0ODA6XFx0XFx0aWYgKHhhX2luc2VydChcXHUwMDI2ZGlzay1cXHUwMDNlcGFydF90YmwsIDAsIGRpc2stXFx1MDAzZXBhcnQwLCBHRlBfS0VSTkVMKSlcXG4xNDgxOlxcdFxcdFxcdGdvdG8gb3V0X2Rlc3Ryb3lfcGFydF90Ymw7XFxuMTQ4MjpcXHRcXG4xNDgzOlxcdFxcdGlmIChibGtjZ19pbml0X2Rpc2soZGlzaykpXFxuMTQ4NDpcXHRcXHRcXHRnb3RvIG91dF9lcmFzZV9wYXJ0MDtcXG4xNDg1OlxcdFxcbjE0ODY6XFx0XFx0ZGlza19pbml0X3pvbmVfcmVzb3VyY2VzKGRpc2spO1xcbjE0ODc6XFx0XFx0cmFuZF9pbml0aWFsaXplX2Rpc2soZGlzayk7XFxuMTQ4ODpcXHRcXHRkaXNrX3RvX2RldihkaXNrKS1cXHUwMDNlY2xhc3MgPSBcXHUwMDI2YmxvY2tfY2xhc3M7XFxuMTQ4OTpcXHRcXHRkaXNrX3RvX2RldihkaXNrKS1cXHUwMDNldHlwZSA9IFxcdTAwMjZkaXNrX3R5cGU7XFxuMTQ5MDpcXHRcXHRkZXZpY2VfaW5pdGlhbGl6ZShkaXNrX3RvX2RldihkaXNrKSk7XFxuMTQ5MTpcXHRcXHRpbmNfZGlza3NlcShkaXNrKTtcXG4xNDkyOlxcdFxcdHEtXFx1MDAzZWRpc2sgPSBkaXNrO1xcbjE0OTM6XFx0XFx0bG9ja2RlcF9pbml0X21hcChcXHUwMDI2ZGlzay1cXHUwMDNlbG9ja2RlcF9tYXAsIFxcXCIoYmlvIGNvbXBsZXRpb24pXFxcIiwgbGtjbGFzcywgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjUyLjM4Nzk0NjEwM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTg1OTg3ODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRgIHdpdGhpbiB0aGUgS2VybmVsJ3MgRGlzayBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGdlbmRpc2tgIHN0cnVjdHVyZSBhbmQgaG93IGl0IGhhbmRsZXMgd3JpdGUgc3RyZWFtcy4gSSBrbm93IHRoYXQgYGt6YWxsb2Nfbm9kZWAgaXMgdXNlZCBmb3IgYWxsb2NhdGlvbiwgbWVhbmluZyB0aGF0IGBkaXNrLVx1MDAzZXdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRgIGdldHMgaW5pdGlhbGl6ZWQgdG8gYWxsIHplcm9zIHJpZ2h0IG9mZiB0aGUgYmF0LiBUaGF0J3MgZ29vZCB0byBrZWVwIGluIG1pbmQsIGFuZCBpdCdzIGEgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiBgYmlvX3dyaXRlX3N0cmVhbWAgYW5kIGhvdyB0aGUga2VybmVsIGFjdHVhbGx5IHV0aWxpemVzIGl0LiBJIHN1c3BlY3QgdGhlcmUncyBhIGNvbm5lY3Rpb24gdG8gY29uY3VycmVuY3kgb3IgcGVyaGFwcyBJL08gcHJpb3JpdGl6YXRpb24uIFRpbWUgdG8gZ2V0IHNvbWUgYW5zd2Vycy4gSSdsbCBuZWVkIHRvIHVzZSBgZ3JlcGAgKG9yIG15IHByZWZlcnJlZCB0b29sKSB0byBwaW5wb2ludCB3aGVyZSBgYmlfd3JpdGVfc3RyZWFtYCBpcyBiZWluZyBtYW5pcHVsYXRlZCBhbmQgaG93IGBiZGV2X21heF93cml0ZV9zdHJlYW1zYCBmaWd1cmVzIGludG8gYWxsIG9mIHRoaXMuIFRoaXMgaXMgdGhlIGtleS4gVGhvc2UgdHdvIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIHRvIHVuZGVyc3RhbmQgdGhlIHJlc2VydmF0aW9uIGFuZCB1c2FnZSBwYXR0ZXJucy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MzQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ4OjU2LjU3MzkzNzQyOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxODIzOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpX3dyaXRlX3N0cmVhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJibG9jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYmxvY2svYmlvLmM9MjE3PXZvaWQgYmlvX2luaXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgYmlvX3ZlYyAqdGFibGUsXFxuLS1cXG5ibG9jay9iaW8uYy0yMjUtXFx0YmlvLVxcdTAwM2ViaV93cml0ZV9oaW50ID0gMDtcXG5ibG9jay9iaW8uYzoyMjY6XFx0YmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gPSAwO1xcbmJsb2NrL2Jpby5jLTIyNy1cXHRiaW8tXFx1MDAzZWJpX3N0YXR1cyA9IDA7XFxuLS1cXG5ibG9jay9iaW8uYz04NTY9c3RhdGljIGludCBfX2Jpb19jbG9uZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW8gKmJpb19zcmMsIGdmcF90IGdmcClcXG4tLVxcbmJsb2NrL2Jpby5jLTg2MC1cXHRiaW8tXFx1MDAzZWJpX3dyaXRlX2hpbnQgPSBiaW9fc3JjLVxcdTAwM2ViaV93cml0ZV9oaW50O1xcbmJsb2NrL2Jpby5jOjg2MTpcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9IGJpb19zcmMtXFx1MDAzZWJpX3dyaXRlX3N0cmVhbTtcXG5ibG9jay9iaW8uYy04NjItXFx0YmlvLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQgPSBiaW9fc3JjLVxcdTAwM2ViaV9idmVjX2dhcF9iaXQ7XFxuLS1cXG5ibG9jay9ibGstY29yZS5jPTYyMj1zdGF0aWMgaW50IGJsa19wYXJ0aXRpb25fcmVtYXAoc3RydWN0IGJpbyAqYmlvKVxcbi0tXFxuYmxvY2svYmxrLWNvcmUuYy02MzMtXFx0fVxcbmJsb2NrL2Jsay1jb3JlLmM6NjM0OlxcdGlmIChiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSBcXHUwMDI2XFx1MDAyNiBiaW9fb3AoYmlvKSA9PSBSRVFfT1BfV1JJVEUpIHtcXG5ibG9jay9ibGstY29yZS5jOjYzNTpcXHRcXHRpZiAodW5saWtlbHkoYmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gXFx1MDAzZSBwLVxcdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zKSlcXG5ibG9jay9ibGstY29yZS5jLTYzNi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5ibG9jay9ibGstY29yZS5jLTYzNy1cXG5ibG9jay9ibGstY29yZS5jOjYzODpcXHRcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSA9XFxuYmxvY2svYmxrLWNvcmUuYzo2Mzk6XFx0XFx0XFx0cC1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcFtiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSAtIDFdO1xcbmJsb2NrL2Jsay1jb3JlLmMtNjQwLVxcdH1cXG4tLVxcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYz0xNzI9c3RhdGljIHN0cnVjdCBiaW8gKmJsa19jcnlwdG9fYWxsb2NfZW5jX2JpbyhzdHJ1Y3QgYmlvICpiaW9fc3JjLFxcbi0tXFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jLTE4Ny1cXHRiaW8tXFx1MDAzZWJpX3dyaXRlX2hpbnRcXHQ9IGJpb19zcmMtXFx1MDAzZWJpX3dyaXRlX2hpbnQ7XFxuYmxvY2svYmxrLWNyeXB0by1mYWxsYmFjay5jOjE4ODpcXHRiaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbVxcdD0gYmlvX3NyYy1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtO1xcbmJsb2NrL2Jsay1jcnlwdG8tZmFsbGJhY2suYy0xODktXFx0YmlvLVxcdTAwM2ViaV9pdGVyLmJpX3NlY3RvclxcdD0gYmlvX3NyYy1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3I7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz03NzQ9c3RhdGljIHN0cnVjdCByZXF1ZXN0ICphdHRlbXB0X21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLFxcbi0tXFxuYmxvY2svYmxrLW1lcmdlLmMtNzg0LVxcdFxcdHJldHVybiBOVUxMO1xcbmJsb2NrL2Jsay1tZXJnZS5jOjc4NTpcXHRpZiAocmVxLVxcdTAwM2ViaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSAhPSBuZXh0LVxcdTAwM2ViaW8tXFx1MDAzZWJpX3dyaXRlX3N0cmVhbSlcXG5ibG9jay9ibGstbWVyZ2UuYy03ODYtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYz04OTU9Ym9vbCBibGtfcnFfbWVyZ2Vfb2soc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pXFxuLS1cXG5ibG9jay9ibGstbWVyZ2UuYy05MTAtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbmJsb2NrL2Jsay1tZXJnZS5jOjkxMTpcXHRpZiAocnEtXFx1MDAzZWJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtICE9IGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtKVxcbmJsb2NrL2Jsay1tZXJnZS5jLTkxMi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5ibG9jay9mb3BzLmM9NTU9c3RhdGljIHNzaXplX3QgX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5ibG9jay9mb3BzLmMtODEtXFx0YmlvLmJpX3dyaXRlX2hpbnQgPSBmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApLVxcdTAwM2VpX3dyaXRlX2hpbnQ7XFxuYmxvY2svZm9wcy5jOjgyOlxcdGJpby5iaV93cml0ZV9zdHJlYW0gPSBpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW07XFxuYmxvY2svZm9wcy5jLTgzLVxcdGJpby5iaV9pb3ByaW8gPSBpb2NiLVxcdTAwM2VraV9pb3ByaW87XFxuLS1cXG5ibG9jay9mb3BzLmM9MTc1PXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmJsb2NrL2ZvcHMuYy0yMTMtXFx0XFx0YmlvLVxcdTAwM2ViaV93cml0ZV9oaW50ID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKS1cXHUwMDNlaV93cml0ZV9oaW50O1xcbmJsb2NrL2ZvcHMuYzoyMTQ6XFx0XFx0YmlvLVxcdTAwM2ViaV93cml0ZV9zdHJlYW0gPSBpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW07XFxuYmxvY2svZm9wcy5jLTIxNS1cXHRcXHRiaW8tXFx1MDAzZWJpX3ByaXZhdGUgPSBkaW87XFxuLS1cXG5ibG9jay9mb3BzLmM9MzIyPXN0YXRpYyBzc2l6ZV90IF9fYmxrZGV2X2RpcmVjdF9JT19hc3luYyhzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuLS1cXG5ibG9jay9mb3BzLmMtMzQwLVxcdGJpby1cXHUwMDNlYmlfd3JpdGVfaGludCA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCktXFx1MDAzZWlfd3JpdGVfaGludDtcXG5ibG9jay9mb3BzLmM6MzQxOlxcdGJpby1cXHUwMDNlYmlfd3JpdGVfc3RyZWFtID0gaW9jYi1cXHUwMDNla2lfd3JpdGVfc3RyZWFtO1xcbmJsb2NrL2ZvcHMuYy0zNDItXFx0YmlvLVxcdTAwM2ViaV9lbmRfaW8gPSBibGtkZXZfYmlvX2VuZF9pb19hc3luYztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDg6NTcuMTA1NzY3OTMzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUwMjM2ODk2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYGJkZXZfbWF4X3dyaXRlX3N0cmVhbXNgIFVzYWdlIEFjcm9zcyB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBgYmRldl9tYXhfd3JpdGVfc3RyZWFtc2AgaXMgYWN0dWFsbHkgKnVzZWQqIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHRyYWNpbmcgaXRzIGNhbGxlcnMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHRzIHdoZXJlIGl0cyB2YWx1ZSBpcyBiZWluZyBzZXQsIHJlYWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCAqYWN0ZWQgdXBvbiogaXMgY3JpdGljYWwuIEknbSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHJpcHBsZSBlZmZlY3RzIGlmIHdlIHdlcmUgdG8gYWRqdXN0IGl0LCBvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGluZm9ybSBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0ICpjYWxsKiBpdDsgSSdtIGFmdGVyIHRoZSAqc2VtYW50aWNzKiBvZiB0aG9zZSBjYWxscy4gV2hhdCdzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRob3NlIHJlYWRzIGFuZCB3cml0ZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyB3aGVyZSB0aGUgY3VycmVudCB2YWx1ZSBtaWdodCBiZSBvdmVybHkgY29uc2VydmF0aXZlIG9yLCBjb252ZXJzZWx5LCB0b28gYWdncmVzc2l2ZT8gSSdtIGFudGljaXBhdGluZyBzb21lIGludGVyZXN0aW5nIHBhdHRlcm5zIHRvIGVtZXJnZSwgcGVyaGFwcyByZXZlYWxpbmcgYm90dGxlbmVja3Mgb3IgYXJlYXMgcmlwZSBmb3IgdHVuaW5nLiBJJ2xsIGJlIGtlZXBpbmcgYSBrZWVuIGV5ZSBvdXQgZm9yIGFueSB1bnVzdWFsIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLCBwYXJ0aWN1bGFybHkgd2l0aCByZXNwZWN0IHRvIGNvbmN1cnJlbmN5IGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBUaGlzIGFuYWx5c2lzIGlzIGZ1bmRhbWVudGFsIGJlZm9yZSBJIGNvbnNpZGVyIGNoYW5nZXMgdG8gdGhlIHNldHRpbmcncyB2YWx1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMDksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0OTowMi4xMjk0NjE3NDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NzQxMzM2OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmRldl9tYXhfd3JpdGVfc3RyZWFtc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9mb3BzLmM9Mzk0PXN0YXRpYyBzc2l6ZV90IGJsa2Rldl9kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuLS1cXG5ibG9jay9mb3BzLmMtNDA1LVxcdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSkge1xcbmJsb2NrL2ZvcHMuYzo0MDY6XFx0XFx0dTE2IG1heF93cml0ZV9zdHJlYW1zID0gYmRldl9tYXhfd3JpdGVfc3RyZWFtcyhiZGV2KTtcXG5ibG9jay9mb3BzLmMtNDA3LVxcbi0tXFxuZnMvZjJmcy9maWxlLmM9NTQ2ND1zdGF0aWMgYm9vbCBmMmZzX3ZhbGlkX3dyaXRlX3N0cmVhbShzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHU4IHdyaXRlX3N0cmVhbSlcXG4tLVxcbmZzL2YyZnMvZmlsZS5jLTU0NzAtXFx0aWYgKCFmMmZzX2lzX211bHRpX2RldmljZShzYmkpKVxcbmZzL2YyZnMvZmlsZS5jOjU0NzE6XFx0XFx0cmV0dXJuIHdyaXRlX3N0cmVhbSBcXHUwMDNjPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKHNiaS1cXHUwMDNlc2ItXFx1MDAzZXNfYmRldik7XFxuZnMvZjJmcy9maWxlLmMtNTQ3Mi1cXG5mcy9mMmZzL2ZpbGUuYy01NDczLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzYmktXFx1MDAzZXNfbmRldnM7IGkrKylcXG5mcy9mMmZzL2ZpbGUuYzo1NDc0OlxcdFxcdGlmICh3cml0ZV9zdHJlYW0gXFx1MDAzZSBiZGV2X21heF93cml0ZV9zdHJlYW1zKEZERVYoaSkuYmRldikpXFxuZnMvZjJmcy9maWxlLmMtNTQ3NS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5mcy9mMmZzL3NlZ21lbnQuYz0zNzQyPXU4IGYyZnNfaW9fdHlwZV90b193cml0ZV9zdHJlYW0oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldixcXG4tLVxcbmZzL2YyZnMvc2VnbWVudC5jLTM3NDQte1xcbmZzL2YyZnMvc2VnbWVudC5jOjM3NDU6XFx0dW5zaWduZWQgc2hvcnQgbnIgPSBiZGV2X21heF93cml0ZV9zdHJlYW1zKGJkZXYpO1xcbmZzL2YyZnMvc2VnbWVudC5jLTM3NDYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oPTEzMDA9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYmRldl9tYXhfc2VnbWVudHMoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcXG4tLVxcbmluY2x1ZGUvbGludXgvYmxrZGV2LmgtMTMwNC1cXG5pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oOjEzMDU6c3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBiZGV2X21heF93cml0ZV9zdHJlYW1zKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpXFxuaW5jbHVkZS9saW51eC9ibGtkZXYuaC0xMzA2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDc6NDk6MDQuNjAzNjAyMTc1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MDg2NjcwMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBGaWxlc3lzdGVtIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gYSBmaWxlc3lzdGVtIGlzc3VlLCBhbmQgbXkgaW50dWl0aW9uIGlzIGxlYWRpbmcgbWUgdG8gdGhlIGBibG9jay9mb3BzLmNgIGZpbGUuIFRoaXMgc2VlbXMgbGlrZSBhIGxpa2VseSBsb2NhdGlvbiBmb3Igc29tZSBjb3JlIGJsb2NrIGRldmljZSBmaWxlIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgbGluZSA0MDUgbWlnaHQgaG9sZCBzb21lIGNsdWUg4oCTIHBlcmhhcHMgYSBjcnVjaWFsIGZ1bmN0aW9uIGNhbGwsIGEgcG90ZW50aWFsIGVycm9yIGNoZWNrLCBvciBzb21lIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlIG1hbmlwdWxhdGlvbi4gTGV0IG1lIHplcm8gaW4gb24gdGhhdCBzZWN0aW9uIGFuZCBzZWUgd2hhdCBpdCByZXZlYWxzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxNzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0OTowNi41MTIyNzE4MzhaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYmxvY2svZm9wcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQwMDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0aWYgKGJsa2Rldl9kaW9faW52YWxpZChiZGV2LCBpb2NiLCBpdGVyKSlcXG4gNDAzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MDQ6XFx0XFxuIDQwNTpcXHRcXHRpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUpIHtcXG4gNDA2OlxcdFxcdFxcdHUxNiBtYXhfd3JpdGVfc3RyZWFtcyA9IGJkZXZfbWF4X3dyaXRlX3N0cmVhbXMoYmRldik7XFxuIDQwNzpcXHRcXG4gNDA4OlxcdFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW0pIHtcXG4gNDA5OlxcdFxcdFxcdFxcdGlmIChpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW0gXFx1MDAzZSBtYXhfd3JpdGVfc3RyZWFtcylcXG4gNDEwOlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MTE6XFx0XFx0XFx0fSBlbHNlIGlmIChtYXhfd3JpdGVfc3RyZWFtcykge1xcbiA0MTI6XFx0XFx0XFx0XFx0ZW51bSByd19oaW50IHdyaXRlX2hpbnQgPVxcbiA0MTM6XFx0XFx0XFx0XFx0XFx0ZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKS1cXHUwMDNlaV93cml0ZV9oaW50O1xcbiA0MTQ6XFx0XFxuIDQxNTpcXHRcXHRcXHRcXHQvKlxcbiA0MTY6XFx0XFx0XFx0XFx0ICogSnVzdCB1c2UgdGhlIHdyaXRlIGhpbnQgYXMgd3JpdGUgc3RyZWFtIGZvciBibG9ja1xcbiA0MTc6XFx0XFx0XFx0XFx0ICogZGV2aWNlIHdyaXRlcy4gIFRoaXMgYXNzdW1lcyBubyBmaWxlIHN5c3RlbSBpc1xcbiA0MTg6XFx0XFx0XFx0XFx0ICogbW91bnRlZCB0aGF0IHdvdWxkIHVzZSB0aGUgc3RyZWFtcyBkaWZmZXJlbnRseS5cXG4gNDE5OlxcdFxcdFxcdFxcdCAqL1xcbiA0MjA6XFx0XFx0XFx0XFx0aWYgKHdyaXRlX2hpbnQgXFx1MDAzYz0gbWF4X3dyaXRlX3N0cmVhbXMpXFxuIDQyMTpcXHRcXHRcXHRcXHRcXHRpb2NiLVxcdTAwM2VraV93cml0ZV9zdHJlYW0gPSB3cml0ZV9oaW50O1xcbiA0MjI6XFx0XFx0XFx0fVxcbiA0MjM6XFx0XFx0fVxcbiA0MjQ6XFx0XFxuIDQyNTpcXHRcXHRucl9wYWdlcyA9IGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MgKyAxKTtcXG4gNDI2OlxcdFxcdGlmIChsaWtlbHkobnJfcGFnZXMgXFx1MDAzYz0gQklPX01BWF9WRUNTIFxcdTAwMjZcXHUwMDI2XFxuIDQyNzpcXHRcXHRcXHQgICAhKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9IQVNfTUVUQURBVEEpKSkge1xcbiA0Mjg6XFx0XFx0XFx0aWYgKGlzX3N5bmNfa2lvY2IoaW9jYikpXFxuIDQyOTpcXHRcXHRcXHRcXHRyZXR1cm4gX19ibGtkZXZfZGlyZWN0X0lPX3NpbXBsZShpb2NiLCBpdGVyLCBiZGV2LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwNzo0OTowNi41MTIzNTA3MzhaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM3OTk5NjgzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgV3JpdGUgU3RyZWFtcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgcGF0Y2ggZG93biBmcm9tIGEgS01TQU4gcGVyc3BlY3RpdmUuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgYmVpbmcgY2hhbmdlZC4gVGhlIHBhdGNoIHNlZW1zIHRvIGltcGxlbWVudCBzb21lIGZvcm0gb2Ygd3JpdGUgc3RyZWFtIHN1cHBvcnQsIGxpa2VseSBmb3IgZW5oYW5jZWQgSS9PIG1hbmFnZW1lbnQgYXQgdGhlIGJsb2NrIGRldmljZSBsZXZlbC4gU3BlY2lmaWNhbGx5OlxuXG4xLiAgV2UncmUgZG9jdW1lbnRpbmcgYSBuZXcgc3lzZnMgYXR0cmlidXRlLCBgL3N5cy9ibG9jay9cdTAwM2NkaXNrXHUwMDNlL1x1MDAzY3BhcnRpdGlvblx1MDAzZS93cml0ZV9zdHJlYW1zYCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuMi4gIGBiZGV2LmNgIGlzIGdldHRpbmcgYSBga2ZyZWVgIGZvciB0aGUgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIGluIGBiZGV2X2ZyZWVfaW5vZGVgLCB3aGljaCB0ZWxscyBtZSB0aGlzIG1hcCBpcyBhbGxvY2F0ZWQgc29tZXdoZXJlLlxuMy4gIGBibGstY29yZS5jYCBoYXMgYSBwYXJ0aXRpb24gcmVtYXAgZnVuY3Rpb24gdGhhdCBjaGVja3MgYW5kICp1c2VzKiBgYmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbWAgYWdhaW5zdCBgcC1cdTAwM2ViZF9ucl93cml0ZV9zdHJlYW1zYCwgYW5kIHRoZW4gbG9va3MgdXAgdGhlIHJlbWFwcGVkIHN0cmVhbSBmcm9tIGEgYGJkX3dyaXRlX3N0cmVhbV9tYXBgLiBUaGlzIGlzIGNyaXRpY2FsLCBhcyBpdCdzIHdoZXJlIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGFjY2Vzc2VkLlxuNC4gIGBjb3JlLmNgIGFkZHMgc3lzZnMgYXR0cmlidXRlcyBmb3IgdGhlIHdyaXRlIHN0cmVhbXMsIHdpdGggZnVuY3Rpb25zIHRvIHNob3cgdGhlIG51bWJlciBvZiBzdHJlYW1zIChgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgKSwgY2xlYXIgcmVzZXJ2ZWQgYml0cywgc2V0IHRoZSBtYXAgYW5kIHJlc2VydmUgc3RyZWFtcywgYW5kIHN0b3JlIHRoZSBudW1iZXIgb2Ygc3RyZWFtcy4gQW5kLCBpbXBvcnRhbnRseSwgdGhlIGRyb3AgcGFydGl0aW9uIGNvZGUgY2xlYW5zIHVwIG91ciBzdHJlYW1zLiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIGhhcHBlbnMuXG41LiAgVGhlcmUgYXJlIGNoYW5nZXMgdG8gYGJsa190eXBlcy5oYCBhbmQgYGJsa2Rldi5oYCBhZGRpbmcgdGhlIG5lY2Vzc2FyeSBmaWVsZHMgdG8gdGhlIGBibG9ja19kZXZpY2VgIGFuZCBgZ2VuZGlza2Agc3RydWN0cy4gU3BlY2lmaWNhbGx5LCBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgYW5kIGBiZF93cml0ZV9zdHJlYW1fbWFwYCBpbiB0aGUgYGJsb2NrX2RldmljZWAgc3RydWN0LCBhbmQgYHdyaXRlX3N0cmVhbXNfcmVzZXJ2ZWRgIGluIHRoZSBgZ2VuZGlza2Agc3RydWN0LlxuXG5Ob3csIGxldCdzIHB1dCBvbiB0aGUgS01TQU4gaGF0LiBJJ20gbG9va2luZyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGxlYWtzLlxuXG4qICAgKipDcml0ZXJpb24gMToqKiAgS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyBUaGUgc3lzZnMgb3V0cHV0IGlzIHRoZSBvbmx5IHRoaW5nIGV4cG9zZWQsIHNwZWNpZmljYWxseSBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLiBJdCB1c2VzIGBzeXNmc19lbWl0YCB3aXRoIGEgZm9ybWF0dGVkIHN0cmluZyBhbmQgYCV1YCAod2hpY2ggaXMgc2FmZSksIHNvIG5vIHJhdyBzdHJ1Y3R1cmUgZGF0YSBpcyBjb3BpZWQuIE5vIHByb2JsZW1zIGhlcmUuXG4qICAgKipDcml0ZXJpb24gMjoqKiBDb25kaXRpb25hbCBsb2dpYyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGE/IFdlJ3ZlIGdvdCBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgYW5kIGBiZF93cml0ZV9zdHJlYW1fbWFwYC4gSG93ZXZlciwgYGJkZXZgIGlzIHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbiwgYW5kIGBnZW5kaXNrYCBpcyB6ZXJvIGFsbG9jYXRlZC4gSW4gYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXNgLCB0aGUgbWFwIGlzIGFsbG9jYXRlZCB3aXRoIGBrbWFsbG9jYCwgYW5kIHRoZW4gd2UgbG9vcCBmaWxsaW5nIHRoZSBkYXRhLiBUaGlzIG1lYW5zIGFsbCBieXRlcyBhcmUgd3JpdHRlbiBiZWZvcmUgYmVpbmcgdXNlZC4gSW4gYGJsa19wYXJ0aXRpb25fcmVtYXBgLCBgYmlvLVx1MDAzZWJpX3dyaXRlX3N0cmVhbWAgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSB2YWxpZCByYW5nZSBhbmQgdGhlbiBpbmRleGVkIGludG8gdGhlIG1hcCB3aGljaCBpcyAqZnVsbHkqIGluaXRpYWxpemVkLiBUaGlzIGNoZWNrcyBvdXQuXG4qICAgKipDcml0ZXJpb24gMzoqKiBBbGxvY2F0aW9ucyBhbmQgaW5pdGlhbGl6YXRpb25zLiAgVGhlIHN0cnVjdHVyZXMgYGJkZXZgIGFuZCBgZ2VuZGlza2AgYXJlIGVpdGhlciB6ZXJvZWQsIG9yIGFsbG9jYXRlZCBhbmQgKmZ1bGx5KiBwb3B1bGF0ZWQgYmVmb3JlIHVzZS4gTm8gaXNzdWUuXG4qICAgKipDcml0ZXJpb24gNDoqKiBCb3VuZHMgY2hlY2tzIGFuZCBsZW5ndGhzLiBXZSdyZSBub3cgcmV0dXJuaW5nIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHdyaXRlIHN0cmVhbXMsIGFuZCB0aGVzZSBjaGVja3MgYXJlIGhhcHBlbmluZywgYnV0IHdlJ3JlIG9ubHkgcmV0dXJuaW5nIGZ1bGx5IGluaXRpYWxpemVkIGRhdGEsIGFuZCBib3VuZHMgYXJlIGNoZWNrZWQgcHJvcGVybHkuIFNvIHRoZSBjaGVja3MgYWdhaW5zdCB0aGVzZSB2YWx1ZXMgaXMgZmluZSwgc2luY2UgdGhlIHZhbHVlcyBhcmUgc2V0IGJlZm9yZSB0aGUgY2hlY2tzLlxuXG5Pa2F5LCBhcmUgdGhlcmUgKm90aGVyKiBpc3N1ZXM/IFN0YW5kYXJkIG1lbW9yeSBzYWZldHk/IFN1cmUsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBVQUYgb24gdGhlIG1hcCwgY29uY3VycmVuY3kgcHJvYmxlbXMgY291bGQgYmUgdGhlcmUuIEJ1dCB0aG9zZSBhcmUgc3RhbmRhcmQgbWVtb3J5IGlzc3VlcyB0aGF0IEtBU0FOLCBMT0NLREVQLCBhbmQgVUJTYW4gd291bGQgaGFuZGxlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5Mb29raW5nIGF0IGl0IGNsb3NlbHksIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8ga2VybmVsLXRvLXVzZXIgbWVtb3J5IGxlYWtzLCBhbmQgYWxsIGFsbG9jYXRpb25zIGFyZSBmdWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBFdmVyeSBieXRlIHdyaXR0ZW4gaXMgaW5pdGlhbGl6ZWQuIEknbSBub3Qgc2VlaW5nIGFueSBLTVNBTiBjb25jZXJucy4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgcGF0Y2guXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrOlxuKiAgIE1ha2Ugc3VyZSB3ZSBjaGVjayBhbGwgdGhlIGZpZWxkczogYGJkZXYtXHUwMDNlYmRfbnJfd3JpdGVfc3RyZWFtc2AsIGBiZGV2LVx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLCBhbmQgYGRpc2stXHUwMDNld3JpdGVfc3RyZWFtc19yZXNlcnZlZGAuXG4qICAgQ2hlY2sgdGhlIHBhdGhzIGZvciBzeXNmcyBzaG93IGFuZCBzdG9yZSwgcGFydGl0aW9uIHJlbWFwLCBhbmQgYmRldiBmcmVlLlxuXG5JJ20gY29uZmlkZW50LiBUaGUgcmVhc29uaW5nIHNlZW1zIHNvdW5kLiBObyBLTVNBTi4gTGV0J3Mgc2VuZCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NzIsIk91dHB1dFRva2VucyI6MzUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA3OjQ5OjIwLjMxMjMyMTIxNVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzeXNmcyBjb25maWd1cmF0aW9uIGFuZCBibG9jayBsYXllciByZW1hcHBpbmcgZm9yIHdyaXRlIHN0cmVhbXMgb24gcGFydGl0aW9uIGJsb2NrIGRldmljZXMuXFxuXFxuMS4gTWVtb3J5IEluaXRpYWxpemF0aW9uOlxcbi0gSW5vZGVzL2JkZXZzIGFyZSBhbGxvY2F0ZWQgdmlhIGBiZGV2X2FsbG9jX2lub2RlYCB3aGljaCBleHBsaWNpdGx5IHplcm9lcyB0aGUgYHN0cnVjdCBibG9ja19kZXZpY2VgIHdpdGggYG1lbXNldGAsIGVuc3VyaW5nIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBhbmQgYGJkX3dyaXRlX3N0cmVhbV9tYXBgIHN0YXJ0IGF0IHplcm8vTlVMTC5cXG4tIGBzdHJ1Y3QgZ2VuZGlza2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX25vZGVgLCBlbnN1cmluZyBgd3JpdGVfc3RyZWFtc19yZXNlcnZlZGAgYml0bWFwIGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuXFxuLSBXaGVuIGBtYXBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2NgIGluIGBwYXJ0X3NldF93cml0ZV9zdHJlYW1zKClgLCBldmVyeSBlbGVtZW50IGluIGBtYXBbMCAuLiBuci0xXWAgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCBhY3Jvc3MgdGhlIGxvb3AgYnJhbmNoZXMgYmVmb3JlIHN3YXBwaW5nIGludG8gYGJkZXYtXFx1MDAzZWJkX3dyaXRlX3N0cmVhbV9tYXBgLlxcblxcbjIuIFVzZXIgU3BhY2UgQ29tbXVuaWNhdGlvbjpcXG4tIFRoZSBvbmx5IGludGVyZmFjZSBleHBvc2luZyBkYXRhIHRvIHVzZXJzcGFjZSBpcyBgcGFydF93cml0ZV9zdHJlYW1zX3Nob3dgLCB3aGljaCB1c2VzIGBzeXNmc19lbWl0KClgIHRvIGZvcm1hdCB0aGUgaW50ZWdlciBgYmRfbnJfd3JpdGVfc3RyZWFtc2AgaW50byBhIHN0cmluZy4gTm8gYmluYXJ5IHN0cnVjdHVyZXMgb3IgcGFkZGVkIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcblxcbjMuIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHk6XFxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgYXJyYXkgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGNvbmN1cnJlbnQgYWNjZXNzLCBvciBtZW1vcnkgbGVha3MgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgc2FuaXRpemVycy5cXG4tIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hlcywgb3Iga2VybmVsIGluZm8tbGVha3MgaW50cm9kdWNlZC4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN5c2ZzIGNvbmZpZ3VyYXRpb24gYW5kIGJsb2NrIGxheWVyIHJlbWFwcGluZyBmb3Igd3JpdGUgc3RyZWFtcyBvbiBwYXJ0aXRpb24gYmxvY2sgZGV2aWNlcy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246XFxuLSBJbm9kZXMvYmRldnMgYXJlIGFsbG9jYXRlZCB2aWEgYGJkZXZfYWxsb2NfaW5vZGVgIHdoaWNoIGV4cGxpY2l0bHkgemVyb2VzIHRoZSBgc3RydWN0IGJsb2NrX2RldmljZWAgd2l0aCBgbWVtc2V0YCwgZW5zdXJpbmcgYGJkX25yX3dyaXRlX3N0cmVhbXNgIGFuZCBgYmRfd3JpdGVfc3RyZWFtX21hcGAgc3RhcnQgYXQgemVyby9OVUxMLlxcbi0gYHN0cnVjdCBnZW5kaXNrYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfbm9kZWAsIGVuc3VyaW5nIGB3cml0ZV9zdHJlYW1zX3Jlc2VydmVkYCBiaXRtYXAgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC5cXG4tIFdoZW4gYG1hcGAgaXMgYWxsb2NhdGVkIHZpYSBga21hbGxvY2AgaW4gYHBhcnRfc2V0X3dyaXRlX3N0cmVhbXMoKWAsIGV2ZXJ5IGVsZW1lbnQgaW4gYG1hcFswIC4uIG5yLTFdYCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIGFjcm9zcyB0aGUgbG9vcCBicmFuY2hlcyBiZWZvcmUgc3dhcHBpbmcgaW50byBgYmRldi1cXHUwMDNlYmRfd3JpdGVfc3RyZWFtX21hcGAuXFxuXFxuMi4gVXNlciBTcGFjZSBDb21tdW5pY2F0aW9uOlxcbi0gVGhlIG9ubHkgaW50ZXJmYWNlIGV4cG9zaW5nIGRhdGEgdG8gdXNlcnNwYWNlIGlzIGBwYXJ0X3dyaXRlX3N0cmVhbXNfc2hvd2AsIHdoaWNoIHVzZXMgYHN5c2ZzX2VtaXQoKWAgdG8gZm9ybWF0IHRoZSBpbnRlZ2VyIGBiZF9ucl93cml0ZV9zdHJlYW1zYCBpbnRvIGEgc3RyaW5nLiBObyBiaW5hcnkgc3RydWN0dXJlcyBvciBwYWRkZWQgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UuXFxuXFxuMy4gS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eTpcXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyBhcnJheSBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgY29uY3VycmVudCBhY2Nlc3MsIG9yIG1lbW9yeSBsZWFrcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBzYW5pdGl6ZXJzLlxcbi0gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciBrZXJuZWwgaW5mby1sZWFrcyBpbnRyb2R1Y2VkLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowq8z9s[1] Phase: Succeeded StartedAt: 2026-09-11 07:49:32 +0000 UTC FinishedAt: 2026-09-11 07:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 07:49:32 +0000 UTC FinishedAt: 2026-09-11 07:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2] Phase: Succeeded StartedAt: 2026-09-11 07:49:32 +0000 UTC FinishedAt: 2026-09-11 11:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 07:49:32 +0000 UTC FinishedAt: 2026-09-11 11:32:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 07:49:32 +0000 UTC FinishedAt: 2026-09-11 07:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 07:49:32 +0000 UTC FinishedAt: 2026-09-11 07:49:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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-workflowq8z9s/series-workflowq8z9s-convert-artifact-1619829619/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 07:49:42 +0000 UTC FinishedAt: 2026-09-11 08:07:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 07:49:42 +0000 UTC FinishedAt: 2026-09-11 08:07:48 +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:*df876ba9-673a-4812-b660-6c2efec5eecc,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-workflowq8z9s/series-workflowq8z9s-convert-artifact-1619829619/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": "36bfe577-edb7-4e33-8deb-d8e646ecb3c1", "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-workflowq8z9s/series-workflowq8z9s-build-action-2535917089/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 07:49:42 +0000 UTC FinishedAt: 2026-09-11 08:07:40 +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:*df876ba9-673a-4812-b660-6c2efec5eecc,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-workflowq8z9s/series-workflowq8z9s-convert-artifact-1619829619/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": "36bfe577-edb7-4e33-8deb-d8e646ecb3c1", "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-workflowq8z9s/series-workflowq8z9s-build-action-2535917089/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:07:48 +0000 UTC FinishedAt: 2026-09-11 08:07:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:07:48 +0000 UTC FinishedAt: 2026-09-11 08:07:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:07:48 +0000 UTC FinishedAt: 2026-09-11 08:08:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:07:48 +0000 UTC FinishedAt: 2026-09-11 08:07:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-workflowq8z9s/series-workflowq8z9s-convert-artifact-2949439594/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:08:09 +0000 UTC FinishedAt: 2026-09-11 08:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:08:09 +0000 UTC FinishedAt: 2026-09-11 08:09:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*36bfe577-edb7-4e33-8deb-d8e646ecb3c1,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-workflowq8z9s/series-workflowq8z9s-build-action-2535917089/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-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:09:59 +0000 UTC FinishedAt: 2026-09-11 08:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:09:59 +0000 UTC FinishedAt: 2026-09-11 08:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:09:59 +0000 UTC FinishedAt: 2026-09-11 08:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:09:59 +0000 UTC FinishedAt: 2026-09-11 08:29:26 +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:*df876ba9-673a-4812-b660-6c2efec5eecc,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-workflowq8z9s/series-workflowq8z9s-convert-artifact-2949439594/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": "375f3696-4c65-4067-af70-9532ffc430bd", "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-workflowq8z9s/series-workflowq8z9s-build-action-575999118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:09:59 +0000 UTC FinishedAt: 2026-09-11 08:29:16 +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:*df876ba9-673a-4812-b660-6c2efec5eecc,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-workflowq8z9s/series-workflowq8z9s-convert-artifact-2949439594/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": "375f3696-4c65-4067-af70-9532ffc430bd", "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-workflowq8z9s/series-workflowq8z9s-build-action-575999118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:29:26 +0000 UTC FinishedAt: 2026-09-11 08:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:29:26 +0000 UTC FinishedAt: 2026-09-11 08:29:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:29:26 +0000 UTC FinishedAt: 2026-09-11 08:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:29:26 +0000 UTC FinishedAt: 2026-09-11 08:31:07 +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:*375f3696-4c65-4067-af70-9532ffc430bd,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-workflowq8z9s/series-workflowq8z9s-build-action-575999118/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-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:31:17 +0000 UTC FinishedAt: 2026-09-11 11:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:31:17 +0000 UTC FinishedAt: 2026-09-11 11:32:39 +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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"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:*36bfe577-edb7-4e33-8deb-d8e646ecb3c1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*375f3696-4c65-4067-af70-9532ffc430bd,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-workflowq8z9s/series-workflowq8z9s-build-action-2535917089/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-workflowq8z9s/series-workflowq8z9s-build-action-575999118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:31:17 +0000 UTC FinishedAt: 2026-09-11 08:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:31:17 +0000 UTC FinishedAt: 2026-09-11 08:31:24 +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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"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-workflowq8z9s/series-workflowq8z9s-convert-artifact-1831779327/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:31:17 +0000 UTC FinishedAt: 2026-09-11 08:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:31:17 +0000 UTC FinishedAt: 2026-09-11 08:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:31:17 +0000 UTC FinishedAt: 2026-09-11 08:31:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:31:27 +0000 UTC FinishedAt: 2026-09-11 11:32:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowq8z9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"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":["part_write_streams_store","part_set_write_streams","part_write_streams_show","part_put_write_streams","blk_partition_remap","drop_partition"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f95dd9a1506d45f80485a6b518963d84cad9d533","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLOCK"],"series_id":"68d98ed4-bc7f-4146-ad45-126fd15599e7","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-09-11 08:31:27 +0000 UTC FinishedAt: 2026-09-11 11:32:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*36bfe577-edb7-4e33-8deb-d8e646ecb3c1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*375f3696-4c65-4067-af70-9532ffc430bd,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-workflowq8z9s/series-workflowq8z9s-build-action-2535917089/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-workflowq8z9s/series-workflowq8z9s-build-action-575999118/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-workflowq8z9s/series-workflowq8z9s-convert-artifact-1831779327/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,}