Name: series-workflowvpkmz Phase: Succeeded StartedAt: 2026-07-12 08:28:36 +0000 UTC FinishedAt: 2026-07-12 09:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[0] Phase: Succeeded StartedAt: 2026-07-12 08:28:36 +0000 UTC FinishedAt: 2026-07-12 08:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[0].run-triage Phase: Succeeded StartedAt: 2026-07-12 08:28:36 +0000 UTC FinishedAt: 2026-07-12 08:48:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BNXT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BNXT" ], "series_id": "e96de2f7-1ae9-4604-9a0b-91e65966743f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bnxt_aux_devices_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JOWFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibnh0X2F1eF9kZXZpY2VzX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgYnkgcmVvcmRlcmluZyBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlIGFuZCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM5NzViZTBlZGFjOGYxZDQwYTMyYTViMjFhNzFhZWFlNDYzYmRjNWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAwODo0NzowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmNcbmluZGV4IDVjNzUxOTMzZGE2YTlkLi5hNTE1YzM2OGJhYzAxNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jXG5AQCAtNTY2LDYgJiM0Mzs1NjYsMTggQEAgdm9pZCBibnh0X2F1eF9kZXZpY2VzX2luaXQoc3RydWN0IGJueHQgKmJwKVxuIFx0XHRpZiAoIWF1eF9wcml2KVxuIFx0XHRcdGdvdG8gbmV4dF9hdXhkZXY7XG4gXG4mIzQzO1x0XHRlZGV2ID0ga3phbGxvY19vYmooKmVkZXYpO1xuJiM0MztcdFx0aWYgKCFlZGV2KVxuJiM0MztcdFx0XHRnb3RvIGF1eF9wcml2X2ZyZWU7XG4mIzQzO1x0XHRhdXhfcHJpdi1cdTAwM2VlZGV2ID0gZWRldjtcbiYjNDM7XHRcdGJueHRfc2V0X2VkZXZfaW5mbyhlZGV2LCBicCk7XG4mIzQzO1xuJiM0MztcdFx0dWxwID0ga3phbGxvY19vYmooKnVscCk7XG4mIzQzO1x0XHRpZiAoIXVscClcbiYjNDM7XHRcdFx0Z290byBlZGV2X2ZyZWU7XG4mIzQzO1x0XHRlZGV2LVx1MDAzZXVscF90YmwgPSB1bHA7XG4mIzQzO1x0XHRhdXhfcHJpdi1cdTAwM2VpZCA9IGlkeDtcbiYjNDM7XG4gXHRcdGF1eF9kZXYgPSBcdTAwMjZhdXhfcHJpdi1cdTAwM2VhdXhfZGV2O1xuIFx0XHRhdXhfZGV2LVx1MDAzZWlkID0gYnAtXHUwMDNlYXV4ZGV2X2lkO1xuIFx0XHRhdXhfZGV2LVx1MDAzZW5hbWUgPSBibnh0X2F1eF9kZXZpY2VzW2lkeF0ubmFtZTtcbkBAIC01NzMsMzcgJiM0Mzs1ODUsMjYgQEAgdm9pZCBibnh0X2F1eF9kZXZpY2VzX2luaXQoc3RydWN0IGJueHQgKmJwKVxuIFx0XHRhdXhfZGV2LVx1MDAzZWRldi5yZWxlYXNlID0gYm54dF9hdXhfZGV2X3JlbGVhc2U7XG4gXG4gXHRcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KGF1eF9kZXYpO1xuLVx0XHRpZiAocmMpIHtcbi1cdFx0XHRrZnJlZShhdXhfcHJpdik7XG4tXHRcdFx0Z290byBuZXh0X2F1eGRldjtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRnb3RvIHVscF9mcmVlO1xuIFx0XHRicC1cdTAwM2VhdXhfcHJpdltpZHhdID0gYXV4X3ByaXY7XG4gXG4gXHRcdC8qIEZyb20gdGhpcyBwb2ludCwgYWxsIGNsZWFudXAgd2lsbCBoYXBwZW4gdmlhIHRoZSAucmVsZWFzZVxuIFx0XHQgKiBjYWxsYmFjayBcdTAwMjYgYW55IGVycm9yIHVud2luZGluZyB3aWxsIG5lZWQgdG8gaW5jbHVkZSBhIGNhbGxcbiBcdFx0ICogdG8gYXV4aWxpYXJ5X2RldmljZV91bmluaXQuXG4gXHRcdCAqL1xuLVx0XHRlZGV2ID0ga3phbGxvY19vYmooKmVkZXYpO1xuLVx0XHRpZiAoIWVkZXYpXG4tXHRcdFx0Z290byBhdXhfZGV2X3VuaW5pdDtcbi1cbi1cdFx0YXV4X3ByaXYtXHUwMDNlZWRldiA9IGVkZXY7XG4tXHRcdGJueHRfc2V0X2VkZXZfaW5mbyhlZGV2LCBicCk7XG4tXG4tXHRcdHVscCA9IGt6YWxsb2Nfb2JqKCp1bHApO1xuLVx0XHRpZiAoIXVscClcbi1cdFx0XHRnb3RvIGF1eF9kZXZfdW5pbml0O1xuLVxuLVx0XHRlZGV2LVx1MDAzZXVscF90YmwgPSB1bHA7XG4gXHRcdGJwLVx1MDAzZWVkZXZbaWR4XSA9IGVkZXY7XG4gXHRcdGlmIChpZHggPT0gQk5YVF9BVVhERVZfUkRNQSlcbiBcdFx0XHRicC1cdTAwM2V1bHBfbnVtX21zaXhfd2FudCA9IGJueHRfc2V0X2RmbHRfdWxwX21zaXgoYnApO1xuLVx0XHRhdXhfcHJpdi1cdTAwM2VpZCA9IGlkeDtcbiBcdFx0Ym54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9JTklUKTtcbiBcbiBcdFx0Y29udGludWU7XG4tYXV4X2Rldl91bmluaXQ6XG4tXHRcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KGF1eF9kZXYpO1xuJiM0Mzt1bHBfZnJlZTpcbiYjNDM7XHRcdGtmcmVlKHVscCk7XG4mIzQzO2VkZXZfZnJlZTpcbiYjNDM7XHRcdGtmcmVlKGVkZXYpO1xuJiM0MzthdXhfcHJpdl9mcmVlOlxuJiM0MztcdFx0a2ZyZWUoYXV4X3ByaXYpO1xuIG5leHRfYXV4ZGV2OlxuIFx0XHRpZiAoaWR4ID09IEJOWFRfQVVYREVWX1JETUEpXG4gXHRcdFx0YnAtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+Qk5YVF9GTEFHX1JPQ0VfQ0FQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JOWFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibnh0X2F1eF9kZXZpY2VzX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgYnkgcmVvcmRlcmluZyBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlIGFuZCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzk3NWJlMGVkYWM4ZjFkNDBhMzJhNWIyMWE3MWFlYWU0NjNiZGM1ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDA4OjQ3OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jCmluZGV4IDVjNzUxOTMzZGE2YTlkLi5hNTE1YzM2OGJhYzAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYwpAQCAtNTY2LDYgJiM0Mzs1NjYsMTggQEAgdm9pZCBibnh0X2F1eF9kZXZpY2VzX2luaXQoc3RydWN0IGJueHQgKmJwKQogCQlpZiAoIWF1eF9wcml2KQogCQkJZ290byBuZXh0X2F1eGRldjsKIAomIzQzOwkJZWRldiA9IGt6YWxsb2Nfb2JqKCplZGV2KTsKJiM0MzsJCWlmICghZWRldikKJiM0MzsJCQlnb3RvIGF1eF9wcml2X2ZyZWU7CiYjNDM7CQlhdXhfcHJpdi0mZ3Q7ZWRldiA9IGVkZXY7CiYjNDM7CQlibnh0X3NldF9lZGV2X2luZm8oZWRldiwgYnApOwomIzQzOwomIzQzOwkJdWxwID0ga3phbGxvY19vYmooKnVscCk7CiYjNDM7CQlpZiAoIXVscCkKJiM0MzsJCQlnb3RvIGVkZXZfZnJlZTsKJiM0MzsJCWVkZXYtJmd0O3VscF90YmwgPSB1bHA7CiYjNDM7CQlhdXhfcHJpdi0mZ3Q7aWQgPSBpZHg7CiYjNDM7CiAJCWF1eF9kZXYgPSAmYW1wO2F1eF9wcml2LSZndDthdXhfZGV2OwogCQlhdXhfZGV2LSZndDtpZCA9IGJwLSZndDthdXhkZXZfaWQ7CiAJCWF1eF9kZXYtJmd0O25hbWUgPSBibnh0X2F1eF9kZXZpY2VzW2lkeF0ubmFtZTsKQEAgLTU3MywzNyAmIzQzOzU4NSwyNiBAQCB2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApCiAJCWF1eF9kZXYtJmd0O2Rldi5yZWxlYXNlID0gYm54dF9hdXhfZGV2X3JlbGVhc2U7CiAKIAkJcmMgPSBhdXhpbGlhcnlfZGV2aWNlX2luaXQoYXV4X2Rldik7Ci0JCWlmIChyYykgewotCQkJa2ZyZWUoYXV4X3ByaXYpOwotCQkJZ290byBuZXh0X2F1eGRldjsKLQkJfQomIzQzOwkJaWYgKHJjKQomIzQzOwkJCWdvdG8gdWxwX2ZyZWU7CiAJCWJwLSZndDthdXhfcHJpdltpZHhdID0gYXV4X3ByaXY7CiAKIAkJLyogRnJvbSB0aGlzIHBvaW50LCBhbGwgY2xlYW51cCB3aWxsIGhhcHBlbiB2aWEgdGhlIC5yZWxlYXNlCiAJCSAqIGNhbGxiYWNrICZhbXA7IGFueSBlcnJvciB1bndpbmRpbmcgd2lsbCBuZWVkIHRvIGluY2x1ZGUgYSBjYWxsCiAJCSAqIHRvIGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0LgogCQkgKi8KLQkJZWRldiA9IGt6YWxsb2Nfb2JqKCplZGV2KTsKLQkJaWYgKCFlZGV2KQotCQkJZ290byBhdXhfZGV2X3VuaW5pdDsKLQotCQlhdXhfcHJpdi0mZ3Q7ZWRldiA9IGVkZXY7Ci0JCWJueHRfc2V0X2VkZXZfaW5mbyhlZGV2LCBicCk7Ci0KLQkJdWxwID0ga3phbGxvY19vYmooKnVscCk7Ci0JCWlmICghdWxwKQotCQkJZ290byBhdXhfZGV2X3VuaW5pdDsKLQotCQllZGV2LSZndDt1bHBfdGJsID0gdWxwOwogCQlicC0mZ3Q7ZWRldltpZHhdID0gZWRldjsKIAkJaWYgKGlkeCA9PSBCTlhUX0FVWERFVl9SRE1BKQogCQkJYnAtJmd0O3VscF9udW1fbXNpeF93YW50ID0gYm54dF9zZXRfZGZsdF91bHBfbXNpeChicCk7Ci0JCWF1eF9wcml2LSZndDtpZCA9IGlkeDsKIAkJYm54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9JTklUKTsKIAogCQljb250aW51ZTsKLWF1eF9kZXZfdW5pbml0OgotCQlhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChhdXhfZGV2KTsKJiM0Mzt1bHBfZnJlZToKJiM0MzsJCWtmcmVlKHVscCk7CiYjNDM7ZWRldl9mcmVlOgomIzQzOwkJa2ZyZWUoZWRldik7CiYjNDM7YXV4X3ByaXZfZnJlZToKJiM0MzsJCWtmcmVlKGF1eF9wcml2KTsKIG5leHRfYXV4ZGV2OgogCQlpZiAoaWR4ID09IEJOWFRfQVVYREVWX1JETUEpCiAJCQlicC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5CTlhUX0ZMQUdfUk9DRV9DQVA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYGJueHRfdWxwLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jYC4gSXQmIzM5O3MgZm9jdXNlZCBvbiB0aGUgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGFkZHJlc3MgYSBtZW1vcnkgbGVhaywgdXNlLWFmdGVyLWZyZWUsIG9yIGEgcG90ZW50aWFsIGVycm9yIGhhbmRsaW5nIGZsYXcsIGxpa2VseSBpbnZvbHZpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGF1eGlsaWFyeSBkZXZpY2VzLgoKRXNzZW50aWFsbHksIHRoZSBwYXRjaCBpcyByZW9yZGVyaW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBpbiByZWxhdGlvbiB0byBjYWxscyB0byBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gTm93LCBJIHNlZSB0aGF0IGBlZGV2YCBhbmQgYHVscGAgYXJlIGFsbG9jYXRlZCAqYmVmb3JlKiBjYWxsaW5nIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhdHRlcm4gZm9yIHByZS1hbGxvY2F0aW5nIHdoYXQgeW91IG5lZWQsIGlzbiYjMzk7dCBpdD8KClRoZSBvcmlnaW5hbCBjb2RlLCB0aG91Z2guLi4gSSYjMzk7bSBsb29raW5nIGF0IGl0IG5vdy4gSXQgd2FzIHN0cnVjdHVyZWQgbGlrZSB0aGlzOiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCB3YXMgY2FsbGVkIGZpcnN0LiBJZiB0aGF0IGZhaWxlZCwgYGF1eF9wcml2YCB3YXMgZnJlZWQsIGFuZCB0aGUgcHJvY2VzcyBtb3ZlZCBvbi4gVGhlbiwgaWYgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgc3VjY2VlZGVkLCBgZWRldmAgYW5kIGB1bHBgIHdlcmUgYWxsb2NhdGVkLiBBbmQgaWYgKnRob3NlKiBmYWlsZWQsIGl0IHdvdWxkIGNhbGwgYGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0YC4KCkhtbS4uLiBJIHRoaW5rIEkmIzM5O20gc3RhcnRpbmcgdG8gc2VlIHRoZSBpc3N1ZS4gYGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0YCBpbmNsdWRlcyBhIGNhbGwgdG8gYHB1dF9kZXZpY2VgLCB3aGljaCB0cmlnZ2VycyB0aGUgcmVsZWFzZSBjYWxsYmFjaywgd2hpY2ggaXMgYGJueHRfYXV4X2Rldl9yZWxlYXNlYCBpbiB0aGlzIGNhc2UuIEFuZCAqdGhhdCogZnVuY3Rpb24sIGBibnh0X2F1eF9kZXZfcmVsZWFzZWAsIGZyZWVzIGBhdXhfcHJpdmAgYW5kIGl0cyBtZW1iZXJzLiBCdXQsIGlmIGBlZGV2YCBhbmQgYHVscGAgd2VyZW4mIzM5O3QgZnVsbHkgb3IgcGVyaGFwcyBldmVuIHBhcnRpYWxseSBhbGxvY2F0ZWQsIHNvbWV0aGluZyBpbiBgYm54dF9hdXhfZGV2X3JlbGVhc2VgIHdhcyBwcm9iYWJseSB0cnlpbmcgdG8gZnJlZSB0aGVtLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRvdWJsZS1mcmVlLCB1c2UtYWZ0ZXItZnJlZSwgb3Igc29tZSBvdGhlciBtZW1vcnkgY29ycnVwdGlvbi4gU28sIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdHJ5aW5nIHRvIGF2b2lkIHRoYXQuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJueHRfYXV4X2Rldl9yZWxlYXNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibnh0X2F1eF9kZXZfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYz00NTQ9dm9pZCBibnh0X2F1eF9kZXZpY2VzX3VuaW5pdChzdHJ1Y3QgYm54dCAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo0NzE6c3RhdGljIHZvaWQgYm54dF9hdXhfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ3Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTU0OT12b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTU4NC1cdFx0YXV4X2Rldi1cdTAwM2VkZXYucGFyZW50ID0gXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTg1Olx0XHRhdXhfZGV2LVx1MDAzZWRldi5yZWxlYXNlID0gYm54dF9hdXhfZGV2X3JlbGVhc2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTg2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBGb2N1cyoqCgpBbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gcmVhZCB0aGUgYGJueHRfYXV4X2Rldl9yZWxlYXNlYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGl0IG1ha2VzIG1lIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHdoYXQgdGhpcyBmaWxlICppcyogYW5kIGl0cyBjb250ZXh0LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgJiMzNDtibnh0JiMzNDsgbGlrZWx5IHBvaW50cyB0b3dhcmRzIEJyb2FkY29tJiMzOTtzIE5ldFh0cmVtZSBuZXR3b3JrIGFkYXB0ZXJzIOKAkyBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkcml2ZXJzIG9yIHV0aWxpdGllcyBmb3IgdGhvc2UuICYjMzQ7YXV4X2RldiYjMzQ7IHN1Z2dlc3RzIGF1eGlsaWFyeSBkZXZpY2Ugb3Igc29tZXRoaW5nIHN1cHBvcnRpbmcgdGhlIG1haW4gbmV0d29yayBpbnRlcmZhY2UsIGFuZCAmIzM0O3JlbGVhc2UmIzM0OyBpcyBqdXN0IHRoZSB2ZXJzaW9uIG9yIHBhY2thZ2UgbmFtZS4gT2theSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZ2V0IHRoZSB1c3VhbCBzdXNwZWN0cyAtLSB0aGUgY2hhbmdlbG9nLCBhIGxpc3Qgb2Yga25vd24gaXNzdWVzLCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLCBkcml2ZXIgdXBkYXRlcywgYW5kIHBvc3NpYmx5IHNvbWUgZGV0YWlscyBvbiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuCkkgd2FudCB0byBleGFtaW5lIHRoaXMgZmlsZSB0aG9yb3VnaGx5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgbmV3IGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGludGVncmF0ZWQgaW50byBteSBleGlzdGluZyBrbm93bGVkZ2ViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcdFx0XHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChhZGV2KTtcbiA0NjY6XHRcdFx0fVxuIDQ2NzpcdFx0fVxuIDQ2ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwLVx1MDAzZWF1eGRldl9sb2NrKTtcbiA0Njk6XHR9XG4gNDcwOlx0XG4gNDcxOlx0c3RhdGljIHZvaWQgYm54dF9hdXhfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIDQ3MjpcdHtcbiA0NzM6XHRcdHN0cnVjdCBibnh0X2F1eF9wcml2ICphdXhfcHJpdiA9XG4gNDc0Olx0XHRcdGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBibnh0X2F1eF9wcml2LCBhdXhfZGV2LmRldik7XG4gNDc1Olx0XHRzdHJ1Y3QgYm54dCAqYnAgPSBuZXRkZXZfcHJpdihhdXhfcHJpdi1cdTAwM2VlZGV2LVx1MDAzZW5ldCk7XG4gNDc2Olx0XG4gNDc3Olx0XHRrZnJlZShhdXhfcHJpdi1cdTAwM2VlZGV2LVx1MDAzZXVscF90YmwpO1xuIDQ3ODpcdFx0YnAtXHUwMDNlZWRldlthdXhfcHJpdi1cdTAwM2VpZF0gPSBOVUxMO1xuIDQ3OTpcdFx0a2ZyZWUoYXV4X3ByaXYtXHUwMDNlZWRldik7XG4gNDgwOlx0XHRicC1cdTAwM2VhdXhfcHJpdlthdXhfcHJpdi1cdTAwM2VpZF0gPSBOVUxMO1xuIDQ4MTpcdFx0a2ZyZWUoYXV4X3ByaXYpO1xuIDQ4MjpcdH1cbiA0ODM6XHRcbiA0ODQ6XHR2b2lkIGJueHRfYXV4X2RldmljZXNfZGVsKHN0cnVjdCBibnh0ICpicClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gYm54dF9hdXhfZGV2X3JlbGVhc2UqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJIHNlZSBgYm54dF9hdXhfZGV2X3JlbGVhc2VgIGRlcmVmZXJlbmNpbmcgYGF1eF9wcml2LSZndDtlZGV2LSZndDtuZXRgLiBSaWdodCBhd2F5LCB0aGUgYWxhcm0gYmVsbHMgYXJlIHJpbmdpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpZiBgZWRldmAgd2FzbiYjMzk7dCBwcm9wZXJseSBhbGxvY2F0ZWQg4oCTIHNwZWNpZmljYWxseSwgaWYgdGhhdCBga3phbGxvY19vYmooKmVkZXYpO2AgY2FsbCBmYWlsZWQg4oCTIHRoZW4gYGF1eF9wcml2LSZndDtlZGV2YCB3aWxsIGJlIE5VTEwuIEFuZCBiYW0sIHdlJiMzOTt2ZSBnb3Qgb3Vyc2VsdmVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdpdGggYGF1eF9wcml2LSZndDtlZGV2LSZndDtuZXRgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgLgoKVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzLCBpcyB0aGlzIGNvZGUgcGF0aCByZWFjaGFibGU/IFllYWgsIGl0IGlzLiBUaGUgZXJyb3IgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBhcmUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSwgd2hpY2ggaXMgYWx3YXlzIHBvc3NpYmxlLCBvciBpZiB0aGUgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgZnVuY3Rpb24gZmFpbHMsIHdoaWNoIGlzIGxlc3MgY29tbW9uIGJ1dCBjYW4gc3RpbGwgaGFwcGVuLgoKV2FpdCwgaWYgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgZmFpbHMsIHdoYXQmIzM5O3Mgc3VwcG9zZWQgdG8gaGFwcGVuPyBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlOgoKYGBgYwoJCXJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KGF1eF9kZXYpOwoJCWlmIChyYykKCQkJZ290byB1bHBfZnJlZTsKYGBgCgpTbywgaXQganVtcHMgdG8gYHVscF9mcmVlYC4gSG1tbSwgaWYgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgZmFpbHMsIGRvZXMgdGhhdCBuZWNlc3NpdGF0ZSBhIGNhbGwgdG8gYGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0YD8gR2VuZXJhbGx5LCBpZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmYWlscywgaXQgbmVlZHMgYSBgcHV0X2RldmljZWAgb3IgZXF1aXZhbGVudC4gQnV0IEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gVGhlIGRvY3MgZm9yIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIHNheSB0aGF0ICYjMzQ7SWYgYXV4aWxpYXJ5X2RldmljZV9pbml0KCkgcmV0dXJucyBhbiBlcnJvciwgdGhlIGNhbGxlciBtdXN0IGNhbGwgcHV0X2RldmljZSgpIG9uIHRoZSBkZXZpY2UuJiMzNDsuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBpbmRpY2F0b3IuIEJ1dCBJJiMzOTtsbCBjb25maXJtIHRoYXQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBzb3VyY2UgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgaG93IGl0IGlzIGhhbmRsZWQgaW4gcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXV4aWxpYXJ5X2RldmljZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0xMTAtICogVGhlIHBhcmVudCBkZXZpY2UgdGhlbiByZWdpc3RlcnMgdGhlIGF1eGlsaWFyeV9kZXZpY2UgYnkgY2FsbGluZ1xuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jOjExMTogKiBhdXhpbGlhcnlfZGV2aWNlX2luaXQoKSwgYW5kIHRoZW4gYXV4aWxpYXJ5X2RldmljZV9hZGQoKSwgd2l0aCB0aGUgcG9pbnRlclxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTExMi0gKiB0byB0aGUgYXV4ZGV2IG1lbWJlciBvZiB0aGUgYWJvdmUgc3RydWN0dXJlLiBUaGUgcGFyZW50IHByb3ZpZGVzIGEgbmFtZSBmb3Jcbi0tXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmM9MjQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgYXV4aWxpYXJ5X2J1c190eXBlID0ge1xuLS1cbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0yNTgtLyoqXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmM6MjU5OiAqIGF1eGlsaWFyeV9kZXZpY2VfaW5pdCAtIGNoZWNrIGF1eGlsaWFyeV9kZXZpY2UgYW5kIGluaXRpYWxpemVcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0yNjAtICogQGF1eGRldjogYXV4aWxpYXJ5IGRldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMjc0LSAqL1xuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jOjI3NTppbnQgYXV4aWxpYXJ5X2RldmljZV9pbml0KHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMjc2LXtcbi0tXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMjkzLX1cbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYzoyOTQ6RVhQT1JUX1NZTUJPTF9HUEwoYXV4aWxpYXJ5X2RldmljZV9pbml0KTtcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0yOTUtXG4tLVxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTMwNC0gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmM6MzA1OiAqIGF1eGlsaWFyeV9kZXZpY2VfaW5pdCgpLCB3aGljaCB3aWxsIHBlcmZvcm0gdGhlIGRldmljZV9pbml0aWFsaXplLiAgVGhpc1xuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTMwNi0gKiBtZWFucyB0aGF0IGlmIHRoaXMgcmV0dXJucyBhbiBlcnJvciBjb2RlLCB0aGVuIGEgY2FsbCB0b1xuLS1cbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYz00MDg9c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGlsaWFyeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtNDI3LVxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jOjQyODpcdHJldCA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChhdXhkZXYpO1xuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTQyOS1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIERvY3VtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgYnJpbmdpbmcgdXAgc29tZSBraW5kIG9mIHNlY29uZGFyeSBoYXJkd2FyZSBvciBwZXJpcGhlcmFsLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzIChkYXRhIHN0cnVjdHVyZXMsIGhhbmRsZXMsIHdoYXRldmVyIGl0IHRha2VzKSwgYW5kLCBjcml0aWNhbGx5LCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIHByZS1yZXF1aXNpdGVzPyBEb2VzIGl0IHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUgc3RhdGVzIG9yIGNvbmZpZ3VyYXRpb25zIGVzdGFibGlzaGVkIGJ5IGVhcmxpZXIgcm91dGluZXM/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBhbmQgZmFpbHVyZSBtb2RlcyDigJMgaG93IGRvZXMgaXQgaGFuZGxlIGludmFsaWQgaW5wdXQsIHVuYXZhaWxhYmxlIHJlc291cmNlcywgb3IgdW5leHBlY3RlZCBoYXJkd2FyZSByZXNwb25zZXM/IEVycm9yIGNvZGVzIGFyZSBrZXkuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBpdCBtaWdodCBlbXBsb3ksIGVzcGVjaWFsbHkgaWYgdGhpcyBpbml0aWFsaXphdGlvbiBpbnZvbHZlcyBzaGFyZWQgcmVzb3VyY2VzIG9yIGludGVyYWN0aW9uIHdpdGggaW50ZXJydXB0IGhhbmRsZXJzLiBSYWNlIGNvbmRpdGlvbnMgYXJlIGFsd2F5cyBhIGNvbmNlcm4uCgpGcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUsIEkmIzM5O2xsIGJlIHRyeWluZyB0byBncmFzcCB0aGUgZXhlY3V0aW9uIHRpbWUgaW1wbGljYXRpb25zLiBJcyB0aGlzIGEgYmxvY2tpbmcgY2FsbCwgb3IgZG9lcyBpdCBzcGF3biBhc3luY2hyb25vdXMgb3BlcmF0aW9ucz8gQW5kIGZpbmFsbHksIHdoYXQmIzM5O3MgdGhlIHR5cGljYWwgdXNhZ2UgcGF0dGVybj8gSG93IGRvZXMgaXQgaW50ZWdyYXRlIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtIGFyY2hpdGVjdHVyZT8gSSYjMzk7bGwgcHJvYmFibHkgYmUgYWJsZSB0byBnbGVhbiB0aGlzIHRocm91Z2ggZXhhbWluaW5nIHRoZSBjYWxsIGNvbnRleHQgYW5kIGFueSBleGFtcGxlIGNvZGUgcHJvdmlkZWQuIEdldHRpbmcgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgYWxsIG9mIHRoZXNlIGl0ZW1zIHdpbGwgYWxsb3cgbWUgdG8gYmVnaW4gdG8gYXJjaGl0ZWN0IGEgc3Ryb25nIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjU4Olx0LyoqXG4gMjU5Olx0ICogYXV4aWxpYXJ5X2RldmljZV9pbml0IC0gY2hlY2sgYXV4aWxpYXJ5X2RldmljZSBhbmQgaW5pdGlhbGl6ZVxuIDI2MDpcdCAqIEBhdXhkZXY6IGF1eGlsaWFyeSBkZXZpY2Ugc3RydWN0XG4gMjYxOlx0ICpcbiAyNjI6XHQgKiBUaGlzIGlzIHRoZSBzZWNvbmQgc3RlcCBpbiB0aGUgdGhyZWUtc3RlcCBwcm9jZXNzIHRvIHJlZ2lzdGVyIGFuXG4gMjYzOlx0ICogYXV4aWxpYXJ5X2RldmljZS5cbiAyNjQ6XHQgKlxuIDI2NTpcdCAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHRoZW4gdGhlIGRldmljZV9pbml0aWFsaXplIHdpbGxcbiAyNjY6XHQgKiAqbm90KiBoYXZlIGJlZW4gcGVyZm9ybWVkLCBhbmQgdGhlIGNhbGxlciB3aWxsIGJlIHJlc3BvbnNpYmxlIHRvIGZyZWUgYW55XG4gMjY3Olx0ICogbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGF1eGlsaWFyeV9kZXZpY2UgaW4gdGhlIGVycm9yIHBhdGggZGlyZWN0bHkuXG4gMjY4Olx0ICpcbiAyNjk6XHQgKiBJdCByZXR1cm5zIDAgb24gc3VjY2Vzcy4gIE9uIHN1Y2Nlc3MsIHRoZSBkZXZpY2VfaW5pdGlhbGl6ZSBoYXMgYmVlblxuIDI3MDpcdCAqIHBlcmZvcm1lZC4gIEFmdGVyIHRoaXMgcG9pbnQgYW55IGVycm9yIHVud2luZGluZyB3aWxsIG5lZWQgdG8gaW5jbHVkZSBhIGNhbGxcbiAyNzE6XHQgKiB0byBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdCgpLiAgSW4gdGhpcyBwb3N0LWluaXRpYWxpemUgZXJyb3Igc2NlbmFyaW8sIGEgY2FsbFxuIDI3MjpcdCAqIHRvIHRoZSBkZXZpY2UmIzM5O3MgLnJlbGVhc2UgY2FsbGJhY2sgd2lsbCBiZSB0cmlnZ2VyZWQsIGFuZCBhbGwgbWVtb3J5IGNsZWFuLXVwXG4gMjczOlx0ICogaXMgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCB0aGVyZS5cbiAyNzQ6XHQgKi9cbiAyNzU6XHRpbnQgYXV4aWxpYXJ5X2RldmljZV9pbml0KHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG4gMjc2Olx0e1xuIDI3NzpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2YXV4ZGV2LVx1MDAzZWRldjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI2OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDk3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYm54dCBEcml2ZXIgRXJyb3IgSGFuZGxpbmcgRml4KioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgYW4gaW1wb3J0YW50IGZpeCBpbiB0aGUgYGJueHRgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjb3JlIGlzc3VlIGlzIGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gSXQgc2VlbXMgdGhlIGRyaXZlciB3YXNuJiMzOTt0IHByb3Blcmx5IGNsZWFuaW5nIHVwIG1lbW9yeSBpZiB0aGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkICphZnRlciogc29tZSBtZW1vcnkgaGFkIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgY3Jhc2guCgpNeSB0aG91Z2h0IHByb2Nlc3MgaXMgdGhpczogVGhlIHByb2JsZW0gc3RlbXMgZnJvbSBhIGNyaXRpY2FsIG1pc3VuZGVyc3RhbmRpbmcgb2YgdGhlIGVycm9yIGhhbmRsaW5nIGZsb3cuIElmIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIGZhaWxzLCB0aGUgYGRldmljZV9pbml0aWFsaXplYCBpcyAqbmV2ZXIqIHBlcmZvcm1lZCwgYW5kIHRoZSByZXNwb25zaWJpbGl0eSB0byBjbGVhbiB1cCBiZWxvbmdzIHRvIHRoZSBjYWxsZXIsIG5vdCB0aGUgYHB1dF9kZXZpY2VgLgoKTG9va2luZyBhdCB0aGUgbmV3IGNvZGUsIGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBjbGVhbnVwOyBpZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmYWlscywgaXQganVtcHMgdG8gYSBgdWxwX2ZyZWVgIGxhYmVsLCB3aGljaCBhcHByb3ByaWF0ZWx5IGZyZWVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBTaW1wbGUgYW5kIGNvcnJlY3QuIFRoZSBmaXggbW92ZXMgdGhlIGFsbG9jYXRpb24gb2YgYGVkZXZgIGFuZCBgdWxwYCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gdGhlIGVycm9yIGhhbmRsaW5nLgoKQnV0IHRoZSBvbGQgY29kZSwgaG93ZXZlciwgaGFkIGEgZmxhdy4gSXQgbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBjYWxsIGBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdGAgYW5kIGBwdXRfZGV2aWNlYCBpbiB0aGUgZXJyb3IgcGF0aCwgYnV0IGl0IHdhcyBkb2luZyBzbyBhZnRlciBhIGZhaWxlZCBgZWRldmAgYWxsb2NhdGlvbi4gVGhpcyBjYXVzZWQgYSBgTlVMTGAgcG9pbnRlciBkZXJlZmVyZW5jZSBiZWNhdXNlIGBhdXhfcHJpdi0mZ3Q7ZWRldmAgd2FzIGJlaW5nIGFjY2Vzc2VkIGJlZm9yZSBpdCB3YXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIGBibnh0X2F1eF9kZXZfcmVsZWFzZWAsIHBhcnQgb2YgdGhlIGNsZWFudXAsIHdhcyB0cnlpbmcgdG8gZGVyZWZlcmVuY2UgYSBgTlVMTGAgcG9pbnRlci4gVGhhdCYjMzk7cyB0aGUgYnVnLgoKVGhlIG5ldyBjb2RlIGNvcnJlY3RseSBmaXhlcyB0aGlzIGJ5IGFsbG9jYXRpbmcgYGVkZXZgIGFuZCBgdWxwYCAqYmVmb3JlKiBjYWxsaW5nIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLCB3aGljaCBpcyB0aGUgZml4LiBGcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBlcnJvciBwYXRoLiBQcmV0dHkgaW1wb3J0YW50IGZvciByZWxpYWJpbGl0eS4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkhIEEgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSBvbmUgZGVhbGluZyB3aXRoIGVycm9yIHBhdGhzLCBpcyBhIHByaW1lIHRhcmdldC4gVGhlIGZhY3QgdGhhdCB0aGUgYGJueHRgIGRyaXZlciAoQnJvYWRjb20gTmV0WHRyZW1lLUMvRSkgaXMgYSBQQ0kgZHJpdmVyIHJhaXNlcyBhIHF1ZXN0aW9uIGFib3V0IHJlYWNoYWJpbGl0eSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBQQ0kgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIG9yIGdvb2QgUENJIGVtdWxhdGlvbi4gRG9lcyBRRU1VIGVtdWxhdGUgYGJueHRgPyBVbmxpa2VseS4gU3l6a2FsbGVyLCBhIGtlcm5lbCBmdXp6ZXIsIG9mdGVuIGNhbiYjMzk7dCByZWFjaCB0aG9zZSBkcml2ZXJzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgdW5sZXNzIGl0JiMzOTtzIHVzaW5nIGFkdmFuY2VkIHRlY2huaXF1ZXMgbGlrZSBgdmhjaWAgb3IgYHZmaW9gIGZvciBQQ0kgZGV2aWNlIGVtdWxhdGlvbi4KCkFoYSEgVGhlbiwgSSBzYXcgdGhlIGF1dGhvciBvZiB0aGUgY29tbWl0IGlzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gV2FpdCBhIHNlY29uZC4uLiB0aGF0JiMzOTtzIFN5emthbGxlciEgVGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgZm91bmQgdGhpcyBidWcgbWVhbnMgaXQgSVMgcmVhY2hhYmxlIGluIHRoZWlyIGVudmlyb25tZW50LiBXaGljaCBtZWFucyB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emVyLXdvcnRoeSwgYXMgU3l6a2FsbGVyIG11c3QgaGF2ZSBzb21lIHNvcnQgb2YgUENJIGZ1enppbmcgZ29pbmcgb24sIG1heWJlIHRocm91Z2ggdGhlIGBzeXpfcGNpX2RldmljZWAgaW50ZXJmYWNlLiBNYXliZSB0aGlzIGlzIHRyaWdnZXJlZCB2aWEgc29tZSBvdGhlciBwYXRoPyBJIHNob3VsZCBjaGVjayBgYm54dF9hdXhfZGV2aWNlc19pbml0YCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JueHRfYXV4X2RldmljZXNfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE2OTQ1PXN0YXRpYyBpbnQgYm54dF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzEzMC1cdGlmICghYm54dF9hdXhkZXZfaWRfYWxsb2MoYnApKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTcxMzE6XHRcdGJueHRfYXV4X2RldmljZXNfaW5pdChicCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzEzMi1cdHJjID0gYm54dF9zZXRfZGZsdF9yaW5ncyhicCwgdHJ1ZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTUyNT12b2lkIGJueHRfYXV4X2RldmljZXNfYWRkKHN0cnVjdCBibnh0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jOjU0OTp2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTUwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBUYXJnZXQgRnVuY3Rpb24qKgoKT2theSwgc28gdGhpcyBgYm54dF9pbml0X29uZWAgZnVuY3Rpb24sIHRoYXQmIzM5O3MgY2FsbGVkIGZyb20gdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiwgcmlnaHQ/IE1ha2VzIHNlbnNlLiBBbmQgd2Uga25vdyB0aGF0IFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyLCB0aGF0IHRoaW5nIGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLCB3aGljaCB0aGVuIHRyaWdnZXJzIHRoZXNlIHByb2JlIGZ1bmN0aW9ucy4gU28sIHllYWgsICpkZWZpbml0ZWx5KiByZWFjaGFibGUuIFRoZSBuZXh0IHN0ZXAgaXMgYWx3YXlzIHRoZSBzYW1lOiBGaW5kIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IHdlIG5lZWQgdG8gbWFrZSB0aGlzIGFsbCB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQk5YVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0xOTU9Y29uZmlnIFNZU1RFTVBPUlRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjA3OmNvbmZpZyBCTlhUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIwOC1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIE5ldFh0cmVtZS1DL0Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMjI6Y29uZmlnIEJOWFRfU1JJT1ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIFNSLUlPViBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIzMTpjb25maWcgQk5YVF9GTE9XRVJfT0ZGTE9BRFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMzItXHRib29sIFwmIzM0O1RDIEZsb3dlciBvZmZsb2FkIHN1cHBvcnQgZm9yIE5ldFh0cmVtZS1DL0VcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjQwOmNvbmZpZyBCTlhUX0RDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNDEtXHRib29sIFwmIzM0O0RhdGEgQ2VudGVyIEJyaWRnaW5nIChEQ0IpIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjUwOmNvbmZpZyBCTlhUX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7QnJvYWRjb20gTmV0WHRyZW1lLUMvRSBIV01PTiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4ODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipDb25kaXRpb25hbCBDb21waWxhdGlvbiBJbnZlc3RpZ2F0aW9uOiBgYm54dF91bHAuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZSBjb21waWxhdGlvbiBvZiBgYm54dF91bHAuY2AgaXMgZ292ZXJuZWQgYnkgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBzdGVwIHdoZW4gZGVhbGluZyB3aXRoIGRyaXZlciBjb2RlLCBlc3BlY2lhbGx5IHdoZW4geW91IGVuY291bnRlciB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGJ1aWxkIGlzc3Vlcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGlmIGNlcnRhaW4gZmVhdHVyZXMgb3IgZnVuY3Rpb25hbGl0aWVzIHdpdGhpbiB0aGF0IGZpbGUgYXJlIG9ubHkgaW5jbHVkZWQgdW5kZXIgc3BlY2lmaWMgYnVpbGQgY29uZmlndXJhdGlvbnMgb3Iga2VybmVsIHZlcnNpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBtYWtlZmlsZXMsIGNvbmZpZ3VyYXRpb24gaGVhZGVycywgYW5kIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IHN1cnJvdW5kIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBmaWxlLiBLbm93aW5nIHRoZSBjb25kaXRpb25zIHdpbGwgaGVscCBtZSBkaWFnbm9zZSBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGJ1aWxkIGVudmlyb25tZW50LiBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0sIGEgcGFydGljdWxhciBrZXJuZWwgdmVyc2lvbiwgYSBjZXJ0YWluIGRyaXZlciBtb2R1bGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym54dF91bHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfQk5YVCkgJiM0Mzs9IGJueHRfZW4ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9NYWtlZmlsZS0zLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9NYWtlZmlsZTo0OmJueHRfZW4teSA6PSBibnh0Lm8gYm54dF9od3JtLm8gYm54dF9zcmlvdi5vIGJueHRfZXRodG9vbC5vIGJueHRfZGNiLm8gYm54dF91bHAubyBibnh0X3hkcC5vIGJueHRfcHRwLm8gYm54dF92ZnIubyBibnh0X2RldmxpbmsubyBibnh0X2RpbS5vIGJueHRfY29yZWR1bXAuLi5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvTWFrZWZpbGUtNS1ibnh0X2VuLSQoQ09ORklHX0JOWFRfRkxPV0VSX09GRkxPQUQpICYjNDM7PSBibnh0X3RjLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMyNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBEZXBlbmRlbmN5IG9mIGBibnh0X3VscC5vYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCB0aG91Z2h0IGhlcmUgaXMgdGhhdCBgYm54dF91bHAub2AgaXMgY29uc2lzdGVudGx5IGJ1aWx0IHdoZW4gYENPTkZJR19CTlhUYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIEhvd2V2ZXIsIHRoZSBuZXh0IHBpZWNlIG9mIHRoaXMgcHV6emxlIGlzIGNvbm5lY3RpbmcgaG93IGl0IGlzICphY3R1YWxseSogYnJvdWdodCBpbnRvIHRoZSBzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGluaXQgZnVuY3Rpb24gYW5kIGZpZ3VyZSBvdXQgaXRzIGRlcGVuZGVuY2llcy4KCk5vdywgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgY2FsbHMgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgcmluZ3MgYSBiZWxsLiBDb3VsZCB0aGUgYEJOWFRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGJlIHNlbGVjdGluZyBgQVVYSUxJQVJZX0JVU2A/IFRoYXQgY29ubmVjdGlvbiB3b3VsZCBleHBsYWluIGEgbG90LiBJdCYjMzk7cyBhIGtleSBxdWVzdGlvbiwgYW5kIHRoaXMgaXMgd2hlcmUgSSBuZWVkIHNvbGlkIGV2aWRlbmNlLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBMZXQmIzM5O3MgZGVsdmUgaW50byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG1hZ2ljIGhhcHBlbnMsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYEJOWFRgLCBgQVVYSUxJQVJZX0JVU2AgYW5kIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZSBsYWlkIG91dC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGl0IGNvbmZpZ3VyZXMgdGhlIGF1eGlsaWFyeSBidXMuIEl0IHNob3VsZCBiZSBhIHByZXR0eSBxdWljayBzZWFyY2ggZm9yIHRoZSBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjA3Olx0Y29uZmlnIEJOWFRcbiAyMDg6XHRcdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIE5ldFh0cmVtZS1DL0Ugc3VwcG9ydFwmIzM0O1xuIDIwOTpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAyMTA6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAyMTE6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAyMTI6XHRcdHNlbGVjdCBDUkMzMlxuIDIxMzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gMjE0Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gMjE1Olx0XHRzZWxlY3QgRElNTElCXG4gMjE2Olx0XHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuIDIxNzpcdFx0aGVscFxuIDIxODpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIDEwLzI1LzQwLzUwIGdpZ2FiaXRcbiAyMTk6XHRcdCAgRXRoZXJuZXQgY2FyZHMuICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOlxuIDIyMDpcdFx0ICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJueHRfZW4uICBUaGlzIGlzIHJlY29tbWVuZGVkLlxuIDIyMTpcdFxuIDIyMjpcdGNvbmZpZyBCTlhUX1NSSU9WXG4gMjIzOlx0XHRib29sIFwmIzM0O0Jyb2FkY29tIE5ldFh0cmVtZS1DL0UgU1ItSU9WIHN1cHBvcnRcJiMzNDtcbiAyMjQ6XHRcdGRlcGVuZHMgb24gQk5YVCBcdTAwMjZcdTAwMjYgUENJX0lPVlxuIDIyNTpcdFx0ZGVmYXVsdCB5XG4gMjI2Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBCTlhUIERyaXZlciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgQk5YVGAgc2VsZWN0cyBgQVVYSUxJQVJZX0JVU2AuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpbml0aWFsbHksIGl0IGxvb2tzIGxpa2Ugb25seSBgQk5YVGAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZy4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyByZW1pbmQgbWUgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGZ1enotd29ydGh5IGFuZCBkb2N1bWVudCBldmVyeXRoaW5nIG1ldGljdWxvdXNseS4KClRoZSBpbnN0cnVjdGlvbnMgc2F5OiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUmIzM0Oy4gSSByZW1lbWJlciB0aGUgY3JpdGljYWwgbmVlZCB0byBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgJiMzNDtnb3RjaGFzJiMzNDsuIEkgYWxzbyBtdXN0ICYjMzQ7RXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scyYjMzQ7IGFuZCAmIzM0O0lkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLiYjMzQ7CgpUaGUgY29kZSBtb2RpZmljYXRpb24gZm9jdXNlcyBvbiBgYm54dF9hdXhfZGV2aWNlc19pbml0YC4gTGV0JiMzOTtzIGNvbmZpcm06IFllcCwgYSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhhdCYjMzk7cyB0aGUgb25seSBmdW5jdGlvbiBiZWluZyB0b3VjaGVkLiBTbywgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgYm54dF9hdXhfZGV2aWNlc19pbml0YC4gTm93LCBpcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IE5vLCBpdCYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgY2FsbGVkIGR1cmluZyBQQ0kgcHJvYmUsIHNvIGl0IGlzIHByb2JhYmx5IGZpbmUuCgpOb3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQgZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGZpbmQgdGhlc2UgdHlwZXMgb2YgYnVncy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LgoKTGV0JiMzOTtzIGNpcmNsZSBiYWNrLiBgQk5YVGAgaXMgdGhlIHByaW1hcnkgY29uZmlnLiBCdXQsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBhbHNvIGVuYWJsZSBvciBpbmZsdWVuY2UgdGhlIGV4ZWN1dGlvbiBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgZnVydGhlciBkZXBlbmRlbmNpZXMuIFRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IHRob3NlIHNwZWNpZmljIGNvbmZpZ3MsIHdpdGhvdXQgbWFraW5nIGFueSBhc3N1bXB0aW9ucy4gTm8gZ2VuZXJpYyBzdHVmZjsgSSYjMzk7bSBvbmx5IGludGVyZXN0ZWQgaW4gdGhvc2UgY29uZmlncyB0aGF0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym54dF9hdXhfZGV2aWNlc19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9MTY5NDU9c3RhdGljIGludCBibnh0X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMwLVx0aWYgKCFibnh0X2F1eGRldl9pZF9hbGxvYyhicCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzEzMTpcdFx0Ym54dF9hdXhfZGV2aWNlc19pbml0KGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMyLVx0cmMgPSBibnh0X3NldF9kZmx0X3JpbmdzKGJwLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NTI1PXZvaWQgYm54dF9hdXhfZGV2aWNlc19hZGQoc3RydWN0IGJueHQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTQ5OnZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01NTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgYm54dF91bHAuY2AqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29tcGlsYXRpb24gc2NvcGUgb2YgYGJueHRfdWxwLmNgLiBNeSBpbml0aWFsIGh1bmNoIHdhcyB0aGF0IGl0IG1pZ2h0IGJlIHRpZWQgdG8gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgcHJvYmFibHkgYENPTkZJR19CTlhUYC4gSSBuZWVkIHRvIGNvbmZpcm0uIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB3aGVyZSBpdCBsaXZlcywgb2ggeWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGluIGBibnh0X3VscC5jYC4gQnV0IGlzIHRoYXQgZmlsZSAqYWx3YXlzKiBjb21waWxlZD8gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUmIzM5O3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIE1ha2VmaWxlLi4uIGFoLCB0aGVyZSBpdCBpcyEgYGJueHRfZW4teSA6PSBibnh0Lm8gYm54dF9od3JtLm8gYm54dF9zcmlvdi5vIGJueHRfZXRodG9vbC5vIGJueHRfZGNiLm8gYm54dF91bHAubyAuLi5gIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgaXQgKmlzKiBhbHdheXMgY29tcGlsZWQgYXMgcGFydCBvZiBgYm54dF9lbi15YC4gTm93LCBteSBuZXh0IHRob3VnaHQgaXMsIEkgbmVlZCB0byBjaGVjayBpZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpcyBndWFyZGVkIGJ5IGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBpZiBzdGF0ZW1lbnRzLCBidXQgZm9yIG5vdyBJIGtub3cgdGhhdCBpdCBpcyBpbiBmYWN0IGFsd2F5cyBjb21waWxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0MDpcdFx0XHRcdFx0XHRicC1cdTAwM2VmbGFncyBcdTAwMjY9IH5CTlhUX0ZMQUdfUk9DRV9DQVA7XG4gNTQxOlx0XHRcdFx0XHRjb250aW51ZTtcbiA1NDI6XHRcdFx0XHR9XG4gNTQzOlx0XHRcdFx0Ym54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9BREQpO1xuIDU0NDpcdFx0XHR9XG4gNTQ1Olx0XHR9XG4gNTQ2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlYXV4ZGV2X2xvY2spO1xuIDU0NzpcdH1cbiA1NDg6XHRcbiA1NDk6XHR2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXG4gNTUwOlx0e1xuIDU1MTpcdFx0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eF9kZXY7XG4gNTUyOlx0XHRzdHJ1Y3QgYm54dF9hdXhfcHJpdiAqYXV4X3ByaXY7XG4gNTUzOlx0XHRzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXY7XG4gNTU0Olx0XHRzdHJ1Y3QgYm54dF91bHAgKnVscDtcbiA1NTU6XHRcdGludCByYywgaWR4O1xuIDU1NjpcdFxuIDU1NzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZicC1cdTAwM2VhdXhkZXZfbG9jayk7XG4gNTU4Olx0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgX19CTlhUX0FVWERFVl9NQVg7IGlkeCYjNDM7JiM0MzspIHtcbiA1NTk6XHRcdFx0Ym54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9OT05FKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBhbmQgUkRNQSBEZXBlbmRlbmN5IGluIGJueHRfYXV4X2RldmljZXNfaW5pdCoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyAoYCNpZmRlZmApIGd1YXJkaW5nIHRoZSBjYWxsIHRvIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwsIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBzb21lIHNvcnQgb2YgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW4gdGhpcyBzZWN0aW9uLiBVc3VhbGx5LCB3ZSYjMzk7ZCBoYXZlIGEgY2hlY2sgZm9yIHNwZWNpZmljIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIGJlZm9yZSBpbml0aWFsaXppbmcgYXV4aWxpYXJ5IGRldmljZXMuCgpXYWl0IGEgc2Vjb25k4oCmIGlzIHRoaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBSRE1BIHN1cHBvcnQ/IFRoZSBmdW5jdGlvbiBuYW1lIGRvZXNu4oCZdCBpbW1lZGlhdGVseSBzY3JlYW0g4oCcUkRNQSzigJ0gYnV0IGl0JiMzOTtzIG1ha2luZyBtZSB0aGluayBhYm91dCBgQk5YVF9BVVhERVZfUkRNQWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIFJETUEgaXMgKnJlcXVpcmVkKiBmb3IgdGhpcyBpbml0aWFsaXphdGlvbiBvciBpZiBpdCYjMzk7cyBqdXN0IGFuICpvcHRpb24qLiBJZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCB0aGUgbGFjayBvZiBhbiBgI2lmZGVmYCBtYWtlcyBzZW5zZSwgYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGdlbmVyYWwgYXV4aWxpYXJ5IGRldmljZSBpbml0aWFsaXphdGlvbiwgcmVnYXJkbGVzcyBvZiBSRE1BIHByZXNlbmNlLgoKVG8gY2xlYXIgdGhpcyB1cCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGlzIGNhbGxlZCBhbmQgd2hhdCBgYm54dF9hdXhfZGV2aWNlc2AgaXMgYWxsIGFib3V0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBsYWNrIG9mIGEgcHJlcHJvY2Vzc29yIGd1YXJkIGlzIGNvcnJlY3Qgb3IgYSBwb3RlbnRpYWwgYnVnIHRoYXQgbmVlZHMgYWRkcmVzc2luZy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgb25lIGJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JueHRfYXV4X2RldmljZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjUxMT1zdGF0aWMgdm9pZCBibnh0X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY1MTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNjUxOTpcdGJueHRfYXV4X2RldmljZXNfZGVsKGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NTIwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NTIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY1MjQ6XHRibnh0X2F1eF9kZXZpY2VzX3VuaW5pdChicCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjUyNS1cdGJueHRfYXV4ZGV2X2lkX2ZyZWUoYnAsIGJwLVx1MDAzZWF1eGRldl9pZCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9MTY5NDU9c3RhdGljIGludCBibnh0X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMwLVx0aWYgKCFibnh0X2F1eGRldl9pZF9hbGxvYyhicCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzEzMTpcdFx0Ym54dF9hdXhfZGV2aWNlc19pbml0KGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMyLVx0cmMgPSBibnh0X3NldF9kZmx0X3JpbmdzKGJwLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzE5NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MTk2Olx0Ym54dF9hdXhfZGV2aWNlc19hZGQoYnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcxOTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcyMDMtaW5pdF9lcnJfY2xlYW51cDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MjA0Olx0Ym54dF9hdXhfZGV2aWNlc191bmluaXQoYnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcyMDUtXHRibnh0X2F1eGRldl9pZF9mcmVlKGJwLCBicC1cdTAwM2VhdXhkZXZfaWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYz00Nj1zdGF0aWMgYm9vbCBibnh0X2F1eGRldl9pc19hY3RpdmUoc3RydWN0IGJueHQgKmJwLCBpbnQgaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo1MTpzdGF0aWMgc3RydWN0IGJueHRfYXV4X2RldmljZSBibnh0X2F1eF9kZXZpY2VzW19fQk5YVF9BVVhERVZfTUFYXSA9IHt7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTItXHQubmFtZVx0XHQ9IFwmIzM0O3JkbWFcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTQ1Mj1FWFBPUlRfU1lNQk9MKGJueHRfcmVnaXN0ZXJfYXN5bmNfZXZlbnRzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy00NTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NDU0OnZvaWQgYm54dF9hdXhfZGV2aWNlc191bmluaXQoc3RydWN0IGJueHQgKmJwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ1NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTQ3MT1zdGF0aWMgdm9pZCBibnh0X2F1eF9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ4My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo0ODQ6dm9pZCBibnh0X2F1eF9kZXZpY2VzX2RlbChzdHJ1Y3QgYm54dCAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNDg1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NDk4PXN0YXRpYyB2b2lkIGJueHRfc2V0X2VkZXZfaW5mbyhzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXYsIHN0cnVjdCBibnh0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jOjUyNTp2b2lkIGJueHRfYXV4X2RldmljZXNfYWRkKHN0cnVjdCBibnh0ICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01MjYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTQ5OnZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01NTAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01ODItXHRcdGF1eF9kZXYtXHUwMDNlaWQgPSBicC1cdTAwM2VhdXhkZXZfaWQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTgzOlx0XHRhdXhfZGV2LVx1MDAzZW5hbWUgPSBibnh0X2F1eF9kZXZpY2VzW2lkeF0ubmFtZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01ODQtXHRcdGF1eF9kZXYtXHUwMDNlZGV2LnBhcmVudCA9IFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBdXhpbGlhcnkgRGV2aWNlIEFycmF5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBibnh0X2F1eF9kZXZpY2VzYCBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBjb250ZXh0LCB0aGF0IHRoaXMgYXJyYXkgbGlrZWx5IGhvbGRzIGluZm9ybWF0aW9uIGNydWNpYWwgdG8gdGhlIHByb3BlciBvcGVyYXRpb24gb2YgdGhlIEJyb2FkY29tIE5ldFh0cmVtZSBhZGFwdGVycy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGlzIGFycmF5IGlzIHBvcHVsYXRlZCBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggaXQuIEFyZSB3ZSBkZWFsaW5nIHdpdGggcmVnaXN0ZXJlZCBkZXZpY2VzLCBwZXJoYXBzIHJlcHJlc2VudGluZyBhdXhpbGlhcnkgZnVuY3Rpb25zIHdpdGhpbiBhIGxhcmdlciBwaHlzaWNhbCBOSUMsIG9yIGFyZSB3ZSBleGFtaW5pbmcgYSBkaWZmZXJlbnQgYXNwZWN0IG9mIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24/IEtub3dpbmcgdGhlIHN0cnVjdHVyZSBhbmQgcHVycG9zZSBvZiBgYm54dF9hdXhfZGV2aWNlc2AgaXMgZnVuZGFtZW50YWwgdG8gdHJvdWJsZXNob290aW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXppbmcgdGhlIHN5c3RlbSYjMzk7cyBwZXJmb3JtYW5jZS4gTXkgYW5hbHlzaXMgd2lsbCBzdGFydCBmcm9tIHRoYXQgZnVuZGFtZW50YWwgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NjpcdHN0YXRpYyBib29sIGJueHRfYXV4ZGV2X2lzX2FjdGl2ZShzdHJ1Y3QgYm54dCAqYnAsIGludCBpZHgpXG4gIDQ3Olx0e1xuICA0ODpcdFx0cmV0dXJuIChicC1cdTAwM2VhdXhkZXZfc3RhdGVbaWR4XSA9PSBCTlhUX0FERVZfU1RBVEVfQUREKTtcbiAgNDk6XHR9XG4gIDUwOlx0XG4gIDUxOlx0c3RhdGljIHN0cnVjdCBibnh0X2F1eF9kZXZpY2UgYm54dF9hdXhfZGV2aWNlc1tfX0JOWFRfQVVYREVWX01BWF0gPSB7e1xuICA1MjpcdFx0Lm5hbWVcdFx0PSBcJiMzNDtyZG1hXCYjMzQ7LFxuICA1MzpcdH0sIHtcbiAgNTQ6XHRcdC5uYW1lXHRcdD0gXCYjMzQ7ZndjdGxcJiMzNDssXG4gIDU1Olx0fX07XG4gIDU2Olx0XG4gIDU3Olx0c3RhdGljIHZvaWQgYm54dF9maWxsX21zaXhfdmVjcyhzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X21zaXhfZW50cnkgKmVudClcbiAgNTg6XHR7XG4gIDU5Olx0XHRzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXYgPSBicC1cdTAwM2VlZGV2W0JOWFRfQVVYREVWX1JETUFdO1xuICA2MDpcdFx0aW50IG51bV9tc2l4LCBpO1xuICA2MTpcdFxuICA2MjpcdFx0aWYgKCFlZGV2LVx1MDAzZXVscF90YmwtXHUwMDNlbXNpeF9yZXF1ZXN0ZWQpIHtcbiAgNjM6XHRcdFx0bmV0ZGV2X3dhcm4oYnAtXHUwMDNlZGV2LCBcJiMzNDtSZXF1ZXN0ZWQgTVNJLVggdmVjdG9ycyBpbnN1ZmZpY2llbnRcXG5cJiMzNDspO1xuICA2NDpcdFx0XHRyZXR1cm47XG4gIDY1Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzM0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUkRNQSBhbmQgRldDVEwgSW5pdGlhbGl6YXRpb24gaW4gdGhlIEJOWFQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGJvdGggJiMzNDtyZG1hJiMzNDsgYW5kICYjMzQ7ZndjdGwmIzM0OyBpbiB0aGUgbWl4LiBUaGUgaW5pdGlhbCBxdWVzdGlvbiBpczogYXJlIHRoZXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc3RlcHMgbmVjZXNzYXJ5IGZvciBSRE1BIHRvIHdvcmsgcHJvcGVybHkgd2l0aCB0aGlzIHNldHVwPwoKVGhlbiBJIG5vdGljZSB0aGF0IGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGdldHMgY2FsbGVkIHVuY29uZGl0aW9uYWxseSB3aXRoaW4gYGJueHRfaW5pdF9vbmVgLiBSaWdodCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIEl0IGN5Y2xlcyB0aHJvdWdoIGEgbWF4aW11bSBvZiBgX19CTlhUX0FVWERFVl9NQVhgIGFuZCBpbml0aWFsaXplcyB0aGUgYXV4aWxpYXJ5IGRldmljZXMuIFNvLCBhcyBsb25nIGFzIGBCTlhUYCBpcyBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgZXhlY3V0ZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBSRE1BIGlzIGV4cGxpY2l0bHkgY29uZmlndXJlZC4KClRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpdHNlbGYgcmVxdWlyZSBhbnkgcGFydGljdWxhciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgb3IgYSBjZXJ0YWluIHNldHVwIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1ODpcdFx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIF9fQk5YVF9BVVhERVZfTUFYOyBpZHgmIzQzOyYjNDM7KSB7XG4gNTU5Olx0XHRcdGJueHRfYXV4ZGV2X3NldF9zdGF0ZShicCwgaWR4LCBCTlhUX0FERVZfU1RBVEVfTk9ORSk7XG4gNTYwOlx0XG4gNTYxOlx0XHRcdGlmIChpZHggPT0gQk5YVF9BVVhERVZfUkRNQSBcdTAwMjZcdTAwMjZcbiA1NjI6XHRcdFx0ICAgICEoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19ST0NFX0NBUCkpXG4gNTYzOlx0XHRcdFx0Y29udGludWU7XG4gNTY0Olx0XG4gNTY1Olx0XHRcdGF1eF9wcml2ID0ga3phbGxvY19vYmooKmF1eF9wcml2KTtcbiA1NjY6XHRcdFx0aWYgKCFhdXhfcHJpdilcbiA1Njc6XHRcdFx0XHRnb3RvIG5leHRfYXV4ZGV2O1xuIDU2ODpcdFxuIDU2OTpcdFx0XHRlZGV2ID0ga3phbGxvY19vYmooKmVkZXYpO1xuIDU3MDpcdFx0XHRpZiAoIWVkZXYpXG4gNTcxOlx0XHRcdFx0Z290byBhdXhfcHJpdl9mcmVlO1xuIDU3MjpcdFx0XHRhdXhfcHJpdi1cdTAwM2VlZGV2ID0gZWRldjtcbiA1NzM6XHRcdFx0Ym54dF9zZXRfZWRldl9pbmZvKGVkZXYsIGJwKTtcbiA1NzQ6XHRcbiA1NzU6XHRcdFx0dWxwID0ga3phbGxvY19vYmooKnVscCk7XG4gNTc2Olx0XHRcdGlmICghdWxwKVxuIDU3NzpcdFx0XHRcdGdvdG8gZWRldl9mcmVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwOQoJCQkJCQkJb3V0cHV0OiAxMTcKCQkJCQkJCXRob3VnaHRzOiAxNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBCTlhUIEF1eGlsaWFyeSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogJiMzNDtBaCwgdGhlIGBpZiAoaWR4ID09IEJOWFRfQVVYREVWX1JETUEgJmFtcDsmYW1wOyAhKGJwLSZndDtmbGFncyAmYW1wOyBCTlhUX0ZMQUdfUk9DRV9DQVApKSBjb250aW51ZTtgIGxpbmUgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IFJETUEgcmVxdWlyZXMgdGhlIGBCTlhUX0ZMQUdfUk9DRV9DQVBgIGZsYWcsIGJ1dCB0aGUgYGZ3Y3RsYCBjYXNlIGRvZXNuJiMzOTt0IGNoZWNrIGFueSBmbGFncywgaXQganVzdCBwcm9jZWVkcyEmIzM0OyBUaGlzIHNlZW1lZCBwb3RlbnRpYWxseSBpbXBvcnRhbnQuIFRoZW4gSSByZW1lbWJlcmVkIGBfX0JOWFRfQVVYREVWX01BWGAgaXMgMiwgc28gdGhlIGBmd2N0bGAgY2FzZSAoYGlkeCA9IDFgKSBhbHdheXMgZ29lcyB0aHJvdWdoLiBUaGF0IG1lYW5zIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBldmVuIHdpdGhvdXQgUk9DRS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcsIHJpZ2h0PwoKVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIHRhcmdldC4KCk5leHQsIHdoYXQgY29uZmlncyBhcmUgbmVlZGVkPyBJIGtub3cgdGhpcyBpcyBpbiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIsIHNvIEkmIzM5O20gcHJldHR5IGNlcnRhaW4gYEJOWFRgIGlzIHRoZSBjcml0aWNhbCBjb25maWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkuIFNvLCBJIHJhbiB0aHJvdWdoIHRoZSBjaGVja2xpc3QgaW4gbXkgaGVhZDogYEJOWFRfU1JJT1ZgPyBOby4gYEJOWFRfRkxPV0VSX09GRkxPQURgPyBOby4gYEJOWFRfRENCYD8gTm8uIGBCTlhUX0hXTU9OYD8gTm8uIGBQQ0lgPyBZZXMsIGJ1dCBpdCYjMzk7cyBnZW5lcmljIHNvIGl0JiMzOTtzIHByb2JhYmx5IGFscmVhZHkgb24uIGBBVVhJTElBUllfQlVTYD8gWWVzLCBidXQgYEJOWFRgIHNlbGVjdHMgaXQuIFNvLCBqdXN0IGBCTlhUYC4KCklzIHRoaXMgcmVhbGx5IHdvcnRoIGZ1enppbmc/IFllcywgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAuIEl0IHJlb3JkZXJzIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAsIHNvIHRoZSBlcnJvciBoYW5kbGluZyBpcyBub3cgY29ycmVjdC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGZpeCB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBQQ0kgcHJvYmUuIFRoaXMgc2VlbXMgbGlrZSBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi4KCkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB0aGUgY29kZSBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQuIFRoZSBkaWZmIGNvbmZpcm1zIHRoYXQgaXQmIzM5O3MgdGhlIG9ubHkgb25lIHRoYXQgbmVlZHMgdG8gYmUgZm9jdXNlZCBvbi4gSSBhbHNvIG1hZGUgc3VyZSB0aGF0IGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGlzbiYjMzk7dCBzdGF0aWMsIGl0IGlzIGRlY2xhcmVkIGluIGBibnh0X3VscC5oYCBhbmQgdXNlZCBpbiBgYm54dC5jYCwgc28gaXQgaXMgdGhlIGNvcnJlY3Qgc3ltYm9sIG5hbWUuCgpGaW5hbGx5LCBJIHJldmlld2VkIHRoZSBpbnN0cnVjdGlvbnMuIEkgbmVlZCB0bzoKLSBFeHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBgRm9jdXNTeW1ib2xzYC4gRG9uZS4KLSBBdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gRG9uZS4KLSBJZGVudGlmeSBzcGVjaWZpYyBgQ09ORklHX2Agb3B0aW9ucyBmb3IgdGhlIG1vZGlmaWVkIGNvZGUuIERvbmUuCi0gQXZvaWQgZ2VuZXJpYyBjb25maWdzLiBEb25lLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgcmVzdWx0cyBub3c6CgpgYGAKRm9jdXNTeW1ib2xzOiBbJiMzNDtibnh0X2F1eF9kZXZpY2VzX2luaXQmIzM0O10KRW5hYmxlQ29uZmlnczogWyYjMzQ7Qk5YVCYjMzQ7XQpXb3J0aEZ1enppbmc6IHRydWUKUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBieSByZW9yZGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQQ0kgcHJvYmUgYW5kIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBQQ0kgZW11bGF0aW9uLiYjMzQ7CmBgYAoKT2theSwgbm93IGxldCYjMzk7cyBzdWJtaXQgdGhlc2UgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JOWFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibnh0X2F1eF9kZXZpY2VzX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgYnkgcmVvcmRlcmluZyBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlIGFuZCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk5YVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JueHRfYXV4X2RldmljZXNfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBieSByZW9yZGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQQ0kgcHJvYmUgYW5kIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBQQ0kgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6MDguNDA4NDg4NDc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwNzkyMjIxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk5YVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJueHRfYXV4X2RldmljZXNfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBlcnJvciBwYXRoIG9mIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGJ5IHJlb3JkZXJpbmcgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFBDSSBwcm9iZSBhbmQgaXMgc3VpdGFibGUgZm9yIGZ1enppbmcgdmlhIFBDSSBlbXVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjA4LjQwODUwMjg2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2Mzk4NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzk3NWJlMGVkYWM4ZjFkNDBhMzJhNWIyMWE3MWFlYWU0NjNiZGM1ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxMiAwODo0NzowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmNcXG5pbmRleCA1Yzc1MTkzM2RhNmE5ZC4uYTUxNWMzNjhiYWMwMTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jXFxuQEAgLTU2Niw2ICs1NjYsMTggQEAgdm9pZCBibnh0X2F1eF9kZXZpY2VzX2luaXQoc3RydWN0IGJueHQgKmJwKVxcbiBcXHRcXHRpZiAoIWF1eF9wcml2KVxcbiBcXHRcXHRcXHRnb3RvIG5leHRfYXV4ZGV2O1xcbiBcXG4rXFx0XFx0ZWRldiA9IGt6YWxsb2Nfb2JqKCplZGV2KTtcXG4rXFx0XFx0aWYgKCFlZGV2KVxcbitcXHRcXHRcXHRnb3RvIGF1eF9wcml2X2ZyZWU7XFxuK1xcdFxcdGF1eF9wcml2LVxcdTAwM2VlZGV2ID0gZWRldjtcXG4rXFx0XFx0Ym54dF9zZXRfZWRldl9pbmZvKGVkZXYsIGJwKTtcXG4rXFxuK1xcdFxcdHVscCA9IGt6YWxsb2Nfb2JqKCp1bHApO1xcbitcXHRcXHRpZiAoIXVscClcXG4rXFx0XFx0XFx0Z290byBlZGV2X2ZyZWU7XFxuK1xcdFxcdGVkZXYtXFx1MDAzZXVscF90YmwgPSB1bHA7XFxuK1xcdFxcdGF1eF9wcml2LVxcdTAwM2VpZCA9IGlkeDtcXG4rXFxuIFxcdFxcdGF1eF9kZXYgPSBcXHUwMDI2YXV4X3ByaXYtXFx1MDAzZWF1eF9kZXY7XFxuIFxcdFxcdGF1eF9kZXYtXFx1MDAzZWlkID0gYnAtXFx1MDAzZWF1eGRldl9pZDtcXG4gXFx0XFx0YXV4X2Rldi1cXHUwMDNlbmFtZSA9IGJueHRfYXV4X2RldmljZXNbaWR4XS5uYW1lO1xcbkBAIC01NzMsMzcgKzU4NSwyNiBAQCB2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXFxuIFxcdFxcdGF1eF9kZXYtXFx1MDAzZWRldi5yZWxlYXNlID0gYm54dF9hdXhfZGV2X3JlbGVhc2U7XFxuIFxcbiBcXHRcXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChhdXhfZGV2KTtcXG4tXFx0XFx0aWYgKHJjKSB7XFxuLVxcdFxcdFxcdGtmcmVlKGF1eF9wcml2KTtcXG4tXFx0XFx0XFx0Z290byBuZXh0X2F1eGRldjtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdGdvdG8gdWxwX2ZyZWU7XFxuIFxcdFxcdGJwLVxcdTAwM2VhdXhfcHJpdltpZHhdID0gYXV4X3ByaXY7XFxuIFxcbiBcXHRcXHQvKiBGcm9tIHRoaXMgcG9pbnQsIGFsbCBjbGVhbnVwIHdpbGwgaGFwcGVuIHZpYSB0aGUgLnJlbGVhc2VcXG4gXFx0XFx0ICogY2FsbGJhY2sgXFx1MDAyNiBhbnkgZXJyb3IgdW53aW5kaW5nIHdpbGwgbmVlZCB0byBpbmNsdWRlIGEgY2FsbFxcbiBcXHRcXHQgKiB0byBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGVkZXYgPSBremFsbG9jX29iaigqZWRldik7XFxuLVxcdFxcdGlmICghZWRldilcXG4tXFx0XFx0XFx0Z290byBhdXhfZGV2X3VuaW5pdDtcXG4tXFxuLVxcdFxcdGF1eF9wcml2LVxcdTAwM2VlZGV2ID0gZWRldjtcXG4tXFx0XFx0Ym54dF9zZXRfZWRldl9pbmZvKGVkZXYsIGJwKTtcXG4tXFxuLVxcdFxcdHVscCA9IGt6YWxsb2Nfb2JqKCp1bHApO1xcbi1cXHRcXHRpZiAoIXVscClcXG4tXFx0XFx0XFx0Z290byBhdXhfZGV2X3VuaW5pdDtcXG4tXFxuLVxcdFxcdGVkZXYtXFx1MDAzZXVscF90YmwgPSB1bHA7XFxuIFxcdFxcdGJwLVxcdTAwM2VlZGV2W2lkeF0gPSBlZGV2O1xcbiBcXHRcXHRpZiAoaWR4ID09IEJOWFRfQVVYREVWX1JETUEpXFxuIFxcdFxcdFxcdGJwLVxcdTAwM2V1bHBfbnVtX21zaXhfd2FudCA9IGJueHRfc2V0X2RmbHRfdWxwX21zaXgoYnApO1xcbi1cXHRcXHRhdXhfcHJpdi1cXHUwMDNlaWQgPSBpZHg7XFxuIFxcdFxcdGJueHRfYXV4ZGV2X3NldF9zdGF0ZShicCwgaWR4LCBCTlhUX0FERVZfU1RBVEVfSU5JVCk7XFxuIFxcbiBcXHRcXHRjb250aW51ZTtcXG4tYXV4X2Rldl91bmluaXQ6XFxuLVxcdFxcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KGF1eF9kZXYpO1xcbit1bHBfZnJlZTpcXG4rXFx0XFx0a2ZyZWUodWxwKTtcXG4rZWRldl9mcmVlOlxcbitcXHRcXHRrZnJlZShlZGV2KTtcXG4rYXV4X3ByaXZfZnJlZTpcXG4rXFx0XFx0a2ZyZWUoYXV4X3ByaXYpO1xcbiBuZXh0X2F1eGRldjpcXG4gXFx0XFx0aWYgKGlkeCA9PSBCTlhUX0FVWERFVl9SRE1BKVxcbiBcXHRcXHRcXHRicC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJOWFRfRkxBR19ST0NFX0NBUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6MDguODY1NjAyMTE5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDYyMjA5NDc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTlhUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm54dF9hdXhfZGV2aWNlc19pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgYnkgcmVvcmRlcmluZyBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlIGFuZCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjOTc1YmUwZWRhYzhmMWQ0MGEzMmE1YjIxYTcxYWVhZTQ2M2JkYzVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMTIgMDg6NDc6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmNcbmluZGV4IDVjNzUxOTMzZGE2YTlkLi5hNTE1YzM2OGJhYzAxNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jXG5AQCAtNTY2LDYgKzU2NiwxOCBAQCB2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXG4gXHRcdGlmICghYXV4X3ByaXYpXG4gXHRcdFx0Z290byBuZXh0X2F1eGRldjtcbiBcbitcdFx0ZWRldiA9IGt6YWxsb2Nfb2JqKCplZGV2KTtcbitcdFx0aWYgKCFlZGV2KVxuK1x0XHRcdGdvdG8gYXV4X3ByaXZfZnJlZTtcbitcdFx0YXV4X3ByaXYtXHUwMDNlZWRldiA9IGVkZXY7XG4rXHRcdGJueHRfc2V0X2VkZXZfaW5mbyhlZGV2LCBicCk7XG4rXG4rXHRcdHVscCA9IGt6YWxsb2Nfb2JqKCp1bHApO1xuK1x0XHRpZiAoIXVscClcbitcdFx0XHRnb3RvIGVkZXZfZnJlZTtcbitcdFx0ZWRldi1cdTAwM2V1bHBfdGJsID0gdWxwO1xuK1x0XHRhdXhfcHJpdi1cdTAwM2VpZCA9IGlkeDtcbitcbiBcdFx0YXV4X2RldiA9IFx1MDAyNmF1eF9wcml2LVx1MDAzZWF1eF9kZXY7XG4gXHRcdGF1eF9kZXYtXHUwMDNlaWQgPSBicC1cdTAwM2VhdXhkZXZfaWQ7XG4gXHRcdGF1eF9kZXYtXHUwMDNlbmFtZSA9IGJueHRfYXV4X2RldmljZXNbaWR4XS5uYW1lO1xuQEAgLTU3MywzNyArNTg1LDI2IEBAIHZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcbiBcdFx0YXV4X2Rldi1cdTAwM2VkZXYucmVsZWFzZSA9IGJueHRfYXV4X2Rldl9yZWxlYXNlO1xuIFxuIFx0XHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChhdXhfZGV2KTtcbi1cdFx0aWYgKHJjKSB7XG4tXHRcdFx0a2ZyZWUoYXV4X3ByaXYpO1xuLVx0XHRcdGdvdG8gbmV4dF9hdXhkZXY7XG4tXHRcdH1cbitcdFx0aWYgKHJjKVxuK1x0XHRcdGdvdG8gdWxwX2ZyZWU7XG4gXHRcdGJwLVx1MDAzZWF1eF9wcml2W2lkeF0gPSBhdXhfcHJpdjtcbiBcbiBcdFx0LyogRnJvbSB0aGlzIHBvaW50LCBhbGwgY2xlYW51cCB3aWxsIGhhcHBlbiB2aWEgdGhlIC5yZWxlYXNlXG4gXHRcdCAqIGNhbGxiYWNrIFx1MDAyNiBhbnkgZXJyb3IgdW53aW5kaW5nIHdpbGwgbmVlZCB0byBpbmNsdWRlIGEgY2FsbFxuIFx0XHQgKiB0byBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdC5cbiBcdFx0ICovXG4tXHRcdGVkZXYgPSBremFsbG9jX29iaigqZWRldik7XG4tXHRcdGlmICghZWRldilcbi1cdFx0XHRnb3RvIGF1eF9kZXZfdW5pbml0O1xuLVxuLVx0XHRhdXhfcHJpdi1cdTAwM2VlZGV2ID0gZWRldjtcbi1cdFx0Ym54dF9zZXRfZWRldl9pbmZvKGVkZXYsIGJwKTtcbi1cbi1cdFx0dWxwID0ga3phbGxvY19vYmooKnVscCk7XG4tXHRcdGlmICghdWxwKVxuLVx0XHRcdGdvdG8gYXV4X2Rldl91bmluaXQ7XG4tXG4tXHRcdGVkZXYtXHUwMDNldWxwX3RibCA9IHVscDtcbiBcdFx0YnAtXHUwMDNlZWRldltpZHhdID0gZWRldjtcbiBcdFx0aWYgKGlkeCA9PSBCTlhUX0FVWERFVl9SRE1BKVxuIFx0XHRcdGJwLVx1MDAzZXVscF9udW1fbXNpeF93YW50ID0gYm54dF9zZXRfZGZsdF91bHBfbXNpeChicCk7XG4tXHRcdGF1eF9wcml2LVx1MDAzZWlkID0gaWR4O1xuIFx0XHRibnh0X2F1eGRldl9zZXRfc3RhdGUoYnAsIGlkeCwgQk5YVF9BREVWX1NUQVRFX0lOSVQpO1xuIFxuIFx0XHRjb250aW51ZTtcbi1hdXhfZGV2X3VuaW5pdDpcbi1cdFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoYXV4X2Rldik7XG4rdWxwX2ZyZWU6XG4rXHRcdGtmcmVlKHVscCk7XG4rZWRldl9mcmVlOlxuK1x0XHRrZnJlZShlZGV2KTtcbithdXhfcHJpdl9mcmVlOlxuK1x0XHRrZnJlZShhdXhfcHJpdik7XG4gbmV4dF9hdXhkZXY6XG4gXHRcdGlmIChpZHggPT0gQk5YVF9BVVhERVZfUkRNQSlcbiBcdFx0XHRicC1cdTAwM2VmbGFncyBcdTAwMjY9IH5CTlhUX0ZMQUdfUk9DRV9DQVA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0NzowOC44NjU2MDQwMjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjExNzQ1MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIHRvIGBibnh0X3VscC5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmNgLiBJdCdzIGZvY3VzZWQgb24gdGhlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZS4gVGhlIGdvYWwgaGVyZSBpcyB0byBhZGRyZXNzIGEgbWVtb3J5IGxlYWssIHVzZS1hZnRlci1mcmVlLCBvciBhIHBvdGVudGlhbCBlcnJvciBoYW5kbGluZyBmbGF3LCBsaWtlbHkgaW52b2x2aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhdXhpbGlhcnkgZGV2aWNlcy5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBpcyByZW9yZGVyaW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBpbiByZWxhdGlvbiB0byBjYWxscyB0byBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gTm93LCBJIHNlZSB0aGF0IGBlZGV2YCBhbmQgYHVscGAgYXJlIGFsbG9jYXRlZCAqYmVmb3JlKiBjYWxsaW5nIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhdHRlcm4gZm9yIHByZS1hbGxvY2F0aW5nIHdoYXQgeW91IG5lZWQsIGlzbid0IGl0P1xuXG5UaGUgb3JpZ2luYWwgY29kZSwgdGhvdWdoLi4uIEknbSBsb29raW5nIGF0IGl0IG5vdy4gSXQgd2FzIHN0cnVjdHVyZWQgbGlrZSB0aGlzOiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCB3YXMgY2FsbGVkIGZpcnN0LiBJZiB0aGF0IGZhaWxlZCwgYGF1eF9wcml2YCB3YXMgZnJlZWQsIGFuZCB0aGUgcHJvY2VzcyBtb3ZlZCBvbi4gVGhlbiwgaWYgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgc3VjY2VlZGVkLCBgZWRldmAgYW5kIGB1bHBgIHdlcmUgYWxsb2NhdGVkLiBBbmQgaWYgKnRob3NlKiBmYWlsZWQsIGl0IHdvdWxkIGNhbGwgYGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0YC5cblxuSG1tLi4uIEkgdGhpbmsgSSdtIHN0YXJ0aW5nIHRvIHNlZSB0aGUgaXNzdWUuIGBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdGAgaW5jbHVkZXMgYSBjYWxsIHRvIGBwdXRfZGV2aWNlYCwgd2hpY2ggdHJpZ2dlcnMgdGhlIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIGlzIGBibnh0X2F1eF9kZXZfcmVsZWFzZWAgaW4gdGhpcyBjYXNlLiBBbmQgKnRoYXQqIGZ1bmN0aW9uLCBgYm54dF9hdXhfZGV2X3JlbGVhc2VgLCBmcmVlcyBgYXV4X3ByaXZgIGFuZCBpdHMgbWVtYmVycy4gQnV0LCBpZiBgZWRldmAgYW5kIGB1bHBgIHdlcmVuJ3QgZnVsbHkgb3IgcGVyaGFwcyBldmVuIHBhcnRpYWxseSBhbGxvY2F0ZWQsIHNvbWV0aGluZyBpbiBgYm54dF9hdXhfZGV2X3JlbGVhc2VgIHdhcyBwcm9iYWJseSB0cnlpbmcgdG8gZnJlZSB0aGVtLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRvdWJsZS1mcmVlLCB1c2UtYWZ0ZXItZnJlZSwgb3Igc29tZSBvdGhlciBtZW1vcnkgY29ycnVwdGlvbi4gU28sIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdHJ5aW5nIHRvIGF2b2lkIHRoYXQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBibnh0X2F1eF9kZXZfcmVsZWFzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0NzoxNi4wNzczNTE5MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUxMTQ3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm54dF9hdXhfZGV2X3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTQ1ND12b2lkIGJueHRfYXV4X2RldmljZXNfdW5pbml0KHN0cnVjdCBibnh0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy00NzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jOjQ3MTpzdGF0aWMgdm9pZCBibnh0X2F1eF9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ3Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NTQ5PXZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01ODQtXFx0XFx0YXV4X2Rldi1cXHUwMDNlZGV2LnBhcmVudCA9IFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo1ODU6XFx0XFx0YXV4X2Rldi1cXHUwMDNlZGV2LnJlbGVhc2UgPSBibnh0X2F1eF9kZXZfcmVsZWFzZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0NzoxNi42OTI0NzY0MDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU3MjAwODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRm9jdXMqKlxuXG5BbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gcmVhZCB0aGUgYGJueHRfYXV4X2Rldl9yZWxlYXNlYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgaXQgbWFrZXMgbWUgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgd2hhdCB0aGlzIGZpbGUgKmlzKiBhbmQgaXRzIGNvbnRleHQuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBcImJueHRcIiBsaWtlbHkgcG9pbnRzIHRvd2FyZHMgQnJvYWRjb20ncyBOZXRYdHJlbWUgbmV0d29yayBhZGFwdGVycyDigJMgc28gd2UncmUgdGFsa2luZyBhYm91dCBkcml2ZXJzIG9yIHV0aWxpdGllcyBmb3IgdGhvc2UuIFwiYXV4X2RldlwiIHN1Z2dlc3RzIGF1eGlsaWFyeSBkZXZpY2Ugb3Igc29tZXRoaW5nIHN1cHBvcnRpbmcgdGhlIG1haW4gbmV0d29yayBpbnRlcmZhY2UsIGFuZCBcInJlbGVhc2VcIiBpcyBqdXN0IHRoZSB2ZXJzaW9uIG9yIHBhY2thZ2UgbmFtZS4gT2theSwgSSdtIGV4cGVjdGluZyB0byBnZXQgdGhlIHVzdWFsIHN1c3BlY3RzIC0tIHRoZSBjaGFuZ2Vsb2csIGEgbGlzdCBvZiBrbm93biBpc3N1ZXMsIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMsIGRyaXZlciB1cGRhdGVzLCBhbmQgcG9zc2libHkgc29tZSBkZXRhaWxzIG9uIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy5cbkkgd2FudCB0byBleGFtaW5lIHRoaXMgZmlsZSB0aG9yb3VnaGx5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgbmV3IGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGludGVncmF0ZWQgaW50byBteSBleGlzdGluZyBrbm93bGVkZ2ViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzE1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6MTkuODQ5NjgxMDIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjU6XFx0XFx0XFx0XFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoYWRldik7XFxuIDQ2NjpcXHRcXHRcXHR9XFxuIDQ2NzpcXHRcXHR9XFxuIDQ2ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJwLVxcdTAwM2VhdXhkZXZfbG9jayk7XFxuIDQ2OTpcXHR9XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdHN0YXRpYyB2b2lkIGJueHRfYXV4X2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gNDcyOlxcdHtcXG4gNDczOlxcdFxcdHN0cnVjdCBibnh0X2F1eF9wcml2ICphdXhfcHJpdiA9XFxuIDQ3NDpcXHRcXHRcXHRjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYm54dF9hdXhfcHJpdiwgYXV4X2Rldi5kZXYpO1xcbiA0NzU6XFx0XFx0c3RydWN0IGJueHQgKmJwID0gbmV0ZGV2X3ByaXYoYXV4X3ByaXYtXFx1MDAzZWVkZXYtXFx1MDAzZW5ldCk7XFxuIDQ3NjpcXHRcXG4gNDc3OlxcdFxcdGtmcmVlKGF1eF9wcml2LVxcdTAwM2VlZGV2LVxcdTAwM2V1bHBfdGJsKTtcXG4gNDc4OlxcdFxcdGJwLVxcdTAwM2VlZGV2W2F1eF9wcml2LVxcdTAwM2VpZF0gPSBOVUxMO1xcbiA0Nzk6XFx0XFx0a2ZyZWUoYXV4X3ByaXYtXFx1MDAzZWVkZXYpO1xcbiA0ODA6XFx0XFx0YnAtXFx1MDAzZWF1eF9wcml2W2F1eF9wcml2LVxcdTAwM2VpZF0gPSBOVUxMO1xcbiA0ODE6XFx0XFx0a2ZyZWUoYXV4X3ByaXYpO1xcbiA0ODI6XFx0fVxcbiA0ODM6XFx0XFxuIDQ4NDpcXHR2b2lkIGJueHRfYXV4X2RldmljZXNfZGVsKHN0cnVjdCBibnh0ICpicClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6MTkuODQ5NzkwMjUxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUzNzkwNjYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlIGluIGJueHRfYXV4X2Rldl9yZWxlYXNlKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBnb2luZyBvbi4gSSBzZWUgYGJueHRfYXV4X2Rldl9yZWxlYXNlYCBkZXJlZmVyZW5jaW5nIGBhdXhfcHJpdi1cdTAwM2VlZGV2LVx1MDAzZW5ldGAuIFJpZ2h0IGF3YXksIHRoZSBhbGFybSBiZWxscyBhcmUgcmluZ2luZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlmIGBlZGV2YCB3YXNuJ3QgcHJvcGVybHkgYWxsb2NhdGVkIOKAkyBzcGVjaWZpY2FsbHksIGlmIHRoYXQgYGt6YWxsb2Nfb2JqKCplZGV2KTtgIGNhbGwgZmFpbGVkIOKAkyB0aGVuIGBhdXhfcHJpdi1cdTAwM2VlZGV2YCB3aWxsIGJlIE5VTEwuIEFuZCBiYW0sIHdlJ3ZlIGdvdCBvdXJzZWx2ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aCBgYXV4X3ByaXYtXHUwMDNlZWRldi1cdTAwM2VuZXRgLiBJdCdzIHByZXR0eSBjbGVhciB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAuXG5cblRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgdGhpcyBjb2RlIHBhdGggcmVhY2hhYmxlPyBZZWFoLCBpdCBpcy4gVGhlIGVycm9yIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgYXJlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIGlzIGFsd2F5cyBwb3NzaWJsZSwgb3IgaWYgdGhlIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIGZ1bmN0aW9uIGZhaWxzLCB3aGljaCBpcyBsZXNzIGNvbW1vbiBidXQgY2FuIHN0aWxsIGhhcHBlbi5cblxuV2FpdCwgaWYgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgZmFpbHMsIHdoYXQncyBzdXBwb3NlZCB0byBoYXBwZW4/IExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2U6XG5cbmBgYGNcblx0XHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChhdXhfZGV2KTtcblx0XHRpZiAocmMpXG5cdFx0XHRnb3RvIHVscF9mcmVlO1xuYGBgXG5cblNvLCBpdCBqdW1wcyB0byBgdWxwX2ZyZWVgLiBIbW1tLCBpZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmYWlscywgZG9lcyB0aGF0IG5lY2Vzc2l0YXRlIGEgY2FsbCB0byBgYXV4aWxpYXJ5X2RldmljZV91bmluaXRgPyBHZW5lcmFsbHksIGlmIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIGZhaWxzLCBpdCBuZWVkcyBhIGBwdXRfZGV2aWNlYCBvciBlcXVpdmFsZW50LiBCdXQgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoZSBkb2NzIGZvciBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBzYXkgdGhhdCBcIklmIGF1eGlsaWFyeV9kZXZpY2VfaW5pdCgpIHJldHVybnMgYW4gZXJyb3IsIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHB1dF9kZXZpY2UoKSBvbiB0aGUgZGV2aWNlLlwiLiBUaGF0IHNob3VsZCBiZSBhIGdvb2QgaW5kaWNhdG9yLiBCdXQgSSdsbCBjb25maXJtIHRoYXQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIHNvdXJjZSB0byBtYWtlIHN1cmUgdGhhdCdzIGhvdyBpdCBpcyBoYW5kbGVkIGluIHByYWN0aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6MjUuMzg3Njk5MTY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTQ1NjI3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdXhpbGlhcnlfZGV2aWNlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0xMTAtICogVGhlIHBhcmVudCBkZXZpY2UgdGhlbiByZWdpc3RlcnMgdGhlIGF1eGlsaWFyeV9kZXZpY2UgYnkgY2FsbGluZ1xcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYzoxMTE6ICogYXV4aWxpYXJ5X2RldmljZV9pbml0KCksIGFuZCB0aGVuIGF1eGlsaWFyeV9kZXZpY2VfYWRkKCksIHdpdGggdGhlIHBvaW50ZXJcXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMTEyLSAqIHRvIHRoZSBhdXhkZXYgbWVtYmVyIG9mIHRoZSBhYm92ZSBzdHJ1Y3R1cmUuIFRoZSBwYXJlbnQgcHJvdmlkZXMgYSBuYW1lIGZvclxcbi0tXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jPTI0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlIGF1eGlsaWFyeV9idXNfdHlwZSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0yNTgtLyoqXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jOjI1OTogKiBhdXhpbGlhcnlfZGV2aWNlX2luaXQgLSBjaGVjayBhdXhpbGlhcnlfZGV2aWNlIGFuZCBpbml0aWFsaXplXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTI2MC0gKiBAYXV4ZGV2OiBhdXhpbGlhcnkgZGV2aWNlIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTI3NC0gKi9cXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmM6Mjc1OmludCBhdXhpbGlhcnlfZGV2aWNlX2luaXQoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldilcXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMjc2LXtcXG4tLVxcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0yOTMtfVxcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYzoyOTQ6RVhQT1JUX1NZTUJPTF9HUEwoYXV4aWxpYXJ5X2RldmljZV9pbml0KTtcXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMjk1LVxcbi0tXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTMwNC0gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jOjMwNTogKiBhdXhpbGlhcnlfZGV2aWNlX2luaXQoKSwgd2hpY2ggd2lsbCBwZXJmb3JtIHRoZSBkZXZpY2VfaW5pdGlhbGl6ZS4gIFRoaXNcXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMzA2LSAqIG1lYW5zIHRoYXQgaWYgdGhpcyByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHRoZW4gYSBjYWxsIHRvXFxuLS1cXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmM9NDA4PXN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhpbGlhcnlfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtNDI3LVxcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYzo0Mjg6XFx0cmV0ID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KGF1eGRldik7XFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTQyOS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjI1LjUwNzE2MjEyNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDU4MDgwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBEb2N1bWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0J3MgY3J1Y2lhbCBmb3IgYnJpbmdpbmcgdXAgc29tZSBraW5kIG9mIHNlY29uZGFyeSBoYXJkd2FyZSBvciBwZXJpcGhlcmFsLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHRoZSBleHBlY3RlZCBhcmd1bWVudHMgKGRhdGEgc3RydWN0dXJlcywgaGFuZGxlcywgd2hhdGV2ZXIgaXQgdGFrZXMpLCBhbmQsIGNyaXRpY2FsbHksIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBBcmUgdGhlcmUgcHJlLXJlcXVpc2l0ZXM/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBzdGF0ZXMgb3IgY29uZmlndXJhdGlvbnMgZXN0YWJsaXNoZWQgYnkgZWFybGllciByb3V0aW5lcz9cblxuSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBhbmQgZmFpbHVyZSBtb2RlcyDigJMgaG93IGRvZXMgaXQgaGFuZGxlIGludmFsaWQgaW5wdXQsIHVuYXZhaWxhYmxlIHJlc291cmNlcywgb3IgdW5leHBlY3RlZCBoYXJkd2FyZSByZXNwb25zZXM/IEVycm9yIGNvZGVzIGFyZSBrZXkuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gYW55IHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGl0IG1pZ2h0IGVtcGxveSwgZXNwZWNpYWxseSBpZiB0aGlzIGluaXRpYWxpemF0aW9uIGludm9sdmVzIHNoYXJlZCByZXNvdXJjZXMgb3IgaW50ZXJhY3Rpb24gd2l0aCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFJhY2UgY29uZGl0aW9ucyBhcmUgYWx3YXlzIGEgY29uY2Vybi5cblxuRnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLCBJJ2xsIGJlIHRyeWluZyB0byBncmFzcCB0aGUgZXhlY3V0aW9uIHRpbWUgaW1wbGljYXRpb25zLiBJcyB0aGlzIGEgYmxvY2tpbmcgY2FsbCwgb3IgZG9lcyBpdCBzcGF3biBhc3luY2hyb25vdXMgb3BlcmF0aW9ucz8gQW5kIGZpbmFsbHksIHdoYXQncyB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJuPyBIb3cgZG9lcyBpdCBpbnRlZ3JhdGUgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlPyBJJ2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZ2xlYW4gdGhpcyB0aHJvdWdoIGV4YW1pbmluZyB0aGUgY2FsbCBjb250ZXh0IGFuZCBhbnkgZXhhbXBsZSBjb2RlIHByb3ZpZGVkLiBHZXR0aW5nIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGFsbCBvZiB0aGVzZSBpdGVtcyB3aWxsIGFsbG93IG1lIHRvIGJlZ2luIHRvIGFyY2hpdGVjdCBhIHN0cm9uZyBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjI5LjMxMjk3Mjc5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU4OlxcdC8qKlxcbiAyNTk6XFx0ICogYXV4aWxpYXJ5X2RldmljZV9pbml0IC0gY2hlY2sgYXV4aWxpYXJ5X2RldmljZSBhbmQgaW5pdGlhbGl6ZVxcbiAyNjA6XFx0ICogQGF1eGRldjogYXV4aWxpYXJ5IGRldmljZSBzdHJ1Y3RcXG4gMjYxOlxcdCAqXFxuIDI2MjpcXHQgKiBUaGlzIGlzIHRoZSBzZWNvbmQgc3RlcCBpbiB0aGUgdGhyZWUtc3RlcCBwcm9jZXNzIHRvIHJlZ2lzdGVyIGFuXFxuIDI2MzpcXHQgKiBhdXhpbGlhcnlfZGV2aWNlLlxcbiAyNjQ6XFx0ICpcXG4gMjY1OlxcdCAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHRoZW4gdGhlIGRldmljZV9pbml0aWFsaXplIHdpbGxcXG4gMjY2OlxcdCAqICpub3QqIGhhdmUgYmVlbiBwZXJmb3JtZWQsIGFuZCB0aGUgY2FsbGVyIHdpbGwgYmUgcmVzcG9uc2libGUgdG8gZnJlZSBhbnlcXG4gMjY3OlxcdCAqIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBhdXhpbGlhcnlfZGV2aWNlIGluIHRoZSBlcnJvciBwYXRoIGRpcmVjdGx5LlxcbiAyNjg6XFx0ICpcXG4gMjY5OlxcdCAqIEl0IHJldHVybnMgMCBvbiBzdWNjZXNzLiAgT24gc3VjY2VzcywgdGhlIGRldmljZV9pbml0aWFsaXplIGhhcyBiZWVuXFxuIDI3MDpcXHQgKiBwZXJmb3JtZWQuICBBZnRlciB0aGlzIHBvaW50IGFueSBlcnJvciB1bndpbmRpbmcgd2lsbCBuZWVkIHRvIGluY2x1ZGUgYSBjYWxsXFxuIDI3MTpcXHQgKiB0byBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdCgpLiAgSW4gdGhpcyBwb3N0LWluaXRpYWxpemUgZXJyb3Igc2NlbmFyaW8sIGEgY2FsbFxcbiAyNzI6XFx0ICogdG8gdGhlIGRldmljZSdzIC5yZWxlYXNlIGNhbGxiYWNrIHdpbGwgYmUgdHJpZ2dlcmVkLCBhbmQgYWxsIG1lbW9yeSBjbGVhbi11cFxcbiAyNzM6XFx0ICogaXMgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCB0aGVyZS5cXG4gMjc0OlxcdCAqL1xcbiAyNzU6XFx0aW50IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2KVxcbiAyNzY6XFx0e1xcbiAyNzc6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmF1eGRldi1cXHUwMDNlZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0NzoyOS4zMTMwNTM5NDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4MzE4MDg5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIGJueHQgRHJpdmVyIEVycm9yIEhhbmRsaW5nIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgYW4gaW1wb3J0YW50IGZpeCBpbiB0aGUgYGJueHRgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjb3JlIGlzc3VlIGlzIGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gSXQgc2VlbXMgdGhlIGRyaXZlciB3YXNuJ3QgcHJvcGVybHkgY2xlYW5pbmcgdXAgbWVtb3J5IGlmIHRoZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKmFmdGVyKiBzb21lIG1lbW9yeSBoYWQgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCwgbGVhZGluZyB0byBhIHBvdGVudGlhbCBjcmFzaC5cblxuTXkgdGhvdWdodCBwcm9jZXNzIGlzIHRoaXM6IFRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gYSBjcml0aWNhbCBtaXN1bmRlcnN0YW5kaW5nIG9mIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LiBJZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmYWlscywgdGhlIGBkZXZpY2VfaW5pdGlhbGl6ZWAgaXMgKm5ldmVyKiBwZXJmb3JtZWQsIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgdG8gY2xlYW4gdXAgYmVsb25ncyB0byB0aGUgY2FsbGVyLCBub3QgdGhlIGBwdXRfZGV2aWNlYC5cblxuTG9va2luZyBhdCB0aGUgbmV3IGNvZGUsIGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBjbGVhbnVwOyBpZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmYWlscywgaXQganVtcHMgdG8gYSBgdWxwX2ZyZWVgIGxhYmVsLCB3aGljaCBhcHByb3ByaWF0ZWx5IGZyZWVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBTaW1wbGUgYW5kIGNvcnJlY3QuIFRoZSBmaXggbW92ZXMgdGhlIGFsbG9jYXRpb24gb2YgYGVkZXZgIGFuZCBgdWxwYCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gdGhlIGVycm9yIGhhbmRsaW5nLlxuXG5CdXQgdGhlIG9sZCBjb2RlLCBob3dldmVyLCBoYWQgYSBmbGF3LiBJdCBsb29rcyBsaWtlIGl0IHdhcyBhdHRlbXB0aW5nIHRvIGNhbGwgYGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0YCBhbmQgYHB1dF9kZXZpY2VgIGluIHRoZSBlcnJvciBwYXRoLCBidXQgaXQgd2FzIGRvaW5nIHNvIGFmdGVyIGEgZmFpbGVkIGBlZGV2YCBhbGxvY2F0aW9uLiBUaGlzIGNhdXNlZCBhIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlIGJlY2F1c2UgYGF1eF9wcml2LVx1MDAzZWVkZXZgIHdhcyBiZWluZyBhY2Nlc3NlZCBiZWZvcmUgaXQgd2FzIHByb3Blcmx5IGluaXRpYWxpemVkLiBgYm54dF9hdXhfZGV2X3JlbGVhc2VgLCBwYXJ0IG9mIHRoZSBjbGVhbnVwLCB3YXMgdHJ5aW5nIHRvIGRlcmVmZXJlbmNlIGEgYE5VTExgIHBvaW50ZXIuIFRoYXQncyB0aGUgYnVnLlxuXG5UaGUgbmV3IGNvZGUgY29ycmVjdGx5IGZpeGVzIHRoaXMgYnkgYWxsb2NhdGluZyBgZWRldmAgYW5kIGB1bHBgICpiZWZvcmUqIGNhbGxpbmcgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAsIHdoaWNoIGlzIHRoZSBmaXguIEZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgYE5VTExgIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGguIFByZXR0eSBpbXBvcnRhbnQgZm9yIHJlbGlhYmlsaXR5LlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBEZWZpbml0ZWx5ISBBIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgb25lIGRlYWxpbmcgd2l0aCBlcnJvciBwYXRocywgaXMgYSBwcmltZSB0YXJnZXQuIFRoZSBmYWN0IHRoYXQgdGhlIGBibnh0YCBkcml2ZXIgKEJyb2FkY29tIE5ldFh0cmVtZS1DL0UpIGlzIGEgUENJIGRyaXZlciByYWlzZXMgYSBxdWVzdGlvbiBhYm91dCByZWFjaGFiaWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gUENJIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBnb29kIFBDSSBlbXVsYXRpb24uIERvZXMgUUVNVSBlbXVsYXRlIGBibnh0YD8gVW5saWtlbHkuIFN5emthbGxlciwgYSBrZXJuZWwgZnV6emVyLCBvZnRlbiBjYW4ndCByZWFjaCB0aG9zZSBkcml2ZXJzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgdW5sZXNzIGl0J3MgdXNpbmcgYWR2YW5jZWQgdGVjaG5pcXVlcyBsaWtlIGB2aGNpYCBvciBgdmZpb2AgZm9yIFBDSSBkZXZpY2UgZW11bGF0aW9uLlxuXG5BaGEhIFRoZW4sIEkgc2F3IHRoZSBhdXRob3Igb2YgdGhlIGNvbW1pdCBpcyBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBXYWl0IGEgc2Vjb25kLi4uIHRoYXQncyBTeXprYWxsZXIhIFRoZSBmYWN0IHRoYXQgU3l6a2FsbGVyIGZvdW5kIHRoaXMgYnVnIG1lYW5zIGl0IElTIHJlYWNoYWJsZSBpbiB0aGVpciBlbnZpcm9ubWVudC4gV2hpY2ggbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enplci13b3J0aHksIGFzIFN5emthbGxlciBtdXN0IGhhdmUgc29tZSBzb3J0IG9mIFBDSSBmdXp6aW5nIGdvaW5nIG9uLCBtYXliZSB0aHJvdWdoIHRoZSBgc3l6X3BjaV9kZXZpY2VgIGludGVyZmFjZS4gTWF5YmUgdGhpcyBpcyB0cmlnZ2VyZWQgdmlhIHNvbWUgb3RoZXIgcGF0aD8gSSBzaG91bGQgY2hlY2sgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjY4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6NDEuMTQ0ODY1NTQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTk1NjgxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm54dF9hdXhfZGV2aWNlc19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE2OTQ1PXN0YXRpYyBpbnQgYm54dF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMwLVxcdGlmICghYm54dF9hdXhkZXZfaWRfYWxsb2MoYnApKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MTMxOlxcdFxcdGJueHRfYXV4X2RldmljZXNfaW5pdChicCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcxMzItXFx0cmMgPSBibnh0X3NldF9kZmx0X3JpbmdzKGJwLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYz01MjU9dm9pZCBibnh0X2F1eF9kZXZpY2VzX2FkZChzdHJ1Y3QgYm54dCAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo1NDk6dm9pZCBibnh0X2F1eF9kZXZpY2VzX2luaXQoc3RydWN0IGJueHQgKmJwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0Nzo0MS41NjQ0Mzk5M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTIyNDE1NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBUYXJnZXQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGBibnh0X2luaXRfb25lYCBmdW5jdGlvbiwgdGhhdCdzIGNhbGxlZCBmcm9tIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24sIHJpZ2h0PyBNYWtlcyBzZW5zZS4gQW5kIHdlIGtub3cgdGhhdCBTeXprYWxsZXIncyBQQ0kgZnV6emVyLCB0aGF0IHRoaW5nIGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLCB3aGljaCB0aGVuIHRyaWdnZXJzIHRoZXNlIHByb2JlIGZ1bmN0aW9ucy4gU28sIHllYWgsICpkZWZpbml0ZWx5KiByZWFjaGFibGUuIFRoZSBuZXh0IHN0ZXAgaXMgYWx3YXlzIHRoZSBzYW1lOiBGaW5kIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IHdlIG5lZWQgdG8gbWFrZSB0aGlzIGFsbCB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjcxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6NDQuNjg2ODU4NTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzA2MTEyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQk5YVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MTk1PWNvbmZpZyBTWVNURU1QT1JUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIwNzpjb25maWcgQk5YVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjA4LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIyMjpjb25maWcgQk5YVF9TUklPVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIkJyb2FkY29tIE5ldFh0cmVtZS1DL0UgU1ItSU9WIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIzMTpjb25maWcgQk5YVF9GTE9XRVJfT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjMyLVxcdGJvb2wgXFxcIlRDIEZsb3dlciBvZmZsb2FkIHN1cHBvcnQgZm9yIE5ldFh0cmVtZS1DL0VcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIzOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI0MDpjb25maWcgQk5YVF9EQ0JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI0MS1cXHRib29sIFxcXCJEYXRhIENlbnRlciBCcmlkZ2luZyAoRENCKSBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNTA6Y29uZmlnIEJOWFRfSFdNT05cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIEhXTU9OIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjQ0LjgwOTkzMjE4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIxNzk0MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipDb25kaXRpb25hbCBDb21waWxhdGlvbiBJbnZlc3RpZ2F0aW9uOiBgYm54dF91bHAuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGNvbXBpbGF0aW9uIG9mIGBibnh0X3VscC5jYCBpcyBnb3Zlcm5lZCBieSBhbnkgY29uZGl0aW9uYWwgbG9naWMuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXAgd2hlbiBkZWFsaW5nIHdpdGggZHJpdmVyIGNvZGUsIGVzcGVjaWFsbHkgd2hlbiB5b3UgZW5jb3VudGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgYnVpbGQgaXNzdWVzLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpZiBjZXJ0YWluIGZlYXR1cmVzIG9yIGZ1bmN0aW9uYWxpdGllcyB3aXRoaW4gdGhhdCBmaWxlIGFyZSBvbmx5IGluY2x1ZGVkIHVuZGVyIHNwZWNpZmljIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIG9yIGtlcm5lbCB2ZXJzaW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBtYWtlZmlsZXMsIGNvbmZpZ3VyYXRpb24gaGVhZGVycywgYW5kIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IHN1cnJvdW5kIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBmaWxlLiBLbm93aW5nIHRoZSBjb25kaXRpb25zIHdpbGwgaGVscCBtZSBkaWFnbm9zZSBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGJ1aWxkIGVudmlyb25tZW50LiBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0sIGEgcGFydGljdWxhciBrZXJuZWwgdmVyc2lvbiwgYSBjZXJ0YWluIGRyaXZlciBtb2R1bGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODg4NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjQ3LjczMTcyODEzNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNjg3MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJueHRfdWxwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19CTlhUKSArPSBibnh0X2VuLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9NYWtlZmlsZTo0OmJueHRfZW4teSA6PSBibnh0Lm8gYm54dF9od3JtLm8gYm54dF9zcmlvdi5vIGJueHRfZXRodG9vbC5vIGJueHRfZGNiLm8gYm54dF91bHAubyBibnh0X3hkcC5vIGJueHRfcHRwLm8gYm54dF92ZnIubyBibnh0X2RldmxpbmsubyBibnh0X2RpbS5vIGJueHRfY29yZWR1bXAuLi5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L01ha2VmaWxlLTUtYm54dF9lbi0kKENPTkZJR19CTlhUX0ZMT1dFUl9PRkZMT0FEKSArPSBibnh0X3RjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6NDcuODM1NDIxMjU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzgwNTYwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBEZXBlbmRlbmN5IG9mIGBibnh0X3VscC5vYCoqXG5cbkFscmlnaHQsIG15IGZpcnN0IHRob3VnaHQgaGVyZSBpcyB0aGF0IGBibnh0X3VscC5vYCBpcyBjb25zaXN0ZW50bHkgYnVpbHQgd2hlbiBgQ09ORklHX0JOWFRgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLiBIb3dldmVyLCB0aGUgbmV4dCBwaWVjZSBvZiB0aGlzIHB1enpsZSBpcyBjb25uZWN0aW5nIGhvdyBpdCBpcyAqYWN0dWFsbHkqIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBpbml0IGZ1bmN0aW9uIGFuZCBmaWd1cmUgb3V0IGl0cyBkZXBlbmRlbmNpZXMuXG5cbk5vdywgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgY2FsbHMgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgcmluZ3MgYSBiZWxsLiBDb3VsZCB0aGUgYEJOWFRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGJlIHNlbGVjdGluZyBgQVVYSUxJQVJZX0JVU2A/IFRoYXQgY29ubmVjdGlvbiB3b3VsZCBleHBsYWluIGEgbG90LiBJdCdzIGEga2V5IHF1ZXN0aW9uLCBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgc29saWQgZXZpZGVuY2UuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhci4gTGV0J3MgZGVsdmUgaW50byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFnaWMgaGFwcGVucywgYW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgQk5YVGAsIGBBVVhJTElBUllfQlVTYCBhbmQgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgc2hvdWxkIGJlIGxhaWQgb3V0LiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCBjb25maWd1cmVzIHRoZSBhdXhpbGlhcnkgYnVzLiBJdCBzaG91bGQgYmUgYSBwcmV0dHkgcXVpY2sgc2VhcmNoIGZvciB0aGUgZGVwZW5kZW5jaWVzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0Nzo1MS44NzM0Nzk2MzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDc6XFx0Y29uZmlnIEJOWFRcXG4gMjA4OlxcdFxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIHN1cHBvcnRcXFwiXFxuIDIwOTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAyMTA6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAyMTE6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAyMTI6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDIxMzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gMjE0OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gMjE1OlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gMjE2OlxcdFxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuIDIxNzpcXHRcXHRoZWxwXFxuIDIxODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgMTAvMjUvNDAvNTAgZ2lnYWJpdFxcbiAyMTk6XFx0XFx0ICBFdGhlcm5ldCBjYXJkcy4gIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6XFxuIDIyMDpcXHRcXHQgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYm54dF9lbi4gIFRoaXMgaXMgcmVjb21tZW5kZWQuXFxuIDIyMTpcXHRcXG4gMjIyOlxcdGNvbmZpZyBCTlhUX1NSSU9WXFxuIDIyMzpcXHRcXHRib29sIFxcXCJCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIFNSLUlPViBzdXBwb3J0XFxcIlxcbiAyMjQ6XFx0XFx0ZGVwZW5kcyBvbiBCTlhUIFxcdTAwMjZcXHUwMDI2IFBDSV9JT1ZcXG4gMjI1OlxcdFxcdGRlZmF1bHQgeVxcbiAyMjY6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0Nzo1MS44NzM1ODE0MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyNjA0MDM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgQk5YVCBEcml2ZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgQk5YVGAgc2VsZWN0cyBgQVVYSUxJQVJZX0JVU2AuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpbml0aWFsbHksIGl0IGxvb2tzIGxpa2Ugb25seSBgQk5YVGAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZy4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyByZW1pbmQgbWUgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGZ1enotd29ydGh5IGFuZCBkb2N1bWVudCBldmVyeXRoaW5nIG1ldGljdWxvdXNseS5cblxuVGhlIGluc3RydWN0aW9ucyBzYXk6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZVwiLiBJIHJlbWVtYmVyIHRoZSBjcml0aWNhbCBuZWVkIHRvIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBcImdvdGNoYXNcIi4gSSBhbHNvIG11c3QgXCJFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzXCIgYW5kIFwiSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXCJcblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9uIGZvY3VzZXMgb24gYGJueHRfYXV4X2RldmljZXNfaW5pdGAuIExldCdzIGNvbmZpcm06IFllcCwgYSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhhdCdzIHRoZSBvbmx5IGZ1bmN0aW9uIGJlaW5nIHRvdWNoZWQuIFNvLCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgLiBOb3csIGlzIHRoaXMgYSBob3QtcGF0aCBmdW5jdGlvbj8gTm8sIGl0J3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGNhbGxlZCBkdXJpbmcgUENJIHByb2JlLCBzbyBpdCBpcyBwcm9iYWJseSBmaW5lLlxuXG5Ob3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQgZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGZpbmQgdGhlc2UgdHlwZXMgb2YgYnVncy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LlxuXG5MZXQncyBjaXJjbGUgYmFjay4gYEJOWFRgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZy4gQnV0LCBhcmUgdGhlcmUgKm90aGVyKiBjb25maWdzIHRoYXQgYWxzbyBlbmFibGUgb3IgaW5mbHVlbmNlIHRoZSBleGVjdXRpb24gb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGA/IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgZnVydGhlciBkZXBlbmRlbmNpZXMuIFRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IHRob3NlIHNwZWNpZmljIGNvbmZpZ3MsIHdpdGhvdXQgbWFraW5nIGFueSBhc3N1bXB0aW9ucy4gTm8gZ2VuZXJpYyBzdHVmZjsgSSdtIG9ubHkgaW50ZXJlc3RlZCBpbiB0aG9zZSBjb25maWdzIHRoYXQgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjU4LjM5OTYyNDY1NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDcxNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJueHRfYXV4X2RldmljZXNfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjk0NT1zdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzEzMC1cXHRpZiAoIWJueHRfYXV4ZGV2X2lkX2FsbG9jKGJwKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzEzMTpcXHRcXHRibnh0X2F1eF9kZXZpY2VzX2luaXQoYnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMyLVxcdHJjID0gYm54dF9zZXRfZGZsdF9yaW5ncyhicCwgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NTI1PXZvaWQgYm54dF9hdXhfZGV2aWNlc19hZGQoc3RydWN0IGJueHQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTU0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTQ5OnZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTUwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6NTguNTExNzAwNDk5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDY5NTM5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYGJueHRfdWxwLmNgKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjb21waWxhdGlvbiBzY29wZSBvZiBgYm54dF91bHAuY2AuIE15IGluaXRpYWwgaHVuY2ggd2FzIHRoYXQgaXQgbWlnaHQgYmUgdGllZCB0byBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBwcm9iYWJseSBgQ09ORklHX0JOWFRgLiBJIG5lZWQgdG8gY29uZmlybS4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIGl0IGxpdmVzLCBvaCB5ZXMsIGl0J3MgZGVmaW5pdGVseSBpbiBgYm54dF91bHAuY2AuIEJ1dCBpcyB0aGF0IGZpbGUgKmFsd2F5cyogY29tcGlsZWQ/IEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgTWFrZWZpbGUuLi4gYWgsIHRoZXJlIGl0IGlzISBgYm54dF9lbi15IDo9IGJueHQubyBibnh0X2h3cm0ubyBibnh0X3NyaW92Lm8gYm54dF9ldGh0b29sLm8gYm54dF9kY2IubyBibnh0X3VscC5vIC4uLmAgT2theSwgc28gaXQgbG9va3MgbGlrZSBpdCAqaXMqIGFsd2F5cyBjb21waWxlZCBhcyBwYXJ0IG9mIGBibnh0X2VuLXlgLiBOb3csIG15IG5leHQgdGhvdWdodCBpcywgSSBuZWVkIHRvIGNoZWNrIGlmIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGlzIGd1YXJkZWQgYnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGlmIHN0YXRlbWVudHMsIGJ1dCBmb3Igbm93IEkga25vdyB0aGF0IGl0IGlzIGluIGZhY3QgYWx3YXlzIGNvbXBpbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxOSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0ODowMi42MTg2NTU5MzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHRcXHRcXHRcXHRcXHRcXHRicC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJOWFRfRkxBR19ST0NFX0NBUDtcXG4gNTQxOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1NDI6XFx0XFx0XFx0XFx0fVxcbiA1NDM6XFx0XFx0XFx0XFx0Ym54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9BREQpO1xcbiA1NDQ6XFx0XFx0XFx0fVxcbiA1NDU6XFx0XFx0fVxcbiA1NDY6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZicC1cXHUwMDNlYXV4ZGV2X2xvY2spO1xcbiA1NDc6XFx0fVxcbiA1NDg6XFx0XFxuIDU0OTpcXHR2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXFxuIDU1MDpcXHR7XFxuIDU1MTpcXHRcXHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4X2RldjtcXG4gNTUyOlxcdFxcdHN0cnVjdCBibnh0X2F1eF9wcml2ICphdXhfcHJpdjtcXG4gNTUzOlxcdFxcdHN0cnVjdCBibnh0X2VuX2RldiAqZWRldjtcXG4gNTU0OlxcdFxcdHN0cnVjdCBibnh0X3VscCAqdWxwO1xcbiA1NTU6XFx0XFx0aW50IHJjLCBpZHg7XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJwLVxcdTAwM2VhdXhkZXZfbG9jayk7XFxuIDU1ODpcXHRcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIF9fQk5YVF9BVVhERVZfTUFYOyBpZHgrKykge1xcbiA1NTk6XFx0XFx0XFx0Ym54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9OT05FKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDg6MDIuNjE4NzQ0NDE5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQzNzc1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gYW5kIFJETUEgRGVwZW5kZW5jeSBpbiBibnh0X2F1eF9kZXZpY2VzX2luaXQqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgSSBkb24ndCBzZWUgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIChgI2lmZGVmYCkgZ3VhcmRpbmcgdGhlIGNhbGwgdG8gYGJueHRfYXV4X2RldmljZXNfaW5pdGAuIFRoYXQncyBhIGxpdHRsZSB1bnVzdWFsLCBJJ2QgZXhwZWN0IHRvIHNlZSBzb21lIHNvcnQgb2YgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW4gdGhpcyBzZWN0aW9uLiBVc3VhbGx5LCB3ZSdkIGhhdmUgYSBjaGVjayBmb3Igc3BlY2lmaWMgZmVhdHVyZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgYmVmb3JlIGluaXRpYWxpemluZyBhdXhpbGlhcnkgZGV2aWNlcy5cblxuV2FpdCBhIHNlY29uZOKApiBpcyB0aGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gUkRNQSBzdXBwb3J0PyBUaGUgZnVuY3Rpb24gbmFtZSBkb2VzbuKAmXQgaW1tZWRpYXRlbHkgc2NyZWFtIOKAnFJETUEs4oCdIGJ1dCBpdCdzIG1ha2luZyBtZSB0aGluayBhYm91dCBgQk5YVF9BVVhERVZfUkRNQWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIFJETUEgaXMgKnJlcXVpcmVkKiBmb3IgdGhpcyBpbml0aWFsaXphdGlvbiBvciBpZiBpdCdzIGp1c3QgYW4gKm9wdGlvbiouIElmIGl0J3MgdGhlIGxhdHRlciwgdGhlIGxhY2sgb2YgYW4gYCNpZmRlZmAgbWFrZXMgc2Vuc2UsIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBnZW5lcmFsIGF1eGlsaWFyeSBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIHJlZ2FyZGxlc3Mgb2YgUkRNQSBwcmVzZW5jZS5cblxuVG8gY2xlYXIgdGhpcyB1cCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGlzIGNhbGxlZCBhbmQgd2hhdCBgYm54dF9hdXhfZGV2aWNlc2AgaXMgYWxsIGFib3V0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBsYWNrIG9mIGEgcHJlcHJvY2Vzc29yIGd1YXJkIGlzIGNvcnJlY3Qgb3IgYSBwb3RlbnRpYWwgYnVnIHRoYXQgbmVlZHMgYWRkcmVzc2luZy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgb25lIGJhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTY2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0ODowNi4zODMxMjQ2NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTE3ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJueHRfYXV4X2RldmljZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9MTY1MTE9c3RhdGljIHZvaWQgYm54dF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY1MTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY1MTk6XFx0Ym54dF9hdXhfZGV2aWNlc19kZWwoYnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NTIwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY1MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY1MjQ6XFx0Ym54dF9hdXhfZGV2aWNlc191bmluaXQoYnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NTI1LVxcdGJueHRfYXV4ZGV2X2lkX2ZyZWUoYnAsIGJwLVxcdTAwM2VhdXhkZXZfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9MTY5NDU9c3RhdGljIGludCBibnh0X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcxMzAtXFx0aWYgKCFibnh0X2F1eGRldl9pZF9hbGxvYyhicCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTcxMzE6XFx0XFx0Ym54dF9hdXhfZGV2aWNlc19pbml0KGJwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzEzMi1cXHRyYyA9IGJueHRfc2V0X2RmbHRfcmluZ3MoYnAsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcxOTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTcxOTY6XFx0Ym54dF9hdXhfZGV2aWNlc19hZGQoYnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTk3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcyMDMtaW5pdF9lcnJfY2xlYW51cDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzIwNDpcXHRibnh0X2F1eF9kZXZpY2VzX3VuaW5pdChicCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcyMDUtXFx0Ym54dF9hdXhkZXZfaWRfZnJlZShicCwgYnAtXFx1MDAzZWF1eGRldl9pZCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NDY9c3RhdGljIGJvb2wgYm54dF9hdXhkZXZfaXNfYWN0aXZlKHN0cnVjdCBibnh0ICpicCwgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTE6c3RhdGljIHN0cnVjdCBibnh0X2F1eF9kZXZpY2UgYm54dF9hdXhfZGV2aWNlc1tfX0JOWFRfQVVYREVWX01BWF0gPSB7e1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01Mi1cXHQubmFtZVxcdFxcdD0gXFxcInJkbWFcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTQ1Mj1FWFBPUlRfU1lNQk9MKGJueHRfcmVnaXN0ZXJfYXN5bmNfZXZlbnRzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNDUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo0NTQ6dm9pZCBibnh0X2F1eF9kZXZpY2VzX3VuaW5pdChzdHJ1Y3QgYm54dCAqYnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NDcxPXN0YXRpYyB2b2lkIGJueHRfYXV4X2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy00ODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jOjQ4NDp2b2lkIGJueHRfYXV4X2RldmljZXNfZGVsKHN0cnVjdCBibnh0ICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNDg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYz00OTg9c3RhdGljIHZvaWQgYm54dF9zZXRfZWRldl9pbmZvKHN0cnVjdCBibnh0X2VuX2RldiAqZWRldiwgc3RydWN0IGJueHQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTUyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTI1OnZvaWQgYm54dF9hdXhfZGV2aWNlc19hZGQoc3RydWN0IGJueHQgKmJwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01MjYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTU0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTQ5OnZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTUwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01ODItXFx0XFx0YXV4X2Rldi1cXHUwMDNlaWQgPSBicC1cXHUwMDNlYXV4ZGV2X2lkO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo1ODM6XFx0XFx0YXV4X2Rldi1cXHUwMDNlbmFtZSA9IGJueHRfYXV4X2RldmljZXNbaWR4XS5uYW1lO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01ODQtXFx0XFx0YXV4X2Rldi1cXHUwMDNlZGV2LnBhcmVudCA9IFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0ODowNi40ODgwNTIwMzNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NDExMDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEF1eGlsaWFyeSBEZXZpY2UgQXJyYXkqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBibnh0X2F1eF9kZXZpY2VzYCBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIGNvbnRleHQsIHRoYXQgdGhpcyBhcnJheSBsaWtlbHkgaG9sZHMgaW5mb3JtYXRpb24gY3J1Y2lhbCB0byB0aGUgcHJvcGVyIG9wZXJhdGlvbiBvZiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lIGFkYXB0ZXJzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgdGhpcyBhcnJheSBpcyBwb3B1bGF0ZWQgYW5kIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIGl0LiBBcmUgd2UgZGVhbGluZyB3aXRoIHJlZ2lzdGVyZWQgZGV2aWNlcywgcGVyaGFwcyByZXByZXNlbnRpbmcgYXV4aWxpYXJ5IGZ1bmN0aW9ucyB3aXRoaW4gYSBsYXJnZXIgcGh5c2ljYWwgTklDLCBvciBhcmUgd2UgZXhhbWluaW5nIGEgZGlmZmVyZW50IGFzcGVjdCBvZiBoYXJkd2FyZSBjb25maWd1cmF0aW9uPyBLbm93aW5nIHRoZSBzdHJ1Y3R1cmUgYW5kIHB1cnBvc2Ugb2YgYGJueHRfYXV4X2RldmljZXNgIGlzIGZ1bmRhbWVudGFsIHRvIHRyb3VibGVzaG9vdGluZyBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6aW5nIHRoZSBzeXN0ZW0ncyBwZXJmb3JtYW5jZS4gTXkgYW5hbHlzaXMgd2lsbCBzdGFydCBmcm9tIHRoYXQgZnVuZGFtZW50YWwgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzczLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDg6MDkuNDMyMTYzOTQ1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0NjpcXHRzdGF0aWMgYm9vbCBibnh0X2F1eGRldl9pc19hY3RpdmUoc3RydWN0IGJueHQgKmJwLCBpbnQgaWR4KVxcbiAgNDc6XFx0e1xcbiAgNDg6XFx0XFx0cmV0dXJuIChicC1cXHUwMDNlYXV4ZGV2X3N0YXRlW2lkeF0gPT0gQk5YVF9BREVWX1NUQVRFX0FERCk7XFxuICA0OTpcXHR9XFxuICA1MDpcXHRcXG4gIDUxOlxcdHN0YXRpYyBzdHJ1Y3QgYm54dF9hdXhfZGV2aWNlIGJueHRfYXV4X2RldmljZXNbX19CTlhUX0FVWERFVl9NQVhdID0ge3tcXG4gIDUyOlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwicmRtYVxcXCIsXFxuICA1MzpcXHR9LCB7XFxuICA1NDpcXHRcXHQubmFtZVxcdFxcdD0gXFxcImZ3Y3RsXFxcIixcXG4gIDU1OlxcdH19O1xcbiAgNTY6XFx0XFxuICA1NzpcXHRzdGF0aWMgdm9pZCBibnh0X2ZpbGxfbXNpeF92ZWNzKHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfbXNpeF9lbnRyeSAqZW50KVxcbiAgNTg6XFx0e1xcbiAgNTk6XFx0XFx0c3RydWN0IGJueHRfZW5fZGV2ICplZGV2ID0gYnAtXFx1MDAzZWVkZXZbQk5YVF9BVVhERVZfUkRNQV07XFxuICA2MDpcXHRcXHRpbnQgbnVtX21zaXgsIGk7XFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdGlmICghZWRldi1cXHUwMDNldWxwX3RibC1cXHUwMDNlbXNpeF9yZXF1ZXN0ZWQpIHtcXG4gIDYzOlxcdFxcdFxcdG5ldGRldl93YXJuKGJwLVxcdTAwM2VkZXYsIFxcXCJSZXF1ZXN0ZWQgTVNJLVggdmVjdG9ycyBpbnN1ZmZpY2llbnRcXFxcblxcXCIpO1xcbiAgNjQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAgNjU6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0ODowOS40MzIyNDEyNTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyODA1MDg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJETUEgYW5kIEZXQ1RMIEluaXRpYWxpemF0aW9uIGluIHRoZSBCTlhUIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYm90aCBcInJkbWFcIiBhbmQgXCJmd2N0bFwiIGluIHRoZSBtaXguIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBhcmUgdGhlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzdGVwcyBuZWNlc3NhcnkgZm9yIFJETUEgdG8gd29yayBwcm9wZXJseSB3aXRoIHRoaXMgc2V0dXA/XG5cblRoZW4gSSBub3RpY2UgdGhhdCBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBnZXRzIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgd2l0aGluIGBibnh0X2luaXRfb25lYC4gUmlnaHQsIHRoYXQncyBpbXBvcnRhbnQuIEl0IGN5Y2xlcyB0aHJvdWdoIGEgbWF4aW11bSBvZiBgX19CTlhUX0FVWERFVl9NQVhgIGFuZCBpbml0aWFsaXplcyB0aGUgYXV4aWxpYXJ5IGRldmljZXMuIFNvLCBhcyBsb25nIGFzIGBCTlhUYCBpcyBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgZXhlY3V0ZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBSRE1BIGlzIGV4cGxpY2l0bHkgY29uZmlndXJlZC5cblxuVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgaXRzZWxmIHJlcXVpcmUgYW55IHBhcnRpY3VsYXIgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIG9yIGEgY2VydGFpbiBzZXR1cCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMzQsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0ODoxMy4yNjAyOTQ4NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTg6XFx0XFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBfX0JOWFRfQVVYREVWX01BWDsgaWR4KyspIHtcXG4gNTU5OlxcdFxcdFxcdGJueHRfYXV4ZGV2X3NldF9zdGF0ZShicCwgaWR4LCBCTlhUX0FERVZfU1RBVEVfTk9ORSk7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdFxcdGlmIChpZHggPT0gQk5YVF9BVVhERVZfUkRNQSBcXHUwMDI2XFx1MDAyNlxcbiA1NjI6XFx0XFx0XFx0ICAgICEoYnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQk5YVF9GTEFHX1JPQ0VfQ0FQKSlcXG4gNTYzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRcXHRhdXhfcHJpdiA9IGt6YWxsb2Nfb2JqKCphdXhfcHJpdik7XFxuIDU2NjpcXHRcXHRcXHRpZiAoIWF1eF9wcml2KVxcbiA1Njc6XFx0XFx0XFx0XFx0Z290byBuZXh0X2F1eGRldjtcXG4gNTY4OlxcdFxcbiA1Njk6XFx0XFx0XFx0ZWRldiA9IGt6YWxsb2Nfb2JqKCplZGV2KTtcXG4gNTcwOlxcdFxcdFxcdGlmICghZWRldilcXG4gNTcxOlxcdFxcdFxcdFxcdGdvdG8gYXV4X3ByaXZfZnJlZTtcXG4gNTcyOlxcdFxcdFxcdGF1eF9wcml2LVxcdTAwM2VlZGV2ID0gZWRldjtcXG4gNTczOlxcdFxcdFxcdGJueHRfc2V0X2VkZXZfaW5mbyhlZGV2LCBicCk7XFxuIDU3NDpcXHRcXG4gNTc1OlxcdFxcdFxcdHVscCA9IGt6YWxsb2Nfb2JqKCp1bHApO1xcbiA1NzY6XFx0XFx0XFx0aWYgKCF1bHApXFxuIDU3NzpcXHRcXHRcXHRcXHRnb3RvIGVkZXZfZnJlZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDg6MTMuMjYwNDM0MzkyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNTU5OTgxMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBCTlhUIEF1eGlsaWFyeSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IFwiQWgsIHRoZSBgaWYgKGlkeCA9PSBCTlhUX0FVWERFVl9SRE1BIFx1MDAyNlx1MDAyNiAhKGJwLVx1MDAzZWZsYWdzIFx1MDAyNiBCTlhUX0ZMQUdfUk9DRV9DQVApKSBjb250aW51ZTtgIGxpbmUgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IFJETUEgcmVxdWlyZXMgdGhlIGBCTlhUX0ZMQUdfUk9DRV9DQVBgIGZsYWcsIGJ1dCB0aGUgYGZ3Y3RsYCBjYXNlIGRvZXNuJ3QgY2hlY2sgYW55IGZsYWdzLCBpdCBqdXN0IHByb2NlZWRzIVwiIFRoaXMgc2VlbWVkIHBvdGVudGlhbGx5IGltcG9ydGFudC4gVGhlbiBJIHJlbWVtYmVyZWQgYF9fQk5YVF9BVVhERVZfTUFYYCBpcyAyLCBzbyB0aGUgYGZ3Y3RsYCBjYXNlIChgaWR4ID0gMWApIGFsd2F5cyBnb2VzIHRocm91Z2guIFRoYXQgbWVhbnMgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGV2ZW4gd2l0aG91dCBST0NFLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLCByaWdodD9cblxuVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgLiBUaGF0J3MgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gdGFyZ2V0LlxuXG5OZXh0LCB3aGF0IGNvbmZpZ3MgYXJlIG5lZWRlZD8gSSBrbm93IHRoaXMgaXMgaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCBzbyBJJ20gcHJldHR5IGNlcnRhaW4gYEJOWFRgIGlzIHRoZSBjcml0aWNhbCBjb25maWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueS4gU28sIEkgcmFuIHRocm91Z2ggdGhlIGNoZWNrbGlzdCBpbiBteSBoZWFkOiBgQk5YVF9TUklPVmA/IE5vLiBgQk5YVF9GTE9XRVJfT0ZGTE9BRGA/IE5vLiBgQk5YVF9EQ0JgPyBOby4gYEJOWFRfSFdNT05gPyBOby4gYFBDSWA/IFllcywgYnV0IGl0J3MgZ2VuZXJpYyBzbyBpdCdzIHByb2JhYmx5IGFscmVhZHkgb24uIGBBVVhJTElBUllfQlVTYD8gWWVzLCBidXQgYEJOWFRgIHNlbGVjdHMgaXQuIFNvLCBqdXN0IGBCTlhUYC5cblxuSXMgdGhpcyByZWFsbHkgd29ydGggZnV6emluZz8gWWVzLCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YC4gSXQgcmVvcmRlcnMgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCwgc28gdGhlIGVycm9yIGhhbmRsaW5nIGlzIG5vdyBjb3JyZWN0LiBJdCdzIGEgZnVuY3Rpb25hbCBmaXggdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlLiBUaGlzIHNlZW1zIGxpa2UgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdmlhIFBDSSBlbXVsYXRpb24uXG5cbkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB0aGUgY29kZSBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0J3MgY2hhbmdlZC4gVGhlIGRpZmYgY29uZmlybXMgdGhhdCBpdCdzIHRoZSBvbmx5IG9uZSB0aGF0IG5lZWRzIHRvIGJlIGZvY3VzZWQgb24uIEkgYWxzbyBtYWRlIHN1cmUgdGhhdCBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpc24ndCBzdGF0aWMsIGl0IGlzIGRlY2xhcmVkIGluIGBibnh0X3VscC5oYCBhbmQgdXNlZCBpbiBgYm54dC5jYCwgc28gaXQgaXMgdGhlIGNvcnJlY3Qgc3ltYm9sIG5hbWUuXG5cbkZpbmFsbHksIEkgcmV2aWV3ZWQgdGhlIGluc3RydWN0aW9ucy4gSSBuZWVkIHRvOlxuLSBFeHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBgRm9jdXNTeW1ib2xzYC4gRG9uZS5cbi0gQXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIERvbmUuXG4tIElkZW50aWZ5IHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb25zIGZvciB0aGUgbW9kaWZpZWQgY29kZS4gRG9uZS5cbi0gQXZvaWQgZ2VuZXJpYyBjb25maWdzLiBEb25lLlxuXG5JJ20gY29uZmlkZW50IGluIHRoZXNlIHJlc3VsdHMgbm93OlxuXG5gYGBcbkZvY3VzU3ltYm9sczogW1wiYm54dF9hdXhfZGV2aWNlc19pbml0XCJdXG5FbmFibGVDb25maWdzOiBbXCJCTlhUXCJdXG5Xb3J0aEZ1enppbmc6IHRydWVcblJlYXNvbmluZzogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgYnkgcmVvcmRlcmluZyBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlIGFuZCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi5cIlxuYGBgXG5cbk9rYXksIG5vdyBsZXQncyBzdWJtaXQgdGhlc2UgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMDksIk91dHB1dFRva2VucyI6MTE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ4OjI2LjgyMDQxNzYzN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjcyNzE2OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJOWFRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibnh0X2F1eF9kZXZpY2VzX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBieSByZW9yZGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQQ0kgcHJvYmUgYW5kIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBQQ0kgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJOWFRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibnh0X2F1eF9kZXZpY2VzX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBieSByZW9yZGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQQ0kgcHJvYmUgYW5kIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBQQ0kgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowvpkmz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-12 08:28:36 +0000 UTC FinishedAt: 2026-07-12 08:48:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BNXT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3f1f755366687d051174739fb99f7d560202f60b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BNXT" ], "series_id": "e96de2f7-1ae9-4604-9a0b-91e65966743f" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "bnxt_aux_devices_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JOWFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibnh0X2F1eF9kZXZpY2VzX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgYnkgcmVvcmRlcmluZyBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlIGFuZCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM5NzViZTBlZGFjOGYxZDQwYTMyYTViMjFhNzFhZWFlNDYzYmRjNWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxMiAwODo0NzowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmNcbmluZGV4IDVjNzUxOTMzZGE2YTlkLi5hNTE1YzM2OGJhYzAxNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jXG5AQCAtNTY2LDYgJiM0Mzs1NjYsMTggQEAgdm9pZCBibnh0X2F1eF9kZXZpY2VzX2luaXQoc3RydWN0IGJueHQgKmJwKVxuIFx0XHRpZiAoIWF1eF9wcml2KVxuIFx0XHRcdGdvdG8gbmV4dF9hdXhkZXY7XG4gXG4mIzQzO1x0XHRlZGV2ID0ga3phbGxvY19vYmooKmVkZXYpO1xuJiM0MztcdFx0aWYgKCFlZGV2KVxuJiM0MztcdFx0XHRnb3RvIGF1eF9wcml2X2ZyZWU7XG4mIzQzO1x0XHRhdXhfcHJpdi1cdTAwM2VlZGV2ID0gZWRldjtcbiYjNDM7XHRcdGJueHRfc2V0X2VkZXZfaW5mbyhlZGV2LCBicCk7XG4mIzQzO1xuJiM0MztcdFx0dWxwID0ga3phbGxvY19vYmooKnVscCk7XG4mIzQzO1x0XHRpZiAoIXVscClcbiYjNDM7XHRcdFx0Z290byBlZGV2X2ZyZWU7XG4mIzQzO1x0XHRlZGV2LVx1MDAzZXVscF90YmwgPSB1bHA7XG4mIzQzO1x0XHRhdXhfcHJpdi1cdTAwM2VpZCA9IGlkeDtcbiYjNDM7XG4gXHRcdGF1eF9kZXYgPSBcdTAwMjZhdXhfcHJpdi1cdTAwM2VhdXhfZGV2O1xuIFx0XHRhdXhfZGV2LVx1MDAzZWlkID0gYnAtXHUwMDNlYXV4ZGV2X2lkO1xuIFx0XHRhdXhfZGV2LVx1MDAzZW5hbWUgPSBibnh0X2F1eF9kZXZpY2VzW2lkeF0ubmFtZTtcbkBAIC01NzMsMzcgJiM0Mzs1ODUsMjYgQEAgdm9pZCBibnh0X2F1eF9kZXZpY2VzX2luaXQoc3RydWN0IGJueHQgKmJwKVxuIFx0XHRhdXhfZGV2LVx1MDAzZWRldi5yZWxlYXNlID0gYm54dF9hdXhfZGV2X3JlbGVhc2U7XG4gXG4gXHRcdHJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KGF1eF9kZXYpO1xuLVx0XHRpZiAocmMpIHtcbi1cdFx0XHRrZnJlZShhdXhfcHJpdik7XG4tXHRcdFx0Z290byBuZXh0X2F1eGRldjtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRnb3RvIHVscF9mcmVlO1xuIFx0XHRicC1cdTAwM2VhdXhfcHJpdltpZHhdID0gYXV4X3ByaXY7XG4gXG4gXHRcdC8qIEZyb20gdGhpcyBwb2ludCwgYWxsIGNsZWFudXAgd2lsbCBoYXBwZW4gdmlhIHRoZSAucmVsZWFzZVxuIFx0XHQgKiBjYWxsYmFjayBcdTAwMjYgYW55IGVycm9yIHVud2luZGluZyB3aWxsIG5lZWQgdG8gaW5jbHVkZSBhIGNhbGxcbiBcdFx0ICogdG8gYXV4aWxpYXJ5X2RldmljZV91bmluaXQuXG4gXHRcdCAqL1xuLVx0XHRlZGV2ID0ga3phbGxvY19vYmooKmVkZXYpO1xuLVx0XHRpZiAoIWVkZXYpXG4tXHRcdFx0Z290byBhdXhfZGV2X3VuaW5pdDtcbi1cbi1cdFx0YXV4X3ByaXYtXHUwMDNlZWRldiA9IGVkZXY7XG4tXHRcdGJueHRfc2V0X2VkZXZfaW5mbyhlZGV2LCBicCk7XG4tXG4tXHRcdHVscCA9IGt6YWxsb2Nfb2JqKCp1bHApO1xuLVx0XHRpZiAoIXVscClcbi1cdFx0XHRnb3RvIGF1eF9kZXZfdW5pbml0O1xuLVxuLVx0XHRlZGV2LVx1MDAzZXVscF90YmwgPSB1bHA7XG4gXHRcdGJwLVx1MDAzZWVkZXZbaWR4XSA9IGVkZXY7XG4gXHRcdGlmIChpZHggPT0gQk5YVF9BVVhERVZfUkRNQSlcbiBcdFx0XHRicC1cdTAwM2V1bHBfbnVtX21zaXhfd2FudCA9IGJueHRfc2V0X2RmbHRfdWxwX21zaXgoYnApO1xuLVx0XHRhdXhfcHJpdi1cdTAwM2VpZCA9IGlkeDtcbiBcdFx0Ym54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9JTklUKTtcbiBcbiBcdFx0Y29udGludWU7XG4tYXV4X2Rldl91bmluaXQ6XG4tXHRcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KGF1eF9kZXYpO1xuJiM0Mzt1bHBfZnJlZTpcbiYjNDM7XHRcdGtmcmVlKHVscCk7XG4mIzQzO2VkZXZfZnJlZTpcbiYjNDM7XHRcdGtmcmVlKGVkZXYpO1xuJiM0MzthdXhfcHJpdl9mcmVlOlxuJiM0MztcdFx0a2ZyZWUoYXV4X3ByaXYpO1xuIG5leHRfYXV4ZGV2OlxuIFx0XHRpZiAoaWR4ID09IEJOWFRfQVVYREVWX1JETUEpXG4gXHRcdFx0YnAtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+Qk5YVF9GTEFHX1JPQ0VfQ0FQO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JOWFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibnh0X2F1eF9kZXZpY2VzX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgYnkgcmVvcmRlcmluZyBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlIGFuZCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYzk3NWJlMGVkYWM4ZjFkNDBhMzJhNWIyMWE3MWFlYWU0NjNiZGM1ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDEyIDA4OjQ3OjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jCmluZGV4IDVjNzUxOTMzZGE2YTlkLi5hNTE1YzM2OGJhYzAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYwpAQCAtNTY2LDYgJiM0Mzs1NjYsMTggQEAgdm9pZCBibnh0X2F1eF9kZXZpY2VzX2luaXQoc3RydWN0IGJueHQgKmJwKQogCQlpZiAoIWF1eF9wcml2KQogCQkJZ290byBuZXh0X2F1eGRldjsKIAomIzQzOwkJZWRldiA9IGt6YWxsb2Nfb2JqKCplZGV2KTsKJiM0MzsJCWlmICghZWRldikKJiM0MzsJCQlnb3RvIGF1eF9wcml2X2ZyZWU7CiYjNDM7CQlhdXhfcHJpdi0mZ3Q7ZWRldiA9IGVkZXY7CiYjNDM7CQlibnh0X3NldF9lZGV2X2luZm8oZWRldiwgYnApOwomIzQzOwomIzQzOwkJdWxwID0ga3phbGxvY19vYmooKnVscCk7CiYjNDM7CQlpZiAoIXVscCkKJiM0MzsJCQlnb3RvIGVkZXZfZnJlZTsKJiM0MzsJCWVkZXYtJmd0O3VscF90YmwgPSB1bHA7CiYjNDM7CQlhdXhfcHJpdi0mZ3Q7aWQgPSBpZHg7CiYjNDM7CiAJCWF1eF9kZXYgPSAmYW1wO2F1eF9wcml2LSZndDthdXhfZGV2OwogCQlhdXhfZGV2LSZndDtpZCA9IGJwLSZndDthdXhkZXZfaWQ7CiAJCWF1eF9kZXYtJmd0O25hbWUgPSBibnh0X2F1eF9kZXZpY2VzW2lkeF0ubmFtZTsKQEAgLTU3MywzNyAmIzQzOzU4NSwyNiBAQCB2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApCiAJCWF1eF9kZXYtJmd0O2Rldi5yZWxlYXNlID0gYm54dF9hdXhfZGV2X3JlbGVhc2U7CiAKIAkJcmMgPSBhdXhpbGlhcnlfZGV2aWNlX2luaXQoYXV4X2Rldik7Ci0JCWlmIChyYykgewotCQkJa2ZyZWUoYXV4X3ByaXYpOwotCQkJZ290byBuZXh0X2F1eGRldjsKLQkJfQomIzQzOwkJaWYgKHJjKQomIzQzOwkJCWdvdG8gdWxwX2ZyZWU7CiAJCWJwLSZndDthdXhfcHJpdltpZHhdID0gYXV4X3ByaXY7CiAKIAkJLyogRnJvbSB0aGlzIHBvaW50LCBhbGwgY2xlYW51cCB3aWxsIGhhcHBlbiB2aWEgdGhlIC5yZWxlYXNlCiAJCSAqIGNhbGxiYWNrICZhbXA7IGFueSBlcnJvciB1bndpbmRpbmcgd2lsbCBuZWVkIHRvIGluY2x1ZGUgYSBjYWxsCiAJCSAqIHRvIGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0LgogCQkgKi8KLQkJZWRldiA9IGt6YWxsb2Nfb2JqKCplZGV2KTsKLQkJaWYgKCFlZGV2KQotCQkJZ290byBhdXhfZGV2X3VuaW5pdDsKLQotCQlhdXhfcHJpdi0mZ3Q7ZWRldiA9IGVkZXY7Ci0JCWJueHRfc2V0X2VkZXZfaW5mbyhlZGV2LCBicCk7Ci0KLQkJdWxwID0ga3phbGxvY19vYmooKnVscCk7Ci0JCWlmICghdWxwKQotCQkJZ290byBhdXhfZGV2X3VuaW5pdDsKLQotCQllZGV2LSZndDt1bHBfdGJsID0gdWxwOwogCQlicC0mZ3Q7ZWRldltpZHhdID0gZWRldjsKIAkJaWYgKGlkeCA9PSBCTlhUX0FVWERFVl9SRE1BKQogCQkJYnAtJmd0O3VscF9udW1fbXNpeF93YW50ID0gYm54dF9zZXRfZGZsdF91bHBfbXNpeChicCk7Ci0JCWF1eF9wcml2LSZndDtpZCA9IGlkeDsKIAkJYm54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9JTklUKTsKIAogCQljb250aW51ZTsKLWF1eF9kZXZfdW5pbml0OgotCQlhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChhdXhfZGV2KTsKJiM0Mzt1bHBfZnJlZToKJiM0MzsJCWtmcmVlKHVscCk7CiYjNDM7ZWRldl9mcmVlOgomIzQzOwkJa2ZyZWUoZWRldik7CiYjNDM7YXV4X3ByaXZfZnJlZToKJiM0MzsJCWtmcmVlKGF1eF9wcml2KTsKIG5leHRfYXV4ZGV2OgogCQlpZiAoaWR4ID09IEJOWFRfQVVYREVWX1JETUEpCiAJCQlicC0mZ3Q7ZmxhZ3MgJmFtcDs9IH5CTlhUX0ZMQUdfUk9DRV9DQVA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0ODUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiA0NDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggdG8gYGJueHRfdWxwLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jYC4gSXQmIzM5O3MgZm9jdXNlZCBvbiB0aGUgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyBsaWtlIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlLiBUaGUgZ29hbCBoZXJlIGlzIHRvIGFkZHJlc3MgYSBtZW1vcnkgbGVhaywgdXNlLWFmdGVyLWZyZWUsIG9yIGEgcG90ZW50aWFsIGVycm9yIGhhbmRsaW5nIGZsYXcsIGxpa2VseSBpbnZvbHZpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGF1eGlsaWFyeSBkZXZpY2VzLgoKRXNzZW50aWFsbHksIHRoZSBwYXRjaCBpcyByZW9yZGVyaW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBpbiByZWxhdGlvbiB0byBjYWxscyB0byBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gTm93LCBJIHNlZSB0aGF0IGBlZGV2YCBhbmQgYHVscGAgYXJlIGFsbG9jYXRlZCAqYmVmb3JlKiBjYWxsaW5nIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhdHRlcm4gZm9yIHByZS1hbGxvY2F0aW5nIHdoYXQgeW91IG5lZWQsIGlzbiYjMzk7dCBpdD8KClRoZSBvcmlnaW5hbCBjb2RlLCB0aG91Z2guLi4gSSYjMzk7bSBsb29raW5nIGF0IGl0IG5vdy4gSXQgd2FzIHN0cnVjdHVyZWQgbGlrZSB0aGlzOiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCB3YXMgY2FsbGVkIGZpcnN0LiBJZiB0aGF0IGZhaWxlZCwgYGF1eF9wcml2YCB3YXMgZnJlZWQsIGFuZCB0aGUgcHJvY2VzcyBtb3ZlZCBvbi4gVGhlbiwgaWYgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgc3VjY2VlZGVkLCBgZWRldmAgYW5kIGB1bHBgIHdlcmUgYWxsb2NhdGVkLiBBbmQgaWYgKnRob3NlKiBmYWlsZWQsIGl0IHdvdWxkIGNhbGwgYGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0YC4KCkhtbS4uLiBJIHRoaW5rIEkmIzM5O20gc3RhcnRpbmcgdG8gc2VlIHRoZSBpc3N1ZS4gYGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0YCBpbmNsdWRlcyBhIGNhbGwgdG8gYHB1dF9kZXZpY2VgLCB3aGljaCB0cmlnZ2VycyB0aGUgcmVsZWFzZSBjYWxsYmFjaywgd2hpY2ggaXMgYGJueHRfYXV4X2Rldl9yZWxlYXNlYCBpbiB0aGlzIGNhc2UuIEFuZCAqdGhhdCogZnVuY3Rpb24sIGBibnh0X2F1eF9kZXZfcmVsZWFzZWAsIGZyZWVzIGBhdXhfcHJpdmAgYW5kIGl0cyBtZW1iZXJzLiBCdXQsIGlmIGBlZGV2YCBhbmQgYHVscGAgd2VyZW4mIzM5O3QgZnVsbHkgb3IgcGVyaGFwcyBldmVuIHBhcnRpYWxseSBhbGxvY2F0ZWQsIHNvbWV0aGluZyBpbiBgYm54dF9hdXhfZGV2X3JlbGVhc2VgIHdhcyBwcm9iYWJseSB0cnlpbmcgdG8gZnJlZSB0aGVtLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRvdWJsZS1mcmVlLCB1c2UtYWZ0ZXItZnJlZSwgb3Igc29tZSBvdGhlciBtZW1vcnkgY29ycnVwdGlvbi4gU28sIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdHJ5aW5nIHRvIGF2b2lkIHRoYXQuCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGJueHRfYXV4X2Rldl9yZWxlYXNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtibnh0X2F1eF9kZXZfcmVsZWFzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYz00NTQ9dm9pZCBibnh0X2F1eF9kZXZpY2VzX3VuaW5pdChzdHJ1Y3QgYm54dCAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ3MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo0NzE6c3RhdGljIHZvaWQgYm54dF9hdXhfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ3Mi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTU0OT12b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTU4NC1cdFx0YXV4X2Rldi1cdTAwM2VkZXYucGFyZW50ID0gXHUwMDI2YnAtXHUwMDNlcGRldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTg1Olx0XHRhdXhfZGV2LVx1MDAzZWRldi5yZWxlYXNlID0gYm54dF9hdXhfZGV2X3JlbGVhc2U7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTg2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MTUKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBGb2N1cyoqCgpBbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gcmVhZCB0aGUgYGJueHRfYXV4X2Rldl9yZWxlYXNlYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGl0IG1ha2VzIG1lIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IHdoYXQgdGhpcyBmaWxlICppcyogYW5kIGl0cyBjb250ZXh0LiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgJiMzNDtibnh0JiMzNDsgbGlrZWx5IHBvaW50cyB0b3dhcmRzIEJyb2FkY29tJiMzOTtzIE5ldFh0cmVtZSBuZXR3b3JrIGFkYXB0ZXJzIOKAkyBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkcml2ZXJzIG9yIHV0aWxpdGllcyBmb3IgdGhvc2UuICYjMzQ7YXV4X2RldiYjMzQ7IHN1Z2dlc3RzIGF1eGlsaWFyeSBkZXZpY2Ugb3Igc29tZXRoaW5nIHN1cHBvcnRpbmcgdGhlIG1haW4gbmV0d29yayBpbnRlcmZhY2UsIGFuZCAmIzM0O3JlbGVhc2UmIzM0OyBpcyBqdXN0IHRoZSB2ZXJzaW9uIG9yIHBhY2thZ2UgbmFtZS4gT2theSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gZ2V0IHRoZSB1c3VhbCBzdXNwZWN0cyAtLSB0aGUgY2hhbmdlbG9nLCBhIGxpc3Qgb2Yga25vd24gaXNzdWVzLCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLCBkcml2ZXIgdXBkYXRlcywgYW5kIHBvc3NpYmx5IHNvbWUgZGV0YWlscyBvbiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMuCkkgd2FudCB0byBleGFtaW5lIHRoaXMgZmlsZSB0aG9yb3VnaGx5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgbmV3IGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGludGVncmF0ZWQgaW50byBteSBleGlzdGluZyBrbm93bGVkZ2ViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjU6XHRcdFx0XHRhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdChhZGV2KTtcbiA0NjY6XHRcdFx0fVxuIDQ2NzpcdFx0fVxuIDQ2ODpcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmJwLVx1MDAzZWF1eGRldl9sb2NrKTtcbiA0Njk6XHR9XG4gNDcwOlx0XG4gNDcxOlx0c3RhdGljIHZvaWQgYm54dF9hdXhfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxuIDQ3MjpcdHtcbiA0NzM6XHRcdHN0cnVjdCBibnh0X2F1eF9wcml2ICphdXhfcHJpdiA9XG4gNDc0Olx0XHRcdGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBibnh0X2F1eF9wcml2LCBhdXhfZGV2LmRldik7XG4gNDc1Olx0XHRzdHJ1Y3QgYm54dCAqYnAgPSBuZXRkZXZfcHJpdihhdXhfcHJpdi1cdTAwM2VlZGV2LVx1MDAzZW5ldCk7XG4gNDc2Olx0XG4gNDc3Olx0XHRrZnJlZShhdXhfcHJpdi1cdTAwM2VlZGV2LVx1MDAzZXVscF90YmwpO1xuIDQ3ODpcdFx0YnAtXHUwMDNlZWRldlthdXhfcHJpdi1cdTAwM2VpZF0gPSBOVUxMO1xuIDQ3OTpcdFx0a2ZyZWUoYXV4X3ByaXYtXHUwMDNlZWRldik7XG4gNDgwOlx0XHRicC1cdTAwM2VhdXhfcHJpdlthdXhfcHJpdi1cdTAwM2VpZF0gPSBOVUxMO1xuIDQ4MTpcdFx0a2ZyZWUoYXV4X3ByaXYpO1xuIDQ4MjpcdH1cbiA0ODM6XHRcbiA0ODQ6XHR2b2lkIGJueHRfYXV4X2RldmljZXNfZGVsKHN0cnVjdCBibnh0ICpicClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gYm54dF9hdXhfZGV2X3JlbGVhc2UqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGdvaW5nIG9uLiBJIHNlZSBgYm54dF9hdXhfZGV2X3JlbGVhc2VgIGRlcmVmZXJlbmNpbmcgYGF1eF9wcml2LSZndDtlZGV2LSZndDtuZXRgLiBSaWdodCBhd2F5LCB0aGUgYWxhcm0gYmVsbHMgYXJlIHJpbmdpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpZiBgZWRldmAgd2FzbiYjMzk7dCBwcm9wZXJseSBhbGxvY2F0ZWQg4oCTIHNwZWNpZmljYWxseSwgaWYgdGhhdCBga3phbGxvY19vYmooKmVkZXYpO2AgY2FsbCBmYWlsZWQg4oCTIHRoZW4gYGF1eF9wcml2LSZndDtlZGV2YCB3aWxsIGJlIE5VTEwuIEFuZCBiYW0sIHdlJiMzOTt2ZSBnb3Qgb3Vyc2VsdmVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdpdGggYGF1eF9wcml2LSZndDtlZGV2LSZndDtuZXRgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgLgoKVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzLCBpcyB0aGlzIGNvZGUgcGF0aCByZWFjaGFibGU/IFllYWgsIGl0IGlzLiBUaGUgZXJyb3IgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgdGhpcyBhcmUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSwgd2hpY2ggaXMgYWx3YXlzIHBvc3NpYmxlLCBvciBpZiB0aGUgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgZnVuY3Rpb24gZmFpbHMsIHdoaWNoIGlzIGxlc3MgY29tbW9uIGJ1dCBjYW4gc3RpbGwgaGFwcGVuLgoKV2FpdCwgaWYgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgZmFpbHMsIHdoYXQmIzM5O3Mgc3VwcG9zZWQgdG8gaGFwcGVuPyBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlOgoKYGBgYwoJCXJjID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KGF1eF9kZXYpOwoJCWlmIChyYykKCQkJZ290byB1bHBfZnJlZTsKYGBgCgpTbywgaXQganVtcHMgdG8gYHVscF9mcmVlYC4gSG1tbSwgaWYgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgZmFpbHMsIGRvZXMgdGhhdCBuZWNlc3NpdGF0ZSBhIGNhbGwgdG8gYGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0YD8gR2VuZXJhbGx5LCBpZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmYWlscywgaXQgbmVlZHMgYSBgcHV0X2RldmljZWAgb3IgZXF1aXZhbGVudC4gQnV0IEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGZvciBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gVGhlIGRvY3MgZm9yIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIHNheSB0aGF0ICYjMzQ7SWYgYXV4aWxpYXJ5X2RldmljZV9pbml0KCkgcmV0dXJucyBhbiBlcnJvciwgdGhlIGNhbGxlciBtdXN0IGNhbGwgcHV0X2RldmljZSgpIG9uIHRoZSBkZXZpY2UuJiMzNDsuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBpbmRpY2F0b3IuIEJ1dCBJJiMzOTtsbCBjb25maXJtIHRoYXQuIEkmIzM5O2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBzb3VyY2UgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3MgaG93IGl0IGlzIGhhbmRsZWQgaW4gcHJhY3RpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXV4aWxpYXJ5X2RldmljZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0xMTAtICogVGhlIHBhcmVudCBkZXZpY2UgdGhlbiByZWdpc3RlcnMgdGhlIGF1eGlsaWFyeV9kZXZpY2UgYnkgY2FsbGluZ1xuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jOjExMTogKiBhdXhpbGlhcnlfZGV2aWNlX2luaXQoKSwgYW5kIHRoZW4gYXV4aWxpYXJ5X2RldmljZV9hZGQoKSwgd2l0aCB0aGUgcG9pbnRlclxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTExMi0gKiB0byB0aGUgYXV4ZGV2IG1lbWJlciBvZiB0aGUgYWJvdmUgc3RydWN0dXJlLiBUaGUgcGFyZW50IHByb3ZpZGVzIGEgbmFtZSBmb3Jcbi0tXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmM9MjQ5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgYXV4aWxpYXJ5X2J1c190eXBlID0ge1xuLS1cbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0yNTgtLyoqXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmM6MjU5OiAqIGF1eGlsaWFyeV9kZXZpY2VfaW5pdCAtIGNoZWNrIGF1eGlsaWFyeV9kZXZpY2UgYW5kIGluaXRpYWxpemVcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0yNjAtICogQGF1eGRldjogYXV4aWxpYXJ5IGRldmljZSBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMjc0LSAqL1xuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jOjI3NTppbnQgYXV4aWxpYXJ5X2RldmljZV9pbml0KHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMjc2LXtcbi0tXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMjkzLX1cbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYzoyOTQ6RVhQT1JUX1NZTUJPTF9HUEwoYXV4aWxpYXJ5X2RldmljZV9pbml0KTtcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0yOTUtXG4tLVxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTMwNC0gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmM6MzA1OiAqIGF1eGlsaWFyeV9kZXZpY2VfaW5pdCgpLCB3aGljaCB3aWxsIHBlcmZvcm0gdGhlIGRldmljZV9pbml0aWFsaXplLiAgVGhpc1xuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTMwNi0gKiBtZWFucyB0aGF0IGlmIHRoaXMgcmV0dXJucyBhbiBlcnJvciBjb2RlLCB0aGVuIGEgY2FsbCB0b1xuLS1cbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYz00MDg9c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGlsaWFyeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtNDI3LVxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jOjQyODpcdHJldCA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChhdXhkZXYpO1xuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTQyOS1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTY3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIERvY3VtZW50YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgc3VnZ2VzdHMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgYnJpbmdpbmcgdXAgc29tZSBraW5kIG9mIHNlY29uZGFyeSBoYXJkd2FyZSBvciBwZXJpcGhlcmFsLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzIChkYXRhIHN0cnVjdHVyZXMsIGhhbmRsZXMsIHdoYXRldmVyIGl0IHRha2VzKSwgYW5kLCBjcml0aWNhbGx5LCBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIHByZS1yZXF1aXNpdGVzPyBEb2VzIGl0IHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUgc3RhdGVzIG9yIGNvbmZpZ3VyYXRpb25zIGVzdGFibGlzaGVkIGJ5IGVhcmxpZXIgcm91dGluZXM/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBhbmQgZmFpbHVyZSBtb2RlcyDigJMgaG93IGRvZXMgaXQgaGFuZGxlIGludmFsaWQgaW5wdXQsIHVuYXZhaWxhYmxlIHJlc291cmNlcywgb3IgdW5leHBlY3RlZCBoYXJkd2FyZSByZXNwb25zZXM/IEVycm9yIGNvZGVzIGFyZSBrZXkuIEkmIzM5O20gYWxzbyBpbnRlcmVzdGVkIGluIGFueSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcyBpdCBtaWdodCBlbXBsb3ksIGVzcGVjaWFsbHkgaWYgdGhpcyBpbml0aWFsaXphdGlvbiBpbnZvbHZlcyBzaGFyZWQgcmVzb3VyY2VzIG9yIGludGVyYWN0aW9uIHdpdGggaW50ZXJydXB0IGhhbmRsZXJzLiBSYWNlIGNvbmRpdGlvbnMgYXJlIGFsd2F5cyBhIGNvbmNlcm4uCgpGcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUsIEkmIzM5O2xsIGJlIHRyeWluZyB0byBncmFzcCB0aGUgZXhlY3V0aW9uIHRpbWUgaW1wbGljYXRpb25zLiBJcyB0aGlzIGEgYmxvY2tpbmcgY2FsbCwgb3IgZG9lcyBpdCBzcGF3biBhc3luY2hyb25vdXMgb3BlcmF0aW9ucz8gQW5kIGZpbmFsbHksIHdoYXQmIzM5O3MgdGhlIHR5cGljYWwgdXNhZ2UgcGF0dGVybj8gSG93IGRvZXMgaXQgaW50ZWdyYXRlIHdpdGggdGhlIGJyb2FkZXIgc3lzdGVtIGFyY2hpdGVjdHVyZT8gSSYjMzk7bGwgcHJvYmFibHkgYmUgYWJsZSB0byBnbGVhbiB0aGlzIHRocm91Z2ggZXhhbWluaW5nIHRoZSBjYWxsIGNvbnRleHQgYW5kIGFueSBleGFtcGxlIGNvZGUgcHJvdmlkZWQuIEdldHRpbmcgYSBnb29kIHVuZGVyc3RhbmRpbmcgb2YgYWxsIG9mIHRoZXNlIGl0ZW1zIHdpbGwgYWxsb3cgbWUgdG8gYmVnaW4gdG8gYXJjaGl0ZWN0IGEgc3Ryb25nIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjU4Olx0LyoqXG4gMjU5Olx0ICogYXV4aWxpYXJ5X2RldmljZV9pbml0IC0gY2hlY2sgYXV4aWxpYXJ5X2RldmljZSBhbmQgaW5pdGlhbGl6ZVxuIDI2MDpcdCAqIEBhdXhkZXY6IGF1eGlsaWFyeSBkZXZpY2Ugc3RydWN0XG4gMjYxOlx0ICpcbiAyNjI6XHQgKiBUaGlzIGlzIHRoZSBzZWNvbmQgc3RlcCBpbiB0aGUgdGhyZWUtc3RlcCBwcm9jZXNzIHRvIHJlZ2lzdGVyIGFuXG4gMjYzOlx0ICogYXV4aWxpYXJ5X2RldmljZS5cbiAyNjQ6XHQgKlxuIDI2NTpcdCAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHRoZW4gdGhlIGRldmljZV9pbml0aWFsaXplIHdpbGxcbiAyNjY6XHQgKiAqbm90KiBoYXZlIGJlZW4gcGVyZm9ybWVkLCBhbmQgdGhlIGNhbGxlciB3aWxsIGJlIHJlc3BvbnNpYmxlIHRvIGZyZWUgYW55XG4gMjY3Olx0ICogbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIGF1eGlsaWFyeV9kZXZpY2UgaW4gdGhlIGVycm9yIHBhdGggZGlyZWN0bHkuXG4gMjY4Olx0ICpcbiAyNjk6XHQgKiBJdCByZXR1cm5zIDAgb24gc3VjY2Vzcy4gIE9uIHN1Y2Nlc3MsIHRoZSBkZXZpY2VfaW5pdGlhbGl6ZSBoYXMgYmVlblxuIDI3MDpcdCAqIHBlcmZvcm1lZC4gIEFmdGVyIHRoaXMgcG9pbnQgYW55IGVycm9yIHVud2luZGluZyB3aWxsIG5lZWQgdG8gaW5jbHVkZSBhIGNhbGxcbiAyNzE6XHQgKiB0byBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdCgpLiAgSW4gdGhpcyBwb3N0LWluaXRpYWxpemUgZXJyb3Igc2NlbmFyaW8sIGEgY2FsbFxuIDI3MjpcdCAqIHRvIHRoZSBkZXZpY2UmIzM5O3MgLnJlbGVhc2UgY2FsbGJhY2sgd2lsbCBiZSB0cmlnZ2VyZWQsIGFuZCBhbGwgbWVtb3J5IGNsZWFuLXVwXG4gMjczOlx0ICogaXMgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCB0aGVyZS5cbiAyNzQ6XHQgKi9cbiAyNzU6XHRpbnQgYXV4aWxpYXJ5X2RldmljZV9pbml0KHN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhkZXYpXG4gMjc2Olx0e1xuIDI3NzpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2YXV4ZGV2LVx1MDAzZWRldjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI2OAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDk3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYm54dCBEcml2ZXIgRXJyb3IgSGFuZGxpbmcgRml4KioKCk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgYW4gaW1wb3J0YW50IGZpeCBpbiB0aGUgYGJueHRgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjb3JlIGlzc3VlIGlzIGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gSXQgc2VlbXMgdGhlIGRyaXZlciB3YXNuJiMzOTt0IHByb3Blcmx5IGNsZWFuaW5nIHVwIG1lbW9yeSBpZiB0aGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkICphZnRlciogc29tZSBtZW1vcnkgaGFkIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQsIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgY3Jhc2guCgpNeSB0aG91Z2h0IHByb2Nlc3MgaXMgdGhpczogVGhlIHByb2JsZW0gc3RlbXMgZnJvbSBhIGNyaXRpY2FsIG1pc3VuZGVyc3RhbmRpbmcgb2YgdGhlIGVycm9yIGhhbmRsaW5nIGZsb3cuIElmIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIGZhaWxzLCB0aGUgYGRldmljZV9pbml0aWFsaXplYCBpcyAqbmV2ZXIqIHBlcmZvcm1lZCwgYW5kIHRoZSByZXNwb25zaWJpbGl0eSB0byBjbGVhbiB1cCBiZWxvbmdzIHRvIHRoZSBjYWxsZXIsIG5vdCB0aGUgYHB1dF9kZXZpY2VgLgoKTG9va2luZyBhdCB0aGUgbmV3IGNvZGUsIGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBjbGVhbnVwOyBpZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmYWlscywgaXQganVtcHMgdG8gYSBgdWxwX2ZyZWVgIGxhYmVsLCB3aGljaCBhcHByb3ByaWF0ZWx5IGZyZWVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBTaW1wbGUgYW5kIGNvcnJlY3QuIFRoZSBmaXggbW92ZXMgdGhlIGFsbG9jYXRpb24gb2YgYGVkZXZgIGFuZCBgdWxwYCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gdGhlIGVycm9yIGhhbmRsaW5nLgoKQnV0IHRoZSBvbGQgY29kZSwgaG93ZXZlciwgaGFkIGEgZmxhdy4gSXQgbG9va3MgbGlrZSBpdCB3YXMgYXR0ZW1wdGluZyB0byBjYWxsIGBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdGAgYW5kIGBwdXRfZGV2aWNlYCBpbiB0aGUgZXJyb3IgcGF0aCwgYnV0IGl0IHdhcyBkb2luZyBzbyBhZnRlciBhIGZhaWxlZCBgZWRldmAgYWxsb2NhdGlvbi4gVGhpcyBjYXVzZWQgYSBgTlVMTGAgcG9pbnRlciBkZXJlZmVyZW5jZSBiZWNhdXNlIGBhdXhfcHJpdi0mZ3Q7ZWRldmAgd2FzIGJlaW5nIGFjY2Vzc2VkIGJlZm9yZSBpdCB3YXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIGBibnh0X2F1eF9kZXZfcmVsZWFzZWAsIHBhcnQgb2YgdGhlIGNsZWFudXAsIHdhcyB0cnlpbmcgdG8gZGVyZWZlcmVuY2UgYSBgTlVMTGAgcG9pbnRlci4gVGhhdCYjMzk7cyB0aGUgYnVnLgoKVGhlIG5ldyBjb2RlIGNvcnJlY3RseSBmaXhlcyB0aGlzIGJ5IGFsbG9jYXRpbmcgYGVkZXZgIGFuZCBgdWxwYCAqYmVmb3JlKiBjYWxsaW5nIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLCB3aGljaCBpcyB0aGUgZml4LiBGcm9tIGEgZnVuY3Rpb25hbCBwZXJzcGVjdGl2ZSwgdGhlIHBhdGNoIGFkZHJlc3NlcyBhIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBlcnJvciBwYXRoLiBQcmV0dHkgaW1wb3J0YW50IGZvciByZWxpYWJpbGl0eS4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkhIEEgbmV0d29yayBkcml2ZXIsIHNwZWNpZmljYWxseSBvbmUgZGVhbGluZyB3aXRoIGVycm9yIHBhdGhzLCBpcyBhIHByaW1lIHRhcmdldC4gVGhlIGZhY3QgdGhhdCB0aGUgYGJueHRgIGRyaXZlciAoQnJvYWRjb20gTmV0WHRyZW1lLUMvRSkgaXMgYSBQQ0kgZHJpdmVyIHJhaXNlcyBhIHF1ZXN0aW9uIGFib3V0IHJlYWNoYWJpbGl0eSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBQQ0kgZHJpdmVycyByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlIG9yIGdvb2QgUENJIGVtdWxhdGlvbi4gRG9lcyBRRU1VIGVtdWxhdGUgYGJueHRgPyBVbmxpa2VseS4gU3l6a2FsbGVyLCBhIGtlcm5lbCBmdXp6ZXIsIG9mdGVuIGNhbiYjMzk7dCByZWFjaCB0aG9zZSBkcml2ZXJzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgdW5sZXNzIGl0JiMzOTtzIHVzaW5nIGFkdmFuY2VkIHRlY2huaXF1ZXMgbGlrZSBgdmhjaWAgb3IgYHZmaW9gIGZvciBQQ0kgZGV2aWNlIGVtdWxhdGlvbi4KCkFoYSEgVGhlbiwgSSBzYXcgdGhlIGF1dGhvciBvZiB0aGUgY29tbWl0IGlzIGBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7YC4gV2FpdCBhIHNlY29uZC4uLiB0aGF0JiMzOTtzIFN5emthbGxlciEgVGhlIGZhY3QgdGhhdCBTeXprYWxsZXIgZm91bmQgdGhpcyBidWcgbWVhbnMgaXQgSVMgcmVhY2hhYmxlIGluIHRoZWlyIGVudmlyb25tZW50LiBXaGljaCBtZWFucyB0aGlzIGlzIGRlZmluaXRlbHkgZnV6emVyLXdvcnRoeSwgYXMgU3l6a2FsbGVyIG11c3QgaGF2ZSBzb21lIHNvcnQgb2YgUENJIGZ1enppbmcgZ29pbmcgb24sIG1heWJlIHRocm91Z2ggdGhlIGBzeXpfcGNpX2RldmljZWAgaW50ZXJmYWNlLiBNYXliZSB0aGlzIGlzIHRyaWdnZXJlZCB2aWEgc29tZSBvdGhlciBwYXRoPyBJIHNob3VsZCBjaGVjayBgYm54dF9hdXhfZGV2aWNlc19pbml0YCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JueHRfYXV4X2RldmljZXNfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE2OTQ1PXN0YXRpYyBpbnQgYm54dF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzEzMC1cdGlmICghYm54dF9hdXhkZXZfaWRfYWxsb2MoYnApKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTcxMzE6XHRcdGJueHRfYXV4X2RldmljZXNfaW5pdChicCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzEzMi1cdHJjID0gYm54dF9zZXRfZGZsdF9yaW5ncyhicCwgdHJ1ZSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTUyNT12b2lkIGJueHRfYXV4X2RldmljZXNfYWRkKHN0cnVjdCBibnh0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTQ4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jOjU0OTp2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTUwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI3MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBUYXJnZXQgRnVuY3Rpb24qKgoKT2theSwgc28gdGhpcyBgYm54dF9pbml0X29uZWAgZnVuY3Rpb24sIHRoYXQmIzM5O3MgY2FsbGVkIGZyb20gdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiwgcmlnaHQ/IE1ha2VzIHNlbnNlLiBBbmQgd2Uga25vdyB0aGF0IFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyLCB0aGF0IHRoaW5nIGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLCB3aGljaCB0aGVuIHRyaWdnZXJzIHRoZXNlIHByb2JlIGZ1bmN0aW9ucy4gU28sIHllYWgsICpkZWZpbml0ZWx5KiByZWFjaGFibGUuIFRoZSBuZXh0IHN0ZXAgaXMgYWx3YXlzIHRoZSBzYW1lOiBGaW5kIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IHdlIG5lZWQgdG8gbWFrZSB0aGlzIGFsbCB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQk5YVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0xOTU9Y29uZmlnIFNZU1RFTVBPUlRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjA3OmNvbmZpZyBCTlhUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIwOC1cdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIE5ldFh0cmVtZS1DL0Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjIxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMjI6Y29uZmlnIEJOWFRfU1JJT1ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjIzLVx0Ym9vbCBcJiMzNDtCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIFNSLUlPViBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIzMTpjb25maWcgQk5YVF9GTE9XRVJfT0ZGTE9BRFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yMzItXHRib29sIFwmIzM0O1RDIEZsb3dlciBvZmZsb2FkIHN1cHBvcnQgZm9yIE5ldFh0cmVtZS1DL0VcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIzOS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjQwOmNvbmZpZyBCTlhUX0RDQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNDEtXHRib29sIFwmIzM0O0RhdGEgQ2VudGVyIEJyaWRnaW5nIChEQ0IpIFN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjUwOmNvbmZpZyBCTlhUX0hXTU9OXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7QnJvYWRjb20gTmV0WHRyZW1lLUMvRSBIV01PTiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4ODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipDb25kaXRpb25hbCBDb21waWxhdGlvbiBJbnZlc3RpZ2F0aW9uOiBgYm54dF91bHAuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZSBjb21waWxhdGlvbiBvZiBgYm54dF91bHAuY2AgaXMgZ292ZXJuZWQgYnkgYW55IGNvbmRpdGlvbmFsIGxvZ2ljLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBzdGVwIHdoZW4gZGVhbGluZyB3aXRoIGRyaXZlciBjb2RlLCBlc3BlY2lhbGx5IHdoZW4geW91IGVuY291bnRlciB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIGJ1aWxkIGlzc3Vlcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGlmIGNlcnRhaW4gZmVhdHVyZXMgb3IgZnVuY3Rpb25hbGl0aWVzIHdpdGhpbiB0aGF0IGZpbGUgYXJlIG9ubHkgaW5jbHVkZWQgdW5kZXIgc3BlY2lmaWMgYnVpbGQgY29uZmlndXJhdGlvbnMgb3Iga2VybmVsIHZlcnNpb25zLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBtYWtlZmlsZXMsIGNvbmZpZ3VyYXRpb24gaGVhZGVycywgYW5kIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IHN1cnJvdW5kIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBmaWxlLiBLbm93aW5nIHRoZSBjb25kaXRpb25zIHdpbGwgaGVscCBtZSBkaWFnbm9zZSBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGJ1aWxkIGVudmlyb25tZW50LiBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0sIGEgcGFydGljdWxhciBrZXJuZWwgdmVyc2lvbiwgYSBjZXJ0YWluIGRyaXZlciBtb2R1bGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym54dF91bHAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvTWFrZWZpbGU9Mj1vYmotJChDT05GSUdfQk5YVCkgJiM0Mzs9IGJueHRfZW4ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9NYWtlZmlsZS0zLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9NYWtlZmlsZTo0OmJueHRfZW4teSA6PSBibnh0Lm8gYm54dF9od3JtLm8gYm54dF9zcmlvdi5vIGJueHRfZXRodG9vbC5vIGJueHRfZGNiLm8gYm54dF91bHAubyBibnh0X3hkcC5vIGJueHRfcHRwLm8gYm54dF92ZnIubyBibnh0X2RldmxpbmsubyBibnh0X2RpbS5vIGJueHRfY29yZWR1bXAuLi5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvTWFrZWZpbGUtNS1ibnh0X2VuLSQoQ09ORklHX0JOWFRfRkxPV0VSX09GRkxPQUQpICYjNDM7PSBibnh0X3RjLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTMyNwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBEZXBlbmRlbmN5IG9mIGBibnh0X3VscC5vYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCB0aG91Z2h0IGhlcmUgaXMgdGhhdCBgYm54dF91bHAub2AgaXMgY29uc2lzdGVudGx5IGJ1aWx0IHdoZW4gYENPTkZJR19CTlhUYCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGEgZ2l2ZW4uIEhvd2V2ZXIsIHRoZSBuZXh0IHBpZWNlIG9mIHRoaXMgcHV6emxlIGlzIGNvbm5lY3RpbmcgaG93IGl0IGlzICphY3R1YWxseSogYnJvdWdodCBpbnRvIHRoZSBzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGluaXQgZnVuY3Rpb24gYW5kIGZpZ3VyZSBvdXQgaXRzIGRlcGVuZGVuY2llcy4KCk5vdywgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgY2FsbHMgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgcmluZ3MgYSBiZWxsLiBDb3VsZCB0aGUgYEJOWFRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGJlIHNlbGVjdGluZyBgQVVYSUxJQVJZX0JVU2A/IFRoYXQgY29ubmVjdGlvbiB3b3VsZCBleHBsYWluIGEgbG90LiBJdCYjMzk7cyBhIGtleSBxdWVzdGlvbiwgYW5kIHRoaXMgaXMgd2hlcmUgSSBuZWVkIHNvbGlkIGV2aWRlbmNlLgoKTXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBMZXQmIzM5O3MgZGVsdmUgaW50byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG1hZ2ljIGhhcHBlbnMsIGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYEJOWFRgLCBgQVVYSUxJQVJZX0JVU2AgYW5kIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBiZSBsYWlkIG91dC4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGlmIGl0IGNvbmZpZ3VyZXMgdGhlIGF1eGlsaWFyeSBidXMuIEl0IHNob3VsZCBiZSBhIHByZXR0eSBxdWljayBzZWFyY2ggZm9yIHRoZSBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjA3Olx0Y29uZmlnIEJOWFRcbiAyMDg6XHRcdHRyaXN0YXRlIFwmIzM0O0Jyb2FkY29tIE5ldFh0cmVtZS1DL0Ugc3VwcG9ydFwmIzM0O1xuIDIwOTpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAyMTA6XHRcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbiAyMTE6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAyMTI6XHRcdHNlbGVjdCBDUkMzMlxuIDIxMzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gMjE0Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gMjE1Olx0XHRzZWxlY3QgRElNTElCXG4gMjE2Olx0XHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xuIDIxNzpcdFx0aGVscFxuIDIxODpcdFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIDEwLzI1LzQwLzUwIGdpZ2FiaXRcbiAyMTk6XHRcdCAgRXRoZXJuZXQgY2FyZHMuICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOlxuIDIyMDpcdFx0ICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJueHRfZW4uICBUaGlzIGlzIHJlY29tbWVuZGVkLlxuIDIyMTpcdFxuIDIyMjpcdGNvbmZpZyBCTlhUX1NSSU9WXG4gMjIzOlx0XHRib29sIFwmIzM0O0Jyb2FkY29tIE5ldFh0cmVtZS1DL0UgU1ItSU9WIHN1cHBvcnRcJiMzNDtcbiAyMjQ6XHRcdGRlcGVuZHMgb24gQk5YVCBcdTAwMjZcdTAwMjYgUENJX0lPVlxuIDIyNTpcdFx0ZGVmYXVsdCB5XG4gMjI2Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBCTlhUIERyaXZlciBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCBgQk5YVGAgc2VsZWN0cyBgQVVYSUxJQVJZX0JVU2AuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpbml0aWFsbHksIGl0IGxvb2tzIGxpa2Ugb25seSBgQk5YVGAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZy4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyByZW1pbmQgbWUgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGZ1enotd29ydGh5IGFuZCBkb2N1bWVudCBldmVyeXRoaW5nIG1ldGljdWxvdXNseS4KClRoZSBpbnN0cnVjdGlvbnMgc2F5OiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2ggdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUmIzM0Oy4gSSByZW1lbWJlciB0aGUgY3JpdGljYWwgbmVlZCB0byBpZGVudGlmeSBhbnkgZGVwZW5kZW5jaWVzIGFuZCBwb3RlbnRpYWwgJiMzNDtnb3RjaGFzJiMzNDsuIEkgYWxzbyBtdXN0ICYjMzQ7RXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scyYjMzQ7IGFuZCAmIzM0O0lkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLiYjMzQ7CgpUaGUgY29kZSBtb2RpZmljYXRpb24gZm9jdXNlcyBvbiBgYm54dF9hdXhfZGV2aWNlc19pbml0YC4gTGV0JiMzOTtzIGNvbmZpcm06IFllcCwgYSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhhdCYjMzk7cyB0aGUgb25seSBmdW5jdGlvbiBiZWluZyB0b3VjaGVkLiBTbywgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgYm54dF9hdXhfZGV2aWNlc19pbml0YC4gTm93LCBpcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IE5vLCBpdCYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgY2FsbGVkIGR1cmluZyBQQ0kgcHJvYmUsIHNvIGl0IGlzIHByb2JhYmx5IGZpbmUuCgpOb3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQgZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGZpbmQgdGhlc2UgdHlwZXMgb2YgYnVncy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LgoKTGV0JiMzOTtzIGNpcmNsZSBiYWNrLiBgQk5YVGAgaXMgdGhlIHByaW1hcnkgY29uZmlnLiBCdXQsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3MgdGhhdCBhbHNvIGVuYWJsZSBvciBpbmZsdWVuY2UgdGhlIGV4ZWN1dGlvbiBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YD8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgZnVydGhlciBkZXBlbmRlbmNpZXMuIFRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IHRob3NlIHNwZWNpZmljIGNvbmZpZ3MsIHdpdGhvdXQgbWFraW5nIGFueSBhc3N1bXB0aW9ucy4gTm8gZ2VuZXJpYyBzdHVmZjsgSSYjMzk7bSBvbmx5IGludGVyZXN0ZWQgaW4gdGhvc2UgY29uZmlncyB0aGF0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym54dF9hdXhfZGV2aWNlc19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9MTY5NDU9c3RhdGljIGludCBibnh0X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMwLVx0aWYgKCFibnh0X2F1eGRldl9pZF9hbGxvYyhicCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzEzMTpcdFx0Ym54dF9hdXhfZGV2aWNlc19pbml0KGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMyLVx0cmMgPSBibnh0X3NldF9kZmx0X3JpbmdzKGJwLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NTI1PXZvaWQgYm54dF9hdXhfZGV2aWNlc19hZGQoc3RydWN0IGJueHQgKmJwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTQ5OnZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01NTAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxOQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBDb21waWxhdGlvbiBvZiBgYm54dF91bHAuY2AqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29tcGlsYXRpb24gc2NvcGUgb2YgYGJueHRfdWxwLmNgLiBNeSBpbml0aWFsIGh1bmNoIHdhcyB0aGF0IGl0IG1pZ2h0IGJlIHRpZWQgdG8gYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgcHJvYmFibHkgYENPTkZJR19CTlhUYC4gSSBuZWVkIHRvIGNvbmZpcm0uIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB3aGVyZSBpdCBsaXZlcywgb2ggeWVzLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGluIGBibnh0X3VscC5jYC4gQnV0IGlzIHRoYXQgZmlsZSAqYWx3YXlzKiBjb21waWxlZD8gSSBuZWVkIHRvIGtub3cgaWYgdGhlcmUmIzM5O3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIE1ha2VmaWxlLi4uIGFoLCB0aGVyZSBpdCBpcyEgYGJueHRfZW4teSA6PSBibnh0Lm8gYm54dF9od3JtLm8gYm54dF9zcmlvdi5vIGJueHRfZXRodG9vbC5vIGJueHRfZGNiLm8gYm54dF91bHAubyAuLi5gIE9rYXksIHNvIGl0IGxvb2tzIGxpa2UgaXQgKmlzKiBhbHdheXMgY29tcGlsZWQgYXMgcGFydCBvZiBgYm54dF9lbi15YC4gTm93LCBteSBuZXh0IHRob3VnaHQgaXMsIEkgbmVlZCB0byBjaGVjayBpZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpcyBndWFyZGVkIGJ5IGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBvciBpZiBzdGF0ZW1lbnRzLCBidXQgZm9yIG5vdyBJIGtub3cgdGhhdCBpdCBpcyBpbiBmYWN0IGFsd2F5cyBjb21waWxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0MDpcdFx0XHRcdFx0XHRicC1cdTAwM2VmbGFncyBcdTAwMjY9IH5CTlhUX0ZMQUdfUk9DRV9DQVA7XG4gNTQxOlx0XHRcdFx0XHRjb250aW51ZTtcbiA1NDI6XHRcdFx0XHR9XG4gNTQzOlx0XHRcdFx0Ym54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9BREQpO1xuIDU0NDpcdFx0XHR9XG4gNTQ1Olx0XHR9XG4gNTQ2Olx0XHRtdXRleF91bmxvY2soXHUwMDI2YnAtXHUwMDNlYXV4ZGV2X2xvY2spO1xuIDU0NzpcdH1cbiA1NDg6XHRcbiA1NDk6XHR2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXG4gNTUwOlx0e1xuIDU1MTpcdFx0c3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eF9kZXY7XG4gNTUyOlx0XHRzdHJ1Y3QgYm54dF9hdXhfcHJpdiAqYXV4X3ByaXY7XG4gNTUzOlx0XHRzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXY7XG4gNTU0Olx0XHRzdHJ1Y3QgYm54dF91bHAgKnVscDtcbiA1NTU6XHRcdGludCByYywgaWR4O1xuIDU1NjpcdFxuIDU1NzpcdFx0bXV0ZXhfbG9jayhcdTAwMjZicC1cdTAwM2VhdXhkZXZfbG9jayk7XG4gNTU4Olx0XHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgX19CTlhUX0FVWERFVl9NQVg7IGlkeCYjNDM7JiM0MzspIHtcbiA1NTk6XHRcdFx0Ym54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9OT05FKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBhbmQgUkRNQSBEZXBlbmRlbmN5IGluIGJueHRfYXV4X2RldmljZXNfaW5pdCoqCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgSSBkb24mIzM5O3Qgc2VlIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyAoYCNpZmRlZmApIGd1YXJkaW5nIHRoZSBjYWxsIHRvIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwsIEkmIzM5O2QgZXhwZWN0IHRvIHNlZSBzb21lIHNvcnQgb2YgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW4gdGhpcyBzZWN0aW9uLiBVc3VhbGx5LCB3ZSYjMzk7ZCBoYXZlIGEgY2hlY2sgZm9yIHNwZWNpZmljIGZlYXR1cmVzIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zIGJlZm9yZSBpbml0aWFsaXppbmcgYXV4aWxpYXJ5IGRldmljZXMuCgpXYWl0IGEgc2Vjb25k4oCmIGlzIHRoaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBSRE1BIHN1cHBvcnQ/IFRoZSBmdW5jdGlvbiBuYW1lIGRvZXNu4oCZdCBpbW1lZGlhdGVseSBzY3JlYW0g4oCcUkRNQSzigJ0gYnV0IGl0JiMzOTtzIG1ha2luZyBtZSB0aGluayBhYm91dCBgQk5YVF9BVVhERVZfUkRNQWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIFJETUEgaXMgKnJlcXVpcmVkKiBmb3IgdGhpcyBpbml0aWFsaXphdGlvbiBvciBpZiBpdCYjMzk7cyBqdXN0IGFuICpvcHRpb24qLiBJZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCB0aGUgbGFjayBvZiBhbiBgI2lmZGVmYCBtYWtlcyBzZW5zZSwgYXNzdW1pbmcgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIGdlbmVyYWwgYXV4aWxpYXJ5IGRldmljZSBpbml0aWFsaXphdGlvbiwgcmVnYXJkbGVzcyBvZiBSRE1BIHByZXNlbmNlLgoKVG8gY2xlYXIgdGhpcyB1cCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGlzIGNhbGxlZCBhbmQgd2hhdCBgYm54dF9hdXhfZGV2aWNlc2AgaXMgYWxsIGFib3V0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBsYWNrIG9mIGEgcHJlcHJvY2Vzc29yIGd1YXJkIGlzIGNvcnJlY3Qgb3IgYSBwb3RlbnRpYWwgYnVnIHRoYXQgbmVlZHMgYWRkcmVzc2luZy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgb25lIGJhY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JueHRfYXV4X2RldmljZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjUxMT1zdGF0aWMgdm9pZCBibnh0X3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY1MTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNjUxOTpcdGJueHRfYXV4X2RldmljZXNfZGVsKGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NTIwLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NTIzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY1MjQ6XHRibnh0X2F1eF9kZXZpY2VzX3VuaW5pdChicCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNjUyNS1cdGJueHRfYXV4ZGV2X2lkX2ZyZWUoYnAsIGJwLVx1MDAzZWF1eGRldl9pZCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9MTY5NDU9c3RhdGljIGludCBibnh0X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMwLVx0aWYgKCFibnh0X2F1eGRldl9pZF9hbGxvYyhicCkpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzEzMTpcdFx0Ym54dF9hdXhfZGV2aWNlc19pbml0KGJwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMyLVx0cmMgPSBibnh0X3NldF9kZmx0X3JpbmdzKGJwLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzE5NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MTk2Olx0Ym54dF9hdXhfZGV2aWNlc19hZGQoYnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcxOTctXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcyMDMtaW5pdF9lcnJfY2xlYW51cDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MjA0Olx0Ym54dF9hdXhfZGV2aWNlc191bmluaXQoYnApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcyMDUtXHRibnh0X2F1eGRldl9pZF9mcmVlKGJwLCBicC1cdTAwM2VhdXhkZXZfaWQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYz00Nj1zdGF0aWMgYm9vbCBibnh0X2F1eGRldl9pc19hY3RpdmUoc3RydWN0IGJueHQgKmJwLCBpbnQgaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo1MTpzdGF0aWMgc3RydWN0IGJueHRfYXV4X2RldmljZSBibnh0X2F1eF9kZXZpY2VzW19fQk5YVF9BVVhERVZfTUFYXSA9IHt7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTItXHQubmFtZVx0XHQ9IFwmIzM0O3JkbWFcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTQ1Mj1FWFBPUlRfU1lNQk9MKGJueHRfcmVnaXN0ZXJfYXN5bmNfZXZlbnRzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy00NTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NDU0OnZvaWQgYm54dF9hdXhfZGV2aWNlc191bmluaXQoc3RydWN0IGJueHQgKmJwKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ1NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTQ3MT1zdGF0aWMgdm9pZCBibnh0X2F1eF9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ4My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo0ODQ6dm9pZCBibnh0X2F1eF9kZXZpY2VzX2RlbChzdHJ1Y3QgYm54dCAqYnApXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNDg1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NDk4PXN0YXRpYyB2b2lkIGJueHRfc2V0X2VkZXZfaW5mbyhzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXYsIHN0cnVjdCBibnh0ICpicClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jOjUyNTp2b2lkIGJueHRfYXV4X2RldmljZXNfYWRkKHN0cnVjdCBibnh0ICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01MjYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01NDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTQ5OnZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01NTAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01ODItXHRcdGF1eF9kZXYtXHUwMDNlaWQgPSBicC1cdTAwM2VhdXhkZXZfaWQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTgzOlx0XHRhdXhfZGV2LVx1MDAzZW5hbWUgPSBibnh0X2F1eF9kZXZpY2VzW2lkeF0ubmFtZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01ODQtXHRcdGF1eF9kZXYtXHUwMDNlZGV2LnBhcmVudCA9IFx1MDAyNmJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc3MwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBdXhpbGlhcnkgRGV2aWNlIEFycmF5KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBibnh0X2F1eF9kZXZpY2VzYCBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBjb250ZXh0LCB0aGF0IHRoaXMgYXJyYXkgbGlrZWx5IGhvbGRzIGluZm9ybWF0aW9uIGNydWNpYWwgdG8gdGhlIHByb3BlciBvcGVyYXRpb24gb2YgdGhlIEJyb2FkY29tIE5ldFh0cmVtZSBhZGFwdGVycy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB3aGVyZSB0aGlzIGFycmF5IGlzIHBvcHVsYXRlZCBhbmQgaG93IHRoZSBkcml2ZXIgaW50ZXJhY3RzIHdpdGggaXQuIEFyZSB3ZSBkZWFsaW5nIHdpdGggcmVnaXN0ZXJlZCBkZXZpY2VzLCBwZXJoYXBzIHJlcHJlc2VudGluZyBhdXhpbGlhcnkgZnVuY3Rpb25zIHdpdGhpbiBhIGxhcmdlciBwaHlzaWNhbCBOSUMsIG9yIGFyZSB3ZSBleGFtaW5pbmcgYSBkaWZmZXJlbnQgYXNwZWN0IG9mIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24/IEtub3dpbmcgdGhlIHN0cnVjdHVyZSBhbmQgcHVycG9zZSBvZiBgYm54dF9hdXhfZGV2aWNlc2AgaXMgZnVuZGFtZW50YWwgdG8gdHJvdWJsZXNob290aW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXppbmcgdGhlIHN5c3RlbSYjMzk7cyBwZXJmb3JtYW5jZS4gTXkgYW5hbHlzaXMgd2lsbCBzdGFydCBmcm9tIHRoYXQgZnVuZGFtZW50YWwgcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0NjpcdHN0YXRpYyBib29sIGJueHRfYXV4ZGV2X2lzX2FjdGl2ZShzdHJ1Y3QgYm54dCAqYnAsIGludCBpZHgpXG4gIDQ3Olx0e1xuICA0ODpcdFx0cmV0dXJuIChicC1cdTAwM2VhdXhkZXZfc3RhdGVbaWR4XSA9PSBCTlhUX0FERVZfU1RBVEVfQUREKTtcbiAgNDk6XHR9XG4gIDUwOlx0XG4gIDUxOlx0c3RhdGljIHN0cnVjdCBibnh0X2F1eF9kZXZpY2UgYm54dF9hdXhfZGV2aWNlc1tfX0JOWFRfQVVYREVWX01BWF0gPSB7e1xuICA1MjpcdFx0Lm5hbWVcdFx0PSBcJiMzNDtyZG1hXCYjMzQ7LFxuICA1MzpcdH0sIHtcbiAgNTQ6XHRcdC5uYW1lXHRcdD0gXCYjMzQ7ZndjdGxcJiMzNDssXG4gIDU1Olx0fX07XG4gIDU2Olx0XG4gIDU3Olx0c3RhdGljIHZvaWQgYm54dF9maWxsX21zaXhfdmVjcyhzdHJ1Y3QgYm54dCAqYnAsIHN0cnVjdCBibnh0X21zaXhfZW50cnkgKmVudClcbiAgNTg6XHR7XG4gIDU5Olx0XHRzdHJ1Y3QgYm54dF9lbl9kZXYgKmVkZXYgPSBicC1cdTAwM2VlZGV2W0JOWFRfQVVYREVWX1JETUFdO1xuICA2MDpcdFx0aW50IG51bV9tc2l4LCBpO1xuICA2MTpcdFxuICA2MjpcdFx0aWYgKCFlZGV2LVx1MDAzZXVscF90YmwtXHUwMDNlbXNpeF9yZXF1ZXN0ZWQpIHtcbiAgNjM6XHRcdFx0bmV0ZGV2X3dhcm4oYnAtXHUwMDNlZGV2LCBcJiMzNDtSZXF1ZXN0ZWQgTVNJLVggdmVjdG9ycyBpbnN1ZmZpY2llbnRcXG5cJiMzNDspO1xuICA2NDpcdFx0XHRyZXR1cm47XG4gIDY1Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEyIDA4OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzM0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUkRNQSBhbmQgRldDVEwgSW5pdGlhbGl6YXRpb24gaW4gdGhlIEJOWFQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIGJvdGggJiMzNDtyZG1hJiMzNDsgYW5kICYjMzQ7ZndjdGwmIzM0OyBpbiB0aGUgbWl4LiBUaGUgaW5pdGlhbCBxdWVzdGlvbiBpczogYXJlIHRoZXJlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc3RlcHMgbmVjZXNzYXJ5IGZvciBSRE1BIHRvIHdvcmsgcHJvcGVybHkgd2l0aCB0aGlzIHNldHVwPwoKVGhlbiBJIG5vdGljZSB0aGF0IGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGdldHMgY2FsbGVkIHVuY29uZGl0aW9uYWxseSB3aXRoaW4gYGJueHRfaW5pdF9vbmVgLiBSaWdodCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIEl0IGN5Y2xlcyB0aHJvdWdoIGEgbWF4aW11bSBvZiBgX19CTlhUX0FVWERFVl9NQVhgIGFuZCBpbml0aWFsaXplcyB0aGUgYXV4aWxpYXJ5IGRldmljZXMuIFNvLCBhcyBsb25nIGFzIGBCTlhUYCBpcyBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgZXhlY3V0ZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBSRE1BIGlzIGV4cGxpY2l0bHkgY29uZmlndXJlZC4KClRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uIE5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpdHNlbGYgcmVxdWlyZSBhbnkgcGFydGljdWxhciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgb3IgYSBjZXJ0YWluIHNldHVwIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU1ODpcdFx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIF9fQk5YVF9BVVhERVZfTUFYOyBpZHgmIzQzOyYjNDM7KSB7XG4gNTU5Olx0XHRcdGJueHRfYXV4ZGV2X3NldF9zdGF0ZShicCwgaWR4LCBCTlhUX0FERVZfU1RBVEVfTk9ORSk7XG4gNTYwOlx0XG4gNTYxOlx0XHRcdGlmIChpZHggPT0gQk5YVF9BVVhERVZfUkRNQSBcdTAwMjZcdTAwMjZcbiA1NjI6XHRcdFx0ICAgICEoYnAtXHUwMDNlZmxhZ3MgXHUwMDI2IEJOWFRfRkxBR19ST0NFX0NBUCkpXG4gNTYzOlx0XHRcdFx0Y29udGludWU7XG4gNTY0Olx0XG4gNTY1Olx0XHRcdGF1eF9wcml2ID0ga3phbGxvY19vYmooKmF1eF9wcml2KTtcbiA1NjY6XHRcdFx0aWYgKCFhdXhfcHJpdilcbiA1Njc6XHRcdFx0XHRnb3RvIG5leHRfYXV4ZGV2O1xuIDU2ODpcdFxuIDU2OTpcdFx0XHRlZGV2ID0ga3phbGxvY19vYmooKmVkZXYpO1xuIDU3MDpcdFx0XHRpZiAoIWVkZXYpXG4gNTcxOlx0XHRcdFx0Z290byBhdXhfcHJpdl9mcmVlO1xuIDU3MjpcdFx0XHRhdXhfcHJpdi1cdTAwM2VlZGV2ID0gZWRldjtcbiA1NzM6XHRcdFx0Ym54dF9zZXRfZWRldl9pbmZvKGVkZXYsIGJwKTtcbiA1NzQ6XHRcbiA1NzU6XHRcdFx0dWxwID0ga3phbGxvY19vYmooKnVscCk7XG4gNTc2Olx0XHRcdGlmICghdWxwKVxuIDU3NzpcdFx0XHRcdGdvdG8gZWRldl9mcmVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMiAwODo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwOQoJCQkJCQkJb3V0cHV0OiAxMTcKCQkJCQkJCXRob3VnaHRzOiAxNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBCTlhUIEF1eGlsaWFyeSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhczogJiMzNDtBaCwgdGhlIGBpZiAoaWR4ID09IEJOWFRfQVVYREVWX1JETUEgJmFtcDsmYW1wOyAhKGJwLSZndDtmbGFncyAmYW1wOyBCTlhUX0ZMQUdfUk9DRV9DQVApKSBjb250aW51ZTtgIGxpbmUgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IFJETUEgcmVxdWlyZXMgdGhlIGBCTlhUX0ZMQUdfUk9DRV9DQVBgIGZsYWcsIGJ1dCB0aGUgYGZ3Y3RsYCBjYXNlIGRvZXNuJiMzOTt0IGNoZWNrIGFueSBmbGFncywgaXQganVzdCBwcm9jZWVkcyEmIzM0OyBUaGlzIHNlZW1lZCBwb3RlbnRpYWxseSBpbXBvcnRhbnQuIFRoZW4gSSByZW1lbWJlcmVkIGBfX0JOWFRfQVVYREVWX01BWGAgaXMgMiwgc28gdGhlIGBmd2N0bGAgY2FzZSAoYGlkeCA9IDFgKSBhbHdheXMgZ29lcyB0aHJvdWdoLiBUaGF0IG1lYW5zIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSBldmVuIHdpdGhvdXQgUk9DRS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1enppbmcsIHJpZ2h0PwoKVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIHRhcmdldC4KCk5leHQsIHdoYXQgY29uZmlncyBhcmUgbmVlZGVkPyBJIGtub3cgdGhpcyBpcyBpbiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIsIHNvIEkmIzM5O20gcHJldHR5IGNlcnRhaW4gYEJOWFRgIGlzIHRoZSBjcml0aWNhbCBjb25maWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkuIFNvLCBJIHJhbiB0aHJvdWdoIHRoZSBjaGVja2xpc3QgaW4gbXkgaGVhZDogYEJOWFRfU1JJT1ZgPyBOby4gYEJOWFRfRkxPV0VSX09GRkxPQURgPyBOby4gYEJOWFRfRENCYD8gTm8uIGBCTlhUX0hXTU9OYD8gTm8uIGBQQ0lgPyBZZXMsIGJ1dCBpdCYjMzk7cyBnZW5lcmljIHNvIGl0JiMzOTtzIHByb2JhYmx5IGFscmVhZHkgb24uIGBBVVhJTElBUllfQlVTYD8gWWVzLCBidXQgYEJOWFRgIHNlbGVjdHMgaXQuIFNvLCBqdXN0IGBCTlhUYC4KCklzIHRoaXMgcmVhbGx5IHdvcnRoIGZ1enppbmc/IFllcywgdGhpcyBwYXRjaCBpcyBmaXhpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAuIEl0IHJlb3JkZXJzIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAsIHNvIHRoZSBlcnJvciBoYW5kbGluZyBpcyBub3cgY29ycmVjdC4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGZpeCB0aGF0IGNhbiBiZSByZWFjaGVkIGR1cmluZyBQQ0kgcHJvYmUuIFRoaXMgc2VlbXMgbGlrZSBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi4KCkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB0aGUgY29kZSBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQuIFRoZSBkaWZmIGNvbmZpcm1zIHRoYXQgaXQmIzM5O3MgdGhlIG9ubHkgb25lIHRoYXQgbmVlZHMgdG8gYmUgZm9jdXNlZCBvbi4gSSBhbHNvIG1hZGUgc3VyZSB0aGF0IGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGlzbiYjMzk7dCBzdGF0aWMsIGl0IGlzIGRlY2xhcmVkIGluIGBibnh0X3VscC5oYCBhbmQgdXNlZCBpbiBgYm54dC5jYCwgc28gaXQgaXMgdGhlIGNvcnJlY3Qgc3ltYm9sIG5hbWUuCgpGaW5hbGx5LCBJIHJldmlld2VkIHRoZSBpbnN0cnVjdGlvbnMuIEkgbmVlZCB0bzoKLSBFeHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBgRm9jdXNTeW1ib2xzYC4gRG9uZS4KLSBBdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gRG9uZS4KLSBJZGVudGlmeSBzcGVjaWZpYyBgQ09ORklHX2Agb3B0aW9ucyBmb3IgdGhlIG1vZGlmaWVkIGNvZGUuIERvbmUuCi0gQXZvaWQgZ2VuZXJpYyBjb25maWdzLiBEb25lLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgcmVzdWx0cyBub3c6CgpgYGAKRm9jdXNTeW1ib2xzOiBbJiMzNDtibnh0X2F1eF9kZXZpY2VzX2luaXQmIzM0O10KRW5hYmxlQ29uZmlnczogWyYjMzQ7Qk5YVCYjMzQ7XQpXb3J0aEZ1enppbmc6IHRydWUKUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBieSByZW9yZGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQQ0kgcHJvYmUgYW5kIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBQQ0kgZW11bGF0aW9uLiYjMzQ7CmBgYAoKT2theSwgbm93IGxldCYjMzk7cyBzdWJtaXQgdGhlc2UgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTIgMDg6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JOWFQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtibnh0X2F1eF9kZXZpY2VzX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgYnkgcmVvcmRlcmluZyBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlIGFuZCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk5YVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JueHRfYXV4X2RldmljZXNfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBieSByZW9yZGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQQ0kgcHJvYmUgYW5kIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBQQ0kgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6MDguNDA4NDg4NDc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEwNzkyMjIxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk5YVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJueHRfYXV4X2RldmljZXNfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHRoZSBlcnJvciBwYXRoIG9mIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGJ5IHJlb3JkZXJpbmcgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgZml4IGluIHRoZSBCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIGRyaXZlciwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFBDSSBwcm9iZSBhbmQgaXMgc3VpdGFibGUgZm9yIGZ1enppbmcgdmlhIFBDSSBlbXVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjA4LjQwODUwMjg2N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2Mzk4NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzk3NWJlMGVkYWM4ZjFkNDBhMzJhNWIyMWE3MWFlYWU0NjNiZGM1ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAxMiAwODo0NzowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmNcXG5pbmRleCA1Yzc1MTkzM2RhNmE5ZC4uYTUxNWMzNjhiYWMwMTUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jXFxuQEAgLTU2Niw2ICs1NjYsMTggQEAgdm9pZCBibnh0X2F1eF9kZXZpY2VzX2luaXQoc3RydWN0IGJueHQgKmJwKVxcbiBcXHRcXHRpZiAoIWF1eF9wcml2KVxcbiBcXHRcXHRcXHRnb3RvIG5leHRfYXV4ZGV2O1xcbiBcXG4rXFx0XFx0ZWRldiA9IGt6YWxsb2Nfb2JqKCplZGV2KTtcXG4rXFx0XFx0aWYgKCFlZGV2KVxcbitcXHRcXHRcXHRnb3RvIGF1eF9wcml2X2ZyZWU7XFxuK1xcdFxcdGF1eF9wcml2LVxcdTAwM2VlZGV2ID0gZWRldjtcXG4rXFx0XFx0Ym54dF9zZXRfZWRldl9pbmZvKGVkZXYsIGJwKTtcXG4rXFxuK1xcdFxcdHVscCA9IGt6YWxsb2Nfb2JqKCp1bHApO1xcbitcXHRcXHRpZiAoIXVscClcXG4rXFx0XFx0XFx0Z290byBlZGV2X2ZyZWU7XFxuK1xcdFxcdGVkZXYtXFx1MDAzZXVscF90YmwgPSB1bHA7XFxuK1xcdFxcdGF1eF9wcml2LVxcdTAwM2VpZCA9IGlkeDtcXG4rXFxuIFxcdFxcdGF1eF9kZXYgPSBcXHUwMDI2YXV4X3ByaXYtXFx1MDAzZWF1eF9kZXY7XFxuIFxcdFxcdGF1eF9kZXYtXFx1MDAzZWlkID0gYnAtXFx1MDAzZWF1eGRldl9pZDtcXG4gXFx0XFx0YXV4X2Rldi1cXHUwMDNlbmFtZSA9IGJueHRfYXV4X2RldmljZXNbaWR4XS5uYW1lO1xcbkBAIC01NzMsMzcgKzU4NSwyNiBAQCB2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXFxuIFxcdFxcdGF1eF9kZXYtXFx1MDAzZWRldi5yZWxlYXNlID0gYm54dF9hdXhfZGV2X3JlbGVhc2U7XFxuIFxcbiBcXHRcXHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChhdXhfZGV2KTtcXG4tXFx0XFx0aWYgKHJjKSB7XFxuLVxcdFxcdFxcdGtmcmVlKGF1eF9wcml2KTtcXG4tXFx0XFx0XFx0Z290byBuZXh0X2F1eGRldjtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdGdvdG8gdWxwX2ZyZWU7XFxuIFxcdFxcdGJwLVxcdTAwM2VhdXhfcHJpdltpZHhdID0gYXV4X3ByaXY7XFxuIFxcbiBcXHRcXHQvKiBGcm9tIHRoaXMgcG9pbnQsIGFsbCBjbGVhbnVwIHdpbGwgaGFwcGVuIHZpYSB0aGUgLnJlbGVhc2VcXG4gXFx0XFx0ICogY2FsbGJhY2sgXFx1MDAyNiBhbnkgZXJyb3IgdW53aW5kaW5nIHdpbGwgbmVlZCB0byBpbmNsdWRlIGEgY2FsbFxcbiBcXHRcXHQgKiB0byBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGVkZXYgPSBremFsbG9jX29iaigqZWRldik7XFxuLVxcdFxcdGlmICghZWRldilcXG4tXFx0XFx0XFx0Z290byBhdXhfZGV2X3VuaW5pdDtcXG4tXFxuLVxcdFxcdGF1eF9wcml2LVxcdTAwM2VlZGV2ID0gZWRldjtcXG4tXFx0XFx0Ym54dF9zZXRfZWRldl9pbmZvKGVkZXYsIGJwKTtcXG4tXFxuLVxcdFxcdHVscCA9IGt6YWxsb2Nfb2JqKCp1bHApO1xcbi1cXHRcXHRpZiAoIXVscClcXG4tXFx0XFx0XFx0Z290byBhdXhfZGV2X3VuaW5pdDtcXG4tXFxuLVxcdFxcdGVkZXYtXFx1MDAzZXVscF90YmwgPSB1bHA7XFxuIFxcdFxcdGJwLVxcdTAwM2VlZGV2W2lkeF0gPSBlZGV2O1xcbiBcXHRcXHRpZiAoaWR4ID09IEJOWFRfQVVYREVWX1JETUEpXFxuIFxcdFxcdFxcdGJwLVxcdTAwM2V1bHBfbnVtX21zaXhfd2FudCA9IGJueHRfc2V0X2RmbHRfdWxwX21zaXgoYnApO1xcbi1cXHRcXHRhdXhfcHJpdi1cXHUwMDNlaWQgPSBpZHg7XFxuIFxcdFxcdGJueHRfYXV4ZGV2X3NldF9zdGF0ZShicCwgaWR4LCBCTlhUX0FERVZfU1RBVEVfSU5JVCk7XFxuIFxcbiBcXHRcXHRjb250aW51ZTtcXG4tYXV4X2Rldl91bmluaXQ6XFxuLVxcdFxcdGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0KGF1eF9kZXYpO1xcbit1bHBfZnJlZTpcXG4rXFx0XFx0a2ZyZWUodWxwKTtcXG4rZWRldl9mcmVlOlxcbitcXHRcXHRrZnJlZShlZGV2KTtcXG4rYXV4X3ByaXZfZnJlZTpcXG4rXFx0XFx0a2ZyZWUoYXV4X3ByaXYpO1xcbiBuZXh0X2F1eGRldjpcXG4gXFx0XFx0aWYgKGlkeCA9PSBCTlhUX0FVWERFVl9SRE1BKVxcbiBcXHRcXHRcXHRicC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJOWFRfRkxBR19ST0NFX0NBUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6MDguODY1NjAyMTE5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDYyMjA5NDc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTlhUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYm54dF9hdXhfZGV2aWNlc19pbml0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgYnkgcmVvcmRlcmluZyBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlIGFuZCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjOTc1YmUwZWRhYzhmMWQ0MGEzMmE1YjIxYTcxYWVhZTQ2M2JkYzVkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMTIgMDg6NDc6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmNcbmluZGV4IDVjNzUxOTMzZGE2YTlkLi5hNTE1YzM2OGJhYzAxNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jXG5AQCAtNTY2LDYgKzU2NiwxOCBAQCB2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXG4gXHRcdGlmICghYXV4X3ByaXYpXG4gXHRcdFx0Z290byBuZXh0X2F1eGRldjtcbiBcbitcdFx0ZWRldiA9IGt6YWxsb2Nfb2JqKCplZGV2KTtcbitcdFx0aWYgKCFlZGV2KVxuK1x0XHRcdGdvdG8gYXV4X3ByaXZfZnJlZTtcbitcdFx0YXV4X3ByaXYtXHUwMDNlZWRldiA9IGVkZXY7XG4rXHRcdGJueHRfc2V0X2VkZXZfaW5mbyhlZGV2LCBicCk7XG4rXG4rXHRcdHVscCA9IGt6YWxsb2Nfb2JqKCp1bHApO1xuK1x0XHRpZiAoIXVscClcbitcdFx0XHRnb3RvIGVkZXZfZnJlZTtcbitcdFx0ZWRldi1cdTAwM2V1bHBfdGJsID0gdWxwO1xuK1x0XHRhdXhfcHJpdi1cdTAwM2VpZCA9IGlkeDtcbitcbiBcdFx0YXV4X2RldiA9IFx1MDAyNmF1eF9wcml2LVx1MDAzZWF1eF9kZXY7XG4gXHRcdGF1eF9kZXYtXHUwMDNlaWQgPSBicC1cdTAwM2VhdXhkZXZfaWQ7XG4gXHRcdGF1eF9kZXYtXHUwMDNlbmFtZSA9IGJueHRfYXV4X2RldmljZXNbaWR4XS5uYW1lO1xuQEAgLTU3MywzNyArNTg1LDI2IEBAIHZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcbiBcdFx0YXV4X2Rldi1cdTAwM2VkZXYucmVsZWFzZSA9IGJueHRfYXV4X2Rldl9yZWxlYXNlO1xuIFxuIFx0XHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChhdXhfZGV2KTtcbi1cdFx0aWYgKHJjKSB7XG4tXHRcdFx0a2ZyZWUoYXV4X3ByaXYpO1xuLVx0XHRcdGdvdG8gbmV4dF9hdXhkZXY7XG4tXHRcdH1cbitcdFx0aWYgKHJjKVxuK1x0XHRcdGdvdG8gdWxwX2ZyZWU7XG4gXHRcdGJwLVx1MDAzZWF1eF9wcml2W2lkeF0gPSBhdXhfcHJpdjtcbiBcbiBcdFx0LyogRnJvbSB0aGlzIHBvaW50LCBhbGwgY2xlYW51cCB3aWxsIGhhcHBlbiB2aWEgdGhlIC5yZWxlYXNlXG4gXHRcdCAqIGNhbGxiYWNrIFx1MDAyNiBhbnkgZXJyb3IgdW53aW5kaW5nIHdpbGwgbmVlZCB0byBpbmNsdWRlIGEgY2FsbFxuIFx0XHQgKiB0byBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdC5cbiBcdFx0ICovXG4tXHRcdGVkZXYgPSBremFsbG9jX29iaigqZWRldik7XG4tXHRcdGlmICghZWRldilcbi1cdFx0XHRnb3RvIGF1eF9kZXZfdW5pbml0O1xuLVxuLVx0XHRhdXhfcHJpdi1cdTAwM2VlZGV2ID0gZWRldjtcbi1cdFx0Ym54dF9zZXRfZWRldl9pbmZvKGVkZXYsIGJwKTtcbi1cbi1cdFx0dWxwID0ga3phbGxvY19vYmooKnVscCk7XG4tXHRcdGlmICghdWxwKVxuLVx0XHRcdGdvdG8gYXV4X2Rldl91bmluaXQ7XG4tXG4tXHRcdGVkZXYtXHUwMDNldWxwX3RibCA9IHVscDtcbiBcdFx0YnAtXHUwMDNlZWRldltpZHhdID0gZWRldjtcbiBcdFx0aWYgKGlkeCA9PSBCTlhUX0FVWERFVl9SRE1BKVxuIFx0XHRcdGJwLVx1MDAzZXVscF9udW1fbXNpeF93YW50ID0gYm54dF9zZXRfZGZsdF91bHBfbXNpeChicCk7XG4tXHRcdGF1eF9wcml2LVx1MDAzZWlkID0gaWR4O1xuIFx0XHRibnh0X2F1eGRldl9zZXRfc3RhdGUoYnAsIGlkeCwgQk5YVF9BREVWX1NUQVRFX0lOSVQpO1xuIFxuIFx0XHRjb250aW51ZTtcbi1hdXhfZGV2X3VuaW5pdDpcbi1cdFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoYXV4X2Rldik7XG4rdWxwX2ZyZWU6XG4rXHRcdGtmcmVlKHVscCk7XG4rZWRldl9mcmVlOlxuK1x0XHRrZnJlZShlZGV2KTtcbithdXhfcHJpdl9mcmVlOlxuK1x0XHRrZnJlZShhdXhfcHJpdik7XG4gbmV4dF9hdXhkZXY6XG4gXHRcdGlmIChpZHggPT0gQk5YVF9BVVhERVZfUkRNQSlcbiBcdFx0XHRicC1cdTAwM2VmbGFncyBcdTAwMjY9IH5CTlhUX0ZMQUdfUk9DRV9DQVA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0NzowOC44NjU2MDQwMjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MjExNzQ1MTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIHRvIGBibnh0X3VscC5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmNgLiBJdCdzIGZvY3VzZWQgb24gdGhlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGZ1bmN0aW9uLCBhbmQgaXQgc2VlbXMgbGlrZSBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZS4gVGhlIGdvYWwgaGVyZSBpcyB0byBhZGRyZXNzIGEgbWVtb3J5IGxlYWssIHVzZS1hZnRlci1mcmVlLCBvciBhIHBvdGVudGlhbCBlcnJvciBoYW5kbGluZyBmbGF3LCBsaWtlbHkgaW52b2x2aW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhdXhpbGlhcnkgZGV2aWNlcy5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBpcyByZW9yZGVyaW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBpbiByZWxhdGlvbiB0byBjYWxscyB0byBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gTm93LCBJIHNlZSB0aGF0IGBlZGV2YCBhbmQgYHVscGAgYXJlIGFsbG9jYXRlZCAqYmVmb3JlKiBjYWxsaW5nIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHBhdHRlcm4gZm9yIHByZS1hbGxvY2F0aW5nIHdoYXQgeW91IG5lZWQsIGlzbid0IGl0P1xuXG5UaGUgb3JpZ2luYWwgY29kZSwgdGhvdWdoLi4uIEknbSBsb29raW5nIGF0IGl0IG5vdy4gSXQgd2FzIHN0cnVjdHVyZWQgbGlrZSB0aGlzOiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCB3YXMgY2FsbGVkIGZpcnN0LiBJZiB0aGF0IGZhaWxlZCwgYGF1eF9wcml2YCB3YXMgZnJlZWQsIGFuZCB0aGUgcHJvY2VzcyBtb3ZlZCBvbi4gVGhlbiwgaWYgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgc3VjY2VlZGVkLCBgZWRldmAgYW5kIGB1bHBgIHdlcmUgYWxsb2NhdGVkLiBBbmQgaWYgKnRob3NlKiBmYWlsZWQsIGl0IHdvdWxkIGNhbGwgYGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0YC5cblxuSG1tLi4uIEkgdGhpbmsgSSdtIHN0YXJ0aW5nIHRvIHNlZSB0aGUgaXNzdWUuIGBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdGAgaW5jbHVkZXMgYSBjYWxsIHRvIGBwdXRfZGV2aWNlYCwgd2hpY2ggdHJpZ2dlcnMgdGhlIHJlbGVhc2UgY2FsbGJhY2ssIHdoaWNoIGlzIGBibnh0X2F1eF9kZXZfcmVsZWFzZWAgaW4gdGhpcyBjYXNlLiBBbmQgKnRoYXQqIGZ1bmN0aW9uLCBgYm54dF9hdXhfZGV2X3JlbGVhc2VgLCBmcmVlcyBgYXV4X3ByaXZgIGFuZCBpdHMgbWVtYmVycy4gQnV0LCBpZiBgZWRldmAgYW5kIGB1bHBgIHdlcmVuJ3QgZnVsbHkgb3IgcGVyaGFwcyBldmVuIHBhcnRpYWxseSBhbGxvY2F0ZWQsIHNvbWV0aGluZyBpbiBgYm54dF9hdXhfZGV2X3JlbGVhc2VgIHdhcyBwcm9iYWJseSB0cnlpbmcgdG8gZnJlZSB0aGVtLCB3aGljaCBjb3VsZCBsZWFkIHRvIGRvdWJsZS1mcmVlLCB1c2UtYWZ0ZXItZnJlZSwgb3Igc29tZSBvdGhlciBtZW1vcnkgY29ycnVwdGlvbi4gU28sIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdHJ5aW5nIHRvIGF2b2lkIHRoYXQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBibnh0X2F1eF9kZXZfcmVsZWFzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0NzoxNi4wNzczNTE5MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTUxMTQ3ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm54dF9hdXhfZGV2X3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTQ1ND12b2lkIGJueHRfYXV4X2RldmljZXNfdW5pbml0KHN0cnVjdCBibnh0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy00NzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jOjQ3MTpzdGF0aWMgdm9pZCBibnh0X2F1eF9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ3Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NTQ5PXZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01ODQtXFx0XFx0YXV4X2Rldi1cXHUwMDNlZGV2LnBhcmVudCA9IFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo1ODU6XFx0XFx0YXV4X2Rldi1cXHUwMDNlZGV2LnJlbGVhc2UgPSBibnh0X2F1eF9kZXZfcmVsZWFzZTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTg2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0NzoxNi42OTI0NzY0MDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTU3MjAwODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBhbmQgRm9jdXMqKlxuXG5BbHJpZ2h0LCB0aGUgaW5zdHJ1Y3Rpb24gaXMgdG8gcmVhZCB0aGUgYGJueHRfYXV4X2Rldl9yZWxlYXNlYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgaXQgbWFrZXMgbWUgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgd2hhdCB0aGlzIGZpbGUgKmlzKiBhbmQgaXRzIGNvbnRleHQuIE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBcImJueHRcIiBsaWtlbHkgcG9pbnRzIHRvd2FyZHMgQnJvYWRjb20ncyBOZXRYdHJlbWUgbmV0d29yayBhZGFwdGVycyDigJMgc28gd2UncmUgdGFsa2luZyBhYm91dCBkcml2ZXJzIG9yIHV0aWxpdGllcyBmb3IgdGhvc2UuIFwiYXV4X2RldlwiIHN1Z2dlc3RzIGF1eGlsaWFyeSBkZXZpY2Ugb3Igc29tZXRoaW5nIHN1cHBvcnRpbmcgdGhlIG1haW4gbmV0d29yayBpbnRlcmZhY2UsIGFuZCBcInJlbGVhc2VcIiBpcyBqdXN0IHRoZSB2ZXJzaW9uIG9yIHBhY2thZ2UgbmFtZS4gT2theSwgSSdtIGV4cGVjdGluZyB0byBnZXQgdGhlIHVzdWFsIHN1c3BlY3RzIC0tIHRoZSBjaGFuZ2Vsb2csIGEgbGlzdCBvZiBrbm93biBpc3N1ZXMsIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMsIGRyaXZlciB1cGRhdGVzLCBhbmQgcG9zc2libHkgc29tZSBkZXRhaWxzIG9uIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cy5cbkkgd2FudCB0byBleGFtaW5lIHRoaXMgZmlsZSB0aG9yb3VnaGx5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgbmV3IGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGludGVncmF0ZWQgaW50byBteSBleGlzdGluZyBrbm93bGVkZ2ViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzE1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6MTkuODQ5NjgxMDIxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NjU6XFx0XFx0XFx0XFx0YXV4aWxpYXJ5X2RldmljZV91bmluaXQoYWRldik7XFxuIDQ2NjpcXHRcXHRcXHR9XFxuIDQ2NzpcXHRcXHR9XFxuIDQ2ODpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmJwLVxcdTAwM2VhdXhkZXZfbG9jayk7XFxuIDQ2OTpcXHR9XFxuIDQ3MDpcXHRcXG4gNDcxOlxcdHN0YXRpYyB2b2lkIGJueHRfYXV4X2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gNDcyOlxcdHtcXG4gNDczOlxcdFxcdHN0cnVjdCBibnh0X2F1eF9wcml2ICphdXhfcHJpdiA9XFxuIDQ3NDpcXHRcXHRcXHRjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYm54dF9hdXhfcHJpdiwgYXV4X2Rldi5kZXYpO1xcbiA0NzU6XFx0XFx0c3RydWN0IGJueHQgKmJwID0gbmV0ZGV2X3ByaXYoYXV4X3ByaXYtXFx1MDAzZWVkZXYtXFx1MDAzZW5ldCk7XFxuIDQ3NjpcXHRcXG4gNDc3OlxcdFxcdGtmcmVlKGF1eF9wcml2LVxcdTAwM2VlZGV2LVxcdTAwM2V1bHBfdGJsKTtcXG4gNDc4OlxcdFxcdGJwLVxcdTAwM2VlZGV2W2F1eF9wcml2LVxcdTAwM2VpZF0gPSBOVUxMO1xcbiA0Nzk6XFx0XFx0a2ZyZWUoYXV4X3ByaXYtXFx1MDAzZWVkZXYpO1xcbiA0ODA6XFx0XFx0YnAtXFx1MDAzZWF1eF9wcml2W2F1eF9wcml2LVxcdTAwM2VpZF0gPSBOVUxMO1xcbiA0ODE6XFx0XFx0a2ZyZWUoYXV4X3ByaXYpO1xcbiA0ODI6XFx0fVxcbiA0ODM6XFx0XFxuIDQ4NDpcXHR2b2lkIGJueHRfYXV4X2RldmljZXNfZGVsKHN0cnVjdCBibnh0ICpicClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6MTkuODQ5NzkwMjUxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUzNzkwNjYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlIGluIGJueHRfYXV4X2Rldl9yZWxlYXNlKipcblxuT2theSwgaGVyZSdzIHdoYXQncyBnb2luZyBvbi4gSSBzZWUgYGJueHRfYXV4X2Rldl9yZWxlYXNlYCBkZXJlZmVyZW5jaW5nIGBhdXhfcHJpdi1cdTAwM2VlZGV2LVx1MDAzZW5ldGAuIFJpZ2h0IGF3YXksIHRoZSBhbGFybSBiZWxscyBhcmUgcmluZ2luZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlmIGBlZGV2YCB3YXNuJ3QgcHJvcGVybHkgYWxsb2NhdGVkIOKAkyBzcGVjaWZpY2FsbHksIGlmIHRoYXQgYGt6YWxsb2Nfb2JqKCplZGV2KTtgIGNhbGwgZmFpbGVkIOKAkyB0aGVuIGBhdXhfcHJpdi1cdTAwM2VlZGV2YCB3aWxsIGJlIE5VTEwuIEFuZCBiYW0sIHdlJ3ZlIGdvdCBvdXJzZWx2ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aCBgYXV4X3ByaXYtXHUwMDNlZWRldi1cdTAwM2VuZXRgLiBJdCdzIHByZXR0eSBjbGVhciB0aGlzIHBhdGNoIGlzIHRhcmdldGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAuXG5cblRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgdGhpcyBjb2RlIHBhdGggcmVhY2hhYmxlPyBZZWFoLCBpdCBpcy4gVGhlIGVycm9yIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoaXMgYXJlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIHdoaWNoIGlzIGFsd2F5cyBwb3NzaWJsZSwgb3IgaWYgdGhlIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIGZ1bmN0aW9uIGZhaWxzLCB3aGljaCBpcyBsZXNzIGNvbW1vbiBidXQgY2FuIHN0aWxsIGhhcHBlbi5cblxuV2FpdCwgaWYgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAgZmFpbHMsIHdoYXQncyBzdXBwb3NlZCB0byBoYXBwZW4/IExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2U6XG5cbmBgYGNcblx0XHRyYyA9IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChhdXhfZGV2KTtcblx0XHRpZiAocmMpXG5cdFx0XHRnb3RvIHVscF9mcmVlO1xuYGBgXG5cblNvLCBpdCBqdW1wcyB0byBgdWxwX2ZyZWVgLiBIbW1tLCBpZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmYWlscywgZG9lcyB0aGF0IG5lY2Vzc2l0YXRlIGEgY2FsbCB0byBgYXV4aWxpYXJ5X2RldmljZV91bmluaXRgPyBHZW5lcmFsbHksIGlmIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgIGZhaWxzLCBpdCBuZWVkcyBhIGBwdXRfZGV2aWNlYCBvciBlcXVpdmFsZW50LiBCdXQgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoZSBkb2NzIGZvciBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBzYXkgdGhhdCBcIklmIGF1eGlsaWFyeV9kZXZpY2VfaW5pdCgpIHJldHVybnMgYW4gZXJyb3IsIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHB1dF9kZXZpY2UoKSBvbiB0aGUgZGV2aWNlLlwiLiBUaGF0IHNob3VsZCBiZSBhIGdvb2QgaW5kaWNhdG9yLiBCdXQgSSdsbCBjb25maXJtIHRoYXQuIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIHNvdXJjZSB0byBtYWtlIHN1cmUgdGhhdCdzIGhvdyBpdCBpcyBoYW5kbGVkIGluIHByYWN0aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6MjUuMzg3Njk5MTY0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTQ1NjI3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdXhpbGlhcnlfZGV2aWNlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0xMTAtICogVGhlIHBhcmVudCBkZXZpY2UgdGhlbiByZWdpc3RlcnMgdGhlIGF1eGlsaWFyeV9kZXZpY2UgYnkgY2FsbGluZ1xcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYzoxMTE6ICogYXV4aWxpYXJ5X2RldmljZV9pbml0KCksIGFuZCB0aGVuIGF1eGlsaWFyeV9kZXZpY2VfYWRkKCksIHdpdGggdGhlIHBvaW50ZXJcXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMTEyLSAqIHRvIHRoZSBhdXhkZXYgbWVtYmVyIG9mIHRoZSBhYm92ZSBzdHJ1Y3R1cmUuIFRoZSBwYXJlbnQgcHJvdmlkZXMgYSBuYW1lIGZvclxcbi0tXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jPTI0OT1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlIGF1eGlsaWFyeV9idXNfdHlwZSA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0yNTgtLyoqXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jOjI1OTogKiBhdXhpbGlhcnlfZGV2aWNlX2luaXQgLSBjaGVjayBhdXhpbGlhcnlfZGV2aWNlIGFuZCBpbml0aWFsaXplXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTI2MC0gKiBAYXV4ZGV2OiBhdXhpbGlhcnkgZGV2aWNlIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTI3NC0gKi9cXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmM6Mjc1OmludCBhdXhpbGlhcnlfZGV2aWNlX2luaXQoc3RydWN0IGF1eGlsaWFyeV9kZXZpY2UgKmF1eGRldilcXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMjc2LXtcXG4tLVxcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYy0yOTMtfVxcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYzoyOTQ6RVhQT1JUX1NZTUJPTF9HUEwoYXV4aWxpYXJ5X2RldmljZV9pbml0KTtcXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMjk1LVxcbi0tXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTMwNC0gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvXFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jOjMwNTogKiBhdXhpbGlhcnlfZGV2aWNlX2luaXQoKSwgd2hpY2ggd2lsbCBwZXJmb3JtIHRoZSBkZXZpY2VfaW5pdGlhbGl6ZS4gIFRoaXNcXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtMzA2LSAqIG1lYW5zIHRoYXQgaWYgdGhpcyByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHRoZW4gYSBjYWxsIHRvXFxuLS1cXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmM9NDA4PXN0cnVjdCBhdXhpbGlhcnlfZGV2aWNlICphdXhpbGlhcnlfZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmMtNDI3LVxcbmRyaXZlcnMvYmFzZS9hdXhpbGlhcnkuYzo0Mjg6XFx0cmV0ID0gYXV4aWxpYXJ5X2RldmljZV9pbml0KGF1eGRldik7XFxuZHJpdmVycy9iYXNlL2F1eGlsaWFyeS5jLTQyOS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjI1LjUwNzE2MjEyNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDU4MDgwMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBEb2N1bWVudGF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmdW5jdGlvbi4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGl0J3MgY3J1Y2lhbCBmb3IgYnJpbmdpbmcgdXAgc29tZSBraW5kIG9mIHNlY29uZGFyeSBoYXJkd2FyZSBvciBwZXJpcGhlcmFsLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIHRoZSBleHBlY3RlZCBhcmd1bWVudHMgKGRhdGEgc3RydWN0dXJlcywgaGFuZGxlcywgd2hhdGV2ZXIgaXQgdGFrZXMpLCBhbmQsIGNyaXRpY2FsbHksIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzLiBBcmUgdGhlcmUgcHJlLXJlcXVpc2l0ZXM/IERvZXMgaXQgcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSBzdGF0ZXMgb3IgY29uZmlndXJhdGlvbnMgZXN0YWJsaXNoZWQgYnkgZWFybGllciByb3V0aW5lcz9cblxuSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBhbmQgZmFpbHVyZSBtb2RlcyDigJMgaG93IGRvZXMgaXQgaGFuZGxlIGludmFsaWQgaW5wdXQsIHVuYXZhaWxhYmxlIHJlc291cmNlcywgb3IgdW5leHBlY3RlZCBoYXJkd2FyZSByZXNwb25zZXM/IEVycm9yIGNvZGVzIGFyZSBrZXkuIEknbSBhbHNvIGludGVyZXN0ZWQgaW4gYW55IHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zIGl0IG1pZ2h0IGVtcGxveSwgZXNwZWNpYWxseSBpZiB0aGlzIGluaXRpYWxpemF0aW9uIGludm9sdmVzIHNoYXJlZCByZXNvdXJjZXMgb3IgaW50ZXJhY3Rpb24gd2l0aCBpbnRlcnJ1cHQgaGFuZGxlcnMuIFJhY2UgY29uZGl0aW9ucyBhcmUgYWx3YXlzIGEgY29uY2Vybi5cblxuRnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLCBJJ2xsIGJlIHRyeWluZyB0byBncmFzcCB0aGUgZXhlY3V0aW9uIHRpbWUgaW1wbGljYXRpb25zLiBJcyB0aGlzIGEgYmxvY2tpbmcgY2FsbCwgb3IgZG9lcyBpdCBzcGF3biBhc3luY2hyb25vdXMgb3BlcmF0aW9ucz8gQW5kIGZpbmFsbHksIHdoYXQncyB0aGUgdHlwaWNhbCB1c2FnZSBwYXR0ZXJuPyBIb3cgZG9lcyBpdCBpbnRlZ3JhdGUgd2l0aCB0aGUgYnJvYWRlciBzeXN0ZW0gYXJjaGl0ZWN0dXJlPyBJJ2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZ2xlYW4gdGhpcyB0aHJvdWdoIGV4YW1pbmluZyB0aGUgY2FsbCBjb250ZXh0IGFuZCBhbnkgZXhhbXBsZSBjb2RlIHByb3ZpZGVkLiBHZXR0aW5nIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGFsbCBvZiB0aGVzZSBpdGVtcyB3aWxsIGFsbG93IG1lIHRvIGJlZ2luIHRvIGFyY2hpdGVjdCBhIHN0cm9uZyBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU2NywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjI5LjMxMjk3Mjc5NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jhc2UvYXV4aWxpYXJ5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU4OlxcdC8qKlxcbiAyNTk6XFx0ICogYXV4aWxpYXJ5X2RldmljZV9pbml0IC0gY2hlY2sgYXV4aWxpYXJ5X2RldmljZSBhbmQgaW5pdGlhbGl6ZVxcbiAyNjA6XFx0ICogQGF1eGRldjogYXV4aWxpYXJ5IGRldmljZSBzdHJ1Y3RcXG4gMjYxOlxcdCAqXFxuIDI2MjpcXHQgKiBUaGlzIGlzIHRoZSBzZWNvbmQgc3RlcCBpbiB0aGUgdGhyZWUtc3RlcCBwcm9jZXNzIHRvIHJlZ2lzdGVyIGFuXFxuIDI2MzpcXHQgKiBhdXhpbGlhcnlfZGV2aWNlLlxcbiAyNjQ6XFx0ICpcXG4gMjY1OlxcdCAqIFdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHRoZW4gdGhlIGRldmljZV9pbml0aWFsaXplIHdpbGxcXG4gMjY2OlxcdCAqICpub3QqIGhhdmUgYmVlbiBwZXJmb3JtZWQsIGFuZCB0aGUgY2FsbGVyIHdpbGwgYmUgcmVzcG9uc2libGUgdG8gZnJlZSBhbnlcXG4gMjY3OlxcdCAqIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBhdXhpbGlhcnlfZGV2aWNlIGluIHRoZSBlcnJvciBwYXRoIGRpcmVjdGx5LlxcbiAyNjg6XFx0ICpcXG4gMjY5OlxcdCAqIEl0IHJldHVybnMgMCBvbiBzdWNjZXNzLiAgT24gc3VjY2VzcywgdGhlIGRldmljZV9pbml0aWFsaXplIGhhcyBiZWVuXFxuIDI3MDpcXHQgKiBwZXJmb3JtZWQuICBBZnRlciB0aGlzIHBvaW50IGFueSBlcnJvciB1bndpbmRpbmcgd2lsbCBuZWVkIHRvIGluY2x1ZGUgYSBjYWxsXFxuIDI3MTpcXHQgKiB0byBhdXhpbGlhcnlfZGV2aWNlX3VuaW5pdCgpLiAgSW4gdGhpcyBwb3N0LWluaXRpYWxpemUgZXJyb3Igc2NlbmFyaW8sIGEgY2FsbFxcbiAyNzI6XFx0ICogdG8gdGhlIGRldmljZSdzIC5yZWxlYXNlIGNhbGxiYWNrIHdpbGwgYmUgdHJpZ2dlcmVkLCBhbmQgYWxsIG1lbW9yeSBjbGVhbi11cFxcbiAyNzM6XFx0ICogaXMgZXhwZWN0ZWQgdG8gYmUgaGFuZGxlZCB0aGVyZS5cXG4gMjc0OlxcdCAqL1xcbiAyNzU6XFx0aW50IGF1eGlsaWFyeV9kZXZpY2VfaW5pdChzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4ZGV2KVxcbiAyNzY6XFx0e1xcbiAyNzc6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNmF1eGRldi1cXHUwMDNlZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0NzoyOS4zMTMwNTM5NDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4MzE4MDg5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIGJueHQgRHJpdmVyIEVycm9yIEhhbmRsaW5nIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgaXMgYWJvdXQgYW4gaW1wb3J0YW50IGZpeCBpbiB0aGUgYGJueHRgIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuIFRoZSBjb3JlIGlzc3VlIGlzIGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YC4gSXQgc2VlbXMgdGhlIGRyaXZlciB3YXNuJ3QgcHJvcGVybHkgY2xlYW5pbmcgdXAgbWVtb3J5IGlmIHRoZSBpbml0aWFsaXphdGlvbiBmYWlsZWQgKmFmdGVyKiBzb21lIG1lbW9yeSBoYWQgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCwgbGVhZGluZyB0byBhIHBvdGVudGlhbCBjcmFzaC5cblxuTXkgdGhvdWdodCBwcm9jZXNzIGlzIHRoaXM6IFRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gYSBjcml0aWNhbCBtaXN1bmRlcnN0YW5kaW5nIG9mIHRoZSBlcnJvciBoYW5kbGluZyBmbG93LiBJZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmYWlscywgdGhlIGBkZXZpY2VfaW5pdGlhbGl6ZWAgaXMgKm5ldmVyKiBwZXJmb3JtZWQsIGFuZCB0aGUgcmVzcG9uc2liaWxpdHkgdG8gY2xlYW4gdXAgYmVsb25ncyB0byB0aGUgY2FsbGVyLCBub3QgdGhlIGBwdXRfZGV2aWNlYC5cblxuTG9va2luZyBhdCB0aGUgbmV3IGNvZGUsIGl0IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBjbGVhbnVwOyBpZiBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCBmYWlscywgaXQganVtcHMgdG8gYSBgdWxwX2ZyZWVgIGxhYmVsLCB3aGljaCBhcHByb3ByaWF0ZWx5IGZyZWVzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiBTaW1wbGUgYW5kIGNvcnJlY3QuIFRoZSBmaXggbW92ZXMgdGhlIGFsbG9jYXRpb24gb2YgYGVkZXZgIGFuZCBgdWxwYCAqYmVmb3JlKiB0aGUgY2FsbCB0byBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gdGhlIGVycm9yIGhhbmRsaW5nLlxuXG5CdXQgdGhlIG9sZCBjb2RlLCBob3dldmVyLCBoYWQgYSBmbGF3LiBJdCBsb29rcyBsaWtlIGl0IHdhcyBhdHRlbXB0aW5nIHRvIGNhbGwgYGF1eGlsaWFyeV9kZXZpY2VfdW5pbml0YCBhbmQgYHB1dF9kZXZpY2VgIGluIHRoZSBlcnJvciBwYXRoLCBidXQgaXQgd2FzIGRvaW5nIHNvIGFmdGVyIGEgZmFpbGVkIGBlZGV2YCBhbGxvY2F0aW9uLiBUaGlzIGNhdXNlZCBhIGBOVUxMYCBwb2ludGVyIGRlcmVmZXJlbmNlIGJlY2F1c2UgYGF1eF9wcml2LVx1MDAzZWVkZXZgIHdhcyBiZWluZyBhY2Nlc3NlZCBiZWZvcmUgaXQgd2FzIHByb3Blcmx5IGluaXRpYWxpemVkLiBgYm54dF9hdXhfZGV2X3JlbGVhc2VgLCBwYXJ0IG9mIHRoZSBjbGVhbnVwLCB3YXMgdHJ5aW5nIHRvIGRlcmVmZXJlbmNlIGEgYE5VTExgIHBvaW50ZXIuIFRoYXQncyB0aGUgYnVnLlxuXG5UaGUgbmV3IGNvZGUgY29ycmVjdGx5IGZpeGVzIHRoaXMgYnkgYWxsb2NhdGluZyBgZWRldmAgYW5kIGB1bHBgICpiZWZvcmUqIGNhbGxpbmcgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAsIHdoaWNoIGlzIHRoZSBmaXguIEZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlLCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgYE5VTExgIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGguIFByZXR0eSBpbXBvcnRhbnQgZm9yIHJlbGlhYmlsaXR5LlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBEZWZpbml0ZWx5ISBBIG5ldHdvcmsgZHJpdmVyLCBzcGVjaWZpY2FsbHkgb25lIGRlYWxpbmcgd2l0aCBlcnJvciBwYXRocywgaXMgYSBwcmltZSB0YXJnZXQuIFRoZSBmYWN0IHRoYXQgdGhlIGBibnh0YCBkcml2ZXIgKEJyb2FkY29tIE5ldFh0cmVtZS1DL0UpIGlzIGEgUENJIGRyaXZlciByYWlzZXMgYSBxdWVzdGlvbiBhYm91dCByZWFjaGFiaWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gUENJIGRyaXZlcnMgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSBvciBnb29kIFBDSSBlbXVsYXRpb24uIERvZXMgUUVNVSBlbXVsYXRlIGBibnh0YD8gVW5saWtlbHkuIFN5emthbGxlciwgYSBrZXJuZWwgZnV6emVyLCBvZnRlbiBjYW4ndCByZWFjaCB0aG9zZSBkcml2ZXJzIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgdW5sZXNzIGl0J3MgdXNpbmcgYWR2YW5jZWQgdGVjaG5pcXVlcyBsaWtlIGB2aGNpYCBvciBgdmZpb2AgZm9yIFBDSSBkZXZpY2UgZW11bGF0aW9uLlxuXG5BaGEhIFRoZW4sIEkgc2F3IHRoZSBhdXRob3Igb2YgdGhlIGNvbW1pdCBpcyBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBXYWl0IGEgc2Vjb25kLi4uIHRoYXQncyBTeXprYWxsZXIhIFRoZSBmYWN0IHRoYXQgU3l6a2FsbGVyIGZvdW5kIHRoaXMgYnVnIG1lYW5zIGl0IElTIHJlYWNoYWJsZSBpbiB0aGVpciBlbnZpcm9ubWVudC4gV2hpY2ggbWVhbnMgdGhpcyBpcyBkZWZpbml0ZWx5IGZ1enplci13b3J0aHksIGFzIFN5emthbGxlciBtdXN0IGhhdmUgc29tZSBzb3J0IG9mIFBDSSBmdXp6aW5nIGdvaW5nIG9uLCBtYXliZSB0aHJvdWdoIHRoZSBgc3l6X3BjaV9kZXZpY2VgIGludGVyZmFjZS4gTWF5YmUgdGhpcyBpcyB0cmlnZ2VyZWQgdmlhIHNvbWUgb3RoZXIgcGF0aD8gSSBzaG91bGQgY2hlY2sgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjY4LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6NDEuMTQ0ODY1NTQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTk1NjgxNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYm54dF9hdXhfZGV2aWNlc19pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jPTE2OTQ1PXN0YXRpYyBpbnQgYm54dF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMwLVxcdGlmICghYm54dF9hdXhkZXZfaWRfYWxsb2MoYnApKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jOjE3MTMxOlxcdFxcdGJueHRfYXV4X2RldmljZXNfaW5pdChicCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcxMzItXFx0cmMgPSBibnh0X3NldF9kZmx0X3JpbmdzKGJwLCB0cnVlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYz01MjU9dm9pZCBibnh0X2F1eF9kZXZpY2VzX2FkZChzdHJ1Y3QgYm54dCAqYnApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTQ4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo1NDk6dm9pZCBibnh0X2F1eF9kZXZpY2VzX2luaXQoc3RydWN0IGJueHQgKmJwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0Nzo0MS41NjQ0Mzk5M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTIyNDE1NzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBUYXJnZXQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGBibnh0X2luaXRfb25lYCBmdW5jdGlvbiwgdGhhdCdzIGNhbGxlZCBmcm9tIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24sIHJpZ2h0PyBNYWtlcyBzZW5zZS4gQW5kIHdlIGtub3cgdGhhdCBTeXprYWxsZXIncyBQQ0kgZnV6emVyLCB0aGF0IHRoaW5nIGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLCB3aGljaCB0aGVuIHRyaWdnZXJzIHRoZXNlIHByb2JlIGZ1bmN0aW9ucy4gU28sIHllYWgsICpkZWZpbml0ZWx5KiByZWFjaGFibGUuIFRoZSBuZXh0IHN0ZXAgaXMgYWx3YXlzIHRoZSBzYW1lOiBGaW5kIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IHdlIG5lZWQgdG8gbWFrZSB0aGlzIGFsbCB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjcxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6NDQuNjg2ODU4NTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzA2MTEyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQk5YVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc9MTk1PWNvbmZpZyBTWVNURU1QT1JUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIwNzpjb25maWcgQk5YVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjA4LVxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIyMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIyMjpjb25maWcgQk5YVF9TUklPVlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjIzLVxcdGJvb2wgXFxcIkJyb2FkY29tIE5ldFh0cmVtZS1DL0UgU1ItSU9WIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIzMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjIzMTpjb25maWcgQk5YVF9GTE9XRVJfT0ZGTE9BRFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjMyLVxcdGJvb2wgXFxcIlRDIEZsb3dlciBvZmZsb2FkIHN1cHBvcnQgZm9yIE5ldFh0cmVtZS1DL0VcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIzOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI0MDpjb25maWcgQk5YVF9EQ0JcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI0MS1cXHRib29sIFxcXCJEYXRhIENlbnRlciBCcmlkZ2luZyAoRENCKSBTdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNTA6Y29uZmlnIEJOWFRfSFdNT05cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIEhXTU9OIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjQ0LjgwOTkzMjE4M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIxNzk0MjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipDb25kaXRpb25hbCBDb21waWxhdGlvbiBJbnZlc3RpZ2F0aW9uOiBgYm54dF91bHAuY2AqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlIGNvbXBpbGF0aW9uIG9mIGBibnh0X3VscC5jYCBpcyBnb3Zlcm5lZCBieSBhbnkgY29uZGl0aW9uYWwgbG9naWMuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgZGVidWdnaW5nIHN0ZXAgd2hlbiBkZWFsaW5nIHdpdGggZHJpdmVyIGNvZGUsIGVzcGVjaWFsbHkgd2hlbiB5b3UgZW5jb3VudGVyIHVuZXhwZWN0ZWQgYmVoYXZpb3Igb3IgYnVpbGQgaXNzdWVzLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpZiBjZXJ0YWluIGZlYXR1cmVzIG9yIGZ1bmN0aW9uYWxpdGllcyB3aXRoaW4gdGhhdCBmaWxlIGFyZSBvbmx5IGluY2x1ZGVkIHVuZGVyIHNwZWNpZmljIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIG9yIGtlcm5lbCB2ZXJzaW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBtYWtlZmlsZXMsIGNvbmZpZ3VyYXRpb24gaGVhZGVycywgYW5kIGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0aGF0IG1pZ2h0IHN1cnJvdW5kIHRoZSBpbmNsdXNpb24gb2YgdGhpcyBmaWxlLiBLbm93aW5nIHRoZSBjb25kaXRpb25zIHdpbGwgaGVscCBtZSBkaWFnbm9zZSBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGJ1aWxkIGVudmlyb25tZW50LiBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm0sIGEgcGFydGljdWxhciBrZXJuZWwgdmVyc2lvbiwgYSBjZXJ0YWluIGRyaXZlciBtb2R1bGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6ODg4NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjQ3LjczMTcyODEzNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzNjg3MjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJueHRfdWxwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9NYWtlZmlsZT0yPW9iai0kKENPTkZJR19CTlhUKSArPSBibnh0X2VuLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9NYWtlZmlsZTo0OmJueHRfZW4teSA6PSBibnh0Lm8gYm54dF9od3JtLm8gYm54dF9zcmlvdi5vIGJueHRfZXRodG9vbC5vIGJueHRfZGNiLm8gYm54dF91bHAubyBibnh0X3hkcC5vIGJueHRfcHRwLm8gYm54dF92ZnIubyBibnh0X2RldmxpbmsubyBibnh0X2RpbS5vIGJueHRfY29yZWR1bXAuLi5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L01ha2VmaWxlLTUtYm54dF9lbi0kKENPTkZJR19CTlhUX0ZMT1dFUl9PRkZMT0FEKSArPSBibnh0X3RjLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6NDcuODM1NDIxMjU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzgwNTYwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBCdWlsZCBEZXBlbmRlbmN5IG9mIGBibnh0X3VscC5vYCoqXG5cbkFscmlnaHQsIG15IGZpcnN0IHRob3VnaHQgaGVyZSBpcyB0aGF0IGBibnh0X3VscC5vYCBpcyBjb25zaXN0ZW50bHkgYnVpbHQgd2hlbiBgQ09ORklHX0JOWFRgIGlzIGVuYWJsZWQuIFRoYXQncyBhIGdpdmVuLiBIb3dldmVyLCB0aGUgbmV4dCBwaWVjZSBvZiB0aGlzIHB1enpsZSBpcyBjb25uZWN0aW5nIGhvdyBpdCBpcyAqYWN0dWFsbHkqIGJyb3VnaHQgaW50byB0aGUgc3lzdGVtLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBpbml0IGZ1bmN0aW9uIGFuZCBmaWd1cmUgb3V0IGl0cyBkZXBlbmRlbmNpZXMuXG5cbk5vdywgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgY2FsbHMgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgcmluZ3MgYSBiZWxsLiBDb3VsZCB0aGUgYEJOWFRgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGJlIHNlbGVjdGluZyBgQVVYSUxJQVJZX0JVU2A/IFRoYXQgY29ubmVjdGlvbiB3b3VsZCBleHBsYWluIGEgbG90LiBJdCdzIGEga2V5IHF1ZXN0aW9uLCBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgc29saWQgZXZpZGVuY2UuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhci4gTGV0J3MgZGVsdmUgaW50byBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gbWFnaWMgaGFwcGVucywgYW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgQk5YVGAsIGBBVVhJTElBUllfQlVTYCBhbmQgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgc2hvdWxkIGJlIGxhaWQgb3V0LiBJJ2xsIG5lZWQgdG8gY29uZmlybSBpZiBpdCBjb25maWd1cmVzIHRoZSBhdXhpbGlhcnkgYnVzLiBJdCBzaG91bGQgYmUgYSBwcmV0dHkgcXVpY2sgc2VhcmNoIGZvciB0aGUgZGVwZW5kZW5jaWVzLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzMjcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0Nzo1MS44NzM0Nzk2MzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDc6XFx0Y29uZmlnIEJOWFRcXG4gMjA4OlxcdFxcdHRyaXN0YXRlIFxcXCJCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIHN1cHBvcnRcXFwiXFxuIDIwOTpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAyMTA6XFx0XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbiAyMTE6XFx0XFx0c2VsZWN0IEZXX0xPQURFUlxcbiAyMTI6XFx0XFx0c2VsZWN0IENSQzMyXFxuIDIxMzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gMjE0OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gMjE1OlxcdFxcdHNlbGVjdCBESU1MSUJcXG4gMjE2OlxcdFxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuIDIxNzpcXHRcXHRoZWxwXFxuIDIxODpcXHRcXHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgMTAvMjUvNDAvNTAgZ2lnYWJpdFxcbiAyMTk6XFx0XFx0ICBFdGhlcm5ldCBjYXJkcy4gIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6XFxuIDIyMDpcXHRcXHQgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYm54dF9lbi4gIFRoaXMgaXMgcmVjb21tZW5kZWQuXFxuIDIyMTpcXHRcXG4gMjIyOlxcdGNvbmZpZyBCTlhUX1NSSU9WXFxuIDIyMzpcXHRcXHRib29sIFxcXCJCcm9hZGNvbSBOZXRYdHJlbWUtQy9FIFNSLUlPViBzdXBwb3J0XFxcIlxcbiAyMjQ6XFx0XFx0ZGVwZW5kcyBvbiBCTlhUIFxcdTAwMjZcXHUwMDI2IFBDSV9JT1ZcXG4gMjI1OlxcdFxcdGRlZmF1bHQgeVxcbiAyMjY6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0Nzo1MS44NzM1ODE0MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUyNjA0MDM2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIGEgQk5YVCBEcml2ZXIgTW9kaWZpY2F0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgQk5YVGAgc2VsZWN0cyBgQVVYSUxJQVJZX0JVU2AuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOyBpbml0aWFsbHksIGl0IGxvb2tzIGxpa2Ugb25seSBgQk5YVGAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZy4gSG93ZXZlciwgdGhlIGluc3RydWN0aW9ucyByZW1pbmQgbWUgdG8gYmUgdGhvcm91Z2guIEkgbmVlZCB0byBlbnN1cmUgdGhlIGNoYW5nZXMgYXJlIGZ1enotd29ydGh5IGFuZCBkb2N1bWVudCBldmVyeXRoaW5nIG1ldGljdWxvdXNseS5cblxuVGhlIGluc3RydWN0aW9ucyBzYXk6IFwiSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaCB0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZVwiLiBJIHJlbWVtYmVyIHRoZSBjcml0aWNhbCBuZWVkIHRvIGlkZW50aWZ5IGFueSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBcImdvdGNoYXNcIi4gSSBhbHNvIG11c3QgXCJFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzXCIgYW5kIFwiSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXCJcblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9uIGZvY3VzZXMgb24gYGJueHRfYXV4X2RldmljZXNfaW5pdGAuIExldCdzIGNvbmZpcm06IFllcCwgYSBxdWljayByZXZpZXcgb2YgdGhlIGRpZmYgY29uZmlybXMgdGhhdCdzIHRoZSBvbmx5IGZ1bmN0aW9uIGJlaW5nIHRvdWNoZWQuIFNvLCBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgLiBOb3csIGlzIHRoaXMgYSBob3QtcGF0aCBmdW5jdGlvbj8gTm8sIGl0J3MgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sIGNhbGxlZCBkdXJpbmcgUENJIHByb2JlLCBzbyBpdCBpcyBwcm9iYWJseSBmaW5lLlxuXG5Ob3csIGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gSXQgZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGFuZCBzeXprYWxsZXIgaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGZpbmQgdGhlc2UgdHlwZXMgb2YgYnVncy4gRGVmaW5pdGVseSB3b3J0aCB0aGUgZWZmb3J0LlxuXG5MZXQncyBjaXJjbGUgYmFjay4gYEJOWFRgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZy4gQnV0LCBhcmUgdGhlcmUgKm90aGVyKiBjb25maWdzIHRoYXQgYWxzbyBlbmFibGUgb3IgaW5mbHVlbmNlIHRoZSBleGVjdXRpb24gb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGA/IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy4gSSdsbCBuZWVkIHRvIHNlZSBpZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgZnVydGhlciBkZXBlbmRlbmNpZXMuIFRoZSB0YXNrIGlzIHRvIGlkZW50aWZ5IHRob3NlIHNwZWNpZmljIGNvbmZpZ3MsIHdpdGhvdXQgbWFraW5nIGFueSBhc3N1bXB0aW9ucy4gTm8gZ2VuZXJpYyBzdHVmZjsgSSdtIG9ubHkgaW50ZXJlc3RlZCBpbiB0aG9zZSBjb25maWdzIHRoYXQgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxNywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ3OjU4LjM5OTYyNDY1NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMDcxNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJueHRfYXV4X2RldmljZXNfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYz0xNjk0NT1zdGF0aWMgaW50IGJueHRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzEzMC1cXHRpZiAoIWJueHRfYXV4ZGV2X2lkX2FsbG9jKGJwKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzEzMTpcXHRcXHRibnh0X2F1eF9kZXZpY2VzX2luaXQoYnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTMyLVxcdHJjID0gYm54dF9zZXRfZGZsdF9yaW5ncyhicCwgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NTI1PXZvaWQgYm54dF9hdXhfZGV2aWNlc19hZGQoc3RydWN0IGJueHQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTU0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTQ5OnZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTUwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDc6NTguNTExNzAwNDk5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDY5NTM5MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29tcGlsYXRpb24gb2YgYGJueHRfdWxwLmNgKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBjb21waWxhdGlvbiBzY29wZSBvZiBgYm54dF91bHAuY2AuIE15IGluaXRpYWwgaHVuY2ggd2FzIHRoYXQgaXQgbWlnaHQgYmUgdGllZCB0byBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBwcm9iYWJseSBgQ09ORklHX0JOWFRgLiBJIG5lZWQgdG8gY29uZmlybS4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIGl0IGxpdmVzLCBvaCB5ZXMsIGl0J3MgZGVmaW5pdGVseSBpbiBgYm54dF91bHAuY2AuIEJ1dCBpcyB0aGF0IGZpbGUgKmFsd2F5cyogY29tcGlsZWQ/IEkgbmVlZCB0byBrbm93IGlmIHRoZXJlJ3MgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGludm9sdmVkLiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgTWFrZWZpbGUuLi4gYWgsIHRoZXJlIGl0IGlzISBgYm54dF9lbi15IDo9IGJueHQubyBibnh0X2h3cm0ubyBibnh0X3NyaW92Lm8gYm54dF9ldGh0b29sLm8gYm54dF9kY2IubyBibnh0X3VscC5vIC4uLmAgT2theSwgc28gaXQgbG9va3MgbGlrZSBpdCAqaXMqIGFsd2F5cyBjb21waWxlZCBhcyBwYXJ0IG9mIGBibnh0X2VuLXlgLiBOb3csIG15IG5leHQgdGhvdWdodCBpcywgSSBuZWVkIHRvIGNoZWNrIGlmIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGlzIGd1YXJkZWQgYnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIG9yIGlmIHN0YXRlbWVudHMsIGJ1dCBmb3Igbm93IEkga25vdyB0aGF0IGl0IGlzIGluIGZhY3QgYWx3YXlzIGNvbXBpbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxOSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0ODowMi42MTg2NTU5MzlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU0MDpcXHRcXHRcXHRcXHRcXHRcXHRicC1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJOWFRfRkxBR19ST0NFX0NBUDtcXG4gNTQxOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1NDI6XFx0XFx0XFx0XFx0fVxcbiA1NDM6XFx0XFx0XFx0XFx0Ym54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9BREQpO1xcbiA1NDQ6XFx0XFx0XFx0fVxcbiA1NDU6XFx0XFx0fVxcbiA1NDY6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZicC1cXHUwMDNlYXV4ZGV2X2xvY2spO1xcbiA1NDc6XFx0fVxcbiA1NDg6XFx0XFxuIDU0OTpcXHR2b2lkIGJueHRfYXV4X2RldmljZXNfaW5pdChzdHJ1Y3QgYm54dCAqYnApXFxuIDU1MDpcXHR7XFxuIDU1MTpcXHRcXHRzdHJ1Y3QgYXV4aWxpYXJ5X2RldmljZSAqYXV4X2RldjtcXG4gNTUyOlxcdFxcdHN0cnVjdCBibnh0X2F1eF9wcml2ICphdXhfcHJpdjtcXG4gNTUzOlxcdFxcdHN0cnVjdCBibnh0X2VuX2RldiAqZWRldjtcXG4gNTU0OlxcdFxcdHN0cnVjdCBibnh0X3VscCAqdWxwO1xcbiA1NTU6XFx0XFx0aW50IHJjLCBpZHg7XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmJwLVxcdTAwM2VhdXhkZXZfbG9jayk7XFxuIDU1ODpcXHRcXHRmb3IgKGlkeCA9IDA7IGlkeCBcXHUwMDNjIF9fQk5YVF9BVVhERVZfTUFYOyBpZHgrKykge1xcbiA1NTk6XFx0XFx0XFx0Ym54dF9hdXhkZXZfc2V0X3N0YXRlKGJwLCBpZHgsIEJOWFRfQURFVl9TVEFURV9OT05FKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDg6MDIuNjE4NzQ0NDE5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQzNzc1MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gYW5kIFJETUEgRGVwZW5kZW5jeSBpbiBibnh0X2F1eF9kZXZpY2VzX2luaXQqKlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoaXMgY29kZSwgSSBkb24ndCBzZWUgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIChgI2lmZGVmYCkgZ3VhcmRpbmcgdGhlIGNhbGwgdG8gYGJueHRfYXV4X2RldmljZXNfaW5pdGAuIFRoYXQncyBhIGxpdHRsZSB1bnVzdWFsLCBJJ2QgZXhwZWN0IHRvIHNlZSBzb21lIHNvcnQgb2YgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW4gdGhpcyBzZWN0aW9uLiBVc3VhbGx5LCB3ZSdkIGhhdmUgYSBjaGVjayBmb3Igc3BlY2lmaWMgZmVhdHVyZXMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnMgYmVmb3JlIGluaXRpYWxpemluZyBhdXhpbGlhcnkgZGV2aWNlcy5cblxuV2FpdCBhIHNlY29uZOKApiBpcyB0aGlzIGRpcmVjdGx5IHJlbGF0ZWQgdG8gUkRNQSBzdXBwb3J0PyBUaGUgZnVuY3Rpb24gbmFtZSBkb2VzbuKAmXQgaW1tZWRpYXRlbHkgc2NyZWFtIOKAnFJETUEs4oCdIGJ1dCBpdCdzIG1ha2luZyBtZSB0aGluayBhYm91dCBgQk5YVF9BVVhERVZfUkRNQWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIFJETUEgaXMgKnJlcXVpcmVkKiBmb3IgdGhpcyBpbml0aWFsaXphdGlvbiBvciBpZiBpdCdzIGp1c3QgYW4gKm9wdGlvbiouIElmIGl0J3MgdGhlIGxhdHRlciwgdGhlIGxhY2sgb2YgYW4gYCNpZmRlZmAgbWFrZXMgc2Vuc2UsIGFzc3VtaW5nIHRoaXMgZnVuY3Rpb24gaGFuZGxlcyBnZW5lcmFsIGF1eGlsaWFyeSBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIHJlZ2FyZGxlc3Mgb2YgUkRNQSBwcmVzZW5jZS5cblxuVG8gY2xlYXIgdGhpcyB1cCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgIGlzIGNhbGxlZCBhbmQgd2hhdCBgYm54dF9hdXhfZGV2aWNlc2AgaXMgYWxsIGFib3V0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24gd2lsbCBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBsYWNrIG9mIGEgcHJlcHJvY2Vzc29yIGd1YXJkIGlzIGNvcnJlY3Qgb3IgYSBwb3RlbnRpYWwgYnVnIHRoYXQgbmVlZHMgYWRkcmVzc2luZy4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgb25lIGJhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTY2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0ODowNi4zODMxMjQ2NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTE3ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJueHRfYXV4X2RldmljZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9MTY1MTE9c3RhdGljIHZvaWQgYm54dF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY1MTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY1MTk6XFx0Ym54dF9hdXhfZGV2aWNlc19kZWwoYnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NTIwLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTY1MjMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTY1MjQ6XFx0Ym54dF9hdXhfZGV2aWNlc191bmluaXQoYnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE2NTI1LVxcdGJueHRfYXV4ZGV2X2lkX2ZyZWUoYnAsIGJwLVxcdTAwM2VhdXhkZXZfaWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM9MTY5NDU9c3RhdGljIGludCBibnh0X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcxMzAtXFx0aWYgKCFibnh0X2F1eGRldl9pZF9hbGxvYyhicCkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTcxMzE6XFx0XFx0Ym54dF9hdXhfZGV2aWNlc19pbml0KGJwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYy0xNzEzMi1cXHRyYyA9IGJueHRfc2V0X2RmbHRfcmluZ3MoYnAsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcxOTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmM6MTcxOTY6XFx0Ym54dF9hdXhfZGV2aWNlc19hZGQoYnApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dC5jLTE3MTk3LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcyMDMtaW5pdF9lcnJfY2xlYW51cDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHQuYzoxNzIwNDpcXHRibnh0X2F1eF9kZXZpY2VzX3VuaW5pdChicCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0LmMtMTcyMDUtXFx0Ym54dF9hdXhkZXZfaWRfZnJlZShicCwgYnAtXFx1MDAzZWF1eGRldl9pZCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NDY9c3RhdGljIGJvb2wgYm54dF9hdXhkZXZfaXNfYWN0aXZlKHN0cnVjdCBibnh0ICpicCwgaW50IGlkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTE6c3RhdGljIHN0cnVjdCBibnh0X2F1eF9kZXZpY2UgYm54dF9hdXhfZGV2aWNlc1tfX0JOWFRfQVVYREVWX01BWF0gPSB7e1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01Mi1cXHQubmFtZVxcdFxcdD0gXFxcInJkbWFcXFwiLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jPTQ1Mj1FWFBPUlRfU1lNQk9MKGJueHRfcmVnaXN0ZXJfYXN5bmNfZXZlbnRzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNDUzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo0NTQ6dm9pZCBibnh0X2F1eF9kZXZpY2VzX3VuaW5pdChzdHJ1Y3QgYm54dCAqYnApXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTQ1NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM9NDcxPXN0YXRpYyB2b2lkIGJueHRfYXV4X2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy00ODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jOjQ4NDp2b2lkIGJueHRfYXV4X2RldmljZXNfZGVsKHN0cnVjdCBibnh0ICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNDg1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYz00OTg9c3RhdGljIHZvaWQgYm54dF9zZXRfZWRldl9pbmZvKHN0cnVjdCBibnh0X2VuX2RldiAqZWRldiwgc3RydWN0IGJueHQgKmJwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTUyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTI1OnZvaWQgYm54dF9hdXhfZGV2aWNlc19hZGQoc3RydWN0IGJueHQgKmJwKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01MjYte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54dC9ibnh0X3VscC5jLTU0OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmM6NTQ5OnZvaWQgYm54dF9hdXhfZGV2aWNlc19pbml0KHN0cnVjdCBibnh0ICpicClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibnh0L2JueHRfdWxwLmMtNTUwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01ODItXFx0XFx0YXV4X2Rldi1cXHUwMDNlaWQgPSBicC1cXHUwMDNlYXV4ZGV2X2lkO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYzo1ODM6XFx0XFx0YXV4X2Rldi1cXHUwMDNlbmFtZSA9IGJueHRfYXV4X2RldmljZXNbaWR4XS5uYW1lO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuYy01ODQtXFx0XFx0YXV4X2Rldi1cXHUwMDNlZGV2LnBhcmVudCA9IFxcdTAwMjZicC1cXHUwMDNlcGRldi1cXHUwMDNlZGV2O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0ODowNi40ODgwNTIwMzNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0NDExMDEwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEF1eGlsaWFyeSBEZXZpY2UgQXJyYXkqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBibnh0X2F1eF9kZXZpY2VzYCBhcnJheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGN1cnJlbnQgc3RhdGUuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIGNvbnRleHQsIHRoYXQgdGhpcyBhcnJheSBsaWtlbHkgaG9sZHMgaW5mb3JtYXRpb24gY3J1Y2lhbCB0byB0aGUgcHJvcGVyIG9wZXJhdGlvbiBvZiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lIGFkYXB0ZXJzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2Ygd2hlcmUgdGhpcyBhcnJheSBpcyBwb3B1bGF0ZWQgYW5kIGhvdyB0aGUgZHJpdmVyIGludGVyYWN0cyB3aXRoIGl0LiBBcmUgd2UgZGVhbGluZyB3aXRoIHJlZ2lzdGVyZWQgZGV2aWNlcywgcGVyaGFwcyByZXByZXNlbnRpbmcgYXV4aWxpYXJ5IGZ1bmN0aW9ucyB3aXRoaW4gYSBsYXJnZXIgcGh5c2ljYWwgTklDLCBvciBhcmUgd2UgZXhhbWluaW5nIGEgZGlmZmVyZW50IGFzcGVjdCBvZiBoYXJkd2FyZSBjb25maWd1cmF0aW9uPyBLbm93aW5nIHRoZSBzdHJ1Y3R1cmUgYW5kIHB1cnBvc2Ugb2YgYGJueHRfYXV4X2RldmljZXNgIGlzIGZ1bmRhbWVudGFsIHRvIHRyb3VibGVzaG9vdGluZyBhbnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6aW5nIHRoZSBzeXN0ZW0ncyBwZXJmb3JtYW5jZS4gTXkgYW5hbHlzaXMgd2lsbCBzdGFydCBmcm9tIHRoYXQgZnVuZGFtZW50YWwgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzczLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDg6MDkuNDMyMTYzOTQ1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0NjpcXHRzdGF0aWMgYm9vbCBibnh0X2F1eGRldl9pc19hY3RpdmUoc3RydWN0IGJueHQgKmJwLCBpbnQgaWR4KVxcbiAgNDc6XFx0e1xcbiAgNDg6XFx0XFx0cmV0dXJuIChicC1cXHUwMDNlYXV4ZGV2X3N0YXRlW2lkeF0gPT0gQk5YVF9BREVWX1NUQVRFX0FERCk7XFxuICA0OTpcXHR9XFxuICA1MDpcXHRcXG4gIDUxOlxcdHN0YXRpYyBzdHJ1Y3QgYm54dF9hdXhfZGV2aWNlIGJueHRfYXV4X2RldmljZXNbX19CTlhUX0FVWERFVl9NQVhdID0ge3tcXG4gIDUyOlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwicmRtYVxcXCIsXFxuICA1MzpcXHR9LCB7XFxuICA1NDpcXHRcXHQubmFtZVxcdFxcdD0gXFxcImZ3Y3RsXFxcIixcXG4gIDU1OlxcdH19O1xcbiAgNTY6XFx0XFxuICA1NzpcXHRzdGF0aWMgdm9pZCBibnh0X2ZpbGxfbXNpeF92ZWNzKHN0cnVjdCBibnh0ICpicCwgc3RydWN0IGJueHRfbXNpeF9lbnRyeSAqZW50KVxcbiAgNTg6XFx0e1xcbiAgNTk6XFx0XFx0c3RydWN0IGJueHRfZW5fZGV2ICplZGV2ID0gYnAtXFx1MDAzZWVkZXZbQk5YVF9BVVhERVZfUkRNQV07XFxuICA2MDpcXHRcXHRpbnQgbnVtX21zaXgsIGk7XFxuICA2MTpcXHRcXG4gIDYyOlxcdFxcdGlmICghZWRldi1cXHUwMDNldWxwX3RibC1cXHUwMDNlbXNpeF9yZXF1ZXN0ZWQpIHtcXG4gIDYzOlxcdFxcdFxcdG5ldGRldl93YXJuKGJwLVxcdTAwM2VkZXYsIFxcXCJSZXF1ZXN0ZWQgTVNJLVggdmVjdG9ycyBpbnN1ZmZpY2llbnRcXFxcblxcXCIpO1xcbiAgNjQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAgNjU6XFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0ODowOS40MzIyNDEyNTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgyODA1MDg0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJETUEgYW5kIEZXQ1RMIEluaXRpYWxpemF0aW9uIGluIHRoZSBCTlhUIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBzZWUgYm90aCBcInJkbWFcIiBhbmQgXCJmd2N0bFwiIGluIHRoZSBtaXguIFRoZSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBhcmUgdGhlcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzdGVwcyBuZWNlc3NhcnkgZm9yIFJETUEgdG8gd29yayBwcm9wZXJseSB3aXRoIHRoaXMgc2V0dXA/XG5cblRoZW4gSSBub3RpY2UgdGhhdCBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBnZXRzIGNhbGxlZCB1bmNvbmRpdGlvbmFsbHkgd2l0aGluIGBibnh0X2luaXRfb25lYC4gUmlnaHQsIHRoYXQncyBpbXBvcnRhbnQuIEl0IGN5Y2xlcyB0aHJvdWdoIGEgbWF4aW11bSBvZiBgX19CTlhUX0FVWERFVl9NQVhgIGFuZCBpbml0aWFsaXplcyB0aGUgYXV4aWxpYXJ5IGRldmljZXMuIFNvLCBhcyBsb25nIGFzIGBCTlhUYCBpcyBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgZXhlY3V0ZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBSRE1BIGlzIGV4cGxpY2l0bHkgY29uZmlndXJlZC5cblxuVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgdGhlIGNydWNpYWwgcXVlc3Rpb246IGRvZXMgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgaXRzZWxmIHJlcXVpcmUgYW55IHBhcnRpY3VsYXIgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIG9yIGEgY2VydGFpbiBzZXR1cCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMzQsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMlQwODo0ODoxMy4yNjAyOTQ4NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueHQvYm54dF91bHAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NTgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NTg6XFx0XFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBfX0JOWFRfQVVYREVWX01BWDsgaWR4KyspIHtcXG4gNTU5OlxcdFxcdFxcdGJueHRfYXV4ZGV2X3NldF9zdGF0ZShicCwgaWR4LCBCTlhUX0FERVZfU1RBVEVfTk9ORSk7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdFxcdGlmIChpZHggPT0gQk5YVF9BVVhERVZfUkRNQSBcXHUwMDI2XFx1MDAyNlxcbiA1NjI6XFx0XFx0XFx0ICAgICEoYnAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgQk5YVF9GTEFHX1JPQ0VfQ0FQKSlcXG4gNTYzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA1NjQ6XFx0XFxuIDU2NTpcXHRcXHRcXHRhdXhfcHJpdiA9IGt6YWxsb2Nfb2JqKCphdXhfcHJpdik7XFxuIDU2NjpcXHRcXHRcXHRpZiAoIWF1eF9wcml2KVxcbiA1Njc6XFx0XFx0XFx0XFx0Z290byBuZXh0X2F1eGRldjtcXG4gNTY4OlxcdFxcbiA1Njk6XFx0XFx0XFx0ZWRldiA9IGt6YWxsb2Nfb2JqKCplZGV2KTtcXG4gNTcwOlxcdFxcdFxcdGlmICghZWRldilcXG4gNTcxOlxcdFxcdFxcdFxcdGdvdG8gYXV4X3ByaXZfZnJlZTtcXG4gNTcyOlxcdFxcdFxcdGF1eF9wcml2LVxcdTAwM2VlZGV2ID0gZWRldjtcXG4gNTczOlxcdFxcdFxcdGJueHRfc2V0X2VkZXZfaW5mbyhlZGV2LCBicCk7XFxuIDU3NDpcXHRcXG4gNTc1OlxcdFxcdFxcdHVscCA9IGt6YWxsb2Nfb2JqKCp1bHApO1xcbiA1NzY6XFx0XFx0XFx0aWYgKCF1bHApXFxuIDU3NzpcXHRcXHRcXHRcXHRnb3RvIGVkZXZfZnJlZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTJUMDg6NDg6MTMuMjYwNDM0MzkyWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNTU5OTgxMDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBCTlhUIEF1eGlsaWFyeSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXM6IFwiQWgsIHRoZSBgaWYgKGlkeCA9PSBCTlhUX0FVWERFVl9SRE1BIFx1MDAyNlx1MDAyNiAhKGJwLVx1MDAzZWZsYWdzIFx1MDAyNiBCTlhUX0ZMQUdfUk9DRV9DQVApKSBjb250aW51ZTtgIGxpbmUgaXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyB0aGF0IFJETUEgcmVxdWlyZXMgdGhlIGBCTlhUX0ZMQUdfUk9DRV9DQVBgIGZsYWcsIGJ1dCB0aGUgYGZ3Y3RsYCBjYXNlIGRvZXNuJ3QgY2hlY2sgYW55IGZsYWdzLCBpdCBqdXN0IHByb2NlZWRzIVwiIFRoaXMgc2VlbWVkIHBvdGVudGlhbGx5IGltcG9ydGFudC4gVGhlbiBJIHJlbWVtYmVyZWQgYF9fQk5YVF9BVVhERVZfTUFYYCBpcyAyLCBzbyB0aGUgYGZ3Y3RsYCBjYXNlIChgaWR4ID0gMWApIGFsd2F5cyBnb2VzIHRocm91Z2guIFRoYXQgbWVhbnMgdGhlIGNvZGUgaXMgcmVhY2hhYmxlIGV2ZW4gd2l0aG91dCBST0NFLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBmdXp6aW5nLCByaWdodD9cblxuVGhlcmVmb3JlLCBgRm9jdXNTeW1ib2xzYCBzaG91bGQgZGVmaW5pdGVseSBpbmNsdWRlIGBibnh0X2F1eF9kZXZpY2VzX2luaXRgLiBUaGF0J3MgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gdGFyZ2V0LlxuXG5OZXh0LCB3aGF0IGNvbmZpZ3MgYXJlIG5lZWRlZD8gSSBrbm93IHRoaXMgaXMgaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCBzbyBJJ20gcHJldHR5IGNlcnRhaW4gYEJOWFRgIGlzIHRoZSBjcml0aWNhbCBjb25maWcuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueS4gU28sIEkgcmFuIHRocm91Z2ggdGhlIGNoZWNrbGlzdCBpbiBteSBoZWFkOiBgQk5YVF9TUklPVmA/IE5vLiBgQk5YVF9GTE9XRVJfT0ZGTE9BRGA/IE5vLiBgQk5YVF9EQ0JgPyBOby4gYEJOWFRfSFdNT05gPyBOby4gYFBDSWA/IFllcywgYnV0IGl0J3MgZ2VuZXJpYyBzbyBpdCdzIHByb2JhYmx5IGFscmVhZHkgb24uIGBBVVhJTElBUllfQlVTYD8gWWVzLCBidXQgYEJOWFRgIHNlbGVjdHMgaXQuIFNvLCBqdXN0IGBCTlhUYC5cblxuSXMgdGhpcyByZWFsbHkgd29ydGggZnV6emluZz8gWWVzLCB0aGlzIHBhdGNoIGlzIGZpeGluZyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YC4gSXQgcmVvcmRlcnMgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBgYXV4aWxpYXJ5X2RldmljZV9pbml0YCwgc28gdGhlIGVycm9yIGhhbmRsaW5nIGlzIG5vdyBjb3JyZWN0LiBJdCdzIGEgZnVuY3Rpb25hbCBmaXggdGhhdCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlLiBUaGlzIHNlZW1zIGxpa2UgYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcgdmlhIFBDSSBlbXVsYXRpb24uXG5cbkkgdGhlbiBkaWQgYSBxdWljayBjaGVjayBvbiB0aGUgY29kZSBhZ2FpbiB0byBtYWtlIHN1cmUgdGhhdCBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpcyB0aGUgb25seSBmdW5jdGlvbiB0aGF0J3MgY2hhbmdlZC4gVGhlIGRpZmYgY29uZmlybXMgdGhhdCBpdCdzIHRoZSBvbmx5IG9uZSB0aGF0IG5lZWRzIHRvIGJlIGZvY3VzZWQgb24uIEkgYWxzbyBtYWRlIHN1cmUgdGhhdCBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBpc24ndCBzdGF0aWMsIGl0IGlzIGRlY2xhcmVkIGluIGBibnh0X3VscC5oYCBhbmQgdXNlZCBpbiBgYm54dC5jYCwgc28gaXQgaXMgdGhlIGNvcnJlY3Qgc3ltYm9sIG5hbWUuXG5cbkZpbmFsbHksIEkgcmV2aWV3ZWQgdGhlIGluc3RydWN0aW9ucy4gSSBuZWVkIHRvOlxuLSBFeHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBgRm9jdXNTeW1ib2xzYC4gRG9uZS5cbi0gQXZvaWQgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMuIERvbmUuXG4tIElkZW50aWZ5IHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb25zIGZvciB0aGUgbW9kaWZpZWQgY29kZS4gRG9uZS5cbi0gQXZvaWQgZ2VuZXJpYyBjb25maWdzLiBEb25lLlxuXG5JJ20gY29uZmlkZW50IGluIHRoZXNlIHJlc3VsdHMgbm93OlxuXG5gYGBcbkZvY3VzU3ltYm9sczogW1wiYm54dF9hdXhfZGV2aWNlc19pbml0XCJdXG5FbmFibGVDb25maWdzOiBbXCJCTlhUXCJdXG5Xb3J0aEZ1enppbmc6IHRydWVcblJlYXNvbmluZzogXCJUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIHBhdGggb2YgYGJueHRfYXV4X2RldmljZXNfaW5pdGAgYnkgcmVvcmRlcmluZyBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGBhdXhpbGlhcnlfZGV2aWNlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBmaXggaW4gdGhlIEJyb2FkY29tIE5ldFh0cmVtZS1DL0UgZHJpdmVyLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUENJIHByb2JlIGFuZCBpcyBzdWl0YWJsZSBmb3IgZnV6emluZyB2aWEgUENJIGVtdWxhdGlvbi5cIlxuYGBgXG5cbk9rYXksIG5vdyBsZXQncyBzdWJtaXQgdGhlc2UgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMDksIk91dHB1dFRva2VucyI6MTE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEyVDA4OjQ4OjI2LjgyMDQxNzYzN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjcyNzE2OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJOWFRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibnh0X2F1eF9kZXZpY2VzX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBieSByZW9yZGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQQ0kgcHJvYmUgYW5kIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBQQ0kgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJOWFRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJibnh0X2F1eF9kZXZpY2VzX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgYm54dF9hdXhfZGV2aWNlc19pbml0YCBieSByZW9yZGVyaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgYGF1eGlsaWFyeV9kZXZpY2VfaW5pdGAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGZpeCBpbiB0aGUgQnJvYWRjb20gTmV0WHRyZW1lLUMvRSBkcml2ZXIsIHdoaWNoIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQQ0kgcHJvYmUgYW5kIGlzIHN1aXRhYmxlIGZvciBmdXp6aW5nIHZpYSBQQ0kgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowvpkmz[1] Phase: Succeeded StartedAt: 2026-07-12 08:48:58 +0000 UTC FinishedAt: 2026-07-12 08:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-12 08:48:58 +0000 UTC FinishedAt: 2026-07-12 08:48:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2] Phase: Succeeded StartedAt: 2026-07-12 08:48:58 +0000 UTC FinishedAt: 2026-07-12 09:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-12 08:48:59 +0000 UTC FinishedAt: 2026-07-12 09:58:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-12 08:48:59 +0000 UTC FinishedAt: 2026-07-12 08:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-12 08:48:59 +0000 UTC FinishedAt: 2026-07-12 08:49:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowvpkmz/series-workflowvpkmz-convert-artifact-2353723060/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-12 08:49:42 +0000 UTC FinishedAt: 2026-07-12 09:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-12 08:49:42 +0000 UTC FinishedAt: 2026-07-12 09:22:30 +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:*e2f50a1c-bad3-4d87-ac46-c35f394c8d9a,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-workflowvpkmz/series-workflowvpkmz-convert-artifact-2353723060/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": "44dc5824-c8c7-4477-a52e-b4a185f934f3", "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-workflowvpkmz/series-workflowvpkmz-build-action-3903761586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-12 08:49:42 +0000 UTC FinishedAt: 2026-07-12 09:20:58 +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:*e2f50a1c-bad3-4d87-ac46-c35f394c8d9a,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-workflowvpkmz/series-workflowvpkmz-convert-artifact-2353723060/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": "44dc5824-c8c7-4477-a52e-b4a185f934f3", "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-workflowvpkmz/series-workflowvpkmz-build-action-3903761586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-12 09:22:30 +0000 UTC FinishedAt: 2026-07-12 09:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-12 09:22:30 +0000 UTC FinishedAt: 2026-07-12 09:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-12 09:22:30 +0000 UTC FinishedAt: 2026-07-12 09:22:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-12 09:22:30 +0000 UTC FinishedAt: 2026-07-12 09:22:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowvpkmz/series-workflowvpkmz-convert-artifact-1713499507/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-12 09:22:50 +0000 UTC FinishedAt: 2026-07-12 09:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-12 09:22:50 +0000 UTC FinishedAt: 2026-07-12 09:24:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*44dc5824-c8c7-4477-a52e-b4a185f934f3,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-workflowvpkmz/series-workflowvpkmz-build-action-3903761586/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-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-12 09:24:56 +0000 UTC FinishedAt: 2026-07-12 09:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-12 09:24:56 +0000 UTC FinishedAt: 2026-07-12 09:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-12 09:24:56 +0000 UTC FinishedAt: 2026-07-12 09:54:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-12 09:24:56 +0000 UTC FinishedAt: 2026-07-12 09:54:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e2f50a1c-bad3-4d87-ac46-c35f394c8d9a,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-workflowvpkmz/series-workflowvpkmz-convert-artifact-1713499507/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": "f57e0936-441e-47f3-a9f1-2b40c094aaa3", "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-workflowvpkmz/series-workflowvpkmz-build-action-3410535719/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-12 09:24:56 +0000 UTC FinishedAt: 2026-07-12 09:54:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*e2f50a1c-bad3-4d87-ac46-c35f394c8d9a,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-workflowvpkmz/series-workflowvpkmz-convert-artifact-1713499507/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": "f57e0936-441e-47f3-a9f1-2b40c094aaa3", "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-workflowvpkmz/series-workflowvpkmz-build-action-3410535719/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-12 09:54:17 +0000 UTC FinishedAt: 2026-07-12 09:54:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-12 09:54:17 +0000 UTC FinishedAt: 2026-07-12 09:54:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-12 09:54:17 +0000 UTC FinishedAt: 2026-07-12 09:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-12 09:54:17 +0000 UTC FinishedAt: 2026-07-12 09:56:18 +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:*f57e0936-441e-47f3-a9f1-2b40c094aaa3,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-workflowvpkmz/series-workflowvpkmz-build-action-3410535719/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-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-12 09:56:28 +0000 UTC FinishedAt: 2026-07-12 09:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-12 09:56:28 +0000 UTC FinishedAt: 2026-07-12 09:58:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"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:*44dc5824-c8c7-4477-a52e-b4a185f934f3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f57e0936-441e-47f3-a9f1-2b40c094aaa3,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-workflowvpkmz/series-workflowvpkmz-build-action-3903761586/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-workflowvpkmz/series-workflowvpkmz-build-action-3410535719/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-12 09:56:28 +0000 UTC FinishedAt: 2026-07-12 09:57:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-12 09:56:28 +0000 UTC FinishedAt: 2026-07-12 09:57:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"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-workflowvpkmz/series-workflowvpkmz-convert-artifact-2564481900/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-12 09:56:28 +0000 UTC FinishedAt: 2026-07-12 09:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-12 09:56:28 +0000 UTC FinishedAt: 2026-07-12 09:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-12 09:56:28 +0000 UTC FinishedAt: 2026-07-12 09:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-12 09:57:12 +0000 UTC FinishedAt: 2026-07-12 09:58:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvpkmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["bnxt_aux_devices_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3f1f755366687d051174739fb99f7d560202f60b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BNXT"],"series_id":"e96de2f7-1ae9-4604-9a0b-91e65966743f","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-12 09:57:12 +0000 UTC FinishedAt: 2026-07-12 09:58:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*44dc5824-c8c7-4477-a52e-b4a185f934f3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f57e0936-441e-47f3-a9f1-2b40c094aaa3,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-workflowvpkmz/series-workflowvpkmz-build-action-3903761586/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-workflowvpkmz/series-workflowvpkmz-build-action-3410535719/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-workflowvpkmz/series-workflowvpkmz-convert-artifact-2564481900/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,}