Name: series-workflowlc95x Phase: Succeeded StartedAt: 2026-09-04 01:51:50 +0000 UTC FinishedAt: 2026-09-04 05:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[0] Phase: Succeeded StartedAt: 2026-09-04 01:51:50 +0000 UTC FinishedAt: 2026-09-04 02:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 01:51:50 +0000 UTC FinishedAt: 2026-09-04 02:08:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "96c8ea3c5add7920b3c43840d1ea76b3354c8d2d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "96c8ea3c5add7920b3c43840d1ea76b3354c8d2d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "45b97770-8f00-4a30-b08b-3d7174d3b1af" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "loop_clear_limits_workfn", "loop_clear_limits", "loop_assign_backing_file", "__loop_clr_fd", "lo_fallocate", "loop_change_fd", "loop_configure", "loop_remove" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LAogICAgJiMzNDtsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUmIzM0OywKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7bG9vcF9jaGFuZ2VfZmQmIzM0OywKICAgICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7bG9vcF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgcXVldWUgbGltaXRzIGNsZWFyaW5nIGluIHRoZSBsb29wIGJsb2NrIGRyaXZlciAoYGRyaXZlcnMvYmxvY2svbG9vcC5jYCkgYnkgbW92aW5nIHRoZSBsaW1pdCB1cGRhdGUgZnJvbSB0aGUgcmVxdWVzdCBleGVjdXRpb24gY29udGV4dCAoYGxvX2ZhbGxvY2F0ZWApIHRvIGEgZGVmZXJyZWQgd29ya3F1ZXVlIGl0ZW0gKGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gKS4gSXQgaW50cm9kdWNlcyBhIHdvcmsgc3RydWN0IGFuZCBhdG9taWMgZ2VuZXJhdGlvbiBjb3VudGVycyAoYHJlYmluZF9nZW5gLCBgY2xlYXJfbGltaXRzX2dlbmAsIGBjbGVhcl9saW1pdHNfbW9kZWApIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCB0byBzYWZlbHkgZnJlZXplIHRoZSBxdWV1ZSBhbmQgY29tbWl0IGxpbWl0cyB1cGRhdGVzIGFzeW5jaHJvbm91c2x5IHdpdGhvdXQgcmFjZSBjb25kaXRpb25zIG9uIGJhY2tpbmcgZmlsZSByZWJpbmRpbmcuXG5cbkFsbCBhZGRlZCBmaWVsZHMgYXJlIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHVzaW5nIGBremFsbG9jX29iamAgYW5kIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbG9jYWwgdmFyaWFibGVzIHdpdGhpbiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIG5vIGtlcm5lbCBkYXRhIGlzIGNvcGllZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCByaXNrcyB3aXRoIHRoaXMgcGF0Y2ggcmVsYXRlIHRvIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbnMsIHF1ZXVlIGxvY2tpbmcvZnJlZXppbmcsIGFuZCB3b3JrcXVldWUgY2FuY2VsbGF0aW9uIGxpZmV0aW1lcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBkZWJ1ZyB0b29scyAoS0FTQU4sIExPQ0tERVApLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyIHRvIGRlZmVyIHF1ZXVlIGxpbWl0cyBjbGVhcmluZyB0byBhIHdvcmtxdWV1ZSBpdGVtIChsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pIHNvIHRoZSBxdWV1ZSBjYW4gYmUgcHJvcGVybHkgZnJvemVuIHdpdGggYmxrX21xX2ZyZWV6ZV9xdWV1ZS4gSXQgYWRkcyBnZW5lcmF0aW9uIGNvdW50ZXJzIGFuZCBhdG9taWMgc3RhdGUgdG8gc3luY2hyb25pemUgYWdhaW5zdCByZWJpbmQvY2xlYXIgb3BlcmF0aW9ucy4gVGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBkcml2ZXIgY29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NjFhMWYyYTY5MzYxYWIyZGUyMTk4OTJjMTliMTZhOWU0MzYyMDVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMjowNzoyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA2ZjEyOTc2MDM1YjA5Li45ZjZlNTE4ZTYwZDI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNjcsNiAmIzQzOzY3LDEwIEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICByb290Y2dfY21kX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBpZGxlX3dvcmtlcl9saXN0O1xuIFx0c3RydWN0IHJiX3Jvb3QgICAgICAgICAgd29ya2VyX3RyZWU7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7XG4mIzQzO1x0YXRvbWljX3RcdFx0Y2xlYXJfbGltaXRzX21vZGU7XG4mIzQzO1x0YXRvbWljX3RcdFx0cmViaW5kX2dlbjtcbiYjNDM7XHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfZ2VuO1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7XG4gXHRib29sXHRcdFx0c3lzZnNfaW5pdGVkO1xuIFxuQEAgLTIyMiwyNiAmIzQzOzIyNiw0NCBAQCBzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxuIFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuJiM0MztzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGNsZWFyX2xpbWl0c193b3JrKTtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4tXG4tXHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXG4tXHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuLVxuLVx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG4tXHRcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcbi1cdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuLVx0fVxuJiM0MztcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiYjNDM7XHRpbnQgbW9kZSA9IDA7XG4gXG4gXHQvKlxuLVx0ICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2hcbi1cdCAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4mIzM5O3QganVzdFxuLVx0ICogZnJlZXplIHRoZSBxdWV1ZSBhcyB3ZSYjMzk7cmUgaW5zaWRlIHRoZSAtXHUwMDNlcXVldWVfcnEgbWV0aG9kIGhlcmUuICBTbyB0aGlzXG4tXHQgKiBzaG91bGQgbW92ZSBvdXQgaW50byBhIHdvcmtxdWV1ZSB1bmxlc3Mgd2UgZ2V0IHRoZSBmaWxlIG9wZXJhdGlvbnMgdG9cbi1cdCAqIGFkdmVydGlzZSBpZiB0aGV5IHN1cHBvcnQgc3BlY2lmaWMgZmFsbG9jYXRlIG9wZXJhdGlvbnMuXG4mIzQzO1x0ICogQ29tbWl0IHRoZSB1bm1vZGlmaWVkIGxpbWl0cyBpZiB0aGUgZGV2aWNlIHdhcyByZWJvdW5kIHNpbmNlXG4mIzQzO1x0ICogdGhlIHdvcmsgaXRlbSB3YXMgc2NoZWR1bGVkLiAgVGhlIGZyZWV6ZSBleGNsdWRlcyBhIHJlYmluZFxuJiM0MztcdCAqIHRocm91Z2ggbG9vcF9jaGFuZ2VfZmQoKSwgd2hpY2ggYXNzaWducyB0aGUgbmV3IGJhY2tpbmcgZmlsZVxuJiM0MztcdCAqIHVuZGVyIHRoZSBmcmVlemU7IHRoZSBvdGhlciByZWJpbmRpbmcgcGF0aHMsIGxvb3BfY29uZmlndXJlKClcbiYjNDM7XHQgKiBhbmQgX19sb29wX2Nscl9mZCgpLCBkbyBub3QgZnJlZXplIHRoZSBxdWV1ZSwgYnV0IHRoZXkgYnVtcFxuJiM0MztcdCAqIHJlYmluZF9nZW4gYW5kIHJlc2V0IGNsZWFyX2xpbWl0c19tb2RlIHRoZW1zZWx2ZXMsIHNvIHRoZVxuJiM0MztcdCAqIGdlbmVyYXRpb24gY2hlY2sgYW5kIHRoZSBhdG9taWNfeGNoZygpIGJlbG93IGNvdmVyIHRoZW0uXG4gXHQgKi9cbiYjNDM7XHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuJiM0MztcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfZ2VuKSA9PSBhdG9taWNfcmVhZChcdTAwMjZsby1cdTAwM2VyZWJpbmRfZ2VuKSkge1xuJiM0MztcdFx0bW9kZSA9IGF0b21pY194Y2hnKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXG4mIzQzO1x0XHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xuJiM0MztcdFx0XHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XG4mIzQzO1x0XHRcdGxpbS5kaXNjYXJkX2dyYW51bGFyaXR5ID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUsIG1lbWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4mIzQzO3tcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19nZW4sIGF0b21pY19yZWFkKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pKTtcbiYjNDM7XHRhdG9taWNfb3IobW9kZSwgXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX21vZGUpO1xuJiM0MztcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIH1cbiBcbiBzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG5AQCAtNTE2LDYgJiM0Mzs1MzgsOCBAQCBzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gZmlsZTtcbiYjNDM7XHRhdG9taWNfaW5jKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX21vZGUsIDApO1xuIFx0bG8tXHUwMDNlb2xkX2dmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhmaWxlLVx1MDAzZWZfbWFwcGluZyk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxlLVx1MDAzZWZfbWFwcGluZyxcbiBcdFx0XHRsby1cdTAwM2VvbGRfZ2ZwX21hc2sgXHUwMDI2IH4oX19HRlBfSU8gfCBfX0dGUF9GUykpO1xuQEAgLTExNDQsNiAmIzQzOzExNjgsMTIgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdGZpbHAgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW52YWxpZGF0ZSBhbnkgcGVuZGluZyBjbGVhciB0aGF0IHdhcyBzY2hlZHVsZWQgYWdhaW5zdCB0aGUgb2xkXG4mIzQzO1x0ICogYmFja2luZyBmaWxlLCBsaWtlIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSgpIGRvZXMgb24gcmViaW5kLlxuJiM0MztcdCAqL1xuJiM0MztcdGF0b21pY19pbmMoXHUwMDI2bG8tXHUwMDNlcmViaW5kX2dlbik7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXG4gXHRsby1cdTAwM2Vsb19kZXZpY2UgPSBOVUxMO1xuQEAgLTE3ODEsNiAmIzQzOzE4MTEsNyBAQCBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGxvLVx1MDAzZXdvcmtxdWV1ZSk7XG4gXHRsb29wX2ZyZWVfaWRsZV93b3JrZXJzKGxvLCB0cnVlKTtcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2bG8tXHUwMDNldGltZXIpO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4gXHRrZnJlZShsbyk7XG4gfVxuQEAgLTIxMDAsNiAmIzQzOzIxMzEsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb193b3JrX2xvY2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ19jbWRfbGlzdCk7XG4gXHRkaXNrLVx1MDAzZW1ham9yXHRcdD0gTE9PUF9NQUpPUjtcbiBcdGRpc2stXHUwMDNlZmlyc3RfbWlub3JcdD0gaSBcdTAwM2NcdTAwM2MgcGFydF9zaGlmdDtcbkBAIC0yMTM4LDYgJiM0MzsyMTcwLDEwIEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4mIzQzO1x0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcbiYjNDM7XHQgKiBieSB0aGUgdGltZSBsb19mcmVlX2Rpc2soKSBydW5zLiAqL1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuJiM0MztcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LAogICAgJiMzNDtsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUmIzM0OywKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7bG9vcF9jaGFuZ2VfZmQmIzM0OywKICAgICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7bG9vcF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvb3AgYmxvY2sgZGV2aWNlIGRyaXZlciB0byBkZWZlciBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKSBzbyB0aGUgcXVldWUgY2FuIGJlIHByb3Blcmx5IGZyb3plbiB3aXRoIGJsa19tcV9mcmVlemVfcXVldWUuIEl0IGFkZHMgZ2VuZXJhdGlvbiBjb3VudGVycyBhbmQgYXRvbWljIHN0YXRlIHRvIHN5bmNocm9uaXplIGFnYWluc3QgcmViaW5kL2NsZWFyIG9wZXJhdGlvbnMuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgZHJpdmVyIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTYxYTFmMmE2OTM2MWFiMmRlMjE5ODkyYzE5YjE2YTllNDM2MjA1ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDI6MDc6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDZmMTI5NzYwMzViMDkuLjlmNmU1MThlNjBkMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC02Nyw2ICYjNDM7NjcsMTAgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICByb290Y2dfY21kX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgaWRsZV93b3JrZXJfbGlzdDsKIAlzdHJ1Y3QgcmJfcm9vdCAgICAgICAgICB3b3JrZXJfdHJlZTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7CiYjNDM7CWF0b21pY190CQljbGVhcl9saW1pdHNfbW9kZTsKJiM0MzsJYXRvbWljX3QJCXJlYmluZF9nZW47CiYjNDM7CWF0b21pY190CQljbGVhcl9saW1pdHNfZ2VuOwogCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyOwogCWJvb2wJCQlzeXNmc19pbml0ZWQ7CiAKQEAgLTIyMiwyNiAmIzQzOzIyNiw0NCBAQCBzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKQogCQlrb2JqZWN0X3VldmVudCgmYW1wO2Rpc2tfdG9fZGV2KGxvLSZndDtsb19kaXNrKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogfQogCi1zdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSkKJiM0MztzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewomIzQzOwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0KJiM0MzsJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGNsZWFyX2xpbWl0c193b3JrKTsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKLQotCWlmIChtb2RlICZhbXA7IEZBTExPQ19GTF9aRVJPX1JBTkdFKQotCQlsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDsKLQotCWlmIChtb2RlICZhbXA7IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7Ci0JCWxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDsKLQkJbGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwOwotCX0KJiM0MzsJdW5zaWduZWQgaW50IG1lbWZsYWdzOwomIzQzOwlpbnQgbW9kZSA9IDA7CiAKIAkvKgotCSAqIFhYWDogdGhpcyB1cGRhdGVzIHRoZSBxdWV1ZSBsaW1pdHMgd2l0aG91dCBmcmVlemluZyB0aGUgcXVldWUsIHdoaWNoCi0JICogaXMgYWdhaW5zdCB0aGUgbG9ja2luZyBwcm90b2NvbCBhbmQgZGFuZ2Vyb3VzLiAgQnV0IHdlIGNhbiYjMzk7dCBqdXN0Ci0JICogZnJlZXplIHRoZSBxdWV1ZSBhcyB3ZSYjMzk7cmUgaW5zaWRlIHRoZSAtJmd0O3F1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpcwotCSAqIHNob3VsZCBtb3ZlIG91dCBpbnRvIGEgd29ya3F1ZXVlIHVubGVzcyB3ZSBnZXQgdGhlIGZpbGUgb3BlcmF0aW9ucyB0bwotCSAqIGFkdmVydGlzZSBpZiB0aGV5IHN1cHBvcnQgc3BlY2lmaWMgZmFsbG9jYXRlIG9wZXJhdGlvbnMuCiYjNDM7CSAqIENvbW1pdCB0aGUgdW5tb2RpZmllZCBsaW1pdHMgaWYgdGhlIGRldmljZSB3YXMgcmVib3VuZCBzaW5jZQomIzQzOwkgKiB0aGUgd29yayBpdGVtIHdhcyBzY2hlZHVsZWQuICBUaGUgZnJlZXplIGV4Y2x1ZGVzIGEgcmViaW5kCiYjNDM7CSAqIHRocm91Z2ggbG9vcF9jaGFuZ2VfZmQoKSwgd2hpY2ggYXNzaWducyB0aGUgbmV3IGJhY2tpbmcgZmlsZQomIzQzOwkgKiB1bmRlciB0aGUgZnJlZXplOyB0aGUgb3RoZXIgcmViaW5kaW5nIHBhdGhzLCBsb29wX2NvbmZpZ3VyZSgpCiYjNDM7CSAqIGFuZCBfX2xvb3BfY2xyX2ZkKCksIGRvIG5vdCBmcmVlemUgdGhlIHF1ZXVlLCBidXQgdGhleSBidW1wCiYjNDM7CSAqIHJlYmluZF9nZW4gYW5kIHJlc2V0IGNsZWFyX2xpbWl0c19tb2RlIHRoZW1zZWx2ZXMsIHNvIHRoZQomIzQzOwkgKiBnZW5lcmF0aW9uIGNoZWNrIGFuZCB0aGUgYXRvbWljX3hjaGcoKSBiZWxvdyBjb3ZlciB0aGVtLgogCSAqLwomIzQzOwltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlKTsKJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19nZW4pID09IGF0b21pY19yZWFkKCZhbXA7bG8tJmd0O3JlYmluZF9nZW4pKSB7CiYjNDM7CQltb2RlID0gYXRvbWljX3hjaGcoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGUsIDApOwomIzQzOwomIzQzOwkJaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpCiYjNDM7CQkJbGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7CiYjNDM7CiYjNDM7CQlpZiAobW9kZSAmYW1wOyBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkgewomIzQzOwkJCWxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDsKJiM0MzsJCQlsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7CiYjNDM7CQl9CiYjNDM7CX0KIAlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUsICZhbXA7bGltKTsKJiM0MzsJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgbWVtZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSkKJiM0Mzt7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX2dlbiwgYXRvbWljX3JlYWQoJmFtcDtsby0mZ3Q7cmViaW5kX2dlbikpOwomIzQzOwlhdG9taWNfb3IobW9kZSwgJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGUpOwomIzQzOwlzY2hlZHVsZV93b3JrKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c193b3JrKTsKIH0KIAogc3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLApAQCAtNTE2LDYgJiM0Mzs1MzgsOCBAQCBzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlsby0mZ3Q7bG9fYmFja2luZ19maWxlID0gZmlsZTsKJiM0MzsJYXRvbWljX2luYygmYW1wO2xvLSZndDtyZWJpbmRfZ2VuKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfbW9kZSwgMCk7CiAJbG8tJmd0O29sZF9nZnBfbWFzayA9IG1hcHBpbmdfZ2ZwX21hc2soZmlsZS0mZ3Q7Zl9tYXBwaW5nKTsKIAltYXBwaW5nX3NldF9nZnBfbWFzayhmaWxlLSZndDtmX21hcHBpbmcsCiAJCQlsby0mZ3Q7b2xkX2dmcF9tYXNrICZhbXA7IH4oX19HRlBfSU8gfCBfX0dGUF9GUykpOwpAQCAtMTE0NCw2ICYjNDM7MTE2OCwxMiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJc3Bpbl9sb2NrX2lycSgmYW1wO2xvLSZndDtsb19sb2NrKTsKIAlmaWxwID0gbG8tJmd0O2xvX2JhY2tpbmdfZmlsZTsKIAlsby0mZ3Q7bG9fYmFja2luZ19maWxlID0gTlVMTDsKJiM0MzsJLyoKJiM0MzsJICogSW52YWxpZGF0ZSBhbnkgcGVuZGluZyBjbGVhciB0aGF0IHdhcyBzY2hlZHVsZWQgYWdhaW5zdCB0aGUgb2xkCiYjNDM7CSAqIGJhY2tpbmcgZmlsZSwgbGlrZSBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoKSBkb2VzIG9uIHJlYmluZC4KJiM0MzsJICovCiYjNDM7CWF0b21pY19pbmMoJmFtcDtsby0mZ3Q7cmViaW5kX2dlbik7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGUsIDApOwogCXNwaW5fdW5sb2NrX2lycSgmYW1wO2xvLSZndDtsb19sb2NrKTsKIAogCWxvLSZndDtsb19kZXZpY2UgPSBOVUxMOwpAQCAtMTc4MSw2ICYjNDM7MTgxMSw3IEBAIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAkJZGVzdHJveV93b3JrcXVldWUobG8tJmd0O3dvcmtxdWV1ZSk7CiAJbG9vcF9mcmVlX2lkbGVfd29ya2VycyhsbywgdHJ1ZSk7CiAJdGltZXJfc2h1dGRvd25fc3luYygmYW1wO2xvLSZndDt0aW1lcik7CiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmspOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtsby0mZ3Q7bG9fbXV0ZXgpOwogCWtmcmVlKGxvKTsKIH0KQEAgLTIxMDAsNiAmIzQzOzIxMzEsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCXNwaW5fbG9ja19pbml0KCZhbXA7bG8tJmd0O2xvX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZhbXA7bG8tJmd0O2xvX3dvcmtfbG9jayk7CiAJSU5JVF9XT1JLKCZhbXA7bG8tJmd0O3Jvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pOwomIzQzOwlJTklUX1dPUksoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmssIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbik7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtsby0mZ3Q7cm9vdGNnX2NtZF9saXN0KTsKIAlkaXNrLSZndDttYWpvcgkJPSBMT09QX01BSk9SOwogCWRpc2stJmd0O2ZpcnN0X21pbm9yCT0gaSAmbHQ7Jmx0OyBwYXJ0X3NoaWZ0OwpAQCAtMjEzOCw2ICYjNDM7MjE3MCwxMCBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogewomIzQzOwkvKiBDYW5jZWwgZWFybHk6IHRoZSBxdWV1ZSBtYXkgYmUgaW4gUkNVLWRlbGF5ZWQgZnJlZWluZwomIzQzOwkgKiBieSB0aGUgdGltZSBsb19mcmVlX2Rpc2soKSBydW5zLiAqLwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c193b3JrKTsKJiM0MzsKIAkvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi8KIAlkZWxfZ2VuZGlzayhsby0mZ3Q7bG9fZGlzayk7CiAJYmxrX21xX2ZyZWVfdGFnX3NldCgmYW1wO2xvLSZndDt0YWdfc2V0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ1NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3AgQmxvY2sgRGV2aWNlIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGZ1enotd29ydGh5LCB3aGF0IHRoZSBpZGVhbCBjb25maWd1cmF0aW9uIHdpbGwgYmUsIGFuZCB3aGljaCBzeW1ib2xzIHdlIHNob3VsZCBob25lIGluIG9uLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZmV3IG5ldyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgOiBgY2xlYXJfbGltaXRzX3dvcmtgLCBgY2xlYXJfbGltaXRzX21vZGVgLCBgcmViaW5kX2dlbmAsIGFuZCBgY2xlYXJfbGltaXRzX2dlbmAuIENydWNpYWxseSwgaXQgcmVwbGFjZXMgYSBkYW5nZXJvdXMgZGlyZWN0IGNhbGwgdG8gYGxvb3BfY2xlYXJfbGltaXRzYCAod2l0aCB0aGF0IGFsYXJtaW5nIGNvbW1lbnQgYWJvdXQgdW5zYWZlIGxpbWl0IHVwZGF0ZXMpIHdpdGggYSBkZWZlcnJlZCB3b3JrIG1lY2hhbmlzbSBpbnZvbHZpbmcgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAuIFRoaXMgd29yayBmdW5jdGlvbiBub3cgdXNlcyBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgd2hpY2ggaXMgcHJvbWlzaW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBiZWNhdXNlIGl0IG1lYW5zIHdlIGhhdmUgbG9ja2luZyB0aGF0IHdlIGNhbiBhbmFseXplLiBXZSBub3cgaGF2ZSBzY2hlZHVsaW5nIHdvcmsgd2l0aCBgc2NoZWR1bGVfd29yaygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yaylgLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLCBgX19sb29wX2Nscl9mZGAsIGBsb19mcmVlX2Rpc2tgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYCwgc3VnZ2VzdGluZyB0aGF0IHRoZSBtb2RpZmljYXRpb25zIGFyZSBmYWlybHkgd2lkZXNwcmVhZCB3aXRoaW4gdGhlIGRyaXZlci4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIHdoYXQmIzM5O3MgcmVxdWlyZWQgdG8gYnVpbGQgdGhpcyBkcml2ZXIsIHNvIEkgY2FuIGNvbmZpZ3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBjb3JyZWN0bHkuIEEgcXVpY2sgY2hlY2sgb2YgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdXNpbmcgYGdyZXBwZXJgIHNob3VsZCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxLX0RFVl9MT09QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cdGludCBcJiMzNDtOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTgxOlx0ZGVwZW5kcyBvbiBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXHRkZWZhdWx0IDhcbi0tXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19CTEtfREVWX1JBTSlcdCYjNDM7PSBicmQub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQkxLX0RFVl9MT09QKVx0JiM0Mzs9IGxvb3Aub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0yMy1vYmotJChDT05GSUdfU1VOVkRDKVx0XHQmIzQzOz0gc3VudmRjLm9cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODM4LSAqIGNoYW5nZWQgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSAwIGZvciBtYXhfbG9vcD0wIHJlYXNvbnMpLCBqdXN0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODM5OiAqIGNyZWF0ZSBDT05GSUdfQkxLX0RFVl9MT09QX01JTl9DT1VOVCBsb29wIGRldmljZXMgYXQgbW9kdWxlXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQwLSAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg0My0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDQ6c3RhdGljIGludCBtYXhfbG9vcCA9IENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTg0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTczCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzb21lIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcyDigJMgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGV4cGVjdCB0aGF0IGxpbmUgMTQ0LCBvciB0aGVyZWFib3V0cywgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBkZXBlbmRzIG9uLiBJJiMzOTtsbCBjaGVjayB0aGF0IGFyZWEgYW5kIHNlZSBpZiBpdCBnaXZlcyBhIGdvb2Qgb3ZlcnZpZXcuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIGRlcGVuZGVuY2llcywgYW5kIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRjb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXG4gMTQxOlx0XHRib29sXG4gMTQyOlx0XHRkZWZhdWx0IEJMS19ERVZfVUJEXG4gMTQzOlx0XG4gMTQ0Olx0Y29uZmlnIEJMS19ERVZfTE9PUFxuIDE0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAxNDY6XHRcdGhlbHBcbiAxNDc6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgYSByZWd1bGFyIGZpbGUgYXMgYSBibG9ja1xuIDE0ODpcdFx0ICBkZXZpY2U7IHlvdSBjYW4gdGhlbiBjcmVhdGUgYSBmaWxlIHN5c3RlbSBvbiB0aGF0IGJsb2NrIGRldmljZSBhbmRcbiAxNDk6XHRcdCAgbW91bnQgaXQganVzdCBhcyB5b3Ugd291bGQgbW91bnQgb3RoZXIgYmxvY2sgZGV2aWNlcyBzdWNoIGFzIGhhcmRcbiAxNTA6XHRcdCAgZHJpdmUgcGFydGl0aW9ucywgQ0QtUk9NIGRyaXZlcyBvciBmbG9wcHkgZHJpdmVzLiBUaGUgbG9vcCBkZXZpY2VzXG4gMTUxOlx0XHQgIGFyZSBibG9jayBzcGVjaWFsIGRldmljZSBmaWxlcyB3aXRoIG1ham9yIG51bWJlciA3IGFuZCB0eXBpY2FsbHlcbiAxNTI6XHRcdCAgY2FsbGVkIC9kZXYvbG9vcDAsIC9kZXYvbG9vcDEgZXRjLlxuIDE1MzpcdFxuIDE1NDpcdFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcbiAxNTU6XHRcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcbiAxNTY6XHRcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxuIDE1NzpcdFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcbiAxNTg6XHRcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxuIDE1OTpcdFx0ICBkcml2ZXIuXG4gMTYwOlx0XG4gMTYxOlx0XHQgIFRvIHVzZSB0aGUgbG9vcCBkZXZpY2UsIHlvdSBuZWVkIHRoZSBsb3NldHVwIHV0aWxpdHksIGZvdW5kIGluIHRoZVxuIDE2MjpcdFx0ICB1dGlsLWxpbnV4IHBhY2thZ2UsIHNlZVxuIDE2MzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L1x1MDAzZS5cbiAxNjQ6XHRcbiAxNjU6XHRcdCAgVGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHRvIFwmIzM0O2hpZGVcJiMzNDsgYSBmaWxlIHN5c3RlbSBpblxuIDE2NjpcdFx0ICBhIGRpc2sgcGFydGl0aW9uLCBmbG9wcHksIG9yIHJlZ3VsYXIgZmlsZSwgZWl0aGVyIHVzaW5nIGVuY3J5cHRpb25cbiAxNjc6XHRcdCAgKHNjcmFtYmxpbmcgdGhlIGRhdGEpIG9yIHN0ZWdhbm9ncmFwaHkgKGhpZGluZyB0aGUgZGF0YSBpbiB0aGUgbG93XG4gMTY4Olx0XHQgIGJpdHMgb2YsIHNheSwgYSBzb3VuZCBmaWxlKS4gVGhpcyBpcyBhbHNvIHNhZmUgaWYgdGhlIGZpbGUgcmVzaWRlc1xuIDE2OTpcdFx0ICBvbiBhIHJlbW90ZSBmaWxlIHNlcnZlci5cbiAxNzA6XHRcbiAxNzE6XHRcdCAgTm90ZSB0aGF0IHRoaXMgbG9vcCBkZXZpY2UgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgbG9vcGJhY2tcbiAxNzI6XHRcdCAgZGV2aWNlIHVzZWQgZm9yIG5ldHdvcmsgY29ubmVjdGlvbnMgZnJvbSB0aGUgbWFjaGluZSB0byBpdHNlbGYuXG4gMTczOlx0XG4gMTc0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDE3NTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbG9vcC5cbiAxNzY6XHRcbiAxNzc6XHRcdCAgTW9zdCB1c2VycyB3aWxsIGFuc3dlciBOIGhlcmUuXG4gMTc4Olx0XG4gMTc5Olx0Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDY0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIExvb3AgRGV2aWNlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgYEJMS19ERVZfTE9PUGAgcGF0Y2gsIEkgc2VlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW51c3VhbCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGV4cGVjdGVkIHNpbmNlIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIGJsb2NrIHN1YnN5c3RlbS4gVGhlIGxvb3AgZGV2aWNlIGl0c2VsZiBpcyBkZWZpbml0ZWx5IGFjY2Vzc2libGUuIEl0JiMzOTtzIGhlYXZpbHkgdXRpbGl6ZWQgYW5kIEkgY2FuIGVhc2lseSBpbnRlcmFjdCB3aXRoIGl0IHRocm91Z2ggYGlvY3RsYCBjYWxscyBhbmQgc3RhbmRhcmQgb3BlcmF0aW9ucyBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBHQ0UsIGFuZCBldmVuIHN5emthbGxlciwgdXNpbmcgdGhlIHR5cGljYWwgYC9kZXYvbG9vcCpgIGRldmljZXMgYW5kIGFzc29jaWF0ZWQgY29tbWFuZHMgbGlrZSBgTE9PUF9TRVRfRkRgLCBgTE9PUF9DT05GSUdVUkVgLCBhbmQgc28gb24uCgpJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidCEgVGhlIHBhdGNoIGlzIGZpZGRsaW5nIHdpdGggc29tZSBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyByZWxhdGVkIHRvIGhvdyB0aGUgcXVldWUgbGltaXRzIGFyZSB1cGRhdGVkIGFzeW5jaHJvbm91c2x5IHVzaW5nIGEgd29ya3F1ZXVlLiBJdCYjMzk7cyBhbHNvIHRvdWNoaW5nIHF1ZXVlIGZyZWV6aW5nIHdpdGggYGJsa19tcV9mcmVlemVfcXVldWVgLCBhdG9taWMgZ2VuZXJhdGlvbnMsIHJlYmluZGluZyBoYW5kbGluZywgYW5kIGV2ZW4gd29yayBjYW5jZWxsYXRpb24gZHVyaW5nIGNsZWFudXAuIFRoYXQmIzM5O3MgYSBnb29kIGFtb3VudCBvZiByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIGJlaW5nIG1vZGlmaWVkIHdpdGggYWxsIHNvcnRzIG9mIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgc3RhdGUgY2hhbmdlcy4gVGhpcyBpcyAqcHJpbWUqIGZ1enppbmcgbWF0ZXJpYWwuCgpOb3csIGxldCBtZSBydW4gdGhyb3VnaCB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggbW9kaWZpZXMgb3IgaW50cm9kdWNlcy4gSSYjMzk7bSBzZWVpbmc6CgoxLiAgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAKMi4gIGBsb29wX2NsZWFyX2xpbWl0c2AKMy4gIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgCjQuICBgX19sb29wX2Nscl9mZGAKNS4gIGBsb19mYWxsb2NhdGVgIChhbmQgSSBzZWUgYGxvb3BfY2xlYXJfbGltaXRzYCBpcyBjYWxsZWQgaGVyZSkKNi4gIGBsb29wX3JlbW92ZWAKNy4gIGBsb19mcmVlX2Rpc2tgCgpJIHNob3VsZCByZWFsbHkgZGlnIGludG8gd2hlcmUgYGxvb3BfY2xlYXJfbGltaXRzYCBpcyBjYWxsZWQgd2l0aGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGF0JiMzOTtzIGdvaW5nIHRvIGJlIGtleSB0byBjcmFmdGluZyBlZmZlY3RpdmUgZnV6emluZyBzdHJhdGVnaWVzLiBJIGJldCB0aGVyZSBhcmUgc29tZSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlcmUgd2FpdGluZyB0byBiZSBkaXNjb3ZlcmVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfY2xlYXJfbGltaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9MjIzPXN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI5OnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzAte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI2MjpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2My17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjY5PXN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yOTItXHRpZiAodW5saWtlbHkocmV0ID09IC1FT1BOT1RTVVBQKSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI5MzpcdFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjk0LVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwNTI9c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTMzLVx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MjEzNDpcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxMzUtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2Vyb290Y2dfY21kX2xpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGxvX2ZhbGxvY2F0ZWAgYW5kIGl0cyBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVG8gcmVhbGx5IGdyYXNwIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzLCBuYXR1cmFsbHksIGBsb19mYWxsb2NhdGVgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSwgc28gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIOKAkyB0aGUgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gVGhlbiwgaWYgbmVlZGVkLCBJJiMzOTtsbCBnbyBmdXJ0aGVyIHVwIHRoZSBzdGFjaywgYW5kIHNlZSBob3cgKnRoZXkqIGFyZSBjYWxsZWQuIEkmIzM5O20gYWZ0ZXIgdGhlIGZ1bGwgY2FsbCBjaGFpbiwgdG9wIHRvIGJvdHRvbS4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGBsb19mYWxsb2NhdGVgIGJlaW5nIGludm9rZWQuIFRoaXMgZ3JhbnVsYXIgZXhhbWluYXRpb24gd2lsbCBoZWxwIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBjb3VsZCBiZSBjb250cmlidXRpbmcgdG8gd2hhdGV2ZXIgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2NTpcdFx0YXRvbWljX29yKG1vZGUsIFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlKTtcbiAyNjY6XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIDI2NzpcdH1cbiAyNjg6XHRcbiAyNjk6XHRzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG4gMjcwOlx0XHRcdFx0aW50IG1vZGUpXG4gMjcxOlx0e1xuIDI3MjpcdFx0LypcbiAyNzM6XHRcdCAqIFdlIHVzZSBmYWxsb2NhdGUgdG8gbWFuaXB1bGF0ZSB0aGUgc3BhY2UgbWFwcGluZ3MgdXNlZCBieSB0aGUgaW1hZ2VcbiAyNzQ6XHRcdCAqIGEuay5hLiBkaXNjYXJkL3plcm9yYW5nZS5cbiAyNzU6XHRcdCAqL1xuIDI3NjpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gMjc3Olx0XHRpbnQgcmV0O1xuIDI3ODpcdFxuIDI3OTpcdFx0bW9kZSB8PSBGQUxMT0NfRkxfS0VFUF9TSVpFO1xuIDI4MDpcdFxuIDI4MTpcdFx0aWYgKCFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMobG8tXHUwMDNlbG9fZGV2aWNlKSlcbiAyODI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDI4MzpcdFxuIDI4NDpcdFx0cmV0ID0gZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZhbGxvY2F0ZShmaWxlLCBtb2RlLCBwb3MsIGJsa19ycV9ieXRlcyhycSkpO1xuIDI4NTpcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5WQUwgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUCkpXG4gMjg2Olx0XHRcdHJldHVybiAtRUlPO1xuIDI4NzpcdFxuIDI4ODpcdFx0LypcbiAyODk6XHRcdCAqIFdlIGluaXRpYWxseSBjb25maWd1cmUgdGhlIGxpbWl0cyBpbiBhIGhvcGUgdGhhdCBmYWxsb2NhdGUgaXNcbiAyOTA6XHRcdCAqIHN1cHBvcnRlZCBhbmQgY2xlYXIgdGhlbSBoZXJlIGlmIHRoYXQgdHVybnMgb3V0IG5vdCB0byBiZSB0cnVlLlxuIDI5MTpcdFx0ICovXG4gMjkyOlx0XHRpZiAodW5saWtlbHkocmV0ID09IC1FT1BOT1RTVVBQKSlcbiAyOTM6XHRcdFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xuIDI5NDpcdFxuIDI5NTpcdFx0cmV0dXJuIHJldDtcbiAyOTY6XHR9XG4gMjk3Olx0XG4gMjk4Olx0c3RhdGljIGludCBsb19yZXFfZmx1c2goc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxuIDI5OTpcdHtcbiAzMDA6XHRcdGludCByZXQgPSB2ZnNfZnN5bmMobG8tXHUwMDNlbG9fYmFja2luZ19maWxlLCAwKTtcbiAzMDE6XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVkFMKSlcbiAzMDI6XHRcdFx0cmV0ID0gLUVJTztcbiAzMDM6XHRcbiAzMDQ6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgbG9vcCBkZXZpY2UgZnVuY3Rpb25hbGl0eSBpcyB3aGVyZSB0aGUgbW9kaWZpY2F0aW9ucyBsaWUuIEkmIzM5O3ZlIGdvdDoKCiogICBBIGJyYW5kIG5ldyBzdGF0aWMgd29yayBmdW5jdGlvbjogYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAuIEludGVyZXN0aW5nLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHRoZSAmIzM0O2NsZWFyIGxpbWl0cyYjMzQ7IGZ1bmN0aW9uYWxpdHksIHNvIHBlcmhhcHMgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiBvZiB0aGF0IHBhcnRpY3VsYXIgYXNwZWN0LgoqICAgVGhlbiBhIHNlcmllcyBvZiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgbG9vcF9jbGVhcl9saW1pdHNgLCBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCwgYF9fbG9vcF9jbHJfZmRgLCBgbG9fZnJlZV9kaXNrYCwgYGxvb3BfYWRkYCwgYW5kIGBsb29wX3JlbW92ZWAuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgY29yZSBmdW5jdGlvbnMuIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgIGFuZCBgX19sb29wX2Nscl9mZGAgYXJlIHBhcnRpY3VsYXJseSByZWxldmFudCBhcyB0aGV5IGxpa2VseSBhcmUgaW52b2x2ZWQgaW4gZGV2aWNlIHNldHVwIGFuZCB0ZWFyZG93biwgYSBwbGFjZSB3aGVyZSBidWdzIGFyZSB0eXBpY2FsbHkgZm91bmQuIGBsb19mYWxsb2NhdGVgLCB3aGljaCBub3cgY2FsbHMgYGxvb3BfY2xlYXJfbGltaXRzYCwgaXMgYWxzbyB3b3J0aHkgb2Ygc2NydXRpbnk7IGl0JiMzOTtzIHBvc3NpYmxlIHRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gYWxsb2NhdGlvbiBvciBkaXNrIHNwYWNlIG1hbmFnZW1lbnQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY2FzdCBhIHdpZGVyIG5ldC4gSSYjMzk7bGwgbmVlZCB0byBnbyBiZXlvbmQgdGhpcyBzcGVjaWZpYyBzZXQgYW5kIGxvb2sgYXQgYW55IHJlbGF0ZWQgbG9vcCBpb2N0bCBhbmQgY29udHJvbCBmdW5jdGlvbnMgb3IgdGhlaXIgY2FsbGVycywgZXNwZWNpYWxseSBhcm91bmQgdGhlIGFyZWFzIHRvdWNoZWQgYnkgYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAgYW5kIGBfX2xvb3BfY2xyX2ZkYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCBhcm91bmQgdGhlc2Ugd2lsbCB0ZWxsIGEgY29tcGxldGUgc3RvcnkuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBsb29wIGRldmljZSBhcmNoaXRlY3R1cmUgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTUxMz1zdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MzctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1Mzg6c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTM5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz01NzA9c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTYyNy1cdG1hcHBpbmdfc2V0X2dmcF9tYXNrKG9sZF9maWxlLVx1MDAzZWZfbWFwcGluZywgbG8tXHUwMDNlb2xkX2dmcF9tYXNrKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjYyODpcdGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShsbywgZmlsZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02MjktXHRsb29wX3VwZGF0ZV9kaW8obG8pO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMjc9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEwNC1cdGxvLVx1MDAzZWxvX2RldmljZSA9IGJkZXY7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTA1Olx0bG9vcF9hc3NpZ25fYmFja2luZ19maWxlKGxvLCBmaWxlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMDYtXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTE2MT1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE3Mi1cdCAqIEludmFsaWRhdGUgYW55IHBlbmRpbmcgY2xlYXIgdGhhdCB3YXMgc2NoZWR1bGVkIGFnYWluc3QgdGhlIG9sZFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTE3MzpcdCAqIGJhY2tpbmcgZmlsZSwgbGlrZSBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoKSBkb2VzIG9uIHJlYmluZC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNzQtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1MQoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA1OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIExvb3AgQmxvY2sgRGV2aWNlIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoaXMgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25z4oCUdGhlIGVudHJ5IHBvaW50cyBhbmQgZmVhdHVyZSBsb2dpYyB0aGF0IHdvdWxkIGJlIG1vc3QgaW50ZXJlc3RpbmcgdG8gdGFyZ2V0LiBJJiMzOTt2ZSBwaW5wb2ludGVkIGEgbGlzdDogYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAsIGBsb29wX2NsZWFyX2xpbWl0c2AsIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLCBgX19sb29wX2Nscl9mZGAsIGBsb19mYWxsb2NhdGVgLCBgbG9vcF9jaGFuZ2VfZmRgLCBgbG9vcF9jb25maWd1cmVgLCBhbmQgYGxvb3BfcmVtb3ZlYC4gRG91YmxlLWNoZWNraW5nLCB5ZXMsIHRoZXkgYWxsIHJlc2lkZSBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gaXMgaW4gcGxhY2UuIGBCTEtfREVWX0xPT1BgIGxvb2tzIHRvIGJlIHRoZSBrZXkgY29uZmlnIGFuZCBpdOKAmXMgc3RhbmRhcmQuIEkgcXVpY2tseSBzY2FubmVkIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgLCBhbmQsIHllcCwgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIGp1bXAgb3V0LgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGNyaXRlcmlhLiBUaGUgbG9vcCBkZXZpY2UgZHJpdmVyLCBsb2NhdGVkIGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AsIGlzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldC4gTG9vcCBkZXZpY2VzIGFyZSBlYXN5IHRvIGdldCB0byBpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGFuZCBTeXprYWxsZXIgaXMgcGVyZmVjdGx5IHN1aXRlZCB0byB0ZXN0aW5nIHRoZW0uIFRoZSBwYXRjaCBpdHNlbGYgaXMgaW50cmlndWluZzogaXQgYWRkcyBhc3luY2hyb25vdXMgcXVldWUgbGltaXQgY2xlYXJpbmcgdmlhIGEgd29ya3F1ZXVlLiBUaGlzIGluY2x1ZGVzIHF1ZXVlIGZyZWV6aW5nIChgYmxrX21xX2ZyZWV6ZV9xdWV1ZWApLCBnZW5lcmF0aW9uIGNvdW50ZXJzIChgcmViaW5kX2dlbmAsIGBjbGVhcl9saW1pdHNfZ2VuYCksIGF0b21pYyB0cmFja2luZywgYW5kIHdvcmsgY2FuY2VsbGF0aW9uIGR1cmluZyBkZXZpY2UgY2xlYW51cC4gVGhpcyBwb2ludHMgdG8gYSBsaWtlbHkgc291cmNlIG9mIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSBiZXR3ZWVuIGBsb29wX2NvbmZpZ3VyZWAsIGBjbGVhcl9mZGAsIGBjaGFuZ2VfZmRgLCBhbmQgYHJlcXVlc3QgZmFsbG9jYXRlYC4gSXTigJlzIGNvbmN1cnJlbnQsIHJlYWNoYWJsZSwgYW5kIGNvbXBsZXgsIHNvIHdvcnRoIGZ1enppbmchCgpPa2F5LCB0aW1lIHRvIGNyYWZ0IHRoZSByZWFzb25pbmcgZm9yIHRoZSByZXN1bHRzLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgdGhlIHdheSB0aGUgZHJpdmVyIGNsZWFycyBxdWV1ZSBsaW1pdHMuIEl0IGludHJvZHVjZXMgYSBzYWZlciBtZXRob2QgdXNpbmcgYSB3b3JrIGl0ZW0gKGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gKSBhbmQgZnJlZXplcyB0aGUgcXVldWUgd2l0aCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAuIFRoZSBnZW5lcmF0aW9uIGNvdW50ZXJzIGFuZCBhdG9taWMgb3BlcmF0aW9ucyBhcmUga2V5IHRvIGhhbmRsaW5nIHJhY2VzIGJldHdlZW4gcmViaW5kaW5nIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWctaHVudGluZyBzY2VuYXJpby4gVGhlIGxvb3AgZGV2aWNlIGlzIHJlYWRpbHkgYWNjZXNzaWJsZSBpbiBjb21tb24gdmlydHVhbCBlbnZpcm9ubWVudHMgYW5kIGV4ZXJjaXNlcyBjb25jdXJyZW50IGRyaXZlciBzdGF0ZSBtYW5hZ2VtZW50LCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IEVuYWJsZUNvbmZpZ3MgaXMganVzdCAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LiBNeSBGb2N1c1N5bWJvbHMgYXJlIHRoZSBmdW5jdGlvbnMgSSBhbHJlYWR5IGxpc3RlZCBiZWZvcmUuCgpSZWFkeS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LAogICAgJiMzNDtsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUmIzM0OywKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7bG9vcF9jaGFuZ2VfZmQmIzM0OywKICAgICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7bG9vcF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvb3AgYmxvY2sgZGV2aWNlIGRyaXZlciB0byBkZWZlciBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKSBzbyB0aGUgcXVldWUgY2FuIGJlIHByb3Blcmx5IGZyb3plbiB3aXRoIGJsa19tcV9mcmVlemVfcXVldWUuIEl0IGFkZHMgZ2VuZXJhdGlvbiBjb3VudGVycyBhbmQgYXRvbWljIHN0YXRlIHRvIHN5bmNocm9uaXplIGFnYWluc3QgcmViaW5kL2NsZWFyIG9wZXJhdGlvbnMuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgZHJpdmVyIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0c193b3JrZm4mIzM0OywKICAgICYjMzQ7bG9vcF9jbGVhcl9saW1pdHMmIzM0OywKICAgICYjMzQ7bG9vcF9hc3NpZ25fYmFja2luZ19maWxlJiMzNDssCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fZmFsbG9jYXRlJiMzNDssCiAgICAmIzM0O2xvb3BfY2hhbmdlX2ZkJiMzNDssCiAgICAmIzM0O2xvb3BfY29uZmlndXJlJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgdG8gZGVmZXIgcXVldWUgbGltaXRzIGNsZWFyaW5nIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbikgc28gdGhlIHF1ZXVlIGNhbiBiZSBwcm9wZXJseSBmcm96ZW4gd2l0aCBibGtfbXFfZnJlZXplX3F1ZXVlLiBJdCBhZGRzIGdlbmVyYXRpb24gY291bnRlcnMgYW5kIGF0b21pYyBzdGF0ZSB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0IHJlYmluZC9jbGVhciBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGRyaXZlciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIChgZHJpdmVycy9ibG9jay9sb29wLmNgKSBieSBtb3ZpbmcgdGhlIGxpbWl0IHVwZGF0ZSBmcm9tIHRoZSByZXF1ZXN0IGV4ZWN1dGlvbiBjb250ZXh0IChgbG9fZmFsbG9jYXRlYCkgdG8gYSBkZWZlcnJlZCB3b3JrcXVldWUgaXRlbSAoYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmApLiBJdCBpbnRyb2R1Y2VzIGEgd29yayBzdHJ1Y3QgYW5kIGF0b21pYyBnZW5lcmF0aW9uIGNvdW50ZXJzIChgcmViaW5kX2dlbmAsIGBjbGVhcl9saW1pdHNfZ2VuYCwgYGNsZWFyX2xpbWl0c19tb2RlYCkgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHRvIHNhZmVseSBmcmVlemUgdGhlIHF1ZXVlIGFuZCBjb21taXQgbGltaXRzIHVwZGF0ZXMgYXN5bmNocm9ub3VzbHkgd2l0aG91dCByYWNlIGNvbmRpdGlvbnMgb24gYmFja2luZyBmaWxlIHJlYmluZGluZy5cblxuQWxsIGFkZGVkIGZpZWxkcyBhcmUgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdXNpbmcgYGt6YWxsb2Nfb2JqYCBhbmQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBsb2NhbCB2YXJpYWJsZXMgd2l0aGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHdpdGggdGhpcyBwYXRjaCByZWxhdGUgdG8gY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9ucywgcXVldWUgbG9ja2luZy9mcmVlemluZywgYW5kIHdvcmtxdWV1ZSBjYW5jZWxsYXRpb24gbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCkuIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NjFhMWYyYTY5MzYxYWIyZGUyMTk4OTJjMTliMTZhOWU0MzYyMDVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMjowNzoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggNmYxMjk3NjAzNWIwOS4uOWY2ZTUxOGU2MGQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTY3LDYgJiM0Mzs2NywxMCBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHJvb3RjZ19jbWRfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBpZGxlX3dvcmtlcl9saXN0OwogCXN0cnVjdCByYl9yb290ICAgICAgICAgIHdvcmtlcl90cmVlOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBjbGVhcl9saW1pdHNfd29yazsKJiM0MzsJYXRvbWljX3QJCWNsZWFyX2xpbWl0c19tb2RlOwomIzQzOwlhdG9taWNfdAkJcmViaW5kX2dlbjsKJiM0MzsJYXRvbWljX3QJCWNsZWFyX2xpbWl0c19nZW47CiAJc3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7CiAJYm9vbAkJCXN5c2ZzX2luaXRlZDsKIApAQCAtMjIyLDI2ICYjNDM7MjI2LDQ0IEBAIHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpCiAJCWtvYmplY3RfdWV2ZW50KCZhbXA7ZGlza190b19kZXYobG8tJmd0O2xvX2Rpc2spLSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKQomIzQzO3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiYjNDM7CXN0cnVjdCBsb29wX2RldmljZSAqbG8gPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwotCi0JaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpCi0JCWxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwOwotCi0JaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHsKLQkJbGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwOwotCQlsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7Ci0JfQomIzQzOwl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CWludCBtb2RlID0gMDsKIAogCS8qCi0JICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2gKLQkgKiBpcyBhZ2FpbnN0IHRoZSBsb2NraW5nIHByb3RvY29sIGFuZCBkYW5nZXJvdXMuICBCdXQgd2UgY2FuJiMzOTt0IGp1c3QKLQkgKiBmcmVlemUgdGhlIHF1ZXVlIGFzIHdlJiMzOTtyZSBpbnNpZGUgdGhlIC0mZ3Q7cXVldWVfcnEgbWV0aG9kIGhlcmUuICBTbyB0aGlzCi0JICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvCi0JICogYWR2ZXJ0aXNlIGlmIHRoZXkgc3VwcG9ydCBzcGVjaWZpYyBmYWxsb2NhdGUgb3BlcmF0aW9ucy4KJiM0MzsJICogQ29tbWl0IHRoZSB1bm1vZGlmaWVkIGxpbWl0cyBpZiB0aGUgZGV2aWNlIHdhcyByZWJvdW5kIHNpbmNlCiYjNDM7CSAqIHRoZSB3b3JrIGl0ZW0gd2FzIHNjaGVkdWxlZC4gIFRoZSBmcmVlemUgZXhjbHVkZXMgYSByZWJpbmQKJiM0MzsJICogdGhyb3VnaCBsb29wX2NoYW5nZV9mZCgpLCB3aGljaCBhc3NpZ25zIHRoZSBuZXcgYmFja2luZyBmaWxlCiYjNDM7CSAqIHVuZGVyIHRoZSBmcmVlemU7IHRoZSBvdGhlciByZWJpbmRpbmcgcGF0aHMsIGxvb3BfY29uZmlndXJlKCkKJiM0MzsJICogYW5kIF9fbG9vcF9jbHJfZmQoKSwgZG8gbm90IGZyZWV6ZSB0aGUgcXVldWUsIGJ1dCB0aGV5IGJ1bXAKJiM0MzsJICogcmViaW5kX2dlbiBhbmQgcmVzZXQgY2xlYXJfbGltaXRzX21vZGUgdGhlbXNlbHZlcywgc28gdGhlCiYjNDM7CSAqIGdlbmVyYXRpb24gY2hlY2sgYW5kIHRoZSBhdG9taWNfeGNoZygpIGJlbG93IGNvdmVyIHRoZW0uCiAJICovCiYjNDM7CW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpOwomIzQzOwlpZiAoYXRvbWljX3JlYWQoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX2dlbikgPT0gYXRvbWljX3JlYWQoJmFtcDtsby0mZ3Q7cmViaW5kX2dlbikpIHsKJiM0MzsJCW1vZGUgPSBhdG9taWNfeGNoZygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfbW9kZSwgMCk7CiYjNDM7CiYjNDM7CQlpZiAobW9kZSAmYW1wOyBGQUxMT0NfRkxfWkVST19SQU5HRSkKJiM0MzsJCQlsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDsKJiM0MzsKJiM0MzsJCWlmIChtb2RlICZhbXA7IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7CiYjNDM7CQkJbGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwOwomIzQzOwkJCWxpbS5kaXNjYXJkX2dyYW51bGFyaXR5ID0gMDsKJiM0MzsJCX0KJiM0MzsJfQogCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSwgJmFtcDtsaW0pOwomIzQzOwlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBtZW1mbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKQomIzQzO3sKJiM0MzsJYXRvbWljX3NldCgmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfZ2VuLCBhdG9taWNfcmVhZCgmYW1wO2xvLSZndDtyZWJpbmRfZ2VuKSk7CiYjNDM7CWF0b21pY19vcihtb2RlLCAmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfbW9kZSk7CiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmspOwogfQogCiBzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsCkBAIC01MTYsNiAmIzQzOzUzOCw4IEBAIHN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWxvLSZndDtsb19iYWNraW5nX2ZpbGUgPSBmaWxlOwomIzQzOwlhdG9taWNfaW5jKCZhbXA7bG8tJmd0O3JlYmluZF9nZW4pOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlLCAwKTsKIAlsby0mZ3Q7b2xkX2dmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhmaWxlLSZndDtmX21hcHBpbmcpOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbGUtJmd0O2ZfbWFwcGluZywKIAkJCWxvLSZndDtvbGRfZ2ZwX21hc2sgJmFtcDsgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7CkBAIC0xMTQ0LDYgJiM0MzsxMTY4LDEyIEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlzcGluX2xvY2tfaXJxKCZhbXA7bG8tJmd0O2xvX2xvY2spOwogCWZpbHAgPSBsby0mZ3Q7bG9fYmFja2luZ19maWxlOwogCWxvLSZndDtsb19iYWNraW5nX2ZpbGUgPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBJbnZhbGlkYXRlIGFueSBwZW5kaW5nIGNsZWFyIHRoYXQgd2FzIHNjaGVkdWxlZCBhZ2FpbnN0IHRoZSBvbGQKJiM0MzsJICogYmFja2luZyBmaWxlLCBsaWtlIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSgpIGRvZXMgb24gcmViaW5kLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX2luYygmYW1wO2xvLSZndDtyZWJpbmRfZ2VuKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfbW9kZSwgMCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bG8tJmd0O2xvX2xvY2spOwogCiAJbG8tJmd0O2xvX2RldmljZSA9IE5VTEw7CkBAIC0xNzgxLDYgJiM0MzsxODExLDcgQEAgc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCQlkZXN0cm95X3dvcmtxdWV1ZShsby0mZ3Q7d29ya3F1ZXVlKTsKIAlsb29wX2ZyZWVfaWRsZV93b3JrZXJzKGxvLCB0cnVlKTsKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7bG8tJmd0O3RpbWVyKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yayk7CiAJbXV0ZXhfZGVzdHJveSgmYW1wO2xvLSZndDtsb19tdXRleCk7CiAJa2ZyZWUobG8pOwogfQpAQCAtMjEwMCw2ICYjNDM7MjEzMSw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtsby0mZ3Q7bG9fbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtsby0mZ3Q7bG9fd29ya19sb2NrKTsKIAlJTklUX1dPUksoJmFtcDtsby0mZ3Q7cm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7CiYjNDM7CUlOSVRfV09SSygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2xvLSZndDtyb290Y2dfY21kX2xpc3QpOwogCWRpc2stJmd0O21ham9yCQk9IExPT1BfTUFKT1I7CiAJZGlzay0mZ3Q7Zmlyc3RfbWlub3IJPSBpICZsdDsmbHQ7IHBhcnRfc2hpZnQ7CkBAIC0yMTM4LDYgJiM0MzsyMTcwLDEwIEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAKIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiB7CiYjNDM7CS8qIENhbmNlbCBlYXJseTogdGhlIHF1ZXVlIG1heSBiZSBpbiBSQ1UtZGVsYXllZCBmcmVlaW5nCiYjNDM7CSAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovCiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmspOwomIzQzOwogCS8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqLwogCWRlbF9nZW5kaXNrKGxvLSZndDtsb19kaXNrKTsKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7bG8tJmd0O3RhZ19zZXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3AgRGV2aWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgdGhlIG1vcmUgcmlnb3JvdXMgS01TQU4gYW5hbHlzaXMgb3IgaWYgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgd2lsbCBiZSBzdWZmaWNpZW50LiBUaGUgdGFyZ2V0IGlzIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AsIGFuZCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIGJsb2NrIGRldmljZSYjMzk7cyBsaW1pdHMgYXJlIGNsZWFyZWQgYW5kIHVwZGF0ZWQsIGFuZCB0aGUgd2F5IHRoZSBsb29wIGRldmljZSBpcyB1cGRhdGVkIHdoZW4gaXQgaXMgcmVib3VuZCB0byBhIGJhY2tpbmcgZmlsZS4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCB3b3JrX3N0cnVjdCBjbGVhcl9saW1pdHNfd29ya2AsIHNvbWUgYXRvbWljIGZpZWxkcyAoYGNsZWFyX2xpbWl0c19tb2RlYCwgYHJlYmluZF9nZW5gLCBgY2xlYXJfbGltaXRzX2dlbmApIHdpdGhpbiB0aGUgYHN0cnVjdCBsb29wX2RldmljZWAuIFRoZSBwcm9ibGVtYXRpYyBgbG9vcF9jbGVhcl9saW1pdHNgIGZ1bmN0aW9uIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBkZWZlcnJlZCB3b3JrIGZ1bmN0aW9uLCBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYC4gVGhpcyB3b3JrIGZ1bmN0aW9uIG5vdyBwcm9wZXJseSBmcmVlemVzIGFuZCB1bmZyZWV6ZXMgdGhlIGJsb2NrIHF1ZXVlIHVzaW5nIHRoZSBibG9jayBsYXllciYjMzk7cyBzdGFuZGFyZCBtZXRob2RzIChgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAsIGV0Yy4pIGR1cmluZyB0aGUgbGltaXQgdXBkYXRlLCB3aGljaCBpcyBhIGdvb2Qgc2FmZXR5IG1lYXN1cmUuCgpUaGVyZSYjMzk7cyB0aGlzIG5ldyBnZW5lcmF0aW9uIGNvdW50ZXIgc2V0dXAuIFRoZSBwYXRjaCBhZGRzIHRoZXNlIGByZWJpbmRfZ2VuYCBhbmQgYGNsZWFyX2xpbWl0c19nZW5gIGF0b21pYyBvcGVyYXRpb25zIHRvIHRoZSBsb29wIGRldmljZSBzdHJ1Y3R1cmUuIFRoZXNlIGdlbmVyYXRpb24gY291bnRlcnMgYXJlIGEgZ29vZCBpbmRpY2F0b3IgdGhhdCB0aGUgaW50ZW50aW9uIGlzIHRvIGF2b2lkIHJhY2VzIGluIGNsZWFyaW5nIGxpbWl0cyB3aGlsZSByZWJpbmRpbmcgdGhlIGJhY2tpbmcgZmlsZS4gYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAsIGFuZCBgX19sb29wX2Nscl9mZGAgYXJlIHVwZGF0ZWQgd2l0aCB0aGUgZ2VuZXJhdGlvbiBhbmQgY2xlYXIgbW9kZSwgc28gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UuIFdvcmsgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLYCBpbiBgbG9vcF9hZGRgLCBhbmQgY2xlYW5lZCB1cCB1c2luZyBgY2FuY2VsX3dvcmtfc3luY2AgaW4gYGxvX2ZyZWVfZGlza2AgYW5kIGBsb29wX3JlbW92ZWAgd2hpY2ggaXMgYWxzbyBnb29kIHRvIHNlZS4KCk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZm9sbG93aW5nOgoKMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBLTVNBTiBpc3N1ZS4gSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHN0cnVjdHVyZXMgYmVpbmcgbGVha2VkIGRpcmVjdGx5IHRvIHVzZXJzcGFjZSBmcm9tIHRoaXMsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRvIGNvbmZpcm0uCjIuICBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBUaGUgYGF0b21pY190YCB2YXJpYWJsZXMgKGBjbGVhcl9saW1pdHNfbW9kZWAsIGByZWJpbmRfZ2VuYCwgYGNsZWFyX2xpbWl0c19nZW5gKSB3aXRoaW4gYHN0cnVjdCBsb29wX2RldmljZWAgYXJlIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHN0cnVjdCBsb29wX2RldmljZWAgaXMgYWxsb2NhdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGF0b21pY3MgYXJlIGluaXRpYWxpemVkIGNvcnJlY3RseS4gSW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAsIGBsaW1gIGlzIGluaXRpYWxpemVkIHZpYSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAsIHdoaWNoIHNob3VsZCBiZSBmaW5lLiBUaGUgYG1vZGVgIGxvY2FsIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIDAgd2hpY2ggaXMgc2FmZS4KMy4gIFRoZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldy4KNC4gIEFuZCBvZiBjb3Vyc2UsIHN0YW5kYXJkIGJvdW5kcyBjaGVja3MgYW5kIGJ1ZmZlciBsZW5ndGhzLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbG9vcF9hZGRgIGFuZCBob3cgYHN0cnVjdCBsb29wX2RldmljZWAgaXMgYWxsb2NhdGVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKmxvb3BfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgbG9gIEFsbG9jYXRpb24gaW4gYGxvb3BfYWRkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGxvb3BfYWRkYCBmdW5jdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgdGhlIHZhcmlhYmxlIGBsb2AuIEkgbmVlZCB0byBwcmVjaXNlbHkgdW5kZXJzdGFuZCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgZm9yIGBsb2AgKndpdGhpbiogdGhhdCBsb29wJiMzOTtzIGNvbnRleHQuIElzIGl0IGJlaW5nIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgZWFjaCBpdGVyYXRpb24/IElzIHRoZXJlIGFueSBjaGFuY2Ugb2YgaXQgYmVpbmcgb3B0aW1pemVkIGF3YXkgYnkgdGhlIGNvbXBpbGVyPyBJZiBpdCAqaXMqIG9uIHRoZSBzdGFjaywgaXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3Igc3RhY2sgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0aWVzIGRlcGVuZGluZyBvbiB0aGUgbG9vcCYjMzk7cyBib3VuZHMgYW5kIHRoZSBzaXplIG9mIGBsb2AmIzM5O3MgdHlwZT8KCkkgaW1tZWRpYXRlbHkgd2FudCB0byBhc3Nlc3MgdGhlIG1lbW9yeSBpbXBsaWNhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHRvbywgYnV0IG1lbW9yeSB1c2FnZSBpcyBwcmltYXJ5IHJpZ2h0IG5vdy4gSWYgaXQmIzM5O3Mgb24gdGhlIGhlYXAsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBsZWFrcyBvciBpbmVmZmljaWVudCBnYXJiYWdlIGNvbGxlY3Rpb24sIGRlcGVuZGluZyBvbiB0aGUgbGFuZ3VhZ2Ugd2UgYXJlIHVzaW5nIGFuZCB3aGF0IGBsb2AgaXMuIElmIGl0JiMzOTtzIGEgZ2xvYmFsLCB0aGVuIEkmIzM5O2xsIGJlIGNoZWNraW5nIGl0cyBzY29wZS4KCkkmIzM5O20gbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCB0aGUgY29kZSwgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIHJlLWFzc2lnbm1lbnRzIG9yIGNoYW5nZXMgdG8gdGhlIHZhbHVlIHRoYXQgbWlnaHQgaW1wYWN0IGl0cyBzaXplIG9yIG1lbW9yeSBmb290cHJpbnQuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGp1bmN0dXJlOyBzbWFsbCBkZXRhaWxzIGhlcmUgY2FuIG1ha2Ugb3IgYnJlYWsgdGhlIHByb2dyYW0mIzM5O3MgZWZmaWNpZW5jeSBhbmQgcm9idXN0bmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBsb29wX21xX29wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDUxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjA1MjpzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA1My17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4OT1zdGF0aWMgdm9pZCBsb29wX3Byb2JlKGRldl90IGRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTk0LVx0XHRyZXR1cm47XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTk1Olx0bG9vcF9hZGQoaWR4KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxOTYtfVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyNDg9c3RhdGljIGludCBsb29wX2NvbnRyb2xfZ2V0X2ZyZWUoaW50IGlkeClcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjY1LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNjY6XHRyZXR1cm4gbG9vcF9hZGQoLTEpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjI2Ny1mb3VuZDpcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMjcyPXN0YXRpYyBsb25nIGxvb3BfY29udHJvbF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjc2LVx0Y2FzZSBMT09QX0NUTF9BREQ6XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjc3Olx0XHRyZXR1cm4gbG9vcF9hZGQocGFybSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjc4LVx0Y2FzZSBMT09QX0NUTF9SRU1PVkU6XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjMwND1zdGF0aWMgaW50IF9faW5pdCBsb29wX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzQ1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2xvb3A7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM0NjpcdFx0bG9vcF9hZGQoaSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjgxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdDoKCioqQW5hbHl6aW5nIHRoZSBDb2RlIFNuaXBwZXQ6IGBsb29wX2FkZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBUaGUgZGlyZWN0aXZlIGlzIGNsZWFyIOKAkyBJIG5lZWQgdG8gZm9jdXMgb24gYSBmdW5jdGlvbiBuYW1lZCBgbG9vcF9hZGRgLCBhbmQgaXQgc2VlbXMgdG8gYmUgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDIwNTIuIFRoZSBzdWdnZXN0ZWQgdG9vbCBpcyBgcmVhZC1maWxlYCwgc28gcHJlc3VtYWJseSwgSSYjMzk7bGwgYmUgdXNpbmcgdGhhdCB0byBleHRyYWN0IHRoZSByZWxldmFudCBzZWN0aW9uIGZyb20gdGhlIHNvdXJjZSBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgY29udGV4dCBvZiB0aGF0IGxpbmUuIExpbmUgbnVtYmVycyBhcmUsIG9mIGNvdXJzZSwgcmVsYXRpdmUgdG8gdGhlIGZpbGUuIFNvLCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZpbGUsIGxpbmUgMjA1MiBjb3VsZCBiZSBpbiB0aGUgbWlkZGxlLCB0aGUgZW5kLCBvciBuZWFyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBJJiMzOTtsbCByZWFkIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoYXQgbGluZSBhbmQgdXNlIHRoZSBjb250ZXh0IHRvIGdldCBhIGdyYXNwIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIHRoZSBmdW5jdGlvbuKAmXMgcHVycG9zZTogd2hhdCBpdCB0YWtlcyBhcyBpbnB1dCwgd2hhdCBpdCBvdXRwdXRzLCBhbmQgaW1wb3J0YW50bHksIHRoZSAqd2h5KiBiZWhpbmQgaXRzIGV4aXN0ZW5jZS4gSSB3aWxsIGhhdmUgdGhlIGNvbnRleHQgdGhhdCBpcyBuZWVkZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA1MjpcdHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4yMDUzOlx0e1xuMjA1NDpcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XG4yMDU1Olx0XHRcdC8qXG4yMDU2Olx0XHRcdCAqIFJhbmRvbSBudW1iZXIgcGlja2VkIGZyb20gdGhlIGhpc3RvcmljIGJsb2NrIG1heF9zZWN0b3JzIGNhcC5cbjIwNTc6XHRcdFx0ICovXG4yMDU4Olx0XHRcdC5tYXhfaHdfc2VjdG9yc1x0XHQ9IDI1NjB1LFxuMjA1OTpcdFx0fTtcbjIwNjA6XHRcdHN0cnVjdCBsb29wX2RldmljZSAqbG87XG4yMDYxOlx0XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaztcbjIwNjI6XHRcdGludCBlcnI7XG4yMDYzOlx0XG4yMDY0Olx0XHRlcnIgPSAtRU5PTUVNO1xuMjA2NTpcdFx0bG8gPSBremFsbG9jX29iaigqbG8pO1xuMjA2NjpcdFx0aWYgKCFsbylcbjIwNjc6XHRcdFx0Z290byBvdXQ7XG4yMDY4Olx0XHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4yMDY5Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbjIwNzA6XHRcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbjIwNzE6XHRcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuMjA3MjpcdFxuMjA3MzpcdFx0ZXJyID0gbXV0ZXhfbG9ja19raWxsYWJsZShcdTAwMjZsb29wX2N0bF9tdXRleCk7XG4yMDc0Olx0XHRpZiAoZXJyKVxuMjA3NTpcdFx0XHRnb3RvIG91dF9mcmVlX2RldjtcbjIwNzY6XHRcbjIwNzc6XHRcdC8qIGFsbG9jYXRlIGlkLCBpZiBAaWQgXHUwMDNlPSAwLCB3ZSYjMzk7cmUgcmVxdWVzdGluZyB0aGF0IHNwZWNpZmljIGlkICovXG4yMDc4Olx0XHRpZiAoaSBcdTAwM2U9IDApIHtcbjIwNzk6XHRcdFx0ZXJyID0gaWRyX2FsbG9jKFx1MDAyNmxvb3BfaW5kZXhfaWRyLCBsbywgaSwgaSAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbjIwODA6XHRcdFx0aWYgKGVyciA9PSAtRU5PU1BDKVxuMjA4MTpcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4yMDgyOlx0XHR9IGVsc2Uge1xuMjA4MzpcdFx0XHRlcnIgPSBpZHJfYWxsb2MoXHUwMDI2bG9vcF9pbmRleF9pZHIsIGxvLCAwLCAwLCBHRlBfS0VSTkVMKTtcbjIwODQ6XHRcdH1cbjIwODU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsb29wX2N0bF9tdXRleCk7XG4yMDg2Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMjA4NzpcdFx0XHRnb3RvIG91dF9mcmVlX2RldjtcbjIwODg6XHRcdGkgPSBlcnI7XG4yMDg5Olx0XG4yMDkwOlx0XHRsby1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNmxvb3BfbXFfb3BzO1xuMjA5MTpcdFx0bG8tXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuMjA5MjpcdFx0bG8tXHUwMDNldGFnX3NldC5xdWV1ZV9kZXB0aCA9IGh3X3F1ZXVlX2RlcHRoO1xuMjA5MzpcdFx0bG8tXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XG4yMDk0Olx0XHRsby1cdTAwM2V0YWdfc2V0LmNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBsb29wX2NtZCk7XG4yMDk1Olx0XHRsby1cdTAwM2V0YWdfc2V0LmZsYWdzID0gQkxLX01RX0ZfU1RBQ0tJTkcgfCBCTEtfTVFfRl9OT19TQ0hFRF9CWV9ERUZBVUxUO1xuMjA5NjpcdFx0bG8tXHUwMDNldGFnX3NldC5kcml2ZXJfZGF0YSA9IGxvO1xuMjA5NzpcdFxuMjA5ODpcdFx0ZXJyID0gYmxrX21xX2FsbG9jX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4yMDk5Olx0XHRpZiAoZXJyKVxuMjEwMDpcdFx0XHRnb3RvIG91dF9mcmVlX2lkcjtcbjIxMDE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3AgRGV2aWNlIEluaXRpYWxpemF0aW9uIGFuZCBMaW1pdCBDbGVhcmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBgbG9vcF9kZXZpY2VgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBhbmQgaG93IGl0cyBxdWV1ZSBsaW1pdHMgYXJlIGhhbmRsZWQuIFRoZSBjb2RlIHN0YXJ0cyB3aXRoIGEgYGt6YWxsb2Nfb2JqKCpsbyk7YCBjYWxsLCB3aGljaCBtZWFucyBhbGwgdGhlIGZpZWxkcyBpbiB0aGUgbmV3bHkgYWxsb2NhdGVkIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIGFyZSBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQuIEdvb2QgcHJhY3RpY2UsIGFsd2F5cy4gVGhpcyBpbmNsdWRlcyB0aG9zZSBuZXdlciBmaWVsZHMgbGlrZSBgY2xlYXJfbGltaXRzX3dvcmtgLCBgY2xlYXJfbGltaXRzX21vZGVgLCBgcmViaW5kX2dlbmAsIGFuZCBgY2xlYXJfbGltaXRzX2dlbmAuIFRoYXQgemVyby1pbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsLgoKVGhlbiwgaW4gdGhlIGBsb29wX2FkZGAgZnVuY3Rpb24sIEkgc2VlIGBJTklUX1dPUksoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmssIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbik7YCB3aGljaCBpcyBzZXR0aW5nIHVwIGEgd29yayBxdWV1ZSBlbnRyeS4gVGhpcyBzdWdnZXN0cyB0aGF0IGNsZWFyaW5nIGxpbWl0cyBpcyBkZWZlcnJlZCwgaGFuZGxlZCBhc3luY2hyb25vdXNseS4gTWFrZXMgc2Vuc2UgdG8gYXZvaWQgYmxvY2tpbmcuCgpOb3csIGRpdmluZyBpbnRvIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gLCBpdCBnZXRzIGludGVyZXN0aW5nLiBXZSBraWNrIG9mZiBhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSlgIHRvIG9idGFpbiBhIHNuYXBzaG90IG9yIGNvcHkgb2YgdGhlIGN1cnJlbnQgcXVldWUgbGltaXRzLCB3aGljaCBpcyBzdG9yZWQgaW4gdGhlIGBsaW1gIHN0cnVjdC4gVGhlIGBtb2RlYCBpcyBpbml0aWFsaXplZCB0byAwIGFuZCBhdG9taWNhbGx5IGNoYW5nZWQuIFRoaXMgaXMgYSBjcnVjaWFsIHJlYWQvbW9kaWZ5L3dyaXRlIG9wZXJhdGlvbiBvbiB0aGUgcXVldWUgbGltaXRzLCBJIHdhbnQgdG8gc2VlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gIEZpbmFsbHksIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUsICZhbXA7bGltKWAgYXBwbGllcyBhbnkgY2hhbmdlcyBiYWNrIHRvIHRoZSBxdWV1ZSBsaW1pdHMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIHZhbHVlcyB0aGlzIGF0b21pYyBleGNoYW5nZSBpcyBzZXR0aW5nLiBXaGF0IGlzIHRoZSBvdmVyYWxsIGxpbWl0IGNsZWFyaW5nIHN0cmF0ZWd5PyBUaGUgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIGtleSBoZXJlLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGxvb3BfY2xlYXJfbGltaXRzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlbiB0aGlzIGxpbWl0IGNsZWFyaW5nIG1lY2hhbmlzbSBpcyBiZWluZyB0cmlnZ2VyZWQsIGFuZCB3aHkgaXQmIzM5O3MgbmVjZXNzYXJ5LiBMZXQgbWUgc2VlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfY2xlYXJfbGltaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9MjIzPXN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI5OnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzAte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI2MjpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2My17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjY5PXN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yOTItXHRpZiAodW5saWtlbHkocmV0ID09IC1FT1BOT1RTVVBQKSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI5MzpcdFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjk0LVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwNTI9c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTMzLVx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MjEzNDpcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxMzUtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2Vyb290Y2dfY21kX2xpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbG9fZmFsbG9jYXRlYCBhbmQgQ29udGV4dCoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gYGxvX2ZhbGxvY2F0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIG91dCBhbmQgbG9vayBhdCBpdHMgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2l0aGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgKmNhbGxlZCosIHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgcGFzc2VkLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCAqZ29hbCogb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaXMuIElzIGl0IGJlaW5nIHVzZWQgZm9yIHByZS1hbGxvY2F0aW9uLCBzcGFyc2UgZmlsZSBjcmVhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgd2l0aGluIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IHdpbGwgcXVpY2tseSByZXZlYWwgdGhlIGNvcmUgaW50ZW50IGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgbWVjaGFuaXNtIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgZmFsbG9jYXRlIGNhbGwuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBlcnJvciBoYW5kbGluZyBmb3IgZmFsbG9jYXRlIGFuZCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2NTpcdFx0YXRvbWljX29yKG1vZGUsIFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlKTtcbiAyNjY6XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIDI2NzpcdH1cbiAyNjg6XHRcbiAyNjk6XHRzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG4gMjcwOlx0XHRcdFx0aW50IG1vZGUpXG4gMjcxOlx0e1xuIDI3MjpcdFx0LypcbiAyNzM6XHRcdCAqIFdlIHVzZSBmYWxsb2NhdGUgdG8gbWFuaXB1bGF0ZSB0aGUgc3BhY2UgbWFwcGluZ3MgdXNlZCBieSB0aGUgaW1hZ2VcbiAyNzQ6XHRcdCAqIGEuay5hLiBkaXNjYXJkL3plcm9yYW5nZS5cbiAyNzU6XHRcdCAqL1xuIDI3NjpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gMjc3Olx0XHRpbnQgcmV0O1xuIDI3ODpcdFxuIDI3OTpcdFx0bW9kZSB8PSBGQUxMT0NfRkxfS0VFUF9TSVpFO1xuIDI4MDpcdFxuIDI4MTpcdFx0aWYgKCFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMobG8tXHUwMDNlbG9fZGV2aWNlKSlcbiAyODI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDI4MzpcdFxuIDI4NDpcdFx0cmV0ID0gZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZhbGxvY2F0ZShmaWxlLCBtb2RlLCBwb3MsIGJsa19ycV9ieXRlcyhycSkpO1xuIDI4NTpcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5WQUwgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUCkpXG4gMjg2Olx0XHRcdHJldHVybiAtRUlPO1xuIDI4NzpcdFxuIDI4ODpcdFx0LypcbiAyODk6XHRcdCAqIFdlIGluaXRpYWxseSBjb25maWd1cmUgdGhlIGxpbWl0cyBpbiBhIGhvcGUgdGhhdCBmYWxsb2NhdGUgaXNcbiAyOTA6XHRcdCAqIHN1cHBvcnRlZCBhbmQgY2xlYXIgdGhlbSBoZXJlIGlmIHRoYXQgdHVybnMgb3V0IG5vdCB0byBiZSB0cnVlLlxuIDI5MTpcdFx0ICovXG4gMjkyOlx0XHRpZiAodW5saWtlbHkocmV0ID09IC1FT1BOT1RTVVBQKSlcbiAyOTM6XHRcdFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xuIDI5NDpcdFxuIDI5NTpcdFx0cmV0dXJuIHJldDtcbiAyOTY6XHR9XG4gMjk3Olx0XG4gMjk4Olx0c3RhdGljIGludCBsb19yZXFfZmx1c2goc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxuIDI5OTpcdHtcbiAzMDA6XHRcdGludCByZXQgPSB2ZnNfZnN5bmMobG8tXHUwMDNlbG9fYmFja2luZ19maWxlLCAwKTtcbiAzMDE6XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVkFMKSlcbiAzMDI6XHRcdFx0cmV0ID0gLUVJTztcbiAzMDM6XHRcbiAzMDQ6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NjMKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogNDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEFsbCBDbGVhcioqCgpPa2F5LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGlzIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSBLTVNBTiBjb25jZXJucywgYnV0IEkgYWx3YXlzIHByZWZlciB0byBkb3VibGUtY2hlY2suIEZpcnN0LCBJIHdhbnRlZCB0byB2ZXJpZnkgdGhhdCB0aGVyZSB3ZXJlIG5vIG9idmlvdXMgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgcHJvYmxlbXMgaW4gdXNlci1mYWNpbmcgc3RydWN0dXJlcyBvciBvdGhlciBzZW5zaXRpdmUgYXJlYXMuIFRoZSBxdWljayBzY2FuIGNvbmZpcm1lZCB0aGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gQWxsIG5ldyBzdHJ1Y3QgbWVtYmVycyBhcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBtYWluIGZvY3VzIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgb24gYSBsb2NraW5nIGlzc3VlIHJlZ2FyZGluZyBxdWV1ZSBsaW1pdHMuIEl0IGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IHByb2JsZW0gaW4gaG93IHF1ZXVlIGxpbWl0cyB3ZXJlIGJlaW5nIHVwZGF0ZWQsIHNoaWZ0aW5nIHRoZSB1cGRhdGUgdG8gYSB3b3JrcXVldWUgdG8gZW5zdXJlIHByb3BlciBsb2NraW5nIHByb3RvY29scy4gVGhpcyBwcmltYXJpbHkgaW52b2x2ZXMgY29uY3VycmVuY3ksIGRlYWRsb2Nrcywgd29ya3F1ZXVlIGNhbmNlbGxhdGlvbiByYWNlcywgYW5kIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgdGhlIHVzdWFsIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIFBST1ZFX0xPQ0tJTkcpLgoKVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHJhbiB0aHJvdWdoIHRoZSBjcml0ZXJpYSBmb3IgZGV0ZXJtaW5pbmcgS01TQU4gbmVlZHMuIFRoZXJlIGFyZSBubyBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZywgbm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBtaWdodCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy4KCkNvbnZlcnNlbHksIEkgdmVyaWZpZWQgdGhlIGNyaXRlcmlhIGZvciBzZXR0aW5nIE5lZWRzS01TQU4gdG8gZmFsc2U6IFRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgdG9vbHMgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBBbGwgcmVsZXZhbnQgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuIFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgaGVyZS4KCkdpdmVuIGFsbCBvZiB0aGlzLCBpdCYjMzk7cyBhIGNsZWFyIE5lZWRzS01TQU49ZmFsc2Ugc2l0dWF0aW9uLiBUaW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHF1ZXVlIGxpbWl0cyBjbGVhcmluZyBpbiB0aGUgbG9vcCBibG9jayBkcml2ZXIgKGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2ApIGJ5IG1vdmluZyB0aGUgbGltaXQgdXBkYXRlIGZyb20gdGhlIHJlcXVlc3QgZXhlY3V0aW9uIGNvbnRleHQgKGBsb19mYWxsb2NhdGVgKSB0byBhIGRlZmVycmVkIHdvcmtxdWV1ZSBpdGVtIChgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCkuIEl0IGludHJvZHVjZXMgYSB3b3JrIHN0cnVjdCBhbmQgYXRvbWljIGdlbmVyYXRpb24gY291bnRlcnMgKGByZWJpbmRfZ2VuYCwgYGNsZWFyX2xpbWl0c19nZW5gLCBgY2xlYXJfbGltaXRzX21vZGVgKSB3aXRoaW4gYHN0cnVjdCBsb29wX2RldmljZWAgdG8gc2FmZWx5IGZyZWV6ZSB0aGUgcXVldWUgYW5kIGNvbW1pdCBsaW1pdHMgdXBkYXRlcyBhc3luY2hyb25vdXNseSB3aXRob3V0IHJhY2UgY29uZGl0aW9ucyBvbiBiYWNraW5nIGZpbGUgcmViaW5kaW5nLlxuXG5BbGwgYWRkZWQgZmllbGRzIGFyZSBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGxvb3BfZGV2aWNlYCB1c2luZyBga3phbGxvY19vYmpgIGFuZCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLYC4gVGhlIGxvY2FsIHZhcmlhYmxlcyB3aXRoaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgZGF0YSBpcyBjb3BpZWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgcmlza3Mgd2l0aCB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgcmFjZSBjb25kaXRpb25zLCBxdWV1ZSBsb2NraW5nL2ZyZWV6aW5nLCBhbmQgd29ya3F1ZXVlIGNhbmNlbGxhdGlvbiBsaWZldGltZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWcgdG9vbHMgKEtBU0FOLCBMT0NLREVQKS4gU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIChgZHJpdmVycy9ibG9jay9sb29wLmNgKSBieSBtb3ZpbmcgdGhlIGxpbWl0IHVwZGF0ZSBmcm9tIHRoZSByZXF1ZXN0IGV4ZWN1dGlvbiBjb250ZXh0IChgbG9fZmFsbG9jYXRlYCkgdG8gYSBkZWZlcnJlZCB3b3JrcXVldWUgaXRlbSAoYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmApLiBJdCBpbnRyb2R1Y2VzIGEgd29yayBzdHJ1Y3QgYW5kIGF0b21pYyBnZW5lcmF0aW9uIGNvdW50ZXJzIChgcmViaW5kX2dlbmAsIGBjbGVhcl9saW1pdHNfZ2VuYCwgYGNsZWFyX2xpbWl0c19tb2RlYCkgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHRvIHNhZmVseSBmcmVlemUgdGhlIHF1ZXVlIGFuZCBjb21taXQgbGltaXRzIHVwZGF0ZXMgYXN5bmNocm9ub3VzbHkgd2l0aG91dCByYWNlIGNvbmRpdGlvbnMgb24gYmFja2luZyBmaWxlIHJlYmluZGluZy5cblxuQWxsIGFkZGVkIGZpZWxkcyBhcmUgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdXNpbmcgYGt6YWxsb2Nfb2JqYCBhbmQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBsb2NhbCB2YXJpYWJsZXMgd2l0aGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHdpdGggdGhpcyBwYXRjaCByZWxhdGUgdG8gY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9ucywgcXVldWUgbG9ja2luZy9mcmVlemluZywgYW5kIHdvcmtxdWV1ZSBjYW5jZWxsYXRpb24gbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCkuIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjI1LjkyMzg2NzM2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NDY2Mjg5Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzX3dvcmtmblwiLFxuICAgIFwibG9vcF9jbGVhcl9saW1pdHNcIixcbiAgICBcImxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZVwiLFxuICAgIFwiX19sb29wX2Nscl9mZFwiLFxuICAgIFwibG9fZmFsbG9jYXRlXCIsXG4gICAgXCJsb29wX2NoYW5nZV9mZFwiLFxuICAgIFwibG9vcF9jb25maWd1cmVcIixcbiAgICBcImxvb3BfcmVtb3ZlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgcXVldWUgbGltaXRzIGNsZWFyaW5nIGluIHRoZSBsb29wIGJsb2NrIGRyaXZlciAoYGRyaXZlcnMvYmxvY2svbG9vcC5jYCkgYnkgbW92aW5nIHRoZSBsaW1pdCB1cGRhdGUgZnJvbSB0aGUgcmVxdWVzdCBleGVjdXRpb24gY29udGV4dCAoYGxvX2ZhbGxvY2F0ZWApIHRvIGEgZGVmZXJyZWQgd29ya3F1ZXVlIGl0ZW0gKGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gKS4gSXQgaW50cm9kdWNlcyBhIHdvcmsgc3RydWN0IGFuZCBhdG9taWMgZ2VuZXJhdGlvbiBjb3VudGVycyAoYHJlYmluZF9nZW5gLCBgY2xlYXJfbGltaXRzX2dlbmAsIGBjbGVhcl9saW1pdHNfbW9kZWApIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCB0byBzYWZlbHkgZnJlZXplIHRoZSBxdWV1ZSBhbmQgY29tbWl0IGxpbWl0cyB1cGRhdGVzIGFzeW5jaHJvbm91c2x5IHdpdGhvdXQgcmFjZSBjb25kaXRpb25zIG9uIGJhY2tpbmcgZmlsZSByZWJpbmRpbmcuXFxuXFxuQWxsIGFkZGVkIGZpZWxkcyBhcmUgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdXNpbmcgYGt6YWxsb2Nfb2JqYCBhbmQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBsb2NhbCB2YXJpYWJsZXMgd2l0aGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHdpdGggdGhpcyBwYXRjaCByZWxhdGUgdG8gY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9ucywgcXVldWUgbG9ja2luZy9mcmVlemluZywgYW5kIHdvcmtxdWV1ZSBjYW5jZWxsYXRpb24gbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCkuIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvb3AgYmxvY2sgZGV2aWNlIGRyaXZlciB0byBkZWZlciBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKSBzbyB0aGUgcXVldWUgY2FuIGJlIHByb3Blcmx5IGZyb3plbiB3aXRoIGJsa19tcV9mcmVlemVfcXVldWUuIEl0IGFkZHMgZ2VuZXJhdGlvbiBjb3VudGVycyBhbmQgYXRvbWljIHN0YXRlIHRvIHN5bmNocm9uaXplIGFnYWluc3QgcmViaW5kL2NsZWFyIG9wZXJhdGlvbnMuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgZHJpdmVyIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzoyNS45MjM4NzQzMTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjMxOTE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk2MWExZjJhNjkzNjFhYjJkZTIxOTg5MmMxOWIxNmE5ZTQzNjIwNWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwMjowNzoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuaW5kZXggNmYxMjk3NjAzNWIwOS4uOWY2ZTUxOGU2MGQyOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuQEAgLTY3LDYgKzY3LDEwIEBAIHN0cnVjdCBsb29wX2RldmljZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHJvb3RjZ19jbWRfbGlzdDtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgaWRsZV93b3JrZXJfbGlzdDtcXG4gXFx0c3RydWN0IHJiX3Jvb3QgICAgICAgICAgd29ya2VyX3RyZWU7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIGNsZWFyX2xpbWl0c193b3JrO1xcbitcXHRhdG9taWNfdFxcdFxcdGNsZWFyX2xpbWl0c19tb2RlO1xcbitcXHRhdG9taWNfdFxcdFxcdHJlYmluZF9nZW47XFxuK1xcdGF0b21pY190XFx0XFx0Y2xlYXJfbGltaXRzX2dlbjtcXG4gXFx0c3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7XFxuIFxcdGJvb2xcXHRcXHRcXHRzeXNmc19pbml0ZWQ7XFxuIFxcbkBAIC0yMjIsMjYgKzIyNiw0NCBAQCBzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxcbiBcXHRcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuK1xcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPVxcbitcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBjbGVhcl9saW1pdHNfd29yayk7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbi1cXG4tXFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcXG4tXFx0XFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XFxuLVxcbi1cXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuLVxcdFxcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcXG4tXFx0XFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xcbi1cXHR9XFxuK1xcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4rXFx0aW50IG1vZGUgPSAwO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2hcXG4tXFx0ICogaXMgYWdhaW5zdCB0aGUgbG9ja2luZyBwcm90b2NvbCBhbmQgZGFuZ2Vyb3VzLiAgQnV0IHdlIGNhbid0IGp1c3RcXG4tXFx0ICogZnJlZXplIHRoZSBxdWV1ZSBhcyB3ZSdyZSBpbnNpZGUgdGhlIC1cXHUwMDNlcXVldWVfcnEgbWV0aG9kIGhlcmUuICBTbyB0aGlzXFxuLVxcdCAqIHNob3VsZCBtb3ZlIG91dCBpbnRvIGEgd29ya3F1ZXVlIHVubGVzcyB3ZSBnZXQgdGhlIGZpbGUgb3BlcmF0aW9ucyB0b1xcbi1cXHQgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLlxcbitcXHQgKiBDb21taXQgdGhlIHVubW9kaWZpZWQgbGltaXRzIGlmIHRoZSBkZXZpY2Ugd2FzIHJlYm91bmQgc2luY2VcXG4rXFx0ICogdGhlIHdvcmsgaXRlbSB3YXMgc2NoZWR1bGVkLiAgVGhlIGZyZWV6ZSBleGNsdWRlcyBhIHJlYmluZFxcbitcXHQgKiB0aHJvdWdoIGxvb3BfY2hhbmdlX2ZkKCksIHdoaWNoIGFzc2lnbnMgdGhlIG5ldyBiYWNraW5nIGZpbGVcXG4rXFx0ICogdW5kZXIgdGhlIGZyZWV6ZTsgdGhlIG90aGVyIHJlYmluZGluZyBwYXRocywgbG9vcF9jb25maWd1cmUoKVxcbitcXHQgKiBhbmQgX19sb29wX2Nscl9mZCgpLCBkbyBub3QgZnJlZXplIHRoZSBxdWV1ZSwgYnV0IHRoZXkgYnVtcFxcbitcXHQgKiByZWJpbmRfZ2VuIGFuZCByZXNldCBjbGVhcl9saW1pdHNfbW9kZSB0aGVtc2VsdmVzLCBzbyB0aGVcXG4rXFx0ICogZ2VuZXJhdGlvbiBjaGVjayBhbmQgdGhlIGF0b21pY194Y2hnKCkgYmVsb3cgY292ZXIgdGhlbS5cXG4gXFx0ICovXFxuK1xcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfZ2VuKSA9PSBhdG9taWNfcmVhZChcXHUwMDI2bG8tXFx1MDAzZXJlYmluZF9nZW4pKSB7XFxuK1xcdFxcdG1vZGUgPSBhdG9taWNfeGNoZyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcXG4rXFxuK1xcdFxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXFxuK1xcdFxcdFxcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xcbitcXG4rXFx0XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xcbitcXHRcXHRcXHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XFxuK1xcdFxcdFxcdGxpbS5kaXNjYXJkX2dyYW51bGFyaXR5ID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgXFx1MDAyNmxpbSk7XFxuK1xcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cXHUwMDNlbG9fcXVldWUsIG1lbWZsYWdzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXFxuK3tcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19nZW4sIGF0b21pY19yZWFkKFxcdTAwMjZsby1cXHUwMDNlcmViaW5kX2dlbikpO1xcbitcXHRhdG9taWNfb3IobW9kZSwgXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XFxuK1xcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcXG5AQCAtNTE2LDYgKzUzOCw4IEBAIHN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4gXFx0bG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IGZpbGU7XFxuK1xcdGF0b21pY19pbmMoXFx1MDAyNmxvLVxcdTAwM2VyZWJpbmRfZ2VuKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcXG4gXFx0bG8tXFx1MDAzZW9sZF9nZnBfbWFzayA9IG1hcHBpbmdfZ2ZwX21hc2soZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG4gXFx0bWFwcGluZ19zZXRfZ2ZwX21hc2soZmlsZS1cXHUwMDNlZl9tYXBwaW5nLFxcbiBcXHRcXHRcXHRsby1cXHUwMDNlb2xkX2dmcF9tYXNrIFxcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XFxuQEAgLTExNDQsNiArMTE2OCwxMiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmxvLVxcdTAwM2Vsb19sb2NrKTtcXG4gXFx0ZmlscCA9IGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGU7XFxuIFxcdGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xcbitcXHQvKlxcbitcXHQgKiBJbnZhbGlkYXRlIGFueSBwZW5kaW5nIGNsZWFyIHRoYXQgd2FzIHNjaGVkdWxlZCBhZ2FpbnN0IHRoZSBvbGRcXG4rXFx0ICogYmFja2luZyBmaWxlLCBsaWtlIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSgpIGRvZXMgb24gcmViaW5kLlxcbitcXHQgKi9cXG4rXFx0YXRvbWljX2luYyhcXHUwMDI2bG8tXFx1MDAzZXJlYmluZF9nZW4pO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZsby1cXHUwMDNlY2xlYXJfbGltaXRzX21vZGUsIDApO1xcbiBcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmxvLVxcdTAwM2Vsb19sb2NrKTtcXG4gXFxuIFxcdGxvLVxcdTAwM2Vsb19kZXZpY2UgPSBOVUxMO1xcbkBAIC0xNzgxLDYgKzE4MTEsNyBAQCBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGxvLVxcdTAwM2V3b3JrcXVldWUpO1xcbiBcXHRsb29wX2ZyZWVfaWRsZV93b3JrZXJzKGxvLCB0cnVlKTtcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2bG8tXFx1MDAzZXRpbWVyKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4gXFx0a2ZyZWUobG8pO1xcbiB9XFxuQEAgLTIxMDAsNiArMjEzMSw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsby1cXHUwMDNlbG9fbG9jayk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsby1cXHUwMDNlbG9fd29ya19sb2NrKTtcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bG8tXFx1MDAzZXJvb3RjZ19jbWRfbGlzdCk7XFxuIFxcdGRpc2stXFx1MDAzZW1ham9yXFx0XFx0PSBMT09QX01BSk9SO1xcbiBcXHRkaXNrLVxcdTAwM2VmaXJzdF9taW5vclxcdD0gaSBcXHUwMDNjXFx1MDAzYyBwYXJ0X3NoaWZ0O1xcbkBAIC0yMTM4LDYgKzIxNzAsMTAgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4gXFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIHtcXG4rXFx0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcXG4rXFx0ICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi9cXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcXG4rXFxuIFxcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xcbiBcXHRkZWxfZ2VuZGlzayhsby1cXHUwMDNlbG9fZGlzayk7XFxuIFxcdGJsa19tcV9mcmVlX3RhZ19zZXQoXFx1MDAyNmxvLVxcdTAwM2V0YWdfc2V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6MjYuNDE2ODUxODI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzI2NTUyMTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX2NsZWFyX2xpbWl0c193b3JrZm5cIixcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzXCIsXG4gICAgXCJsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVcIixcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jaGFuZ2VfZmRcIixcbiAgICBcImxvb3BfY29uZmlndXJlXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgdG8gZGVmZXIgcXVldWUgbGltaXRzIGNsZWFyaW5nIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbikgc28gdGhlIHF1ZXVlIGNhbiBiZSBwcm9wZXJseSBmcm96ZW4gd2l0aCBibGtfbXFfZnJlZXplX3F1ZXVlLiBJdCBhZGRzIGdlbmVyYXRpb24gY291bnRlcnMgYW5kIGF0b21pYyBzdGF0ZSB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0IHJlYmluZC9jbGVhciBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGRyaXZlciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NjFhMWYyYTY5MzYxYWIyZGUyMTk4OTJjMTliMTZhOWU0MzYyMDVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMjowNzoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLjlmNmU1MThlNjBkMjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC02Nyw2ICs2NywxMCBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgcm9vdGNnX2NtZF9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgaWRsZV93b3JrZXJfbGlzdDtcbiBcdHN0cnVjdCByYl9yb290ICAgICAgICAgIHdvcmtlcl90cmVlO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7XG4rXHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfbW9kZTtcbitcdGF0b21pY190XHRcdHJlYmluZF9nZW47XG4rXHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfZ2VuO1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7XG4gXHRib29sXHRcdFx0c3lzZnNfaW5pdGVkO1xuIFxuQEAgLTIyMiwyNiArMjI2LDQ0IEBAIHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4gXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNmRpc2tfdG9fZGV2KGxvLVx1MDAzZWxvX2Rpc2spLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4rc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4rXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbi1cbi1cdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcbi1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XG4tXG4tXHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLVx0XHRsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7XG4tXHR9XG4rXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4rXHRpbnQgbW9kZSA9IDA7XG4gXG4gXHQvKlxuLVx0ICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2hcbi1cdCAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4ndCBqdXN0XG4tXHQgKiBmcmVlemUgdGhlIHF1ZXVlIGFzIHdlJ3JlIGluc2lkZSB0aGUgLVx1MDAzZXF1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpc1xuLVx0ICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvXG4tXHQgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLlxuK1x0ICogQ29tbWl0IHRoZSB1bm1vZGlmaWVkIGxpbWl0cyBpZiB0aGUgZGV2aWNlIHdhcyByZWJvdW5kIHNpbmNlXG4rXHQgKiB0aGUgd29yayBpdGVtIHdhcyBzY2hlZHVsZWQuICBUaGUgZnJlZXplIGV4Y2x1ZGVzIGEgcmViaW5kXG4rXHQgKiB0aHJvdWdoIGxvb3BfY2hhbmdlX2ZkKCksIHdoaWNoIGFzc2lnbnMgdGhlIG5ldyBiYWNraW5nIGZpbGVcbitcdCAqIHVuZGVyIHRoZSBmcmVlemU7IHRoZSBvdGhlciByZWJpbmRpbmcgcGF0aHMsIGxvb3BfY29uZmlndXJlKClcbitcdCAqIGFuZCBfX2xvb3BfY2xyX2ZkKCksIGRvIG5vdCBmcmVlemUgdGhlIHF1ZXVlLCBidXQgdGhleSBidW1wXG4rXHQgKiByZWJpbmRfZ2VuIGFuZCByZXNldCBjbGVhcl9saW1pdHNfbW9kZSB0aGVtc2VsdmVzLCBzbyB0aGVcbitcdCAqIGdlbmVyYXRpb24gY2hlY2sgYW5kIHRoZSBhdG9taWNfeGNoZygpIGJlbG93IGNvdmVyIHRoZW0uXG4gXHQgKi9cbitcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX2dlbikgPT0gYXRvbWljX3JlYWQoXHUwMDI2bG8tXHUwMDNlcmViaW5kX2dlbikpIHtcbitcdFx0bW9kZSA9IGF0b21pY194Y2hnKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbitcbitcdFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9aRVJPX1JBTkdFKVxuK1x0XHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuK1xuK1x0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcbitcdFx0XHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XG4rXHRcdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuK1x0XHR9XG4rXHR9XG4gXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbitcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbit7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19nZW4sIGF0b21pY19yZWFkKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pKTtcbitcdGF0b21pY19vcihtb2RlLCBcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxuQEAgLTUxNiw2ICs1MzgsOCBAQCBzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gZmlsZTtcbitcdGF0b21pY19pbmMoXHUwMDI2bG8tXHUwMDNlcmViaW5kX2dlbik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbiBcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayA9IG1hcHBpbmdfZ2ZwX21hc2soZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuIFx0bWFwcGluZ19zZXRfZ2ZwX21hc2soZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0bG8tXHUwMDNlb2xkX2dmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpKTtcbkBAIC0xMTQ0LDYgKzExNjgsMTIgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdGZpbHAgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xuK1x0LypcbitcdCAqIEludmFsaWRhdGUgYW55IHBlbmRpbmcgY2xlYXIgdGhhdCB3YXMgc2NoZWR1bGVkIGFnYWluc3QgdGhlIG9sZFxuK1x0ICogYmFja2luZyBmaWxlLCBsaWtlIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSgpIGRvZXMgb24gcmViaW5kLlxuK1x0ICovXG4rXHRhdG9taWNfaW5jKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pO1xuK1x0YXRvbWljX3NldChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXG4gXHRsby1cdTAwM2Vsb19kZXZpY2UgPSBOVUxMO1xuQEAgLTE3ODEsNiArMTgxMSw3IEBAIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiBcdGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpO1xuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZsby1cdTAwM2V0aW1lcik7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFx0a2ZyZWUobG8pO1xuIH1cbkBAIC0yMTAwLDYgKzIxMzEsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb193b3JrX2xvY2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbiBcdGRpc2stXHUwMDNlbWFqb3JcdFx0PSBMT09QX01BSk9SO1xuIFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vclx0PSBpIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuQEAgLTIxMzgsNiArMjE3MCwxMCBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuK1x0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcbitcdCAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovXG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6MjYuNDE2ODUzMjE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI2MjE0OTU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3AgQmxvY2sgRGV2aWNlIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBhbmQgZmlndXJlIG91dCBpZiBpdCdzIGZ1enotd29ydGh5LCB3aGF0IHRoZSBpZGVhbCBjb25maWd1cmF0aW9uIHdpbGwgYmUsIGFuZCB3aGljaCBzeW1ib2xzIHdlIHNob3VsZCBob25lIGluIG9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZmV3IG5ldyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgOiBgY2xlYXJfbGltaXRzX3dvcmtgLCBgY2xlYXJfbGltaXRzX21vZGVgLCBgcmViaW5kX2dlbmAsIGFuZCBgY2xlYXJfbGltaXRzX2dlbmAuIENydWNpYWxseSwgaXQgcmVwbGFjZXMgYSBkYW5nZXJvdXMgZGlyZWN0IGNhbGwgdG8gYGxvb3BfY2xlYXJfbGltaXRzYCAod2l0aCB0aGF0IGFsYXJtaW5nIGNvbW1lbnQgYWJvdXQgdW5zYWZlIGxpbWl0IHVwZGF0ZXMpIHdpdGggYSBkZWZlcnJlZCB3b3JrIG1lY2hhbmlzbSBpbnZvbHZpbmcgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAuIFRoaXMgd29yayBmdW5jdGlvbiBub3cgdXNlcyBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgd2hpY2ggaXMgcHJvbWlzaW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBiZWNhdXNlIGl0IG1lYW5zIHdlIGhhdmUgbG9ja2luZyB0aGF0IHdlIGNhbiBhbmFseXplLiBXZSBub3cgaGF2ZSBzY2hlZHVsaW5nIHdvcmsgd2l0aCBgc2NoZWR1bGVfd29yayhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yaylgLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLCBgX19sb29wX2Nscl9mZGAsIGBsb19mcmVlX2Rpc2tgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYCwgc3VnZ2VzdGluZyB0aGF0IHRoZSBtb2RpZmljYXRpb25zIGFyZSBmYWlybHkgd2lkZXNwcmVhZCB3aXRoaW4gdGhlIGRyaXZlci5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0J3MgcmVxdWlyZWQgdG8gYnVpbGQgdGhpcyBkcml2ZXIsIHNvIEkgY2FuIGNvbmZpZ3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBjb3JyZWN0bHkuIEEgcXVpY2sgY2hlY2sgb2YgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdXNpbmcgYGdyZXBwZXJgIHNob3VsZCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzozMS42NzkwMDUwMDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MjU2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0RFVl9MT09QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXFx0dHJpc3RhdGUgXFxcIkxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cXHRpbnQgXFxcIk51bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE4MTpcXHRkZXBlbmRzIG9uIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXFx0ZGVmYXVsdCA4XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19CTEtfREVWX1JBTSlcXHQrPSBicmQub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0JMS19ERVZfTE9PUClcXHQrPSBsb29wLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19TVU5WREMpXFx0XFx0Kz0gc3VudmRjLm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgzOC0gKiBjaGFuZ2VkIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gMCBmb3IgbWF4X2xvb3A9MCByZWFzb25zKSwganVzdFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4Mzk6ICogY3JlYXRlIENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UIGxvb3AgZGV2aWNlcyBhdCBtb2R1bGVcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQwLSAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQzLSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDQ6c3RhdGljIGludCBtYXhfbG9vcCA9IENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjMxLjcyNzQzNDQwN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzAyOTE0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBCbG9jayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzb21lIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzIOKAkyBzcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGV4cGVjdCB0aGF0IGxpbmUgMTQ0LCBvciB0aGVyZWFib3V0cywgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBkZXBlbmRzIG9uLiBJJ2xsIGNoZWNrIHRoYXQgYXJlYSBhbmQgc2VlIGlmIGl0IGdpdmVzIGEgZ29vZCBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgZmlndXJlIG91dCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzozMy41NTc3Mjc3MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdGNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cXG4gMTQxOlxcdFxcdGJvb2xcXG4gMTQyOlxcdFxcdGRlZmF1bHQgQkxLX0RFVl9VQkRcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0Y29uZmlnIEJMS19ERVZfTE9PUFxcbiAxNDU6XFx0XFx0dHJpc3RhdGUgXFxcIkxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAxNDY6XFx0XFx0aGVscFxcbiAxNDc6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBhIHJlZ3VsYXIgZmlsZSBhcyBhIGJsb2NrXFxuIDE0ODpcXHRcXHQgIGRldmljZTsgeW91IGNhbiB0aGVuIGNyZWF0ZSBhIGZpbGUgc3lzdGVtIG9uIHRoYXQgYmxvY2sgZGV2aWNlIGFuZFxcbiAxNDk6XFx0XFx0ICBtb3VudCBpdCBqdXN0IGFzIHlvdSB3b3VsZCBtb3VudCBvdGhlciBibG9jayBkZXZpY2VzIHN1Y2ggYXMgaGFyZFxcbiAxNTA6XFx0XFx0ICBkcml2ZSBwYXJ0aXRpb25zLCBDRC1ST00gZHJpdmVzIG9yIGZsb3BweSBkcml2ZXMuIFRoZSBsb29wIGRldmljZXNcXG4gMTUxOlxcdFxcdCAgYXJlIGJsb2NrIHNwZWNpYWwgZGV2aWNlIGZpbGVzIHdpdGggbWFqb3IgbnVtYmVyIDcgYW5kIHR5cGljYWxseVxcbiAxNTI6XFx0XFx0ICBjYWxsZWQgL2Rldi9sb29wMCwgL2Rldi9sb29wMSBldGMuXFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdCAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY2hlY2sgYW4gSVNPIDk2NjAgZmlsZSBzeXN0ZW0gYmVmb3JlXFxuIDE1NTpcXHRcXHQgIGJ1cm5pbmcgdGhlIENELCBvciBpZiB5b3Ugd2FudCB0byB1c2UgZmxvcHB5IGltYWdlcyB3aXRob3V0IGZpcnN0XFxuIDE1NjpcXHRcXHQgIHdyaXRpbmcgdGhlbSB0byBmbG9wcHkuIEZ1cnRoZXJtb3JlLCBzb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMgYXZvaWRcXG4gMTU3OlxcdFxcdCAgdGhlIG5lZWQgZm9yIGEgZGVkaWNhdGVkIExpbnV4IHBhcnRpdGlvbiBieSBrZWVwaW5nIHRoZWlyIGNvbXBsZXRlXFxuIDE1ODpcXHRcXHQgIHJvb3QgZmlsZSBzeXN0ZW0gaW5zaWRlIGEgRE9TIEZBVCBmaWxlIHVzaW5nIHRoaXMgbG9vcCBkZXZpY2VcXG4gMTU5OlxcdFxcdCAgZHJpdmVyLlxcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHQgIFRvIHVzZSB0aGUgbG9vcCBkZXZpY2UsIHlvdSBuZWVkIHRoZSBsb3NldHVwIHV0aWxpdHksIGZvdW5kIGluIHRoZVxcbiAxNjI6XFx0XFx0ICB1dGlsLWxpbnV4IHBhY2thZ2UsIHNlZVxcbiAxNjM6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvdXRpbC1saW51eC9cXHUwMDNlLlxcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHQgIFRoZSBsb29wIGRldmljZSBkcml2ZXIgY2FuIGFsc28gYmUgdXNlZCB0byBcXFwiaGlkZVxcXCIgYSBmaWxlIHN5c3RlbSBpblxcbiAxNjY6XFx0XFx0ICBhIGRpc2sgcGFydGl0aW9uLCBmbG9wcHksIG9yIHJlZ3VsYXIgZmlsZSwgZWl0aGVyIHVzaW5nIGVuY3J5cHRpb25cXG4gMTY3OlxcdFxcdCAgKHNjcmFtYmxpbmcgdGhlIGRhdGEpIG9yIHN0ZWdhbm9ncmFwaHkgKGhpZGluZyB0aGUgZGF0YSBpbiB0aGUgbG93XFxuIDE2ODpcXHRcXHQgIGJpdHMgb2YsIHNheSwgYSBzb3VuZCBmaWxlKS4gVGhpcyBpcyBhbHNvIHNhZmUgaWYgdGhlIGZpbGUgcmVzaWRlc1xcbiAxNjk6XFx0XFx0ICBvbiBhIHJlbW90ZSBmaWxlIHNlcnZlci5cXG4gMTcwOlxcdFxcbiAxNzE6XFx0XFx0ICBOb3RlIHRoYXQgdGhpcyBsb29wIGRldmljZSBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBsb29wYmFja1xcbiAxNzI6XFx0XFx0ICBkZXZpY2UgdXNlZCBmb3IgbmV0d29yayBjb25uZWN0aW9ucyBmcm9tIHRoZSBtYWNoaW5lIHRvIGl0c2VsZi5cXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gMTc1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxvb3AuXFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdCAgTW9zdCB1c2VycyB3aWxsIGFuc3dlciBOIGhlcmUuXFxuIDE3ODpcXHRcXG4gMTc5OlxcdGNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjMzLjU1Nzc5Nzg1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODgwNDI5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTG9vcCBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGBCTEtfREVWX0xPT1BgIHBhdGNoLCBJIHNlZSBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW51c3VhbCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGV4cGVjdGVkIHNpbmNlIGl0J3MgcGFydCBvZiB0aGUgc3RhbmRhcmQgYmxvY2sgc3Vic3lzdGVtLiBUaGUgbG9vcCBkZXZpY2UgaXRzZWxmIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZS4gSXQncyBoZWF2aWx5IHV0aWxpemVkIGFuZCBJIGNhbiBlYXNpbHkgaW50ZXJhY3Qgd2l0aCBpdCB0aHJvdWdoIGBpb2N0bGAgY2FsbHMgYW5kIHN0YW5kYXJkIG9wZXJhdGlvbnMgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgR0NFLCBhbmQgZXZlbiBzeXprYWxsZXIsIHVzaW5nIHRoZSB0eXBpY2FsIGAvZGV2L2xvb3AqYCBkZXZpY2VzIGFuZCBhc3NvY2lhdGVkIGNvbW1hbmRzIGxpa2UgYExPT1BfU0VUX0ZEYCwgYExPT1BfQ09ORklHVVJFYCwgYW5kIHNvIG9uLlxuXG5JcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidCEgVGhlIHBhdGNoIGlzIGZpZGRsaW5nIHdpdGggc29tZSBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgSSdtIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gaG93IHRoZSBxdWV1ZSBsaW1pdHMgYXJlIHVwZGF0ZWQgYXN5bmNocm9ub3VzbHkgdXNpbmcgYSB3b3JrcXVldWUuIEl0J3MgYWxzbyB0b3VjaGluZyBxdWV1ZSBmcmVlemluZyB3aXRoIGBibGtfbXFfZnJlZXplX3F1ZXVlYCwgYXRvbWljIGdlbmVyYXRpb25zLCByZWJpbmRpbmcgaGFuZGxpbmcsIGFuZCBldmVuIHdvcmsgY2FuY2VsbGF0aW9uIGR1cmluZyBjbGVhbnVwLiBUaGF0J3MgYSBnb29kIGFtb3VudCBvZiByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIGJlaW5nIG1vZGlmaWVkIHdpdGggYWxsIHNvcnRzIG9mIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgc3RhdGUgY2hhbmdlcy4gVGhpcyBpcyAqcHJpbWUqIGZ1enppbmcgbWF0ZXJpYWwuXG5cbk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIHRoZSBmdW5jdGlvbnMgdGhpcyBwYXRjaCBtb2RpZmllcyBvciBpbnRyb2R1Y2VzLiBJJ20gc2VlaW5nOlxuXG4xLiAgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmBcbjIuICBgbG9vcF9jbGVhcl9saW1pdHNgXG4zLiAgYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWBcbjQuICBgX19sb29wX2Nscl9mZGBcbjUuICBgbG9fZmFsbG9jYXRlYCAoYW5kIEkgc2VlIGBsb29wX2NsZWFyX2xpbWl0c2AgaXMgY2FsbGVkIGhlcmUpXG42LiAgYGxvb3BfcmVtb3ZlYFxuNy4gIGBsb19mcmVlX2Rpc2tgXG5cbkkgc2hvdWxkIHJlYWxseSBkaWcgaW50byB3aGVyZSBgbG9vcF9jbGVhcl9saW1pdHNgIGlzIGNhbGxlZCB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC4gVGhhdCdzIGdvaW5nIHRvIGJlIGtleSB0byBjcmFmdGluZyBlZmZlY3RpdmUgZnV6emluZyBzdHJhdGVnaWVzLiBJIGJldCB0aGVyZSBhcmUgc29tZSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlcmUgd2FpdGluZyB0byBiZSBkaXNjb3ZlcmVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6MzcuNDQ1ODQzMzAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1Njc2MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfY2xlYXJfbGltaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTIyMz1zdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyOTpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzMC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNjEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjYyOnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yNjk9c3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjkyLVxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI5MzpcXHRcXHRsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjk0LVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjA1Mj1zdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjEzMy1cXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vyb290Y2dfd29yaywgbG9vcF9yb290Y2dfd29ya2ZuKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTM0OlxcdElOSVRfV09SSyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxMzUtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmxvLVxcdTAwM2Vyb290Y2dfY21kX2xpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzozNy41MzE1MjI0OTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk4MDE0NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGxvX2ZhbGxvY2F0ZWAgYW5kIGl0cyBDYWxsZXJzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRvIHJlYWxseSBncmFzcCB3aGF0J3MgZ29pbmcgb24gaGVyZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzLCBuYXR1cmFsbHksIGBsb19mYWxsb2NhdGVgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSwgc28gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgZnVuY3Rpb24gY2FsbHMuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20g4oCTIHRoZSBpbW1lZGlhdGUgY2FsbGVycy4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBUaGVuLCBpZiBuZWVkZWQsIEknbGwgZ28gZnVydGhlciB1cCB0aGUgc3RhY2ssIGFuZCBzZWUgaG93ICp0aGV5KiBhcmUgY2FsbGVkLiBJJ20gYWZ0ZXIgdGhlIGZ1bGwgY2FsbCBjaGFpbiwgdG9wIHRvIGJvdHRvbS4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGBsb19mYWxsb2NhdGVgIGJlaW5nIGludm9rZWQuIFRoaXMgZ3JhbnVsYXIgZXhhbWluYXRpb24gd2lsbCBoZWxwIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBjb3VsZCBiZSBjb250cmlidXRpbmcgdG8gd2hhdGV2ZXIgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzozOS45Mjk1Mzk0OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI2NTpcXHRcXHRhdG9taWNfb3IobW9kZSwgXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XFxuIDI2NjpcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZsby1cXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xcbiAyNjc6XFx0fVxcbiAyNjg6XFx0XFxuIDI2OTpcXHRzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXFxuIDI3MDpcXHRcXHRcXHRcXHRpbnQgbW9kZSlcXG4gMjcxOlxcdHtcXG4gMjcyOlxcdFxcdC8qXFxuIDI3MzpcXHRcXHQgKiBXZSB1c2UgZmFsbG9jYXRlIHRvIG1hbmlwdWxhdGUgdGhlIHNwYWNlIG1hcHBpbmdzIHVzZWQgYnkgdGhlIGltYWdlXFxuIDI3NDpcXHRcXHQgKiBhLmsuYS4gZGlzY2FyZC96ZXJvcmFuZ2UuXFxuIDI3NTpcXHRcXHQgKi9cXG4gMjc2OlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlID0gbG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcXG4gMjc3OlxcdFxcdGludCByZXQ7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdG1vZGUgfD0gRkFMTE9DX0ZMX0tFRVBfU0laRTtcXG4gMjgwOlxcdFxcbiAyODE6XFx0XFx0aWYgKCFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMobG8tXFx1MDAzZWxvX2RldmljZSkpXFxuIDI4MjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDI4MzpcXHRcXG4gMjg0OlxcdFxcdHJldCA9IGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZWZhbGxvY2F0ZShmaWxlLCBtb2RlLCBwb3MsIGJsa19ycV9ieXRlcyhycSkpO1xcbiAyODU6XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVJTlZBTCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFApKVxcbiAyODY6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdC8qXFxuIDI4OTpcXHRcXHQgKiBXZSBpbml0aWFsbHkgY29uZmlndXJlIHRoZSBsaW1pdHMgaW4gYSBob3BlIHRoYXQgZmFsbG9jYXRlIGlzXFxuIDI5MDpcXHRcXHQgKiBzdXBwb3J0ZWQgYW5kIGNsZWFyIHRoZW0gaGVyZSBpZiB0aGF0IHR1cm5zIG91dCBub3QgdG8gYmUgdHJ1ZS5cXG4gMjkxOlxcdFxcdCAqL1xcbiAyOTI6XFx0XFx0aWYgKHVubGlrZWx5KHJldCA9PSAtRU9QTk9UU1VQUCkpXFxuIDI5MzpcXHRcXHRcXHRsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSk7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdHJldHVybiByZXQ7XFxuIDI5NjpcXHR9XFxuIDI5NzpcXHRcXG4gMjk4OlxcdHN0YXRpYyBpbnQgbG9fcmVxX2ZsdXNoKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSlcXG4gMjk5OlxcdHtcXG4gMzAwOlxcdFxcdGludCByZXQgPSB2ZnNfZnN5bmMobG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZSwgMCk7XFxuIDMwMTpcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVkFMKSlcXG4gMzAyOlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjM5LjkyOTY4MjY0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzkwODM4MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBsb29wIGRldmljZSBmdW5jdGlvbmFsaXR5IGlzIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGxpZS4gSSd2ZSBnb3Q6XG5cbiogICBBIGJyYW5kIG5ldyBzdGF0aWMgd29yayBmdW5jdGlvbjogYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAuIEludGVyZXN0aW5nLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgXCJjbGVhciBsaW1pdHNcIiBmdW5jdGlvbmFsaXR5LCBzbyBwZXJoYXBzIHRoaXMgaXMgYSByZWZhY3RvcmluZyBvciBvcHRpbWl6YXRpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIGFzcGVjdC5cbiogICBUaGVuIGEgc2VyaWVzIG9mIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBsb29wX2NsZWFyX2xpbWl0c2AsIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLCBgX19sb29wX2Nscl9mZGAsIGBsb19mcmVlX2Rpc2tgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYC4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGNvcmUgZnVuY3Rpb25zLiBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCBhbmQgYF9fbG9vcF9jbHJfZmRgIGFyZSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgYXMgdGhleSBsaWtlbHkgYXJlIGludm9sdmVkIGluIGRldmljZSBzZXR1cCBhbmQgdGVhcmRvd24sIGEgcGxhY2Ugd2hlcmUgYnVncyBhcmUgdHlwaWNhbGx5IGZvdW5kLiBgbG9fZmFsbG9jYXRlYCwgd2hpY2ggbm93IGNhbGxzIGBsb29wX2NsZWFyX2xpbWl0c2AsIGlzIGFsc28gd29ydGh5IG9mIHNjcnV0aW55OyBpdCdzIHBvc3NpYmxlIHRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gYWxsb2NhdGlvbiBvciBkaXNrIHNwYWNlIG1hbmFnZW1lbnQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjYXN0IGEgd2lkZXIgbmV0LiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIHRoaXMgc3BlY2lmaWMgc2V0IGFuZCBsb29rIGF0IGFueSByZWxhdGVkIGxvb3AgaW9jdGwgYW5kIGNvbnRyb2wgZnVuY3Rpb25zIG9yIHRoZWlyIGNhbGxlcnMsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZSBhcmVhcyB0b3VjaGVkIGJ5IGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgIGFuZCBgX19sb29wX2Nscl9mZGAuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggYXJvdW5kIHRoZXNlIHdpbGwgdGVsbCBhIGNvbXBsZXRlIHN0b3J5LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbG9vcCBkZXZpY2UgYXJjaGl0ZWN0dXJlIHRvIGZvcm0gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6NDMuNzIwNTIzMjk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQzMTU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9NTEzPXN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTM3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUzODpzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTU3MD1zdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02MjctXFx0bWFwcGluZ19zZXRfZ2ZwX21hc2sob2xkX2ZpbGUtXFx1MDAzZWZfbWFwcGluZywgbG8tXFx1MDAzZW9sZF9nZnBfbWFzayk7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6NjI4OlxcdGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShsbywgZmlsZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjI5LVxcdGxvb3BfdXBkYXRlX2Rpbyhsbyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMDI3PXN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEwNC1cXHRsby1cXHUwMDNlbG9fZGV2aWNlID0gYmRldjtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTA1OlxcdGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShsbywgZmlsZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEwNi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTExNjE9c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE3Mi1cXHQgKiBJbnZhbGlkYXRlIGFueSBwZW5kaW5nIGNsZWFyIHRoYXQgd2FzIHNjaGVkdWxlZCBhZ2FpbnN0IHRoZSBvbGRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTczOlxcdCAqIGJhY2tpbmcgZmlsZSwgbGlrZSBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoKSBkb2VzIG9uIHJlYmluZC5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTc0LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzo0My43NzA5NTg5OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc2MDkyNjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTG9vcCBCbG9jayBEZXZpY2UgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoaXMgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25z4oCUdGhlIGVudHJ5IHBvaW50cyBhbmQgZmVhdHVyZSBsb2dpYyB0aGF0IHdvdWxkIGJlIG1vc3QgaW50ZXJlc3RpbmcgdG8gdGFyZ2V0LiBJJ3ZlIHBpbnBvaW50ZWQgYSBsaXN0OiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCwgYGxvb3BfY2xlYXJfbGltaXRzYCwgYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAsIGBfX2xvb3BfY2xyX2ZkYCwgYGxvX2ZhbGxvY2F0ZWAsIGBsb29wX2NoYW5nZV9mZGAsIGBsb29wX2NvbmZpZ3VyZWAsIGFuZCBgbG9vcF9yZW1vdmVgLiBEb3VibGUtY2hlY2tpbmcsIHllcywgdGhleSBhbGwgcmVzaWRlIGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGlzIGluIHBsYWNlLiBgQkxLX0RFVl9MT09QYCBsb29rcyB0byBiZSB0aGUga2V5IGNvbmZpZyBhbmQgaXTigJlzIHN0YW5kYXJkLiBJIHF1aWNrbHkgc2Nhbm5lZCBgZHJpdmVycy9ibG9jay9LY29uZmlnYCwgYW5kLCB5ZXAsIG5vIG90aGVyIGRlcGVuZGVuY2llcyBqdW1wIG91dC5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIFwiV29ydGhGdXp6aW5nXCIgY3JpdGVyaWEuIFRoZSBsb29wIGRldmljZSBkcml2ZXIsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYCwgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBMb29wIGRldmljZXMgYXJlIGVhc3kgdG8gZ2V0IHRvIGluIGFueSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgYW5kIFN5emthbGxlciBpcyBwZXJmZWN0bHkgc3VpdGVkIHRvIHRlc3RpbmcgdGhlbS4gVGhlIHBhdGNoIGl0c2VsZiBpcyBpbnRyaWd1aW5nOiBpdCBhZGRzIGFzeW5jaHJvbm91cyBxdWV1ZSBsaW1pdCBjbGVhcmluZyB2aWEgYSB3b3JrcXVldWUuIFRoaXMgaW5jbHVkZXMgcXVldWUgZnJlZXppbmcgKGBibGtfbXFfZnJlZXplX3F1ZXVlYCksIGdlbmVyYXRpb24gY291bnRlcnMgKGByZWJpbmRfZ2VuYCwgYGNsZWFyX2xpbWl0c19nZW5gKSwgYXRvbWljIHRyYWNraW5nLCBhbmQgd29yayBjYW5jZWxsYXRpb24gZHVyaW5nIGRldmljZSBjbGVhbnVwLiBUaGlzIHBvaW50cyB0byBhIGxpa2VseSBzb3VyY2Ugb2YgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IGJldHdlZW4gYGxvb3BfY29uZmlndXJlYCwgYGNsZWFyX2ZkYCwgYGNoYW5nZV9mZGAsIGFuZCBgcmVxdWVzdCBmYWxsb2NhdGVgLiBJdOKAmXMgY29uY3VycmVudCwgcmVhY2hhYmxlLCBhbmQgY29tcGxleCwgc28gd29ydGggZnV6emluZyFcblxuT2theSwgdGltZSB0byBjcmFmdCB0aGUgcmVhc29uaW5nIGZvciB0aGUgcmVzdWx0cy4gVGhlIHBhdGNoIGZvY3VzZXMgb24gaW1wcm92aW5nIHRoZSB3YXkgdGhlIGRyaXZlciBjbGVhcnMgcXVldWUgbGltaXRzLiBJdCBpbnRyb2R1Y2VzIGEgc2FmZXIgbWV0aG9kIHVzaW5nIGEgd29yayBpdGVtIChgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCkgYW5kIGZyZWV6ZXMgdGhlIHF1ZXVlIHdpdGggYGJsa19tcV9mcmVlemVfcXVldWVgLiBUaGUgZ2VuZXJhdGlvbiBjb3VudGVycyBhbmQgYXRvbWljIG9wZXJhdGlvbnMgYXJlIGtleSB0byBoYW5kbGluZyByYWNlcyBiZXR3ZWVuIHJlYmluZGluZyBvcGVyYXRpb25zLiBJdCdzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWctaHVudGluZyBzY2VuYXJpby4gVGhlIGxvb3AgZGV2aWNlIGlzIHJlYWRpbHkgYWNjZXNzaWJsZSBpbiBjb21tb24gdmlydHVhbCBlbnZpcm9ubWVudHMgYW5kIGV4ZXJjaXNlcyBjb25jdXJyZW50IGRyaXZlciBzdGF0ZSBtYW5hZ2VtZW50LCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTXkgRW5hYmxlQ29uZmlncyBpcyBqdXN0IFwiQkxLX0RFVl9MT09QXCIuIE15IEZvY3VzU3ltYm9scyBhcmUgdGhlIGZ1bmN0aW9ucyBJIGFscmVhZHkgbGlzdGVkIGJlZm9yZS5cblxuUmVhZHkuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ1MSwiT3V0cHV0VG9rZW5zIjoxNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6NDkuNTMxODg3OTk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNDgxODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX2NsZWFyX2xpbWl0c193b3JrZm5cIixcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzXCIsXG4gICAgXCJsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVcIixcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jaGFuZ2VfZmRcIixcbiAgICBcImxvb3BfY29uZmlndXJlXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgdG8gZGVmZXIgcXVldWUgbGltaXRzIGNsZWFyaW5nIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbikgc28gdGhlIHF1ZXVlIGNhbiBiZSBwcm9wZXJseSBmcm96ZW4gd2l0aCBibGtfbXFfZnJlZXplX3F1ZXVlLiBJdCBhZGRzIGdlbmVyYXRpb24gY291bnRlcnMgYW5kIGF0b21pYyBzdGF0ZSB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0IHJlYmluZC9jbGVhciBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGRyaXZlciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX2NsZWFyX2xpbWl0c193b3JrZm5cIixcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzXCIsXG4gICAgXCJsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVcIixcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jaGFuZ2VfZmRcIixcbiAgICBcImxvb3BfY29uZmlndXJlXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgdG8gZGVmZXIgcXVldWUgbGltaXRzIGNsZWFyaW5nIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbikgc28gdGhlIHF1ZXVlIGNhbiBiZSBwcm9wZXJseSBmcm96ZW4gd2l0aCBibGtfbXFfZnJlZXplX3F1ZXVlLiBJdCBhZGRzIGdlbmVyYXRpb24gY291bnRlcnMgYW5kIGF0b21pYyBzdGF0ZSB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0IHJlYmluZC9jbGVhciBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGRyaXZlciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6NDkuNjgyMzc2NzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzA3NzY4NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6NDkuNjgyODg4Njk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTU3MDcyNTMxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIChgZHJpdmVycy9ibG9jay9sb29wLmNgKSBieSBtb3ZpbmcgdGhlIGxpbWl0IHVwZGF0ZSBmcm9tIHRoZSByZXF1ZXN0IGV4ZWN1dGlvbiBjb250ZXh0IChgbG9fZmFsbG9jYXRlYCkgdG8gYSBkZWZlcnJlZCB3b3JrcXVldWUgaXRlbSAoYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmApLiBJdCBpbnRyb2R1Y2VzIGEgd29yayBzdHJ1Y3QgYW5kIGF0b21pYyBnZW5lcmF0aW9uIGNvdW50ZXJzIChgcmViaW5kX2dlbmAsIGBjbGVhcl9saW1pdHNfZ2VuYCwgYGNsZWFyX2xpbWl0c19tb2RlYCkgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHRvIHNhZmVseSBmcmVlemUgdGhlIHF1ZXVlIGFuZCBjb21taXQgbGltaXRzIHVwZGF0ZXMgYXN5bmNocm9ub3VzbHkgd2l0aG91dCByYWNlIGNvbmRpdGlvbnMgb24gYmFja2luZyBmaWxlIHJlYmluZGluZy5cXG5cXG5BbGwgYWRkZWQgZmllbGRzIGFyZSBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGxvb3BfZGV2aWNlYCB1c2luZyBga3phbGxvY19vYmpgIGFuZCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLYC4gVGhlIGxvY2FsIHZhcmlhYmxlcyB3aXRoaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgZGF0YSBpcyBjb3BpZWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgcmlza3Mgd2l0aCB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgcmFjZSBjb25kaXRpb25zLCBxdWV1ZSBsb2NraW5nL2ZyZWV6aW5nLCBhbmQgd29ya3F1ZXVlIGNhbmNlbGxhdGlvbiBsaWZldGltZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWcgdG9vbHMgKEtBU0FOLCBMT0NLREVQKS4gU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NjFhMWYyYTY5MzYxYWIyZGUyMTk4OTJjMTliMTZhOWU0MzYyMDVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMjowNzoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLjlmNmU1MThlNjBkMjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC02Nyw2ICs2NywxMCBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgcm9vdGNnX2NtZF9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgaWRsZV93b3JrZXJfbGlzdDtcbiBcdHN0cnVjdCByYl9yb290ICAgICAgICAgIHdvcmtlcl90cmVlO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7XG4rXHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfbW9kZTtcbitcdGF0b21pY190XHRcdHJlYmluZF9nZW47XG4rXHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfZ2VuO1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7XG4gXHRib29sXHRcdFx0c3lzZnNfaW5pdGVkO1xuIFxuQEAgLTIyMiwyNiArMjI2LDQ0IEBAIHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4gXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNmRpc2tfdG9fZGV2KGxvLVx1MDAzZWxvX2Rpc2spLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4rc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4rXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbi1cbi1cdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcbi1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XG4tXG4tXHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLVx0XHRsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7XG4tXHR9XG4rXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4rXHRpbnQgbW9kZSA9IDA7XG4gXG4gXHQvKlxuLVx0ICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2hcbi1cdCAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4ndCBqdXN0XG4tXHQgKiBmcmVlemUgdGhlIHF1ZXVlIGFzIHdlJ3JlIGluc2lkZSB0aGUgLVx1MDAzZXF1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpc1xuLVx0ICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvXG4tXHQgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLlxuK1x0ICogQ29tbWl0IHRoZSB1bm1vZGlmaWVkIGxpbWl0cyBpZiB0aGUgZGV2aWNlIHdhcyByZWJvdW5kIHNpbmNlXG4rXHQgKiB0aGUgd29yayBpdGVtIHdhcyBzY2hlZHVsZWQuICBUaGUgZnJlZXplIGV4Y2x1ZGVzIGEgcmViaW5kXG4rXHQgKiB0aHJvdWdoIGxvb3BfY2hhbmdlX2ZkKCksIHdoaWNoIGFzc2lnbnMgdGhlIG5ldyBiYWNraW5nIGZpbGVcbitcdCAqIHVuZGVyIHRoZSBmcmVlemU7IHRoZSBvdGhlciByZWJpbmRpbmcgcGF0aHMsIGxvb3BfY29uZmlndXJlKClcbitcdCAqIGFuZCBfX2xvb3BfY2xyX2ZkKCksIGRvIG5vdCBmcmVlemUgdGhlIHF1ZXVlLCBidXQgdGhleSBidW1wXG4rXHQgKiByZWJpbmRfZ2VuIGFuZCByZXNldCBjbGVhcl9saW1pdHNfbW9kZSB0aGVtc2VsdmVzLCBzbyB0aGVcbitcdCAqIGdlbmVyYXRpb24gY2hlY2sgYW5kIHRoZSBhdG9taWNfeGNoZygpIGJlbG93IGNvdmVyIHRoZW0uXG4gXHQgKi9cbitcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX2dlbikgPT0gYXRvbWljX3JlYWQoXHUwMDI2bG8tXHUwMDNlcmViaW5kX2dlbikpIHtcbitcdFx0bW9kZSA9IGF0b21pY194Y2hnKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbitcbitcdFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9aRVJPX1JBTkdFKVxuK1x0XHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuK1xuK1x0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcbitcdFx0XHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XG4rXHRcdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuK1x0XHR9XG4rXHR9XG4gXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbitcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbit7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19nZW4sIGF0b21pY19yZWFkKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pKTtcbitcdGF0b21pY19vcihtb2RlLCBcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxuQEAgLTUxNiw2ICs1MzgsOCBAQCBzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gZmlsZTtcbitcdGF0b21pY19pbmMoXHUwMDI2bG8tXHUwMDNlcmViaW5kX2dlbik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbiBcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayA9IG1hcHBpbmdfZ2ZwX21hc2soZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuIFx0bWFwcGluZ19zZXRfZ2ZwX21hc2soZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0bG8tXHUwMDNlb2xkX2dmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpKTtcbkBAIC0xMTQ0LDYgKzExNjgsMTIgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdGZpbHAgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xuK1x0LypcbitcdCAqIEludmFsaWRhdGUgYW55IHBlbmRpbmcgY2xlYXIgdGhhdCB3YXMgc2NoZWR1bGVkIGFnYWluc3QgdGhlIG9sZFxuK1x0ICogYmFja2luZyBmaWxlLCBsaWtlIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSgpIGRvZXMgb24gcmViaW5kLlxuK1x0ICovXG4rXHRhdG9taWNfaW5jKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pO1xuK1x0YXRvbWljX3NldChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXG4gXHRsby1cdTAwM2Vsb19kZXZpY2UgPSBOVUxMO1xuQEAgLTE3ODEsNiArMTgxMSw3IEBAIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiBcdGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpO1xuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZsby1cdTAwM2V0aW1lcik7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFx0a2ZyZWUobG8pO1xuIH1cbkBAIC0yMTAwLDYgKzIxMzEsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb193b3JrX2xvY2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbiBcdGRpc2stXHUwMDNlbWFqb3JcdFx0PSBMT09QX01BSk9SO1xuIFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vclx0PSBpIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuQEAgLTIxMzgsNiArMjE3MCwxMCBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuK1x0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcbitcdCAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovXG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6NDkuNjgyODg5ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEyNTA1NzM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3AgRGV2aWNlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIHRoZSBtb3JlIHJpZ29yb3VzIEtNU0FOIGFuYWx5c2lzIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHdpbGwgYmUgc3VmZmljaWVudC4gVGhlIHRhcmdldCBpcyBgZHJpdmVycy9ibG9jay9sb29wLmNgLCBhbmQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSBibG9jayBkZXZpY2UncyBsaW1pdHMgYXJlIGNsZWFyZWQgYW5kIHVwZGF0ZWQsIGFuZCB0aGUgd2F5IHRoZSBsb29wIGRldmljZSBpcyB1cGRhdGVkIHdoZW4gaXQgaXMgcmVib3VuZCB0byBhIGJhY2tpbmcgZmlsZS5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgc3RydWN0IHdvcmtfc3RydWN0IGNsZWFyX2xpbWl0c193b3JrYCwgc29tZSBhdG9taWMgZmllbGRzIChgY2xlYXJfbGltaXRzX21vZGVgLCBgcmViaW5kX2dlbmAsIGBjbGVhcl9saW1pdHNfZ2VuYCkgd2l0aGluIHRoZSBgc3RydWN0IGxvb3BfZGV2aWNlYC4gVGhlIHByb2JsZW1hdGljIGBsb29wX2NsZWFyX2xpbWl0c2AgZnVuY3Rpb24gaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIGRlZmVycmVkIHdvcmsgZnVuY3Rpb24sIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gLiBUaGlzIHdvcmsgZnVuY3Rpb24gbm93IHByb3Blcmx5IGZyZWV6ZXMgYW5kIHVuZnJlZXplcyB0aGUgYmxvY2sgcXVldWUgdXNpbmcgdGhlIGJsb2NrIGxheWVyJ3Mgc3RhbmRhcmQgbWV0aG9kcyAoYGJsa19tcV9mcmVlemVfcXVldWVgLCBldGMuKSBkdXJpbmcgdGhlIGxpbWl0IHVwZGF0ZSwgd2hpY2ggaXMgYSBnb29kIHNhZmV0eSBtZWFzdXJlLlxuXG5UaGVyZSdzIHRoaXMgbmV3IGdlbmVyYXRpb24gY291bnRlciBzZXR1cC4gVGhlIHBhdGNoIGFkZHMgdGhlc2UgYHJlYmluZF9nZW5gIGFuZCBgY2xlYXJfbGltaXRzX2dlbmAgYXRvbWljIG9wZXJhdGlvbnMgdG8gdGhlIGxvb3AgZGV2aWNlIHN0cnVjdHVyZS4gVGhlc2UgZ2VuZXJhdGlvbiBjb3VudGVycyBhcmUgYSBnb29kIGluZGljYXRvciB0aGF0IHRoZSBpbnRlbnRpb24gaXMgdG8gYXZvaWQgcmFjZXMgaW4gY2xlYXJpbmcgbGltaXRzIHdoaWxlIHJlYmluZGluZyB0aGUgYmFja2luZyBmaWxlLiBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCwgYW5kIGBfX2xvb3BfY2xyX2ZkYCBhcmUgdXBkYXRlZCB3aXRoIHRoZSBnZW5lcmF0aW9uIGFuZCBjbGVhciBtb2RlLCBzbyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlLiBXb3JrIGlzIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AgaW4gYGxvb3BfYWRkYCwgYW5kIGNsZWFuZWQgdXAgdXNpbmcgYGNhbmNlbF93b3JrX3N5bmNgIGluIGBsb19mcmVlX2Rpc2tgIGFuZCBgbG9vcF9yZW1vdmVgIHdoaWNoIGlzIGFsc28gZ29vZCB0byBzZWUuXG5cbk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG5cbjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhhdCdzIGEgY2xhc3NpYyBLTVNBTiBpc3N1ZS4gSSBkb24ndCBzZWUgYW55IG9idmlvdXMgc3RydWN0dXJlcyBiZWluZyBsZWFrZWQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlIGZyb20gdGhpcywgYnV0IEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyB0byBjb25maXJtLlxuMi4gIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IFRoZSBgYXRvbWljX3RgIHZhcmlhYmxlcyAoYGNsZWFyX2xpbWl0c19tb2RlYCwgYHJlYmluZF9nZW5gLCBgY2xlYXJfbGltaXRzX2dlbmApIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCBhcmUgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgc3RydWN0IGxvb3BfZGV2aWNlYCBpcyBhbGxvY2F0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXRvbWljcyBhcmUgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBJbiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCwgYGxpbWAgaXMgaW5pdGlhbGl6ZWQgdmlhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCwgd2hpY2ggc2hvdWxkIGJlIGZpbmUuIFRoZSBgbW9kZWAgbG9jYWwgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgdG8gMCB3aGljaCBpcyBzYWZlLlxuMy4gIFRoZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldy5cbjQuICBBbmQgb2YgY291cnNlLCBzdGFuZGFyZCBib3VuZHMgY2hlY2tzIGFuZCBidWZmZXIgbGVuZ3Rocy5cblxuTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBsb29wX2FkZGAgYW5kIGhvdyBgc3RydWN0IGxvb3BfZGV2aWNlYCBpcyBhbGxvY2F0ZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW5pdGlhbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzo1NS44MDc5NTA0NzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjMxOTcyNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvYy4qbG9vcF9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjU1LjkzMDI3OTkwM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzc0MjM1Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBsb2AgQWxsb2NhdGlvbiBpbiBgbG9vcF9hZGRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGxvb3BfYWRkYCBmdW5jdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgdGhlIHZhcmlhYmxlIGBsb2AuIEkgbmVlZCB0byBwcmVjaXNlbHkgdW5kZXJzdGFuZCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgZm9yIGBsb2AgKndpdGhpbiogdGhhdCBsb29wJ3MgY29udGV4dC4gSXMgaXQgYmVpbmcgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBlYWNoIGl0ZXJhdGlvbj8gSXMgdGhlcmUgYW55IGNoYW5jZSBvZiBpdCBiZWluZyBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXI/IElmIGl0ICppcyogb24gdGhlIHN0YWNrLCBpcyB0aGVyZSBhbnkgcG90ZW50aWFsIGZvciBzdGFjayBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMgZGVwZW5kaW5nIG9uIHRoZSBsb29wJ3MgYm91bmRzIGFuZCB0aGUgc2l6ZSBvZiBgbG9gJ3MgdHlwZT9cblxuSSBpbW1lZGlhdGVseSB3YW50IHRvIGFzc2VzcyB0aGUgbWVtb3J5IGltcGxpY2F0aW9ucy4gSSdtIHRoaW5raW5nIGFib3V0IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0b28sIGJ1dCBtZW1vcnkgdXNhZ2UgaXMgcHJpbWFyeSByaWdodCBub3cuIElmIGl0J3Mgb24gdGhlIGhlYXAsIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGxlYWtzIG9yIGluZWZmaWNpZW50IGdhcmJhZ2UgY29sbGVjdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBsYW5ndWFnZSB3ZSBhcmUgdXNpbmcgYW5kIHdoYXQgYGxvYCBpcy4gSWYgaXQncyBhIGdsb2JhbCwgdGhlbiBJJ2xsIGJlIGNoZWNraW5nIGl0cyBzY29wZS5cblxuSSdtIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggdGhlIGNvZGUsIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCByZS1hc3NpZ25tZW50cyBvciBjaGFuZ2VzIHRvIHRoZSB2YWx1ZSB0aGF0IG1pZ2h0IGltcGFjdCBpdHMgc2l6ZSBvciBtZW1vcnkgZm9vdHByaW50LiBUaGlzIGlzIHRoZSBjcml0aWNhbCBqdW5jdHVyZTsgc21hbGwgZGV0YWlscyBoZXJlIGNhbiBtYWtlIG9yIGJyZWFrIHRoZSBwcm9ncmFtJ3MgZWZmaWNpZW5jeSBhbmQgcm9idXN0bmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjU4LjMwNDUxODA5MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMzY0NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTIwNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIGxvb3BfbXFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA1MS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDUyOnN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA1My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMTg5PXN0YXRpYyB2b2lkIGxvb3BfcHJvYmUoZGV2X3QgZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE5NC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjE5NTpcXHRsb29wX2FkZChpZHgpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxOTYtfVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjI0OD1zdGF0aWMgaW50IGxvb3BfY29udHJvbF9nZXRfZnJlZShpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI2NS1cXHRtdXRleF91bmxvY2soXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjY2OlxcdHJldHVybiBsb29wX2FkZCgtMSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI2Ny1mb3VuZDpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyNzI9c3RhdGljIGxvbmcgbG9vcF9jb250cm9sX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI3Ni1cXHRjYXNlIExPT1BfQ1RMX0FERDpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjc3OlxcdFxcdHJldHVybiBsb29wX2FkZChwYXJtKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjc4LVxcdGNhc2UgTE9PUF9DVExfUkVNT1ZFOlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjMwND1zdGF0aWMgaW50IF9faW5pdCBsb29wX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzNDUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heF9sb29wOyBpKyspXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM0NjpcXHRcXHRsb29wX2FkZChpKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzo1OC40MDY4ODU1NjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2Mzk0NTYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdDpcblxuKipBbmFseXppbmcgdGhlIENvZGUgU25pcHBldDogYGxvb3BfYWRkYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBUaGUgZGlyZWN0aXZlIGlzIGNsZWFyIOKAkyBJIG5lZWQgdG8gZm9jdXMgb24gYSBmdW5jdGlvbiBuYW1lZCBgbG9vcF9hZGRgLCBhbmQgaXQgc2VlbXMgdG8gYmUgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDIwNTIuIFRoZSBzdWdnZXN0ZWQgdG9vbCBpcyBgcmVhZC1maWxlYCwgc28gcHJlc3VtYWJseSwgSSdsbCBiZSB1c2luZyB0aGF0IHRvIGV4dHJhY3QgdGhlIHJlbGV2YW50IHNlY3Rpb24gZnJvbSB0aGUgc291cmNlIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0IG9mIHRoYXQgbGluZS4gTGluZSBudW1iZXJzIGFyZSwgb2YgY291cnNlLCByZWxhdGl2ZSB0byB0aGUgZmlsZS4gU28sIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgbGluZSAyMDUyIGNvdWxkIGJlIGluIHRoZSBtaWRkbGUsIHRoZSBlbmQsIG9yIG5lYXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIEknbGwgcmVhZCB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGF0IGxpbmUgYW5kIHVzZSB0aGUgY29udGV4dCB0byBnZXQgYSBncmFzcCBvZiB3aGF0J3MgZ29pbmcgb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gdGhlIGZ1bmN0aW9u4oCZcyBwdXJwb3NlOiB3aGF0IGl0IHRha2VzIGFzIGlucHV0LCB3aGF0IGl0IG91dHB1dHMsIGFuZCBpbXBvcnRhbnRseSwgdGhlICp3aHkqIGJlaGluZCBpdHMgZXhpc3RlbmNlLiBJIHdpbGwgaGF2ZSB0aGUgY29udGV4dCB0aGF0IGlzIG5lZWRlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjgxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDg6MDAuNjcwODMzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA1MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA1MjpcXHRzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbjIwNTM6XFx0e1xcbjIwNTQ6XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XFxuMjA1NTpcXHRcXHRcXHQvKlxcbjIwNTY6XFx0XFx0XFx0ICogUmFuZG9tIG51bWJlciBwaWNrZWQgZnJvbSB0aGUgaGlzdG9yaWMgYmxvY2sgbWF4X3NlY3RvcnMgY2FwLlxcbjIwNTc6XFx0XFx0XFx0ICovXFxuMjA1ODpcXHRcXHRcXHQubWF4X2h3X3NlY3RvcnNcXHRcXHQ9IDI1NjB1LFxcbjIwNTk6XFx0XFx0fTtcXG4yMDYwOlxcdFxcdHN0cnVjdCBsb29wX2RldmljZSAqbG87XFxuMjA2MTpcXHRcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaztcXG4yMDYyOlxcdFxcdGludCBlcnI7XFxuMjA2MzpcXHRcXG4yMDY0OlxcdFxcdGVyciA9IC1FTk9NRU07XFxuMjA2NTpcXHRcXHRsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7XFxuMjA2NjpcXHRcXHRpZiAoIWxvKVxcbjIwNjc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjA2ODpcXHRcXHRsby1cXHUwMDNld29ya2VyX3RyZWUgPSBSQl9ST09UO1xcbjIwNjk6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmxvLVxcdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcXG4yMDcwOlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZsby1cXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xcbjIwNzE6XFx0XFx0V1JJVEVfT05DRShsby1cXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xcbjIwNzI6XFx0XFxuMjA3MzpcXHRcXHRlcnIgPSBtdXRleF9sb2NrX2tpbGxhYmxlKFxcdTAwMjZsb29wX2N0bF9tdXRleCk7XFxuMjA3NDpcXHRcXHRpZiAoZXJyKVxcbjIwNzU6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9kZXY7XFxuMjA3NjpcXHRcXG4yMDc3OlxcdFxcdC8qIGFsbG9jYXRlIGlkLCBpZiBAaWQgXFx1MDAzZT0gMCwgd2UncmUgcmVxdWVzdGluZyB0aGF0IHNwZWNpZmljIGlkICovXFxuMjA3ODpcXHRcXHRpZiAoaSBcXHUwMDNlPSAwKSB7XFxuMjA3OTpcXHRcXHRcXHRlcnIgPSBpZHJfYWxsb2MoXFx1MDAyNmxvb3BfaW5kZXhfaWRyLCBsbywgaSwgaSArIDEsIEdGUF9LRVJORUwpO1xcbjIwODA6XFx0XFx0XFx0aWYgKGVyciA9PSAtRU5PU1BDKVxcbjIwODE6XFx0XFx0XFx0XFx0ZXJyID0gLUVFWElTVDtcXG4yMDgyOlxcdFxcdH0gZWxzZSB7XFxuMjA4MzpcXHRcXHRcXHRlcnIgPSBpZHJfYWxsb2MoXFx1MDAyNmxvb3BfaW5kZXhfaWRyLCBsbywgMCwgMCwgR0ZQX0tFUk5FTCk7XFxuMjA4NDpcXHRcXHR9XFxuMjA4NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG4yMDg2OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjIwODc6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9kZXY7XFxuMjA4ODpcXHRcXHRpID0gZXJyO1xcbjIwODk6XFx0XFxuMjA5MDpcXHRcXHRsby1cXHUwMDNldGFnX3NldC5vcHMgPSBcXHUwMDI2bG9vcF9tcV9vcHM7XFxuMjA5MTpcXHRcXHRsby1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xcbjIwOTI6XFx0XFx0bG8tXFx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSBod19xdWV1ZV9kZXB0aDtcXG4yMDkzOlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0Lm51bWFfbm9kZSA9IE5VTUFfTk9fTk9ERTtcXG4yMDk0OlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0LmNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBsb29wX2NtZCk7XFxuMjA5NTpcXHRcXHRsby1cXHUwMDNldGFnX3NldC5mbGFncyA9IEJMS19NUV9GX1NUQUNLSU5HIHwgQkxLX01RX0ZfTk9fU0NIRURfQllfREVGQVVMVDtcXG4yMDk2OlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0LmRyaXZlcl9kYXRhID0gbG87XFxuMjA5NzpcXHRcXG4yMDk4OlxcdFxcdGVyciA9IGJsa19tcV9hbGxvY190YWdfc2V0KFxcdTAwMjZsby1cXHUwMDNldGFnX3NldCk7XFxuMjA5OTpcXHRcXHRpZiAoZXJyKVxcbjIxMDA6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9pZHI7XFxuMjEwMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDg6MDAuNjcwOTkzNTA5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NjEwOTgwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb29wIERldmljZSBJbml0aWFsaXphdGlvbiBhbmQgTGltaXQgQ2xlYXJpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIGBsb29wX2RldmljZWAgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXRzIHF1ZXVlIGxpbWl0cyBhcmUgaGFuZGxlZC4gVGhlIGNvZGUgc3RhcnRzIHdpdGggYSBga3phbGxvY19vYmooKmxvKTtgIGNhbGwsIHdoaWNoIG1lYW5zIGFsbCB0aGUgZmllbGRzIGluIHRoZSBuZXdseSBhbGxvY2F0ZWQgYHN0cnVjdCBsb29wX2RldmljZWAgYXJlIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZC4gR29vZCBwcmFjdGljZSwgYWx3YXlzLiBUaGlzIGluY2x1ZGVzIHRob3NlIG5ld2VyIGZpZWxkcyBsaWtlIGBjbGVhcl9saW1pdHNfd29ya2AsIGBjbGVhcl9saW1pdHNfbW9kZWAsIGByZWJpbmRfZ2VuYCwgYW5kIGBjbGVhcl9saW1pdHNfZ2VuYC4gVGhhdCB6ZXJvLWluaXRpYWxpemF0aW9uIGlzIGNydWNpYWwuXG5cblRoZW4sIGluIHRoZSBgbG9vcF9hZGRgIGZ1bmN0aW9uLCBJIHNlZSBgSU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO2Agd2hpY2ggaXMgc2V0dGluZyB1cCBhIHdvcmsgcXVldWUgZW50cnkuIFRoaXMgc3VnZ2VzdHMgdGhhdCBjbGVhcmluZyBsaW1pdHMgaXMgZGVmZXJyZWQsIGhhbmRsZWQgYXN5bmNocm9ub3VzbHkuIE1ha2VzIHNlbnNlIHRvIGF2b2lkIGJsb2NraW5nLlxuXG5Ob3csIGRpdmluZyBpbnRvIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gLCBpdCBnZXRzIGludGVyZXN0aW5nLiBXZSBraWNrIG9mZiBhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKWAgdG8gb2J0YWluIGEgc25hcHNob3Qgb3IgY29weSBvZiB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMsIHdoaWNoIGlzIHN0b3JlZCBpbiB0aGUgYGxpbWAgc3RydWN0LiBUaGUgYG1vZGVgIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kIGF0b21pY2FsbHkgY2hhbmdlZC4gVGhpcyBpcyBhIGNydWNpYWwgcmVhZC9tb2RpZnkvd3JpdGUgb3BlcmF0aW9uIG9uIHRoZSBxdWV1ZSBsaW1pdHMsIEkgd2FudCB0byBzZWUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiAgRmluYWxseSwgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pYCBhcHBsaWVzIGFueSBjaGFuZ2VzIGJhY2sgdG8gdGhlIHF1ZXVlIGxpbWl0cy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyB2YWx1ZXMgdGhpcyBhdG9taWMgZXhjaGFuZ2UgaXMgc2V0dGluZy4gV2hhdCBpcyB0aGUgb3ZlcmFsbCBsaW1pdCBjbGVhcmluZyBzdHJhdGVneT8gVGhlIGRvY3VtZW50YXRpb24gd2lsbCBiZSBrZXkgaGVyZS4gQWxzbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBsb29wX2NsZWFyX2xpbWl0c2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZW4gdGhpcyBsaW1pdCBjbGVhcmluZyBtZWNoYW5pc20gaXMgYmVpbmcgdHJpZ2dlcmVkLCBhbmQgd2h5IGl0J3MgbmVjZXNzYXJ5LiBMZXQgbWUgc2VlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowODowNC42MzIwOTQ3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NDI5Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfY2xlYXJfbGltaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTIyMz1zdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyOTpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzMC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNjEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjYyOnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yNjk9c3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjkyLVxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI5MzpcXHRcXHRsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjk0LVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjA1Mj1zdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjEzMy1cXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vyb290Y2dfd29yaywgbG9vcF9yb290Y2dfd29ya2ZuKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTM0OlxcdElOSVRfV09SSyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxMzUtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmxvLVxcdTAwM2Vyb290Y2dfY21kX2xpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowODowNC44Nzk1MzAzMloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODA1NzE4Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBsb19mYWxsb2NhdGVgIGFuZCBDb250ZXh0KipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBsb19mYWxsb2NhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBvdXQgYW5kIGxvb2sgYXQgaXRzIGltbWVkaWF0ZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgKmNhbGxlZCosIHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgcGFzc2VkLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCAqZ29hbCogb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaXMuIElzIGl0IGJlaW5nIHVzZWQgZm9yIHByZS1hbGxvY2F0aW9uLCBzcGFyc2UgZmlsZSBjcmVhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgd2l0aGluIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgd2lsbCBxdWlja2x5IHJldmVhbCB0aGUgY29yZSBpbnRlbnQgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgdW5kZXJseWluZyBzdG9yYWdlIG1lY2hhbmlzbSBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGZhbGxvY2F0ZSBjYWxsLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgZXJyb3IgaGFuZGxpbmcgZm9yIGZhbGxvY2F0ZSBhbmQgc3Vic2VxdWVudCBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDg6MDcuNjg1MjUwOTk5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjU6XFx0XFx0YXRvbWljX29yKG1vZGUsIFxcdTAwMjZsby1cXHUwMDNlY2xlYXJfbGltaXRzX21vZGUpO1xcbiAyNjY6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcXG4gMjY3OlxcdH1cXG4gMjY4OlxcdFxcbiAyNjk6XFx0c3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxcbiAyNzA6XFx0XFx0XFx0XFx0aW50IG1vZGUpXFxuIDI3MTpcXHR7XFxuIDI3MjpcXHRcXHQvKlxcbiAyNzM6XFx0XFx0ICogV2UgdXNlIGZhbGxvY2F0ZSB0byBtYW5pcHVsYXRlIHRoZSBzcGFjZSBtYXBwaW5ncyB1c2VkIGJ5IHRoZSBpbWFnZVxcbiAyNzQ6XFx0XFx0ICogYS5rLmEuIGRpc2NhcmQvemVyb3JhbmdlLlxcbiAyNzU6XFx0XFx0ICovXFxuIDI3NjpcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGU7XFxuIDI3NzpcXHRcXHRpbnQgcmV0O1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRtb2RlIHw9IEZBTExPQ19GTF9LRUVQX1NJWkU7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdGlmICghYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKGxvLVxcdTAwM2Vsb19kZXZpY2UpKVxcbiAyODI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRyZXQgPSBmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2VmYWxsb2NhdGUoZmlsZSwgbW9kZSwgcG9zLCBibGtfcnFfYnl0ZXMocnEpKTtcXG4gMjg1OlxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FSU5WQUwgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKSlcXG4gMjg2OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAyODc6XFx0XFxuIDI4ODpcXHRcXHQvKlxcbiAyODk6XFx0XFx0ICogV2UgaW5pdGlhbGx5IGNvbmZpZ3VyZSB0aGUgbGltaXRzIGluIGEgaG9wZSB0aGF0IGZhbGxvY2F0ZSBpc1xcbiAyOTA6XFx0XFx0ICogc3VwcG9ydGVkIGFuZCBjbGVhciB0aGVtIGhlcmUgaWYgdGhhdCB0dXJucyBvdXQgbm90IHRvIGJlIHRydWUuXFxuIDI5MTpcXHRcXHQgKi9cXG4gMjkyOlxcdFxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxcbiAyOTM6XFx0XFx0XFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xcbiAyOTQ6XFx0XFxuIDI5NTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyOTY6XFx0fVxcbiAyOTc6XFx0XFxuIDI5ODpcXHRzdGF0aWMgaW50IGxvX3JlcV9mbHVzaChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIDI5OTpcXHR7XFxuIDMwMDpcXHRcXHRpbnQgcmV0ID0gdmZzX2ZzeW5jKGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGUsIDApO1xcbiAzMDE6XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVJTlZBTCkpXFxuIDMwMjpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowODowNy42ODU0MTc1ODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3MDQ2OTY3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQWxsIENsZWFyKipcblxuT2theSwgbGV0J3MgZ28gdGhyb3VnaCB0aGlzIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSBLTVNBTiBjb25jZXJucywgYnV0IEkgYWx3YXlzIHByZWZlciB0byBkb3VibGUtY2hlY2suIEZpcnN0LCBJIHdhbnRlZCB0byB2ZXJpZnkgdGhhdCB0aGVyZSB3ZXJlIG5vIG9idmlvdXMgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgcHJvYmxlbXMgaW4gdXNlci1mYWNpbmcgc3RydWN0dXJlcyBvciBvdGhlciBzZW5zaXRpdmUgYXJlYXMuIFRoZSBxdWljayBzY2FuIGNvbmZpcm1lZCB0aGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gQWxsIG5ldyBzdHJ1Y3QgbWVtYmVycyBhcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBtYWluIGZvY3VzIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgb24gYSBsb2NraW5nIGlzc3VlIHJlZ2FyZGluZyBxdWV1ZSBsaW1pdHMuIEl0IGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IHByb2JsZW0gaW4gaG93IHF1ZXVlIGxpbWl0cyB3ZXJlIGJlaW5nIHVwZGF0ZWQsIHNoaWZ0aW5nIHRoZSB1cGRhdGUgdG8gYSB3b3JrcXVldWUgdG8gZW5zdXJlIHByb3BlciBsb2NraW5nIHByb3RvY29scy4gVGhpcyBwcmltYXJpbHkgaW52b2x2ZXMgY29uY3VycmVuY3ksIGRlYWRsb2Nrcywgd29ya3F1ZXVlIGNhbmNlbGxhdGlvbiByYWNlcywgYW5kIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgdGhlIHVzdWFsIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIFBST1ZFX0xPQ0tJTkcpLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgcmFuIHRocm91Z2ggdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBLTVNBTiBuZWVkcy4gVGhlcmUgYXJlIG5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5Db252ZXJzZWx5LCBJIHZlcmlmaWVkIHRoZSBjcml0ZXJpYSBmb3Igc2V0dGluZyBOZWVkc0tNU0FOIHRvIGZhbHNlOiBUaGlzIHBhdGNoIHByaW1hcmlseSBkZWFscyB3aXRoIHRoZSB0eXBlcyBvZiBidWdzIHRoYXQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIHRvb2xzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gQWxsIHJlbGV2YW50IHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgaGVyZS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIGl0J3MgYSBjbGVhciBOZWVkc0tNU0FOPWZhbHNlIHNpdHVhdGlvbi4gVGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NjMsIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDg6NDUuMzkwMTE3OTQzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgcXVldWUgbGltaXRzIGNsZWFyaW5nIGluIHRoZSBsb29wIGJsb2NrIGRyaXZlciAoYGRyaXZlcnMvYmxvY2svbG9vcC5jYCkgYnkgbW92aW5nIHRoZSBsaW1pdCB1cGRhdGUgZnJvbSB0aGUgcmVxdWVzdCBleGVjdXRpb24gY29udGV4dCAoYGxvX2ZhbGxvY2F0ZWApIHRvIGEgZGVmZXJyZWQgd29ya3F1ZXVlIGl0ZW0gKGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gKS4gSXQgaW50cm9kdWNlcyBhIHdvcmsgc3RydWN0IGFuZCBhdG9taWMgZ2VuZXJhdGlvbiBjb3VudGVycyAoYHJlYmluZF9nZW5gLCBgY2xlYXJfbGltaXRzX2dlbmAsIGBjbGVhcl9saW1pdHNfbW9kZWApIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCB0byBzYWZlbHkgZnJlZXplIHRoZSBxdWV1ZSBhbmQgY29tbWl0IGxpbWl0cyB1cGRhdGVzIGFzeW5jaHJvbm91c2x5IHdpdGhvdXQgcmFjZSBjb25kaXRpb25zIG9uIGJhY2tpbmcgZmlsZSByZWJpbmRpbmcuXFxuXFxuQWxsIGFkZGVkIGZpZWxkcyBhcmUgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdXNpbmcgYGt6YWxsb2Nfb2JqYCBhbmQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBsb2NhbCB2YXJpYWJsZXMgd2l0aGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHdpdGggdGhpcyBwYXRjaCByZWxhdGUgdG8gY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9ucywgcXVldWUgbG9ja2luZy9mcmVlemluZywgYW5kIHdvcmtxdWV1ZSBjYW5jZWxsYXRpb24gbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCkuIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHF1ZXVlIGxpbWl0cyBjbGVhcmluZyBpbiB0aGUgbG9vcCBibG9jayBkcml2ZXIgKGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2ApIGJ5IG1vdmluZyB0aGUgbGltaXQgdXBkYXRlIGZyb20gdGhlIHJlcXVlc3QgZXhlY3V0aW9uIGNvbnRleHQgKGBsb19mYWxsb2NhdGVgKSB0byBhIGRlZmVycmVkIHdvcmtxdWV1ZSBpdGVtIChgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCkuIEl0IGludHJvZHVjZXMgYSB3b3JrIHN0cnVjdCBhbmQgYXRvbWljIGdlbmVyYXRpb24gY291bnRlcnMgKGByZWJpbmRfZ2VuYCwgYGNsZWFyX2xpbWl0c19nZW5gLCBgY2xlYXJfbGltaXRzX21vZGVgKSB3aXRoaW4gYHN0cnVjdCBsb29wX2RldmljZWAgdG8gc2FmZWx5IGZyZWV6ZSB0aGUgcXVldWUgYW5kIGNvbW1pdCBsaW1pdHMgdXBkYXRlcyBhc3luY2hyb25vdXNseSB3aXRob3V0IHJhY2UgY29uZGl0aW9ucyBvbiBiYWNraW5nIGZpbGUgcmViaW5kaW5nLlxcblxcbkFsbCBhZGRlZCBmaWVsZHMgYXJlIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHVzaW5nIGBremFsbG9jX29iamAgYW5kIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbG9jYWwgdmFyaWFibGVzIHdpdGhpbiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIG5vIGtlcm5lbCBkYXRhIGlzIGNvcGllZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCByaXNrcyB3aXRoIHRoaXMgcGF0Y2ggcmVsYXRlIHRvIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbnMsIHF1ZXVlIGxvY2tpbmcvZnJlZXppbmcsIGFuZCB3b3JrcXVldWUgY2FuY2VsbGF0aW9uIGxpZmV0aW1lcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBkZWJ1ZyB0b29scyAoS0FTQU4sIExPQ0tERVApLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlc95x[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 01:51:50 +0000 UTC FinishedAt: 2026-09-04 02:08:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "96c8ea3c5add7920b3c43840d1ea76b3354c8d2d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "96c8ea3c5add7920b3c43840d1ea76b3354c8d2d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BLK_DEV_LOOP" ], "series_id": "45b97770-8f00-4a30-b08b-3d7174d3b1af" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "loop_clear_limits_workfn", "loop_clear_limits", "loop_assign_backing_file", "__loop_clr_fd", "lo_fallocate", "loop_change_fd", "loop_configure", "loop_remove" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LAogICAgJiMzNDtsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUmIzM0OywKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7bG9vcF9jaGFuZ2VfZmQmIzM0OywKICAgICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7bG9vcF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgcXVldWUgbGltaXRzIGNsZWFyaW5nIGluIHRoZSBsb29wIGJsb2NrIGRyaXZlciAoYGRyaXZlcnMvYmxvY2svbG9vcC5jYCkgYnkgbW92aW5nIHRoZSBsaW1pdCB1cGRhdGUgZnJvbSB0aGUgcmVxdWVzdCBleGVjdXRpb24gY29udGV4dCAoYGxvX2ZhbGxvY2F0ZWApIHRvIGEgZGVmZXJyZWQgd29ya3F1ZXVlIGl0ZW0gKGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gKS4gSXQgaW50cm9kdWNlcyBhIHdvcmsgc3RydWN0IGFuZCBhdG9taWMgZ2VuZXJhdGlvbiBjb3VudGVycyAoYHJlYmluZF9nZW5gLCBgY2xlYXJfbGltaXRzX2dlbmAsIGBjbGVhcl9saW1pdHNfbW9kZWApIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCB0byBzYWZlbHkgZnJlZXplIHRoZSBxdWV1ZSBhbmQgY29tbWl0IGxpbWl0cyB1cGRhdGVzIGFzeW5jaHJvbm91c2x5IHdpdGhvdXQgcmFjZSBjb25kaXRpb25zIG9uIGJhY2tpbmcgZmlsZSByZWJpbmRpbmcuXG5cbkFsbCBhZGRlZCBmaWVsZHMgYXJlIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHVzaW5nIGBremFsbG9jX29iamAgYW5kIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbG9jYWwgdmFyaWFibGVzIHdpdGhpbiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIG5vIGtlcm5lbCBkYXRhIGlzIGNvcGllZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCByaXNrcyB3aXRoIHRoaXMgcGF0Y2ggcmVsYXRlIHRvIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbnMsIHF1ZXVlIGxvY2tpbmcvZnJlZXppbmcsIGFuZCB3b3JrcXVldWUgY2FuY2VsbGF0aW9uIGxpZmV0aW1lcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBkZWJ1ZyB0b29scyAoS0FTQU4sIExPQ0tERVApLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyIHRvIGRlZmVyIHF1ZXVlIGxpbWl0cyBjbGVhcmluZyB0byBhIHdvcmtxdWV1ZSBpdGVtIChsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pIHNvIHRoZSBxdWV1ZSBjYW4gYmUgcHJvcGVybHkgZnJvemVuIHdpdGggYmxrX21xX2ZyZWV6ZV9xdWV1ZS4gSXQgYWRkcyBnZW5lcmF0aW9uIGNvdW50ZXJzIGFuZCBhdG9taWMgc3RhdGUgdG8gc3luY2hyb25pemUgYWdhaW5zdCByZWJpbmQvY2xlYXIgb3BlcmF0aW9ucy4gVGhpcyBjaGFuZ2VzIHJlYWNoYWJsZSBkcml2ZXIgY29uY3VycmVuY3kgYW5kIGxpZmVjeWNsZSBoYW5kbGluZywgbWFraW5nIGl0IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5NjFhMWYyYTY5MzYxYWIyZGUyMTk4OTJjMTliMTZhOWU0MzYyMDVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMjowNzoyNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5pbmRleCA2ZjEyOTc2MDM1YjA5Li45ZjZlNTE4ZTYwZDI4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXG5AQCAtNjcsNiAmIzQzOzY3LDEwIEBAIHN0cnVjdCBsb29wX2RldmljZSB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICByb290Y2dfY21kX2xpc3Q7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBpZGxlX3dvcmtlcl9saXN0O1xuIFx0c3RydWN0IHJiX3Jvb3QgICAgICAgICAgd29ya2VyX3RyZWU7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7XG4mIzQzO1x0YXRvbWljX3RcdFx0Y2xlYXJfbGltaXRzX21vZGU7XG4mIzQzO1x0YXRvbWljX3RcdFx0cmViaW5kX2dlbjtcbiYjNDM7XHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfZ2VuO1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7XG4gXHRib29sXHRcdFx0c3lzZnNfaW5pdGVkO1xuIFxuQEAgLTIyMiwyNiAmIzQzOzIyNiw0NCBAQCBzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxuIFx0XHRrb2JqZWN0X3VldmVudChcdTAwMjZkaXNrX3RvX2Rldihsby1cdTAwM2Vsb19kaXNrKS1cdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxuJiM0MztzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGNsZWFyX2xpbWl0c193b3JrKTtcbiBcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4tXG4tXHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXG4tXHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuLVxuLVx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG4tXHRcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcbi1cdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuLVx0fVxuJiM0MztcdHVuc2lnbmVkIGludCBtZW1mbGFncztcbiYjNDM7XHRpbnQgbW9kZSA9IDA7XG4gXG4gXHQvKlxuLVx0ICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2hcbi1cdCAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4mIzM5O3QganVzdFxuLVx0ICogZnJlZXplIHRoZSBxdWV1ZSBhcyB3ZSYjMzk7cmUgaW5zaWRlIHRoZSAtXHUwMDNlcXVldWVfcnEgbWV0aG9kIGhlcmUuICBTbyB0aGlzXG4tXHQgKiBzaG91bGQgbW92ZSBvdXQgaW50byBhIHdvcmtxdWV1ZSB1bmxlc3Mgd2UgZ2V0IHRoZSBmaWxlIG9wZXJhdGlvbnMgdG9cbi1cdCAqIGFkdmVydGlzZSBpZiB0aGV5IHN1cHBvcnQgc3BlY2lmaWMgZmFsbG9jYXRlIG9wZXJhdGlvbnMuXG4mIzQzO1x0ICogQ29tbWl0IHRoZSB1bm1vZGlmaWVkIGxpbWl0cyBpZiB0aGUgZGV2aWNlIHdhcyByZWJvdW5kIHNpbmNlXG4mIzQzO1x0ICogdGhlIHdvcmsgaXRlbSB3YXMgc2NoZWR1bGVkLiAgVGhlIGZyZWV6ZSBleGNsdWRlcyBhIHJlYmluZFxuJiM0MztcdCAqIHRocm91Z2ggbG9vcF9jaGFuZ2VfZmQoKSwgd2hpY2ggYXNzaWducyB0aGUgbmV3IGJhY2tpbmcgZmlsZVxuJiM0MztcdCAqIHVuZGVyIHRoZSBmcmVlemU7IHRoZSBvdGhlciByZWJpbmRpbmcgcGF0aHMsIGxvb3BfY29uZmlndXJlKClcbiYjNDM7XHQgKiBhbmQgX19sb29wX2Nscl9mZCgpLCBkbyBub3QgZnJlZXplIHRoZSBxdWV1ZSwgYnV0IHRoZXkgYnVtcFxuJiM0MztcdCAqIHJlYmluZF9nZW4gYW5kIHJlc2V0IGNsZWFyX2xpbWl0c19tb2RlIHRoZW1zZWx2ZXMsIHNvIHRoZVxuJiM0MztcdCAqIGdlbmVyYXRpb24gY2hlY2sgYW5kIHRoZSBhdG9taWNfeGNoZygpIGJlbG93IGNvdmVyIHRoZW0uXG4gXHQgKi9cbiYjNDM7XHRtZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUpO1xuJiM0MztcdGlmIChhdG9taWNfcmVhZChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfZ2VuKSA9PSBhdG9taWNfcmVhZChcdTAwMjZsby1cdTAwM2VyZWJpbmRfZ2VuKSkge1xuJiM0MztcdFx0bW9kZSA9IGF0b21pY194Y2hnKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXG4mIzQzO1x0XHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuJiM0MztcbiYjNDM7XHRcdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xuJiM0MztcdFx0XHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XG4mIzQzO1x0XHRcdGxpbS5kaXNjYXJkX2dyYW51bGFyaXR5ID0gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4gXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbiYjNDM7XHRibGtfbXFfdW5mcmVlemVfcXVldWUobG8tXHUwMDNlbG9fcXVldWUsIG1lbWZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4mIzQzO3tcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19nZW4sIGF0b21pY19yZWFkKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pKTtcbiYjNDM7XHRhdG9taWNfb3IobW9kZSwgXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX21vZGUpO1xuJiM0MztcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIH1cbiBcbiBzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG5AQCAtNTE2LDYgJiM0Mzs1MzgsOCBAQCBzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gZmlsZTtcbiYjNDM7XHRhdG9taWNfaW5jKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX21vZGUsIDApO1xuIFx0bG8tXHUwMDNlb2xkX2dmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhmaWxlLVx1MDAzZWZfbWFwcGluZyk7XG4gXHRtYXBwaW5nX3NldF9nZnBfbWFzayhmaWxlLVx1MDAzZWZfbWFwcGluZyxcbiBcdFx0XHRsby1cdTAwM2VvbGRfZ2ZwX21hc2sgXHUwMDI2IH4oX19HRlBfSU8gfCBfX0dGUF9GUykpO1xuQEAgLTExNDQsNiAmIzQzOzExNjgsMTIgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdGZpbHAgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSW52YWxpZGF0ZSBhbnkgcGVuZGluZyBjbGVhciB0aGF0IHdhcyBzY2hlZHVsZWQgYWdhaW5zdCB0aGUgb2xkXG4mIzQzO1x0ICogYmFja2luZyBmaWxlLCBsaWtlIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSgpIGRvZXMgb24gcmViaW5kLlxuJiM0MztcdCAqL1xuJiM0MztcdGF0b21pY19pbmMoXHUwMDI2bG8tXHUwMDNlcmViaW5kX2dlbik7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXG4gXHRsby1cdTAwM2Vsb19kZXZpY2UgPSBOVUxMO1xuQEAgLTE3ODEsNiAmIzQzOzE4MTEsNyBAQCBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXG4gXHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGxvLVx1MDAzZXdvcmtxdWV1ZSk7XG4gXHRsb29wX2ZyZWVfaWRsZV93b3JrZXJzKGxvLCB0cnVlKTtcbiBcdHRpbWVyX3NodXRkb3duX3N5bmMoXHUwMDI2bG8tXHUwMDNldGltZXIpO1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIFx0bXV0ZXhfZGVzdHJveShcdTAwMjZsby1cdTAwM2Vsb19tdXRleCk7XG4gXHRrZnJlZShsbyk7XG4gfVxuQEAgLTIxMDAsNiAmIzQzOzIxMzEsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb193b3JrX2xvY2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ19jbWRfbGlzdCk7XG4gXHRkaXNrLVx1MDAzZW1ham9yXHRcdD0gTE9PUF9NQUpPUjtcbiBcdGRpc2stXHUwMDNlZmlyc3RfbWlub3JcdD0gaSBcdTAwM2NcdTAwM2MgcGFydF9zaGlmdDtcbkBAIC0yMTM4LDYgJiM0MzsyMTcwLDEwIEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4gXG4gc3RhdGljIHZvaWQgbG9vcF9yZW1vdmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbylcbiB7XG4mIzQzO1x0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcbiYjNDM7XHQgKiBieSB0aGUgdGltZSBsb19mcmVlX2Rpc2soKSBydW5zLiAqL1xuJiM0MztcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuJiM0MztcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LAogICAgJiMzNDtsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUmIzM0OywKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7bG9vcF9jaGFuZ2VfZmQmIzM0OywKICAgICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7bG9vcF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvb3AgYmxvY2sgZGV2aWNlIGRyaXZlciB0byBkZWZlciBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKSBzbyB0aGUgcXVldWUgY2FuIGJlIHByb3Blcmx5IGZyb3plbiB3aXRoIGJsa19tcV9mcmVlemVfcXVldWUuIEl0IGFkZHMgZ2VuZXJhdGlvbiBjb3VudGVycyBhbmQgYXRvbWljIHN0YXRlIHRvIHN5bmNocm9uaXplIGFnYWluc3QgcmViaW5kL2NsZWFyIG9wZXJhdGlvbnMuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgZHJpdmVyIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTYxYTFmMmE2OTM2MWFiMmRlMjE5ODkyYzE5YjE2YTllNDM2MjA1ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDI6MDc6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDZmMTI5NzYwMzViMDkuLjlmNmU1MThlNjBkMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC02Nyw2ICYjNDM7NjcsMTAgQEAgc3RydWN0IGxvb3BfZGV2aWNlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICByb290Y2dfY21kX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgaWRsZV93b3JrZXJfbGlzdDsKIAlzdHJ1Y3QgcmJfcm9vdCAgICAgICAgICB3b3JrZXJfdHJlZTsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7CiYjNDM7CWF0b21pY190CQljbGVhcl9saW1pdHNfbW9kZTsKJiM0MzsJYXRvbWljX3QJCXJlYmluZF9nZW47CiYjNDM7CWF0b21pY190CQljbGVhcl9saW1pdHNfZ2VuOwogCXN0cnVjdCB0aW1lcl9saXN0ICAgICAgIHRpbWVyOwogCWJvb2wJCQlzeXNmc19pbml0ZWQ7CiAKQEAgLTIyMiwyNiAmIzQzOzIyNiw0NCBAQCBzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKQogCQlrb2JqZWN0X3VldmVudCgmYW1wO2Rpc2tfdG9fZGV2KGxvLSZndDtsb19kaXNrKS0mZ3Q7a29iaiwgS09CSl9DSEFOR0UpOwogfQogCi1zdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSkKJiM0MztzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewomIzQzOwlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0KJiM0MzsJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbG9vcF9kZXZpY2UsIGNsZWFyX2xpbWl0c193b3JrKTsKIAlzdHJ1Y3QgcXVldWVfbGltaXRzIGxpbSA9IHF1ZXVlX2xpbWl0c19zdGFydF91cGRhdGUobG8tJmd0O2xvX3F1ZXVlKTsKLQotCWlmIChtb2RlICZhbXA7IEZBTExPQ19GTF9aRVJPX1JBTkdFKQotCQlsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDsKLQotCWlmIChtb2RlICZhbXA7IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7Ci0JCWxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDsKLQkJbGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwOwotCX0KJiM0MzsJdW5zaWduZWQgaW50IG1lbWZsYWdzOwomIzQzOwlpbnQgbW9kZSA9IDA7CiAKIAkvKgotCSAqIFhYWDogdGhpcyB1cGRhdGVzIHRoZSBxdWV1ZSBsaW1pdHMgd2l0aG91dCBmcmVlemluZyB0aGUgcXVldWUsIHdoaWNoCi0JICogaXMgYWdhaW5zdCB0aGUgbG9ja2luZyBwcm90b2NvbCBhbmQgZGFuZ2Vyb3VzLiAgQnV0IHdlIGNhbiYjMzk7dCBqdXN0Ci0JICogZnJlZXplIHRoZSBxdWV1ZSBhcyB3ZSYjMzk7cmUgaW5zaWRlIHRoZSAtJmd0O3F1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpcwotCSAqIHNob3VsZCBtb3ZlIG91dCBpbnRvIGEgd29ya3F1ZXVlIHVubGVzcyB3ZSBnZXQgdGhlIGZpbGUgb3BlcmF0aW9ucyB0bwotCSAqIGFkdmVydGlzZSBpZiB0aGV5IHN1cHBvcnQgc3BlY2lmaWMgZmFsbG9jYXRlIG9wZXJhdGlvbnMuCiYjNDM7CSAqIENvbW1pdCB0aGUgdW5tb2RpZmllZCBsaW1pdHMgaWYgdGhlIGRldmljZSB3YXMgcmVib3VuZCBzaW5jZQomIzQzOwkgKiB0aGUgd29yayBpdGVtIHdhcyBzY2hlZHVsZWQuICBUaGUgZnJlZXplIGV4Y2x1ZGVzIGEgcmViaW5kCiYjNDM7CSAqIHRocm91Z2ggbG9vcF9jaGFuZ2VfZmQoKSwgd2hpY2ggYXNzaWducyB0aGUgbmV3IGJhY2tpbmcgZmlsZQomIzQzOwkgKiB1bmRlciB0aGUgZnJlZXplOyB0aGUgb3RoZXIgcmViaW5kaW5nIHBhdGhzLCBsb29wX2NvbmZpZ3VyZSgpCiYjNDM7CSAqIGFuZCBfX2xvb3BfY2xyX2ZkKCksIGRvIG5vdCBmcmVlemUgdGhlIHF1ZXVlLCBidXQgdGhleSBidW1wCiYjNDM7CSAqIHJlYmluZF9nZW4gYW5kIHJlc2V0IGNsZWFyX2xpbWl0c19tb2RlIHRoZW1zZWx2ZXMsIHNvIHRoZQomIzQzOwkgKiBnZW5lcmF0aW9uIGNoZWNrIGFuZCB0aGUgYXRvbWljX3hjaGcoKSBiZWxvdyBjb3ZlciB0aGVtLgogCSAqLwomIzQzOwltZW1mbGFncyA9IGJsa19tcV9mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlKTsKJiM0MzsJaWYgKGF0b21pY19yZWFkKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19nZW4pID09IGF0b21pY19yZWFkKCZhbXA7bG8tJmd0O3JlYmluZF9nZW4pKSB7CiYjNDM7CQltb2RlID0gYXRvbWljX3hjaGcoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGUsIDApOwomIzQzOwomIzQzOwkJaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpCiYjNDM7CQkJbGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7CiYjNDM7CiYjNDM7CQlpZiAobW9kZSAmYW1wOyBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkgewomIzQzOwkJCWxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDsKJiM0MzsJCQlsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7CiYjNDM7CQl9CiYjNDM7CX0KIAlxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUsICZhbXA7bGltKTsKJiM0MzsJYmxrX21xX3VuZnJlZXplX3F1ZXVlKGxvLSZndDtsb19xdWV1ZSwgbWVtZmxhZ3MpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSkKJiM0Mzt7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX2dlbiwgYXRvbWljX3JlYWQoJmFtcDtsby0mZ3Q7cmViaW5kX2dlbikpOwomIzQzOwlhdG9taWNfb3IobW9kZSwgJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGUpOwomIzQzOwlzY2hlZHVsZV93b3JrKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c193b3JrKTsKIH0KIAogc3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLApAQCAtNTE2LDYgJiM0Mzs1MzgsOCBAQCBzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHN0YXRpYyB2b2lkIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlsby0mZ3Q7bG9fYmFja2luZ19maWxlID0gZmlsZTsKJiM0MzsJYXRvbWljX2luYygmYW1wO2xvLSZndDtyZWJpbmRfZ2VuKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfbW9kZSwgMCk7CiAJbG8tJmd0O29sZF9nZnBfbWFzayA9IG1hcHBpbmdfZ2ZwX21hc2soZmlsZS0mZ3Q7Zl9tYXBwaW5nKTsKIAltYXBwaW5nX3NldF9nZnBfbWFzayhmaWxlLSZndDtmX21hcHBpbmcsCiAJCQlsby0mZ3Q7b2xkX2dmcF9tYXNrICZhbXA7IH4oX19HRlBfSU8gfCBfX0dGUF9GUykpOwpAQCAtMTE0NCw2ICYjNDM7MTE2OCwxMiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiAJc3Bpbl9sb2NrX2lycSgmYW1wO2xvLSZndDtsb19sb2NrKTsKIAlmaWxwID0gbG8tJmd0O2xvX2JhY2tpbmdfZmlsZTsKIAlsby0mZ3Q7bG9fYmFja2luZ19maWxlID0gTlVMTDsKJiM0MzsJLyoKJiM0MzsJICogSW52YWxpZGF0ZSBhbnkgcGVuZGluZyBjbGVhciB0aGF0IHdhcyBzY2hlZHVsZWQgYWdhaW5zdCB0aGUgb2xkCiYjNDM7CSAqIGJhY2tpbmcgZmlsZSwgbGlrZSBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoKSBkb2VzIG9uIHJlYmluZC4KJiM0MzsJICovCiYjNDM7CWF0b21pY19pbmMoJmFtcDtsby0mZ3Q7cmViaW5kX2dlbik7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX21vZGUsIDApOwogCXNwaW5fdW5sb2NrX2lycSgmYW1wO2xvLSZndDtsb19sb2NrKTsKIAogCWxvLSZndDtsb19kZXZpY2UgPSBOVUxMOwpAQCAtMTc4MSw2ICYjNDM7MTgxMSw3IEBAIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIAkJZGVzdHJveV93b3JrcXVldWUobG8tJmd0O3dvcmtxdWV1ZSk7CiAJbG9vcF9mcmVlX2lkbGVfd29ya2VycyhsbywgdHJ1ZSk7CiAJdGltZXJfc2h1dGRvd25fc3luYygmYW1wO2xvLSZndDt0aW1lcik7CiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmspOwogCW11dGV4X2Rlc3Ryb3koJmFtcDtsby0mZ3Q7bG9fbXV0ZXgpOwogCWtmcmVlKGxvKTsKIH0KQEAgLTIxMDAsNiAmIzQzOzIxMzEsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCXNwaW5fbG9ja19pbml0KCZhbXA7bG8tJmd0O2xvX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZhbXA7bG8tJmd0O2xvX3dvcmtfbG9jayk7CiAJSU5JVF9XT1JLKCZhbXA7bG8tJmd0O3Jvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pOwomIzQzOwlJTklUX1dPUksoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmssIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbik7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtsby0mZ3Q7cm9vdGNnX2NtZF9saXN0KTsKIAlkaXNrLSZndDttYWpvcgkJPSBMT09QX01BSk9SOwogCWRpc2stJmd0O2ZpcnN0X21pbm9yCT0gaSAmbHQ7Jmx0OyBwYXJ0X3NoaWZ0OwpAQCAtMjEzOCw2ICYjNDM7MjE3MCwxMCBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKQogCiBzdGF0aWMgdm9pZCBsb29wX3JlbW92ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKQogewomIzQzOwkvKiBDYW5jZWwgZWFybHk6IHRoZSBxdWV1ZSBtYXkgYmUgaW4gUkNVLWRlbGF5ZWQgZnJlZWluZwomIzQzOwkgKiBieSB0aGUgdGltZSBsb19mcmVlX2Rpc2soKSBydW5zLiAqLwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c193b3JrKTsKJiM0MzsKIAkvKiBNYWtlIHRoaXMgbG9vcCBkZXZpY2UgdW5yZWFjaGFibGUgZnJvbSBwYXRobmFtZS4gKi8KIAlkZWxfZ2VuZGlzayhsby0mZ3Q7bG9fZGlzayk7CiAJYmxrX21xX2ZyZWVfdGFnX3NldCgmYW1wO2xvLSZndDt0YWdfc2V0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ1NgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3AgQmxvY2sgRGV2aWNlIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9ibG9jay9sb29wLmNgIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGZ1enotd29ydGh5LCB3aGF0IHRoZSBpZGVhbCBjb25maWd1cmF0aW9uIHdpbGwgYmUsIGFuZCB3aGljaCBzeW1ib2xzIHdlIHNob3VsZCBob25lIGluIG9uLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZmV3IG5ldyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgOiBgY2xlYXJfbGltaXRzX3dvcmtgLCBgY2xlYXJfbGltaXRzX21vZGVgLCBgcmViaW5kX2dlbmAsIGFuZCBgY2xlYXJfbGltaXRzX2dlbmAuIENydWNpYWxseSwgaXQgcmVwbGFjZXMgYSBkYW5nZXJvdXMgZGlyZWN0IGNhbGwgdG8gYGxvb3BfY2xlYXJfbGltaXRzYCAod2l0aCB0aGF0IGFsYXJtaW5nIGNvbW1lbnQgYWJvdXQgdW5zYWZlIGxpbWl0IHVwZGF0ZXMpIHdpdGggYSBkZWZlcnJlZCB3b3JrIG1lY2hhbmlzbSBpbnZvbHZpbmcgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAuIFRoaXMgd29yayBmdW5jdGlvbiBub3cgdXNlcyBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgd2hpY2ggaXMgcHJvbWlzaW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBiZWNhdXNlIGl0IG1lYW5zIHdlIGhhdmUgbG9ja2luZyB0aGF0IHdlIGNhbiBhbmFseXplLiBXZSBub3cgaGF2ZSBzY2hlZHVsaW5nIHdvcmsgd2l0aCBgc2NoZWR1bGVfd29yaygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yaylgLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLCBgX19sb29wX2Nscl9mZGAsIGBsb19mcmVlX2Rpc2tgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYCwgc3VnZ2VzdGluZyB0aGF0IHRoZSBtb2RpZmljYXRpb25zIGFyZSBmYWlybHkgd2lkZXNwcmVhZCB3aXRoaW4gdGhlIGRyaXZlci4KCk5leHQsIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgdG8gc2VlIHdoYXQmIzM5O3MgcmVxdWlyZWQgdG8gYnVpbGQgdGhpcyBkcml2ZXIsIHNvIEkgY2FuIGNvbmZpZ3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBjb3JyZWN0bHkuIEEgcXVpY2sgY2hlY2sgb2YgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdXNpbmcgYGdyZXBwZXJgIHNob3VsZCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkxLX0RFVl9MT09QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL0tjb25maWc9MTQwPWNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE0NDpjb25maWcgQkxLX0RFVl9MT09QXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQ1LVx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTc4LVxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE3OTpjb25maWcgQkxLX0RFVl9MT09QX01JTl9DT1VOVFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cdGludCBcJiMzNDtOdW1iZXIgb2YgbG9vcCBkZXZpY2VzIHRvIHByZS1jcmVhdGUgYXQgaW5pdCB0aW1lXCYjMzQ7XG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTgxOlx0ZGVwZW5kcyBvbiBCTEtfREVWX0xPT1BcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXHRkZWZhdWx0IDhcbi0tXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19CTEtfREVWX1JBTSlcdCYjNDM7PSBicmQub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZToyMjpvYmotJChDT05GSUdfQkxLX0RFVl9MT09QKVx0JiM0Mzs9IGxvb3Aub1xuZHJpdmVycy9ibG9jay9NYWtlZmlsZS0yMy1vYmotJChDT05GSUdfU1VOVkRDKVx0XHQmIzQzOz0gc3VudmRjLm9cbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xODE5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbG9fZm9wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODM4LSAqIGNoYW5nZWQgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSAwIGZvciBtYXhfbG9vcD0wIHJlYXNvbnMpLCBqdXN0XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxODM5OiAqIGNyZWF0ZSBDT05GSUdfQkxLX0RFVl9MT09QX01JTl9DT1VOVCBsb29wIGRldmljZXMgYXQgbW9kdWxlXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQwLSAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTg0My0gKi9cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDQ6c3RhdGljIGludCBtYXhfbG9vcCA9IENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMTg0NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTczCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIEJsb2NrIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzb21lIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBmaWxlcyDigJMgc3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBgZHJpdmVycy9ibG9jay9LY29uZmlnYCBmaWxlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGV4cGVjdCB0aGF0IGxpbmUgMTQ0LCBvciB0aGVyZWFib3V0cywgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBkZXBlbmRzIG9uLiBJJiMzOTtsbCBjaGVjayB0aGF0IGFyZWEgYW5kIHNlZSBpZiBpdCBnaXZlcyBhIGdvb2Qgb3ZlcnZpZXcuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIGRlcGVuZGVuY2llcywgYW5kIGZpZ3VyZSBvdXQgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDA6XHRjb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXG4gMTQxOlx0XHRib29sXG4gMTQyOlx0XHRkZWZhdWx0IEJMS19ERVZfVUJEXG4gMTQzOlx0XG4gMTQ0Olx0Y29uZmlnIEJMS19ERVZfTE9PUFxuIDE0NTpcdFx0dHJpc3RhdGUgXCYjMzQ7TG9vcGJhY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbiAxNDY6XHRcdGhlbHBcbiAxNDc6XHRcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgYSByZWd1bGFyIGZpbGUgYXMgYSBibG9ja1xuIDE0ODpcdFx0ICBkZXZpY2U7IHlvdSBjYW4gdGhlbiBjcmVhdGUgYSBmaWxlIHN5c3RlbSBvbiB0aGF0IGJsb2NrIGRldmljZSBhbmRcbiAxNDk6XHRcdCAgbW91bnQgaXQganVzdCBhcyB5b3Ugd291bGQgbW91bnQgb3RoZXIgYmxvY2sgZGV2aWNlcyBzdWNoIGFzIGhhcmRcbiAxNTA6XHRcdCAgZHJpdmUgcGFydGl0aW9ucywgQ0QtUk9NIGRyaXZlcyBvciBmbG9wcHkgZHJpdmVzLiBUaGUgbG9vcCBkZXZpY2VzXG4gMTUxOlx0XHQgIGFyZSBibG9jayBzcGVjaWFsIGRldmljZSBmaWxlcyB3aXRoIG1ham9yIG51bWJlciA3IGFuZCB0eXBpY2FsbHlcbiAxNTI6XHRcdCAgY2FsbGVkIC9kZXYvbG9vcDAsIC9kZXYvbG9vcDEgZXRjLlxuIDE1MzpcdFxuIDE1NDpcdFx0ICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBjaGVjayBhbiBJU08gOTY2MCBmaWxlIHN5c3RlbSBiZWZvcmVcbiAxNTU6XHRcdCAgYnVybmluZyB0aGUgQ0QsIG9yIGlmIHlvdSB3YW50IHRvIHVzZSBmbG9wcHkgaW1hZ2VzIHdpdGhvdXQgZmlyc3RcbiAxNTY6XHRcdCAgd3JpdGluZyB0aGVtIHRvIGZsb3BweS4gRnVydGhlcm1vcmUsIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyBhdm9pZFxuIDE1NzpcdFx0ICB0aGUgbmVlZCBmb3IgYSBkZWRpY2F0ZWQgTGludXggcGFydGl0aW9uIGJ5IGtlZXBpbmcgdGhlaXIgY29tcGxldGVcbiAxNTg6XHRcdCAgcm9vdCBmaWxlIHN5c3RlbSBpbnNpZGUgYSBET1MgRkFUIGZpbGUgdXNpbmcgdGhpcyBsb29wIGRldmljZVxuIDE1OTpcdFx0ICBkcml2ZXIuXG4gMTYwOlx0XG4gMTYxOlx0XHQgIFRvIHVzZSB0aGUgbG9vcCBkZXZpY2UsIHlvdSBuZWVkIHRoZSBsb3NldHVwIHV0aWxpdHksIGZvdW5kIGluIHRoZVxuIDE2MjpcdFx0ICB1dGlsLWxpbnV4IHBhY2thZ2UsIHNlZVxuIDE2MzpcdFx0ICBcdTAwM2NodHRwczovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy91dGlsLWxpbnV4L1x1MDAzZS5cbiAxNjQ6XHRcbiAxNjU6XHRcdCAgVGhlIGxvb3AgZGV2aWNlIGRyaXZlciBjYW4gYWxzbyBiZSB1c2VkIHRvIFwmIzM0O2hpZGVcJiMzNDsgYSBmaWxlIHN5c3RlbSBpblxuIDE2NjpcdFx0ICBhIGRpc2sgcGFydGl0aW9uLCBmbG9wcHksIG9yIHJlZ3VsYXIgZmlsZSwgZWl0aGVyIHVzaW5nIGVuY3J5cHRpb25cbiAxNjc6XHRcdCAgKHNjcmFtYmxpbmcgdGhlIGRhdGEpIG9yIHN0ZWdhbm9ncmFwaHkgKGhpZGluZyB0aGUgZGF0YSBpbiB0aGUgbG93XG4gMTY4Olx0XHQgIGJpdHMgb2YsIHNheSwgYSBzb3VuZCBmaWxlKS4gVGhpcyBpcyBhbHNvIHNhZmUgaWYgdGhlIGZpbGUgcmVzaWRlc1xuIDE2OTpcdFx0ICBvbiBhIHJlbW90ZSBmaWxlIHNlcnZlci5cbiAxNzA6XHRcbiAxNzE6XHRcdCAgTm90ZSB0aGF0IHRoaXMgbG9vcCBkZXZpY2UgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgbG9vcGJhY2tcbiAxNzI6XHRcdCAgZGV2aWNlIHVzZWQgZm9yIG5ldHdvcmsgY29ubmVjdGlvbnMgZnJvbSB0aGUgbWFjaGluZSB0byBpdHNlbGYuXG4gMTczOlx0XG4gMTc0Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDE3NTpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbG9vcC5cbiAxNzY6XHRcbiAxNzc6XHRcdCAgTW9zdCB1c2VycyB3aWxsIGFuc3dlciBOIGhlcmUuXG4gMTc4Olx0XG4gMTc5Olx0Y29uZmlnIEJMS19ERVZfTE9PUF9NSU5fQ09VTlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDY0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjc4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIExvb3AgRGV2aWNlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgYEJMS19ERVZfTE9PUGAgcGF0Y2gsIEkgc2VlIGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW51c3VhbCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGV4cGVjdGVkIHNpbmNlIGl0JiMzOTtzIHBhcnQgb2YgdGhlIHN0YW5kYXJkIGJsb2NrIHN1YnN5c3RlbS4gVGhlIGxvb3AgZGV2aWNlIGl0c2VsZiBpcyBkZWZpbml0ZWx5IGFjY2Vzc2libGUuIEl0JiMzOTtzIGhlYXZpbHkgdXRpbGl6ZWQgYW5kIEkgY2FuIGVhc2lseSBpbnRlcmFjdCB3aXRoIGl0IHRocm91Z2ggYGlvY3RsYCBjYWxscyBhbmQgc3RhbmRhcmQgb3BlcmF0aW9ucyBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLCBHQ0UsIGFuZCBldmVuIHN5emthbGxlciwgdXNpbmcgdGhlIHR5cGljYWwgYC9kZXYvbG9vcCpgIGRldmljZXMgYW5kIGFzc29jaWF0ZWQgY29tbWFuZHMgbGlrZSBgTE9PUF9TRVRfRkRgLCBgTE9PUF9DT05GSUdVUkVgLCBhbmQgc28gb24uCgpJcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidCEgVGhlIHBhdGNoIGlzIGZpZGRsaW5nIHdpdGggc29tZSBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyByZWxhdGVkIHRvIGhvdyB0aGUgcXVldWUgbGltaXRzIGFyZSB1cGRhdGVkIGFzeW5jaHJvbm91c2x5IHVzaW5nIGEgd29ya3F1ZXVlLiBJdCYjMzk7cyBhbHNvIHRvdWNoaW5nIHF1ZXVlIGZyZWV6aW5nIHdpdGggYGJsa19tcV9mcmVlemVfcXVldWVgLCBhdG9taWMgZ2VuZXJhdGlvbnMsIHJlYmluZGluZyBoYW5kbGluZywgYW5kIGV2ZW4gd29yayBjYW5jZWxsYXRpb24gZHVyaW5nIGNsZWFudXAuIFRoYXQmIzM5O3MgYSBnb29kIGFtb3VudCBvZiByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIGJlaW5nIG1vZGlmaWVkIHdpdGggYWxsIHNvcnRzIG9mIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgc3RhdGUgY2hhbmdlcy4gVGhpcyBpcyAqcHJpbWUqIGZ1enppbmcgbWF0ZXJpYWwuCgpOb3csIGxldCBtZSBydW4gdGhyb3VnaCB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggbW9kaWZpZXMgb3IgaW50cm9kdWNlcy4gSSYjMzk7bSBzZWVpbmc6CgoxLiAgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAKMi4gIGBsb29wX2NsZWFyX2xpbWl0c2AKMy4gIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgCjQuICBgX19sb29wX2Nscl9mZGAKNS4gIGBsb19mYWxsb2NhdGVgIChhbmQgSSBzZWUgYGxvb3BfY2xlYXJfbGltaXRzYCBpcyBjYWxsZWQgaGVyZSkKNi4gIGBsb29wX3JlbW92ZWAKNy4gIGBsb19mcmVlX2Rpc2tgCgpJIHNob3VsZCByZWFsbHkgZGlnIGludG8gd2hlcmUgYGxvb3BfY2xlYXJfbGltaXRzYCBpcyBjYWxsZWQgd2l0aGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AgdG8gc2VlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGF0JiMzOTtzIGdvaW5nIHRvIGJlIGtleSB0byBjcmFmdGluZyBlZmZlY3RpdmUgZnV6emluZyBzdHJhdGVnaWVzLiBJIGJldCB0aGVyZSBhcmUgc29tZSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlcmUgd2FpdGluZyB0byBiZSBkaXNjb3ZlcmVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfY2xlYXJfbGltaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9MjIzPXN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI5OnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzAte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI2MjpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2My17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjY5PXN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yOTItXHRpZiAodW5saWtlbHkocmV0ID09IC1FT1BOT1RTVVBQKSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI5MzpcdFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjk0LVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwNTI9c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTMzLVx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MjEzNDpcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxMzUtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2Vyb290Y2dfY21kX2xpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1ODUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGxvX2ZhbGxvY2F0ZWAgYW5kIGl0cyBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVG8gcmVhbGx5IGdyYXNwIHdoYXQmIzM5O3MgZ29pbmcgb24gaGVyZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzLCBuYXR1cmFsbHksIGBsb19mYWxsb2NhdGVgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSwgc28gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIOKAkyB0aGUgaW1tZWRpYXRlIGNhbGxlcnMuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gVGhlbiwgaWYgbmVlZGVkLCBJJiMzOTtsbCBnbyBmdXJ0aGVyIHVwIHRoZSBzdGFjaywgYW5kIHNlZSBob3cgKnRoZXkqIGFyZSBjYWxsZWQuIEkmIzM5O20gYWZ0ZXIgdGhlIGZ1bGwgY2FsbCBjaGFpbiwgdG9wIHRvIGJvdHRvbS4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGBsb19mYWxsb2NhdGVgIGJlaW5nIGludm9rZWQuIFRoaXMgZ3JhbnVsYXIgZXhhbWluYXRpb24gd2lsbCBoZWxwIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBjb3VsZCBiZSBjb250cmlidXRpbmcgdG8gd2hhdGV2ZXIgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2NTpcdFx0YXRvbWljX29yKG1vZGUsIFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlKTtcbiAyNjY6XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIDI2NzpcdH1cbiAyNjg6XHRcbiAyNjk6XHRzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG4gMjcwOlx0XHRcdFx0aW50IG1vZGUpXG4gMjcxOlx0e1xuIDI3MjpcdFx0LypcbiAyNzM6XHRcdCAqIFdlIHVzZSBmYWxsb2NhdGUgdG8gbWFuaXB1bGF0ZSB0aGUgc3BhY2UgbWFwcGluZ3MgdXNlZCBieSB0aGUgaW1hZ2VcbiAyNzQ6XHRcdCAqIGEuay5hLiBkaXNjYXJkL3plcm9yYW5nZS5cbiAyNzU6XHRcdCAqL1xuIDI3NjpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gMjc3Olx0XHRpbnQgcmV0O1xuIDI3ODpcdFxuIDI3OTpcdFx0bW9kZSB8PSBGQUxMT0NfRkxfS0VFUF9TSVpFO1xuIDI4MDpcdFxuIDI4MTpcdFx0aWYgKCFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMobG8tXHUwMDNlbG9fZGV2aWNlKSlcbiAyODI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDI4MzpcdFxuIDI4NDpcdFx0cmV0ID0gZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZhbGxvY2F0ZShmaWxlLCBtb2RlLCBwb3MsIGJsa19ycV9ieXRlcyhycSkpO1xuIDI4NTpcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5WQUwgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUCkpXG4gMjg2Olx0XHRcdHJldHVybiAtRUlPO1xuIDI4NzpcdFxuIDI4ODpcdFx0LypcbiAyODk6XHRcdCAqIFdlIGluaXRpYWxseSBjb25maWd1cmUgdGhlIGxpbWl0cyBpbiBhIGhvcGUgdGhhdCBmYWxsb2NhdGUgaXNcbiAyOTA6XHRcdCAqIHN1cHBvcnRlZCBhbmQgY2xlYXIgdGhlbSBoZXJlIGlmIHRoYXQgdHVybnMgb3V0IG5vdCB0byBiZSB0cnVlLlxuIDI5MTpcdFx0ICovXG4gMjkyOlx0XHRpZiAodW5saWtlbHkocmV0ID09IC1FT1BOT1RTVVBQKSlcbiAyOTM6XHRcdFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xuIDI5NDpcdFxuIDI5NTpcdFx0cmV0dXJuIHJldDtcbiAyOTY6XHR9XG4gMjk3Olx0XG4gMjk4Olx0c3RhdGljIGludCBsb19yZXFfZmx1c2goc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxuIDI5OTpcdHtcbiAzMDA6XHRcdGludCByZXQgPSB2ZnNfZnN5bmMobG8tXHUwMDNlbG9fYmFja2luZ19maWxlLCAwKTtcbiAzMDE6XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVkFMKSlcbiAzMDI6XHRcdFx0cmV0ID0gLUVJTztcbiAzMDM6XHRcbiAzMDQ6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MzgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb2RlIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgbG9vcCBkZXZpY2UgZnVuY3Rpb25hbGl0eSBpcyB3aGVyZSB0aGUgbW9kaWZpY2F0aW9ucyBsaWUuIEkmIzM5O3ZlIGdvdDoKCiogICBBIGJyYW5kIG5ldyBzdGF0aWMgd29yayBmdW5jdGlvbjogYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAuIEludGVyZXN0aW5nLCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIHRoZSAmIzM0O2NsZWFyIGxpbWl0cyYjMzQ7IGZ1bmN0aW9uYWxpdHksIHNvIHBlcmhhcHMgdGhpcyBpcyBhIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiBvZiB0aGF0IHBhcnRpY3VsYXIgYXNwZWN0LgoqICAgVGhlbiBhIHNlcmllcyBvZiBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkOiBgbG9vcF9jbGVhcl9saW1pdHNgLCBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCwgYF9fbG9vcF9jbHJfZmRgLCBgbG9fZnJlZV9kaXNrYCwgYGxvb3BfYWRkYCwgYW5kIGBsb29wX3JlbW92ZWAuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgY29yZSBmdW5jdGlvbnMuIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgIGFuZCBgX19sb29wX2Nscl9mZGAgYXJlIHBhcnRpY3VsYXJseSByZWxldmFudCBhcyB0aGV5IGxpa2VseSBhcmUgaW52b2x2ZWQgaW4gZGV2aWNlIHNldHVwIGFuZCB0ZWFyZG93biwgYSBwbGFjZSB3aGVyZSBidWdzIGFyZSB0eXBpY2FsbHkgZm91bmQuIGBsb19mYWxsb2NhdGVgLCB3aGljaCBub3cgY2FsbHMgYGxvb3BfY2xlYXJfbGltaXRzYCwgaXMgYWxzbyB3b3J0aHkgb2Ygc2NydXRpbnk7IGl0JiMzOTtzIHBvc3NpYmxlIHRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gYWxsb2NhdGlvbiBvciBkaXNrIHNwYWNlIG1hbmFnZW1lbnQuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY2FzdCBhIHdpZGVyIG5ldC4gSSYjMzk7bGwgbmVlZCB0byBnbyBiZXlvbmQgdGhpcyBzcGVjaWZpYyBzZXQgYW5kIGxvb2sgYXQgYW55IHJlbGF0ZWQgbG9vcCBpb2N0bCBhbmQgY29udHJvbCBmdW5jdGlvbnMgb3IgdGhlaXIgY2FsbGVycywgZXNwZWNpYWxseSBhcm91bmQgdGhlIGFyZWFzIHRvdWNoZWQgYnkgYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAgYW5kIGBfX2xvb3BfY2xyX2ZkYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBncmFwaCBhcm91bmQgdGhlc2Ugd2lsbCB0ZWxsIGEgY29tcGxldGUgc3RvcnkuIEkgbmVlZCB0byBzZWUgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmFjdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBsb29wIGRldmljZSBhcmNoaXRlY3R1cmUgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svbG9vcC5jPTUxMz1zdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy01MzctXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzo1Mzg6c3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKVxuZHJpdmVycy9ibG9jay9sb29wLmMtNTM5LXtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz01NzA9c3RhdGljIGludCBsb29wX2NoYW5nZV9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LFxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTYyNy1cdG1hcHBpbmdfc2V0X2dmcF9tYXNrKG9sZF9maWxlLVx1MDAzZWZfbWFwcGluZywgbG8tXHUwMDNlb2xkX2dmcF9tYXNrKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjYyODpcdGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShsbywgZmlsZSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02MjktXHRsb29wX3VwZGF0ZV9kaW8obG8pO1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTEwMjc9c3RhdGljIGludCBsb29wX2NvbmZpZ3VyZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBibGtfbW9kZV90IG1vZGUsXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEwNC1cdGxvLVx1MDAzZWxvX2RldmljZSA9IGJkZXY7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTA1Olx0bG9vcF9hc3NpZ25fYmFja2luZ19maWxlKGxvLCBmaWxlKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExMDYtXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MTE2MT1zdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE3Mi1cdCAqIEludmFsaWRhdGUgYW55IHBlbmRpbmcgY2xlYXIgdGhhdCB3YXMgc2NoZWR1bGVkIGFnYWluc3QgdGhlIG9sZFxuZHJpdmVycy9ibG9jay9sb29wLmM6MTE3MzpcdCAqIGJhY2tpbmcgZmlsZSwgbGlrZSBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoKSBkb2VzIG9uIHJlYmluZC5cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTExNzQtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ1MQoJCQkJCQkJb3V0cHV0OiAxNzgKCQkJCQkJCXRob3VnaHRzOiA1OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIExvb3AgQmxvY2sgRGV2aWNlIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoaXMgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25z4oCUdGhlIGVudHJ5IHBvaW50cyBhbmQgZmVhdHVyZSBsb2dpYyB0aGF0IHdvdWxkIGJlIG1vc3QgaW50ZXJlc3RpbmcgdG8gdGFyZ2V0LiBJJiMzOTt2ZSBwaW5wb2ludGVkIGEgbGlzdDogYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAsIGBsb29wX2NsZWFyX2xpbWl0c2AsIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLCBgX19sb29wX2Nscl9mZGAsIGBsb19mYWxsb2NhdGVgLCBgbG9vcF9jaGFuZ2VfZmRgLCBgbG9vcF9jb25maWd1cmVgLCBhbmQgYGxvb3BfcmVtb3ZlYC4gRG91YmxlLWNoZWNraW5nLCB5ZXMsIHRoZXkgYWxsIHJlc2lkZSBpbiBgZHJpdmVycy9ibG9jay9sb29wLmNgLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb24gaXMgaW4gcGxhY2UuIGBCTEtfREVWX0xPT1BgIGxvb2tzIHRvIGJlIHRoZSBrZXkgY29uZmlnIGFuZCBpdOKAmXMgc3RhbmRhcmQuIEkgcXVpY2tseSBzY2FubmVkIGBkcml2ZXJzL2Jsb2NrL0tjb25maWdgLCBhbmQsIHllcCwgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIGp1bXAgb3V0LgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IGNyaXRlcmlhLiBUaGUgbG9vcCBkZXZpY2UgZHJpdmVyLCBsb2NhdGVkIGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AsIGlzIGRlZmluaXRlbHkgYSBnb29kIHRhcmdldC4gTG9vcCBkZXZpY2VzIGFyZSBlYXN5IHRvIGdldCB0byBpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGFuZCBTeXprYWxsZXIgaXMgcGVyZmVjdGx5IHN1aXRlZCB0byB0ZXN0aW5nIHRoZW0uIFRoZSBwYXRjaCBpdHNlbGYgaXMgaW50cmlndWluZzogaXQgYWRkcyBhc3luY2hyb25vdXMgcXVldWUgbGltaXQgY2xlYXJpbmcgdmlhIGEgd29ya3F1ZXVlLiBUaGlzIGluY2x1ZGVzIHF1ZXVlIGZyZWV6aW5nIChgYmxrX21xX2ZyZWV6ZV9xdWV1ZWApLCBnZW5lcmF0aW9uIGNvdW50ZXJzIChgcmViaW5kX2dlbmAsIGBjbGVhcl9saW1pdHNfZ2VuYCksIGF0b21pYyB0cmFja2luZywgYW5kIHdvcmsgY2FuY2VsbGF0aW9uIGR1cmluZyBkZXZpY2UgY2xlYW51cC4gVGhpcyBwb2ludHMgdG8gYSBsaWtlbHkgc291cmNlIG9mIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbiB0aGUgZGlmZmVyZW50IG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSBiZXR3ZWVuIGBsb29wX2NvbmZpZ3VyZWAsIGBjbGVhcl9mZGAsIGBjaGFuZ2VfZmRgLCBhbmQgYHJlcXVlc3QgZmFsbG9jYXRlYC4gSXTigJlzIGNvbmN1cnJlbnQsIHJlYWNoYWJsZSwgYW5kIGNvbXBsZXgsIHNvIHdvcnRoIGZ1enppbmchCgpPa2F5LCB0aW1lIHRvIGNyYWZ0IHRoZSByZWFzb25pbmcgZm9yIHRoZSByZXN1bHRzLiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgdGhlIHdheSB0aGUgZHJpdmVyIGNsZWFycyBxdWV1ZSBsaW1pdHMuIEl0IGludHJvZHVjZXMgYSBzYWZlciBtZXRob2QgdXNpbmcgYSB3b3JrIGl0ZW0gKGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gKSBhbmQgZnJlZXplcyB0aGUgcXVldWUgd2l0aCBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAuIFRoZSBnZW5lcmF0aW9uIGNvdW50ZXJzIGFuZCBhdG9taWMgb3BlcmF0aW9ucyBhcmUga2V5IHRvIGhhbmRsaW5nIHJhY2VzIGJldHdlZW4gcmViaW5kaW5nIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWctaHVudGluZyBzY2VuYXJpby4gVGhlIGxvb3AgZGV2aWNlIGlzIHJlYWRpbHkgYWNjZXNzaWJsZSBpbiBjb21tb24gdmlydHVhbCBlbnZpcm9ubWVudHMgYW5kIGV4ZXJjaXNlcyBjb25jdXJyZW50IGRyaXZlciBzdGF0ZSBtYW5hZ2VtZW50LCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCk15IEVuYWJsZUNvbmZpZ3MgaXMganVzdCAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7LiBNeSBGb2N1c1N5bWJvbHMgYXJlIHRoZSBmdW5jdGlvbnMgSSBhbHJlYWR5IGxpc3RlZCBiZWZvcmUuCgpSZWFkeS4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JMS19ERVZfTE9PUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2xvb3BfY2xlYXJfbGltaXRzX3dvcmtmbiYjMzQ7LAogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0cyYjMzQ7LAogICAgJiMzNDtsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUmIzM0OywKICAgICYjMzQ7X19sb29wX2Nscl9mZCYjMzQ7LAogICAgJiMzNDtsb19mYWxsb2NhdGUmIzM0OywKICAgICYjMzQ7bG9vcF9jaGFuZ2VfZmQmIzM0OywKICAgICYjMzQ7bG9vcF9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7bG9vcF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvb3AgYmxvY2sgZGV2aWNlIGRyaXZlciB0byBkZWZlciBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKSBzbyB0aGUgcXVldWUgY2FuIGJlIHByb3Blcmx5IGZyb3plbiB3aXRoIGJsa19tcV9mcmVlemVfcXVldWUuIEl0IGFkZHMgZ2VuZXJhdGlvbiBjb3VudGVycyBhbmQgYXRvbWljIHN0YXRlIHRvIHN5bmNocm9uaXplIGFnYWluc3QgcmViaW5kL2NsZWFyIG9wZXJhdGlvbnMuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgZHJpdmVyIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCTEtfREVWX0xPT1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsb29wX2NsZWFyX2xpbWl0c193b3JrZm4mIzM0OywKICAgICYjMzQ7bG9vcF9jbGVhcl9saW1pdHMmIzM0OywKICAgICYjMzQ7bG9vcF9hc3NpZ25fYmFja2luZ19maWxlJiMzNDssCiAgICAmIzM0O19fbG9vcF9jbHJfZmQmIzM0OywKICAgICYjMzQ7bG9fZmFsbG9jYXRlJiMzNDssCiAgICAmIzM0O2xvb3BfY2hhbmdlX2ZkJiMzNDssCiAgICAmIzM0O2xvb3BfY29uZmlndXJlJiMzNDssCiAgICAmIzM0O2xvb3BfcmVtb3ZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgdG8gZGVmZXIgcXVldWUgbGltaXRzIGNsZWFyaW5nIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbikgc28gdGhlIHF1ZXVlIGNhbiBiZSBwcm9wZXJseSBmcm96ZW4gd2l0aCBibGtfbXFfZnJlZXplX3F1ZXVlLiBJdCBhZGRzIGdlbmVyYXRpb24gY291bnRlcnMgYW5kIGF0b21pYyBzdGF0ZSB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0IHJlYmluZC9jbGVhciBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGRyaXZlciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIChgZHJpdmVycy9ibG9jay9sb29wLmNgKSBieSBtb3ZpbmcgdGhlIGxpbWl0IHVwZGF0ZSBmcm9tIHRoZSByZXF1ZXN0IGV4ZWN1dGlvbiBjb250ZXh0IChgbG9fZmFsbG9jYXRlYCkgdG8gYSBkZWZlcnJlZCB3b3JrcXVldWUgaXRlbSAoYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmApLiBJdCBpbnRyb2R1Y2VzIGEgd29yayBzdHJ1Y3QgYW5kIGF0b21pYyBnZW5lcmF0aW9uIGNvdW50ZXJzIChgcmViaW5kX2dlbmAsIGBjbGVhcl9saW1pdHNfZ2VuYCwgYGNsZWFyX2xpbWl0c19tb2RlYCkgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHRvIHNhZmVseSBmcmVlemUgdGhlIHF1ZXVlIGFuZCBjb21taXQgbGltaXRzIHVwZGF0ZXMgYXN5bmNocm9ub3VzbHkgd2l0aG91dCByYWNlIGNvbmRpdGlvbnMgb24gYmFja2luZyBmaWxlIHJlYmluZGluZy5cblxuQWxsIGFkZGVkIGZpZWxkcyBhcmUgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdXNpbmcgYGt6YWxsb2Nfb2JqYCBhbmQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBsb2NhbCB2YXJpYWJsZXMgd2l0aGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHdpdGggdGhpcyBwYXRjaCByZWxhdGUgdG8gY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9ucywgcXVldWUgbG9ja2luZy9mcmVlemluZywgYW5kIHdvcmtxdWV1ZSBjYW5jZWxsYXRpb24gbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCkuIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5NjFhMWYyYTY5MzYxYWIyZGUyMTk4OTJjMTliMTZhOWU0MzYyMDVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAwMjowNzoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmMKaW5kZXggNmYxMjk3NjAzNWIwOS4uOWY2ZTUxOGU2MGQyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9sb29wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9ibG9jay9sb29wLmMKQEAgLTY3LDYgJiM0Mzs2NywxMCBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2UgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHJvb3RjZ19jbWRfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBpZGxlX3dvcmtlcl9saXN0OwogCXN0cnVjdCByYl9yb290ICAgICAgICAgIHdvcmtlcl90cmVlOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBjbGVhcl9saW1pdHNfd29yazsKJiM0MzsJYXRvbWljX3QJCWNsZWFyX2xpbWl0c19tb2RlOwomIzQzOwlhdG9taWNfdAkJcmViaW5kX2dlbjsKJiM0MzsJYXRvbWljX3QJCWNsZWFyX2xpbWl0c19nZW47CiAJc3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7CiAJYm9vbAkJCXN5c2ZzX2luaXRlZDsKIApAQCAtMjIyLDI2ICYjNDM7MjI2LDQ0IEBAIHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpCiAJCWtvYmplY3RfdWV2ZW50KCZhbXA7ZGlza190b19kZXYobG8tJmd0O2xvX2Rpc2spLSZndDtrb2JqLCBLT0JKX0NIQU5HRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKQomIzQzO3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiYjNDM7CXN0cnVjdCBsb29wX2RldmljZSAqbG8gPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspOwogCXN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUpOwotCi0JaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpCi0JCWxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwOwotCi0JaWYgKG1vZGUgJmFtcDsgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHsKLQkJbGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwOwotCQlsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7Ci0JfQomIzQzOwl1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiYjNDM7CWludCBtb2RlID0gMDsKIAogCS8qCi0JICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2gKLQkgKiBpcyBhZ2FpbnN0IHRoZSBsb2NraW5nIHByb3RvY29sIGFuZCBkYW5nZXJvdXMuICBCdXQgd2UgY2FuJiMzOTt0IGp1c3QKLQkgKiBmcmVlemUgdGhlIHF1ZXVlIGFzIHdlJiMzOTtyZSBpbnNpZGUgdGhlIC0mZ3Q7cXVldWVfcnEgbWV0aG9kIGhlcmUuICBTbyB0aGlzCi0JICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvCi0JICogYWR2ZXJ0aXNlIGlmIHRoZXkgc3VwcG9ydCBzcGVjaWZpYyBmYWxsb2NhdGUgb3BlcmF0aW9ucy4KJiM0MzsJICogQ29tbWl0IHRoZSB1bm1vZGlmaWVkIGxpbWl0cyBpZiB0aGUgZGV2aWNlIHdhcyByZWJvdW5kIHNpbmNlCiYjNDM7CSAqIHRoZSB3b3JrIGl0ZW0gd2FzIHNjaGVkdWxlZC4gIFRoZSBmcmVlemUgZXhjbHVkZXMgYSByZWJpbmQKJiM0MzsJICogdGhyb3VnaCBsb29wX2NoYW5nZV9mZCgpLCB3aGljaCBhc3NpZ25zIHRoZSBuZXcgYmFja2luZyBmaWxlCiYjNDM7CSAqIHVuZGVyIHRoZSBmcmVlemU7IHRoZSBvdGhlciByZWJpbmRpbmcgcGF0aHMsIGxvb3BfY29uZmlndXJlKCkKJiM0MzsJICogYW5kIF9fbG9vcF9jbHJfZmQoKSwgZG8gbm90IGZyZWV6ZSB0aGUgcXVldWUsIGJ1dCB0aGV5IGJ1bXAKJiM0MzsJICogcmViaW5kX2dlbiBhbmQgcmVzZXQgY2xlYXJfbGltaXRzX21vZGUgdGhlbXNlbHZlcywgc28gdGhlCiYjNDM7CSAqIGdlbmVyYXRpb24gY2hlY2sgYW5kIHRoZSBhdG9taWNfeGNoZygpIGJlbG93IGNvdmVyIHRoZW0uCiAJICovCiYjNDM7CW1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby0mZ3Q7bG9fcXVldWUpOwomIzQzOwlpZiAoYXRvbWljX3JlYWQoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX2dlbikgPT0gYXRvbWljX3JlYWQoJmFtcDtsby0mZ3Q7cmViaW5kX2dlbikpIHsKJiM0MzsJCW1vZGUgPSBhdG9taWNfeGNoZygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfbW9kZSwgMCk7CiYjNDM7CiYjNDM7CQlpZiAobW9kZSAmYW1wOyBGQUxMT0NfRkxfWkVST19SQU5HRSkKJiM0MzsJCQlsaW0ubWF4X3dyaXRlX3plcm9lc19zZWN0b3JzID0gMDsKJiM0MzsKJiM0MzsJCWlmIChtb2RlICZhbXA7IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7CiYjNDM7CQkJbGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwOwomIzQzOwkJCWxpbS5kaXNjYXJkX2dyYW51bGFyaXR5ID0gMDsKJiM0MzsJCX0KJiM0MzsJfQogCXF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSwgJmFtcDtsaW0pOwomIzQzOwlibGtfbXFfdW5mcmVlemVfcXVldWUobG8tJmd0O2xvX3F1ZXVlLCBtZW1mbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKQomIzQzO3sKJiM0MzsJYXRvbWljX3NldCgmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfZ2VuLCBhdG9taWNfcmVhZCgmYW1wO2xvLSZndDtyZWJpbmRfZ2VuKSk7CiYjNDM7CWF0b21pY19vcihtb2RlLCAmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfbW9kZSk7CiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmspOwogfQogCiBzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsCkBAIC01MTYsNiAmIzQzOzUzOCw4IEBAIHN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogc3RhdGljIHZvaWQgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWxvLSZndDtsb19iYWNraW5nX2ZpbGUgPSBmaWxlOwomIzQzOwlhdG9taWNfaW5jKCZhbXA7bG8tJmd0O3JlYmluZF9nZW4pOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7bG8tJmd0O2NsZWFyX2xpbWl0c19tb2RlLCAwKTsKIAlsby0mZ3Q7b2xkX2dmcF9tYXNrID0gbWFwcGluZ19nZnBfbWFzayhmaWxlLSZndDtmX21hcHBpbmcpOwogCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGZpbGUtJmd0O2ZfbWFwcGluZywKIAkJCWxvLSZndDtvbGRfZ2ZwX21hc2sgJmFtcDsgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7CkBAIC0xMTQ0LDYgJiM0MzsxMTY4LDEyIEBAIHN0YXRpYyB2b2lkIF9fbG9vcF9jbHJfZmQoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIAlzcGluX2xvY2tfaXJxKCZhbXA7bG8tJmd0O2xvX2xvY2spOwogCWZpbHAgPSBsby0mZ3Q7bG9fYmFja2luZ19maWxlOwogCWxvLSZndDtsb19iYWNraW5nX2ZpbGUgPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBJbnZhbGlkYXRlIGFueSBwZW5kaW5nIGNsZWFyIHRoYXQgd2FzIHNjaGVkdWxlZCBhZ2FpbnN0IHRoZSBvbGQKJiM0MzsJICogYmFja2luZyBmaWxlLCBsaWtlIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSgpIGRvZXMgb24gcmViaW5kLgomIzQzOwkgKi8KJiM0MzsJYXRvbWljX2luYygmYW1wO2xvLSZndDtyZWJpbmRfZ2VuKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfbW9kZSwgMCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7bG8tJmd0O2xvX2xvY2spOwogCiAJbG8tJmd0O2xvX2RldmljZSA9IE5VTEw7CkBAIC0xNzgxLDYgJiM0MzsxODExLDcgQEAgc3RhdGljIHZvaWQgbG9fZnJlZV9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKQogCQlkZXN0cm95X3dvcmtxdWV1ZShsby0mZ3Q7d29ya3F1ZXVlKTsKIAlsb29wX2ZyZWVfaWRsZV93b3JrZXJzKGxvLCB0cnVlKTsKIAl0aW1lcl9zaHV0ZG93bl9zeW5jKCZhbXA7bG8tJmd0O3RpbWVyKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yayk7CiAJbXV0ZXhfZGVzdHJveSgmYW1wO2xvLSZndDtsb19tdXRleCk7CiAJa2ZyZWUobG8pOwogfQpAQCAtMjEwMCw2ICYjNDM7MjEzMSw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtsby0mZ3Q7bG9fbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDtsby0mZ3Q7bG9fd29ya19sb2NrKTsKIAlJTklUX1dPUksoJmFtcDtsby0mZ3Q7cm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7CiYjNDM7CUlOSVRfV09SSygmYW1wO2xvLSZndDtjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2xvLSZndDtyb290Y2dfY21kX2xpc3QpOwogCWRpc2stJmd0O21ham9yCQk9IExPT1BfTUFKT1I7CiAJZGlzay0mZ3Q7Zmlyc3RfbWlub3IJPSBpICZsdDsmbHQ7IHBhcnRfc2hpZnQ7CkBAIC0yMTM4LDYgJiM0MzsyMTcwLDEwIEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpCiAKIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiB7CiYjNDM7CS8qIENhbmNlbCBlYXJseTogdGhlIHF1ZXVlIG1heSBiZSBpbiBSQ1UtZGVsYXllZCBmcmVlaW5nCiYjNDM7CSAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovCiYjNDM7CWNhbmNlbF93b3JrX3N5bmMoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmspOwomIzQzOwogCS8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqLwogCWRlbF9nZW5kaXNrKGxvLSZndDtsb19kaXNrKTsKIAlibGtfbXFfZnJlZV90YWdfc2V0KCZhbXA7bG8tJmd0O3RhZ19zZXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDUzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3AgRGV2aWNlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBmb2N1c2VkIG9uIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgdGhlIG1vcmUgcmlnb3JvdXMgS01TQU4gYW5hbHlzaXMgb3IgaWYgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAgd2lsbCBiZSBzdWZmaWNpZW50LiBUaGUgdGFyZ2V0IGlzIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AsIGFuZCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgdGhlIGJsb2NrIGRldmljZSYjMzk7cyBsaW1pdHMgYXJlIGNsZWFyZWQgYW5kIHVwZGF0ZWQsIGFuZCB0aGUgd2F5IHRoZSBsb29wIGRldmljZSBpcyB1cGRhdGVkIHdoZW4gaXQgaXMgcmVib3VuZCB0byBhIGJhY2tpbmcgZmlsZS4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYHN0cnVjdCB3b3JrX3N0cnVjdCBjbGVhcl9saW1pdHNfd29ya2AsIHNvbWUgYXRvbWljIGZpZWxkcyAoYGNsZWFyX2xpbWl0c19tb2RlYCwgYHJlYmluZF9nZW5gLCBgY2xlYXJfbGltaXRzX2dlbmApIHdpdGhpbiB0aGUgYHN0cnVjdCBsb29wX2RldmljZWAuIFRoZSBwcm9ibGVtYXRpYyBgbG9vcF9jbGVhcl9saW1pdHNgIGZ1bmN0aW9uIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBkZWZlcnJlZCB3b3JrIGZ1bmN0aW9uLCBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYC4gVGhpcyB3b3JrIGZ1bmN0aW9uIG5vdyBwcm9wZXJseSBmcmVlemVzIGFuZCB1bmZyZWV6ZXMgdGhlIGJsb2NrIHF1ZXVlIHVzaW5nIHRoZSBibG9jayBsYXllciYjMzk7cyBzdGFuZGFyZCBtZXRob2RzIChgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAsIGV0Yy4pIGR1cmluZyB0aGUgbGltaXQgdXBkYXRlLCB3aGljaCBpcyBhIGdvb2Qgc2FmZXR5IG1lYXN1cmUuCgpUaGVyZSYjMzk7cyB0aGlzIG5ldyBnZW5lcmF0aW9uIGNvdW50ZXIgc2V0dXAuIFRoZSBwYXRjaCBhZGRzIHRoZXNlIGByZWJpbmRfZ2VuYCBhbmQgYGNsZWFyX2xpbWl0c19nZW5gIGF0b21pYyBvcGVyYXRpb25zIHRvIHRoZSBsb29wIGRldmljZSBzdHJ1Y3R1cmUuIFRoZXNlIGdlbmVyYXRpb24gY291bnRlcnMgYXJlIGEgZ29vZCBpbmRpY2F0b3IgdGhhdCB0aGUgaW50ZW50aW9uIGlzIHRvIGF2b2lkIHJhY2VzIGluIGNsZWFyaW5nIGxpbWl0cyB3aGlsZSByZWJpbmRpbmcgdGhlIGJhY2tpbmcgZmlsZS4gYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAsIGFuZCBgX19sb29wX2Nscl9mZGAgYXJlIHVwZGF0ZWQgd2l0aCB0aGUgZ2VuZXJhdGlvbiBhbmQgY2xlYXIgbW9kZSwgc28gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhvc2UuIFdvcmsgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLYCBpbiBgbG9vcF9hZGRgLCBhbmQgY2xlYW5lZCB1cCB1c2luZyBgY2FuY2VsX3dvcmtfc3luY2AgaW4gYGxvX2ZyZWVfZGlza2AgYW5kIGBsb29wX3JlbW92ZWAgd2hpY2ggaXMgYWxzbyBnb29kIHRvIHNlZS4KCk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZm9sbG93aW5nOgoKMS4gIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBLTVNBTiBpc3N1ZS4gSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIHN0cnVjdHVyZXMgYmVpbmcgbGVha2VkIGRpcmVjdGx5IHRvIHVzZXJzcGFjZSBmcm9tIHRoaXMsIGJ1dCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRvIGNvbmZpcm0uCjIuICBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGJyYW5jaGVzIHRoYXQgZGVwZW5kIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBUaGUgYGF0b21pY190YCB2YXJpYWJsZXMgKGBjbGVhcl9saW1pdHNfbW9kZWAsIGByZWJpbmRfZ2VuYCwgYGNsZWFyX2xpbWl0c19nZW5gKSB3aXRoaW4gYHN0cnVjdCBsb29wX2RldmljZWAgYXJlIGEgcG90ZW50aWFsIGFyZWEgb2YgY29uY2Vybi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHN0cnVjdCBsb29wX2RldmljZWAgaXMgYWxsb2NhdGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGF0b21pY3MgYXJlIGluaXRpYWxpemVkIGNvcnJlY3RseS4gSW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAsIGBsaW1gIGlzIGluaXRpYWxpemVkIHZpYSBgcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZWAsIHdoaWNoIHNob3VsZCBiZSBmaW5lLiBUaGUgYG1vZGVgIGxvY2FsIHZhcmlhYmxlIGlzIGluaXRpYWxpemVkIHRvIDAgd2hpY2ggaXMgc2FmZS4KMy4gIFRoZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldy4KNC4gIEFuZCBvZiBjb3Vyc2UsIHN0YW5kYXJkIGJvdW5kcyBjaGVja3MgYW5kIGJ1ZmZlciBsZW5ndGhzLgoKTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgbG9vcF9hZGRgIGFuZCBob3cgYHN0cnVjdCBsb29wX2RldmljZWAgaXMgYWxsb2NhdGVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKmxvb3BfZGV2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgbG9gIEFsbG9jYXRpb24gaW4gYGxvb3BfYWRkYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGxvb3BfYWRkYCBmdW5jdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgdGhlIHZhcmlhYmxlIGBsb2AuIEkgbmVlZCB0byBwcmVjaXNlbHkgdW5kZXJzdGFuZCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgZm9yIGBsb2AgKndpdGhpbiogdGhhdCBsb29wJiMzOTtzIGNvbnRleHQuIElzIGl0IGJlaW5nIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgZWFjaCBpdGVyYXRpb24/IElzIHRoZXJlIGFueSBjaGFuY2Ugb2YgaXQgYmVpbmcgb3B0aW1pemVkIGF3YXkgYnkgdGhlIGNvbXBpbGVyPyBJZiBpdCAqaXMqIG9uIHRoZSBzdGFjaywgaXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3Igc3RhY2sgb3ZlcmZsb3cgdnVsbmVyYWJpbGl0aWVzIGRlcGVuZGluZyBvbiB0aGUgbG9vcCYjMzk7cyBib3VuZHMgYW5kIHRoZSBzaXplIG9mIGBsb2AmIzM5O3MgdHlwZT8KCkkgaW1tZWRpYXRlbHkgd2FudCB0byBhc3Nlc3MgdGhlIG1lbW9yeSBpbXBsaWNhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHRvbywgYnV0IG1lbW9yeSB1c2FnZSBpcyBwcmltYXJ5IHJpZ2h0IG5vdy4gSWYgaXQmIzM5O3Mgb24gdGhlIGhlYXAsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBpbmRpY2F0aW9ucyBvZiBsZWFrcyBvciBpbmVmZmljaWVudCBnYXJiYWdlIGNvbGxlY3Rpb24sIGRlcGVuZGluZyBvbiB0aGUgbGFuZ3VhZ2Ugd2UgYXJlIHVzaW5nIGFuZCB3aGF0IGBsb2AgaXMuIElmIGl0JiMzOTtzIGEgZ2xvYmFsLCB0aGVuIEkmIzM5O2xsIGJlIGNoZWNraW5nIGl0cyBzY29wZS4KCkkmIzM5O20gbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCB0aGUgY29kZSwgbG9va2luZyBmb3IgYW55IGNvbmRpdGlvbmFsIHJlLWFzc2lnbm1lbnRzIG9yIGNoYW5nZXMgdG8gdGhlIHZhbHVlIHRoYXQgbWlnaHQgaW1wYWN0IGl0cyBzaXplIG9yIG1lbW9yeSBmb290cHJpbnQuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGp1bmN0dXJlOyBzbWFsbCBkZXRhaWxzIGhlcmUgY2FuIG1ha2Ugb3IgYnJlYWsgdGhlIHByb2dyYW0mIzM5O3MgZWZmaWNpZW5jeSBhbmQgcm9idXN0bmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9vcF9hZGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxrX21xX29wcyBsb29wX21xX29wcyA9IHtcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMDUxLVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjA1MjpzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA1My17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjE4OT1zdGF0aWMgdm9pZCBsb29wX3Byb2JlKGRldl90IGRldilcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTk0LVx0XHRyZXR1cm47XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTk1Olx0bG9vcF9hZGQoaWR4KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxOTYtfVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyNDg9c3RhdGljIGludCBsb29wX2NvbnRyb2xfZ2V0X2ZyZWUoaW50IGlkeClcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjY1LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmxvb3BfY3RsX211dGV4KTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyNjY6XHRyZXR1cm4gbG9vcF9hZGQoLTEpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjI2Ny1mb3VuZDpcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMjcyPXN0YXRpYyBsb25nIGxvb3BfY29udHJvbF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjc2LVx0Y2FzZSBMT09QX0NUTF9BREQ6XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjc3Olx0XHRyZXR1cm4gbG9vcF9hZGQocGFybSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjc4LVx0Y2FzZSBMT09QX0NUTF9SRU1PVkU6XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjMwND1zdGF0aWMgaW50IF9faW5pdCBsb29wX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzQ1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbWF4X2xvb3A7IGkmIzQzOyYjNDM7KVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM0NjpcdFx0bG9vcF9hZGQoaSk7XG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzQ3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjgxCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdDoKCioqQW5hbHl6aW5nIHRoZSBDb2RlIFNuaXBwZXQ6IGBsb29wX2FkZGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGl0LiBUaGUgZGlyZWN0aXZlIGlzIGNsZWFyIOKAkyBJIG5lZWQgdG8gZm9jdXMgb24gYSBmdW5jdGlvbiBuYW1lZCBgbG9vcF9hZGRgLCBhbmQgaXQgc2VlbXMgdG8gYmUgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDIwNTIuIFRoZSBzdWdnZXN0ZWQgdG9vbCBpcyBgcmVhZC1maWxlYCwgc28gcHJlc3VtYWJseSwgSSYjMzk7bGwgYmUgdXNpbmcgdGhhdCB0byBleHRyYWN0IHRoZSByZWxldmFudCBzZWN0aW9uIGZyb20gdGhlIHNvdXJjZSBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25zaWRlciB0aGUgY29udGV4dCBvZiB0aGF0IGxpbmUuIExpbmUgbnVtYmVycyBhcmUsIG9mIGNvdXJzZSwgcmVsYXRpdmUgdG8gdGhlIGZpbGUuIFNvLCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZpbGUsIGxpbmUgMjA1MiBjb3VsZCBiZSBpbiB0aGUgbWlkZGxlLCB0aGUgZW5kLCBvciBuZWFyIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBJJiMzOTtsbCByZWFkIHRoZSBjb2RlIHN1cnJvdW5kaW5nIHRoYXQgbGluZSBhbmQgdXNlIHRoZSBjb250ZXh0IHRvIGdldCBhIGdyYXNwIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIHRoZSBmdW5jdGlvbuKAmXMgcHVycG9zZTogd2hhdCBpdCB0YWtlcyBhcyBpbnB1dCwgd2hhdCBpdCBvdXRwdXRzLCBhbmQgaW1wb3J0YW50bHksIHRoZSAqd2h5KiBiZWhpbmQgaXRzIGV4aXN0ZW5jZS4gSSB3aWxsIGhhdmUgdGhlIGNvbnRleHQgdGhhdCBpcyBuZWVkZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL2xvb3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjA1MjpcdHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXG4yMDUzOlx0e1xuMjA1NDpcdFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XG4yMDU1Olx0XHRcdC8qXG4yMDU2Olx0XHRcdCAqIFJhbmRvbSBudW1iZXIgcGlja2VkIGZyb20gdGhlIGhpc3RvcmljIGJsb2NrIG1heF9zZWN0b3JzIGNhcC5cbjIwNTc6XHRcdFx0ICovXG4yMDU4Olx0XHRcdC5tYXhfaHdfc2VjdG9yc1x0XHQ9IDI1NjB1LFxuMjA1OTpcdFx0fTtcbjIwNjA6XHRcdHN0cnVjdCBsb29wX2RldmljZSAqbG87XG4yMDYxOlx0XHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaztcbjIwNjI6XHRcdGludCBlcnI7XG4yMDYzOlx0XG4yMDY0Olx0XHRlcnIgPSAtRU5PTUVNO1xuMjA2NTpcdFx0bG8gPSBremFsbG9jX29iaigqbG8pO1xuMjA2NjpcdFx0aWYgKCFsbylcbjIwNjc6XHRcdFx0Z290byBvdXQ7XG4yMDY4Olx0XHRsby1cdTAwM2V3b3JrZXJfdHJlZSA9IFJCX1JPT1Q7XG4yMDY5Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcbjIwNzA6XHRcdHRpbWVyX3NldHVwKFx1MDAyNmxvLVx1MDAzZXRpbWVyLCBsb29wX2ZyZWVfaWRsZV93b3JrZXJzX3RpbWVyLCBUSU1FUl9ERUZFUlJBQkxFKTtcbjIwNzE6XHRcdFdSSVRFX09OQ0UobG8tXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xuMjA3MjpcdFxuMjA3MzpcdFx0ZXJyID0gbXV0ZXhfbG9ja19raWxsYWJsZShcdTAwMjZsb29wX2N0bF9tdXRleCk7XG4yMDc0Olx0XHRpZiAoZXJyKVxuMjA3NTpcdFx0XHRnb3RvIG91dF9mcmVlX2RldjtcbjIwNzY6XHRcbjIwNzc6XHRcdC8qIGFsbG9jYXRlIGlkLCBpZiBAaWQgXHUwMDNlPSAwLCB3ZSYjMzk7cmUgcmVxdWVzdGluZyB0aGF0IHNwZWNpZmljIGlkICovXG4yMDc4Olx0XHRpZiAoaSBcdTAwM2U9IDApIHtcbjIwNzk6XHRcdFx0ZXJyID0gaWRyX2FsbG9jKFx1MDAyNmxvb3BfaW5kZXhfaWRyLCBsbywgaSwgaSAmIzQzOyAxLCBHRlBfS0VSTkVMKTtcbjIwODA6XHRcdFx0aWYgKGVyciA9PSAtRU5PU1BDKVxuMjA4MTpcdFx0XHRcdGVyciA9IC1FRVhJU1Q7XG4yMDgyOlx0XHR9IGVsc2Uge1xuMjA4MzpcdFx0XHRlcnIgPSBpZHJfYWxsb2MoXHUwMDI2bG9vcF9pbmRleF9pZHIsIGxvLCAwLCAwLCBHRlBfS0VSTkVMKTtcbjIwODQ6XHRcdH1cbjIwODU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZsb29wX2N0bF9tdXRleCk7XG4yMDg2Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMjA4NzpcdFx0XHRnb3RvIG91dF9mcmVlX2RldjtcbjIwODg6XHRcdGkgPSBlcnI7XG4yMDg5Olx0XG4yMDkwOlx0XHRsby1cdTAwM2V0YWdfc2V0Lm9wcyA9IFx1MDAyNmxvb3BfbXFfb3BzO1xuMjA5MTpcdFx0bG8tXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xuMjA5MjpcdFx0bG8tXHUwMDNldGFnX3NldC5xdWV1ZV9kZXB0aCA9IGh3X3F1ZXVlX2RlcHRoO1xuMjA5MzpcdFx0bG8tXHUwMDNldGFnX3NldC5udW1hX25vZGUgPSBOVU1BX05PX05PREU7XG4yMDk0Olx0XHRsby1cdTAwM2V0YWdfc2V0LmNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBsb29wX2NtZCk7XG4yMDk1Olx0XHRsby1cdTAwM2V0YWdfc2V0LmZsYWdzID0gQkxLX01RX0ZfU1RBQ0tJTkcgfCBCTEtfTVFfRl9OT19TQ0hFRF9CWV9ERUZBVUxUO1xuMjA5NjpcdFx0bG8tXHUwMDNldGFnX3NldC5kcml2ZXJfZGF0YSA9IGxvO1xuMjA5NzpcdFxuMjA5ODpcdFx0ZXJyID0gYmxrX21xX2FsbG9jX3RhZ19zZXQoXHUwMDI2bG8tXHUwMDNldGFnX3NldCk7XG4yMDk5Olx0XHRpZiAoZXJyKVxuMjEwMDpcdFx0XHRnb3RvIG91dF9mcmVlX2lkcjtcbjIxMDE6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvb3AgRGV2aWNlIEluaXRpYWxpemF0aW9uIGFuZCBMaW1pdCBDbGVhcmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBgbG9vcF9kZXZpY2VgIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBhbmQgaG93IGl0cyBxdWV1ZSBsaW1pdHMgYXJlIGhhbmRsZWQuIFRoZSBjb2RlIHN0YXJ0cyB3aXRoIGEgYGt6YWxsb2Nfb2JqKCpsbyk7YCBjYWxsLCB3aGljaCBtZWFucyBhbGwgdGhlIGZpZWxkcyBpbiB0aGUgbmV3bHkgYWxsb2NhdGVkIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIGFyZSBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQuIEdvb2QgcHJhY3RpY2UsIGFsd2F5cy4gVGhpcyBpbmNsdWRlcyB0aG9zZSBuZXdlciBmaWVsZHMgbGlrZSBgY2xlYXJfbGltaXRzX3dvcmtgLCBgY2xlYXJfbGltaXRzX21vZGVgLCBgcmViaW5kX2dlbmAsIGFuZCBgY2xlYXJfbGltaXRzX2dlbmAuIFRoYXQgemVyby1pbml0aWFsaXphdGlvbiBpcyBjcnVjaWFsLgoKVGhlbiwgaW4gdGhlIGBsb29wX2FkZGAgZnVuY3Rpb24sIEkgc2VlIGBJTklUX1dPUksoJmFtcDtsby0mZ3Q7Y2xlYXJfbGltaXRzX3dvcmssIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbik7YCB3aGljaCBpcyBzZXR0aW5nIHVwIGEgd29yayBxdWV1ZSBlbnRyeS4gVGhpcyBzdWdnZXN0cyB0aGF0IGNsZWFyaW5nIGxpbWl0cyBpcyBkZWZlcnJlZCwgaGFuZGxlZCBhc3luY2hyb25vdXNseS4gTWFrZXMgc2Vuc2UgdG8gYXZvaWQgYmxvY2tpbmcuCgpOb3csIGRpdmluZyBpbnRvIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gLCBpdCBnZXRzIGludGVyZXN0aW5nLiBXZSBraWNrIG9mZiBhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLSZndDtsb19xdWV1ZSlgIHRvIG9idGFpbiBhIHNuYXBzaG90IG9yIGNvcHkgb2YgdGhlIGN1cnJlbnQgcXVldWUgbGltaXRzLCB3aGljaCBpcyBzdG9yZWQgaW4gdGhlIGBsaW1gIHN0cnVjdC4gVGhlIGBtb2RlYCBpcyBpbml0aWFsaXplZCB0byAwIGFuZCBhdG9taWNhbGx5IGNoYW5nZWQuIFRoaXMgaXMgYSBjcnVjaWFsIHJlYWQvbW9kaWZ5L3dyaXRlIG9wZXJhdGlvbiBvbiB0aGUgcXVldWUgbGltaXRzLCBJIHdhbnQgdG8gc2VlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gIEZpbmFsbHksIGBxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby0mZ3Q7bG9fcXVldWUsICZhbXA7bGltKWAgYXBwbGllcyBhbnkgY2hhbmdlcyBiYWNrIHRvIHRoZSBxdWV1ZSBsaW1pdHMuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHNwZWNpZmljIHZhbHVlcyB0aGlzIGF0b21pYyBleGNoYW5nZSBpcyBzZXR0aW5nLiBXaGF0IGlzIHRoZSBvdmVyYWxsIGxpbWl0IGNsZWFyaW5nIHN0cmF0ZWd5PyBUaGUgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIGtleSBoZXJlLiBBbHNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGxlcnMgb2YgYGxvb3BfY2xlYXJfbGltaXRzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlbiB0aGlzIGxpbWl0IGNsZWFyaW5nIG1lY2hhbmlzbSBpcyBiZWluZyB0cmlnZ2VyZWQsIGFuZCB3aHkgaXQmIzM5O3MgbmVjZXNzYXJ5LiBMZXQgbWUgc2VlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvb3BfY2xlYXJfbGltaXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmM9MjIzPXN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI4LVxuZHJpdmVycy9ibG9jay9sb29wLmM6MjI5OnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzAte1xuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2MS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI2MjpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2My17XG4tLVxuZHJpdmVycy9ibG9jay9sb29wLmM9MjY5PXN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yOTItXHRpZiAodW5saWtlbHkocmV0ID09IC1FT1BOT1RTVVBQKSlcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI5MzpcdFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xuZHJpdmVycy9ibG9jay9sb29wLmMtMjk0LVxuLS1cbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIwNTI9c3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcbi0tXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMTMzLVx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuZHJpdmVycy9ibG9jay9sb29wLmM6MjEzNDpcdElOSVRfV09SSyhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yaywgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKTtcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxMzUtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZsby1cdTAwM2Vyb290Y2dfY21kX2xpc3QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMjowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODMxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbG9fZmFsbG9jYXRlYCBhbmQgQ29udGV4dCoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gYGxvX2ZhbGxvY2F0ZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIG91dCBhbmQgbG9vayBhdCBpdHMgaW1tZWRpYXRlIHN1cnJvdW5kaW5nIGNvbnRleHQgd2l0aGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgYmVpbmcgKmNhbGxlZCosIHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgcGFzc2VkLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCAqZ29hbCogb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaXMuIElzIGl0IGJlaW5nIHVzZWQgZm9yIHByZS1hbGxvY2F0aW9uLCBzcGFyc2UgZmlsZSBjcmVhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgd2l0aGluIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IHdpbGwgcXVpY2tseSByZXZlYWwgdGhlIGNvcmUgaW50ZW50IGFuZCBwb3RlbnRpYWwgYXJlYXMgZm9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgbWVjaGFuaXNtIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgZmFsbG9jYXRlIGNhbGwuIEkgYWxzbyBuZWVkIHRvIHZlcmlmeSBlcnJvciBoYW5kbGluZyBmb3IgZmFsbG9jYXRlIGFuZCBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay9sb29wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2NTpcdFx0YXRvbWljX29yKG1vZGUsIFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlKTtcbiAyNjY6XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xuIDI2NzpcdH1cbiAyNjg6XHRcbiAyNjk6XHRzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXG4gMjcwOlx0XHRcdFx0aW50IG1vZGUpXG4gMjcxOlx0e1xuIDI3MjpcdFx0LypcbiAyNzM6XHRcdCAqIFdlIHVzZSBmYWxsb2NhdGUgdG8gbWFuaXB1bGF0ZSB0aGUgc3BhY2UgbWFwcGluZ3MgdXNlZCBieSB0aGUgaW1hZ2VcbiAyNzQ6XHRcdCAqIGEuay5hLiBkaXNjYXJkL3plcm9yYW5nZS5cbiAyNzU6XHRcdCAqL1xuIDI3NjpcdFx0c3RydWN0IGZpbGUgKmZpbGUgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gMjc3Olx0XHRpbnQgcmV0O1xuIDI3ODpcdFxuIDI3OTpcdFx0bW9kZSB8PSBGQUxMT0NfRkxfS0VFUF9TSVpFO1xuIDI4MDpcdFxuIDI4MTpcdFx0aWYgKCFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMobG8tXHUwMDNlbG9fZGV2aWNlKSlcbiAyODI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDI4MzpcdFxuIDI4NDpcdFx0cmV0ID0gZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZhbGxvY2F0ZShmaWxlLCBtb2RlLCBwb3MsIGJsa19ycV9ieXRlcyhycSkpO1xuIDI4NTpcdFx0aWYgKHVubGlrZWx5KHJldCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FSU5WQUwgXHUwMDI2XHUwMDI2IHJldCAhPSAtRU9QTk9UU1VQUCkpXG4gMjg2Olx0XHRcdHJldHVybiAtRUlPO1xuIDI4NzpcdFxuIDI4ODpcdFx0LypcbiAyODk6XHRcdCAqIFdlIGluaXRpYWxseSBjb25maWd1cmUgdGhlIGxpbWl0cyBpbiBhIGhvcGUgdGhhdCBmYWxsb2NhdGUgaXNcbiAyOTA6XHRcdCAqIHN1cHBvcnRlZCBhbmQgY2xlYXIgdGhlbSBoZXJlIGlmIHRoYXQgdHVybnMgb3V0IG5vdCB0byBiZSB0cnVlLlxuIDI5MTpcdFx0ICovXG4gMjkyOlx0XHRpZiAodW5saWtlbHkocmV0ID09IC1FT1BOT1RTVVBQKSlcbiAyOTM6XHRcdFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xuIDI5NDpcdFxuIDI5NTpcdFx0cmV0dXJuIHJldDtcbiAyOTY6XHR9XG4gMjk3Olx0XG4gMjk4Olx0c3RhdGljIGludCBsb19yZXFfZmx1c2goc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxKVxuIDI5OTpcdHtcbiAzMDA6XHRcdGludCByZXQgPSB2ZnNfZnN5bmMobG8tXHUwMDNlbG9fYmFja2luZ19maWxlLCAwKTtcbiAzMDE6XHRcdGlmICh1bmxpa2VseShyZXQgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUlOVkFMKSlcbiAzMDI6XHRcdFx0cmV0ID0gLUVJTztcbiAzMDM6XHRcbiAzMDQ6XHRcdHJldHVybiByZXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAyOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NjMKCQkJCQkJCW91dHB1dDogMjY0CgkJCQkJCQl0aG91Z2h0czogNDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFzc2Vzc21lbnQ6IEFsbCBDbGVhcioqCgpPa2F5LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCB0aGlzIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSBLTVNBTiBjb25jZXJucywgYnV0IEkgYWx3YXlzIHByZWZlciB0byBkb3VibGUtY2hlY2suIEZpcnN0LCBJIHdhbnRlZCB0byB2ZXJpZnkgdGhhdCB0aGVyZSB3ZXJlIG5vIG9idmlvdXMgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgcHJvYmxlbXMgaW4gdXNlci1mYWNpbmcgc3RydWN0dXJlcyBvciBvdGhlciBzZW5zaXRpdmUgYXJlYXMuIFRoZSBxdWljayBzY2FuIGNvbmZpcm1lZCB0aGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gQWxsIG5ldyBzdHJ1Y3QgbWVtYmVycyBhcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBtYWluIGZvY3VzIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgb24gYSBsb2NraW5nIGlzc3VlIHJlZ2FyZGluZyBxdWV1ZSBsaW1pdHMuIEl0IGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IHByb2JsZW0gaW4gaG93IHF1ZXVlIGxpbWl0cyB3ZXJlIGJlaW5nIHVwZGF0ZWQsIHNoaWZ0aW5nIHRoZSB1cGRhdGUgdG8gYSB3b3JrcXVldWUgdG8gZW5zdXJlIHByb3BlciBsb2NraW5nIHByb3RvY29scy4gVGhpcyBwcmltYXJpbHkgaW52b2x2ZXMgY29uY3VycmVuY3ksIGRlYWRsb2Nrcywgd29ya3F1ZXVlIGNhbmNlbGxhdGlvbiByYWNlcywgYW5kIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgdGhlIHVzdWFsIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIFBST1ZFX0xPQ0tJTkcpLgoKVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJIHJhbiB0aHJvdWdoIHRoZSBjcml0ZXJpYSBmb3IgZGV0ZXJtaW5pbmcgS01TQU4gbmVlZHMuIFRoZXJlIGFyZSBubyBrZXJuZWwgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZywgbm8gY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIG5vIGFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBtaWdodCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy4KCkNvbnZlcnNlbHksIEkgdmVyaWZpZWQgdGhlIGNyaXRlcmlhIGZvciBzZXR0aW5nIE5lZWRzS01TQU4gdG8gZmFsc2U6IFRoaXMgcGF0Y2ggcHJpbWFyaWx5IGRlYWxzIHdpdGggdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTiwgTE9DS0RFUCwgb3Igb3RoZXIgc3RhbmRhcmQgdG9vbHMgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLiBBbGwgcmVsZXZhbnQgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuIFRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgaGVyZS4KCkdpdmVuIGFsbCBvZiB0aGlzLCBpdCYjMzk7cyBhIGNsZWFyIE5lZWRzS01TQU49ZmFsc2Ugc2l0dWF0aW9uLiBUaW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDI6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHF1ZXVlIGxpbWl0cyBjbGVhcmluZyBpbiB0aGUgbG9vcCBibG9jayBkcml2ZXIgKGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2ApIGJ5IG1vdmluZyB0aGUgbGltaXQgdXBkYXRlIGZyb20gdGhlIHJlcXVlc3QgZXhlY3V0aW9uIGNvbnRleHQgKGBsb19mYWxsb2NhdGVgKSB0byBhIGRlZmVycmVkIHdvcmtxdWV1ZSBpdGVtIChgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCkuIEl0IGludHJvZHVjZXMgYSB3b3JrIHN0cnVjdCBhbmQgYXRvbWljIGdlbmVyYXRpb24gY291bnRlcnMgKGByZWJpbmRfZ2VuYCwgYGNsZWFyX2xpbWl0c19nZW5gLCBgY2xlYXJfbGltaXRzX21vZGVgKSB3aXRoaW4gYHN0cnVjdCBsb29wX2RldmljZWAgdG8gc2FmZWx5IGZyZWV6ZSB0aGUgcXVldWUgYW5kIGNvbW1pdCBsaW1pdHMgdXBkYXRlcyBhc3luY2hyb25vdXNseSB3aXRob3V0IHJhY2UgY29uZGl0aW9ucyBvbiBiYWNraW5nIGZpbGUgcmViaW5kaW5nLlxuXG5BbGwgYWRkZWQgZmllbGRzIGFyZSBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGxvb3BfZGV2aWNlYCB1c2luZyBga3phbGxvY19vYmpgIGFuZCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLYC4gVGhlIGxvY2FsIHZhcmlhYmxlcyB3aXRoaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgZGF0YSBpcyBjb3BpZWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgcmlza3Mgd2l0aCB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgcmFjZSBjb25kaXRpb25zLCBxdWV1ZSBsb2NraW5nL2ZyZWV6aW5nLCBhbmQgd29ya3F1ZXVlIGNhbmNlbGxhdGlvbiBsaWZldGltZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWcgdG9vbHMgKEtBU0FOLCBMT0NLREVQKS4gU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIChgZHJpdmVycy9ibG9jay9sb29wLmNgKSBieSBtb3ZpbmcgdGhlIGxpbWl0IHVwZGF0ZSBmcm9tIHRoZSByZXF1ZXN0IGV4ZWN1dGlvbiBjb250ZXh0IChgbG9fZmFsbG9jYXRlYCkgdG8gYSBkZWZlcnJlZCB3b3JrcXVldWUgaXRlbSAoYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmApLiBJdCBpbnRyb2R1Y2VzIGEgd29yayBzdHJ1Y3QgYW5kIGF0b21pYyBnZW5lcmF0aW9uIGNvdW50ZXJzIChgcmViaW5kX2dlbmAsIGBjbGVhcl9saW1pdHNfZ2VuYCwgYGNsZWFyX2xpbWl0c19tb2RlYCkgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHRvIHNhZmVseSBmcmVlemUgdGhlIHF1ZXVlIGFuZCBjb21taXQgbGltaXRzIHVwZGF0ZXMgYXN5bmNocm9ub3VzbHkgd2l0aG91dCByYWNlIGNvbmRpdGlvbnMgb24gYmFja2luZyBmaWxlIHJlYmluZGluZy5cblxuQWxsIGFkZGVkIGZpZWxkcyBhcmUgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdXNpbmcgYGt6YWxsb2Nfb2JqYCBhbmQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBsb2NhbCB2YXJpYWJsZXMgd2l0aGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHdpdGggdGhpcyBwYXRjaCByZWxhdGUgdG8gY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9ucywgcXVldWUgbG9ja2luZy9mcmVlemluZywgYW5kIHdvcmtxdWV1ZSBjYW5jZWxsYXRpb24gbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCkuIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjI1LjkyMzg2NzM2NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NDY2Mjg5Mzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJMS19ERVZfTE9PUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzX3dvcmtmblwiLFxuICAgIFwibG9vcF9jbGVhcl9saW1pdHNcIixcbiAgICBcImxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZVwiLFxuICAgIFwiX19sb29wX2Nscl9mZFwiLFxuICAgIFwibG9fZmFsbG9jYXRlXCIsXG4gICAgXCJsb29wX2NoYW5nZV9mZFwiLFxuICAgIFwibG9vcF9jb25maWd1cmVcIixcbiAgICBcImxvb3BfcmVtb3ZlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgcXVldWUgbGltaXRzIGNsZWFyaW5nIGluIHRoZSBsb29wIGJsb2NrIGRyaXZlciAoYGRyaXZlcnMvYmxvY2svbG9vcC5jYCkgYnkgbW92aW5nIHRoZSBsaW1pdCB1cGRhdGUgZnJvbSB0aGUgcmVxdWVzdCBleGVjdXRpb24gY29udGV4dCAoYGxvX2ZhbGxvY2F0ZWApIHRvIGEgZGVmZXJyZWQgd29ya3F1ZXVlIGl0ZW0gKGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gKS4gSXQgaW50cm9kdWNlcyBhIHdvcmsgc3RydWN0IGFuZCBhdG9taWMgZ2VuZXJhdGlvbiBjb3VudGVycyAoYHJlYmluZF9nZW5gLCBgY2xlYXJfbGltaXRzX2dlbmAsIGBjbGVhcl9saW1pdHNfbW9kZWApIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCB0byBzYWZlbHkgZnJlZXplIHRoZSBxdWV1ZSBhbmQgY29tbWl0IGxpbWl0cyB1cGRhdGVzIGFzeW5jaHJvbm91c2x5IHdpdGhvdXQgcmFjZSBjb25kaXRpb25zIG9uIGJhY2tpbmcgZmlsZSByZWJpbmRpbmcuXFxuXFxuQWxsIGFkZGVkIGZpZWxkcyBhcmUgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdXNpbmcgYGt6YWxsb2Nfb2JqYCBhbmQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBsb2NhbCB2YXJpYWJsZXMgd2l0aGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHdpdGggdGhpcyBwYXRjaCByZWxhdGUgdG8gY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9ucywgcXVldWUgbG9ja2luZy9mcmVlemluZywgYW5kIHdvcmtxdWV1ZSBjYW5jZWxsYXRpb24gbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCkuIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvb3AgYmxvY2sgZGV2aWNlIGRyaXZlciB0byBkZWZlciBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgdG8gYSB3b3JrcXVldWUgaXRlbSAobG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKSBzbyB0aGUgcXVldWUgY2FuIGJlIHByb3Blcmx5IGZyb3plbiB3aXRoIGJsa19tcV9mcmVlemVfcXVldWUuIEl0IGFkZHMgZ2VuZXJhdGlvbiBjb3VudGVycyBhbmQgYXRvbWljIHN0YXRlIHRvIHN5bmNocm9uaXplIGFnYWluc3QgcmViaW5kL2NsZWFyIG9wZXJhdGlvbnMuIFRoaXMgY2hhbmdlcyByZWFjaGFibGUgZHJpdmVyIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgaGFuZGxpbmcsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzoyNS45MjM4NzQzMTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjMxOTE5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk2MWExZjJhNjkzNjFhYjJkZTIxOTg5MmMxOWIxNmE5ZTQzNjIwNWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwMjowNzoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuaW5kZXggNmYxMjk3NjAzNWIwOS4uOWY2ZTUxOGU2MGQyOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xcbisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jXFxuQEAgLTY3LDYgKzY3LDEwIEBAIHN0cnVjdCBsb29wX2RldmljZSB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIHJvb3RjZ19jbWRfbGlzdDtcXG4gXFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgaWRsZV93b3JrZXJfbGlzdDtcXG4gXFx0c3RydWN0IHJiX3Jvb3QgICAgICAgICAgd29ya2VyX3RyZWU7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIGNsZWFyX2xpbWl0c193b3JrO1xcbitcXHRhdG9taWNfdFxcdFxcdGNsZWFyX2xpbWl0c19tb2RlO1xcbitcXHRhdG9taWNfdFxcdFxcdHJlYmluZF9nZW47XFxuK1xcdGF0b21pY190XFx0XFx0Y2xlYXJfbGltaXRzX2dlbjtcXG4gXFx0c3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7XFxuIFxcdGJvb2xcXHRcXHRcXHRzeXNmc19pbml0ZWQ7XFxuIFxcbkBAIC0yMjIsMjYgKzIyNiw0NCBAQCBzdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxcbiBcXHRcXHRrb2JqZWN0X3VldmVudChcXHUwMDI2ZGlza190b19kZXYobG8tXFx1MDAzZWxvX2Rpc2spLVxcdTAwM2Vrb2JqLCBLT0JKX0NIQU5HRSk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuK1xcdHN0cnVjdCBsb29wX2RldmljZSAqbG8gPVxcbitcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGxvb3BfZGV2aWNlLCBjbGVhcl9saW1pdHNfd29yayk7XFxuIFxcdHN0cnVjdCBxdWV1ZV9saW1pdHMgbGltID0gcXVldWVfbGltaXRzX3N0YXJ0X3VwZGF0ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbi1cXG4tXFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcXG4tXFx0XFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XFxuLVxcbi1cXHRpZiAobW9kZSBcXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XFxuLVxcdFxcdGxpbS5tYXhfaHdfZGlzY2FyZF9zZWN0b3JzID0gMDtcXG4tXFx0XFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xcbi1cXHR9XFxuK1xcdHVuc2lnbmVkIGludCBtZW1mbGFncztcXG4rXFx0aW50IG1vZGUgPSAwO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2hcXG4tXFx0ICogaXMgYWdhaW5zdCB0aGUgbG9ja2luZyBwcm90b2NvbCBhbmQgZGFuZ2Vyb3VzLiAgQnV0IHdlIGNhbid0IGp1c3RcXG4tXFx0ICogZnJlZXplIHRoZSBxdWV1ZSBhcyB3ZSdyZSBpbnNpZGUgdGhlIC1cXHUwMDNlcXVldWVfcnEgbWV0aG9kIGhlcmUuICBTbyB0aGlzXFxuLVxcdCAqIHNob3VsZCBtb3ZlIG91dCBpbnRvIGEgd29ya3F1ZXVlIHVubGVzcyB3ZSBnZXQgdGhlIGZpbGUgb3BlcmF0aW9ucyB0b1xcbi1cXHQgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLlxcbitcXHQgKiBDb21taXQgdGhlIHVubW9kaWZpZWQgbGltaXRzIGlmIHRoZSBkZXZpY2Ugd2FzIHJlYm91bmQgc2luY2VcXG4rXFx0ICogdGhlIHdvcmsgaXRlbSB3YXMgc2NoZWR1bGVkLiAgVGhlIGZyZWV6ZSBleGNsdWRlcyBhIHJlYmluZFxcbitcXHQgKiB0aHJvdWdoIGxvb3BfY2hhbmdlX2ZkKCksIHdoaWNoIGFzc2lnbnMgdGhlIG5ldyBiYWNraW5nIGZpbGVcXG4rXFx0ICogdW5kZXIgdGhlIGZyZWV6ZTsgdGhlIG90aGVyIHJlYmluZGluZyBwYXRocywgbG9vcF9jb25maWd1cmUoKVxcbitcXHQgKiBhbmQgX19sb29wX2Nscl9mZCgpLCBkbyBub3QgZnJlZXplIHRoZSBxdWV1ZSwgYnV0IHRoZXkgYnVtcFxcbitcXHQgKiByZWJpbmRfZ2VuIGFuZCByZXNldCBjbGVhcl9saW1pdHNfbW9kZSB0aGVtc2VsdmVzLCBzbyB0aGVcXG4rXFx0ICogZ2VuZXJhdGlvbiBjaGVjayBhbmQgdGhlIGF0b21pY194Y2hnKCkgYmVsb3cgY292ZXIgdGhlbS5cXG4gXFx0ICovXFxuK1xcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cXHUwMDNlbG9fcXVldWUpO1xcbitcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfZ2VuKSA9PSBhdG9taWNfcmVhZChcXHUwMDI2bG8tXFx1MDAzZXJlYmluZF9nZW4pKSB7XFxuK1xcdFxcdG1vZGUgPSBhdG9taWNfeGNoZyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcXG4rXFxuK1xcdFxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1pFUk9fUkFOR0UpXFxuK1xcdFxcdFxcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xcbitcXG4rXFx0XFx0aWYgKG1vZGUgXFx1MDAyNiBGQUxMT0NfRkxfUFVOQ0hfSE9MRSkge1xcbitcXHRcXHRcXHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XFxuK1xcdFxcdFxcdGxpbS5kaXNjYXJkX2dyYW51bGFyaXR5ID0gMDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuIFxcdHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVxcdTAwM2Vsb19xdWV1ZSwgXFx1MDAyNmxpbSk7XFxuK1xcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cXHUwMDNlbG9fcXVldWUsIG1lbWZsYWdzKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXFxuK3tcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19nZW4sIGF0b21pY19yZWFkKFxcdTAwMjZsby1cXHUwMDNlcmViaW5kX2dlbikpO1xcbitcXHRhdG9taWNfb3IobW9kZSwgXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XFxuK1xcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfd29yayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbG9fZmFsbG9jYXRlKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSwgbG9mZl90IHBvcyxcXG5AQCAtNTE2LDYgKzUzOCw4IEBAIHN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuIHtcXG4gXFx0bG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZSA9IGZpbGU7XFxuK1xcdGF0b21pY19pbmMoXFx1MDAyNmxvLVxcdTAwM2VyZWJpbmRfZ2VuKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcXG4gXFx0bG8tXFx1MDAzZW9sZF9nZnBfbWFzayA9IG1hcHBpbmdfZ2ZwX21hc2soZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG4gXFx0bWFwcGluZ19zZXRfZ2ZwX21hc2soZmlsZS1cXHUwMDNlZl9tYXBwaW5nLFxcbiBcXHRcXHRcXHRsby1cXHUwMDNlb2xkX2dmcF9tYXNrIFxcdTAwMjYgfihfX0dGUF9JTyB8IF9fR0ZQX0ZTKSk7XFxuQEAgLTExNDQsNiArMTE2OCwxMiBAQCBzdGF0aWMgdm9pZCBfX2xvb3BfY2xyX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmxvLVxcdTAwM2Vsb19sb2NrKTtcXG4gXFx0ZmlscCA9IGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGU7XFxuIFxcdGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xcbitcXHQvKlxcbitcXHQgKiBJbnZhbGlkYXRlIGFueSBwZW5kaW5nIGNsZWFyIHRoYXQgd2FzIHNjaGVkdWxlZCBhZ2FpbnN0IHRoZSBvbGRcXG4rXFx0ICogYmFja2luZyBmaWxlLCBsaWtlIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSgpIGRvZXMgb24gcmViaW5kLlxcbitcXHQgKi9cXG4rXFx0YXRvbWljX2luYyhcXHUwMDI2bG8tXFx1MDAzZXJlYmluZF9nZW4pO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZsby1cXHUwMDNlY2xlYXJfbGltaXRzX21vZGUsIDApO1xcbiBcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmxvLVxcdTAwM2Vsb19sb2NrKTtcXG4gXFxuIFxcdGxvLVxcdTAwM2Vsb19kZXZpY2UgPSBOVUxMO1xcbkBAIC0xNzgxLDYgKzE4MTEsNyBAQCBzdGF0aWMgdm9pZCBsb19mcmVlX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRpc2spXFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKGxvLVxcdTAwM2V3b3JrcXVldWUpO1xcbiBcXHRsb29wX2ZyZWVfaWRsZV93b3JrZXJzKGxvLCB0cnVlKTtcXG4gXFx0dGltZXJfc2h1dGRvd25fc3luYyhcXHUwMDI2bG8tXFx1MDAzZXRpbWVyKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcXG4gXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2bG8tXFx1MDAzZWxvX211dGV4KTtcXG4gXFx0a2ZyZWUobG8pO1xcbiB9XFxuQEAgLTIxMDAsNiArMjEzMSw3IEBAIHN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsby1cXHUwMDNlbG9fbG9jayk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZsby1cXHUwMDNlbG9fd29ya19sb2NrKTtcXG4gXFx0SU5JVF9XT1JLKFxcdTAwMjZsby1cXHUwMDNlcm9vdGNnX3dvcmssIGxvb3Bfcm9vdGNnX3dvcmtmbik7XFxuK1xcdElOSVRfV09SSyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2bG8tXFx1MDAzZXJvb3RjZ19jbWRfbGlzdCk7XFxuIFxcdGRpc2stXFx1MDAzZW1ham9yXFx0XFx0PSBMT09QX01BSk9SO1xcbiBcXHRkaXNrLVxcdTAwM2VmaXJzdF9taW5vclxcdD0gaSBcXHUwMDNjXFx1MDAzYyBwYXJ0X3NoaWZ0O1xcbkBAIC0yMTM4LDYgKzIxNzAsMTAgQEAgc3RhdGljIGludCBsb29wX2FkZChpbnQgaSlcXG4gXFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXFxuIHtcXG4rXFx0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcXG4rXFx0ICogYnkgdGhlIHRpbWUgbG9fZnJlZV9kaXNrKCkgcnVucy4gKi9cXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcXG4rXFxuIFxcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xcbiBcXHRkZWxfZ2VuZGlzayhsby1cXHUwMDNlbG9fZGlzayk7XFxuIFxcdGJsa19tcV9mcmVlX3RhZ19zZXQoXFx1MDAyNmxvLVxcdTAwM2V0YWdfc2V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6MjYuNDE2ODUxODI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzI2NTUyMTMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX2NsZWFyX2xpbWl0c193b3JrZm5cIixcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzXCIsXG4gICAgXCJsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVcIixcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jaGFuZ2VfZmRcIixcbiAgICBcImxvb3BfY29uZmlndXJlXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgdG8gZGVmZXIgcXVldWUgbGltaXRzIGNsZWFyaW5nIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbikgc28gdGhlIHF1ZXVlIGNhbiBiZSBwcm9wZXJseSBmcm96ZW4gd2l0aCBibGtfbXFfZnJlZXplX3F1ZXVlLiBJdCBhZGRzIGdlbmVyYXRpb24gY291bnRlcnMgYW5kIGF0b21pYyBzdGF0ZSB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0IHJlYmluZC9jbGVhciBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGRyaXZlciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NjFhMWYyYTY5MzYxYWIyZGUyMTk4OTJjMTliMTZhOWU0MzYyMDVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMjowNzoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLjlmNmU1MThlNjBkMjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC02Nyw2ICs2NywxMCBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgcm9vdGNnX2NtZF9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgaWRsZV93b3JrZXJfbGlzdDtcbiBcdHN0cnVjdCByYl9yb290ICAgICAgICAgIHdvcmtlcl90cmVlO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7XG4rXHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfbW9kZTtcbitcdGF0b21pY190XHRcdHJlYmluZF9nZW47XG4rXHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfZ2VuO1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7XG4gXHRib29sXHRcdFx0c3lzZnNfaW5pdGVkO1xuIFxuQEAgLTIyMiwyNiArMjI2LDQ0IEBAIHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4gXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNmRpc2tfdG9fZGV2KGxvLVx1MDAzZWxvX2Rpc2spLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4rc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4rXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbi1cbi1cdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcbi1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XG4tXG4tXHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLVx0XHRsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7XG4tXHR9XG4rXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4rXHRpbnQgbW9kZSA9IDA7XG4gXG4gXHQvKlxuLVx0ICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2hcbi1cdCAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4ndCBqdXN0XG4tXHQgKiBmcmVlemUgdGhlIHF1ZXVlIGFzIHdlJ3JlIGluc2lkZSB0aGUgLVx1MDAzZXF1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpc1xuLVx0ICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvXG4tXHQgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLlxuK1x0ICogQ29tbWl0IHRoZSB1bm1vZGlmaWVkIGxpbWl0cyBpZiB0aGUgZGV2aWNlIHdhcyByZWJvdW5kIHNpbmNlXG4rXHQgKiB0aGUgd29yayBpdGVtIHdhcyBzY2hlZHVsZWQuICBUaGUgZnJlZXplIGV4Y2x1ZGVzIGEgcmViaW5kXG4rXHQgKiB0aHJvdWdoIGxvb3BfY2hhbmdlX2ZkKCksIHdoaWNoIGFzc2lnbnMgdGhlIG5ldyBiYWNraW5nIGZpbGVcbitcdCAqIHVuZGVyIHRoZSBmcmVlemU7IHRoZSBvdGhlciByZWJpbmRpbmcgcGF0aHMsIGxvb3BfY29uZmlndXJlKClcbitcdCAqIGFuZCBfX2xvb3BfY2xyX2ZkKCksIGRvIG5vdCBmcmVlemUgdGhlIHF1ZXVlLCBidXQgdGhleSBidW1wXG4rXHQgKiByZWJpbmRfZ2VuIGFuZCByZXNldCBjbGVhcl9saW1pdHNfbW9kZSB0aGVtc2VsdmVzLCBzbyB0aGVcbitcdCAqIGdlbmVyYXRpb24gY2hlY2sgYW5kIHRoZSBhdG9taWNfeGNoZygpIGJlbG93IGNvdmVyIHRoZW0uXG4gXHQgKi9cbitcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX2dlbikgPT0gYXRvbWljX3JlYWQoXHUwMDI2bG8tXHUwMDNlcmViaW5kX2dlbikpIHtcbitcdFx0bW9kZSA9IGF0b21pY194Y2hnKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbitcbitcdFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9aRVJPX1JBTkdFKVxuK1x0XHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuK1xuK1x0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcbitcdFx0XHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XG4rXHRcdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuK1x0XHR9XG4rXHR9XG4gXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbitcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbit7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19nZW4sIGF0b21pY19yZWFkKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pKTtcbitcdGF0b21pY19vcihtb2RlLCBcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxuQEAgLTUxNiw2ICs1MzgsOCBAQCBzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gZmlsZTtcbitcdGF0b21pY19pbmMoXHUwMDI2bG8tXHUwMDNlcmViaW5kX2dlbik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbiBcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayA9IG1hcHBpbmdfZ2ZwX21hc2soZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuIFx0bWFwcGluZ19zZXRfZ2ZwX21hc2soZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0bG8tXHUwMDNlb2xkX2dmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpKTtcbkBAIC0xMTQ0LDYgKzExNjgsMTIgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdGZpbHAgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xuK1x0LypcbitcdCAqIEludmFsaWRhdGUgYW55IHBlbmRpbmcgY2xlYXIgdGhhdCB3YXMgc2NoZWR1bGVkIGFnYWluc3QgdGhlIG9sZFxuK1x0ICogYmFja2luZyBmaWxlLCBsaWtlIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSgpIGRvZXMgb24gcmViaW5kLlxuK1x0ICovXG4rXHRhdG9taWNfaW5jKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pO1xuK1x0YXRvbWljX3NldChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXG4gXHRsby1cdTAwM2Vsb19kZXZpY2UgPSBOVUxMO1xuQEAgLTE3ODEsNiArMTgxMSw3IEBAIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiBcdGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpO1xuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZsby1cdTAwM2V0aW1lcik7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFx0a2ZyZWUobG8pO1xuIH1cbkBAIC0yMTAwLDYgKzIxMzEsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb193b3JrX2xvY2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbiBcdGRpc2stXHUwMDNlbWFqb3JcdFx0PSBMT09QX01BSk9SO1xuIFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vclx0PSBpIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuQEAgLTIxMzgsNiArMjE3MCwxMCBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuK1x0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcbitcdCAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovXG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6MjYuNDE2ODUzMjE0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI2MjE0OTU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3AgQmxvY2sgRGV2aWNlIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvYmxvY2svbG9vcC5jYCBhbmQgZmlndXJlIG91dCBpZiBpdCdzIGZ1enotd29ydGh5LCB3aGF0IHRoZSBpZGVhbCBjb25maWd1cmF0aW9uIHdpbGwgYmUsIGFuZCB3aGljaCBzeW1ib2xzIHdlIHNob3VsZCBob25lIGluIG9uLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGNoYW5nZWQuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZmV3IG5ldyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgOiBgY2xlYXJfbGltaXRzX3dvcmtgLCBgY2xlYXJfbGltaXRzX21vZGVgLCBgcmViaW5kX2dlbmAsIGFuZCBgY2xlYXJfbGltaXRzX2dlbmAuIENydWNpYWxseSwgaXQgcmVwbGFjZXMgYSBkYW5nZXJvdXMgZGlyZWN0IGNhbGwgdG8gYGxvb3BfY2xlYXJfbGltaXRzYCAod2l0aCB0aGF0IGFsYXJtaW5nIGNvbW1lbnQgYWJvdXQgdW5zYWZlIGxpbWl0IHVwZGF0ZXMpIHdpdGggYSBkZWZlcnJlZCB3b3JrIG1lY2hhbmlzbSBpbnZvbHZpbmcgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAuIFRoaXMgd29yayBmdW5jdGlvbiBub3cgdXNlcyBgYmxrX21xX2ZyZWV6ZV9xdWV1ZWAgd2hpY2ggaXMgcHJvbWlzaW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBiZWNhdXNlIGl0IG1lYW5zIHdlIGhhdmUgbG9ja2luZyB0aGF0IHdlIGNhbiBhbmFseXplLiBXZSBub3cgaGF2ZSBzY2hlZHVsaW5nIHdvcmsgd2l0aCBgc2NoZWR1bGVfd29yayhcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfd29yaylgLiBUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLCBgX19sb29wX2Nscl9mZGAsIGBsb19mcmVlX2Rpc2tgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYCwgc3VnZ2VzdGluZyB0aGF0IHRoZSBtb2RpZmljYXRpb25zIGFyZSBmYWlybHkgd2lkZXNwcmVhZCB3aXRoaW4gdGhlIGRyaXZlci5cblxuTmV4dCwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIHRvIHNlZSB3aGF0J3MgcmVxdWlyZWQgdG8gYnVpbGQgdGhpcyBkcml2ZXIsIHNvIEkgY2FuIGNvbmZpZ3VyZSB0aGUgZnV6emluZyBlbnZpcm9ubWVudCBjb3JyZWN0bHkuIEEgcXVpY2sgY2hlY2sgb2YgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgdXNpbmcgYGdyZXBwZXJgIHNob3VsZCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NTYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzozMS42NzkwMDUwMDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MjU2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQkxLX0RFVl9MT09QXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9LY29uZmlnPTE0MD1jb25maWcgQkxLX0RFVl9DT1dfQ09NTU9OXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWctMTQzLVxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZzoxNDQ6Y29uZmlnIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xNDUtXFx0dHJpc3RhdGUgXFxcIkxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE3OC1cXG5kcml2ZXJzL2Jsb2NrL0tjb25maWc6MTc5OmNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuZHJpdmVycy9ibG9jay9LY29uZmlnLTE4MC1cXHRpbnQgXFxcIk51bWJlciBvZiBsb29wIGRldmljZXMgdG8gcHJlLWNyZWF0ZSBhdCBpbml0IHRpbWVcXFwiXFxuZHJpdmVycy9ibG9jay9LY29uZmlnOjE4MTpcXHRkZXBlbmRzIG9uIEJMS19ERVZfTE9PUFxcbmRyaXZlcnMvYmxvY2svS2NvbmZpZy0xODItXFx0ZGVmYXVsdCA4XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19CTEtfREVWX1JBTSlcXHQrPSBicmQub1xcbmRyaXZlcnMvYmxvY2svTWFrZWZpbGU6MjI6b2JqLSQoQ09ORklHX0JMS19ERVZfTE9PUClcXHQrPSBsb29wLm9cXG5kcml2ZXJzL2Jsb2NrL01ha2VmaWxlLTIzLW9iai0kKENPTkZJR19TVU5WREMpXFx0XFx0Kz0gc3VudmRjLm9cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTE4MTk9c3RhdGljIGNvbnN0IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyBsb19mb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTgzOC0gKiBjaGFuZ2VkIHRoZSBkZWZhdWx0IHZhbHVlIGZyb20gMCBmb3IgbWF4X2xvb3A9MCByZWFzb25zKSwganVzdFxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4Mzk6ICogY3JlYXRlIENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UIGxvb3AgZGV2aWNlcyBhdCBtb2R1bGVcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQwLSAqIGluaXQgdGltZS4gTG9vcCBkZXZpY2VzIGNhbiBiZSByZXF1ZXN0ZWQgb24tZGVtYW5kIHdpdGggdGhlXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xODQzLSAqL1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjE4NDQ6c3RhdGljIGludCBtYXhfbG9vcCA9IENPTkZJR19CTEtfREVWX0xPT1BfTUlOX0NPVU5UO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTE4NDUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjMxLjcyNzQzNDQwN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4MzAyOTE0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBCbG9jayBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBzb21lIGJsb2NrIGRldmljZSBjb25maWd1cmF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwncyBLY29uZmlnIGZpbGVzIOKAkyBzcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgYGRyaXZlcnMvYmxvY2svS2NvbmZpZ2AgZmlsZS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGV4cGVjdCB0aGF0IGxpbmUgMTQ0LCBvciB0aGVyZWFib3V0cywgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gYW5kIHdoYXQgb3RoZXIgb3B0aW9ucyBpdCBkZXBlbmRzIG9uLiBJJ2xsIGNoZWNrIHRoYXQgYXJlYSBhbmQgc2VlIGlmIGl0IGdpdmVzIGEgZ29vZCBvdmVydmlldy4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgZGVwZW5kZW5jaWVzLCBhbmQgZmlndXJlIG91dCB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1NzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzozMy41NTc3Mjc3MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdGNvbmZpZyBCTEtfREVWX0NPV19DT01NT05cXG4gMTQxOlxcdFxcdGJvb2xcXG4gMTQyOlxcdFxcdGRlZmF1bHQgQkxLX0RFVl9VQkRcXG4gMTQzOlxcdFxcbiAxNDQ6XFx0Y29uZmlnIEJMS19ERVZfTE9PUFxcbiAxNDU6XFx0XFx0dHJpc3RhdGUgXFxcIkxvb3BiYWNrIGRldmljZSBzdXBwb3J0XFxcIlxcbiAxNDY6XFx0XFx0aGVscFxcbiAxNDc6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSBhIHJlZ3VsYXIgZmlsZSBhcyBhIGJsb2NrXFxuIDE0ODpcXHRcXHQgIGRldmljZTsgeW91IGNhbiB0aGVuIGNyZWF0ZSBhIGZpbGUgc3lzdGVtIG9uIHRoYXQgYmxvY2sgZGV2aWNlIGFuZFxcbiAxNDk6XFx0XFx0ICBtb3VudCBpdCBqdXN0IGFzIHlvdSB3b3VsZCBtb3VudCBvdGhlciBibG9jayBkZXZpY2VzIHN1Y2ggYXMgaGFyZFxcbiAxNTA6XFx0XFx0ICBkcml2ZSBwYXJ0aXRpb25zLCBDRC1ST00gZHJpdmVzIG9yIGZsb3BweSBkcml2ZXMuIFRoZSBsb29wIGRldmljZXNcXG4gMTUxOlxcdFxcdCAgYXJlIGJsb2NrIHNwZWNpYWwgZGV2aWNlIGZpbGVzIHdpdGggbWFqb3IgbnVtYmVyIDcgYW5kIHR5cGljYWxseVxcbiAxNTI6XFx0XFx0ICBjYWxsZWQgL2Rldi9sb29wMCwgL2Rldi9sb29wMSBldGMuXFxuIDE1MzpcXHRcXG4gMTU0OlxcdFxcdCAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gY2hlY2sgYW4gSVNPIDk2NjAgZmlsZSBzeXN0ZW0gYmVmb3JlXFxuIDE1NTpcXHRcXHQgIGJ1cm5pbmcgdGhlIENELCBvciBpZiB5b3Ugd2FudCB0byB1c2UgZmxvcHB5IGltYWdlcyB3aXRob3V0IGZpcnN0XFxuIDE1NjpcXHRcXHQgIHdyaXRpbmcgdGhlbSB0byBmbG9wcHkuIEZ1cnRoZXJtb3JlLCBzb21lIExpbnV4IGRpc3RyaWJ1dGlvbnMgYXZvaWRcXG4gMTU3OlxcdFxcdCAgdGhlIG5lZWQgZm9yIGEgZGVkaWNhdGVkIExpbnV4IHBhcnRpdGlvbiBieSBrZWVwaW5nIHRoZWlyIGNvbXBsZXRlXFxuIDE1ODpcXHRcXHQgIHJvb3QgZmlsZSBzeXN0ZW0gaW5zaWRlIGEgRE9TIEZBVCBmaWxlIHVzaW5nIHRoaXMgbG9vcCBkZXZpY2VcXG4gMTU5OlxcdFxcdCAgZHJpdmVyLlxcbiAxNjA6XFx0XFxuIDE2MTpcXHRcXHQgIFRvIHVzZSB0aGUgbG9vcCBkZXZpY2UsIHlvdSBuZWVkIHRoZSBsb3NldHVwIHV0aWxpdHksIGZvdW5kIGluIHRoZVxcbiAxNjI6XFx0XFx0ICB1dGlsLWxpbnV4IHBhY2thZ2UsIHNlZVxcbiAxNjM6XFx0XFx0ICBcXHUwMDNjaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvdXRpbC1saW51eC9cXHUwMDNlLlxcbiAxNjQ6XFx0XFxuIDE2NTpcXHRcXHQgIFRoZSBsb29wIGRldmljZSBkcml2ZXIgY2FuIGFsc28gYmUgdXNlZCB0byBcXFwiaGlkZVxcXCIgYSBmaWxlIHN5c3RlbSBpblxcbiAxNjY6XFx0XFx0ICBhIGRpc2sgcGFydGl0aW9uLCBmbG9wcHksIG9yIHJlZ3VsYXIgZmlsZSwgZWl0aGVyIHVzaW5nIGVuY3J5cHRpb25cXG4gMTY3OlxcdFxcdCAgKHNjcmFtYmxpbmcgdGhlIGRhdGEpIG9yIHN0ZWdhbm9ncmFwaHkgKGhpZGluZyB0aGUgZGF0YSBpbiB0aGUgbG93XFxuIDE2ODpcXHRcXHQgIGJpdHMgb2YsIHNheSwgYSBzb3VuZCBmaWxlKS4gVGhpcyBpcyBhbHNvIHNhZmUgaWYgdGhlIGZpbGUgcmVzaWRlc1xcbiAxNjk6XFx0XFx0ICBvbiBhIHJlbW90ZSBmaWxlIHNlcnZlci5cXG4gMTcwOlxcdFxcbiAxNzE6XFx0XFx0ICBOb3RlIHRoYXQgdGhpcyBsb29wIGRldmljZSBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBsb29wYmFja1xcbiAxNzI6XFx0XFx0ICBkZXZpY2UgdXNlZCBmb3IgbmV0d29yayBjb25uZWN0aW9ucyBmcm9tIHRoZSBtYWNoaW5lIHRvIGl0c2VsZi5cXG4gMTczOlxcdFxcbiAxNzQ6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gMTc1OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGxvb3AuXFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdCAgTW9zdCB1c2VycyB3aWxsIGFuc3dlciBOIGhlcmUuXFxuIDE3ODpcXHRcXG4gMTc5OlxcdGNvbmZpZyBCTEtfREVWX0xPT1BfTUlOX0NPVU5UXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjMzLjU1Nzc5Nzg1OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4ODgwNDI5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTG9vcCBEZXZpY2UgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzIGBCTEtfREVWX0xPT1BgIHBhdGNoLCBJIHNlZSBpdCBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW51c3VhbCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGV4cGVjdGVkIHNpbmNlIGl0J3MgcGFydCBvZiB0aGUgc3RhbmRhcmQgYmxvY2sgc3Vic3lzdGVtLiBUaGUgbG9vcCBkZXZpY2UgaXRzZWxmIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZS4gSXQncyBoZWF2aWx5IHV0aWxpemVkIGFuZCBJIGNhbiBlYXNpbHkgaW50ZXJhY3Qgd2l0aCBpdCB0aHJvdWdoIGBpb2N0bGAgY2FsbHMgYW5kIHN0YW5kYXJkIG9wZXJhdGlvbnMgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgR0NFLCBhbmQgZXZlbiBzeXprYWxsZXIsIHVzaW5nIHRoZSB0eXBpY2FsIGAvZGV2L2xvb3AqYCBkZXZpY2VzIGFuZCBhc3NvY2lhdGVkIGNvbW1hbmRzIGxpa2UgYExPT1BfU0VUX0ZEYCwgYExPT1BfQ09ORklHVVJFYCwgYW5kIHNvIG9uLlxuXG5JcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidCEgVGhlIHBhdGNoIGlzIGZpZGRsaW5nIHdpdGggc29tZSBjb21wbGV4IGNvbmN1cnJlbmN5IGFuZCBzeW5jaHJvbml6YXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgSSdtIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG8gaG93IHRoZSBxdWV1ZSBsaW1pdHMgYXJlIHVwZGF0ZWQgYXN5bmNocm9ub3VzbHkgdXNpbmcgYSB3b3JrcXVldWUuIEl0J3MgYWxzbyB0b3VjaGluZyBxdWV1ZSBmcmVlemluZyB3aXRoIGBibGtfbXFfZnJlZXplX3F1ZXVlYCwgYXRvbWljIGdlbmVyYXRpb25zLCByZWJpbmRpbmcgaGFuZGxpbmcsIGFuZCBldmVuIHdvcmsgY2FuY2VsbGF0aW9uIGR1cmluZyBjbGVhbnVwLiBUaGF0J3MgYSBnb29kIGFtb3VudCBvZiByZWFjaGFibGUgZHJpdmVyIGxvZ2ljIGJlaW5nIG1vZGlmaWVkIHdpdGggYWxsIHNvcnRzIG9mIGNvbmN1cnJlbmN5IGFuZCBsaWZlY3ljbGUgc3RhdGUgY2hhbmdlcy4gVGhpcyBpcyAqcHJpbWUqIGZ1enppbmcgbWF0ZXJpYWwuXG5cbk5vdywgbGV0IG1lIHJ1biB0aHJvdWdoIHRoZSBmdW5jdGlvbnMgdGhpcyBwYXRjaCBtb2RpZmllcyBvciBpbnRyb2R1Y2VzLiBJJ20gc2VlaW5nOlxuXG4xLiAgYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmBcbjIuICBgbG9vcF9jbGVhcl9saW1pdHNgXG4zLiAgYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWBcbjQuICBgX19sb29wX2Nscl9mZGBcbjUuICBgbG9fZmFsbG9jYXRlYCAoYW5kIEkgc2VlIGBsb29wX2NsZWFyX2xpbWl0c2AgaXMgY2FsbGVkIGhlcmUpXG42LiAgYGxvb3BfcmVtb3ZlYFxuNy4gIGBsb19mcmVlX2Rpc2tgXG5cbkkgc2hvdWxkIHJlYWxseSBkaWcgaW50byB3aGVyZSBgbG9vcF9jbGVhcl9saW1pdHNgIGlzIGNhbGxlZCB3aXRoaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYCB0byBzZWUgaG93IGl0J3MgYmVpbmcgdXNlZC4gVGhhdCdzIGdvaW5nIHRvIGJlIGtleSB0byBjcmFmdGluZyBlZmZlY3RpdmUgZnV6emluZyBzdHJhdGVnaWVzLiBJIGJldCB0aGVyZSBhcmUgc29tZSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlcmUgd2FpdGluZyB0byBiZSBkaXNjb3ZlcmVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDY0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6MzcuNDQ1ODQzMzAzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1Njc2MjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfY2xlYXJfbGltaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTIyMz1zdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyOTpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzMC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNjEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjYyOnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yNjk9c3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjkyLVxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI5MzpcXHRcXHRsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjk0LVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjA1Mj1zdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjEzMy1cXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vyb290Y2dfd29yaywgbG9vcF9yb290Y2dfd29ya2ZuKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTM0OlxcdElOSVRfV09SSyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxMzUtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmxvLVxcdTAwM2Vyb290Y2dfY21kX2xpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzozNy41MzE1MjI0OTlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzk4MDE0NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGxvX2ZhbGxvY2F0ZWAgYW5kIGl0cyBDYWxsZXJzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRvIHJlYWxseSBncmFzcCB3aGF0J3MgZ29pbmcgb24gaGVyZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gVGhlIHN0YXJ0aW5nIHBvaW50IGlzLCBuYXR1cmFsbHksIGBsb19mYWxsb2NhdGVgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoZSBsYXJnZXIgcGljdHVyZSwgc28gSSdtIGdvaW5nIHRvIGZvbGxvdyB0aGUgZnVuY3Rpb24gY2FsbHMuIEknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHdoZXJlIGl0J3MgY2FsbGVkIGZyb20g4oCTIHRoZSBpbW1lZGlhdGUgY2FsbGVycy4gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBUaGVuLCBpZiBuZWVkZWQsIEknbGwgZ28gZnVydGhlciB1cCB0aGUgc3RhY2ssIGFuZCBzZWUgaG93ICp0aGV5KiBhcmUgY2FsbGVkLiBJJ20gYWZ0ZXIgdGhlIGZ1bGwgY2FsbCBjaGFpbiwgdG9wIHRvIGJvdHRvbS4gVGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGBsb19mYWxsb2NhdGVgIGJlaW5nIGludm9rZWQuIFRoaXMgZ3JhbnVsYXIgZXhhbWluYXRpb24gd2lsbCBoZWxwIGluIHVuZGVyc3RhbmRpbmcgd2hhdCBjb3VsZCBiZSBjb250cmlidXRpbmcgdG8gd2hhdGV2ZXIgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzozOS45Mjk1Mzk0OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI2NTpcXHRcXHRhdG9taWNfb3IobW9kZSwgXFx1MDAyNmxvLVxcdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XFxuIDI2NjpcXHRcXHRzY2hlZHVsZV93b3JrKFxcdTAwMjZsby1cXHUwMDNlY2xlYXJfbGltaXRzX3dvcmspO1xcbiAyNjc6XFx0fVxcbiAyNjg6XFx0XFxuIDI2OTpcXHRzdGF0aWMgaW50IGxvX2ZhbGxvY2F0ZShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGxvZmZfdCBwb3MsXFxuIDI3MDpcXHRcXHRcXHRcXHRpbnQgbW9kZSlcXG4gMjcxOlxcdHtcXG4gMjcyOlxcdFxcdC8qXFxuIDI3MzpcXHRcXHQgKiBXZSB1c2UgZmFsbG9jYXRlIHRvIG1hbmlwdWxhdGUgdGhlIHNwYWNlIG1hcHBpbmdzIHVzZWQgYnkgdGhlIGltYWdlXFxuIDI3NDpcXHRcXHQgKiBhLmsuYS4gZGlzY2FyZC96ZXJvcmFuZ2UuXFxuIDI3NTpcXHRcXHQgKi9cXG4gMjc2OlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlID0gbG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZTtcXG4gMjc3OlxcdFxcdGludCByZXQ7XFxuIDI3ODpcXHRcXG4gMjc5OlxcdFxcdG1vZGUgfD0gRkFMTE9DX0ZMX0tFRVBfU0laRTtcXG4gMjgwOlxcdFxcbiAyODE6XFx0XFx0aWYgKCFiZGV2X21heF9kaXNjYXJkX3NlY3RvcnMobG8tXFx1MDAzZWxvX2RldmljZSkpXFxuIDI4MjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDI4MzpcXHRcXG4gMjg0OlxcdFxcdHJldCA9IGZpbGUtXFx1MDAzZWZfb3AtXFx1MDAzZWZhbGxvY2F0ZShmaWxlLCBtb2RlLCBwb3MsIGJsa19ycV9ieXRlcyhycSkpO1xcbiAyODU6XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVJTlZBTCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVPUE5PVFNVUFApKVxcbiAyODY6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIDI4NzpcXHRcXG4gMjg4OlxcdFxcdC8qXFxuIDI4OTpcXHRcXHQgKiBXZSBpbml0aWFsbHkgY29uZmlndXJlIHRoZSBsaW1pdHMgaW4gYSBob3BlIHRoYXQgZmFsbG9jYXRlIGlzXFxuIDI5MDpcXHRcXHQgKiBzdXBwb3J0ZWQgYW5kIGNsZWFyIHRoZW0gaGVyZSBpZiB0aGF0IHR1cm5zIG91dCBub3QgdG8gYmUgdHJ1ZS5cXG4gMjkxOlxcdFxcdCAqL1xcbiAyOTI6XFx0XFx0aWYgKHVubGlrZWx5KHJldCA9PSAtRU9QTk9UU1VQUCkpXFxuIDI5MzpcXHRcXHRcXHRsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSk7XFxuIDI5NDpcXHRcXG4gMjk1OlxcdFxcdHJldHVybiByZXQ7XFxuIDI5NjpcXHR9XFxuIDI5NzpcXHRcXG4gMjk4OlxcdHN0YXRpYyBpbnQgbG9fcmVxX2ZsdXNoKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCByZXF1ZXN0ICpycSlcXG4gMjk5OlxcdHtcXG4gMzAwOlxcdFxcdGludCByZXQgPSB2ZnNfZnN5bmMobG8tXFx1MDAzZWxvX2JhY2tpbmdfZmlsZSwgMCk7XFxuIDMwMTpcXHRcXHRpZiAodW5saWtlbHkocmV0IFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRUlOVkFMKSlcXG4gMzAyOlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdHJldHVybiByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjM5LjkyOTY4MjY0NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzkwODM4MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29kZSBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBsb29wIGRldmljZSBmdW5jdGlvbmFsaXR5IGlzIHdoZXJlIHRoZSBtb2RpZmljYXRpb25zIGxpZS4gSSd2ZSBnb3Q6XG5cbiogICBBIGJyYW5kIG5ldyBzdGF0aWMgd29yayBmdW5jdGlvbjogYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAuIEludGVyZXN0aW5nLCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byB0aGUgXCJjbGVhciBsaW1pdHNcIiBmdW5jdGlvbmFsaXR5LCBzbyBwZXJoYXBzIHRoaXMgaXMgYSByZWZhY3RvcmluZyBvciBvcHRpbWl6YXRpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIGFzcGVjdC5cbiogICBUaGVuIGEgc2VyaWVzIG9mIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQ6IGBsb29wX2NsZWFyX2xpbWl0c2AsIGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgLCBgX19sb29wX2Nscl9mZGAsIGBsb19mcmVlX2Rpc2tgLCBgbG9vcF9hZGRgLCBhbmQgYGxvb3BfcmVtb3ZlYC4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGNvcmUgZnVuY3Rpb25zLiBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCBhbmQgYF9fbG9vcF9jbHJfZmRgIGFyZSBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgYXMgdGhleSBsaWtlbHkgYXJlIGludm9sdmVkIGluIGRldmljZSBzZXR1cCBhbmQgdGVhcmRvd24sIGEgcGxhY2Ugd2hlcmUgYnVncyBhcmUgdHlwaWNhbGx5IGZvdW5kLiBgbG9fZmFsbG9jYXRlYCwgd2hpY2ggbm93IGNhbGxzIGBsb29wX2NsZWFyX2xpbWl0c2AsIGlzIGFsc28gd29ydGh5IG9mIHNjcnV0aW55OyBpdCdzIHBvc3NpYmxlIHRoaXMgY2hhbmdlIGlzIHJlbGF0ZWQgdG8gYWxsb2NhdGlvbiBvciBkaXNrIHNwYWNlIG1hbmFnZW1lbnQuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjYXN0IGEgd2lkZXIgbmV0LiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIHRoaXMgc3BlY2lmaWMgc2V0IGFuZCBsb29rIGF0IGFueSByZWxhdGVkIGxvb3AgaW9jdGwgYW5kIGNvbnRyb2wgZnVuY3Rpb25zIG9yIHRoZWlyIGNhbGxlcnMsIGVzcGVjaWFsbHkgYXJvdW5kIHRoZSBhcmVhcyB0b3VjaGVkIGJ5IGBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVgIGFuZCBgX19sb29wX2Nscl9mZGAuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgZ3JhcGggYXJvdW5kIHRoZXNlIHdpbGwgdGVsbCBhIGNvbXBsZXRlIHN0b3J5LiBJIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbG9vcCBkZXZpY2UgYXJjaGl0ZWN0dXJlIHRvIGZvcm0gYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDM4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6NDMuNzIwNTIzMjk0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQzMTU5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmM9NTEzPXN0YXRpYyBpbnQgbG9vcF92YWxpZGF0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTM3LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjUzODpzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtNTM5LXtcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTU3MD1zdGF0aWMgaW50IGxvb3BfY2hhbmdlX2ZkKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy02MjctXFx0bWFwcGluZ19zZXRfZ2ZwX21hc2sob2xkX2ZpbGUtXFx1MDAzZWZfbWFwcGluZywgbG8tXFx1MDAzZW9sZF9nZnBfbWFzayk7XFxuZHJpdmVycy9ibG9jay9sb29wLmM6NjI4OlxcdGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShsbywgZmlsZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtNjI5LVxcdGxvb3BfdXBkYXRlX2Rpbyhsbyk7XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0xMDI3PXN0YXRpYyBpbnQgbG9vcF9jb25maWd1cmUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgYmxrX21vZGVfdCBtb2RlLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEwNC1cXHRsby1cXHUwMDNlbG9fZGV2aWNlID0gYmRldjtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTA1OlxcdGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZShsbywgZmlsZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTEwNi1cXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTExNjE9c3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMTE3Mi1cXHQgKiBJbnZhbGlkYXRlIGFueSBwZW5kaW5nIGNsZWFyIHRoYXQgd2FzIHNjaGVkdWxlZCBhZ2FpbnN0IHRoZSBvbGRcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoxMTczOlxcdCAqIGJhY2tpbmcgZmlsZSwgbGlrZSBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoKSBkb2VzIG9uIHJlYmluZC5cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0xMTc0LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzo0My43NzA5NTg5OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc2MDkyNjYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgTG9vcCBCbG9jayBEZXZpY2UgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgbmFpbCBkb3duIHRoZSBiZXN0IGFwcHJvYWNoIGZvciBmdXp6aW5nIHRoaXMgbG9vcCBibG9jayBkZXZpY2UgZHJpdmVyLiBGaXJzdCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25z4oCUdGhlIGVudHJ5IHBvaW50cyBhbmQgZmVhdHVyZSBsb2dpYyB0aGF0IHdvdWxkIGJlIG1vc3QgaW50ZXJlc3RpbmcgdG8gdGFyZ2V0LiBJJ3ZlIHBpbnBvaW50ZWQgYSBsaXN0OiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCwgYGxvb3BfY2xlYXJfbGltaXRzYCwgYGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZWAsIGBfX2xvb3BfY2xyX2ZkYCwgYGxvX2ZhbGxvY2F0ZWAsIGBsb29wX2NoYW5nZV9mZGAsIGBsb29wX2NvbmZpZ3VyZWAsIGFuZCBgbG9vcF9yZW1vdmVgLiBEb3VibGUtY2hlY2tpbmcsIHllcywgdGhleSBhbGwgcmVzaWRlIGluIGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2AuXG5cbk5leHQsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9uIGlzIGluIHBsYWNlLiBgQkxLX0RFVl9MT09QYCBsb29rcyB0byBiZSB0aGUga2V5IGNvbmZpZyBhbmQgaXTigJlzIHN0YW5kYXJkLiBJIHF1aWNrbHkgc2Nhbm5lZCBgZHJpdmVycy9ibG9jay9LY29uZmlnYCwgYW5kLCB5ZXAsIG5vIG90aGVyIGRlcGVuZGVuY2llcyBqdW1wIG91dC5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhlIFwiV29ydGhGdXp6aW5nXCIgY3JpdGVyaWEuIFRoZSBsb29wIGRldmljZSBkcml2ZXIsIGxvY2F0ZWQgaW4gYGRyaXZlcnMvYmxvY2svbG9vcC5jYCwgaXMgZGVmaW5pdGVseSBhIGdvb2QgdGFyZ2V0LiBMb29wIGRldmljZXMgYXJlIGVhc3kgdG8gZ2V0IHRvIGluIGFueSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgYW5kIFN5emthbGxlciBpcyBwZXJmZWN0bHkgc3VpdGVkIHRvIHRlc3RpbmcgdGhlbS4gVGhlIHBhdGNoIGl0c2VsZiBpcyBpbnRyaWd1aW5nOiBpdCBhZGRzIGFzeW5jaHJvbm91cyBxdWV1ZSBsaW1pdCBjbGVhcmluZyB2aWEgYSB3b3JrcXVldWUuIFRoaXMgaW5jbHVkZXMgcXVldWUgZnJlZXppbmcgKGBibGtfbXFfZnJlZXplX3F1ZXVlYCksIGdlbmVyYXRpb24gY291bnRlcnMgKGByZWJpbmRfZ2VuYCwgYGNsZWFyX2xpbWl0c19nZW5gKSwgYXRvbWljIHRyYWNraW5nLCBhbmQgd29yayBjYW5jZWxsYXRpb24gZHVyaW5nIGRldmljZSBjbGVhbnVwLiBUaGlzIHBvaW50cyB0byBhIGxpa2VseSBzb3VyY2Ugb2YgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IGJldHdlZW4gYGxvb3BfY29uZmlndXJlYCwgYGNsZWFyX2ZkYCwgYGNoYW5nZV9mZGAsIGFuZCBgcmVxdWVzdCBmYWxsb2NhdGVgLiBJdOKAmXMgY29uY3VycmVudCwgcmVhY2hhYmxlLCBhbmQgY29tcGxleCwgc28gd29ydGggZnV6emluZyFcblxuT2theSwgdGltZSB0byBjcmFmdCB0aGUgcmVhc29uaW5nIGZvciB0aGUgcmVzdWx0cy4gVGhlIHBhdGNoIGZvY3VzZXMgb24gaW1wcm92aW5nIHRoZSB3YXkgdGhlIGRyaXZlciBjbGVhcnMgcXVldWUgbGltaXRzLiBJdCBpbnRyb2R1Y2VzIGEgc2FmZXIgbWV0aG9kIHVzaW5nIGEgd29yayBpdGVtIChgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCkgYW5kIGZyZWV6ZXMgdGhlIHF1ZXVlIHdpdGggYGJsa19tcV9mcmVlemVfcXVldWVgLiBUaGUgZ2VuZXJhdGlvbiBjb3VudGVycyBhbmQgYXRvbWljIG9wZXJhdGlvbnMgYXJlIGtleSB0byBoYW5kbGluZyByYWNlcyBiZXR3ZWVuIHJlYmluZGluZyBvcGVyYXRpb25zLiBJdCdzIGEgY2xhc3NpYyBjb25jdXJyZW5jeSBidWctaHVudGluZyBzY2VuYXJpby4gVGhlIGxvb3AgZGV2aWNlIGlzIHJlYWRpbHkgYWNjZXNzaWJsZSBpbiBjb21tb24gdmlydHVhbCBlbnZpcm9ubWVudHMgYW5kIGV4ZXJjaXNlcyBjb25jdXJyZW50IGRyaXZlciBzdGF0ZSBtYW5hZ2VtZW50LCBtYWtpbmcgaXQgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuTXkgRW5hYmxlQ29uZmlncyBpcyBqdXN0IFwiQkxLX0RFVl9MT09QXCIuIE15IEZvY3VzU3ltYm9scyBhcmUgdGhlIGZ1bmN0aW9ucyBJIGFscmVhZHkgbGlzdGVkIGJlZm9yZS5cblxuUmVhZHkuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ1MSwiT3V0cHV0VG9rZW5zIjoxNzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6NDkuNTMxODg3OTk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNDgxODMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX2NsZWFyX2xpbWl0c193b3JrZm5cIixcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzXCIsXG4gICAgXCJsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVcIixcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jaGFuZ2VfZmRcIixcbiAgICBcImxvb3BfY29uZmlndXJlXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgdG8gZGVmZXIgcXVldWUgbGltaXRzIGNsZWFyaW5nIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbikgc28gdGhlIHF1ZXVlIGNhbiBiZSBwcm9wZXJseSBmcm96ZW4gd2l0aCBibGtfbXFfZnJlZXplX3F1ZXVlLiBJdCBhZGRzIGdlbmVyYXRpb24gY291bnRlcnMgYW5kIGF0b21pYyBzdGF0ZSB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0IHJlYmluZC9jbGVhciBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGRyaXZlciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCTEtfREVWX0xPT1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsb29wX2NsZWFyX2xpbWl0c193b3JrZm5cIixcbiAgICBcImxvb3BfY2xlYXJfbGltaXRzXCIsXG4gICAgXCJsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGVcIixcbiAgICBcIl9fbG9vcF9jbHJfZmRcIixcbiAgICBcImxvX2ZhbGxvY2F0ZVwiLFxuICAgIFwibG9vcF9jaGFuZ2VfZmRcIixcbiAgICBcImxvb3BfY29uZmlndXJlXCIsXG4gICAgXCJsb29wX3JlbW92ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb29wIGJsb2NrIGRldmljZSBkcml2ZXIgdG8gZGVmZXIgcXVldWUgbGltaXRzIGNsZWFyaW5nIHRvIGEgd29ya3F1ZXVlIGl0ZW0gKGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbikgc28gdGhlIHF1ZXVlIGNhbiBiZSBwcm9wZXJseSBmcm96ZW4gd2l0aCBibGtfbXFfZnJlZXplX3F1ZXVlLiBJdCBhZGRzIGdlbmVyYXRpb24gY291bnRlcnMgYW5kIGF0b21pYyBzdGF0ZSB0byBzeW5jaHJvbml6ZSBhZ2FpbnN0IHJlYmluZC9jbGVhciBvcGVyYXRpb25zLiBUaGlzIGNoYW5nZXMgcmVhY2hhYmxlIGRyaXZlciBjb25jdXJyZW5jeSBhbmQgbGlmZWN5Y2xlIGhhbmRsaW5nLCBtYWtpbmcgaXQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6NDkuNjgyMzc2NzdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzA3NzY4NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6NDkuNjgyODg4Njk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTU3MDcyNTMxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBxdWV1ZSBsaW1pdHMgY2xlYXJpbmcgaW4gdGhlIGxvb3AgYmxvY2sgZHJpdmVyIChgZHJpdmVycy9ibG9jay9sb29wLmNgKSBieSBtb3ZpbmcgdGhlIGxpbWl0IHVwZGF0ZSBmcm9tIHRoZSByZXF1ZXN0IGV4ZWN1dGlvbiBjb250ZXh0IChgbG9fZmFsbG9jYXRlYCkgdG8gYSBkZWZlcnJlZCB3b3JrcXVldWUgaXRlbSAoYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmApLiBJdCBpbnRyb2R1Y2VzIGEgd29yayBzdHJ1Y3QgYW5kIGF0b21pYyBnZW5lcmF0aW9uIGNvdW50ZXJzIChgcmViaW5kX2dlbmAsIGBjbGVhcl9saW1pdHNfZ2VuYCwgYGNsZWFyX2xpbWl0c19tb2RlYCkgd2l0aGluIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHRvIHNhZmVseSBmcmVlemUgdGhlIHF1ZXVlIGFuZCBjb21taXQgbGltaXRzIHVwZGF0ZXMgYXN5bmNocm9ub3VzbHkgd2l0aG91dCByYWNlIGNvbmRpdGlvbnMgb24gYmFja2luZyBmaWxlIHJlYmluZGluZy5cXG5cXG5BbGwgYWRkZWQgZmllbGRzIGFyZSBhbGxvY2F0ZWQgYXMgcGFydCBvZiBgc3RydWN0IGxvb3BfZGV2aWNlYCB1c2luZyBga3phbGxvY19vYmpgIGFuZCBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgSU5JVF9XT1JLYC4gVGhlIGxvY2FsIHZhcmlhYmxlcyB3aXRoaW4gYGxvb3BfY2xlYXJfbGltaXRzX3dvcmtmbmAgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQsIGFuZCBubyBrZXJuZWwgZGF0YSBpcyBjb3BpZWQgb3IgZXhwb3NlZCB0byB1c2VyIHNwYWNlLiBQb3RlbnRpYWwgcmlza3Mgd2l0aCB0aGlzIHBhdGNoIHJlbGF0ZSB0byBjb25jdXJyZW5jeSwgcmFjZSBjb25kaXRpb25zLCBxdWV1ZSBsb2NraW5nL2ZyZWV6aW5nLCBhbmQgd29ya3F1ZXVlIGNhbmNlbGxhdGlvbiBsaWZldGltZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgZGVidWcgdG9vbHMgKEtBU0FOLCBMT0NLREVQKS4gU2luY2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5NjFhMWYyYTY5MzYxYWIyZGUyMTk4OTJjMTliMTZhOWU0MzYyMDVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMjowNzoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbG9vcC5jIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbmluZGV4IDZmMTI5NzYwMzViMDkuLjlmNmU1MThlNjBkMjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuY1xuKysrIGIvZHJpdmVycy9ibG9jay9sb29wLmNcbkBAIC02Nyw2ICs2NywxMCBAQCBzdHJ1Y3QgbG9vcF9kZXZpY2Uge1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgcm9vdGNnX2NtZF9saXN0O1xuIFx0c3RydWN0IGxpc3RfaGVhZCAgICAgICAgaWRsZV93b3JrZXJfbGlzdDtcbiBcdHN0cnVjdCByYl9yb290ICAgICAgICAgIHdvcmtlcl90cmVlO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0ICAgICAgY2xlYXJfbGltaXRzX3dvcms7XG4rXHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfbW9kZTtcbitcdGF0b21pY190XHRcdHJlYmluZF9nZW47XG4rXHRhdG9taWNfdFx0XHRjbGVhcl9saW1pdHNfZ2VuO1xuIFx0c3RydWN0IHRpbWVyX2xpc3QgICAgICAgdGltZXI7XG4gXHRib29sXHRcdFx0c3lzZnNfaW5pdGVkO1xuIFxuQEAgLTIyMiwyNiArMjI2LDQ0IEBAIHN0YXRpYyB2b2lkIGxvb3Bfc2V0X3NpemUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgbG9mZl90IHNpemUpXG4gXHRcdGtvYmplY3RfdWV2ZW50KFx1MDAyNmRpc2tfdG9fZGV2KGxvLVx1MDAzZWxvX2Rpc2spLVx1MDAzZWtvYmosIEtPQkpfQ0hBTkdFKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHMoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgaW50IG1vZGUpXG4rc3RhdGljIHZvaWQgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4rXHRzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID1cbitcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBsb29wX2RldmljZSwgY2xlYXJfbGltaXRzX3dvcmspO1xuIFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKTtcbi1cbi1cdGlmIChtb2RlIFx1MDAyNiBGQUxMT0NfRkxfWkVST19SQU5HRSlcbi1cdFx0bGltLm1heF93cml0ZV96ZXJvZXNfc2VjdG9ycyA9IDA7XG4tXG4tXHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcbi1cdFx0bGltLm1heF9od19kaXNjYXJkX3NlY3RvcnMgPSAwO1xuLVx0XHRsaW0uZGlzY2FyZF9ncmFudWxhcml0eSA9IDA7XG4tXHR9XG4rXHR1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7XG4rXHRpbnQgbW9kZSA9IDA7XG4gXG4gXHQvKlxuLVx0ICogWFhYOiB0aGlzIHVwZGF0ZXMgdGhlIHF1ZXVlIGxpbWl0cyB3aXRob3V0IGZyZWV6aW5nIHRoZSBxdWV1ZSwgd2hpY2hcbi1cdCAqIGlzIGFnYWluc3QgdGhlIGxvY2tpbmcgcHJvdG9jb2wgYW5kIGRhbmdlcm91cy4gIEJ1dCB3ZSBjYW4ndCBqdXN0XG4tXHQgKiBmcmVlemUgdGhlIHF1ZXVlIGFzIHdlJ3JlIGluc2lkZSB0aGUgLVx1MDAzZXF1ZXVlX3JxIG1ldGhvZCBoZXJlLiAgU28gdGhpc1xuLVx0ICogc2hvdWxkIG1vdmUgb3V0IGludG8gYSB3b3JrcXVldWUgdW5sZXNzIHdlIGdldCB0aGUgZmlsZSBvcGVyYXRpb25zIHRvXG4tXHQgKiBhZHZlcnRpc2UgaWYgdGhleSBzdXBwb3J0IHNwZWNpZmljIGZhbGxvY2F0ZSBvcGVyYXRpb25zLlxuK1x0ICogQ29tbWl0IHRoZSB1bm1vZGlmaWVkIGxpbWl0cyBpZiB0aGUgZGV2aWNlIHdhcyByZWJvdW5kIHNpbmNlXG4rXHQgKiB0aGUgd29yayBpdGVtIHdhcyBzY2hlZHVsZWQuICBUaGUgZnJlZXplIGV4Y2x1ZGVzIGEgcmViaW5kXG4rXHQgKiB0aHJvdWdoIGxvb3BfY2hhbmdlX2ZkKCksIHdoaWNoIGFzc2lnbnMgdGhlIG5ldyBiYWNraW5nIGZpbGVcbitcdCAqIHVuZGVyIHRoZSBmcmVlemU7IHRoZSBvdGhlciByZWJpbmRpbmcgcGF0aHMsIGxvb3BfY29uZmlndXJlKClcbitcdCAqIGFuZCBfX2xvb3BfY2xyX2ZkKCksIGRvIG5vdCBmcmVlemUgdGhlIHF1ZXVlLCBidXQgdGhleSBidW1wXG4rXHQgKiByZWJpbmRfZ2VuIGFuZCByZXNldCBjbGVhcl9saW1pdHNfbW9kZSB0aGVtc2VsdmVzLCBzbyB0aGVcbitcdCAqIGdlbmVyYXRpb24gY2hlY2sgYW5kIHRoZSBhdG9taWNfeGNoZygpIGJlbG93IGNvdmVyIHRoZW0uXG4gXHQgKi9cbitcdG1lbWZsYWdzID0gYmxrX21xX2ZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSk7XG4rXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bG8tXHUwMDNlY2xlYXJfbGltaXRzX2dlbikgPT0gYXRvbWljX3JlYWQoXHUwMDI2bG8tXHUwMDNlcmViaW5kX2dlbikpIHtcbitcdFx0bW9kZSA9IGF0b21pY194Y2hnKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbitcbitcdFx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9aRVJPX1JBTkdFKVxuK1x0XHRcdGxpbS5tYXhfd3JpdGVfemVyb2VzX3NlY3RvcnMgPSAwO1xuK1xuK1x0XHRpZiAobW9kZSBcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcbitcdFx0XHRsaW0ubWF4X2h3X2Rpc2NhcmRfc2VjdG9ycyA9IDA7XG4rXHRcdFx0bGltLmRpc2NhcmRfZ3JhbnVsYXJpdHkgPSAwO1xuK1x0XHR9XG4rXHR9XG4gXHRxdWV1ZV9saW1pdHNfY29tbWl0X3VwZGF0ZShsby1cdTAwM2Vsb19xdWV1ZSwgXHUwMDI2bGltKTtcbitcdGJsa19tcV91bmZyZWV6ZV9xdWV1ZShsby1cdTAwM2Vsb19xdWV1ZSwgbWVtZmxhZ3MpO1xuK31cbitcbitzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0cyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgbW9kZSlcbit7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19nZW4sIGF0b21pY19yZWFkKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pKTtcbitcdGF0b21pY19vcihtb2RlLCBcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSk7XG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiB9XG4gXG4gc3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxuQEAgLTUxNiw2ICs1MzgsOCBAQCBzdGF0aWMgaW50IGxvb3BfdmFsaWRhdGVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldilcbiBzdGF0aWMgdm9pZCBsb29wX2Fzc2lnbl9iYWNraW5nX2ZpbGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IGZpbGUgKmZpbGUpXG4ge1xuIFx0bG8tXHUwMDNlbG9fYmFja2luZ19maWxlID0gZmlsZTtcbitcdGF0b21pY19pbmMoXHUwMDI2bG8tXHUwMDNlcmViaW5kX2dlbik7XG4rXHRhdG9taWNfc2V0KFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c19tb2RlLCAwKTtcbiBcdGxvLVx1MDAzZW9sZF9nZnBfbWFzayA9IG1hcHBpbmdfZ2ZwX21hc2soZmlsZS1cdTAwM2VmX21hcHBpbmcpO1xuIFx0bWFwcGluZ19zZXRfZ2ZwX21hc2soZmlsZS1cdTAwM2VmX21hcHBpbmcsXG4gXHRcdFx0bG8tXHUwMDNlb2xkX2dmcF9tYXNrIFx1MDAyNiB+KF9fR0ZQX0lPIHwgX19HRlBfRlMpKTtcbkBAIC0xMTQ0LDYgKzExNjgsMTIgQEAgc3RhdGljIHZvaWQgX19sb29wX2Nscl9mZChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvKVxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZsby1cdTAwM2Vsb19sb2NrKTtcbiBcdGZpbHAgPSBsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGU7XG4gXHRsby1cdTAwM2Vsb19iYWNraW5nX2ZpbGUgPSBOVUxMO1xuK1x0LypcbitcdCAqIEludmFsaWRhdGUgYW55IHBlbmRpbmcgY2xlYXIgdGhhdCB3YXMgc2NoZWR1bGVkIGFnYWluc3QgdGhlIG9sZFxuK1x0ICogYmFja2luZyBmaWxlLCBsaWtlIGxvb3BfYXNzaWduX2JhY2tpbmdfZmlsZSgpIGRvZXMgb24gcmViaW5kLlxuK1x0ICovXG4rXHRhdG9taWNfaW5jKFx1MDAyNmxvLVx1MDAzZXJlYmluZF9nZW4pO1xuK1x0YXRvbWljX3NldChcdTAwMjZsby1cdTAwM2VjbGVhcl9saW1pdHNfbW9kZSwgMCk7XG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXG4gXHRsby1cdTAwM2Vsb19kZXZpY2UgPSBOVUxMO1xuQEAgLTE3ODEsNiArMTgxMSw3IEBAIHN0YXRpYyB2b2lkIGxvX2ZyZWVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaylcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUobG8tXHUwMDNld29ya3F1ZXVlKTtcbiBcdGxvb3BfZnJlZV9pZGxlX3dvcmtlcnMobG8sIHRydWUpO1xuIFx0dGltZXJfc2h1dGRvd25fc3luYyhcdTAwMjZsby1cdTAwM2V0aW1lcik7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbiBcdG11dGV4X2Rlc3Ryb3koXHUwMDI2bG8tXHUwMDNlbG9fbXV0ZXgpO1xuIFx0a2ZyZWUobG8pO1xuIH1cbkBAIC0yMTAwLDYgKzIxMzEsNyBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bG8tXHUwMDNlbG9fbG9jayk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZsby1cdTAwM2Vsb193b3JrX2xvY2spO1xuIFx0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZXJvb3RjZ193b3JrLCBsb29wX3Jvb3RjZ193b3JrZm4pO1xuK1x0SU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2bG8tXHUwMDNlcm9vdGNnX2NtZF9saXN0KTtcbiBcdGRpc2stXHUwMDNlbWFqb3JcdFx0PSBMT09QX01BSk9SO1xuIFx0ZGlzay1cdTAwM2VmaXJzdF9taW5vclx0PSBpIFx1MDAzY1x1MDAzYyBwYXJ0X3NoaWZ0O1xuQEAgLTIxMzgsNiArMjE3MCwxMCBAQCBzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxuIFxuIHN0YXRpYyB2b2lkIGxvb3BfcmVtb3ZlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pXG4ge1xuK1x0LyogQ2FuY2VsIGVhcmx5OiB0aGUgcXVldWUgbWF5IGJlIGluIFJDVS1kZWxheWVkIGZyZWVpbmdcbitcdCAqIGJ5IHRoZSB0aW1lIGxvX2ZyZWVfZGlzaygpIHJ1bnMuICovXG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcbitcbiBcdC8qIE1ha2UgdGhpcyBsb29wIGRldmljZSB1bnJlYWNoYWJsZSBmcm9tIHBhdGhuYW1lLiAqL1xuIFx0ZGVsX2dlbmRpc2sobG8tXHUwMDNlbG9fZGlzayk7XG4gXHRibGtfbXFfZnJlZV90YWdfc2V0KFx1MDAyNmxvLVx1MDAzZXRhZ19zZXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDc6NDkuNjgyODg5ODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEyNTA1NzM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvb3AgRGV2aWNlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgZm9jdXNlZCBvbiB3aGV0aGVyIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIHRoZSBtb3JlIHJpZ29yb3VzIEtNU0FOIGFuYWx5c2lzIG9yIGlmIHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQIHdpbGwgYmUgc3VmZmljaWVudC4gVGhlIHRhcmdldCBpcyBgZHJpdmVycy9ibG9jay9sb29wLmNgLCBhbmQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IHRoZSBibG9jayBkZXZpY2UncyBsaW1pdHMgYXJlIGNsZWFyZWQgYW5kIHVwZGF0ZWQsIGFuZCB0aGUgd2F5IHRoZSBsb29wIGRldmljZSBpcyB1cGRhdGVkIHdoZW4gaXQgaXMgcmVib3VuZCB0byBhIGJhY2tpbmcgZmlsZS5cblxuVGhlIHBhdGNoIGludHJvZHVjZXMgYSBgc3RydWN0IHdvcmtfc3RydWN0IGNsZWFyX2xpbWl0c193b3JrYCwgc29tZSBhdG9taWMgZmllbGRzIChgY2xlYXJfbGltaXRzX21vZGVgLCBgcmViaW5kX2dlbmAsIGBjbGVhcl9saW1pdHNfZ2VuYCkgd2l0aGluIHRoZSBgc3RydWN0IGxvb3BfZGV2aWNlYC4gVGhlIHByb2JsZW1hdGljIGBsb29wX2NsZWFyX2xpbWl0c2AgZnVuY3Rpb24gaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIGRlZmVycmVkIHdvcmsgZnVuY3Rpb24sIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gLiBUaGlzIHdvcmsgZnVuY3Rpb24gbm93IHByb3Blcmx5IGZyZWV6ZXMgYW5kIHVuZnJlZXplcyB0aGUgYmxvY2sgcXVldWUgdXNpbmcgdGhlIGJsb2NrIGxheWVyJ3Mgc3RhbmRhcmQgbWV0aG9kcyAoYGJsa19tcV9mcmVlemVfcXVldWVgLCBldGMuKSBkdXJpbmcgdGhlIGxpbWl0IHVwZGF0ZSwgd2hpY2ggaXMgYSBnb29kIHNhZmV0eSBtZWFzdXJlLlxuXG5UaGVyZSdzIHRoaXMgbmV3IGdlbmVyYXRpb24gY291bnRlciBzZXR1cC4gVGhlIHBhdGNoIGFkZHMgdGhlc2UgYHJlYmluZF9nZW5gIGFuZCBgY2xlYXJfbGltaXRzX2dlbmAgYXRvbWljIG9wZXJhdGlvbnMgdG8gdGhlIGxvb3AgZGV2aWNlIHN0cnVjdHVyZS4gVGhlc2UgZ2VuZXJhdGlvbiBjb3VudGVycyBhcmUgYSBnb29kIGluZGljYXRvciB0aGF0IHRoZSBpbnRlbnRpb24gaXMgdG8gYXZvaWQgcmFjZXMgaW4gY2xlYXJpbmcgbGltaXRzIHdoaWxlIHJlYmluZGluZyB0aGUgYmFja2luZyBmaWxlLiBgbG9vcF9hc3NpZ25fYmFja2luZ19maWxlYCwgYW5kIGBfX2xvb3BfY2xyX2ZkYCBhcmUgdXBkYXRlZCB3aXRoIHRoZSBnZW5lcmF0aW9uIGFuZCBjbGVhciBtb2RlLCBzbyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRob3NlLiBXb3JrIGlzIGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AgaW4gYGxvb3BfYWRkYCwgYW5kIGNsZWFuZWQgdXAgdXNpbmcgYGNhbmNlbF93b3JrX3N5bmNgIGluIGBsb19mcmVlX2Rpc2tgIGFuZCBgbG9vcF9yZW1vdmVgIHdoaWNoIGlzIGFsc28gZ29vZCB0byBzZWUuXG5cbk5vdywgbXkgcHJpbWFyeSBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzcy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmb2xsb3dpbmc6XG5cbjEuICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2Vyc3BhY2Ugd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhhdCdzIGEgY2xhc3NpYyBLTVNBTiBpc3N1ZS4gSSBkb24ndCBzZWUgYW55IG9idmlvdXMgc3RydWN0dXJlcyBiZWluZyBsZWFrZWQgZGlyZWN0bHkgdG8gdXNlcnNwYWNlIGZyb20gdGhpcywgYnV0IEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIHJlbGV2YW50IGRhdGEgc3RydWN0dXJlcyB0byBjb25maXJtLlxuMi4gIEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgdGhhdCBkZXBlbmQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IFRoZSBgYXRvbWljX3RgIHZhcmlhYmxlcyAoYGNsZWFyX2xpbWl0c19tb2RlYCwgYHJlYmluZF9nZW5gLCBgY2xlYXJfbGltaXRzX2dlbmApIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCBhcmUgYSBwb3RlbnRpYWwgYXJlYSBvZiBjb25jZXJuLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgc3RydWN0IGxvb3BfZGV2aWNlYCBpcyBhbGxvY2F0ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgYXRvbWljcyBhcmUgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBJbiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCwgYGxpbWAgaXMgaW5pdGlhbGl6ZWQgdmlhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlYCwgd2hpY2ggc2hvdWxkIGJlIGZpbmUuIFRoZSBgbW9kZWAgbG9jYWwgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgdG8gMCB3aGljaCBpcyBzYWZlLlxuMy4gIFRoZSBhbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyByZXF1aXJlcyBhZGRpdGlvbmFsIHJldmlldy5cbjQuICBBbmQgb2YgY291cnNlLCBzdGFuZGFyZCBib3VuZHMgY2hlY2tzIGFuZCBidWZmZXIgbGVuZ3Rocy5cblxuTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBsb29wX2FkZGAgYW5kIGhvdyBgc3RydWN0IGxvb3BfZGV2aWNlYCBpcyBhbGxvY2F0ZWQgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgaW5pdGlhbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzo1NS44MDc5NTA0NzhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjMxOTcyNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3phbGxvYy4qbG9vcF9kZXZpY2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjU1LjkzMDI3OTkwM1oiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzc0MjM1Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIGBsb2AgQWxsb2NhdGlvbiBpbiBgbG9vcF9hZGRgKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGxvb3BfYWRkYCBmdW5jdGlvbi4gTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgdGhlIHZhcmlhYmxlIGBsb2AuIEkgbmVlZCB0byBwcmVjaXNlbHkgdW5kZXJzdGFuZCBob3cgbWVtb3J5IGlzIGJlaW5nIG1hbmFnZWQgZm9yIGBsb2AgKndpdGhpbiogdGhhdCBsb29wJ3MgY29udGV4dC4gSXMgaXQgYmVpbmcgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBlYWNoIGl0ZXJhdGlvbj8gSXMgdGhlcmUgYW55IGNoYW5jZSBvZiBpdCBiZWluZyBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXI/IElmIGl0ICppcyogb24gdGhlIHN0YWNrLCBpcyB0aGVyZSBhbnkgcG90ZW50aWFsIGZvciBzdGFjayBvdmVyZmxvdyB2dWxuZXJhYmlsaXRpZXMgZGVwZW5kaW5nIG9uIHRoZSBsb29wJ3MgYm91bmRzIGFuZCB0aGUgc2l6ZSBvZiBgbG9gJ3MgdHlwZT9cblxuSSBpbW1lZGlhdGVseSB3YW50IHRvIGFzc2VzcyB0aGUgbWVtb3J5IGltcGxpY2F0aW9ucy4gSSdtIHRoaW5raW5nIGFib3V0IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyB0b28sIGJ1dCBtZW1vcnkgdXNhZ2UgaXMgcHJpbWFyeSByaWdodCBub3cuIElmIGl0J3Mgb24gdGhlIGhlYXAsIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGluZGljYXRpb25zIG9mIGxlYWtzIG9yIGluZWZmaWNpZW50IGdhcmJhZ2UgY29sbGVjdGlvbiwgZGVwZW5kaW5nIG9uIHRoZSBsYW5ndWFnZSB3ZSBhcmUgdXNpbmcgYW5kIHdoYXQgYGxvYCBpcy4gSWYgaXQncyBhIGdsb2JhbCwgdGhlbiBJJ2xsIGJlIGNoZWNraW5nIGl0cyBzY29wZS5cblxuSSdtIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggdGhlIGNvZGUsIGxvb2tpbmcgZm9yIGFueSBjb25kaXRpb25hbCByZS1hc3NpZ25tZW50cyBvciBjaGFuZ2VzIHRvIHRoZSB2YWx1ZSB0aGF0IG1pZ2h0IGltcGFjdCBpdHMgc2l6ZSBvciBtZW1vcnkgZm9vdHByaW50LiBUaGlzIGlzIHRoZSBjcml0aWNhbCBqdW5jdHVyZTsgc21hbGwgZGV0YWlscyBoZXJlIGNhbiBtYWtlIG9yIGJyZWFrIHRoZSBwcm9ncmFtJ3MgZWZmaWNpZW5jeSBhbmQgcm9idXN0bmVzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAyOjA3OjU4LjMwNDUxODA5MVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMzY0NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfYWRkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTIwNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBibGtfbXFfb3BzIGxvb3BfbXFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA1MS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMDUyOnN0YXRpYyBpbnQgbG9vcF9hZGQoaW50IGkpXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjA1My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yMTg5PXN0YXRpYyB2b2lkIGxvb3BfcHJvYmUoZGV2X3QgZGV2KVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjE5NC1cXHRcXHRyZXR1cm47XFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjE5NTpcXHRsb29wX2FkZChpZHgpO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxOTYtfVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjI0OD1zdGF0aWMgaW50IGxvb3BfY29udHJvbF9nZXRfZnJlZShpbnQgaWR4KVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI2NS1cXHRtdXRleF91bmxvY2soXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjY2OlxcdHJldHVybiBsb29wX2FkZCgtMSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI2Ny1mb3VuZDpcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jPTIyNzI9c3RhdGljIGxvbmcgbG9vcF9jb250cm9sX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI3Ni1cXHRjYXNlIExPT1BfQ1RMX0FERDpcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMjc3OlxcdFxcdHJldHVybiBsb29wX2FkZChwYXJtKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMjc4LVxcdGNhc2UgTE9PUF9DVExfUkVNT1ZFOlxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjMwND1zdGF0aWMgaW50IF9faW5pdCBsb29wX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzNDUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG1heF9sb29wOyBpKyspXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjM0NjpcXHRcXHRsb29wX2FkZChpKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yMzQ3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowNzo1OC40MDY4ODU1NjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI2Mzk0NTYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcHJvY2Vzc2luZyB0aGUgcmVxdWVzdDpcblxuKipBbmFseXppbmcgdGhlIENvZGUgU25pcHBldDogYGxvb3BfYWRkYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGl0LiBUaGUgZGlyZWN0aXZlIGlzIGNsZWFyIOKAkyBJIG5lZWQgdG8gZm9jdXMgb24gYSBmdW5jdGlvbiBuYW1lZCBgbG9vcF9hZGRgLCBhbmQgaXQgc2VlbXMgdG8gYmUgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDIwNTIuIFRoZSBzdWdnZXN0ZWQgdG9vbCBpcyBgcmVhZC1maWxlYCwgc28gcHJlc3VtYWJseSwgSSdsbCBiZSB1c2luZyB0aGF0IHRvIGV4dHJhY3QgdGhlIHJlbGV2YW50IHNlY3Rpb24gZnJvbSB0aGUgc291cmNlIGNvZGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0IG9mIHRoYXQgbGluZS4gTGluZSBudW1iZXJzIGFyZSwgb2YgY291cnNlLCByZWxhdGl2ZSB0byB0aGUgZmlsZS4gU28sIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgbGluZSAyMDUyIGNvdWxkIGJlIGluIHRoZSBtaWRkbGUsIHRoZSBlbmQsIG9yIG5lYXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgZnVuY3Rpb24uIEknbGwgcmVhZCB0aGUgY29kZSBzdXJyb3VuZGluZyB0aGF0IGxpbmUgYW5kIHVzZSB0aGUgY29udGV4dCB0byBnZXQgYSBncmFzcCBvZiB3aGF0J3MgZ29pbmcgb24uIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gdGhlIGZ1bmN0aW9u4oCZcyBwdXJwb3NlOiB3aGF0IGl0IHRha2VzIGFzIGlucHV0LCB3aGF0IGl0IG91dHB1dHMsIGFuZCBpbXBvcnRhbnRseSwgdGhlICp3aHkqIGJlaGluZCBpdHMgZXhpc3RlbmNlLiBJIHdpbGwgaGF2ZSB0aGUgY29udGV4dCB0aGF0IGlzIG5lZWRlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjgxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDg6MDAuNjcwODMzNFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg4NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9ibG9jay9sb29wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA1MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA1MjpcXHRzdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbjIwNTM6XFx0e1xcbjIwNTQ6XFx0XFx0c3RydWN0IHF1ZXVlX2xpbWl0cyBsaW0gPSB7XFxuMjA1NTpcXHRcXHRcXHQvKlxcbjIwNTY6XFx0XFx0XFx0ICogUmFuZG9tIG51bWJlciBwaWNrZWQgZnJvbSB0aGUgaGlzdG9yaWMgYmxvY2sgbWF4X3NlY3RvcnMgY2FwLlxcbjIwNTc6XFx0XFx0XFx0ICovXFxuMjA1ODpcXHRcXHRcXHQubWF4X2h3X3NlY3RvcnNcXHRcXHQ9IDI1NjB1LFxcbjIwNTk6XFx0XFx0fTtcXG4yMDYwOlxcdFxcdHN0cnVjdCBsb29wX2RldmljZSAqbG87XFxuMjA2MTpcXHRcXHRzdHJ1Y3QgZ2VuZGlzayAqZGlzaztcXG4yMDYyOlxcdFxcdGludCBlcnI7XFxuMjA2MzpcXHRcXG4yMDY0OlxcdFxcdGVyciA9IC1FTk9NRU07XFxuMjA2NTpcXHRcXHRsbyA9IGt6YWxsb2Nfb2JqKCpsbyk7XFxuMjA2NjpcXHRcXHRpZiAoIWxvKVxcbjIwNjc6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjA2ODpcXHRcXHRsby1cXHUwMDNld29ya2VyX3RyZWUgPSBSQl9ST09UO1xcbjIwNjk6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmxvLVxcdTAwM2VpZGxlX3dvcmtlcl9saXN0KTtcXG4yMDcwOlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZsby1cXHUwMDNldGltZXIsIGxvb3BfZnJlZV9pZGxlX3dvcmtlcnNfdGltZXIsIFRJTUVSX0RFRkVSUkFCTEUpO1xcbjIwNzE6XFx0XFx0V1JJVEVfT05DRShsby1cXHUwMDNlbG9fc3RhdGUsIExvX3VuYm91bmQpO1xcbjIwNzI6XFx0XFxuMjA3MzpcXHRcXHRlcnIgPSBtdXRleF9sb2NrX2tpbGxhYmxlKFxcdTAwMjZsb29wX2N0bF9tdXRleCk7XFxuMjA3NDpcXHRcXHRpZiAoZXJyKVxcbjIwNzU6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9kZXY7XFxuMjA3NjpcXHRcXG4yMDc3OlxcdFxcdC8qIGFsbG9jYXRlIGlkLCBpZiBAaWQgXFx1MDAzZT0gMCwgd2UncmUgcmVxdWVzdGluZyB0aGF0IHNwZWNpZmljIGlkICovXFxuMjA3ODpcXHRcXHRpZiAoaSBcXHUwMDNlPSAwKSB7XFxuMjA3OTpcXHRcXHRcXHRlcnIgPSBpZHJfYWxsb2MoXFx1MDAyNmxvb3BfaW5kZXhfaWRyLCBsbywgaSwgaSArIDEsIEdGUF9LRVJORUwpO1xcbjIwODA6XFx0XFx0XFx0aWYgKGVyciA9PSAtRU5PU1BDKVxcbjIwODE6XFx0XFx0XFx0XFx0ZXJyID0gLUVFWElTVDtcXG4yMDgyOlxcdFxcdH0gZWxzZSB7XFxuMjA4MzpcXHRcXHRcXHRlcnIgPSBpZHJfYWxsb2MoXFx1MDAyNmxvb3BfaW5kZXhfaWRyLCBsbywgMCwgMCwgR0ZQX0tFUk5FTCk7XFxuMjA4NDpcXHRcXHR9XFxuMjA4NTpcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmxvb3BfY3RsX211dGV4KTtcXG4yMDg2OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjIwODc6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9kZXY7XFxuMjA4ODpcXHRcXHRpID0gZXJyO1xcbjIwODk6XFx0XFxuMjA5MDpcXHRcXHRsby1cXHUwMDNldGFnX3NldC5vcHMgPSBcXHUwMDI2bG9vcF9tcV9vcHM7XFxuMjA5MTpcXHRcXHRsby1cXHUwMDNldGFnX3NldC5ucl9od19xdWV1ZXMgPSAxO1xcbjIwOTI6XFx0XFx0bG8tXFx1MDAzZXRhZ19zZXQucXVldWVfZGVwdGggPSBod19xdWV1ZV9kZXB0aDtcXG4yMDkzOlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0Lm51bWFfbm9kZSA9IE5VTUFfTk9fTk9ERTtcXG4yMDk0OlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0LmNtZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBsb29wX2NtZCk7XFxuMjA5NTpcXHRcXHRsby1cXHUwMDNldGFnX3NldC5mbGFncyA9IEJMS19NUV9GX1NUQUNLSU5HIHwgQkxLX01RX0ZfTk9fU0NIRURfQllfREVGQVVMVDtcXG4yMDk2OlxcdFxcdGxvLVxcdTAwM2V0YWdfc2V0LmRyaXZlcl9kYXRhID0gbG87XFxuMjA5NzpcXHRcXG4yMDk4OlxcdFxcdGVyciA9IGJsa19tcV9hbGxvY190YWdfc2V0KFxcdTAwMjZsby1cXHUwMDNldGFnX3NldCk7XFxuMjA5OTpcXHRcXHRpZiAoZXJyKVxcbjIxMDA6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9pZHI7XFxuMjEwMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDg6MDAuNjcwOTkzNTA5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5NjEwOTgwNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMb29wIERldmljZSBJbml0aWFsaXphdGlvbiBhbmQgTGltaXQgQ2xlYXJpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIGBsb29wX2RldmljZWAgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkIGFuZCBob3cgaXRzIHF1ZXVlIGxpbWl0cyBhcmUgaGFuZGxlZC4gVGhlIGNvZGUgc3RhcnRzIHdpdGggYSBga3phbGxvY19vYmooKmxvKTtgIGNhbGwsIHdoaWNoIG1lYW5zIGFsbCB0aGUgZmllbGRzIGluIHRoZSBuZXdseSBhbGxvY2F0ZWQgYHN0cnVjdCBsb29wX2RldmljZWAgYXJlIGd1YXJhbnRlZWQgdG8gYmUgemVyby1pbml0aWFsaXplZC4gR29vZCBwcmFjdGljZSwgYWx3YXlzLiBUaGlzIGluY2x1ZGVzIHRob3NlIG5ld2VyIGZpZWxkcyBsaWtlIGBjbGVhcl9saW1pdHNfd29ya2AsIGBjbGVhcl9saW1pdHNfbW9kZWAsIGByZWJpbmRfZ2VuYCwgYW5kIGBjbGVhcl9saW1pdHNfZ2VuYC4gVGhhdCB6ZXJvLWluaXRpYWxpemF0aW9uIGlzIGNydWNpYWwuXG5cblRoZW4sIGluIHRoZSBgbG9vcF9hZGRgIGZ1bmN0aW9uLCBJIHNlZSBgSU5JVF9XT1JLKFx1MDAyNmxvLVx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO2Agd2hpY2ggaXMgc2V0dGluZyB1cCBhIHdvcmsgcXVldWUgZW50cnkuIFRoaXMgc3VnZ2VzdHMgdGhhdCBjbGVhcmluZyBsaW1pdHMgaXMgZGVmZXJyZWQsIGhhbmRsZWQgYXN5bmNocm9ub3VzbHkuIE1ha2VzIHNlbnNlIHRvIGF2b2lkIGJsb2NraW5nLlxuXG5Ob3csIGRpdmluZyBpbnRvIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gLCBpdCBnZXRzIGludGVyZXN0aW5nLiBXZSBraWNrIG9mZiBhIGBxdWV1ZV9saW1pdHNfc3RhcnRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlKWAgdG8gb2J0YWluIGEgc25hcHNob3Qgb3IgY29weSBvZiB0aGUgY3VycmVudCBxdWV1ZSBsaW1pdHMsIHdoaWNoIGlzIHN0b3JlZCBpbiB0aGUgYGxpbWAgc3RydWN0LiBUaGUgYG1vZGVgIGlzIGluaXRpYWxpemVkIHRvIDAgYW5kIGF0b21pY2FsbHkgY2hhbmdlZC4gVGhpcyBpcyBhIGNydWNpYWwgcmVhZC9tb2RpZnkvd3JpdGUgb3BlcmF0aW9uIG9uIHRoZSBxdWV1ZSBsaW1pdHMsIEkgd2FudCB0byBzZWUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiAgRmluYWxseSwgYHF1ZXVlX2xpbWl0c19jb21taXRfdXBkYXRlKGxvLVx1MDAzZWxvX3F1ZXVlLCBcdTAwMjZsaW0pYCBhcHBsaWVzIGFueSBjaGFuZ2VzIGJhY2sgdG8gdGhlIHF1ZXVlIGxpbWl0cy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyB2YWx1ZXMgdGhpcyBhdG9taWMgZXhjaGFuZ2UgaXMgc2V0dGluZy4gV2hhdCBpcyB0aGUgb3ZlcmFsbCBsaW1pdCBjbGVhcmluZyBzdHJhdGVneT8gVGhlIGRvY3VtZW50YXRpb24gd2lsbCBiZSBrZXkgaGVyZS4gQWxzbywgSSBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBsb29wX2NsZWFyX2xpbWl0c2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZW4gdGhpcyBsaW1pdCBjbGVhcmluZyBtZWNoYW5pc20gaXMgYmVpbmcgdHJpZ2dlcmVkLCBhbmQgd2h5IGl0J3MgbmVjZXNzYXJ5LiBMZXQgbWUgc2VlIHdoZXJlIGVsc2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowODowNC42MzIwOTQ3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3NDI5Mzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxvb3BfY2xlYXJfbGltaXRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svbG9vcC5jPTIyMz1zdGF0aWMgdm9pZCBsb29wX3NldF9zaXplKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGxvZmZfdCBzaXplKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjI4LVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjIyOTpzdGF0aWMgdm9pZCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIzMC17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYy0yNjEtXFxuZHJpdmVycy9ibG9jay9sb29wLmM6MjYyOnN0YXRpYyB2b2lkIGxvb3BfY2xlYXJfbGltaXRzKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBtb2RlKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTI2My17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYz0yNjk9c3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjkyLVxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxcbmRyaXZlcnMvYmxvY2svbG9vcC5jOjI5MzpcXHRcXHRsb29wX2NsZWFyX2xpbWl0cyhsbywgbW9kZSk7XFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjk0LVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmM9MjA1Mj1zdGF0aWMgaW50IGxvb3BfYWRkKGludCBpKVxcbi0tXFxuZHJpdmVycy9ibG9jay9sb29wLmMtMjEzMy1cXHRJTklUX1dPUksoXFx1MDAyNmxvLVxcdTAwM2Vyb290Y2dfd29yaywgbG9vcF9yb290Y2dfd29ya2ZuKTtcXG5kcml2ZXJzL2Jsb2NrL2xvb3AuYzoyMTM0OlxcdElOSVRfV09SSyhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrLCBsb29wX2NsZWFyX2xpbWl0c193b3JrZm4pO1xcbmRyaXZlcnMvYmxvY2svbG9vcC5jLTIxMzUtXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmxvLVxcdTAwM2Vyb290Y2dfY21kX2xpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowODowNC44Nzk1MzAzMloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODA1NzE4Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBsb19mYWxsb2NhdGVgIGFuZCBDb250ZXh0KipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBsb19mYWxsb2NhdGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBvdXQgYW5kIGxvb2sgYXQgaXRzIGltbWVkaWF0ZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgYmVpbmcgKmNhbGxlZCosIHdoYXQgcGFyYW1ldGVycyBhcmUgYmVpbmcgcGFzc2VkLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCAqZ29hbCogb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaXMuIElzIGl0IGJlaW5nIHVzZWQgZm9yIHByZS1hbGxvY2F0aW9uLCBzcGFyc2UgZmlsZSBjcmVhdGlvbiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgd2l0aGluIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsaW5nIGNvbnRleHQgd2lsbCBxdWlja2x5IHJldmVhbCB0aGUgY29yZSBpbnRlbnQgYW5kIHBvdGVudGlhbCBhcmVhcyBmb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgdW5leHBlY3RlZCBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gd2hhdCB0aGUgdW5kZXJseWluZyBzdG9yYWdlIG1lY2hhbmlzbSBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGZhbGxvY2F0ZSBjYWxsLiBJIGFsc28gbmVlZCB0byB2ZXJpZnkgZXJyb3IgaGFuZGxpbmcgZm9yIGZhbGxvY2F0ZSBhbmQgc3Vic2VxdWVudCBvcGVyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODMxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDg6MDcuNjg1MjUwOTk5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2Jsb2NrL2xvb3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNjUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNjU6XFx0XFx0YXRvbWljX29yKG1vZGUsIFxcdTAwMjZsby1cXHUwMDNlY2xlYXJfbGltaXRzX21vZGUpO1xcbiAyNjY6XFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2bG8tXFx1MDAzZWNsZWFyX2xpbWl0c193b3JrKTtcXG4gMjY3OlxcdH1cXG4gMjY4OlxcdFxcbiAyNjk6XFx0c3RhdGljIGludCBsb19mYWxsb2NhdGUoc3RydWN0IGxvb3BfZGV2aWNlICpsbywgc3RydWN0IHJlcXVlc3QgKnJxLCBsb2ZmX3QgcG9zLFxcbiAyNzA6XFx0XFx0XFx0XFx0aW50IG1vZGUpXFxuIDI3MTpcXHR7XFxuIDI3MjpcXHRcXHQvKlxcbiAyNzM6XFx0XFx0ICogV2UgdXNlIGZhbGxvY2F0ZSB0byBtYW5pcHVsYXRlIHRoZSBzcGFjZSBtYXBwaW5ncyB1c2VkIGJ5IHRoZSBpbWFnZVxcbiAyNzQ6XFx0XFx0ICogYS5rLmEuIGRpc2NhcmQvemVyb3JhbmdlLlxcbiAyNzU6XFx0XFx0ICovXFxuIDI3NjpcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGU7XFxuIDI3NzpcXHRcXHRpbnQgcmV0O1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRtb2RlIHw9IEZBTExPQ19GTF9LRUVQX1NJWkU7XFxuIDI4MDpcXHRcXG4gMjgxOlxcdFxcdGlmICghYmRldl9tYXhfZGlzY2FyZF9zZWN0b3JzKGxvLVxcdTAwM2Vsb19kZXZpY2UpKVxcbiAyODI6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyODM6XFx0XFxuIDI4NDpcXHRcXHRyZXQgPSBmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2VmYWxsb2NhdGUoZmlsZSwgbW9kZSwgcG9zLCBibGtfcnFfYnl0ZXMocnEpKTtcXG4gMjg1OlxcdFxcdGlmICh1bmxpa2VseShyZXQgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FSU5WQUwgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FT1BOT1RTVVBQKSlcXG4gMjg2OlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiAyODc6XFx0XFxuIDI4ODpcXHRcXHQvKlxcbiAyODk6XFx0XFx0ICogV2UgaW5pdGlhbGx5IGNvbmZpZ3VyZSB0aGUgbGltaXRzIGluIGEgaG9wZSB0aGF0IGZhbGxvY2F0ZSBpc1xcbiAyOTA6XFx0XFx0ICogc3VwcG9ydGVkIGFuZCBjbGVhciB0aGVtIGhlcmUgaWYgdGhhdCB0dXJucyBvdXQgbm90IHRvIGJlIHRydWUuXFxuIDI5MTpcXHRcXHQgKi9cXG4gMjkyOlxcdFxcdGlmICh1bmxpa2VseShyZXQgPT0gLUVPUE5PVFNVUFApKVxcbiAyOTM6XFx0XFx0XFx0bG9vcF9jbGVhcl9saW1pdHMobG8sIG1vZGUpO1xcbiAyOTQ6XFx0XFxuIDI5NTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyOTY6XFx0fVxcbiAyOTc6XFx0XFxuIDI5ODpcXHRzdGF0aWMgaW50IGxvX3JlcV9mbHVzaChzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpXFxuIDI5OTpcXHR7XFxuIDMwMDpcXHRcXHRpbnQgcmV0ID0gdmZzX2ZzeW5jKGxvLVxcdTAwM2Vsb19iYWNraW5nX2ZpbGUsIDApO1xcbiAzMDE6XFx0XFx0aWYgKHVubGlrZWx5KHJldCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVJTlZBTCkpXFxuIDMwMjpcXHRcXHRcXHRyZXQgPSAtRUlPO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRyZXR1cm4gcmV0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMjowODowNy42ODU0MTc1ODlaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzc3MDQ2OTY3ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQWxsIENsZWFyKipcblxuT2theSwgbGV0J3MgZ28gdGhyb3VnaCB0aGlzIHN5c3RlbWF0aWNhbGx5LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIHNhZmUgZnJvbSBLTVNBTiBjb25jZXJucywgYnV0IEkgYWx3YXlzIHByZWZlciB0byBkb3VibGUtY2hlY2suIEZpcnN0LCBJIHdhbnRlZCB0byB2ZXJpZnkgdGhhdCB0aGVyZSB3ZXJlIG5vIG9idmlvdXMgaW5mb3JtYXRpb24gbGVha3Mgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgcHJvYmxlbXMgaW4gdXNlci1mYWNpbmcgc3RydWN0dXJlcyBvciBvdGhlciBzZW5zaXRpdmUgYXJlYXMuIFRoZSBxdWljayBzY2FuIGNvbmZpcm1lZCB0aGVyZSBhcmUgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgbm8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeS4gQWxsIG5ldyBzdHJ1Y3QgbWVtYmVycyBhcmUgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIFRoZSBtYWluIGZvY3VzIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgb24gYSBsb2NraW5nIGlzc3VlIHJlZ2FyZGluZyBxdWV1ZSBsaW1pdHMuIEl0IGFkZHJlc3NlcyBhIGNvbmN1cnJlbmN5IHByb2JsZW0gaW4gaG93IHF1ZXVlIGxpbWl0cyB3ZXJlIGJlaW5nIHVwZGF0ZWQsIHNoaWZ0aW5nIHRoZSB1cGRhdGUgdG8gYSB3b3JrcXVldWUgdG8gZW5zdXJlIHByb3BlciBsb2NraW5nIHByb3RvY29scy4gVGhpcyBwcmltYXJpbHkgaW52b2x2ZXMgY29uY3VycmVuY3ksIGRlYWRsb2Nrcywgd29ya3F1ZXVlIGNhbmNlbGxhdGlvbiByYWNlcywgYW5kIHVzZS1hZnRlci1mcmVlLCBhbGwgb2Ygd2hpY2ggYXJlIGNvdmVyZWQgYnkgdGhlIHVzdWFsIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCwgYW5kIFBST1ZFX0xPQ0tJTkcpLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgcmFuIHRocm91Z2ggdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBLTVNBTiBuZWVkcy4gVGhlcmUgYXJlIG5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcyBvciBwYWRkaW5nLCBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgbm8gYWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5Db252ZXJzZWx5LCBJIHZlcmlmaWVkIHRoZSBjcml0ZXJpYSBmb3Igc2V0dGluZyBOZWVkc0tNU0FOIHRvIGZhbHNlOiBUaGlzIHBhdGNoIHByaW1hcmlseSBkZWFscyB3aXRoIHRoZSB0eXBlcyBvZiBidWdzIHRoYXQgS0FTQU4sIExPQ0tERVAsIG9yIG90aGVyIHN0YW5kYXJkIHRvb2xzIGFyZSBkZXNpZ25lZCB0byBjYXRjaC4gQWxsIHJlbGV2YW50IHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkLiBUaGVyZSdzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MgaGVyZS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIGl0J3MgYSBjbGVhciBOZWVkc0tNU0FOPWZhbHNlIHNpdHVhdGlvbi4gVGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIG1vdmUgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NjMsIk91dHB1dFRva2VucyI6MjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDI6MDg6NDUuMzkwMTE3OTQzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgcXVldWUgbGltaXRzIGNsZWFyaW5nIGluIHRoZSBsb29wIGJsb2NrIGRyaXZlciAoYGRyaXZlcnMvYmxvY2svbG9vcC5jYCkgYnkgbW92aW5nIHRoZSBsaW1pdCB1cGRhdGUgZnJvbSB0aGUgcmVxdWVzdCBleGVjdXRpb24gY29udGV4dCAoYGxvX2ZhbGxvY2F0ZWApIHRvIGEgZGVmZXJyZWQgd29ya3F1ZXVlIGl0ZW0gKGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gKS4gSXQgaW50cm9kdWNlcyBhIHdvcmsgc3RydWN0IGFuZCBhdG9taWMgZ2VuZXJhdGlvbiBjb3VudGVycyAoYHJlYmluZF9nZW5gLCBgY2xlYXJfbGltaXRzX2dlbmAsIGBjbGVhcl9saW1pdHNfbW9kZWApIHdpdGhpbiBgc3RydWN0IGxvb3BfZGV2aWNlYCB0byBzYWZlbHkgZnJlZXplIHRoZSBxdWV1ZSBhbmQgY29tbWl0IGxpbWl0cyB1cGRhdGVzIGFzeW5jaHJvbm91c2x5IHdpdGhvdXQgcmFjZSBjb25kaXRpb25zIG9uIGJhY2tpbmcgZmlsZSByZWJpbmRpbmcuXFxuXFxuQWxsIGFkZGVkIGZpZWxkcyBhcmUgYWxsb2NhdGVkIGFzIHBhcnQgb2YgYHN0cnVjdCBsb29wX2RldmljZWAgdXNpbmcgYGt6YWxsb2Nfb2JqYCBhbmQgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggYElOSVRfV09SS2AuIFRoZSBsb2NhbCB2YXJpYWJsZXMgd2l0aGluIGBsb29wX2NsZWFyX2xpbWl0c193b3JrZm5gIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBhbmQgbm8ga2VybmVsIGRhdGEgaXMgY29waWVkIG9yIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gUG90ZW50aWFsIHJpc2tzIHdpdGggdGhpcyBwYXRjaCByZWxhdGUgdG8gY29uY3VycmVuY3ksIHJhY2UgY29uZGl0aW9ucywgcXVldWUgbG9ja2luZy9mcmVlemluZywgYW5kIHdvcmtxdWV1ZSBjYW5jZWxsYXRpb24gbGlmZXRpbWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIGRlYnVnIHRvb2xzIChLQVNBTiwgTE9DS0RFUCkuIFNpbmNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHF1ZXVlIGxpbWl0cyBjbGVhcmluZyBpbiB0aGUgbG9vcCBibG9jayBkcml2ZXIgKGBkcml2ZXJzL2Jsb2NrL2xvb3AuY2ApIGJ5IG1vdmluZyB0aGUgbGltaXQgdXBkYXRlIGZyb20gdGhlIHJlcXVlc3QgZXhlY3V0aW9uIGNvbnRleHQgKGBsb19mYWxsb2NhdGVgKSB0byBhIGRlZmVycmVkIHdvcmtxdWV1ZSBpdGVtIChgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCkuIEl0IGludHJvZHVjZXMgYSB3b3JrIHN0cnVjdCBhbmQgYXRvbWljIGdlbmVyYXRpb24gY291bnRlcnMgKGByZWJpbmRfZ2VuYCwgYGNsZWFyX2xpbWl0c19nZW5gLCBgY2xlYXJfbGltaXRzX21vZGVgKSB3aXRoaW4gYHN0cnVjdCBsb29wX2RldmljZWAgdG8gc2FmZWx5IGZyZWV6ZSB0aGUgcXVldWUgYW5kIGNvbW1pdCBsaW1pdHMgdXBkYXRlcyBhc3luY2hyb25vdXNseSB3aXRob3V0IHJhY2UgY29uZGl0aW9ucyBvbiBiYWNraW5nIGZpbGUgcmViaW5kaW5nLlxcblxcbkFsbCBhZGRlZCBmaWVsZHMgYXJlIGFsbG9jYXRlZCBhcyBwYXJ0IG9mIGBzdHJ1Y3QgbG9vcF9kZXZpY2VgIHVzaW5nIGBremFsbG9jX29iamAgYW5kIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIGBJTklUX1dPUktgLiBUaGUgbG9jYWwgdmFyaWFibGVzIHdpdGhpbiBgbG9vcF9jbGVhcl9saW1pdHNfd29ya2ZuYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgYW5kIG5vIGtlcm5lbCBkYXRhIGlzIGNvcGllZCBvciBleHBvc2VkIHRvIHVzZXIgc3BhY2UuIFBvdGVudGlhbCByaXNrcyB3aXRoIHRoaXMgcGF0Y2ggcmVsYXRlIHRvIGNvbmN1cnJlbmN5LCByYWNlIGNvbmRpdGlvbnMsIHF1ZXVlIGxvY2tpbmcvZnJlZXppbmcsIGFuZCB3b3JrcXVldWUgY2FuY2VsbGF0aW9uIGxpZmV0aW1lcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBkZWJ1ZyB0b29scyAoS0FTQU4sIExPQ0tERVApLiBTaW5jZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlc95x[1] Phase: Succeeded StartedAt: 2026-09-04 02:08:56 +0000 UTC FinishedAt: 2026-09-04 02:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 02:08:56 +0000 UTC FinishedAt: 2026-09-04 02:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2] Phase: Succeeded StartedAt: 2026-09-04 02:08:56 +0000 UTC FinishedAt: 2026-09-04 05:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 02:08:56 +0000 UTC FinishedAt: 2026-09-04 05:51:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 02:08:56 +0000 UTC FinishedAt: 2026-09-04 02:09:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 02:08:56 +0000 UTC FinishedAt: 2026-09-04 02:09:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlc95x/series-workflowlc95x-convert-artifact-1825876262/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 02:09:06 +0000 UTC FinishedAt: 2026-09-04 02:25:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 02:09:06 +0000 UTC FinishedAt: 2026-09-04 02:25:07 +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:*541c25d1-cb62-4bae-a0f5-aaf898b8d323,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-workflowlc95x/series-workflowlc95x-convert-artifact-1825876262/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": "bfd0cbe2-b718-4a05-8cab-70ec53b1e4e9", "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-workflowlc95x/series-workflowlc95x-build-action-2660944316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 02:09:06 +0000 UTC FinishedAt: 2026-09-04 02:24:57 +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:*541c25d1-cb62-4bae-a0f5-aaf898b8d323,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-workflowlc95x/series-workflowlc95x-convert-artifact-1825876262/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": "bfd0cbe2-b718-4a05-8cab-70ec53b1e4e9", "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-workflowlc95x/series-workflowlc95x-build-action-2660944316/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 02:25:07 +0000 UTC FinishedAt: 2026-09-04 02:25:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 02:25:07 +0000 UTC FinishedAt: 2026-09-04 02:25:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 02:25:07 +0000 UTC FinishedAt: 2026-09-04 02:25:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 02:25:07 +0000 UTC FinishedAt: 2026-09-04 02:25:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlc95x/series-workflowlc95x-convert-artifact-2166276729/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 02:25:17 +0000 UTC FinishedAt: 2026-09-04 02:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 02:25:17 +0000 UTC FinishedAt: 2026-09-04 02:27:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bfd0cbe2-b718-4a05-8cab-70ec53b1e4e9,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-workflowlc95x/series-workflowlc95x-build-action-2660944316/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-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 02:27:10 +0000 UTC FinishedAt: 2026-09-04 02:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 02:27:10 +0000 UTC FinishedAt: 2026-09-04 02:27:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 02:27:10 +0000 UTC FinishedAt: 2026-09-04 02:43:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 02:27:10 +0000 UTC FinishedAt: 2026-09-04 02:43:01 +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:*541c25d1-cb62-4bae-a0f5-aaf898b8d323,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-workflowlc95x/series-workflowlc95x-convert-artifact-2166276729/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": "53c217f5-de87-4475-94a8-636730b7c2cb", "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-workflowlc95x/series-workflowlc95x-build-action-1148879957/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 02:27:10 +0000 UTC FinishedAt: 2026-09-04 02:42:51 +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:*541c25d1-cb62-4bae-a0f5-aaf898b8d323,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-workflowlc95x/series-workflowlc95x-convert-artifact-2166276729/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": "53c217f5-de87-4475-94a8-636730b7c2cb", "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-workflowlc95x/series-workflowlc95x-build-action-1148879957/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 02:43:01 +0000 UTC FinishedAt: 2026-09-04 02:43:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 02:43:01 +0000 UTC FinishedAt: 2026-09-04 02:43:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 02:43:01 +0000 UTC FinishedAt: 2026-09-04 02:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 02:43:01 +0000 UTC FinishedAt: 2026-09-04 02:44:42 +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:*53c217f5-de87-4475-94a8-636730b7c2cb,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-workflowlc95x/series-workflowlc95x-build-action-1148879957/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-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 02:44:52 +0000 UTC FinishedAt: 2026-09-04 05:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 02:44:52 +0000 UTC FinishedAt: 2026-09-04 05:51:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"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:*bfd0cbe2-b718-4a05-8cab-70ec53b1e4e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*53c217f5-de87-4475-94a8-636730b7c2cb,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-workflowlc95x/series-workflowlc95x-build-action-2660944316/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-workflowlc95x/series-workflowlc95x-build-action-1148879957/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 02:44:52 +0000 UTC FinishedAt: 2026-09-04 02:45:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 02:44:52 +0000 UTC FinishedAt: 2026-09-04 02:44:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"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-workflowlc95x/series-workflowlc95x-convert-artifact-3401227502/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 02:44:52 +0000 UTC FinishedAt: 2026-09-04 02:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 02:44:52 +0000 UTC FinishedAt: 2026-09-04 02:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 02:44:52 +0000 UTC FinishedAt: 2026-09-04 02:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 02:45:02 +0000 UTC FinishedAt: 2026-09-04 05:51:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlc95x[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["loop_clear_limits_workfn","loop_clear_limits","loop_assign_backing_file","__loop_clr_fd","lo_fallocate","loop_change_fd","loop_configure","loop_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96c8ea3c5add7920b3c43840d1ea76b3354c8d2d","config_name":"upstream-apparmor-kasan.config","enable_configs":["BLK_DEV_LOOP"],"series_id":"45b97770-8f00-4a30-b08b-3d7174d3b1af","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 02:45:02 +0000 UTC FinishedAt: 2026-09-04 05:51:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bfd0cbe2-b718-4a05-8cab-70ec53b1e4e9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*53c217f5-de87-4475-94a8-636730b7c2cb,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-workflowlc95x/series-workflowlc95x-build-action-2660944316/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-workflowlc95x/series-workflowlc95x-build-action-1148879957/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-workflowlc95x/series-workflowlc95x-convert-artifact-3401227502/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,}