Name: series-workflow8fzd6 Phase: Failed StartedAt: 2026-09-04 14:11:48 +0000 UTC FinishedAt: 2026-09-04 14:15:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fzd6[0] Phase: Succeeded StartedAt: 2026-09-04 14:11:48 +0000 UTC FinishedAt: 2026-09-04 14:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fzd6[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 14:11:48 +0000 UTC FinishedAt: 2026-09-04 14:15:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMsIHdoaWNoIGlzIHRoZSBWRklPIGRyaXZlciBmb3IgTlhQIFFvcklRIERQQUEyIChmc2wtbWMgYnVzKSBTb0MgZGV2aWNlcy4gVGhpcyBoYXJkd2FyZSBpcyBzcGVjaWZpYyB0byBOWFAgTGF5ZXJzY2FwZSBTb0NzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGViMzAyMDE4Y2E5NWRiYWFhN2MwYTc0ZGJjMzc2Mzg2YThhNmMzNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6MTM6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jIGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXG5pbmRleCBiNGMzOTU4MjAxYjI1Li45ZmM2ZjkxMzZlMDFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNcbkBAIC0zNjksOSAmIzQzOzM2OSw4IEBAIHN0YXRpYyBpbnQgdmZpb19mc2xfbWNfbW1hcF9tbWlvKHN0cnVjdCB2ZmlvX2ZzbF9tY19yZWdpb24gcmVnaW9uLFxuIFx0aWYgKCFyZWdpb25fY2FjaGVhYmxlKVxuIFx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiBcbi1cdHZtYS1cdTAwM2V2bV9wZ29mZiA9IChyZWdpb24uYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgJiM0MzsgcGdvZmY7XG4tXG4tXHRyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fcGdvZmYsXG4mIzQzO1x0cmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCxcbiYjNDM7XHRcdFx0ICAgICAgIChyZWdpb24uYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgJiM0MzsgcGdvZmYsXG4gXHRcdFx0ICAgICAgIHNpemUsIHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYywgd2hpY2ggaXMgdGhlIFZGSU8gZHJpdmVyIGZvciBOWFAgUW9ySVEgRFBBQTIgKGZzbC1tYyBidXMpIFNvQyBkZXZpY2VzLiBUaGlzIGhhcmR3YXJlIGlzIHNwZWNpZmljIHRvIE5YUCBMYXllcnNjYXBlIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZWIzMDIwMThjYTk1ZGJhYWE3YzBhNzRkYmMzNzYzODZhOGE2YzM0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxNDoxMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYwppbmRleCBiNGMzOTU4MjAxYjI1Li45ZmM2ZjkxMzZlMDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jCkBAIC0zNjksOSAmIzQzOzM2OSw4IEBAIHN0YXRpYyBpbnQgdmZpb19mc2xfbWNfbW1hcF9tbWlvKHN0cnVjdCB2ZmlvX2ZzbF9tY19yZWdpb24gcmVnaW9uLAogCWlmICghcmVnaW9uX2NhY2hlYWJsZSkKIAkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0mZ3Q7dm1fcGFnZV9wcm90KTsKIAotCXZtYS0mZ3Q7dm1fcGdvZmYgPSAocmVnaW9uLmFkZHIgJmd0OyZndDsgUEFHRV9TSElGVCkgJiM0MzsgcGdvZmY7Ci0KLQlyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLSZndDt2bV9zdGFydCwgdm1hLSZndDt2bV9wZ29mZiwKJiM0MzsJcmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0mZ3Q7dm1fc3RhcnQsCiYjNDM7CQkJICAgICAgIChyZWdpb24uYWRkciAmZ3Q7Jmd0OyBQQUdFX1NISUZUKSAmIzQzOyBwZ29mZiwKIAkJCSAgICAgICBzaXplLCB2bWEtJmd0O3ZtX3BhZ2VfcHJvdCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGhpdHMgYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIGVzcGVjaWFsbHkgd2l0aCB0aGF0IGBmc2wtbWNgIGlkZW50aWZpZXIuIEkgbmVlZCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHdoYXQgYGZzbC1tY2AgZXZlbiAqaXMqIGluIHRoaXMgY29udGV4dC4gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWM/IEFuIGFic3RyYWN0aW9uIGxheWVyPwoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBwZXJgIChvciBldmVuIGEgYHJlYWQtZmlsZWAgd291bGQgZG8gaWYgaXQmIzM5O3Mgc21hbGwgZW5vdWdoKSBhbmQgaW1tZWRpYXRlbHkgbG9vayBhdCB0aGUgYEtjb25maWdgIGFuZC9vciB0aGUgYE1ha2VmaWxlYCB3aXRoaW4gdGhlIGBkcml2ZXJzL3ZmaW8vZnNsLW1jYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2llcyBvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWNzIHRoaXMgY29kZSBpcyB0aWVkIHRvLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBhZmZlY3RzIGEgd2lkZSByYW5nZSBvZiBwbGF0Zm9ybXMgb3IgaXMgbGltaXRlZCB0byBhIG5hcnJvdyBvbmUuIEtub3dsZWRnZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNhbiBnaXZlIG1lIHNvbWUgaWRlYSBob3cgaW1wb3J0YW50IHRoaXMgY2hhbmdlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZGSU9fRlNMX01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfVkZJT19NREVWKSAmIzQzOz0gbWRldi9cbmRyaXZlcnMvdmZpby9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfVkZJT19GU0xfTUMpICYjNDM7PSBmc2wtbWMvXG5kcml2ZXJzL3ZmaW8vTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1ZGSU9fQ0RYKSAmIzQzOz0gY2R4L1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZz0xPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBGU0xfTUMgYnVzIGRldmljZXNcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctMy1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo0OmNvbmZpZyBWRklPX0ZTTF9NQ1xuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvTWFrZWZpbGU9Mz12ZmlvLWZzbC1tYy15IDo9IHZmaW9fZnNsX21jLm8gdmZpb19mc2xfbWNfaW50ci5vXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1ZGSU9fRlNMX01DKSAmIzQzOz0gdmZpby1mc2wtbWMub1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz05Nz1zdGF0aWMgdm9pZCB2ZmlvX2ZzbF9tY19jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTExMi1cdFx0ZGV2X3dhcm4oXHUwMDI2bWNfY29udC1cdTAwM2VkZXYsXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MTEzOlx0XHRcdCBcJiMzNDtWRklPX0ZTTF9NQzogcmVzZXQgZGV2aWNlIGhhcyBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0xMTQtXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTEyMD1zdGF0aWMgaW50IHZmaW9fZnNsX21jX2lvY3RsX2dldF9yZWdpb25faW5mbyhzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMTMxLVx0LyogbWFwIG9mZnNldCB0byB0aGUgcGh5c2ljYWwgYWRkcmVzcyAgKi9cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzoxMzI6XHRpbmZvLVx1MDAzZW9mZnNldCA9IFZGSU9fRlNMX01DX0lOREVYX1RPX09GRlNFVChpbmZvLVx1MDAzZWluZGV4KTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0xMzMtXHRpbmZvLVx1MDAzZXNpemUgPSB2ZGV2LVx1MDAzZXJlZ2lvbnNbaW5mby1cdTAwM2VpbmRleF0uc2l6ZTtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9MjM0PXN0YXRpYyBzc2l6ZV90IHZmaW9fZnNsX21jX3JlYWQoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTIzOC1cdFx0Y29udGFpbmVyX29mKGNvcmVfdmRldiwgc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSwgdmRldik7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MjM5Olx0dW5zaWduZWQgaW50IGluZGV4ID0gVkZJT19GU0xfTUNfT0ZGU0VUX1RPX0lOREVYKCpwcG9zKTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzoyNDA6XHRsb2ZmX3Qgb2ZmID0gKnBwb3MgXHUwMDI2IFZGSU9fRlNMX01DX09GRlNFVF9NQVNLO1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTI0MS1cdHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19kZXYgPSB2ZGV2LVx1MDAzZW1jX2Rldjtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9MzEyPXN0YXRpYyBzc2l6ZV90IHZmaW9fZnNsX21jX3dyaXRlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0zMTctXHRcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UsIHZkZXYpO1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjMxODpcdHVuc2lnbmVkIGludCBpbmRleCA9IFZGSU9fRlNMX01DX09GRlNFVF9UT19JTkRFWCgqcHBvcyk7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MzE5Olx0bG9mZl90IG9mZiA9ICpwcG9zIFx1MDAyNiBWRklPX0ZTTF9NQ19PRkZTRVRfTUFTSztcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0zMjAtXHRzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2ID0gdmRldi1cdTAwM2VtY19kZXY7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTM1Mz1zdGF0aWMgaW50IHZmaW9fZnNsX21jX21tYXBfbW1pbyhzdHJ1Y3QgdmZpb19mc2xfbWNfcmVnaW9uIHJlZ2lvbixcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzYwLVx0cGdvZmYgPSB2bWEtXHUwMDNldm1fcGdvZmYgXHUwMDI2XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MzYxOlx0XHQoKDFVIFx1MDAzY1x1MDAzYyAoVkZJT19GU0xfTUNfT0ZGU0VUX1NISUZUIC0gUEFHRV9TSElGVCkpIC0gMSk7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzYyLVx0YmFzZSA9IHBnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz0zNzc9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19tbWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0zODQtXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6Mzg1Olx0aW5kZXggPSB2bWEtXHUwMDNldm1fcGdvZmYgXHUwMDNlXHUwMDNlIChWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0zODYtXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQxNT1zdGF0aWMgaW50IHZmaW9fZnNsX21jX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MjYtXHRcdGlmIChkZXZpY2Vfc2V0X2RyaXZlcl9vdmVycmlkZShkZXYsIHZmaW9fZnNsX21jX29wcy5uYW1lKSlcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0Mjc6XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtWRklPX0ZTTF9NQzogU2V0dGluZyBkcml2ZXIgb3ZlcnJpZGUgZm9yIGRldmljZSBpbiBkcHJjICVzIGZhaWxlZFxcblwmIzM0OyxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MjgtXHRcdFx0XHQgZGV2X25hbWUoXHUwMDI2bWNfY29udC1cdTAwM2VkZXYpKTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MjktXHRcdGVsc2VcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0MzA6XHRcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtWRklPX0ZTTF9NQzogU2V0dGluZyBkcml2ZXIgb3ZlcnJpZGUgZm9yIGRldmljZSBpbiBkcHJjICVzXFxuXCYjMzQ7LFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQzMS1cdFx0XHRcdCBkZXZfbmFtZShcdTAwMjZtY19jb250LVx1MDAzZWRldikpO1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MzYtXHRcdGlmIChtY19kcnYgXHUwMDI2XHUwMDI2IG1jX2RydiAhPSBcdTAwMjZ2ZmlvX2ZzbF9tY19kcml2ZXIpXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NDM3Olx0XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7VkZJT19GU0xfTUM6IE9iamVjdCAlcyBib3VuZCB0byBkcml2ZXIgJXMgd2hpbGUgRFBSQyBib3VuZCB0byB2ZmlvLWZzbC1tY1xcblwmIzM0OyxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MzgtXHRcdFx0XHQgZGV2X25hbWUoZGV2KSwgbWNfZHJ2LVx1MDAzZWRyaXZlci5uYW1lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NDQ0PXN0YXRpYyBpbnQgdmZpb19mc2xfbWNfaW5pdF9kZXZpY2Uoc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDY0LVx0aWYgKHJldCkge1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQ2NTpcdFx0ZGV2X2VycihcdTAwMjZtY19kZXYtXHUwMDNlZGV2LCBcJiMzNDtWRklPX0ZTTF9NQzogRmFpbGVkIHRvIHNldHVwIERQUkMgKCVkKVxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NjYtXHRcdGdvdG8gb3V0X25jX3VucmVnO1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz00NzU9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19zY2FuX2NvbnRhaW5lcihzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00ODQtXHRcdGRldl9lcnIoXHUwMDI2bWNfZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0ODU6XHRcdFx0XCYjMzQ7VkZJT19GU0xfTUM6IENvbnRhaW5lciBzY2FubmluZyBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00ODYtXHRcdGRwcmNfcmVtb3ZlX2RldmljZXMobWNfZGV2LCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NTI1PXN0YXRpYyBpbnQgdmZpb19mc2xfbWNfcHJvYmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldilcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNTM3LVx0aWYgKHJldCkge1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjUzODpcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1ZGSU9fRlNMX01DOiBGYWlsZWQgdG8gYWRkIHRvIHZmaW8gZ3JvdXBcXG5cJiMzNDspO1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTUzOS1cdFx0Z290byBvdXRfcHV0X3ZkZXY7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmgtNi1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oOjc6I2lmbmRlZiBWRklPX0ZTTF9NQ19QUklWQVRFX0hcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oOjg6I2RlZmluZSBWRklPX0ZTTF9NQ19QUklWQVRFX0hcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTktXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaDoxMDojZGVmaW5lIFZGSU9fRlNMX01DX09GRlNFVF9TSElGVCAgICA0MFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTE6I2RlZmluZSBWRklPX0ZTTF9NQ19PRkZTRVRfTUFTSyAoKCh1NjQpKDEpIFx1MDAzY1x1MDAzYyBWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQpIC0gMSlcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTEyLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTM6I2RlZmluZSBWRklPX0ZTTF9NQ19PRkZTRVRfVE9fSU5ERVgob2ZmKSAoKG9mZikgXHUwMDNlXHUwMDNlIFZGSU9fRlNMX01DX09GRlNFVF9TSElGVClcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTE0LVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTU6I2RlZmluZSBWRklPX0ZTTF9NQ19JTkRFWF9UT19PRkZTRVQoaW5kZXgpXHRcXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTY6XHQoKHU2NCkoaW5kZXgpIFx1MDAzY1x1MDAzYyBWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQpXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaC0xNy1cbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaD00Nz12b2lkIHZmaW9fZnNsX21jX2lycXNfY2xlYW51cChzdHJ1Y3QgdmZpb19mc2xfbWNfZGV2aWNlICp2ZGV2KTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTQ4LVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6NDk6I2VuZGlmIC8qIFZGSU9fRlNMX01DX1BSSVZBVEVfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNzMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgVkZJTyBGU0wtTUMgS2NvbmZpZyBGaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3Mgc29tZSBjb25maWd1cmF0aW9uIGxvZ2ljLCBtYXliZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMsIG9yIGV2ZW4ganVzdCBzb21lIGJhc2ljIGRvY3VtZW50YXRpb24gSSBuZWVkIHRvIHJldmlldy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgZXhwZWN0IHRoaXMgYEtjb25maWdgIGZpbGUgaXMgZ29pbmcgdG8gZGljdGF0ZSB0aGUgYnVpbGQgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKSBkcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUgKG5vdyBOWFApIE11bHRpLUNvcmUgKE1DKSBhcmNoaXRlY3R1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgc3BlY2lmaWMgTUMgaGFyZHdhcmUgaXMgc3VwcG9ydGVkLCBhbnkgbmVjZXNzYXJ5IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBkcml2ZXJzLCBhbmQgaG93IHRoZSBWRklPIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgYnJvYWRlciBmcmFtZXdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgb3IgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mIG9yIGFkanVzdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEZTTF9NQyBidXMgZGV2aWNlc1wmIzM0O1xuICAgMjpcdFx0ZGVwZW5kcyBvbiBGU0xfTUNfQlVTXG4gICAzOlx0XG4gICA0Olx0Y29uZmlnIFZGSU9fRlNMX01DXG4gICA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlc1wmIzM0O1xuICAgNjpcdFx0c2VsZWN0IEVWRU5URkRcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgRHJpdmVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgVkZJTyBRb3JJUSBEUEFBMiBmc2wtbWNcbiAgIDk6XHRcdCAgKE1hbmFnZW1lbnQgQ29tcGxleCkgZGV2aWNlcy4gVGhpcyBpcyByZXF1aXJlZCB0byBwYXNzdGhyb3VnaFxuICAxMDpcdFx0ICBmc2wtbWMgYnVzIGRldmljZXMgdXNpbmcgdGhlIFZGSU8gZnJhbWV3b3JrLlxuICAxMTpcdFxuICAxMjpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRlbmRtZW51XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipWRklPX0ZTTF9NQyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gYFZGSU9fRlNMX01DYCByZWxpZXMgb24gYEZTTF9NQ19CVVNgLCByaWdodD8gR290IGl0LiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGF0IGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBGU0xfTUNfQlVTYCBpcyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSwgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaW1lIHRvIHN0YXJ0IHNlYXJjaGluZyBhY3Jvc3MgdGhlIHdob2xlIGtlcm5lbCBzb3VyY2UgdHJlZSB0byBsb2NhdGUgd2hlcmUgYEZTTF9NQ19CVVNgIGlzIGRlY2xhcmVkIGFuZCBzZWUgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgaXQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNMX01DX0JVUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy03LVxuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWc6ODpjb25maWcgRlNMX01DX0JVU1xuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7UW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgS2NvbmZpZyBmaWxlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBGU0wtTUMgQnVzIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgRlNMLU1DIChGcmVlc2NhbGUvTlhQIE11bHRpY29yZSBDb21tdW5pY2F0aW9uKSBidXMgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaXMgYGRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnYC4gVGhpcyBLY29uZmlnIGZpbGUgaXMgdGhlIGNlbnRyYWwgc291cmNlIGZvciBhbGwgb2YgdGhlIGNvbmZpZ3VyYWJsZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGF0IHNwZWNpZmljIGRyaXZlci4gSXTigJlzIHdoZXJlIGFsbCB0aGUga2V5IHNldHRpbmdzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGRlcGVuZGVuY2llcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGRlZmluZWQuIEkgbmVlZCB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayB0aHJvdWdoIHNwZWNpZmljIG9wdGlvbnMgYW5kIHNlZSBob3cgdGhpbmdzIGFyZSBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgRFBBQTIgZnNsLW1jIGJ1c1xuICAgNDpcdCNcbiAgIDU6XHQjIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuXG4gICA2Olx0I1xuICAgNzpcdFxuICAgODpcdGNvbmZpZyBGU0xfTUNfQlVTXG4gICA5Olx0XHRib29sIFwmIzM0O1FvcklRIERQQUEyIGZzbC1tYyBidXMgZHJpdmVyXCYjMzQ7XG4gIDEwOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9MQVlFUlNDQVBFIHx8IChDT01QSUxFX1RFU1QgXHUwMDI2XHUwMDI2IChBUk0gfHwgQVJNNjQgfHwgWDg2X0xPQ0FMX0FQSUMgfHwgUFBDKSkpXG4gIDExOlx0XHRzZWxlY3QgR0VORVJJQ19NU0lfSVJRXG4gIDEyOlx0XHRoZWxwXG4gIDEzOlx0XHQgIERyaXZlciB0byBlbmFibGUgdGhlIGJ1cyBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIFFvcklRIERQQUEyXG4gIDE0Olx0XHQgIGFyY2hpdGVjdHVyZS4gIFRoZSBmc2wtbWMgYnVzIGRyaXZlciBoYW5kbGVzIGRpc2NvdmVyeSBvZlxuICAxNTpcdFx0ICBEUEFBMiBvYmplY3RzICh3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgTGludXggZGV2aWNlcykgYW5kXG4gIDE2Olx0XHQgIGJpbmRpbmcgb2JqZWN0cyB0byBkcml2ZXJzLlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBGU0xfTUNfVUFQSV9TVVBQT1JUXG4gIDE5Olx0XHRib29sIFwmIzM0O01hbmFnZW1lbnQgQ29tcGxleCAoTUMpIHVzZXJzcGFjZSBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIEZTTF9NQ19CVVNcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgUHJvdmlkZXMgdXNlcnNwYWNlIHN1cHBvcnQgZm9yIGludGVycm9nYXRpbmcsIGNyZWF0aW5nLCBkZXN0cm95aW5nIG9yXG4gIDIzOlx0XHQgIGNvbmZpZ3VyaW5nIERQQUEyIG9iamVjdHMgZXhwb3J0ZWQgYnkgdGhlIE1hbmFnZW1lbnQgQ29tcGxleC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcyNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhpcyBjb25kaXRpb25hbCBkZXBlbmRlbmN5OiBgZGVwZW5kcyBvbiBPRiAmYW1wOyZhbXA7IChBUkNIX0xBWUVSU0NBUEUgfHwgKENPTVBJTEVfVEVTVCAmYW1wOyZhbXA7IChBUk0gfHwgQVJNNjQgfHwgWDg2X0xPQ0FMX0FQSUMgfHwgUFBDKSkpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgbG9va3MgbGlrZSBhIGNvbmZpZ3VyYXRpb24gY2hlY2sgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbSwgbGlrZWx5IGFuIGVtYmVkZGVkIExpbnV4IGJ1aWxkIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0ICYjMzQ7T0YmIzM0OyAobGlrZWx5ICYjMzQ7RGV2aWNlIFRyZWUmIzM0OykgaW1wbGllcyBoZXJlLiBJdCYjMzk7cyBwYWlyZWQgd2l0aCBlaXRoZXIgYSBMYXllcnNjYXBlIGFyY2hpdGVjdHVyZSBvciwgaW4gYSB0ZXN0L2NvbXBpbGUgc2NlbmFyaW8sIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgbGlrZSBBUk0sIEFSTTY0LCBYODYgd2l0aCBsb2NhbCBBUElDLCBvciBQb3dlclBDLiBUaGlzIG5hcnJvd3MgZG93biB0aGUgcG9zc2libGUgaGFyZHdhcmUgc2lnbmlmaWNhbnRseS4KCk5vdywgbXkgcHJpbWFyeSBxdWVzdGlvbiBpcyBhYm91dCBgRlNMX01DYC4gU3BlY2lmaWNhbGx5LCB3aGF0IGlzIGFuICYjMzQ7RlNMX01DIGJ1cyBkZXZpY2UmIzM0Oz8gSXMgaXQgcmVsYXRlZCB0byB0aGUgRnJlZXNjYWxlIChub3cgTlhQKSBNdWx0aS1Db3JlIGZyYW1ld29yaz8gVGhhdCByaW5ncyBhIGJlbGwsIGJ1dCBJIG5lZWQgdG8gY29uZmlybS4KClRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgRlNMX01DIGJ1cyBvciBkZXZpY2VzIHJlbGF0ZWQgdG8gdGhlICYjMzQ7VkZJT19GU0xfTUMmIzM0OyBjYW4gZXZlbiBiZSBhY2Nlc3NlZCBvciBwcm9iZWQgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBJZiB0aGV5IGFyZSBoYXJkd2FyZS1kZXBlbmRlbnQsIGl0JiMzOTtzIHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBvbmx5IGdvaW5nIHRvIGJlIGFjY2Vzc2libGUgd2l0aCBhIGRlZGljYXRlZCBwbGF0Zm9ybS4gT3IgaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gc2ltdWxhdGUsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgdmlydHVhbGl6ZWQgYW1kNjQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBrbm93IHRoZSBleHRlbnQgdG8gd2hpY2ggdGhpcyBtaWdodCBiZSBwb3NzaWJsZS4KClNvLCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIGRldmljZSBjcmVhdGlvbiBvciBwcm9iaW5nIHByb2Nlc3MuIEkgbmVlZCB0byBrbm93IGhvdyB0aGVzZSBmc2wtbWMgYnVzIGRldmljZXMgYXJlIGNyZWF0ZWQgb3IgZGlzY292ZXJlZC4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgZ3JlcC4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgYGZzbF9tY19idXNfdHlwZWAgc3RyaW5nLCBhbmQgcmVsYXRlZCBjb2RlLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBhbmQgcmVnaXN0ZXJzIHRoZXNlIGRldmljZXMuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBhcmUgaGFuZGxlZCBhdCBydW50aW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIHRyZWUgaW50ZWdyYXRpb24gYW5kIGhvdyBkZXZpY2Utc3BlY2lmaWMgZHJpdmVycyB3b3JrIHdpdGggdGhlIGJ1cyBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZzbF9tY19idXNfdHlwZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTMyND1BVFRSSUJVVEVfR1JPVVBTKGZzbF9tY19idXMpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMjUtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjMyNjpjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgZnNsX21jX2J1c190eXBlID0ge1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMjctXHQubmFtZSA9IFwmIzM0O2ZzbC1tY1wmIzM0Oyxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTMzOC19O1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzozMzk6RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX2J1c190eXBlKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzQwLVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9NDYxPWludCBfX2ZzbF9tY19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGZzbF9tY19kcml2ZXIgKm1jX2RyaXZlcixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTQ2Ni1cdG1jX2RyaXZlci1cdTAwM2Vkcml2ZXIub3duZXIgPSBvd25lcjtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NDY3Olx0bWNfZHJpdmVyLVx1MDAzZWRyaXZlci5idXMgPSBcdTAwMjZmc2xfbWNfYnVzX3R5cGU7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTQ2OC1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTc1Mj1pbnQgZnNsX21jX2RldmljZV9hZGQoc3RydWN0IGZzbF9tY19vYmpfZGVzYyAqb2JqX2Rlc2MsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03ODktXHRtY19kZXYtXHUwMDNlZGV2LnBhcmVudCA9IHBhcmVudF9kZXY7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjc5MDpcdG1jX2Rldi1cdTAwM2VkZXYuYnVzID0gXHUwMDI2ZnNsX21jX2J1c190eXBlO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03OTEtXHRtY19kZXYtXHUwMDNlZGV2LnJlbGVhc2UgPSBmc2xfbWNfZGV2aWNlX3JlbGVhc2U7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMTc1PXN0YXRpYyB2b2lkIGZzbF9tY19idXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTgzLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMTg0Olx0YnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcdTAwMjZmc2xfbWNfbmIpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTg1LVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTI2MD1zdGF0aWMgaW50IF9faW5pdCBmc2xfbWNfYnVzX2RyaXZlcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjYzLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjY0Olx0ZXJyb3IgPSBidXNfcmVnaXN0ZXIoXHUwMDI2ZnNsX21jX2J1c190eXBlKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI2NS1cdGlmIChlcnJvciBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI5Mi1lcnJvcl9jbGVhbnVwX2J1czpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI5MzpcdGJ1c191bnJlZ2lzdGVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTQtXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdS5jPTE4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlICogY29uc3QgaW9tbXVfYnVzZXNbXSA9IHtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11LmMtMTk0LSNpZmRlZiBDT05GSUdfRlNMX01DX0JVU1xuZHJpdmVycy9pb21tdS9pb21tdS5jOjE5NTpcdFx1MDAyNmZzbF9tY19idXNfdHlwZSxcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xOTYtI2VuZGlmXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQ0ND1zdGF0aWMgaW50IHZmaW9fZnNsX21jX2luaXRfZGV2aWNlKHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ1Ny1cdHZkZXYtXHUwMDNlbmIubm90aWZpZXJfY2FsbCA9IHZmaW9fZnNsX21jX2J1c19ub3RpZmllcjtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0NTg6XHRyZXQgPSBidXNfcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcdTAwMjZ2ZGV2LVx1MDAzZW5iKTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NzAtb3V0X25jX3VucmVnOlxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQ3MTpcdGJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXHUwMDI2dmRldi1cdTAwM2VuYik7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDcyLVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NDkyPXN0YXRpYyB2b2lkIHZmaW9fZnNsX3VuaW5pdF9kZXZpY2Uoc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDk5LVx0ZHByY19jbGVhbnVwKG1jX2Rldik7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NTAwOlx0YnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcdTAwMjZ2ZGV2LVx1MDAzZW5iKTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01MDEtfVxuLS1cbmluY2x1ZGUvbGludXgvZnNsL21jLmg9MzU2PWludCBtY19zZW5kX2NvbW1hbmQoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHN0cnVjdCBmc2xfbWNfY29tbWFuZCAqY21kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oLTM1OC0jaWZkZWYgQ09ORklHX0ZTTF9NQ19CVVNcbmluY2x1ZGUvbGludXgvZnNsL21jLmg6MzU5OiNkZWZpbmUgZGV2X2lzX2ZzbF9tYyhfZGV2KSAoKF9kZXYpLVx1MDAzZWJ1cyA9PSBcdTAwMjZmc2xfbWNfYnVzX3R5cGUpXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oLTM2MC11MzIgZnNsX21jX2dldF9tc2lfaWQoc3RydWN0IGRldmljZSAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oPTQyOD1zdHJ1Y3QgZnNsX21jX2RldmljZSAqZnNsX21jX2dldF9lbmRwb2ludChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvZnNsL21jLmgtNDMwLVxuaW5jbHVkZS9saW51eC9mc2wvbWMuaDo0MzE6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBidXNfdHlwZSBmc2xfbWNfYnVzX3R5cGU7XG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oLTQzMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYGZzbC1tYy1idXMuY2AgYW5kIHNwZWNpZmljYWxseSwgaG93IHRoZXNlIGZzbC1tYyBkZXZpY2VzIGFyZSBicm91Z2h0IHRvIGxpZmUuIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgZnNsLW1jLWJ1cy5jYCB0byB0cmFjZSB0aGUgaW5zdGFudGlhdGlvbiBwcm9jZXNzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2xfbWNfYnVzX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAwNT1zdGF0aWMgaW50IGZzbF9tY19maXJtd2FyZV9jaGVjayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAzNS0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMDM2OiAqIGZzbF9tY19idXNfcHJvYmUgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHJvb3QgTUMgYnVzIGlzIGJlaW5nXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzctICogYWRkZWRcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAzOC0gKi9cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAzOTpzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTA0MC17XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIxNi1cdFx0ICAgfSxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIxNzpcdC5wcm9iZSA9IGZzbF9tY19idXNfcHJvYmUsXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTgtXHQucmVtb3ZlID0gZnNsX21jX2J1c19yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTkxCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgQnVzIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgZnNsX21jX2J1c19kcml2ZXJgIGlzIGJlaGF2aW5nLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGRldmljZSBtYXRjaCB0YWJsZS4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgdGhpcyBkcml2ZXIgaWRlbnRpZmllcyBhbmQgYmluZHMgdG8gdGhlIGNvcnJlY3QgaGFyZHdhcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBpbnRlbmRlZCBkZXZpY2VzIGFyZSwgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIG9idmlvdXMgbWlzbWF0Y2hlcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzIGx1cmtpbmcgaW4gdGhlcmUuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSB0YWJsZSBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMDA6XHR9O1xuMTIwMTpcdFxuMTIwMjpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZzbF9tY19idXNfbWF0Y2hfdGFibGUpO1xuMTIwMzpcdFxuMTIwNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlW10gPSB7XG4xMjA1Olx0XHR7XCYjMzQ7TlhQMDAwOFwmIzM0OywgMCB9LFxuMTIwNjpcdFx0eyB9XG4xMjA3Olx0fTtcbjEyMDg6XHRNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGZzbF9tY19idXNfYWNwaV9tYXRjaF90YWJsZSk7XG4xMjA5Olx0XG4xMjEwOlx0c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZnNsX21jX2J1c19kcml2ZXIgPSB7XG4xMjExOlx0XHQuZHJpdmVyID0ge1xuMTIxMjpcdFx0XHQgICAubmFtZSA9IFwmIzM0O2ZzbF9tY19idXNcJiMzNDssXG4xMjEzOlx0XHRcdCAgIC5wbSA9IE5VTEwsXG4xMjE0Olx0XHRcdCAgIC5vZl9tYXRjaF90YWJsZSA9IGZzbF9tY19idXNfbWF0Y2hfdGFibGUsXG4xMjE1Olx0XHRcdCAgIC5hY3BpX21hdGNoX3RhYmxlID0gZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlLFxuMTIxNjpcdFx0XHQgICB9LFxuMTIxNzpcdFx0LnByb2JlID0gZnNsX21jX2J1c19wcm9iZSxcbjEyMTg6XHRcdC5yZW1vdmUgPSBmc2xfbWNfYnVzX3JlbW92ZSxcbjEyMTk6XHRcdC5zaHV0ZG93biA9IGZzbF9tY19idXNfcmVtb3ZlLFxuMTIyMDpcdH07XG4xMjIxOlx0XG4xMjIyOlx0c3RhdGljIGludCBmc2xfbWNfYnVzX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4xMjIzOlx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxuMTIyNDpcdHtcbjEyMjU6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7XG4xMjI2Olx0XHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbjEyMjc6XHRcdHZvaWQgX19pb21lbSAqZnNsX21jX3JlZ3M7XG4xMjI4Olx0XG4xMjI5Olx0XHRpZiAoYWN0aW9uICE9IEJVU19OT1RJRllfQUREX0RFVklDRSlcbjEyMzA6XHRcdFx0cmV0dXJuIDA7XG4xMjMxOlx0XG4xMjMyOlx0XHRpZiAoIW9mX21hdGNoX2RldmljZShmc2xfbWNfYnVzX21hdGNoX3RhYmxlLCBkZXYpIFx1MDAyNlx1MDAyNlxuMTIzMzpcdFx0ICAgICFhY3BpX21hdGNoX2RldmljZShmc2xfbWNfYnVzX2FjcGlfbWF0Y2hfdGFibGUsIGRldikpXG4xMjM0Olx0XHRcdHJldHVybiAwO1xuMTIzNTpcdFxuMTIzNjpcdFx0cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHRvX3BsYXRmb3JtX2RldmljZShkZXYpLCBJT1JFU09VUkNFX01FTSwgMSk7XG4xMjM3Olx0XHRpZiAoIXJlcylcbjEyMzg6XHRcdFx0cmV0dXJuIDA7XG4xMjM5Olx0XG4xMjQwOlx0XHRmc2xfbWNfcmVncyA9IGlvcmVtYXAocmVzLVx1MDAzZXN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpO1xuMTI0MTpcdFx0aWYgKCFmc2xfbWNfcmVncylcbjEyNDI6XHRcdFx0cmV0dXJuIDA7XG4xMjQzOlx0XG4xMjQ0Olx0XHQvKlxuMTI0NTpcdFx0ICogTWFrZSBzdXJlIHRoYXQgdGhlIE1DIGZpcm13YXJlIGlzIHBhdXNlZCBiZWZvcmUgdGhlIElPTU1VIHNldHVwIGZvclxuMTI0NjpcdFx0ICogaXQgaXMgZG9uZSBvciBvdGhlcndpc2UgdGhlIGZpcm13YXJlIHdpbGwgY3Jhc2ggcmlnaHQgYWZ0ZXIgdGhlIFNNTVVcbjEyNDc6XHRcdCAqIGdldHMgcHJvYmVkIGFuZCBlbmFibGVkLlxuMTI0ODpcdFx0ICovXG4xMjQ5Olx0XHR3cml0ZWwocmVhZGwoZnNsX21jX3JlZ3MgJiM0MzsgRlNMX01DX0dDUjEpIHwgKEdDUjFfUDFfU1RPUCB8IEdDUjFfUDJfU1RPUCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjI2CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSB2ZmlvX2ZzbF9tYyBEcml2ZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB2ZmlvX2ZzbF9tY2AgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSwgcGFydGljdWxhcmx5IGhvdyBpdCYjMzk7cyByZWdpc3RlcmVkIHdpdGggdGhlIGtlcm5lbCBhbmQgaG93IHRoZSBwcm9iZSBtZWNoYW5pc20gd29ya3MuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCB3aXRoIFZGSU8gYW5kIEZyZWVzY2FsZSYjMzk7cyAob3IsIG1vcmUgbGlrZWx5LCBOWFAmIzM5O3MpIE1DIChNdWx0aWNvcmUpIGFyY2hpdGVjdHVyZSwgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLiBUaGUgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGU7IEkgbmVlZCB0byBnZXQgaW50byB0aGUgYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AgZmlsZSBhbmQgZGlzc2VjdCBpdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJIG5lZWQgdG8gc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgdGhpcyBkcml2ZXImIzM5O3Mgcm9sZSBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XG4gNTIxOlx0XHQvKiBkZXZpY2Vfc2V0IGlzIHJlbGVhc2VkIGJ5IHZmaW8gY29yZSBpZiBAaW5pdCBmYWlscyAqL1xuIDUyMjpcdFx0cmV0dXJuIHZmaW9fZnNsX21jX2luaXRfZGV2aWNlKHZkZXYpO1xuIDUyMzpcdH1cbiA1MjQ6XHRcbiA1MjU6XHRzdGF0aWMgaW50IHZmaW9fZnNsX21jX3Byb2JlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19kZXYpXG4gNTI2Olx0e1xuIDUyNzpcdFx0c3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldjtcbiA1Mjg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jX2Rldi1cdTAwM2VkZXY7XG4gNTI5Olx0XHRpbnQgcmV0O1xuIDUzMDpcdFxuIDUzMTpcdFx0dmRldiA9IHZmaW9fYWxsb2NfZGV2aWNlKHZmaW9fZnNsX21jX2RldmljZSwgdmRldiwgZGV2LFxuIDUzMjpcdFx0XHRcdFx0IFx1MDAyNnZmaW9fZnNsX21jX29wcyk7XG4gNTMzOlx0XHRpZiAoSVNfRVJSKHZkZXYpKVxuIDUzNDpcdFx0XHRyZXR1cm4gUFRSX0VSUih2ZGV2KTtcbiA1MzU6XHRcbiA1MzY6XHRcdHJldCA9IHZmaW9fcmVnaXN0ZXJfZ3JvdXBfZGV2KFx1MDAyNnZkZXYtXHUwMDNldmRldik7XG4gNTM3Olx0XHRpZiAocmV0KSB7XG4gNTM4Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtWRklPX0ZTTF9NQzogRmFpbGVkIHRvIGFkZCB0byB2ZmlvIGdyb3VwXFxuXCYjMzQ7KTtcbiA1Mzk6XHRcdFx0Z290byBvdXRfcHV0X3ZkZXY7XG4gNTQwOlx0XHR9XG4gNTQxOlx0XG4gNTQyOlx0XHRyZXQgPSB2ZmlvX2ZzbF9tY19zY2FuX2NvbnRhaW5lcihtY19kZXYpO1xuIDU0MzpcdFx0aWYgKHJldClcbiA1NDQ6XHRcdFx0Z290byBvdXRfZ3JvdXBfZGV2O1xuIDU0NTpcdFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgdmRldik7XG4gNTQ2Olx0XHRyZXR1cm4gMDtcbiA1NDc6XHRcbiA1NDg6XHRvdXRfZ3JvdXBfZGV2OlxuIDU0OTpcdFx0dmZpb191bnJlZ2lzdGVyX2dyb3VwX2RldihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpO1xuIDU1MDpcdG91dF9wdXRfdmRldjpcbiA1NTE6XHRcdHZmaW9fcHV0X2RldmljZShcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpO1xuIDU1MjpcdFx0cmV0dXJuIHJldDtcbiA1NTM6XHR9XG4gNTU0Olx0XG4gNTU1Olx0c3RhdGljIHZvaWQgdmZpb19mc2xfbWNfcmVsZWFzZV9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXG4gNTU2Olx0e1xuIDU1NzpcdFx0c3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldiA9XG4gNTU4Olx0XHRcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UsIHZkZXYpO1xuIDU1OTpcdFxuIDU2MDpcdFx0dmZpb19mc2xfdW5pbml0X2RldmljZSh2ZGV2KTtcbiA1NjE6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2dmRldi1cdTAwM2VpZ2F0ZSk7XG4gNTYyOlx0fVxuIDU2MzpcdFxuIDU2NDpcdHN0YXRpYyB2b2lkIHZmaW9fZnNsX21jX3JlbW92ZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuIDU2NTpcdHtcbiA1NjY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jX2Rldi1cdTAwM2VkZXY7XG4gNTY3Olx0XHRzdHJ1Y3QgdmZpb19mc2xfbWNfZGV2aWNlICp2ZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gNTY4Olx0XG4gNTY5Olx0XHR2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KFx1MDAyNnZkZXYtXHUwMDNldmRldik7XG4gNTcwOlx0XHRkcHJjX3JlbW92ZV9kZXZpY2VzKG1jX2RldiwgTlVMTCwgMCk7XG4gNTcxOlx0XHR2ZmlvX3B1dF9kZXZpY2UoXHUwMDI2dmRldi1cdTAwM2V2ZGV2KTtcbiA1NzI6XHR9XG4gNTczOlx0XG4gNTc0Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19mc2xfbWNfb3BzID0ge1xuIDU3NTpcdFx0Lm5hbWVcdFx0PSBcJiMzNDt2ZmlvLWZzbC1tY1wmIzM0OyxcbiA1NzY6XHRcdC5pbml0XHRcdD0gdmZpb19mc2xfbWNfaW5pdF9kZXYsXG4gNTc3Olx0XHQucmVsZWFzZVx0PSB2ZmlvX2ZzbF9tY19yZWxlYXNlX2RldixcbiA1Nzg6XHRcdC5vcGVuX2RldmljZVx0PSB2ZmlvX2ZzbF9tY19vcGVuX2RldmljZSxcbiA1Nzk6XHRcdC5jbG9zZV9kZXZpY2VcdD0gdmZpb19mc2xfbWNfY2xvc2VfZGV2aWNlLFxuIDU4MDpcdFx0LmlvY3RsXHRcdD0gdmZpb19mc2xfbWNfaW9jdGwsXG4gNTgxOlx0XHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX2ZzbF9tY19pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG4gNTgyOlx0XHQucmVhZFx0XHQ9IHZmaW9fZnNsX21jX3JlYWQsXG4gNTgzOlx0XHQud3JpdGVcdFx0PSB2ZmlvX2ZzbF9tY193cml0ZSxcbiA1ODQ6XHRcdC5tbWFwXHRcdD0gdmZpb19mc2xfbWNfbW1hcCxcbiA1ODU6XHRcdC5iaW5kX2lvbW11ZmRcdD0gdmZpb19pb21tdWZkX3BoeXNpY2FsX2JpbmQsXG4gNTg2Olx0XHQudW5iaW5kX2lvbW11ZmRcdD0gdmZpb19pb21tdWZkX3BoeXNpY2FsX3VuYmluZCxcbiA1ODc6XHRcdC5hdHRhY2hfaW9hc1x0PSB2ZmlvX2lvbW11ZmRfcGh5c2ljYWxfYXR0YWNoX2lvYXMsXG4gNTg4Olx0XHQuZGV0YWNoX2lvYXNcdD0gdmZpb19pb21tdWZkX3BoeXNpY2FsX2RldGFjaF9pb2FzLFxuIDU4OTpcdH07XG4gNTkwOlx0XG4gNTkxOlx0c3RhdGljIHN0cnVjdCBmc2xfbWNfZHJpdmVyIHZmaW9fZnNsX21jX2RyaXZlciA9IHtcbiA1OTI6XHRcdC5wcm9iZVx0XHQ9IHZmaW9fZnNsX21jX3Byb2JlLFxuIDU5MzpcdFx0LnJlbW92ZVx0XHQ9IHZmaW9fZnNsX21jX3JlbW92ZSxcbiA1OTQ6XHRcdC5kcml2ZXJcdD0ge1xuIDU5NTpcdFx0XHQubmFtZVx0PSBcJiMzNDt2ZmlvLWZzbC1tY1wmIzM0OyxcbiA1OTY6XHRcdH0sXG4gNTk3Olx0XHQuZHJpdmVyX21hbmFnZWRfZG1hID0gdHJ1ZSxcbiA1OTg6XHR9O1xuIDU5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI5MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBmc2xfbWMgRHJpdmVyIGFuZCBpdHMgRW52aXJvbm1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCB0aGUgYGZzbF9tY19kcml2ZXJgIGlzIHJlZ2lzdGVyZWQsIGl0cyBwcm9iZSBmdW5jdGlvbiB0aWVkIHRvIHRoZSBgZnNsLW1jYCBidXMuIE15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7V2hhdCBleGFjdGx5ICppcyogdGhpcyBgZnNsLW1jYCBidXM/JiMzNDsgQSBxdWljayBzZWFyY2ggY29uZmlybXMgaXQmIzM5O3MgdGhlICYjMzQ7UW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkcml2ZXIsJiMzNDsgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBGcmVlc2NhbGUvTlhQJiMzOTtzIHByb3ByaWV0YXJ5IExheWVyc2NhcGUgUW9ySVEgRFBBQTIgKERhdGEgUGF0aCBBY2NlbGVyYXRpb24gQXJjaGl0ZWN0dXJlIEdlbiAyKSBNYW5hZ2VtZW50IENvbXBsZXggKE1DKSBoYXJkd2FyZS4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSwgdHlwaWNhbGx5IEFSTSBvciBQb3dlclBDLCB0aG91Z2ggSSYjMzk7dmUgc2VlbiBMYXllcnNjYXBlIGluIHRoZSBtaXggdG9vLgoKTm93LCBteSBuZXh0IHF1ZXN0aW9uOiBpcyB0aGVyZSBhbnkgZW11bGF0aW9uIG9mIHRoaXMgYnVzIGF2YWlsYWJsZSBpbiBzdGFuZGFyZCBRRU1VIG9uIHg4Nl82NCBvciBhbWQ2ND8gVGhlIGFuc3dlciBpcyBuby4gUUVNVSBkb2VzbiYjMzk7dCBvZmZlciBhbnkgZW11bGF0aW9uIGZvciB0aGUgTlhQIExheWVyc2NhcGUgRFBBQTIgTWFuYWdlbWVudCBDb21wbGV4LiBJbiBmYWN0LCBvbiB4ODZfNjQsIHRoZSBgRlNMX01DX0JVU2AgY29tcG9uZW50IGlzIG9ubHkgY29tcGlsZWQgaWYgdGhlIGBDT01QSUxFX1RFU1RgIGZsYWcgaXMgc2V0LiBEaWdnaW5nIGludG8gdGhlIEtjb25maWcsIGl0IHNlZW1zIGl0IGRlcGVuZHMgb24gYE9GYCAoT3BlbiBGaXJtd2FyZS9EZXZpY2UgVHJlZSkgYW5kLCBvbiB4ODZfNjQsIGBPRmAgaXMgKm9ubHkqIGVuYWJsZWQgaW4gdGhlIGBDT01QSUxFX1RFU1RgIGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgbm90IGF0IGFsbCwgdW5sZXNzIGBDT01QSUxFX1RFU1RgIGlzIHNldCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBtYXRjaGVzLCB3aGljaCBpcyBlaXRoZXIgcGh5c2ljYWwgTlhQIFFvcklRIERQQUEyIFNvQyBoYXJkd2FyZSBvciBhbiBBQ1BJIG1hdGNoICYjMzQ7TlhQMDAwOCYjMzQ7IHdpdGggYWN0dWFsIE1DIGZpcm13YXJlIHJlZ2lzdGVycy4KClNvLCByZWFsaXN0aWNhbGx5LCB0aGlzIGNvZGUgaXMgZGVzaWduZWQgdG8gcnVuIG9uIHNwZWNpZmljIGhhcmR3YXJlLiBHaXZlbiB0aGlzIGhhcmR3YXJlIGRlcGVuZGVuY3ksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXMgdGhlcmUgYW55dGhpbmcgdGhhdCBtaWdodCAqZHluYW1pY2FsbHkqIGNyZWF0ZSBhbiBmc2wtbWMgZGV2aWNlLCBwZXJoYXBzIHZpcnR1YWxseT8gU29tZXRoaW5nIHRoYXQgY2FuIGJlIGJyb3VnaHQgdXAgd2l0aG91dCBkZWRpY2F0ZWQgaGFyZHdhcmU/JiMzNDsgVG8gaW52ZXN0aWdhdGUgdGhhdCwgSSYjMzk7bGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGNhbGxzIHRvIGBmc2xfbWNfZGV2aWNlX2FkZGAgYW5kIHNlZSB3aGVyZSB0aGlzIG1pZ2h0IGJlIGNhbGxlZCBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2xfbWNfZGV2aWNlX2FkZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz0xNjk9c3RhdGljIHZvaWQgZnNsX21jX29ial9kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19idXNfZGV2LFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE4Mi1cdH0gZWxzZSB7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzoxODM6XHRcdGVycm9yID0gZnNsX21jX2RldmljZV9hZGQob2JqX2Rlc2MsIE5VTEwsIFx1MDAyNm1jX2J1c19kZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTg0LVx0XHRcdFx0XHQgIFx1MDAyNmNoaWxkX2Rldik7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz03Mzc9c3RhdGljIHZvaWQgZnNsX21jX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTc1MS0gKi9cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NzUyOmludCBmc2xfbWNfZGV2aWNlX2FkZChzdHJ1Y3QgZnNsX21jX29ial9kZXNjICpvYmpfZGVzYyxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzUzLVx0XHQgICAgICBzdHJ1Y3QgZnNsX21jX2lvICptY19pbyxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg3OS19XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjg4MDpFWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfZGV2aWNlX2FkZCk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4MS1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEwMzk9c3RhdGljIGludCBmc2xfbWNfYnVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTU3LVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMTU4Olx0ZXJyb3IgPSBmc2xfbWNfZGV2aWNlX2FkZChcdTAwMjZvYmpfZGVzYywgbWNfaW8sIFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcdTAwMjZtY19idXNfZGV2KTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE1OS1cdGlmIChlcnJvciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaD02MDE9c3RydWN0IGZzbF9tY19idXMge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTYxMy1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oOjYxNDppbnQgX19tdXN0X2NoZWNrIGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmgtNjE1LVx0XHRcdFx0ICAgc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODUyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgZnNsLW1jLWJ1cyBQcm9iZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhpcyBgZnNsX21jX2J1c19wcm9iZWAgZnVuY3Rpb24gd29ya3MuIEl0IHNlZW1zIGxpa2UgdGhlIHByb2JlIGlzIHRyaWdnZXJlZCBieSBhIGBwbGF0Zm9ybV9kZXZpY2VgIHRoYXQgbWF0Y2hlcyBlaXRoZXIgdGhlIGBmc2xfbWNfYnVzX21hdGNoX3RhYmxlYCBvciwgaWYgd2UmIzM5O3JlIG9uIEFDUEksIHRoZSBgZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbm90aW5nIHRoYXQgJiMzNDtOWFAwMDA4JiMzNDsgaXMgaW4gdGhlIEFDUEkgdGFibGUuIFRoYXQgdGVsbHMgbWUgd2hhdCBraW5kIG9mIGRldmljZSB0aGUgc3lzdGVtJiMzOTtzIGxpa2VseSB0YXJnZXRpbmcuCgpSaWdodCwgc28gaW4gdGhpcyBwcm9iZSBmdW5jdGlvbiwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZHJpdmVyICphY3R1YWxseSogaW50ZXJhY3RzIHdpdGggdGhlIE1DIGZpcm13YXJlIG9uIHRoZSBoYXJkd2FyZS4gTm93LCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBmc2xfbWNfYnVzX3Byb2JlYCBmdW5jdGlvbiBpdHNlbGYuIEkmIzM5O2xsIG9wZW4gdXAgYGRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmNgIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDA6XHR7XG4xMDQxOlx0XHRzdHJ1Y3QgZnNsX21jX29ial9kZXNjIG9ial9kZXNjO1xuMTA0MjpcdFx0aW50IGVycm9yO1xuMTA0MzpcdFx0c3RydWN0IGZzbF9tYyAqbWM7XG4xMDQ0Olx0XHRzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2RldiA9IE5VTEw7XG4xMDQ1Olx0XHRzdHJ1Y3QgZnNsX21jX2lvICptY19pbyA9IE5VTEw7XG4xMDQ2Olx0XHRpbnQgY29udGFpbmVyX2lkO1xuMTA0NzpcdFx0cGh5c19hZGRyX3QgbWNfcG9ydGFsX3BoeXNfYWRkcjtcbjEwNDg6XHRcdHUzMiBtY19wb3J0YWxfc2l6ZSwgbWNfc3RyZWFtX2lkO1xuMTA0OTpcdFx0c3RydWN0IHJlc291cmNlICpwbGF0X3JlcztcbjEwNTA6XHRcbjEwNTE6XHRcdG1jID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKm1jKSwgR0ZQX0tFUk5FTCk7XG4xMDUyOlx0XHRpZiAoIW1jKVxuMTA1MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEwNTQ6XHRcbjEwNTU6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTtcbjEwNTY6XHRcbjEwNTc6XHRcdHBsYXRfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTtcbjEwNTg6XHRcdGlmIChwbGF0X3Jlcykge1xuMTA1OTpcdFx0XHRtYy1cdTAwM2Vmc2xfbWNfcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9yZXMpO1xuMTA2MDpcdFx0XHRpZiAoSVNfRVJSKG1jLVx1MDAzZWZzbF9tY19yZWdzKSlcbjEwNjE6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihtYy1cdTAwM2Vmc2xfbWNfcmVncyk7XG4xMDYyOlx0XHR9XG4xMDYzOlx0XG4xMDY0Olx0XHRpZiAobWMtXHUwMDNlZnNsX21jX3JlZ3MpIHtcbjEwNjU6XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FDUEkpIFx1MDAyNlx1MDAyNiAhZGV2X29mX25vZGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpKSB7XG4xMDY2Olx0XHRcdFx0bWNfc3RyZWFtX2lkID0gcmVhZGwobWMtXHUwMDNlZnNsX21jX3JlZ3MgJiM0MzsgRlNMX01DX0ZBUFIpO1xuMTA2NzpcdFx0XHRcdC8qXG4xMDY4Olx0XHRcdFx0ICogSFcgT1JzIHRoZSBQTCBhbmQgQk1UIGJpdCwgcGxhY2VzIHRoZSByZXN1bHQgaW4gYml0XG4xMDY5Olx0XHRcdFx0ICogMTQgb2YgdGhlIFN0cmVhbUlEIGFuZCBPUnMgaW4gdGhlIElDSUQuIENhbGN1bGF0ZSBpdFxuMTA3MDpcdFx0XHRcdCAqIGFjY29yZGluZ2x5LlxuMTA3MTpcdFx0XHRcdCAqL1xuMTA3MjpcdFx0XHRcdG1jX3N0cmVhbV9pZCA9IChtY19zdHJlYW1faWQgXHUwMDI2IDB4ZmZmZikgfFxuMTA3MzpcdFx0XHRcdFx0KChtY19zdHJlYW1faWQgXHUwMDI2IChNQ19GQVBSX1BMIHwgTUNfRkFQUl9CTVQpKSA/XG4xMDc0Olx0XHRcdFx0XHRcdEJJVCgxNCkgOiAwKTtcbjEwNzU6XHRcdFx0XHRlcnJvciA9IGFjcGlfZG1hX2NvbmZpZ3VyZV9pZChcdTAwMjZwZGV2LVx1MDAzZWRldixcbjEwNzY6XHRcdFx0XHRcdFx0XHQgICAgICBERVZfRE1BX0NPSEVSRU5ULFxuMTA3NzpcdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNm1jX3N0cmVhbV9pZCk7XG4xMDc4Olx0XHRcdFx0aWYgKGVycm9yID09IC1FUFJPQkVfREVGRVIpXG4xMDc5Olx0XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4xMDgwOlx0XHRcdFx0aWYgKGVycm9yKVxuMTA4MTpcdFx0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4xMDgyOlx0XHRcdFx0XHRcdCBcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGRtYTogJWQuXFxuXCYjMzQ7LFxuMTA4MzpcdFx0XHRcdFx0XHQgZXJyb3IpO1xuMTA4NDpcdFx0XHR9XG4xMDg1Olx0XG4xMDg2Olx0XHRcdC8qXG4xMDg3Olx0XHRcdCAqIFNvbWUgYm9vdGxvYWRlcnMgcGF1c2UgdGhlIE1DIGZpcm13YXJlIGJlZm9yZSBib290aW5nIHRoZVxuMTA4ODpcdFx0XHQgKiBrZXJuZWwgc28gdGhhdCBNQyB3aWxsIG5vdCBjYXVzZSBmYXVsdHMgYXMgc29vbiBhcyB0aGVcbjEwODk6XHRcdFx0ICogU01NVSBwcm9iZXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlcmUmIzM5O3Mgbm8gY29uZmlndXJhdGlvblxuMTA5MDpcdFx0XHQgKiBpbiBwbGFjZSBmb3IgTUMuXG4xMDkxOlx0XHRcdCAqIEF0IHRoaXMgcG9pbnQgTUMgc2hvdWxkIGhhdmUgYWxsIGl0cyBTTU1VIHNldHVwIGRvbmUgc28gbWFrZVxuMTA5MjpcdFx0XHQgKiBzdXJlIGl0IGlzIHJlc3VtZWQuXG4xMDkzOlx0XHRcdCAqL1xuMTA5NDpcdFx0XHR3cml0ZWwocmVhZGwobWMtXHUwMDNlZnNsX21jX3JlZ3MgJiM0MzsgRlNMX01DX0dDUjEpIFx1MDAyNlxuMTA5NTpcdFx0XHRcdCAgICAgKH4oR0NSMV9QMV9TVE9QIHwgR0NSMV9QMl9TVE9QKSksXG4xMDk2Olx0XHRcdCAgICAgICBtYy1cdTAwM2Vmc2xfbWNfcmVncyAmIzQzOyBGU0xfTUNfR0NSMSk7XG4xMDk3Olx0XHR9XG4xMDk4Olx0XG4xMDk5Olx0XHRlcnJvciA9IGZzbF9tY19maXJtd2FyZV9jaGVjayhwZGV2KTtcbjExMDA6XHRcdGlmIChlcnJvcilcbjExMDE6XHRcdFx0cmV0dXJuIGVycm9yO1xuMTEwMjpcdFxuMTEwMzpcdFx0LypcbjExMDQ6XHRcdCAqIEdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIE1DIHBvcnRhbCBmb3IgdGhlIHJvb3QgRFBSQzpcbjExMDU6XHRcdCAqL1xuMTEwNjpcdFx0cGxhdF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApO1xuMTEwNzpcdFx0aWYgKCFwbGF0X3JlcylcbjExMDg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTA5Olx0XG4xMTEwOlx0XHRtY19wb3J0YWxfcGh5c19hZGRyID0gcGxhdF9yZXMtXHUwMDNlc3RhcnQ7XG4xMTExOlx0XHRtY19wb3J0YWxfc2l6ZSA9IHJlc291cmNlX3NpemUocGxhdF9yZXMpO1xuMTExMjpcdFx0bWNfcG9ydGFsX2Jhc2VfcGh5c19hZGRyID0gbWNfcG9ydGFsX3BoeXNfYWRkciBcdTAwMjYgfjB4M2ZmZmZmZjtcbjExMTM6XHRcbjExMTQ6XHRcdGVycm9yID0gZnNsX2NyZWF0ZV9tY19pbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgbWNfcG9ydGFsX3BoeXNfYWRkcixcbjExMTU6XHRcdFx0XHRcdCBtY19wb3J0YWxfc2l6ZSwgTlVMTCxcbjExMTY6XHRcdFx0XHRcdCBGU0xfTUNfSU9fQVRPTUlDX0NPTlRFWFRfUE9SVEFMLCBcdTAwMjZtY19pbyk7XG4xMTE3Olx0XHRpZiAoZXJyb3IgXHUwMDNjIDApXG4xMTE4Olx0XHRcdHJldHVybiBlcnJvcjtcbjExMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NzIKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogNzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFZGSU8gRHJpdmVyIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGZzbF9tY19idXNfcHJvYmVgIGlzIHRoZSBlbnRyeSBwb2ludCwgY29ubmVjdGluZyB0byB0aGUgcGh5c2ljYWwgTUMgZmlybXdhcmUgYW5kIHNldHRpbmcgdXAgY2hpbGQgZGV2aWNlcy4gVGhlbiwgYHZmaW9fZnNsX21jYCBpcyB0aGUgVkZJTyBkcml2ZXIgdGFpbG9yZWQgZm9yIGRldmljZXMgb24gdGhlIGBmc2wtbWNgIGJ1cywgc3BlY2lmaWNhbGx5IHRob3NlIGZvdW5kIGluIEZyZWVzY2FsZS9OWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUuCgpJIG5lZWQgdG8gY29uZmlybSwgYnV0IEkgYmVsaWV2ZSB0aGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhpcyBraW5kIG9mIGhhcmR3YXJlLCBhIExheWVyc2NhcGUgU29DIGZlYXR1cmUsIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gU2VjdGlvbiAyIGNvbmZpcm1zIHRoaXM6ICYjMzQ7VmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMuLi4gcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7IHdpdGggYSB0YXJnZXQgb2YgJiMzNDthbWQ2NCYjMzQ7LgoKU3BlY2lmaWNhbGx5LCB0aGlzIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNgIGZpbGUgaXMgdGhlIFZGSU8gZHJpdmVyIGZvciB0aGUgYGZzbC1tY2AgYnVzIGRldmljZXMuIFRoaXMgaXMgTlhQIExheWVyc2NhcGUgaGFyZHdhcmUsIGFuIEFSTS9Qb3dlclBDIFNvQyBmZWF0dXJlLCBhbmQgbm90IHNvbWV0aGluZyB0aGF0IGV4aXN0cyBvciBpcyBlbXVsYXRlZCBvbiBhbWQ2NCBpbiBzdGFuZGFyZCBRRU1VLiBJbiBmYWN0LCBgRlNMX01DX0JVU2Agd29uJiMzOTt0IGV2ZW4gYmUgZW5hYmxlZCBvbiBhbWQ2NCB1bmxlc3MgYENPTVBJTEVfVEVTVGAgaXMgZW5hYmxlZCwgYW5kIGV2ZW4gdGhlbiwgeW91IG5lZWQgdGhlIGFjdHVhbCBoYXJkd2FyZSByZWdpc3RlcnMvZmlybXdhcmUgdG8gZXZlbiBnZXQgYW4gYGZzbC1tY2AgZGV2aWNlIHRvIHByb2JlLiBXaXRob3V0IGEgdmFsaWQgYGZzbC1tY2AgZGV2aWNlLCB0aGUgYHZmaW9fZnNsX21jYCBkcml2ZXIgd29uJiMzOTt0IGV2ZXIgcHJvYmUgb3IgY3JlYXRlIGAvZGV2L3ZmaW8vKmAgbm9kZXMuCgpTbywgbGV0JiMzOTtzIHNlZSBpZiBJIG1pc3NlZCBhbnkgb3RoZXIgZW50cnkgcG9pbnQuIGB2ZmlvX2ZzbF9tY19tbWFwX21taW9gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB2ZmlvX2ZzbF9tY19tbWFwYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgYHZmaW9fZnNsX21jX29wc2Agc3RydWN0LiBUaGlzIGB2ZmlvX2ZzbF9tY19vcHNgIHN0cnVjdCBpcyBvbmx5IHJlZ2lzdGVyZWQgd2hlbiBhbiBgZnNsX21jX2RldmljZWAgcHJvYmVzIHdpdGggYHZmaW9fZnNsX21jX2RyaXZlcmAuICBCZWNhdXNlIHRoZXNlIGBmc2xfbWNfZGV2aWNlYCBpbnN0YW5jZXMgb25seSBleGlzdCBvbiByZWFsIE5YUCBMYXllcnNjYXBlIGhhcmR3YXJlIChvciwgaHlwb3RoZXRpY2FsbHksIGlmIFFFTVUgZW11bGF0ZWQgaXQg4oCTIHdoaWNoIGl0IGRvZXNuJiMzOTt0LCBlc3BlY2lhbGx5IG5vdCBvbiBhbWQ2NCksIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAsIGxpa2UgYW1kNjQvUUVNVS9HQ0UuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIHRvIGJlIHRob3JvdWdoOgotICoqVGFyZ2V0IEFyY2hpdGVjdHVyZToqKiBhbWQ2NC4KLSAqKk1vZGlmaWVkIEZpbGU6KiogYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AuCi0gKipNb2RpZmllZCBGdW5jdGlvbjoqKiBgdmZpb19mc2xfbWNfbW1hcF9tbWlvYC4KLSAqKkRyaXZlcjoqKiBGcmVlc2NhbGUgUW9ySVEgRFBBQTIgVkZJTyBkcml2ZXIuCi0gKipSZWFjaGFiaWxpdHk6KiogU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1ZSB0byB0aGUgbmVlZCBmb3IgTlhQIExheWVyc2NhcGUgU29DL0RQQUEyIGhhcmR3YXJlIGFuZCBgZnNsLW1jYCBidXMsIG5vbmUgb2Ygd2hpY2ggaXMgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGVzcGVjaWFsbHkgbm90IG9uIGFtZDY0LgoKVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgbm90IHdvcnRoIGZ1enppbmcuIFRoZSByZXN1bHQgbmVlZHMgdG8gYmUgYFdvcnRoRnV6emluZzogZmFsc2VgLCB3aXRoIGVtcHR5IGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgbGlzdHMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IGB2ZmlvX2ZzbF9tY2AgcmVxdWlyZXMgTlhQIExheWVyc2NhcGUgRFBBQTIgaGFyZHdhcmUsIHdoaWNoIGlzIGFic2VudCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9hbWQ2NCkuIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMsIHdoaWNoIGlzIHRoZSBWRklPIGRyaXZlciBmb3IgTlhQIFFvcklRIERQQUEyIChmc2wtbWMgYnVzKSBTb0MgZGV2aWNlcy4gVGhpcyBoYXJkd2FyZSBpcyBzcGVjaWZpYyB0byBOWFAgTGF5ZXJzY2FwZSBTb0NzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYywgd2hpY2ggaXMgdGhlIFZGSU8gZHJpdmVyIGZvciBOWFAgUW9ySVEgRFBBQTIgKGZzbC1tYyBidXMpIFNvQyBkZXZpY2VzLiBUaGlzIGhhcmR3YXJlIGlzIHNwZWNpZmljIHRvIE5YUCBMYXllcnNjYXBlIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxMzoyMS45MzQxMDAwOTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI1NTI1MDQ1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYywgd2hpY2ggaXMgdGhlIFZGSU8gZHJpdmVyIGZvciBOWFAgUW9ySVEgRFBBQTIgKGZzbC1tYyBidXMpIFNvQyBkZXZpY2VzLiBUaGlzIGhhcmR3YXJlIGlzIHNwZWNpZmljIHRvIE5YUCBMYXllcnNjYXBlIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjEzOjIxLjkzNDEwODM3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0OTQ1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGViMzAyMDE4Y2E5NWRiYWFhN2MwYTc0ZGJjMzc2Mzg2YThhNmMzNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDE0OjEzOjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY1xcbmluZGV4IGI0YzM5NTgyMDFiMjUuLjlmYzZmOTEzNmUwMWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXFxuKysrIGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXFxuQEAgLTM2OSw5ICszNjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZnNsX21jX21tYXBfbW1pbyhzdHJ1Y3QgdmZpb19mc2xfbWNfcmVnaW9uIHJlZ2lvbixcXG4gXFx0aWYgKCFyZWdpb25fY2FjaGVhYmxlKVxcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpO1xcbiBcXG4tXFx0dm1hLVxcdTAwM2V2bV9wZ29mZiA9IChyZWdpb24uYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSArIHBnb2ZmO1xcbi1cXG4tXFx0cmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIHZtYS1cXHUwMDNldm1fcGdvZmYsXFxuK1xcdHJldHVybiByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LFxcbitcXHRcXHRcXHQgICAgICAgKHJlZ2lvbi5hZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpICsgcGdvZmYsXFxuIFxcdFxcdFxcdCAgICAgICBzaXplLCB2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjEzOjIyLjQ2MDQxMTY5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEyMDI2MTcyODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYywgd2hpY2ggaXMgdGhlIFZGSU8gZHJpdmVyIGZvciBOWFAgUW9ySVEgRFBBQTIgKGZzbC1tYyBidXMpIFNvQyBkZXZpY2VzLiBUaGlzIGhhcmR3YXJlIGlzIHNwZWNpZmljIHRvIE5YUCBMYXllcnNjYXBlIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGViMzAyMDE4Y2E5NWRiYWFhN2MwYTc0ZGJjMzc2Mzg2YThhNmMzNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6MTM6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMgYi9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNcbmluZGV4IGI0YzM5NTgyMDFiMjUuLjlmYzZmOTEzNmUwMWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNcbisrKyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY1xuQEAgLTM2OSw5ICszNjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZnNsX21jX21tYXBfbW1pbyhzdHJ1Y3QgdmZpb19mc2xfbWNfcmVnaW9uIHJlZ2lvbixcbiBcdGlmICghcmVnaW9uX2NhY2hlYWJsZSlcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXG4tXHR2bWEtXHUwMDNldm1fcGdvZmYgPSAocmVnaW9uLmFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpICsgcGdvZmY7XG4tXG4tXHRyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fcGdvZmYsXG4rXHRyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LFxuK1x0XHRcdCAgICAgICAocmVnaW9uLmFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpICsgcGdvZmYsXG4gXHRcdFx0ICAgICAgIHNpemUsIHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjEzOjIyLjQ2MDQxNDQ0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNjgyODc5MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHdpdGggdGhhdCBgZnNsLW1jYCBpZGVudGlmaWVyLiBJIG5lZWQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0IGBmc2wtbWNgIGV2ZW4gKmlzKiBpbiB0aGlzIGNvbnRleHQuIElzIGl0IGhhcmR3YXJlLXNwZWNpZmljPyBBbiBhYnN0cmFjdGlvbiBsYXllcj9cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLiBJJ2xsIHJlYWNoIGZvciBgZ3JlcHBlcmAgKG9yIGV2ZW4gYSBgcmVhZC1maWxlYCB3b3VsZCBkbyBpZiBpdCdzIHNtYWxsIGVub3VnaCkgYW5kIGltbWVkaWF0ZWx5IGxvb2sgYXQgdGhlIGBLY29uZmlnYCBhbmQvb3IgdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBgZHJpdmVycy92ZmlvL2ZzbC1tY2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgb3IgYXJjaGl0ZWN0dXJlIHNwZWNpZmljcyB0aGlzIGNvZGUgaXMgdGllZCB0by4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gncyBpbXBhY3QuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBhZmZlY3RzIGEgd2lkZSByYW5nZSBvZiBwbGF0Zm9ybXMgb3IgaXMgbGltaXRlZCB0byBhIG5hcnJvdyBvbmUuIEtub3dsZWRnZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNhbiBnaXZlIG1lIHNvbWUgaWRlYSBob3cgaW1wb3J0YW50IHRoaXMgY2hhbmdlIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxMzozNC4xNDMyOTgwMzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA2NTU3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVkZJT19GU0xfTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfVkZJT19NREVWKSArPSBtZGV2L1xcbmRyaXZlcnMvdmZpby9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfVkZJT19GU0xfTUMpICs9IGZzbC1tYy9cXG5kcml2ZXJzL3ZmaW8vTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1ZGSU9fQ0RYKSArPSBjZHgvXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc9MT1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIEZTTF9NQyBidXMgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy0zLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo0OmNvbmZpZyBWRklPX0ZTTF9NQ1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvTWFrZWZpbGU9Mz12ZmlvLWZzbC1tYy15IDo9IHZmaW9fZnNsX21jLm8gdmZpb19mc2xfbWNfaW50ci5vXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19WRklPX0ZTTF9NQykgKz0gdmZpby1mc2wtbWMub1xcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTk3PXN0YXRpYyB2b2lkIHZmaW9fZnNsX21jX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0xMTItXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNm1jX2NvbnQtXFx1MDAzZWRldixcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MTEzOlxcdFxcdFxcdCBcXFwiVkZJT19GU0xfTUM6IHJlc2V0IGRldmljZSBoYXMgZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTExNC1cXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz0xMjA9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19pb2N0bF9nZXRfcmVnaW9uX2luZm8oc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMTMxLVxcdC8qIG1hcCBvZmZzZXQgdG8gdGhlIHBoeXNpY2FsIGFkZHJlc3MgICovXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjEzMjpcXHRpbmZvLVxcdTAwM2VvZmZzZXQgPSBWRklPX0ZTTF9NQ19JTkRFWF9UT19PRkZTRVQoaW5mby1cXHUwMDNlaW5kZXgpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0xMzMtXFx0aW5mby1cXHUwMDNlc2l6ZSA9IHZkZXYtXFx1MDAzZXJlZ2lvbnNbaW5mby1cXHUwMDNlaW5kZXhdLnNpemU7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9MjM0PXN0YXRpYyBzc2l6ZV90IHZmaW9fZnNsX21jX3JlYWQoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMjM4LVxcdFxcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UsIHZkZXYpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzoyMzk6XFx0dW5zaWduZWQgaW50IGluZGV4ID0gVkZJT19GU0xfTUNfT0ZGU0VUX1RPX0lOREVYKCpwcG9zKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MjQwOlxcdGxvZmZfdCBvZmYgPSAqcHBvcyBcXHUwMDI2IFZGSU9fRlNMX01DX09GRlNFVF9NQVNLO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0yNDEtXFx0c3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldiA9IHZkZXYtXFx1MDAzZW1jX2RldjtcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz0zMTI9c3RhdGljIHNzaXplX3QgdmZpb19mc2xfbWNfd3JpdGUoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzE3LVxcdFxcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UsIHZkZXYpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzozMTg6XFx0dW5zaWduZWQgaW50IGluZGV4ID0gVkZJT19GU0xfTUNfT0ZGU0VUX1RPX0lOREVYKCpwcG9zKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MzE5OlxcdGxvZmZfdCBvZmYgPSAqcHBvcyBcXHUwMDI2IFZGSU9fRlNMX01DX09GRlNFVF9NQVNLO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0zMjAtXFx0c3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldiA9IHZkZXYtXFx1MDAzZW1jX2RldjtcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz0zNTM9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19tbWFwX21taW8oc3RydWN0IHZmaW9fZnNsX21jX3JlZ2lvbiByZWdpb24sXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzYwLVxcdHBnb2ZmID0gdm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDI2XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjM2MTpcXHRcXHQoKDFVIFxcdTAwM2NcXHUwMDNjIChWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKSkgLSAxKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzYyLVxcdGJhc2UgPSBwZ29mZiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTM3Nz1zdGF0aWMgaW50IHZmaW9fZnNsX21jX21tYXAoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzg0LVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzozODU6XFx0aW5kZXggPSB2bWEtXFx1MDAzZXZtX3Bnb2ZmIFxcdTAwM2VcXHUwMDNlIChWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzg2LVxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQxNT1zdGF0aWMgaW50IHZmaW9fZnNsX21jX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQyNi1cXHRcXHRpZiAoZGV2aWNlX3NldF9kcml2ZXJfb3ZlcnJpZGUoZGV2LCB2ZmlvX2ZzbF9tY19vcHMubmFtZSkpXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQyNzpcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJWRklPX0ZTTF9NQzogU2V0dGluZyBkcml2ZXIgb3ZlcnJpZGUgZm9yIGRldmljZSBpbiBkcHJjICVzIGZhaWxlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDI4LVxcdFxcdFxcdFxcdCBkZXZfbmFtZShcXHUwMDI2bWNfY29udC1cXHUwMDNlZGV2KSk7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQyOS1cXHRcXHRlbHNlXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQzMDpcXHRcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJWRklPX0ZTTF9NQzogU2V0dGluZyBkcml2ZXIgb3ZlcnJpZGUgZm9yIGRldmljZSBpbiBkcHJjICVzXFxcXG5cXFwiLFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MzEtXFx0XFx0XFx0XFx0IGRldl9uYW1lKFxcdTAwMjZtY19jb250LVxcdTAwM2VkZXYpKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MzYtXFx0XFx0aWYgKG1jX2RydiBcXHUwMDI2XFx1MDAyNiBtY19kcnYgIT0gXFx1MDAyNnZmaW9fZnNsX21jX2RyaXZlcilcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NDM3OlxcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIlZGSU9fRlNMX01DOiBPYmplY3QgJXMgYm91bmQgdG8gZHJpdmVyICVzIHdoaWxlIERQUkMgYm91bmQgdG8gdmZpby1mc2wtbWNcXFxcblxcXCIsXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQzOC1cXHRcXHRcXHRcXHQgZGV2X25hbWUoZGV2KSwgbWNfZHJ2LVxcdTAwM2Vkcml2ZXIubmFtZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NDQ0PXN0YXRpYyBpbnQgdmZpb19mc2xfbWNfaW5pdF9kZXZpY2Uoc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NjQtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0NjU6XFx0XFx0ZGV2X2VycihcXHUwMDI2bWNfZGV2LVxcdTAwM2VkZXYsIFxcXCJWRklPX0ZTTF9NQzogRmFpbGVkIHRvIHNldHVwIERQUkMgKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDY2LVxcdFxcdGdvdG8gb3V0X25jX3VucmVnO1xcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQ3NT1zdGF0aWMgaW50IHZmaW9fZnNsX21jX3NjYW5fY29udGFpbmVyKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19kZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDg0LVxcdFxcdGRldl9lcnIoXFx1MDAyNm1jX2Rldi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0ODU6XFx0XFx0XFx0XFxcIlZGSU9fRlNMX01DOiBDb250YWluZXIgc2Nhbm5pbmcgZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ4Ni1cXHRcXHRkcHJjX3JlbW92ZV9kZXZpY2VzKG1jX2RldiwgTlVMTCwgMCk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NTI1PXN0YXRpYyBpbnQgdmZpb19mc2xfbWNfcHJvYmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldilcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01MzctXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo1Mzg6XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJWRklPX0ZTTF9NQzogRmFpbGVkIHRvIGFkZCB0byB2ZmlvIGdyb3VwXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNTM5LVxcdFxcdGdvdG8gb3V0X3B1dF92ZGV2O1xcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmgtNi1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaDo3OiNpZm5kZWYgVkZJT19GU0xfTUNfUFJJVkFURV9IXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6ODojZGVmaW5lIFZGSU9fRlNMX01DX1BSSVZBVEVfSFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTktXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTA6I2RlZmluZSBWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQgICAgNDBcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaDoxMTojZGVmaW5lIFZGSU9fRlNMX01DX09GRlNFVF9NQVNLICgoKHU2NCkoMSkgXFx1MDAzY1xcdTAwM2MgVkZJT19GU0xfTUNfT0ZGU0VUX1NISUZUKSAtIDEpXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmgtMTItXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTM6I2RlZmluZSBWRklPX0ZTTF9NQ19PRkZTRVRfVE9fSU5ERVgob2ZmKSAoKG9mZikgXFx1MDAzZVxcdTAwM2UgVkZJT19GU0xfTUNfT0ZGU0VUX1NISUZUKVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTE0LVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oOjE1OiNkZWZpbmUgVkZJT19GU0xfTUNfSU5ERVhfVE9fT0ZGU0VUKGluZGV4KVxcdFxcXFxcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaDoxNjpcXHQoKHU2NCkoaW5kZXgpIFxcdTAwM2NcXHUwMDNjIFZGSU9fRlNMX01DX09GRlNFVF9TSElGVClcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaC0xNy1cXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oPTQ3PXZvaWQgdmZpb19mc2xfbWNfaXJxc19jbGVhbnVwKHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UgKnZkZXYpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTQ4LVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oOjQ5OiNlbmRpZiAvKiBWRklPX0ZTTF9NQ19QUklWQVRFX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTM6MzQuMTkzOTY1MTI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyMTUzMTQxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBWRklPIEZTTC1NQyBLY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWdgIGZpbGUuIEknbSBhc3N1bWluZyB0aGVyZSdzIHNvbWUgY29uZmlndXJhdGlvbiBsb2dpYywgbWF5YmUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBvciBldmVuIGp1c3Qgc29tZSBiYXNpYyBkb2N1bWVudGF0aW9uIEkgbmVlZCB0byByZXZpZXcuIEdpdmVuIHRoZSBjb250ZXh0LCBJIGV4cGVjdCB0aGlzIGBLY29uZmlnYCBmaWxlIGlzIGdvaW5nIHRvIGRpY3RhdGUgdGhlIGJ1aWxkIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBWRklPIChWaXJ0dWFsIEZ1bmN0aW9uIEkvTykgZHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlIChub3cgTlhQKSBNdWx0aS1Db3JlIChNQykgYXJjaGl0ZWN0dXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgc3BlY2lmaWMgTUMgaGFyZHdhcmUgaXMgc3VwcG9ydGVkLCBhbnkgbmVjZXNzYXJ5IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBkcml2ZXJzLCBhbmQgaG93IHRoZSBWRklPIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgYnJvYWRlciBmcmFtZXdvcmsuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBvciBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Ygb3IgYWRqdXN0LiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzczLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTM6NTQuNDA5MjgyODQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0bWVudSBcXFwiVkZJTyBzdXBwb3J0IGZvciBGU0xfTUMgYnVzIGRldmljZXNcXFwiXFxuICAgMjpcXHRcXHRkZXBlbmRzIG9uIEZTTF9NQ19CVVNcXG4gICAzOlxcdFxcbiAgIDQ6XFx0Y29uZmlnIFZGSU9fRlNMX01DXFxuICAgNTpcXHRcXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcXFwiXFxuICAgNjpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBEcml2ZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBWRklPIFFvcklRIERQQUEyIGZzbC1tY1xcbiAgIDk6XFx0XFx0ICAoTWFuYWdlbWVudCBDb21wbGV4KSBkZXZpY2VzLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHBhc3N0aHJvdWdoXFxuICAxMDpcXHRcXHQgIGZzbC1tYyBidXMgZGV2aWNlcyB1c2luZyB0aGUgVkZJTyBmcmFtZXdvcmsuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0ZW5kbWVudVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxMzo1NC40MDkzNTU3NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDA1OTg5NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipWRklPX0ZTTF9NQyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBgVkZJT19GU0xfTUNgIHJlbGllcyBvbiBgRlNMX01DX0JVU2AsIHJpZ2h0PyBHb3QgaXQuIE5vdywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoYXQgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYEZTTF9NQ19CVVNgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBzdGFydCBzZWFyY2hpbmcgYWNyb3NzIHRoZSB3aG9sZSBrZXJuZWwgc291cmNlIHRyZWUgdG8gbG9jYXRlIHdoZXJlIGBGU0xfTUNfQlVTYCBpcyBkZWNsYXJlZCBhbmQgc2VlIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGl0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg1NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTQ6MDEuODE1MzUwODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5MDQ1Nzk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNMX01DX0JVU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy03LVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnOjg6Y29uZmlnIEZTTF9NQ19CVVNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy05LVxcdGJvb2wgXFxcIlFvcklRIERQQUEyIGZzbC1tYyBidXMgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNDowNC42MDU4MjA0MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDcyNDAyMTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IEtjb25maWcgZmlsZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBGU0wtTUMgQnVzIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBGU0wtTUMgKEZyZWVzY2FsZS9OWFAgTXVsdGljb3JlIENvbW11bmljYXRpb24pIGJ1cyBkcml2ZXIgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBsb29rIGlzIGBkcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZ2AuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBjZW50cmFsIHNvdXJjZSBmb3IgYWxsIG9mIHRoZSBjb25maWd1cmFibGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhhdCBzcGVjaWZpYyBkcml2ZXIuIEl04oCZcyB3aGVyZSBhbGwgdGhlIGtleSBzZXR0aW5ncywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBkZXBlbmRlbmNpZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byB3b3JrIHRocm91Z2ggc3BlY2lmaWMgb3B0aW9ucyBhbmQgc2VlIGhvdyB0aGluZ3MgYXJlIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjE1LjMyOTg1MjE1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIERQQUEyIGZzbC1tYyBidXNcXG4gICA0OlxcdCNcXG4gICA1OlxcdCMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy5cXG4gICA2OlxcdCNcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIEZTTF9NQ19CVVNcXG4gICA5OlxcdFxcdGJvb2wgXFxcIlFvcklRIERQQUEyIGZzbC1tYyBidXMgZHJpdmVyXFxcIlxcbiAgMTA6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9MQVlFUlNDQVBFIHx8IChDT01QSUxFX1RFU1QgXFx1MDAyNlxcdTAwMjYgKEFSTSB8fCBBUk02NCB8fCBYODZfTE9DQUxfQVBJQyB8fCBQUEMpKSlcXG4gIDExOlxcdFxcdHNlbGVjdCBHRU5FUklDX01TSV9JUlFcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgRHJpdmVyIHRvIGVuYWJsZSB0aGUgYnVzIGluZnJhc3RydWN0dXJlIGZvciB0aGUgUW9ySVEgRFBBQTJcXG4gIDE0OlxcdFxcdCAgYXJjaGl0ZWN0dXJlLiAgVGhlIGZzbC1tYyBidXMgZHJpdmVyIGhhbmRsZXMgZGlzY292ZXJ5IG9mXFxuICAxNTpcXHRcXHQgIERQQUEyIG9iamVjdHMgKHdoaWNoIGFyZSByZXByZXNlbnRlZCBhcyBMaW51eCBkZXZpY2VzKSBhbmRcXG4gIDE2OlxcdFxcdCAgYmluZGluZyBvYmplY3RzIHRvIGRyaXZlcnMuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBGU0xfTUNfVUFQSV9TVVBQT1JUXFxuICAxOTpcXHRcXHRib29sIFxcXCJNYW5hZ2VtZW50IENvbXBsZXggKE1DKSB1c2Vyc3BhY2Ugc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gRlNMX01DX0JVU1xcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBQcm92aWRlcyB1c2Vyc3BhY2Ugc3VwcG9ydCBmb3IgaW50ZXJyb2dhdGluZywgY3JlYXRpbmcsIGRlc3Ryb3lpbmcgb3JcXG4gIDIzOlxcdFxcdCAgY29uZmlndXJpbmcgRFBBQTIgb2JqZWN0cyBleHBvcnRlZCBieSB0aGUgTWFuYWdlbWVudCBDb21wbGV4LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNDoxNS4zMzAwNzQ0ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ4NDMyNzczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoaXMgY29uZGl0aW9uYWwgZGVwZW5kZW5jeTogYGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX0xBWUVSU0NBUEUgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgKEFSTSB8fCBBUk02NCB8fCBYODZfTE9DQUxfQVBJQyB8fCBQUEMpKSlgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBsb29rcyBsaWtlIGEgY29uZmlndXJhdGlvbiBjaGVjayB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLCBsaWtlbHkgYW4gZW1iZWRkZWQgTGludXggYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgXCJPRlwiIChsaWtlbHkgXCJEZXZpY2UgVHJlZVwiKSBpbXBsaWVzIGhlcmUuIEl0J3MgcGFpcmVkIHdpdGggZWl0aGVyIGEgTGF5ZXJzY2FwZSBhcmNoaXRlY3R1cmUgb3IsIGluIGEgdGVzdC9jb21waWxlIHNjZW5hcmlvLCBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIGxpa2UgQVJNLCBBUk02NCwgWDg2IHdpdGggbG9jYWwgQVBJQywgb3IgUG93ZXJQQy4gVGhpcyBuYXJyb3dzIGRvd24gdGhlIHBvc3NpYmxlIGhhcmR3YXJlIHNpZ25pZmljYW50bHkuXG5cbk5vdywgbXkgcHJpbWFyeSBxdWVzdGlvbiBpcyBhYm91dCBgRlNMX01DYC4gU3BlY2lmaWNhbGx5LCB3aGF0IGlzIGFuIFwiRlNMX01DIGJ1cyBkZXZpY2VcIj8gSXMgaXQgcmVsYXRlZCB0byB0aGUgRnJlZXNjYWxlIChub3cgTlhQKSBNdWx0aS1Db3JlIGZyYW1ld29yaz8gVGhhdCByaW5ncyBhIGJlbGwsIGJ1dCBJIG5lZWQgdG8gY29uZmlybS5cblxuVGhlIGNyaXRpY2FsIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBGU0xfTUMgYnVzIG9yIGRldmljZXMgcmVsYXRlZCB0byB0aGUgXCJWRklPX0ZTTF9NQ1wiIGNhbiBldmVuIGJlIGFjY2Vzc2VkIG9yIHByb2JlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIElmIHRoZXkgYXJlIGhhcmR3YXJlLWRlcGVuZGVudCwgaXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgb25seSBnb2luZyB0byBiZSBhY2Nlc3NpYmxlIHdpdGggYSBkZWRpY2F0ZWQgcGxhdGZvcm0uIE9yIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHNpbXVsYXRlLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIHZpcnR1YWxpemVkIGFtZDY0IGVudmlyb25tZW50LiBJIG5lZWQgdG8ga25vdyB0aGUgZXh0ZW50IHRvIHdoaWNoIHRoaXMgbWlnaHQgYmUgcG9zc2libGUuXG5cblNvLCBsZXQncyBzaGlmdCBnZWFycyBhbmQgZXhhbWluZSB0aGUgZGV2aWNlIGNyZWF0aW9uIG9yIHByb2JpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIGZzbC1tYyBidXMgZGV2aWNlcyBhcmUgY3JlYXRlZCBvciBkaXNjb3ZlcmVkLiBMZXQncyBkbyBhIHF1aWNrIGdyZXAuIEknbGwgc2VhcmNoIGZvciB0aGUgYGZzbF9tY19idXNfdHlwZWAgc3RyaW5nLCBhbmQgcmVsYXRlZCBjb2RlLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBhbmQgcmVnaXN0ZXJzIHRoZXNlIGRldmljZXMuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBhcmUgaGFuZGxlZCBhdCBydW50aW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIHRyZWUgaW50ZWdyYXRpb24gYW5kIGhvdyBkZXZpY2Utc3BlY2lmaWMgZHJpdmVycyB3b3JrIHdpdGggdGhlIGJ1cyBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNDoyMS44MTQ0MDgzOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mjg0MTI4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNsX21jX2J1c190eXBlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MzI0PUFUVFJJQlVURV9HUk9VUFMoZnNsX21jX2J1cyk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMjUtXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzozMjY6Y29uc3Qgc3RydWN0IGJ1c190eXBlIGZzbF9tY19idXNfdHlwZSA9IHtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTMyNy1cXHQubmFtZSA9IFxcXCJmc2wtbWNcXFwiLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMzgtfTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjMzOTpFWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfYnVzX3R5cGUpO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzQwLVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz00NjE9aW50IF9fZnNsX21jX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZnNsX21jX2RyaXZlciAqbWNfZHJpdmVyLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy00NjYtXFx0bWNfZHJpdmVyLVxcdTAwM2Vkcml2ZXIub3duZXIgPSBvd25lcjtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjQ2NzpcXHRtY19kcml2ZXItXFx1MDAzZWRyaXZlci5idXMgPSBcXHUwMDI2ZnNsX21jX2J1c190eXBlO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNDY4LVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz03NTI9aW50IGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03ODktXFx0bWNfZGV2LVxcdTAwM2VkZXYucGFyZW50ID0gcGFyZW50X2RldjtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjc5MDpcXHRtY19kZXYtXFx1MDAzZWRldi5idXMgPSBcXHUwMDI2ZnNsX21jX2J1c190eXBlO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzkxLVxcdG1jX2Rldi1cXHUwMDNlZGV2LnJlbGVhc2UgPSBmc2xfbWNfZGV2aWNlX3JlbGVhc2U7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTExNzU9c3RhdGljIHZvaWQgZnNsX21jX2J1c19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE4My1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjExODQ6XFx0YnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXFx1MDAyNmZzbF9tY19uYik7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTg1LVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjYwPXN0YXRpYyBpbnQgX19pbml0IGZzbF9tY19idXNfZHJpdmVyX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI2My1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyNjQ6XFx0ZXJyb3IgPSBidXNfcmVnaXN0ZXIoXFx1MDAyNmZzbF9tY19idXNfdHlwZSk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjY1LVxcdGlmIChlcnJvciBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI5Mi1lcnJvcl9jbGVhbnVwX2J1czpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyOTM6XFx0YnVzX3VucmVnaXN0ZXIoXFx1MDAyNmZzbF9tY19idXNfdHlwZSk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjk0LVxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdS5jPTE4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlICogY29uc3QgaW9tbXVfYnVzZXNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xOTQtI2lmZGVmIENPTkZJR19GU0xfTUNfQlVTXFxuZHJpdmVycy9pb21tdS9pb21tdS5jOjE5NTpcXHRcXHUwMDI2ZnNsX21jX2J1c190eXBlLFxcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xOTYtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NDQ0PXN0YXRpYyBpbnQgdmZpb19mc2xfbWNfaW5pdF9kZXZpY2Uoc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NTctXFx0dmRldi1cXHUwMDNlbmIubm90aWZpZXJfY2FsbCA9IHZmaW9fZnNsX21jX2J1c19ub3RpZmllcjtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NDU4OlxcdHJldCA9IGJ1c19yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcXHUwMDI2dmRldi1cXHUwMDNlbmIpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NTktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NzAtb3V0X25jX3VucmVnOlxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0NzE6XFx0YnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXFx1MDAyNnZkZXYtXFx1MDAzZW5iKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDcyLVxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NDkyPXN0YXRpYyB2b2lkIHZmaW9fZnNsX3VuaW5pdF9kZXZpY2Uoc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00OTktXFx0ZHByY19jbGVhbnVwKG1jX2Rldik7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjUwMDpcXHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcXHUwMDI2dmRldi1cXHUwMDNlbmIpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01MDEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaD0zNTY9aW50IG1jX3NlbmRfY29tbWFuZChzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgc3RydWN0IGZzbF9tY19jb21tYW5kICpjbWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC0zNTgtI2lmZGVmIENPTkZJR19GU0xfTUNfQlVTXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaDozNTk6I2RlZmluZSBkZXZfaXNfZnNsX21jKF9kZXYpICgoX2RldiktXFx1MDAzZWJ1cyA9PSBcXHUwMDI2ZnNsX21jX2J1c190eXBlKVxcbmluY2x1ZGUvbGludXgvZnNsL21jLmgtMzYwLXUzMiBmc2xfbWNfZ2V0X21zaV9pZChzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaD00Mjg9c3RydWN0IGZzbF9tY19kZXZpY2UgKmZzbF9tY19nZXRfZW5kcG9pbnQoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldixcXG4tLVxcbmluY2x1ZGUvbGludXgvZnNsL21jLmgtNDMwLVxcbmluY2x1ZGUvbGludXgvZnNsL21jLmg6NDMxOmV4dGVybiBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgZnNsX21jX2J1c190eXBlO1xcbmluY2x1ZGUvbGludXgvZnNsL21jLmgtNDMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNDoyNC40NDI4MzAxNzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3ODE0MjU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgZnNsLW1jLWJ1cy5jYCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgdGhlc2UgZnNsLW1jIGRldmljZXMgYXJlIGJyb3VnaHQgdG8gbGlmZS4gSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gYGZzbC1tYy1idXMuY2AgdG8gdHJhY2UgdGhlIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNDoyNi4zMjA5Nzc4MDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTUyNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzbF9tY19idXNfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9idXMvZnNsLW1jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAwNT1zdGF0aWMgaW50IGZzbF9tY19maXJtd2FyZV9jaGVjayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM1LS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMDM2OiAqIGZzbF9tY19idXNfcHJvYmUgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHJvb3QgTUMgYnVzIGlzIGJlaW5nXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM3LSAqIGFkZGVkXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM4LSAqL1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAzOTpzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwNDAte1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE2LVxcdFxcdCAgIH0sXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjE3OlxcdC5wcm9iZSA9IGZzbF9tY19idXNfcHJvYmUsXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE4LVxcdC5yZW1vdmUgPSBmc2xfbWNfYnVzX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTQ6MjYuMzc0MTM4NTExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTg2NDc2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQnVzIERyaXZlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBmc2xfbWNfYnVzX2RyaXZlcmAgaXMgYmVoYXZpbmcuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBkZXZpY2UgbWF0Y2ggdGFibGUuIFRoYXQncyB0aGUgY29yZSBvZiBob3cgdGhpcyBkcml2ZXIgaWRlbnRpZmllcyBhbmQgYmluZHMgdG8gdGhlIGNvcnJlY3QgaGFyZHdhcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIGludGVuZGVkIGRldmljZXMgYXJlLCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gb2J2aW91cyBtaXNtYXRjaGVzIG9yIHBvdGVudGlhbCBjb25mbGljdHMgbHVya2luZyBpbiB0aGVyZS4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuIExldCdzIHNlZSB3aGF0IHRoZSB0YWJsZSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5MSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjI4LjQzMjc5MDYwN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjAwOlxcdH07XFxuMTIwMTpcXHRcXG4xMjAyOlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZzbF9tY19idXNfbWF0Y2hfdGFibGUpO1xcbjEyMDM6XFx0XFxuMTIwNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGZzbF9tY19idXNfYWNwaV9tYXRjaF90YWJsZVtdID0ge1xcbjEyMDU6XFx0XFx0e1xcXCJOWFAwMDA4XFxcIiwgMCB9LFxcbjEyMDY6XFx0XFx0eyB9XFxuMTIwNzpcXHR9O1xcbjEyMDg6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBmc2xfbWNfYnVzX2FjcGlfbWF0Y2hfdGFibGUpO1xcbjEyMDk6XFx0XFxuMTIxMDpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmc2xfbWNfYnVzX2RyaXZlciA9IHtcXG4xMjExOlxcdFxcdC5kcml2ZXIgPSB7XFxuMTIxMjpcXHRcXHRcXHQgICAubmFtZSA9IFxcXCJmc2xfbWNfYnVzXFxcIixcXG4xMjEzOlxcdFxcdFxcdCAgIC5wbSA9IE5VTEwsXFxuMTIxNDpcXHRcXHRcXHQgICAub2ZfbWF0Y2hfdGFibGUgPSBmc2xfbWNfYnVzX21hdGNoX3RhYmxlLFxcbjEyMTU6XFx0XFx0XFx0ICAgLmFjcGlfbWF0Y2hfdGFibGUgPSBmc2xfbWNfYnVzX2FjcGlfbWF0Y2hfdGFibGUsXFxuMTIxNjpcXHRcXHRcXHQgICB9LFxcbjEyMTc6XFx0XFx0LnByb2JlID0gZnNsX21jX2J1c19wcm9iZSxcXG4xMjE4OlxcdFxcdC5yZW1vdmUgPSBmc2xfbWNfYnVzX3JlbW92ZSxcXG4xMjE5OlxcdFxcdC5zaHV0ZG93biA9IGZzbF9tY19idXNfcmVtb3ZlLFxcbjEyMjA6XFx0fTtcXG4xMjIxOlxcdFxcbjEyMjI6XFx0c3RhdGljIGludCBmc2xfbWNfYnVzX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuMTIyMzpcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpXFxuMTIyNDpcXHR7XFxuMTIyNTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhO1xcbjEyMjY6XFx0XFx0c3RydWN0IHJlc291cmNlICpyZXM7XFxuMTIyNzpcXHRcXHR2b2lkIF9faW9tZW0gKmZzbF9tY19yZWdzO1xcbjEyMjg6XFx0XFxuMTIyOTpcXHRcXHRpZiAoYWN0aW9uICE9IEJVU19OT1RJRllfQUREX0RFVklDRSlcXG4xMjMwOlxcdFxcdFxcdHJldHVybiAwO1xcbjEyMzE6XFx0XFxuMTIzMjpcXHRcXHRpZiAoIW9mX21hdGNoX2RldmljZShmc2xfbWNfYnVzX21hdGNoX3RhYmxlLCBkZXYpIFxcdTAwMjZcXHUwMDI2XFxuMTIzMzpcXHRcXHQgICAgIWFjcGlfbWF0Y2hfZGV2aWNlKGZzbF9tY19idXNfYWNwaV9tYXRjaF90YWJsZSwgZGV2KSlcXG4xMjM0OlxcdFxcdFxcdHJldHVybiAwO1xcbjEyMzU6XFx0XFxuMTIzNjpcXHRcXHRyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UodG9fcGxhdGZvcm1fZGV2aWNlKGRldiksIElPUkVTT1VSQ0VfTUVNLCAxKTtcXG4xMjM3OlxcdFxcdGlmICghcmVzKVxcbjEyMzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTIzOTpcXHRcXG4xMjQwOlxcdFxcdGZzbF9tY19yZWdzID0gaW9yZW1hcChyZXMtXFx1MDAzZXN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpO1xcbjEyNDE6XFx0XFx0aWYgKCFmc2xfbWNfcmVncylcXG4xMjQyOlxcdFxcdFxcdHJldHVybiAwO1xcbjEyNDM6XFx0XFxuMTI0NDpcXHRcXHQvKlxcbjEyNDU6XFx0XFx0ICogTWFrZSBzdXJlIHRoYXQgdGhlIE1DIGZpcm13YXJlIGlzIHBhdXNlZCBiZWZvcmUgdGhlIElPTU1VIHNldHVwIGZvclxcbjEyNDY6XFx0XFx0ICogaXQgaXMgZG9uZSBvciBvdGhlcndpc2UgdGhlIGZpcm13YXJlIHdpbGwgY3Jhc2ggcmlnaHQgYWZ0ZXIgdGhlIFNNTVVcXG4xMjQ3OlxcdFxcdCAqIGdldHMgcHJvYmVkIGFuZCBlbmFibGVkLlxcbjEyNDg6XFx0XFx0ICovXFxuMTI0OTpcXHRcXHR3cml0ZWwocmVhZGwoZnNsX21jX3JlZ3MgKyBGU0xfTUNfR0NSMSkgfCAoR0NSMV9QMV9TVE9QIHwgR0NSMV9QMl9TVE9QKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTQ6MjguNDMyOTA2NDk3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyNjY3NzEyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgdmZpb19mc2xfbWMgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZmaW9fZnNsX21jYCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5LCBwYXJ0aWN1bGFybHkgaG93IGl0J3MgcmVnaXN0ZXJlZCB3aXRoIHRoZSBrZXJuZWwgYW5kIGhvdyB0aGUgcHJvYmUgbWVjaGFuaXNtIHdvcmtzLiBJdCdzIGxpa2VseSBpbnZvbHZlZCB3aXRoIFZGSU8gYW5kIEZyZWVzY2FsZSdzIChvciwgbW9yZSBsaWtlbHksIE5YUCdzKSBNQyAoTXVsdGljb3JlKSBhcmNoaXRlY3R1cmUsIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gVGhlIGltbWVkaWF0ZSBwbGFuIGlzIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlOyBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNgIGZpbGUgYW5kIGRpc3NlY3QgaXQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgSSBuZWVkIHRvIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgZHJpdmVyJ3Mgcm9sZSBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyNiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTQ6MzMuNjk5NjgwOTgzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcbiA1MjE6XFx0XFx0LyogZGV2aWNlX3NldCBpcyByZWxlYXNlZCBieSB2ZmlvIGNvcmUgaWYgQGluaXQgZmFpbHMgKi9cXG4gNTIyOlxcdFxcdHJldHVybiB2ZmlvX2ZzbF9tY19pbml0X2RldmljZSh2ZGV2KTtcXG4gNTIzOlxcdH1cXG4gNTI0OlxcdFxcbiA1MjU6XFx0c3RhdGljIGludCB2ZmlvX2ZzbF9tY19wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxcbiA1MjY6XFx0e1xcbiA1Mjc6XFx0XFx0c3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldjtcXG4gNTI4OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtY19kZXYtXFx1MDAzZWRldjtcXG4gNTI5OlxcdFxcdGludCByZXQ7XFxuIDUzMDpcXHRcXG4gNTMxOlxcdFxcdHZkZXYgPSB2ZmlvX2FsbG9jX2RldmljZSh2ZmlvX2ZzbF9tY19kZXZpY2UsIHZkZXYsIGRldixcXG4gNTMyOlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dmZpb19mc2xfbWNfb3BzKTtcXG4gNTMzOlxcdFxcdGlmIChJU19FUlIodmRldikpXFxuIDUzNDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUih2ZGV2KTtcXG4gNTM1OlxcdFxcbiA1MzY6XFx0XFx0cmV0ID0gdmZpb19yZWdpc3Rlcl9ncm91cF9kZXYoXFx1MDAyNnZkZXYtXFx1MDAzZXZkZXYpO1xcbiA1Mzc6XFx0XFx0aWYgKHJldCkge1xcbiA1Mzg6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJWRklPX0ZTTF9NQzogRmFpbGVkIHRvIGFkZCB0byB2ZmlvIGdyb3VwXFxcXG5cXFwiKTtcXG4gNTM5OlxcdFxcdFxcdGdvdG8gb3V0X3B1dF92ZGV2O1xcbiA1NDA6XFx0XFx0fVxcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHRyZXQgPSB2ZmlvX2ZzbF9tY19zY2FuX2NvbnRhaW5lcihtY19kZXYpO1xcbiA1NDM6XFx0XFx0aWYgKHJldClcXG4gNTQ0OlxcdFxcdFxcdGdvdG8gb3V0X2dyb3VwX2RldjtcXG4gNTQ1OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIHZkZXYpO1xcbiA1NDY6XFx0XFx0cmV0dXJuIDA7XFxuIDU0NzpcXHRcXG4gNTQ4OlxcdG91dF9ncm91cF9kZXY6XFxuIDU0OTpcXHRcXHR2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2KTtcXG4gNTUwOlxcdG91dF9wdXRfdmRldjpcXG4gNTUxOlxcdFxcdHZmaW9fcHV0X2RldmljZShcXHUwMDI2dmRldi1cXHUwMDNldmRldik7XFxuIDU1MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NTM6XFx0fVxcbiA1NTQ6XFx0XFxuIDU1NTpcXHRzdGF0aWMgdm9pZCB2ZmlvX2ZzbF9tY19yZWxlYXNlX2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcXG4gNTU2OlxcdHtcXG4gNTU3OlxcdFxcdHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UgKnZkZXYgPVxcbiA1NTg6XFx0XFx0XFx0Y29udGFpbmVyX29mKGNvcmVfdmRldiwgc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSwgdmRldik7XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdHZmaW9fZnNsX3VuaW5pdF9kZXZpY2UodmRldik7XFxuIDU2MTpcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ2ZGV2LVxcdTAwM2VpZ2F0ZSk7XFxuIDU2MjpcXHR9XFxuIDU2MzpcXHRcXG4gNTY0OlxcdHN0YXRpYyB2b2lkIHZmaW9fZnNsX21jX3JlbW92ZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxcbiA1NjU6XFx0e1xcbiA1NjY6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1jX2Rldi1cXHUwMDNlZGV2O1xcbiA1Njc6XFx0XFx0c3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHR2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2KTtcXG4gNTcwOlxcdFxcdGRwcmNfcmVtb3ZlX2RldmljZXMobWNfZGV2LCBOVUxMLCAwKTtcXG4gNTcxOlxcdFxcdHZmaW9fcHV0X2RldmljZShcXHUwMDI2dmRldi1cXHUwMDNldmRldik7XFxuIDU3MjpcXHR9XFxuIDU3MzpcXHRcXG4gNTc0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZmaW9fZnNsX21jX29wcyA9IHtcXG4gNTc1OlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwidmZpby1mc2wtbWNcXFwiLFxcbiA1NzY6XFx0XFx0LmluaXRcXHRcXHQ9IHZmaW9fZnNsX21jX2luaXRfZGV2LFxcbiA1Nzc6XFx0XFx0LnJlbGVhc2VcXHQ9IHZmaW9fZnNsX21jX3JlbGVhc2VfZGV2LFxcbiA1Nzg6XFx0XFx0Lm9wZW5fZGV2aWNlXFx0PSB2ZmlvX2ZzbF9tY19vcGVuX2RldmljZSxcXG4gNTc5OlxcdFxcdC5jbG9zZV9kZXZpY2VcXHQ9IHZmaW9fZnNsX21jX2Nsb3NlX2RldmljZSxcXG4gNTgwOlxcdFxcdC5pb2N0bFxcdFxcdD0gdmZpb19mc2xfbWNfaW9jdGwsXFxuIDU4MTpcXHRcXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX2ZzbF9tY19pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuIDU4MjpcXHRcXHQucmVhZFxcdFxcdD0gdmZpb19mc2xfbWNfcmVhZCxcXG4gNTgzOlxcdFxcdC53cml0ZVxcdFxcdD0gdmZpb19mc2xfbWNfd3JpdGUsXFxuIDU4NDpcXHRcXHQubW1hcFxcdFxcdD0gdmZpb19mc2xfbWNfbW1hcCxcXG4gNTg1OlxcdFxcdC5iaW5kX2lvbW11ZmRcXHQ9IHZmaW9faW9tbXVmZF9waHlzaWNhbF9iaW5kLFxcbiA1ODY6XFx0XFx0LnVuYmluZF9pb21tdWZkXFx0PSB2ZmlvX2lvbW11ZmRfcGh5c2ljYWxfdW5iaW5kLFxcbiA1ODc6XFx0XFx0LmF0dGFjaF9pb2FzXFx0PSB2ZmlvX2lvbW11ZmRfcGh5c2ljYWxfYXR0YWNoX2lvYXMsXFxuIDU4ODpcXHRcXHQuZGV0YWNoX2lvYXNcXHQ9IHZmaW9faW9tbXVmZF9waHlzaWNhbF9kZXRhY2hfaW9hcyxcXG4gNTg5OlxcdH07XFxuIDU5MDpcXHRcXG4gNTkxOlxcdHN0YXRpYyBzdHJ1Y3QgZnNsX21jX2RyaXZlciB2ZmlvX2ZzbF9tY19kcml2ZXIgPSB7XFxuIDU5MjpcXHRcXHQucHJvYmVcXHRcXHQ9IHZmaW9fZnNsX21jX3Byb2JlLFxcbiA1OTM6XFx0XFx0LnJlbW92ZVxcdFxcdD0gdmZpb19mc2xfbWNfcmVtb3ZlLFxcbiA1OTQ6XFx0XFx0LmRyaXZlclxcdD0ge1xcbiA1OTU6XFx0XFx0XFx0Lm5hbWVcXHQ9IFxcXCJ2ZmlvLWZzbC1tY1xcXCIsXFxuIDU5NjpcXHRcXHR9LFxcbiA1OTc6XFx0XFx0LmRyaXZlcl9tYW5hZ2VkX2RtYSA9IHRydWUsXFxuIDU5ODpcXHR9O1xcbiA1OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjMzLjY5OTgwNDc4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDQxNjcyODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGZzbF9tYyBEcml2ZXIgYW5kIGl0cyBFbnZpcm9ubWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCB0aGUgYGZzbF9tY19kcml2ZXJgIGlzIHJlZ2lzdGVyZWQsIGl0cyBwcm9iZSBmdW5jdGlvbiB0aWVkIHRvIHRoZSBgZnNsLW1jYCBidXMuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2hhdCBleGFjdGx5ICppcyogdGhpcyBgZnNsLW1jYCBidXM/XCIgQSBxdWljayBzZWFyY2ggY29uZmlybXMgaXQncyB0aGUgXCJRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRyaXZlcixcIiB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggRnJlZXNjYWxlL05YUCdzIHByb3ByaWV0YXJ5IExheWVyc2NhcGUgUW9ySVEgRFBBQTIgKERhdGEgUGF0aCBBY2NlbGVyYXRpb24gQXJjaGl0ZWN0dXJlIEdlbiAyKSBNYW5hZ2VtZW50IENvbXBsZXggKE1DKSBoYXJkd2FyZS4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSwgdHlwaWNhbGx5IEFSTSBvciBQb3dlclBDLCB0aG91Z2ggSSd2ZSBzZWVuIExheWVyc2NhcGUgaW4gdGhlIG1peCB0b28uXG5cbk5vdywgbXkgbmV4dCBxdWVzdGlvbjogaXMgdGhlcmUgYW55IGVtdWxhdGlvbiBvZiB0aGlzIGJ1cyBhdmFpbGFibGUgaW4gc3RhbmRhcmQgUUVNVSBvbiB4ODZfNjQgb3IgYW1kNjQ/IFRoZSBhbnN3ZXIgaXMgbm8uIFFFTVUgZG9lc24ndCBvZmZlciBhbnkgZW11bGF0aW9uIGZvciB0aGUgTlhQIExheWVyc2NhcGUgRFBBQTIgTWFuYWdlbWVudCBDb21wbGV4LiBJbiBmYWN0LCBvbiB4ODZfNjQsIHRoZSBgRlNMX01DX0JVU2AgY29tcG9uZW50IGlzIG9ubHkgY29tcGlsZWQgaWYgdGhlIGBDT01QSUxFX1RFU1RgIGZsYWcgaXMgc2V0LiBEaWdnaW5nIGludG8gdGhlIEtjb25maWcsIGl0IHNlZW1zIGl0IGRlcGVuZHMgb24gYE9GYCAoT3BlbiBGaXJtd2FyZS9EZXZpY2UgVHJlZSkgYW5kLCBvbiB4ODZfNjQsIGBPRmAgaXMgKm9ubHkqIGVuYWJsZWQgaW4gdGhlIGBDT01QSUxFX1RFU1RgIGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgbm90IGF0IGFsbCwgdW5sZXNzIGBDT01QSUxFX1RFU1RgIGlzIHNldCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBtYXRjaGVzLCB3aGljaCBpcyBlaXRoZXIgcGh5c2ljYWwgTlhQIFFvcklRIERQQUEyIFNvQyBoYXJkd2FyZSBvciBhbiBBQ1BJIG1hdGNoIFwiTlhQMDAwOFwiIHdpdGggYWN0dWFsIE1DIGZpcm13YXJlIHJlZ2lzdGVycy5cblxuU28sIHJlYWxpc3RpY2FsbHksIHRoaXMgY29kZSBpcyBkZXNpZ25lZCB0byBydW4gb24gc3BlY2lmaWMgaGFyZHdhcmUuIEdpdmVuIHRoaXMgaGFyZHdhcmUgZGVwZW5kZW5jeSwgSSdtIHRoaW5raW5nLCBcIklzIHRoZXJlIGFueXRoaW5nIHRoYXQgbWlnaHQgKmR5bmFtaWNhbGx5KiBjcmVhdGUgYW4gZnNsLW1jIGRldmljZSwgcGVyaGFwcyB2aXJ0dWFsbHk/IFNvbWV0aGluZyB0aGF0IGNhbiBiZSBicm91Z2h0IHVwIHdpdGhvdXQgZGVkaWNhdGVkIGhhcmR3YXJlP1wiIFRvIGludmVzdGlnYXRlIHRoYXQsIEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGNhbGxzIHRvIGBmc2xfbWNfZGV2aWNlX2FkZGAgYW5kIHNlZSB3aGVyZSB0aGlzIG1pZ2h0IGJlIGNhbGxlZCBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjM4Ljc0MTQ4MjQzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NDgwNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmc2xfbWNfZGV2aWNlX2FkZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz0xNjk9c3RhdGljIHZvaWQgZnNsX21jX29ial9kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19idXNfZGV2LFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTgyLVxcdH0gZWxzZSB7XFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTgzOlxcdFxcdGVycm9yID0gZnNsX21jX2RldmljZV9hZGQob2JqX2Rlc2MsIE5VTEwsIFxcdTAwMjZtY19idXNfZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTg0LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNoaWxkX2Rldik7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTczNz1zdGF0aWMgdm9pZCBmc2xfbWNfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03NTEtICovXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3NTI6aW50IGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzUzLVxcdFxcdCAgICAgIHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04NzktfVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6ODgwOkVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19kZXZpY2VfYWRkKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4MS1cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAzOT1zdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE1Ny1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjExNTg6XFx0ZXJyb3IgPSBmc2xfbWNfZGV2aWNlX2FkZChcXHUwMDI2b2JqX2Rlc2MsIG1jX2lvLCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2bWNfYnVzX2Rldik7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTU5LVxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaD02MDE9c3RydWN0IGZzbF9tY19idXMge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmgtNjEzLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oOjYxNDppbnQgX19tdXN0X2NoZWNrIGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTYxNS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNsX21jX2lvICptY19pbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTQ6NDEuMDA2Mjk2OTU1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NzUzNzg0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBmc2wtbWMtYnVzIFByb2JlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgdGhpcyBgZnNsX21jX2J1c19wcm9iZWAgZnVuY3Rpb24gd29ya3MuIEl0IHNlZW1zIGxpa2UgdGhlIHByb2JlIGlzIHRyaWdnZXJlZCBieSBhIGBwbGF0Zm9ybV9kZXZpY2VgIHRoYXQgbWF0Y2hlcyBlaXRoZXIgdGhlIGBmc2xfbWNfYnVzX21hdGNoX3RhYmxlYCBvciwgaWYgd2UncmUgb24gQUNQSSwgdGhlIGBmc2xfbWNfYnVzX2FjcGlfbWF0Y2hfdGFibGVgLiBJJ20gc3BlY2lmaWNhbGx5IG5vdGluZyB0aGF0IFwiTlhQMDAwOFwiIGlzIGluIHRoZSBBQ1BJIHRhYmxlLiBUaGF0IHRlbGxzIG1lIHdoYXQga2luZCBvZiBkZXZpY2UgdGhlIHN5c3RlbSdzIGxpa2VseSB0YXJnZXRpbmcuXG5cblJpZ2h0LCBzbyBpbiB0aGlzIHByb2JlIGZ1bmN0aW9uLCB0aGF0J3Mgd2hlcmUgdGhlIGRyaXZlciAqYWN0dWFsbHkqIGludGVyYWN0cyB3aXRoIHRoZSBNQyBmaXJtd2FyZSBvbiB0aGUgaGFyZHdhcmUuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgZnNsX21jX2J1c19wcm9iZWAgZnVuY3Rpb24gaXRzZWxmLiBJJ2xsIG9wZW4gdXAgYGRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmNgIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODUyLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjQ1LjU4MTY4MTAwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQwOlxcdHtcXG4xMDQxOlxcdFxcdHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2Mgb2JqX2Rlc2M7XFxuMTA0MjpcXHRcXHRpbnQgZXJyb3I7XFxuMTA0MzpcXHRcXHRzdHJ1Y3QgZnNsX21jICptYztcXG4xMDQ0OlxcdFxcdHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19idXNfZGV2ID0gTlVMTDtcXG4xMDQ1OlxcdFxcdHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvID0gTlVMTDtcXG4xMDQ2OlxcdFxcdGludCBjb250YWluZXJfaWQ7XFxuMTA0NzpcXHRcXHRwaHlzX2FkZHJfdCBtY19wb3J0YWxfcGh5c19hZGRyO1xcbjEwNDg6XFx0XFx0dTMyIG1jX3BvcnRhbF9zaXplLCBtY19zdHJlYW1faWQ7XFxuMTA0OTpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnBsYXRfcmVzO1xcbjEwNTA6XFx0XFxuMTA1MTpcXHRcXHRtYyA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKm1jKSwgR0ZQX0tFUk5FTCk7XFxuMTA1MjpcXHRcXHRpZiAoIW1jKVxcbjEwNTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTtcXG4xMDU2OlxcdFxcbjEwNTc6XFx0XFx0cGxhdF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpO1xcbjEwNTg6XFx0XFx0aWYgKHBsYXRfcmVzKSB7XFxuMTA1OTpcXHRcXHRcXHRtYy1cXHUwMDNlZnNsX21jX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9yZXMpO1xcbjEwNjA6XFx0XFx0XFx0aWYgKElTX0VSUihtYy1cXHUwMDNlZnNsX21jX3JlZ3MpKVxcbjEwNjE6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobWMtXFx1MDAzZWZzbF9tY19yZWdzKTtcXG4xMDYyOlxcdFxcdH1cXG4xMDYzOlxcdFxcbjEwNjQ6XFx0XFx0aWYgKG1jLVxcdTAwM2Vmc2xfbWNfcmVncykge1xcbjEwNjU6XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FDUEkpIFxcdTAwMjZcXHUwMDI2ICFkZXZfb2Zfbm9kZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KSkge1xcbjEwNjY6XFx0XFx0XFx0XFx0bWNfc3RyZWFtX2lkID0gcmVhZGwobWMtXFx1MDAzZWZzbF9tY19yZWdzICsgRlNMX01DX0ZBUFIpO1xcbjEwNjc6XFx0XFx0XFx0XFx0LypcXG4xMDY4OlxcdFxcdFxcdFxcdCAqIEhXIE9ScyB0aGUgUEwgYW5kIEJNVCBiaXQsIHBsYWNlcyB0aGUgcmVzdWx0IGluIGJpdFxcbjEwNjk6XFx0XFx0XFx0XFx0ICogMTQgb2YgdGhlIFN0cmVhbUlEIGFuZCBPUnMgaW4gdGhlIElDSUQuIENhbGN1bGF0ZSBpdFxcbjEwNzA6XFx0XFx0XFx0XFx0ICogYWNjb3JkaW5nbHkuXFxuMTA3MTpcXHRcXHRcXHRcXHQgKi9cXG4xMDcyOlxcdFxcdFxcdFxcdG1jX3N0cmVhbV9pZCA9IChtY19zdHJlYW1faWQgXFx1MDAyNiAweGZmZmYpIHxcXG4xMDczOlxcdFxcdFxcdFxcdFxcdCgobWNfc3RyZWFtX2lkIFxcdTAwMjYgKE1DX0ZBUFJfUEwgfCBNQ19GQVBSX0JNVCkpID9cXG4xMDc0OlxcdFxcdFxcdFxcdFxcdFxcdEJJVCgxNCkgOiAwKTtcXG4xMDc1OlxcdFxcdFxcdFxcdGVycm9yID0gYWNwaV9kbWFfY29uZmlndXJlX2lkKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMTA3NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBERVZfRE1BX0NPSEVSRU5ULFxcbjEwNzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm1jX3N0cmVhbV9pZCk7XFxuMTA3ODpcXHRcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVQUk9CRV9ERUZFUilcXG4xMDc5OlxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4xMDgwOlxcdFxcdFxcdFxcdGlmIChlcnJvcilcXG4xMDgxOlxcdFxcdFxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMTA4MjpcXHRcXHRcXHRcXHRcXHRcXHQgXFxcImZhaWxlZCB0byBjb25maWd1cmUgZG1hOiAlZC5cXFxcblxcXCIsXFxuMTA4MzpcXHRcXHRcXHRcXHRcXHRcXHQgZXJyb3IpO1xcbjEwODQ6XFx0XFx0XFx0fVxcbjEwODU6XFx0XFxuMTA4NjpcXHRcXHRcXHQvKlxcbjEwODc6XFx0XFx0XFx0ICogU29tZSBib290bG9hZGVycyBwYXVzZSB0aGUgTUMgZmlybXdhcmUgYmVmb3JlIGJvb3RpbmcgdGhlXFxuMTA4ODpcXHRcXHRcXHQgKiBrZXJuZWwgc28gdGhhdCBNQyB3aWxsIG5vdCBjYXVzZSBmYXVsdHMgYXMgc29vbiBhcyB0aGVcXG4xMDg5OlxcdFxcdFxcdCAqIFNNTVUgcHJvYmVzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZXJlJ3Mgbm8gY29uZmlndXJhdGlvblxcbjEwOTA6XFx0XFx0XFx0ICogaW4gcGxhY2UgZm9yIE1DLlxcbjEwOTE6XFx0XFx0XFx0ICogQXQgdGhpcyBwb2ludCBNQyBzaG91bGQgaGF2ZSBhbGwgaXRzIFNNTVUgc2V0dXAgZG9uZSBzbyBtYWtlXFxuMTA5MjpcXHRcXHRcXHQgKiBzdXJlIGl0IGlzIHJlc3VtZWQuXFxuMTA5MzpcXHRcXHRcXHQgKi9cXG4xMDk0OlxcdFxcdFxcdHdyaXRlbChyZWFkbChtYy1cXHUwMDNlZnNsX21jX3JlZ3MgKyBGU0xfTUNfR0NSMSkgXFx1MDAyNlxcbjEwOTU6XFx0XFx0XFx0XFx0ICAgICAofihHQ1IxX1AxX1NUT1AgfCBHQ1IxX1AyX1NUT1ApKSxcXG4xMDk2OlxcdFxcdFxcdCAgICAgICBtYy1cXHUwMDNlZnNsX21jX3JlZ3MgKyBGU0xfTUNfR0NSMSk7XFxuMTA5NzpcXHRcXHR9XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdGVycm9yID0gZnNsX21jX2Zpcm13YXJlX2NoZWNrKHBkZXYpO1xcbjExMDA6XFx0XFx0aWYgKGVycm9yKVxcbjExMDE6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHQvKlxcbjExMDQ6XFx0XFx0ICogR2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgTUMgcG9ydGFsIGZvciB0aGUgcm9vdCBEUFJDOlxcbjExMDU6XFx0XFx0ICovXFxuMTEwNjpcXHRcXHRwbGF0X3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7XFxuMTEwNzpcXHRcXHRpZiAoIXBsYXRfcmVzKVxcbjExMDg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdG1jX3BvcnRhbF9waHlzX2FkZHIgPSBwbGF0X3Jlcy1cXHUwMDNlc3RhcnQ7XFxuMTExMTpcXHRcXHRtY19wb3J0YWxfc2l6ZSA9IHJlc291cmNlX3NpemUocGxhdF9yZXMpO1xcbjExMTI6XFx0XFx0bWNfcG9ydGFsX2Jhc2VfcGh5c19hZGRyID0gbWNfcG9ydGFsX3BoeXNfYWRkciBcXHUwMDI2IH4weDNmZmZmZmY7XFxuMTExMzpcXHRcXG4xMTE0OlxcdFxcdGVycm9yID0gZnNsX2NyZWF0ZV9tY19pbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBtY19wb3J0YWxfcGh5c19hZGRyLFxcbjExMTU6XFx0XFx0XFx0XFx0XFx0IG1jX3BvcnRhbF9zaXplLCBOVUxMLFxcbjExMTY6XFx0XFx0XFx0XFx0XFx0IEZTTF9NQ19JT19BVE9NSUNfQ09OVEVYVF9QT1JUQUwsIFxcdTAwMjZtY19pbyk7XFxuMTExNzpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjExMTg6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjQ1LjU4MTg4NzIwMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODkwNDY1ODI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBWRklPIERyaXZlciBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZnNsX21jX2J1c19wcm9iZWAgaXMgdGhlIGVudHJ5IHBvaW50LCBjb25uZWN0aW5nIHRvIHRoZSBwaHlzaWNhbCBNQyBmaXJtd2FyZSBhbmQgc2V0dGluZyB1cCBjaGlsZCBkZXZpY2VzLiBUaGVuLCBgdmZpb19mc2xfbWNgIGlzIHRoZSBWRklPIGRyaXZlciB0YWlsb3JlZCBmb3IgZGV2aWNlcyBvbiB0aGUgYGZzbC1tY2AgYnVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgZm91bmQgaW4gRnJlZXNjYWxlL05YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBJIGJlbGlldmUgdGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoaXMga2luZCBvZiBoYXJkd2FyZSwgYSBMYXllcnNjYXBlIFNvQyBmZWF0dXJlLCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFNlY3Rpb24gMiBjb25maXJtcyB0aGlzOiBcIlZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzLi4uIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIiB3aXRoIGEgdGFyZ2V0IG9mIFwiYW1kNjRcIi5cblxuU3BlY2lmaWNhbGx5LCB0aGlzIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNgIGZpbGUgaXMgdGhlIFZGSU8gZHJpdmVyIGZvciB0aGUgYGZzbC1tY2AgYnVzIGRldmljZXMuIFRoaXMgaXMgTlhQIExheWVyc2NhcGUgaGFyZHdhcmUsIGFuIEFSTS9Qb3dlclBDIFNvQyBmZWF0dXJlLCBhbmQgbm90IHNvbWV0aGluZyB0aGF0IGV4aXN0cyBvciBpcyBlbXVsYXRlZCBvbiBhbWQ2NCBpbiBzdGFuZGFyZCBRRU1VLiBJbiBmYWN0LCBgRlNMX01DX0JVU2Agd29uJ3QgZXZlbiBiZSBlbmFibGVkIG9uIGFtZDY0IHVubGVzcyBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCBhbmQgZXZlbiB0aGVuLCB5b3UgbmVlZCB0aGUgYWN0dWFsIGhhcmR3YXJlIHJlZ2lzdGVycy9maXJtd2FyZSB0byBldmVuIGdldCBhbiBgZnNsLW1jYCBkZXZpY2UgdG8gcHJvYmUuIFdpdGhvdXQgYSB2YWxpZCBgZnNsLW1jYCBkZXZpY2UsIHRoZSBgdmZpb19mc2xfbWNgIGRyaXZlciB3b24ndCBldmVyIHByb2JlIG9yIGNyZWF0ZSBgL2Rldi92ZmlvLypgIG5vZGVzLlxuXG5TbywgbGV0J3Mgc2VlIGlmIEkgbWlzc2VkIGFueSBvdGhlciBlbnRyeSBwb2ludC4gYHZmaW9fZnNsX21jX21tYXBfbW1pb2AgaXMgdGhlIGtleSBmdW5jdGlvbiBpbiBxdWVzdGlvbiwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHZmaW9fZnNsX21jX21tYXBgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBgdmZpb19mc2xfbWNfb3BzYCBzdHJ1Y3QuIFRoaXMgYHZmaW9fZnNsX21jX29wc2Agc3RydWN0IGlzIG9ubHkgcmVnaXN0ZXJlZCB3aGVuIGFuIGBmc2xfbWNfZGV2aWNlYCBwcm9iZXMgd2l0aCBgdmZpb19mc2xfbWNfZHJpdmVyYC4gIEJlY2F1c2UgdGhlc2UgYGZzbF9tY19kZXZpY2VgIGluc3RhbmNlcyBvbmx5IGV4aXN0IG9uIHJlYWwgTlhQIExheWVyc2NhcGUgaGFyZHdhcmUgKG9yLCBoeXBvdGhldGljYWxseSwgaWYgUUVNVSBlbXVsYXRlZCBpdCDigJMgd2hpY2ggaXQgZG9lc24ndCwgZXNwZWNpYWxseSBub3Qgb24gYW1kNjQpLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwLCBsaWtlIGFtZDY0L1FFTVUvR0NFLlxuXG5MZXQncyBzdW1tYXJpemUgdG8gYmUgdGhvcm91Z2g6XG4tICoqVGFyZ2V0IEFyY2hpdGVjdHVyZToqKiBhbWQ2NC5cbi0gKipNb2RpZmllZCBGaWxlOioqIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNgLlxuLSAqKk1vZGlmaWVkIEZ1bmN0aW9uOioqIGB2ZmlvX2ZzbF9tY19tbWFwX21taW9gLlxuLSAqKkRyaXZlcjoqKiBGcmVlc2NhbGUgUW9ySVEgRFBBQTIgVkZJTyBkcml2ZXIuXG4tICoqUmVhY2hhYmlsaXR5OioqIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBkdWUgdG8gdGhlIG5lZWQgZm9yIE5YUCBMYXllcnNjYXBlIFNvQy9EUEFBMiBoYXJkd2FyZSBhbmQgYGZzbC1tY2AgYnVzLCBub25lIG9mIHdoaWNoIGlzIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBlc3BlY2lhbGx5IG5vdCBvbiBhbWQ2NC5cblxuVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgbm90IHdvcnRoIGZ1enppbmcuIFRoZSByZXN1bHQgbmVlZHMgdG8gYmUgYFdvcnRoRnV6emluZzogZmFsc2VgLCB3aXRoIGVtcHR5IGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgbGlzdHMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IGB2ZmlvX2ZzbF9tY2AgcmVxdWlyZXMgTlhQIExheWVyc2NhcGUgRFBBQTIgaGFyZHdhcmUsIHdoaWNoIGlzIGFic2VudCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9hbWQ2NCkuIEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhpcyBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NzIsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTU6MTQuNDg2NTUwODE4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMsIHdoaWNoIGlzIHRoZSBWRklPIGRyaXZlciBmb3IgTlhQIFFvcklRIERQQUEyIChmc2wtbWMgYnVzKSBTb0MgZGV2aWNlcy4gVGhpcyBoYXJkd2FyZSBpcyBzcGVjaWZpYyB0byBOWFAgTGF5ZXJzY2FwZSBTb0NzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYywgd2hpY2ggaXMgdGhlIFZGSU8gZHJpdmVyIGZvciBOWFAgUW9ySVEgRFBBQTIgKGZzbC1tYyBidXMpIFNvQyBkZXZpY2VzLiBUaGlzIGhhcmR3YXJlIGlzIHNwZWNpZmljIHRvIE5YUCBMYXllcnNjYXBlIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE1OjE0LjQ4NjU4Nzg5OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fzd6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 14:11:48 +0000 UTC FinishedAt: 2026-09-04 14:15:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMsIHdoaWNoIGlzIHRoZSBWRklPIGRyaXZlciBmb3IgTlhQIFFvcklRIERQQUEyIChmc2wtbWMgYnVzKSBTb0MgZGV2aWNlcy4gVGhpcyBoYXJkd2FyZSBpcyBzcGVjaWZpYyB0byBOWFAgTGF5ZXJzY2FwZSBTb0NzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjEzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGViMzAyMDE4Y2E5NWRiYWFhN2MwYTc0ZGJjMzc2Mzg2YThhNmMzNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6MTM6MjEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jIGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXG5pbmRleCBiNGMzOTU4MjAxYjI1Li45ZmM2ZjkxMzZlMDFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNcbkBAIC0zNjksOSAmIzQzOzM2OSw4IEBAIHN0YXRpYyBpbnQgdmZpb19mc2xfbWNfbW1hcF9tbWlvKHN0cnVjdCB2ZmlvX2ZzbF9tY19yZWdpb24gcmVnaW9uLFxuIFx0aWYgKCFyZWdpb25fY2FjaGVhYmxlKVxuIFx0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiBcbi1cdHZtYS1cdTAwM2V2bV9wZ29mZiA9IChyZWdpb24uYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgJiM0MzsgcGdvZmY7XG4tXG4tXHRyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fcGdvZmYsXG4mIzQzO1x0cmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCxcbiYjNDM7XHRcdFx0ICAgICAgIChyZWdpb24uYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgJiM0MzsgcGdvZmYsXG4gXHRcdFx0ICAgICAgIHNpemUsIHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYywgd2hpY2ggaXMgdGhlIFZGSU8gZHJpdmVyIGZvciBOWFAgUW9ySVEgRFBBQTIgKGZzbC1tYyBidXMpIFNvQyBkZXZpY2VzLiBUaGlzIGhhcmR3YXJlIGlzIHNwZWNpZmljIHRvIE5YUCBMYXllcnNjYXBlIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZWIzMDIwMThjYTk1ZGJhYWE3YzBhNzRkYmMzNzYzODZhOGE2YzM0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBTZXAgNCAxNDoxMzoyMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYwppbmRleCBiNGMzOTU4MjAxYjI1Li45ZmM2ZjkxMzZlMDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jCkBAIC0zNjksOSAmIzQzOzM2OSw4IEBAIHN0YXRpYyBpbnQgdmZpb19mc2xfbWNfbW1hcF9tbWlvKHN0cnVjdCB2ZmlvX2ZzbF9tY19yZWdpb24gcmVnaW9uLAogCWlmICghcmVnaW9uX2NhY2hlYWJsZSkKIAkJdm1hLSZndDt2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0mZ3Q7dm1fcGFnZV9wcm90KTsKIAotCXZtYS0mZ3Q7dm1fcGdvZmYgPSAocmVnaW9uLmFkZHIgJmd0OyZndDsgUEFHRV9TSElGVCkgJiM0MzsgcGdvZmY7Ci0KLQlyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLSZndDt2bV9zdGFydCwgdm1hLSZndDt2bV9wZ29mZiwKJiM0MzsJcmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0mZ3Q7dm1fc3RhcnQsCiYjNDM7CQkJICAgICAgIChyZWdpb24uYWRkciAmZ3Q7Jmd0OyBQQUdFX1NISUZUKSAmIzQzOyBwZ29mZiwKIAkJCSAgICAgICBzaXplLCB2bWEtJmd0O3ZtX3BhZ2VfcHJvdCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGhpdHMgYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIGVzcGVjaWFsbHkgd2l0aCB0aGF0IGBmc2wtbWNgIGlkZW50aWZpZXIuIEkgbmVlZCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHdoYXQgYGZzbC1tY2AgZXZlbiAqaXMqIGluIHRoaXMgY29udGV4dC4gSXMgaXQgaGFyZHdhcmUtc3BlY2lmaWM/IEFuIGFic3RyYWN0aW9uIGxheWVyPwoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLiBJJiMzOTtsbCByZWFjaCBmb3IgYGdyZXBwZXJgIChvciBldmVuIGEgYHJlYWQtZmlsZWAgd291bGQgZG8gaWYgaXQmIzM5O3Mgc21hbGwgZW5vdWdoKSBhbmQgaW1tZWRpYXRlbHkgbG9vayBhdCB0aGUgYEtjb25maWdgIGFuZC9vciB0aGUgYE1ha2VmaWxlYCB3aXRoaW4gdGhlIGBkcml2ZXJzL3ZmaW8vZnNsLW1jYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGhhcmR3YXJlIGRlcGVuZGVuY2llcyBvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWNzIHRoaXMgY29kZSBpcyB0aWVkIHRvLiBVbmRlcnN0YW5kaW5nIHRob3NlIGRlcGVuZGVuY2llcyBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRjaCYjMzk7cyBpbXBhY3QuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBhZmZlY3RzIGEgd2lkZSByYW5nZSBvZiBwbGF0Zm9ybXMgb3IgaXMgbGltaXRlZCB0byBhIG5hcnJvdyBvbmUuIEtub3dsZWRnZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNhbiBnaXZlIG1lIHNvbWUgaWRlYSBob3cgaW1wb3J0YW50IHRoaXMgY2hhbmdlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1ZGSU9fRlNMX01DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfVkZJT19NREVWKSAmIzQzOz0gbWRldi9cbmRyaXZlcnMvdmZpby9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfVkZJT19GU0xfTUMpICYjNDM7PSBmc2wtbWMvXG5kcml2ZXJzL3ZmaW8vTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1ZGSU9fQ0RYKSAmIzQzOz0gY2R4L1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZz0xPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBGU0xfTUMgYnVzIGRldmljZXNcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWctMy1cbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo0OmNvbmZpZyBWRklPX0ZTTF9NQ1xuZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnLTUtXHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvTWFrZWZpbGU9Mz12ZmlvLWZzbC1tYy15IDo9IHZmaW9fZnNsX21jLm8gdmZpb19mc2xfbWNfaW50ci5vXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL01ha2VmaWxlOjQ6b2JqLSQoQ09ORklHX1ZGSU9fRlNMX01DKSAmIzQzOz0gdmZpby1mc2wtbWMub1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz05Nz1zdGF0aWMgdm9pZCB2ZmlvX2ZzbF9tY19jbG9zZV9kZXZpY2Uoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTExMi1cdFx0ZGV2X3dhcm4oXHUwMDI2bWNfY29udC1cdTAwM2VkZXYsXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MTEzOlx0XHRcdCBcJiMzNDtWRklPX0ZTTF9NQzogcmVzZXQgZGV2aWNlIGhhcyBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0xMTQtXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTEyMD1zdGF0aWMgaW50IHZmaW9fZnNsX21jX2lvY3RsX2dldF9yZWdpb25faW5mbyhzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMTMxLVx0LyogbWFwIG9mZnNldCB0byB0aGUgcGh5c2ljYWwgYWRkcmVzcyAgKi9cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzoxMzI6XHRpbmZvLVx1MDAzZW9mZnNldCA9IFZGSU9fRlNMX01DX0lOREVYX1RPX09GRlNFVChpbmZvLVx1MDAzZWluZGV4KTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0xMzMtXHRpbmZvLVx1MDAzZXNpemUgPSB2ZGV2LVx1MDAzZXJlZ2lvbnNbaW5mby1cdTAwM2VpbmRleF0uc2l6ZTtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9MjM0PXN0YXRpYyBzc2l6ZV90IHZmaW9fZnNsX21jX3JlYWQoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIGNoYXIgX191c2VyICpidWYsXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTIzOC1cdFx0Y29udGFpbmVyX29mKGNvcmVfdmRldiwgc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSwgdmRldik7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MjM5Olx0dW5zaWduZWQgaW50IGluZGV4ID0gVkZJT19GU0xfTUNfT0ZGU0VUX1RPX0lOREVYKCpwcG9zKTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzoyNDA6XHRsb2ZmX3Qgb2ZmID0gKnBwb3MgXHUwMDI2IFZGSU9fRlNMX01DX09GRlNFVF9NQVNLO1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTI0MS1cdHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19kZXYgPSB2ZGV2LVx1MDAzZW1jX2Rldjtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9MzEyPXN0YXRpYyBzc2l6ZV90IHZmaW9fZnNsX21jX3dyaXRlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0zMTctXHRcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UsIHZkZXYpO1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjMxODpcdHVuc2lnbmVkIGludCBpbmRleCA9IFZGSU9fRlNMX01DX09GRlNFVF9UT19JTkRFWCgqcHBvcyk7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MzE5Olx0bG9mZl90IG9mZiA9ICpwcG9zIFx1MDAyNiBWRklPX0ZTTF9NQ19PRkZTRVRfTUFTSztcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0zMjAtXHRzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2ID0gdmRldi1cdTAwM2VtY19kZXY7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTM1Mz1zdGF0aWMgaW50IHZmaW9fZnNsX21jX21tYXBfbW1pbyhzdHJ1Y3QgdmZpb19mc2xfbWNfcmVnaW9uIHJlZ2lvbixcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzYwLVx0cGdvZmYgPSB2bWEtXHUwMDNldm1fcGdvZmYgXHUwMDI2XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MzYxOlx0XHQoKDFVIFx1MDAzY1x1MDAzYyAoVkZJT19GU0xfTUNfT0ZGU0VUX1NISUZUIC0gUEFHRV9TSElGVCkpIC0gMSk7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzYyLVx0YmFzZSA9IHBnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz0zNzc9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19tbWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0zODQtXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6Mzg1Olx0aW5kZXggPSB2bWEtXHUwMDNldm1fcGdvZmYgXHUwMDNlXHUwMDNlIChWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0zODYtXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQxNT1zdGF0aWMgaW50IHZmaW9fZnNsX21jX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MjYtXHRcdGlmIChkZXZpY2Vfc2V0X2RyaXZlcl9vdmVycmlkZShkZXYsIHZmaW9fZnNsX21jX29wcy5uYW1lKSlcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0Mjc6XHRcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtWRklPX0ZTTF9NQzogU2V0dGluZyBkcml2ZXIgb3ZlcnJpZGUgZm9yIGRldmljZSBpbiBkcHJjICVzIGZhaWxlZFxcblwmIzM0OyxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MjgtXHRcdFx0XHQgZGV2X25hbWUoXHUwMDI2bWNfY29udC1cdTAwM2VkZXYpKTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MjktXHRcdGVsc2VcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0MzA6XHRcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtWRklPX0ZTTF9NQzogU2V0dGluZyBkcml2ZXIgb3ZlcnJpZGUgZm9yIGRldmljZSBpbiBkcHJjICVzXFxuXCYjMzQ7LFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQzMS1cdFx0XHRcdCBkZXZfbmFtZShcdTAwMjZtY19jb250LVx1MDAzZWRldikpO1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MzYtXHRcdGlmIChtY19kcnYgXHUwMDI2XHUwMDI2IG1jX2RydiAhPSBcdTAwMjZ2ZmlvX2ZzbF9tY19kcml2ZXIpXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NDM3Olx0XHRcdGRldl93YXJuKGRldiwgXCYjMzQ7VkZJT19GU0xfTUM6IE9iamVjdCAlcyBib3VuZCB0byBkcml2ZXIgJXMgd2hpbGUgRFBSQyBib3VuZCB0byB2ZmlvLWZzbC1tY1xcblwmIzM0OyxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MzgtXHRcdFx0XHQgZGV2X25hbWUoZGV2KSwgbWNfZHJ2LVx1MDAzZWRyaXZlci5uYW1lKTtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NDQ0PXN0YXRpYyBpbnQgdmZpb19mc2xfbWNfaW5pdF9kZXZpY2Uoc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDY0LVx0aWYgKHJldCkge1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQ2NTpcdFx0ZGV2X2VycihcdTAwMjZtY19kZXYtXHUwMDNlZGV2LCBcJiMzNDtWRklPX0ZTTF9NQzogRmFpbGVkIHRvIHNldHVwIERQUkMgKCVkKVxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NjYtXHRcdGdvdG8gb3V0X25jX3VucmVnO1xuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz00NzU9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19zY2FuX2NvbnRhaW5lcihzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00ODQtXHRcdGRldl9lcnIoXHUwMDI2bWNfZGV2LVx1MDAzZWRldixcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0ODU6XHRcdFx0XCYjMzQ7VkZJT19GU0xfTUM6IENvbnRhaW5lciBzY2FubmluZyBmYWlsZWQgKCVkKVxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00ODYtXHRcdGRwcmNfcmVtb3ZlX2RldmljZXMobWNfZGV2LCBOVUxMLCAwKTtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NTI1PXN0YXRpYyBpbnQgdmZpb19mc2xfbWNfcHJvYmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2Rldilcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNTM3LVx0aWYgKHJldCkge1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjUzODpcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1ZGSU9fRlNMX01DOiBGYWlsZWQgdG8gYWRkIHRvIHZmaW8gZ3JvdXBcXG5cJiMzNDspO1xuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTUzOS1cdFx0Z290byBvdXRfcHV0X3ZkZXY7XG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmgtNi1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oOjc6I2lmbmRlZiBWRklPX0ZTTF9NQ19QUklWQVRFX0hcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oOjg6I2RlZmluZSBWRklPX0ZTTF9NQ19QUklWQVRFX0hcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTktXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaDoxMDojZGVmaW5lIFZGSU9fRlNMX01DX09GRlNFVF9TSElGVCAgICA0MFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTE6I2RlZmluZSBWRklPX0ZTTF9NQ19PRkZTRVRfTUFTSyAoKCh1NjQpKDEpIFx1MDAzY1x1MDAzYyBWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQpIC0gMSlcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTEyLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTM6I2RlZmluZSBWRklPX0ZTTF9NQ19PRkZTRVRfVE9fSU5ERVgob2ZmKSAoKG9mZikgXHUwMDNlXHUwMDNlIFZGSU9fRlNMX01DX09GRlNFVF9TSElGVClcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTE0LVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTU6I2RlZmluZSBWRklPX0ZTTF9NQ19JTkRFWF9UT19PRkZTRVQoaW5kZXgpXHRcXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTY6XHQoKHU2NCkoaW5kZXgpIFx1MDAzY1x1MDAzYyBWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQpXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaC0xNy1cbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaD00Nz12b2lkIHZmaW9fZnNsX21jX2lycXNfY2xlYW51cChzdHJ1Y3QgdmZpb19mc2xfbWNfZGV2aWNlICp2ZGV2KTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTQ4LVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6NDk6I2VuZGlmIC8qIFZGSU9fRlNMX01DX1BSSVZBVEVfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNzMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipDaGVja2luZyB0aGUgVkZJTyBGU0wtTUMgS2NvbmZpZyBGaWxlKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWdgIGZpbGUuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3Mgc29tZSBjb25maWd1cmF0aW9uIGxvZ2ljLCBtYXliZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMsIG9yIGV2ZW4ganVzdCBzb21lIGJhc2ljIGRvY3VtZW50YXRpb24gSSBuZWVkIHRvIHJldmlldy4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgZXhwZWN0IHRoaXMgYEtjb25maWdgIGZpbGUgaXMgZ29pbmcgdG8gZGljdGF0ZSB0aGUgYnVpbGQgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhlIFZGSU8gKFZpcnR1YWwgRnVuY3Rpb24gSS9PKSBkcml2ZXIgZm9yIHRoZSBGcmVlc2NhbGUgKG5vdyBOWFApIE11bHRpLUNvcmUgKE1DKSBhcmNoaXRlY3R1cmUuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgc3BlY2lmaWMgTUMgaGFyZHdhcmUgaXMgc3VwcG9ydGVkLCBhbnkgbmVjZXNzYXJ5IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBkcml2ZXJzLCBhbmQgaG93IHRoZSBWRklPIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgYnJvYWRlciBmcmFtZXdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgb3IgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mIG9yIGFkanVzdC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0bWVudSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIEZTTF9NQyBidXMgZGV2aWNlc1wmIzM0O1xuICAgMjpcdFx0ZGVwZW5kcyBvbiBGU0xfTUNfQlVTXG4gICAzOlx0XG4gICA0Olx0Y29uZmlnIFZGSU9fRlNMX01DXG4gICA1Olx0XHR0cmlzdGF0ZSBcJiMzNDtWRklPIHN1cHBvcnQgZm9yIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlc1wmIzM0O1xuICAgNjpcdFx0c2VsZWN0IEVWRU5URkRcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgRHJpdmVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgVkZJTyBRb3JJUSBEUEFBMiBmc2wtbWNcbiAgIDk6XHRcdCAgKE1hbmFnZW1lbnQgQ29tcGxleCkgZGV2aWNlcy4gVGhpcyBpcyByZXF1aXJlZCB0byBwYXNzdGhyb3VnaFxuICAxMDpcdFx0ICBmc2wtbWMgYnVzIGRldmljZXMgdXNpbmcgdGhlIFZGSU8gZnJhbWV3b3JrLlxuICAxMTpcdFxuICAxMjpcdFx0ICBJZiB5b3UgZG9uJiMzOTt0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cbiAgMTM6XHRcbiAgMTQ6XHRlbmRtZW51XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg1NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipWRklPX0ZTTF9NQyBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gYFZGSU9fRlNMX01DYCByZWxpZXMgb24gYEZTTF9NQ19CVVNgLCByaWdodD8gR290IGl0LiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byB0cmFjZSB0aGF0IGRlcGVuZGVuY3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBGU0xfTUNfQlVTYCBpcyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgY29uZmlndXJlZC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSwgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLiBUaW1lIHRvIHN0YXJ0IHNlYXJjaGluZyBhY3Jvc3MgdGhlIHdob2xlIGtlcm5lbCBzb3VyY2UgdHJlZSB0byBsb2NhdGUgd2hlcmUgYEZTTF9NQ19CVVNgIGlzIGRlY2xhcmVkIGFuZCBzZWUgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgaXQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNMX01DX0JVUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy03LVxuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWc6ODpjb25maWcgRlNMX01DX0JVU1xuZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWctOS1cdGJvb2wgXCYjMzQ7UW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTQ3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoYXQgS2NvbmZpZyBmaWxlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBGU0wtTUMgQnVzIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgRlNMLU1DIChGcmVlc2NhbGUvTlhQIE11bHRpY29yZSBDb21tdW5pY2F0aW9uKSBidXMgZHJpdmVyIGNvbmZpZ3VyYXRpb24uIFRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaXMgYGRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnYC4gVGhpcyBLY29uZmlnIGZpbGUgaXMgdGhlIGNlbnRyYWwgc291cmNlIGZvciBhbGwgb2YgdGhlIGNvbmZpZ3VyYWJsZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGF0IHNwZWNpZmljIGRyaXZlci4gSXTigJlzIHdoZXJlIGFsbCB0aGUga2V5IHNldHRpbmdzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGRlcGVuZGVuY2llcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIGRlZmluZWQuIEkgbmVlZCB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBGcm9tIHRoZXJlIEkmIzM5O2xsIGJlIGFibGUgdG8gd29yayB0aHJvdWdoIHNwZWNpZmljIG9wdGlvbnMgYW5kIHNlZSBob3cgdGhpbmdzIGFyZSBzZXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgRFBBQTIgZnNsLW1jIGJ1c1xuICAgNDpcdCNcbiAgIDU6XHQjIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuXG4gICA2Olx0I1xuICAgNzpcdFxuICAgODpcdGNvbmZpZyBGU0xfTUNfQlVTXG4gICA5Olx0XHRib29sIFwmIzM0O1FvcklRIERQQUEyIGZzbC1tYyBidXMgZHJpdmVyXCYjMzQ7XG4gIDEwOlx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiAoQVJDSF9MQVlFUlNDQVBFIHx8IChDT01QSUxFX1RFU1QgXHUwMDI2XHUwMDI2IChBUk0gfHwgQVJNNjQgfHwgWDg2X0xPQ0FMX0FQSUMgfHwgUFBDKSkpXG4gIDExOlx0XHRzZWxlY3QgR0VORVJJQ19NU0lfSVJRXG4gIDEyOlx0XHRoZWxwXG4gIDEzOlx0XHQgIERyaXZlciB0byBlbmFibGUgdGhlIGJ1cyBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIFFvcklRIERQQUEyXG4gIDE0Olx0XHQgIGFyY2hpdGVjdHVyZS4gIFRoZSBmc2wtbWMgYnVzIGRyaXZlciBoYW5kbGVzIGRpc2NvdmVyeSBvZlxuICAxNTpcdFx0ICBEUEFBMiBvYmplY3RzICh3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgTGludXggZGV2aWNlcykgYW5kXG4gIDE2Olx0XHQgIGJpbmRpbmcgb2JqZWN0cyB0byBkcml2ZXJzLlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBGU0xfTUNfVUFQSV9TVVBQT1JUXG4gIDE5Olx0XHRib29sIFwmIzM0O01hbmFnZW1lbnQgQ29tcGxleCAoTUMpIHVzZXJzcGFjZSBzdXBwb3J0XCYjMzQ7XG4gIDIwOlx0XHRkZXBlbmRzIG9uIEZTTF9NQ19CVVNcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgUHJvdmlkZXMgdXNlcnNwYWNlIHN1cHBvcnQgZm9yIGludGVycm9nYXRpbmcsIGNyZWF0aW5nLCBkZXN0cm95aW5nIG9yXG4gIDIzOlx0XHQgIGNvbmZpZ3VyaW5nIERQQUEyIG9iamVjdHMgZXhwb3J0ZWQgYnkgdGhlIE1hbmFnZW1lbnQgQ29tcGxleC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzcyNgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTG9naWMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhpcyBjb25kaXRpb25hbCBkZXBlbmRlbmN5OiBgZGVwZW5kcyBvbiBPRiAmYW1wOyZhbXA7IChBUkNIX0xBWUVSU0NBUEUgfHwgKENPTVBJTEVfVEVTVCAmYW1wOyZhbXA7IChBUk0gfHwgQVJNNjQgfHwgWDg2X0xPQ0FMX0FQSUMgfHwgUFBDKSkpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoaXMgbG9va3MgbGlrZSBhIGNvbmZpZ3VyYXRpb24gY2hlY2sgd2l0aGluIGEgbGFyZ2VyIHN5c3RlbSwgbGlrZWx5IGFuIGVtYmVkZGVkIExpbnV4IGJ1aWxkIGVudmlyb25tZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0ICYjMzQ7T0YmIzM0OyAobGlrZWx5ICYjMzQ7RGV2aWNlIFRyZWUmIzM0OykgaW1wbGllcyBoZXJlLiBJdCYjMzk7cyBwYWlyZWQgd2l0aCBlaXRoZXIgYSBMYXllcnNjYXBlIGFyY2hpdGVjdHVyZSBvciwgaW4gYSB0ZXN0L2NvbXBpbGUgc2NlbmFyaW8sIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgbGlrZSBBUk0sIEFSTTY0LCBYODYgd2l0aCBsb2NhbCBBUElDLCBvciBQb3dlclBDLiBUaGlzIG5hcnJvd3MgZG93biB0aGUgcG9zc2libGUgaGFyZHdhcmUgc2lnbmlmaWNhbnRseS4KCk5vdywgbXkgcHJpbWFyeSBxdWVzdGlvbiBpcyBhYm91dCBgRlNMX01DYC4gU3BlY2lmaWNhbGx5LCB3aGF0IGlzIGFuICYjMzQ7RlNMX01DIGJ1cyBkZXZpY2UmIzM0Oz8gSXMgaXQgcmVsYXRlZCB0byB0aGUgRnJlZXNjYWxlIChub3cgTlhQKSBNdWx0aS1Db3JlIGZyYW1ld29yaz8gVGhhdCByaW5ncyBhIGJlbGwsIGJ1dCBJIG5lZWQgdG8gY29uZmlybS4KClRoZSBjcml0aWNhbCBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgRlNMX01DIGJ1cyBvciBkZXZpY2VzIHJlbGF0ZWQgdG8gdGhlICYjMzQ7VkZJT19GU0xfTUMmIzM0OyBjYW4gZXZlbiBiZSBhY2Nlc3NlZCBvciBwcm9iZWQgaW4gYSBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBJZiB0aGV5IGFyZSBoYXJkd2FyZS1kZXBlbmRlbnQsIGl0JiMzOTtzIHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBvbmx5IGdvaW5nIHRvIGJlIGFjY2Vzc2libGUgd2l0aCBhIGRlZGljYXRlZCBwbGF0Zm9ybS4gT3IgaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gc2ltdWxhdGUsIGVzcGVjaWFsbHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgdmlydHVhbGl6ZWQgYW1kNjQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byBrbm93IHRoZSBleHRlbnQgdG8gd2hpY2ggdGhpcyBtaWdodCBiZSBwb3NzaWJsZS4KClNvLCBsZXQmIzM5O3Mgc2hpZnQgZ2VhcnMgYW5kIGV4YW1pbmUgdGhlIGRldmljZSBjcmVhdGlvbiBvciBwcm9iaW5nIHByb2Nlc3MuIEkgbmVlZCB0byBrbm93IGhvdyB0aGVzZSBmc2wtbWMgYnVzIGRldmljZXMgYXJlIGNyZWF0ZWQgb3IgZGlzY292ZXJlZC4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgZ3JlcC4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgYGZzbF9tY19idXNfdHlwZWAgc3RyaW5nLCBhbmQgcmVsYXRlZCBjb2RlLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBhbmQgcmVnaXN0ZXJzIHRoZXNlIGRldmljZXMuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBhcmUgaGFuZGxlZCBhdCBydW50aW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIHRyZWUgaW50ZWdyYXRpb24gYW5kIGhvdyBkZXZpY2Utc3BlY2lmaWMgZHJpdmVycyB3b3JrIHdpdGggdGhlIGJ1cyBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZzbF9tY19idXNfdHlwZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTMyND1BVFRSSUJVVEVfR1JPVVBTKGZzbF9tY19idXMpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMjUtXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjMyNjpjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgZnNsX21jX2J1c190eXBlID0ge1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMjctXHQubmFtZSA9IFwmIzM0O2ZzbC1tY1wmIzM0Oyxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTMzOC19O1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzozMzk6RVhQT1JUX1NZTUJPTF9HUEwoZnNsX21jX2J1c190eXBlKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzQwLVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9NDYxPWludCBfX2ZzbF9tY19kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGZzbF9tY19kcml2ZXIgKm1jX2RyaXZlcixcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTQ2Ni1cdG1jX2RyaXZlci1cdTAwM2Vkcml2ZXIub3duZXIgPSBvd25lcjtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NDY3Olx0bWNfZHJpdmVyLVx1MDAzZWRyaXZlci5idXMgPSBcdTAwMjZmc2xfbWNfYnVzX3R5cGU7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTQ2OC1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTc1Mj1pbnQgZnNsX21jX2RldmljZV9hZGQoc3RydWN0IGZzbF9tY19vYmpfZGVzYyAqb2JqX2Rlc2MsXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03ODktXHRtY19kZXYtXHUwMDNlZGV2LnBhcmVudCA9IHBhcmVudF9kZXY7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjc5MDpcdG1jX2Rldi1cdTAwM2VkZXYuYnVzID0gXHUwMDI2ZnNsX21jX2J1c190eXBlO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03OTEtXHRtY19kZXYtXHUwMDNlZGV2LnJlbGVhc2UgPSBmc2xfbWNfZGV2aWNlX3JlbGVhc2U7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMTc1PXN0YXRpYyB2b2lkIGZzbF9tY19idXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTgzLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMTg0Olx0YnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcdTAwMjZmc2xfbWNfbmIpO1xuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTg1LVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTI2MD1zdGF0aWMgaW50IF9faW5pdCBmc2xfbWNfYnVzX2RyaXZlcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjYzLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjY0Olx0ZXJyb3IgPSBidXNfcmVnaXN0ZXIoXHUwMDI2ZnNsX21jX2J1c190eXBlKTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI2NS1cdGlmIChlcnJvciBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI5Mi1lcnJvcl9jbGVhbnVwX2J1czpcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTI5MzpcdGJ1c191bnJlZ2lzdGVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyOTQtXG4tLVxuZHJpdmVycy9pb21tdS9pb21tdS5jPTE4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlICogY29uc3QgaW9tbXVfYnVzZXNbXSA9IHtcbi0tXG5kcml2ZXJzL2lvbW11L2lvbW11LmMtMTk0LSNpZmRlZiBDT05GSUdfRlNMX01DX0JVU1xuZHJpdmVycy9pb21tdS9pb21tdS5jOjE5NTpcdFx1MDAyNmZzbF9tY19idXNfdHlwZSxcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xOTYtI2VuZGlmXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQ0ND1zdGF0aWMgaW50IHZmaW9fZnNsX21jX2luaXRfZGV2aWNlKHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ1Ny1cdHZkZXYtXHUwMDNlbmIubm90aWZpZXJfY2FsbCA9IHZmaW9fZnNsX21jX2J1c19ub3RpZmllcjtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0NTg6XHRyZXQgPSBidXNfcmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcdTAwMjZ2ZGV2LVx1MDAzZW5iKTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NTktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NzAtb3V0X25jX3VucmVnOlxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQ3MTpcdGJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXHUwMDI2dmRldi1cdTAwM2VuYik7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDcyLVx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NDkyPXN0YXRpYyB2b2lkIHZmaW9fZnNsX3VuaW5pdF9kZXZpY2Uoc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDk5LVx0ZHByY19jbGVhbnVwKG1jX2Rldik7XG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NTAwOlx0YnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcdTAwMjZ2ZGV2LVx1MDAzZW5iKTtcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01MDEtfVxuLS1cbmluY2x1ZGUvbGludXgvZnNsL21jLmg9MzU2PWludCBtY19zZW5kX2NvbW1hbmQoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHN0cnVjdCBmc2xfbWNfY29tbWFuZCAqY21kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oLTM1OC0jaWZkZWYgQ09ORklHX0ZTTF9NQ19CVVNcbmluY2x1ZGUvbGludXgvZnNsL21jLmg6MzU5OiNkZWZpbmUgZGV2X2lzX2ZzbF9tYyhfZGV2KSAoKF9kZXYpLVx1MDAzZWJ1cyA9PSBcdTAwMjZmc2xfbWNfYnVzX3R5cGUpXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oLTM2MC11MzIgZnNsX21jX2dldF9tc2lfaWQoc3RydWN0IGRldmljZSAqZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oPTQyOD1zdHJ1Y3QgZnNsX21jX2RldmljZSAqZnNsX21jX2dldF9lbmRwb2ludChzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2LFxuLS1cbmluY2x1ZGUvbGludXgvZnNsL21jLmgtNDMwLVxuaW5jbHVkZS9saW51eC9mc2wvbWMuaDo0MzE6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBidXNfdHlwZSBmc2xfbWNfYnVzX3R5cGU7XG5pbmNsdWRlL2xpbnV4L2ZzbC9tYy5oLTQzMi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgYGZzbC1tYy1idXMuY2AgYW5kIHNwZWNpZmljYWxseSwgaG93IHRoZXNlIGZzbC1tYyBkZXZpY2VzIGFyZSBicm91Z2h0IHRvIGxpZmUuIEkmIzM5O2xsIGZvY3VzIG15IGF0dGVudGlvbiBvbiBgZnNsLW1jLWJ1cy5jYCB0byB0cmFjZSB0aGUgaW5zdGFudGlhdGlvbiBwcm9jZXNzLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2xfbWNfYnVzX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9idXMvZnNsLW1jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAwNT1zdGF0aWMgaW50IGZzbF9tY19maXJtd2FyZV9jaGVjayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAzNS0vKlxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMDM2OiAqIGZzbF9tY19idXNfcHJvYmUgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHJvb3QgTUMgYnVzIGlzIGJlaW5nXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwMzctICogYWRkZWRcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTAzOC0gKi9cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAzOTpzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTA0MC17XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTIxNi1cdFx0ICAgfSxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTIxNzpcdC5wcm9iZSA9IGZzbF9tY19idXNfcHJvYmUsXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEyMTgtXHQucmVtb3ZlID0gZnNsX21jX2J1c19yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTkxCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byB0aGUgQnVzIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgZnNsX21jX2J1c19kcml2ZXJgIGlzIGJlaGF2aW5nLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIGRldmljZSBtYXRjaCB0YWJsZS4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgdGhpcyBkcml2ZXIgaWRlbnRpZmllcyBhbmQgYmluZHMgdG8gdGhlIGNvcnJlY3QgaGFyZHdhcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0IHRoZSBpbnRlbmRlZCBkZXZpY2VzIGFyZSwgYW5kIHRoYXQgdGhlcmUgYXJlIG5vIG9idmlvdXMgbWlzbWF0Y2hlcyBvciBwb3RlbnRpYWwgY29uZmxpY3RzIGx1cmtpbmcgaW4gdGhlcmUuIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyBhbnkgcG90ZW50aWFsIGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSB0YWJsZSBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMDA6XHR9O1xuMTIwMTpcdFxuMTIwMjpcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZzbF9tY19idXNfbWF0Y2hfdGFibGUpO1xuMTIwMzpcdFxuMTIwNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlW10gPSB7XG4xMjA1Olx0XHR7XCYjMzQ7TlhQMDAwOFwmIzM0OywgMCB9LFxuMTIwNjpcdFx0eyB9XG4xMjA3Olx0fTtcbjEyMDg6XHRNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGZzbF9tY19idXNfYWNwaV9tYXRjaF90YWJsZSk7XG4xMjA5Olx0XG4xMjEwOlx0c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZnNsX21jX2J1c19kcml2ZXIgPSB7XG4xMjExOlx0XHQuZHJpdmVyID0ge1xuMTIxMjpcdFx0XHQgICAubmFtZSA9IFwmIzM0O2ZzbF9tY19idXNcJiMzNDssXG4xMjEzOlx0XHRcdCAgIC5wbSA9IE5VTEwsXG4xMjE0Olx0XHRcdCAgIC5vZl9tYXRjaF90YWJsZSA9IGZzbF9tY19idXNfbWF0Y2hfdGFibGUsXG4xMjE1Olx0XHRcdCAgIC5hY3BpX21hdGNoX3RhYmxlID0gZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlLFxuMTIxNjpcdFx0XHQgICB9LFxuMTIxNzpcdFx0LnByb2JlID0gZnNsX21jX2J1c19wcm9iZSxcbjEyMTg6XHRcdC5yZW1vdmUgPSBmc2xfbWNfYnVzX3JlbW92ZSxcbjEyMTk6XHRcdC5zaHV0ZG93biA9IGZzbF9tY19idXNfcmVtb3ZlLFxuMTIyMDpcdH07XG4xMjIxOlx0XG4xMjIyOlx0c3RhdGljIGludCBmc2xfbWNfYnVzX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4xMjIzOlx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKVxuMTIyNDpcdHtcbjEyMjU6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7XG4xMjI2Olx0XHRzdHJ1Y3QgcmVzb3VyY2UgKnJlcztcbjEyMjc6XHRcdHZvaWQgX19pb21lbSAqZnNsX21jX3JlZ3M7XG4xMjI4Olx0XG4xMjI5Olx0XHRpZiAoYWN0aW9uICE9IEJVU19OT1RJRllfQUREX0RFVklDRSlcbjEyMzA6XHRcdFx0cmV0dXJuIDA7XG4xMjMxOlx0XG4xMjMyOlx0XHRpZiAoIW9mX21hdGNoX2RldmljZShmc2xfbWNfYnVzX21hdGNoX3RhYmxlLCBkZXYpIFx1MDAyNlx1MDAyNlxuMTIzMzpcdFx0ICAgICFhY3BpX21hdGNoX2RldmljZShmc2xfbWNfYnVzX2FjcGlfbWF0Y2hfdGFibGUsIGRldikpXG4xMjM0Olx0XHRcdHJldHVybiAwO1xuMTIzNTpcdFxuMTIzNjpcdFx0cmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHRvX3BsYXRmb3JtX2RldmljZShkZXYpLCBJT1JFU09VUkNFX01FTSwgMSk7XG4xMjM3Olx0XHRpZiAoIXJlcylcbjEyMzg6XHRcdFx0cmV0dXJuIDA7XG4xMjM5Olx0XG4xMjQwOlx0XHRmc2xfbWNfcmVncyA9IGlvcmVtYXAocmVzLVx1MDAzZXN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpO1xuMTI0MTpcdFx0aWYgKCFmc2xfbWNfcmVncylcbjEyNDI6XHRcdFx0cmV0dXJuIDA7XG4xMjQzOlx0XG4xMjQ0Olx0XHQvKlxuMTI0NTpcdFx0ICogTWFrZSBzdXJlIHRoYXQgdGhlIE1DIGZpcm13YXJlIGlzIHBhdXNlZCBiZWZvcmUgdGhlIElPTU1VIHNldHVwIGZvclxuMTI0NjpcdFx0ICogaXQgaXMgZG9uZSBvciBvdGhlcndpc2UgdGhlIGZpcm13YXJlIHdpbGwgY3Jhc2ggcmlnaHQgYWZ0ZXIgdGhlIFNNTVVcbjEyNDc6XHRcdCAqIGdldHMgcHJvYmVkIGFuZCBlbmFibGVkLlxuMTI0ODpcdFx0ICovXG4xMjQ5Olx0XHR3cml0ZWwocmVhZGwoZnNsX21jX3JlZ3MgJiM0MzsgRlNMX01DX0dDUjEpIHwgKEdDUjFfUDFfU1RPUCB8IEdDUjFfUDJfU1RPUCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNjI2CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSB2ZmlvX2ZzbF9tYyBEcml2ZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGB2ZmlvX2ZzbF9tY2AgZHJpdmVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSwgcGFydGljdWxhcmx5IGhvdyBpdCYjMzk7cyByZWdpc3RlcmVkIHdpdGggdGhlIGtlcm5lbCBhbmQgaG93IHRoZSBwcm9iZSBtZWNoYW5pc20gd29ya3MuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCB3aXRoIFZGSU8gYW5kIEZyZWVzY2FsZSYjMzk7cyAob3IsIG1vcmUgbGlrZWx5LCBOWFAmIzM5O3MpIE1DIChNdWx0aWNvcmUpIGFyY2hpdGVjdHVyZSwgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLiBUaGUgaW1tZWRpYXRlIHBsYW4gaXMgdG8gZXhhbWluZSB0aGUgc291cmNlIGNvZGU7IEkgbmVlZCB0byBnZXQgaW50byB0aGUgYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AgZmlsZSBhbmQgZGlzc2VjdCBpdC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJIG5lZWQgdG8gc3RhcnQgYnVpbGRpbmcgYSBtZW50YWwgbW9kZWwgb2YgdGhpcyBkcml2ZXImIzM5O3Mgcm9sZSBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTIwOlx0XG4gNTIxOlx0XHQvKiBkZXZpY2Vfc2V0IGlzIHJlbGVhc2VkIGJ5IHZmaW8gY29yZSBpZiBAaW5pdCBmYWlscyAqL1xuIDUyMjpcdFx0cmV0dXJuIHZmaW9fZnNsX21jX2luaXRfZGV2aWNlKHZkZXYpO1xuIDUyMzpcdH1cbiA1MjQ6XHRcbiA1MjU6XHRzdGF0aWMgaW50IHZmaW9fZnNsX21jX3Byb2JlKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19kZXYpXG4gNTI2Olx0e1xuIDUyNzpcdFx0c3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldjtcbiA1Mjg6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jX2Rldi1cdTAwM2VkZXY7XG4gNTI5Olx0XHRpbnQgcmV0O1xuIDUzMDpcdFxuIDUzMTpcdFx0dmRldiA9IHZmaW9fYWxsb2NfZGV2aWNlKHZmaW9fZnNsX21jX2RldmljZSwgdmRldiwgZGV2LFxuIDUzMjpcdFx0XHRcdFx0IFx1MDAyNnZmaW9fZnNsX21jX29wcyk7XG4gNTMzOlx0XHRpZiAoSVNfRVJSKHZkZXYpKVxuIDUzNDpcdFx0XHRyZXR1cm4gUFRSX0VSUih2ZGV2KTtcbiA1MzU6XHRcbiA1MzY6XHRcdHJldCA9IHZmaW9fcmVnaXN0ZXJfZ3JvdXBfZGV2KFx1MDAyNnZkZXYtXHUwMDNldmRldik7XG4gNTM3Olx0XHRpZiAocmV0KSB7XG4gNTM4Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtWRklPX0ZTTF9NQzogRmFpbGVkIHRvIGFkZCB0byB2ZmlvIGdyb3VwXFxuXCYjMzQ7KTtcbiA1Mzk6XHRcdFx0Z290byBvdXRfcHV0X3ZkZXY7XG4gNTQwOlx0XHR9XG4gNTQxOlx0XG4gNTQyOlx0XHRyZXQgPSB2ZmlvX2ZzbF9tY19zY2FuX2NvbnRhaW5lcihtY19kZXYpO1xuIDU0MzpcdFx0aWYgKHJldClcbiA1NDQ6XHRcdFx0Z290byBvdXRfZ3JvdXBfZGV2O1xuIDU0NTpcdFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgdmRldik7XG4gNTQ2Olx0XHRyZXR1cm4gMDtcbiA1NDc6XHRcbiA1NDg6XHRvdXRfZ3JvdXBfZGV2OlxuIDU0OTpcdFx0dmZpb191bnJlZ2lzdGVyX2dyb3VwX2RldihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpO1xuIDU1MDpcdG91dF9wdXRfdmRldjpcbiA1NTE6XHRcdHZmaW9fcHV0X2RldmljZShcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpO1xuIDU1MjpcdFx0cmV0dXJuIHJldDtcbiA1NTM6XHR9XG4gNTU0Olx0XG4gNTU1Olx0c3RhdGljIHZvaWQgdmZpb19mc2xfbWNfcmVsZWFzZV9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXG4gNTU2Olx0e1xuIDU1NzpcdFx0c3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldiA9XG4gNTU4Olx0XHRcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UsIHZkZXYpO1xuIDU1OTpcdFxuIDU2MDpcdFx0dmZpb19mc2xfdW5pbml0X2RldmljZSh2ZGV2KTtcbiA1NjE6XHRcdG11dGV4X2Rlc3Ryb3koXHUwMDI2dmRldi1cdTAwM2VpZ2F0ZSk7XG4gNTYyOlx0fVxuIDU2MzpcdFxuIDU2NDpcdHN0YXRpYyB2b2lkIHZmaW9fZnNsX21jX3JlbW92ZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxuIDU2NTpcdHtcbiA1NjY6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1jX2Rldi1cdTAwM2VkZXY7XG4gNTY3Olx0XHRzdHJ1Y3QgdmZpb19mc2xfbWNfZGV2aWNlICp2ZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gNTY4Olx0XG4gNTY5Olx0XHR2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KFx1MDAyNnZkZXYtXHUwMDNldmRldik7XG4gNTcwOlx0XHRkcHJjX3JlbW92ZV9kZXZpY2VzKG1jX2RldiwgTlVMTCwgMCk7XG4gNTcxOlx0XHR2ZmlvX3B1dF9kZXZpY2UoXHUwMDI2dmRldi1cdTAwM2V2ZGV2KTtcbiA1NzI6XHR9XG4gNTczOlx0XG4gNTc0Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB2ZmlvX2RldmljZV9vcHMgdmZpb19mc2xfbWNfb3BzID0ge1xuIDU3NTpcdFx0Lm5hbWVcdFx0PSBcJiMzNDt2ZmlvLWZzbC1tY1wmIzM0OyxcbiA1NzY6XHRcdC5pbml0XHRcdD0gdmZpb19mc2xfbWNfaW5pdF9kZXYsXG4gNTc3Olx0XHQucmVsZWFzZVx0PSB2ZmlvX2ZzbF9tY19yZWxlYXNlX2RldixcbiA1Nzg6XHRcdC5vcGVuX2RldmljZVx0PSB2ZmlvX2ZzbF9tY19vcGVuX2RldmljZSxcbiA1Nzk6XHRcdC5jbG9zZV9kZXZpY2VcdD0gdmZpb19mc2xfbWNfY2xvc2VfZGV2aWNlLFxuIDU4MDpcdFx0LmlvY3RsXHRcdD0gdmZpb19mc2xfbWNfaW9jdGwsXG4gNTgxOlx0XHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX2ZzbF9tY19pb2N0bF9nZXRfcmVnaW9uX2luZm8sXG4gNTgyOlx0XHQucmVhZFx0XHQ9IHZmaW9fZnNsX21jX3JlYWQsXG4gNTgzOlx0XHQud3JpdGVcdFx0PSB2ZmlvX2ZzbF9tY193cml0ZSxcbiA1ODQ6XHRcdC5tbWFwXHRcdD0gdmZpb19mc2xfbWNfbW1hcCxcbiA1ODU6XHRcdC5iaW5kX2lvbW11ZmRcdD0gdmZpb19pb21tdWZkX3BoeXNpY2FsX2JpbmQsXG4gNTg2Olx0XHQudW5iaW5kX2lvbW11ZmRcdD0gdmZpb19pb21tdWZkX3BoeXNpY2FsX3VuYmluZCxcbiA1ODc6XHRcdC5hdHRhY2hfaW9hc1x0PSB2ZmlvX2lvbW11ZmRfcGh5c2ljYWxfYXR0YWNoX2lvYXMsXG4gNTg4Olx0XHQuZGV0YWNoX2lvYXNcdD0gdmZpb19pb21tdWZkX3BoeXNpY2FsX2RldGFjaF9pb2FzLFxuIDU4OTpcdH07XG4gNTkwOlx0XG4gNTkxOlx0c3RhdGljIHN0cnVjdCBmc2xfbWNfZHJpdmVyIHZmaW9fZnNsX21jX2RyaXZlciA9IHtcbiA1OTI6XHRcdC5wcm9iZVx0XHQ9IHZmaW9fZnNsX21jX3Byb2JlLFxuIDU5MzpcdFx0LnJlbW92ZVx0XHQ9IHZmaW9fZnNsX21jX3JlbW92ZSxcbiA1OTQ6XHRcdC5kcml2ZXJcdD0ge1xuIDU5NTpcdFx0XHQubmFtZVx0PSBcJiMzNDt2ZmlvLWZzbC1tY1wmIzM0OyxcbiA1OTY6XHRcdH0sXG4gNTk3Olx0XHQuZHJpdmVyX21hbmFnZWRfZG1hID0gdHJ1ZSxcbiA1OTg6XHR9O1xuIDU5OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI5MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBmc2xfbWMgRHJpdmVyIGFuZCBpdHMgRW52aXJvbm1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCB0aGUgYGZzbF9tY19kcml2ZXJgIGlzIHJlZ2lzdGVyZWQsIGl0cyBwcm9iZSBmdW5jdGlvbiB0aWVkIHRvIHRoZSBgZnNsLW1jYCBidXMuIE15IGZpcnN0IHRob3VnaHQgaXMsICYjMzQ7V2hhdCBleGFjdGx5ICppcyogdGhpcyBgZnNsLW1jYCBidXM/JiMzNDsgQSBxdWljayBzZWFyY2ggY29uZmlybXMgaXQmIzM5O3MgdGhlICYjMzQ7UW9ySVEgRFBBQTIgZnNsLW1jIGJ1cyBkcml2ZXIsJiMzNDsgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBGcmVlc2NhbGUvTlhQJiMzOTtzIHByb3ByaWV0YXJ5IExheWVyc2NhcGUgUW9ySVEgRFBBQTIgKERhdGEgUGF0aCBBY2NlbGVyYXRpb24gQXJjaGl0ZWN0dXJlIEdlbiAyKSBNYW5hZ2VtZW50IENvbXBsZXggKE1DKSBoYXJkd2FyZS4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSwgdHlwaWNhbGx5IEFSTSBvciBQb3dlclBDLCB0aG91Z2ggSSYjMzk7dmUgc2VlbiBMYXllcnNjYXBlIGluIHRoZSBtaXggdG9vLgoKTm93LCBteSBuZXh0IHF1ZXN0aW9uOiBpcyB0aGVyZSBhbnkgZW11bGF0aW9uIG9mIHRoaXMgYnVzIGF2YWlsYWJsZSBpbiBzdGFuZGFyZCBRRU1VIG9uIHg4Nl82NCBvciBhbWQ2ND8gVGhlIGFuc3dlciBpcyBuby4gUUVNVSBkb2VzbiYjMzk7dCBvZmZlciBhbnkgZW11bGF0aW9uIGZvciB0aGUgTlhQIExheWVyc2NhcGUgRFBBQTIgTWFuYWdlbWVudCBDb21wbGV4LiBJbiBmYWN0LCBvbiB4ODZfNjQsIHRoZSBgRlNMX01DX0JVU2AgY29tcG9uZW50IGlzIG9ubHkgY29tcGlsZWQgaWYgdGhlIGBDT01QSUxFX1RFU1RgIGZsYWcgaXMgc2V0LiBEaWdnaW5nIGludG8gdGhlIEtjb25maWcsIGl0IHNlZW1zIGl0IGRlcGVuZHMgb24gYE9GYCAoT3BlbiBGaXJtd2FyZS9EZXZpY2UgVHJlZSkgYW5kLCBvbiB4ODZfNjQsIGBPRmAgaXMgKm9ubHkqIGVuYWJsZWQgaW4gdGhlIGBDT01QSUxFX1RFU1RgIGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgbm90IGF0IGFsbCwgdW5sZXNzIGBDT01QSUxFX1RFU1RgIGlzIHNldCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBtYXRjaGVzLCB3aGljaCBpcyBlaXRoZXIgcGh5c2ljYWwgTlhQIFFvcklRIERQQUEyIFNvQyBoYXJkd2FyZSBvciBhbiBBQ1BJIG1hdGNoICYjMzQ7TlhQMDAwOCYjMzQ7IHdpdGggYWN0dWFsIE1DIGZpcm13YXJlIHJlZ2lzdGVycy4KClNvLCByZWFsaXN0aWNhbGx5LCB0aGlzIGNvZGUgaXMgZGVzaWduZWQgdG8gcnVuIG9uIHNwZWNpZmljIGhhcmR3YXJlLiBHaXZlbiB0aGlzIGhhcmR3YXJlIGRlcGVuZGVuY3ksIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXMgdGhlcmUgYW55dGhpbmcgdGhhdCBtaWdodCAqZHluYW1pY2FsbHkqIGNyZWF0ZSBhbiBmc2wtbWMgZGV2aWNlLCBwZXJoYXBzIHZpcnR1YWxseT8gU29tZXRoaW5nIHRoYXQgY2FuIGJlIGJyb3VnaHQgdXAgd2l0aG91dCBkZWRpY2F0ZWQgaGFyZHdhcmU/JiMzNDsgVG8gaW52ZXN0aWdhdGUgdGhhdCwgSSYjMzk7bGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGNhbGxzIHRvIGBmc2xfbWNfZGV2aWNlX2FkZGAgYW5kIHNlZSB3aGVyZSB0aGlzIG1pZ2h0IGJlIGNhbGxlZCBmcm9tLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc2xfbWNfZGV2aWNlX2FkZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz0xNjk9c3RhdGljIHZvaWQgZnNsX21jX29ial9kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19idXNfZGV2LFxuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9kcHJjLWRyaXZlci5jLTE4Mi1cdH0gZWxzZSB7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYzoxODM6XHRcdGVycm9yID0gZnNsX21jX2RldmljZV9hZGQob2JqX2Rlc2MsIE5VTEwsIFx1MDAyNm1jX2J1c19kZXYtXHUwMDNlZGV2LFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTg0LVx0XHRcdFx0XHQgIFx1MDAyNmNoaWxkX2Rldik7XG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz03Mzc9c3RhdGljIHZvaWQgZnNsX21jX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTc1MS0gKi9cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6NzUyOmludCBmc2xfbWNfZGV2aWNlX2FkZChzdHJ1Y3QgZnNsX21jX29ial9kZXNjICpvYmpfZGVzYyxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzUzLVx0XHQgICAgICBzdHJ1Y3QgZnNsX21jX2lvICptY19pbyxcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg3OS19XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjg4MDpFWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfZGV2aWNlX2FkZCk7XG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4MS1cbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTEwMzk9c3RhdGljIGludCBmc2xfbWNfYnVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTU3LVxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMTU4Olx0ZXJyb3IgPSBmc2xfbWNfZGV2aWNlX2FkZChcdTAwMjZvYmpfZGVzYywgbWNfaW8sIFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcdTAwMjZtY19idXNfZGV2KTtcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE1OS1cdGlmIChlcnJvciBcdTAwM2MgMClcbi0tXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaD02MDE9c3RydWN0IGZzbF9tY19idXMge1xuLS1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTYxMy1cbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oOjYxNDppbnQgX19tdXN0X2NoZWNrIGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmgtNjE1LVx0XHRcdFx0ICAgc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODUyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgZnNsLW1jLWJ1cyBQcm9iZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhpcyBgZnNsX21jX2J1c19wcm9iZWAgZnVuY3Rpb24gd29ya3MuIEl0IHNlZW1zIGxpa2UgdGhlIHByb2JlIGlzIHRyaWdnZXJlZCBieSBhIGBwbGF0Zm9ybV9kZXZpY2VgIHRoYXQgbWF0Y2hlcyBlaXRoZXIgdGhlIGBmc2xfbWNfYnVzX21hdGNoX3RhYmxlYCBvciwgaWYgd2UmIzM5O3JlIG9uIEFDUEksIHRoZSBgZnNsX21jX2J1c19hY3BpX21hdGNoX3RhYmxlYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgbm90aW5nIHRoYXQgJiMzNDtOWFAwMDA4JiMzNDsgaXMgaW4gdGhlIEFDUEkgdGFibGUuIFRoYXQgdGVsbHMgbWUgd2hhdCBraW5kIG9mIGRldmljZSB0aGUgc3lzdGVtJiMzOTtzIGxpa2VseSB0YXJnZXRpbmcuCgpSaWdodCwgc28gaW4gdGhpcyBwcm9iZSBmdW5jdGlvbiwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZHJpdmVyICphY3R1YWxseSogaW50ZXJhY3RzIHdpdGggdGhlIE1DIGZpcm13YXJlIG9uIHRoZSBoYXJkd2FyZS4gTm93LCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBmc2xfbWNfYnVzX3Byb2JlYCBmdW5jdGlvbiBpdHNlbGYuIEkmIzM5O2xsIG9wZW4gdXAgYGRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmNgIGFuZCBzZWUgd2hhdCYjMzk7cyByZWFsbHkgaGFwcGVuaW5nIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNDA6XHR7XG4xMDQxOlx0XHRzdHJ1Y3QgZnNsX21jX29ial9kZXNjIG9ial9kZXNjO1xuMTA0MjpcdFx0aW50IGVycm9yO1xuMTA0MzpcdFx0c3RydWN0IGZzbF9tYyAqbWM7XG4xMDQ0Olx0XHRzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfYnVzX2RldiA9IE5VTEw7XG4xMDQ1Olx0XHRzdHJ1Y3QgZnNsX21jX2lvICptY19pbyA9IE5VTEw7XG4xMDQ2Olx0XHRpbnQgY29udGFpbmVyX2lkO1xuMTA0NzpcdFx0cGh5c19hZGRyX3QgbWNfcG9ydGFsX3BoeXNfYWRkcjtcbjEwNDg6XHRcdHUzMiBtY19wb3J0YWxfc2l6ZSwgbWNfc3RyZWFtX2lkO1xuMTA0OTpcdFx0c3RydWN0IHJlc291cmNlICpwbGF0X3JlcztcbjEwNTA6XHRcbjEwNTE6XHRcdG1jID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKm1jKSwgR0ZQX0tFUk5FTCk7XG4xMDUyOlx0XHRpZiAoIW1jKVxuMTA1MzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjEwNTQ6XHRcbjEwNTU6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTtcbjEwNTY6XHRcbjEwNTc6XHRcdHBsYXRfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTtcbjEwNTg6XHRcdGlmIChwbGF0X3Jlcykge1xuMTA1OTpcdFx0XHRtYy1cdTAwM2Vmc2xfbWNfcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGxhdF9yZXMpO1xuMTA2MDpcdFx0XHRpZiAoSVNfRVJSKG1jLVx1MDAzZWZzbF9tY19yZWdzKSlcbjEwNjE6XHRcdFx0XHRyZXR1cm4gUFRSX0VSUihtYy1cdTAwM2Vmc2xfbWNfcmVncyk7XG4xMDYyOlx0XHR9XG4xMDYzOlx0XG4xMDY0Olx0XHRpZiAobWMtXHUwMDNlZnNsX21jX3JlZ3MpIHtcbjEwNjU6XHRcdFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FDUEkpIFx1MDAyNlx1MDAyNiAhZGV2X29mX25vZGUoXHUwMDI2cGRldi1cdTAwM2VkZXYpKSB7XG4xMDY2Olx0XHRcdFx0bWNfc3RyZWFtX2lkID0gcmVhZGwobWMtXHUwMDNlZnNsX21jX3JlZ3MgJiM0MzsgRlNMX01DX0ZBUFIpO1xuMTA2NzpcdFx0XHRcdC8qXG4xMDY4Olx0XHRcdFx0ICogSFcgT1JzIHRoZSBQTCBhbmQgQk1UIGJpdCwgcGxhY2VzIHRoZSByZXN1bHQgaW4gYml0XG4xMDY5Olx0XHRcdFx0ICogMTQgb2YgdGhlIFN0cmVhbUlEIGFuZCBPUnMgaW4gdGhlIElDSUQuIENhbGN1bGF0ZSBpdFxuMTA3MDpcdFx0XHRcdCAqIGFjY29yZGluZ2x5LlxuMTA3MTpcdFx0XHRcdCAqL1xuMTA3MjpcdFx0XHRcdG1jX3N0cmVhbV9pZCA9IChtY19zdHJlYW1faWQgXHUwMDI2IDB4ZmZmZikgfFxuMTA3MzpcdFx0XHRcdFx0KChtY19zdHJlYW1faWQgXHUwMDI2IChNQ19GQVBSX1BMIHwgTUNfRkFQUl9CTVQpKSA/XG4xMDc0Olx0XHRcdFx0XHRcdEJJVCgxNCkgOiAwKTtcbjEwNzU6XHRcdFx0XHRlcnJvciA9IGFjcGlfZG1hX2NvbmZpZ3VyZV9pZChcdTAwMjZwZGV2LVx1MDAzZWRldixcbjEwNzY6XHRcdFx0XHRcdFx0XHQgICAgICBERVZfRE1BX0NPSEVSRU5ULFxuMTA3NzpcdFx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNm1jX3N0cmVhbV9pZCk7XG4xMDc4Olx0XHRcdFx0aWYgKGVycm9yID09IC1FUFJPQkVfREVGRVIpXG4xMDc5Olx0XHRcdFx0XHRyZXR1cm4gZXJyb3I7XG4xMDgwOlx0XHRcdFx0aWYgKGVycm9yKVxuMTA4MTpcdFx0XHRcdFx0ZGV2X3dhcm4oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4xMDgyOlx0XHRcdFx0XHRcdCBcJiMzNDtmYWlsZWQgdG8gY29uZmlndXJlIGRtYTogJWQuXFxuXCYjMzQ7LFxuMTA4MzpcdFx0XHRcdFx0XHQgZXJyb3IpO1xuMTA4NDpcdFx0XHR9XG4xMDg1Olx0XG4xMDg2Olx0XHRcdC8qXG4xMDg3Olx0XHRcdCAqIFNvbWUgYm9vdGxvYWRlcnMgcGF1c2UgdGhlIE1DIGZpcm13YXJlIGJlZm9yZSBib290aW5nIHRoZVxuMTA4ODpcdFx0XHQgKiBrZXJuZWwgc28gdGhhdCBNQyB3aWxsIG5vdCBjYXVzZSBmYXVsdHMgYXMgc29vbiBhcyB0aGVcbjEwODk6XHRcdFx0ICogU01NVSBwcm9iZXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlcmUmIzM5O3Mgbm8gY29uZmlndXJhdGlvblxuMTA5MDpcdFx0XHQgKiBpbiBwbGFjZSBmb3IgTUMuXG4xMDkxOlx0XHRcdCAqIEF0IHRoaXMgcG9pbnQgTUMgc2hvdWxkIGhhdmUgYWxsIGl0cyBTTU1VIHNldHVwIGRvbmUgc28gbWFrZVxuMTA5MjpcdFx0XHQgKiBzdXJlIGl0IGlzIHJlc3VtZWQuXG4xMDkzOlx0XHRcdCAqL1xuMTA5NDpcdFx0XHR3cml0ZWwocmVhZGwobWMtXHUwMDNlZnNsX21jX3JlZ3MgJiM0MzsgRlNMX01DX0dDUjEpIFx1MDAyNlxuMTA5NTpcdFx0XHRcdCAgICAgKH4oR0NSMV9QMV9TVE9QIHwgR0NSMV9QMl9TVE9QKSksXG4xMDk2Olx0XHRcdCAgICAgICBtYy1cdTAwM2Vmc2xfbWNfcmVncyAmIzQzOyBGU0xfTUNfR0NSMSk7XG4xMDk3Olx0XHR9XG4xMDk4Olx0XG4xMDk5Olx0XHRlcnJvciA9IGZzbF9tY19maXJtd2FyZV9jaGVjayhwZGV2KTtcbjExMDA6XHRcdGlmIChlcnJvcilcbjExMDE6XHRcdFx0cmV0dXJuIGVycm9yO1xuMTEwMjpcdFxuMTEwMzpcdFx0LypcbjExMDQ6XHRcdCAqIEdldCBwaHlzaWNhbCBhZGRyZXNzIG9mIE1DIHBvcnRhbCBmb3IgdGhlIHJvb3QgRFBSQzpcbjExMDU6XHRcdCAqL1xuMTEwNjpcdFx0cGxhdF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApO1xuMTEwNzpcdFx0aWYgKCFwbGF0X3JlcylcbjExMDg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMTA5Olx0XG4xMTEwOlx0XHRtY19wb3J0YWxfcGh5c19hZGRyID0gcGxhdF9yZXMtXHUwMDNlc3RhcnQ7XG4xMTExOlx0XHRtY19wb3J0YWxfc2l6ZSA9IHJlc291cmNlX3NpemUocGxhdF9yZXMpO1xuMTExMjpcdFx0bWNfcG9ydGFsX2Jhc2VfcGh5c19hZGRyID0gbWNfcG9ydGFsX3BoeXNfYWRkciBcdTAwMjYgfjB4M2ZmZmZmZjtcbjExMTM6XHRcbjExMTQ6XHRcdGVycm9yID0gZnNsX2NyZWF0ZV9tY19pbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgbWNfcG9ydGFsX3BoeXNfYWRkcixcbjExMTU6XHRcdFx0XHRcdCBtY19wb3J0YWxfc2l6ZSwgTlVMTCxcbjExMTY6XHRcdFx0XHRcdCBGU0xfTUNfSU9fQVRPTUlDX0NPTlRFWFRfUE9SVEFMLCBcdTAwMjZtY19pbyk7XG4xMTE3Olx0XHRpZiAoZXJyb3IgXHUwMDNjIDApXG4xMTE4Olx0XHRcdHJldHVybiBlcnJvcjtcbjExMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1NzIKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogNzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFZGSU8gRHJpdmVyIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYGZzbF9tY19idXNfcHJvYmVgIGlzIHRoZSBlbnRyeSBwb2ludCwgY29ubmVjdGluZyB0byB0aGUgcGh5c2ljYWwgTUMgZmlybXdhcmUgYW5kIHNldHRpbmcgdXAgY2hpbGQgZGV2aWNlcy4gVGhlbiwgYHZmaW9fZnNsX21jYCBpcyB0aGUgVkZJTyBkcml2ZXIgdGFpbG9yZWQgZm9yIGRldmljZXMgb24gdGhlIGBmc2wtbWNgIGJ1cywgc3BlY2lmaWNhbGx5IHRob3NlIGZvdW5kIGluIEZyZWVzY2FsZS9OWFAgUW9ySVEgRFBBQTIgaGFyZHdhcmUuCgpJIG5lZWQgdG8gY29uZmlybSwgYnV0IEkgYmVsaWV2ZSB0aGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhpcyBraW5kIG9mIGhhcmR3YXJlLCBhIExheWVyc2NhcGUgU29DIGZlYXR1cmUsIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4gU2VjdGlvbiAyIGNvbmZpcm1zIHRoaXM6ICYjMzQ7VmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMuLi4gcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSYjMzQ7IHdpdGggYSB0YXJnZXQgb2YgJiMzNDthbWQ2NCYjMzQ7LgoKU3BlY2lmaWNhbGx5LCB0aGlzIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNgIGZpbGUgaXMgdGhlIFZGSU8gZHJpdmVyIGZvciB0aGUgYGZzbC1tY2AgYnVzIGRldmljZXMuIFRoaXMgaXMgTlhQIExheWVyc2NhcGUgaGFyZHdhcmUsIGFuIEFSTS9Qb3dlclBDIFNvQyBmZWF0dXJlLCBhbmQgbm90IHNvbWV0aGluZyB0aGF0IGV4aXN0cyBvciBpcyBlbXVsYXRlZCBvbiBhbWQ2NCBpbiBzdGFuZGFyZCBRRU1VLiBJbiBmYWN0LCBgRlNMX01DX0JVU2Agd29uJiMzOTt0IGV2ZW4gYmUgZW5hYmxlZCBvbiBhbWQ2NCB1bmxlc3MgYENPTVBJTEVfVEVTVGAgaXMgZW5hYmxlZCwgYW5kIGV2ZW4gdGhlbiwgeW91IG5lZWQgdGhlIGFjdHVhbCBoYXJkd2FyZSByZWdpc3RlcnMvZmlybXdhcmUgdG8gZXZlbiBnZXQgYW4gYGZzbC1tY2AgZGV2aWNlIHRvIHByb2JlLiBXaXRob3V0IGEgdmFsaWQgYGZzbC1tY2AgZGV2aWNlLCB0aGUgYHZmaW9fZnNsX21jYCBkcml2ZXIgd29uJiMzOTt0IGV2ZXIgcHJvYmUgb3IgY3JlYXRlIGAvZGV2L3ZmaW8vKmAgbm9kZXMuCgpTbywgbGV0JiMzOTtzIHNlZSBpZiBJIG1pc3NlZCBhbnkgb3RoZXIgZW50cnkgcG9pbnQuIGB2ZmlvX2ZzbF9tY19tbWFwX21taW9gIGlzIHRoZSBrZXkgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGB2ZmlvX2ZzbF9tY19tbWFwYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgYHZmaW9fZnNsX21jX29wc2Agc3RydWN0LiBUaGlzIGB2ZmlvX2ZzbF9tY19vcHNgIHN0cnVjdCBpcyBvbmx5IHJlZ2lzdGVyZWQgd2hlbiBhbiBgZnNsX21jX2RldmljZWAgcHJvYmVzIHdpdGggYHZmaW9fZnNsX21jX2RyaXZlcmAuICBCZWNhdXNlIHRoZXNlIGBmc2xfbWNfZGV2aWNlYCBpbnN0YW5jZXMgb25seSBleGlzdCBvbiByZWFsIE5YUCBMYXllcnNjYXBlIGhhcmR3YXJlIChvciwgaHlwb3RoZXRpY2FsbHksIGlmIFFFTVUgZW11bGF0ZWQgaXQg4oCTIHdoaWNoIGl0IGRvZXNuJiMzOTt0LCBlc3BlY2lhbGx5IG5vdCBvbiBhbWQ2NCksIHRoaXMgY29kZSBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAsIGxpa2UgYW1kNjQvUUVNVS9HQ0UuCgpMZXQmIzM5O3Mgc3VtbWFyaXplIHRvIGJlIHRob3JvdWdoOgotICoqVGFyZ2V0IEFyY2hpdGVjdHVyZToqKiBhbWQ2NC4KLSAqKk1vZGlmaWVkIEZpbGU6KiogYGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY2AuCi0gKipNb2RpZmllZCBGdW5jdGlvbjoqKiBgdmZpb19mc2xfbWNfbW1hcF9tbWlvYC4KLSAqKkRyaXZlcjoqKiBGcmVlc2NhbGUgUW9ySVEgRFBBQTIgVkZJTyBkcml2ZXIuCi0gKipSZWFjaGFiaWxpdHk6KiogU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGR1ZSB0byB0aGUgbmVlZCBmb3IgTlhQIExheWVyc2NhcGUgU29DL0RQQUEyIGhhcmR3YXJlIGFuZCBgZnNsLW1jYCBidXMsIG5vbmUgb2Ygd2hpY2ggaXMgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudHMsIGVzcGVjaWFsbHkgbm90IG9uIGFtZDY0LgoKVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgbm90IHdvcnRoIGZ1enppbmcuIFRoZSByZXN1bHQgbmVlZHMgdG8gYmUgYFdvcnRoRnV6emluZzogZmFsc2VgLCB3aXRoIGVtcHR5IGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgbGlzdHMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IGB2ZmlvX2ZzbF9tY2AgcmVxdWlyZXMgTlhQIExheWVyc2NhcGUgRFBBQTIgaGFyZHdhcmUsIHdoaWNoIGlzIGFic2VudCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9hbWQ2NCkuIEkmIzM5O2xsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMgaW5mb3JtYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMsIHdoaWNoIGlzIHRoZSBWRklPIGRyaXZlciBmb3IgTlhQIFFvcklRIERQQUEyIChmc2wtbWMgYnVzKSBTb0MgZGV2aWNlcy4gVGhpcyBoYXJkd2FyZSBpcyBzcGVjaWZpYyB0byBOWFAgTGF5ZXJzY2FwZSBTb0NzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYywgd2hpY2ggaXMgdGhlIFZGSU8gZHJpdmVyIGZvciBOWFAgUW9ySVEgRFBBQTIgKGZzbC1tYyBidXMpIFNvQyBkZXZpY2VzLiBUaGlzIGhhcmR3YXJlIGlzIHNwZWNpZmljIHRvIE5YUCBMYXllcnNjYXBlIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDE0OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxMzoyMS45MzQxMDAwOTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI1NTI1MDQ1MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYywgd2hpY2ggaXMgdGhlIFZGSU8gZHJpdmVyIGZvciBOWFAgUW9ySVEgRFBBQTIgKGZzbC1tYyBidXMpIFNvQyBkZXZpY2VzLiBUaGlzIGhhcmR3YXJlIGlzIHNwZWNpZmljIHRvIE5YUCBMYXllcnNjYXBlIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjEzOjIxLjkzNDEwODM3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI0OTQ1NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGViMzAyMDE4Y2E5NWRiYWFhN2MwYTc0ZGJjMzc2Mzg2YThhNmMzNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCA0IDE0OjEzOjIxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY1xcbmluZGV4IGI0YzM5NTgyMDFiMjUuLjlmYzZmOTEzNmUwMWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXFxuKysrIGIvZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jXFxuQEAgLTM2OSw5ICszNjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZnNsX21jX21tYXBfbW1pbyhzdHJ1Y3QgdmZpb19mc2xfbWNfcmVnaW9uIHJlZ2lvbixcXG4gXFx0aWYgKCFyZWdpb25fY2FjaGVhYmxlKVxcbiBcXHRcXHR2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpO1xcbiBcXG4tXFx0dm1hLVxcdTAwM2V2bV9wZ29mZiA9IChyZWdpb24uYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSArIHBnb2ZmO1xcbi1cXG4tXFx0cmV0dXJuIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIHZtYS1cXHUwMDNldm1fcGdvZmYsXFxuK1xcdHJldHVybiByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LFxcbitcXHRcXHRcXHQgICAgICAgKHJlZ2lvbi5hZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpICsgcGdvZmYsXFxuIFxcdFxcdFxcdCAgICAgICBzaXplLCB2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjEzOjIyLjQ2MDQxMTY5N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTEyMDI2MTcyODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYywgd2hpY2ggaXMgdGhlIFZGSU8gZHJpdmVyIGZvciBOWFAgUW9ySVEgRFBBQTIgKGZzbC1tYyBidXMpIFNvQyBkZXZpY2VzLiBUaGlzIGhhcmR3YXJlIGlzIHNwZWNpZmljIHRvIE5YUCBMYXllcnNjYXBlIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGViMzAyMDE4Y2E5NWRiYWFhN2MwYTc0ZGJjMzc2Mzg2YThhNmMzNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMTQ6MTM6MjEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMgYi9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNcbmluZGV4IGI0YzM5NTgyMDFiMjUuLjlmYzZmOTEzNmUwMWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNcbisrKyBiL2RyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuY1xuQEAgLTM2OSw5ICszNjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZnNsX21jX21tYXBfbW1pbyhzdHJ1Y3QgdmZpb19mc2xfbWNfcmVnaW9uIHJlZ2lvbixcbiBcdGlmICghcmVnaW9uX2NhY2hlYWJsZSlcbiBcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXG4tXHR2bWEtXHUwMDNldm1fcGdvZmYgPSAocmVnaW9uLmFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpICsgcGdvZmY7XG4tXG4tXHRyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fcGdvZmYsXG4rXHRyZXR1cm4gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LFxuK1x0XHRcdCAgICAgICAocmVnaW9uLmFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpICsgcGdvZmYsXG4gXHRcdFx0ICAgICAgIHNpemUsIHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjEzOjIyLjQ2MDQxNDQ0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNjgyODc5MDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaGl0cyBgZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLCBlc3BlY2lhbGx5IHdpdGggdGhhdCBgZnNsLW1jYCBpZGVudGlmaWVyLiBJIG5lZWQgYSBxdWljayBvdmVydmlldyBvZiB3aGF0IGBmc2wtbWNgIGV2ZW4gKmlzKiBpbiB0aGlzIGNvbnRleHQuIElzIGl0IGhhcmR3YXJlLXNwZWNpZmljPyBBbiBhYnN0cmFjdGlvbiBsYXllcj9cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLiBJJ2xsIHJlYWNoIGZvciBgZ3JlcHBlcmAgKG9yIGV2ZW4gYSBgcmVhZC1maWxlYCB3b3VsZCBkbyBpZiBpdCdzIHNtYWxsIGVub3VnaCkgYW5kIGltbWVkaWF0ZWx5IGxvb2sgYXQgdGhlIGBLY29uZmlnYCBhbmQvb3IgdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSBgZHJpdmVycy92ZmlvL2ZzbC1tY2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgb3IgYXJjaGl0ZWN0dXJlIHNwZWNpZmljcyB0aGlzIGNvZGUgaXMgdGllZCB0by4gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgaXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGF0Y2gncyBpbXBhY3QuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBhZmZlY3RzIGEgd2lkZSByYW5nZSBvZiBwbGF0Zm9ybXMgb3IgaXMgbGltaXRlZCB0byBhIG5hcnJvdyBvbmUuIEtub3dsZWRnZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNhbiBnaXZlIG1lIHNvbWUgaWRlYSBob3cgaW1wb3J0YW50IHRoaXMgY2hhbmdlIGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg1LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxMzozNC4xNDMyOTgwMzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA2NTU3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiVkZJT19GU0xfTUNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy92ZmlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9NYWtlZmlsZT0xNj1vYmotJChDT05GSUdfVkZJT19NREVWKSArPSBtZGV2L1xcbmRyaXZlcnMvdmZpby9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfVkZJT19GU0xfTUMpICs9IGZzbC1tYy9cXG5kcml2ZXJzL3ZmaW8vTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1ZGSU9fQ0RYKSArPSBjZHgvXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWc9MT1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIEZTTF9NQyBidXMgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy0zLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZzo0OmNvbmZpZyBWRklPX0ZTTF9NQ1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvS2NvbmZpZy01LVxcdHRyaXN0YXRlIFxcXCJWRklPIHN1cHBvcnQgZm9yIFFvcklRIERQQUEyIGZzbC1tYyBidXMgZGV2aWNlc1xcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvTWFrZWZpbGU9Mz12ZmlvLWZzbC1tYy15IDo9IHZmaW9fZnNsX21jLm8gdmZpb19mc2xfbWNfaW50ci5vXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19WRklPX0ZTTF9NQykgKz0gdmZpby1mc2wtbWMub1xcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTk3PXN0YXRpYyB2b2lkIHZmaW9fZnNsX21jX2Nsb3NlX2RldmljZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0xMTItXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNm1jX2NvbnQtXFx1MDAzZWRldixcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MTEzOlxcdFxcdFxcdCBcXFwiVkZJT19GU0xfTUM6IHJlc2V0IGRldmljZSBoYXMgZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTExNC1cXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz0xMjA9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19pb2N0bF9nZXRfcmVnaW9uX2luZm8oc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMTMxLVxcdC8qIG1hcCBvZmZzZXQgdG8gdGhlIHBoeXNpY2FsIGFkZHJlc3MgICovXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjEzMjpcXHRpbmZvLVxcdTAwM2VvZmZzZXQgPSBWRklPX0ZTTF9NQ19JTkRFWF9UT19PRkZTRVQoaW5mby1cXHUwMDNlaW5kZXgpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0xMzMtXFx0aW5mby1cXHUwMDNlc2l6ZSA9IHZkZXYtXFx1MDAzZXJlZ2lvbnNbaW5mby1cXHUwMDNlaW5kZXhdLnNpemU7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9MjM0PXN0YXRpYyBzc2l6ZV90IHZmaW9fZnNsX21jX3JlYWQoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIGNoYXIgX191c2VyICpidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMjM4LVxcdFxcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UsIHZkZXYpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzoyMzk6XFx0dW5zaWduZWQgaW50IGluZGV4ID0gVkZJT19GU0xfTUNfT0ZGU0VUX1RPX0lOREVYKCpwcG9zKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MjQwOlxcdGxvZmZfdCBvZmYgPSAqcHBvcyBcXHUwMDI2IFZGSU9fRlNMX01DX09GRlNFVF9NQVNLO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0yNDEtXFx0c3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldiA9IHZkZXYtXFx1MDAzZW1jX2RldjtcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz0zMTI9c3RhdGljIHNzaXplX3QgdmZpb19mc2xfbWNfd3JpdGUoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzE3LVxcdFxcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UsIHZkZXYpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzozMTg6XFx0dW5zaWduZWQgaW50IGluZGV4ID0gVkZJT19GU0xfTUNfT0ZGU0VUX1RPX0lOREVYKCpwcG9zKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6MzE5OlxcdGxvZmZfdCBvZmYgPSAqcHBvcyBcXHUwMDI2IFZGSU9fRlNMX01DX09GRlNFVF9NQVNLO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy0zMjAtXFx0c3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldiA9IHZkZXYtXFx1MDAzZW1jX2RldjtcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYz0zNTM9c3RhdGljIGludCB2ZmlvX2ZzbF9tY19tbWFwX21taW8oc3RydWN0IHZmaW9fZnNsX21jX3JlZ2lvbiByZWdpb24sXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzYwLVxcdHBnb2ZmID0gdm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDI2XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjM2MTpcXHRcXHQoKDFVIFxcdTAwM2NcXHUwMDNjIChWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKSkgLSAxKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzYyLVxcdGJhc2UgPSBwZ29mZiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTM3Nz1zdGF0aWMgaW50IHZmaW9fZnNsX21jX21tYXAoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzg0LVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzozODU6XFx0aW5kZXggPSB2bWEtXFx1MDAzZXZtX3Bnb2ZmIFxcdTAwM2VcXHUwMDNlIChWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtMzg2LVxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQxNT1zdGF0aWMgaW50IHZmaW9fZnNsX21jX2J1c19ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQyNi1cXHRcXHRpZiAoZGV2aWNlX3NldF9kcml2ZXJfb3ZlcnJpZGUoZGV2LCB2ZmlvX2ZzbF9tY19vcHMubmFtZSkpXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQyNzpcXHRcXHRcXHRkZXZfd2FybihkZXYsIFxcXCJWRklPX0ZTTF9NQzogU2V0dGluZyBkcml2ZXIgb3ZlcnJpZGUgZm9yIGRldmljZSBpbiBkcHJjICVzIGZhaWxlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDI4LVxcdFxcdFxcdFxcdCBkZXZfbmFtZShcXHUwMDI2bWNfY29udC1cXHUwMDNlZGV2KSk7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQyOS1cXHRcXHRlbHNlXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjQzMDpcXHRcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJWRklPX0ZTTF9NQzogU2V0dGluZyBkcml2ZXIgb3ZlcnJpZGUgZm9yIGRldmljZSBpbiBkcHJjICVzXFxcXG5cXFwiLFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MzEtXFx0XFx0XFx0XFx0IGRldl9uYW1lKFxcdTAwMjZtY19jb250LVxcdTAwM2VkZXYpKTtcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00MzYtXFx0XFx0aWYgKG1jX2RydiBcXHUwMDI2XFx1MDAyNiBtY19kcnYgIT0gXFx1MDAyNnZmaW9fZnNsX21jX2RyaXZlcilcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NDM3OlxcdFxcdFxcdGRldl93YXJuKGRldiwgXFxcIlZGSU9fRlNMX01DOiBPYmplY3QgJXMgYm91bmQgdG8gZHJpdmVyICVzIHdoaWxlIERQUkMgYm91bmQgdG8gdmZpby1mc2wtbWNcXFxcblxcXCIsXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQzOC1cXHRcXHRcXHRcXHQgZGV2X25hbWUoZGV2KSwgbWNfZHJ2LVxcdTAwM2Vkcml2ZXIubmFtZSk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NDQ0PXN0YXRpYyBpbnQgdmZpb19mc2xfbWNfaW5pdF9kZXZpY2Uoc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NjQtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0NjU6XFx0XFx0ZGV2X2VycihcXHUwMDI2bWNfZGV2LVxcdTAwM2VkZXYsIFxcXCJWRklPX0ZTTF9NQzogRmFpbGVkIHRvIHNldHVwIERQUkMgKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDY2LVxcdFxcdGdvdG8gb3V0X25jX3VucmVnO1xcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jPTQ3NT1zdGF0aWMgaW50IHZmaW9fZnNsX21jX3NjYW5fY29udGFpbmVyKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19kZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDg0LVxcdFxcdGRldl9lcnIoXFx1MDAyNm1jX2Rldi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0ODU6XFx0XFx0XFx0XFxcIlZGSU9fRlNMX01DOiBDb250YWluZXIgc2Nhbm5pbmcgZmFpbGVkICglZClcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jLTQ4Ni1cXHRcXHRkcHJjX3JlbW92ZV9kZXZpY2VzKG1jX2RldiwgTlVMTCwgMCk7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NTI1PXN0YXRpYyBpbnQgdmZpb19mc2xfbWNfcHJvYmUoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldilcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01MzctXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo1Mzg6XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJWRklPX0ZTTF9NQzogRmFpbGVkIHRvIGFkZCB0byB2ZmlvIGdyb3VwXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNTM5LVxcdFxcdGdvdG8gb3V0X3B1dF92ZGV2O1xcbi0tXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmgtNi1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaDo3OiNpZm5kZWYgVkZJT19GU0xfTUNfUFJJVkFURV9IXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6ODojZGVmaW5lIFZGSU9fRlNMX01DX1BSSVZBVEVfSFxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTktXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTA6I2RlZmluZSBWRklPX0ZTTF9NQ19PRkZTRVRfU0hJRlQgICAgNDBcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaDoxMTojZGVmaW5lIFZGSU9fRlNMX01DX09GRlNFVF9NQVNLICgoKHU2NCkoMSkgXFx1MDAzY1xcdTAwM2MgVkZJT19GU0xfTUNfT0ZGU0VUX1NISUZUKSAtIDEpXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmgtMTItXFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tY19wcml2YXRlLmg6MTM6I2RlZmluZSBWRklPX0ZTTF9NQ19PRkZTRVRfVE9fSU5ERVgob2ZmKSAoKG9mZikgXFx1MDAzZVxcdTAwM2UgVkZJT19GU0xfTUNfT0ZGU0VUX1NISUZUKVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTE0LVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oOjE1OiNkZWZpbmUgVkZJT19GU0xfTUNfSU5ERVhfVE9fT0ZGU0VUKGluZGV4KVxcdFxcXFxcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaDoxNjpcXHQoKHU2NCkoaW5kZXgpIFxcdTAwM2NcXHUwMDNjIFZGSU9fRlNMX01DX09GRlNFVF9TSElGVClcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jX3ByaXZhdGUuaC0xNy1cXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oPTQ3PXZvaWQgdmZpb19mc2xfbWNfaXJxc19jbGVhbnVwKHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UgKnZkZXYpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oLTQ4LVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWNfcHJpdmF0ZS5oOjQ5OiNlbmRpZiAvKiBWRklPX0ZTTF9NQ19QUklWQVRFX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTM6MzQuMTkzOTY1MTI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAyMTUzMTQxODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNoZWNraW5nIHRoZSBWRklPIEZTTC1NQyBLY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gZG8gaXMgdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL0tjb25maWdgIGZpbGUuIEknbSBhc3N1bWluZyB0aGVyZSdzIHNvbWUgY29uZmlndXJhdGlvbiBsb2dpYywgbWF5YmUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBvciBldmVuIGp1c3Qgc29tZSBiYXNpYyBkb2N1bWVudGF0aW9uIEkgbmVlZCB0byByZXZpZXcuIEdpdmVuIHRoZSBjb250ZXh0LCBJIGV4cGVjdCB0aGlzIGBLY29uZmlnYCBmaWxlIGlzIGdvaW5nIHRvIGRpY3RhdGUgdGhlIGJ1aWxkIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBWRklPIChWaXJ0dWFsIEZ1bmN0aW9uIEkvTykgZHJpdmVyIGZvciB0aGUgRnJlZXNjYWxlIChub3cgTlhQKSBNdWx0aS1Db3JlIChNQykgYXJjaGl0ZWN0dXJlLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHdoZXRoZXIgc3BlY2lmaWMgTUMgaGFyZHdhcmUgaXMgc3VwcG9ydGVkLCBhbnkgbmVjZXNzYXJ5IGRldmljZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucywgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBmZWF0dXJlcyBvciBkcml2ZXJzLCBhbmQgaG93IHRoZSBWRklPIGRyaXZlciBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgYnJvYWRlciBmcmFtZXdvcmsuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyBvciBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2Ygb3IgYWRqdXN0LiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzczLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTM6NTQuNDA5MjgyODQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjkzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy92ZmlvL2ZzbC1tYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0bWVudSBcXFwiVkZJTyBzdXBwb3J0IGZvciBGU0xfTUMgYnVzIGRldmljZXNcXFwiXFxuICAgMjpcXHRcXHRkZXBlbmRzIG9uIEZTTF9NQ19CVVNcXG4gICAzOlxcdFxcbiAgIDQ6XFx0Y29uZmlnIFZGSU9fRlNMX01DXFxuICAgNTpcXHRcXHR0cmlzdGF0ZSBcXFwiVkZJTyBzdXBwb3J0IGZvciBRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRldmljZXNcXFwiXFxuICAgNjpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbiAgIDc6XFx0XFx0aGVscFxcbiAgIDg6XFx0XFx0ICBEcml2ZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBWRklPIFFvcklRIERQQUEyIGZzbC1tY1xcbiAgIDk6XFx0XFx0ICAoTWFuYWdlbWVudCBDb21wbGV4KSBkZXZpY2VzLiBUaGlzIGlzIHJlcXVpcmVkIHRvIHBhc3N0aHJvdWdoXFxuICAxMDpcXHRcXHQgIGZzbC1tYyBidXMgZGV2aWNlcyB1c2luZyB0aGUgVkZJTyBmcmFtZXdvcmsuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBkbyBoZXJlLCBzYXkgTi5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0ZW5kbWVudVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxMzo1NC40MDkzNTU3NTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDA1OTg5NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipWRklPX0ZTTF9NQyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBgVkZJT19GU0xfTUNgIHJlbGllcyBvbiBgRlNMX01DX0JVU2AsIHJpZ2h0PyBHb3QgaXQuIE5vdywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIHRyYWNlIHRoYXQgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgYEZTTF9NQ19CVVNgIGlzIGRlZmluZWQgYW5kIGhvdyBpdCdzIGNvbmZpZ3VyZWQuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0sIHRoZSBiZXN0IHdheSB0byBkbyB0aGF0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGltZSB0byBzdGFydCBzZWFyY2hpbmcgYWNyb3NzIHRoZSB3aG9sZSBrZXJuZWwgc291cmNlIHRyZWUgdG8gbG9jYXRlIHdoZXJlIGBGU0xfTUNfQlVTYCBpcyBkZWNsYXJlZCBhbmQgc2VlIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGl0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg1NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTQ6MDEuODE1MzUwODJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc5MDQ1Nzk2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRlNMX01DX0JVU1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy03LVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9LY29uZmlnOjg6Y29uZmlnIEZTTF9NQ19CVVNcXG5kcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZy05LVxcdGJvb2wgXFxcIlFvcklRIERQQUEyIGZzbC1tYyBidXMgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNDowNC42MDU4MjA0MTFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDcyNDAyMTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGF0IEtjb25maWcgZmlsZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBGU0wtTUMgQnVzIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBGU0wtTUMgKEZyZWVzY2FsZS9OWFAgTXVsdGljb3JlIENvbW11bmljYXRpb24pIGJ1cyBkcml2ZXIgY29uZmlndXJhdGlvbi4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBsb29rIGlzIGBkcml2ZXJzL2J1cy9mc2wtbWMvS2NvbmZpZ2AuIFRoaXMgS2NvbmZpZyBmaWxlIGlzIHRoZSBjZW50cmFsIHNvdXJjZSBmb3IgYWxsIG9mIHRoZSBjb25maWd1cmFibGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhhdCBzcGVjaWZpYyBkcml2ZXIuIEl04oCZcyB3aGVyZSBhbGwgdGhlIGtleSBzZXR0aW5ncywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBkZXBlbmRlbmNpZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LiBGcm9tIHRoZXJlIEknbGwgYmUgYWJsZSB0byB3b3JrIHRocm91Z2ggc3BlY2lmaWMgb3B0aW9ucyBhbmQgc2VlIGhvdyB0aGluZ3MgYXJlIHNldCB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE0NywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjE1LjMyOTg1MjE1OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIERQQUEyIGZzbC1tYyBidXNcXG4gICA0OlxcdCNcXG4gICA1OlxcdCMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy5cXG4gICA2OlxcdCNcXG4gICA3OlxcdFxcbiAgIDg6XFx0Y29uZmlnIEZTTF9NQ19CVVNcXG4gICA5OlxcdFxcdGJvb2wgXFxcIlFvcklRIERQQUEyIGZzbC1tYyBidXMgZHJpdmVyXFxcIlxcbiAgMTA6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiAoQVJDSF9MQVlFUlNDQVBFIHx8IChDT01QSUxFX1RFU1QgXFx1MDAyNlxcdTAwMjYgKEFSTSB8fCBBUk02NCB8fCBYODZfTE9DQUxfQVBJQyB8fCBQUEMpKSlcXG4gIDExOlxcdFxcdHNlbGVjdCBHRU5FUklDX01TSV9JUlFcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgRHJpdmVyIHRvIGVuYWJsZSB0aGUgYnVzIGluZnJhc3RydWN0dXJlIGZvciB0aGUgUW9ySVEgRFBBQTJcXG4gIDE0OlxcdFxcdCAgYXJjaGl0ZWN0dXJlLiAgVGhlIGZzbC1tYyBidXMgZHJpdmVyIGhhbmRsZXMgZGlzY292ZXJ5IG9mXFxuICAxNTpcXHRcXHQgIERQQUEyIG9iamVjdHMgKHdoaWNoIGFyZSByZXByZXNlbnRlZCBhcyBMaW51eCBkZXZpY2VzKSBhbmRcXG4gIDE2OlxcdFxcdCAgYmluZGluZyBvYmplY3RzIHRvIGRyaXZlcnMuXFxuICAxNzpcXHRcXG4gIDE4OlxcdGNvbmZpZyBGU0xfTUNfVUFQSV9TVVBQT1JUXFxuICAxOTpcXHRcXHRib29sIFxcXCJNYW5hZ2VtZW50IENvbXBsZXggKE1DKSB1c2Vyc3BhY2Ugc3VwcG9ydFxcXCJcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gRlNMX01DX0JVU1xcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBQcm92aWRlcyB1c2Vyc3BhY2Ugc3VwcG9ydCBmb3IgaW50ZXJyb2dhdGluZywgY3JlYXRpbmcsIGRlc3Ryb3lpbmcgb3JcXG4gIDIzOlxcdFxcdCAgY29uZmlndXJpbmcgRFBBQTIgb2JqZWN0cyBleHBvcnRlZCBieSB0aGUgTWFuYWdlbWVudCBDb21wbGV4LlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNDoxNS4zMzAwNzQ0ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjQ4NDMyNzczNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTG9naWMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkgc2VlIHRoaXMgY29uZGl0aW9uYWwgZGVwZW5kZW5jeTogYGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IChBUkNIX0xBWUVSU0NBUEUgfHwgKENPTVBJTEVfVEVTVCBcdTAwMjZcdTAwMjYgKEFSTSB8fCBBUk02NCB8fCBYODZfTE9DQUxfQVBJQyB8fCBQUEMpKSlgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhpcyBsb29rcyBsaWtlIGEgY29uZmlndXJhdGlvbiBjaGVjayB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLCBsaWtlbHkgYW4gZW1iZWRkZWQgTGludXggYnVpbGQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgXCJPRlwiIChsaWtlbHkgXCJEZXZpY2UgVHJlZVwiKSBpbXBsaWVzIGhlcmUuIEl0J3MgcGFpcmVkIHdpdGggZWl0aGVyIGEgTGF5ZXJzY2FwZSBhcmNoaXRlY3R1cmUgb3IsIGluIGEgdGVzdC9jb21waWxlIHNjZW5hcmlvLCBzcGVjaWZpYyBhcmNoaXRlY3R1cmVzIGxpa2UgQVJNLCBBUk02NCwgWDg2IHdpdGggbG9jYWwgQVBJQywgb3IgUG93ZXJQQy4gVGhpcyBuYXJyb3dzIGRvd24gdGhlIHBvc3NpYmxlIGhhcmR3YXJlIHNpZ25pZmljYW50bHkuXG5cbk5vdywgbXkgcHJpbWFyeSBxdWVzdGlvbiBpcyBhYm91dCBgRlNMX01DYC4gU3BlY2lmaWNhbGx5LCB3aGF0IGlzIGFuIFwiRlNMX01DIGJ1cyBkZXZpY2VcIj8gSXMgaXQgcmVsYXRlZCB0byB0aGUgRnJlZXNjYWxlIChub3cgTlhQKSBNdWx0aS1Db3JlIGZyYW1ld29yaz8gVGhhdCByaW5ncyBhIGJlbGwsIGJ1dCBJIG5lZWQgdG8gY29uZmlybS5cblxuVGhlIGNyaXRpY2FsIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBGU0xfTUMgYnVzIG9yIGRldmljZXMgcmVsYXRlZCB0byB0aGUgXCJWRklPX0ZTTF9NQ1wiIGNhbiBldmVuIGJlIGFjY2Vzc2VkIG9yIHByb2JlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIElmIHRoZXkgYXJlIGhhcmR3YXJlLWRlcGVuZGVudCwgaXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgb25seSBnb2luZyB0byBiZSBhY2Nlc3NpYmxlIHdpdGggYSBkZWRpY2F0ZWQgcGxhdGZvcm0uIE9yIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIHNpbXVsYXRlLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIHZpcnR1YWxpemVkIGFtZDY0IGVudmlyb25tZW50LiBJIG5lZWQgdG8ga25vdyB0aGUgZXh0ZW50IHRvIHdoaWNoIHRoaXMgbWlnaHQgYmUgcG9zc2libGUuXG5cblNvLCBsZXQncyBzaGlmdCBnZWFycyBhbmQgZXhhbWluZSB0aGUgZGV2aWNlIGNyZWF0aW9uIG9yIHByb2JpbmcgcHJvY2Vzcy4gSSBuZWVkIHRvIGtub3cgaG93IHRoZXNlIGZzbC1tYyBidXMgZGV2aWNlcyBhcmUgY3JlYXRlZCBvciBkaXNjb3ZlcmVkLiBMZXQncyBkbyBhIHF1aWNrIGdyZXAuIEknbGwgc2VhcmNoIGZvciB0aGUgYGZzbF9tY19idXNfdHlwZWAgc3RyaW5nLCBhbmQgcmVsYXRlZCBjb2RlLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaWRlbnRpZmllcyBhbmQgcmVnaXN0ZXJzIHRoZXNlIGRldmljZXMuIFRoYXQgc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUgYW5kIGhvdyB0aGVzZSBhcmUgaGFuZGxlZCBhdCBydW50aW1lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIHRyZWUgaW50ZWdyYXRpb24gYW5kIGhvdyBkZXZpY2Utc3BlY2lmaWMgZHJpdmVycyB3b3JrIHdpdGggdGhlIGJ1cyBmcmFtZXdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3MjYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNDoyMS44MTQ0MDgzOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mjg0MTI4ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNsX21jX2J1c190eXBlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MzI0PUFUVFJJQlVURV9HUk9VUFMoZnNsX21jX2J1cyk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMjUtXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzozMjY6Y29uc3Qgc3RydWN0IGJ1c190eXBlIGZzbF9tY19idXNfdHlwZSA9IHtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTMyNy1cXHQubmFtZSA9IFxcXCJmc2wtbWNcXFwiLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0zMzgtfTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjMzOTpFWFBPUlRfU1lNQk9MX0dQTChmc2xfbWNfYnVzX3R5cGUpO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMzQwLVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz00NjE9aW50IF9fZnNsX21jX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZnNsX21jX2RyaXZlciAqbWNfZHJpdmVyLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy00NjYtXFx0bWNfZHJpdmVyLVxcdTAwM2Vkcml2ZXIub3duZXIgPSBvd25lcjtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjQ2NzpcXHRtY19kcml2ZXItXFx1MDAzZWRyaXZlci5idXMgPSBcXHUwMDI2ZnNsX21jX2J1c190eXBlO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNDY4LVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz03NTI9aW50IGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03ODktXFx0bWNfZGV2LVxcdTAwM2VkZXYucGFyZW50ID0gcGFyZW50X2RldjtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjc5MDpcXHRtY19kZXYtXFx1MDAzZWRldi5idXMgPSBcXHUwMDI2ZnNsX21jX2J1c190eXBlO1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzkxLVxcdG1jX2Rldi1cXHUwMDNlZGV2LnJlbGVhc2UgPSBmc2xfbWNfZGV2aWNlX3JlbGVhc2U7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTExNzU9c3RhdGljIHZvaWQgZnNsX21jX2J1c19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE4My1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjExODQ6XFx0YnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXFx1MDAyNmZzbF9tY19uYik7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTg1LVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjYwPXN0YXRpYyBpbnQgX19pbml0IGZzbF9tY19idXNfZHJpdmVyX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI2My1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyNjQ6XFx0ZXJyb3IgPSBidXNfcmVnaXN0ZXIoXFx1MDAyNmZzbF9tY19idXNfdHlwZSk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjY1LVxcdGlmIChlcnJvciBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTI5Mi1lcnJvcl9jbGVhbnVwX2J1czpcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjEyOTM6XFx0YnVzX3VucmVnaXN0ZXIoXFx1MDAyNmZzbF9tY19idXNfdHlwZSk7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjk0LVxcbi0tXFxuZHJpdmVycy9pb21tdS9pb21tdS5jPTE4Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGJ1c190eXBlICogY29uc3QgaW9tbXVfYnVzZXNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xOTQtI2lmZGVmIENPTkZJR19GU0xfTUNfQlVTXFxuZHJpdmVycy9pb21tdS9pb21tdS5jOjE5NTpcXHRcXHUwMDI2ZnNsX21jX2J1c190eXBlLFxcbmRyaXZlcnMvaW9tbXUvaW9tbXUuYy0xOTYtI2VuZGlmXFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NDQ0PXN0YXRpYyBpbnQgdmZpb19mc2xfbWNfaW5pdF9kZXZpY2Uoc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NTctXFx0dmRldi1cXHUwMDNlbmIubm90aWZpZXJfY2FsbCA9IHZmaW9fZnNsX21jX2J1c19ub3RpZmllcjtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM6NDU4OlxcdHJldCA9IGJ1c19yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcXHUwMDI2dmRldi1cXHUwMDNlbmIpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NTktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00NzAtb3V0X25jX3VucmVnOlxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYzo0NzE6XFx0YnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoXFx1MDAyNmZzbF9tY19idXNfdHlwZSwgXFx1MDAyNnZkZXYtXFx1MDAzZW5iKTtcXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMtNDcyLVxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmM9NDkyPXN0YXRpYyB2b2lkIHZmaW9fZnNsX3VuaW5pdF9kZXZpY2Uoc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy00OTktXFx0ZHByY19jbGVhbnVwKG1jX2Rldik7XFxuZHJpdmVycy92ZmlvL2ZzbC1tYy92ZmlvX2ZzbF9tYy5jOjUwMDpcXHRidXNfdW5yZWdpc3Rlcl9ub3RpZmllcihcXHUwMDI2ZnNsX21jX2J1c190eXBlLCBcXHUwMDI2dmRldi1cXHUwMDNlbmIpO1xcbmRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYy01MDEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaD0zNTY9aW50IG1jX3NlbmRfY29tbWFuZChzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgc3RydWN0IGZzbF9tY19jb21tYW5kICpjbWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaC0zNTgtI2lmZGVmIENPTkZJR19GU0xfTUNfQlVTXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaDozNTk6I2RlZmluZSBkZXZfaXNfZnNsX21jKF9kZXYpICgoX2RldiktXFx1MDAzZWJ1cyA9PSBcXHUwMDI2ZnNsX21jX2J1c190eXBlKVxcbmluY2x1ZGUvbGludXgvZnNsL21jLmgtMzYwLXUzMiBmc2xfbWNfZ2V0X21zaV9pZChzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9mc2wvbWMuaD00Mjg9c3RydWN0IGZzbF9tY19kZXZpY2UgKmZzbF9tY19nZXRfZW5kcG9pbnQoc3RydWN0IGZzbF9tY19kZXZpY2UgKm1jX2RldixcXG4tLVxcbmluY2x1ZGUvbGludXgvZnNsL21jLmgtNDMwLVxcbmluY2x1ZGUvbGludXgvZnNsL21jLmg6NDMxOmV4dGVybiBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgZnNsX21jX2J1c190eXBlO1xcbmluY2x1ZGUvbGludXgvZnNsL21jLmgtNDMyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNDoyNC40NDI4MzAxNzZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg3ODE0MjU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgZnNsLW1jLWJ1cy5jYCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgdGhlc2UgZnNsLW1jIGRldmljZXMgYXJlIGJyb3VnaHQgdG8gbGlmZS4gSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gYGZzbC1tYy1idXMuY2AgdG8gdHJhY2UgdGhlIGluc3RhbnRpYXRpb24gcHJvY2Vzcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxNDoxNDoyNi4zMjA5Nzc4MDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTUyNDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZzbF9tY19idXNfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9idXMvZnNsLW1jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAwNT1zdGF0aWMgaW50IGZzbF9tY19maXJtd2FyZV9jaGVjayhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM1LS8qXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMDM2OiAqIGZzbF9tY19idXNfcHJvYmUgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gdGhlIHJvb3QgTUMgYnVzIGlzIGJlaW5nXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM3LSAqIGFkZGVkXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMDM4LSAqL1xcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6MTAzOTpzdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTEwNDAte1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYz0xMjEwPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9tY19idXNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE2LVxcdFxcdCAgIH0sXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzoxMjE3OlxcdC5wcm9iZSA9IGZzbF9tY19idXNfcHJvYmUsXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMjE4LVxcdC5yZW1vdmUgPSBmc2xfbWNfYnVzX3JlbW92ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTQ6MjYuMzc0MTM4NTExWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNTg2NDc2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgQnVzIERyaXZlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBmc2xfbWNfYnVzX2RyaXZlcmAgaXMgYmVoYXZpbmcuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIGdvaW5nIHRvIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBkZXZpY2UgbWF0Y2ggdGFibGUuIFRoYXQncyB0aGUgY29yZSBvZiBob3cgdGhpcyBkcml2ZXIgaWRlbnRpZmllcyBhbmQgYmluZHMgdG8gdGhlIGNvcnJlY3QgaGFyZHdhcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQgdGhlIGludGVuZGVkIGRldmljZXMgYXJlLCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gb2J2aW91cyBtaXNtYXRjaGVzIG9yIHBvdGVudGlhbCBjb25mbGljdHMgbHVya2luZyBpbiB0aGVyZS4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHRyYWNpbmcgYW55IHBvdGVudGlhbCBpc3N1ZXMuIExldCdzIHNlZSB3aGF0IHRoZSB0YWJsZSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDU5MSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjI4LjQzMjc5MDYwN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjAwOlxcdH07XFxuMTIwMTpcXHRcXG4xMjAyOlxcdE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGZzbF9tY19idXNfbWF0Y2hfdGFibGUpO1xcbjEyMDM6XFx0XFxuMTIwNDpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGZzbF9tY19idXNfYWNwaV9tYXRjaF90YWJsZVtdID0ge1xcbjEyMDU6XFx0XFx0e1xcXCJOWFAwMDA4XFxcIiwgMCB9LFxcbjEyMDY6XFx0XFx0eyB9XFxuMTIwNzpcXHR9O1xcbjEyMDg6XFx0TU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBmc2xfbWNfYnVzX2FjcGlfbWF0Y2hfdGFibGUpO1xcbjEyMDk6XFx0XFxuMTIxMDpcXHRzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmc2xfbWNfYnVzX2RyaXZlciA9IHtcXG4xMjExOlxcdFxcdC5kcml2ZXIgPSB7XFxuMTIxMjpcXHRcXHRcXHQgICAubmFtZSA9IFxcXCJmc2xfbWNfYnVzXFxcIixcXG4xMjEzOlxcdFxcdFxcdCAgIC5wbSA9IE5VTEwsXFxuMTIxNDpcXHRcXHRcXHQgICAub2ZfbWF0Y2hfdGFibGUgPSBmc2xfbWNfYnVzX21hdGNoX3RhYmxlLFxcbjEyMTU6XFx0XFx0XFx0ICAgLmFjcGlfbWF0Y2hfdGFibGUgPSBmc2xfbWNfYnVzX2FjcGlfbWF0Y2hfdGFibGUsXFxuMTIxNjpcXHRcXHRcXHQgICB9LFxcbjEyMTc6XFx0XFx0LnByb2JlID0gZnNsX21jX2J1c19wcm9iZSxcXG4xMjE4OlxcdFxcdC5yZW1vdmUgPSBmc2xfbWNfYnVzX3JlbW92ZSxcXG4xMjE5OlxcdFxcdC5zaHV0ZG93biA9IGZzbF9tY19idXNfcmVtb3ZlLFxcbjEyMjA6XFx0fTtcXG4xMjIxOlxcdFxcbjEyMjI6XFx0c3RhdGljIGludCBmc2xfbWNfYnVzX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuMTIyMzpcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpXFxuMTIyNDpcXHR7XFxuMTIyNTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhO1xcbjEyMjY6XFx0XFx0c3RydWN0IHJlc291cmNlICpyZXM7XFxuMTIyNzpcXHRcXHR2b2lkIF9faW9tZW0gKmZzbF9tY19yZWdzO1xcbjEyMjg6XFx0XFxuMTIyOTpcXHRcXHRpZiAoYWN0aW9uICE9IEJVU19OT1RJRllfQUREX0RFVklDRSlcXG4xMjMwOlxcdFxcdFxcdHJldHVybiAwO1xcbjEyMzE6XFx0XFxuMTIzMjpcXHRcXHRpZiAoIW9mX21hdGNoX2RldmljZShmc2xfbWNfYnVzX21hdGNoX3RhYmxlLCBkZXYpIFxcdTAwMjZcXHUwMDI2XFxuMTIzMzpcXHRcXHQgICAgIWFjcGlfbWF0Y2hfZGV2aWNlKGZzbF9tY19idXNfYWNwaV9tYXRjaF90YWJsZSwgZGV2KSlcXG4xMjM0OlxcdFxcdFxcdHJldHVybiAwO1xcbjEyMzU6XFx0XFxuMTIzNjpcXHRcXHRyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UodG9fcGxhdGZvcm1fZGV2aWNlKGRldiksIElPUkVTT1VSQ0VfTUVNLCAxKTtcXG4xMjM3OlxcdFxcdGlmICghcmVzKVxcbjEyMzg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTIzOTpcXHRcXG4xMjQwOlxcdFxcdGZzbF9tY19yZWdzID0gaW9yZW1hcChyZXMtXFx1MDAzZXN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpO1xcbjEyNDE6XFx0XFx0aWYgKCFmc2xfbWNfcmVncylcXG4xMjQyOlxcdFxcdFxcdHJldHVybiAwO1xcbjEyNDM6XFx0XFxuMTI0NDpcXHRcXHQvKlxcbjEyNDU6XFx0XFx0ICogTWFrZSBzdXJlIHRoYXQgdGhlIE1DIGZpcm13YXJlIGlzIHBhdXNlZCBiZWZvcmUgdGhlIElPTU1VIHNldHVwIGZvclxcbjEyNDY6XFx0XFx0ICogaXQgaXMgZG9uZSBvciBvdGhlcndpc2UgdGhlIGZpcm13YXJlIHdpbGwgY3Jhc2ggcmlnaHQgYWZ0ZXIgdGhlIFNNTVVcXG4xMjQ3OlxcdFxcdCAqIGdldHMgcHJvYmVkIGFuZCBlbmFibGVkLlxcbjEyNDg6XFx0XFx0ICovXFxuMTI0OTpcXHRcXHR3cml0ZWwocmVhZGwoZnNsX21jX3JlZ3MgKyBGU0xfTUNfR0NSMSkgfCAoR0NSMV9QMV9TVE9QIHwgR0NSMV9QMl9TVE9QKSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTQ6MjguNDMyOTA2NDk3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyNjY3NzEyMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgdmZpb19mc2xfbWMgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHZmaW9fZnNsX21jYCBkcml2ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5LCBwYXJ0aWN1bGFybHkgaG93IGl0J3MgcmVnaXN0ZXJlZCB3aXRoIHRoZSBrZXJuZWwgYW5kIGhvdyB0aGUgcHJvYmUgbWVjaGFuaXNtIHdvcmtzLiBJdCdzIGxpa2VseSBpbnZvbHZlZCB3aXRoIFZGSU8gYW5kIEZyZWVzY2FsZSdzIChvciwgbW9yZSBsaWtlbHksIE5YUCdzKSBNQyAoTXVsdGljb3JlKSBhcmNoaXRlY3R1cmUsIGJhc2VkIG9uIHRoZSBuYW1pbmcgY29udmVudGlvbi4gVGhlIGltbWVkaWF0ZSBwbGFuIGlzIHRvIGV4YW1pbmUgdGhlIHNvdXJjZSBjb2RlOyBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNgIGZpbGUgYW5kIGRpc3NlY3QgaXQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRldGFpbHMgSSBuZWVkIHRvIHN0YXJ0IGJ1aWxkaW5nIGEgbWVudGFsIG1vZGVsIG9mIHRoaXMgZHJpdmVyJ3Mgcm9sZSBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYyNiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTQ6MzMuNjk5NjgwOTgzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcbiA1MjE6XFx0XFx0LyogZGV2aWNlX3NldCBpcyByZWxlYXNlZCBieSB2ZmlvIGNvcmUgaWYgQGluaXQgZmFpbHMgKi9cXG4gNTIyOlxcdFxcdHJldHVybiB2ZmlvX2ZzbF9tY19pbml0X2RldmljZSh2ZGV2KTtcXG4gNTIzOlxcdH1cXG4gNTI0OlxcdFxcbiA1MjU6XFx0c3RhdGljIGludCB2ZmlvX2ZzbF9tY19wcm9iZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxcbiA1MjY6XFx0e1xcbiA1Mjc6XFx0XFx0c3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldjtcXG4gNTI4OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtY19kZXYtXFx1MDAzZWRldjtcXG4gNTI5OlxcdFxcdGludCByZXQ7XFxuIDUzMDpcXHRcXG4gNTMxOlxcdFxcdHZkZXYgPSB2ZmlvX2FsbG9jX2RldmljZSh2ZmlvX2ZzbF9tY19kZXZpY2UsIHZkZXYsIGRldixcXG4gNTMyOlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2dmZpb19mc2xfbWNfb3BzKTtcXG4gNTMzOlxcdFxcdGlmIChJU19FUlIodmRldikpXFxuIDUzNDpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUih2ZGV2KTtcXG4gNTM1OlxcdFxcbiA1MzY6XFx0XFx0cmV0ID0gdmZpb19yZWdpc3Rlcl9ncm91cF9kZXYoXFx1MDAyNnZkZXYtXFx1MDAzZXZkZXYpO1xcbiA1Mzc6XFx0XFx0aWYgKHJldCkge1xcbiA1Mzg6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJWRklPX0ZTTF9NQzogRmFpbGVkIHRvIGFkZCB0byB2ZmlvIGdyb3VwXFxcXG5cXFwiKTtcXG4gNTM5OlxcdFxcdFxcdGdvdG8gb3V0X3B1dF92ZGV2O1xcbiA1NDA6XFx0XFx0fVxcbiA1NDE6XFx0XFxuIDU0MjpcXHRcXHRyZXQgPSB2ZmlvX2ZzbF9tY19zY2FuX2NvbnRhaW5lcihtY19kZXYpO1xcbiA1NDM6XFx0XFx0aWYgKHJldClcXG4gNTQ0OlxcdFxcdFxcdGdvdG8gb3V0X2dyb3VwX2RldjtcXG4gNTQ1OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIHZkZXYpO1xcbiA1NDY6XFx0XFx0cmV0dXJuIDA7XFxuIDU0NzpcXHRcXG4gNTQ4OlxcdG91dF9ncm91cF9kZXY6XFxuIDU0OTpcXHRcXHR2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2KTtcXG4gNTUwOlxcdG91dF9wdXRfdmRldjpcXG4gNTUxOlxcdFxcdHZmaW9fcHV0X2RldmljZShcXHUwMDI2dmRldi1cXHUwMDNldmRldik7XFxuIDU1MjpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NTM6XFx0fVxcbiA1NTQ6XFx0XFxuIDU1NTpcXHRzdGF0aWMgdm9pZCB2ZmlvX2ZzbF9tY19yZWxlYXNlX2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcXG4gNTU2OlxcdHtcXG4gNTU3OlxcdFxcdHN0cnVjdCB2ZmlvX2ZzbF9tY19kZXZpY2UgKnZkZXYgPVxcbiA1NTg6XFx0XFx0XFx0Y29udGFpbmVyX29mKGNvcmVfdmRldiwgc3RydWN0IHZmaW9fZnNsX21jX2RldmljZSwgdmRldik7XFxuIDU1OTpcXHRcXG4gNTYwOlxcdFxcdHZmaW9fZnNsX3VuaW5pdF9kZXZpY2UodmRldik7XFxuIDU2MTpcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZ2ZGV2LVxcdTAwM2VpZ2F0ZSk7XFxuIDU2MjpcXHR9XFxuIDU2MzpcXHRcXG4gNTY0OlxcdHN0YXRpYyB2b2lkIHZmaW9fZnNsX21jX3JlbW92ZShzdHJ1Y3QgZnNsX21jX2RldmljZSAqbWNfZGV2KVxcbiA1NjU6XFx0e1xcbiA1NjY6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1jX2Rldi1cXHUwMDNlZGV2O1xcbiA1Njc6XFx0XFx0c3RydWN0IHZmaW9fZnNsX21jX2RldmljZSAqdmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbiA1Njg6XFx0XFxuIDU2OTpcXHRcXHR2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2KTtcXG4gNTcwOlxcdFxcdGRwcmNfcmVtb3ZlX2RldmljZXMobWNfZGV2LCBOVUxMLCAwKTtcXG4gNTcxOlxcdFxcdHZmaW9fcHV0X2RldmljZShcXHUwMDI2dmRldi1cXHUwMDNldmRldik7XFxuIDU3MjpcXHR9XFxuIDU3MzpcXHRcXG4gNTc0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmZpb19kZXZpY2Vfb3BzIHZmaW9fZnNsX21jX29wcyA9IHtcXG4gNTc1OlxcdFxcdC5uYW1lXFx0XFx0PSBcXFwidmZpby1mc2wtbWNcXFwiLFxcbiA1NzY6XFx0XFx0LmluaXRcXHRcXHQ9IHZmaW9fZnNsX21jX2luaXRfZGV2LFxcbiA1Nzc6XFx0XFx0LnJlbGVhc2VcXHQ9IHZmaW9fZnNsX21jX3JlbGVhc2VfZGV2LFxcbiA1Nzg6XFx0XFx0Lm9wZW5fZGV2aWNlXFx0PSB2ZmlvX2ZzbF9tY19vcGVuX2RldmljZSxcXG4gNTc5OlxcdFxcdC5jbG9zZV9kZXZpY2VcXHQ9IHZmaW9fZnNsX21jX2Nsb3NlX2RldmljZSxcXG4gNTgwOlxcdFxcdC5pb2N0bFxcdFxcdD0gdmZpb19mc2xfbWNfaW9jdGwsXFxuIDU4MTpcXHRcXHQuZ2V0X3JlZ2lvbl9pbmZvX2NhcHMgPSB2ZmlvX2ZzbF9tY19pb2N0bF9nZXRfcmVnaW9uX2luZm8sXFxuIDU4MjpcXHRcXHQucmVhZFxcdFxcdD0gdmZpb19mc2xfbWNfcmVhZCxcXG4gNTgzOlxcdFxcdC53cml0ZVxcdFxcdD0gdmZpb19mc2xfbWNfd3JpdGUsXFxuIDU4NDpcXHRcXHQubW1hcFxcdFxcdD0gdmZpb19mc2xfbWNfbW1hcCxcXG4gNTg1OlxcdFxcdC5iaW5kX2lvbW11ZmRcXHQ9IHZmaW9faW9tbXVmZF9waHlzaWNhbF9iaW5kLFxcbiA1ODY6XFx0XFx0LnVuYmluZF9pb21tdWZkXFx0PSB2ZmlvX2lvbW11ZmRfcGh5c2ljYWxfdW5iaW5kLFxcbiA1ODc6XFx0XFx0LmF0dGFjaF9pb2FzXFx0PSB2ZmlvX2lvbW11ZmRfcGh5c2ljYWxfYXR0YWNoX2lvYXMsXFxuIDU4ODpcXHRcXHQuZGV0YWNoX2lvYXNcXHQ9IHZmaW9faW9tbXVmZF9waHlzaWNhbF9kZXRhY2hfaW9hcyxcXG4gNTg5OlxcdH07XFxuIDU5MDpcXHRcXG4gNTkxOlxcdHN0YXRpYyBzdHJ1Y3QgZnNsX21jX2RyaXZlciB2ZmlvX2ZzbF9tY19kcml2ZXIgPSB7XFxuIDU5MjpcXHRcXHQucHJvYmVcXHRcXHQ9IHZmaW9fZnNsX21jX3Byb2JlLFxcbiA1OTM6XFx0XFx0LnJlbW92ZVxcdFxcdD0gdmZpb19mc2xfbWNfcmVtb3ZlLFxcbiA1OTQ6XFx0XFx0LmRyaXZlclxcdD0ge1xcbiA1OTU6XFx0XFx0XFx0Lm5hbWVcXHQ9IFxcXCJ2ZmlvLWZzbC1tY1xcXCIsXFxuIDU5NjpcXHRcXHR9LFxcbiA1OTc6XFx0XFx0LmRyaXZlcl9tYW5hZ2VkX2RtYSA9IHRydWUsXFxuIDU5ODpcXHR9O1xcbiA1OTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjMzLjY5OTgwNDc4M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDQxNjcyODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGZzbF9tYyBEcml2ZXIgYW5kIGl0cyBFbnZpcm9ubWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhhdCB0aGUgYGZzbF9tY19kcml2ZXJgIGlzIHJlZ2lzdGVyZWQsIGl0cyBwcm9iZSBmdW5jdGlvbiB0aWVkIHRvIHRoZSBgZnNsLW1jYCBidXMuIE15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2hhdCBleGFjdGx5ICppcyogdGhpcyBgZnNsLW1jYCBidXM/XCIgQSBxdWljayBzZWFyY2ggY29uZmlybXMgaXQncyB0aGUgXCJRb3JJUSBEUEFBMiBmc2wtbWMgYnVzIGRyaXZlcixcIiB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggRnJlZXNjYWxlL05YUCdzIHByb3ByaWV0YXJ5IExheWVyc2NhcGUgUW9ySVEgRFBBQTIgKERhdGEgUGF0aCBBY2NlbGVyYXRpb24gQXJjaGl0ZWN0dXJlIEdlbiAyKSBNYW5hZ2VtZW50IENvbXBsZXggKE1DKSBoYXJkd2FyZS4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgU29DIGFyY2hpdGVjdHVyZSwgdHlwaWNhbGx5IEFSTSBvciBQb3dlclBDLCB0aG91Z2ggSSd2ZSBzZWVuIExheWVyc2NhcGUgaW4gdGhlIG1peCB0b28uXG5cbk5vdywgbXkgbmV4dCBxdWVzdGlvbjogaXMgdGhlcmUgYW55IGVtdWxhdGlvbiBvZiB0aGlzIGJ1cyBhdmFpbGFibGUgaW4gc3RhbmRhcmQgUUVNVSBvbiB4ODZfNjQgb3IgYW1kNjQ/IFRoZSBhbnN3ZXIgaXMgbm8uIFFFTVUgZG9lc24ndCBvZmZlciBhbnkgZW11bGF0aW9uIGZvciB0aGUgTlhQIExheWVyc2NhcGUgRFBBQTIgTWFuYWdlbWVudCBDb21wbGV4LiBJbiBmYWN0LCBvbiB4ODZfNjQsIHRoZSBgRlNMX01DX0JVU2AgY29tcG9uZW50IGlzIG9ubHkgY29tcGlsZWQgaWYgdGhlIGBDT01QSUxFX1RFU1RgIGZsYWcgaXMgc2V0LiBEaWdnaW5nIGludG8gdGhlIEtjb25maWcsIGl0IHNlZW1zIGl0IGRlcGVuZHMgb24gYE9GYCAoT3BlbiBGaXJtd2FyZS9EZXZpY2UgVHJlZSkgYW5kLCBvbiB4ODZfNjQsIGBPRmAgaXMgKm9ubHkqIGVuYWJsZWQgaW4gdGhlIGBDT01QSUxFX1RFU1RgIGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgbm90IGF0IGFsbCwgdW5sZXNzIGBDT01QSUxFX1RFU1RgIGlzIHNldCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBtYXRjaGVzLCB3aGljaCBpcyBlaXRoZXIgcGh5c2ljYWwgTlhQIFFvcklRIERQQUEyIFNvQyBoYXJkd2FyZSBvciBhbiBBQ1BJIG1hdGNoIFwiTlhQMDAwOFwiIHdpdGggYWN0dWFsIE1DIGZpcm13YXJlIHJlZ2lzdGVycy5cblxuU28sIHJlYWxpc3RpY2FsbHksIHRoaXMgY29kZSBpcyBkZXNpZ25lZCB0byBydW4gb24gc3BlY2lmaWMgaGFyZHdhcmUuIEdpdmVuIHRoaXMgaGFyZHdhcmUgZGVwZW5kZW5jeSwgSSdtIHRoaW5raW5nLCBcIklzIHRoZXJlIGFueXRoaW5nIHRoYXQgbWlnaHQgKmR5bmFtaWNhbGx5KiBjcmVhdGUgYW4gZnNsLW1jIGRldmljZSwgcGVyaGFwcyB2aXJ0dWFsbHk/IFNvbWV0aGluZyB0aGF0IGNhbiBiZSBicm91Z2h0IHVwIHdpdGhvdXQgZGVkaWNhdGVkIGhhcmR3YXJlP1wiIFRvIGludmVzdGlnYXRlIHRoYXQsIEknbGwgbmVlZCB0byBzZWFyY2ggdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGNhbGxzIHRvIGBmc2xfbWNfZGV2aWNlX2FkZGAgYW5kIHNlZSB3aGVyZSB0aGlzIG1pZ2h0IGJlIGNhbGxlZCBmcm9tLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjM4Ljc0MTQ4MjQzNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NDgwNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmc2xfbWNfZGV2aWNlX2FkZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2J1cy9mc2wtbWMvZHByYy1kcml2ZXIuYz0xNjk9c3RhdGljIHZvaWQgZnNsX21jX29ial9kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19idXNfZGV2LFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTgyLVxcdH0gZWxzZSB7XFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmM6MTgzOlxcdFxcdGVycm9yID0gZnNsX21jX2RldmljZV9hZGQob2JqX2Rlc2MsIE5VTEwsIFxcdTAwMjZtY19idXNfZGV2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9idXMvZnNsLW1jL2RwcmMtZHJpdmVyLmMtMTg0LVxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNoaWxkX2Rldik7XFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jPTczNz1zdGF0aWMgdm9pZCBmc2xfbWNfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy03NTEtICovXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYzo3NTI6aW50IGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtNzUzLVxcdFxcdCAgICAgIHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLFxcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy04NzktfVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM6ODgwOkVYUE9SVF9TWU1CT0xfR1BMKGZzbF9tY19kZXZpY2VfYWRkKTtcXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jLTg4MS1cXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmM9MTAzOT1zdGF0aWMgaW50IGZzbF9tY19idXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmMtMTE1Ny1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLWJ1cy5jOjExNTg6XFx0ZXJyb3IgPSBmc2xfbWNfZGV2aWNlX2FkZChcXHUwMDI2b2JqX2Rlc2MsIG1jX2lvLCBcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXHUwMDI2bWNfYnVzX2Rldik7XFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuYy0xMTU5LVxcdGlmIChlcnJvciBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL2J1cy9mc2wtbWMvZnNsLW1jLXByaXZhdGUuaD02MDE9c3RydWN0IGZzbF9tY19idXMge1xcbi0tXFxuZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1wcml2YXRlLmgtNjEzLVxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oOjYxNDppbnQgX19tdXN0X2NoZWNrIGZzbF9tY19kZXZpY2VfYWRkKHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2MgKm9ial9kZXNjLFxcbmRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtcHJpdmF0ZS5oLTYxNS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZnNsX21jX2lvICptY19pbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTQ6NDEuMDA2Mjk2OTU1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1NzUzNzg0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBmc2wtbWMtYnVzIFByb2JlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgdGhpcyBgZnNsX21jX2J1c19wcm9iZWAgZnVuY3Rpb24gd29ya3MuIEl0IHNlZW1zIGxpa2UgdGhlIHByb2JlIGlzIHRyaWdnZXJlZCBieSBhIGBwbGF0Zm9ybV9kZXZpY2VgIHRoYXQgbWF0Y2hlcyBlaXRoZXIgdGhlIGBmc2xfbWNfYnVzX21hdGNoX3RhYmxlYCBvciwgaWYgd2UncmUgb24gQUNQSSwgdGhlIGBmc2xfbWNfYnVzX2FjcGlfbWF0Y2hfdGFibGVgLiBJJ20gc3BlY2lmaWNhbGx5IG5vdGluZyB0aGF0IFwiTlhQMDAwOFwiIGlzIGluIHRoZSBBQ1BJIHRhYmxlLiBUaGF0IHRlbGxzIG1lIHdoYXQga2luZCBvZiBkZXZpY2UgdGhlIHN5c3RlbSdzIGxpa2VseSB0YXJnZXRpbmcuXG5cblJpZ2h0LCBzbyBpbiB0aGlzIHByb2JlIGZ1bmN0aW9uLCB0aGF0J3Mgd2hlcmUgdGhlIGRyaXZlciAqYWN0dWFsbHkqIGludGVyYWN0cyB3aXRoIHRoZSBNQyBmaXJtd2FyZSBvbiB0aGUgaGFyZHdhcmUuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgZnNsX21jX2J1c19wcm9iZWAgZnVuY3Rpb24gaXRzZWxmLiBJJ2xsIG9wZW4gdXAgYGRyaXZlcnMvYnVzL2ZzbC1tYy9mc2wtbWMtYnVzLmNgIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgaW4gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODUyLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjQ1LjU4MTY4MTAwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDM1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9idXMvZnNsLW1jL2ZzbC1tYy1idXMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDQwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDQwOlxcdHtcXG4xMDQxOlxcdFxcdHN0cnVjdCBmc2xfbWNfb2JqX2Rlc2Mgb2JqX2Rlc2M7XFxuMTA0MjpcXHRcXHRpbnQgZXJyb3I7XFxuMTA0MzpcXHRcXHRzdHJ1Y3QgZnNsX21jICptYztcXG4xMDQ0OlxcdFxcdHN0cnVjdCBmc2xfbWNfZGV2aWNlICptY19idXNfZGV2ID0gTlVMTDtcXG4xMDQ1OlxcdFxcdHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvID0gTlVMTDtcXG4xMDQ2OlxcdFxcdGludCBjb250YWluZXJfaWQ7XFxuMTA0NzpcXHRcXHRwaHlzX2FkZHJfdCBtY19wb3J0YWxfcGh5c19hZGRyO1xcbjEwNDg6XFx0XFx0dTMyIG1jX3BvcnRhbF9zaXplLCBtY19zdHJlYW1faWQ7XFxuMTA0OTpcXHRcXHRzdHJ1Y3QgcmVzb3VyY2UgKnBsYXRfcmVzO1xcbjEwNTA6XFx0XFxuMTA1MTpcXHRcXHRtYyA9IGRldm1fa3phbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKm1jKSwgR0ZQX0tFUk5FTCk7XFxuMTA1MjpcXHRcXHRpZiAoIW1jKVxcbjEwNTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTA1NDpcXHRcXG4xMDU1OlxcdFxcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jKTtcXG4xMDU2OlxcdFxcbjEwNTc6XFx0XFx0cGxhdF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpO1xcbjEwNTg6XFx0XFx0aWYgKHBsYXRfcmVzKSB7XFxuMTA1OTpcXHRcXHRcXHRtYy1cXHUwMDNlZnNsX21jX3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGxhdF9yZXMpO1xcbjEwNjA6XFx0XFx0XFx0aWYgKElTX0VSUihtYy1cXHUwMDNlZnNsX21jX3JlZ3MpKVxcbjEwNjE6XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIobWMtXFx1MDAzZWZzbF9tY19yZWdzKTtcXG4xMDYyOlxcdFxcdH1cXG4xMDYzOlxcdFxcbjEwNjQ6XFx0XFx0aWYgKG1jLVxcdTAwM2Vmc2xfbWNfcmVncykge1xcbjEwNjU6XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0FDUEkpIFxcdTAwMjZcXHUwMDI2ICFkZXZfb2Zfbm9kZShcXHUwMDI2cGRldi1cXHUwMDNlZGV2KSkge1xcbjEwNjY6XFx0XFx0XFx0XFx0bWNfc3RyZWFtX2lkID0gcmVhZGwobWMtXFx1MDAzZWZzbF9tY19yZWdzICsgRlNMX01DX0ZBUFIpO1xcbjEwNjc6XFx0XFx0XFx0XFx0LypcXG4xMDY4OlxcdFxcdFxcdFxcdCAqIEhXIE9ScyB0aGUgUEwgYW5kIEJNVCBiaXQsIHBsYWNlcyB0aGUgcmVzdWx0IGluIGJpdFxcbjEwNjk6XFx0XFx0XFx0XFx0ICogMTQgb2YgdGhlIFN0cmVhbUlEIGFuZCBPUnMgaW4gdGhlIElDSUQuIENhbGN1bGF0ZSBpdFxcbjEwNzA6XFx0XFx0XFx0XFx0ICogYWNjb3JkaW5nbHkuXFxuMTA3MTpcXHRcXHRcXHRcXHQgKi9cXG4xMDcyOlxcdFxcdFxcdFxcdG1jX3N0cmVhbV9pZCA9IChtY19zdHJlYW1faWQgXFx1MDAyNiAweGZmZmYpIHxcXG4xMDczOlxcdFxcdFxcdFxcdFxcdCgobWNfc3RyZWFtX2lkIFxcdTAwMjYgKE1DX0ZBUFJfUEwgfCBNQ19GQVBSX0JNVCkpID9cXG4xMDc0OlxcdFxcdFxcdFxcdFxcdFxcdEJJVCgxNCkgOiAwKTtcXG4xMDc1OlxcdFxcdFxcdFxcdGVycm9yID0gYWNwaV9kbWFfY29uZmlndXJlX2lkKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMTA3NjpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBERVZfRE1BX0NPSEVSRU5ULFxcbjEwNzc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm1jX3N0cmVhbV9pZCk7XFxuMTA3ODpcXHRcXHRcXHRcXHRpZiAoZXJyb3IgPT0gLUVQUk9CRV9ERUZFUilcXG4xMDc5OlxcdFxcdFxcdFxcdFxcdHJldHVybiBlcnJvcjtcXG4xMDgwOlxcdFxcdFxcdFxcdGlmIChlcnJvcilcXG4xMDgxOlxcdFxcdFxcdFxcdFxcdGRldl93YXJuKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuMTA4MjpcXHRcXHRcXHRcXHRcXHRcXHQgXFxcImZhaWxlZCB0byBjb25maWd1cmUgZG1hOiAlZC5cXFxcblxcXCIsXFxuMTA4MzpcXHRcXHRcXHRcXHRcXHRcXHQgZXJyb3IpO1xcbjEwODQ6XFx0XFx0XFx0fVxcbjEwODU6XFx0XFxuMTA4NjpcXHRcXHRcXHQvKlxcbjEwODc6XFx0XFx0XFx0ICogU29tZSBib290bG9hZGVycyBwYXVzZSB0aGUgTUMgZmlybXdhcmUgYmVmb3JlIGJvb3RpbmcgdGhlXFxuMTA4ODpcXHRcXHRcXHQgKiBrZXJuZWwgc28gdGhhdCBNQyB3aWxsIG5vdCBjYXVzZSBmYXVsdHMgYXMgc29vbiBhcyB0aGVcXG4xMDg5OlxcdFxcdFxcdCAqIFNNTVUgcHJvYmVzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZXJlJ3Mgbm8gY29uZmlndXJhdGlvblxcbjEwOTA6XFx0XFx0XFx0ICogaW4gcGxhY2UgZm9yIE1DLlxcbjEwOTE6XFx0XFx0XFx0ICogQXQgdGhpcyBwb2ludCBNQyBzaG91bGQgaGF2ZSBhbGwgaXRzIFNNTVUgc2V0dXAgZG9uZSBzbyBtYWtlXFxuMTA5MjpcXHRcXHRcXHQgKiBzdXJlIGl0IGlzIHJlc3VtZWQuXFxuMTA5MzpcXHRcXHRcXHQgKi9cXG4xMDk0OlxcdFxcdFxcdHdyaXRlbChyZWFkbChtYy1cXHUwMDNlZnNsX21jX3JlZ3MgKyBGU0xfTUNfR0NSMSkgXFx1MDAyNlxcbjEwOTU6XFx0XFx0XFx0XFx0ICAgICAofihHQ1IxX1AxX1NUT1AgfCBHQ1IxX1AyX1NUT1ApKSxcXG4xMDk2OlxcdFxcdFxcdCAgICAgICBtYy1cXHUwMDNlZnNsX21jX3JlZ3MgKyBGU0xfTUNfR0NSMSk7XFxuMTA5NzpcXHRcXHR9XFxuMTA5ODpcXHRcXG4xMDk5OlxcdFxcdGVycm9yID0gZnNsX21jX2Zpcm13YXJlX2NoZWNrKHBkZXYpO1xcbjExMDA6XFx0XFx0aWYgKGVycm9yKVxcbjExMDE6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExMDI6XFx0XFxuMTEwMzpcXHRcXHQvKlxcbjExMDQ6XFx0XFx0ICogR2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgTUMgcG9ydGFsIGZvciB0aGUgcm9vdCBEUFJDOlxcbjExMDU6XFx0XFx0ICovXFxuMTEwNjpcXHRcXHRwbGF0X3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7XFxuMTEwNzpcXHRcXHRpZiAoIXBsYXRfcmVzKVxcbjExMDg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdG1jX3BvcnRhbF9waHlzX2FkZHIgPSBwbGF0X3Jlcy1cXHUwMDNlc3RhcnQ7XFxuMTExMTpcXHRcXHRtY19wb3J0YWxfc2l6ZSA9IHJlc291cmNlX3NpemUocGxhdF9yZXMpO1xcbjExMTI6XFx0XFx0bWNfcG9ydGFsX2Jhc2VfcGh5c19hZGRyID0gbWNfcG9ydGFsX3BoeXNfYWRkciBcXHUwMDI2IH4weDNmZmZmZmY7XFxuMTExMzpcXHRcXG4xMTE0OlxcdFxcdGVycm9yID0gZnNsX2NyZWF0ZV9tY19pbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBtY19wb3J0YWxfcGh5c19hZGRyLFxcbjExMTU6XFx0XFx0XFx0XFx0XFx0IG1jX3BvcnRhbF9zaXplLCBOVUxMLFxcbjExMTY6XFx0XFx0XFx0XFx0XFx0IEZTTF9NQ19JT19BVE9NSUNfQ09OVEVYVF9QT1JUQUwsIFxcdTAwMjZtY19pbyk7XFxuMTExNzpcXHRcXHRpZiAoZXJyb3IgXFx1MDAzYyAwKVxcbjExMTg6XFx0XFx0XFx0cmV0dXJuIGVycm9yO1xcbjExMTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE0OjQ1LjU4MTg4NzIwMloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODkwNDY1ODI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBWRklPIERyaXZlciBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgZnNsX21jX2J1c19wcm9iZWAgaXMgdGhlIGVudHJ5IHBvaW50LCBjb25uZWN0aW5nIHRvIHRoZSBwaHlzaWNhbCBNQyBmaXJtd2FyZSBhbmQgc2V0dGluZyB1cCBjaGlsZCBkZXZpY2VzLiBUaGVuLCBgdmZpb19mc2xfbWNgIGlzIHRoZSBWRklPIGRyaXZlciB0YWlsb3JlZCBmb3IgZGV2aWNlcyBvbiB0aGUgYGZzbC1tY2AgYnVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgZm91bmQgaW4gRnJlZXNjYWxlL05YUCBRb3JJUSBEUEFBMiBoYXJkd2FyZS5cblxuSSBuZWVkIHRvIGNvbmZpcm0sIGJ1dCBJIGJlbGlldmUgdGhlIGRvY3VtZW50YXRpb24gc3RhdGVzIHRoaXMga2luZCBvZiBoYXJkd2FyZSwgYSBMYXllcnNjYXBlIFNvQyBmZWF0dXJlLCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuIFNlY3Rpb24gMiBjb25maXJtcyB0aGlzOiBcIlZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzLi4uIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVVcIiB3aXRoIGEgdGFyZ2V0IG9mIFwiYW1kNjRcIi5cblxuU3BlY2lmaWNhbGx5LCB0aGlzIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNgIGZpbGUgaXMgdGhlIFZGSU8gZHJpdmVyIGZvciB0aGUgYGZzbC1tY2AgYnVzIGRldmljZXMuIFRoaXMgaXMgTlhQIExheWVyc2NhcGUgaGFyZHdhcmUsIGFuIEFSTS9Qb3dlclBDIFNvQyBmZWF0dXJlLCBhbmQgbm90IHNvbWV0aGluZyB0aGF0IGV4aXN0cyBvciBpcyBlbXVsYXRlZCBvbiBhbWQ2NCBpbiBzdGFuZGFyZCBRRU1VLiBJbiBmYWN0LCBgRlNMX01DX0JVU2Agd29uJ3QgZXZlbiBiZSBlbmFibGVkIG9uIGFtZDY0IHVubGVzcyBgQ09NUElMRV9URVNUYCBpcyBlbmFibGVkLCBhbmQgZXZlbiB0aGVuLCB5b3UgbmVlZCB0aGUgYWN0dWFsIGhhcmR3YXJlIHJlZ2lzdGVycy9maXJtd2FyZSB0byBldmVuIGdldCBhbiBgZnNsLW1jYCBkZXZpY2UgdG8gcHJvYmUuIFdpdGhvdXQgYSB2YWxpZCBgZnNsLW1jYCBkZXZpY2UsIHRoZSBgdmZpb19mc2xfbWNgIGRyaXZlciB3b24ndCBldmVyIHByb2JlIG9yIGNyZWF0ZSBgL2Rldi92ZmlvLypgIG5vZGVzLlxuXG5TbywgbGV0J3Mgc2VlIGlmIEkgbWlzc2VkIGFueSBvdGhlciBlbnRyeSBwb2ludC4gYHZmaW9fZnNsX21jX21tYXBfbW1pb2AgaXMgdGhlIGtleSBmdW5jdGlvbiBpbiBxdWVzdGlvbiwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYHZmaW9fZnNsX21jX21tYXBgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBgdmZpb19mc2xfbWNfb3BzYCBzdHJ1Y3QuIFRoaXMgYHZmaW9fZnNsX21jX29wc2Agc3RydWN0IGlzIG9ubHkgcmVnaXN0ZXJlZCB3aGVuIGFuIGBmc2xfbWNfZGV2aWNlYCBwcm9iZXMgd2l0aCBgdmZpb19mc2xfbWNfZHJpdmVyYC4gIEJlY2F1c2UgdGhlc2UgYGZzbF9tY19kZXZpY2VgIGluc3RhbmNlcyBvbmx5IGV4aXN0IG9uIHJlYWwgTlhQIExheWVyc2NhcGUgaGFyZHdhcmUgKG9yLCBoeXBvdGhldGljYWxseSwgaWYgUUVNVSBlbXVsYXRlZCBpdCDigJMgd2hpY2ggaXQgZG9lc24ndCwgZXNwZWNpYWxseSBub3Qgb24gYW1kNjQpLCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBkdXJpbmcgZnV6emluZyBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwLCBsaWtlIGFtZDY0L1FFTVUvR0NFLlxuXG5MZXQncyBzdW1tYXJpemUgdG8gYmUgdGhvcm91Z2g6XG4tICoqVGFyZ2V0IEFyY2hpdGVjdHVyZToqKiBhbWQ2NC5cbi0gKipNb2RpZmllZCBGaWxlOioqIGBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmNgLlxuLSAqKk1vZGlmaWVkIEZ1bmN0aW9uOioqIGB2ZmlvX2ZzbF9tY19tbWFwX21taW9gLlxuLSAqKkRyaXZlcjoqKiBGcmVlc2NhbGUgUW9ySVEgRFBBQTIgVkZJTyBkcml2ZXIuXG4tICoqUmVhY2hhYmlsaXR5OioqIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBkdWUgdG8gdGhlIG5lZWQgZm9yIE5YUCBMYXllcnNjYXBlIFNvQy9EUEFBMiBoYXJkd2FyZSBhbmQgYGZzbC1tY2AgYnVzLCBub25lIG9mIHdoaWNoIGlzIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLCBlc3BlY2lhbGx5IG5vdCBvbiBhbWQ2NC5cblxuVGhlcmVmb3JlLCB0aGlzIGNvZGUgaXMgbm90IHdvcnRoIGZ1enppbmcuIFRoZSByZXN1bHQgbmVlZHMgdG8gYmUgYFdvcnRoRnV6emluZzogZmFsc2VgLCB3aXRoIGVtcHR5IGBFbmFibGVDb25maWdzYCBhbmQgYEZvY3VzU3ltYm9sc2AgbGlzdHMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IGB2ZmlvX2ZzbF9tY2AgcmVxdWlyZXMgTlhQIExheWVyc2NhcGUgRFBBQTIgaGFyZHdhcmUsIHdoaWNoIGlzIGFic2VudCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cyAoUUVNVS9hbWQ2NCkuIEknbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggdGhpcyBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1NzIsIk91dHB1dFRva2VucyI6MTIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzM4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTQ6MTU6MTQuNDg2NTUwODE4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgbW9kaWZpZWQgY29kZSBpcyBpbiBkcml2ZXJzL3ZmaW8vZnNsLW1jL3ZmaW9fZnNsX21jLmMsIHdoaWNoIGlzIHRoZSBWRklPIGRyaXZlciBmb3IgTlhQIFFvcklRIERQQUEyIChmc2wtbWMgYnVzKSBTb0MgZGV2aWNlcy4gVGhpcyBoYXJkd2FyZSBpcyBzcGVjaWZpYyB0byBOWFAgTGF5ZXJzY2FwZSBTb0NzIGFuZCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS9HQ0UgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgb24gYW1kNjQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBtb2RpZmllZCBjb2RlIGlzIGluIGRyaXZlcnMvdmZpby9mc2wtbWMvdmZpb19mc2xfbWMuYywgd2hpY2ggaXMgdGhlIFZGSU8gZHJpdmVyIGZvciBOWFAgUW9ySVEgRFBBQTIgKGZzbC1tYyBidXMpIFNvQyBkZXZpY2VzLiBUaGlzIGhhcmR3YXJlIGlzIHNwZWNpZmljIHRvIE5YUCBMYXllcnNjYXBlIFNvQ3MgYW5kIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL0dDRSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBvbiBhbWQ2NC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDE0OjE1OjE0LjQ4NjU4Nzg5OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8fzd6[1] Phase: Running StartedAt: 2026-09-04 14:15:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8fzd6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-04 14:15:26 +0000 UTC FinishedAt: 2026-09-04 14:15:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}