Name: series-workflowlfnbp Phase: Succeeded StartedAt: 2026-06-24 07:21:56 +0000 UTC FinishedAt: 2026-06-24 11:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[0] Phase: Succeeded StartedAt: 2026-06-24 07:21:56 +0000 UTC FinishedAt: 2026-06-24 07:38:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 07:21:56 +0000 UTC FinishedAt: 2026-06-24 07:38:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE", "TRANSPARENT_HUGEPAGE" ], "series_id": "9eab103d-4a1a-4978-81a2-c47ffb6e0625" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "dmirror_fops_unlocked_ioctl", "dmirror_migrate_to_device", "dmirror_migrate_to_system", "dmirror_devmem_fault" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfbWlncmF0ZV90b19kZXZpY2UmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbSYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2Rldm1lbV9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2Agd2hlbiBoYW5kbGluZyBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcyAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBtaWdyYXRlZCB0byBkZXZpY2UgbWVtb3J5KS4gSXQgYWRkcyBwcm9wZXIgbG9ja2luZyAoYHBtZF9sb2NrYCkgYW5kIHJlLXZhbGlkYXRpb24gb2YgdGhlIFBNRCBlbnRyeSB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgc3BsaXQgY29uY3VycmVudGx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiB1c2luZyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgZmVhdHVyZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBITU0gdGVzdCBkcml2ZXIgKGB0ZXN0X2htbWApIHdoaWNoIHByb3ZpZGVzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGltcGxlbWVudGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODQwZWU2YTcwY2MwOWQ1NzYyYmExZDgzODhhODUwMmUxZDEzN2Y0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDA3OjMyOjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcbmluZGV4IDJjY2JhYmZiMmNjMTdhLi4xN2RmZjhhYWI5ZjllNCAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuQEAgLTI2OSwxNCAmIzQzOzI2OSwyNCBAQCBib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiBcdFx0XHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuIFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiBcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4tXHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4tXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpIHtcbiYjNDM7XHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiYjNDM7XG4mIzQzO1x0XHRcdHB2bXctXHUwMDNlcHRsID0gcG1kX2xvY2sobW0sIHB2bXctXHUwMDNlcG1kKTtcbiYjNDM7XHRcdFx0cG1kZSA9ICpwdm13LVx1MDAzZXBtZDtcbiYjNDM7XHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiBcbi1cdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4tXHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4mIzQzO1x0XHRcdGlmIChsaWtlbHkoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSkge1xuJiM0MztcdFx0XHRcdGlmIChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTilcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4mIzQzO1x0XHRcdFx0aWYgKCFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdFx0fVxuLVxuJiM0MztcdFx0XHQvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiYjNDM7XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuJiM0MztcdFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcbiBcdFx0XHRpZiAoKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfU1lOQykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIHRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBwdm13LVx1MDAzZWFkZHJlc3MsXG4gXHRcdFx0XHRcdFx0ICAgUE1EX09SREVSKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0mIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9kZXZtZW1fZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdoZW4gaGFuZGxpbmcgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSkuIEl0IGFkZHMgcHJvcGVyIGxvY2tpbmcgKGBwbWRfbG9ja2ApIGFuZCByZS12YWxpZGF0aW9uIG9mIHRoZSBQTUQgZW50cnkgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gdXNpbmcgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGZlYXR1cmVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgSE1NIHRlc3QgZHJpdmVyIChgdGVzdF9obW1gKSB3aGljaCBwcm92aWRlcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbXBsZW1lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODQwZWU2YTcwY2MwOWQ1NzYyYmExZDgzODhhODUwMmUxZDEzN2Y0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVuIDI0IDA3OjMyOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuYwppbmRleCAyY2NiYWJmYjJjYzE3YS4uMTdkZmY4YWFiOWY5ZTQgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jCkBAIC0yNjksMTQgJiM0MzsyNjksMjQgQEAgYm9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiAJCQkvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqLwogCQkJc3Bpbl91bmxvY2socHZtdy0mZ3Q7cHRsKTsKIAkJCXB2bXctJmd0O3B0bCA9IE5VTEw7Ci0JCX0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7Ci0JCQljb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7CiYjNDM7CQl9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkgewomIzQzOwkJCXNvZnRsZWFmX3QgZW50cnk7CiYjNDM7CiYjNDM7CQkJcHZtdy0mZ3Q7cHRsID0gcG1kX2xvY2sobW0sIHB2bXctJmd0O3BtZCk7CiYjNDM7CQkJcG1kZSA9ICpwdm13LSZndDtwbWQ7CiYjNDM7CQkJZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTsKIAotCQkJaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkgewotCQkJCXB2bXctJmd0O3B0bCA9IHBtZF9sb2NrKG1tLCBwdm13LSZndDtwbWQpOwomIzQzOwkJCWlmIChsaWtlbHkoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSkgewomIzQzOwkJCQlpZiAocHZtdy0mZ3Q7ZmxhZ3MgJmFtcDsgUFZNV19NSUdSQVRJT04pCiYjNDM7CQkJCQlyZXR1cm4gbm90X2ZvdW5kKHB2bXcpOwomIzQzOwkJCQlpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSkKJiM0MzsJCQkJCXJldHVybiBub3RfZm91bmQocHZtdyk7CiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9Ci0KJiM0MzsJCQkvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovCiYjNDM7CQkJc3Bpbl91bmxvY2socHZtdy0mZ3Q7cHRsKTsKJiM0MzsJCQlwdm13LSZndDtwdGwgPSBOVUxMOwomIzQzOwkJfSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHsKIAkJCWlmICgocHZtdy0mZ3Q7ZmxhZ3MgJmFtcDsgUFZNV19TWU5DKSAmYW1wOyZhbXA7CiAJCQkgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctJmd0O2FkZHJlc3MsCiAJCQkJCQkgICBQTURfT1JERVIpICZhbXA7JmFtcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBpbiBgbW0vcGFnZV92bWFfbWFwcGVkLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBtYWluIHBvaW50IG9mIGludGVyZXN0IGlzIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgY29yZSBNTSBmdW5jdGlvbiwgcmlnaHQ/IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgdXNlZCBmb3Igd2Fsa2luZyB0aGUgcGFnZSB0YWJsZXMuIEFueSBjaGFuZ2VzIHRvIHRoaXMgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlIGxvb2sgYW5kIGRlZmluaXRlbHkgd2FycmFudCBzb21lIHNlcmlvdXMgZnV6emluZy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBjb25kaXRpb25hbCBjaGFuZ2UgYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YC4gVGhlIGV4aXN0aW5nIGxvZ2ljIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYSBuZXcgY29uZGl0aW9uYWwgYmxvY2ssIGFuZCBhIGZldyBjb25kaXRpb25hbCBsb2NrIG9wZXJhdGlvbnMuIFRoZSBvcmlnaW5hbCBgaWZgIGNvbmRpdGlvbiBoYXMgYmVlbiBzd2FwcGVkIGZvciBhIG5ldyBjb25kaXRpb24gd2hpY2ggY2FsbHMgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIFRoZSBuZXcgY29kZSBwYXRoIHNlZW1zIHRvIGJlIGFkZGluZyBhZGRpdGlvbmFsIGxvY2tpbmcsIGFuZCBjaGVja3MgdG8gZW5zdXJlIHRoZSBgcG1kYCBpc24mIzM5O3QgY2hhbmdpbmcgd2hpbGUgaXQgcHJvY2Vzc2VzIHRoZSBlbnRyeS4gSSBzZWUgdGhpcyBpcyBiZWluZyBkb25lIHRvIGVuc3VyZSB0aGUgYHBtZGAgaXNuJiMzOTt0IHNwbGl0IGJ5IGFub3RoZXIgdGhyZWFkLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHNvIEkmIzM5O2xsIGFsc28gdHJ5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBoZXJlLiBNeSBpbnR1aXRpb24gc2F5cyBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCAqY291bGQqIGJlIHJlbGF0ZWQgdG8gc29tZXRoaW5nIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEkmIzM5O2xsIHJ1biBhIHF1aWNrIGdyZXAgdG8gY29uZmlybSBhbmQgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGV4YWN0IHNjZW5hcmlvcyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoIGFuZCBwb3RlbnRpYWwgYXJlYXMgdG8gZm9jdXMgdGVzdGluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTU0PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfdWZmZF9tYXJrZXIocHRlX3QgcHRlKVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU3Mi0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU3MzogKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXBcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU3NC0gKiBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODMtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1ODQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODUte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5MC1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU5MTpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5Mi17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzExMi1cdFx0ZGlydHkgPSBzb2Z0bGVhZl9pc19taWdyYXRpb25fZGlydHkoZW50cnkpO1xubW0vaHVnZV9tZW1vcnkuYzozMTEzOlx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKnBtZCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMzExNC1cdFx0c29mdGxlYWZfdCBlbnRyeTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMyNTMtXHRcdH1cbm1tL2h1Z2VfbWVtb3J5LmM6MzI1NDpcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9sZF9wbWQpKSB7XG5tbS9odWdlX21lbW9yeS5jLTMyNTUtXHRcdHB0ZV90IGVudHJ5O1xuLS1cbm1tL21lbW9yeS5jPTY0MTc9c3RhdGljIHZtX2ZhdWx0X3QgX19oYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtNjQ5MC1cdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQodm1mLm9yaWdfcG1kKSkpIHtcbm1tL21lbW9yeS5jOjY0OTE6XHRcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkodm1mLm9yaWdfcG1kKSlcbm1tL21lbW9yeS5jLTY0OTItXHRcdFx0cmV0dXJuIGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKFx1MDAyNnZtZik7XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTgwPWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI3MS1cdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNzI6XHRcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSB7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzMtXHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODIyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIGFjdGl2ZS4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIGJ1dCBJIGNhbiYjMzk7dCBxdWl0ZSByZWNhbGwgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IGVuYWJsZSBpdC4gVG8gZmlndXJlIHRoaXMgb3V0IHF1aWNrbHksIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIGl0cyBkZWZpbml0aW9uIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWxldmFudCBwcmVwcm9jZXNzb3IgbWFjcm9zIHJlbGF0ZWQgdG8gaXRzIGVuYWJsaW5nIGNvbmRpdGlvbnMuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBjb25maWcgb3B0aW9ucyAob3IsIGF0IGxlYXN0LCB0aGUgaW5jbHVkZS9kZXBlbmRlbmN5IHN0cnVjdHVyZSksIHRoYXQgZ292ZXJuIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgdXNlZC4gSG9wZWZ1bGx5LCB0aGlzIGZpbGUgd2lsbCBoYXZlIHRoZSBhbnN3ZXIsIG9yIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RFVklDRV9QUklWQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnPTY4PUNPTkZJR19aT05FX0RFVklDRT15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZzo2OTpDT05GSUdfREVWSUNFX1BSSVZBVEU9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWctNzAtQ09ORklHX05FVD15XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTQwPXN0YXRpYyBpbmxpbmUgZW51bSBzb2Z0bGVhZl90eXBlIHNvZnRsZWFmX3R5cGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjAtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoxNjE6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTYyLVx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0xNjY9c3RhdGljIGlubGluZSBib29sIGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTY3LXtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNjg6XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE2OS1cdFx0Zm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0xNzM9c3RhdGljIGlubGluZSBib29sIGlzX2RldmljZV9wcml2YXRlX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTc0LXtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNzU6XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE3Ni1cdFx0Zm9saW9faXNfZGV2aWNlX3ByaXZhdGUocGFnZV9mb2xpbyhwYWdlKSk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9MzQ9c3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rc3dhcGQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03NS0gKi9cbmluY2x1ZGUvbGludXgvc3dhcC5oOjc2OiNpZmRlZiBDT05GSUdfREVWSUNFX1BSSVZBVEVcbmluY2x1ZGUvbGludXgvc3dhcC5oLTc3LSNkZWZpbmUgU1dQX0RFVklDRV9OVU0gM1xuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTEzMD1zdGF0aWMgaW5saW5lIHZvaWQgKnN3cF90b19yYWRpeF9lbnRyeShzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xMzQtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxMzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTM2LXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShwZ29mZl90IG9mZnNldClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0xNDY9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2RldmljZV9leGNsdXNpdmVfZW50cnkocGdvZmZfdCBvZmZzZXQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTUwLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MTUxOiNlbHNlIC8qIENPTkZJR19ERVZJQ0VfUFJJVkFURSAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTUyLXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShwZ29mZl90IG9mZnNldClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0xNjI9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2RldmljZV9leGNsdXNpdmVfZW50cnkocGdvZmZfdCBvZmZzZXQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTY2LVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MTY3OiNlbmRpZiAvKiBDT05GSUdfREVWSUNFX1BSSVZBVEUgKi9cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE2OC1cbi0tXG5tbS9tZW1yZW1hcC5jPTI2Nj12b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxuLS1cbm1tL21lbXJlbWFwLmMtMjgzLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG5tbS9tZW1yZW1hcC5jOjI4NDpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ERVZJQ0VfUFJJVkFURSkpIHtcbm1tL21lbXJlbWFwLmMtMjg1LVx0XHRcdFdBUk4oMSwgXCYjMzQ7RGV2aWNlIHByaXZhdGUgbWVtb3J5IG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuLS1cbm1tL3JtYXAuYz0yNzM5PXZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI3NzYtXG5tbS9ybWFwLmM6Mjc3NzojaWZkZWYgQ09ORklHX0RFVklDRV9QUklWQVRFXG5tbS9ybWFwLmMtMjc3OC0vKipcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9ND1DT05GSUdfVEVTVF9WTUFMTE9DPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzo1OkNPTkZJR19ERVZJQ0VfUFJJVkFURT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNi1DT05GSUdfVEVTVF9ITU09bVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKlBpbnBvaW50aW5nIHRoZSBDcml0aWNhbCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGtleSB2YXJpYWJsZSB0byBmb2N1cyBvbi4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBpbmRpY2F0b3Igd2UgbmVlZCBmb3IgdGhlIGRldmljZS1sZXZlbCBjdXN0b21pemF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBub3cgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIGV4YWN0bHkgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gaG9vayBpcyBwbGFjZWQuIEkgcmVjYWxsIHRoYXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYCBob2xkcyBhIGxvdCBvZiB0aG9zZSBsb3ctbGV2ZWwgZGVmaW5pdGlvbnMsIHNvIHRoYXQmIzM5O3MgdGhlIGxpa2VseSBzcG90LiBTcGVjaWZpY2FsbHksIEkgc2VlbSB0byByZW1lbWJlciB0aGF0IGEga2V5IHJvdXRpbmUgd2lsbCBiZSBhcm91bmQgbGluZSA1ODQgb3Igc28uIEkmIzM5O2xsIG5lZWQgdG8gZ28gY2hlY2sgdGhlIGNvZGUgdGhlcmUgdG8gY29uZmlybSBob3cgaXQmIzM5O3MgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHQjaWYgZGVmaW5lZChDT05GSUdfWk9ORV9ERVZJQ0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OKVxuIDU3MTpcdFxuIDU3MjpcdC8qKlxuIDU3MzpcdCAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxuIDU3NDpcdCAqIGVudHJ5LlxuIDU3NTpcdCAqIEBwbWQ6IFRoZSBQTUQgdG8gY2hlY2suXG4gNTc2Olx0ICpcbiA1Nzc6XHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFBNRCBjb250YWlucyBhIHN3YXAgZW50cnkgdGhhdCByZXByZXNlbnRzIGEgZGV2aWNlIHByaXZhdGVcbiA1Nzg6XHQgKiBwYWdlIG1hcHBpbmcuIFRoaXMgaXMgdXNlZCBmb3Igem9uZSBkZXZpY2UgcHJpdmF0ZSBwYWdlcyB0aGF0IGhhdmUgYmVlblxuIDU3OTpcdCAqIHN3YXBwZWQgb3V0IGJ1dCBzdGlsbCBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZHVyaW5nIHZhcmlvdXMgbWVtb3J5IG1hbmFnZW1lbnRcbiA1ODA6XHQgKiBvcGVyYXRpb25zLlxuIDU4MTpcdCAqXG4gNTgyOlx0ICogUmV0dXJuOiB0cnVlIGlmIFBNRCBjb250YWlucyBkZXZpY2UgcHJpdmF0ZSBlbnRyeSwgZmFsc2Ugb3RoZXJ3aXNlXG4gNTgzOlx0ICovXG4gNTg0Olx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG4gNTg1Olx0e1xuIDU4NjpcdFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX2Zyb21fcG1kKHBtZCkpO1xuIDU4NzpcdH1cbiA1ODg6XHRcbiA1ODk6XHQjZWxzZSAgLyogQ09ORklHX1pPTkVfREVWSUNFIFx1MDAyNlx1MDAyNiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuIDU5MDpcdFxuIDU5MTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuIDU5MjpcdHtcbiA1OTM6XHRcdHJldHVybiBmYWxzZTtcbiA1OTQ6XHR9XG4gNTk1Olx0XG4gNTk2Olx0I2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiA1OTc6XHRcbiA1OTg6XHQvKipcbiA1OTk6XHQgKiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KCkgLSBEb2VzIHRoaXMgUE1EIGVudHJ5IGVuY29kZSBhIG1pZ3JhdGlvbiBlbnRyeT9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODQ3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVsdmluZyBpbnRvIERldmljZS1Qcml2YXRlIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkgc2VlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGlzIGFjdGl2ZS4gUmlnaHQsIHJpZ2h0LCB0aGF0JiMzOTtzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19aT05FX0RFVklDRWAgYW5kIHRoZSBgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gIG9wdGlvbnMuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzcGVjaWFsaXplZCBtZW1vcnkgaGFuZGxpbmcgaW4gdGhvc2UgY29udGV4dHMuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBlbHNlIGlzIHRpZWQgaW50byB0aGlzPyBBaCwgeWVzLCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyBhbHNvIGluIHRoZSBtaXguIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgZnVuY3Rpb24gdG8gYmUgY2VydGFpbiBJIGhhdmUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb24gaG93IGRldmljZSBwcml2YXRlIG1lbW9yeSBpcyBjbGFzc2lmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMDgyLVx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTA4MzpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXHRcdFx0XHRwcmVzZW50ID0gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yMzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI0OC0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI0OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1MC0gKiB3cml0YWJsZSBlbnRyeT9cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTUtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNTY6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTcte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2MS0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2MjogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjMtICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2Ni0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2OC17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzM1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzQxLVx0XHRyZXR1cm4gdHJ1ZTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM0MjpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNDMtXHRcdHJldHVybiB0cnVlO1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU4ND1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU4NS17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1ODY6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODctfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYxNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjE3LVx0LyogT25seSBkZXZpY2UgcHJpdmF0ZSwgbWlncmF0aW9uIGVudHJpZXMgdmFsaWQgZm9yIFBNRC4gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYxODpcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxOS1cdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KTtcbi0tXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0yNjYtXHRcdCAqL1xubW0vaG1tLmM6MjY3Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMjY4LVx0XHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXHUwMDNlb3duZXIgPT1cbi0tXG5tbS9obW0uYy0yNzAtXHRcdFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcbm1tL2htbS5jOjI3MTpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vaG1tLmMtMjcyLVx0XHRcdFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XG4tLVxubW0vaG1tLmMtMjg0LVxubW0vaG1tLmM6Mjg1Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vaG1tLmMtMjg2LVx0XHRcdGdvdG8gZmF1bHQ7XG4tLVxubW0vaG1tLmM9MzM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9obW0uYy0zNDUtXG5tbS9obW0uYzozNDY6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMzQ3LVx0ICAgIHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KS1cdTAwM2VwZ21hcC1cdTAwM2Vvd25lciA9PVxuLS1cbm1tL2htbS5jLTM1My1cbm1tL2htbS5jOjM1NDpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL2htbS5jLTM1NS1cdFx0XHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcbi0tXG5tbS9obW0uYy0zNzItXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcbm1tL2htbS5jOjM3MzpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbm1tL2htbS5jLTM3NC1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4MDg9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4MjctXHRcdHNldF9wbWRfYXQoc3JjX21tLCBhZGRyLCBzcmNfcG1kLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoxODI4Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMTgyOS1cdFx0Lypcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4MzItXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoxODMzOlx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG5tbS9odWdlX21lbW9yeS5jLTE4MzQtXHRcdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI1NTU9c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU3NS1cdFx0XHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoyNTc2Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMjU3Ny1cdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMTIzLVxubW0vaHVnZV9tZW1vcnkuYzozMTI0Olx0XHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzEyNS1cdFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ4NjY9aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4OTUtXG5tbS9odWdlX21lbW9yeS5jOjQ4OTY6XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUob2xkX2VudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDg5Ny1cdFx0c29mdGRpcnR5ID0gcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZHZhbCk7XG4tLVxubW0vbWVtb3J5LmM9OTQxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vbWVtb3J5LmMtOTkwLVx0XHR9XG5tbS9tZW1vcnkuYzo5OTE6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtOTkyLVx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4tLVxubW0vbWVtb3J5LmMtMTAxNS1cdFx0ICovXG5tbS9tZW1vcnkuYzoxMDE2Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vbWVtb3J5LmMtMTAxNy1cdFx0ICAgIGlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkge1xuLS1cbm1tL21lbW9yeS5jPTE3MzU9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE3NDQtXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcbm1tL21lbW9yeS5jOjE3NDU6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5tbS9tZW1vcnkuYy0xNzQ2LVx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XG4tLVxubW0vbWVtb3J5LmM9NDc0Nz12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00NzczLVx0XHRcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XG5tbS9tZW1vcnkuYzo0Nzc0Olx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtNDc3NS1cdFx0XHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTcwLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzE6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5tbS9taWdyYXRlX2RldmljZS5jLTE3Mi1cdFx0XHQhKG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkgfHxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE3Ny1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTc4Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzktXHRcdFx0d3JpdGUgPSBNSUdSQVRFX1BGTl9XUklURTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTI0MT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjk1LVx0XHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6Mjk2Olx0XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0yOTctXHRcdFx0XHRnb3RvIG5leHQ7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMjYtXHRcdFx0XHRcdE1JR1JBVEVfUEZOX01JR1JBVEU7XG5tbS9taWdyYXRlX2RldmljZS5jOjMyNzpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMjgtXHRcdFx0XHRtcGZuIHw9IE1JR1JBVEVfUEZOX1dSSVRFO1xuLS1cbm1tL21wcm90ZWN0LmM9MjE0PXN0YXRpYyBsb25nIGNoYW5nZV9zb2Z0bGVhZl9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbXByb3RlY3QuYy0yMzUtXHRcdFx0bmV3cHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkobmV3cHRlKTtcbm1tL21wcm90ZWN0LmM6MjM2Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL21wcm90ZWN0LmMtMjM3LVx0XHQvKlxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xODI9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2NhY2hlZF93cml0YWJsZShzb2Z0bGVhZl90IGVudHJ5KVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE4My17XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTg0Olx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSB8fFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE4NS1cdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xNj1zdGF0aWMgYm9vbCBtYXBfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgcG1kX3QgKnBtZHZhbHAsXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzAtXHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6NzE6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzItXHRcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEyNC1cdFx0LyogSGFuZGxlIHVuLWFkZHJlc3NhYmxlIFpPTkVfREVWSUNFIG1lbW9yeSAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTI1Olx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEyNi1cdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODA9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjc4LVxubW0vcGFnZV92bWFfbWFwcGVkLmM6Mjc5Olx0XHRcdGlmIChsaWtlbHkoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSkge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMjgwLVx0XHRcdFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxuLS1cbm1tL3JtYXAuYz0yNDE1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjYwMC1cbm1tL3JtYXAuYzoyNjAxOlx0XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xubW0vcm1hcC5jLTI2MDItXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKQWxyaWdodCwgc28gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBoYXMgYmVlbiBhbHRlcmVkLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gaG93IHdlIGhhbmRsZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGEgbG9jayBhY3F1aXNpdGlvbiB3aXRoIGBwdm13LSZndDtwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy0mZ3Q7cG1kKTtgIGFuZCBhcmUgbm93IGV4cGxpY2l0bHkgY2hlY2tpbmcgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KWAuIFRoZSBrZXkgY29uZGl0aW9uYWwgc2VlbXMgdG8gYmUsIGlmIHRoYXQmIzM5O3MgdHJ1ZSwgdGhlbiB3ZSBleGFtaW5lIHRoZSBgUFZNV19NSUdSQVRJT05gIGZsYWcgYW5kIGludm9rZSBgY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpYC4gVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSByZWFsbHksIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBnZWFyZWQgdG93YXJkcyBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkgYW5kIGhvdyB3ZSB0cmF2ZXJzZSBwYWdlIHRhYmxlcy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGJvdGggYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgYW5kIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBBaCwgd2FpdCwgd2FzbiYjMzk7dCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBkZXBlbmRlbnQgb24gYENPTkZJR19aT05FX0RFVklDRWA/IFllcywgSSBzaG91bGQgZ28gYmFjayBhbmQgZG91YmxlIGNoZWNrIHRoYXQuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGJ5IGNoZWNraW5nIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBmb3IgYERFVklDRV9QUklWQVRFYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVklDRV9QUklWQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIxMT1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4tLVxubW0vS2NvbmZpZy0xMjEzLVxubW0vS2NvbmZpZzoxMjE0OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjE1LVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBiZWluZyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDEyMTQuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBhcyBpdCYjMzk7cyBvZnRlbiB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dHMsIGFuZCBkZWZhdWx0IHZhbHVlcyBkZWZpbmVkIGZvciB0aGUgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XG4xMjExOlx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuMTIxMjpcdFx0Ym9vbFxuMTIxMzpcdFxuMTIxNDpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTIxNTpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyMTY6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyMTc6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyMTg6XHRcbjEyMTk6XHRcdGhlbHBcbjEyMjA6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyMjE6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTIyMjpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjIzOlx0XG4xMjI0Olx0Y29uZmlnIFZNQVBfUEZOXG4xMjI1Olx0XHRib29sXG4xMjI2Olx0XG4xMjI3Olx0Y29uZmlnIEFSQ0hfVVNFU19ISUdIX1ZNQV9GTEFHU1xuMTIyODpcdFx0Ym9vbFxuMTIyOTpcdGNvbmZpZyBBUkNIX0hBU19QS0VZU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgbGlrZSB5b3Vyc2VsZjoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgaW1tZWRpYXRlbHkgemVyb2luZyBpbiBvbiBhIGRlcGVuZGVuY3k6IGBERVZJQ0VfUFJJVkFURWAgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgcmVsYXRpb25zaGlwIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhlcmUuIE15IG5leHQgaW1tZWRpYXRlIHN0ZXA/IFdlbGwsIG5hdHVyYWxseSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkcmlsbGluZyBkb3duIG9uIGBaT05FX0RFVklDRWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBkZWZpbml0aW9uLCBmdW5jdGlvbmFsaXR5LCBhbmQgcG90ZW50aWFsIGNvbnN0cmFpbnRzIGJlY2F1c2UsIGxpa2UgYW55IGdvb2QgZW5naW5lZXIsIEkga25vdyB0aGF0IGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgbWVhbnMgYFpPTkVfREVWSUNFYCYjMzk7cyBiZWhhdmlvciBmdW5kYW1lbnRhbGx5IHNoYXBlcyBgREVWSUNFX1BSSVZBVEVgJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGBaT05FX0RFVklDRWAgc2lkZSBvZiB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTExNzg9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTExODItXG5tbS9LY29uZmlnOjExODM6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTExODQtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYmV0dGVyLiBUaGUgaXNzdWUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gY29uZmlndXJhdGlvbiBvcHRpb25zLiBIbW0sIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBpcyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhcm91bmQgbGluZSAxMTgzLiBUaGF0IGFyZWEgdXN1YWxseSBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gd2hhdCBJJiMzOTttIHRyb3VibGVzaG9vdGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRlZmluZWQgb3IgcmVmZXJlbmNlZCB0aGVyZSwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG90aGVyIHJlbGV2YW50IG9wdGlvbnMuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IEtjb25maWcgYW5kIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExODA6XHRcdGRlcGVuZHMgb24gIVg4Nl8zMlxuMTE4MTpcdFx0ZGVmYXVsdCB5IGlmIEFSTTY0XG4xMTgyOlx0XG4xMTgzOlx0Y29uZmlnIFpPTkVfREVWSUNFXG4xMTg0Olx0XHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbjExODU6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbjExODY6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxuMTE4NzpcdFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxuMTE4ODpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuMTE4OTpcdFxuMTE5MDpcdFx0aGVscFxuMTE5MTpcdFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxuMTE5MjpcdFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxuMTE5MzpcdFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcbjExOTQ6XHRcdCAgXCYjMzQ7ZGV2aWNlLXBoeXNpY2FsXCYjMzQ7IGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXG4xMTk1Olx0XHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cbjExOTY6XHRcbjExOTc6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxuMTE5ODpcdFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXG4xMTk5Olx0XHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMzkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHJlYXNvbmluZzoKCioqRW5hYmxpbmcgREVWSUNFX1BSSVZBVEUgYW5kIFpPTkVfREVWSUNFOiBBIFF1aWNrIENoZWNrKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBlbmFibGluZyBgREVWSUNFX1BSSVZBVEVgIGFuZCBgWk9ORV9ERVZJQ0VgLiBTdGFuZGFyZCBwcm9jZWR1cmUsIGJ1dCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gb3JkZXIuIFNwZWNpZmljYWxseSwgSSByZWNhbGwgZW5jb3VudGVyaW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIGRlZmluZWQgdW5kZXIgYSBjb25kaXRpb25hbCBibG9jay4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUgbmVjZXNzYXJ5IHByZXJlcXVpc2l0ZXMgYXJlIG1ldC4gVGhhdCBkZWZpbml0aW9uIGlzIHdyYXBwZWQgaW4gYW4gYCNpZmAgdGhhdCBoaW5nZXMgb24gYm90aCBgQ09ORklHX1pPTkVfREVWSUNFYCAqYW5kKiBgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwPyBDb25maXJtaW5nIHRoZSBzdGF0dXMgb2YgYENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OYC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZsYWdzIGFuZCBhbnkgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgVGhpbiBIeXBlcnBhZ2UgKFRIUCkgbWlncmF0aW9uIHNjaGVtZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NjUwPWNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY1Mi1cbm1tL0tjb25maWc6NjUzOmNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY1NC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYmV0dGVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2NTMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIHJlbGV2YW50IHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gbWF5IGJlIGRlZmluZWQgb3IgdXNlZCBuZWFyIHRoYXQgbGluZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSByZWxldmFudCBLY29uZmlnIHN5bWJvbHMgYXJlIGRlZmluZWQgb3IgdXNlZC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBsb2dpYyBhcm91bmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNldHRpbmdzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIEkgY2FuIGRpZyB1cCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NTA6XHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXG4gNjUxOlx0XHRib29sXG4gNjUyOlx0XG4gNjUzOlx0Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiA2NTQ6XHRcdGJvb2xcbiA2NTU6XHRcbiA2NTY6XHRjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbiA2NTc6XHRcdGRlZl9ib29sIG5cbiA2NTg6XHRcdGhlbHBcbiA2NTk6XHRcdCAgQWxsb3dzIHRoZSBwYWdlYmxvY2tfb3JkZXIgdmFsdWUgdG8gYmUgZHluYW1pYyBpbnN0ZWFkIG9mIGp1c3Qgc3RhbmRhcmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBBcmNoaXRlY3R1cmUtU3BlY2lmaWMgU2VsZWN0aW9uIG9mIGBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gLCBhbmQgaW1tZWRpYXRlbHkgSSBub3RpY2UgaXQmIzM5O3MgYSBib29sZWFuIHdpdGhvdXQgYW55IGFzc29jaWF0ZWQgcHJvbXB0LiBUaGF0IG1lYW5zIGl0JiMzOTtzIG9uZSBvZiB0aG9zZSBmbGFncyB0aGF0JiMzOTtzIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IHNwZWNpZmljIGFyY2hpdGVjdHVyZXMsIG5vdCBzb21ldGhpbmcgdGhlIHVzZXIgY29uZmlndXJlcy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBhcmNoaXRlY3R1cmVzIGFyZSB1c2luZyBpdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHN5bWJvbCB0byBzZWUgd2hlcmUgaXQgZ2V0cyBkZWZpbmVkLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBzZWUgd2hpY2ggYC5jb25maWdgIGVudHJpZXMgYXJlIHNldHRpbmcgdGhpcy4gVGltZSB0byBnZXQgdGhpcyBpbnZlc3RpZ2F0aW9uIG1vdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE5LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbmFyY2gvYXJtNjQvS2NvbmZpZzoyMDpcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2FybTY0L0tjb25maWctMjEtXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE1Olx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMTYtXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXHRpZiBBQ1BJXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU9MTA5PWNvbmZpZyBQUENfVEhQXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE0LSAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU6MTE1OiAgICAgICBzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE2LVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMjQtXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC9yaXNjdi9LY29uZmlnOjI1Olx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNi1cdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVFxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTc4PWNvbmZpZyBTMzkwXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODctXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC9zMzkwL0tjb25maWc6ODg6XHRzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9zMzkwL0tjb25maWctODktXHRzZWxlY3QgQVJDSF9IQVNfQ0NfQ0FOX0xJTktcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTcyLVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgKFBHVEFCTEVfTEVWRUxTIFx1MDAzZSAyKSBcdTAwMjZcdTAwMjYgKFg4Nl82NCB8fCBYODZfUEFFKVxuYXJjaC94ODYvS2NvbmZpZzo3MzpcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gveDg2L0tjb25maWctNzQtXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXHRpZiBBQ1BJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODg4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZXMgZm9yIE9wdGltYWwgUGVyZm9ybWFuY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgaGFuZGxlZCwgYW5kIGl0IHNlZW1zIHRoZSBzZWxlY3Rpb24gaXMgZHJpdmVuIGJ5IGB4ODZfNjRgIGFyY2hpdGVjdHVyZSwgcHJvdmlkZWQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBzdGFuZGFyZCBwcmFjdGljZSBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9uIG1vZGVybiBoYXJkd2FyZS4gR2l2ZW4gdGhhdCwgZW5hYmxpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpdHNlbGYgbG9va3MgbGlrZSBhIHZlcnkgZ29vZCBpZGVhLiBUaGlzIHdhcnJhbnRzIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRvIGNvbmZpcm0gdGhlIGN1cnJlbnQgc3RhdGUgb2YgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGltZSB0byB2ZXJpZnkgdGhhdCBzZXR0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03OTA9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy03OTItXG5tbS9LY29uZmlnOjc5MzptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTc5NC1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODExPWNob2ljZVxuLS1cbm1tL0tjb25maWctODE2LVxubW0vS2NvbmZpZzo4MTc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTgxOC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyMy1cbm1tL0tjb25maWc6ODI0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODI1LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgzMi1cbm1tL0tjb25maWc6ODMzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTgzNC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODQwPWNob2ljZVxuLS1cbm1tL0tjb25maWctODQ5LVxubW0vS2NvbmZpZzo4NTA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04NTEtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg1OS1cbm1tL0tjb25maWc6ODYwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2Ny1cbm1tL0tjb25maWc6ODY4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctODY5LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzUtXG5tbS9LY29uZmlnOjg3NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy04NzctXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04ODU9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04OTQtXG5tbS9LY29uZmlnOjg5NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTAzLVxubW0vS2NvbmZpZzo5MDQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTA1LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTExLVxubW0vS2NvbmZpZzo5MTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MTMtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxOS1cbm1tL0tjb25maWc6OTIwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkyMS1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRnV6emluZyoqCgpSaWdodCwgc28sIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHdlIGFic29sdXRlbHkgKm5lZWQqIHRvIGJlIGluIHBsYWNlIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0LiBNeSBpbml0aWFsIGNoZWNrbGlzdCBpcyBjb21pbmcgZG93biB0bzogYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRob3NlIHNlZW0gZXNzZW50aWFsIGZvciB0aGUgY29yZSBzZXR1cCB3ZSYjMzk7cmUgdGFyZ2V0aW5nLgoKTm93LCBhIHF1ZXN0aW9uIGlzIHBvcHBpbmcgdXA6IGNhbiB3ZSBsZXZlcmFnZSBgVEVTVF9ITU1gIGhlcmU/IEdpdmVuIGl0cyBwdXJwb3Nl4oCUc3BlY2lmaWNhbGx5LCBwcm92aWRpbmcgdGhhdCBtb2NrIGRldmljZSBzZXR1cCBmb3IgSE1NIGFuZCBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgdGVzdGluZ+KAlGl0ICptaWdodCogYmUgcmVhbGx5IHVzZWZ1bCBmb3Igc2V0dGluZyB1cCBhIGNvbnRyb2xsZWQgdGVzdGluZyBlbnZpcm9ubWVudCwgbWFraW5nIGZ1enppbmcgdGhpcyB3aG9sZSB0aGluZyBtdWNoIG1vcmUgbWFuYWdlYWJsZS4gV29ydGggYSBjbG9zZXIgbG9vaywgYXQgbGVhc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBURVNUX0hNTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzMxPWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzM4LVxubGliL0tjb25maWcuZGVidWc6MzMzOTpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzNDAtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBvZiB0aGlzIHByb2plY3QuIEdpdmVuIHRoZSBuYXR1cmUgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLCBteSBpbnR1aXRpb24gc3VnZ2VzdHMgdGhlIGBLY29uZmlnLmRlYnVnYCBmaWxlIGlzIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHplcm8gaW4gYXJvdW5kIGxpbmUgMzMzOS4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzdGFydGluZyBwb2ludDsgb2Z0ZW4sIHRoZXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHN0cnVjdHVyZWQgd2l0aCByZWxhdGVkIG9wdGlvbnMgZ3JvdXBlZCB0b2dldGhlciwgYW5kIHRoYXQgbGluZSBtaWdodCBob3VzZSB0aGUgb3B0aW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSwgb3IgYXQgbGVhc3QgYSBjcnVjaWFsIHBvaW50IG9mIHJlZmVyZW5jZSBmb3IgYSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGluc2lnaHRzIHRoYXQgc3BlY2lmaWMgYXJlYSBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMzNTpcdFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXG4zMzM2Olx0XG4zMzM3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzM4Olx0XG4zMzM5Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzNDE6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzNDI6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzNDM6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzQ0Olx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzQ1Olx0XHRoZWxwXG4zMzQ2Olx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzM0NzpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzQ4Olx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1OTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZXZpY2UgUHJpdmF0ZSBNZW1vcnkgd2l0aCBURVNUX0hNTSoqCgpPa2F5LCBzbyBgVEVTVF9ITU1gIGxvb2tzIGxpa2UgdGhlIGlkZWFsIGFwcHJvYWNoIGZvciBmdXp6aW5nIGRldmljZSBwcml2YXRlIG1lbW9yeSwgcGFydGljdWxhcmx5IHNpbmNlIHdlJiMzOTtyZSBsYWNraW5nIHJlYWwgaGFyZHdhcmUgZm9yIHRoaXMuIEl0JiMzOTtzIHRpbWUgdG8gZW5hYmxlIGl0LiBOb3csIGxldCYjMzk7cyBzdHJhdGVnaWNhbGx5IHBpY2sgb3VyIHRhcmdldHMuIE15IGF0dGVudGlvbiBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gV2hpbGUgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBNTSBmdW5jdGlvbiBhbmQgaGVhdmlseSB1dGlsaXplZCwgdGhhdCBhbHNvIHByZXNlbnRzIGEgdmFzdCBhdHRhY2sgc3VyZmFjZS4KClRoZSBrZXkgaXMgdG8gbmFycm93IG91ciBmb2N1cy4gQXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBicm9hZGVyIGFyZWEgdGhhdCBhcmUgbW9yZSBkaXJlY3RseSB0aWVkIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeSBhY2Nlc3M/IFBlcmhhcHMgc29tZSBzcGVjaWFsaXplZCBoZWxwZXIgZnVuY3Rpb24/IExldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCBpdHNlbGYuIFdlIG5lZWQgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgdGhhdCBhcmUgZWl0aGVyIGV4Y2x1c2l2ZWx5IG9yICpoZWF2aWx5KiBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgZGV2aWNlIHByaXZhdGUgbWVtb3J5IHJlZ2lvbiBtYXBwaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZ3JhcGggaGVyZSBpcyBrZXkgdG8gbWF4aW1pemluZyBvdXIgZnV6emluZyBlZmZpY2llbmN5IGFuZCB1bmNvdmVyaW5nIGRldmljZS1zcGVjaWZpYyB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgZmlsZSBpcyB0aGUgcHJpbWFyeSBzb3VyY2Ugb2YgdHJ1dGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV92bWFfbWFwcGVkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MDpcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMjYxOlx0XHRcdFx0fVxuIDI2MjpcdFx0XHRcdGlmIChsaWtlbHkocG1kX3RyYW5zX2h1Z2UocG1kZSkpKSB7XG4gMjYzOlx0XHRcdFx0XHRpZiAocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pXG4gMjY0Olx0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjY1Olx0XHRcdFx0XHRpZiAoIWNoZWNrX3BtZChwbWRfcGZuKHBtZGUpLCBwdm13KSlcbiAyNjY6XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyNjc6XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuIDI2ODpcdFx0XHRcdH1cbiAyNjk6XHRcdFx0XHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuIDI3MDpcdFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiAyNzE6XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4gMjcyOlx0XHRcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSB7XG4gMjczOlx0XHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiAyNzQ6XHRcbiAyNzU6XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjc2Olx0XHRcdFx0cG1kZSA9ICpwdm13LVx1MDAzZXBtZDtcbiAyNzc6XHRcdFx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuIDI3ODpcdFxuIDI3OTpcdFx0XHRcdGlmIChsaWtlbHkoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSkge1xuIDI4MDpcdFx0XHRcdFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxuIDI4MTpcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI4MjpcdFx0XHRcdFx0aWYgKCFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG4gMjgzOlx0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjg0Olx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyODU6XHRcdFx0XHR9XG4gMjg2Olx0XHRcdFx0LyogZGV2aWNlLXByaXZhdGUgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuIDI4NzpcdFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiAyODg6XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4gMjg5Olx0XHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4gMjkwOlx0XHRcdFx0aWYgKChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX1NZTkMpIFx1MDAyNlx1MDAyNlxuIDI5MTpcdFx0XHRcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cdTAwM2VhZGRyZXNzLFxuIDI5MjpcdFx0XHRcdFx0XHRcdCAgIFBNRF9PUkRFUikgXHUwMDI2XHUwMDI2XG4gMjkzOlx0XHRcdFx0ICAgIChwdm13LVx1MDAzZW5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcbiAyOTQ6XHRcdFx0XHRcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjk1Olx0XG4gMjk2Olx0XHRcdFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcbiAyOTc6XHRcdFx0XHRjb250aW51ZTtcbiAyOTg6XHRcdFx0fVxuIDI5OTpcdFx0XHRpZiAoIW1hcF9wdGUocHZtdywgXHUwMDI2cG1kZSwgXHUwMDI2cHRsKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY4NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgRnVuY3Rpb24qKgoKT2theSwgc28gdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBhcHBlYXJzIHRvIGhhdmUgYmVlbiBtb2RpZmllZCBpcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgc2luY2UgaXQmIzM5O3MgYSBob3QtcGF0aCBmdW5jdGlvbiwgaXQgd2FycmFudHMgY2xvc2Ugc2NydXRpbnkuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgcmVsZXZhbnQgY29kZSBwYXRoIHdpdGhpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHNwZWNpZmljYWxseSBmb3IgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIE15IGNvbmNlcm4gaXMgdGhhdCBmb2N1c2luZyBzb2xlbHkgb24gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBtaWdodCBiaWFzIHRoZSBmdXp6aW5nIGVmZm9ydHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNvZGUgcGF0aCB0aGF0IGFjdHVhbGx5IHRyaWdnZXJzIHRoaXMgc3BlY2lmaWMgY2hlY2suIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaGVyZSwgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAsIGlzIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcyBhbmQgZGV2aWNlLXByaXZhdGUgbWVtb3J5LCBzbyBJIG5lZWQgdG8gZXhwbG9yZSBpdHMgcmVsYXRpb24gdG8gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gTGV0JiMzOTtzIHNlZSB3aGVyZSBleGFjdGx5IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgY2FsbGVkIGZyb20uIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgYnJvYWRlciBwaWN0dXJlIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIGFjY3VyYXRlbHkgYW5kIGVuc3VyZSBteSBmdXp6aW5nIHN0cmF0ZWd5IGlzIGNvbXByZWhlbnNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2Vfdm1hX21hcHBlZF93YWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9NTIyPXN0cnVjdCBscnV2ZWM7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUyMzpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGs7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUyNC1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTY4OT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwOD1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTEtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxMjpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMy1cdFx0dW5zaWduZWQgaW50IG5yKVxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oPTg1MT1zdHJ1Y3QgcGFnZSAqbWFrZV9kZXZpY2VfZXhjbHVzaXZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODYzLVxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODY0OnN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayB7XG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NjUtXHR1bnNpZ25lZCBsb25nIHBmbjtcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NzYtI2RlZmluZSBERUZJTkVfRk9MSU9fVk1BX1dBTEsobmFtZSwgX2ZvbGlvLCBfdm1hLCBfYWRkcmVzcywgX2ZsYWdzKVx0XFxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg3NzpcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBuYW1lID0ge1x0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg3OC1cdFx0LnBmbiA9IGZvbGlvX3BmbihfZm9saW8pLFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04ODUtXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4ODY6c3RhdGljIGlubGluZSB2b2lkIHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODg3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04OTUtLyoqXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4OTY6ICogcGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydCAtIFJlc3RhcnQgdGhlIHBhZ2UgdGFibGUgd2Fsay5cbmluY2x1ZGUvbGludXgvcm1hcC5oOjg5NzogKiBAcHZtdzogUG9pbnRlciB0byBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsuXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04OTgtICpcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD05MDQ9c3RhdGljIGlubGluZSB2b2lkXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo5MDU6cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MDYte1xuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTkxOC1cbmluY2x1ZGUvbGludXgvcm1hcC5oOjkxOTpib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyk7XG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MjAtdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzE3PXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9ndWFyZF9zd3BfZW50cnkodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjEtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjI6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIzLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI0LSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI1OmV4dGVybiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI2LVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjctXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjg6ZXh0ZXJuIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI5LVx0XHRzdHJ1Y3QgcGFnZSAqbmV3KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMzM9c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0MS0jZWxzZSAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0MjpzdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDMtXHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0Ny1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQ5LVx0XHRzdHJ1Y3QgcGFnZSAqbmV3KVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNTk9c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE2My1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNjQ6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjUtXHRcdGFkZHIgPSBwdm13LmFkZHJlc3M7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjAxLVx0KmFjY2Vzc2VkID0gZmFsc2U7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjAyOlx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjAzLVx0XHRhZGRyID0gcHZtdy5hZGRyZXNzO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjYtXHRcdGlmICgqYWNjZXNzZWQpIHtcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMjc6XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjgtXHRcdFx0YnJlYWs7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00ODYyPWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4NjUtI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG5tbS9odWdlX21lbW9yeS5jOjQ4NjY6aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2Ny1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00OTM5LVxubW0vaHVnZV9tZW1vcnkuYzo0OTQwOnZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBzdHJ1Y3QgcGFnZSAqbmV3KVxubW0vaHVnZV9tZW1vcnkuYy00OTQxLXtcbi0tXG5tbS9pbnRlcm5hbC5oPTEyMzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2ludGVybmFsLmgtMTI1Ny0gKi9cbm1tL2ludGVybmFsLmg6MTI1ODpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX2FkZHJlc3NfZW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL2ludGVybmFsLmgtMTI1OS17XG4tLVxubW0va3NtLmM9MTI3NT1zdGF0aWMgaW50IHdyaXRlX3Byb3RlY3RfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9rc20uYy0xMjk2LVxubW0va3NtLmM6MTI5NzpcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpXG5tbS9rc20uYy0xMjk4LVx0XHRnb3RvIG91dF9tbjtcbi0tXG5tbS9rc20uYy0xMzU4LW91dF91bmxvY2s6XG5tbS9rc20uYzoxMzU5Olx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL2tzbS5jLTEzNjAtb3V0X21uOlxuLS1cbm1tL21pZ3JhdGUuYz0yNzk9Ym9vbCBpc29sYXRlX2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9taWdyYXRlLmMtMjk3LVxubW0vbWlncmF0ZS5jOjI5ODpzdGF0aWMgYm9vbCB0cnlfdG9fbWFwX3VudXNlZF90b196ZXJvcGFnZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5tbS9taWdyYXRlLmMtMjk5LVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCBvbGRfcHRlLCB1bnNpZ25lZCBsb25nIGlkeClcbi0tXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTM1MS1cbm1tL21pZ3JhdGUuYzozNTI6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL21pZ3JhdGUuYy0zNTMtXHRcdHJtYXBfdCBybWFwX2ZsYWdzID0gUk1BUF9OT05FO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE5Ni1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTk3Olx0XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTk4LVx0XHRcdC5wdGwgPSBwdGwsXG4tLVxubW0vcGFnZV9pZGxlLmM9NTI9c3RhdGljIGJvb2wgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3BhZ2VfaWRsZS5jLTU4LVxubW0vcGFnZV9pZGxlLmM6NTk6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL3BhZ2VfaWRsZS5jLTYwLVx0XHRhZGRyID0gcHZtdy5hZGRyZXNzO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTktXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDpzdGF0aWMgaW5saW5lIGJvb2wgbm90X2ZvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTExLXtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEyOlx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShwdm13KTtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzLVx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1LVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTY6c3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTctXHRcdCAgICBzcGlubG9ja190ICoqcHRscClcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04Ny0gKiBtYXBwZWQgYXQgdGhlIEBwdm13LVx1MDAzZXB0ZVxubW0vcGFnZV92bWFfbWFwcGVkLmM6ODg6ICogQHB2bXc6IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHN0cnVjdCwgaW5jbHVkZXMgYSBwYWlyIHB0ZSBhbmQgcGZuIHJhbmdlXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04OS0gKiBmb3IgY2hlY2tpbmdcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05MS0gKlxubW0vcGFnZV92bWFfbWFwcGVkLmM6OTI6ICogcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBmb3VuZCBhIHBsYWNlIHdoZXJlIHBmbiByYW5nZSBpcyAqcG90ZW50aWFsbHkqXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05My0gKiBtYXBwZWQuIGNoZWNrX3B0ZSgpIGhhcyB0byB2YWxpZGF0ZSB0aGlzLlxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEwNi0gKi9cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEwNzpzdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEwOC17XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTM5LS8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHJhbmdlcyBvdmVybGFwLiAgQ2FyZWZ1bCB0byBub3Qgb3ZlcmZsb3cuICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNDA6c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDEte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0OC1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE0OTpzdGF0aWMgdm9pZCBzdGVwX2ZvcndhcmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHNpemUpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTAte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1Ni0vKipcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE1NzogKiBwYWdlX3ZtYV9tYXBwZWRfd2FsayAtIGNoZWNrIGlmIEBwdm13LVx1MDAzZXBmbiBpcyBtYXBwZWQgaW4gQHB2bXctXHUwMDNldm1hIGF0XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTgtICogQHB2bXctXHUwMDNlYWRkcmVzc1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTU5OiAqIEBwdm13OiBwb2ludGVyIHRvIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2Fsay4gcGFnZSwgdm1hLCBhZGRyZXNzIGFuZCBmbGFnc1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMTYwLSAqIG11c3QgYmUgc2V0LiBwbWQsIHB0ZSBhbmQgcHRsIG11c3QgYmUgTlVMTC5cbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjYtICogSWYgQHB2bXctXHUwMDNlcG1kIGlzIHNldCBidXQgQHB2bXctXHUwMDNlcHRlIGlzIG5vdCwgeW91IGhhdmUgZm91bmQgUE1ELW1hcHBlZCBwYWdlXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNjc6ICogKHVzdWFsbHkgVEhQKS4gRm9yIFBURS1tYXBwZWQgVEhQLCB5b3Ugc2hvdWxkIHJ1biBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIGluXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjgtICogYSBsb29wIHRvIGZpbmQgYWxsIFBURXMgdGhhdCBtYXAgdGhlIFRIUC5cbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNzYtICpcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE3NzogKiBJZiB5b3UgbmVlZCB0byBzdG9wIHRoZSB3YWxrIGJlZm9yZSBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIHJldHVybmVkIGZhbHNlLFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTc4OiAqIHVzZSBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKCkuIEl0IHdpbGwgZG8gdGhlIGhvdXNla2VlcGluZy5cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3OS0gKi9cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE4MDpib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE4MS17XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MzU2PXVuc2lnbmVkIGxvbmcgcGFnZV9tYXBwZWRfaW5fdm1hKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM1OS1cdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MzYwOlx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNjEtXHRcdC5wZm4gPSBwYWdlX3RvX3BmbihwYWdlKSxcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNjktXHRcdGdvdG8gb3V0O1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MzcwOlx0aWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM3MS1cdFx0cmV0dXJuIC1FRkFVTFQ7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNzI6XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMzczLW91dDpcbi0tXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTkyNC1cbm1tL3JtYXAuYzo5MjU6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL3JtYXAuYy05MjYtXHRcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XG4tLVxubW0vcm1hcC5jLTk0OC1cdFx0XHRtbG9ja192bWFfZm9saW8oZm9saW8sIHZtYSk7XG5tbS9ybWFwLmM6OTQ5Olx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtOTUwLVx0XHRcdHByYS1cdTAwM2V2bV9mbGFncyB8PSBWTV9MT0NLRUQ7XG4tLVxubW0vcm1hcC5jLTk2My1cdFx0XHRwcmEtXHUwMDNlcmVmZXJlbmNlZCA9IC0xO1xubW0vcm1hcC5jOjk2NDpcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTk2NS1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vcm1hcC5jLTEwMDItXHRcdGlmIChwdGVzID09IHB2bXcubnJfcGFnZXMpIHtcbm1tL3JtYXAuYzoxMDAzOlx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMTAwNC1cdFx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmM9MTA2ND1pbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLS1cbm1tL3JtYXAuYy0xMTAyLVxubW0vcm1hcC5jOjExMDM6c3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9ybWFwLmMtMTEwNC17XG4tLVxubW0vcm1hcC5jLTExMTctXG5tbS9ybWFwLmM6MTExODpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2Fsayhwdm13KSkge1xubW0vcm1hcC5jLTExMTktXHRcdGludCByZXQgPSAwO1xuLS1cbm1tL3JtYXAuYz0xMjMxPXN0YXRpYyBib29sIG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0xMjM0LVx0c3RydWN0IHdycHJvdGVjdF9maWxlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3Qgd3Jwcm90ZWN0X2ZpbGVfc3RhdGUgKilhcmc7XG5tbS9ybWFwLmM6MTIzNTpcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xubW0vcm1hcC5jLTEyMzYtXHRcdC5wZm5cdFx0PSBzdGF0ZS1cdTAwM2VwZm4sXG4tLVxubW0vcm1hcC5jPTEzMTA9aW50IHBmbl9ta2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBwZ29mZl90IHBnb2ZmLFxuLS1cbm1tL3JtYXAuYy0xMzEyLXtcbm1tL3JtYXAuYzoxMzEzOlx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG5tbS9ybWFwLmMtMTMxNC1cdFx0LnBmblx0XHQ9IHBmbixcbi0tXG5tbS9ybWFwLmM9MTk0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3JtYXAuYzoxOTQ1Olx0XHRcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbm1tL3JtYXAuYy0xOTQ2LVx0XHRcdGVudW0gdHR1X2ZsYWdzIGZsYWdzLCBwdGVfdCBwdGUpXG4tLVxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjAzMS1cbm1tL3JtYXAuYzoyMDMyOlx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9ybWFwLmMtMjAzMy1cdFx0bnJfcGFnZXMgPSAxO1xuLS1cbm1tL3JtYXAuYy0yMDg5LVx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+VFRVX1NQTElUX0hVR0VfUE1EO1xubW0vcm1hcC5jOjIwOTA6XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTIwOTEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS9ybWFwLmMtMjM2My13YWxrX2RvbmU6XG5tbS9ybWFwLmM6MjM2NDpcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yMzY1LVx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmM9MjQxNT1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTI0NjAtXG5tbS9ybWFwLmM6MjQ2MTpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xubW0vcm1hcC5jLTI0NjItXHRcdC8qIFBNRC1tYXBwZWQgVEhQIG1pZ3JhdGlvbiBlbnRyeSAqL1xuLS1cbm1tL3JtYXAuYy0yNDc2LVx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+VFRVX1NQTElUX0hVR0VfUE1EO1xubW0vcm1hcC5jOjI0Nzc6XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI0NzgtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS9ybWFwLmMtMjQ5My1cdFx0XHRcdHJldCA9IGZhbHNlO1xubW0vcm1hcC5jOjI0OTQ6XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI0OTUtXHRcdFx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmMtMjU0OS1cdFx0XHRcdGlmICghaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZSh2bWEpKSB7XG5tbS9ybWFwLmM6MjU1MDpcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNTUxLVx0XHRcdFx0XHRyZXQgPSBmYWxzZTtcbi0tXG5tbS9ybWFwLmMtMjU2My1cdFx0XHRcdFx0ICovXG5tbS9ybWFwLmM6MjU2NDpcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNTY1LVx0XHRcdFx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmMtMjY1MC1cdFx0XHRcdHJldCA9IGZhbHNlO1xubW0vcm1hcC5jOjI2NTE6XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI2NTItXHRcdFx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmMtMjY2MS1cdFx0XHRcdFx0cmV0ID0gZmFsc2U7XG5tbS9ybWFwLmM6MjY2MjpcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNjYzLVx0XHRcdFx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmMtMjY2OC1cdFx0XHRcdHJldCA9IGZhbHNlO1xubW0vcm1hcC5jOjI2Njk6XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI2NzAtXHRcdFx0XHRicmVhaztcbi0tXG5tbS92bXNjYW4uYz00MTM0PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDE4MC0gKi9cbm1tL3Ztc2Nhbi5jOjQxODE6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDE4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDUzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVk1BIFdhbGsgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGRldmljZSBwcml2YXRlIG1lbW9yeSBtaWdyYXRpb24gYW5kIHVubWFwcGluZywgYW5kIGl0IGxvb2tzIGxpa2UgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGJlaW5nIHVzZWQgYWNyb3NzIHNldmVyYWwga2V5IGFyZWFzOiBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYHRyeV90b191bm1hcF9vbmVgLCBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLCBgZGFtb25fZm9saW9feW91bmdfb25lYCwgYW5kIGV2ZW4gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBmdW5jdGlvbnMgbW9zdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBpdHNlbGYuCgpHaXZlbiB0aGUgY29udGV4dCBvZiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgYW5kIGl0cyBtYW5pcHVsYXRpb24sIGJvdGggYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgYXBwZWFyIHRvIGJlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBkZWVwZXIgaW5zcGVjdGlvbi4gVGhleSBzZWVtIGxpa2UgdGhleSYjMzk7ZCBiZSByaWdodCBhdCB0aGUgaGVhcnQgb2YgdGhpcyBwcm9ibGVtLgoKSSB0aGluayBJJiMzOTtsbCBzdGFydCB3aXRoIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAsIG1haW5seSBiZWNhdXNlIGl0IHNvdW5kcyBjbG9zZXIgdG8gYWN0dWFsbHkgY29sbGVjdGluZyB0aGUgcmVsZXZhbnQgZGF0YSBmb3IgdGhlIG1pZ3JhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBwdWxsIHVwIGBtbS9taWdyYXRlX2RldmljZS5jYCBhbmQgZGlnIGludG8gdGhhdCBmdW5jdGlvbi4gU2VlIHdoYXQgaXQmIzM5O3MgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kIHdpdGggYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQwLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoyNDE6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQyLVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTQ4OD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIG1pZ3JhdGVfdm1hX3dhbGtfb3BzID0ge1xubW0vbWlncmF0ZV9kZXZpY2UuYzo0ODk6XHQucG1kX2VudHJ5XHRcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQsXG5tbS9taWdyYXRlX2RldmljZS5jLTQ5MC1cdC5wdGVfaG9sZVx0XHQ9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwODYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBWTUEgTWlncmF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIEkga25vdyB0aGF0IGZ1bmN0aW9uJiMzOTtzIGNydWNpYWwgZm9yIHRoZSBwYWdlIG1pZ3JhdGlvbiBwcm9jZXNzLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlPyBSaWdodCwgdGhlIGNvZGUmIzM5O3MgY2FsbGluZyBpdCB0aHJvdWdoIGB3YWxrX3BhZ2VfcmFuZ2VgIHdpdGhpbiBgbWlncmF0ZV92bWFfc2V0dXBgLiBUaGF04oCZcyBteSBrZXkgZW50cnkgcG9pbnQuIFRvIGZ1bGx5IGdyYXNwIHRoaXMsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gVGltZSB0byBjaGVjayBgbWlncmF0ZV92bWFfc2V0dXBgLiBJIG5lZWQgdG8gcmV2aWV3IGl0cyBsb2dpYyB0byBzZWUgaG93IGl0IHNldHMgdGhlIHN0YWdlIGZvciB0aGUgUE1EIGNvbGxlY3Rpb24sIGFuZCB0aGUgY29uZGl0aW9ucyBpbiB3aGljaCBpdCBpbnZva2VzIHRoZSBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBgbWlncmF0ZV92bWFfc2V0dXBgIHdpbGwgaWxsdW1pbmF0ZSBob3cgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpcyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjY0PXVzZSBoYXJkd2FyZSBETUEgb3IgZGV2aWNlIHNwZWNpZmljIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHRvIG1pZ3JhdGUgZGF0YS5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNjU6VGhlIG1pZ3JhdGVfdm1hX3NldHVwKCksIG1pZ3JhdGVfdm1hX3BhZ2VzKCksIGFuZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjY2LWZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gbWFrZSBkcml2ZXJzIGVhc2llciB0byB3cml0ZSBhbmQgdG8gY2VudHJhbGl6ZSBjb21tb25cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjk3PWJldHdlZW4gZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjb2RlIGFuZCBzaGFyZWQgY29tbW9uIGNvZGU6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMS0gICBUaGUgZGV2aWNlIGRyaXZlciBoYXMgdG8gcGFzcyBhIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAgdG9cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDI6ICAgbWlncmF0ZV92bWFfc2V0dXAoKSBzbyB0aGUgbW1hcF9yZWFkX2xvY2soKSBvciBtbWFwX3dyaXRlX2xvY2soKSBuZWVkcyB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMy0gICBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIG1pZ3JhdGlvbi5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDQtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA1OjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA2LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNy0gICBUaGUgZGV2aWNlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgYGBzdHJ1Y3QgbWlncmF0ZV92bWFgYCBmaWVsZHMgYW5kIHBhc3Nlc1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwODogICB0aGUgcG9pbnRlciB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGUgYGBhcmdzLVx1MDAzZWZsYWdzYGAgZmllbGQgaXMgdXNlZCB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwOS0gICBmaWx0ZXIgd2hpY2ggc291cmNlIHBhZ2VzIHNob3VsZCBiZSBtaWdyYXRlZC4gRm9yIGV4YW1wbGUsIHNldHRpbmdcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE3LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMxODogICBPbmUgb2YgdGhlIGZpcnN0IHN0ZXBzIG1pZ3JhdGVfdm1hX3NldHVwKCkgZG9lcyBpcyB0byBpbnZhbGlkYXRlIG90aGVyXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE5LSAgIGRldmljZSYjMzk7cyBNTVVzIHdpdGggdGhlIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKClgYCBhbmRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI0LSAgIGBgTU1VX05PVElGWV9NSUdSQVRFYGAgYW5kIHRoZSBgYG93bmVyYGAgZmllbGQgc2V0IHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzI1OiAgIHRoZSBgYGFyZ3MtXHUwMDNlcGdtYXBfb3duZXJgYCBmaWVsZCBwYXNzZWQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKS4gVGhpc1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyNi0gICBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gc2tpcCB0aGUgaW52YWxpZGF0aW9uIGNhbGxiYWNrIGFuZCBvbmx5XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMzNy0gICBpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgUFRFLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMzODogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIGFsc28gY2xlYXJzIHRoZSBgYGFyZ3MtXHUwMDNlZHN0YGAgYXJyYXkuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM5LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjEyPUhNTSDliIfmjaLliLDnm7TmjqXkvb/nlKggc3RydWN0IHBhZ2Ug55So5LqO6K6+5aSH5YaF5a2Y77yM6L+Z5L2/5b6X5aSn5aSa5pWw5YaF5qC45Luj56CB6Lev5b6E5LiN55+l6YGT5beu5byC44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMTgt55Sx5LqOIENQVSDml6Dms5Xnm7TmjqXorr/pl67orr7lpIflhoXlrZjvvIzlm6DmraTorr7lpIfpqbHliqjnqIvluo/lv4Xpobvkvb/nlKjnoazku7YgRE1BIOaIluiuvuWkh+eJueWumueahOWKoOi9vS/lrZhcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjE5OuWCqOaMh+S7pOadpei/geenu+aVsOaNruOAgm1pZ3JhdGVfdm1hX3NldHVwKCnjgIFtaWdyYXRlX3ZtYV9wYWdlcygpIOWSjFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMjAtbWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTI0Mz1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQ5LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTA6ICAg6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75bCGIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAg5Lyg6YCS57uZbWlncmF0ZV92bWFfc2V0dXAoKe+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTEtICAg5Zug5q2k6ZyA6KaB5Zyo6L+B56e75pyf6Ze05L+d55WZIG1tYXBfcmVhZF9sb2NrKCkg5oiWIG1tYXBfd3JpdGVfbG9jaygp44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Mi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUzOjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1NC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU1LSAgIOiuvuWkh+mpseWKqOWIneWni+WMluS6hiBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIOeahOWtl+aute+8jOW5tuWwhuivpeaMh+mSiOS8oOmAkue7mVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTY6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeOAgmBgYXJncy1cdTAwM2VmbGFnc2BgIOWtl+auteaYr+eUqOadpei/h+a7pOWTquS6m+a6kOmhtemdouW6lOivpeiiq+i/geenu+OAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTctICAg5L6L5aaC77yM6K6+572uIGBgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTWBgIOWwhuWPqui/geenu+ezu+e7n+WGheWtmO+8jOiuvue9rlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjYyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjM6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeaJgOWBmueahOesrOS4gOatpeaYr+eUqCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KClgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjQtICAg5ZKMIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKClgYCDosIPnlKjmnaXpgY3ljoborr7lpIflkajlm7TnmoTpobXooajvvIzkvb9cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Ny0gICDlhbYgYGBldmVudGBgIOWtl+auteiuvue9ruS4uk1NVV9OT1RJRllfTUlHUkFURe+8jCBgYG93bmVyYGAg5a2X5q616K6+572u5Li65Lyg6YCS57uZXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2ODogICBtaWdyYXRlX3ZtYV9zZXR1cCgp55qEIGBgYXJncy1cdTAwM2VwZ21hcF9vd25lcmBgIOWtl+auteOAgui/meWFgeiuuOiuvuWkh+mpseWKqOi3s+i/h+aXoFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjktICAg5pWI5YyW5Zue6LCD77yM5Y+q5peg5pWI5YyW6YKj5Lqb5a6e6ZmF5q2j5Zyo6L+B56e755qE6K6+5aSH56eB5pyJTU1V5pig5bCE44CC6L+Z5LiA54K55bCG5Zyo5LiL5LiA6IqC6K+m57uG6Kej6YeK44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzUtICAgYGBsb2NrX3BhZ2UoKWBg6ZSB5a6a77yM5LiOTFJV6ZqU56a777yI5aaC5p6c57O757uf5YaF5a2Y5ZKM6K6+5aSH56eB5pyJ6aG15LiN5ZyoTFJV5LiK77yJ77yM5LuO6L+bXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI3NjogICDnqIvkuK3lj5bmtojmmKDlsITvvIzlubbmj5LlhaXkuIDkuKrnibnmrornmoTov4Hnp7tQVEXmnaXku6Pmm7/ljp/mnaXnmoRQVEXjgIIgbWlncmF0ZV92bWFfc2V0dXAoKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzctICAg6L+Y5riF6Zmk5LqGIGBgYXJncy1cdTAwM2Vkc3RgYCDmlbDnu4TjgIJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUzOC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTM5Olx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlnKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTQwLVx0aWYgKHJldClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTc0MD1zdGF0aWMgaW50IGt2bXBwY19zdm1fcGFnZV9pbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2MC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NzYxOlx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlnKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTM5Mz1zdm1fbWlncmF0ZV92bWFfdG9fdnJhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMC1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NDMxOlx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNm1pZ3JhdGUpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00MzItXHRpZiAocikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkyPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzMtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjczNDpcdHIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzM1LVx0aWYgKHIpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MzUxNT1zdm1fcmFuZ2VfYmVzdF9wcmVmZXRjaF9sb2NhdGlvbihzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODItICogYW5kIHJlc3RvcmUgd29yazpcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTgzOiAqIDEuIG1pZ3JhdGVfdm1hX3NldHVwIGludmFsaWRhdGUgcGFnZXMsIE1NVSBub3RpZmllciBjYWxsYmFjayBzdm1fcmFuZ2VfZXZpY3RcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNTg0LSAqICAgIHN0b3BzIGFsbCBxdWV1ZXMsIHNjaGVkdWxlIHJlc3RvcmUgd29ya1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTUxNz1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg0LVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTg1Olx0ZXJyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODYtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTExMTM9c3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNjYtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTY3Olx0ZXJyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTY4LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTIzNS1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjM2Olx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpIFx1MDAzYyAwKVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM3LVx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTgyMj1ub3V2ZWF1X2RtZW1fbWlncmF0ZV92bWEoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODcxLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6ODcyOlx0XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTg3My1cdFx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjQtXHQgKiBUaGUgc3JjIGFycmF5IG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIgYWZ0ZXJcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE2NTpcdCAqIG1pZ3JhdGVfdm1hX3NldHVwKCksIGFuZCBtdXN0IG5vdCBjaGFuZ2UgdGhlIGRzdCBhcnJheSBhZnRlclxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY2LVx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5Mi1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5MzppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5NC12b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XG4tLVxubGliL3Rlc3RfaG1tLmM9MTEyMD1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4tLVxubGliL3Rlc3RfaG1tLmMtMTE2NC1cbmxpYi90ZXN0X2htbS5jOjExNjU6XHRcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpO1xubGliL3Rlc3RfaG1tLmMtMTE2Ni1cdFx0aWYgKHJldClcbi0tXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMjQyLVx0XHRcdFx0TUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EO1xubGliL3Rlc3RfaG1tLmM6MTI0MzpcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG5saWIvdGVzdF9obW0uYy0xMjQ0LVx0XHRpZiAocmV0KVxuLS1cbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTcwNS1cdC8qXG5saWIvdGVzdF9obW0uYzoxNzA2Olx0ICogSW4gcHJhY3RpY2UgbWlncmF0ZV92bWFfc2V0dXAoKSBzaG91bGQgbmV2ZXIgZmFpbCB1bmxlc3MgdGhlXG5saWIvdGVzdF9obW0uYy0xNzA3LVx0ICogdGVzdCBpcyB3cm9uZyBhcyBpdCBqdXN0IHRlc3RzIHNvbWUgc3RhdGljIFZNQSBwcm9wZXJ0aWVzLlxubGliL3Rlc3RfaG1tLmMtMTcwOC1cdCAqL1xubGliL3Rlc3RfaG1tLmM6MTcwOTpcdGlmIChtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKSkge1xubGliL3Rlc3RfaG1tLmMtMTcxMC1cdFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NjU5PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTY2NS0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NjY2OiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgLSBwcmVwYXJlIHRvIG1pZ3JhdGUgYSByYW5nZSBvZiBtZW1vcnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY3LSAqIEBhcmdzOiBjb250YWlucyB0aGUgdm1hLCBzdGFydCwgYW5kIHBmbnMgYXJyYXlzIGZvciB0aGUgbWlncmF0aW9uXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MjgtICovXG5tbS9taWdyYXRlX2RldmljZS5jOjcyOTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MzAte1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzY4LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzY5OkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xubW0vbWlncmF0ZV9kZXZpY2UuYy03NzAtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzU1PXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3Ni0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzc3OiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkgZXhjZXB0IHRoYXRcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3OC0gKiBpbnN0ZWFkIG9mIGxvb2tpbmcgdXAgcGFnZXMgYmFzZWQgb24gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzIGEgcmFuZ2Ugb2Zcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzODQtICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM4NTogKiBMaWtlIG1pZ3JhdGVfdm1hX3NldHVwKCkgdGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYSByZWZlcmVuY2UgYW5kIGxvY2sgYW55XG5tbS9taWdyYXRlX2RldmljZS5jLTEzODYtICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbiYjMzk7dCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ1NT1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjctXHQgKiB0aGUgc291cmNlIGZvbGlvLiBTbyBjYWxsIG1pZ3JhdGVfdm1hX3VubWFwKCkgZGlyZWN0bHkgdG8gdW5tYXAgdGhlXG5tbS9taWdyYXRlX2RldmljZS5jOjE0Njg6XHQgKiBmb2xpbyBhcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIHdpbGwgZmFpbCBpZiBhcmdzLnZtYSA9PSBOVUxMLlxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDY5LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTk1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGV2aWNlIE1lbW9yeSBNaWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IGRldmljZSBtZW1vcnkgbWlncmF0aW9uIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBsaWIvdGVzdF9obW0uY2AgdGVzdGluZyBmcmFtZXdvcmsuIEkgc2VlIHRoYXQgdGhlIGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYCBhbmQgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIGZ1bmN0aW9ucyBhcmUgZW1wbG95aW5nIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIFRoYXQgbWFrZXMgc2Vuc2UuIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIGluIHR1cm4sIGlzIGNhbGxpbmcgYHdhbGtfcGFnZV9yYW5nZWAgd2l0aCBgbWlncmF0ZV92bWFfd2Fsa19vcHNgLCB3aGljaCB0aGVuIHV0aWxpemVzIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIEhvbGQgb24gYSBzZWNvbmQuLi4gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpc24mIzM5O3QgdXNpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhhdCYjMzk7cyBhIGJpdCB1bmV4cGVjdGVkLiBJIHdhcyBleHBlY3RpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgZXNwZWNpYWxseSBpbiB0aGlzIGFyZWEgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5LgoKVGhpcyByYWlzZXMgYSBrZXkgcXVlc3Rpb24uIFdoZXJlICppcyogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBtYW5hZ2VtZW50PyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGFnYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbWFwcGluZyBhbmQgd2Fsa2luZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV92bWFfbWFwcGVkX3dhbGsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9MTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE5Ni1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTk3Olx0XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTk4LVx0XHRcdC5wdGwgPSBwdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NzM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgTWlncmF0aW9uIG9mIEh1Z2UgUE1EcyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYC4gSW1tZWRpYXRlbHksIGl0IHNlZW1zIHRvIGJlIGxlYW5pbmcgb24gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhhdCYjMzk7cyBub3QgZW50aXJlbHkgc3VycHJpc2luZywgZ2l2ZW4gdGhlIG5lZWQgdG8gdHJhdmVyc2UgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgYW5kIGlkZW50aWZ5IHRoZSByZWxldmFudCBwYWdlcy4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4udGhpcyBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aXRoaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBUaGF0IHBsYWNlcyBpdCBmaXJtbHkgaW4gdGhlIGRldmljZSBtaWdyYXRpb24gc3Vic3lzdGVtLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgYml0IG9mIGNvbnRleHQgdG8ga2VlcCBpbiBtaW5kIGZvciBob3cgdGhlc2UgaHVnZSBQTURzIGFyZSBhY3R1YWxseSBtaWdyYXRlZCAtIGlmIHRoZSBnb2FsIGlzIHRvIHNoaWZ0IHRoZXNlIHRvIGEgZGlmZmVyZW50IGRldmljZSwgdGhlbiB0aGF0IGlzIGFuIGltcG9ydGFudCBwb2ludCBvZiB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0fSBlbHNlIHtcbiAxODE6XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiAxODI6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gMTgzOlx0XHR9XG4gMTg0Olx0XG4gMTg1Olx0XHRmb2xpb19nZXQoZm9saW8pO1xuIDE4NjpcdFx0aWYgKGZvbGlvICE9IGZhdWx0X2ZvbGlvIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZm9saW9fdHJ5bG9jayhmb2xpbykpKSB7XG4gMTg3Olx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gMTg4Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMTg5Olx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG4gMTkwOlx0XHR9XG4gMTkxOlx0XG4gMTkyOlx0XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbiAxOTM6XHRcdFx0KG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCkgXHUwMDI2XHUwMDI2XG4gMTk0Olx0XHRcdChJU19BTElHTkVEKHN0YXJ0LCBIUEFHRV9QTURfU0laRSkgXHUwMDI2XHUwMDI2XG4gMTk1Olx0XHRcdCBJU19BTElHTkVEKGVuZCwgSFBBR0VfUE1EX1NJWkUpKSkge1xuIDE5NjpcdFxuIDE5NzpcdFx0XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbiAxOTg6XHRcdFx0XHQucHRsID0gcHRsLFxuIDE5OTpcdFx0XHRcdC5hZGRyZXNzID0gc3RhcnQsXG4gMjAwOlx0XHRcdFx0LnBtZCA9IHBtZHAsXG4gMjAxOlx0XHRcdFx0LnZtYSA9IHdhbGstXHUwMDNldm1hLFxuIDIwMjpcdFx0XHR9O1xuIDIwMzpcdFxuIDIwNDpcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcbiAyMDU6XHRcbiAyMDY6XHRcdFx0bWlncmF0ZS1cdTAwM2VzcmNbbWlncmF0ZS1cdTAwM2VucGFnZXNdID0gbWlncmF0ZV9wZm4ocGZuKSB8IHdyaXRlXG4gMjA3Olx0XHRcdFx0XHRcdFx0fCBNSUdSQVRFX1BGTl9NSUdSQVRFXG4gMjA4Olx0XHRcdFx0XHRcdFx0fCBNSUdSQVRFX1BGTl9DT01QT1VORDtcbiAyMDk6XHRcdFx0bWlncmF0ZS1cdTAwM2Vkc3RbbWlncmF0ZS1cdTAwM2VucGFnZXMmIzQzOyYjNDM7XSA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4KCioqQ2xhcmlmeWluZyB0aGUgUm9sZSBvZiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdhcyAqY2FsbGVkKiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb2RlIGJsb2NrLiBCdXQgaXQgYXBwZWFycyBJJiMzOTttIG1pc3Rha2VuLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGJlaW5nICppbml0aWFsaXplZCogYW5kIHRoZW4gKnBhc3NlZCogYXMgYW4gYXJndW1lbnQgdG8gYHNldF9wbWRfbWlncmF0aW9uX2VudHJ5YC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIEkgbmVlZCB0byByZXZpZXcgaG93IGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgYWN0dWFsbHkgKnVzZXMqIHRoaXMgd2FsayBzdHJ1Y3R1cmUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCB3aGF0IGltcGFjdCBpdCBoYXMuIFRoaXMgaXMgd2hlcmUgSSBjYW4gZWFzaWx5IG1pc3Mgc29tZXRoaW5nLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgSSYjMzk7bSBjb3JyZWN0IGluIHRoYXQgYXNzZXNzbWVudCBvZiB0aGlzIGNvZGUuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGlzIG1lbW9yeSBtaWdyYXRpb24gcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgYXJndW1lbnRzIGluIGZ1bmN0aW9uIGNhbGxzIGlzIHBhcmFtb3VudCBpbiBrZXJuZWwgd29yaywgc28gSSYjMzk7bSBnbGFkIEkgY2F1Z2h0IHRoYXQuIFRoYXQmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XHRcdG1pZ3JhdGUtXHUwMDNlY3BhZ2VzJiM0MzsmIzQzOztcbiAyMTE6XHRcdFx0cmV0ID0gc2V0X3BtZF9taWdyYXRpb25fZW50cnkoXHUwMDI2cHZtdywgZm9saW9fcGFnZShmb2xpbywgMCkpO1xuIDIxMjpcdFx0XHRpZiAocmV0KSB7XG4gMjEzOlx0XHRcdFx0bWlncmF0ZS1cdTAwM2VucGFnZXMtLTtcbiAyMTQ6XHRcdFx0XHRtaWdyYXRlLVx1MDAzZWNwYWdlcy0tO1xuIDIxNTpcdFx0XHRcdG1pZ3JhdGUtXHUwMDNlc3JjW21pZ3JhdGUtXHUwMDNlbnBhZ2VzXSA9IDA7XG4gMjE2Olx0XHRcdFx0bWlncmF0ZS1cdTAwM2Vkc3RbbWlncmF0ZS1cdTAwM2VucGFnZXNdID0gMDtcbiAyMTc6XHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIDIxODpcdFx0XHR9XG4gMjE5Olx0XHRcdG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCAmIzQzOyBQQUdFX1NJWkUsIGVuZCwgd2Fsayk7XG4gMjIwOlx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gMjIxOlx0XHRcdHJldHVybiAwO1xuIDIyMjpcdFx0fVxuIDIyMzpcdFxuIDIyNDpcdGZhbGxiYWNrOlxuIDIyNTpcdFx0c3Bpbl91bmxvY2socHRsKTtcbiAyMjY6XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gMjI3Olx0XHRcdGdvdG8gZG9uZTtcbiAyMjg6XHRcdHJldCA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcbiAyMjk6XHRcdGlmIChmYXVsdF9mb2xpbyAhPSBmb2xpbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwODIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIE1pZ3JhdGlvbiBDb250ZXh0KioKCk9rYXksIHNvIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgZGVmaW5pdGVseSB0YWtlcyBgcHZtd2AsIHRoYXQmIzM5O3MgY2xlYXIuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgZWxzZSBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5LiBSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBpbiBgbW0vcm1hcC5jYCwgdGhlcmUmIzM5O3MgYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLiBUaG9zZSBhcmUgY2FsbGVkIGR1cmluZyBwYWdlIG1pZ3JhdGlvbiBhbmQgdW5tYXBwaW5nLiBUaGUgY3VycmVudCBwYXRjaCBzcGVjaWZpY2FsbHkgaGFuZGxlcyB0aGUgc2l0dWF0aW9uIHdoZW4gYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKWAgZXZhbHVhdGVzIHRvIHRydWUuCgpUaGF0JiMzOTtzIHRoZSBjb3JlLiBJdCYjMzk7cyB3aGVuIHRoZSBQTUQgaXRzZWxmIGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnkuIFJpZ2h0LCBzbyB0aGlzIHNwZWNpZmljYWxseSByZWxhdGVzIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMsIG9yIFRIUHMsIGJlaW5nIG1pZ3JhdGVkIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeS4gQWhhISBUaGF0JiMzOTtzIGl0LCB0aGVuOiB0aGlzIG5lY2Vzc2l0YXRlcyB0aGUgdXNlIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGtuZXcgdGhlcmUgd2FzIHNvbWUgZGVwZW5kZW5jeSB0aGVyZSwgYW5kIHRoYXQgY29uZmlybXMgaXQuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucy4uLiBJJiMzOTtsbCBkaXZlIGludG8gYHRyeV90b19taWdyYXRlX29uZWAgaW4gYG1tL3JtYXAuY2AgYW5kIG1ha2Ugc3VyZSBpdCBiZWhhdmVzIGV4YWN0bHkgYXMgSSBleHBlY3QuIE5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgYWxsIGFsaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19taWdyYXRlX29uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMTk0LVx0XHQgKiBJbiBjYXNlIHdlIGNhbm5vdCBjbGVhciBQYWdlQW5vbkV4Y2x1c2l2ZSgpLCBzcGxpdCB0aGUgUE1EXG5tbS9odWdlX21lbW9yeS5jOjMxOTU6XHRcdCAqIG9ubHkgYW5kIGxldCB0cnlfdG9fbWlncmF0ZV9vbmUoKSBmYWlsIGxhdGVyLlxubW0vaHVnZV9tZW1vcnkuYy0zMTk2LVx0XHQgKlxuLS1cbm1tL3JtYXAuYz0yMzk0PXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNDE0LSAqL1xubW0vcm1hcC5jOjI0MTU6c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTI0MTYtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTI3Mzk9dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcbi0tXG5tbS9ybWFwLmMtMjc0MS1cdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG5tbS9ybWFwLmM6Mjc0MjpcdFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxubW0vcm1hcC5jLTI3NDMtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODkwMgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQ3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgTWlncmF0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGFnZSBtaWdyYXRpb24gY29kZS4gSXQgbG9va3MgbGlrZSBgdHJ5X3RvX21pZ3JhdGVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBwbGFjZXMgbGlrZSBgbWlncmF0ZV9wYWdlc2Ag4oCTIG1ha2VzIHNlbnNlLiBOb3csIGBsaWIvdGVzdF9obW0uY2Agc2VlbXMgdG8gYmUgcmVsZXZhbnQsIHNwZWNpZmljYWxseSBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAsIHdoaWNoIHVzZXMgYG1pZ3JhdGVfdm1hX3NldHVwYC4gSSBpbml0aWFsbHkgdGhvdWdodCBgbWlncmF0ZV92bWFfc2V0dXBgIG1pZ2h0IGJlIHdoZXJlIGB0cnlfdG9fbWlncmF0ZWAgaXMgdXNlZCBkaXJlY3RseSwgYnV0IG5vLCBpdCBjYWxscyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGluc3RlYWQuCgpCdXQgaG9sZCBvbiwgYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGB0cnlfdG9fdW5tYXBfb25lYCB1dGlsaXplIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIE5vdywgdGhlIGltcG9ydGFudCBiaXQgaXMgd2hlbiB3ZSYjMzk7cmUgbW92aW5nIGEgcGFnZSBiYWNrICpmcm9tKiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgdG8gc3lzdGVtIG1lbW9yeS4gVGhhdCYjMzk7cyB3aGVuIGBtaWdyYXRlX3ZtYV9zZXR1cGAgY29tZXMgaW50byBwbGF5LCBmb3IgZWl0aGVyIGRpcmVjdGlvbiBhY3R1YWxseS4gCgpUaGUgcHVycG9zZSBvZiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHRvIGZpbmQgYWxsIHRoZSBtYXBwaW5ncyBvZiBhIGdpdmVuIHBhZ2UuIElmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBUSFAgdGhhdCByZXNpZGVzIGluIGRldmljZSBwcml2YXRlIG1lbW9yeSwgaXRzIFBNRCB3aWxsIGJlIGEgZGV2aWNlLXByaXZhdGUgZW50cnkuIElmIHdlIHJ1biBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIG9uIHRoYXQgcGFnZSwgaXQgd2lsbCBkZWZpbml0ZWx5IGVuY291bnRlciB0aGF0IFBNRC4gU28gd2hvJiMzOTtzIGNhbGxpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBvbiBhIHBhZ2UgdGhhdCBpcyByZXNpZGluZyBpbiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnk/CgpUaGUga2V5IGZ1bmN0aW9ucyBhcmU6IGB0cnlfdG9fbWlncmF0ZV9vbmVgLCBgdHJ5X3RvX3VubWFwX29uZWAsIGBmb2xpb19yZWZlcmVuY2VkX29uZWAsIGBwYWdlX2lkbGVfY2xlYXJfcHRlX3JlZnNfb25lYCwgYGRhbW9uX2ZvbGlvX3lvdW5nX29uZWAsIGBkYW1vbl9mb2xpb19ta29sZF9vbmVgLCBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgIGFuZCBhbHNvIGBwYWdlX21hcHBlZF9pbl92bWFgLiBFc3NlbnRpYWxseSwgKmFueSogb3BlcmF0aW9uIHRoYXQgd2Fsa3MgdGhlIHBhZ2UgdGFibGVzIGFuZCBlbmNvdW50ZXJzIGEgZGV2aWNlIHByaXZhdGUgVEhQIHdpbGwgdHJpZ2dlciB0aGlzLgoKRGlyZWN0bHkgZnV6emluZyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGl0c2VsZiBpcyBvZmYgdGhlIHRhYmxlOyBpdCYjMzk7cyBpbnRlcm5hbC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0ICp0cmlnZ2VyKiB0aGlzIGNvZGUgcGF0aC4gYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgLCBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAsIGFuZCBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgIGluIGBsaWIvdGVzdF9obW0uY2AgbG9vayBsaWtlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIHNpbmNlIHRoZXkgZGlyZWN0bHkgaGFuZGxlIGRldmljZSBwcml2YXRlIG1lbW9yeS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBsaWIvdGVzdF9obW0uY2AgZm9yIGFueSBleHBvcnRlZCBmdW5jdGlvbnMgb3IgaW9jdGxzLCBiZWNhdXNlIHRob3NlIGFyZSBteSBlbnRyeSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1pcnJvcl9pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTU1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBBIGBmaWxlX29wZXJhdGlvbnNgIENoZWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBmaWxlIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgd2l0aGluIHRoaXMgY29udGV4dC4gTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgYGxpYi90ZXN0X2htbS5jYC4gSSByZWNhbGwgdGhhdCBmaWxlIG9wZXJhdGlvbnMgYXJlIG9mdGVuIGRlZmluZWQgb3IgYXQgbGVhc3QgaGVhdmlseSB1dGlsaXplZCBhdCB0aGF0IGxldmVsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBiZWluZyBpbXBsZW1lbnRlZCwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IHNwZWNpZmljIGhhbmRsaW5nIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgdGhpcyAmIzM0O3Rlc3QgSE1NJiMzNDsgaXMgZG9pbmcgd2l0aCBmaWxlcy4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBmb3IgZXhhbWluaW5nIGZpbGUgSS9PIHdpdGhpbiBhIHByb2plY3QsIGVzcGVjaWFsbHkgaWYgdGhlIGZpbGUgaW50ZXJhY3Rpb24gaXMgY2VudHJhbCB0byBhIHRlc3Qgb3IgZGVtb25zdHJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGBmaWxlX29wZXJhdGlvbnNgIGFyZSBwcmVzZW50LiBJIHdpbGwgc3RhcnQgYnkgbG9va2luZyBmb3IgYSByZWxldmFudCBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGVfb3BlcmF0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTE1ODg9c3RhdGljIGludCBkbWlycm9yX2ZvcHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTYxMC1cbmxpYi90ZXN0X2htbS5jOjE2MTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZG1pcnJvcl9mb3BzID0ge1xubGliL3Rlc3RfaG1tLmMtMTYxMi1cdC5vcGVuXHRcdD0gZG1pcnJvcl9mb3BzX29wZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjkwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEhNTSBUZXN0IENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBob3cgdGhlIEhpZGRlbiBNYXJrb3YgTW9kZWwgKEhNTSkgbGlicmFyeSBpcyB0ZXN0ZWQuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHdoYXRldmVyIEkmIzM5O20gbG9va2luZyBmb3IgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHNldCBvZiBmdW5jdGlvbnMsIGFuZCB0aGUgdGVzdCBzdWl0ZSBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHRzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgbGliL3Rlc3RfaG1tLmNgIGZpbGUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgSE1NcywgaXQmIzM5O3MgbGlrZWx5IGEgd2VsbC1zdHJ1Y3R1cmVkIHRlc3QgZmlsZS4gSSYjMzk7bGwganVtcCByaWdodCB0byBsaW5lIDE2MTEuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgbGluZSB0byBiZSBwYXJ0IG9mIGEgZnVuY3Rpb24gb3IgdGVzdCBjYXNlIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhlIHRvcGljIEkmIzM5O20gZm9jdXNpbmcgb24uIEhvcGVmdWxseSwgdGhpcyBzcGVjaWZpYyBsaW5lIHdpbGwgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGFuYWx5emUgdGhlIHRlc3Rpbmcgc3RyYXRlZ3kgZW1wbG95ZWQgYW5kIHJldmVhbCBzb21lIGtleSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBtYXliZSByZWxhdGVkIHRvIG1vZGVsIGluaXRpYWxpemF0aW9uLCB0cmFpbmluZywgb3IgZGVjb2RpbmcuIExldCYjMzk7cyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYwMDpcdFx0XHRyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIGFkZHIsIHBhZ2UpO1xuMTYwMTpcdFx0XHRpZiAocmV0KSB7XG4xNjAyOlx0XHRcdFx0X19mcmVlX3BhZ2UocGFnZSk7XG4xNjAzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE2MDQ6XHRcdFx0fVxuMTYwNTpcdFx0XHRwdXRfcGFnZShwYWdlKTtcbjE2MDY6XHRcdH1cbjE2MDc6XHRcbjE2MDg6XHRcdHJldHVybiAwO1xuMTYwOTpcdH1cbjE2MTA6XHRcbjE2MTE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkbWlycm9yX2ZvcHMgPSB7XG4xNjEyOlx0XHQub3Blblx0XHQ9IGRtaXJyb3JfZm9wc19vcGVuLFxuMTYxMzpcdFx0LnJlbGVhc2VcdD0gZG1pcnJvcl9mb3BzX3JlbGVhc2UsXG4xNjE0Olx0XHQubW1hcFx0XHQ9IGRtaXJyb3JfZm9wc19tbWFwLFxuMTYxNTpcdFx0LnVubG9ja2VkX2lvY3RsID0gZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsLFxuMTYxNjpcdFx0Lmxsc2Vla1x0XHQ9IGRlZmF1bHRfbGxzZWVrLFxuMTYxNzpcdFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4xNjE4Olx0fTtcbjE2MTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIGlvY3RsIEhhbmRsZXIqKgoKUmlnaHQsIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgLi4uIHRoYXQmIzM5O3Mgb3VyIGlvY3RsIGhhbmRsZXIsIGlzbiYjMzk7dCBpdD8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIHRoZSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4uLiBpdCYjMzk7cyB0aGUgaGVhcnQgb2YgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlIGRyaXZlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBoYW5kbGVyIHNwZWNpZmljYWxseSB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGRtaXJyb3IgZmlsZXN5c3RlbS4gV2hhdCBzcGVjaWZpYyBpb2N0bHMgZG9lcyBpdCBzdXBwb3J0PyBXaGF0IGFzc3VtcHRpb25zIGRvZXMgaXQgbWFrZSBhYm91dCB0aGUgaW5jb21pbmcgZGF0YT8gQW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yLCBnaXZlbiBpdHMgJiMzNDt1bmxvY2tlZCYjMzQ7IG5hdHVyZT8gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIHRocmVhZC1zYWZlIGFuZCByb2J1c3QsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gZGF0YSBtaXJyb3JpbmcsIHdoaWNoIGlzIGluaGVyZW50bHkgc2Vuc2l0aXZlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgY29kZS4uLiBhbmQgbXkgZGVidWdnZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTE0ODE9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVtb3ZlX2NodW5rcyhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTUxMi1cbmxpYi90ZXN0X2htbS5jOjE1MTM6c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxubGliL3Rlc3RfaG1tLmMtMTUxNC1cdFx0XHRcdFx0dW5zaWduZWQgaW50IGNvbW1hbmQsXG4tLVxubGliL3Rlc3RfaG1tLmM9MTYxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkbWlycm9yX2ZvcHMgPSB7XG4tLVxubGliL3Rlc3RfaG1tLmMtMTYxNC1cdC5tbWFwXHRcdD0gZG1pcnJvcl9mb3BzX21tYXAsXG5saWIvdGVzdF9obW0uYzoxNjE1Olx0LnVubG9ja2VkX2lvY3RsID0gZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsLFxubGliL3Rlc3RfaG1tLmMtMTYxNi1cdC5sbHNlZWtcdFx0PSBkZWZhdWx0X2xsc2VlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzNDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFRlc3QgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBsaWIvdGVzdF9obW0uY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAxNTEzLiBUaGF0IGxpbmUgbnVtYmVyIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgd2l0aGluIHRoZSBIaWRkZW4gTWFya292IE1vZGVsIChITU0pIHRlc3Rpbmcgc3VpdGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNydWNpYWwgc2VjdGlvbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHNpZ25pZmljYW50IOKAkyBwZXJoYXBzIGEgc3BlY2lmaWMgdHJhbnNpdGlvbiBwcm9iYWJpbGl0eSBldmFsdWF0aW9uLCBhIHZlcmlmaWNhdGlvbiBvZiB0aGUgZm9yd2FyZCBhbGdvcml0aG0sIG9yIG1heWJlIGV2ZW4gYSBjb3JuZXIgY2FzZSB0ZXN0IEkmIzM5O3ZlIHNlZW4gdHJpcCB1cCB0aGlzIHR5cGUgb2YgaW1wbGVtZW50YXRpb24gYmVmb3JlLiBNeSBpbW1lZGlhdGUgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhhdCBsZXZlbCBhbmQgdG8gY29ycmVsYXRlIGl0IHdpdGggdGhlIGJyb2FkZXIgSE1NIHRlc3Rpbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb2RlJiMzOTtzIGludGVuZGVkIGJlaGF2aW9yIGF0IHRoYXQgc3BlY2lmaWMgcG9pbnQsIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIHRlc3QgZmxvdy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0byBlc3RhYmxpc2ggY29udGV4dCBhbmQgc2VlIHdoYXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgYXJlIGluIHBsYXkuIEkgYW0gbG9va2luZyBmb3IgdGhlIGxvZ2ljIHRoYXQgdGhlIHRlc3QgaGFzIGVtcGxveWVkLCBhbmQgaG93IHJvYnVzdCB0aGF0IHRlc3QgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MTA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGV2aWNlLVx1MDAzZWRldm1lbV9sb2NrKTtcbjE1MTE6XHR9XG4xNTEyOlx0XG4xNTEzOlx0c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuMTUxNDpcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgY29tbWFuZCxcbjE1MTU6XHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4xNTE2Olx0e1xuMTUxNzpcdFx0dm9pZCBfX3VzZXIgKnVhcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4xNTE4Olx0XHRzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIGNtZDtcbjE1MTk6XHRcdHN0cnVjdCBkbWlycm9yICpkbWlycm9yO1xuMTUyMDpcdFx0aW50IHJldDtcbjE1MjE6XHRcbjE1MjI6XHRcdGRtaXJyb3IgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbjE1MjM6XHRcdGlmICghZG1pcnJvcilcbjE1MjQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTI1Olx0XG4xNTI2Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2Y21kLCB1YXJnLCBzaXplb2YoY21kKSkpXG4xNTI3Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTUyODpcdFxuMTUyOTpcdFx0aWYgKGNtZC5hZGRyIFx1MDAyNiB+UEFHRV9NQVNLKVxuMTUzMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MzE6XHRcdGlmIChjbWQuYWRkciBcdTAwM2U9IChjbWQuYWRkciAmIzQzOyAoY21kLm5wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpKVxuMTUzMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MzM6XHRcbjE1MzQ6XHRcdGNtZC5jcGFnZXMgPSAwO1xuMTUzNTpcdFx0Y21kLmZhdWx0cyA9IDA7XG4xNTM2Olx0XG4xNTM3Olx0XHRzd2l0Y2ggKGNvbW1hbmQpIHtcbjE1Mzg6XHRcdGNhc2UgSE1NX0RNSVJST1JfUkVBRDpcbjE1Mzk6XHRcdFx0cmV0ID0gZG1pcnJvcl9yZWFkKGRtaXJyb3IsIFx1MDAyNmNtZCk7XG4xNTQwOlx0XHRcdGJyZWFrO1xuMTU0MTpcdFxuMTU0MjpcdFx0Y2FzZSBITU1fRE1JUlJPUl9XUklURTpcbjE1NDM6XHRcdFx0cmV0ID0gZG1pcnJvcl93cml0ZShkbWlycm9yLCBcdTAwMjZjbWQpO1xuMTU0NDpcdFx0XHRicmVhaztcbjE1NDU6XHRcbjE1NDY6XHRcdGNhc2UgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVY6XG4xNTQ3Olx0XHRcdHJldCA9IGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2UoZG1pcnJvciwgXHUwMDI2Y21kKTtcbjE1NDg6XHRcdFx0YnJlYWs7XG4xNTQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIE15IEhNTSBUZXN0aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGJlc3QgdG8gYXBwcm9hY2ggdGVzdGluZyB0aGlzIEhNTSBpbXBsZW1lbnRhdGlvbi4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIHNlZW1zIHRvIGJlIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyBpdCBhbGxvd3MgdXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgSE1NIHRocm91Z2ggaW9jdGxzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGtlZXAgdGhvc2Uga2V5IGZ1bmN0aW9ucyBpbiBtaW5kLCBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCB3aGljaCBoYW5kbGVzIHRoZSBpb2N0bCBjYWxscywgYW5kIGFsc28gYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgLCBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAsIGFuZCBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgLgoKSSYjMzk7bSByZWFsaXppbmcgdGhhdCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCBoZXJlLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdOKAmXMgY2FsbGVkIGJ5IGJvdGggYHRyeV90b191bm1hcF9vbmVgIGFuZCBgdHJ5X3RvX21pZ3JhdGVfb25lYC4gSWYgSSBmb2N1cyBvbiBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCwgdGhlbiBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaW50ZWxsaWdlbnRseSBmdXp6IHRoZSBpb2N0bHMgYXNzb2NpYXRlZCB3aXRoIGAvZGV2L2htbV9kbWlycm9yKmAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdhbnQuCgpIb3dldmVyLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQmIzM5O3MgYSAqdmVyeSogZ2VuZXJpYyBmdW5jdGlvbiwgYW5kIGlmIEkganVzdCBhZGQgaXQgdG8gYEZvY3VzU3ltYm9sc2AsIHN5emthbGxlciBtaWdodCBlbmQgdXAgZm9jdXNpbmcgb24gKmFueSogc3lzY2FsbCB0aGF0IGNhbGxzIGl0LiBUaGF0JiMzOTtzIG5lYXJseSBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2UgYG1tYXBgLCBgbXVubWFwYCwgYG1hZHZpc2VgLCBldGMuIFRoYXQmIzM5O3MgdG9vIGJyb2FkLiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGFzcGVjdCBvZiB0aGlzLCBzbyB0aGUgaW5pdGlhbCBzZXQgb2YgZnVuY3Rpb25zIC0gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAsIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCwgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gLCBhbmQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCAtIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgcmlnaHQgcGF0aC4KCldhaXQgYSBzZWNvbmTigKYgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCBpcyBhICpmYXVsdCBoYW5kbGVyKi4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIHRoYXQmIzM5O3MgdXNlZC4gTGV0IG1lIGdvIGxvb2sgYXQgYGxpYi90ZXN0X2htbS5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2Rldm1lbV9mYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTk0Nz1zdGF0aWMgaW50IGRtaXJyb3JfZXhjbHVzaXZlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTEwMDMtXG5saWIvdGVzdF9obW0uYzoxMDA0OnN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0X2FsbG9jX2FuZF9jb3B5KHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcbmxpYi90ZXN0X2htbS5jLTEwMDUtXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IpXG4tLVxubGliL3Rlc3RfaG1tLmM9MTEyMD1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4tLVxubGliL3Rlc3RfaG1tLmMtMTE2OS1cdFx0cHJfZGVidWcoXCYjMzQ7TWlncmF0aW5nIGZyb20gZGV2aWNlIG1lbSB0byBzeXMgbWVtXFxuXCYjMzQ7KTtcbmxpYi90ZXN0X2htbS5jOjExNzA6XHRcdGlmIChkbWlycm9yX2Rldm1lbV9mYXVsdF9hbGxvY19hbmRfY29weShcdTAwMjZhcmdzLCBkbWlycm9yKSkge1xubGliL3Rlc3RfaG1tLmMtMTE3MS1cdFx0XHRtaWdyYXRlX3ZtYV9maW5hbGl6ZShcdTAwMjZhcmdzKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xNjIwPXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2bWVtX2ZyZWUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5saWIvdGVzdF9obW0uYy0xNjUyLVxubGliL3Rlc3RfaG1tLmM6MTY1MzpzdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbmxpYi90ZXN0X2htbS5jLTE2NTQte1xuLS1cbmxpYi90ZXN0X2htbS5jLTE3MTMtXG5saWIvdGVzdF9obW0uYzoxNzE0Olx0cmV0ID0gZG1pcnJvcl9kZXZtZW1fZmF1bHRfYWxsb2NfYW5kX2NvcHkoXHUwMDI2YXJncywgZG1pcnJvcik7XG5saWIvdGVzdF9obW0uYy0xNzE1LVx0aWYgKHJldCkge1xuLS1cbmxpYi90ZXN0X2htbS5jLTE3MjEtXHQgKiBObyBkZXZpY2UgZmluYWxpemUgc3RlcCBpcyBuZWVkZWQgc2luY2VcbmxpYi90ZXN0X2htbS5jOjE3MjI6XHQgKiBkbWlycm9yX2Rldm1lbV9mYXVsdF9hbGxvY19hbmRfY29weSgpIHdpbGwgaGF2ZSBhbHJlYWR5XG5saWIvdGVzdF9obW0uYy0xNzIzLVx0ICogaW52YWxpZGF0ZWQgdGhlIGRldmljZSBwYWdlIHRhYmxlLlxuLS1cbmxpYi90ZXN0X2htbS5jPTE3NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZG1pcnJvcl9kZXZtZW1fb3BzID0ge1xubGliL3Rlc3RfaG1tLmMtMTc2Ny1cdC5mb2xpb19mcmVlXHQ9IGRtaXJyb3JfZGV2bWVtX2ZyZWUsXG5saWIvdGVzdF9obW0uYzoxNzY4Olx0Lm1pZ3JhdGVfdG9fcmFtXHQ9IGRtaXJyb3JfZGV2bWVtX2ZhdWx0LFxubGliL3Rlc3RfaG1tLmMtMTc2OS1cdC5mb2xpb19zcGxpdFx0PSBkbWlycm9yX2Rldm1lbV9mb2xpb19zcGxpdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2MjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgZm9yIERldmljZSBQcml2YXRlIFBhZ2UgRmF1bHQgVGVzdGluZyoqCgpPa2F5LCBzbyBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgICppcyogdGhlIGBtaWdyYXRlX3RvX3JhbWAgY2FsbGJhY2suIFBlcmZlY3QsIHRoYXQmIzM5O3MgZXhhY3RseSB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMg4oCTIHRoYXQmIzM5O3MgdGhlIG9uZSB0cmlnZ2VyZWQgd2hlbiBhIENQVSBmYXVsdHMgb24gYSBkZXZpY2UgcHJpdmF0ZSBwYWdlLiBUaGF0IGNvbmZpcm1zIGl0JiMzOTtzIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgdGhlIHRlc3QuIFNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGluY2x1ZGVzIHRoZSBmb2xsb3dpbmc6CgoqICAgYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAgKHRoYXQmIzM5O3Mgb3VyIGVudHJ5IGZyb20gdXNlcnNwYWNlKQoqICAgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIChmb3IgcHVzaGluZyBpdCB0byBkZXZpY2UgcHJpdmF0ZSkKKiAgIGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYCAoaW4gY2FzZSB3ZSBuZWVkIHRvIHB1bGwgaXQgYmFjaykKKiAgIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgKHRoZSBhbGwtaW1wb3J0YW50IGZhdWx0IGhhbmRsZXIpCgpCdXQgd2FpdOKApiB0aGlzIHBhdGNoIGFsc28gdG91Y2hlcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGFuZCB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKWAgY2hlY2suIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIFBNRCwgYW5kIHNwZWNpZmljYWxseSwgYSBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCkgdGhhdCYjMzk7cyBtYXJrZWQgYXMgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeS4gTm93IHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSBrZXkgaGVyZSBpcywgaG93IGNhbiBhIFRIUCAqYmVjb21lKiBkZXZpY2UgcHJpdmF0ZT8gSXQgbXVzdCBiZSBiZWNhdXNlIGl0JiMzOTtzIGJlZW4gbWlncmF0ZWQgdG8gZGV2aWNlIHByaXZhdGUgbWVtb3J5LCByaWdodD8gSWYgbm90LCB3aHkgd291bGQgdGhhdCBjaGVjayBiZSB0aGVyZT8gTm93IHRoZSBidXJuaW5nIHF1ZXN0aW9uIGlzOiBEb2VzIGB0ZXN0X2htbWAgYWN0dWFsbHkgc3VwcG9ydCBtaWdyYXRpbmcgYSBUSFAgdG8gZGV2aWNlIHByaXZhdGUgbWVtb3J5PyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjMwOlx0XHRcdH1cbjEyMzE6XHRcdFx0bmV4dCA9IG1pbihlbmQsIGFkZHIgJiM0MzsgKFBUUlNfUEVSX1BURSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuMTIzMjpcdFx0XHRpZiAobmV4dCBcdTAwM2Ugdm1hLVx1MDAzZXZtX2VuZClcbjEyMzM6XHRcdFx0XHRuZXh0ID0gdm1hLVx1MDAzZXZtX2VuZDtcbjEyMzQ6XHRcbjEyMzU6XHRcdFx0YXJncy52bWEgPSB2bWE7XG4xMjM2Olx0XHRcdGFyZ3Muc3JjID0gc3JjX3BmbnM7XG4xMjM3Olx0XHRcdGFyZ3MuZHN0ID0gZHN0X3BmbnM7XG4xMjM4Olx0XHRcdGFyZ3Muc3RhcnQgPSBhZGRyO1xuMTIzOTpcdFx0XHRhcmdzLmVuZCA9IG5leHQ7XG4xMjQwOlx0XHRcdGFyZ3MucGdtYXBfb3duZXIgPSBkbWlycm9yLVx1MDAzZW1kZXZpY2U7XG4xMjQxOlx0XHRcdGFyZ3MuZmxhZ3MgPSBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNIHxcbjEyNDI6XHRcdFx0XHRcdE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORDtcbjEyNDM6XHRcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG4xMjQ0Olx0XHRcdGlmIChyZXQpXG4xMjQ1Olx0XHRcdFx0Z290byBvdXQ7XG4xMjQ2Olx0XG4xMjQ3Olx0XHRcdHByX2RlYnVnKFwmIzM0O01pZ3JhdGluZyBmcm9tIHN5cyBtZW0gdG8gZGV2aWNlIG1lbVxcblwmIzM0Oyk7XG4xMjQ4Olx0XHRcdGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weShcdTAwMjZhcmdzLCBkbWlycm9yKTtcbjEyNDk6XHRcdFx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2YXJncyk7XG4xMjUwOlx0XHRcdGRtaXJyb3JfbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKFx1MDAyNmFyZ3MsIGRtaXJyb3IpO1xuMTI1MTpcdFx0XHRtaWdyYXRlX3ZtYV9maW5hbGl6ZShcdTAwMjZhcmdzKTtcbjEyNTI6XHRcdH1cbjEyNTM6XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuMTI1NDpcdFx0bW1wdXQobW0pO1xuMTI1NTpcdFxuMTI1NjpcdFx0LypcbjEyNTc6XHRcdCAqIFJldHVybiB0aGUgbWlncmF0ZWQgZGF0YSBmb3IgdmVyaWZpY2F0aW9uLlxuMTI1ODpcdFx0ICogT25seSBmb3IgcGFnZXMgaW4gZGV2aWNlIHpvbmVcbjEyNTk6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBEZXZpY2UgUHJpdmF0ZSBNZW1vcnkgd2l0aCBUSFAgTWlncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogdGhlIGNvZGUgcmVsYXRlZCB0byBkZXZpY2UgcHJpdmF0ZSBtZW1vcnksIGVzcGVjaWFsbHkgd2l0aCB0aGUgaW50ZXJhY3Rpb24gb2YgVHJhbnNwYXJlbnQgSHVnZVBhZ2VzIChUSFApLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpczogeWVzLCB3ZSYjMzk7cmUgZW5hYmxpbmcgYE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORGAsIHdoaWNoIG1lYW5zIHRoZSBgdGVzdF9obW1gIG1vZHVsZSBzdXBwb3J0cyBtaWdyYXRpbmcgVEhQcyB0byBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkuIEdyZWF0LCB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHdoYXQgSSB3YW50IHRvIHRlc3QuIEFuZCB3aGVuIHRob3NlIFRIUHMgKmFyZSogbWlncmF0ZWQsIHRoZSBQTUQgZW50cmllcyBiZWNvbWUgZGV2aWNlIHByaXZhdGUuIFRoZW4sIGlmIHNvbWV0aGluZyBjYWxscyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIG9uIHRoYXQgcGFnZSwgdGhlIG1vZGlmaWVkIGNvZGUgaW4gdGhlIHBhdGNoIHdpbGwgYmUgaGl0LgoKTm93LCB3aGF0IGNhbGxzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2A/IFRoaW5ncyBsaWtlIGB0cnlfdG9fdW5tYXBgLCB3aGljaCBoYXBwZW5zIGR1cmluZyBgbXVubWFwYCBvciBgbWFkdmlzZShNQURWX0RPTlRORUVEKWAsIGFuZCBhbHNvIGB0cnlfdG9fbWlncmF0ZWAsIHdoZW4gbWlncmF0aW5nIGJhY2sgdG8gc3lzdGVtIG1lbW9yeS4gU28gZnV6emluZyBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCBhbmQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCBtYWtlcyBwZXJmZWN0IHNlbnNlIGFzIHRoZXkgc2VlbSB0byBpbnRlcmFjdCB3aXRoIHRoaXMgY29yZSBsb2dpYy4KCkxldCYjMzk7cyBxdWlja2x5IHJlY2FwIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgbmVlZGVkIGZvciB0aGlzIHRlc3Q6CgoqICAgYERFVklDRV9QUklWQVRFYAoqICAgYFpPTkVfREVWSUNFYAoqICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYAoqICAgYFRFU1RfSE1NYAoKTm93LCBhIHF1aWNrIHNpZGUgbm90ZTogSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBURVNUX0hNTWAsIGJlaW5nIGEgbW9kdWxlIChgdHJpc3RhdGVgKSwgd2lsbCBiZSBsb2FkZWQgYnkgc3l6a2FsbGVyLiBTeXprYWxsZXIgdXN1YWxseSBoYW5kbGVzIGl0IGlmIHdlIHNwZWNpZnkgaXQuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIG1ha2UgaXQgYnVpbHQtaW4uIEFoLCBpbiBgbGliL0tjb25maWcuZGVidWdgOiB5ZXMsIGl0ICpjYW4qIGJlIGJ1aWx0LWluLiBHb29kLiBOb3csIGxldCYjMzk7cyB2ZXJpZnkgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgaXQmIzM5O3MgYSBgYm9vbGAgaW4gYG1tL0tjb25maWdgLiBBbmQgYFpPTkVfREVWSUNFYCwgdGhhdCYjMzk7cyBhIGBib29sYCBhcyB3ZWxsLiBBbmQgYERFVklDRV9QUklWQVRFYCwgYWxzbyBhIGBib29sYC4gU28gd2UmIzM5O3JlIGdvb2Qgd2l0aCB0aG9zZSBjb25maWd1cmF0aW9ucy4KCk5vdyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGRlcGVuZGVuY3kgaXNzdWVzLCBgREVWSUNFX1BSSVZBVEVgIGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gYFpPTkVfREVWSUNFYCBpbiB0dXJuIGRlcGVuZHMgb24gYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYC4gU3l6a2FsbGVyIHVzdWFsbHkgZW5hYmxlcyB0aGVzZSBmb3IgeDg2XzY0LCBzbyBsaXN0aW5nIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgVEVTVF9ITU1gIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKVGhlIG1haW4gaWRlYSBpcyB0byB0ZXN0IGEgbm9uLWhhcmR3YXJlIHNwZWNpZmljIHNldHVwLiBgVEVTVF9ITU1gIGlzIGlkZWFsIHNpbmNlIGl0JiMzOTtzIGRlc2lnbmVkIGZvciB0aGlzIGFuZCBvdGhlciBkcml2ZXJzIGxpa2UgYG5vdXZlYXVgIGFuZCBgYW1kZ3B1YCB1c2UgYERFVklDRV9QUklWQVRFYCwgYnV0IGBURVNUX0hNTWAgaXMgYSBnb29kIHdheSB0byB0ZXN0IGl0LgoKTGV0JiMzOTtzIGdvIGJhY2sgb3ZlciB0aGUgcGF0Y2ggYWdhaW4gYW5kIGRpZ2VzdCB3aGF0IGl0JiMzOTtzIGRvaW5nOgoKYGBgYwotCQl9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkgewotCQkJY29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpOwomIzQzOwkJfSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpIHsKJiM0MzsJCQlzb2Z0bGVhZl90IGVudHJ5OwomIzQzOwomIzQzOwkJCXB2bXctJmd0O3B0bCA9IHBtZF9sb2NrKG1tLCBwdm13LSZndDtwbWQpOwomIzQzOwkJCXBtZGUgPSAqcHZtdy0mZ3Q7cG1kOwomIzQzOwkJCWVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7CiAKLQkJCWlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHsKLQkJCQlwdm13LSZndDtwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy0mZ3Q7cG1kKTsKJiM0MzsJCQlpZiAobGlrZWx5KHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkpIHsKJiM0MzsJCQkJaWYgKHB2bXctJmd0O2ZsYWdzICZhbXA7IFBWTVdfTUlHUkFUSU9OKQomIzQzOwkJCQkJcmV0dXJuIG5vdF9mb3VuZChwdm13KTsKJiM0MzsJCQkJaWYgKCFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpCiYjNDM7CQkJCQlyZXR1cm4gbm90X2ZvdW5kKHB2bXcpOwogCQkJCXJldHVybiB0cnVlOwogCQkJfQotCiYjNDM7CQkJLyogZGV2aWNlLXByaXZhdGUgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqLwomIzQzOwkJCXNwaW5fdW5sb2NrKHB2bXctJmd0O3B0bCk7CiYjNDM7CQkJcHZtdy0mZ3Q7cHRsID0gTlVMTDsKJiM0MzsJCX0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7CmBgYAoKQWgsIHJpZ2h0LCB0aGlzIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cnkgY291bGQgYmUgc3BsaXQgdW5kZXJuZWF0aCB1cy4gVGhlIGZpeCBpbnZvbHZlcyB1c2luZyBgcG1kX2xvY2tgLCByZS1yZWFkaW5nIHRoZSBgcG1kZWAgcG9pbnRlciwgYW5kIGFkZGluZyBjaGVja3MgZm9yIGAKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz00MjU9c3RhdGljIGludCBkbWlycm9yX2RvX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubGliL3Rlc3RfaG1tLmMtNDUwLVxubGliL3Rlc3RfaG1tLmM6NDUxOnN0YXRpYyBpbnQgZG1pcnJvcl9yZWFkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpXG5saWIvdGVzdF9obW0uYy00NTIte1xuLS1cbmxpYi90ZXN0X2htbS5jPTE1MTM9c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmxpYi90ZXN0X2htbS5jLTE1MzgtXHRjYXNlIEhNTV9ETUlSUk9SX1JFQUQ6XG5saWIvdGVzdF9obW0uYzoxNTM5Olx0XHRyZXQgPSBkbWlycm9yX3JlYWQoZG1pcnJvciwgXHUwMDI2Y21kKTtcbmxpYi90ZXN0X2htbS5jLTE1NDAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIxNQoJCQkJCQkJb3V0cHV0OiAyMTUKCQkJCQkJCXRob3VnaHRzOiAxNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IERldmljZS1Qcml2YXRlIFRIUCBSYWNlIENvbmRpdGlvbiBGaXgqKgoKT2theSwgaGVyZSYjMzk7cyBteSBwbGFuIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgY3JpdGljYWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBkZXZpY2UtcHJpdmF0ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFBzKSB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbG9ja2luZyAoYHBtZF9sb2NrYCkgYW5kIHJlLXZhbGlkYXRpb24gdG8gcHJldmVudCBjb25jdXJyZW50IHNwbGl0cyBvZiBQTUQgZW50cmllcyB3aGVuIHRoZXNlIGRldmljZS1wcml2YXRlIFRIUHMgYXJlIGludm9sdmVkLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0JiMzOTtzIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYWZmZWN0cyBob3cgVEhQcyBhcmUgaGFuZGxlZCB3aXRoIGRldmljZXMgdGhhdCB1c2UgSE1NLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBpbmNsdWRlIGBkbWlycm9yX3JlYWRgLCBgZG1pcnJvcl93cml0ZWAsIGFuZCBgZG1pcnJvcl9leGNsdXNpdmVgIGFzIGZvY3VzIHN5bWJvbHMsIGJ1dCBsb29raW5nIGF0IGl0IG1vcmUgY2FyZWZ1bGx5LCBJIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyBlbnRyeSBwb2ludHMuIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgaXMga2V5IGJlY2F1c2UgaXQmIzM5O3MgdGhlIGZhdWx0IGhhbmRsZXIgdHJpZ2dlcmVkIHdoZW4gYSBDUFUgYWNjZXNzZXMgYSBkZXZpY2UtcHJpdmF0ZSBwYWdlLCBhbmQgc3l6a2FsbGVyIGNhbiB0cmlnZ2VyIHRoaXMgdmlhIGBkbWlycm9yX2ZvcHNfbW1hcGAuIEhvd2V2ZXIsIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgdGVzdGluZyBjb21tYW5kcy4KClRoZXJlZm9yZSwgbXkgZm9jdXMgc3ltYm9scyBuZWVkIHRvIGJlIHJlZmluZWQuIEkgd2FudCB0byBlbXBoYXNpemUgdGhlIGZ1bmN0aW9ucyB0aGF0IHNldCB1cCB0aGUgc3RhdGUgdGhhdCB3aWxsIHVsdGltYXRlbHkgdHJpZ2dlciB0aGUgcmFjZSBjb25kaXRpb24gYW5kIHRoZSBjb2RlIHRoYXQgd2FzIGNoYW5nZWQuIFNvIEkmIzM5O2xsIGdvIHdpdGggdGhlIGZvbGxvd2luZzoKCiogICBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCAtIFRoaXMgaXMgdGhlIHByaW1hcnkgdGVzdCBjb21tYW5kIGVudHJ5IHBvaW50LgoqICAgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIC0gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IG1vdmVzIHBhZ2VzIHRvIGRldmljZSBtZW1vcnkuCiogICBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAgLSBVc2VmdWwgdG8gbW92ZSBwYWdlcyBiYWNrLgoqICAgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCAtIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBmYXVsdCBoYW5kbGVyLgoqICAgYGRtaXJyb3JfZm9wc19tbWFwYCAtIFRoaXMgd2lsbCB0cmlnZ2VyIGZhdWx0cyB3aGVuIGFjY2Vzc2luZyBtYXBwZWQgcGFnZXMuCgpJIGNvbnNpZGVyZWQgaW5jbHVkaW5nIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXRzZWxmLCBidXQgSSYjMzk7bSB0aGlua2luZyB0aGF0IG1pZ2h0IGJlIHRvbyBicm9hZC4gV2hpbGUgaXQmIzM5O3MgKnRoZSogbW9kaWZpZWQgZnVuY3Rpb24sIGl0JiMzOTtzIGNhbGxlZCBmcm9tIG1hbnkgcGxhY2VzLCBhbmQgdGhhdCB3b3VsZCBkaWx1dGUgdGhlIGZ1enppbmcgZm9jdXMsIHNpbmNlIGFueSBwcm9ncmFtIHRoYXQgdXNlcyBpdCB3aWxsIGJlIHByaW9yaXRpemVkLCB3aGljaCBpcyBub3Qgd2hhdCBJIHdhbnQuIEluc3RlYWQsIEkgbmVlZCB0byBmb2N1cyBzeXprYWxsZXIgb24gY3JlYXRpbmcgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMgdG8gKnJlYWNoKiB0aGF0IGZ1bmN0aW9uIGluIHRoZSBkZXZpY2UtcHJpdmF0ZSBUSFAgY29udGV4dC4gVGhlIGBkbWlycm9yXypgIGZ1bmN0aW9ucyBkbyBleGFjdGx5IHRoYXQuCgpUaGUga2V5IGlzIHNldHRpbmcgdXAgdGhlIGNvcnJlY3Qgc3RhdGU6IGEgZGV2aWNlLXByaXZhdGUgVEhQLiBUaGVuLCBpZiBzeXprYWxsZXIgdHJpZ2dlcnMgYG1hZHZpc2UoTUFEVl9ET05UTkVFRClgLCBgbXVubWFwYCwgb3IgYG1wcm90ZWN0YCBvbiB0aGF0IFRIUCwgaXQmIzM5O2xsIGV4ZXJjaXNlIHRoZSBwYXRjaGVkIGNvZGUgcGF0aCB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gRm9jdXNpbmcgb24gdGhlIGBkbWlycm9yXypgIGZ1bmN0aW9ucyB3aWxsIGFjaGlldmUgdGhpcy4KClRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlOgoKKiAgIGBURVNUX0hNTWAKKiAgIGBERVZJQ0VfUFJJVkFURWAKKiAgIGBaT05FX0RFVklDRWAKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKCmBURVNUX0hNTWAgaXMgdGhlIG1haW4gZW5hYmxlciwgYW5kIGl0IGRlcGVuZHMgb24gdGhlIG90aGVycy4gYEhNTV9NSVJST1JgIGlzIGFsc28gc2VsZWN0ZWQgYnV0IGlzIG5vdCBuZWVkZWQgdG8gYmUgZXhwbGljaXRseSBkZWZpbmVkLgoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBhcHByb2FjaCB3aWxsIGVmZmVjdGl2ZWx5IHRhcmdldCB0aGUgcmFjZSBjb25kaXRpb24gZml4ZWQgYnkgdGhlIHBhdGNoLCBhbmQgSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0mIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9kZXZtZW1fZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdoZW4gaGFuZGxpbmcgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSkuIEl0IGFkZHMgcHJvcGVyIGxvY2tpbmcgKGBwbWRfbG9ja2ApIGFuZCByZS12YWxpZGF0aW9uIG9mIHRoZSBQTUQgZW50cnkgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gdXNpbmcgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGZlYXR1cmVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgSE1NIHRlc3QgZHJpdmVyIChgdGVzdF9obW1gKSB3aGljaCBwcm92aWRlcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbXBsZW1lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZSYjMzQ7LAogICAgJiMzNDtkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZGV2bWVtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB3aGVuIGhhbmRsaW5nIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIG1pZ3JhdGVkIHRvIGRldmljZSBtZW1vcnkpLiBJdCBhZGRzIHByb3BlciBsb2NraW5nIChgcG1kX2xvY2tgKSBhbmQgcmUtdmFsaWRhdGlvbiBvZiB0aGUgUE1EIGVudHJ5IHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBzcGxpdCBjb25jdXJyZW50bHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIHVzaW5nIGRldmljZSBwcml2YXRlIG1lbW9yeSBmZWF0dXJlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEhNTSB0ZXN0IGRyaXZlciAoYHRlc3RfaG1tYCkgd2hpY2ggcHJvdmlkZXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaW1wbGVtZW50YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozMjowNC44NTQ4MTgxMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTkzMTcyMjQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwiZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZVwiLFxuICAgIFwiZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbVwiLFxuICAgIFwiZG1pcnJvcl9kZXZtZW1fZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2Agd2hlbiBoYW5kbGluZyBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcyAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBtaWdyYXRlZCB0byBkZXZpY2UgbWVtb3J5KS4gSXQgYWRkcyBwcm9wZXIgbG9ja2luZyAoYHBtZF9sb2NrYCkgYW5kIHJlLXZhbGlkYXRpb24gb2YgdGhlIFBNRCBlbnRyeSB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgc3BsaXQgY29uY3VycmVudGx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiB1c2luZyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgZmVhdHVyZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBITU0gdGVzdCBkcml2ZXIgKGB0ZXN0X2htbWApIHdoaWNoIHByb3ZpZGVzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGltcGxlbWVudGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozMjowNC44NTQ4MjU3MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjAxMjYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg0MGVlNmE3MGNjMDlkNTc2MmJhMWQ4Mzg4YTg1MDJlMWQxMzdmNGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDc6MzI6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xcbmluZGV4IDJjY2JhYmZiMmNjMTdhLi4xN2RmZjhhYWI5ZjllNCAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xcbisrKyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuQEAgLTI2OSwxNCArMjY5LDI0IEBAIGJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbiBcXHRcXHRcXHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xcbiBcXHRcXHRcXHRzcGluX3VubG9jayhwdm13LVxcdTAwM2VwdGwpO1xcbiBcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbi1cXHRcXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xcbi1cXHRcXHRcXHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XFxuK1xcdFxcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSB7XFxuK1xcdFxcdFxcdHNvZnRsZWFmX3QgZW50cnk7XFxuK1xcbitcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4rXFx0XFx0XFx0cG1kZSA9ICpwdm13LVxcdTAwM2VwbWQ7XFxuK1xcdFxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxuLVxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbitcXHRcXHRcXHRpZiAobGlrZWx5KHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19NSUdSQVRJT04pXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuK1xcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0XFx0fVxcbi1cXG4rXFx0XFx0XFx0LyogZGV2aWNlLXByaXZhdGUgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xcbitcXHRcXHRcXHRzcGluX3VubG9jayhwdm13LVxcdTAwM2VwdGwpO1xcbitcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbitcXHRcXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xcbiBcXHRcXHRcXHRpZiAoKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19TWU5DKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXFx1MDAzZWFkZHJlc3MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFBNRF9PUkRFUikgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6MDUuMzAxNTA1NjcxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk0ODUwMjU2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcImRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VcIixcbiAgICBcImRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1cIixcbiAgICBcImRtaXJyb3JfZGV2bWVtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdoZW4gaGFuZGxpbmcgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSkuIEl0IGFkZHMgcHJvcGVyIGxvY2tpbmcgKGBwbWRfbG9ja2ApIGFuZCByZS12YWxpZGF0aW9uIG9mIHRoZSBQTUQgZW50cnkgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gdXNpbmcgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGZlYXR1cmVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgSE1NIHRlc3QgZHJpdmVyIChgdGVzdF9obW1gKSB3aGljaCBwcm92aWRlcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbXBsZW1lbnRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NDBlZTZhNzBjYzA5ZDU3NjJiYTFkODM4OGE4NTAyZTFkMTM3ZjRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDc6MzI6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5pbmRleCAyY2NiYWJmYjJjYzE3YS4uMTdkZmY4YWFiOWY5ZTQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuKysrIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcbkBAIC0yNjksMTQgKzI2OSwyNCBAQCBib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiBcdFx0XHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuIFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiBcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4tXHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4tXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuK1x0XHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkge1xuK1x0XHRcdHNvZnRsZWFmX3QgZW50cnk7XG4rXG4rXHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuK1x0XHRcdHBtZGUgPSAqcHZtdy1cdTAwM2VwbWQ7XG4rXHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiBcbi1cdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4tXHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdFx0aWYgKGxpa2VseShzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpKSB7XG4rXHRcdFx0XHRpZiAocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pXG4rXHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4rXHRcdFx0XHRpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcbitcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiBcdFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRcdH1cbi1cbitcdFx0XHQvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4rXHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuK1x0XHRcdHB2bXctXHUwMDNlcHRsID0gTlVMTDtcbitcdFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcbiBcdFx0XHRpZiAoKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfU1lOQykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIHRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBwdm13LVx1MDAzZWFkZHJlc3MsXG4gXHRcdFx0XHRcdFx0ICAgUE1EX09SREVSKSBcdTAwMjZcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjA1LjMwMTUwNzE2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Nzg0MTcwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgbWFpbiBwb2ludCBvZiBpbnRlcmVzdCBpcyBob3cgd2UncmUgaGFuZGxpbmcgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgY29yZSBNTSBmdW5jdGlvbiwgcmlnaHQ/IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgdXNlZCBmb3Igd2Fsa2luZyB0aGUgcGFnZSB0YWJsZXMuIEFueSBjaGFuZ2VzIHRvIHRoaXMgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlIGxvb2sgYW5kIGRlZmluaXRlbHkgd2FycmFudCBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgY29uZGl0aW9uYWwgY2hhbmdlIGFyb3VuZCB0aGUgaGFuZGxpbmcgb2YgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIFRoZSBleGlzdGluZyBsb2dpYyBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrLCBhbmQgYSBmZXcgY29uZGl0aW9uYWwgbG9jayBvcGVyYXRpb25zLiBUaGUgb3JpZ2luYWwgYGlmYCBjb25kaXRpb24gaGFzIGJlZW4gc3dhcHBlZCBmb3IgYSBuZXcgY29uZGl0aW9uIHdoaWNoIGNhbGxzIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLiBUaGUgbmV3IGNvZGUgcGF0aCBzZWVtcyB0byBiZSBhZGRpbmcgYWRkaXRpb25hbCBsb2NraW5nLCBhbmQgY2hlY2tzIHRvIGVuc3VyZSB0aGUgYHBtZGAgaXNuJ3QgY2hhbmdpbmcgd2hpbGUgaXQgcHJvY2Vzc2VzIHRoZSBlbnRyeS4gSSBzZWUgdGhpcyBpcyBiZWluZyBkb25lIHRvIGVuc3VyZSB0aGUgYHBtZGAgaXNuJ3Qgc3BsaXQgYnkgYW5vdGhlciB0aHJlYWQuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBzbyBJJ2xsIGFsc28gdHJ5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBoZXJlLiBNeSBpbnR1aXRpb24gc2F5cyBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCAqY291bGQqIGJlIHJlbGF0ZWQgdG8gc29tZXRoaW5nIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEknbGwgcnVuIGEgcXVpY2sgZ3JlcCB0byBjb25maXJtIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgZXhhY3Qgc2NlbmFyaW9zIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2ggYW5kIHBvdGVudGlhbCBhcmVhcyB0byBmb2N1cyB0ZXN0aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6MTIuODc5OTI2MDc5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDI4MzgzOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU1ND1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU3Mi0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1NzM6ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTc0LSAqIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTgzLSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU4NDpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkwLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU5MTpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTIte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTEyLVxcdFxcdGRpcnR5ID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jOjMxMTM6XFx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKnBtZCkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTMxMTQtXFx0XFx0c29mdGxlYWZfdCBlbnRyeTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzI1My1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzozMjU0OlxcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9sZF9wbWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0zMjU1LVxcdFxcdHB0ZV90IGVudHJ5O1xcbi0tXFxubW0vbWVtb3J5LmM9NjQxNz1zdGF0aWMgdm1fZmF1bHRfdCBfX2hhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTY0OTAtXFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudCh2bWYub3JpZ19wbWQpKSkge1xcbm1tL21lbW9yeS5jOjY0OTE6XFx0XFx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSh2bWYub3JpZ19wbWQpKVxcbm1tL21lbW9yeS5jLTY0OTItXFx0XFx0XFx0cmV0dXJuIGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKFxcdTAwMjZ2bWYpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTgwPWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjcxLVxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IE5VTEw7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjcyOlxcdFxcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjczLVxcdFxcdFxcdHNvZnRsZWFmX3QgZW50cnk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjE0LjgyMjc3MDExMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODg0MzM3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAncyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgYmVpbmcgYWN0aXZlLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBidXQgSSBjYW4ndCBxdWl0ZSByZWNhbGwgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IGVuYWJsZSBpdC4gVG8gZmlndXJlIHRoaXMgb3V0IHF1aWNrbHksIEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIG91dCBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiBvciBhdCB0aGUgdmVyeSBsZWFzdCwgcmVsZXZhbnQgcHJlcHJvY2Vzc29yIG1hY3JvcyByZWxhdGVkIHRvIGl0cyBlbmFibGluZyBjb25kaXRpb25zLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY29uZmlnIG9wdGlvbnMgKG9yLCBhdCBsZWFzdCwgdGhlIGluY2x1ZGUvZGVwZW5kZW5jeSBzdHJ1Y3R1cmUpLCB0aGF0IGdvdmVybiB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY29tcGlsZWQgYW5kIHVzZWQuIEhvcGVmdWxseSwgdGhpcyBmaWxlIHdpbGwgaGF2ZSB0aGUgYW5zd2VyLCBvciBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6MTguMTExMjA1MjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MDM3ODU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfREVWSUNFX1BSSVZBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9Njg9Q09ORklHX1pPTkVfREVWSUNFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZzo2OTpDT05GSUdfREVWSUNFX1BSSVZBVEU9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnLTcwLUNPTkZJR19ORVQ9eVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTQwPXN0YXRpYyBpbmxpbmUgZW51bSBzb2Z0bGVhZl90eXBlIHNvZnRsZWFmX3R5cGUoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTE2MC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoxNjE6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTE2Mi1cXHRjYXNlIFNXUF9ERVZJQ0VfV1JJVEU6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MTY2PXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xNjcte1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNjg6XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xNjktXFx0XFx0Zm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MTczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZXZpY2VfcHJpdmF0ZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xNzQte1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNzU6XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xNzYtXFx0XFx0Zm9saW9faXNfZGV2aWNlX3ByaXZhdGUocGFnZV9mb2xpbyhwYWdlKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD0zND1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNzUtICovXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NzY6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTc3LSNkZWZpbmUgU1dQX0RFVklDRV9OVU0gM1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCAqc3dwX3RvX3JhZGl4X2VudHJ5KHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTM0LVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjEzNTojaWYgSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTM2LXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShwZ29mZl90IG9mZnNldClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTE0Nj1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeShwZ29mZl90IG9mZnNldClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE1MC1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxNTE6I2Vsc2UgLyogQ09ORklHX0RFVklDRV9QUklWQVRFICovXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTUyLXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShwZ29mZl90IG9mZnNldClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTE2Mj1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeShwZ29mZl90IG9mZnNldClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE2Ni1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxNjc6I2VuZGlmIC8qIENPTkZJR19ERVZJQ0VfUFJJVkFURSAqL1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE2OC1cXG4tLVxcbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTI4My1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG5tbS9tZW1yZW1hcC5jOjI4NDpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKSkge1xcbm1tL21lbXJlbWFwLmMtMjg1LVxcdFxcdFxcdFdBUk4oMSwgXFxcIkRldmljZSBwcml2YXRlIG1lbW9yeSBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4tLVxcbm1tL3JtYXAuYz0yNzM5PXZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXFxuLS1cXG5tbS9ybWFwLmMtMjc3Ni1cXG5tbS9ybWFwLmM6Mjc3NzojaWZkZWYgQ09ORklHX0RFVklDRV9QUklWQVRFXFxubW0vcm1hcC5jLTI3NzgtLyoqXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9ND1DT05GSUdfVEVTVF9WTUFMTE9DPW1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc6NTpDT05GSUdfREVWSUNFX1BSSVZBVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZy02LUNPTkZJR19URVNUX0hNTT1tXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjE5Ljk5MTU5MjI0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDA4ODY3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipQaW5wb2ludGluZyB0aGUgQ3JpdGljYWwgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyB0aGUga2V5IHZhcmlhYmxlIHRvIGZvY3VzIG9uLiBUaGF0J3MgdXN1YWxseSB0aGUgaW5kaWNhdG9yIHdlIG5lZWQgZm9yIHRoZSBkZXZpY2UtbGV2ZWwgY3VzdG9taXphdGlvbnMuIExldCdzIHNlZS4uLiBub3cgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIGV4YWN0bHkgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gaG9vayBpcyBwbGFjZWQuIEkgcmVjYWxsIHRoYXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYCBob2xkcyBhIGxvdCBvZiB0aG9zZSBsb3ctbGV2ZWwgZGVmaW5pdGlvbnMsIHNvIHRoYXQncyB0aGUgbGlrZWx5IHNwb3QuIFNwZWNpZmljYWxseSwgSSBzZWVtIHRvIHJlbWVtYmVyIHRoYXQgYSBrZXkgcm91dGluZSB3aWxsIGJlIGFyb3VuZCBsaW5lIDU4NCBvciBzby4gSSdsbCBuZWVkIHRvIGdvIGNoZWNrIHRoZSBjb2RlIHRoZXJlIHRvIGNvbmZpcm0gaG93IGl0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjIyLjkzMjQ4MTI3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHQjaWYgZGVmaW5lZChDT05GSUdfWk9ORV9ERVZJQ0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pXFxuIDU3MTpcXHRcXG4gNTcyOlxcdC8qKlxcbiA1NzM6XFx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuIDU3NDpcXHQgKiBlbnRyeS5cXG4gNTc1OlxcdCAqIEBwbWQ6IFRoZSBQTUQgdG8gY2hlY2suXFxuIDU3NjpcXHQgKlxcbiA1Nzc6XFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBQTUQgY29udGFpbnMgYSBzd2FwIGVudHJ5IHRoYXQgcmVwcmVzZW50cyBhIGRldmljZSBwcml2YXRlXFxuIDU3ODpcXHQgKiBwYWdlIG1hcHBpbmcuIFRoaXMgaXMgdXNlZCBmb3Igem9uZSBkZXZpY2UgcHJpdmF0ZSBwYWdlcyB0aGF0IGhhdmUgYmVlblxcbiA1Nzk6XFx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxcbiA1ODA6XFx0ICogb3BlcmF0aW9ucy5cXG4gNTgxOlxcdCAqXFxuIDU4MjpcXHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcXG4gNTgzOlxcdCAqL1xcbiA1ODQ6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDU4NTpcXHR7XFxuIDU4NjpcXHRcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIDU4NzpcXHR9XFxuIDU4ODpcXHRcXG4gNTg5OlxcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG4gNTkwOlxcdFxcbiA1OTE6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDU5MjpcXHR7XFxuIDU5MzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDU5NDpcXHR9XFxuIDU5NTpcXHRcXG4gNTk2OlxcdCNlbmRpZiAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG4gNTk3OlxcdFxcbiA1OTg6XFx0LyoqXFxuIDU5OTpcXHQgKiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KCkgLSBEb2VzIHRoaXMgUE1EIGVudHJ5IGVuY29kZSBhIG1pZ3JhdGlvbiBlbnRyeT9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6MjIuOTMyNTU4MzQ5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NDMzODU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gRGV2aWNlLVByaXZhdGUgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBpcyBhY3RpdmUuIFJpZ2h0LCByaWdodCwgdGhhdCdzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19aT05FX0RFVklDRWAgYW5kIHRoZSBgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gIG9wdGlvbnMuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzcGVjaWFsaXplZCBtZW1vcnkgaGFuZGxpbmcgaW4gdGhvc2UgY29udGV4dHMuIExldCdzIHNlZS4uLiB3aGF0IGVsc2UgaXMgdGllZCBpbnRvIHRoaXM/IEFoLCB5ZXMsIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIGlzIGFsc28gaW4gdGhlIG1peC4gSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBmdW5jdGlvbiB0byBiZSBjZXJ0YWluIEkgaGF2ZSB0aGUgY29tcGxldGUgcGljdHVyZSBvbiBob3cgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGlzIGNsYXNzaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjI2LjEwNjg5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MzM4OTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODItXFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSkge1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMDgzOlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXFx0XFx0XFx0XFx0cHJlc2VudCA9IHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yMzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjQ4LS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI0OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTAtICogd3JpdGFibGUgZW50cnk/XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTUtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjU2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1Ny17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjEtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjYyOiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjMtICogQGVudHJ5OiBMZWFmIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY2LSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzM1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNDEtXFx0XFx0cmV0dXJuIHRydWU7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzQyOlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzQzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTg0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU4NS17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTg2OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxNy1cXHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYxODpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjE5LVxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSk7XFxuLS1cXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2htbS5jLTI2Ni1cXHRcXHQgKi9cXG5tbS9obW0uYzoyNjc6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL2htbS5jLTI2OC1cXHRcXHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXFx1MDAzZW93bmVyID09XFxuLS1cXG5tbS9obW0uYy0yNzAtXFx0XFx0XFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcXG5tbS9obW0uYzoyNzE6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9obW0uYy0yNzItXFx0XFx0XFx0XFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9obW0uYy0yODQtXFxubW0vaG1tLmM6Mjg1OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vaG1tLmMtMjg2LVxcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuLS1cXG5tbS9obW0uYz0zMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vaG1tLmMtMzQ1LVxcbm1tL2htbS5jOjM0NjpcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vaG1tLmMtMzQ3LVxcdCAgICBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSktXFx1MDAzZXBnbWFwLVxcdTAwM2Vvd25lciA9PVxcbi0tXFxubW0vaG1tLmMtMzUzLVxcbm1tL2htbS5jOjM1NDpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL2htbS5jLTM1NS1cXHRcXHRcXHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcXG4tLVxcbm1tL2htbS5jLTM3Mi1cXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG5tbS9obW0uYzozNzM6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9obW0uYy0zNzQtXFx0XFx0XFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE4MDg9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTgyNy1cXHRcXHRzZXRfcG1kX2F0KHNyY19tbSwgYWRkciwgc3JjX3BtZCwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjE4Mjg6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTE4MjktXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzMi1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE4MzM6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzNC1cXHRcXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTU1PXN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU3NS1cXHRcXHRcXHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjU3NjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjU3Ny1cXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTIzLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzEyNDpcXHRcXHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jLTMxMjUtXFx0XFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDg2Nj1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODk1LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDg5NjpcXHRcXHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKG9sZF9lbnRyeSk7XFxubW0vaHVnZV9tZW1vcnkuYy00ODk3LVxcdFxcdHNvZnRkaXJ0eSA9IHBtZF9zd3Bfc29mdF9kaXJ0eShwbWR2YWwpO1xcbi0tXFxubW0vbWVtb3J5LmM9OTQxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9tZW1vcnkuYy05OTAtXFx0XFx0fVxcbm1tL21lbW9yeS5jOjk5MTpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbm1tL21lbW9yeS5jLTk5Mi1cXHRcXHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XFxuLS1cXG5tbS9tZW1vcnkuYy0xMDE1LVxcdFxcdCAqL1xcbm1tL21lbW9yeS5jOjEwMTY6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbW9yeS5jLTEwMTctXFx0XFx0ICAgIGlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkge1xcbi0tXFxubW0vbWVtb3J5LmM9MTczNT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xNzQ0LVxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbm1tL21lbW9yeS5jOjE3NDU6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21lbW9yeS5jLTE3NDYtXFx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XFxuLS1cXG5tbS9tZW1vcnkuYz00NzQ3PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDc3My1cXHRcXHRcXHRyZXQgPSByZW1vdmVfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeSh2bWYpO1xcbm1tL21lbW9yeS5jOjQ3NzQ6XFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy00Nzc1LVxcdFxcdFxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzAtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzE6XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG5tbS9taWdyYXRlX2RldmljZS5jLTE3Mi1cXHRcXHRcXHQhKG1pZ3JhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSB8fFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzctXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzg6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTE3OS1cXHRcXHRcXHR3cml0ZSA9IE1JR1JBVEVfUEZOX1dSSVRFO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDE9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjk1LVxcdFxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjI5NjpcXHRcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTI5Ny1cXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTMyNi1cXHRcXHRcXHRcXHRcXHRNSUdSQVRFX1BGTl9NSUdSQVRFO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzI3OlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMjgtXFx0XFx0XFx0XFx0bXBmbiB8PSBNSUdSQVRFX1BGTl9XUklURTtcXG4tLVxcbm1tL21wcm90ZWN0LmM9MjE0PXN0YXRpYyBsb25nIGNoYW5nZV9zb2Z0bGVhZl9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tcHJvdGVjdC5jLTIzNS1cXHRcXHRcXHRuZXdwdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShuZXdwdGUpO1xcbm1tL21wcm90ZWN0LmM6MjM2OlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XFxubW0vbXByb3RlY3QuYy0yMzctXFx0XFx0LypcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xODI9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2NhY2hlZF93cml0YWJsZShzb2Z0bGVhZl90IGVudHJ5KVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xODMte1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxODQ6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSB8fFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xODUtXFx0XFx0c29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcwLVxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjcxOlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzItXFx0XFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEyNC1cXHRcXHQvKiBIYW5kbGUgdW4tYWRkcmVzc2FibGUgWk9ORV9ERVZJQ0UgbWVtb3J5ICovXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTI1OlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTI2LVxcdFxcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODA9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzgtXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6Mjc5OlxcdFxcdFxcdGlmIChsaWtlbHkoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSkge1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI4MC1cXHRcXHRcXHRcXHRpZiAocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX01JR1JBVElPTilcXG4tLVxcbm1tL3JtYXAuYz0yNDE1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNjAwLVxcbm1tL3JtYXAuYzoyNjAxOlxcdFxcdFxcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xcbm1tL3JtYXAuYy0yNjAyLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6MjcuOTgwMjk0Nzc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTUyNTQyNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaGFzIGJlZW4gYWx0ZXJlZC4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGhvdyB3ZSBoYW5kbGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKWAuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgbG9jayBhY3F1aXNpdGlvbiB3aXRoIGBwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7YCBhbmQgYXJlIG5vdyBleHBsaWNpdGx5IGNoZWNraW5nIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgLiBUaGUga2V5IGNvbmRpdGlvbmFsIHNlZW1zIHRvIGJlLCBpZiB0aGF0J3MgdHJ1ZSwgdGhlbiB3ZSBleGFtaW5lIHRoZSBgUFZNV19NSUdSQVRJT05gIGZsYWcgYW5kIGludm9rZSBgY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpYC4gVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSByZWFsbHksIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBnZWFyZWQgdG93YXJkcyBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkgYW5kIGhvdyB3ZSB0cmF2ZXJzZSBwYWdlIHRhYmxlcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYm90aCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBhbmQgYENPTkZJR19aT05FX0RFVklDRWAuIEFoLCB3YWl0LCB3YXNuJ3QgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgZGVwZW5kZW50IG9uIGBDT05GSUdfWk9ORV9ERVZJQ0VgPyBZZXMsIEkgc2hvdWxkIGdvIGJhY2sgYW5kIGRvdWJsZSBjaGVjayB0aGF0LiBMZXQncyBzZWUuLi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gYnkgY2hlY2tpbmcgdGhlIGBtbS9LY29uZmlnYCBmaWxlIGZvciBgREVWSUNFX1BSSVZBVEVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzc1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjM5LjUzMjgzOTMwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMDE1OTExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX1BSSVZBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjExPWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTIxMy1cXG5tbS9LY29uZmlnOjEyMTQ6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjE1LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6NDEuMzQzMDAzOTUzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDI5MDg1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGlzIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAxMjE0LiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBhcyBpdCdzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIHRoZSBjb3JlIG9wdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggaXMgd2hhdCBJJ20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dHMsIGFuZCBkZWZhdWx0IHZhbHVlcyBkZWZpbmVkIGZvciB0aGUgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjQ4LjA0NTkxNTU3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwOlxcdFxcbjEyMTE6XFx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbjEyMTI6XFx0XFx0Ym9vbFxcbjEyMTM6XFx0XFxuMTIxNDpcXHRjb25maWcgREVWSUNFX1BSSVZBVEVcXG4xMjE1OlxcdFxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG4xMjE2OlxcdFxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG4xMjE3OlxcdFxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG4xMjE4OlxcdFxcbjEyMTk6XFx0XFx0aGVscFxcbjEyMjA6XFx0XFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxcbjEyMjE6XFx0XFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXFxuMTIyMjpcXHRcXHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cXG4xMjIzOlxcdFxcbjEyMjQ6XFx0Y29uZmlnIFZNQVBfUEZOXFxuMTIyNTpcXHRcXHRib29sXFxuMTIyNjpcXHRcXG4xMjI3OlxcdGNvbmZpZyBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcXG4xMjI4OlxcdFxcdGJvb2xcXG4xMjI5OlxcdGNvbmZpZyBBUkNIX0hBU19QS0VZU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozMjo0OC4wNDYwNDc0NTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzOTI2MDM1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgbGlrZSB5b3Vyc2VsZjpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgaW1tZWRpYXRlbHkgemVyb2luZyBpbiBvbiBhIGRlcGVuZGVuY3k6IGBERVZJQ0VfUFJJVkFURWAgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAuIFRoYXQncyB0aGUgY29yZSByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaGVyZS4gTXkgbmV4dCBpbW1lZGlhdGUgc3RlcD8gV2VsbCwgbmF0dXJhbGx5LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZHJpbGxpbmcgZG93biBvbiBgWk9ORV9ERVZJQ0VgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZGVmaW5pdGlvbiwgZnVuY3Rpb25hbGl0eSwgYW5kIHBvdGVudGlhbCBjb25zdHJhaW50cyBiZWNhdXNlLCBsaWtlIGFueSBnb29kIGVuZ2luZWVyLCBJIGtub3cgdGhhdCBhIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwIG1lYW5zIGBaT05FX0RFVklDRWAncyBiZWhhdmlvciBmdW5kYW1lbnRhbGx5IHNoYXBlcyBgREVWSUNFX1BSSVZBVEVgJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgYFpPTkVfREVWSUNFYCBzaWRlIG9mIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MTUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjUyLjk4NTMxMTM0NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxODI4OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWk9ORV9ERVZJQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMTc4PWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTExODItXFxubW0vS2NvbmZpZzoxMTgzOmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTE4NC1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozMjo1NC44MDM2MDU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDkwNDg4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYXNwZWN0IG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGJldHRlci4gVGhlIGlzc3VlIGlzIGxpa2VseSByZWxhdGVkIHRvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSG1tLCB0aGUgYG1tL0tjb25maWdgIGZpbGUgaXMgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhcm91bmQgbGluZSAxMTgzLiBUaGF0IGFyZWEgdXN1YWxseSBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gd2hhdCBJJ20gdHJvdWJsZXNob290aW5nLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGRlZmluZWQgb3IgcmVmZXJlbmNlZCB0aGVyZSwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG90aGVyIHJlbGV2YW50IG9wdGlvbnMuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IEtjb25maWcgYW5kIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMzOjAyLjQ1MjY1NzI2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTgwOlxcdFxcdGRlcGVuZHMgb24gIVg4Nl8zMlxcbjExODE6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuMTE4MjpcXHRcXG4xMTgzOlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjExODQ6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMTg1OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG4xMTg2OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjExODc6XFx0XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbjExODg6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjExODk6XFx0XFxuMTE5MDpcXHRcXHRoZWxwXFxuMTE5MTpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTE5MjpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuMTE5MzpcXHRcXHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxcbjExOTQ6XFx0XFx0ICBcXFwiZGV2aWNlLXBoeXNpY2FsXFxcIiBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxcbjExOTU6XFx0XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxuMTE5NjpcXHRcXG4xMTk3OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxcbjExOTg6XFx0XFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXFxuMTE5OTpcXHRcXHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzM6MDIuNDUyNzYwMDc2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNjM0NTA0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHJlYXNvbmluZzpcblxuKipFbmFibGluZyBERVZJQ0VfUFJJVkFURSBhbmQgWk9ORV9ERVZJQ0U6IEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBlbmFibGluZyBgREVWSUNFX1BSSVZBVEVgIGFuZCBgWk9ORV9ERVZJQ0VgLiBTdGFuZGFyZCBwcm9jZWR1cmUsIGJ1dCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gb3JkZXIuIFNwZWNpZmljYWxseSwgSSByZWNhbGwgZW5jb3VudGVyaW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIGRlZmluZWQgdW5kZXIgYSBjb25kaXRpb25hbCBibG9jay4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUgbmVjZXNzYXJ5IHByZXJlcXVpc2l0ZXMgYXJlIG1ldC4gVGhhdCBkZWZpbml0aW9uIGlzIHdyYXBwZWQgaW4gYW4gYCNpZmAgdGhhdCBoaW5nZXMgb24gYm90aCBgQ09ORklHX1pPTkVfREVWSUNFYCAqYW5kKiBgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwPyBDb25maXJtaW5nIHRoZSBzdGF0dXMgb2YgYENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OYC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgZmxhZ3MgYW5kIGFueSBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBUaGluIEh5cGVycGFnZSAoVEhQKSBtaWdyYXRpb24gc2NoZW1lLiBMZXQncyBzZWUgaWYgdGhhdCdzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjM5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozMzoxMS43MTYyMTM2MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTM1MDkwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02NTA9Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTItXFxubW0vS2NvbmZpZzo2NTM6Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTY1NC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMzOjEzLjUyOTcyNzg0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQ3MDI2MTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYmV0dGVyLiBMZXQncyBzdGFydCB3aXRoIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY1My4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgcmVsYXRlZCBkZXBlbmRlbmNpZXMgcmVsZXZhbnQgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBtYXkgYmUgZGVmaW5lZCBvciB1c2VkIG5lYXIgdGhhdCBsaW5lLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzeW1ib2xzIGFyZSBkZWZpbmVkIG9yIHVzZWQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgbG9naWMgYXJvdW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzZXR0aW5ncy4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIEkgY2FuIGRpZyB1cCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNDoxMC45OTk5OTI2MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjUwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUwOlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cXG4gNjUxOlxcdFxcdGJvb2xcXG4gNjUyOlxcdFxcbiA2NTM6XFx0Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4gNjU0OlxcdFxcdGJvb2xcXG4gNjU1OlxcdFxcbiA2NTY6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxuIDY1NzpcXHRcXHRkZWZfYm9vbCBuXFxuIDY1ODpcXHRcXHRoZWxwXFxuIDY1OTpcXHRcXHQgIEFsbG93cyB0aGUgcGFnZWJsb2NrX29yZGVyIHZhbHVlIHRvIGJlIGR5bmFtaWMgaW5zdGVhZCBvZiBqdXN0IHN0YW5kYXJkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM0OjExLjAwMDA5NTM5NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg0MTIyMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEFyY2hpdGVjdHVyZS1TcGVjaWZpYyBTZWxlY3Rpb24gb2YgYEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gLCBhbmQgaW1tZWRpYXRlbHkgSSBub3RpY2UgaXQncyBhIGJvb2xlYW4gd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBwcm9tcHQuIFRoYXQgbWVhbnMgaXQncyBvbmUgb2YgdGhvc2UgZmxhZ3MgdGhhdCdzIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IHNwZWNpZmljIGFyY2hpdGVjdHVyZXMsIG5vdCBzb21ldGhpbmcgdGhlIHVzZXIgY29uZmlndXJlcy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBhcmNoaXRlY3R1cmVzIGFyZSB1c2luZyBpdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHN5bWJvbCB0byBzZWUgd2hlcmUgaXQgZ2V0cyBkZWZpbmVkLiBMZXQncyBkaWcgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgc2VlIHdoaWNoIGAuY29uZmlnYCBlbnRyaWVzIGFyZSBzZXR0aW5nIHRoaXMuIFRpbWUgdG8gZ2V0IHRoaXMgaW52ZXN0aWdhdGlvbiBtb3ZpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTU1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNDoxMy44ODQyMjAxMTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDU4ODQzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTktXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuYXJjaC9hcm02NC9LY29uZmlnOjIwOlxcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9hcm02NC9LY29uZmlnLTIxLVxcdHNlbGVjdCBBUkNIX0hBU19DQUNIRV9MSU5FX1NJWkVcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTU6XFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE2LVxcdHNlbGVjdCBBUkNIX0hBU19BQ1BJX1RBQkxFX1VQR1JBREVcXHRpZiBBQ1BJXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZT0xMDk9Y29uZmlnIFBQQ19USFBcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTExNC0gICAgICAgc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZToxMTU6ICAgICAgIHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE2LVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTI0LVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTIFxcdTAwM2UgMlxcbmFyY2gvcmlzY3YvS2NvbmZpZzoyNTpcXHRzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNi1cXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc4PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04Ny1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL3MzOTAvS2NvbmZpZzo4ODpcXHRzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvczM5MC9LY29uZmlnLTg5LVxcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTcyLVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDIpIFxcdTAwMjZcXHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcXG5hcmNoL3g4Ni9LY29uZmlnOjczOlxcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gveDg2L0tjb25maWctNzQtXFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVxcdGlmIEFDUElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6MTUuNzkwMTExNDI2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjAyNTI2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRW5hYmxpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGZvciBPcHRpbWFsIFBlcmZvcm1hbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBoYW5kbGVkLCBhbmQgaXQgc2VlbXMgdGhlIHNlbGVjdGlvbiBpcyBkcml2ZW4gYnkgYHg4Nl82NGAgYXJjaGl0ZWN0dXJlLCBwcm92aWRlZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIHN0YW5kYXJkIHByYWN0aWNlIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb24gbW9kZXJuIGhhcmR3YXJlLiBHaXZlbiB0aGF0LCBlbmFibGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGl0c2VsZiBsb29rcyBsaWtlIGEgdmVyeSBnb29kIGlkZWEuIFRoaXMgd2FycmFudHMgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gY29uZmlybSB0aGUgY3VycmVudCBzdGF0ZSBvZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaW1lIHRvIHZlcmlmeSB0aGF0IHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODg4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6MTkuMTEwMzY2ODMzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI2OTgxNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc5MD1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctNzkyLVxcbm1tL0tjb25maWc6NzkzOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTc5NC1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04MTE9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTgxNi1cXG5tbS9LY29uZmlnOjgxNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04MTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04MjMtXFxubW0vS2NvbmZpZzo4MjQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTgyNS1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04MzItXFxubW0vS2NvbmZpZzo4MzM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04MzQtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg0MD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODQ5LVxcbm1tL0tjb25maWc6ODUwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04NTEtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg1OS1cXG5tbS9LY29uZmlnOjg2MDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg2MS1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2Ny1cXG5tbS9LY29uZmlnOjg2ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctODY5LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzUtXFxubW0vS2NvbmZpZzo4NzY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy04NzctXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04ODU9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5NC1cXG5tbS9LY29uZmlnOjg5NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODk2LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDMtXFxubW0vS2NvbmZpZzo5MDQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDUtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTEtXFxubW0vS2NvbmZpZzo5MTI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkxMy1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE5LVxcbm1tL0tjb25maWc6OTIwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTIxLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6MjAuOTM3MzUzODI5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDMwNDc3NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRnV6emluZyoqXG5cblJpZ2h0LCBzbywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyB3ZSBhYnNvbHV0ZWx5ICpuZWVkKiB0byBiZSBpbiBwbGFjZSBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4gTXkgaW5pdGlhbCBjaGVja2xpc3QgaXMgY29taW5nIGRvd24gdG86IGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaG9zZSBzZWVtIGVzc2VudGlhbCBmb3IgdGhlIGNvcmUgc2V0dXAgd2UncmUgdGFyZ2V0aW5nLlxuXG5Ob3csIGEgcXVlc3Rpb24gaXMgcG9wcGluZyB1cDogY2FuIHdlIGxldmVyYWdlIGBURVNUX0hNTWAgaGVyZT8gR2l2ZW4gaXRzIHB1cnBvc2XigJRzcGVjaWZpY2FsbHksIHByb3ZpZGluZyB0aGF0IG1vY2sgZGV2aWNlIHNldHVwIGZvciBITU0gYW5kIGRldmljZSBwcml2YXRlIG1lbW9yeSB0ZXN0aW5n4oCUaXQgKm1pZ2h0KiBiZSByZWFsbHkgdXNlZnVsIGZvciBzZXR0aW5nIHVwIGEgY29udHJvbGxlZCB0ZXN0aW5nIGVudmlyb25tZW50LCBtYWtpbmcgZnV6emluZyB0aGlzIHdob2xlIHRoaW5nIG11Y2ggbW9yZSBtYW5hZ2VhYmxlLiBXb3J0aCBhIGNsb3NlciBsb29rLCBhdCBsZWFzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNDozNC4zNjc4MzQ4NDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDgwNzMwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMzE9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMzOC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzM5OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNDAtXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6MzYuMjE1OTEzNzcxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMzQwNDgyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBwcm9qZWN0LiBHaXZlbiB0aGUgbmF0dXJlIG9mIHdoYXQgSSdtIGxvb2tpbmcgZm9yLCBteSBpbnR1aXRpb24gc3VnZ2VzdHMgdGhlIGBLY29uZmlnLmRlYnVnYCBmaWxlIGlzIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHplcm8gaW4gYXJvdW5kIGxpbmUgMzMzOS4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzdGFydGluZyBwb2ludDsgb2Z0ZW4sIHRoZXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHN0cnVjdHVyZWQgd2l0aCByZWxhdGVkIG9wdGlvbnMgZ3JvdXBlZCB0b2dldGhlciwgYW5kIHRoYXQgbGluZSBtaWdodCBob3VzZSB0aGUgb3B0aW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSwgb3IgYXQgbGVhc3QgYSBjcnVjaWFsIHBvaW50IG9mIHJlZmVyZW5jZSBmb3IgYSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi4gTGV0J3Mgc2VlIHdoYXQgaW5zaWdodHMgdGhhdCBzcGVjaWZpYyBhcmVhIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM0OjQ1LjQ0OTk2NDgwOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzMzNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMzNTpcXHRcXHQgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0ZXN0IGluaXRfb25fYWxsb2MgYW5kIGluaXRfb25fZnJlZSBmZWF0dXJlcy5cXG4zMzM2OlxcdFxcbjMzMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMzg6XFx0XFxuMzMzOTpcXHRjb25maWcgVEVTVF9ITU1cXG4zMzQwOlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuMzM0MTpcXHRcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuMzM0MjpcXHRcXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxuMzM0MzpcXHRcXHRzZWxlY3QgSE1NX01JUlJPUlxcbjMzNDQ6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjMzNDU6XFx0XFx0aGVscFxcbjMzNDY6XFx0XFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cXG4zMzQ3OlxcdFxcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxcbjMzNDg6XFx0XFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXFxuMzM0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6NDUuNDUwMjE5ODk3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MTEzMDE4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZXZpY2UgUHJpdmF0ZSBNZW1vcnkgd2l0aCBURVNUX0hNTSoqXG5cbk9rYXksIHNvIGBURVNUX0hNTWAgbG9va3MgbGlrZSB0aGUgaWRlYWwgYXBwcm9hY2ggZm9yIGZ1enppbmcgZGV2aWNlIHByaXZhdGUgbWVtb3J5LCBwYXJ0aWN1bGFybHkgc2luY2Ugd2UncmUgbGFja2luZyByZWFsIGhhcmR3YXJlIGZvciB0aGlzLiBJdCdzIHRpbWUgdG8gZW5hYmxlIGl0LiBOb3csIGxldCdzIHN0cmF0ZWdpY2FsbHkgcGljayBvdXIgdGFyZ2V0cy4gTXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBXaGlsZSBpdCdzIGEgZnVuZGFtZW50YWwgTU0gZnVuY3Rpb24gYW5kIGhlYXZpbHkgdXRpbGl6ZWQsIHRoYXQgYWxzbyBwcmVzZW50cyBhIHZhc3QgYXR0YWNrIHN1cmZhY2UuXG5cblRoZSBrZXkgaXMgdG8gbmFycm93IG91ciBmb2N1cy4gQXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBicm9hZGVyIGFyZWEgdGhhdCBhcmUgbW9yZSBkaXJlY3RseSB0aWVkIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeSBhY2Nlc3M/IFBlcmhhcHMgc29tZSBzcGVjaWFsaXplZCBoZWxwZXIgZnVuY3Rpb24/IExldCdzIGRyaWxsIGRvd24gaW50byBgbW0vcGFnZV92bWFfbWFwcGVkLmNgIGl0c2VsZi4gV2UgbmVlZCB0byBpZGVudGlmeSBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSB0aGF0IGFyZSBlaXRoZXIgZXhjbHVzaXZlbHkgb3IgKmhlYXZpbHkqIGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgcmVnaW9uIG1hcHBpbmcuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxncmFwaCBoZXJlIGlzIGtleSB0byBtYXhpbWl6aW5nIG91ciBmdXp6aW5nIGVmZmljaWVuY3kgYW5kIHVuY292ZXJpbmcgZGV2aWNlLXNwZWNpZmljIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBmaWxlIGlzIHRoZSBwcmltYXJ5IHNvdXJjZSBvZiB0cnV0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1OTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNDo1My4zNjE1MjQ0NDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV92bWFfbWFwcGVkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjYwOlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyNjE6XFx0XFx0XFx0XFx0fVxcbiAyNjI6XFx0XFx0XFx0XFx0aWYgKGxpa2VseShwbWRfdHJhbnNfaHVnZShwbWRlKSkpIHtcXG4gMjYzOlxcdFxcdFxcdFxcdFxcdGlmIChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxcbiAyNjQ6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjY1OlxcdFxcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHBtZF9wZm4ocG1kZSksIHB2bXcpKVxcbiAyNjY6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjY3OlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyNjg6XFx0XFx0XFx0XFx0fVxcbiAyNjk6XFx0XFx0XFx0XFx0LyogVEhQIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cXG4gMjcwOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuIDI3MTpcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbiAyNzI6XFx0XFx0XFx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpIHtcXG4gMjczOlxcdFxcdFxcdFxcdHNvZnRsZWFmX3QgZW50cnk7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyNzY6XFx0XFx0XFx0XFx0cG1kZSA9ICpwdm13LVxcdTAwM2VwbWQ7XFxuIDI3NzpcXHRcXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRcXHRcXHRpZiAobGlrZWx5KHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkpIHtcXG4gMjgwOlxcdFxcdFxcdFxcdFxcdGlmIChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxcbiAyODE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxcbiAyODM6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjg0OlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyODU6XFx0XFx0XFx0XFx0fVxcbiAyODY6XFx0XFx0XFx0XFx0LyogZGV2aWNlLXByaXZhdGUgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xcbiAyODc6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHZtdy1cXHUwMDNlcHRsKTtcXG4gMjg4OlxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IE5VTEw7XFxuIDI4OTpcXHRcXHRcXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xcbiAyOTA6XFx0XFx0XFx0XFx0aWYgKChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfU1lOQykgXFx1MDAyNlxcdTAwMjZcXG4gMjkxOlxcdFxcdFxcdFxcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cXHUwMDNlYWRkcmVzcyxcXG4gMjkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFBNRF9PUkRFUikgXFx1MDAyNlxcdTAwMjZcXG4gMjkzOlxcdFxcdFxcdFxcdCAgICAocHZtdy1cXHUwMDNlbnJfcGFnZXMgXFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcXG4gMjk0OlxcdFxcdFxcdFxcdFxcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRcXHRcXHRzdGVwX2ZvcndhcmQocHZtdywgUE1EX1NJWkUpO1xcbiAyOTc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI5ODpcXHRcXHRcXHR9XFxuIDI5OTpcXHRcXHRcXHRpZiAoIW1hcF9wdGUocHZtdywgXFx1MDAyNnBtZGUsIFxcdTAwMjZwdGwpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM0OjUzLjM2MTYwODY1OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY4MTA3NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgYXBwZWFycyB0byBoYXZlIGJlZW4gbW9kaWZpZWQgaXMgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgc2luY2UgaXQncyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBpdCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4gSG93ZXZlciwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSByZWxldmFudCBjb2RlIHBhdGggd2l0aGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgc3BlY2lmaWNhbGx5IGZvciBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YC4gTXkgY29uY2VybiBpcyB0aGF0IGZvY3VzaW5nIHNvbGVseSBvbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIG1pZ2h0IGJpYXMgdGhlIGZ1enppbmcgZWZmb3J0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjb2RlIHBhdGggdGhhdCBhY3R1YWxseSB0cmlnZ2VycyB0aGlzIHNwZWNpZmljIGNoZWNrLiBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IGhlcmUsIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLCBpcyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgYW5kIGRldmljZS1wcml2YXRlIG1lbW9yeSwgc28gSSBuZWVkIHRvIGV4cGxvcmUgaXRzIHJlbGF0aW9uIHRvIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIExldCdzIHNlZSB3aGVyZSBleGFjdGx5IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgY2FsbGVkIGZyb20uIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgYnJvYWRlciBwaWN0dXJlIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIGFjY3VyYXRlbHkgYW5kIGVuc3VyZSBteSBmdXp6aW5nIHN0cmF0ZWd5IGlzIGNvbXByZWhlbnNpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njg3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6NTguOTI5NzE4NDc0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk1NjcxMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2Vfdm1hX21hcHBlZF93YWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9NTIyPXN0cnVjdCBscnV2ZWM7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MjM6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzA4PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzEyOnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMy1cXHRcXHR1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD04NTE9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODYzLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg2NDpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsge1xcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg2NS1cXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg3Ni0jZGVmaW5lIERFRklORV9GT0xJT19WTUFfV0FMSyhuYW1lLCBfZm9saW8sIF92bWEsIF9hZGRyZXNzLCBfZmxhZ3MpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg3NzpcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgbmFtZSA9IHtcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODc4LVxcdFxcdC5wZm4gPSBmb2xpb19wZm4oX2ZvbGlvKSxcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04ODUtXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODg2OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04ODcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk1LS8qKlxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg5NjogKiBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0IC0gUmVzdGFydCB0aGUgcGFnZSB0YWJsZSB3YWxrLlxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg5NzogKiBAcHZtdzogUG9pbnRlciB0byBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsuXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk4LSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD05MDQ9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTA1OnBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTkwNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MTgtXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTE5OmJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MjAtdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMTc9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIxLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyMjpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGs7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIzLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNC0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjU6ZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI2LVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjctXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI4OmV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjktXFx0XFx0c3RydWN0IHBhZ2UgKm5ldyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMzM9c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQxLSNlbHNlICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0MjpzdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQzLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQ3LVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0OS1cXHRcXHRzdHJ1Y3QgcGFnZSAqbmV3KVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjMtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE2NDpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE2NS1cXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMDEtXFx0KmFjY2Vzc2VkID0gZmFsc2U7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIwMjpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMy1cXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNi1cXHRcXHRpZiAoKmFjY2Vzc2VkKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIyNzpcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00ODYyPWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2NS0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG5tbS9odWdlX21lbW9yeS5jOjQ4NjY6aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5tbS9odWdlX21lbW9yeS5jLTQ4NjctXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ5MzktXFxubW0vaHVnZV9tZW1vcnkuYzo0OTQwOnZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBzdHJ1Y3QgcGFnZSAqbmV3KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0MS17XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTEyMzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMjU3LSAqL1xcbm1tL2ludGVybmFsLmg6MTI1ODpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX2FkZHJlc3NfZW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9pbnRlcm5hbC5oLTEyNTkte1xcbi0tXFxubW0va3NtLmM9MTI3NT1zdGF0aWMgaW50IHdyaXRlX3Byb3RlY3RfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2tzbS5jLTEyOTYtXFxubW0va3NtLmM6MTI5NzpcXHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSlcXG5tbS9rc20uYy0xMjk4LVxcdFxcdGdvdG8gb3V0X21uO1xcbi0tXFxubW0va3NtLmMtMTM1OC1vdXRfdW5sb2NrOlxcbm1tL2tzbS5jOjEzNTk6XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0va3NtLmMtMTM2MC1vdXRfbW46XFxuLS1cXG5tbS9taWdyYXRlLmM9Mjc5PWJvb2wgaXNvbGF0ZV9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjk3LVxcbm1tL21pZ3JhdGUuYzoyOTg6c3RhdGljIGJvb2wgdHJ5X3RvX21hcF91bnVzZWRfdG9femVyb3BhZ2Uoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbm1tL21pZ3JhdGUuYy0yOTktXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3Qgb2xkX3B0ZSwgdW5zaWduZWQgbG9uZyBpZHgpXFxuLS1cXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMzUxLVxcbm1tL21pZ3JhdGUuYzozNTI6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL21pZ3JhdGUuYy0zNTMtXFx0XFx0cm1hcF90IHJtYXBfZmxhZ3MgPSBSTUFQX05PTkU7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE5Ni1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE5NzpcXHRcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE5OC1cXHRcXHRcXHQucHRsID0gcHRsLFxcbi0tXFxubW0vcGFnZV9pZGxlLmM9NTI9c3RhdGljIGJvb2wgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcGFnZV9pZGxlLmMtNTgtXFxubW0vcGFnZV9pZGxlLmM6NTk6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL3BhZ2VfaWRsZS5jLTYwLVxcdFxcdGFkZHIgPSBwdm13LmFkZHJlc3M7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEwOnN0YXRpYyBpbmxpbmUgYm9vbCBub3RfZm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTExLXtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjpcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHB2bXcpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzLVxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE2OnN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNy1cXHRcXHQgICAgc3BpbmxvY2tfdCAqKnB0bHApXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04Ny0gKiBtYXBwZWQgYXQgdGhlIEBwdm13LVxcdTAwM2VwdGVcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo4ODogKiBAcHZtdzogcGFnZV92bWFfbWFwcGVkX3dhbGsgc3RydWN0LCBpbmNsdWRlcyBhIHBhaXIgcHRlIGFuZCBwZm4gcmFuZ2VcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04OS0gKiBmb3IgY2hlY2tpbmdcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTkxLSAqXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6OTI6ICogcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBmb3VuZCBhIHBsYWNlIHdoZXJlIHBmbiByYW5nZSBpcyAqcG90ZW50aWFsbHkqXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTMtICogbWFwcGVkLiBjaGVja19wdGUoKSBoYXMgdG8gdmFsaWRhdGUgdGhpcy5cXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEwNi0gKi9cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDc6c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTA4LXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzOS0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE0MDpzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDEte1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQ4LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE0OTpzdGF0aWMgdm9pZCBzdGVwX2ZvcndhcmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHNpemUpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTUwLXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1Ni0vKipcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNTc6ICogcGFnZV92bWFfbWFwcGVkX3dhbGsgLSBjaGVjayBpZiBAcHZtdy1cXHUwMDNlcGZuIGlzIG1hcHBlZCBpbiBAcHZtdy1cXHUwMDNldm1hIGF0XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTU4LSAqIEBwdm13LVxcdTAwM2VhZGRyZXNzXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTU5OiAqIEBwdm13OiBwb2ludGVyIHRvIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2Fsay4gcGFnZSwgdm1hLCBhZGRyZXNzIGFuZCBmbGFnc1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE2MC0gKiBtdXN0IGJlIHNldC4gcG1kLCBwdGUgYW5kIHB0bCBtdXN0IGJlIE5VTEwuXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjYtICogSWYgQHB2bXctXFx1MDAzZXBtZCBpcyBzZXQgYnV0IEBwdm13LVxcdTAwM2VwdGUgaXMgbm90LCB5b3UgaGF2ZSBmb3VuZCBQTUQtbWFwcGVkIHBhZ2VcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNjc6ICogKHVzdWFsbHkgVEhQKS4gRm9yIFBURS1tYXBwZWQgVEhQLCB5b3Ugc2hvdWxkIHJ1biBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIGluXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTY4LSAqIGEgbG9vcCB0byBmaW5kIGFsbCBQVEVzIHRoYXQgbWFwIHRoZSBUSFAuXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNzYtICpcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNzc6ICogSWYgeW91IG5lZWQgdG8gc3RvcCB0aGUgd2FsayBiZWZvcmUgcGFnZV92bWFfbWFwcGVkX3dhbGsoKSByZXR1cm5lZCBmYWxzZSxcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNzg6ICogdXNlIHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoKS4gSXQgd2lsbCBkbyB0aGUgaG91c2VrZWVwaW5nLlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3OS0gKi9cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxODA6Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTgxLXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTM1Nj11bnNpZ25lZCBsb25nIHBhZ2VfbWFwcGVkX2luX3ZtYShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM1OS1cXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNjA6XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzYxLVxcdFxcdC5wZm4gPSBwYWdlX3RvX3BmbihwYWdlKSxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM2OS1cXHRcXHRnb3RvIG91dDtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNzA6XFx0aWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzcxLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM3MjpcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNzMtb3V0Olxcbi0tXFxubW0vcm1hcC5jPTkxNz1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTkyNC1cXG5tbS9ybWFwLmM6OTI1OlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG5tbS9ybWFwLmMtOTI2LVxcdFxcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuLS1cXG5tbS9ybWFwLmMtOTQ4LVxcdFxcdFxcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcXG5tbS9ybWFwLmM6OTQ5OlxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy05NTAtXFx0XFx0XFx0cHJhLVxcdTAwM2V2bV9mbGFncyB8PSBWTV9MT0NLRUQ7XFxuLS1cXG5tbS9ybWFwLmMtOTYzLVxcdFxcdFxcdHByYS1cXHUwMDNlcmVmZXJlbmNlZCA9IC0xO1xcbm1tL3JtYXAuYzo5NjQ6XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTk2NS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9ybWFwLmMtMTAwMi1cXHRcXHRpZiAocHRlcyA9PSBwdm13Lm5yX3BhZ2VzKSB7XFxubW0vcm1hcC5jOjEwMDM6XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTEwMDQtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmM9MTA2ND1pbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxcbi0tXFxubW0vcm1hcC5jLTExMDItXFxubW0vcm1hcC5jOjExMDM6c3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxubW0vcm1hcC5jLTExMDQte1xcbi0tXFxubW0vcm1hcC5jLTExMTctXFxubW0vcm1hcC5jOjExMTg6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKHB2bXcpKSB7XFxubW0vcm1hcC5jLTExMTktXFx0XFx0aW50IHJldCA9IDA7XFxuLS1cXG5tbS9ybWFwLmM9MTIzMT1zdGF0aWMgYm9vbCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0xMjM0LVxcdHN0cnVjdCB3cnByb3RlY3RfZmlsZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHdycHJvdGVjdF9maWxlX3N0YXRlICopYXJnO1xcbm1tL3JtYXAuYzoxMjM1OlxcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xcbm1tL3JtYXAuYy0xMjM2LVxcdFxcdC5wZm5cXHRcXHQ9IHN0YXRlLVxcdTAwM2VwZm4sXFxuLS1cXG5tbS9ybWFwLmM9MTMxMD1pbnQgcGZuX21rY2xlYW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHBnb2ZmX3QgcGdvZmYsXFxuLS1cXG5tbS9ybWFwLmMtMTMxMi17XFxubW0vcm1hcC5jOjEzMTM6XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxubW0vcm1hcC5jLTEzMTQtXFx0XFx0LnBmblxcdFxcdD0gcGZuLFxcbi0tXFxubW0vcm1hcC5jPTE5NDQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vcm1hcC5jOjE5NDU6XFx0XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbm1tL3JtYXAuYy0xOTQ2LVxcdFxcdFxcdGVudW0gdHR1X2ZsYWdzIGZsYWdzLCBwdGVfdCBwdGUpXFxuLS1cXG5tbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTIwMzEtXFxubW0vcm1hcC5jOjIwMzI6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL3JtYXAuYy0yMDMzLVxcdFxcdG5yX3BhZ2VzID0gMTtcXG4tLVxcbm1tL3JtYXAuYy0yMDg5LVxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5UVFVfU1BMSVRfSFVHRV9QTUQ7XFxubW0vcm1hcC5jOjIwOTA6XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTIwOTEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9ybWFwLmMtMjM2My13YWxrX2RvbmU6XFxubW0vcm1hcC5jOjIzNjQ6XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTIzNjUtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmM9MjQxNT1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjQ2MC1cXG5tbS9ybWFwLmM6MjQ2MTpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vcm1hcC5jLTI0NjItXFx0XFx0LyogUE1ELW1hcHBlZCBUSFAgbWlncmF0aW9uIGVudHJ5ICovXFxuLS1cXG5tbS9ybWFwLmMtMjQ3Ni1cXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+VFRVX1NQTElUX0hVR0VfUE1EO1xcbm1tL3JtYXAuYzoyNDc3OlxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNDc4LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vcm1hcC5jLTI0OTMtXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxubW0vcm1hcC5jOjI0OTQ6XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI0OTUtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmMtMjU0OS1cXHRcXHRcXHRcXHRpZiAoIWh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUodm1hKSkge1xcbm1tL3JtYXAuYzoyNTUwOlxcdFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNTUxLVxcdFxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbi0tXFxubW0vcm1hcC5jLTI1NjMtXFx0XFx0XFx0XFx0XFx0ICovXFxubW0vcm1hcC5jOjI1NjQ6XFx0XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI1NjUtXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmMtMjY1MC1cXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5tbS9ybWFwLmM6MjY1MTpcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjY1Mi1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYy0yNjYxLVxcdFxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbm1tL3JtYXAuYzoyNjYyOlxcdFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNjYzLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jLTI2NjgtXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxubW0vcm1hcC5jOjI2Njk6XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI2NzAtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS92bXNjYW4uYz00MTM0PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTgwLSAqL1xcbm1tL3Ztc2Nhbi5jOjQxODE6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQxODIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTowMC43MjU0MDA4NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzkxNTA2NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVk1BIFdhbGsgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIGhhbmRsaW5nIGRldmljZSBwcml2YXRlIG1lbW9yeSBtaWdyYXRpb24gYW5kIHVubWFwcGluZywgYW5kIGl0IGxvb2tzIGxpa2UgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGJlaW5nIHVzZWQgYWNyb3NzIHNldmVyYWwga2V5IGFyZWFzOiBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYHRyeV90b191bm1hcF9vbmVgLCBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLCBgZGFtb25fZm9saW9feW91bmdfb25lYCwgYW5kIGV2ZW4gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBmdW5jdGlvbnMgbW9zdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBpdHNlbGYuXG5cbkdpdmVuIHRoZSBjb250ZXh0IG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBhbmQgaXRzIG1hbmlwdWxhdGlvbiwgYm90aCBgdHJ5X3RvX21pZ3JhdGVfb25lYCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBhcHBlYXIgdG8gYmUgc3Ryb25nIGNhbmRpZGF0ZXMgZm9yIGRlZXBlciBpbnNwZWN0aW9uLiBUaGV5IHNlZW0gbGlrZSB0aGV5J2QgYmUgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIHRoaXMgcHJvYmxlbS5cblxuSSB0aGluayBJJ2xsIHN0YXJ0IHdpdGggYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCwgbWFpbmx5IGJlY2F1c2UgaXQgc291bmRzIGNsb3NlciB0byBhY3R1YWxseSBjb2xsZWN0aW5nIHRoZSByZWxldmFudCBkYXRhIGZvciB0aGUgbWlncmF0aW9uLiBMZXQncyBzZWUuLi4gSSdsbCBwdWxsIHVwIGBtbS9taWdyYXRlX2RldmljZS5jYCBhbmQgZGlnIGludG8gdGhhdCBmdW5jdGlvbi4gU2VlIHdoYXQgaXQncyByZWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2Qgd2l0aCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ1MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTowOC4xMTY5MTAzNzFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTU4ODA5NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfY29sbGVjdF9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDAtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyNDE6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTI0Mi1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz00ODg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBtaWdyYXRlX3ZtYV93YWxrX29wcyA9IHtcXG5tbS9taWdyYXRlX2RldmljZS5jOjQ4OTpcXHQucG1kX2VudHJ5XFx0XFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTQ5MC1cXHQucHRlX2hvbGVcXHRcXHQ9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6MTAuMTMyNzk2NzMzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODI0MzE5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFZNQSBNaWdyYXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIEkga25vdyB0aGF0IGZ1bmN0aW9uJ3MgY3J1Y2lhbCBmb3IgdGhlIHBhZ2UgbWlncmF0aW9uIHByb2Nlc3MsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmU/IFJpZ2h0LCB0aGUgY29kZSdzIGNhbGxpbmcgaXQgdGhyb3VnaCBgd2Fsa19wYWdlX3JhbmdlYCB3aXRoaW4gYG1pZ3JhdGVfdm1hX3NldHVwYC4gVGhhdOKAmXMgbXkga2V5IGVudHJ5IHBvaW50LiBUbyBmdWxseSBncmFzcCB0aGlzLCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQuIFRpbWUgdG8gY2hlY2sgYG1pZ3JhdGVfdm1hX3NldHVwYC4gSSBuZWVkIHRvIHJldmlldyBpdHMgbG9naWMgdG8gc2VlIGhvdyBpdCBzZXRzIHRoZSBzdGFnZSBmb3IgdGhlIFBNRCBjb2xsZWN0aW9uLCBhbmQgdGhlIGNvbmRpdGlvbnMgaW4gd2hpY2ggaXQgaW52b2tlcyB0aGUgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgYG1pZ3JhdGVfdm1hX3NldHVwYCB3aWxsIGlsbHVtaW5hdGUgaG93IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgaXMgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwODYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNToxNC4zMTUyMzE1MTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzk3NTQwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI2ND11c2UgaGFyZHdhcmUgRE1BIG9yIGRldmljZSBzcGVjaWZpYyBsb2FkL3N0b3JlIGluc3RydWN0aW9ucyB0byBtaWdyYXRlIGRhdGEuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjY2LWZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gbWFrZSBkcml2ZXJzIGVhc2llciB0byB3cml0ZSBhbmQgdG8gY2VudHJhbGl6ZSBjb21tb25cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDEtICAgVGhlIGRldmljZSBkcml2ZXIgaGFzIHRvIHBhc3MgYSBgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGBgIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwMjogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNvIHRoZSBtbWFwX3JlYWRfbG9jaygpIG9yIG1tYXBfd3JpdGVfbG9jaygpIG5lZWRzIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMy0gICBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIG1pZ3JhdGlvbi5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA0LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDU6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA2LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDctICAgVGhlIGRldmljZSBkcml2ZXIgaW5pdGlhbGl6ZXMgdGhlIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAgZmllbGRzIGFuZCBwYXNzZXNcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA4OiAgIHRoZSBwb2ludGVyIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoZSBgYGFyZ3MtXFx1MDAzZWZsYWdzYGAgZmllbGQgaXMgdXNlZCB0b1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDktICAgZmlsdGVyIHdoaWNoIHNvdXJjZSBwYWdlcyBzaG91bGQgYmUgbWlncmF0ZWQuIEZvciBleGFtcGxlLCBzZXR0aW5nXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE3LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMTg6ICAgT25lIG9mIHRoZSBmaXJzdCBzdGVwcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIGRvZXMgaXMgdG8gaW52YWxpZGF0ZSBvdGhlclxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTktICAgZGV2aWNlJ3MgTU1VcyB3aXRoIHRoZSBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCgpYGAgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI0LSAgIGBgTU1VX05PVElGWV9NSUdSQVRFYGAgYW5kIHRoZSBgYG93bmVyYGAgZmllbGQgc2V0IHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMyNTogICB0aGUgYGBhcmdzLVxcdTAwM2VwZ21hcF9vd25lcmBgIGZpZWxkIHBhc3NlZCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGlzXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyNi0gICBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gc2tpcCB0aGUgaW52YWxpZGF0aW9uIGNhbGxiYWNrIGFuZCBvbmx5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM3LSAgIGluc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBQVEUuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMzODogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIGFsc28gY2xlYXJzIHRoZSBgYGFyZ3MtXFx1MDAzZWRzdGBgIGFycmF5LlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIxMj1ITU0g5YiH5o2i5Yiw55u05o6l5L2/55SoIHN0cnVjdCBwYWdlIOeUqOS6juiuvuWkh+WGheWtmO+8jOi/meS9v+W+l+Wkp+WkmuaVsOWGheaguOS7o+eggei3r+W+hOS4jeefpemBk+W3ruW8guOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMTgt55Sx5LqOIENQVSDml6Dms5Xnm7TmjqXorr/pl67orr7lpIflhoXlrZjvvIzlm6DmraTorr7lpIfpqbHliqjnqIvluo/lv4Xpobvkvb/nlKjnoazku7YgRE1BIOaIluiuvuWkh+eJueWumueahOWKoOi9vS/lrZhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIxOTrlgqjmjIfku6TmnaXov4Hnp7vmlbDmja7jgIJtaWdyYXRlX3ZtYV9zZXR1cCgp44CBbWlncmF0ZV92bWFfcGFnZXMoKSDlkoxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIyMC1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yNDM9ZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQ5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUwOiAgIOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+WwhiBgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGBgIOS8oOmAkue7mW1pZ3JhdGVfdm1hX3NldHVwKCnvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1MS0gICDlm6DmraTpnIDopoHlnKjov4Hnp7vmnJ/pl7Tkv53nlZkgbW1hcF9yZWFkX2xvY2soKSDmiJYgbW1hcF93cml0ZV9sb2NrKCnjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Mi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1MzoyLiBgYG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU1LSAgIOiuvuWkh+mpseWKqOWIneWni+WMluS6hiBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIOeahOWtl+aute+8jOW5tuWwhuivpeaMh+mSiOS8oOmAkue7mVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjU2OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCnjgIJgYGFyZ3MtXFx1MDAzZWZsYWdzYGAg5a2X5q615piv55So5p2l6L+H5ruk5ZOq5Lqb5rqQ6aG16Z2i5bqU6K+l6KKr6L+B56e744CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTctICAg5L6L5aaC77yM6K6+572uIGBgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTWBgIOWwhuWPqui/geenu+ezu+e7n+WGheWtmO+8jOiuvue9rlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjM6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeaJgOWBmueahOesrOS4gOatpeaYr+eUqCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KClgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY0LSAgIOWSjCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpYGAg6LCD55So5p2l6YGN5Y6G6K6+5aSH5ZGo5Zu055qE6aG16KGo77yM5L2/XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Ny0gICDlhbYgYGBldmVudGBgIOWtl+auteiuvue9ruS4uk1NVV9OT1RJRllfTUlHUkFURe+8jCBgYG93bmVyYGAg5a2X5q616K6+572u5Li65Lyg6YCS57uZXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjg6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeeahCBgYGFyZ3MtXFx1MDAzZXBnbWFwX293bmVyYGAg5a2X5q6144CC6L+Z5YWB6K646K6+5aSH6amx5Yqo6Lez6L+H5pegXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjktICAg5pWI5YyW5Zue6LCD77yM5Y+q5peg5pWI5YyW6YKj5Lqb5a6e6ZmF5q2j5Zyo6L+B56e755qE6K6+5aSH56eB5pyJTU1V5pig5bCE44CC6L+Z5LiA54K55bCG5Zyo5LiL5LiA6IqC6K+m57uG6Kej6YeK44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3NS0gICBgYGxvY2tfcGFnZSgpYGDplIHlrprvvIzkuI5MUlXpmpTnprvvvIjlpoLmnpzns7vnu5/lhoXlrZjlkozorr7lpIfnp4HmnInpobXkuI3lnKhMUlXkuIrvvInvvIzku47ov5tcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI3NjogICDnqIvkuK3lj5bmtojmmKDlsITvvIzlubbmj5LlhaXkuIDkuKrnibnmrornmoTov4Hnp7tQVEXmnaXku6Pmm7/ljp/mnaXnmoRQVEXjgIIgbWlncmF0ZV92bWFfc2V0dXAoKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjc3LSAgIOi/mOa4hemZpOS6hiBgYGFyZ3MtXFx1MDAzZWRzdGBgIOaVsOe7hOOAglxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz01MTM9c3RhdGljIGludCBfX2t2bXBwY19zdm1fcGFnZV9vdXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUzOC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjUzOTpcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTU0MC1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz03NDA9c3RhdGljIGludCBrdm1wcGNfc3ZtX3BhZ2VfaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2MC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjc2MTpcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz0zOTM9c3ZtX21pZ3JhdGVfdm1hX3RvX3ZyYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjQzMTpcXHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMyLVxcdGlmIChyKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTY5Mj1zdm1fbWlncmF0ZV92bWFfdG9fcmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzMtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo3MzQ6XFx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczNS1cXHRpZiAocikge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTM1MTU9c3ZtX3JhbmdlX2Jlc3RfcHJlZmV0Y2hfbG9jYXRpb24oc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODItICogYW5kIHJlc3RvcmUgd29yazpcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MzU4MzogKiAxLiBtaWdyYXRlX3ZtYV9zZXR1cCBpbnZhbGlkYXRlIHBhZ2VzLCBNTVUgbm90aWZpZXIgY2FsbGJhY2sgc3ZtX3JhbmdlX2V2aWN0XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODQtICogICAgc3RvcHMgYWxsIHF1ZXVlcywgc2NoZWR1bGUgcmVzdG9yZSB3b3JrXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz01MTc9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg0LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU4NTpcXHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg2LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMTEzPXN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNjYtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE2NzpcXHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2OC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTIzNS1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzoyMzY6XFx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKSBcXHUwMDNjIDApXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM3LVxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz04MjI9bm91dmVhdV9kbWVtX21pZ3JhdGVfdm1hKHN0cnVjdCBub3V2ZWF1X2RybSAqZHJtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODcxLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjg3MjpcXHRcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncyk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODczLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2NC1cXHQgKiBUaGUgc3JjIGFycmF5IG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxNjU6XFx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSwgYW5kIG11c3Qgbm90IGNoYW5nZSB0aGUgZHN0IGFycmF5IGFmdGVyXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY2LVxcdCAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgcmV0dXJucy5cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5Mi1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTM6aW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyk7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTE2NC1cXG5saWIvdGVzdF9obW0uYzoxMTY1OlxcdFxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xMTY2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEyNDItXFx0XFx0XFx0XFx0TUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EO1xcbmxpYi90ZXN0X2htbS5jOjEyNDM6XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpO1xcbmxpYi90ZXN0X2htbS5jLTEyNDQtXFx0XFx0aWYgKHJldClcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNzA1LVxcdC8qXFxubGliL3Rlc3RfaG1tLmM6MTcwNjpcXHQgKiBJbiBwcmFjdGljZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNob3VsZCBuZXZlciBmYWlsIHVubGVzcyB0aGVcXG5saWIvdGVzdF9obW0uYy0xNzA3LVxcdCAqIHRlc3QgaXMgd3JvbmcgYXMgaXQganVzdCB0ZXN0cyBzb21lIHN0YXRpYyBWTUEgcHJvcGVydGllcy5cXG5saWIvdGVzdF9obW0uYy0xNzA4LVxcdCAqL1xcbmxpYi90ZXN0X2htbS5jOjE3MDk6XFx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKSkge1xcbmxpYi90ZXN0X2htbS5jLTE3MTAtXFx0XFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz02NTk9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02NjUtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2NjY6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY3LSAqIEBhcmdzOiBjb250YWlucyB0aGUgdm1hLCBzdGFydCwgYW5kIHBmbnMgYXJyYXlzIGZvciB0aGUgbWlncmF0aW9uXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTcyOC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjcyOTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzMwLXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzY4LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjc2OTpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTc3MC1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM1NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3Ni0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM3NzogKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIGlzIHNpbWlsYXIgaW4gY29uY2VwdCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpIGV4Y2VwdCB0aGF0XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzc4LSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzg0LSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzg1OiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzODYtICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbid0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NTU9aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjctXFx0ICogdGhlIHNvdXJjZSBmb2xpby4gU28gY2FsbCBtaWdyYXRlX3ZtYV91bm1hcCgpIGRpcmVjdGx5IHRvIHVubWFwIHRoZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpcXHQgKiBmb2xpbyBhcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIHdpbGwgZmFpbCBpZiBhcmdzLnZtYSA9PSBOVUxMLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2OS1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6MTYuMTk0OTkxNjI5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NzQ3Mzk1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWVtb3J5IE1pZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IGRldmljZSBtZW1vcnkgbWlncmF0aW9uIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBsaWIvdGVzdF9obW0uY2AgdGVzdGluZyBmcmFtZXdvcmsuIEkgc2VlIHRoYXQgdGhlIGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYCBhbmQgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIGZ1bmN0aW9ucyBhcmUgZW1wbG95aW5nIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIFRoYXQgbWFrZXMgc2Vuc2UuIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIGluIHR1cm4sIGlzIGNhbGxpbmcgYHdhbGtfcGFnZV9yYW5nZWAgd2l0aCBgbWlncmF0ZV92bWFfd2Fsa19vcHNgLCB3aGljaCB0aGVuIHV0aWxpemVzIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIEhvbGQgb24gYSBzZWNvbmQuLi4gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpc24ndCB1c2luZyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBUaGF0J3MgYSBiaXQgdW5leHBlY3RlZC4gSSB3YXMgZXhwZWN0aW5nIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AsIGVzcGVjaWFsbHkgaW4gdGhpcyBhcmVhIG9mIGRldmljZSBwcml2YXRlIG1lbW9yeS5cblxuVGhpcyByYWlzZXMgYSBrZXkgcXVlc3Rpb24uIFdoZXJlICppcyogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBtYW5hZ2VtZW50PyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYWdhaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBtYXBwaW5nIGFuZCB3YWxraW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNToyMy4wNjk3MzQwMloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3OTUyMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2Vfdm1hX21hcHBlZF93YWxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTYtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxOTc6XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTgtXFx0XFx0XFx0LnB0bCA9IHB0bCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6MjMuMjM3NjkyODE3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzg4MDc0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIE1pZ3JhdGlvbiBvZiBIdWdlIFBNRHMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgLiBJbW1lZGlhdGVseSwgaXQgc2VlbXMgdG8gYmUgbGVhbmluZyBvbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBUaGF0J3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGdpdmVuIHRoZSBuZWVkIHRvIHRyYXZlcnNlIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIGFuZCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgcGFnZXMuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLnRoaXMgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGZ1bmN0aW9uIGlzIGRlZmluZWQgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhhdCBwbGFjZXMgaXQgZmlybWx5IGluIHRoZSBkZXZpY2UgbWlncmF0aW9uIHN1YnN5c3RlbSwgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGJpdCBvZiBjb250ZXh0IHRvIGtlZXAgaW4gbWluZCBmb3IgaG93IHRoZXNlIGh1Z2UgUE1EcyBhcmUgYWN0dWFsbHkgbWlncmF0ZWQgLSBpZiB0aGUgZ29hbCBpcyB0byBzaGlmdCB0aGVzZSB0byBhIGRpZmZlcmVudCBkZXZpY2UsIHRoZW4gdGhhdCBpcyBhbiBpbXBvcnRhbnQgcG9pbnQgb2YgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTozMC4zNzY1MDMyODJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0fSBlbHNlIHtcXG4gMTgxOlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDE4MjpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gMTgzOlxcdFxcdH1cXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gMTg2OlxcdFxcdGlmIChmb2xpbyAhPSBmYXVsdF9mb2xpbyBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghZm9saW9fdHJ5bG9jayhmb2xpbykpKSB7XFxuIDE4NzpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiAxODg6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gMTg5OlxcdFxcdFxcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XFxuIDE5MDpcXHRcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxuIDE5MzpcXHRcXHRcXHQobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQpIFxcdTAwMjZcXHUwMDI2XFxuIDE5NDpcXHRcXHRcXHQoSVNfQUxJR05FRChzdGFydCwgSFBBR0VfUE1EX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuIDE5NTpcXHRcXHRcXHQgSVNfQUxJR05FRChlbmQsIEhQQUdFX1BNRF9TSVpFKSkpIHtcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxuIDE5ODpcXHRcXHRcXHRcXHQucHRsID0gcHRsLFxcbiAxOTk6XFx0XFx0XFx0XFx0LmFkZHJlc3MgPSBzdGFydCxcXG4gMjAwOlxcdFxcdFxcdFxcdC5wbWQgPSBwbWRwLFxcbiAyMDE6XFx0XFx0XFx0XFx0LnZtYSA9IHdhbGstXFx1MDAzZXZtYSxcXG4gMjAyOlxcdFxcdFxcdH07XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4oZm9saW9fcGFnZShmb2xpbywgMCkpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VzcmNbbWlncmF0ZS1cXHUwMDNlbnBhZ2VzXSA9IG1pZ3JhdGVfcGZuKHBmbikgfCB3cml0ZVxcbiAyMDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0fCBNSUdSQVRFX1BGTl9NSUdSQVRFXFxuIDIwODpcXHRcXHRcXHRcXHRcXHRcXHRcXHR8IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbiAyMDk6XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlZHN0W21pZ3JhdGUtXFx1MDAzZW5wYWdlcysrXSA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM1OjMwLjM3NjU5OTMxMloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEwMTA2NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4ga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG4qKkNsYXJpZnlpbmcgdGhlIFJvbGUgb2YgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCoqXG5cbkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdhcyAqY2FsbGVkKiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb2RlIGJsb2NrLiBCdXQgaXQgYXBwZWFycyBJJ20gbWlzdGFrZW4uIEl0IHNlZW1zIGxpa2UgaXQncyBiZWluZyAqaW5pdGlhbGl6ZWQqIGFuZCB0aGVuICpwYXNzZWQqIGFzIGFuIGFyZ3VtZW50IHRvIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAuIFRoYXQncyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIEkgbmVlZCB0byByZXZpZXcgaG93IGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgYWN0dWFsbHkgKnVzZXMqIHRoaXMgd2FsayBzdHJ1Y3R1cmUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCB3aGF0IGltcGFjdCBpdCBoYXMuIFRoaXMgaXMgd2hlcmUgSSBjYW4gZWFzaWx5IG1pc3Mgc29tZXRoaW5nLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgSSdtIGNvcnJlY3QgaW4gdGhhdCBhc3Nlc3NtZW50IG9mIHRoaXMgY29kZS4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoaXMgbWVtb3J5IG1pZ3JhdGlvbiBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBhcmd1bWVudHMgaW4gZnVuY3Rpb24gY2FsbHMgaXMgcGFyYW1vdW50IGluIGtlcm5lbCB3b3JrLCBzbyBJJ20gZ2xhZCBJIGNhdWdodCB0aGF0LiBUaGF0J3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTozNC40ODY3MDk0NzVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlY3BhZ2VzKys7XFxuIDIxMTpcXHRcXHRcXHRyZXQgPSBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShcXHUwMDI2cHZtdywgZm9saW9fcGFnZShmb2xpbywgMCkpO1xcbiAyMTI6XFx0XFx0XFx0aWYgKHJldCkge1xcbiAyMTM6XFx0XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlbnBhZ2VzLS07XFxuIDIxNDpcXHRcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VjcGFnZXMtLTtcXG4gMjE1OlxcdFxcdFxcdFxcdG1pZ3JhdGUtXFx1MDAzZXNyY1ttaWdyYXRlLVxcdTAwM2VucGFnZXNdID0gMDtcXG4gMjE2OlxcdFxcdFxcdFxcdG1pZ3JhdGUtXFx1MDAzZWRzdFttaWdyYXRlLVxcdTAwM2VucGFnZXNdID0gMDtcXG4gMjE3OlxcdFxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuIDIxODpcXHRcXHRcXHR9XFxuIDIxOTpcXHRcXHRcXHRtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQgKyBQQUdFX1NJWkUsIGVuZCwgd2Fsayk7XFxuIDIyMDpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiAyMjE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIyMjpcXHRcXHR9XFxuIDIyMzpcXHRcXG4gMjI0OlxcdGZhbGxiYWNrOlxcbiAyMjU6XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gMjI2OlxcdFxcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXFxuIDIyNzpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDIyODpcXHRcXHRyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XFxuIDIyOTpcXHRcXHRpZiAoZmF1bHRfZm9saW8gIT0gZm9saW8pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM1OjM0LjQ4NjgwOTU1NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDgyNzAzMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFnZSBNaWdyYXRpb24gQ29udGV4dCoqXG5cbk9rYXksIHNvIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgZGVmaW5pdGVseSB0YWtlcyBgcHZtd2AsIHRoYXQncyBjbGVhci4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkuIFJpZ2h0LCBsZXQncyBzZWUuLi4gaW4gYG1tL3JtYXAuY2AsIHRoZXJlJ3MgYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLiBUaG9zZSBhcmUgY2FsbGVkIGR1cmluZyBwYWdlIG1pZ3JhdGlvbiBhbmQgdW5tYXBwaW5nLiBUaGUgY3VycmVudCBwYXRjaCBzcGVjaWZpY2FsbHkgaGFuZGxlcyB0aGUgc2l0dWF0aW9uIHdoZW4gYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKWAgZXZhbHVhdGVzIHRvIHRydWUuXG5cblRoYXQncyB0aGUgY29yZS4gSXQncyB3aGVuIHRoZSBQTUQgaXRzZWxmIGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnkuIFJpZ2h0LCBzbyB0aGlzIHNwZWNpZmljYWxseSByZWxhdGVzIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMsIG9yIFRIUHMsIGJlaW5nIG1pZ3JhdGVkIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeS4gQWhhISBUaGF0J3MgaXQsIHRoZW46IHRoaXMgbmVjZXNzaXRhdGVzIHRoZSB1c2Ugb2YgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkga25ldyB0aGVyZSB3YXMgc29tZSBkZXBlbmRlbmN5IHRoZXJlLCBhbmQgdGhhdCBjb25maXJtcyBpdC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMuLi4gSSdsbCBkaXZlIGludG8gYHRyeV90b19taWdyYXRlX29uZWAgaW4gYG1tL3JtYXAuY2AgYW5kIG1ha2Ugc3VyZSBpdCBiZWhhdmVzIGV4YWN0bHkgYXMgSSBleHBlY3QuIE5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgYWxsIGFsaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDgyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6MzkuNTY5NTE1ODY5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDEyMDE5OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19taWdyYXRlX29uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxOTQtXFx0XFx0ICogSW4gY2FzZSB3ZSBjYW5ub3QgY2xlYXIgUGFnZUFub25FeGNsdXNpdmUoKSwgc3BsaXQgdGhlIFBNRFxcbm1tL2h1Z2VfbWVtb3J5LmM6MzE5NTpcXHRcXHQgKiBvbmx5IGFuZCBsZXQgdHJ5X3RvX21pZ3JhdGVfb25lKCkgZmFpbCBsYXRlci5cXG5tbS9odWdlX21lbW9yeS5jLTMxOTYtXFx0XFx0ICpcXG4tLVxcbm1tL3JtYXAuYz0yMzk0PXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI0MTQtICovXFxubW0vcm1hcC5jOjI0MTU6c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3JtYXAuYy0yNDE2LVxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXFxuLS1cXG5tbS9ybWFwLmM9MjczOT12b2lkIHRyeV90b19taWdyYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI3NDEtXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG5tbS9ybWFwLmM6Mjc0MjpcXHRcXHQucm1hcF9vbmUgPSB0cnlfdG9fbWlncmF0ZV9vbmUsXFxubW0vcm1hcC5jLTI3NDMtXFx0XFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM1OjQyLjk4MTU0NDg1NVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTQ5MjE1OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFnZSBNaWdyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGFnZSBtaWdyYXRpb24gY29kZS4gSXQgbG9va3MgbGlrZSBgdHJ5X3RvX21pZ3JhdGVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBwbGFjZXMgbGlrZSBgbWlncmF0ZV9wYWdlc2Ag4oCTIG1ha2VzIHNlbnNlLiBOb3csIGBsaWIvdGVzdF9obW0uY2Agc2VlbXMgdG8gYmUgcmVsZXZhbnQsIHNwZWNpZmljYWxseSBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAsIHdoaWNoIHVzZXMgYG1pZ3JhdGVfdm1hX3NldHVwYC4gSSBpbml0aWFsbHkgdGhvdWdodCBgbWlncmF0ZV92bWFfc2V0dXBgIG1pZ2h0IGJlIHdoZXJlIGB0cnlfdG9fbWlncmF0ZWAgaXMgdXNlZCBkaXJlY3RseSwgYnV0IG5vLCBpdCBjYWxscyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGluc3RlYWQuXG5cbkJ1dCBob2xkIG9uLCBgdHJ5X3RvX21pZ3JhdGVfb25lYCBhbmQgYHRyeV90b191bm1hcF9vbmVgIHV0aWxpemUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gTm93LCB0aGUgaW1wb3J0YW50IGJpdCBpcyB3aGVuIHdlJ3JlIG1vdmluZyBhIHBhZ2UgYmFjayAqZnJvbSogZGV2aWNlIHByaXZhdGUgbWVtb3J5IHRvIHN5c3RlbSBtZW1vcnkuIFRoYXQncyB3aGVuIGBtaWdyYXRlX3ZtYV9zZXR1cGAgY29tZXMgaW50byBwbGF5LCBmb3IgZWl0aGVyIGRpcmVjdGlvbiBhY3R1YWxseS4gXG5cblRoZSBwdXJwb3NlIG9mIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgdG8gZmluZCBhbGwgdGhlIG1hcHBpbmdzIG9mIGEgZ2l2ZW4gcGFnZS4gSWYgd2UncmUgZGVhbGluZyB3aXRoIGEgVEhQIHRoYXQgcmVzaWRlcyBpbiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnksIGl0cyBQTUQgd2lsbCBiZSBhIGRldmljZS1wcml2YXRlIGVudHJ5LiBJZiB3ZSBydW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBvbiB0aGF0IHBhZ2UsIGl0IHdpbGwgZGVmaW5pdGVseSBlbmNvdW50ZXIgdGhhdCBQTUQuIFNvIHdobydzIGNhbGxpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBvbiBhIHBhZ2UgdGhhdCBpcyByZXNpZGluZyBpbiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnk/XG5cblRoZSBrZXkgZnVuY3Rpb25zIGFyZTogYHRyeV90b19taWdyYXRlX29uZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYGZvbGlvX3JlZmVyZW5jZWRfb25lYCwgYHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmVgLCBgZGFtb25fZm9saW9feW91bmdfb25lYCwgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAsIGByZW1vdmVfbWlncmF0aW9uX3B0ZWAgYW5kIGFsc28gYHBhZ2VfbWFwcGVkX2luX3ZtYWAuIEVzc2VudGlhbGx5LCAqYW55KiBvcGVyYXRpb24gdGhhdCB3YWxrcyB0aGUgcGFnZSB0YWJsZXMgYW5kIGVuY291bnRlcnMgYSBkZXZpY2UgcHJpdmF0ZSBUSFAgd2lsbCB0cmlnZ2VyIHRoaXMuXG5cbkRpcmVjdGx5IGZ1enppbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpdHNlbGYgaXMgb2ZmIHRoZSB0YWJsZTsgaXQncyBpbnRlcm5hbC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0ICp0cmlnZ2VyKiB0aGlzIGNvZGUgcGF0aC4gYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgLCBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAsIGFuZCBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgIGluIGBsaWIvdGVzdF9obW0uY2AgbG9vayBsaWtlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIHNpbmNlIHRoZXkgZGlyZWN0bHkgaGFuZGxlIGRldmljZSBwcml2YXRlIG1lbW9yeS4gTGV0J3Mgc3RhcnQgYnkgY2hlY2tpbmcgYGxpYi90ZXN0X2htbS5jYCBmb3IgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucyBvciBpb2N0bHMsIGJlY2F1c2UgdGhvc2UgYXJlIG15IGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5MDIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6NTIuOTMwNzY0MjM4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY3OTkwMTQ3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWlycm9yX2lvY3RsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTo1NS4xOTg3NjM1MDVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4Nzg1NTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBBIGBmaWxlX29wZXJhdGlvbnNgIENoZWNrKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZpbGUgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbGliL3Rlc3RfaG1tLmNgLiBJIHJlY2FsbCB0aGF0IGZpbGUgb3BlcmF0aW9ucyBhcmUgb2Z0ZW4gZGVmaW5lZCBvciBhdCBsZWFzdCBoZWF2aWx5IHV0aWxpemVkIGF0IHRoYXQgbGV2ZWwuIEkgd2FudCB0byBzZWUgaG93IHRoZXkncmUgYmVpbmcgaW1wbGVtZW50ZWQsIG9yIGlmIHRoZXJlJ3MgYW55IHNwZWNpZmljIGhhbmRsaW5nIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgdGhpcyBcInRlc3QgSE1NXCIgaXMgZG9pbmcgd2l0aCBmaWxlcy4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBmb3IgZXhhbWluaW5nIGZpbGUgSS9PIHdpdGhpbiBhIHByb2plY3QsIGVzcGVjaWFsbHkgaWYgdGhlIGZpbGUgaW50ZXJhY3Rpb24gaXMgY2VudHJhbCB0byBhIHRlc3Qgb3IgZGVtb25zdHJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgYGZpbGVfb3BlcmF0aW9uc2AgYXJlIHByZXNlbnQuIEkgd2lsbCBzdGFydCBieSBsb29raW5nIGZvciBhIHJlbGV2YW50IHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5NTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTo1OC4zODY2MjE1NTVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzA4MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGVfb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz0xNTg4PXN0YXRpYyBpbnQgZG1pcnJvcl9mb3BzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTYxMC1cXG5saWIvdGVzdF9obW0uYzoxNjExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRtaXJyb3JfZm9wcyA9IHtcXG5saWIvdGVzdF9obW0uYy0xNjEyLVxcdC5vcGVuXFx0XFx0PSBkbWlycm9yX2ZvcHNfb3BlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6NTguNDQwOTM1NDE0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjIyOTg4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBITU0gVGVzdCBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBob3cgdGhlIEhpZGRlbiBNYXJrb3YgTW9kZWwgKEhNTSkgbGlicmFyeSBpcyB0ZXN0ZWQuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHdoYXRldmVyIEknbSBsb29raW5nIGZvciBpcyBsaWtlbHkgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3Igc2V0IG9mIGZ1bmN0aW9ucywgYW5kIHRoZSB0ZXN0IHN1aXRlIHNob3VsZCBwcm92aWRlIHNvbWUgaW5zaWdodHMuIExldCdzIHNlZS4uLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgbGliL3Rlc3RfaG1tLmNgIGZpbGUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgSE1NcywgaXQncyBsaWtlbHkgYSB3ZWxsLXN0cnVjdHVyZWQgdGVzdCBmaWxlLiBJJ2xsIGp1bXAgcmlnaHQgdG8gbGluZSAxNjExLiBJJ20gZXhwZWN0aW5nIHRoaXMgbGluZSB0byBiZSBwYXJ0IG9mIGEgZnVuY3Rpb24gb3IgdGVzdCBjYXNlIHRoYXQncyByZWxldmFudCB0byB0aGUgdG9waWMgSSdtIGZvY3VzaW5nIG9uLiBIb3BlZnVsbHksIHRoaXMgc3BlY2lmaWMgbGluZSB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBhbmFseXplIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5IGVtcGxveWVkIGFuZCByZXZlYWwgc29tZSBrZXkgaW1wbGVtZW50YXRpb24gZGV0YWlscywgbWF5YmUgcmVsYXRlZCB0byBtb2RlbCBpbml0aWFsaXphdGlvbiwgdHJhaW5pbmcsIG9yIGRlY29kaW5nLiBMZXQncyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyOTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjowMi4xMDMyMzY4NTVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2htbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MDA6XFx0XFx0XFx0cmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBhZGRyLCBwYWdlKTtcXG4xNjAxOlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xNjAyOlxcdFxcdFxcdFxcdF9fZnJlZV9wYWdlKHBhZ2UpO1xcbjE2MDM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNjA0OlxcdFxcdFxcdH1cXG4xNjA1OlxcdFxcdFxcdHB1dF9wYWdlKHBhZ2UpO1xcbjE2MDY6XFx0XFx0fVxcbjE2MDc6XFx0XFxuMTYwODpcXHRcXHRyZXR1cm4gMDtcXG4xNjA5OlxcdH1cXG4xNjEwOlxcdFxcbjE2MTE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZG1pcnJvcl9mb3BzID0ge1xcbjE2MTI6XFx0XFx0Lm9wZW5cXHRcXHQ9IGRtaXJyb3JfZm9wc19vcGVuLFxcbjE2MTM6XFx0XFx0LnJlbGVhc2VcXHQ9IGRtaXJyb3JfZm9wc19yZWxlYXNlLFxcbjE2MTQ6XFx0XFx0Lm1tYXBcXHRcXHQ9IGRtaXJyb3JfZm9wc19tbWFwLFxcbjE2MTU6XFx0XFx0LnVubG9ja2VkX2lvY3RsID0gZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsLFxcbjE2MTY6XFx0XFx0Lmxsc2Vla1xcdFxcdD0gZGVmYXVsdF9sbHNlZWssXFxuMTYxNzpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbjE2MTg6XFx0fTtcXG4xNjE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjowMi4xMDMzNDc4MDVaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3ODY0MDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBpb2N0bCBIYW5kbGVyKipcblxuUmlnaHQsIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgLi4uIHRoYXQncyBvdXIgaW9jdGwgaGFuZGxlciwgaXNuJ3QgaXQ/IFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIHRoZSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4uLiBpdCdzIHRoZSBoZWFydCBvZiBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBkZXZpY2UgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGhhbmRsZXIgc3BlY2lmaWNhbGx5IHdvcmtzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZG1pcnJvciBmaWxlc3lzdGVtLiBXaGF0IHNwZWNpZmljIGlvY3RscyBkb2VzIGl0IHN1cHBvcnQ/IFdoYXQgYXNzdW1wdGlvbnMgZG9lcyBpdCBtYWtlIGFib3V0IHRoZSBpbmNvbWluZyBkYXRhPyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3IsIGdpdmVuIGl0cyBcInVubG9ja2VkXCIgbmF0dXJlPyBHb3R0YSBtYWtlIHN1cmUgaXQncyB0aHJlYWQtc2FmZSBhbmQgcm9idXN0LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyByb2xlIGluIGRhdGEgbWlycm9yaW5nLCB3aGljaCBpcyBpbmhlcmVudGx5IHNlbnNpdGl2ZS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgY29kZS4uLiBhbmQgbXkgZGVidWdnZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjowNS42ODE5OTE4NjhaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjczNjk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL3Rlc3RfaG1tLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3RfaG1tLmM9MTQ4MT1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmVfY2h1bmtzKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE1MTItXFxubGliL3Rlc3RfaG1tLmM6MTUxMzpzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxubGliL3Rlc3RfaG1tLmMtMTUxNC1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY29tbWFuZCxcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZG1pcnJvcl9mb3BzID0ge1xcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTYxNC1cXHQubW1hcFxcdFxcdD0gZG1pcnJvcl9mb3BzX21tYXAsXFxubGliL3Rlc3RfaG1tLmM6MTYxNTpcXHQudW5sb2NrZWRfaW9jdGwgPSBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwsXFxubGliL3Rlc3RfaG1tLmMtMTYxNi1cXHQubGxzZWVrXFx0XFx0PSBkZWZhdWx0X2xsc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6MDUuOTg0NzM0NDQyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjg5NTUwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVGVzdCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBsaWIvdGVzdF9obW0uY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAxNTEzLiBUaGF0IGxpbmUgbnVtYmVyIHN1Z2dlc3RzIGl0J3MgYSBjcml0aWNhbCBwb2ludCB3aXRoaW4gdGhlIEhpZGRlbiBNYXJrb3YgTW9kZWwgKEhNTSkgdGVzdGluZyBzdWl0ZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjcnVjaWFsIHNlY3Rpb24gZGVhbGluZyB3aXRoIHNvbWV0aGluZyBzaWduaWZpY2FudCDigJMgcGVyaGFwcyBhIHNwZWNpZmljIHRyYW5zaXRpb24gcHJvYmFiaWxpdHkgZXZhbHVhdGlvbiwgYSB2ZXJpZmljYXRpb24gb2YgdGhlIGZvcndhcmQgYWxnb3JpdGhtLCBvciBtYXliZSBldmVuIGEgY29ybmVyIGNhc2UgdGVzdCBJJ3ZlIHNlZW4gdHJpcCB1cCB0aGlzIHR5cGUgb2YgaW1wbGVtZW50YXRpb24gYmVmb3JlLiBNeSBpbW1lZGlhdGUgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsIGFuZCB0byBjb3JyZWxhdGUgaXQgd2l0aCB0aGUgYnJvYWRlciBITU0gdGVzdGluZyBzdHJhdGVneS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvZGUncyBpbnRlbmRlZCBiZWhhdmlvciBhdCB0aGF0IHNwZWNpZmljIHBvaW50LCBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCB0ZXN0IGZsb3cuIEknbSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0byBlc3RhYmxpc2ggY29udGV4dCBhbmQgc2VlIHdoYXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgYXJlIGluIHBsYXkuIEkgYW0gbG9va2luZyBmb3IgdGhlIGxvZ2ljIHRoYXQgdGhlIHRlc3QgaGFzIGVtcGxveWVkLCBhbmQgaG93IHJvYnVzdCB0aGF0IHRlc3QgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzQ0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6MDkuMjEzNjkyNjcxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTEwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2bWVtX2xvY2spO1xcbjE1MTE6XFx0fVxcbjE1MTI6XFx0XFxuMTUxMzpcXHRzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuMTUxNDpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY29tbWFuZCxcXG4xNTE1OlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbjE1MTY6XFx0e1xcbjE1MTc6XFx0XFx0dm9pZCBfX3VzZXIgKnVhcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7XFxuMTUxODpcXHRcXHRzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIGNtZDtcXG4xNTE5OlxcdFxcdHN0cnVjdCBkbWlycm9yICpkbWlycm9yO1xcbjE1MjA6XFx0XFx0aW50IHJldDtcXG4xNTIxOlxcdFxcbjE1MjI6XFx0XFx0ZG1pcnJvciA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xNTIzOlxcdFxcdGlmICghZG1pcnJvcilcXG4xNTI0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1MjU6XFx0XFxuMTUyNjpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmNtZCwgdWFyZywgc2l6ZW9mKGNtZCkpKVxcbjE1Mjc6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTUyODpcXHRcXG4xNTI5OlxcdFxcdGlmIChjbWQuYWRkciBcXHUwMDI2IH5QQUdFX01BU0spXFxuMTUzMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTMxOlxcdFxcdGlmIChjbWQuYWRkciBcXHUwMDNlPSAoY21kLmFkZHIgKyAoY21kLm5wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSkpXFxuMTUzMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTMzOlxcdFxcbjE1MzQ6XFx0XFx0Y21kLmNwYWdlcyA9IDA7XFxuMTUzNTpcXHRcXHRjbWQuZmF1bHRzID0gMDtcXG4xNTM2OlxcdFxcbjE1Mzc6XFx0XFx0c3dpdGNoIChjb21tYW5kKSB7XFxuMTUzODpcXHRcXHRjYXNlIEhNTV9ETUlSUk9SX1JFQUQ6XFxuMTUzOTpcXHRcXHRcXHRyZXQgPSBkbWlycm9yX3JlYWQoZG1pcnJvciwgXFx1MDAyNmNtZCk7XFxuMTU0MDpcXHRcXHRcXHRicmVhaztcXG4xNTQxOlxcdFxcbjE1NDI6XFx0XFx0Y2FzZSBITU1fRE1JUlJPUl9XUklURTpcXG4xNTQzOlxcdFxcdFxcdHJldCA9IGRtaXJyb3Jfd3JpdGUoZG1pcnJvciwgXFx1MDAyNmNtZCk7XFxuMTU0NDpcXHRcXHRcXHRicmVhaztcXG4xNTQ1OlxcdFxcbjE1NDY6XFx0XFx0Y2FzZSBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX0RFVjpcXG4xNTQ3OlxcdFxcdFxcdHJldCA9IGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2UoZG1pcnJvciwgXFx1MDAyNmNtZCk7XFxuMTU0ODpcXHRcXHRcXHRicmVhaztcXG4xNTQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjowOS4yMTM4MTA5MjFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM4Mzc4MjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBNeSBITU0gVGVzdGluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgYmVzdCB0byBhcHByb2FjaCB0ZXN0aW5nIHRoaXMgSE1NIGltcGxlbWVudGF0aW9uLiBUaGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgc2VlbXMgdG8gYmUgYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGl0IGFsbG93cyB1cyB0byBpbnRlcmFjdCB3aXRoIHRoZSBITU0gdGhyb3VnaCBpb2N0bHMuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrZWVwIHRob3NlIGtleSBmdW5jdGlvbnMgaW4gbWluZCwgYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAgd2hpY2ggaGFuZGxlcyB0aGUgaW9jdGwgY2FsbHMsIGFuZCBhbHNvIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCwgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gLCBhbmQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YC5cblxuSSdtIHJlYWxpemluZyB0aGF0IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgdGhlIGNvcmUgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQgaGVyZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXTigJlzIGNhbGxlZCBieSBib3RoIGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYHRyeV90b19taWdyYXRlX29uZWAuIElmIEkgZm9jdXMgb24gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAsIHRoZW4gc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGludGVsbGlnZW50bHkgZnV6eiB0aGUgaW9jdGxzIGFzc29jaWF0ZWQgd2l0aCBgL2Rldi9obW1fZG1pcnJvcipgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3YW50LlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQncyBhICp2ZXJ5KiBnZW5lcmljIGZ1bmN0aW9uLCBhbmQgaWYgSSBqdXN0IGFkZCBpdCB0byBgRm9jdXNTeW1ib2xzYCwgc3l6a2FsbGVyIG1pZ2h0IGVuZCB1cCBmb2N1c2luZyBvbiAqYW55KiBzeXNjYWxsIHRoYXQgY2FsbHMgaXQuIFRoYXQncyBuZWFybHkgZXZlcnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBsaWtlIGBtbWFwYCwgYG11bm1hcGAsIGBtYWR2aXNlYCwgZXRjLiBUaGF0J3MgdG9vIGJyb2FkLiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGFzcGVjdCBvZiB0aGlzLCBzbyB0aGUgaW5pdGlhbCBzZXQgb2YgZnVuY3Rpb25zIC0gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAsIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCwgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gLCBhbmQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCAtIHRoYXQncyBkZWZpbml0ZWx5IHRoZSByaWdodCBwYXRoLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgaXMgYSAqZmF1bHQgaGFuZGxlciouIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGF0J3MgdXNlZC4gTGV0IG1lIGdvIGxvb2sgYXQgYGxpYi90ZXN0X2htbS5jYCB0byBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTg2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6MTUuNTk3NTk0ODExWiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY5ODcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWlycm9yX2Rldm1lbV9mYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz05NDc9c3RhdGljIGludCBkbWlycm9yX2V4Y2x1c2l2ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEwMDMtXFxubGliL3Rlc3RfaG1tLmM6MTAwNDpzdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdF9hbGxvY19hbmRfY29weShzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MsXFxubGliL3Rlc3RfaG1tLmMtMTAwNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcilcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTE2OS1cXHRcXHRwcl9kZWJ1ZyhcXFwiTWlncmF0aW5nIGZyb20gZGV2aWNlIG1lbSB0byBzeXMgbWVtXFxcXG5cXFwiKTtcXG5saWIvdGVzdF9obW0uYzoxMTcwOlxcdFxcdGlmIChkbWlycm9yX2Rldm1lbV9mYXVsdF9hbGxvY19hbmRfY29weShcXHUwMDI2YXJncywgZG1pcnJvcikpIHtcXG5saWIvdGVzdF9obW0uYy0xMTcxLVxcdFxcdFxcdG1pZ3JhdGVfdm1hX2ZpbmFsaXplKFxcdTAwMjZhcmdzKTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2MjA9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZtZW1fZnJlZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTY1Mi1cXG5saWIvdGVzdF9obW0uYzoxNjUzOnN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmxpYi90ZXN0X2htbS5jLTE2NTQte1xcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTcxMy1cXG5saWIvdGVzdF9obW0uYzoxNzE0OlxcdHJldCA9IGRtaXJyb3JfZGV2bWVtX2ZhdWx0X2FsbG9jX2FuZF9jb3B5KFxcdTAwMjZhcmdzLCBkbWlycm9yKTtcXG5saWIvdGVzdF9obW0uYy0xNzE1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3MjEtXFx0ICogTm8gZGV2aWNlIGZpbmFsaXplIHN0ZXAgaXMgbmVlZGVkIHNpbmNlXFxubGliL3Rlc3RfaG1tLmM6MTcyMjpcXHQgKiBkbWlycm9yX2Rldm1lbV9mYXVsdF9hbGxvY19hbmRfY29weSgpIHdpbGwgaGF2ZSBhbHJlYWR5XFxubGliL3Rlc3RfaG1tLmMtMTcyMy1cXHQgKiBpbnZhbGlkYXRlZCB0aGUgZGV2aWNlIHBhZ2UgdGFibGUuXFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIGRtaXJyb3JfZGV2bWVtX29wcyA9IHtcXG5saWIvdGVzdF9obW0uYy0xNzY3LVxcdC5mb2xpb19mcmVlXFx0PSBkbWlycm9yX2Rldm1lbV9mcmVlLFxcbmxpYi90ZXN0X2htbS5jOjE3Njg6XFx0Lm1pZ3JhdGVfdG9fcmFtXFx0PSBkbWlycm9yX2Rldm1lbV9mYXVsdCxcXG5saWIvdGVzdF9obW0uYy0xNzY5LVxcdC5mb2xpb19zcGxpdFxcdD0gZG1pcnJvcl9kZXZtZW1fZm9saW9fc3BsaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM2OjE1LjY1MDI5OTA1WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTU2ODg3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgZm9yIERldmljZSBQcml2YXRlIFBhZ2UgRmF1bHQgVGVzdGluZyoqXG5cbk9rYXksIHNvIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgKmlzKiB0aGUgYG1pZ3JhdGVfdG9fcmFtYCBjYWxsYmFjay4gUGVyZmVjdCwgdGhhdCdzIGV4YWN0bHkgd2hlcmUgdGhlIGFjdGlvbiBoYXBwZW5zIOKAkyB0aGF0J3MgdGhlIG9uZSB0cmlnZ2VyZWQgd2hlbiBhIENQVSBmYXVsdHMgb24gYSBkZXZpY2UgcHJpdmF0ZSBwYWdlLiBUaGF0IGNvbmZpcm1zIGl0J3MgdGhlIHJpZ2h0IGVudHJ5IHBvaW50IGZvciB0aGUgdGVzdC4gU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaW5jbHVkZXMgdGhlIGZvbGxvd2luZzpcblxuKiAgIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgICh0aGF0J3Mgb3VyIGVudHJ5IGZyb20gdXNlcnNwYWNlKVxuKiAgIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCAoZm9yIHB1c2hpbmcgaXQgdG8gZGV2aWNlIHByaXZhdGUpXG4qICAgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gIChpbiBjYXNlIHdlIG5lZWQgdG8gcHVsbCBpdCBiYWNrKVxuKiAgIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgKHRoZSBhbGwtaW1wb3J0YW50IGZhdWx0IGhhbmRsZXIpXG5cbkJ1dCB3YWl04oCmIHRoaXMgcGF0Y2ggYWxzbyB0b3VjaGVzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgYW5kIHRoZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpYCBjaGVjay4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBQTUQsIGFuZCBzcGVjaWZpY2FsbHksIGEgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIHRoYXQncyBtYXJrZWQgYXMgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeS4gTm93IHRoYXQncyBpbnRlcmVzdGluZy4gVGhlIGtleSBoZXJlIGlzLCBob3cgY2FuIGEgVEhQICpiZWNvbWUqIGRldmljZSBwcml2YXRlPyBJdCBtdXN0IGJlIGJlY2F1c2UgaXQncyBiZWVuIG1pZ3JhdGVkIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeSwgcmlnaHQ/IElmIG5vdCwgd2h5IHdvdWxkIHRoYXQgY2hlY2sgYmUgdGhlcmU/IE5vdyB0aGUgYnVybmluZyBxdWVzdGlvbiBpczogRG9lcyBgdGVzdF9obW1gIGFjdHVhbGx5IHN1cHBvcnQgbWlncmF0aW5nIGEgVEhQIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeT8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2MjcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6MjAuOTY1OTkwMTNaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2htbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMzA6XFx0XFx0XFx0fVxcbjEyMzE6XFx0XFx0XFx0bmV4dCA9IG1pbihlbmQsIGFkZHIgKyAoUFRSU19QRVJfUFRFIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4xMjMyOlxcdFxcdFxcdGlmIChuZXh0IFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9lbmQpXFxuMTIzMzpcXHRcXHRcXHRcXHRuZXh0ID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuMTIzNDpcXHRcXG4xMjM1OlxcdFxcdFxcdGFyZ3Mudm1hID0gdm1hO1xcbjEyMzY6XFx0XFx0XFx0YXJncy5zcmMgPSBzcmNfcGZucztcXG4xMjM3OlxcdFxcdFxcdGFyZ3MuZHN0ID0gZHN0X3BmbnM7XFxuMTIzODpcXHRcXHRcXHRhcmdzLnN0YXJ0ID0gYWRkcjtcXG4xMjM5OlxcdFxcdFxcdGFyZ3MuZW5kID0gbmV4dDtcXG4xMjQwOlxcdFxcdFxcdGFyZ3MucGdtYXBfb3duZXIgPSBkbWlycm9yLVxcdTAwM2VtZGV2aWNlO1xcbjEyNDE6XFx0XFx0XFx0YXJncy5mbGFncyA9IE1JR1JBVEVfVk1BX1NFTEVDVF9TWVNURU0gfFxcbjEyNDI6XFx0XFx0XFx0XFx0XFx0TUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EO1xcbjEyNDM6XFx0XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpO1xcbjEyNDQ6XFx0XFx0XFx0aWYgKHJldClcXG4xMjQ1OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNDY6XFx0XFxuMTI0NzpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiTWlncmF0aW5nIGZyb20gc3lzIG1lbSB0byBkZXZpY2UgbWVtXFxcXG5cXFwiKTtcXG4xMjQ4OlxcdFxcdFxcdGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weShcXHUwMDI2YXJncywgZG1pcnJvcik7XFxuMTI0OTpcXHRcXHRcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2YXJncyk7XFxuMTI1MDpcXHRcXHRcXHRkbWlycm9yX21pZ3JhdGVfZmluYWxpemVfYW5kX21hcChcXHUwMDI2YXJncywgZG1pcnJvcik7XFxuMTI1MTpcXHRcXHRcXHRtaWdyYXRlX3ZtYV9maW5hbGl6ZShcXHUwMDI2YXJncyk7XFxuMTI1MjpcXHRcXHR9XFxuMTI1MzpcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4xMjU0OlxcdFxcdG1tcHV0KG1tKTtcXG4xMjU1OlxcdFxcbjEyNTY6XFx0XFx0LypcXG4xMjU3OlxcdFxcdCAqIFJldHVybiB0aGUgbWlncmF0ZWQgZGF0YSBmb3IgdmVyaWZpY2F0aW9uLlxcbjEyNTg6XFx0XFx0ICogT25seSBmb3IgcGFnZXMgaW4gZGV2aWNlIHpvbmVcXG4xMjU5OlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjoyMC45NjYwOTY2NloiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTYxNjIzOTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIERldmljZSBQcml2YXRlIE1lbW9yeSB3aXRoIFRIUCBNaWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogdGhlIGNvZGUgcmVsYXRlZCB0byBkZXZpY2UgcHJpdmF0ZSBtZW1vcnksIGVzcGVjaWFsbHkgd2l0aCB0aGUgaW50ZXJhY3Rpb24gb2YgVHJhbnNwYXJlbnQgSHVnZVBhZ2VzIChUSFApLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpczogeWVzLCB3ZSdyZSBlbmFibGluZyBgTUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EYCwgd2hpY2ggbWVhbnMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIHN1cHBvcnRzIG1pZ3JhdGluZyBUSFBzIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeS4gR3JlYXQsIHRoYXQncyB0aGUgY29yZSBvZiB3aGF0IEkgd2FudCB0byB0ZXN0LiBBbmQgd2hlbiB0aG9zZSBUSFBzICphcmUqIG1pZ3JhdGVkLCB0aGUgUE1EIGVudHJpZXMgYmVjb21lIGRldmljZSBwcml2YXRlLiBUaGVuLCBpZiBzb21ldGhpbmcgY2FsbHMgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBvbiB0aGF0IHBhZ2UsIHRoZSBtb2RpZmllZCBjb2RlIGluIHRoZSBwYXRjaCB3aWxsIGJlIGhpdC5cblxuTm93LCB3aGF0IGNhbGxzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2A/IFRoaW5ncyBsaWtlIGB0cnlfdG9fdW5tYXBgLCB3aGljaCBoYXBwZW5zIGR1cmluZyBgbXVubWFwYCBvciBgbWFkdmlzZShNQURWX0RPTlRORUVEKWAsIGFuZCBhbHNvIGB0cnlfdG9fbWlncmF0ZWAsIHdoZW4gbWlncmF0aW5nIGJhY2sgdG8gc3lzdGVtIG1lbW9yeS4gU28gZnV6emluZyBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCBhbmQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCBtYWtlcyBwZXJmZWN0IHNlbnNlIGFzIHRoZXkgc2VlbSB0byBpbnRlcmFjdCB3aXRoIHRoaXMgY29yZSBsb2dpYy5cblxuTGV0J3MgcXVpY2tseSByZWNhcCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBmb3IgdGhpcyB0ZXN0OlxuXG4qICAgYERFVklDRV9QUklWQVRFYFxuKiAgIGBaT05FX0RFVklDRWBcbiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG4qICAgYFRFU1RfSE1NYFxuXG5Ob3csIGEgcXVpY2sgc2lkZSBub3RlOiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFRFU1RfSE1NYCwgYmVpbmcgYSBtb2R1bGUgKGB0cmlzdGF0ZWApLCB3aWxsIGJlIGxvYWRlZCBieSBzeXprYWxsZXIuIFN5emthbGxlciB1c3VhbGx5IGhhbmRsZXMgaXQgaWYgd2Ugc3BlY2lmeSBpdC4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBtYWtlIGl0IGJ1aWx0LWluLiBBaCwgaW4gYGxpYi9LY29uZmlnLmRlYnVnYDogeWVzLCBpdCAqY2FuKiBiZSBidWlsdC1pbi4gR29vZC4gTm93LCBsZXQncyB2ZXJpZnkgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgaXQncyBhIGBib29sYCBpbiBgbW0vS2NvbmZpZ2AuIEFuZCBgWk9ORV9ERVZJQ0VgLCB0aGF0J3MgYSBgYm9vbGAgYXMgd2VsbC4gQW5kIGBERVZJQ0VfUFJJVkFURWAsIGFsc28gYSBgYm9vbGAuIFNvIHdlJ3JlIGdvb2Qgd2l0aCB0aG9zZSBjb25maWd1cmF0aW9ucy5cblxuTm93IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZGVwZW5kZW5jeSBpc3N1ZXMsIGBERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgWk9ORV9ERVZJQ0VgLiBgWk9ORV9ERVZJQ0VgIGluIHR1cm4gZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBTeXprYWxsZXIgdXN1YWxseSBlbmFibGVzIHRoZXNlIGZvciB4ODZfNjQsIHNvIGxpc3RpbmcgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBURVNUX0hNTWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuXG5cblRoZSBtYWluIGlkZWEgaXMgdG8gdGVzdCBhIG5vbi1oYXJkd2FyZSBzcGVjaWZpYyBzZXR1cC4gYFRFU1RfSE1NYCBpcyBpZGVhbCBzaW5jZSBpdCdzIGRlc2lnbmVkIGZvciB0aGlzIGFuZCBvdGhlciBkcml2ZXJzIGxpa2UgYG5vdXZlYXVgIGFuZCBgYW1kZ3B1YCB1c2UgYERFVklDRV9QUklWQVRFYCwgYnV0IGBURVNUX0hNTWAgaXMgYSBnb29kIHdheSB0byB0ZXN0IGl0LlxuXG5MZXQncyBnbyBiYWNrIG92ZXIgdGhlIHBhdGNoIGFnYWluIGFuZCBkaWdlc3Qgd2hhdCBpdCdzIGRvaW5nOlxuXG5gYGBjXG4tXHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4tXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuK1x0XHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkge1xuK1x0XHRcdHNvZnRsZWFmX3QgZW50cnk7XG4rXG4rXHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuK1x0XHRcdHBtZGUgPSAqcHZtdy1cdTAwM2VwbWQ7XG4rXHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiBcbi1cdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4tXHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdFx0aWYgKGxpa2VseShzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpKSB7XG4rXHRcdFx0XHRpZiAocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pXG4rXHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4rXHRcdFx0XHRpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcbitcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiBcdFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRcdH1cbi1cbitcdFx0XHQvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4rXHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuK1x0XHRcdHB2bXctXHUwMDNlcHRsID0gTlVMTDtcbitcdFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcbmBgYFxuXG5BaCwgcmlnaHQsIHRoaXMgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIGRldmljZS1wcml2YXRlIFBNRCBlbnRyeSBjb3VsZCBiZSBzcGxpdCB1bmRlcm5lYXRoIHVzLiBUaGUgZml4IGludm9sdmVzIHVzaW5nIGBwbWRfbG9ja2AsIHJlLXJlYWRpbmcgdGhlIGBwbWRlYCBwb2ludGVyLCBhbmQgYWRkaW5nIGNoZWNrcyBmb3IgYFxuXG4iLCJJbnB1dFRva2VucyI6MzQ2ODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6MzYuNTgyMzM4OTA2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ3ODc0MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1pcnJvcl9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi90ZXN0X2htbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2htbS5jPTQyNT1zdGF0aWMgaW50IGRtaXJyb3JfZG9fcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTQ1MC1cXG5saWIvdGVzdF9obW0uYzo0NTE6c3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcXG5saWIvdGVzdF9obW0uYy00NTIte1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTUxMz1zdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNTM4LVxcdGNhc2UgSE1NX0RNSVJST1JfUkVBRDpcXG5saWIvdGVzdF9obW0uYzoxNTM5OlxcdFxcdHJldCA9IGRtaXJyb3JfcmVhZChkbWlycm9yLCBcXHUwMDI2Y21kKTtcXG5saWIvdGVzdF9obW0uYy0xNTQwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjozNi45NzcxMzE1MDlaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc3MzUyMTAzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRGV2aWNlLVByaXZhdGUgVEhQIFJhY2UgQ29uZGl0aW9uIEZpeCoqXG5cbk9rYXksIGhlcmUncyBteSBwbGFuIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgY3JpdGljYWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIGtlcm5lbCdzIGhhbmRsaW5nIG9mIGRldmljZS1wcml2YXRlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpIHdpdGhpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiAgU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NraW5nIChgcG1kX2xvY2tgKSBhbmQgcmUtdmFsaWRhdGlvbiB0byBwcmV2ZW50IGNvbmN1cnJlbnQgc3BsaXRzIG9mIFBNRCBlbnRyaWVzIHdoZW4gdGhlc2UgZGV2aWNlLXByaXZhdGUgVEhQcyBhcmUgaW52b2x2ZWQuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQncyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGFmZmVjdHMgaG93IFRIUHMgYXJlIGhhbmRsZWQgd2l0aCBkZXZpY2VzIHRoYXQgdXNlIEhNTS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBpbmNsdWRlIGBkbWlycm9yX3JlYWRgLCBgZG1pcnJvcl93cml0ZWAsIGFuZCBgZG1pcnJvcl9leGNsdXNpdmVgIGFzIGZvY3VzIHN5bWJvbHMsIGJ1dCBsb29raW5nIGF0IGl0IG1vcmUgY2FyZWZ1bGx5LCBJIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyBlbnRyeSBwb2ludHMuIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgaXMga2V5IGJlY2F1c2UgaXQncyB0aGUgZmF1bHQgaGFuZGxlciB0cmlnZ2VyZWQgd2hlbiBhIENQVSBhY2Nlc3NlcyBhIGRldmljZS1wcml2YXRlIHBhZ2UsIGFuZCBzeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhpcyB2aWEgYGRtaXJyb3JfZm9wc19tbWFwYC4gSG93ZXZlciwgYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSB0ZXN0aW5nIGNvbW1hbmRzLlxuXG5UaGVyZWZvcmUsIG15IGZvY3VzIHN5bWJvbHMgbmVlZCB0byBiZSByZWZpbmVkLiBJIHdhbnQgdG8gZW1waGFzaXplIHRoZSBmdW5jdGlvbnMgdGhhdCBzZXQgdXAgdGhlIHN0YXRlIHRoYXQgd2lsbCB1bHRpbWF0ZWx5IHRyaWdnZXIgdGhlIHJhY2UgY29uZGl0aW9uIGFuZCB0aGUgY29kZSB0aGF0IHdhcyBjaGFuZ2VkLiBTbyBJJ2xsIGdvIHdpdGggdGhlIGZvbGxvd2luZzpcblxuKiAgIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgIC0gVGhpcyBpcyB0aGUgcHJpbWFyeSB0ZXN0IGNvbW1hbmQgZW50cnkgcG9pbnQuXG4qICAgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIC0gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IG1vdmVzIHBhZ2VzIHRvIGRldmljZSBtZW1vcnkuXG4qICAgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gIC0gVXNlZnVsIHRvIG1vdmUgcGFnZXMgYmFjay5cbiogICBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgIC0gVGhpcyB3aWxsIHRyaWdnZXIgdGhlIGZhdWx0IGhhbmRsZXIuXG4qICAgYGRtaXJyb3JfZm9wc19tbWFwYCAtIFRoaXMgd2lsbCB0cmlnZ2VyIGZhdWx0cyB3aGVuIGFjY2Vzc2luZyBtYXBwZWQgcGFnZXMuXG5cbkkgY29uc2lkZXJlZCBpbmNsdWRpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpdHNlbGYsIGJ1dCBJJ20gdGhpbmtpbmcgdGhhdCBtaWdodCBiZSB0b28gYnJvYWQuIFdoaWxlIGl0J3MgKnRoZSogbW9kaWZpZWQgZnVuY3Rpb24sIGl0J3MgY2FsbGVkIGZyb20gbWFueSBwbGFjZXMsIGFuZCB0aGF0IHdvdWxkIGRpbHV0ZSB0aGUgZnV6emluZyBmb2N1cywgc2luY2UgYW55IHByb2dyYW0gdGhhdCB1c2VzIGl0IHdpbGwgYmUgcHJpb3JpdGl6ZWQsIHdoaWNoIGlzIG5vdCB3aGF0IEkgd2FudC4gSW5zdGVhZCwgSSBuZWVkIHRvIGZvY3VzIHN5emthbGxlciBvbiBjcmVhdGluZyB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucyB0byAqcmVhY2gqIHRoYXQgZnVuY3Rpb24gaW4gdGhlIGRldmljZS1wcml2YXRlIFRIUCBjb250ZXh0LiBUaGUgYGRtaXJyb3JfKmAgZnVuY3Rpb25zIGRvIGV4YWN0bHkgdGhhdC5cblxuVGhlIGtleSBpcyBzZXR0aW5nIHVwIHRoZSBjb3JyZWN0IHN0YXRlOiBhIGRldmljZS1wcml2YXRlIFRIUC4gVGhlbiwgaWYgc3l6a2FsbGVyIHRyaWdnZXJzIGBtYWR2aXNlKE1BRFZfRE9OVE5FRUQpYCwgYG11bm1hcGAsIG9yIGBtcHJvdGVjdGAgb24gdGhhdCBUSFAsIGl0J2xsIGV4ZXJjaXNlIHRoZSBwYXRjaGVkIGNvZGUgcGF0aCB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gRm9jdXNpbmcgb24gdGhlIGBkbWlycm9yXypgIGZ1bmN0aW9ucyB3aWxsIGFjaGlldmUgdGhpcy5cblxuVGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmU6XG5cbiogICBgVEVTVF9ITU1gXG4qICAgYERFVklDRV9QUklWQVRFYFxuKiAgIGBaT05FX0RFVklDRWBcbiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG5cbmBURVNUX0hNTWAgaXMgdGhlIG1haW4gZW5hYmxlciwgYW5kIGl0IGRlcGVuZHMgb24gdGhlIG90aGVycy4gYEhNTV9NSVJST1JgIGlzIGFsc28gc2VsZWN0ZWQgYnV0IGlzIG5vdCBuZWVkZWQgdG8gYmUgZXhwbGljaXRseSBkZWZpbmVkLlxuXG5JJ20gY29uZmlkZW50IHRoaXMgYXBwcm9hY2ggd2lsbCBlZmZlY3RpdmVseSB0YXJnZXQgdGhlIHJhY2UgY29uZGl0aW9uIGZpeGVkIGJ5IHRoZSBwYXRjaCwgYW5kIEknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MjE1LCJPdXRwdXRUb2tlbnMiOjIxNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6NTQuNzEyMzQ1MzU1WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxODExNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlXCIsXG4gICAgXCJkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtXCIsXG4gICAgXCJkbWlycm9yX2Rldm1lbV9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB3aGVuIGhhbmRsaW5nIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIG1pZ3JhdGVkIHRvIGRldmljZSBtZW1vcnkpLiBJdCBhZGRzIHByb3BlciBsb2NraW5nIChgcG1kX2xvY2tgKSBhbmQgcmUtdmFsaWRhdGlvbiBvZiB0aGUgUE1EIGVudHJ5IHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBzcGxpdCBjb25jdXJyZW50bHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIHVzaW5nIGRldmljZSBwcml2YXRlIG1lbW9yeSBmZWF0dXJlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEhNTSB0ZXN0IGRyaXZlciAoYHRlc3RfaG1tYCkgd2hpY2ggcHJvdmlkZXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaW1wbGVtZW50YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcImRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VcIixcbiAgICBcImRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1cIixcbiAgICBcImRtaXJyb3JfZGV2bWVtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdoZW4gaGFuZGxpbmcgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSkuIEl0IGFkZHMgcHJvcGVyIGxvY2tpbmcgKGBwbWRfbG9ja2ApIGFuZCByZS12YWxpZGF0aW9uIG9mIHRoZSBQTUQgZW50cnkgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gdXNpbmcgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGZlYXR1cmVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgSE1NIHRlc3QgZHJpdmVyIChgdGVzdF9obW1gKSB3aGljaCBwcm92aWRlcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbXBsZW1lbnRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfnbp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 07:21:56 +0000 UTC FinishedAt: 2026-06-24 07:36:56 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "189ce3c81f8188fb737d59a8a8784f074e830238", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TEST_HMM", "DEVICE_PRIVATE", "ZONE_DEVICE", "TRANSPARENT_HUGEPAGE" ], "series_id": "9eab103d-4a1a-4978-81a2-c47ffb6e0625" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "dmirror_fops_unlocked_ioctl", "dmirror_migrate_to_device", "dmirror_migrate_to_system", "dmirror_devmem_fault" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjMyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RFU1RfSE1NJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfbWlncmF0ZV90b19kZXZpY2UmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbSYjMzQ7LAogICAgJiMzNDtkbWlycm9yX2Rldm1lbV9mYXVsdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2Agd2hlbiBoYW5kbGluZyBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcyAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBtaWdyYXRlZCB0byBkZXZpY2UgbWVtb3J5KS4gSXQgYWRkcyBwcm9wZXIgbG9ja2luZyAoYHBtZF9sb2NrYCkgYW5kIHJlLXZhbGlkYXRpb24gb2YgdGhlIFBNRCBlbnRyeSB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgc3BsaXQgY29uY3VycmVudGx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiB1c2luZyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgZmVhdHVyZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBITU0gdGVzdCBkcml2ZXIgKGB0ZXN0X2htbWApIHdoaWNoIHByb3ZpZGVzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGltcGxlbWVudGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODQwZWU2YTcwY2MwOWQ1NzYyYmExZDgzODhhODUwMmUxZDEzN2Y0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDA3OjMyOjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcbmluZGV4IDJjY2JhYmZiMmNjMTdhLi4xN2RmZjhhYWI5ZjllNCAxMDA2NDRcbi0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuQEAgLTI2OSwxNCAmIzQzOzI2OSwyNCBAQCBib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiBcdFx0XHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuIFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiBcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4tXHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4tXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuJiM0MztcdFx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpIHtcbiYjNDM7XHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiYjNDM7XG4mIzQzO1x0XHRcdHB2bXctXHUwMDNlcHRsID0gcG1kX2xvY2sobW0sIHB2bXctXHUwMDNlcG1kKTtcbiYjNDM7XHRcdFx0cG1kZSA9ICpwdm13LVx1MDAzZXBtZDtcbiYjNDM7XHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiBcbi1cdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4tXHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4mIzQzO1x0XHRcdGlmIChsaWtlbHkoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSkge1xuJiM0MztcdFx0XHRcdGlmIChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX01JR1JBVElPTilcbiYjNDM7XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4mIzQzO1x0XHRcdFx0aWYgKCFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG4mIzQzO1x0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gXHRcdFx0fVxuLVxuJiM0MztcdFx0XHQvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiYjNDM7XHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBOVUxMO1xuJiM0MztcdFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcbiBcdFx0XHRpZiAoKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfU1lOQykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIHRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBwdm13LVx1MDAzZWFkZHJlc3MsXG4gXHRcdFx0XHRcdFx0ICAgUE1EX09SREVSKSBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0mIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9kZXZtZW1fZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdoZW4gaGFuZGxpbmcgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSkuIEl0IGFkZHMgcHJvcGVyIGxvY2tpbmcgKGBwbWRfbG9ja2ApIGFuZCByZS12YWxpZGF0aW9uIG9mIHRoZSBQTUQgZW50cnkgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gdXNpbmcgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGZlYXR1cmVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgSE1NIHRlc3QgZHJpdmVyIChgdGVzdF9obW1gKSB3aGljaCBwcm92aWRlcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbXBsZW1lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODQwZWU2YTcwY2MwOWQ1NzYyYmExZDgzODhhODUwMmUxZDEzN2Y0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVuIDI0IDA3OjMyOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuYwppbmRleCAyY2NiYWJmYjJjYzE3YS4uMTdkZmY4YWFiOWY5ZTQgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Vfdm1hX21hcHBlZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jCkBAIC0yNjksMTQgJiM0MzsyNjksMjQgQEAgYm9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpCiAJCQkvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqLwogCQkJc3Bpbl91bmxvY2socHZtdy0mZ3Q7cHRsKTsKIAkJCXB2bXctJmd0O3B0bCA9IE5VTEw7Ci0JCX0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7Ci0JCQljb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7CiYjNDM7CQl9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkgewomIzQzOwkJCXNvZnRsZWFmX3QgZW50cnk7CiYjNDM7CiYjNDM7CQkJcHZtdy0mZ3Q7cHRsID0gcG1kX2xvY2sobW0sIHB2bXctJmd0O3BtZCk7CiYjNDM7CQkJcG1kZSA9ICpwdm13LSZndDtwbWQ7CiYjNDM7CQkJZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTsKIAotCQkJaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkgewotCQkJCXB2bXctJmd0O3B0bCA9IHBtZF9sb2NrKG1tLCBwdm13LSZndDtwbWQpOwomIzQzOwkJCWlmIChsaWtlbHkoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSkgewomIzQzOwkJCQlpZiAocHZtdy0mZ3Q7ZmxhZ3MgJmFtcDsgUFZNV19NSUdSQVRJT04pCiYjNDM7CQkJCQlyZXR1cm4gbm90X2ZvdW5kKHB2bXcpOwomIzQzOwkJCQlpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSkKJiM0MzsJCQkJCXJldHVybiBub3RfZm91bmQocHZtdyk7CiAJCQkJcmV0dXJuIHRydWU7CiAJCQl9Ci0KJiM0MzsJCQkvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovCiYjNDM7CQkJc3Bpbl91bmxvY2socHZtdy0mZ3Q7cHRsKTsKJiM0MzsJCQlwdm13LSZndDtwdGwgPSBOVUxMOwomIzQzOwkJfSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHsKIAkJCWlmICgocHZtdy0mZ3Q7ZmxhZ3MgJmFtcDsgUFZNV19TWU5DKSAmYW1wOyZhbXA7CiAJCQkgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctJmd0O2FkZHJlc3MsCiAJCQkJCQkgICBQTURfT1JERVIpICZhbXA7JmFtcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDU1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBpbiBgbW0vcGFnZV92bWFfbWFwcGVkLmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQmIzM5O3MgdG91Y2hpbmcgYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoZSBtYWluIHBvaW50IG9mIGludGVyZXN0IGlzIGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgY29yZSBNTSBmdW5jdGlvbiwgcmlnaHQ/IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgdXNlZCBmb3Igd2Fsa2luZyB0aGUgcGFnZSB0YWJsZXMuIEFueSBjaGFuZ2VzIHRvIHRoaXMgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlIGxvb2sgYW5kIGRlZmluaXRlbHkgd2FycmFudCBzb21lIHNlcmlvdXMgZnV6emluZy4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBjb25kaXRpb25hbCBjaGFuZ2UgYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YC4gVGhlIGV4aXN0aW5nIGxvZ2ljIGlzIGJlaW5nIHJlcGxhY2VkIHdpdGggYSBuZXcgY29uZGl0aW9uYWwgYmxvY2ssIGFuZCBhIGZldyBjb25kaXRpb25hbCBsb2NrIG9wZXJhdGlvbnMuIFRoZSBvcmlnaW5hbCBgaWZgIGNvbmRpdGlvbiBoYXMgYmVlbiBzd2FwcGVkIGZvciBhIG5ldyBjb25kaXRpb24gd2hpY2ggY2FsbHMgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIFRoZSBuZXcgY29kZSBwYXRoIHNlZW1zIHRvIGJlIGFkZGluZyBhZGRpdGlvbmFsIGxvY2tpbmcsIGFuZCBjaGVja3MgdG8gZW5zdXJlIHRoZSBgcG1kYCBpc24mIzM5O3QgY2hhbmdpbmcgd2hpbGUgaXQgcHJvY2Vzc2VzIHRoZSBlbnRyeS4gSSBzZWUgdGhpcyBpcyBiZWluZyBkb25lIHRvIGVuc3VyZSB0aGUgYHBtZGAgaXNuJiMzOTt0IHNwbGl0IGJ5IGFub3RoZXIgdGhyZWFkLgoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQsIHNvIEkmIzM5O2xsIGFsc28gdHJ5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBoZXJlLiBNeSBpbnR1aXRpb24gc2F5cyBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCAqY291bGQqIGJlIHJlbGF0ZWQgdG8gc29tZXRoaW5nIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEkmIzM5O2xsIHJ1biBhIHF1aWNrIGdyZXAgdG8gY29uZmlybSBhbmQgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIGV4YWN0IHNjZW5hcmlvcyBhZmZlY3RlZCBieSB0aGlzIHBhdGNoIGFuZCBwb3RlbnRpYWwgYXJlYXMgdG8gZm9jdXMgdGVzdGluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTU0PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfdWZmZF9tYXJrZXIocHRlX3QgcHRlKVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU3Mi0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU3MzogKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXBcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU3NC0gKiBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODMtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1ODQ6c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODUte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5MC1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU5MTpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU5Mi17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzExMi1cdFx0ZGlydHkgPSBzb2Z0bGVhZl9pc19taWdyYXRpb25fZGlydHkoZW50cnkpO1xubW0vaHVnZV9tZW1vcnkuYzozMTEzOlx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKnBtZCkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMzExNC1cdFx0c29mdGxlYWZfdCBlbnRyeTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMyNTMtXHRcdH1cbm1tL2h1Z2VfbWVtb3J5LmM6MzI1NDpcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9sZF9wbWQpKSB7XG5tbS9odWdlX21lbW9yeS5jLTMyNTUtXHRcdHB0ZV90IGVudHJ5O1xuLS1cbm1tL21lbW9yeS5jPTY0MTc9c3RhdGljIHZtX2ZhdWx0X3QgX19oYW5kbGVfbW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtb3J5LmMtNjQ5MC1cdGlmICh1bmxpa2VseSghcG1kX3ByZXNlbnQodm1mLm9yaWdfcG1kKSkpIHtcbm1tL21lbW9yeS5jOjY0OTE6XHRcdGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkodm1mLm9yaWdfcG1kKSlcbm1tL21lbW9yeS5jLTY0OTItXHRcdFx0cmV0dXJuIGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKFx1MDAyNnZtZik7XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTgwPWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI3MS1cdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoyNzI6XHRcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSB7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzMtXHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODIyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIGxhaWQgb3V0LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCYjMzk7cyBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIGFjdGl2ZS4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIGJ1dCBJIGNhbiYjMzk7dCBxdWl0ZSByZWNhbGwgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IGVuYWJsZSBpdC4gVG8gZmlndXJlIHRoaXMgb3V0IHF1aWNrbHksIEkmIzM5O20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIGl0cyBkZWZpbml0aW9uIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCByZWxldmFudCBwcmVwcm9jZXNzb3IgbWFjcm9zIHJlbGF0ZWQgdG8gaXRzIGVuYWJsaW5nIGNvbmRpdGlvbnMuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IHRoZSBjb25maWcgb3B0aW9ucyAob3IsIGF0IGxlYXN0LCB0aGUgaW5jbHVkZS9kZXBlbmRlbmN5IHN0cnVjdHVyZSksIHRoYXQgZ292ZXJuIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgdXNlZC4gSG9wZWZ1bGx5LCB0aGlzIGZpbGUgd2lsbCBoYXZlIHRoZSBhbnN3ZXIsIG9yIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0RFVklDRV9QUklWQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnPTY4PUNPTkZJR19aT05FX0RFVklDRT15XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZzo2OTpDT05GSUdfREVWSUNFX1BSSVZBVEU9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWctNzAtQ09ORklHX05FVD15XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTQwPXN0YXRpYyBpbmxpbmUgZW51bSBzb2Z0bGVhZl90eXBlIHNvZnRsZWFmX3R5cGUoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xNjAtI2VuZGlmXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoxNjE6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTYyLVx0Y2FzZSBTV1BfREVWSUNFX1dSSVRFOlxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0xNjY9c3RhdGljIGlubGluZSBib29sIGZvbGlvX2lzX2RldmljZV9wcml2YXRlKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8pXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTY3LXtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNjg6XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE2OS1cdFx0Zm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuLS1cbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaD0xNzM9c3RhdGljIGlubGluZSBib29sIGlzX2RldmljZV9wcml2YXRlX3BhZ2UoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmgtMTc0LXtcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNzU6XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tZW1yZW1hcC5oLTE3Ni1cdFx0Zm9saW9faXNfZGV2aWNlX3ByaXZhdGUocGFnZV9mb2xpbyhwYWdlKSk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9MzQ9c3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rc3dhcGQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03NS0gKi9cbmluY2x1ZGUvbGludXgvc3dhcC5oOjc2OiNpZmRlZiBDT05GSUdfREVWSUNFX1BSSVZBVEVcbmluY2x1ZGUvbGludXgvc3dhcC5oLTc3LSNkZWZpbmUgU1dQX0RFVklDRV9OVU0gM1xuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTEzMD1zdGF0aWMgaW5saW5lIHZvaWQgKnN3cF90b19yYWRpeF9lbnRyeShzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xMzQtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxMzU6I2lmIElTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTM2LXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShwZ29mZl90IG9mZnNldClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0xNDY9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2RldmljZV9leGNsdXNpdmVfZW50cnkocGdvZmZfdCBvZmZzZXQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTUwLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MTUxOiNlbHNlIC8qIENPTkZJR19ERVZJQ0VfUFJJVkFURSAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTUyLXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShwZ29mZl90IG9mZnNldClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0xNjI9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2RldmljZV9leGNsdXNpdmVfZW50cnkocGdvZmZfdCBvZmZzZXQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTY2LVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MTY3OiNlbmRpZiAvKiBDT05GSUdfREVWSUNFX1BSSVZBVEUgKi9cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE2OC1cbi0tXG5tbS9tZW1yZW1hcC5jPTI2Nj12b2lkICptZW1yZW1hcF9wYWdlcyhzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgbmlkKVxuLS1cbm1tL21lbXJlbWFwLmMtMjgzLVx0Y2FzZSBNRU1PUllfREVWSUNFX1BSSVZBVEU6XG5tbS9tZW1yZW1hcC5jOjI4NDpcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19ERVZJQ0VfUFJJVkFURSkpIHtcbm1tL21lbXJlbWFwLmMtMjg1LVx0XHRcdFdBUk4oMSwgXCYjMzQ7RGV2aWNlIHByaXZhdGUgbWVtb3J5IG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuLS1cbm1tL3JtYXAuYz0yNzM5PXZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTI3NzYtXG5tbS9ybWFwLmM6Mjc3NzojaWZkZWYgQ09ORklHX0RFVklDRV9QUklWQVRFXG5tbS9ybWFwLmMtMjc3OC0vKipcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9ND1DT05GSUdfVEVTVF9WTUFMTE9DPW1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZzo1OkNPTkZJR19ERVZJQ0VfUFJJVkFURT15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNi1DT05GSUdfVEVTVF9ITU09bVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKlBpbnBvaW50aW5nIHRoZSBDcml0aWNhbCBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBkZXZpY2Utc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgaXMgdGhlIGtleSB2YXJpYWJsZSB0byBmb2N1cyBvbi4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBpbmRpY2F0b3Igd2UgbmVlZCBmb3IgdGhlIGRldmljZS1sZXZlbCBjdXN0b21pemF0aW9ucy4gTGV0JiMzOTtzIHNlZS4uLiBub3cgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIGV4YWN0bHkgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gaG9vayBpcyBwbGFjZWQuIEkgcmVjYWxsIHRoYXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYCBob2xkcyBhIGxvdCBvZiB0aG9zZSBsb3ctbGV2ZWwgZGVmaW5pdGlvbnMsIHNvIHRoYXQmIzM5O3MgdGhlIGxpa2VseSBzcG90LiBTcGVjaWZpY2FsbHksIEkgc2VlbSB0byByZW1lbWJlciB0aGF0IGEga2V5IHJvdXRpbmUgd2lsbCBiZSBhcm91bmQgbGluZSA1ODQgb3Igc28uIEkmIzM5O2xsIG5lZWQgdG8gZ28gY2hlY2sgdGhlIGNvZGUgdGhlcmUgdG8gY29uZmlybSBob3cgaXQmIzM5O3MgaGFuZGxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NzA6XHQjaWYgZGVmaW5lZChDT05GSUdfWk9ORV9ERVZJQ0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OKVxuIDU3MTpcdFxuIDU3MjpcdC8qKlxuIDU3MzpcdCAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxuIDU3NDpcdCAqIGVudHJ5LlxuIDU3NTpcdCAqIEBwbWQ6IFRoZSBQTUQgdG8gY2hlY2suXG4gNTc2Olx0ICpcbiA1Nzc6XHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFBNRCBjb250YWlucyBhIHN3YXAgZW50cnkgdGhhdCByZXByZXNlbnRzIGEgZGV2aWNlIHByaXZhdGVcbiA1Nzg6XHQgKiBwYWdlIG1hcHBpbmcuIFRoaXMgaXMgdXNlZCBmb3Igem9uZSBkZXZpY2UgcHJpdmF0ZSBwYWdlcyB0aGF0IGhhdmUgYmVlblxuIDU3OTpcdCAqIHN3YXBwZWQgb3V0IGJ1dCBzdGlsbCBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZHVyaW5nIHZhcmlvdXMgbWVtb3J5IG1hbmFnZW1lbnRcbiA1ODA6XHQgKiBvcGVyYXRpb25zLlxuIDU4MTpcdCAqXG4gNTgyOlx0ICogUmV0dXJuOiB0cnVlIGlmIFBNRCBjb250YWlucyBkZXZpY2UgcHJpdmF0ZSBlbnRyeSwgZmFsc2Ugb3RoZXJ3aXNlXG4gNTgzOlx0ICovXG4gNTg0Olx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG4gNTg1Olx0e1xuIDU4NjpcdFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX2Zyb21fcG1kKHBtZCkpO1xuIDU4NzpcdH1cbiA1ODg6XHRcbiA1ODk6XHQjZWxzZSAgLyogQ09ORklHX1pPTkVfREVWSUNFIFx1MDAyNlx1MDAyNiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuIDU5MDpcdFxuIDU5MTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxuIDU5MjpcdHtcbiA1OTM6XHRcdHJldHVybiBmYWxzZTtcbiA1OTQ6XHR9XG4gNTk1Olx0XG4gNTk2Olx0I2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiA1OTc6XHRcbiA1OTg6XHQvKipcbiA1OTk6XHQgKiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KCkgLSBEb2VzIHRoaXMgUE1EIGVudHJ5IGVuY29kZSBhIG1pZ3JhdGlvbiBlbnRyeT9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODQ3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVsdmluZyBpbnRvIERldmljZS1Qcml2YXRlIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkgc2VlIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGlzIGFjdGl2ZS4gUmlnaHQsIHJpZ2h0LCB0aGF0JiMzOTtzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19aT05FX0RFVklDRWAgYW5kIHRoZSBgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gIG9wdGlvbnMuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzcGVjaWFsaXplZCBtZW1vcnkgaGFuZGxpbmcgaW4gdGhvc2UgY29udGV4dHMuIExldCYjMzk7cyBzZWUuLi4gd2hhdCBlbHNlIGlzIHRpZWQgaW50byB0aGlzPyBBaCwgeWVzLCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyBhbHNvIGluIHRoZSBtaXguIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgdGhlIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgZnVuY3Rpb24gdG8gYmUgY2VydGFpbiBJIGhhdmUgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb24gaG93IGRldmljZSBwcml2YXRlIG1lbW9yeSBpcyBjbGFzc2lmaWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMDgyLVx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKSB7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTA4MzpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXHRcdFx0XHRwcmVzZW50ID0gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yMzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI0OC0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI0OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1MC0gKiB3cml0YWJsZSBlbnRyeT9cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTUtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNTY6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTcte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2MS0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2MjogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGUgZW50cnk/XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjMtICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2Ni0gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI2OC17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzM1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzQxLVx0XHRyZXR1cm4gdHJ1ZTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM0MjpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNDMtXHRcdHJldHVybiB0cnVlO1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU4ND1zdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU4NS17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1ODY6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODctfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTYxNT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdmFsaWRfcG1kX2VudHJ5KHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjE3LVx0LyogT25seSBkZXZpY2UgcHJpdmF0ZSwgbWlncmF0aW9uIGVudHJpZXMgdmFsaWQgZm9yIFBNRC4gKi9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYxODpcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxOS1cdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KTtcbi0tXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9obW0uYy0yNjYtXHRcdCAqL1xubW0vaG1tLmM6MjY3Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMjY4LVx0XHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXHUwMDNlb3duZXIgPT1cbi0tXG5tbS9obW0uYy0yNzAtXHRcdFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcbm1tL2htbS5jOjI3MTpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vaG1tLmMtMjcyLVx0XHRcdFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XG4tLVxubW0vaG1tLmMtMjg0LVxubW0vaG1tLmM6Mjg1Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vaG1tLmMtMjg2LVx0XHRcdGdvdG8gZmF1bHQ7XG4tLVxubW0vaG1tLmM9MzM1PXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9obW0uYy0zNDUtXG5tbS9obW0uYzozNDY6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vaG1tLmMtMzQ3LVx0ICAgIHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KS1cdTAwM2VwZ21hcC1cdTAwM2Vvd25lciA9PVxuLS1cbm1tL2htbS5jLTM1My1cbm1tL2htbS5jOjM1NDpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL2htbS5jLTM1NS1cdFx0XHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcbi0tXG5tbS9obW0uYy0zNzItXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcbm1tL2htbS5jOjM3MzpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbm1tL2htbS5jLTM3NC1cdFx0XHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTE4MDg9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4MjctXHRcdHNldF9wbWRfYXQoc3JjX21tLCBhZGRyLCBzcmNfcG1kLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoxODI4Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMTgyOS1cdFx0Lypcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE4MzItXHRcdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoxODMzOlx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG5tbS9odWdlX21lbW9yeS5jLTE4MzQtXHRcdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTI1NTU9c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjU3NS1cdFx0XHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzoyNTc2Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMjU3Ny1cdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMTIzLVxubW0vaHVnZV9tZW1vcnkuYzozMTI0Olx0XHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtMzEyNS1cdFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ4NjY9aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4OTUtXG5tbS9odWdlX21lbW9yeS5jOjQ4OTY6XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUob2xkX2VudHJ5KTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDg5Ny1cdFx0c29mdGRpcnR5ID0gcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZHZhbCk7XG4tLVxubW0vbWVtb3J5LmM9OTQxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vbWVtb3J5LmMtOTkwLVx0XHR9XG5tbS9tZW1vcnkuYzo5OTE6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtOTkyLVx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4tLVxubW0vbWVtb3J5LmMtMTAxNS1cdFx0ICovXG5tbS9tZW1vcnkuYzoxMDE2Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vbWVtb3J5LmMtMTAxNy1cdFx0ICAgIGlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkge1xuLS1cbm1tL21lbW9yeS5jPTE3MzU9c3RhdGljIGlubGluZSBpbnQgemFwX25vbnByZXNlbnRfcHRlcyhzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21lbW9yeS5jLTE3NDQtXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcbm1tL21lbW9yeS5jOjE3NDU6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5tbS9tZW1vcnkuYy0xNzQ2LVx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XG4tLVxubW0vbWVtb3J5LmM9NDc0Nz12bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00NzczLVx0XHRcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XG5tbS9tZW1vcnkuYzo0Nzc0Olx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtNDc3NS1cdFx0XHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTcwLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzE6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5tbS9taWdyYXRlX2RldmljZS5jLTE3Mi1cdFx0XHQhKG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkgfHxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE3Ny1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTc4Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzktXHRcdFx0d3JpdGUgPSBNSUdSQVRFX1BGTl9XUklURTtcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTI0MT1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjk1LVx0XHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmM6Mjk2Olx0XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0yOTctXHRcdFx0XHRnb3RvIG5leHQ7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMjYtXHRcdFx0XHRcdE1JR1JBVEVfUEZOX01JR1JBVEU7XG5tbS9taWdyYXRlX2RldmljZS5jOjMyNzpcdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMjgtXHRcdFx0XHRtcGZuIHw9IE1JR1JBVEVfUEZOX1dSSVRFO1xuLS1cbm1tL21wcm90ZWN0LmM9MjE0PXN0YXRpYyBsb25nIGNoYW5nZV9zb2Z0bGVhZl9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbXByb3RlY3QuYy0yMzUtXHRcdFx0bmV3cHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkobmV3cHRlKTtcbm1tL21wcm90ZWN0LmM6MjM2Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbm1tL21wcm90ZWN0LmMtMjM3LVx0XHQvKlxuLS1cbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xODI9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2NhY2hlZF93cml0YWJsZShzb2Z0bGVhZl90IGVudHJ5KVxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE4My17XG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM6MTg0Olx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSB8fFxubW0vcGFnZV90YWJsZV9jaGVjay5jLTE4NS1cdFx0c29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xNj1zdGF0aWMgYm9vbCBtYXBfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgcG1kX3QgKnBtZHZhbHAsXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzAtXHRcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6NzE6XHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFx1MDAyNlx1MDAyNlxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzItXHRcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTA3PXN0YXRpYyBib29sIGNoZWNrX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGxvbmcgcHRlX25yKVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEyNC1cdFx0LyogSGFuZGxlIHVuLWFkZHJlc3NhYmxlIFpPTkVfREVWSUNFIG1lbW9yeSAqL1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTI1Olx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEyNi1cdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODA9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjc4LVxubW0vcGFnZV92bWFfbWFwcGVkLmM6Mjc5Olx0XHRcdGlmIChsaWtlbHkoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSkge1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMjgwLVx0XHRcdFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxuLS1cbm1tL3JtYXAuYz0yNDE1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjYwMC1cbm1tL3JtYXAuYzoyNjAxOlx0XHRcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xubW0vcm1hcC5jLTI2MDItXHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM3NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKQWxyaWdodCwgc28gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBoYXMgYmVlbiBhbHRlcmVkLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gaG93IHdlIGhhbmRsZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBpbnRyb2R1Y2VkIGEgbG9jayBhY3F1aXNpdGlvbiB3aXRoIGBwdm13LSZndDtwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy0mZ3Q7cG1kKTtgIGFuZCBhcmUgbm93IGV4cGxpY2l0bHkgY2hlY2tpbmcgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KWAuIFRoZSBrZXkgY29uZGl0aW9uYWwgc2VlbXMgdG8gYmUsIGlmIHRoYXQmIzM5O3MgdHJ1ZSwgdGhlbiB3ZSBleGFtaW5lIHRoZSBgUFZNV19NSUdSQVRJT05gIGZsYWcgYW5kIGludm9rZSBgY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpYC4gVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSByZWFsbHksIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBnZWFyZWQgdG93YXJkcyBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkgYW5kIGhvdyB3ZSB0cmF2ZXJzZSBwYWdlIHRhYmxlcy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGJvdGggYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgYW5kIGBDT05GSUdfWk9ORV9ERVZJQ0VgLiBBaCwgd2FpdCwgd2FzbiYjMzk7dCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBkZXBlbmRlbnQgb24gYENPTkZJR19aT05FX0RFVklDRWA/IFllcywgSSBzaG91bGQgZ28gYmFjayBhbmQgZG91YmxlIGNoZWNrIHRoYXQuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIGJ5IGNoZWNraW5nIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBmb3IgYERFVklDRV9QUklWQVRFYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVklDRV9QUklWQVRFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIxMT1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXG4tLVxubW0vS2NvbmZpZy0xMjEzLVxubW0vS2NvbmZpZzoxMjE0OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjE1LVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgZmVhdHVyZSBpcyBiZWluZyBjb25maWd1cmVkIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIg4oCTIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHRvIGFyb3VuZCBsaW5lIDEyMTQuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBhcyBpdCYjMzk7cyBvZnRlbiB3aGVyZSB5b3UgZmluZCB0aGUgY29yZSBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGlzIHdoYXQgSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dHMsIGFuZCBkZWZhdWx0IHZhbHVlcyBkZWZpbmVkIGZvciB0aGUgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjEwOlx0XG4xMjExOlx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuMTIxMjpcdFx0Ym9vbFxuMTIxMzpcdFxuMTIxNDpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTIxNTpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyMTY6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyMTc6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyMTg6XHRcbjEyMTk6XHRcdGhlbHBcbjEyMjA6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyMjE6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTIyMjpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjIzOlx0XG4xMjI0Olx0Y29uZmlnIFZNQVBfUEZOXG4xMjI1Olx0XHRib29sXG4xMjI2Olx0XG4xMjI3Olx0Y29uZmlnIEFSQ0hfVVNFU19ISUdIX1ZNQV9GTEFHU1xuMTIyODpcdFx0Ym9vbFxuMTIyOTpcdGNvbmZpZyBBUkNIX0hBU19QS0VZU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxNQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgbGlrZSB5b3Vyc2VsZjoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgaW1tZWRpYXRlbHkgemVyb2luZyBpbiBvbiBhIGRlcGVuZGVuY3k6IGBERVZJQ0VfUFJJVkFURWAgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAuIFRoYXQmIzM5O3MgdGhlIGNvcmUgcmVsYXRpb25zaGlwIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhlcmUuIE15IG5leHQgaW1tZWRpYXRlIHN0ZXA/IFdlbGwsIG5hdHVyYWxseSwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBkcmlsbGluZyBkb3duIG9uIGBaT05FX0RFVklDRWAuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBkZWZpbml0aW9uLCBmdW5jdGlvbmFsaXR5LCBhbmQgcG90ZW50aWFsIGNvbnN0cmFpbnRzIGJlY2F1c2UsIGxpa2UgYW55IGdvb2QgZW5naW5lZXIsIEkga25vdyB0aGF0IGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgbWVhbnMgYFpPTkVfREVWSUNFYCYjMzk7cyBiZWhhdmlvciBmdW5kYW1lbnRhbGx5IHNoYXBlcyBgREVWSUNFX1BSSVZBVEVgJiMzOTtzIGJlaGF2aW9yLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGBaT05FX0RFVklDRWAgc2lkZSBvZiB0aGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaT05FX0RFVklDRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTExNzg9Y29uZmlnIFpPTkVfRE1BMzJcbi0tXG5tbS9LY29uZmlnLTExODItXG5tbS9LY29uZmlnOjExODM6Y29uZmlnIFpPTkVfREVWSUNFXG5tbS9LY29uZmlnLTExODQtXHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYmV0dGVyLiBUaGUgaXNzdWUgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gY29uZmlndXJhdGlvbiBvcHRpb25zLiBIbW0sIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBpcyB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhcm91bmQgbGluZSAxMTgzLiBUaGF0IGFyZWEgdXN1YWxseSBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gd2hhdCBJJiMzOTttIHRyb3VibGVzaG9vdGluZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGRlZmluZWQgb3IgcmVmZXJlbmNlZCB0aGVyZSwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG90aGVyIHJlbGV2YW50IG9wdGlvbnMuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IEtjb25maWcgYW5kIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExODA6XHRcdGRlcGVuZHMgb24gIVg4Nl8zMlxuMTE4MTpcdFx0ZGVmYXVsdCB5IGlmIEFSTTY0XG4xMTgyOlx0XG4xMTgzOlx0Y29uZmlnIFpPTkVfREVWSUNFXG4xMTg0Olx0XHRib29sIFwmIzM0O0RldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcJiMzNDtcbjExODU6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbjExODY6XHRcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxuMTE4NzpcdFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxuMTE4ODpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuMTE4OTpcdFxuMTE5MDpcdFx0aGVscFxuMTE5MTpcdFx0ICBEZXZpY2UgbWVtb3J5IGhvdHBsdWcgc3VwcG9ydCBhbGxvd3MgZm9yIGVzdGFibGlzaGluZyBwbWVtLFxuMTE5MjpcdFx0ICBvciBvdGhlciBkZXZpY2UgZHJpdmVyIGRpc2NvdmVyZWQgbWVtb3J5IHJlZ2lvbnMsIGluIHRoZVxuMTE5MzpcdFx0ICBtZW1tYXAuIFRoaXMgYWxsb3dzIHBmbl90b19wYWdlKCkgbG9va3VwcyBvZiBvdGhlcndpc2VcbjExOTQ6XHRcdCAgXCYjMzQ7ZGV2aWNlLXBoeXNpY2FsXCYjMzQ7IGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXG4xMTk1Olx0XHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cbjExOTY6XHRcbjExOTc6XHRcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxuMTE5ODpcdFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXG4xMTk5Olx0XHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMzkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHJlYXNvbmluZzoKCioqRW5hYmxpbmcgREVWSUNFX1BSSVZBVEUgYW5kIFpPTkVfREVWSUNFOiBBIFF1aWNrIENoZWNrKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBlbmFibGluZyBgREVWSUNFX1BSSVZBVEVgIGFuZCBgWk9ORV9ERVZJQ0VgLiBTdGFuZGFyZCBwcm9jZWR1cmUsIGJ1dCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gb3JkZXIuIFNwZWNpZmljYWxseSwgSSByZWNhbGwgZW5jb3VudGVyaW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIGRlZmluZWQgdW5kZXIgYSBjb25kaXRpb25hbCBibG9jay4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUgbmVjZXNzYXJ5IHByZXJlcXVpc2l0ZXMgYXJlIG1ldC4gVGhhdCBkZWZpbml0aW9uIGlzIHdyYXBwZWQgaW4gYW4gYCNpZmAgdGhhdCBoaW5nZXMgb24gYm90aCBgQ09ORklHX1pPTkVfREVWSUNFYCAqYW5kKiBgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwPyBDb25maXJtaW5nIHRoZSBzdGF0dXMgb2YgYENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OYC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZsYWdzIGFuZCBhbnkgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgVGhpbiBIeXBlcnBhZ2UgKFRIUCkgbWlncmF0aW9uIHNjaGVtZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NjUwPWNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY1Mi1cbm1tL0tjb25maWc6NjUzOmNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY1NC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MzIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYmV0dGVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbW0vS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2NTMuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIHJlbGV2YW50IHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gbWF5IGJlIGRlZmluZWQgb3IgdXNlZCBuZWFyIHRoYXQgbGluZS4gSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZSByZWxldmFudCBLY29uZmlnIHN5bWJvbHMgYXJlIGRlZmluZWQgb3IgdXNlZC4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBsb2dpYyBhcm91bmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNldHRpbmdzLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIEkgY2FuIGRpZyB1cCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NTA6XHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXG4gNjUxOlx0XHRib29sXG4gNjUyOlx0XG4gNjUzOlx0Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiA2NTQ6XHRcdGJvb2xcbiA2NTU6XHRcbiA2NTY6XHRjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbiA2NTc6XHRcdGRlZl9ib29sIG5cbiA2NTg6XHRcdGhlbHBcbiA2NTk6XHRcdCAgQWxsb3dzIHRoZSBwYWdlYmxvY2tfb3JkZXIgdmFsdWUgdG8gYmUgZHluYW1pYyBpbnN0ZWFkIG9mIGp1c3Qgc3RhbmRhcmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBBcmNoaXRlY3R1cmUtU3BlY2lmaWMgU2VsZWN0aW9uIG9mIGBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gLCBhbmQgaW1tZWRpYXRlbHkgSSBub3RpY2UgaXQmIzM5O3MgYSBib29sZWFuIHdpdGhvdXQgYW55IGFzc29jaWF0ZWQgcHJvbXB0LiBUaGF0IG1lYW5zIGl0JiMzOTtzIG9uZSBvZiB0aG9zZSBmbGFncyB0aGF0JiMzOTtzIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IHNwZWNpZmljIGFyY2hpdGVjdHVyZXMsIG5vdCBzb21ldGhpbmcgdGhlIHVzZXIgY29uZmlndXJlcy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBhcmNoaXRlY3R1cmVzIGFyZSB1c2luZyBpdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHN5bWJvbCB0byBzZWUgd2hlcmUgaXQgZ2V0cyBkZWZpbmVkLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBzZWUgd2hpY2ggYC5jb25maWdgIGVudHJpZXMgYXJlIHNldHRpbmcgdGhpcy4gVGltZSB0byBnZXQgdGhpcyBpbnZlc3RpZ2F0aW9uIG1vdmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE5LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbmFyY2gvYXJtNjQvS2NvbmZpZzoyMDpcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL2FybTY0L0tjb25maWctMjEtXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXG4tLVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz0yPWNvbmZpZyBMT09OR0FSQ0hcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVx0c2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnOjE1Olx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvbG9vbmdhcmNoL0tjb25maWctMTYtXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXHRpZiBBQ1BJXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU9MTA5PWNvbmZpZyBQUENfVEhQXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE0LSAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU6MTE1OiAgICAgICBzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE2LVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMjQtXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC9yaXNjdi9LY29uZmlnOjI1Olx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNi1cdHNlbGVjdCBBUkNIX0hBU19CSU5GTVRfRkxBVFxuLS1cbmFyY2gvczM5MC9LY29uZmlnPTc4PWNvbmZpZyBTMzkwXG4tLVxuYXJjaC9zMzkwL0tjb25maWctODctXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuYXJjaC9zMzkwL0tjb25maWc6ODg6XHRzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuYXJjaC9zMzkwL0tjb25maWctODktXHRzZWxlY3QgQVJDSF9IQVNfQ0NfQ0FOX0xJTktcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTcyLVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgKFBHVEFCTEVfTEVWRUxTIFx1MDAzZSAyKSBcdTAwMjZcdTAwMjYgKFg4Nl82NCB8fCBYODZfUEFFKVxuYXJjaC94ODYvS2NvbmZpZzo3MzpcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gveDg2L0tjb25maWctNzQtXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXHRpZiBBQ1BJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODg4CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipFbmFibGluZyBUcmFuc3BhcmVudCBIdWdlcGFnZXMgZm9yIE9wdGltYWwgUGVyZm9ybWFuY2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgaGFuZGxlZCwgYW5kIGl0IHNlZW1zIHRoZSBzZWxlY3Rpb24gaXMgZHJpdmVuIGJ5IGB4ODZfNjRgIGFyY2hpdGVjdHVyZSwgcHJvdmlkZWQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBzdGFuZGFyZCBwcmFjdGljZSBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIG9uIG1vZGVybiBoYXJkd2FyZS4gR2l2ZW4gdGhhdCwgZW5hYmxpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpdHNlbGYgbG9va3MgbGlrZSBhIHZlcnkgZ29vZCBpZGVhLiBUaGlzIHdhcnJhbnRzIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRvIGNvbmZpcm0gdGhlIGN1cnJlbnQgc3RhdGUgb2YgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGltZSB0byB2ZXJpZnkgdGhhdCBzZXR0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03OTA9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy03OTItXG5tbS9LY29uZmlnOjc5MzptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTc5NC1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODExPWNob2ljZVxuLS1cbm1tL0tjb25maWctODE2LVxubW0vS2NvbmZpZzo4MTc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTgxOC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgyMy1cbm1tL0tjb25maWc6ODI0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODI1LVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTgzMi1cbm1tL0tjb25maWc6ODMzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTgzNC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODQwPWNob2ljZVxuLS1cbm1tL0tjb25maWctODQ5LVxubW0vS2NvbmZpZzo4NTA6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04NTEtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg1OS1cbm1tL0tjb25maWc6ODYwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg2MS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2Ny1cbm1tL0tjb25maWc6ODY4Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctODY5LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzUtXG5tbS9LY29uZmlnOjg3NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy04NzctXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04ODU9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04OTQtXG5tbS9LY29uZmlnOjg5NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5Ni1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTAzLVxubW0vS2NvbmZpZzo5MDQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTA1LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTExLVxubW0vS2NvbmZpZzo5MTI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MTMtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxOS1cbm1tL0tjb25maWc6OTIwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkyMS1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MTUKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRnV6emluZyoqCgpSaWdodCwgc28sIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zIHdlIGFic29sdXRlbHkgKm5lZWQqIHRvIGJlIGluIHBsYWNlIGZvciB0aGlzIGZ1enppbmcgZWZmb3J0LiBNeSBpbml0aWFsIGNoZWNrbGlzdCBpcyBjb21pbmcgZG93biB0bzogYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRob3NlIHNlZW0gZXNzZW50aWFsIGZvciB0aGUgY29yZSBzZXR1cCB3ZSYjMzk7cmUgdGFyZ2V0aW5nLgoKTm93LCBhIHF1ZXN0aW9uIGlzIHBvcHBpbmcgdXA6IGNhbiB3ZSBsZXZlcmFnZSBgVEVTVF9ITU1gIGhlcmU/IEdpdmVuIGl0cyBwdXJwb3Nl4oCUc3BlY2lmaWNhbGx5LCBwcm92aWRpbmcgdGhhdCBtb2NrIGRldmljZSBzZXR1cCBmb3IgSE1NIGFuZCBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgdGVzdGluZ+KAlGl0ICptaWdodCogYmUgcmVhbGx5IHVzZWZ1bCBmb3Igc2V0dGluZyB1cCBhIGNvbnRyb2xsZWQgdGVzdGluZyBlbnZpcm9ubWVudCwgbWFraW5nIGZ1enppbmcgdGhpcyB3aG9sZSB0aGluZyBtdWNoIG1vcmUgbWFuYWdlYWJsZS4gV29ydGggYSBjbG9zZXIgbG9vaywgYXQgbGVhc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBURVNUX0hNTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0zMzMxPWNvbmZpZyBURVNUX01FTUlOSVRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzM4LVxubGliL0tjb25maWcuZGVidWc6MzMzOTpjb25maWcgVEVTVF9ITU1cbmxpYi9LY29uZmlnLmRlYnVnLTMzNDAtXHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxNTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBkZWJ1Z2dpbmcgY29uZmlndXJhdGlvbiBvZiB0aGlzIHByb2plY3QuIEdpdmVuIHRoZSBuYXR1cmUgb2Ygd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLCBteSBpbnR1aXRpb24gc3VnZ2VzdHMgdGhlIGBLY29uZmlnLmRlYnVnYCBmaWxlIGlzIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHplcm8gaW4gYXJvdW5kIGxpbmUgMzMzOS4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzdGFydGluZyBwb2ludDsgb2Z0ZW4sIHRoZXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHN0cnVjdHVyZWQgd2l0aCByZWxhdGVkIG9wdGlvbnMgZ3JvdXBlZCB0b2dldGhlciwgYW5kIHRoYXQgbGluZSBtaWdodCBob3VzZSB0aGUgb3B0aW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSwgb3IgYXQgbGVhc3QgYSBjcnVjaWFsIHBvaW50IG9mIHJlZmVyZW5jZSBmb3IgYSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGluc2lnaHRzIHRoYXQgc3BlY2lmaWMgYXJlYSBob2xkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1ZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzMzNTpcdFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXG4zMzM2Olx0XG4zMzM3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4zMzM4Olx0XG4zMzM5Olx0Y29uZmlnIFRFU1RfSE1NXG4zMzQwOlx0XHR0cmlzdGF0ZSBcJiMzNDtUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcJiMzNDtcbjMzNDE6XHRcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcbjMzNDI6XHRcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcbjMzNDM6XHRcdHNlbGVjdCBITU1fTUlSUk9SXG4zMzQ0Olx0XHRzZWxlY3QgTU1VX05PVElGSUVSXG4zMzQ1Olx0XHRoZWxwXG4zMzQ2Olx0XHQgIFRoaXMgaXMgYSBwc2V1ZG8gZGV2aWNlIGRyaXZlciBzb2xlbHkgZm9yIHRlc3RpbmcgSE1NLlxuMzM0NzpcdFx0ICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBITU0gdGVzdCBtb2R1bGUuXG4zMzQ4Olx0XHQgIERvaW5nIHNvIHdpbGwgYWxsb3cgeW91IHRvIHJ1biB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0L3ZtL2htbS10ZXN0cy5cbjMzNDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1OTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZXZpY2UgUHJpdmF0ZSBNZW1vcnkgd2l0aCBURVNUX0hNTSoqCgpPa2F5LCBzbyBgVEVTVF9ITU1gIGxvb2tzIGxpa2UgdGhlIGlkZWFsIGFwcHJvYWNoIGZvciBmdXp6aW5nIGRldmljZSBwcml2YXRlIG1lbW9yeSwgcGFydGljdWxhcmx5IHNpbmNlIHdlJiMzOTtyZSBsYWNraW5nIHJlYWwgaGFyZHdhcmUgZm9yIHRoaXMuIEl0JiMzOTtzIHRpbWUgdG8gZW5hYmxlIGl0LiBOb3csIGxldCYjMzk7cyBzdHJhdGVnaWNhbGx5IHBpY2sgb3VyIHRhcmdldHMuIE15IGF0dGVudGlvbiBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gV2hpbGUgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBNTSBmdW5jdGlvbiBhbmQgaGVhdmlseSB1dGlsaXplZCwgdGhhdCBhbHNvIHByZXNlbnRzIGEgdmFzdCBhdHRhY2sgc3VyZmFjZS4KClRoZSBrZXkgaXMgdG8gbmFycm93IG91ciBmb2N1cy4gQXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBicm9hZGVyIGFyZWEgdGhhdCBhcmUgbW9yZSBkaXJlY3RseSB0aWVkIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeSBhY2Nlc3M/IFBlcmhhcHMgc29tZSBzcGVjaWFsaXplZCBoZWxwZXIgZnVuY3Rpb24/IExldCYjMzk7cyBkcmlsbCBkb3duIGludG8gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCBpdHNlbGYuIFdlIG5lZWQgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgdGhhdCBhcmUgZWl0aGVyIGV4Y2x1c2l2ZWx5IG9yICpoZWF2aWx5KiBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgZGV2aWNlIHByaXZhdGUgbWVtb3J5IHJlZ2lvbiBtYXBwaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZ3JhcGggaGVyZSBpcyBrZXkgdG8gbWF4aW1pemluZyBvdXIgZnV6emluZyBlZmZpY2llbmN5IGFuZCB1bmNvdmVyaW5nIGRldmljZS1zcGVjaWZpYyB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgZmlsZSBpcyB0aGUgcHJpbWFyeSBzb3VyY2Ugb2YgdHJ1dGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZV92bWFfbWFwcGVkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MDpcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG4gMjYxOlx0XHRcdFx0fVxuIDI2MjpcdFx0XHRcdGlmIChsaWtlbHkocG1kX3RyYW5zX2h1Z2UocG1kZSkpKSB7XG4gMjYzOlx0XHRcdFx0XHRpZiAocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pXG4gMjY0Olx0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjY1Olx0XHRcdFx0XHRpZiAoIWNoZWNrX3BtZChwbWRfcGZuKHBtZGUpLCBwdm13KSlcbiAyNjY6XHRcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiAyNjc6XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuIDI2ODpcdFx0XHRcdH1cbiAyNjk6XHRcdFx0XHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuIDI3MDpcdFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiAyNzE6XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4gMjcyOlx0XHRcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSB7XG4gMjczOlx0XHRcdFx0c29mdGxlYWZfdCBlbnRyeTtcbiAyNzQ6XHRcbiAyNzU6XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjc2Olx0XHRcdFx0cG1kZSA9ICpwdm13LVx1MDAzZXBtZDtcbiAyNzc6XHRcdFx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuIDI3ODpcdFxuIDI3OTpcdFx0XHRcdGlmIChsaWtlbHkoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSkge1xuIDI4MDpcdFx0XHRcdFx0aWYgKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxuIDI4MTpcdFx0XHRcdFx0XHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xuIDI4MjpcdFx0XHRcdFx0aWYgKCFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpXG4gMjgzOlx0XHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4gMjg0Olx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbiAyODU6XHRcdFx0XHR9XG4gMjg2Olx0XHRcdFx0LyogZGV2aWNlLXByaXZhdGUgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuIDI4NzpcdFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiAyODg6XHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4gMjg5Olx0XHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4gMjkwOlx0XHRcdFx0aWYgKChwdm13LVx1MDAzZWZsYWdzIFx1MDAyNiBQVk1XX1NZTkMpIFx1MDAyNlx1MDAyNlxuIDI5MTpcdFx0XHRcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cdTAwM2VhZGRyZXNzLFxuIDI5MjpcdFx0XHRcdFx0XHRcdCAgIFBNRF9PUkRFUikgXHUwMDI2XHUwMDI2XG4gMjkzOlx0XHRcdFx0ICAgIChwdm13LVx1MDAzZW5yX3BhZ2VzIFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcbiAyOTQ6XHRcdFx0XHRcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4gMjk1Olx0XG4gMjk2Olx0XHRcdFx0c3RlcF9mb3J3YXJkKHB2bXcsIFBNRF9TSVpFKTtcbiAyOTc6XHRcdFx0XHRjb250aW51ZTtcbiAyOTg6XHRcdFx0fVxuIDI5OTpcdFx0XHRpZiAoIW1hcF9wdGUocHZtdywgXHUwMDI2cG1kZSwgXHUwMDI2cHRsKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY4NwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgRnVuY3Rpb24qKgoKT2theSwgc28gdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBhcHBlYXJzIHRvIGhhdmUgYmVlbiBtb2RpZmllZCBpcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgc2luY2UgaXQmIzM5O3MgYSBob3QtcGF0aCBmdW5jdGlvbiwgaXQgd2FycmFudHMgY2xvc2Ugc2NydXRpbnkuIEhvd2V2ZXIsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhhdCB0aGUgcmVsZXZhbnQgY29kZSBwYXRoIHdpdGhpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHNwZWNpZmljYWxseSBmb3IgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIE15IGNvbmNlcm4gaXMgdGhhdCBmb2N1c2luZyBzb2xlbHkgb24gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBtaWdodCBiaWFzIHRoZSBmdXp6aW5nIGVmZm9ydHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LgoKVGhlcmVmb3JlLCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNvZGUgcGF0aCB0aGF0IGFjdHVhbGx5IHRyaWdnZXJzIHRoaXMgc3BlY2lmaWMgY2hlY2suIFRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgaGVyZSwgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAsIGlzIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcyBhbmQgZGV2aWNlLXByaXZhdGUgbWVtb3J5LCBzbyBJIG5lZWQgdG8gZXhwbG9yZSBpdHMgcmVsYXRpb24gdG8gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gTGV0JiMzOTtzIHNlZSB3aGVyZSBleGFjdGx5IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgY2FsbGVkIGZyb20uIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgYnJvYWRlciBwaWN0dXJlIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIGFjY3VyYXRlbHkgYW5kIGVuc3VyZSBteSBmdXp6aW5nIHN0cmF0ZWd5IGlzIGNvbXByZWhlbnNpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2Vfdm1hX21hcHBlZF93YWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9NTIyPXN0cnVjdCBscnV2ZWM7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUyMzpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGs7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUyNC1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTY4OT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NjkwOmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucik7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MS1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTcwOD1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTEtXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjcxMjpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMy1cdFx0dW5zaWduZWQgaW50IG5yKVxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oPTg1MT1zdHJ1Y3QgcGFnZSAqbWFrZV9kZXZpY2VfZXhjbHVzaXZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODYzLVxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODY0OnN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayB7XG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NjUtXHR1bnNpZ25lZCBsb25nIHBmbjtcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NzYtI2RlZmluZSBERUZJTkVfRk9MSU9fVk1BX1dBTEsobmFtZSwgX2ZvbGlvLCBfdm1hLCBfYWRkcmVzcywgX2ZsYWdzKVx0XFxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg3NzpcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBuYW1lID0ge1x0XHRcdFx0XFxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg3OC1cdFx0LnBmbiA9IGZvbGlvX3BmbihfZm9saW8pLFx0XHRcdFx0XFxcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04ODUtXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4ODY6c3RhdGljIGlubGluZSB2b2lkIHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxuaW5jbHVkZS9saW51eC9ybWFwLmgtODg3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04OTUtLyoqXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4OTY6ICogcGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydCAtIFJlc3RhcnQgdGhlIHBhZ2UgdGFibGUgd2Fsay5cbmluY2x1ZGUvbGludXgvcm1hcC5oOjg5NzogKiBAcHZtdzogUG9pbnRlciB0byBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsuXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04OTgtICpcbi0tXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD05MDQ9c3RhdGljIGlubGluZSB2b2lkXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo5MDU6cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MDYte1xuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oLTkxOC1cbmluY2x1ZGUvbGludXgvcm1hcC5oOjkxOTpib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyk7XG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MjAtdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzE3PXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9ndWFyZF9zd3BfZW50cnkodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjEtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjI6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIzLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI0LSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI1OmV4dGVybiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI2LVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjctXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjg6ZXh0ZXJuIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI5LVx0XHRzdHJ1Y3QgcGFnZSAqbmV3KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMzM9c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0MS0jZWxzZSAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0MjpzdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDMtXHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0Ny1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQ5LVx0XHRzdHJ1Y3QgcGFnZSAqbmV3KVxuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYz0xNTk9c3RhdGljIGJvb2wgZGFtb25fZm9saW9fbWtvbGRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE2My1cbm1tL2RhbW9uL29wcy1jb21tb24uYzoxNjQ6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjUtXHRcdGFkZHIgPSBwdm13LmFkZHJlc3M7XG4tLVxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjAxLVx0KmFjY2Vzc2VkID0gZmFsc2U7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmM6MjAyOlx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjAzLVx0XHRhZGRyID0gcHZtdy5hZGRyZXNzO1xuLS1cbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjYtXHRcdGlmICgqYWNjZXNzZWQpIHtcbm1tL2RhbW9uL29wcy1jb21tb24uYzoyMjc6XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMjgtXHRcdFx0YnJlYWs7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00ODYyPWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4NjUtI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG5tbS9odWdlX21lbW9yeS5jOjQ4NjY6aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2Ny1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00OTM5LVxubW0vaHVnZV9tZW1vcnkuYzo0OTQwOnZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBzdHJ1Y3QgcGFnZSAqbmV3KVxubW0vaHVnZV9tZW1vcnkuYy00OTQxLXtcbi0tXG5tbS9pbnRlcm5hbC5oPTEyMzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2ludGVybmFsLmgtMTI1Ny0gKi9cbm1tL2ludGVybmFsLmg6MTI1ODpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX2FkZHJlc3NfZW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL2ludGVybmFsLmgtMTI1OS17XG4tLVxubW0va3NtLmM9MTI3NT1zdGF0aWMgaW50IHdyaXRlX3Byb3RlY3RfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9rc20uYy0xMjk2LVxubW0va3NtLmM6MTI5NzpcdGlmICghcGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpXG5tbS9rc20uYy0xMjk4LVx0XHRnb3RvIG91dF9tbjtcbi0tXG5tbS9rc20uYy0xMzU4LW91dF91bmxvY2s6XG5tbS9rc20uYzoxMzU5Olx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL2tzbS5jLTEzNjAtb3V0X21uOlxuLS1cbm1tL21pZ3JhdGUuYz0yNzk9Ym9vbCBpc29sYXRlX2ZvbGlvX3RvX2xpc3Qoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9taWdyYXRlLmMtMjk3LVxubW0vbWlncmF0ZS5jOjI5ODpzdGF0aWMgYm9vbCB0cnlfdG9fbWFwX3VudXNlZF90b196ZXJvcGFnZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG5tbS9taWdyYXRlLmMtMjk5LVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCBvbGRfcHRlLCB1bnNpZ25lZCBsb25nIGlkeClcbi0tXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTM1MS1cbm1tL21pZ3JhdGUuYzozNTI6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL21pZ3JhdGUuYy0zNTMtXHRcdHJtYXBfdCBybWFwX2ZsYWdzID0gUk1BUF9OT05FO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE5Ni1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTk3Olx0XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTk4LVx0XHRcdC5wdGwgPSBwdGwsXG4tLVxubW0vcGFnZV9pZGxlLmM9NTI9c3RhdGljIGJvb2wgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3BhZ2VfaWRsZS5jLTU4LVxubW0vcGFnZV9pZGxlLmM6NTk6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL3BhZ2VfaWRsZS5jLTYwLVx0XHRhZGRyID0gcHZtdy5hZGRyZXNzO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTktXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDpzdGF0aWMgaW5saW5lIGJvb2wgbm90X2ZvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTExLXtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEyOlx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShwdm13KTtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzLVx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1LVxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTY6c3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTctXHRcdCAgICBzcGlubG9ja190ICoqcHRscClcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04Ny0gKiBtYXBwZWQgYXQgdGhlIEBwdm13LVx1MDAzZXB0ZVxubW0vcGFnZV92bWFfbWFwcGVkLmM6ODg6ICogQHB2bXc6IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHN0cnVjdCwgaW5jbHVkZXMgYSBwYWlyIHB0ZSBhbmQgcGZuIHJhbmdlXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04OS0gKiBmb3IgY2hlY2tpbmdcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05MS0gKlxubW0vcGFnZV92bWFfbWFwcGVkLmM6OTI6ICogcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBmb3VuZCBhIHBsYWNlIHdoZXJlIHBmbiByYW5nZSBpcyAqcG90ZW50aWFsbHkqXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05My0gKiBtYXBwZWQuIGNoZWNrX3B0ZSgpIGhhcyB0byB2YWxpZGF0ZSB0aGlzLlxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEwNi0gKi9cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEwNzpzdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEwOC17XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTM5LS8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgdHdvIHJhbmdlcyBvdmVybGFwLiAgQ2FyZWZ1bCB0byBub3Qgb3ZlcmZsb3cuICovXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNDA6c3RhdGljIGJvb2wgY2hlY2tfcG1kKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDEte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE0OC1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE0OTpzdGF0aWMgdm9pZCBzdGVwX2ZvcndhcmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHNpemUpXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTAte1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1Ni0vKipcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE1NzogKiBwYWdlX3ZtYV9tYXBwZWRfd2FsayAtIGNoZWNrIGlmIEBwdm13LVx1MDAzZXBmbiBpcyBtYXBwZWQgaW4gQHB2bXctXHUwMDNldm1hIGF0XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNTgtICogQHB2bXctXHUwMDNlYWRkcmVzc1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MTU5OiAqIEBwdm13OiBwb2ludGVyIHRvIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2Fsay4gcGFnZSwgdm1hLCBhZGRyZXNzIGFuZCBmbGFnc1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMTYwLSAqIG11c3QgYmUgc2V0LiBwbWQsIHB0ZSBhbmQgcHRsIG11c3QgYmUgTlVMTC5cbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjYtICogSWYgQHB2bXctXHUwMDNlcG1kIGlzIHNldCBidXQgQHB2bXctXHUwMDNlcHRlIGlzIG5vdCwgeW91IGhhdmUgZm91bmQgUE1ELW1hcHBlZCBwYWdlXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNjc6ICogKHVzdWFsbHkgVEhQKS4gRm9yIFBURS1tYXBwZWQgVEhQLCB5b3Ugc2hvdWxkIHJ1biBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIGluXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjgtICogYSBsb29wIHRvIGZpbmQgYWxsIFBURXMgdGhhdCBtYXAgdGhlIFRIUC5cbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNzYtICpcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE3NzogKiBJZiB5b3UgbmVlZCB0byBzdG9wIHRoZSB3YWxrIGJlZm9yZSBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIHJldHVybmVkIGZhbHNlLFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTc4OiAqIHVzZSBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKCkuIEl0IHdpbGwgZG8gdGhlIGhvdXNla2VlcGluZy5cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3OS0gKi9cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE4MDpib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE4MS17XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MzU2PXVuc2lnbmVkIGxvbmcgcGFnZV9tYXBwZWRfaW5fdm1hKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM1OS1cdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MzYwOlx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNjEtXHRcdC5wZm4gPSBwYWdlX3RvX3BmbihwYWdlKSxcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNjktXHRcdGdvdG8gb3V0O1xubW0vcGFnZV92bWFfbWFwcGVkLmM6MzcwOlx0aWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM3MS1cdFx0cmV0dXJuIC1FRkFVTFQ7XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNzI6XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcGFnZV92bWFfbWFwcGVkLmMtMzczLW91dDpcbi0tXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTkyNC1cbm1tL3JtYXAuYzo5MjU6XHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXHUwMDI2cHZtdykpIHtcbm1tL3JtYXAuYy05MjYtXHRcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XG4tLVxubW0vcm1hcC5jLTk0OC1cdFx0XHRtbG9ja192bWFfZm9saW8oZm9saW8sIHZtYSk7XG5tbS9ybWFwLmM6OTQ5Olx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtOTUwLVx0XHRcdHByYS1cdTAwM2V2bV9mbGFncyB8PSBWTV9MT0NLRUQ7XG4tLVxubW0vcm1hcC5jLTk2My1cdFx0XHRwcmEtXHUwMDNlcmVmZXJlbmNlZCA9IC0xO1xubW0vcm1hcC5jOjk2NDpcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTk2NS1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vcm1hcC5jLTEwMDItXHRcdGlmIChwdGVzID09IHB2bXcubnJfcGFnZXMpIHtcbm1tL3JtYXAuYzoxMDAzOlx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG5tbS9ybWFwLmMtMTAwNC1cdFx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmM9MTA2ND1pbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLS1cbm1tL3JtYXAuYy0xMTAyLVxubW0vcm1hcC5jOjExMDM6c3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXG5tbS9ybWFwLmMtMTEwNC17XG4tLVxubW0vcm1hcC5jLTExMTctXG5tbS9ybWFwLmM6MTExODpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2Fsayhwdm13KSkge1xubW0vcm1hcC5jLTExMTktXHRcdGludCByZXQgPSAwO1xuLS1cbm1tL3JtYXAuYz0xMjMxPXN0YXRpYyBib29sIG1hcHBpbmdfd3Jwcm90ZWN0X3JhbmdlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3JtYXAuYy0xMjM0LVx0c3RydWN0IHdycHJvdGVjdF9maWxlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3Qgd3Jwcm90ZWN0X2ZpbGVfc3RhdGUgKilhcmc7XG5tbS9ybWFwLmM6MTIzNTpcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xubW0vcm1hcC5jLTEyMzYtXHRcdC5wZm5cdFx0PSBzdGF0ZS1cdTAwM2VwZm4sXG4tLVxubW0vcm1hcC5jPTEzMTA9aW50IHBmbl9ta2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBwZ29mZl90IHBnb2ZmLFxuLS1cbm1tL3JtYXAuYy0xMzEyLXtcbm1tL3JtYXAuYzoxMzEzOlx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XG5tbS9ybWFwLmMtMTMxNC1cdFx0LnBmblx0XHQ9IHBmbixcbi0tXG5tbS9ybWFwLmM9MTk0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3JtYXAuYzoxOTQ1Olx0XHRcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbm1tL3JtYXAuYy0xOTQ2LVx0XHRcdGVudW0gdHR1X2ZsYWdzIGZsYWdzLCBwdGVfdCBwdGUpXG4tLVxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjAzMS1cbm1tL3JtYXAuYzoyMDMyOlx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFx1MDAyNnB2bXcpKSB7XG5tbS9ybWFwLmMtMjAzMy1cdFx0bnJfcGFnZXMgPSAxO1xuLS1cbm1tL3JtYXAuYy0yMDg5LVx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+VFRVX1NQTElUX0hVR0VfUE1EO1xubW0vcm1hcC5jOjIwOTA6XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTIwOTEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS9ybWFwLmMtMjM2My13YWxrX2RvbmU6XG5tbS9ybWFwLmM6MjM2NDpcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yMzY1LVx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmM9MjQxNT1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTI0NjAtXG5tbS9ybWFwLmM6MjQ2MTpcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcdTAwMjZwdm13KSkge1xubW0vcm1hcC5jLTI0NjItXHRcdC8qIFBNRC1tYXBwZWQgVEhQIG1pZ3JhdGlvbiBlbnRyeSAqL1xuLS1cbm1tL3JtYXAuYy0yNDc2LVx0XHRcdFx0ZmxhZ3MgXHUwMDI2PSB+VFRVX1NQTElUX0hVR0VfUE1EO1xubW0vcm1hcC5jOjI0Nzc6XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI0NzgtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS9ybWFwLmMtMjQ5My1cdFx0XHRcdHJldCA9IGZhbHNlO1xubW0vcm1hcC5jOjI0OTQ6XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI0OTUtXHRcdFx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmMtMjU0OS1cdFx0XHRcdGlmICghaHVnZXRsYl92bWFfdHJ5bG9ja193cml0ZSh2bWEpKSB7XG5tbS9ybWFwLmM6MjU1MDpcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNTUxLVx0XHRcdFx0XHRyZXQgPSBmYWxzZTtcbi0tXG5tbS9ybWFwLmMtMjU2My1cdFx0XHRcdFx0ICovXG5tbS9ybWFwLmM6MjU2NDpcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNTY1LVx0XHRcdFx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmMtMjY1MC1cdFx0XHRcdHJldCA9IGZhbHNlO1xubW0vcm1hcC5jOjI2NTE6XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI2NTItXHRcdFx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmMtMjY2MS1cdFx0XHRcdFx0cmV0ID0gZmFsc2U7XG5tbS9ybWFwLmM6MjY2MjpcdFx0XHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbm1tL3JtYXAuYy0yNjYzLVx0XHRcdFx0XHRicmVhaztcbi0tXG5tbS9ybWFwLmMtMjY2OC1cdFx0XHRcdHJldCA9IGZhbHNlO1xubW0vcm1hcC5jOjI2Njk6XHRcdFx0XHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFx1MDAyNnB2bXcpO1xubW0vcm1hcC5jLTI2NzAtXHRcdFx0XHRicmVhaztcbi0tXG5tbS92bXNjYW4uYz00MTM0PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDE4MC0gKi9cbm1tL3Ztc2Nhbi5jOjQxODE6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDE4Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDUzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVk1BIFdhbGsgRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgd2UmIzM5O3JlIGhhbmRsaW5nIGRldmljZSBwcml2YXRlIG1lbW9yeSBtaWdyYXRpb24gYW5kIHVubWFwcGluZywgYW5kIGl0IGxvb2tzIGxpa2UgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGJlaW5nIHVzZWQgYWNyb3NzIHNldmVyYWwga2V5IGFyZWFzOiBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYHRyeV90b191bm1hcF9vbmVgLCBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLCBgZGFtb25fZm9saW9feW91bmdfb25lYCwgYW5kIGV2ZW4gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBmdW5jdGlvbnMgbW9zdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBpdHNlbGYuCgpHaXZlbiB0aGUgY29udGV4dCBvZiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgYW5kIGl0cyBtYW5pcHVsYXRpb24sIGJvdGggYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgYXBwZWFyIHRvIGJlIHN0cm9uZyBjYW5kaWRhdGVzIGZvciBkZWVwZXIgaW5zcGVjdGlvbi4gVGhleSBzZWVtIGxpa2UgdGhleSYjMzk7ZCBiZSByaWdodCBhdCB0aGUgaGVhcnQgb2YgdGhpcyBwcm9ibGVtLgoKSSB0aGluayBJJiMzOTtsbCBzdGFydCB3aXRoIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAsIG1haW5seSBiZWNhdXNlIGl0IHNvdW5kcyBjbG9zZXIgdG8gYWN0dWFsbHkgY29sbGVjdGluZyB0aGUgcmVsZXZhbnQgZGF0YSBmb3IgdGhlIG1pZ3JhdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBwdWxsIHVwIGBtbS9taWdyYXRlX2RldmljZS5jYCBhbmQgZGlnIGludG8gdGhhdCBmdW5jdGlvbi4gU2VlIHdoYXQgaXQmIzM5O3MgcmVhbGx5IGRvaW5nIHVuZGVyIHRoZSBob29kIHdpdGggYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9wbWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQwLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoyNDE6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjQyLVx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTQ4OD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIG1pZ3JhdGVfdm1hX3dhbGtfb3BzID0ge1xubW0vbWlncmF0ZV9kZXZpY2UuYzo0ODk6XHQucG1kX2VudHJ5XHRcdD0gbWlncmF0ZV92bWFfY29sbGVjdF9wbWQsXG5tbS9taWdyYXRlX2RldmljZS5jLTQ5MC1cdC5wdGVfaG9sZVx0XHQ9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwODYKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBWTUEgTWlncmF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIEkga25vdyB0aGF0IGZ1bmN0aW9uJiMzOTtzIGNydWNpYWwgZm9yIHRoZSBwYWdlIG1pZ3JhdGlvbiBwcm9jZXNzLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGRvZXMgaXQgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlPyBSaWdodCwgdGhlIGNvZGUmIzM5O3MgY2FsbGluZyBpdCB0aHJvdWdoIGB3YWxrX3BhZ2VfcmFuZ2VgIHdpdGhpbiBgbWlncmF0ZV92bWFfc2V0dXBgLiBUaGF04oCZcyBteSBrZXkgZW50cnkgcG9pbnQuIFRvIGZ1bGx5IGdyYXNwIHRoaXMsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gVGltZSB0byBjaGVjayBgbWlncmF0ZV92bWFfc2V0dXBgLiBJIG5lZWQgdG8gcmV2aWV3IGl0cyBsb2dpYyB0byBzZWUgaG93IGl0IHNldHMgdGhlIHN0YWdlIGZvciB0aGUgUE1EIGNvbGxlY3Rpb24sIGFuZCB0aGUgY29uZGl0aW9ucyBpbiB3aGljaCBpdCBpbnZva2VzIHRoZSBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyBgbWlncmF0ZV92bWFfc2V0dXBgIHdpbGwgaWxsdW1pbmF0ZSBob3cgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpcyBiZWluZyB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9MjY0PXVzZSBoYXJkd2FyZSBETUEgb3IgZGV2aWNlIHNwZWNpZmljIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIHRvIG1pZ3JhdGUgZGF0YS5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDoyNjU6VGhlIG1pZ3JhdGVfdm1hX3NldHVwKCksIG1pZ3JhdGVfdm1hX3BhZ2VzKCksIGFuZCBtaWdyYXRlX3ZtYV9maW5hbGl6ZSgpXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjY2LWZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gbWFrZSBkcml2ZXJzIGVhc2llciB0byB3cml0ZSBhbmQgdG8gY2VudHJhbGl6ZSBjb21tb25cbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q9Mjk3PWJldHdlZW4gZGV2aWNlIGRyaXZlciBzcGVjaWZpYyBjb2RlIGFuZCBzaGFyZWQgY29tbW9uIGNvZGU6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMS0gICBUaGUgZGV2aWNlIGRyaXZlciBoYXMgdG8gcGFzcyBhIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAgdG9cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDI6ICAgbWlncmF0ZV92bWFfc2V0dXAoKSBzbyB0aGUgbW1hcF9yZWFkX2xvY2soKSBvciBtbWFwX3dyaXRlX2xvY2soKSBuZWVkcyB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMy0gICBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIG1pZ3JhdGlvbi5cbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDQtXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA1OjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA2LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwNy0gICBUaGUgZGV2aWNlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgYGBzdHJ1Y3QgbWlncmF0ZV92bWFgYCBmaWVsZHMgYW5kIHBhc3Nlc1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwODogICB0aGUgcG9pbnRlciB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGUgYGBhcmdzLVx1MDAzZWZsYWdzYGAgZmllbGQgaXMgdXNlZCB0b1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwOS0gICBmaWx0ZXIgd2hpY2ggc291cmNlIHBhZ2VzIHNob3VsZCBiZSBtaWdyYXRlZC4gRm9yIGV4YW1wbGUsIHNldHRpbmdcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE3LVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMxODogICBPbmUgb2YgdGhlIGZpcnN0IHN0ZXBzIG1pZ3JhdGVfdm1hX3NldHVwKCkgZG9lcyBpcyB0byBpbnZhbGlkYXRlIG90aGVyXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE5LSAgIGRldmljZSYjMzk7cyBNTVVzIHdpdGggdGhlIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoKClgYCBhbmRcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI0LSAgIGBgTU1VX05PVElGWV9NSUdSQVRFYGAgYW5kIHRoZSBgYG93bmVyYGAgZmllbGQgc2V0IHRvXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzI1OiAgIHRoZSBgYGFyZ3MtXHUwMDNlcGdtYXBfb3duZXJgYCBmaWVsZCBwYXNzZWQgdG8gbWlncmF0ZV92bWFfc2V0dXAoKS4gVGhpc1xuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyNi0gICBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gc2tpcCB0aGUgaW52YWxpZGF0aW9uIGNhbGxiYWNrIGFuZCBvbmx5XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMzNy0gICBpbnNlcnRlZCBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgUFRFLlxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMzODogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIGFsc28gY2xlYXJzIHRoZSBgYGFyZ3MtXHUwMDNlZHN0YGAgYXJyYXkuXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM5LVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q9MjEyPUhNTSDliIfmjaLliLDnm7TmjqXkvb/nlKggc3RydWN0IHBhZ2Ug55So5LqO6K6+5aSH5YaF5a2Y77yM6L+Z5L2/5b6X5aSn5aSa5pWw5YaF5qC45Luj56CB6Lev5b6E5LiN55+l6YGT5beu5byC44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMTgt55Sx5LqOIENQVSDml6Dms5Xnm7TmjqXorr/pl67orr7lpIflhoXlrZjvvIzlm6DmraTorr7lpIfpqbHliqjnqIvluo/lv4Xpobvkvb/nlKjnoazku7YgRE1BIOaIluiuvuWkh+eJueWumueahOWKoOi9vS/lrZhcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjE5OuWCqOaMh+S7pOadpei/geenu+aVsOaNruOAgm1pZ3JhdGVfdm1hX3NldHVwKCnjgIFtaWdyYXRlX3ZtYV9wYWdlcygpIOWSjFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMjAtbWlncmF0ZV92bWFfZmluYWxpemUoKSDlh73mlbDml6jlnKjkvb/pqbHliqjnqIvluo/mm7TmmJPkuo7nvJblhpnlubbpm4bkuK3ot6jpqbHliqjnqIvluo/nmoTpgJrnlKjku6PnoIHjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTI0Mz1kZXZtX21lbXVubWFwX3BhZ2VzKCkg5ZKMIGRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKCkg5b2T6LWE5rqQ5Y+v5Lul57uR5a6a5YiwIGBgc3RydWN0IGRldmljZWBgLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQ5LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTA6ICAg6K6+5aSH6amx5Yqo56iL5bqP5b+F6aG75bCGIGBgc3RydWN0IHZtX2FyZWFfc3RydWN0YGAg5Lyg6YCS57uZbWlncmF0ZV92bWFfc2V0dXAoKe+8jFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTEtICAg5Zug5q2k6ZyA6KaB5Zyo6L+B56e75pyf6Ze05L+d55WZIG1tYXBfcmVhZF9sb2NrKCkg5oiWIG1tYXBfd3JpdGVfbG9jaygp44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Mi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUzOjIuIGBgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKWBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1NC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU1LSAgIOiuvuWkh+mpseWKqOWIneWni+WMluS6hiBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIOeahOWtl+aute+8jOW5tuWwhuivpeaMh+mSiOS8oOmAkue7mVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNTY6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeOAgmBgYXJncy1cdTAwM2VmbGFnc2BgIOWtl+auteaYr+eUqOadpei/h+a7pOWTquS6m+a6kOmhtemdouW6lOivpeiiq+i/geenu+OAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTctICAg5L6L5aaC77yM6K6+572uIGBgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTWBgIOWwhuWPqui/geenu+ezu+e7n+WGheWtmO+8jOiuvue9rlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjYyLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjM6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeaJgOWBmueahOesrOS4gOatpeaYr+eUqCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KClgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjQtICAg5ZKMIGBgbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKClgYCDosIPnlKjmnaXpgY3ljoborr7lpIflkajlm7TnmoTpobXooajvvIzkvb9cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Ny0gICDlhbYgYGBldmVudGBgIOWtl+auteiuvue9ruS4uk1NVV9OT1RJRllfTUlHUkFURe+8jCBgYG93bmVyYGAg5a2X5q616K6+572u5Li65Lyg6YCS57uZXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI2ODogICBtaWdyYXRlX3ZtYV9zZXR1cCgp55qEIGBgYXJncy1cdTAwM2VwZ21hcF9vd25lcmBgIOWtl+auteOAgui/meWFgeiuuOiuvuWkh+mpseWKqOi3s+i/h+aXoFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjktICAg5pWI5YyW5Zue6LCD77yM5Y+q5peg5pWI5YyW6YKj5Lqb5a6e6ZmF5q2j5Zyo6L+B56e755qE6K6+5aSH56eB5pyJTU1V5pig5bCE44CC6L+Z5LiA54K55bCG5Zyo5LiL5LiA6IqC6K+m57uG6Kej6YeK44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzUtICAgYGBsb2NrX3BhZ2UoKWBg6ZSB5a6a77yM5LiOTFJV6ZqU56a777yI5aaC5p6c57O757uf5YaF5a2Y5ZKM6K6+5aSH56eB5pyJ6aG15LiN5ZyoTFJV5LiK77yJ77yM5LuO6L+bXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI3NjogICDnqIvkuK3lj5bmtojmmKDlsITvvIzlubbmj5LlhaXkuIDkuKrnibnmrornmoTov4Hnp7tQVEXmnaXku6Pmm7/ljp/mnaXnmoRQVEXjgIIgbWlncmF0ZV92bWFfc2V0dXAoKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNzctICAg6L+Y5riF6Zmk5LqGIGBgYXJncy1cdTAwM2Vkc3RgYCDmlbDnu4TjgIJcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTUxMz1zdGF0aWMgaW50IF9fa3ZtcHBjX3N2bV9wYWdlX291dChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUzOC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NTM5Olx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlnKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNTQwLVx0aWYgKHJldClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jPTc0MD1zdGF0aWMgaW50IGt2bXBwY19zdm1fcGFnZV9pbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2MC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmM6NzYxOlx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlnKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3V2bWVtLmMtNzYyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTM5Mz1zdm1fbWlncmF0ZV92bWFfdG9fdnJhbShzdHJ1Y3Qga2ZkX25vZGUgKm5vZGUsIHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMC1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM6NDMxOlx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNm1pZ3JhdGUpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy00MzItXHRpZiAocikge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmM9NjkyPXN2bV9taWdyYXRlX3ZtYV90b19yYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzMtXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjczNDpcdHIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZtaWdyYXRlKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNzM1LVx0aWYgKHIpIHtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MzUxNT1zdm1fcmFuZ2VfYmVzdF9wcmVmZXRjaF9sb2NhdGlvbihzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODItICogYW5kIHJlc3RvcmUgd29yazpcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTgzOiAqIDEuIG1pZ3JhdGVfdm1hX3NldHVwIGludmFsaWRhdGUgcGFnZXMsIE1NVSBub3RpZmllciBjYWxsYmFjayBzdm1fcmFuZ2VfZXZpY3RcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNTg0LSAqICAgIHN0b3BzIGFsbCBxdWV1ZXMsIHNjaGVkdWxlIHJlc3RvcmUgd29ya1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTUxNz1pbnQgZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg0LVxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6NTg1Olx0ZXJyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy01ODYtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jPTExMTM9c3RhdGljIGludCBfX2RybV9wYWdlbWFwX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdmFzLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNjYtXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYzoxMTY3Olx0ZXJyID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2bWlncmF0ZSk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYy0xMTY4LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz0xODM9c3RhdGljIHZtX2ZhdWx0X3Qgbm91dmVhdV9kbWVtX21pZ3JhdGVfdG9fcmFtKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTIzNS1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6MjM2Olx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpIFx1MDAzYyAwKVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM3LVx0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jPTgyMj1ub3V2ZWF1X2RtZW1fbWlncmF0ZV92bWEoc3RydWN0IG5vdXZlYXVfZHJtICpkcm0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODcxLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM6ODcyOlx0XHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKTtcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTg3My1cdFx0aWYgKHJldClcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaC0xNjQtXHQgKiBUaGUgc3JjIGFycmF5IG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIgYWZ0ZXJcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE2NTpcdCAqIG1pZ3JhdGVfdm1hX3NldHVwKCksIGFuZCBtdXN0IG5vdCBjaGFuZ2UgdGhlIGRzdCBhcnJheSBhZnRlclxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY2LVx0ICogbWlncmF0ZV92bWFfcGFnZXMoKSByZXR1cm5zLlxuLS1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5Mi1cbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oOjE5MzppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKTtcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5NC12b2lkIG1pZ3JhdGVfdm1hX3BhZ2VzKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSk7XG4tLVxubGliL3Rlc3RfaG1tLmM9MTEyMD1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4tLVxubGliL3Rlc3RfaG1tLmMtMTE2NC1cbmxpYi90ZXN0X2htbS5jOjExNjU6XHRcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFx1MDAyNmFyZ3MpO1xubGliL3Rlc3RfaG1tLmMtMTE2Ni1cdFx0aWYgKHJldClcbi0tXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcbi0tXG5saWIvdGVzdF9obW0uYy0xMjQyLVx0XHRcdFx0TUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EO1xubGliL3Rlc3RfaG1tLmM6MTI0MzpcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG5saWIvdGVzdF9obW0uYy0xMjQ0LVx0XHRpZiAocmV0KVxuLS1cbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTcwNS1cdC8qXG5saWIvdGVzdF9obW0uYzoxNzA2Olx0ICogSW4gcHJhY3RpY2UgbWlncmF0ZV92bWFfc2V0dXAoKSBzaG91bGQgbmV2ZXIgZmFpbCB1bmxlc3MgdGhlXG5saWIvdGVzdF9obW0uYy0xNzA3LVx0ICogdGVzdCBpcyB3cm9uZyBhcyBpdCBqdXN0IHRlc3RzIHNvbWUgc3RhdGljIFZNQSBwcm9wZXJ0aWVzLlxubGliL3Rlc3RfaG1tLmMtMTcwOC1cdCAqL1xubGliL3Rlc3RfaG1tLmM6MTcwOTpcdGlmIChtaWdyYXRlX3ZtYV9zZXR1cChcdTAwMjZhcmdzKSkge1xubGliL3Rlc3RfaG1tLmMtMTcxMC1cdFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9NjU5PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX3VubWFwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTY2NS0vKipcbm1tL21pZ3JhdGVfZGV2aWNlLmM6NjY2OiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgLSBwcmVwYXJlIHRvIG1pZ3JhdGUgYSByYW5nZSBvZiBtZW1vcnlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY3LSAqIEBhcmdzOiBjb250YWlucyB0aGUgdm1hLCBzdGFydCwgYW5kIHBmbnMgYXJyYXlzIGZvciB0aGUgbWlncmF0aW9uXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MjgtICovXG5tbS9taWdyYXRlX2RldmljZS5jOjcyOTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKVxubW0vbWlncmF0ZV9kZXZpY2UuYy03MzAte1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzY4LX1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6NzY5OkVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xubW0vbWlncmF0ZV9kZXZpY2UuYy03NzAtXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzU1PXN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfZGV2aWNlX3Bmbl9sb2NrKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3Ni0gKlxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzc3OiAqIG1pZ3JhdGVfdm1hX3NldHVwKCkgaXMgc2ltaWxhciBpbiBjb25jZXB0IHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkgZXhjZXB0IHRoYXRcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3OC0gKiBpbnN0ZWFkIG9mIGxvb2tpbmcgdXAgcGFnZXMgYmFzZWQgb24gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzIGEgcmFuZ2Ugb2Zcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzODQtICpcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM4NTogKiBMaWtlIG1pZ3JhdGVfdm1hX3NldHVwKCkgdGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgYSByZWZlcmVuY2UgYW5kIGxvY2sgYW55XG5tbS9taWdyYXRlX2RldmljZS5jLTEzODYtICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbiYjMzk7dCBmcmVlIGJlZm9yZSB1bm1hcHBpbmcgdGhlbS4gRHJpdmVycyBtYXkgdGhlblxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTQ1NT1pbnQgbWlncmF0ZV9kZXZpY2VfY29oZXJlbnRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjctXHQgKiB0aGUgc291cmNlIGZvbGlvLiBTbyBjYWxsIG1pZ3JhdGVfdm1hX3VubWFwKCkgZGlyZWN0bHkgdG8gdW5tYXAgdGhlXG5tbS9taWdyYXRlX2RldmljZS5jOjE0Njg6XHQgKiBmb2xpbyBhcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIHdpbGwgZmFpbCBpZiBhcmdzLnZtYSA9PSBOVUxMLlxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNDY5LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTk1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRGV2aWNlIE1lbW9yeSBNaWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IGRldmljZSBtZW1vcnkgbWlncmF0aW9uIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBsaWIvdGVzdF9obW0uY2AgdGVzdGluZyBmcmFtZXdvcmsuIEkgc2VlIHRoYXQgdGhlIGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYCBhbmQgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIGZ1bmN0aW9ucyBhcmUgZW1wbG95aW5nIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIFRoYXQgbWFrZXMgc2Vuc2UuIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIGluIHR1cm4sIGlzIGNhbGxpbmcgYHdhbGtfcGFnZV9yYW5nZWAgd2l0aCBgbWlncmF0ZV92bWFfd2Fsa19vcHNgLCB3aGljaCB0aGVuIHV0aWxpemVzIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIEhvbGQgb24gYSBzZWNvbmQuLi4gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpc24mIzM5O3QgdXNpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhhdCYjMzk7cyBhIGJpdCB1bmV4cGVjdGVkLiBJIHdhcyBleHBlY3RpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCwgZXNwZWNpYWxseSBpbiB0aGlzIGFyZWEgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5LgoKVGhpcyByYWlzZXMgYSBrZXkgcXVlc3Rpb24uIFdoZXJlICppcyogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBtYW5hZ2VtZW50PyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgYG1tL21pZ3JhdGVfZGV2aWNlLmNgIGFnYWluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgbWFwcGluZyBhbmQgd2Fsa2luZyBzdHJhdGVneS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZV92bWFfbWFwcGVkX3dhbGsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlX2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmM9MTM2PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTE5Ni1cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTk3Olx0XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTk4LVx0XHRcdC5wdGwgPSBwdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NzM2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgTWlncmF0aW9uIG9mIEh1Z2UgUE1EcyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYC4gSW1tZWRpYXRlbHksIGl0IHNlZW1zIHRvIGJlIGxlYW5pbmcgb24gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhhdCYjMzk7cyBub3QgZW50aXJlbHkgc3VycHJpc2luZywgZ2l2ZW4gdGhlIG5lZWQgdG8gdHJhdmVyc2UgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgYW5kIGlkZW50aWZ5IHRoZSByZWxldmFudCBwYWdlcy4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4udGhpcyBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAgZnVuY3Rpb24gaXMgZGVmaW5lZCB3aXRoaW4gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLiBUaGF0IHBsYWNlcyBpdCBmaXJtbHkgaW4gdGhlIGRldmljZSBtaWdyYXRpb24gc3Vic3lzdGVtLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgYml0IG9mIGNvbnRleHQgdG8ga2VlcCBpbiBtaW5kIGZvciBob3cgdGhlc2UgaHVnZSBQTURzIGFyZSBhY3R1YWxseSBtaWdyYXRlZCAtIGlmIHRoZSBnb2FsIGlzIHRvIHNoaWZ0IHRoZXNlIHRvIGEgZGlmZmVyZW50IGRldmljZSwgdGhlbiB0aGF0IGlzIGFuIGltcG9ydGFudCBwb2ludCBvZiB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21pZ3JhdGVfZGV2aWNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4MDpcdFx0fSBlbHNlIHtcbiAxODE6XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiAxODI6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gMTgzOlx0XHR9XG4gMTg0Olx0XG4gMTg1Olx0XHRmb2xpb19nZXQoZm9saW8pO1xuIDE4NjpcdFx0aWYgKGZvbGlvICE9IGZhdWx0X2ZvbGlvIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghZm9saW9fdHJ5bG9jayhmb2xpbykpKSB7XG4gMTg3Olx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gMTg4Olx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gMTg5Olx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG4gMTkwOlx0XHR9XG4gMTkxOlx0XG4gMTkyOlx0XHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjZcbiAxOTM6XHRcdFx0KG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORCkgXHUwMDI2XHUwMDI2XG4gMTk0Olx0XHRcdChJU19BTElHTkVEKHN0YXJ0LCBIUEFHRV9QTURfU0laRSkgXHUwMDI2XHUwMDI2XG4gMTk1Olx0XHRcdCBJU19BTElHTkVEKGVuZCwgSFBBR0VfUE1EX1NJWkUpKSkge1xuIDE5NjpcdFxuIDE5NzpcdFx0XHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcbiAxOTg6XHRcdFx0XHQucHRsID0gcHRsLFxuIDE5OTpcdFx0XHRcdC5hZGRyZXNzID0gc3RhcnQsXG4gMjAwOlx0XHRcdFx0LnBtZCA9IHBtZHAsXG4gMjAxOlx0XHRcdFx0LnZtYSA9IHdhbGstXHUwMDNldm1hLFxuIDIwMjpcdFx0XHR9O1xuIDIwMzpcdFxuIDIwNDpcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcbiAyMDU6XHRcbiAyMDY6XHRcdFx0bWlncmF0ZS1cdTAwM2VzcmNbbWlncmF0ZS1cdTAwM2VucGFnZXNdID0gbWlncmF0ZV9wZm4ocGZuKSB8IHdyaXRlXG4gMjA3Olx0XHRcdFx0XHRcdFx0fCBNSUdSQVRFX1BGTl9NSUdSQVRFXG4gMjA4Olx0XHRcdFx0XHRcdFx0fCBNSUdSQVRFX1BGTl9DT01QT1VORDtcbiAyMDk6XHRcdFx0bWlncmF0ZS1cdTAwM2Vkc3RbbWlncmF0ZS1cdTAwM2VucGFnZXMmIzQzOyYjNDM7XSA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NDgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudC4KCioqQ2xhcmlmeWluZyB0aGUgUm9sZSBvZiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdhcyAqY2FsbGVkKiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb2RlIGJsb2NrLiBCdXQgaXQgYXBwZWFycyBJJiMzOTttIG1pc3Rha2VuLiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGJlaW5nICppbml0aWFsaXplZCogYW5kIHRoZW4gKnBhc3NlZCogYXMgYW4gYXJndW1lbnQgdG8gYHNldF9wbWRfbWlncmF0aW9uX2VudHJ5YC4gVGhhdCYjMzk7cyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIEkgbmVlZCB0byByZXZpZXcgaG93IGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgYWN0dWFsbHkgKnVzZXMqIHRoaXMgd2FsayBzdHJ1Y3R1cmUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCB3aGF0IGltcGFjdCBpdCBoYXMuIFRoaXMgaXMgd2hlcmUgSSBjYW4gZWFzaWx5IG1pc3Mgc29tZXRoaW5nLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgSSYjMzk7bSBjb3JyZWN0IGluIHRoYXQgYXNzZXNzbWVudCBvZiB0aGlzIGNvZGUuIEkgbmVlZCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgcm9sZSBpbiB0aGlzIG1lbW9yeSBtaWdyYXRpb24gcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyB0aGUgYXJndW1lbnRzIGluIGZ1bmN0aW9uIGNhbGxzIGlzIHBhcmFtb3VudCBpbiBrZXJuZWwgd29yaywgc28gSSYjMzk7bSBnbGFkIEkgY2F1Z2h0IHRoYXQuIFRoYXQmIzM5O3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjEwOlx0XHRcdG1pZ3JhdGUtXHUwMDNlY3BhZ2VzJiM0MzsmIzQzOztcbiAyMTE6XHRcdFx0cmV0ID0gc2V0X3BtZF9taWdyYXRpb25fZW50cnkoXHUwMDI2cHZtdywgZm9saW9fcGFnZShmb2xpbywgMCkpO1xuIDIxMjpcdFx0XHRpZiAocmV0KSB7XG4gMjEzOlx0XHRcdFx0bWlncmF0ZS1cdTAwM2VucGFnZXMtLTtcbiAyMTQ6XHRcdFx0XHRtaWdyYXRlLVx1MDAzZWNwYWdlcy0tO1xuIDIxNTpcdFx0XHRcdG1pZ3JhdGUtXHUwMDNlc3JjW21pZ3JhdGUtXHUwMDNlbnBhZ2VzXSA9IDA7XG4gMjE2Olx0XHRcdFx0bWlncmF0ZS1cdTAwM2Vkc3RbbWlncmF0ZS1cdTAwM2VucGFnZXNdID0gMDtcbiAyMTc6XHRcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIDIxODpcdFx0XHR9XG4gMjE5Olx0XHRcdG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCAmIzQzOyBQQUdFX1NJWkUsIGVuZCwgd2Fsayk7XG4gMjIwOlx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gMjIxOlx0XHRcdHJldHVybiAwO1xuIDIyMjpcdFx0fVxuIDIyMzpcdFxuIDIyNDpcdGZhbGxiYWNrOlxuIDIyNTpcdFx0c3Bpbl91bmxvY2socHRsKTtcbiAyMjY6XHRcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXG4gMjI3Olx0XHRcdGdvdG8gZG9uZTtcbiAyMjg6XHRcdHJldCA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcbiAyMjk6XHRcdGlmIChmYXVsdF9mb2xpbyAhPSBmb2xpbylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwODIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIE1pZ3JhdGlvbiBDb250ZXh0KioKCk9rYXksIHNvIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgZGVmaW5pdGVseSB0YWtlcyBgcHZtd2AsIHRoYXQmIzM5O3MgY2xlYXIuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgZWxzZSBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHVzZWQgaW4gdGhlIGNvbnRleHQgb2YgZGV2aWNlIHByaXZhdGUgbWVtb3J5LiBSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBpbiBgbW0vcm1hcC5jYCwgdGhlcmUmIzM5O3MgYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLiBUaG9zZSBhcmUgY2FsbGVkIGR1cmluZyBwYWdlIG1pZ3JhdGlvbiBhbmQgdW5tYXBwaW5nLiBUaGUgY3VycmVudCBwYXRjaCBzcGVjaWZpY2FsbHkgaGFuZGxlcyB0aGUgc2l0dWF0aW9uIHdoZW4gYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKWAgZXZhbHVhdGVzIHRvIHRydWUuCgpUaGF0JiMzOTtzIHRoZSBjb3JlLiBJdCYjMzk7cyB3aGVuIHRoZSBQTUQgaXRzZWxmIGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnkuIFJpZ2h0LCBzbyB0aGlzIHNwZWNpZmljYWxseSByZWxhdGVzIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMsIG9yIFRIUHMsIGJlaW5nIG1pZ3JhdGVkIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeS4gQWhhISBUaGF0JiMzOTtzIGl0LCB0aGVuOiB0aGlzIG5lY2Vzc2l0YXRlcyB0aGUgdXNlIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIGtuZXcgdGhlcmUgd2FzIHNvbWUgZGVwZW5kZW5jeSB0aGVyZSwgYW5kIHRoYXQgY29uZmlybXMgaXQuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucy4uLiBJJiMzOTtsbCBkaXZlIGludG8gYHRyeV90b19taWdyYXRlX29uZWAgaW4gYG1tL3JtYXAuY2AgYW5kIG1ha2Ugc3VyZSBpdCBiZWhhdmVzIGV4YWN0bHkgYXMgSSBleHBlY3QuIE5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgYWxsIGFsaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RyeV90b19taWdyYXRlX29uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMTk0LVx0XHQgKiBJbiBjYXNlIHdlIGNhbm5vdCBjbGVhciBQYWdlQW5vbkV4Y2x1c2l2ZSgpLCBzcGxpdCB0aGUgUE1EXG5tbS9odWdlX21lbW9yeS5jOjMxOTU6XHRcdCAqIG9ubHkgYW5kIGxldCB0cnlfdG9fbWlncmF0ZV9vbmUoKSBmYWlsIGxhdGVyLlxubW0vaHVnZV9tZW1vcnkuYy0zMTk2LVx0XHQgKlxuLS1cbm1tL3JtYXAuYz0yMzk0PXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxuLS1cbm1tL3JtYXAuYy0yNDE0LSAqL1xubW0vcm1hcC5jOjI0MTU6c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTI0MTYtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTI3Mzk9dm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncylcbi0tXG5tbS9ybWFwLmMtMjc0MS1cdHN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7XG5tbS9ybWFwLmM6Mjc0MjpcdFx0LnJtYXBfb25lID0gdHJ5X3RvX21pZ3JhdGVfb25lLFxubW0vcm1hcC5jLTI3NDMtXHRcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODkwMgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDQ3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhZ2UgTWlncmF0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgcGFnZSBtaWdyYXRpb24gY29kZS4gSXQgbG9va3MgbGlrZSBgdHJ5X3RvX21pZ3JhdGVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBwbGFjZXMgbGlrZSBgbWlncmF0ZV9wYWdlc2Ag4oCTIG1ha2VzIHNlbnNlLiBOb3csIGBsaWIvdGVzdF9obW0uY2Agc2VlbXMgdG8gYmUgcmVsZXZhbnQsIHNwZWNpZmljYWxseSBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAsIHdoaWNoIHVzZXMgYG1pZ3JhdGVfdm1hX3NldHVwYC4gSSBpbml0aWFsbHkgdGhvdWdodCBgbWlncmF0ZV92bWFfc2V0dXBgIG1pZ2h0IGJlIHdoZXJlIGB0cnlfdG9fbWlncmF0ZWAgaXMgdXNlZCBkaXJlY3RseSwgYnV0IG5vLCBpdCBjYWxscyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGluc3RlYWQuCgpCdXQgaG9sZCBvbiwgYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGB0cnlfdG9fdW5tYXBfb25lYCB1dGlsaXplIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIE5vdywgdGhlIGltcG9ydGFudCBiaXQgaXMgd2hlbiB3ZSYjMzk7cmUgbW92aW5nIGEgcGFnZSBiYWNrICpmcm9tKiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgdG8gc3lzdGVtIG1lbW9yeS4gVGhhdCYjMzk7cyB3aGVuIGBtaWdyYXRlX3ZtYV9zZXR1cGAgY29tZXMgaW50byBwbGF5LCBmb3IgZWl0aGVyIGRpcmVjdGlvbiBhY3R1YWxseS4gCgpUaGUgcHVycG9zZSBvZiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHRvIGZpbmQgYWxsIHRoZSBtYXBwaW5ncyBvZiBhIGdpdmVuIHBhZ2UuIElmIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSBUSFAgdGhhdCByZXNpZGVzIGluIGRldmljZSBwcml2YXRlIG1lbW9yeSwgaXRzIFBNRCB3aWxsIGJlIGEgZGV2aWNlLXByaXZhdGUgZW50cnkuIElmIHdlIHJ1biBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIG9uIHRoYXQgcGFnZSwgaXQgd2lsbCBkZWZpbml0ZWx5IGVuY291bnRlciB0aGF0IFBNRC4gU28gd2hvJiMzOTtzIGNhbGxpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBvbiBhIHBhZ2UgdGhhdCBpcyByZXNpZGluZyBpbiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnk/CgpUaGUga2V5IGZ1bmN0aW9ucyBhcmU6IGB0cnlfdG9fbWlncmF0ZV9vbmVgLCBgdHJ5X3RvX3VubWFwX29uZWAsIGBmb2xpb19yZWZlcmVuY2VkX29uZWAsIGBwYWdlX2lkbGVfY2xlYXJfcHRlX3JlZnNfb25lYCwgYGRhbW9uX2ZvbGlvX3lvdW5nX29uZWAsIGBkYW1vbl9mb2xpb19ta29sZF9vbmVgLCBgcmVtb3ZlX21pZ3JhdGlvbl9wdGVgIGFuZCBhbHNvIGBwYWdlX21hcHBlZF9pbl92bWFgLiBFc3NlbnRpYWxseSwgKmFueSogb3BlcmF0aW9uIHRoYXQgd2Fsa3MgdGhlIHBhZ2UgdGFibGVzIGFuZCBlbmNvdW50ZXJzIGEgZGV2aWNlIHByaXZhdGUgVEhQIHdpbGwgdHJpZ2dlciB0aGlzLgoKRGlyZWN0bHkgZnV6emluZyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGl0c2VsZiBpcyBvZmYgdGhlIHRhYmxlOyBpdCYjMzk7cyBpbnRlcm5hbC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0ICp0cmlnZ2VyKiB0aGlzIGNvZGUgcGF0aC4gYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgLCBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAsIGFuZCBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgIGluIGBsaWIvdGVzdF9obW0uY2AgbG9vayBsaWtlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIHNpbmNlIHRoZXkgZGlyZWN0bHkgaGFuZGxlIGRldmljZSBwcml2YXRlIG1lbW9yeS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBsaWIvdGVzdF9obW0uY2AgZm9yIGFueSBleHBvcnRlZCBmdW5jdGlvbnMgb3IgaW9jdGxzLCBiZWNhdXNlIHRob3NlIGFyZSBteSBlbnRyeSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG1pcnJvcl9pb2N0bCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5OTU1CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBBIGBmaWxlX29wZXJhdGlvbnNgIENoZWNrKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBmaWxlIG9wZXJhdGlvbnMgYXJlIGhhbmRsZWQgd2l0aGluIHRoaXMgY29udGV4dC4gTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCBmb3IgYGxpYi90ZXN0X2htbS5jYC4gSSByZWNhbGwgdGhhdCBmaWxlIG9wZXJhdGlvbnMgYXJlIG9mdGVuIGRlZmluZWQgb3IgYXQgbGVhc3QgaGVhdmlseSB1dGlsaXplZCBhdCB0aGF0IGxldmVsLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBiZWluZyBpbXBsZW1lbnRlZCwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IHNwZWNpZmljIGhhbmRsaW5nIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgdGhpcyAmIzM0O3Rlc3QgSE1NJiMzNDsgaXMgZG9pbmcgd2l0aCBmaWxlcy4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBmb3IgZXhhbWluaW5nIGZpbGUgSS9PIHdpdGhpbiBhIHByb2plY3QsIGVzcGVjaWFsbHkgaWYgdGhlIGZpbGUgaW50ZXJhY3Rpb24gaXMgY2VudHJhbCB0byBhIHRlc3Qgb3IgZGVtb25zdHJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGBmaWxlX29wZXJhdGlvbnNgIGFyZSBwcmVzZW50LiBJIHdpbGwgc3RhcnQgYnkgbG9va2luZyBmb3IgYSByZWxldmFudCBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGVfb3BlcmF0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTE1ODg9c3RhdGljIGludCBkbWlycm9yX2ZvcHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTYxMC1cbmxpYi90ZXN0X2htbS5jOjE2MTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZG1pcnJvcl9mb3BzID0ge1xubGliL3Rlc3RfaG1tLmMtMTYxMi1cdC5vcGVuXHRcdD0gZG1pcnJvcl9mb3BzX29wZW4sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjkwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEhNTSBUZXN0IENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBob3cgdGhlIEhpZGRlbiBNYXJrb3YgTW9kZWwgKEhNTSkgbGlicmFyeSBpcyB0ZXN0ZWQuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHdoYXRldmVyIEkmIzM5O20gbG9va2luZyBmb3IgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIGZ1bmN0aW9uIG9yIHNldCBvZiBmdW5jdGlvbnMsIGFuZCB0aGUgdGVzdCBzdWl0ZSBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHRzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgbGliL3Rlc3RfaG1tLmNgIGZpbGUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgSE1NcywgaXQmIzM5O3MgbGlrZWx5IGEgd2VsbC1zdHJ1Y3R1cmVkIHRlc3QgZmlsZS4gSSYjMzk7bGwganVtcCByaWdodCB0byBsaW5lIDE2MTEuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgbGluZSB0byBiZSBwYXJ0IG9mIGEgZnVuY3Rpb24gb3IgdGVzdCBjYXNlIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gdGhlIHRvcGljIEkmIzM5O20gZm9jdXNpbmcgb24uIEhvcGVmdWxseSwgdGhpcyBzcGVjaWZpYyBsaW5lIHdpbGwgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGFuYWx5emUgdGhlIHRlc3Rpbmcgc3RyYXRlZ3kgZW1wbG95ZWQgYW5kIHJldmVhbCBzb21lIGtleSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBtYXliZSByZWxhdGVkIHRvIG1vZGVsIGluaXRpYWxpemF0aW9uLCB0cmFpbmluZywgb3IgZGVjb2RpbmcuIExldCYjMzk7cyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYwMDpcdFx0XHRyZXQgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIGFkZHIsIHBhZ2UpO1xuMTYwMTpcdFx0XHRpZiAocmV0KSB7XG4xNjAyOlx0XHRcdFx0X19mcmVlX3BhZ2UocGFnZSk7XG4xNjAzOlx0XHRcdFx0cmV0dXJuIHJldDtcbjE2MDQ6XHRcdFx0fVxuMTYwNTpcdFx0XHRwdXRfcGFnZShwYWdlKTtcbjE2MDY6XHRcdH1cbjE2MDc6XHRcbjE2MDg6XHRcdHJldHVybiAwO1xuMTYwOTpcdH1cbjE2MTA6XHRcbjE2MTE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkbWlycm9yX2ZvcHMgPSB7XG4xNjEyOlx0XHQub3Blblx0XHQ9IGRtaXJyb3JfZm9wc19vcGVuLFxuMTYxMzpcdFx0LnJlbGVhc2VcdD0gZG1pcnJvcl9mb3BzX3JlbGVhc2UsXG4xNjE0Olx0XHQubW1hcFx0XHQ9IGRtaXJyb3JfZm9wc19tbWFwLFxuMTYxNTpcdFx0LnVubG9ja2VkX2lvY3RsID0gZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsLFxuMTYxNjpcdFx0Lmxsc2Vla1x0XHQ9IGRlZmF1bHRfbGxzZWVrLFxuMTYxNzpcdFx0Lm93bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4xNjE4Olx0fTtcbjE2MTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4NDUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIGludG8gdGhlIGlvY3RsIEhhbmRsZXIqKgoKUmlnaHQsIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgLi4uIHRoYXQmIzM5O3Mgb3VyIGlvY3RsIGhhbmRsZXIsIGlzbiYjMzk7dCBpdD8gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIHRoZSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4uLiBpdCYjMzk7cyB0aGUgaGVhcnQgb2YgaG93IHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgZGV2aWNlIGRyaXZlci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBoYW5kbGVyIHNwZWNpZmljYWxseSB3b3JrcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGRtaXJyb3IgZmlsZXN5c3RlbS4gV2hhdCBzcGVjaWZpYyBpb2N0bHMgZG9lcyBpdCBzdXBwb3J0PyBXaGF0IGFzc3VtcHRpb25zIGRvZXMgaXQgbWFrZSBhYm91dCB0aGUgaW5jb21pbmcgZGF0YT8gQW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgSSBzaG91bGQgYmUgb24gdGhlIGxvb2tvdXQgZm9yLCBnaXZlbiBpdHMgJiMzNDt1bmxvY2tlZCYjMzQ7IG5hdHVyZT8gR290dGEgbWFrZSBzdXJlIGl0JiMzOTtzIHRocmVhZC1zYWZlIGFuZCByb2J1c3QsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgaXRzIHJvbGUgaW4gZGF0YSBtaXJyb3JpbmcsIHdoaWNoIGlzIGluaGVyZW50bHkgc2Vuc2l0aXZlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgY29kZS4uLiBhbmQgbXkgZGVidWdnZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTE0ODE9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZpY2VfcmVtb3ZlX2NodW5rcyhzdHJ1Y3QgZG1pcnJvcl9kZXZpY2UgKm1kZXZpY2UpXG4tLVxubGliL3Rlc3RfaG1tLmMtMTUxMi1cbmxpYi90ZXN0X2htbS5jOjE1MTM6c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxubGliL3Rlc3RfaG1tLmMtMTUxNC1cdFx0XHRcdFx0dW5zaWduZWQgaW50IGNvbW1hbmQsXG4tLVxubGliL3Rlc3RfaG1tLmM9MTYxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkbWlycm9yX2ZvcHMgPSB7XG4tLVxubGliL3Rlc3RfaG1tLmMtMTYxNC1cdC5tbWFwXHRcdD0gZG1pcnJvcl9mb3BzX21tYXAsXG5saWIvdGVzdF9obW0uYzoxNjE1Olx0LnVubG9ja2VkX2lvY3RsID0gZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsLFxubGliL3Rlc3RfaG1tLmMtMTYxNi1cdC5sbHNlZWtcdFx0PSBkZWZhdWx0X2xsc2VlayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzNDQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIFRlc3QgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBsaWIvdGVzdF9obW0uY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAxNTEzLiBUaGF0IGxpbmUgbnVtYmVyIHN1Z2dlc3RzIGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgd2l0aGluIHRoZSBIaWRkZW4gTWFya292IE1vZGVsIChITU0pIHRlc3Rpbmcgc3VpdGUuIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIGNydWNpYWwgc2VjdGlvbiBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHNpZ25pZmljYW50IOKAkyBwZXJoYXBzIGEgc3BlY2lmaWMgdHJhbnNpdGlvbiBwcm9iYWJpbGl0eSBldmFsdWF0aW9uLCBhIHZlcmlmaWNhdGlvbiBvZiB0aGUgZm9yd2FyZCBhbGdvcml0aG0sIG9yIG1heWJlIGV2ZW4gYSBjb3JuZXIgY2FzZSB0ZXN0IEkmIzM5O3ZlIHNlZW4gdHJpcCB1cCB0aGlzIHR5cGUgb2YgaW1wbGVtZW50YXRpb24gYmVmb3JlLiBNeSBpbW1lZGlhdGUgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhhdCBsZXZlbCBhbmQgdG8gY29ycmVsYXRlIGl0IHdpdGggdGhlIGJyb2FkZXIgSE1NIHRlc3Rpbmcgc3RyYXRlZ3kuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb2RlJiMzOTtzIGludGVuZGVkIGJlaGF2aW9yIGF0IHRoYXQgc3BlY2lmaWMgcG9pbnQsIGluIHJlbGF0aW9uIHRvIHRoZSBvdmVyYWxsIHRlc3QgZmxvdy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0byBlc3RhYmxpc2ggY29udGV4dCBhbmQgc2VlIHdoYXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgYXJlIGluIHBsYXkuIEkgYW0gbG9va2luZyBmb3IgdGhlIGxvZ2ljIHRoYXQgdGhlIHRlc3QgaGFzIGVtcGxveWVkLCBhbmQgaG93IHJvYnVzdCB0aGF0IHRlc3QgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL3Rlc3RfaG1tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MTA6XHRcdG11dGV4X3VubG9jayhcdTAwMjZtZGV2aWNlLVx1MDAzZWRldm1lbV9sb2NrKTtcbjE1MTE6XHR9XG4xNTEyOlx0XG4xNTEzOlx0c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuMTUxNDpcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgY29tbWFuZCxcbjE1MTU6XHRcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhcmcpXG4xNTE2Olx0e1xuMTUxNzpcdFx0dm9pZCBfX3VzZXIgKnVhcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4xNTE4Olx0XHRzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIGNtZDtcbjE1MTk6XHRcdHN0cnVjdCBkbWlycm9yICpkbWlycm9yO1xuMTUyMDpcdFx0aW50IHJldDtcbjE1MjE6XHRcbjE1MjI6XHRcdGRtaXJyb3IgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbjE1MjM6XHRcdGlmICghZG1pcnJvcilcbjE1MjQ6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNTI1Olx0XG4xNTI2Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2Y21kLCB1YXJnLCBzaXplb2YoY21kKSkpXG4xNTI3Olx0XHRcdHJldHVybiAtRUZBVUxUO1xuMTUyODpcdFxuMTUyOTpcdFx0aWYgKGNtZC5hZGRyIFx1MDAyNiB+UEFHRV9NQVNLKVxuMTUzMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MzE6XHRcdGlmIChjbWQuYWRkciBcdTAwM2U9IChjbWQuYWRkciAmIzQzOyAoY21kLm5wYWdlcyBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpKVxuMTUzMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE1MzM6XHRcbjE1MzQ6XHRcdGNtZC5jcGFnZXMgPSAwO1xuMTUzNTpcdFx0Y21kLmZhdWx0cyA9IDA7XG4xNTM2Olx0XG4xNTM3Olx0XHRzd2l0Y2ggKGNvbW1hbmQpIHtcbjE1Mzg6XHRcdGNhc2UgSE1NX0RNSVJST1JfUkVBRDpcbjE1Mzk6XHRcdFx0cmV0ID0gZG1pcnJvcl9yZWFkKGRtaXJyb3IsIFx1MDAyNmNtZCk7XG4xNTQwOlx0XHRcdGJyZWFrO1xuMTU0MTpcdFxuMTU0MjpcdFx0Y2FzZSBITU1fRE1JUlJPUl9XUklURTpcbjE1NDM6XHRcdFx0cmV0ID0gZG1pcnJvcl93cml0ZShkbWlycm9yLCBcdTAwMjZjbWQpO1xuMTU0NDpcdFx0XHRicmVhaztcbjE1NDU6XHRcbjE1NDY6XHRcdGNhc2UgSE1NX0RNSVJST1JfTUlHUkFURV9UT19ERVY6XG4xNTQ3Olx0XHRcdHJldCA9IGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2UoZG1pcnJvciwgXHUwMDI2Y21kKTtcbjE1NDg6XHRcdFx0YnJlYWs7XG4xNTQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTg2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIE15IEhNTSBUZXN0aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IGJlc3QgdG8gYXBwcm9hY2ggdGVzdGluZyB0aGlzIEhNTSBpbXBsZW1lbnRhdGlvbi4gVGhlIGVudHJ5IHBvaW50IGZvciB0aGlzIHNlZW1zIHRvIGJlIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyBpdCBhbGxvd3MgdXMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgSE1NIHRocm91Z2ggaW9jdGxzLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIGtlZXAgdGhvc2Uga2V5IGZ1bmN0aW9ucyBpbiBtaW5kLCBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCB3aGljaCBoYW5kbGVzIHRoZSBpb2N0bCBjYWxscywgYW5kIGFsc28gYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgLCBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAsIGFuZCBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgLgoKSSYjMzk7bSByZWFsaXppbmcgdGhhdCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCBoZXJlLCB3aGljaCBpcyBpbnRlcmVzdGluZywgYmVjYXVzZSBpdOKAmXMgY2FsbGVkIGJ5IGJvdGggYHRyeV90b191bm1hcF9vbmVgIGFuZCBgdHJ5X3RvX21pZ3JhdGVfb25lYC4gSWYgSSBmb2N1cyBvbiBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCwgdGhlbiBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gaW50ZWxsaWdlbnRseSBmdXp6IHRoZSBpb2N0bHMgYXNzb2NpYXRlZCB3aXRoIGAvZGV2L2htbV9kbWlycm9yKmAsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJIHdhbnQuCgpIb3dldmVyLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQmIzM5O3MgYSAqdmVyeSogZ2VuZXJpYyBmdW5jdGlvbiwgYW5kIGlmIEkganVzdCBhZGQgaXQgdG8gYEZvY3VzU3ltYm9sc2AsIHN5emthbGxlciBtaWdodCBlbmQgdXAgZm9jdXNpbmcgb24gKmFueSogc3lzY2FsbCB0aGF0IGNhbGxzIGl0LiBUaGF0JiMzOTtzIG5lYXJseSBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2UgYG1tYXBgLCBgbXVubWFwYCwgYG1hZHZpc2VgLCBldGMuIFRoYXQmIzM5O3MgdG9vIGJyb2FkLiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGFzcGVjdCBvZiB0aGlzLCBzbyB0aGUgaW5pdGlhbCBzZXQgb2YgZnVuY3Rpb25zIC0gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAsIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCwgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gLCBhbmQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCAtIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgcmlnaHQgcGF0aC4KCldhaXQgYSBzZWNvbmTigKYgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCBpcyBhICpmYXVsdCBoYW5kbGVyKi4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIHRoYXQmIzM5O3MgdXNlZC4gTGV0IG1lIGdvIGxvb2sgYXQgYGxpYi90ZXN0X2htbS5jYCB0byBzZWUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX2Rldm1lbV9mYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jPTk0Nz1zdGF0aWMgaW50IGRtaXJyb3JfZXhjbHVzaXZlKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxuLS1cbmxpYi90ZXN0X2htbS5jLTEwMDMtXG5saWIvdGVzdF9obW0uYzoxMDA0OnN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0X2FsbG9jX2FuZF9jb3B5KHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyxcbmxpYi90ZXN0X2htbS5jLTEwMDUtXHRcdFx0XHRcdFx0ICAgICAgc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IpXG4tLVxubGliL3Rlc3RfaG1tLmM9MTEyMD1zdGF0aWMgaW50IGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0oc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsXG4tLVxubGliL3Rlc3RfaG1tLmMtMTE2OS1cdFx0cHJfZGVidWcoXCYjMzQ7TWlncmF0aW5nIGZyb20gZGV2aWNlIG1lbSB0byBzeXMgbWVtXFxuXCYjMzQ7KTtcbmxpYi90ZXN0X2htbS5jOjExNzA6XHRcdGlmIChkbWlycm9yX2Rldm1lbV9mYXVsdF9hbGxvY19hbmRfY29weShcdTAwMjZhcmdzLCBkbWlycm9yKSkge1xubGliL3Rlc3RfaG1tLmMtMTE3MS1cdFx0XHRtaWdyYXRlX3ZtYV9maW5hbGl6ZShcdTAwMjZhcmdzKTtcbi0tXG5saWIvdGVzdF9obW0uYz0xNjIwPXN0YXRpYyB2b2lkIGRtaXJyb3JfZGV2bWVtX2ZyZWUoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5saWIvdGVzdF9obW0uYy0xNjUyLVxubGliL3Rlc3RfaG1tLmM6MTY1MzpzdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbmxpYi90ZXN0X2htbS5jLTE2NTQte1xuLS1cbmxpYi90ZXN0X2htbS5jLTE3MTMtXG5saWIvdGVzdF9obW0uYzoxNzE0Olx0cmV0ID0gZG1pcnJvcl9kZXZtZW1fZmF1bHRfYWxsb2NfYW5kX2NvcHkoXHUwMDI2YXJncywgZG1pcnJvcik7XG5saWIvdGVzdF9obW0uYy0xNzE1LVx0aWYgKHJldCkge1xuLS1cbmxpYi90ZXN0X2htbS5jLTE3MjEtXHQgKiBObyBkZXZpY2UgZmluYWxpemUgc3RlcCBpcyBuZWVkZWQgc2luY2VcbmxpYi90ZXN0X2htbS5jOjE3MjI6XHQgKiBkbWlycm9yX2Rldm1lbV9mYXVsdF9hbGxvY19hbmRfY29weSgpIHdpbGwgaGF2ZSBhbHJlYWR5XG5saWIvdGVzdF9obW0uYy0xNzIzLVx0ICogaW52YWxpZGF0ZWQgdGhlIGRldmljZSBwYWdlIHRhYmxlLlxuLS1cbmxpYi90ZXN0X2htbS5jPTE3NjY9c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcGFnZW1hcF9vcHMgZG1pcnJvcl9kZXZtZW1fb3BzID0ge1xubGliL3Rlc3RfaG1tLmMtMTc2Ny1cdC5mb2xpb19mcmVlXHQ9IGRtaXJyb3JfZGV2bWVtX2ZyZWUsXG5saWIvdGVzdF9obW0uYzoxNzY4Olx0Lm1pZ3JhdGVfdG9fcmFtXHQ9IGRtaXJyb3JfZGV2bWVtX2ZhdWx0LFxubGliL3Rlc3RfaG1tLmMtMTc2OS1cdC5mb2xpb19zcGxpdFx0PSBkbWlycm9yX2Rldm1lbV9mb2xpb19zcGxpdCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2MjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgZm9yIERldmljZSBQcml2YXRlIFBhZ2UgRmF1bHQgVGVzdGluZyoqCgpPa2F5LCBzbyBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgICppcyogdGhlIGBtaWdyYXRlX3RvX3JhbWAgY2FsbGJhY2suIFBlcmZlY3QsIHRoYXQmIzM5O3MgZXhhY3RseSB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMg4oCTIHRoYXQmIzM5O3MgdGhlIG9uZSB0cmlnZ2VyZWQgd2hlbiBhIENQVSBmYXVsdHMgb24gYSBkZXZpY2UgcHJpdmF0ZSBwYWdlLiBUaGF0IGNvbmZpcm1zIGl0JiMzOTtzIHRoZSByaWdodCBlbnRyeSBwb2ludCBmb3IgdGhlIHRlc3QuIFNvLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IGluY2x1ZGVzIHRoZSBmb2xsb3dpbmc6CgoqICAgYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAgKHRoYXQmIzM5O3Mgb3VyIGVudHJ5IGZyb20gdXNlcnNwYWNlKQoqICAgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIChmb3IgcHVzaGluZyBpdCB0byBkZXZpY2UgcHJpdmF0ZSkKKiAgIGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYCAoaW4gY2FzZSB3ZSBuZWVkIHRvIHB1bGwgaXQgYmFjaykKKiAgIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgKHRoZSBhbGwtaW1wb3J0YW50IGZhdWx0IGhhbmRsZXIpCgpCdXQgd2FpdOKApiB0aGlzIHBhdGNoIGFsc28gdG91Y2hlcyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIGFuZCB0aGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKWAgY2hlY2suIFRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIFBNRCwgYW5kIHNwZWNpZmljYWxseSwgYSBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCkgdGhhdCYjMzk7cyBtYXJrZWQgYXMgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeS4gTm93IHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIFRoZSBrZXkgaGVyZSBpcywgaG93IGNhbiBhIFRIUCAqYmVjb21lKiBkZXZpY2UgcHJpdmF0ZT8gSXQgbXVzdCBiZSBiZWNhdXNlIGl0JiMzOTtzIGJlZW4gbWlncmF0ZWQgdG8gZGV2aWNlIHByaXZhdGUgbWVtb3J5LCByaWdodD8gSWYgbm90LCB3aHkgd291bGQgdGhhdCBjaGVjayBiZSB0aGVyZT8gTm93IHRoZSBidXJuaW5nIHF1ZXN0aW9uIGlzOiBEb2VzIGB0ZXN0X2htbWAgYWN0dWFsbHkgc3VwcG9ydCBtaWdyYXRpbmcgYSBUSFAgdG8gZGV2aWNlIHByaXZhdGUgbWVtb3J5PyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2xpYi90ZXN0X2htbS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjMwOlx0XHRcdH1cbjEyMzE6XHRcdFx0bmV4dCA9IG1pbihlbmQsIGFkZHIgJiM0MzsgKFBUUlNfUEVSX1BURSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpO1xuMTIzMjpcdFx0XHRpZiAobmV4dCBcdTAwM2Ugdm1hLVx1MDAzZXZtX2VuZClcbjEyMzM6XHRcdFx0XHRuZXh0ID0gdm1hLVx1MDAzZXZtX2VuZDtcbjEyMzQ6XHRcbjEyMzU6XHRcdFx0YXJncy52bWEgPSB2bWE7XG4xMjM2Olx0XHRcdGFyZ3Muc3JjID0gc3JjX3BmbnM7XG4xMjM3Olx0XHRcdGFyZ3MuZHN0ID0gZHN0X3BmbnM7XG4xMjM4Olx0XHRcdGFyZ3Muc3RhcnQgPSBhZGRyO1xuMTIzOTpcdFx0XHRhcmdzLmVuZCA9IG5leHQ7XG4xMjQwOlx0XHRcdGFyZ3MucGdtYXBfb3duZXIgPSBkbWlycm9yLVx1MDAzZW1kZXZpY2U7XG4xMjQxOlx0XHRcdGFyZ3MuZmxhZ3MgPSBNSUdSQVRFX1ZNQV9TRUxFQ1RfU1lTVEVNIHxcbjEyNDI6XHRcdFx0XHRcdE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORDtcbjEyNDM6XHRcdFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXHUwMDI2YXJncyk7XG4xMjQ0Olx0XHRcdGlmIChyZXQpXG4xMjQ1Olx0XHRcdFx0Z290byBvdXQ7XG4xMjQ2Olx0XG4xMjQ3Olx0XHRcdHByX2RlYnVnKFwmIzM0O01pZ3JhdGluZyBmcm9tIHN5cyBtZW0gdG8gZGV2aWNlIG1lbVxcblwmIzM0Oyk7XG4xMjQ4Olx0XHRcdGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weShcdTAwMjZhcmdzLCBkbWlycm9yKTtcbjEyNDk6XHRcdFx0bWlncmF0ZV92bWFfcGFnZXMoXHUwMDI2YXJncyk7XG4xMjUwOlx0XHRcdGRtaXJyb3JfbWlncmF0ZV9maW5hbGl6ZV9hbmRfbWFwKFx1MDAyNmFyZ3MsIGRtaXJyb3IpO1xuMTI1MTpcdFx0XHRtaWdyYXRlX3ZtYV9maW5hbGl6ZShcdTAwMjZhcmdzKTtcbjEyNTI6XHRcdH1cbjEyNTM6XHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuMTI1NDpcdFx0bW1wdXQobW0pO1xuMTI1NTpcdFxuMTI1NjpcdFx0LypcbjEyNTc6XHRcdCAqIFJldHVybiB0aGUgbWlncmF0ZWQgZGF0YSBmb3IgdmVyaWZpY2F0aW9uLlxuMTI1ODpcdFx0ICogT25seSBmb3IgcGFnZXMgaW4gZGV2aWNlIHpvbmVcbjEyNTk6XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEyNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBEZXZpY2UgUHJpdmF0ZSBNZW1vcnkgd2l0aCBUSFAgTWlncmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogdGhlIGNvZGUgcmVsYXRlZCB0byBkZXZpY2UgcHJpdmF0ZSBtZW1vcnksIGVzcGVjaWFsbHkgd2l0aCB0aGUgaW50ZXJhY3Rpb24gb2YgVHJhbnNwYXJlbnQgSHVnZVBhZ2VzIChUSFApLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpczogeWVzLCB3ZSYjMzk7cmUgZW5hYmxpbmcgYE1JR1JBVEVfVk1BX1NFTEVDVF9DT01QT1VORGAsIHdoaWNoIG1lYW5zIHRoZSBgdGVzdF9obW1gIG1vZHVsZSBzdXBwb3J0cyBtaWdyYXRpbmcgVEhQcyB0byBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkuIEdyZWF0LCB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIHdoYXQgSSB3YW50IHRvIHRlc3QuIEFuZCB3aGVuIHRob3NlIFRIUHMgKmFyZSogbWlncmF0ZWQsIHRoZSBQTUQgZW50cmllcyBiZWNvbWUgZGV2aWNlIHByaXZhdGUuIFRoZW4sIGlmIHNvbWV0aGluZyBjYWxscyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIG9uIHRoYXQgcGFnZSwgdGhlIG1vZGlmaWVkIGNvZGUgaW4gdGhlIHBhdGNoIHdpbGwgYmUgaGl0LgoKTm93LCB3aGF0IGNhbGxzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2A/IFRoaW5ncyBsaWtlIGB0cnlfdG9fdW5tYXBgLCB3aGljaCBoYXBwZW5zIGR1cmluZyBgbXVubWFwYCBvciBgbWFkdmlzZShNQURWX0RPTlRORUVEKWAsIGFuZCBhbHNvIGB0cnlfdG9fbWlncmF0ZWAsIHdoZW4gbWlncmF0aW5nIGJhY2sgdG8gc3lzdGVtIG1lbW9yeS4gU28gZnV6emluZyBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCBhbmQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCBtYWtlcyBwZXJmZWN0IHNlbnNlIGFzIHRoZXkgc2VlbSB0byBpbnRlcmFjdCB3aXRoIHRoaXMgY29yZSBsb2dpYy4KCkxldCYjMzk7cyBxdWlja2x5IHJlY2FwIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgbmVlZGVkIGZvciB0aGlzIHRlc3Q6CgoqICAgYERFVklDRV9QUklWQVRFYAoqICAgYFpPTkVfREVWSUNFYAoqICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYAoqICAgYFRFU1RfSE1NYAoKTm93LCBhIHF1aWNrIHNpZGUgbm90ZTogSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBURVNUX0hNTWAsIGJlaW5nIGEgbW9kdWxlIChgdHJpc3RhdGVgKSwgd2lsbCBiZSBsb2FkZWQgYnkgc3l6a2FsbGVyLiBTeXprYWxsZXIgdXN1YWxseSBoYW5kbGVzIGl0IGlmIHdlIHNwZWNpZnkgaXQuIExldCYjMzk7cyBzZWUgaWYgd2UgY2FuIG1ha2UgaXQgYnVpbHQtaW4uIEFoLCBpbiBgbGliL0tjb25maWcuZGVidWdgOiB5ZXMsIGl0ICpjYW4qIGJlIGJ1aWx0LWluLiBHb29kLiBOb3csIGxldCYjMzk7cyB2ZXJpZnkgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgaXQmIzM5O3MgYSBgYm9vbGAgaW4gYG1tL0tjb25maWdgLiBBbmQgYFpPTkVfREVWSUNFYCwgdGhhdCYjMzk7cyBhIGBib29sYCBhcyB3ZWxsLiBBbmQgYERFVklDRV9QUklWQVRFYCwgYWxzbyBhIGBib29sYC4gU28gd2UmIzM5O3JlIGdvb2Qgd2l0aCB0aG9zZSBjb25maWd1cmF0aW9ucy4KCk5vdyB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGRlcGVuZGVuY3kgaXNzdWVzLCBgREVWSUNFX1BSSVZBVEVgIGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gYFpPTkVfREVWSUNFYCBpbiB0dXJuIGRlcGVuZHMgb24gYE1FTU9SWV9IT1RQTFVHYCwgYE1FTU9SWV9IT1RSRU1PVkVgLCBhbmQgYFNQQVJTRU1FTV9WTUVNTUFQYC4gU3l6a2FsbGVyIHVzdWFsbHkgZW5hYmxlcyB0aGVzZSBmb3IgeDg2XzY0LCBzbyBsaXN0aW5nIGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGFuZCBgVEVTVF9ITU1gIHNob3VsZCBiZSBzdWZmaWNpZW50LgoKVGhlIG1haW4gaWRlYSBpcyB0byB0ZXN0IGEgbm9uLWhhcmR3YXJlIHNwZWNpZmljIHNldHVwLiBgVEVTVF9ITU1gIGlzIGlkZWFsIHNpbmNlIGl0JiMzOTtzIGRlc2lnbmVkIGZvciB0aGlzIGFuZCBvdGhlciBkcml2ZXJzIGxpa2UgYG5vdXZlYXVgIGFuZCBgYW1kZ3B1YCB1c2UgYERFVklDRV9QUklWQVRFYCwgYnV0IGBURVNUX0hNTWAgaXMgYSBnb29kIHdheSB0byB0ZXN0IGl0LgoKTGV0JiMzOTtzIGdvIGJhY2sgb3ZlciB0aGUgcGF0Y2ggYWdhaW4gYW5kIGRpZ2VzdCB3aGF0IGl0JiMzOTtzIGRvaW5nOgoKYGBgYwotCQl9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkgewotCQkJY29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpOwomIzQzOwkJfSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpIHsKJiM0MzsJCQlzb2Z0bGVhZl90IGVudHJ5OwomIzQzOwomIzQzOwkJCXB2bXctJmd0O3B0bCA9IHBtZF9sb2NrKG1tLCBwdm13LSZndDtwbWQpOwomIzQzOwkJCXBtZGUgPSAqcHZtdy0mZ3Q7cG1kOwomIzQzOwkJCWVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7CiAKLQkJCWlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHsKLQkJCQlwdm13LSZndDtwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy0mZ3Q7cG1kKTsKJiM0MzsJCQlpZiAobGlrZWx5KHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkpIHsKJiM0MzsJCQkJaWYgKHB2bXctJmd0O2ZsYWdzICZhbXA7IFBWTVdfTUlHUkFUSU9OKQomIzQzOwkJCQkJcmV0dXJuIG5vdF9mb3VuZChwdm13KTsKJiM0MzsJCQkJaWYgKCFjaGVja19wbWQoc29mdGxlYWZfdG9fcGZuKGVudHJ5KSwgcHZtdykpCiYjNDM7CQkJCQlyZXR1cm4gbm90X2ZvdW5kKHB2bXcpOwogCQkJCXJldHVybiB0cnVlOwogCQkJfQotCiYjNDM7CQkJLyogZGV2aWNlLXByaXZhdGUgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqLwomIzQzOwkJCXNwaW5fdW5sb2NrKHB2bXctJmd0O3B0bCk7CiYjNDM7CQkJcHZtdy0mZ3Q7cHRsID0gTlVMTDsKJiM0MzsJCX0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7CmBgYAoKQWgsIHJpZ2h0LCB0aGlzIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cnkgY291bGQgYmUgc3BsaXQgdW5kZXJuZWF0aCB1cy4gVGhlIGZpeCBpbnZvbHZlcyB1c2luZyBgcG1kX2xvY2tgLCByZS1yZWFkaW5nIHRoZSBgcG1kZWAgcG9pbnRlciwgYW5kIGFkZGluZyBjaGVja3MgZm9yIGAKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkbWlycm9yX3JlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvdGVzdF9obW0uYz00MjU9c3RhdGljIGludCBkbWlycm9yX2RvX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubGliL3Rlc3RfaG1tLmMtNDUwLVxubGliL3Rlc3RfaG1tLmM6NDUxOnN0YXRpYyBpbnQgZG1pcnJvcl9yZWFkKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLCBzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kICpjbWQpXG5saWIvdGVzdF9obW0uYy00NTIte1xuLS1cbmxpYi90ZXN0X2htbS5jPTE1MTM9c3RhdGljIGxvbmcgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmxpYi90ZXN0X2htbS5jLTE1MzgtXHRjYXNlIEhNTV9ETUlSUk9SX1JFQUQ6XG5saWIvdGVzdF9obW0uYzoxNTM5Olx0XHRyZXQgPSBkbWlycm9yX3JlYWQoZG1pcnJvciwgXHUwMDI2Y21kKTtcbmxpYi90ZXN0X2htbS5jLTE1NDAtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzIxNQoJCQkJCQkJb3V0cHV0OiAyMTUKCQkJCQkJCXRob3VnaHRzOiAxNDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IERldmljZS1Qcml2YXRlIFRIUCBSYWNlIENvbmRpdGlvbiBGaXgqKgoKT2theSwgaGVyZSYjMzk7cyBteSBwbGFuIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgY3JpdGljYWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBkZXZpY2UtcHJpdmF0ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFBzKSB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGludHJvZHVjZXMgbG9ja2luZyAoYHBtZF9sb2NrYCkgYW5kIHJlLXZhbGlkYXRpb24gdG8gcHJldmVudCBjb25jdXJyZW50IHNwbGl0cyBvZiBQTUQgZW50cmllcyB3aGVuIHRoZXNlIGRldmljZS1wcml2YXRlIFRIUHMgYXJlIGludm9sdmVkLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0JiMzOTtzIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgYWZmZWN0cyBob3cgVEhQcyBhcmUgaGFuZGxlZCB3aXRoIGRldmljZXMgdGhhdCB1c2UgSE1NLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBpbmNsdWRlIGBkbWlycm9yX3JlYWRgLCBgZG1pcnJvcl93cml0ZWAsIGFuZCBgZG1pcnJvcl9leGNsdXNpdmVgIGFzIGZvY3VzIHN5bWJvbHMsIGJ1dCBsb29raW5nIGF0IGl0IG1vcmUgY2FyZWZ1bGx5LCBJIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyBlbnRyeSBwb2ludHMuIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgaXMga2V5IGJlY2F1c2UgaXQmIzM5O3MgdGhlIGZhdWx0IGhhbmRsZXIgdHJpZ2dlcmVkIHdoZW4gYSBDUFUgYWNjZXNzZXMgYSBkZXZpY2UtcHJpdmF0ZSBwYWdlLCBhbmQgc3l6a2FsbGVyIGNhbiB0cmlnZ2VyIHRoaXMgdmlhIGBkbWlycm9yX2ZvcHNfbW1hcGAuIEhvd2V2ZXIsIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciB0aGUgdGVzdGluZyBjb21tYW5kcy4KClRoZXJlZm9yZSwgbXkgZm9jdXMgc3ltYm9scyBuZWVkIHRvIGJlIHJlZmluZWQuIEkgd2FudCB0byBlbXBoYXNpemUgdGhlIGZ1bmN0aW9ucyB0aGF0IHNldCB1cCB0aGUgc3RhdGUgdGhhdCB3aWxsIHVsdGltYXRlbHkgdHJpZ2dlciB0aGUgcmFjZSBjb25kaXRpb24gYW5kIHRoZSBjb2RlIHRoYXQgd2FzIGNoYW5nZWQuIFNvIEkmIzM5O2xsIGdvIHdpdGggdGhlIGZvbGxvd2luZzoKCiogICBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCAtIFRoaXMgaXMgdGhlIHByaW1hcnkgdGVzdCBjb21tYW5kIGVudHJ5IHBvaW50LgoqICAgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIC0gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IG1vdmVzIHBhZ2VzIHRvIGRldmljZSBtZW1vcnkuCiogICBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAgLSBVc2VmdWwgdG8gbW92ZSBwYWdlcyBiYWNrLgoqICAgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCAtIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBmYXVsdCBoYW5kbGVyLgoqICAgYGRtaXJyb3JfZm9wc19tbWFwYCAtIFRoaXMgd2lsbCB0cmlnZ2VyIGZhdWx0cyB3aGVuIGFjY2Vzc2luZyBtYXBwZWQgcGFnZXMuCgpJIGNvbnNpZGVyZWQgaW5jbHVkaW5nIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXRzZWxmLCBidXQgSSYjMzk7bSB0aGlua2luZyB0aGF0IG1pZ2h0IGJlIHRvbyBicm9hZC4gV2hpbGUgaXQmIzM5O3MgKnRoZSogbW9kaWZpZWQgZnVuY3Rpb24sIGl0JiMzOTtzIGNhbGxlZCBmcm9tIG1hbnkgcGxhY2VzLCBhbmQgdGhhdCB3b3VsZCBkaWx1dGUgdGhlIGZ1enppbmcgZm9jdXMsIHNpbmNlIGFueSBwcm9ncmFtIHRoYXQgdXNlcyBpdCB3aWxsIGJlIHByaW9yaXRpemVkLCB3aGljaCBpcyBub3Qgd2hhdCBJIHdhbnQuIEluc3RlYWQsIEkgbmVlZCB0byBmb2N1cyBzeXprYWxsZXIgb24gY3JlYXRpbmcgdGhlIHNwZWNpZmljIGNvbmRpdGlvbnMgdG8gKnJlYWNoKiB0aGF0IGZ1bmN0aW9uIGluIHRoZSBkZXZpY2UtcHJpdmF0ZSBUSFAgY29udGV4dC4gVGhlIGBkbWlycm9yXypgIGZ1bmN0aW9ucyBkbyBleGFjdGx5IHRoYXQuCgpUaGUga2V5IGlzIHNldHRpbmcgdXAgdGhlIGNvcnJlY3Qgc3RhdGU6IGEgZGV2aWNlLXByaXZhdGUgVEhQLiBUaGVuLCBpZiBzeXprYWxsZXIgdHJpZ2dlcnMgYG1hZHZpc2UoTUFEVl9ET05UTkVFRClgLCBgbXVubWFwYCwgb3IgYG1wcm90ZWN0YCBvbiB0aGF0IFRIUCwgaXQmIzM5O2xsIGV4ZXJjaXNlIHRoZSBwYXRjaGVkIGNvZGUgcGF0aCB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gRm9jdXNpbmcgb24gdGhlIGBkbWlycm9yXypgIGZ1bmN0aW9ucyB3aWxsIGFjaGlldmUgdGhpcy4KClRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlOgoKKiAgIGBURVNUX0hNTWAKKiAgIGBERVZJQ0VfUFJJVkFURWAKKiAgIGBaT05FX0RFVklDRWAKKiAgIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAKCmBURVNUX0hNTWAgaXMgdGhlIG1haW4gZW5hYmxlciwgYW5kIGl0IGRlcGVuZHMgb24gdGhlIG90aGVycy4gYEhNTV9NSVJST1JgIGlzIGFsc28gc2VsZWN0ZWQgYnV0IGlzIG5vdCBuZWVkZWQgdG8gYmUgZXhwbGljaXRseSBkZWZpbmVkLgoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBhcHByb2FjaCB3aWxsIGVmZmVjdGl2ZWx5IHRhcmdldCB0aGUgcmFjZSBjb25kaXRpb24gZml4ZWQgYnkgdGhlIHBhdGNoLCBhbmQgSSYjMzk7bSByZWFkeSB0byBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtURVNUX0hNTSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bCYjMzQ7LAogICAgJiMzNDtkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW0mIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9kZXZtZW1fZmF1bHQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdoZW4gaGFuZGxpbmcgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSkuIEl0IGFkZHMgcHJvcGVyIGxvY2tpbmcgKGBwbWRfbG9ja2ApIGFuZCByZS12YWxpZGF0aW9uIG9mIHRoZSBQTUQgZW50cnkgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gdXNpbmcgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGZlYXR1cmVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgSE1NIHRlc3QgZHJpdmVyIChgdGVzdF9obW1gKSB3aGljaCBwcm92aWRlcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbXBsZW1lbnRhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VEVTVF9ITU0mIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwmIzM0OywKICAgICYjMzQ7ZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZSYjMzQ7LAogICAgJiMzNDtkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtJiMzNDssCiAgICAmIzM0O2RtaXJyb3JfZGV2bWVtX2ZhdWx0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB3aGVuIGhhbmRsaW5nIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIG1pZ3JhdGVkIHRvIGRldmljZSBtZW1vcnkpLiBJdCBhZGRzIHByb3BlciBsb2NraW5nIChgcG1kX2xvY2tgKSBhbmQgcmUtdmFsaWRhdGlvbiBvZiB0aGUgUE1EIGVudHJ5IHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBzcGxpdCBjb25jdXJyZW50bHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIHVzaW5nIGRldmljZSBwcml2YXRlIG1lbW9yeSBmZWF0dXJlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEhNTSB0ZXN0IGRyaXZlciAoYHRlc3RfaG1tYCkgd2hpY2ggcHJvdmlkZXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaW1wbGVtZW50YXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozMjowNC44NTQ4MTgxMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4OTkzMTcyMjQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJURVNUX0hNTVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bFwiLFxuICAgIFwiZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZVwiLFxuICAgIFwiZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbVwiLFxuICAgIFwiZG1pcnJvcl9kZXZtZW1fZmF1bHRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2Agd2hlbiBoYW5kbGluZyBkZXZpY2UtcHJpdmF0ZSBQTUQgZW50cmllcyAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBtaWdyYXRlZCB0byBkZXZpY2UgbWVtb3J5KS4gSXQgYWRkcyBwcm9wZXIgbG9ja2luZyAoYHBtZF9sb2NrYCkgYW5kIHJlLXZhbGlkYXRpb24gb2YgdGhlIFBNRCBlbnRyeSB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgc3BsaXQgY29uY3VycmVudGx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgY2FuIGJlIHJlYWNoZWQgd2hlbiB1c2luZyBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgZmVhdHVyZXMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBITU0gdGVzdCBkcml2ZXIgKGB0ZXN0X2htbWApIHdoaWNoIHByb3ZpZGVzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGltcGxlbWVudGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozMjowNC44NTQ4MjU3MzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjAxMjYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg0MGVlNmE3MGNjMDlkNTc2MmJhMWQ4Mzg4YTg1MDJlMWQxMzdmNGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDc6MzI6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV92bWFfbWFwcGVkLmMgYi9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xcbmluZGV4IDJjY2JhYmZiMmNjMTdhLi4xN2RmZjhhYWI5ZjllNCAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xcbisrKyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXFxuQEAgLTI2OSwxNCArMjY5LDI0IEBAIGJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbiBcXHRcXHRcXHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xcbiBcXHRcXHRcXHRzcGluX3VubG9jayhwdm13LVxcdTAwM2VwdGwpO1xcbiBcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbi1cXHRcXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xcbi1cXHRcXHRcXHRjb25zdCBzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XFxuK1xcdFxcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSB7XFxuK1xcdFxcdFxcdHNvZnRsZWFmX3QgZW50cnk7XFxuK1xcbitcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cXHUwMDNlcG1kKTtcXG4rXFx0XFx0XFx0cG1kZSA9ICpwdm13LVxcdTAwM2VwbWQ7XFxuK1xcdFxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQocG1kZSk7XFxuIFxcbi1cXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxuLVxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbitcXHRcXHRcXHRpZiAobGlrZWx5KHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkpIHtcXG4rXFx0XFx0XFx0XFx0aWYgKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19NSUdSQVRJT04pXFxuK1xcdFxcdFxcdFxcdFxcdHJldHVybiBub3RfZm91bmQocHZtdyk7XFxuK1xcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxcbitcXHRcXHRcXHRcXHRcXHRyZXR1cm4gbm90X2ZvdW5kKHB2bXcpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0XFx0XFx0fVxcbi1cXG4rXFx0XFx0XFx0LyogZGV2aWNlLXByaXZhdGUgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xcbitcXHRcXHRcXHRzcGluX3VubG9jayhwdm13LVxcdTAwM2VwdGwpO1xcbitcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbitcXHRcXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xcbiBcXHRcXHRcXHRpZiAoKHB2bXctXFx1MDAzZWZsYWdzIFxcdTAwMjYgUFZNV19TWU5DKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcih2bWEsIHB2bXctXFx1MDAzZWFkZHJlc3MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgIFBNRF9PUkRFUikgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6MDUuMzAxNTA1NjcxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk0ODUwMjU2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcImRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VcIixcbiAgICBcImRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1cIixcbiAgICBcImRtaXJyb3JfZGV2bWVtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdoZW4gaGFuZGxpbmcgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSkuIEl0IGFkZHMgcHJvcGVyIGxvY2tpbmcgKGBwbWRfbG9ja2ApIGFuZCByZS12YWxpZGF0aW9uIG9mIHRoZSBQTUQgZW50cnkgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gdXNpbmcgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGZlYXR1cmVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgSE1NIHRlc3QgZHJpdmVyIChgdGVzdF9obW1gKSB3aGljaCBwcm92aWRlcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbXBsZW1lbnRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NDBlZTZhNzBjYzA5ZDU3NjJiYTFkODM4OGE4NTAyZTFkMTM3ZjRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDc6MzI6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9wYWdlX3ZtYV9tYXBwZWQuYyBiL21tL3BhZ2Vfdm1hX21hcHBlZC5jXG5pbmRleCAyY2NiYWJmYjJjYzE3YS4uMTdkZmY4YWFiOWY5ZTQgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX3ZtYV9tYXBwZWQuY1xuKysrIGIvbW0vcGFnZV92bWFfbWFwcGVkLmNcbkBAIC0yNjksMTQgKzI2OSwyNCBAQCBib29sIHBhZ2Vfdm1hX21hcHBlZF93YWxrKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcbiBcdFx0XHQvKiBUSFAgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xuIFx0XHRcdHNwaW5fdW5sb2NrKHB2bXctXHUwMDNlcHRsKTtcbiBcdFx0XHRwdm13LVx1MDAzZXB0bCA9IE5VTEw7XG4tXHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4tXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuK1x0XHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkge1xuK1x0XHRcdHNvZnRsZWFmX3QgZW50cnk7XG4rXG4rXHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuK1x0XHRcdHBtZGUgPSAqcHZtdy1cdTAwM2VwbWQ7XG4rXHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiBcbi1cdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4tXHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdFx0aWYgKGxpa2VseShzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpKSB7XG4rXHRcdFx0XHRpZiAocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pXG4rXHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4rXHRcdFx0XHRpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcbitcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiBcdFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRcdH1cbi1cbitcdFx0XHQvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4rXHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuK1x0XHRcdHB2bXctXHUwMDNlcHRsID0gTlVMTDtcbitcdFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcbiBcdFx0XHRpZiAoKHB2bXctXHUwMDNlZmxhZ3MgXHUwMDI2IFBWTVdfU1lOQykgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIHRocF92bWFfc3VpdGFibGVfb3JkZXIodm1hLCBwdm13LVx1MDAzZWFkZHJlc3MsXG4gXHRcdFx0XHRcdFx0ICAgUE1EX09SREVSKSBcdTAwMjZcdTAwMjZcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjA1LjMwMTUwNzE2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1Nzg0MTcwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gYG1tL3BhZ2Vfdm1hX21hcHBlZC5jYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBtbS9wYWdlX3ZtYV9tYXBwZWQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGUgbWFpbiBwb2ludCBvZiBpbnRlcmVzdCBpcyBob3cgd2UncmUgaGFuZGxpbmcgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgY29yZSBNTSBmdW5jdGlvbiwgcmlnaHQ/IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgdXNlZCBmb3Igd2Fsa2luZyB0aGUgcGFnZSB0YWJsZXMuIEFueSBjaGFuZ2VzIHRvIHRoaXMgYXJlIGFsd2F5cyB3b3J0aCBhIGNsb3NlIGxvb2sgYW5kIGRlZmluaXRlbHkgd2FycmFudCBzb21lIHNlcmlvdXMgZnV6emluZy5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgY29uZGl0aW9uYWwgY2hhbmdlIGFyb3VuZCB0aGUgaGFuZGxpbmcgb2YgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAuIFRoZSBleGlzdGluZyBsb2dpYyBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGEgbmV3IGNvbmRpdGlvbmFsIGJsb2NrLCBhbmQgYSBmZXcgY29uZGl0aW9uYWwgbG9jayBvcGVyYXRpb25zLiBUaGUgb3JpZ2luYWwgYGlmYCBjb25kaXRpb24gaGFzIGJlZW4gc3dhcHBlZCBmb3IgYSBuZXcgY29uZGl0aW9uIHdoaWNoIGNhbGxzIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLiBUaGUgbmV3IGNvZGUgcGF0aCBzZWVtcyB0byBiZSBhZGRpbmcgYWRkaXRpb25hbCBsb2NraW5nLCBhbmQgY2hlY2tzIHRvIGVuc3VyZSB0aGUgYHBtZGAgaXNuJ3QgY2hhbmdpbmcgd2hpbGUgaXQgcHJvY2Vzc2VzIHRoZSBlbnRyeS4gSSBzZWUgdGhpcyBpcyBiZWluZyBkb25lIHRvIGVuc3VyZSB0aGUgYHBtZGAgaXNuJ3Qgc3BsaXQgYnkgYW5vdGhlciB0aHJlYWQuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBzbyBJJ2xsIGFsc28gdHJ5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBpbnZvbHZlZCBoZXJlLiBNeSBpbnR1aXRpb24gc2F5cyBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCAqY291bGQqIGJlIHJlbGF0ZWQgdG8gc29tZXRoaW5nIGxpa2UgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEknbGwgcnVuIGEgcXVpY2sgZ3JlcCB0byBjb25maXJtIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSB0aGUgZXhhY3Qgc2NlbmFyaW9zIGFmZmVjdGVkIGJ5IHRoaXMgcGF0Y2ggYW5kIHBvdGVudGlhbCBhcmVhcyB0byBmb2N1cyB0ZXN0aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6MTIuODc5OTI2MDc5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDI4MzgzOTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU1ND1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU3Mi0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1NzM6ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTc0LSAqIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTgzLSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU4NDpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODUte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTkwLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU5MTpzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01OTIte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTEyLVxcdFxcdGRpcnR5ID0gc29mdGxlYWZfaXNfbWlncmF0aW9uX2RpcnR5KGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jOjMxMTM6XFx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKnBtZCkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTMxMTQtXFx0XFx0c29mdGxlYWZfdCBlbnRyeTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzI1My1cXHRcXHR9XFxubW0vaHVnZV9tZW1vcnkuYzozMjU0OlxcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9sZF9wbWQpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0zMjU1LVxcdFxcdHB0ZV90IGVudHJ5O1xcbi0tXFxubW0vbWVtb3J5LmM9NjQxNz1zdGF0aWMgdm1fZmF1bHRfdCBfX2hhbmRsZV9tbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21lbW9yeS5jLTY0OTAtXFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudCh2bWYub3JpZ19wbWQpKSkge1xcbm1tL21lbW9yeS5jOjY0OTE6XFx0XFx0aWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSh2bWYub3JpZ19wbWQpKVxcbm1tL21lbW9yeS5jLTY0OTItXFx0XFx0XFx0cmV0dXJuIGRvX2h1Z2VfcG1kX2RldmljZV9wcml2YXRlKFxcdTAwMjZ2bWYpO1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTgwPWJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjcxLVxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IE5VTEw7XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MjcyOlxcdFxcdH0gZWxzZSBpZiAocG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpKSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMjczLVxcdFxcdFxcdHNvZnRsZWFmX3QgZW50cnk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjE0LjgyMjc3MDExMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODg0MzM3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MgbGFpZCBvdXQsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAncyBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeWAgYmVpbmcgYWN0aXZlLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBidXQgSSBjYW4ndCBxdWl0ZSByZWNhbGwgdGhlIHByZWNpc2UgY29uZmlndXJhdGlvbiBrbm9icyB0aGF0IGVuYWJsZSBpdC4gVG8gZmlndXJlIHRoaXMgb3V0IHF1aWNrbHksIEknbSBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIG91dCBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCBpdHMgZGVmaW5pdGlvbiBvciBhdCB0aGUgdmVyeSBsZWFzdCwgcmVsZXZhbnQgcHJlcHJvY2Vzc29yIG1hY3JvcyByZWxhdGVkIHRvIGl0cyBlbmFibGluZyBjb25kaXRpb25zLiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSB0aGUgY29uZmlnIG9wdGlvbnMgKG9yLCBhdCBsZWFzdCwgdGhlIGluY2x1ZGUvZGVwZW5kZW5jeSBzdHJ1Y3R1cmUpLCB0aGF0IGdvdmVybiB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY29tcGlsZWQgYW5kIHVzZWQuIEhvcGVmdWxseSwgdGhpcyBmaWxlIHdpbGwgaGF2ZSB0aGUgYW5zd2VyLCBvciBwb2ludCBtZSBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6MTguMTExMjA1MjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4MDM3ODU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfREVWSUNFX1BSSVZBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG93ZXJudl9kZWZjb25maWc9Njg9Q09ORklHX1pPTkVfREVWSUNFPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wb3dlcm52X2RlZmNvbmZpZzo2OTpDT05GSUdfREVWSUNFX1BSSVZBVEU9eVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3Bvd2VybnZfZGVmY29uZmlnLTcwLUNPTkZJR19ORVQ9eVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MTQwPXN0YXRpYyBpbmxpbmUgZW51bSBzb2Z0bGVhZl90eXBlIHNvZnRsZWFmX3R5cGUoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTE2MC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoxNjE6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTE2Mi1cXHRjYXNlIFNXUF9ERVZJQ0VfV1JJVEU6XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MTY2PXN0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19pc19kZXZpY2VfcHJpdmF0ZShjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xNjcte1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNjg6XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xNjktXFx0XFx0Zm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXJlbWFwLmg9MTczPXN0YXRpYyBpbmxpbmUgYm9vbCBpc19kZXZpY2VfcHJpdmF0ZV9wYWdlKGNvbnN0IHN0cnVjdCBwYWdlICpwYWdlKVxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xNzQte1xcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaDoxNzU6XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvbWVtcmVtYXAuaC0xNzYtXFx0XFx0Zm9saW9faXNfZGV2aWNlX3ByaXZhdGUocGFnZV9mb2xpbyhwYWdlKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD0zND1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNzUtICovXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NzY6I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTc3LSNkZWZpbmUgU1dQX0RFVklDRV9OVU0gM1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCAqc3dwX3RvX3JhZGl4X2VudHJ5KHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTM0LVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjEzNTojaWYgSVNfRU5BQkxFRChDT05GSUdfREVWSUNFX1BSSVZBVEUpXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTM2LXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShwZ29mZl90IG9mZnNldClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTE0Nj1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeShwZ29mZl90IG9mZnNldClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE1MC1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxNTE6I2Vsc2UgLyogQ09ORklHX0RFVklDRV9QUklWQVRFICovXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTUyLXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShwZ29mZl90IG9mZnNldClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTE2Mj1zdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeShwZ29mZl90IG9mZnNldClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE2Ni1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoxNjc6I2VuZGlmIC8qIENPTkZJR19ERVZJQ0VfUFJJVkFURSAqL1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE2OC1cXG4tLVxcbm1tL21lbXJlbWFwLmM9MjY2PXZvaWQgKm1lbXJlbWFwX3BhZ2VzKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCBuaWQpXFxuLS1cXG5tbS9tZW1yZW1hcC5jLTI4My1cXHRjYXNlIE1FTU9SWV9ERVZJQ0VfUFJJVkFURTpcXG5tbS9tZW1yZW1hcC5jOjI4NDpcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0RFVklDRV9QUklWQVRFKSkge1xcbm1tL21lbXJlbWFwLmMtMjg1LVxcdFxcdFxcdFdBUk4oMSwgXFxcIkRldmljZSBwcml2YXRlIG1lbW9yeSBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4tLVxcbm1tL3JtYXAuYz0yNzM5PXZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXFxuLS1cXG5tbS9ybWFwLmMtMjc3Ni1cXG5tbS9ybWFwLmM6Mjc3NzojaWZkZWYgQ09ORklHX0RFVklDRV9QUklWQVRFXFxubW0vcm1hcC5jLTI3NzgtLyoqXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9ND1DT05GSUdfVEVTVF9WTUFMTE9DPW1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc6NTpDT05GSUdfREVWSUNFX1BSSVZBVEU9eVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2NvbmZpZy02LUNPTkZJR19URVNUX0hNTT1tXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjE5Ljk5MTU5MjI0NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDA4ODY3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipQaW5wb2ludGluZyB0aGUgQ3JpdGljYWwgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBpcyB0aGUga2V5IHZhcmlhYmxlIHRvIGZvY3VzIG9uLiBUaGF0J3MgdXN1YWxseSB0aGUgaW5kaWNhdG9yIHdlIG5lZWQgZm9yIHRoZSBkZXZpY2UtbGV2ZWwgY3VzdG9taXphdGlvbnMuIExldCdzIHNlZS4uLiBub3cgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIGV4YWN0bHkgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gaG9vayBpcyBwbGFjZWQuIEkgcmVjYWxsIHRoYXQgYGluY2x1ZGUvbGludXgvbGVhZm9wcy5oYCBob2xkcyBhIGxvdCBvZiB0aG9zZSBsb3ctbGV2ZWwgZGVmaW5pdGlvbnMsIHNvIHRoYXQncyB0aGUgbGlrZWx5IHNwb3QuIFNwZWNpZmljYWxseSwgSSBzZWVtIHRvIHJlbWVtYmVyIHRoYXQgYSBrZXkgcm91dGluZSB3aWxsIGJlIGFyb3VuZCBsaW5lIDU4NCBvciBzby4gSSdsbCBuZWVkIHRvIGdvIGNoZWNrIHRoZSBjb2RlIHRoZXJlIHRvIGNvbmZpcm0gaG93IGl0J3MgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjIyLjkzMjQ4MTI3OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHQjaWYgZGVmaW5lZChDT05GSUdfWk9ORV9ERVZJQ0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pXFxuIDU3MTpcXHRcXG4gNTcyOlxcdC8qKlxcbiA1NzM6XFx0ICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuIDU3NDpcXHQgKiBlbnRyeS5cXG4gNTc1OlxcdCAqIEBwbWQ6IFRoZSBQTUQgdG8gY2hlY2suXFxuIDU3NjpcXHQgKlxcbiA1Nzc6XFx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBQTUQgY29udGFpbnMgYSBzd2FwIGVudHJ5IHRoYXQgcmVwcmVzZW50cyBhIGRldmljZSBwcml2YXRlXFxuIDU3ODpcXHQgKiBwYWdlIG1hcHBpbmcuIFRoaXMgaXMgdXNlZCBmb3Igem9uZSBkZXZpY2UgcHJpdmF0ZSBwYWdlcyB0aGF0IGhhdmUgYmVlblxcbiA1Nzk6XFx0ICogc3dhcHBlZCBvdXQgYnV0IHN0aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBkdXJpbmcgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudFxcbiA1ODA6XFx0ICogb3BlcmF0aW9ucy5cXG4gNTgxOlxcdCAqXFxuIDU4MjpcXHQgKiBSZXR1cm46IHRydWUgaWYgUE1EIGNvbnRhaW5zIGRldmljZSBwcml2YXRlIGVudHJ5LCBmYWxzZSBvdGhlcndpc2VcXG4gNTgzOlxcdCAqL1xcbiA1ODQ6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDU4NTpcXHR7XFxuIDU4NjpcXHRcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIDU4NzpcXHR9XFxuIDU4ODpcXHRcXG4gNTg5OlxcdCNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG4gNTkwOlxcdFxcbiA1OTE6XFx0c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuIDU5MjpcXHR7XFxuIDU5MzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDU5NDpcXHR9XFxuIDU5NTpcXHRcXG4gNTk2OlxcdCNlbmRpZiAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG4gNTk3OlxcdFxcbiA1OTg6XFx0LyoqXFxuIDU5OTpcXHQgKiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KCkgLSBEb2VzIHRoaXMgUE1EIGVudHJ5IGVuY29kZSBhIG1pZ3JhdGlvbiBlbnRyeT9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6MjIuOTMyNTU4MzQ5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NDMzODU5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gRGV2aWNlLVByaXZhdGUgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YCBpcyBhY3RpdmUuIFJpZ2h0LCByaWdodCwgdGhhdCdzIGNvbnRyb2xsZWQgYnkgYENPTkZJR19aT05FX0RFVklDRWAgYW5kIHRoZSBgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gIG9wdGlvbnMuIE1ha2VzIHNlbnNlLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzcGVjaWFsaXplZCBtZW1vcnkgaGFuZGxpbmcgaW4gdGhvc2UgY29udGV4dHMuIExldCdzIHNlZS4uLiB3aGF0IGVsc2UgaXMgdGllZCBpbnRvIHRoaXM/IEFoLCB5ZXMsIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIGlzIGFsc28gaW4gdGhlIG1peC4gSSBzaG91bGQgcXVpY2tseSBjaGVjayB0aGUgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCBmdW5jdGlvbiB0byBiZSBjZXJ0YWluIEkgaGF2ZSB0aGUgY29tcGxldGUgcGljdHVyZSBvbiBob3cgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGlzIGNsYXNzaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NDcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjI2LjEwNjg5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MzM4OTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTA0OT1zdGF0aWMgdm9pZCBzbWFwc19wdGVfZW50cnkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODItXFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSkge1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMDgzOlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuZnMvcHJvYy90YXNrX21tdS5jLTEwODQtXFx0XFx0XFx0XFx0cHJlc2VudCA9IHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0yMzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX21pZ3JhdGlvbihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjQ4LS8qKlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI0OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlIHByaXZhdGVcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTAtICogd3JpdGFibGUgZW50cnk/XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNTUtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjU2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI1Ny17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjEtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjYyOiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeT9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjMtICogQGVudHJ5OiBMZWFmIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjY2LSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI2NzpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzM1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNDEtXFx0XFx0cmV0dXJuIHRydWU7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzQyOlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzQzLVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTg0PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU4NS17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTg2OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01ODctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NjE1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc192YWxpZF9wbWRfZW50cnkoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYxNy1cXHQvKiBPbmx5IGRldmljZSBwcml2YXRlLCBtaWdyYXRpb24gZW50cmllcyB2YWxpZCBmb3IgUE1ELiAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjYxODpcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjE5LVxcdFxcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSk7XFxuLS1cXG5tbS9obW0uYz0yMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2htbS5jLTI2Ni1cXHRcXHQgKi9cXG5tbS9obW0uYzoyNjc6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL2htbS5jLTI2OC1cXHRcXHQgICAgcGFnZV9wZ21hcChzb2Z0bGVhZl90b19wYWdlKGVudHJ5KSktXFx1MDAzZW93bmVyID09XFxuLS1cXG5tbS9obW0uYy0yNzAtXFx0XFx0XFx0Y3B1X2ZsYWdzID0gSE1NX1BGTl9WQUxJRDtcXG5tbS9obW0uYzoyNzE6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9obW0uYy0yNzItXFx0XFx0XFx0XFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XFxuLS1cXG5tbS9obW0uYy0yODQtXFxubW0vaG1tLmM6Mjg1OlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXFxubW0vaG1tLmMtMjg2LVxcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuLS1cXG5tbS9obW0uYz0zMzU9c3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vaG1tLmMtMzQ1LVxcbm1tL2htbS5jOjM0NjpcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vaG1tLmMtMzQ3LVxcdCAgICBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSktXFx1MDAzZXBnbWFwLVxcdTAwM2Vvd25lciA9PVxcbi0tXFxubW0vaG1tLmMtMzUzLVxcbm1tL2htbS5jOjM1NDpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL2htbS5jLTM1NS1cXHRcXHRcXHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcXG4tLVxcbm1tL2htbS5jLTM3Mi1cXHRpZiAocmVxdWlyZWRfZmF1bHQpIHtcXG5tbS9obW0uYzozNzM6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9obW0uYy0zNzQtXFx0XFx0XFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTE4MDg9c3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTgyNy1cXHRcXHRzZXRfcG1kX2F0KHNyY19tbSwgYWRkciwgc3JjX3BtZCwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjE4Mjg6XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9odWdlX21lbW9yeS5jLTE4MjktXFx0XFx0LypcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzMi1cXHRcXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjE4MzM6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzNC1cXHRcXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNTU1PXN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU3NS1cXHRcXHRcXHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjU3NjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMjU3Ny1cXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDMwPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTIzLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzEyNDpcXHRcXHR3cml0ZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jLTMxMjUtXFx0XFx0YW5vbl9leGNsdXNpdmUgPSBQYWdlQW5vbkV4Y2x1c2l2ZShwYWdlKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDg2Nj1pbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODk1LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDg5NjpcXHRcXHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKG9sZF9lbnRyeSk7XFxubW0vaHVnZV9tZW1vcnkuYy00ODk3LVxcdFxcdHNvZnRkaXJ0eSA9IHBtZF9zd3Bfc29mdF9kaXJ0eShwbWR2YWwpO1xcbi0tXFxubW0vbWVtb3J5LmM9OTQxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9tZW1vcnkuYy05OTAtXFx0XFx0fVxcbm1tL21lbW9yeS5jOjk5MTpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbm1tL21lbW9yeS5jLTk5Mi1cXHRcXHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XFxuLS1cXG5tbS9tZW1vcnkuYy0xMDE1LVxcdFxcdCAqL1xcbm1tL21lbW9yeS5jOjEwMTY6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbW9yeS5jLTEwMTctXFx0XFx0ICAgIGlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkge1xcbi0tXFxubW0vbWVtb3J5LmM9MTczNT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xNzQ0LVxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbm1tL21lbW9yeS5jOjE3NDU6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21lbW9yeS5jLTE3NDYtXFx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XFxuLS1cXG5tbS9tZW1vcnkuYz00NzQ3PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDc3My1cXHRcXHRcXHRyZXQgPSByZW1vdmVfZGV2aWNlX2V4Y2x1c2l2ZV9lbnRyeSh2bWYpO1xcbm1tL21lbW9yeS5jOjQ3NzQ6XFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy00Nzc1LVxcdFxcdFxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzAtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzE6XFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG5tbS9taWdyYXRlX2RldmljZS5jLTE3Mi1cXHRcXHRcXHQhKG1pZ3JhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSB8fFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNzctXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxNzg6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTE3OS1cXHRcXHRcXHR3cml0ZSA9IE1JR1JBVEVfUEZOX1dSSVRFO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDE9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjk1LVxcdFxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjI5NjpcXHRcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTI5Ny1cXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTMyNi1cXHRcXHRcXHRcXHRcXHRNSUdSQVRFX1BGTl9NSUdSQVRFO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzI3OlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMjgtXFx0XFx0XFx0XFx0bXBmbiB8PSBNSUdSQVRFX1BGTl9XUklURTtcXG4tLVxcbm1tL21wcm90ZWN0LmM9MjE0PXN0YXRpYyBsb25nIGNoYW5nZV9zb2Z0bGVhZl9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tcHJvdGVjdC5jLTIzNS1cXHRcXHRcXHRuZXdwdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShuZXdwdGUpO1xcbm1tL21wcm90ZWN0LmM6MjM2OlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XFxubW0vbXByb3RlY3QuYy0yMzctXFx0XFx0LypcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xODI9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2NhY2hlZF93cml0YWJsZShzb2Z0bGVhZl90IGVudHJ5KVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xODMte1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxODQ6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSB8fFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xODUtXFx0XFx0c29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcwLVxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjcxOlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzItXFx0XFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEyNC1cXHRcXHQvKiBIYW5kbGUgdW4tYWRkcmVzc2FibGUgWk9ORV9ERVZJQ0UgbWVtb3J5ICovXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTI1OlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTI2LVxcdFxcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xODA9Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0yNzgtXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6Mjc5OlxcdFxcdFxcdGlmIChsaWtlbHkoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSkge1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTI4MC1cXHRcXHRcXHRcXHRpZiAocHZtdy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQVk1XX01JR1JBVElPTilcXG4tLVxcbm1tL3JtYXAuYz0yNDE1PXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yNjAwLVxcbm1tL3JtYXAuYzoyNjAxOlxcdFxcdFxcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xcbm1tL3JtYXAuYy0yNjAyLVxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6MjcuOTgwMjk0Nzc1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTUyNTQyNjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQ29yZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaGFzIGJlZW4gYWx0ZXJlZC4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIG9uIGhvdyB3ZSBoYW5kbGUgYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKWAuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgbG9jayBhY3F1aXNpdGlvbiB3aXRoIGBwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7YCBhbmQgYXJlIG5vdyBleHBsaWNpdGx5IGNoZWNraW5nIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSlgLiBUaGUga2V5IGNvbmRpdGlvbmFsIHNlZW1zIHRvIGJlLCBpZiB0aGF0J3MgdHJ1ZSwgdGhlbiB3ZSBleGFtaW5lIHRoZSBgUFZNV19NSUdSQVRJT05gIGZsYWcgYW5kIGludm9rZSBgY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpYC4gVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSByZWFsbHksIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBnZWFyZWQgdG93YXJkcyBkZXZpY2UtcHJpdmF0ZSBtZW1vcnkgYW5kIGhvdyB3ZSB0cmF2ZXJzZSBwYWdlIHRhYmxlcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYm90aCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBhbmQgYENPTkZJR19aT05FX0RFVklDRWAuIEFoLCB3YWl0LCB3YXNuJ3QgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAgZGVwZW5kZW50IG9uIGBDT05GSUdfWk9ORV9ERVZJQ0VgPyBZZXMsIEkgc2hvdWxkIGdvIGJhY2sgYW5kIGRvdWJsZSBjaGVjayB0aGF0LiBMZXQncyBzZWUuLi4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gYnkgY2hlY2tpbmcgdGhlIGBtbS9LY29uZmlnYCBmaWxlIGZvciBgREVWSUNFX1BSSVZBVEVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzc1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjM5LjUzMjgzOTMwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxMDE1OTExNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX1BSSVZBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjExPWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTIxMy1cXG5tbS9LY29uZmlnOjEyMTQ6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjE1LVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzI6NDEuMzQzMDAzOTUzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3MDI5MDg1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGlzIGJlaW5nIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBrZXJuZWwuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBuYXZpZ2F0ZSBkaXJlY3RseSB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSAxMjE0LiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBhcyBpdCdzIG9mdGVuIHdoZXJlIHlvdSBmaW5kIHRoZSBjb3JlIG9wdGlvbnMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggaXMgd2hhdCBJJ20gY3VycmVudGx5IGludmVzdGlnYXRpbmcuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dHMsIGFuZCBkZWZhdWx0IHZhbHVlcyBkZWZpbmVkIGZvciB0aGUgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjQ4LjA0NTkxNTU3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjEwOlxcdFxcbjEyMTE6XFx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbjEyMTI6XFx0XFx0Ym9vbFxcbjEyMTM6XFx0XFxuMTIxNDpcXHRjb25maWcgREVWSUNFX1BSSVZBVEVcXG4xMjE1OlxcdFxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG4xMjE2OlxcdFxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG4xMjE3OlxcdFxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG4xMjE4OlxcdFxcbjEyMTk6XFx0XFx0aGVscFxcbjEyMjA6XFx0XFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxcbjEyMjE6XFx0XFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXFxuMTIyMjpcXHRcXHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cXG4xMjIzOlxcdFxcbjEyMjQ6XFx0Y29uZmlnIFZNQVBfUEZOXFxuMTIyNTpcXHRcXHRib29sXFxuMTIyNjpcXHRcXG4xMjI3OlxcdGNvbmZpZyBBUkNIX1VTRVNfSElHSF9WTUFfRkxBR1NcXG4xMjI4OlxcdFxcdGJvb2xcXG4xMjI5OlxcdGNvbmZpZyBBUkNIX0hBU19QS0VZU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozMjo0OC4wNDYwNDc0NTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkzOTI2MDM1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgbGlrZSB5b3Vyc2VsZjpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgaW1tZWRpYXRlbHkgemVyb2luZyBpbiBvbiBhIGRlcGVuZGVuY3k6IGBERVZJQ0VfUFJJVkFURWAgcmVsaWVzIG9uIGBaT05FX0RFVklDRWAuIFRoYXQncyB0aGUgY29yZSByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaGVyZS4gTXkgbmV4dCBpbW1lZGlhdGUgc3RlcD8gV2VsbCwgbmF0dXJhbGx5LCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZHJpbGxpbmcgZG93biBvbiBgWk9ORV9ERVZJQ0VgLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZGVmaW5pdGlvbiwgZnVuY3Rpb25hbGl0eSwgYW5kIHBvdGVudGlhbCBjb25zdHJhaW50cyBiZWNhdXNlLCBsaWtlIGFueSBnb29kIGVuZ2luZWVyLCBJIGtub3cgdGhhdCBhIGRlcGVuZGVuY3kgcmVsYXRpb25zaGlwIG1lYW5zIGBaT05FX0RFVklDRWAncyBiZWhhdmlvciBmdW5kYW1lbnRhbGx5IHNoYXBlcyBgREVWSUNFX1BSSVZBVEVgJ3MgYmVoYXZpb3IuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgYFpPTkVfREVWSUNFYCBzaWRlIG9mIHRoaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MTUsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMyOjUyLjk4NTMxMTM0NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxODI4OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWk9ORV9ERVZJQ0VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMTc4PWNvbmZpZyBaT05FX0RNQTMyXFxuLS1cXG5tbS9LY29uZmlnLTExODItXFxubW0vS2NvbmZpZzoxMTgzOmNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTE4NC1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozMjo1NC44MDM2MDU4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2NDkwNDg4MDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYXNwZWN0IG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGJldHRlci4gVGhlIGlzc3VlIGlzIGxpa2VseSByZWxhdGVkIHRvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSG1tLCB0aGUgYG1tL0tjb25maWdgIGZpbGUgaXMgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhcm91bmQgbGluZSAxMTgzLiBUaGF0IGFyZWEgdXN1YWxseSBkZWFscyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoYXQgc2VlbXMgcmVsZXZhbnQgdG8gd2hhdCBJJ20gdHJvdWJsZXNob290aW5nLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGRlZmluZWQgb3IgcmVmZXJlbmNlZCB0aGVyZSwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG90aGVyIHJlbGV2YW50IG9wdGlvbnMuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IEtjb25maWcgYW5kIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY5OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMzOjAyLjQ1MjY1NzI2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTgwOlxcdFxcdGRlcGVuZHMgb24gIVg4Nl8zMlxcbjExODE6XFx0XFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuMTE4MjpcXHRcXG4xMTgzOlxcdGNvbmZpZyBaT05FX0RFVklDRVxcbjExODQ6XFx0XFx0Ym9vbCBcXFwiRGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFxcXCJcXG4xMTg1OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG4xMTg2OlxcdFxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbjExODc6XFx0XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbjExODg6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbjExODk6XFx0XFxuMTE5MDpcXHRcXHRoZWxwXFxuMTE5MTpcXHRcXHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXFxuMTE5MjpcXHRcXHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXFxuMTE5MzpcXHRcXHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxcbjExOTQ6XFx0XFx0ICBcXFwiZGV2aWNlLXBoeXNpY2FsXFxcIiBhZGRyZXNzZXMgd2hpY2ggaXMgbmVlZGVkIGZvciBEQVgsIFBDSV9QMlBETUEsIGFuZFxcbjExOTU6XFx0XFx0ICBERVZJQ0VfUFJJVkFURSBmZWF0dXJlcyBhbW9uZyBvdGhlcnMuXFxuMTE5NjpcXHRcXG4xMTk3OlxcdFxcdCAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCByZWR1Y2UgdGhlIGVudHJvcHkgb2YgeDg2IEtBU0xSIG1lbW9yeVxcbjExOTg6XFx0XFx0ICByZWdpb25zLiBGb3IgZXhhbXBsZSAtIG9uIGEgNDYgYml0IHN5c3RlbSwgdGhlIGVudHJvcHkgZ29lcyBkb3duXFxuMTE5OTpcXHRcXHQgIGZyb20gMTYgYml0cyB0byAxNSBiaXRzLiBUaGUgYWN0dWFsIHJlZHVjdGlvbiBpbiBlbnRyb3B5IGRlcGVuZHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzM6MDIuNDUyNzYwMDc2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNjM0NTA0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIGludGVybmFsIHJlYXNvbmluZzpcblxuKipFbmFibGluZyBERVZJQ0VfUFJJVkFURSBhbmQgWk9ORV9ERVZJQ0U6IEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBlbmFibGluZyBgREVWSUNFX1BSSVZBVEVgIGFuZCBgWk9ORV9ERVZJQ0VgLiBTdGFuZGFyZCBwcm9jZWR1cmUsIGJ1dCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW4gb3JkZXIuIFNwZWNpZmljYWxseSwgSSByZWNhbGwgZW5jb3VudGVyaW5nIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgIGJlaW5nIGRlZmluZWQgdW5kZXIgYSBjb25kaXRpb25hbCBibG9jay4gSSBuZWVkIHRvIGJlIGNlcnRhaW4gdGhhdCB0aGUgbmVjZXNzYXJ5IHByZXJlcXVpc2l0ZXMgYXJlIG1ldC4gVGhhdCBkZWZpbml0aW9uIGlzIHdyYXBwZWQgaW4gYW4gYCNpZmAgdGhhdCBoaW5nZXMgb24gYm90aCBgQ09ORklHX1pPTkVfREVWSUNFYCAqYW5kKiBgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwPyBDb25maXJtaW5nIHRoZSBzdGF0dXMgb2YgYENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OYC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgZmxhZ3MgYW5kIGFueSBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBUaGluIEh5cGVycGFnZSAoVEhQKSBtaWdyYXRpb24gc2NoZW1lLiBMZXQncyBzZWUgaWYgdGhhdCdzIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjM5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozMzoxMS43MTYyMTM2MDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTM1MDkwOTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02NTA9Y29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02NTItXFxubW0vS2NvbmZpZzo2NTM6Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTY1NC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjMzOjEzLjUyOTcyNzg0N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzQ3MDI2MTU1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBhc3BlY3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYmV0dGVyLiBMZXQncyBzdGFydCB3aXRoIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY1My4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgcmVsYXRlZCBkZXBlbmRlbmNpZXMgcmVsZXZhbnQgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBtYXkgYmUgZGVmaW5lZCBvciB1c2VkIG5lYXIgdGhhdCBsaW5lLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgcmVsZXZhbnQgS2NvbmZpZyBzeW1ib2xzIGFyZSBkZWZpbmVkIG9yIHVzZWQuIEhvcGVmdWxseSwgdGhpcyB3aWxsIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgbG9naWMgYXJvdW5kIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzZXR0aW5ncy4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGhpbmdzIEkgY2FuIGRpZyB1cCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNDoxMC45OTk5OTI2MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjUwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjUwOlxcdGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cXG4gNjUxOlxcdFxcdGJvb2xcXG4gNjUyOlxcdFxcbiA2NTM6XFx0Y29uZmlnIEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4gNjU0OlxcdFxcdGJvb2xcXG4gNjU1OlxcdFxcbiA2NTY6XFx0Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxuIDY1NzpcXHRcXHRkZWZfYm9vbCBuXFxuIDY1ODpcXHRcXHRoZWxwXFxuIDY1OTpcXHRcXHQgIEFsbG93cyB0aGUgcGFnZWJsb2NrX29yZGVyIHZhbHVlIHRvIGJlIGR5bmFtaWMgaW5zdGVhZCBvZiBqdXN0IHN0YW5kYXJkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM0OjExLjAwMDA5NTM5NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODg0MTIyMDk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEFyY2hpdGVjdHVyZS1TcGVjaWZpYyBTZWxlY3Rpb24gb2YgYEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gLCBhbmQgaW1tZWRpYXRlbHkgSSBub3RpY2UgaXQncyBhIGJvb2xlYW4gd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBwcm9tcHQuIFRoYXQgbWVhbnMgaXQncyBvbmUgb2YgdGhvc2UgZmxhZ3MgdGhhdCdzIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IHNwZWNpZmljIGFyY2hpdGVjdHVyZXMsIG5vdCBzb21ldGhpbmcgdGhlIHVzZXIgY29uZmlndXJlcy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBhcmNoaXRlY3R1cmVzIGFyZSB1c2luZyBpdC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIHN5bWJvbCB0byBzZWUgd2hlcmUgaXQgZ2V0cyBkZWZpbmVkLiBMZXQncyBkaWcgaW50byB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgc2VlIHdoaWNoIGAuY29uZmlnYCBlbnRyaWVzIGFyZSBzZXR0aW5nIHRoaXMuIFRpbWUgdG8gZ2V0IHRoaXMgaW52ZXN0aWdhdGlvbiBtb3ZpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTU1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNDoxMy44ODQyMjAxMTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDU4ODQzNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTktXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuYXJjaC9hcm02NC9LY29uZmlnOjIwOlxcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9hcm02NC9LY29uZmlnLTIxLVxcdHNlbGVjdCBBUkNIX0hBU19DQUNIRV9MSU5FX1NJWkVcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9Mj1jb25maWcgTE9PTkdBUkNIXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE0LVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6MTU6XFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTE2LVxcdHNlbGVjdCBBUkNIX0hBU19BQ1BJX1RBQkxFX1VQR1JBREVcXHRpZiBBQ1BJXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZT0xMDk9Y29uZmlnIFBQQ19USFBcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTExNC0gICAgICAgc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZToxMTU6ICAgICAgIHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE2LVxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTEzPWNvbmZpZyBSSVNDVlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTI0LVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTIFxcdTAwM2UgMlxcbmFyY2gvcmlzY3YvS2NvbmZpZzoyNTpcXHRzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvcmlzY3YvS2NvbmZpZy0yNi1cXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcXG4tLVxcbmFyY2gvczM5MC9LY29uZmlnPTc4PWNvbmZpZyBTMzkwXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy04Ny1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDJcXG5hcmNoL3MzOTAvS2NvbmZpZzo4ODpcXHRzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gvczM5MC9LY29uZmlnLTg5LVxcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTcyLVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDIpIFxcdTAwMjZcXHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcXG5hcmNoL3g4Ni9LY29uZmlnOjczOlxcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFg4Nl82NCBcXHUwMDI2XFx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gveDg2L0tjb25maWctNzQtXFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVxcdGlmIEFDUElcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6MTUuNzkwMTExNDI2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjAyNTI2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqRW5hYmxpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGZvciBPcHRpbWFsIFBlcmZvcm1hbmNlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBoYW5kbGVkLCBhbmQgaXQgc2VlbXMgdGhlIHNlbGVjdGlvbiBpcyBkcml2ZW4gYnkgYHg4Nl82NGAgYXJjaGl0ZWN0dXJlLCBwcm92aWRlZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UsIHN0YW5kYXJkIHByYWN0aWNlIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb24gbW9kZXJuIGhhcmR3YXJlLiBHaXZlbiB0aGF0LCBlbmFibGluZyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGl0c2VsZiBsb29rcyBsaWtlIGEgdmVyeSBnb29kIGlkZWEuIFRoaXMgd2FycmFudHMgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gY29uZmlybSB0aGUgY3VycmVudCBzdGF0ZSBvZiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaW1lIHRvIHZlcmlmeSB0aGF0IHNldHRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODg4LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6MTkuMTEwMzY2ODMzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODI2OTgxNTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTc5MD1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctNzkyLVxcbm1tL0tjb25maWc6NzkzOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTc5NC1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04MTE9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTgxNi1cXG5tbS9LY29uZmlnOjgxNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04MTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04MjMtXFxubW0vS2NvbmZpZzo4MjQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTgyNS1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04MzItXFxubW0vS2NvbmZpZzo4MzM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04MzQtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg0MD1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODQ5LVxcbm1tL0tjb25maWc6ODUwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04NTEtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg1OS1cXG5tbS9LY29uZmlnOjg2MDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTg2MS1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg2Ny1cXG5tbS9LY29uZmlnOjg2ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctODY5LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzUtXFxubW0vS2NvbmZpZzo4NzY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy04NzctXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04ODU9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5NC1cXG5tbS9LY29uZmlnOjg5NTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODk2LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDMtXFxubW0vS2NvbmZpZzo5MDQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDUtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTEtXFxubW0vS2NvbmZpZzo5MTI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkxMy1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE5LVxcbm1tL0tjb25maWc6OTIwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTIxLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6MjAuOTM3MzUzODI5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzNDMwNDc3NTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRnV6emluZyoqXG5cblJpZ2h0LCBzbywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyB3ZSBhYnNvbHV0ZWx5ICpuZWVkKiB0byBiZSBpbiBwbGFjZSBmb3IgdGhpcyBmdXp6aW5nIGVmZm9ydC4gTXkgaW5pdGlhbCBjaGVja2xpc3QgaXMgY29taW5nIGRvd24gdG86IGBERVZJQ0VfUFJJVkFURWAsIGBaT05FX0RFVklDRWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaG9zZSBzZWVtIGVzc2VudGlhbCBmb3IgdGhlIGNvcmUgc2V0dXAgd2UncmUgdGFyZ2V0aW5nLlxuXG5Ob3csIGEgcXVlc3Rpb24gaXMgcG9wcGluZyB1cDogY2FuIHdlIGxldmVyYWdlIGBURVNUX0hNTWAgaGVyZT8gR2l2ZW4gaXRzIHB1cnBvc2XigJRzcGVjaWZpY2FsbHksIHByb3ZpZGluZyB0aGF0IG1vY2sgZGV2aWNlIHNldHVwIGZvciBITU0gYW5kIGRldmljZSBwcml2YXRlIG1lbW9yeSB0ZXN0aW5n4oCUaXQgKm1pZ2h0KiBiZSByZWFsbHkgdXNlZnVsIGZvciBzZXR0aW5nIHVwIGEgY29udHJvbGxlZCB0ZXN0aW5nIGVudmlyb25tZW50LCBtYWtpbmcgZnV6emluZyB0aGlzIHdob2xlIHRoaW5nIG11Y2ggbW9yZSBtYW5hZ2VhYmxlLiBXb3J0aCBhIGNsb3NlciBsb29rLCBhdCBsZWFzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MTUsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNDozNC4zNjc4MzQ4NDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDgwNzMwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRFU1RfSE1NXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9LY29uZmlnLmRlYnVnPTMzMzE9Y29uZmlnIFRFU1RfTUVNSU5JVFxcbi0tXFxubGliL0tjb25maWcuZGVidWctMzMzOC1cXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzM5OmNvbmZpZyBURVNUX0hNTVxcbmxpYi9LY29uZmlnLmRlYnVnLTMzNDAtXFx0dHJpc3RhdGUgXFxcIlRlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6MzYuMjE1OTEzNzcxWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMzQwNDgyNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgZGVidWdnaW5nIGNvbmZpZ3VyYXRpb24gb2YgdGhpcyBwcm9qZWN0LiBHaXZlbiB0aGUgbmF0dXJlIG9mIHdoYXQgSSdtIGxvb2tpbmcgZm9yLCBteSBpbnR1aXRpb24gc3VnZ2VzdHMgdGhlIGBLY29uZmlnLmRlYnVnYCBmaWxlIGlzIHRoZSByaWdodCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHplcm8gaW4gYXJvdW5kIGxpbmUgMzMzOS4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBzdGFydGluZyBwb2ludDsgb2Z0ZW4sIHRoZXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHN0cnVjdHVyZWQgd2l0aCByZWxhdGVkIG9wdGlvbnMgZ3JvdXBlZCB0b2dldGhlciwgYW5kIHRoYXQgbGluZSBtaWdodCBob3VzZSB0aGUgb3B0aW9uIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSwgb3IgYXQgbGVhc3QgYSBjcnVjaWFsIHBvaW50IG9mIHJlZmVyZW5jZSBmb3IgYSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi4gTGV0J3Mgc2VlIHdoYXQgaW5zaWdodHMgdGhhdCBzcGVjaWZpYyBhcmVhIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDE1NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM0OjQ1LjQ0OTk2NDgwOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTM0NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzMzNSxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMzNTpcXHRcXHQgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0ZXN0IGluaXRfb25fYWxsb2MgYW5kIGluaXRfb25fZnJlZSBmZWF0dXJlcy5cXG4zMzM2OlxcdFxcbjMzMzc6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbjMzMzg6XFx0XFxuMzMzOTpcXHRjb25maWcgVEVTVF9ITU1cXG4zMzQwOlxcdFxcdHRyaXN0YXRlIFxcXCJUZXN0IEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVudClcXFwiXFxuMzM0MTpcXHRcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuMzM0MjpcXHRcXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXFxuMzM0MzpcXHRcXHRzZWxlY3QgSE1NX01JUlJPUlxcbjMzNDQ6XFx0XFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbjMzNDU6XFx0XFx0aGVscFxcbjMzNDY6XFx0XFx0ICBUaGlzIGlzIGEgcHNldWRvIGRldmljZSBkcml2ZXIgc29sZWx5IGZvciB0ZXN0aW5nIEhNTS5cXG4zMzQ3OlxcdFxcdCAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgSE1NIHRlc3QgbW9kdWxlLlxcbjMzNDg6XFx0XFx0ICBEb2luZyBzbyB3aWxsIGFsbG93IHlvdSB0byBydW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdC92bS9obW0tdGVzdHMuXFxuMzM0OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6NDUuNDUwMjE5ODk3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MTEzMDE4NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZXZpY2UgUHJpdmF0ZSBNZW1vcnkgd2l0aCBURVNUX0hNTSoqXG5cbk9rYXksIHNvIGBURVNUX0hNTWAgbG9va3MgbGlrZSB0aGUgaWRlYWwgYXBwcm9hY2ggZm9yIGZ1enppbmcgZGV2aWNlIHByaXZhdGUgbWVtb3J5LCBwYXJ0aWN1bGFybHkgc2luY2Ugd2UncmUgbGFja2luZyByZWFsIGhhcmR3YXJlIGZvciB0aGlzLiBJdCdzIHRpbWUgdG8gZW5hYmxlIGl0LiBOb3csIGxldCdzIHN0cmF0ZWdpY2FsbHkgcGljayBvdXIgdGFyZ2V0cy4gTXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBXaGlsZSBpdCdzIGEgZnVuZGFtZW50YWwgTU0gZnVuY3Rpb24gYW5kIGhlYXZpbHkgdXRpbGl6ZWQsIHRoYXQgYWxzbyBwcmVzZW50cyBhIHZhc3QgYXR0YWNrIHN1cmZhY2UuXG5cblRoZSBrZXkgaXMgdG8gbmFycm93IG91ciBmb2N1cy4gQXJlIHRoZXJlIGFueSAqc3BlY2lmaWMqIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBicm9hZGVyIGFyZWEgdGhhdCBhcmUgbW9yZSBkaXJlY3RseSB0aWVkIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeSBhY2Nlc3M/IFBlcmhhcHMgc29tZSBzcGVjaWFsaXplZCBoZWxwZXIgZnVuY3Rpb24/IExldCdzIGRyaWxsIGRvd24gaW50byBgbW0vcGFnZV92bWFfbWFwcGVkLmNgIGl0c2VsZi4gV2UgbmVlZCB0byBpZGVudGlmeSBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZSB0aGF0IGFyZSBlaXRoZXIgZXhjbHVzaXZlbHkgb3IgKmhlYXZpbHkqIGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgcmVnaW9uIG1hcHBpbmcuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxncmFwaCBoZXJlIGlzIGtleSB0byBtYXhpbWl6aW5nIG91ciBmdXp6aW5nIGVmZmljaWVuY3kgYW5kIHVuY292ZXJpbmcgZGV2aWNlLXNwZWNpZmljIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBmaWxlIGlzIHRoZSBwcmltYXJ5IHNvdXJjZSBvZiB0cnV0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1OTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNDo1My4zNjE1MjQ0NDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZV92bWFfbWFwcGVkLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjYwOlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyNjE6XFx0XFx0XFx0XFx0fVxcbiAyNjI6XFx0XFx0XFx0XFx0aWYgKGxpa2VseShwbWRfdHJhbnNfaHVnZShwbWRlKSkpIHtcXG4gMjYzOlxcdFxcdFxcdFxcdFxcdGlmIChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxcbiAyNjQ6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjY1OlxcdFxcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHBtZF9wZm4ocG1kZSksIHB2bXcpKVxcbiAyNjY6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjY3OlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyNjg6XFx0XFx0XFx0XFx0fVxcbiAyNjk6XFx0XFx0XFx0XFx0LyogVEhQIHBtZCB3YXMgc3BsaXQgdW5kZXIgdXM6IGhhbmRsZSBvbiBwdGUgbGV2ZWwgKi9cXG4gMjcwOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB2bXctXFx1MDAzZXB0bCk7XFxuIDI3MTpcXHRcXHRcXHRcXHRwdm13LVxcdTAwM2VwdGwgPSBOVUxMO1xcbiAyNzI6XFx0XFx0XFx0fSBlbHNlIGlmIChwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kZSkpIHtcXG4gMjczOlxcdFxcdFxcdFxcdHNvZnRsZWFmX3QgZW50cnk7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyNzY6XFx0XFx0XFx0XFx0cG1kZSA9ICpwdm13LVxcdTAwM2VwbWQ7XFxuIDI3NzpcXHRcXHRcXHRcXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xcbiAyNzg6XFx0XFxuIDI3OTpcXHRcXHRcXHRcXHRpZiAobGlrZWx5KHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkpIHtcXG4gMjgwOlxcdFxcdFxcdFxcdFxcdGlmIChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfTUlHUkFUSU9OKVxcbiAyODE6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjgyOlxcdFxcdFxcdFxcdFxcdGlmICghY2hlY2tfcG1kKHNvZnRsZWFmX3RvX3BmbihlbnRyeSksIHB2bXcpKVxcbiAyODM6XFx0XFx0XFx0XFx0XFx0XFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcXG4gMjg0OlxcdFxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbiAyODU6XFx0XFx0XFx0XFx0fVxcbiAyODY6XFx0XFx0XFx0XFx0LyogZGV2aWNlLXByaXZhdGUgcG1kIHdhcyBzcGxpdCB1bmRlciB1czogaGFuZGxlIG9uIHB0ZSBsZXZlbCAqL1xcbiAyODc6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHZtdy1cXHUwMDNlcHRsKTtcXG4gMjg4OlxcdFxcdFxcdFxcdHB2bXctXFx1MDAzZXB0bCA9IE5VTEw7XFxuIDI4OTpcXHRcXHRcXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudChwbWRlKSkge1xcbiAyOTA6XFx0XFx0XFx0XFx0aWYgKChwdm13LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBWTVdfU1lOQykgXFx1MDAyNlxcdTAwMjZcXG4gMjkxOlxcdFxcdFxcdFxcdCAgICB0aHBfdm1hX3N1aXRhYmxlX29yZGVyKHZtYSwgcHZtdy1cXHUwMDNlYWRkcmVzcyxcXG4gMjkyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFBNRF9PUkRFUikgXFx1MDAyNlxcdTAwMjZcXG4gMjkzOlxcdFxcdFxcdFxcdCAgICAocHZtdy1cXHUwMDNlbnJfcGFnZXMgXFx1MDAzZT0gSFBBR0VfUE1EX05SKSlcXG4gMjk0OlxcdFxcdFxcdFxcdFxcdHN5bmNfd2l0aF9mb2xpb19wbWRfemFwKG1tLCBwdm13LVxcdTAwM2VwbWQpO1xcbiAyOTU6XFx0XFxuIDI5NjpcXHRcXHRcXHRcXHRzdGVwX2ZvcndhcmQocHZtdywgUE1EX1NJWkUpO1xcbiAyOTc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI5ODpcXHRcXHRcXHR9XFxuIDI5OTpcXHRcXHRcXHRpZiAoIW1hcF9wdGUocHZtdywgXFx1MDAyNnBtZGUsIFxcdTAwMjZwdGwpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM0OjUzLjM2MTYwODY1OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY4MTA3NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgYXBwZWFycyB0byBoYXZlIGJlZW4gbW9kaWZpZWQgaXMgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gVGhhdCdzIGludGVyZXN0aW5nLCBhbmQgc2luY2UgaXQncyBhIGhvdC1wYXRoIGZ1bmN0aW9uLCBpdCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4gSG93ZXZlciwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGF0IHRoZSByZWxldmFudCBjb2RlIHBhdGggd2l0aGluIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgc3BlY2lmaWNhbGx5IGZvciBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5YC4gTXkgY29uY2VybiBpcyB0aGF0IGZvY3VzaW5nIHNvbGVseSBvbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIG1pZ2h0IGJpYXMgdGhlIGZ1enppbmcgZWZmb3J0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHdpZGVyIGNvbnRleHQuXG5cblRoZXJlZm9yZSwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBjb2RlIHBhdGggdGhhdCBhY3R1YWxseSB0cmlnZ2VycyB0aGlzIHNwZWNpZmljIGNoZWNrLiBUaGUgY29yZSBmdW5jdGlvbmFsaXR5IGhlcmUsIGBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnlgLCBpcyByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgYW5kIGRldmljZS1wcml2YXRlIG1lbW9yeSwgc28gSSBuZWVkIHRvIGV4cGxvcmUgaXRzIHJlbGF0aW9uIHRvIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIExldCdzIHNlZSB3aGVyZSBleGFjdGx5IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgY2FsbGVkIGZyb20uIFVuZGVyc3RhbmRpbmcgaXRzIGNhbGwgc2l0ZXMgd2lsbCBnaXZlIG1lIHRoZSBuZWNlc3NhcnkgYnJvYWRlciBwaWN0dXJlIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlIGFjY3VyYXRlbHkgYW5kIGVuc3VyZSBteSBmdXp6aW5nIHN0cmF0ZWd5IGlzIGNvbXByZWhlbnNpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Njg3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzQ6NTguOTI5NzE4NDc0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk1NjcxMjI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2Vfdm1hX21hcHBlZF93YWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW16b25lLmg9NTIyPXN0cnVjdCBscnV2ZWM7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MjM6c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNTI0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo2OTA6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTY5MS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9NzA4PXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6NzEyOnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTcxMy1cXHRcXHR1bnNpZ25lZCBpbnQgbnIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD04NTE9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODYzLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg2NDpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsge1xcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg2NS1cXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTg3Ni0jZGVmaW5lIERFRklORV9GT0xJT19WTUFfV0FMSyhuYW1lLCBfZm9saW8sIF92bWEsIF9hZGRyZXNzLCBfZmxhZ3MpXFx0XFxcXFxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg3NzpcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgbmFtZSA9IHtcXHRcXHRcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODc4LVxcdFxcdC5wZm4gPSBmb2xpb19wZm4oX2ZvbGlvKSxcXHRcXHRcXHRcXHRcXFxcXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04ODUtXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODg2OnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04ODcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk1LS8qKlxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg5NjogKiBwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0IC0gUmVzdGFydCB0aGUgcGFnZSB0YWJsZSB3YWxrLlxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjg5NzogKiBAcHZtdzogUG9pbnRlciB0byBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsuXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtODk4LSAqXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD05MDQ9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTA1OnBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbmluY2x1ZGUvbGludXgvcm1hcC5oLTkwNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MTgtXFxuaW5jbHVkZS9saW51eC9ybWFwLmg6OTE5OmJvb2wgcGFnZV92bWFfbWFwcGVkX3dhbGsoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC05MjAtdW5zaWduZWQgbG9uZyBwYWdlX2FkZHJlc3NfaW5fdm1hKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMTc9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIxLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyMjpzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGs7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIzLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNC0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjU6ZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI2LVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjctXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI4OmV4dGVybiB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjktXFx0XFx0c3RydWN0IHBhZ2UgKm5ldyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMzM9c3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQxLSNlbHNlICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0MjpzdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQzLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQ3LVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0OS1cXHRcXHRzdHJ1Y3QgcGFnZSAqbmV3KVxcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE1OT1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb19ta29sZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0xNjMtXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjE2NDpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTE2NS1cXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jPTE5ND1zdGF0aWMgYm9vbCBkYW1vbl9mb2xpb195b3VuZ19vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL29wcy1jb21tb24uYy0yMDEtXFx0KmFjY2Vzc2VkID0gZmFsc2U7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIwMjpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIwMy1cXHRcXHRhZGRyID0gcHZtdy5hZGRyZXNzO1xcbi0tXFxubW0vZGFtb24vb3BzLWNvbW1vbi5jLTIyNi1cXHRcXHRpZiAoKmFjY2Vzc2VkKSB7XFxubW0vZGFtb24vb3BzLWNvbW1vbi5jOjIyNzpcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9kYW1vbi9vcHMtY29tbW9uLmMtMjI4LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00ODYyPWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2NS0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG5tbS9odWdlX21lbW9yeS5jOjQ4NjY6aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5tbS9odWdlX21lbW9yeS5jLTQ4NjctXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ5MzktXFxubW0vaHVnZV9tZW1vcnkuYzo0OTQwOnZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBzdHJ1Y3QgcGFnZSAqbmV3KVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0MS17XFxuLS1cXG5tbS9pbnRlcm5hbC5oPTEyMzQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZtYV9hZGRyZXNzKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMjU3LSAqL1xcbm1tL2ludGVybmFsLmg6MTI1ODpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdm1hX2FkZHJlc3NfZW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9pbnRlcm5hbC5oLTEyNTkte1xcbi0tXFxubW0va3NtLmM9MTI3NT1zdGF0aWMgaW50IHdyaXRlX3Byb3RlY3RfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2tzbS5jLTEyOTYtXFxubW0va3NtLmM6MTI5NzpcXHRpZiAoIXBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSlcXG5tbS9rc20uYy0xMjk4LVxcdFxcdGdvdG8gb3V0X21uO1xcbi0tXFxubW0va3NtLmMtMTM1OC1vdXRfdW5sb2NrOlxcbm1tL2tzbS5jOjEzNTk6XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0va3NtLmMtMTM2MC1vdXRfbW46XFxuLS1cXG5tbS9taWdyYXRlLmM9Mjc5PWJvb2wgaXNvbGF0ZV9mb2xpb190b19saXN0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjk3LVxcbm1tL21pZ3JhdGUuYzoyOTg6c3RhdGljIGJvb2wgdHJ5X3RvX21hcF91bnVzZWRfdG9femVyb3BhZ2Uoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbm1tL21pZ3JhdGUuYy0yOTktXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgcHRlX3Qgb2xkX3B0ZSwgdW5zaWduZWQgbG9uZyBpZHgpXFxuLS1cXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMzUxLVxcbm1tL21pZ3JhdGUuYzozNTI6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL21pZ3JhdGUuYy0zNTMtXFx0XFx0cm1hcF90IHJtYXBfZmxhZ3MgPSBSTUFQX05PTkU7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE5Ni1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE5NzpcXHRcXHRzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgcHZtdyA9IHtcXG5tbS9taWdyYXRlX2RldmljZS5jLTE5OC1cXHRcXHRcXHQucHRsID0gcHRsLFxcbi0tXFxubW0vcGFnZV9pZGxlLmM9NTI9c3RhdGljIGJvb2wgcGFnZV9pZGxlX2NsZWFyX3B0ZV9yZWZzX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcGFnZV9pZGxlLmMtNTgtXFxubW0vcGFnZV9pZGxlLmM6NTk6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL3BhZ2VfaWRsZS5jLTYwLVxcdFxcdGFkZHIgPSBwdm13LmFkZHJlc3M7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy05LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEwOnN0YXRpYyBpbmxpbmUgYm9vbCBub3RfZm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13KVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTExLXtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMjpcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKHB2bXcpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzLVxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE2OnN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNy1cXHRcXHQgICAgc3BpbmxvY2tfdCAqKnB0bHApXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04Ny0gKiBtYXBwZWQgYXQgdGhlIEBwdm13LVxcdTAwM2VwdGVcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo4ODogKiBAcHZtdzogcGFnZV92bWFfbWFwcGVkX3dhbGsgc3RydWN0LCBpbmNsdWRlcyBhIHBhaXIgcHRlIGFuZCBwZm4gcmFuZ2VcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy04OS0gKiBmb3IgY2hlY2tpbmdcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTkxLSAqXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6OTI6ICogcGFnZV92bWFfbWFwcGVkX3dhbGsoKSBmb3VuZCBhIHBsYWNlIHdoZXJlIHBmbiByYW5nZSBpcyAqcG90ZW50aWFsbHkqXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtOTMtICogbWFwcGVkLiBjaGVja19wdGUoKSBoYXMgdG8gdmFsaWRhdGUgdGhpcy5cXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEwNi0gKi9cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMDc6c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTA4LXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzOS0vKiBSZXR1cm5zIHRydWUgaWYgdGhlIHR3byByYW5nZXMgb3ZlcmxhcC4gIENhcmVmdWwgdG8gbm90IG92ZXJmbG93LiAqL1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE0MDpzdGF0aWMgYm9vbCBjaGVja19wbWQodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdylcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNDEte1xcbi0tXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTQ4LVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjE0OTpzdGF0aWMgdm9pZCBzdGVwX2ZvcndhcmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHNpemUpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTUwLXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE1Ni0vKipcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNTc6ICogcGFnZV92bWFfbWFwcGVkX3dhbGsgLSBjaGVjayBpZiBAcHZtdy1cXHUwMDNlcGZuIGlzIG1hcHBlZCBpbiBAcHZtdy1cXHUwMDNldm1hIGF0XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTU4LSAqIEBwdm13LVxcdTAwM2VhZGRyZXNzXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTU5OiAqIEBwdm13OiBwb2ludGVyIHRvIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2Fsay4gcGFnZSwgdm1hLCBhZGRyZXNzIGFuZCBmbGFnc1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE2MC0gKiBtdXN0IGJlIHNldC4gcG1kLCBwdGUgYW5kIHB0bCBtdXN0IGJlIE5VTEwuXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNjYtICogSWYgQHB2bXctXFx1MDAzZXBtZCBpcyBzZXQgYnV0IEBwdm13LVxcdTAwM2VwdGUgaXMgbm90LCB5b3UgaGF2ZSBmb3VuZCBQTUQtbWFwcGVkIHBhZ2VcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNjc6ICogKHVzdWFsbHkgVEhQKS4gRm9yIFBURS1tYXBwZWQgVEhQLCB5b3Ugc2hvdWxkIHJ1biBwYWdlX3ZtYV9tYXBwZWRfd2FsaygpIGluXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTY4LSAqIGEgbG9vcCB0byBmaW5kIGFsbCBQVEVzIHRoYXQgbWFwIHRoZSBUSFAuXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xNzYtICpcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNzc6ICogSWYgeW91IG5lZWQgdG8gc3RvcCB0aGUgd2FsayBiZWZvcmUgcGFnZV92bWFfbWFwcGVkX3dhbGsoKSByZXR1cm5lZCBmYWxzZSxcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxNzg6ICogdXNlIHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoKS4gSXQgd2lsbCBkbyB0aGUgaG91c2VrZWVwaW5nLlxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTE3OS0gKi9cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxODA6Ym9vbCBwYWdlX3ZtYV9tYXBwZWRfd2FsayhzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTgxLXtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTM1Nj11bnNpZ25lZCBsb25nIHBhZ2VfbWFwcGVkX2luX3ZtYShjb25zdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM1OS1cXHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNjA6XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzYxLVxcdFxcdC5wZm4gPSBwYWdlX3RvX3BmbihwYWdlKSxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTM2OS1cXHRcXHRnb3RvIG91dDtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzozNzA6XFx0aWYgKCFwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpXFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMzcxLVxcdFxcdHJldHVybiAtRUZBVUxUO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjM3MjpcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0zNzMtb3V0Olxcbi0tXFxubW0vcm1hcC5jPTkxNz1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTkyNC1cXG5tbS9ybWFwLmM6OTI1OlxcdHdoaWxlIChwYWdlX3ZtYV9tYXBwZWRfd2FsayhcXHUwMDI2cHZtdykpIHtcXG5tbS9ybWFwLmMtOTI2LVxcdFxcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuLS1cXG5tbS9ybWFwLmMtOTQ4LVxcdFxcdFxcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcXG5tbS9ybWFwLmM6OTQ5OlxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy05NTAtXFx0XFx0XFx0cHJhLVxcdTAwM2V2bV9mbGFncyB8PSBWTV9MT0NLRUQ7XFxuLS1cXG5tbS9ybWFwLmMtOTYzLVxcdFxcdFxcdHByYS1cXHUwMDNlcmVmZXJlbmNlZCA9IC0xO1xcbm1tL3JtYXAuYzo5NjQ6XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTk2NS1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9ybWFwLmMtMTAwMi1cXHRcXHRpZiAocHRlcyA9PSBwdm13Lm5yX3BhZ2VzKSB7XFxubW0vcm1hcC5jOjEwMDM6XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTEwMDQtXFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmM9MTA2ND1pbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxcbi0tXFxubW0vcm1hcC5jLTExMDItXFxubW0vcm1hcC5jOjExMDM6c3RhdGljIGludCBwYWdlX3ZtYV9ta2NsZWFuX29uZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcpXFxubW0vcm1hcC5jLTExMDQte1xcbi0tXFxubW0vcm1hcC5jLTExMTctXFxubW0vcm1hcC5jOjExMTg6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKHB2bXcpKSB7XFxubW0vcm1hcC5jLTExMTktXFx0XFx0aW50IHJldCA9IDA7XFxuLS1cXG5tbS9ybWFwLmM9MTIzMT1zdGF0aWMgYm9vbCBtYXBwaW5nX3dycHJvdGVjdF9yYW5nZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0xMjM0LVxcdHN0cnVjdCB3cnByb3RlY3RfZmlsZV9zdGF0ZSAqc3RhdGUgPSAoc3RydWN0IHdycHJvdGVjdF9maWxlX3N0YXRlICopYXJnO1xcbm1tL3JtYXAuYzoxMjM1OlxcdHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayBwdm13ID0ge1xcbm1tL3JtYXAuYy0xMjM2LVxcdFxcdC5wZm5cXHRcXHQ9IHN0YXRlLVxcdTAwM2VwZm4sXFxuLS1cXG5tbS9ybWFwLmM9MTMxMD1pbnQgcGZuX21rY2xlYW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIHBnb2ZmX3QgcGdvZmYsXFxuLS1cXG5tbS9ybWFwLmMtMTMxMi17XFxubW0vcm1hcC5jOjEzMTM6XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxubW0vcm1hcC5jLTEzMTQtXFx0XFx0LnBmblxcdFxcdD0gcGZuLFxcbi0tXFxubW0vcm1hcC5jPTE5NDQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vcm1hcC5jOjE5NDU6XFx0XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbm1tL3JtYXAuYy0xOTQ2LVxcdFxcdFxcdGVudW0gdHR1X2ZsYWdzIGZsYWdzLCBwdGVfdCBwdGUpXFxuLS1cXG5tbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcm1hcC5jLTIwMzEtXFxubW0vcm1hcC5jOjIwMzI6XFx0d2hpbGUgKHBhZ2Vfdm1hX21hcHBlZF93YWxrKFxcdTAwMjZwdm13KSkge1xcbm1tL3JtYXAuYy0yMDMzLVxcdFxcdG5yX3BhZ2VzID0gMTtcXG4tLVxcbm1tL3JtYXAuYy0yMDg5LVxcdFxcdFxcdFxcdGZsYWdzIFxcdTAwMjY9IH5UVFVfU1BMSVRfSFVHRV9QTUQ7XFxubW0vcm1hcC5jOjIwOTA6XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfcmVzdGFydChcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTIwOTEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9ybWFwLmMtMjM2My13YWxrX2RvbmU6XFxubW0vcm1hcC5jOjIzNjQ6XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTIzNjUtXFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmM9MjQxNT1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjQ2MC1cXG5tbS9ybWFwLmM6MjQ2MTpcXHR3aGlsZSAocGFnZV92bWFfbWFwcGVkX3dhbGsoXFx1MDAyNnB2bXcpKSB7XFxubW0vcm1hcC5jLTI0NjItXFx0XFx0LyogUE1ELW1hcHBlZCBUSFAgbWlncmF0aW9uIGVudHJ5ICovXFxuLS1cXG5tbS9ybWFwLmMtMjQ3Ni1cXHRcXHRcXHRcXHRmbGFncyBcXHUwMDI2PSB+VFRVX1NQTElUX0hVR0VfUE1EO1xcbm1tL3JtYXAuYzoyNDc3OlxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNDc4LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vcm1hcC5jLTI0OTMtXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxubW0vcm1hcC5jOjI0OTQ6XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI0OTUtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmMtMjU0OS1cXHRcXHRcXHRcXHRpZiAoIWh1Z2V0bGJfdm1hX3RyeWxvY2tfd3JpdGUodm1hKSkge1xcbm1tL3JtYXAuYzoyNTUwOlxcdFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNTUxLVxcdFxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbi0tXFxubW0vcm1hcC5jLTI1NjMtXFx0XFx0XFx0XFx0XFx0ICovXFxubW0vcm1hcC5jOjI1NjQ6XFx0XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI1NjUtXFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS9ybWFwLmMtMjY1MC1cXHRcXHRcXHRcXHRyZXQgPSBmYWxzZTtcXG5tbS9ybWFwLmM6MjY1MTpcXHRcXHRcXHRcXHRwYWdlX3ZtYV9tYXBwZWRfd2Fsa19kb25lKFxcdTAwMjZwdm13KTtcXG5tbS9ybWFwLmMtMjY1Mi1cXHRcXHRcXHRcXHRicmVhaztcXG4tLVxcbm1tL3JtYXAuYy0yNjYxLVxcdFxcdFxcdFxcdFxcdHJldCA9IGZhbHNlO1xcbm1tL3JtYXAuYzoyNjYyOlxcdFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXFx1MDAyNnB2bXcpO1xcbm1tL3JtYXAuYy0yNjYzLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vcm1hcC5jLTI2NjgtXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxubW0vcm1hcC5jOjI2Njk6XFx0XFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxubW0vcm1hcC5jLTI2NzAtXFx0XFx0XFx0XFx0YnJlYWs7XFxuLS1cXG5tbS92bXNjYW4uYz00MTM0PXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00MTgwLSAqL1xcbm1tL3Ztc2Nhbi5jOjQxODE6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxcbm1tL3Ztc2Nhbi5jLTQxODIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTowMC43MjU0MDA4NVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MzkxNTA2NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVk1BIFdhbGsgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIGhhbmRsaW5nIGRldmljZSBwcml2YXRlIG1lbW9yeSBtaWdyYXRpb24gYW5kIHVubWFwcGluZywgYW5kIGl0IGxvb2tzIGxpa2UgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpcyB0aGUga2V5IGZ1bmN0aW9uIGJlaW5nIHVzZWQgYWNyb3NzIHNldmVyYWwga2V5IGFyZWFzOiBgdHJ5X3RvX21pZ3JhdGVfb25lYCwgYHRyeV90b191bm1hcF9vbmVgLCBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLCBgZGFtb25fZm9saW9feW91bmdfb25lYCwgYW5kIGV2ZW4gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYC4gVGhhdCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBmdW5jdGlvbnMgbW9zdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBtaWdyYXRpb24gcHJvY2VzcyBpdHNlbGYuXG5cbkdpdmVuIHRoZSBjb250ZXh0IG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBhbmQgaXRzIG1hbmlwdWxhdGlvbiwgYm90aCBgdHJ5X3RvX21pZ3JhdGVfb25lYCBhbmQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBhcHBlYXIgdG8gYmUgc3Ryb25nIGNhbmRpZGF0ZXMgZm9yIGRlZXBlciBpbnNwZWN0aW9uLiBUaGV5IHNlZW0gbGlrZSB0aGV5J2QgYmUgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIHRoaXMgcHJvYmxlbS5cblxuSSB0aGluayBJJ2xsIHN0YXJ0IHdpdGggYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCwgbWFpbmx5IGJlY2F1c2UgaXQgc291bmRzIGNsb3NlciB0byBhY3R1YWxseSBjb2xsZWN0aW5nIHRoZSByZWxldmFudCBkYXRhIGZvciB0aGUgbWlncmF0aW9uLiBMZXQncyBzZWUuLi4gSSdsbCBwdWxsIHVwIGBtbS9taWdyYXRlX2RldmljZS5jYCBhbmQgZGlnIGludG8gdGhhdCBmdW5jdGlvbi4gU2VlIHdoYXQgaXQncyByZWFsbHkgZG9pbmcgdW5kZXIgdGhlIGhvb2Qgd2l0aCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ1MywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTowOC4xMTY5MTAzNzFaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTU4ODA5NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfY29sbGVjdF9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNDAtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyNDE6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTI0Mi1cXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz00ODg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBtaWdyYXRlX3ZtYV93YWxrX29wcyA9IHtcXG5tbS9taWdyYXRlX2RldmljZS5jOjQ4OTpcXHQucG1kX2VudHJ5XFx0XFx0PSBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTQ5MC1cXHQucHRlX2hvbGVcXHRcXHQ9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaG9sZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6MTAuMTMyNzk2NzMzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODI0MzE5NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFZNQSBNaWdyYXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIEkga25vdyB0aGF0IGZ1bmN0aW9uJ3MgY3J1Y2lhbCBmb3IgdGhlIHBhZ2UgbWlncmF0aW9uIHByb2Nlc3MsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgZG9lcyBpdCBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmU/IFJpZ2h0LCB0aGUgY29kZSdzIGNhbGxpbmcgaXQgdGhyb3VnaCBgd2Fsa19wYWdlX3JhbmdlYCB3aXRoaW4gYG1pZ3JhdGVfdm1hX3NldHVwYC4gVGhhdOKAmXMgbXkga2V5IGVudHJ5IHBvaW50LiBUbyBmdWxseSBncmFzcCB0aGlzLCBJIG5lZWQgdG8gem9vbSBvdXQgYSBiaXQuIFRpbWUgdG8gY2hlY2sgYG1pZ3JhdGVfdm1hX3NldHVwYC4gSSBuZWVkIHRvIHJldmlldyBpdHMgbG9naWMgdG8gc2VlIGhvdyBpdCBzZXRzIHRoZSBzdGFnZSBmb3IgdGhlIFBNRCBjb2xsZWN0aW9uLCBhbmQgdGhlIGNvbmRpdGlvbnMgaW4gd2hpY2ggaXQgaW52b2tlcyB0aGUgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgYG1pZ3JhdGVfdm1hX3NldHVwYCB3aWxsIGlsbHVtaW5hdGUgaG93IGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAgaXMgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwODYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNToxNC4zMTUyMzE1MTRaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4Nzk3NTQwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfc2V0dXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0PTI2ND11c2UgaGFyZHdhcmUgRE1BIG9yIGRldmljZSBzcGVjaWZpYyBsb2FkL3N0b3JlIGluc3RydWN0aW9ucyB0byBtaWdyYXRlIGRhdGEuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjI2NTpUaGUgbWlncmF0ZV92bWFfc2V0dXAoKSwgbWlncmF0ZV92bWFfcGFnZXMoKSwgYW5kIG1pZ3JhdGVfdm1hX2ZpbmFsaXplKClcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMjY2LWZ1bmN0aW9ucyBhcmUgZGVzaWduZWQgdG8gbWFrZSBkcml2ZXJzIGVhc2llciB0byB3cml0ZSBhbmQgdG8gY2VudHJhbGl6ZSBjb21tb25cXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdD0yOTc9YmV0d2VlbiBkZXZpY2UgZHJpdmVyIHNwZWNpZmljIGNvZGUgYW5kIHNoYXJlZCBjb21tb24gY29kZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDEtICAgVGhlIGRldmljZSBkcml2ZXIgaGFzIHRvIHBhc3MgYSBgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGBgIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMwMjogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNvIHRoZSBtbWFwX3JlYWRfbG9jaygpIG9yIG1tYXBfd3JpdGVfbG9jaygpIG5lZWRzIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMwMy0gICBiZSBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIG1pZ3JhdGlvbi5cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA0LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMDU6Mi4gYGBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpYGBcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzA2LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDctICAgVGhlIGRldmljZSBkcml2ZXIgaW5pdGlhbGl6ZXMgdGhlIGBgc3RydWN0IG1pZ3JhdGVfdm1hYGAgZmllbGRzIGFuZCBwYXNzZXNcXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3Q6MzA4OiAgIHRoZSBwb2ludGVyIHRvIG1pZ3JhdGVfdm1hX3NldHVwKCkuIFRoZSBgYGFyZ3MtXFx1MDAzZWZsYWdzYGAgZmllbGQgaXMgdXNlZCB0b1xcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMDktICAgZmlsdGVyIHdoaWNoIHNvdXJjZSBwYWdlcyBzaG91bGQgYmUgbWlncmF0ZWQuIEZvciBleGFtcGxlLCBzZXR0aW5nXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzE3LVxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdDozMTg6ICAgT25lIG9mIHRoZSBmaXJzdCBzdGVwcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIGRvZXMgaXMgdG8gaW52YWxpZGF0ZSBvdGhlclxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMTktICAgZGV2aWNlJ3MgTU1VcyB3aXRoIHRoZSBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KCgpYGAgYW5kXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzI0LSAgIGBgTU1VX05PVElGWV9NSUdSQVRFYGAgYW5kIHRoZSBgYG93bmVyYGAgZmllbGQgc2V0IHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMyNTogICB0aGUgYGBhcmdzLVxcdTAwM2VwZ21hcF9vd25lcmBgIGZpZWxkIHBhc3NlZCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpLiBUaGlzXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LTMyNi0gICBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gc2tpcCB0aGUgaW52YWxpZGF0aW9uIGNhbGxiYWNrIGFuZCBvbmx5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2htbS5yc3QtMzM3LSAgIGluc2VydGVkIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBQVEUuXFxuRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0OjMzODogICBtaWdyYXRlX3ZtYV9zZXR1cCgpIGFsc28gY2xlYXJzIHRoZSBgYGFyZ3MtXFx1MDAzZWRzdGBgIGFycmF5LlxcbkRvY3VtZW50YXRpb24vbW0vaG1tLnJzdC0zMzktXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0PTIxMj1ITU0g5YiH5o2i5Yiw55u05o6l5L2/55SoIHN0cnVjdCBwYWdlIOeUqOS6juiuvuWkh+WGheWtmO+8jOi/meS9v+W+l+Wkp+WkmuaVsOWGheaguOS7o+eggei3r+W+hOS4jeefpemBk+W3ruW8guOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yMTgt55Sx5LqOIENQVSDml6Dms5Xnm7TmjqXorr/pl67orr7lpIflhoXlrZjvvIzlm6DmraTorr7lpIfpqbHliqjnqIvluo/lv4Xpobvkvb/nlKjnoazku7YgRE1BIOaIluiuvuWkh+eJueWumueahOWKoOi9vS/lrZhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjIxOTrlgqjmjIfku6TmnaXov4Hnp7vmlbDmja7jgIJtaWdyYXRlX3ZtYV9zZXR1cCgp44CBbWlncmF0ZV92bWFfcGFnZXMoKSDlkoxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTIyMC1taWdyYXRlX3ZtYV9maW5hbGl6ZSgpIOWHveaVsOaXqOWcqOS9v+mpseWKqOeoi+W6j+abtOaYk+S6jue8luWGmeW5tumbhuS4rei3qOmpseWKqOeoi+W6j+eahOmAmueUqOS7o+eggeOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdD0yNDM9ZGV2bV9tZW11bm1hcF9wYWdlcygpIOWSjCBkZXZtX3JlbGVhc2VfbWVtX3JlZ2lvbigpIOW9k+i1hOa6kOWPr+S7pee7keWumuWIsCBgYHN0cnVjdCBkZXZpY2VgYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjQ5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjUwOiAgIOiuvuWkh+mpseWKqOeoi+W6j+W/hemhu+WwhiBgYHN0cnVjdCB2bV9hcmVhX3N0cnVjdGBgIOS8oOmAkue7mW1pZ3JhdGVfdm1hX3NldHVwKCnvvIxcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1MS0gICDlm6DmraTpnIDopoHlnKjov4Hnp7vmnJ/pl7Tkv53nlZkgbW1hcF9yZWFkX2xvY2soKSDmiJYgbW1hcF93cml0ZV9sb2NrKCnjgIJcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI1Mi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI1MzoyLiBgYG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU0LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjU1LSAgIOiuvuWkh+mpseWKqOWIneWni+WMluS6hiBgYHN0cnVjdCBtaWdyYXRlX3ZtYWBgIOeahOWtl+aute+8jOW5tuWwhuivpeaMh+mSiOS8oOmAkue7mVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3Q6MjU2OiAgIG1pZ3JhdGVfdm1hX3NldHVwKCnjgIJgYGFyZ3MtXFx1MDAzZWZsYWdzYGAg5a2X5q615piv55So5p2l6L+H5ruk5ZOq5Lqb5rqQ6aG16Z2i5bqU6K+l6KKr6L+B56e744CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNTctICAg5L6L5aaC77yM6K6+572uIGBgTUlHUkFURV9WTUFfU0VMRUNUX1NZU1RFTWBgIOWwhuWPqui/geenu+ezu+e7n+WGheWtmO+8jOiuvue9rlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjM6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeaJgOWBmueahOesrOS4gOatpeaYr+eUqCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KClgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjY0LSAgIOWSjCBgYG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCgpYGAg6LCD55So5p2l6YGN5Y6G6K6+5aSH5ZGo5Zu055qE6aG16KGo77yM5L2/XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI2Ny0gICDlhbYgYGBldmVudGBgIOWtl+auteiuvue9ruS4uk1NVV9OT1RJRllfTUlHUkFURe+8jCBgYG93bmVyYGAg5a2X5q616K6+572u5Li65Lyg6YCS57uZXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdDoyNjg6ICAgbWlncmF0ZV92bWFfc2V0dXAoKeeahCBgYGFyZ3MtXFx1MDAzZXBnbWFwX293bmVyYGAg5a2X5q6144CC6L+Z5YWB6K646K6+5aSH6amx5Yqo6Lez6L+H5pegXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaG1tLnJzdC0yNjktICAg5pWI5YyW5Zue6LCD77yM5Y+q5peg5pWI5YyW6YKj5Lqb5a6e6ZmF5q2j5Zyo6L+B56e755qE6K6+5aSH56eB5pyJTU1V5pig5bCE44CC6L+Z5LiA54K55bCG5Zyo5LiL5LiA6IqC6K+m57uG6Kej6YeK44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0LTI3NS0gICBgYGxvY2tfcGFnZSgpYGDplIHlrprvvIzkuI5MUlXpmpTnprvvvIjlpoLmnpzns7vnu5/lhoXlrZjlkozorr7lpIfnp4HmnInpobXkuI3lnKhMUlXkuIrvvInvvIzku47ov5tcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9obW0ucnN0OjI3NjogICDnqIvkuK3lj5bmtojmmKDlsITvvIzlubbmj5LlhaXkuIDkuKrnibnmrornmoTov4Hnp7tQVEXmnaXku6Pmm7/ljp/mnaXnmoRQVEXjgIIgbWlncmF0ZV92bWFfc2V0dXAoKVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2htbS5yc3QtMjc3LSAgIOi/mOa4hemZpOS6hiBgYGFyZ3MtXFx1MDAzZWRzdGBgIOaVsOe7hOOAglxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz01MTM9c3RhdGljIGludCBfX2t2bXBwY19zdm1fcGFnZV9vdXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTUzOC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjUzOTpcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTU0MC1cXHRpZiAocmV0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfdXZtZW0uYz03NDA9c3RhdGljIGludCBrdm1wcGNfc3ZtX3BhZ2VfaW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2MC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jOjc2MTpcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlnKTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl91dm1lbS5jLTc2Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYz0zOTM9c3ZtX21pZ3JhdGVfdm1hX3RvX3ZyYW0oc3RydWN0IGtmZF9ub2RlICpub2RlLCBzdHJ1Y3Qgc3ZtX3JhbmdlICpwcmFuZ2UsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTQzMC1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jOjQzMTpcXHRyID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNm1pZ3JhdGUpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9taWdyYXRlLmMtNDMyLVxcdGlmIChyKSB7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jPTY5Mj1zdm1fbWlncmF0ZV92bWFfdG9fcmFtKHN0cnVjdCBrZmRfbm9kZSAqbm9kZSwgc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYy03MzMtXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21pZ3JhdGUuYzo3MzQ6XFx0ciA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZtaWdyYXRlKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbWlncmF0ZS5jLTczNS1cXHRpZiAocikge1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTM1MTU9c3ZtX3JhbmdlX2Jlc3RfcHJlZmV0Y2hfbG9jYXRpb24oc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODItICogYW5kIHJlc3RvcmUgd29yazpcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MzU4MzogKiAxLiBtaWdyYXRlX3ZtYV9zZXR1cCBpbnZhbGlkYXRlIHBhZ2VzLCBNTVUgbm90aWZpZXIgY2FsbGJhY2sgc3ZtX3JhbmdlX2V2aWN0XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM1ODQtICogICAgc3RvcHMgYWxsIHF1ZXVlcywgc2NoZWR1bGUgcmVzdG9yZSB3b3JrXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz01MTc9aW50IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg0LVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jOjU4NTpcXHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtNTg2LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX3BhZ2VtYXAuYz0xMTEzPXN0YXRpYyBpbnQgX19kcm1fcGFnZW1hcF9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZhcyxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fcGFnZW1hcC5jLTExNjYtXFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmM6MTE2NzpcXHRlcnIgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2bWlncmF0ZSk7XFxuZHJpdmVycy9ncHUvZHJtL2RybV9wYWdlbWFwLmMtMTE2OC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmM9MTgzPXN0YXRpYyB2bV9mYXVsdF90IG5vdXZlYXVfZG1lbV9taWdyYXRlX3RvX3JhbShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jLTIzNS1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYzoyMzY6XFx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKSBcXHUwMDNjIDApXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtMjM3LVxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtZW0uYz04MjI9bm91dmVhdV9kbWVtX21pZ3JhdGVfdm1hKHN0cnVjdCBub3V2ZWF1X2RybSAqZHJtLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODcxLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1lbS5jOjg3MjpcXHRcXHRyZXQgPSBtaWdyYXRlX3ZtYV9zZXR1cChcXHUwMDI2YXJncyk7XFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWVtLmMtODczLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaD0xNTg9c3RydWN0IG1pZ3JhdGVfdm1hIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE2NC1cXHQgKiBUaGUgc3JjIGFycmF5IG11c3Qgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBjYWxsZXIgYWZ0ZXJcXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxNjU6XFx0ICogbWlncmF0ZV92bWFfc2V0dXAoKSwgYW5kIG11c3Qgbm90IGNoYW5nZSB0aGUgZHN0IGFycmF5IGFmdGVyXFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTY2LVxcdCAqIG1pZ3JhdGVfdm1hX3BhZ2VzKCkgcmV0dXJucy5cXG4tLVxcbmluY2x1ZGUvbGludXgvbWlncmF0ZS5oLTE5Mi1cXG5pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaDoxOTM6aW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncyk7XFxuaW5jbHVkZS9saW51eC9taWdyYXRlLmgtMTk0LXZvaWQgbWlncmF0ZV92bWFfcGFnZXMoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTE2NC1cXG5saWIvdGVzdF9obW0uYzoxMTY1OlxcdFxcdHJldCA9IG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKTtcXG5saWIvdGVzdF9obW0uYy0xMTY2LVxcdFxcdGlmIChyZXQpXFxuLS1cXG5saWIvdGVzdF9obW0uYz0xMTg5PXN0YXRpYyBpbnQgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEyNDItXFx0XFx0XFx0XFx0TUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EO1xcbmxpYi90ZXN0X2htbS5jOjEyNDM6XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpO1xcbmxpYi90ZXN0X2htbS5jLTEyNDQtXFx0XFx0aWYgKHJldClcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2NTM9c3RhdGljIHZtX2ZhdWx0X3QgZG1pcnJvcl9kZXZtZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNzA1LVxcdC8qXFxubGliL3Rlc3RfaG1tLmM6MTcwNjpcXHQgKiBJbiBwcmFjdGljZSBtaWdyYXRlX3ZtYV9zZXR1cCgpIHNob3VsZCBuZXZlciBmYWlsIHVubGVzcyB0aGVcXG5saWIvdGVzdF9obW0uYy0xNzA3LVxcdCAqIHRlc3QgaXMgd3JvbmcgYXMgaXQganVzdCB0ZXN0cyBzb21lIHN0YXRpYyBWTUEgcHJvcGVydGllcy5cXG5saWIvdGVzdF9obW0uYy0xNzA4LVxcdCAqL1xcbmxpYi90ZXN0X2htbS5jOjE3MDk6XFx0aWYgKG1pZ3JhdGVfdm1hX3NldHVwKFxcdTAwMjZhcmdzKSkge1xcbmxpYi90ZXN0X2htbS5jLTE3MTAtXFx0XFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz02NTk9c3RhdGljIHZvaWQgbWlncmF0ZV92bWFfdW5tYXAoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy02NjUtLyoqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo2NjY6ICogbWlncmF0ZV92bWFfc2V0dXAoKSAtIHByZXBhcmUgdG8gbWlncmF0ZSBhIHJhbmdlIG9mIG1lbW9yeVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNjY3LSAqIEBhcmdzOiBjb250YWlucyB0aGUgdm1hLCBzdGFydCwgYW5kIHBmbnMgYXJyYXlzIGZvciB0aGUgbWlncmF0aW9uXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTcyOC0gKi9cXG5tbS9taWdyYXRlX2RldmljZS5jOjcyOTppbnQgbWlncmF0ZV92bWFfc2V0dXAoc3RydWN0IG1pZ3JhdGVfdm1hICphcmdzKVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzMwLXtcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzY4LX1cXG5tbS9taWdyYXRlX2RldmljZS5jOjc2OTpFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTc3MC1cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9MTM1NT1zdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX2RldmljZV9wZm5fbG9jayh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3Ni0gKlxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM3NzogKiBtaWdyYXRlX3ZtYV9zZXR1cCgpIGlzIHNpbWlsYXIgaW4gY29uY2VwdCB0byBtaWdyYXRlX3ZtYV9zZXR1cCgpIGV4Y2VwdCB0aGF0XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzc4LSAqIGluc3RlYWQgb2YgbG9va2luZyB1cCBwYWdlcyBiYXNlZCBvbiB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZ3MgYSByYW5nZSBvZlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMzg0LSAqXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMzg1OiAqIExpa2UgbWlncmF0ZV92bWFfc2V0dXAoKSB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSBhIHJlZmVyZW5jZSBhbmQgbG9jayBhbnlcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzODYtICogbWlncmF0aW5nIHBhZ2VzIHRoYXQgYXJlbid0IGZyZWUgYmVmb3JlIHVubWFwcGluZyB0aGVtLiBEcml2ZXJzIG1heSB0aGVuXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTE0NTU9aW50IG1pZ3JhdGVfZGV2aWNlX2NvaGVyZW50X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE0NjctXFx0ICogdGhlIHNvdXJjZSBmb2xpby4gU28gY2FsbCBtaWdyYXRlX3ZtYV91bm1hcCgpIGRpcmVjdGx5IHRvIHVubWFwIHRoZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTQ2ODpcXHQgKiBmb2xpbyBhcyBtaWdyYXRlX3ZtYV9zZXR1cCgpIHdpbGwgZmFpbCBpZiBhcmdzLnZtYSA9PSBOVUxMLlxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTQ2OS1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6MTYuMTk0OTkxNjI5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NzQ3Mzk1OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWVtb3J5IE1pZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gaG93IGRldmljZSBtZW1vcnkgbWlncmF0aW9uIGlzIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBsaWIvdGVzdF9obW0uY2AgdGVzdGluZyBmcmFtZXdvcmsuIEkgc2VlIHRoYXQgdGhlIGBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtYCBhbmQgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIGZ1bmN0aW9ucyBhcmUgZW1wbG95aW5nIGBtaWdyYXRlX3ZtYV9zZXR1cGAuIFRoYXQgbWFrZXMgc2Vuc2UuIGBtaWdyYXRlX3ZtYV9zZXR1cGAsIGluIHR1cm4sIGlzIGNhbGxpbmcgYHdhbGtfcGFnZV9yYW5nZWAgd2l0aCBgbWlncmF0ZV92bWFfd2Fsa19vcHNgLCB3aGljaCB0aGVuIHV0aWxpemVzIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZGAuIEhvbGQgb24gYSBzZWNvbmQuLi4gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kYCBpc24ndCB1c2luZyBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBUaGF0J3MgYSBiaXQgdW5leHBlY3RlZC4gSSB3YXMgZXhwZWN0aW5nIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AsIGVzcGVjaWFsbHkgaW4gdGhpcyBhcmVhIG9mIGRldmljZSBwcml2YXRlIG1lbW9yeS5cblxuVGhpcyByYWlzZXMgYSBrZXkgcXVlc3Rpb24uIFdoZXJlICppcyogYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIGRldmljZSBwcml2YXRlIG1lbW9yeSBtYW5hZ2VtZW50PyBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYWdhaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBtYXBwaW5nIGFuZCB3YWxraW5nIHN0cmF0ZWd5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjE5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNToyMy4wNjk3MzQwMloiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3OTUyMjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhZ2Vfdm1hX21hcHBlZF93YWxrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21pZ3JhdGVfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTYtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxOTc6XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xOTgtXFx0XFx0XFx0LnB0bCA9IHB0bCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6MjMuMjM3NjkyODE3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzg4MDc0ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIE1pZ3JhdGlvbiBvZiBIdWdlIFBNRHMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgLiBJbW1lZGlhdGVseSwgaXQgc2VlbXMgdG8gYmUgbGVhbmluZyBvbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiBUaGF0J3Mgbm90IGVudGlyZWx5IHN1cnByaXNpbmcsIGdpdmVuIHRoZSBuZWVkIHRvIHRyYXZlcnNlIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhIGFuZCBpZGVudGlmeSB0aGUgcmVsZXZhbnQgcGFnZXMuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLnRoaXMgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGZ1bmN0aW9uIGlzIGRlZmluZWQgd2l0aGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhhdCBwbGFjZXMgaXQgZmlybWx5IGluIHRoZSBkZXZpY2UgbWlncmF0aW9uIHN1YnN5c3RlbSwgd2hpY2ggaXMgYW4gaW1wb3J0YW50IGJpdCBvZiBjb250ZXh0IHRvIGtlZXAgaW4gbWluZCBmb3IgaG93IHRoZXNlIGh1Z2UgUE1EcyBhcmUgYWN0dWFsbHkgbWlncmF0ZWQgLSBpZiB0aGUgZ29hbCBpcyB0byBzaGlmdCB0aGVzZSB0byBhIGRpZmZlcmVudCBkZXZpY2UsIHRoZW4gdGhhdCBpcyBhbiBpbXBvcnRhbnQgcG9pbnQgb2YgdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3MzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTozMC4zNzY1MDMyODJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQ3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxODA6XFx0XFx0fSBlbHNlIHtcXG4gMTgxOlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDE4MjpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gMTgzOlxcdFxcdH1cXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gMTg2OlxcdFxcdGlmIChmb2xpbyAhPSBmYXVsdF9mb2xpbyBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghZm9saW9fdHJ5bG9jayhmb2xpbykpKSB7XFxuIDE4NzpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiAxODg6XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gMTg5OlxcdFxcdFxcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XFxuIDE5MDpcXHRcXHR9XFxuIDE5MTpcXHRcXG4gMTkyOlxcdFxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2XFxuIDE5MzpcXHRcXHRcXHQobWlncmF0ZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfQ09NUE9VTkQpIFxcdTAwMjZcXHUwMDI2XFxuIDE5NDpcXHRcXHRcXHQoSVNfQUxJR05FRChzdGFydCwgSFBBR0VfUE1EX1NJWkUpIFxcdTAwMjZcXHUwMDI2XFxuIDE5NTpcXHRcXHRcXHQgSVNfQUxJR05FRChlbmQsIEhQQUdFX1BNRF9TSVpFKSkpIHtcXG4gMTk2OlxcdFxcbiAxOTc6XFx0XFx0XFx0c3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrIHB2bXcgPSB7XFxuIDE5ODpcXHRcXHRcXHRcXHQucHRsID0gcHRsLFxcbiAxOTk6XFx0XFx0XFx0XFx0LmFkZHJlc3MgPSBzdGFydCxcXG4gMjAwOlxcdFxcdFxcdFxcdC5wbWQgPSBwbWRwLFxcbiAyMDE6XFx0XFx0XFx0XFx0LnZtYSA9IHdhbGstXFx1MDAzZXZtYSxcXG4gMjAyOlxcdFxcdFxcdH07XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19wZm4oZm9saW9fcGFnZShmb2xpbywgMCkpO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VzcmNbbWlncmF0ZS1cXHUwMDNlbnBhZ2VzXSA9IG1pZ3JhdGVfcGZuKHBmbikgfCB3cml0ZVxcbiAyMDc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0fCBNSUdSQVRFX1BGTl9NSUdSQVRFXFxuIDIwODpcXHRcXHRcXHRcXHRcXHRcXHRcXHR8IE1JR1JBVEVfUEZOX0NPTVBPVU5EO1xcbiAyMDk6XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlZHN0W21pZ3JhdGUtXFx1MDAzZW5wYWdlcysrXSA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM1OjMwLjM3NjU5OTMxMloiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTEwMTA2NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4ga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG4qKkNsYXJpZnlpbmcgdGhlIFJvbGUgb2YgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCoqXG5cbkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZS4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdhcyAqY2FsbGVkKiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBjb2RlIGJsb2NrLiBCdXQgaXQgYXBwZWFycyBJJ20gbWlzdGFrZW4uIEl0IHNlZW1zIGxpa2UgaXQncyBiZWluZyAqaW5pdGlhbGl6ZWQqIGFuZCB0aGVuICpwYXNzZWQqIGFzIGFuIGFyZ3VtZW50IHRvIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAuIFRoYXQncyBhIGNydWNpYWwgZGlzdGluY3Rpb24uIEkgbmVlZCB0byByZXZpZXcgaG93IGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgYWN0dWFsbHkgKnVzZXMqIHRoaXMgd2FsayBzdHJ1Y3R1cmUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGFuZCB3aGF0IGltcGFjdCBpdCBoYXMuIFRoaXMgaXMgd2hlcmUgSSBjYW4gZWFzaWx5IG1pc3Mgc29tZXRoaW5nLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgSSdtIGNvcnJlY3QgaW4gdGhhdCBhc3Nlc3NtZW50IG9mIHRoaXMgY29kZS4gSSBuZWVkIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGl0cyByb2xlIGluIHRoaXMgbWVtb3J5IG1pZ3JhdGlvbiBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIHRoZSBhcmd1bWVudHMgaW4gZnVuY3Rpb24gY2FsbHMgaXMgcGFyYW1vdW50IGluIGtlcm5lbCB3b3JrLCBzbyBJJ20gZ2xhZCBJIGNhdWdodCB0aGF0LiBUaGF0J3MgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBkZXRhaWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NDgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTozNC40ODY3MDk0NzVaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTg2OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlY3BhZ2VzKys7XFxuIDIxMTpcXHRcXHRcXHRyZXQgPSBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShcXHUwMDI2cHZtdywgZm9saW9fcGFnZShmb2xpbywgMCkpO1xcbiAyMTI6XFx0XFx0XFx0aWYgKHJldCkge1xcbiAyMTM6XFx0XFx0XFx0XFx0bWlncmF0ZS1cXHUwMDNlbnBhZ2VzLS07XFxuIDIxNDpcXHRcXHRcXHRcXHRtaWdyYXRlLVxcdTAwM2VjcGFnZXMtLTtcXG4gMjE1OlxcdFxcdFxcdFxcdG1pZ3JhdGUtXFx1MDAzZXNyY1ttaWdyYXRlLVxcdTAwM2VucGFnZXNdID0gMDtcXG4gMjE2OlxcdFxcdFxcdFxcdG1pZ3JhdGUtXFx1MDAzZWRzdFttaWdyYXRlLVxcdTAwM2VucGFnZXNdID0gMDtcXG4gMjE3OlxcdFxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuIDIxODpcXHRcXHRcXHR9XFxuIDIxOTpcXHRcXHRcXHRtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQgKyBQQUdFX1NJWkUsIGVuZCwgd2Fsayk7XFxuIDIyMDpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiAyMjE6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDIyMjpcXHRcXHR9XFxuIDIyMzpcXHRcXG4gMjI0OlxcdGZhbGxiYWNrOlxcbiAyMjU6XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gMjI2OlxcdFxcdGlmICghZm9saW9fdGVzdF9sYXJnZShmb2xpbykpXFxuIDIyNzpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDIyODpcXHRcXHRyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XFxuIDIyOTpcXHRcXHRpZiAoZmF1bHRfZm9saW8gIT0gZm9saW8pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM1OjM0LjQ4NjgwOTU1NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDgyNzAzMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFnZSBNaWdyYXRpb24gQ29udGV4dCoqXG5cbk9rYXksIHNvIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgZGVmaW5pdGVseSB0YWtlcyBgcHZtd2AsIHRoYXQncyBjbGVhci4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBlbHNlIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkuIFJpZ2h0LCBsZXQncyBzZWUuLi4gaW4gYG1tL3JtYXAuY2AsIHRoZXJlJ3MgYHRyeV90b19taWdyYXRlX29uZWAgYW5kIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhvc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLiBUaG9zZSBhcmUgY2FsbGVkIGR1cmluZyBwYWdlIG1pZ3JhdGlvbiBhbmQgdW5tYXBwaW5nLiBUaGUgY3VycmVudCBwYXRjaCBzcGVjaWZpY2FsbHkgaGFuZGxlcyB0aGUgc2l0dWF0aW9uIHdoZW4gYHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKWAgZXZhbHVhdGVzIHRvIHRydWUuXG5cblRoYXQncyB0aGUgY29yZS4gSXQncyB3aGVuIHRoZSBQTUQgaXRzZWxmIGlzIGEgZGV2aWNlIHByaXZhdGUgZW50cnkuIFJpZ2h0LCBzbyB0aGlzIHNwZWNpZmljYWxseSByZWxhdGVzIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMsIG9yIFRIUHMsIGJlaW5nIG1pZ3JhdGVkIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeS4gQWhhISBUaGF0J3MgaXQsIHRoZW46IHRoaXMgbmVjZXNzaXRhdGVzIHRoZSB1c2Ugb2YgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkga25ldyB0aGVyZSB3YXMgc29tZSBkZXBlbmRlbmN5IHRoZXJlLCBhbmQgdGhhdCBjb25maXJtcyBpdC5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMuLi4gSSdsbCBkaXZlIGludG8gYHRyeV90b19taWdyYXRlX29uZWAgaW4gYG1tL3JtYXAuY2AgYW5kIG1ha2Ugc3VyZSBpdCBiZWhhdmVzIGV4YWN0bHkgYXMgSSBleHBlY3QuIE5lZWQgdG8gZW5zdXJlIHRoaXMgaXMgYWxsIGFsaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDgyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6MzkuNTY5NTE1ODY5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDEyMDE5OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRyeV90b19taWdyYXRlX29uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTMwMzA9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxOTQtXFx0XFx0ICogSW4gY2FzZSB3ZSBjYW5ub3QgY2xlYXIgUGFnZUFub25FeGNsdXNpdmUoKSwgc3BsaXQgdGhlIFBNRFxcbm1tL2h1Z2VfbWVtb3J5LmM6MzE5NTpcXHRcXHQgKiBvbmx5IGFuZCBsZXQgdHJ5X3RvX21pZ3JhdGVfb25lKCkgZmFpbCBsYXRlci5cXG5tbS9odWdlX21lbW9yeS5jLTMxOTYtXFx0XFx0ICpcXG4tLVxcbm1tL3JtYXAuYz0yMzk0PXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI0MTQtICovXFxubW0vcm1hcC5jOjI0MTU6c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3JtYXAuYy0yNDE2LVxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXFxuLS1cXG5tbS9ybWFwLmM9MjczOT12b2lkIHRyeV90b19taWdyYXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTI3NDEtXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG5tbS9ybWFwLmM6Mjc0MjpcXHRcXHQucm1hcF9vbmUgPSB0cnlfdG9fbWlncmF0ZV9vbmUsXFxubW0vcm1hcC5jLTI3NDMtXFx0XFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM1OjQyLjk4MTU0NDg1NVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5OTQ5MjE1OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFnZSBNaWdyYXRpb24gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgcGFnZSBtaWdyYXRpb24gY29kZS4gSXQgbG9va3MgbGlrZSBgdHJ5X3RvX21pZ3JhdGVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBwbGFjZXMgbGlrZSBgbWlncmF0ZV9wYWdlc2Ag4oCTIG1ha2VzIHNlbnNlLiBOb3csIGBsaWIvdGVzdF9obW0uY2Agc2VlbXMgdG8gYmUgcmVsZXZhbnQsIHNwZWNpZmljYWxseSBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAsIHdoaWNoIHVzZXMgYG1pZ3JhdGVfdm1hX3NldHVwYC4gSSBpbml0aWFsbHkgdGhvdWdodCBgbWlncmF0ZV92bWFfc2V0dXBgIG1pZ2h0IGJlIHdoZXJlIGB0cnlfdG9fbWlncmF0ZWAgaXMgdXNlZCBkaXJlY3RseSwgYnV0IG5vLCBpdCBjYWxscyBgbWlncmF0ZV92bWFfY29sbGVjdF9wbWRgIGluc3RlYWQuXG5cbkJ1dCBob2xkIG9uLCBgdHJ5X3RvX21pZ3JhdGVfb25lYCBhbmQgYHRyeV90b191bm1hcF9vbmVgIHV0aWxpemUgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gTm93LCB0aGUgaW1wb3J0YW50IGJpdCBpcyB3aGVuIHdlJ3JlIG1vdmluZyBhIHBhZ2UgYmFjayAqZnJvbSogZGV2aWNlIHByaXZhdGUgbWVtb3J5IHRvIHN5c3RlbSBtZW1vcnkuIFRoYXQncyB3aGVuIGBtaWdyYXRlX3ZtYV9zZXR1cGAgY29tZXMgaW50byBwbGF5LCBmb3IgZWl0aGVyIGRpcmVjdGlvbiBhY3R1YWxseS4gXG5cblRoZSBwdXJwb3NlIG9mIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgdG8gZmluZCBhbGwgdGhlIG1hcHBpbmdzIG9mIGEgZ2l2ZW4gcGFnZS4gSWYgd2UncmUgZGVhbGluZyB3aXRoIGEgVEhQIHRoYXQgcmVzaWRlcyBpbiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnksIGl0cyBQTUQgd2lsbCBiZSBhIGRldmljZS1wcml2YXRlIGVudHJ5LiBJZiB3ZSBydW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBvbiB0aGF0IHBhZ2UsIGl0IHdpbGwgZGVmaW5pdGVseSBlbmNvdW50ZXIgdGhhdCBQTUQuIFNvIHdobydzIGNhbGxpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBvbiBhIHBhZ2UgdGhhdCBpcyByZXNpZGluZyBpbiBkZXZpY2UgcHJpdmF0ZSBtZW1vcnk/XG5cblRoZSBrZXkgZnVuY3Rpb25zIGFyZTogYHRyeV90b19taWdyYXRlX29uZWAsIGB0cnlfdG9fdW5tYXBfb25lYCwgYGZvbGlvX3JlZmVyZW5jZWRfb25lYCwgYHBhZ2VfaWRsZV9jbGVhcl9wdGVfcmVmc19vbmVgLCBgZGFtb25fZm9saW9feW91bmdfb25lYCwgYGRhbW9uX2ZvbGlvX21rb2xkX29uZWAsIGByZW1vdmVfbWlncmF0aW9uX3B0ZWAgYW5kIGFsc28gYHBhZ2VfbWFwcGVkX2luX3ZtYWAuIEVzc2VudGlhbGx5LCAqYW55KiBvcGVyYXRpb24gdGhhdCB3YWxrcyB0aGUgcGFnZSB0YWJsZXMgYW5kIGVuY291bnRlcnMgYSBkZXZpY2UgcHJpdmF0ZSBUSFAgd2lsbCB0cmlnZ2VyIHRoaXMuXG5cbkRpcmVjdGx5IGZ1enppbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpdHNlbGYgaXMgb2ZmIHRoZSB0YWJsZTsgaXQncyBpbnRlcm5hbC4gTXkgZm9jdXMgbmVlZHMgdG8gYmUgb24gdGhlIGZ1bmN0aW9ucyB0aGF0ICp0cmlnZ2VyKiB0aGlzIGNvZGUgcGF0aC4gYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgLCBgZG1pcnJvcl9taWdyYXRlX3RvX3N5c3RlbWAsIGFuZCBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgIGluIGBsaWIvdGVzdF9obW0uY2AgbG9vayBsaWtlIGV4Y2VsbGVudCBjYW5kaWRhdGVzIHNpbmNlIHRoZXkgZGlyZWN0bHkgaGFuZGxlIGRldmljZSBwcml2YXRlIG1lbW9yeS4gTGV0J3Mgc3RhcnQgYnkgY2hlY2tpbmcgYGxpYi90ZXN0X2htbS5jYCBmb3IgYW55IGV4cG9ydGVkIGZ1bmN0aW9ucyBvciBpb2N0bHMsIGJlY2F1c2UgdGhvc2UgYXJlIG15IGVudHJ5IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5MDIsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6NTIuOTMwNzY0MjM4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjY3OTkwMTQ3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWlycm9yX2lvY3RsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTo1NS4xOTg3NjM1MDVaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4Nzg1NTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvZGViYXNlOiBBIGBmaWxlX29wZXJhdGlvbnNgIENoZWNrKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGZpbGUgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhpcyBjb250ZXh0LiBNeSBpbnN0aW5jdCBpcyB0byBoZWFkIHN0cmFpZ2h0IGZvciBgbGliL3Rlc3RfaG1tLmNgLiBJIHJlY2FsbCB0aGF0IGZpbGUgb3BlcmF0aW9ucyBhcmUgb2Z0ZW4gZGVmaW5lZCBvciBhdCBsZWFzdCBoZWF2aWx5IHV0aWxpemVkIGF0IHRoYXQgbGV2ZWwuIEkgd2FudCB0byBzZWUgaG93IHRoZXkncmUgYmVpbmcgaW1wbGVtZW50ZWQsIG9yIGlmIHRoZXJlJ3MgYW55IHNwZWNpZmljIGhhbmRsaW5nIHJlbGF0ZWQgdG8gd2hhdGV2ZXIgdGhpcyBcInRlc3QgSE1NXCIgaXMgZG9pbmcgd2l0aCBmaWxlcy4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBmb3IgZXhhbWluaW5nIGZpbGUgSS9PIHdpdGhpbiBhIHByb2plY3QsIGVzcGVjaWFsbHkgaWYgdGhlIGZpbGUgaW50ZXJhY3Rpb24gaXMgY2VudHJhbCB0byBhIHRlc3Qgb3IgZGVtb25zdHJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgYGZpbGVfb3BlcmF0aW9uc2AgYXJlIHByZXNlbnQuIEkgd2lsbCBzdGFydCBieSBsb29raW5nIGZvciBhIHJlbGV2YW50IHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk5NTUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNTo1OC4zODY2MjE1NTVaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzA4MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGVfb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz0xNTg4PXN0YXRpYyBpbnQgZG1pcnJvcl9mb3BzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTYxMC1cXG5saWIvdGVzdF9obW0uYzoxNjExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRtaXJyb3JfZm9wcyA9IHtcXG5saWIvdGVzdF9obW0uYy0xNjEyLVxcdC5vcGVuXFx0XFx0PSBkbWlycm9yX2ZvcHNfb3BlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzU6NTguNDQwOTM1NDE0WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjIyOTg4MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBITU0gVGVzdCBDb2RlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBzcGVjaWZpYyBhYm91dCBob3cgdGhlIEhpZGRlbiBNYXJrb3YgTW9kZWwgKEhNTSkgbGlicmFyeSBpcyB0ZXN0ZWQuIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0IHdoYXRldmVyIEknbSBsb29raW5nIGZvciBpcyBsaWtlbHkgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gb3Igc2V0IG9mIGZ1bmN0aW9ucywgYW5kIHRoZSB0ZXN0IHN1aXRlIHNob3VsZCBwcm92aWRlIHNvbWUgaW5zaWdodHMuIExldCdzIHNlZS4uLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBgbGliL3Rlc3RfaG1tLmNgIGZpbGUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgSE1NcywgaXQncyBsaWtlbHkgYSB3ZWxsLXN0cnVjdHVyZWQgdGVzdCBmaWxlLiBJJ2xsIGp1bXAgcmlnaHQgdG8gbGluZSAxNjExLiBJJ20gZXhwZWN0aW5nIHRoaXMgbGluZSB0byBiZSBwYXJ0IG9mIGEgZnVuY3Rpb24gb3IgdGVzdCBjYXNlIHRoYXQncyByZWxldmFudCB0byB0aGUgdG9waWMgSSdtIGZvY3VzaW5nIG9uLiBIb3BlZnVsbHksIHRoaXMgc3BlY2lmaWMgbGluZSB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBhbmFseXplIHRoZSB0ZXN0aW5nIHN0cmF0ZWd5IGVtcGxveWVkIGFuZCByZXZlYWwgc29tZSBrZXkgaW1wbGVtZW50YXRpb24gZGV0YWlscywgbWF5YmUgcmVsYXRlZCB0byBtb2RlbCBpbml0aWFsaXphdGlvbiwgdHJhaW5pbmcsIG9yIGRlY29kaW5nLiBMZXQncyBnZXQgcmVhZGluZyBhbmQgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyOTAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjowMi4xMDMyMzY4NTVaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2htbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE2MDA6XFx0XFx0XFx0cmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCBhZGRyLCBwYWdlKTtcXG4xNjAxOlxcdFxcdFxcdGlmIChyZXQpIHtcXG4xNjAyOlxcdFxcdFxcdFxcdF9fZnJlZV9wYWdlKHBhZ2UpO1xcbjE2MDM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNjA0OlxcdFxcdFxcdH1cXG4xNjA1OlxcdFxcdFxcdHB1dF9wYWdlKHBhZ2UpO1xcbjE2MDY6XFx0XFx0fVxcbjE2MDc6XFx0XFxuMTYwODpcXHRcXHRyZXR1cm4gMDtcXG4xNjA5OlxcdH1cXG4xNjEwOlxcdFxcbjE2MTE6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZG1pcnJvcl9mb3BzID0ge1xcbjE2MTI6XFx0XFx0Lm9wZW5cXHRcXHQ9IGRtaXJyb3JfZm9wc19vcGVuLFxcbjE2MTM6XFx0XFx0LnJlbGVhc2VcXHQ9IGRtaXJyb3JfZm9wc19yZWxlYXNlLFxcbjE2MTQ6XFx0XFx0Lm1tYXBcXHRcXHQ9IGRtaXJyb3JfZm9wc19tbWFwLFxcbjE2MTU6XFx0XFx0LnVubG9ja2VkX2lvY3RsID0gZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsLFxcbjE2MTY6XFx0XFx0Lmxsc2Vla1xcdFxcdD0gZGVmYXVsdF9sbHNlZWssXFxuMTYxNzpcXHRcXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbjE2MTg6XFx0fTtcXG4xNjE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjowMi4xMDMzNDc4MDVaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3ODY0MDU2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBpb2N0bCBIYW5kbGVyKipcblxuUmlnaHQsIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgLi4uIHRoYXQncyBvdXIgaW9jdGwgaGFuZGxlciwgaXNuJ3QgaXQ/IFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQsIHRoZSBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucy4uLiBpdCdzIHRoZSBoZWFydCBvZiBob3cgdXNlcnNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBkZXZpY2UgZHJpdmVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIGhhbmRsZXIgc3BlY2lmaWNhbGx5IHdvcmtzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZG1pcnJvciBmaWxlc3lzdGVtLiBXaGF0IHNwZWNpZmljIGlvY3RscyBkb2VzIGl0IHN1cHBvcnQ/IFdoYXQgYXNzdW1wdGlvbnMgZG9lcyBpdCBtYWtlIGFib3V0IHRoZSBpbmNvbWluZyBkYXRhPyBBbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIHNob3VsZCBiZSBvbiB0aGUgbG9va291dCBmb3IsIGdpdmVuIGl0cyBcInVubG9ja2VkXCIgbmF0dXJlPyBHb3R0YSBtYWtlIHN1cmUgaXQncyB0aHJlYWQtc2FmZSBhbmQgcm9idXN0LCBlc3BlY2lhbGx5IGNvbnNpZGVyaW5nIGl0cyByb2xlIGluIGRhdGEgbWlycm9yaW5nLCB3aGljaCBpcyBpbmhlcmVudGx5IHNlbnNpdGl2ZS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgY29kZS4uLiBhbmQgbXkgZGVidWdnZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjowNS42ODE5OTE4NjhaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMjczNjk0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibGliL3Rlc3RfaG1tLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL3Rlc3RfaG1tLmM9MTQ4MT1zdGF0aWMgdm9pZCBkbWlycm9yX2RldmljZV9yZW1vdmVfY2h1bmtzKHN0cnVjdCBkbWlycm9yX2RldmljZSAqbWRldmljZSlcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE1MTItXFxubGliL3Rlc3RfaG1tLmM6MTUxMzpzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxubGliL3Rlc3RfaG1tLmMtMTUxNC1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY29tbWFuZCxcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2MTE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZG1pcnJvcl9mb3BzID0ge1xcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTYxNC1cXHQubW1hcFxcdFxcdD0gZG1pcnJvcl9mb3BzX21tYXAsXFxubGliL3Rlc3RfaG1tLmM6MTYxNTpcXHQudW5sb2NrZWRfaW9jdGwgPSBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwsXFxubGliL3Rlc3RfaG1tLmMtMTYxNi1cXHQubGxzZWVrXFx0XFx0PSBkZWZhdWx0X2xsc2VlayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6MDUuOTg0NzM0NDQyWiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjg5NTUwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVGVzdCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBsaWIvdGVzdF9obW0uY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgYXJlYSBhcm91bmQgbGluZSAxNTEzLiBUaGF0IGxpbmUgbnVtYmVyIHN1Z2dlc3RzIGl0J3MgYSBjcml0aWNhbCBwb2ludCB3aXRoaW4gdGhlIEhpZGRlbiBNYXJrb3YgTW9kZWwgKEhNTSkgdGVzdGluZyBzdWl0ZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgYSBjcnVjaWFsIHNlY3Rpb24gZGVhbGluZyB3aXRoIHNvbWV0aGluZyBzaWduaWZpY2FudCDigJMgcGVyaGFwcyBhIHNwZWNpZmljIHRyYW5zaXRpb24gcHJvYmFiaWxpdHkgZXZhbHVhdGlvbiwgYSB2ZXJpZmljYXRpb24gb2YgdGhlIGZvcndhcmQgYWxnb3JpdGhtLCBvciBtYXliZSBldmVuIGEgY29ybmVyIGNhc2UgdGVzdCBJJ3ZlIHNlZW4gdHJpcCB1cCB0aGlzIHR5cGUgb2YgaW1wbGVtZW50YXRpb24gYmVmb3JlLiBNeSBpbW1lZGlhdGUgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsIGFuZCB0byBjb3JyZWxhdGUgaXQgd2l0aCB0aGUgYnJvYWRlciBITU0gdGVzdGluZyBzdHJhdGVneS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvZGUncyBpbnRlbmRlZCBiZWhhdmlvciBhdCB0aGF0IHNwZWNpZmljIHBvaW50LCBpbiByZWxhdGlvbiB0byB0aGUgb3ZlcmFsbCB0ZXN0IGZsb3cuIEknbSBnb2luZyB0byBzdGFydCBieSBxdWlja2x5IHNjYW5uaW5nIHRoZSBzdXJyb3VuZGluZyBsaW5lcyB0byBlc3RhYmxpc2ggY29udGV4dCBhbmQgc2VlIHdoYXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgYXJlIGluIHBsYXkuIEkgYW0gbG9va2luZyBmb3IgdGhlIGxvZ2ljIHRoYXQgdGhlIHRlc3QgaGFzIGVtcGxveWVkLCBhbmQgaG93IHJvYnVzdCB0aGF0IHRlc3QgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzQ0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6MDkuMjEzNjkyNjcxWiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvdGVzdF9obW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTEwOlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2bWRldmljZS1cXHUwMDNlZGV2bWVtX2xvY2spO1xcbjE1MTE6XFx0fVxcbjE1MTI6XFx0XFxuMTUxMzpcXHRzdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuMTUxNDpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY29tbWFuZCxcXG4xNTE1OlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXJnKVxcbjE1MTY6XFx0e1xcbjE1MTc6XFx0XFx0dm9pZCBfX3VzZXIgKnVhcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7XFxuMTUxODpcXHRcXHRzdHJ1Y3QgaG1tX2RtaXJyb3JfY21kIGNtZDtcXG4xNTE5OlxcdFxcdHN0cnVjdCBkbWlycm9yICpkbWlycm9yO1xcbjE1MjA6XFx0XFx0aW50IHJldDtcXG4xNTIxOlxcdFxcbjE1MjI6XFx0XFx0ZG1pcnJvciA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xNTIzOlxcdFxcdGlmICghZG1pcnJvcilcXG4xNTI0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE1MjU6XFx0XFxuMTUyNjpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmNtZCwgdWFyZywgc2l6ZW9mKGNtZCkpKVxcbjE1Mjc6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMTUyODpcXHRcXG4xNTI5OlxcdFxcdGlmIChjbWQuYWRkciBcXHUwMDI2IH5QQUdFX01BU0spXFxuMTUzMDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTMxOlxcdFxcdGlmIChjbWQuYWRkciBcXHUwMDNlPSAoY21kLmFkZHIgKyAoY21kLm5wYWdlcyBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKSkpXFxuMTUzMjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xNTMzOlxcdFxcbjE1MzQ6XFx0XFx0Y21kLmNwYWdlcyA9IDA7XFxuMTUzNTpcXHRcXHRjbWQuZmF1bHRzID0gMDtcXG4xNTM2OlxcdFxcbjE1Mzc6XFx0XFx0c3dpdGNoIChjb21tYW5kKSB7XFxuMTUzODpcXHRcXHRjYXNlIEhNTV9ETUlSUk9SX1JFQUQ6XFxuMTUzOTpcXHRcXHRcXHRyZXQgPSBkbWlycm9yX3JlYWQoZG1pcnJvciwgXFx1MDAyNmNtZCk7XFxuMTU0MDpcXHRcXHRcXHRicmVhaztcXG4xNTQxOlxcdFxcbjE1NDI6XFx0XFx0Y2FzZSBITU1fRE1JUlJPUl9XUklURTpcXG4xNTQzOlxcdFxcdFxcdHJldCA9IGRtaXJyb3Jfd3JpdGUoZG1pcnJvciwgXFx1MDAyNmNtZCk7XFxuMTU0NDpcXHRcXHRcXHRicmVhaztcXG4xNTQ1OlxcdFxcbjE1NDY6XFx0XFx0Y2FzZSBITU1fRE1JUlJPUl9NSUdSQVRFX1RPX0RFVjpcXG4xNTQ3OlxcdFxcdFxcdHJldCA9IGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2UoZG1pcnJvciwgXFx1MDAyNmNtZCk7XFxuMTU0ODpcXHRcXHRcXHRicmVhaztcXG4xNTQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjowOS4yMTM4MTA5MjFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM4Mzc4MjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBNeSBITU0gVGVzdGluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgYmVzdCB0byBhcHByb2FjaCB0ZXN0aW5nIHRoaXMgSE1NIGltcGxlbWVudGF0aW9uLiBUaGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgc2VlbXMgdG8gYmUgYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGl0IGFsbG93cyB1cyB0byBpbnRlcmFjdCB3aXRoIHRoZSBITU0gdGhyb3VnaCBpb2N0bHMuIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrZWVwIHRob3NlIGtleSBmdW5jdGlvbnMgaW4gbWluZCwgYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAgd2hpY2ggaGFuZGxlcyB0aGUgaW9jdGwgY2FsbHMsIGFuZCBhbHNvIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCwgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gLCBhbmQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YC5cblxuSSdtIHJlYWxpemluZyB0aGF0IGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgaXMgdGhlIGNvcmUgZnVuY3Rpb24gdGhhdCdzIGJlZW4gbW9kaWZpZWQgaGVyZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcsIGJlY2F1c2UgaXTigJlzIGNhbGxlZCBieSBib3RoIGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYHRyeV90b19taWdyYXRlX29uZWAuIElmIEkgZm9jdXMgb24gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAsIHRoZW4gc3l6a2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGludGVsbGlnZW50bHkgZnV6eiB0aGUgaW9jdGxzIGFzc29jaWF0ZWQgd2l0aCBgL2Rldi9obW1fZG1pcnJvcipgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSB3YW50LlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gYmUgY2FyZWZ1bCB3aXRoIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AuIFRoYXQncyBhICp2ZXJ5KiBnZW5lcmljIGZ1bmN0aW9uLCBhbmQgaWYgSSBqdXN0IGFkZCBpdCB0byBgRm9jdXNTeW1ib2xzYCwgc3l6a2FsbGVyIG1pZ2h0IGVuZCB1cCBmb2N1c2luZyBvbiAqYW55KiBzeXNjYWxsIHRoYXQgY2FsbHMgaXQuIFRoYXQncyBuZWFybHkgZXZlcnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBsaWtlIGBtbWFwYCwgYG11bm1hcGAsIGBtYWR2aXNlYCwgZXRjLiBUaGF0J3MgdG9vIGJyb2FkLiBJIHdhbnQgdG8gc3BlY2lmaWNhbGx5IHRhcmdldCB0aGUgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGFzcGVjdCBvZiB0aGlzLCBzbyB0aGUgaW5pdGlhbCBzZXQgb2YgZnVuY3Rpb25zIC0gYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAsIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCwgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gLCBhbmQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCAtIHRoYXQncyBkZWZpbml0ZWx5IHRoZSByaWdodCBwYXRoLlxuXG5XYWl0IGEgc2Vjb25k4oCmIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgaXMgYSAqZmF1bHQgaGFuZGxlciouIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGF0J3MgdXNlZC4gTGV0IG1lIGdvIGxvb2sgYXQgYGxpYi90ZXN0X2htbS5jYCB0byBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTg2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6MTUuNTk3NTk0ODExWiIsIlNlcSI6NTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY5ODcwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkbWlycm9yX2Rldm1lbV9mYXVsdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvdGVzdF9obW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvdGVzdF9obW0uYz05NDc9c3RhdGljIGludCBkbWlycm9yX2V4Y2x1c2l2ZShzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcixcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTEwMDMtXFxubGliL3Rlc3RfaG1tLmM6MTAwNDpzdGF0aWMgdm1fZmF1bHRfdCBkbWlycm9yX2Rldm1lbV9mYXVsdF9hbGxvY19hbmRfY29weShzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MsXFxubGliL3Rlc3RfaG1tLmMtMTAwNS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvcilcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTExMjA9c3RhdGljIGludCBkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtKHN0cnVjdCBkbWlycm9yICpkbWlycm9yLFxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTE2OS1cXHRcXHRwcl9kZWJ1ZyhcXFwiTWlncmF0aW5nIGZyb20gZGV2aWNlIG1lbSB0byBzeXMgbWVtXFxcXG5cXFwiKTtcXG5saWIvdGVzdF9obW0uYzoxMTcwOlxcdFxcdGlmIChkbWlycm9yX2Rldm1lbV9mYXVsdF9hbGxvY19hbmRfY29weShcXHUwMDI2YXJncywgZG1pcnJvcikpIHtcXG5saWIvdGVzdF9obW0uYy0xMTcxLVxcdFxcdFxcdG1pZ3JhdGVfdm1hX2ZpbmFsaXplKFxcdTAwMjZhcmdzKTtcXG4tLVxcbmxpYi90ZXN0X2htbS5jPTE2MjA9c3RhdGljIHZvaWQgZG1pcnJvcl9kZXZtZW1fZnJlZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTY1Mi1cXG5saWIvdGVzdF9obW0uYzoxNjUzOnN0YXRpYyB2bV9mYXVsdF90IGRtaXJyb3JfZGV2bWVtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbmxpYi90ZXN0X2htbS5jLTE2NTQte1xcbi0tXFxubGliL3Rlc3RfaG1tLmMtMTcxMy1cXG5saWIvdGVzdF9obW0uYzoxNzE0OlxcdHJldCA9IGRtaXJyb3JfZGV2bWVtX2ZhdWx0X2FsbG9jX2FuZF9jb3B5KFxcdTAwMjZhcmdzLCBkbWlycm9yKTtcXG5saWIvdGVzdF9obW0uYy0xNzE1LVxcdGlmIChyZXQpIHtcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTE3MjEtXFx0ICogTm8gZGV2aWNlIGZpbmFsaXplIHN0ZXAgaXMgbmVlZGVkIHNpbmNlXFxubGliL3Rlc3RfaG1tLmM6MTcyMjpcXHQgKiBkbWlycm9yX2Rldm1lbV9mYXVsdF9hbGxvY19hbmRfY29weSgpIHdpbGwgaGF2ZSBhbHJlYWR5XFxubGliL3Rlc3RfaG1tLmMtMTcyMy1cXHQgKiBpbnZhbGlkYXRlZCB0aGUgZGV2aWNlIHBhZ2UgdGFibGUuXFxuLS1cXG5saWIvdGVzdF9obW0uYz0xNzY2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIGRtaXJyb3JfZGV2bWVtX29wcyA9IHtcXG5saWIvdGVzdF9obW0uYy0xNzY3LVxcdC5mb2xpb19mcmVlXFx0PSBkbWlycm9yX2Rldm1lbV9mcmVlLFxcbmxpYi90ZXN0X2htbS5jOjE3Njg6XFx0Lm1pZ3JhdGVfdG9fcmFtXFx0PSBkbWlycm9yX2Rldm1lbV9mYXVsdCxcXG5saWIvdGVzdF9obW0uYy0xNzY5LVxcdC5mb2xpb19zcGxpdFxcdD0gZG1pcnJvcl9kZXZtZW1fZm9saW9fc3BsaXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA3OjM2OjE1LjY1MDI5OTA1WiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMTU2ODg3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUYXJnZXQgZm9yIERldmljZSBQcml2YXRlIFBhZ2UgRmF1bHQgVGVzdGluZyoqXG5cbk9rYXksIHNvIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgKmlzKiB0aGUgYG1pZ3JhdGVfdG9fcmFtYCBjYWxsYmFjay4gUGVyZmVjdCwgdGhhdCdzIGV4YWN0bHkgd2hlcmUgdGhlIGFjdGlvbiBoYXBwZW5zIOKAkyB0aGF0J3MgdGhlIG9uZSB0cmlnZ2VyZWQgd2hlbiBhIENQVSBmYXVsdHMgb24gYSBkZXZpY2UgcHJpdmF0ZSBwYWdlLiBUaGF0IGNvbmZpcm1zIGl0J3MgdGhlIHJpZ2h0IGVudHJ5IHBvaW50IGZvciB0aGUgdGVzdC4gU28sIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGBGb2N1c1N5bWJvbHNgIGxpc3QgaW5jbHVkZXMgdGhlIGZvbGxvd2luZzpcblxuKiAgIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgICh0aGF0J3Mgb3VyIGVudHJ5IGZyb20gdXNlcnNwYWNlKVxuKiAgIGBkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlYCAoZm9yIHB1c2hpbmcgaXQgdG8gZGV2aWNlIHByaXZhdGUpXG4qICAgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gIChpbiBjYXNlIHdlIG5lZWQgdG8gcHVsbCBpdCBiYWNrKVxuKiAgIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgKHRoZSBhbGwtaW1wb3J0YW50IGZhdWx0IGhhbmRsZXIpXG5cbkJ1dCB3YWl04oCmIHRoaXMgcGF0Y2ggYWxzbyB0b3VjaGVzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2AgYW5kIHRoZSBgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZGUpYCBjaGVjay4gVGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBQTUQsIGFuZCBzcGVjaWZpY2FsbHksIGEgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIHRoYXQncyBtYXJrZWQgYXMgYSBkZXZpY2UgcHJpdmF0ZSBlbnRyeS4gTm93IHRoYXQncyBpbnRlcmVzdGluZy4gVGhlIGtleSBoZXJlIGlzLCBob3cgY2FuIGEgVEhQICpiZWNvbWUqIGRldmljZSBwcml2YXRlPyBJdCBtdXN0IGJlIGJlY2F1c2UgaXQncyBiZWVuIG1pZ3JhdGVkIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeSwgcmlnaHQ/IElmIG5vdCwgd2h5IHdvdWxkIHRoYXQgY2hlY2sgYmUgdGhlcmU/IE5vdyB0aGUgYnVybmluZyBxdWVzdGlvbiBpczogRG9lcyBgdGVzdF9obW1gIGFjdHVhbGx5IHN1cHBvcnQgbWlncmF0aW5nIGEgVEhQIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeT8gSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZG1pcnJvcl9taWdyYXRlX3RvX2RldmljZWAgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2MjcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6MjAuOTY1OTkwMTNaIiwiU2VxIjo2MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImxpYi90ZXN0X2htbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyMzA6XFx0XFx0XFx0fVxcbjEyMzE6XFx0XFx0XFx0bmV4dCA9IG1pbihlbmQsIGFkZHIgKyAoUFRSU19QRVJfUFRFIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQpKTtcXG4xMjMyOlxcdFxcdFxcdGlmIChuZXh0IFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9lbmQpXFxuMTIzMzpcXHRcXHRcXHRcXHRuZXh0ID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuMTIzNDpcXHRcXG4xMjM1OlxcdFxcdFxcdGFyZ3Mudm1hID0gdm1hO1xcbjEyMzY6XFx0XFx0XFx0YXJncy5zcmMgPSBzcmNfcGZucztcXG4xMjM3OlxcdFxcdFxcdGFyZ3MuZHN0ID0gZHN0X3BmbnM7XFxuMTIzODpcXHRcXHRcXHRhcmdzLnN0YXJ0ID0gYWRkcjtcXG4xMjM5OlxcdFxcdFxcdGFyZ3MuZW5kID0gbmV4dDtcXG4xMjQwOlxcdFxcdFxcdGFyZ3MucGdtYXBfb3duZXIgPSBkbWlycm9yLVxcdTAwM2VtZGV2aWNlO1xcbjEyNDE6XFx0XFx0XFx0YXJncy5mbGFncyA9IE1JR1JBVEVfVk1BX1NFTEVDVF9TWVNURU0gfFxcbjEyNDI6XFx0XFx0XFx0XFx0XFx0TUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EO1xcbjEyNDM6XFx0XFx0XFx0cmV0ID0gbWlncmF0ZV92bWFfc2V0dXAoXFx1MDAyNmFyZ3MpO1xcbjEyNDQ6XFx0XFx0XFx0aWYgKHJldClcXG4xMjQ1OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjEyNDY6XFx0XFxuMTI0NzpcXHRcXHRcXHRwcl9kZWJ1ZyhcXFwiTWlncmF0aW5nIGZyb20gc3lzIG1lbSB0byBkZXZpY2UgbWVtXFxcXG5cXFwiKTtcXG4xMjQ4OlxcdFxcdFxcdGRtaXJyb3JfbWlncmF0ZV9hbGxvY19hbmRfY29weShcXHUwMDI2YXJncywgZG1pcnJvcik7XFxuMTI0OTpcXHRcXHRcXHRtaWdyYXRlX3ZtYV9wYWdlcyhcXHUwMDI2YXJncyk7XFxuMTI1MDpcXHRcXHRcXHRkbWlycm9yX21pZ3JhdGVfZmluYWxpemVfYW5kX21hcChcXHUwMDI2YXJncywgZG1pcnJvcik7XFxuMTI1MTpcXHRcXHRcXHRtaWdyYXRlX3ZtYV9maW5hbGl6ZShcXHUwMDI2YXJncyk7XFxuMTI1MjpcXHRcXHR9XFxuMTI1MzpcXHRcXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4xMjU0OlxcdFxcdG1tcHV0KG1tKTtcXG4xMjU1OlxcdFxcbjEyNTY6XFx0XFx0LypcXG4xMjU3OlxcdFxcdCAqIFJldHVybiB0aGUgbWlncmF0ZWQgZGF0YSBmb3IgdmVyaWZpY2F0aW9uLlxcbjEyNTg6XFx0XFx0ICogT25seSBmb3IgcGFnZXMgaW4gZGV2aWNlIHpvbmVcXG4xMjU5OlxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjoyMC45NjYwOTY2NloiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTYxNjIzOTEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIERldmljZSBQcml2YXRlIE1lbW9yeSB3aXRoIFRIUCBNaWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhlIGJlc3Qgd2F5IHRvIGZ1enogdGhlIGNvZGUgcmVsYXRlZCB0byBkZXZpY2UgcHJpdmF0ZSBtZW1vcnksIGVzcGVjaWFsbHkgd2l0aCB0aGUgaW50ZXJhY3Rpb24gb2YgVHJhbnNwYXJlbnQgSHVnZVBhZ2VzIChUSFApLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpczogeWVzLCB3ZSdyZSBlbmFibGluZyBgTUlHUkFURV9WTUFfU0VMRUNUX0NPTVBPVU5EYCwgd2hpY2ggbWVhbnMgdGhlIGB0ZXN0X2htbWAgbW9kdWxlIHN1cHBvcnRzIG1pZ3JhdGluZyBUSFBzIHRvIGRldmljZSBwcml2YXRlIG1lbW9yeS4gR3JlYXQsIHRoYXQncyB0aGUgY29yZSBvZiB3aGF0IEkgd2FudCB0byB0ZXN0LiBBbmQgd2hlbiB0aG9zZSBUSFBzICphcmUqIG1pZ3JhdGVkLCB0aGUgUE1EIGVudHJpZXMgYmVjb21lIGRldmljZSBwcml2YXRlLiBUaGVuLCBpZiBzb21ldGhpbmcgY2FsbHMgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBvbiB0aGF0IHBhZ2UsIHRoZSBtb2RpZmllZCBjb2RlIGluIHRoZSBwYXRjaCB3aWxsIGJlIGhpdC5cblxuTm93LCB3aGF0IGNhbGxzIGBwYWdlX3ZtYV9tYXBwZWRfd2Fsa2A/IFRoaW5ncyBsaWtlIGB0cnlfdG9fdW5tYXBgLCB3aGljaCBoYXBwZW5zIGR1cmluZyBgbXVubWFwYCBvciBgbWFkdmlzZShNQURWX0RPTlRORUVEKWAsIGFuZCBhbHNvIGB0cnlfdG9fbWlncmF0ZWAsIHdoZW4gbWlncmF0aW5nIGJhY2sgdG8gc3lzdGVtIG1lbW9yeS4gU28gZnV6emluZyBgZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsYCBhbmQgYGRtaXJyb3JfZGV2bWVtX2ZhdWx0YCBtYWtlcyBwZXJmZWN0IHNlbnNlIGFzIHRoZXkgc2VlbSB0byBpbnRlcmFjdCB3aXRoIHRoaXMgY29yZSBsb2dpYy5cblxuTGV0J3MgcXVpY2tseSByZWNhcCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCBmb3IgdGhpcyB0ZXN0OlxuXG4qICAgYERFVklDRV9QUklWQVRFYFxuKiAgIGBaT05FX0RFVklDRWBcbiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG4qICAgYFRFU1RfSE1NYFxuXG5Ob3csIGEgcXVpY2sgc2lkZSBub3RlOiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFRFU1RfSE1NYCwgYmVpbmcgYSBtb2R1bGUgKGB0cmlzdGF0ZWApLCB3aWxsIGJlIGxvYWRlZCBieSBzeXprYWxsZXIuIFN5emthbGxlciB1c3VhbGx5IGhhbmRsZXMgaXQgaWYgd2Ugc3BlY2lmeSBpdC4gTGV0J3Mgc2VlIGlmIHdlIGNhbiBtYWtlIGl0IGJ1aWx0LWluLiBBaCwgaW4gYGxpYi9LY29uZmlnLmRlYnVnYDogeWVzLCBpdCAqY2FuKiBiZSBidWlsdC1pbi4gR29vZC4gTm93LCBsZXQncyB2ZXJpZnkgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCDigJMgaXQncyBhIGBib29sYCBpbiBgbW0vS2NvbmZpZ2AuIEFuZCBgWk9ORV9ERVZJQ0VgLCB0aGF0J3MgYSBgYm9vbGAgYXMgd2VsbC4gQW5kIGBERVZJQ0VfUFJJVkFURWAsIGFsc28gYSBgYm9vbGAuIFNvIHdlJ3JlIGdvb2Qgd2l0aCB0aG9zZSBjb25maWd1cmF0aW9ucy5cblxuTm93IHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZGVwZW5kZW5jeSBpc3N1ZXMsIGBERVZJQ0VfUFJJVkFURWAgZGVwZW5kcyBvbiBgWk9ORV9ERVZJQ0VgLiBgWk9ORV9ERVZJQ0VgIGluIHR1cm4gZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBTeXprYWxsZXIgdXN1YWxseSBlbmFibGVzIHRoZXNlIGZvciB4ODZfNjQsIHNvIGxpc3RpbmcgYERFVklDRV9QUklWQVRFYCwgYFpPTkVfREVWSUNFYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYW5kIGBURVNUX0hNTWAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuXG5cblRoZSBtYWluIGlkZWEgaXMgdG8gdGVzdCBhIG5vbi1oYXJkd2FyZSBzcGVjaWZpYyBzZXR1cC4gYFRFU1RfSE1NYCBpcyBpZGVhbCBzaW5jZSBpdCdzIGRlc2lnbmVkIGZvciB0aGlzIGFuZCBvdGhlciBkcml2ZXJzIGxpa2UgYG5vdXZlYXVgIGFuZCBgYW1kZ3B1YCB1c2UgYERFVklDRV9QUklWQVRFYCwgYnV0IGBURVNUX0hNTWAgaXMgYSBnb29kIHdheSB0byB0ZXN0IGl0LlxuXG5MZXQncyBnbyBiYWNrIG92ZXIgdGhlIHBhdGNoIGFnYWluIGFuZCBkaWdlc3Qgd2hhdCBpdCdzIGRvaW5nOlxuXG5gYGBjXG4tXHRcdH0gZWxzZSBpZiAoIXBtZF9wcmVzZW50KHBtZGUpKSB7XG4tXHRcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKHBtZGUpO1xuK1x0XHR9IGVsc2UgaWYgKHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRlKSkge1xuK1x0XHRcdHNvZnRsZWFmX3QgZW50cnk7XG4rXG4rXHRcdFx0cHZtdy1cdTAwM2VwdGwgPSBwbWRfbG9jayhtbSwgcHZtdy1cdTAwM2VwbWQpO1xuK1x0XHRcdHBtZGUgPSAqcHZtdy1cdTAwM2VwbWQ7XG4rXHRcdFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZChwbWRlKTtcbiBcbi1cdFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4tXHRcdFx0XHRwdm13LVx1MDAzZXB0bCA9IHBtZF9sb2NrKG1tLCBwdm13LVx1MDAzZXBtZCk7XG4rXHRcdFx0aWYgKGxpa2VseShzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpKSB7XG4rXHRcdFx0XHRpZiAocHZtdy1cdTAwM2VmbGFncyBcdTAwMjYgUFZNV19NSUdSQVRJT04pXG4rXHRcdFx0XHRcdHJldHVybiBub3RfZm91bmQocHZtdyk7XG4rXHRcdFx0XHRpZiAoIWNoZWNrX3BtZChzb2Z0bGVhZl90b19wZm4oZW50cnkpLCBwdm13KSlcbitcdFx0XHRcdFx0cmV0dXJuIG5vdF9mb3VuZChwdm13KTtcbiBcdFx0XHRcdHJldHVybiB0cnVlO1xuIFx0XHRcdH1cbi1cbitcdFx0XHQvKiBkZXZpY2UtcHJpdmF0ZSBwbWQgd2FzIHNwbGl0IHVuZGVyIHVzOiBoYW5kbGUgb24gcHRlIGxldmVsICovXG4rXHRcdFx0c3Bpbl91bmxvY2socHZtdy1cdTAwM2VwdGwpO1xuK1x0XHRcdHB2bXctXHUwMDNlcHRsID0gTlVMTDtcbitcdFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQocG1kZSkpIHtcbmBgYFxuXG5BaCwgcmlnaHQsIHRoaXMgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIGRldmljZS1wcml2YXRlIFBNRCBlbnRyeSBjb3VsZCBiZSBzcGxpdCB1bmRlcm5lYXRoIHVzLiBUaGUgZml4IGludm9sdmVzIHVzaW5nIGBwbWRfbG9ja2AsIHJlLXJlYWRpbmcgdGhlIGBwbWRlYCBwb2ludGVyLCBhbmQgYWRkaW5nIGNoZWNrcyBmb3IgYFxuXG4iLCJJbnB1dFRva2VucyI6MzQ2ODUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6MzYuNTgyMzM4OTA2WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ3ODc0MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZG1pcnJvcl9yZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi90ZXN0X2htbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi90ZXN0X2htbS5jPTQyNT1zdGF0aWMgaW50IGRtaXJyb3JfZG9fcmVhZChzdHJ1Y3QgZG1pcnJvciAqZG1pcnJvciwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4tLVxcbmxpYi90ZXN0X2htbS5jLTQ1MC1cXG5saWIvdGVzdF9obW0uYzo0NTE6c3RhdGljIGludCBkbWlycm9yX3JlYWQoc3RydWN0IGRtaXJyb3IgKmRtaXJyb3IsIHN0cnVjdCBobW1fZG1pcnJvcl9jbWQgKmNtZClcXG5saWIvdGVzdF9obW0uYy00NTIte1xcbi0tXFxubGliL3Rlc3RfaG1tLmM9MTUxMz1zdGF0aWMgbG9uZyBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5saWIvdGVzdF9obW0uYy0xNTM4LVxcdGNhc2UgSE1NX0RNSVJST1JfUkVBRDpcXG5saWIvdGVzdF9obW0uYzoxNTM5OlxcdFxcdHJldCA9IGRtaXJyb3JfcmVhZChkbWlycm9yLCBcXHUwMDI2Y21kKTtcXG5saWIvdGVzdF9obW0uYy0xNTQwLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwNzozNjozNi45NzcxMzE1MDlaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc3MzUyMTAzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneTogRGV2aWNlLVByaXZhdGUgVEhQIFJhY2UgQ29uZGl0aW9uIEZpeCoqXG5cbk9rYXksIGhlcmUncyBteSBwbGFuIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgaXQgYWRkcmVzc2VzIGEgY3JpdGljYWwgcmFjZSBjb25kaXRpb24gaW4gdGhlIGtlcm5lbCdzIGhhbmRsaW5nIG9mIGRldmljZS1wcml2YXRlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUHMpIHdpdGhpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgLiAgU3BlY2lmaWNhbGx5LCB0aGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NraW5nIChgcG1kX2xvY2tgKSBhbmQgcmUtdmFsaWRhdGlvbiB0byBwcmV2ZW50IGNvbmN1cnJlbnQgc3BsaXRzIG9mIFBNRCBlbnRyaWVzIHdoZW4gdGhlc2UgZGV2aWNlLXByaXZhdGUgVEhQcyBhcmUgaW52b2x2ZWQuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQncyBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGFmZmVjdHMgaG93IFRIUHMgYXJlIGhhbmRsZWQgd2l0aCBkZXZpY2VzIHRoYXQgdXNlIEhNTS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBpbmNsdWRlIGBkbWlycm9yX3JlYWRgLCBgZG1pcnJvcl93cml0ZWAsIGFuZCBgZG1pcnJvcl9leGNsdXNpdmVgIGFzIGZvY3VzIHN5bWJvbHMsIGJ1dCBsb29raW5nIGF0IGl0IG1vcmUgY2FyZWZ1bGx5LCBJIG5lZWQgdG8gbG9vayBhdCBzcGVjaWZpYyBlbnRyeSBwb2ludHMuIGBkbWlycm9yX2Rldm1lbV9mYXVsdGAgaXMga2V5IGJlY2F1c2UgaXQncyB0aGUgZmF1bHQgaGFuZGxlciB0cmlnZ2VyZWQgd2hlbiBhIENQVSBhY2Nlc3NlcyBhIGRldmljZS1wcml2YXRlIHBhZ2UsIGFuZCBzeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhpcyB2aWEgYGRtaXJyb3JfZm9wc19tbWFwYC4gSG93ZXZlciwgYGRtaXJyb3JfZm9wc191bmxvY2tlZF9pb2N0bGAgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHRoZSB0ZXN0aW5nIGNvbW1hbmRzLlxuXG5UaGVyZWZvcmUsIG15IGZvY3VzIHN5bWJvbHMgbmVlZCB0byBiZSByZWZpbmVkLiBJIHdhbnQgdG8gZW1waGFzaXplIHRoZSBmdW5jdGlvbnMgdGhhdCBzZXQgdXAgdGhlIHN0YXRlIHRoYXQgd2lsbCB1bHRpbWF0ZWx5IHRyaWdnZXIgdGhlIHJhY2UgY29uZGl0aW9uIGFuZCB0aGUgY29kZSB0aGF0IHdhcyBjaGFuZ2VkLiBTbyBJJ2xsIGdvIHdpdGggdGhlIGZvbGxvd2luZzpcblxuKiAgIGBkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxgIC0gVGhpcyBpcyB0aGUgcHJpbWFyeSB0ZXN0IGNvbW1hbmQgZW50cnkgcG9pbnQuXG4qICAgYGRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VgIC0gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IG1vdmVzIHBhZ2VzIHRvIGRldmljZSBtZW1vcnkuXG4qICAgYGRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1gIC0gVXNlZnVsIHRvIG1vdmUgcGFnZXMgYmFjay5cbiogICBgZG1pcnJvcl9kZXZtZW1fZmF1bHRgIC0gVGhpcyB3aWxsIHRyaWdnZXIgdGhlIGZhdWx0IGhhbmRsZXIuXG4qICAgYGRtaXJyb3JfZm9wc19tbWFwYCAtIFRoaXMgd2lsbCB0cmlnZ2VyIGZhdWx0cyB3aGVuIGFjY2Vzc2luZyBtYXBwZWQgcGFnZXMuXG5cbkkgY29uc2lkZXJlZCBpbmNsdWRpbmcgYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCBpdHNlbGYsIGJ1dCBJJ20gdGhpbmtpbmcgdGhhdCBtaWdodCBiZSB0b28gYnJvYWQuIFdoaWxlIGl0J3MgKnRoZSogbW9kaWZpZWQgZnVuY3Rpb24sIGl0J3MgY2FsbGVkIGZyb20gbWFueSBwbGFjZXMsIGFuZCB0aGF0IHdvdWxkIGRpbHV0ZSB0aGUgZnV6emluZyBmb2N1cywgc2luY2UgYW55IHByb2dyYW0gdGhhdCB1c2VzIGl0IHdpbGwgYmUgcHJpb3JpdGl6ZWQsIHdoaWNoIGlzIG5vdCB3aGF0IEkgd2FudC4gSW5zdGVhZCwgSSBuZWVkIHRvIGZvY3VzIHN5emthbGxlciBvbiBjcmVhdGluZyB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucyB0byAqcmVhY2gqIHRoYXQgZnVuY3Rpb24gaW4gdGhlIGRldmljZS1wcml2YXRlIFRIUCBjb250ZXh0LiBUaGUgYGRtaXJyb3JfKmAgZnVuY3Rpb25zIGRvIGV4YWN0bHkgdGhhdC5cblxuVGhlIGtleSBpcyBzZXR0aW5nIHVwIHRoZSBjb3JyZWN0IHN0YXRlOiBhIGRldmljZS1wcml2YXRlIFRIUC4gVGhlbiwgaWYgc3l6a2FsbGVyIHRyaWdnZXJzIGBtYWR2aXNlKE1BRFZfRE9OVE5FRUQpYCwgYG11bm1hcGAsIG9yIGBtcHJvdGVjdGAgb24gdGhhdCBUSFAsIGl0J2xsIGV4ZXJjaXNlIHRoZSBwYXRjaGVkIGNvZGUgcGF0aCB3aXRoaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYC4gRm9jdXNpbmcgb24gdGhlIGBkbWlycm9yXypgIGZ1bmN0aW9ucyB3aWxsIGFjaGlldmUgdGhpcy5cblxuVGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmU6XG5cbiogICBgVEVTVF9ITU1gXG4qICAgYERFVklDRV9QUklWQVRFYFxuKiAgIGBaT05FX0RFVklDRWBcbiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG5cbmBURVNUX0hNTWAgaXMgdGhlIG1haW4gZW5hYmxlciwgYW5kIGl0IGRlcGVuZHMgb24gdGhlIG90aGVycy4gYEhNTV9NSVJST1JgIGlzIGFsc28gc2VsZWN0ZWQgYnV0IGlzIG5vdCBuZWVkZWQgdG8gYmUgZXhwbGljaXRseSBkZWZpbmVkLlxuXG5JJ20gY29uZmlkZW50IHRoaXMgYXBwcm9hY2ggd2lsbCBlZmZlY3RpdmVseSB0YXJnZXQgdGhlIHJhY2UgY29uZGl0aW9uIGZpeGVkIGJ5IHRoZSBwYXRjaCwgYW5kIEknbSByZWFkeSB0byBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MjE1LCJPdXRwdXRUb2tlbnMiOjIxNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDc6MzY6NTQuNzEyMzQ1MzU1WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxODExNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRFU1RfSE1NXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG1pcnJvcl9mb3BzX3VubG9ja2VkX2lvY3RsXCIsXG4gICAgXCJkbWlycm9yX21pZ3JhdGVfdG9fZGV2aWNlXCIsXG4gICAgXCJkbWlycm9yX21pZ3JhdGVfdG9fc3lzdGVtXCIsXG4gICAgXCJkbWlycm9yX2Rldm1lbV9mYXVsdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYHBhZ2Vfdm1hX21hcHBlZF93YWxrYCB3aGVuIGhhbmRsaW5nIGRldmljZS1wcml2YXRlIFBNRCBlbnRyaWVzIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIG1pZ3JhdGVkIHRvIGRldmljZSBtZW1vcnkpLiBJdCBhZGRzIHByb3BlciBsb2NraW5nIChgcG1kX2xvY2tgKSBhbmQgcmUtdmFsaWRhdGlvbiBvZiB0aGUgUE1EIGVudHJ5IHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBzcGxpdCBjb25jdXJyZW50bHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBjYW4gYmUgcmVhY2hlZCB3aGVuIHVzaW5nIGRldmljZSBwcml2YXRlIG1lbW9yeSBmZWF0dXJlcy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEhNTSB0ZXN0IGRyaXZlciAoYHRlc3RfaG1tYCkgd2hpY2ggcHJvdmlkZXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgcHJpdmF0ZSBtZW1vcnkgaW1wbGVtZW50YXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVEVTVF9ITU1cIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkbWlycm9yX2ZvcHNfdW5sb2NrZWRfaW9jdGxcIixcbiAgICBcImRtaXJyb3JfbWlncmF0ZV90b19kZXZpY2VcIixcbiAgICBcImRtaXJyb3JfbWlncmF0ZV90b19zeXN0ZW1cIixcbiAgICBcImRtaXJyb3JfZGV2bWVtX2ZhdWx0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgcGFnZV92bWFfbWFwcGVkX3dhbGtgIHdoZW4gaGFuZGxpbmcgZGV2aWNlLXByaXZhdGUgUE1EIGVudHJpZXMgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgbWlncmF0ZWQgdG8gZGV2aWNlIG1lbW9yeSkuIEl0IGFkZHMgcHJvcGVyIGxvY2tpbmcgKGBwbWRfbG9ja2ApIGFuZCByZS12YWxpZGF0aW9uIG9mIHRoZSBQTUQgZW50cnkgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHNwbGl0IGNvbmN1cnJlbnRseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGNhbiBiZSByZWFjaGVkIHdoZW4gdXNpbmcgZGV2aWNlIHByaXZhdGUgbWVtb3J5IGZlYXR1cmVzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgSE1NIHRlc3QgZHJpdmVyIChgdGVzdF9obW1gKSB3aGljaCBwcm92aWRlcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSBwcml2YXRlIG1lbW9yeSBpbXBsZW1lbnRhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfnbp[1] Phase: Succeeded StartedAt: 2026-06-24 07:38:36 +0000 UTC FinishedAt: 2026-06-24 07:38:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-24 07:38:36 +0000 UTC FinishedAt: 2026-06-24 07:38:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2] Phase: Succeeded StartedAt: 2026-06-24 07:38:36 +0000 UTC FinishedAt: 2026-06-24 11:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-24 07:38:36 +0000 UTC FinishedAt: 2026-06-24 11:49:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-24 07:38:36 +0000 UTC FinishedAt: 2026-06-24 07:38:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-24 07:38:36 +0000 UTC FinishedAt: 2026-06-24 07:38:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowlfnbp/series-workflowlfnbp-convert-artifact-1603361123/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-24 07:38:56 +0000 UTC FinishedAt: 2026-06-24 08:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-24 07:38:56 +0000 UTC FinishedAt: 2026-06-24 08:04:06 +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:*f92a74b6-e5fa-4153-9b81-ee65f85b1034,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-workflowlfnbp/series-workflowlfnbp-convert-artifact-1603361123/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": "a0ee01cd-181c-47fd-8cc4-e334860799c7", "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-workflowlfnbp/series-workflowlfnbp-build-action-531461329/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-24 07:38:56 +0000 UTC FinishedAt: 2026-06-24 08:03:56 +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:*f92a74b6-e5fa-4153-9b81-ee65f85b1034,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-workflowlfnbp/series-workflowlfnbp-convert-artifact-1603361123/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": "a0ee01cd-181c-47fd-8cc4-e334860799c7", "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-workflowlfnbp/series-workflowlfnbp-build-action-531461329/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-24 08:04:06 +0000 UTC FinishedAt: 2026-06-24 08:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-24 08:04:06 +0000 UTC FinishedAt: 2026-06-24 08:04:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-24 08:04:06 +0000 UTC FinishedAt: 2026-06-24 08:04:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-24 08:04:06 +0000 UTC FinishedAt: 2026-06-24 08:04:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowlfnbp/series-workflowlfnbp-convert-artifact-3728619418/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-24 08:04:17 +0000 UTC FinishedAt: 2026-06-24 08:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-24 08:04:17 +0000 UTC FinishedAt: 2026-06-24 08:05:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a0ee01cd-181c-47fd-8cc4-e334860799c7,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-workflowlfnbp/series-workflowlfnbp-build-action-531461329/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-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-24 08:06:00 +0000 UTC FinishedAt: 2026-06-24 08:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-24 08:06:00 +0000 UTC FinishedAt: 2026-06-24 08:06:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-24 08:06:00 +0000 UTC FinishedAt: 2026-06-24 08:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-24 08:06:00 +0000 UTC FinishedAt: 2026-06-24 08:44:03 +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:*f92a74b6-e5fa-4153-9b81-ee65f85b1034,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-workflowlfnbp/series-workflowlfnbp-convert-artifact-3728619418/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": "9827ed0b-19be-4eef-acac-a610a01165b8", "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-workflowlfnbp/series-workflowlfnbp-build-action-4106609534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-24 08:06:00 +0000 UTC FinishedAt: 2026-06-24 08:43:41 +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:*f92a74b6-e5fa-4153-9b81-ee65f85b1034,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-workflowlfnbp/series-workflowlfnbp-convert-artifact-3728619418/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": "9827ed0b-19be-4eef-acac-a610a01165b8", "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-workflowlfnbp/series-workflowlfnbp-build-action-4106609534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-24 08:44:03 +0000 UTC FinishedAt: 2026-06-24 08:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-24 08:44:03 +0000 UTC FinishedAt: 2026-06-24 08:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-24 08:44:03 +0000 UTC FinishedAt: 2026-06-24 08:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-24 08:44:03 +0000 UTC FinishedAt: 2026-06-24 08:46:58 +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:*9827ed0b-19be-4eef-acac-a610a01165b8,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-workflowlfnbp/series-workflowlfnbp-build-action-4106609534/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-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-24 08:47:20 +0000 UTC FinishedAt: 2026-06-24 11:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-24 08:47:20 +0000 UTC FinishedAt: 2026-06-24 11:49:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},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:*a0ee01cd-181c-47fd-8cc4-e334860799c7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9827ed0b-19be-4eef-acac-a610a01165b8,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-workflowlfnbp/series-workflowlfnbp-build-action-531461329/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-workflowlfnbp/series-workflowlfnbp-build-action-4106609534/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-24 08:47:20 +0000 UTC FinishedAt: 2026-06-24 08:47:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-24 08:47:20 +0000 UTC FinishedAt: 2026-06-24 08:47:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},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-workflowlfnbp/series-workflowlfnbp-convert-artifact-3493358415/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-24 08:47:20 +0000 UTC FinishedAt: 2026-06-24 08:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-24 08:47:20 +0000 UTC FinishedAt: 2026-06-24 08:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-24 08:47:20 +0000 UTC FinishedAt: 2026-06-24 08:47:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-24 08:47:30 +0000 UTC FinishedAt: 2026-06-24 11:49:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfnbp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dmirror_fops_unlocked_ioctl","dmirror_migrate_to_device","dmirror_migrate_to_system","dmirror_devmem_fault"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"189ce3c81f8188fb737d59a8a8784f074e830238","config_name":"upstream-apparmor-kasan.config","enable_configs":["TEST_HMM","DEVICE_PRIVATE","ZONE_DEVICE","TRANSPARENT_HUGEPAGE"],"series_id":"9eab103d-4a1a-4978-81a2-c47ffb6e0625","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-24 08:47:30 +0000 UTC FinishedAt: 2026-06-24 11:49:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a0ee01cd-181c-47fd-8cc4-e334860799c7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9827ed0b-19be-4eef-acac-a610a01165b8,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-workflowlfnbp/series-workflowlfnbp-build-action-531461329/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-workflowlfnbp/series-workflowlfnbp-build-action-4106609534/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-workflowlfnbp/series-workflowlfnbp-convert-artifact-3493358415/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,}